summaryrefslogtreecommitdiff
path: root/lib
AgeCommit message (Collapse)AuthorFilesLines
2017-10-12Better install output (#5714)Todd Gamblin6-20/+17
* Do not call setup_package for fake installs - setup package could fail if ``setup_dependent_environment`` or other routines expected to use executables from dependencies - xpetsc and boost try to get python config variables in `setup_dependent_package`; this would cause them not to be fake-installable * Remove vestigial deptype_query argument to Spec.traverse() - The `deptype_query` argument isn't used anymore -- it's only passed around and causes confusion when calling traverse. - Get rid of it and just keep the `deptypes` argument * Don't print redundant messages when installing dependencies - `do_install()` was originally depth-first recursive, and printed "<pkg> already installed in ..." multiple times for packages as recursive calls encountered them. - For much cleaner output, use spec.traverse(order='post') to install dependencies instead
2017-10-10compilers/clang: add flang (#5503)Christoph Junghans3-10/+16
* compilers/clang: add flang * Update clang.py
2017-10-09Add package for aspell and ass't dictionaries (#3890)George Hartzell2-0/+59
* Add package for aspell and ass't dictionaries Add a package definition for aspell. Add a handful of dictionaries to convince myself that the support for a bunch of dictionaries works. * Flake8 cleanup * Use six's version of urlparse `urlparse` is not python3 friendly. This works around it (stolen from `.../cmd/md5.py`). * Fix incorrect trimming regexp * Clean up dictionary build - more parsimonious use of `which` (`make()` has already been made) - use `sh` instead of `bash` * Use a helper method to generate info for variants I figured out my issues with static methods. I *think* that it this is pythonic. * Convert aspell to an extendable package Convert aspell to be extendable and rework the dictionaries to be extensions. As it stands, there's a great deal of cut and paste in the dictionaries, I'll abstract that out next. The {de,}activate methods copy a great deal of code out of package.py. Perhaps there's a better way.... * Create AspellDictPackage and use it for the dictionaries Reduce the repeated code, pull it into a base class. I'm confused about why 'from spack import *' wasn't more useful in the base class. * Oops, -de & -es should be AspellDictPackages too * Typo: pakcage -> package * Address some commentary * Update copyright dates, 2016->2017
2017-10-09Fix setup for changes to dirty flag (#5592)becker332-3/+7
* Pass dirty arg through setup to setup_package
2017-10-06Don't check package.installed in _mark_concrete if value=True (#5634)scheibelp2-1/+18
* spec and spec.package.spec can refer to different objects in the database. When these two instances of spec differ in terms of the value of the 'concrete' property, Spec._mark_concrete can fail when checking Spec.package.installed (which requires package.spec to be concrete). This skips the check for spec.package.installed when _mark_concrete is called with 'True' (in other words, when the database is marking all specs as being concrete). * add test to confirm this fixes #5293
2017-10-05Fix formatting typo (#5622)Jimmy Tang1-1/+1
2017-10-05Don't change properties on already-installed packages (#5580)scheibelp2-0/+45
* edits to address issues where spack concretization attempts to set properties on already-installed specs * most added checks only need to check if the spec is concrete; they dont also need to check if the package is installed * add test to ensure that patches are not applied to an installed spec * add test to ensure that an error is detected when a dependent requests a dependency constraint which conflicts with a requested installed dependency
2017-10-04Identify the flag handlers feature as beta (#5609)becker331-0/+5
The flag-handling logic added in #4421 may change semantics, so this commit adds a warning to the documentation for this feature.
2017-10-04Fix module loads (#5599)becker331-10/+16
Fixes #5455 All methods within setup_package use an EnvironmentModifications object to control the environment. Those modifications are applied at the end of setup_package. Module loads for the build environment need to be done after the rest of the environment modifications are applied, as otherwise Spack may unset variables set by those modules (for example LD_LIBRARY_PATH).
2017-10-04module files: restricted token expansion + case sensitivity (#5474)Massimiliano Culpo8-22/+170
closes #2884 closes #4684 In #1848 we decided to use `Spec.format` to expand certain tokens in the module file naming scheme or in the environment variable name. Not all the tokens that are allowed in `Spec.format` make sense in module file generation. This PR restricts the set of tokens that can be used, and adds tests to check that the intended behavior is respected. Additionally, the names of environment variables set/modified by module files were, up to now, always uppercase. There are packages though that require case sensitive variable names to honor certain behaviors (e.g. OpenMPI). This PR restricts the uppercase transformation in variable names to `Spec.format` tokens.
2017-10-04spec.patches: fix dictionary reference (#5608)scheibelp1-2/+3
This fixes a loop that was iterating through the keys of a dictionary when it was intending to use the values.
2017-10-04Hotfix: maintain patch order while fixing hashMassimiliano Culpo2-23/+29
fixes #5587 In trying to preserve patch ordering, #5476 made equality inconsistent for the added 'patches' variant. This commit maintains the original weak ordering of patch applications while preserving consistency of comparisons. The ordering DOES NOT enter the hashing mechanism. It's supposed to be a hotfix, while we think of a cleaner and more-permanent solution.
2017-10-03wrap generator with collection to avoid exhausting it with single iteration ↵scheibelp1-3/+3
(#5586)
2017-10-02patch: add workdir option (#5501)Christoph Junghans3-11/+46
* patch: add working_dir option * added documentation
2017-09-30Port CTest's log scraping logic to Spack (#5561)Todd Gamblin4-62/+387
- This steals the magic regular expressions that CTest uses to parse log files and addds them to Spack. See here: https://github.com/Kitware/CMake/blob/master/Source/CTest/cmCTestBuildHandler.cxx These are BSD licensed, so the port is in `externa/ctest_log_parser.py` - We currently use these to do better filtering of errors from build output. Plan is to use them to generate good CDash output.
2017-09-30Add testing for spack blame; refactor llnl.util testsTodd Gamblin7-23/+106
2017-09-30Add 'spack blame' command: shows contributors to packagesTodd Gamblin6-25/+280
`spack blame` prints out the contributors to a package. By modification time: ``` $ spack blame --time llvm LAST_COMMIT LINES % AUTHOR EMAIL 3 days ago 2 0.6 Andrey Prokopenko <andrey.prok@gmail.com> 3 weeks ago 125 34.7 Massimiliano Culpo <massimiliano.culpo@epfl.ch> 3 weeks ago 3 0.8 Peter Scheibel <scheibel1@llnl.gov> 2 months ago 21 5.8 Adam J. Stewart <ajstewart426@gmail.com> 2 months ago 1 0.3 Gregory Becker <becker33@llnl.gov> 3 months ago 116 32.2 Todd Gamblin <tgamblin@llnl.gov> 5 months ago 2 0.6 Jimmy Tang <jcftang@gmail.com> 5 months ago 6 1.7 Jean-Paul Pelteret <jppelteret@gmail.com> 7 months ago 65 18.1 Tom Scogland <tscogland@llnl.gov> 11 months ago 13 3.6 Kelly (KT) Thompson <kgt@lanl.gov> a year ago 1 0.3 Scott Pakin <pakin@lanl.gov> a year ago 3 0.8 Erik Schnetter <schnetter@gmail.com> 3 years ago 2 0.6 David Beckingsale <davidbeckingsale@gmail.com> 3 days ago 360 100.0 ``` Or by percent contribution: ``` $ spack blame --percent llvm LAST_COMMIT LINES % AUTHOR EMAIL 3 weeks ago 125 34.7 Massimiliano Culpo <massimiliano.culpo@epfl.ch> 3 months ago 116 32.2 Todd Gamblin <tgamblin@llnl.gov> 7 months ago 65 18.1 Tom Scogland <tscogland@llnl.gov> 2 months ago 21 5.8 Adam J. Stewart <ajstewart426@gmail.com> 11 months ago 13 3.6 Kelly (KT) Thompson <kgt@lanl.gov> 5 months ago 6 1.7 Jean-Paul Pelteret <jppelteret@gmail.com> 3 weeks ago 3 0.8 Peter Scheibel <scheibel1@llnl.gov> a year ago 3 0.8 Erik Schnetter <schnetter@gmail.com> 3 years ago 2 0.6 David Beckingsale <davidbeckingsale@gmail.com> 3 days ago 2 0.6 Andrey Prokopenko <andrey.prok@gmail.com> 5 months ago 2 0.6 Jimmy Tang <jcftang@gmail.com> 2 months ago 1 0.3 Gregory Becker <becker33@llnl.gov> a year ago 1 0.3 Scott Pakin <pakin@lanl.gov> 3 days ago 360 100.0 ```
2017-09-30Typo: file -> directory (#5560)George Hartzell1-1/+1
Mirrors are directories (that use `file://` URLS, not files.
2017-09-30Documentation for dependency patching.Todd Gamblin3-23/+189
2017-09-30Patches are hashed with specs, and can be associated with dependencies.Todd Gamblin13-155/+555
- A package can depend on a special patched version of its dependencies. - The `Spec` YAML (and therefore the hash) now includes the sha256 of the patch in the `Spec` YAML, which changes its hash. - The special patched version will be built separately from a "vanilla" version of the same package. - This allows packages to maintain patches on their dependencies without affecting either the dependency package or its dependents. This could previously be accomplished with special variants, but having to add variants means the hash of the dependency changes frequently when it really doesn't need to. This commit allows the hash to change *just* for dependencies that need patches. - Patching dependencies shouldn't be the common case, but some packages (qmcpack, hpctoolkit, openspeedshop) do this kind of thing and it makes the code structure mirror maintenance responsibilities. - Note that this commit means that adding or changing a patch on a package will change its hash. This is probably what *should* happen, but we haven't done it so far. - Only applies to `patch()` directives; `package.py` files (and their `patch()` functions) are not hashed, but we'd like to do that in the future. - The interface looks like this: `depends_on()` can optionally take a patch directive or a list of them: depends_on(<spec>, patches=patch(..., when=<cond>), when=<cond>) # or depends_on(<spec>, patches=[patch(..., when=<cond>), patch(..., when=<cond>)], when=<cond>) - Previously, the `patch()` directive only took an `md5` parameter. Now it only takes a `sha256` parameter. We restrict this because we want to be consistent about which hash is used in the `Spec`. - A side effect of hashing patches is that *compressed* patches fetched from URLs now need *two* checksums: one for the downloaded archive and one for the content of the patch itself. Patches fetched uncompressed only need a checksum for the patch. Rationale: - we include the content of the *patch* in the spec hash, as that is the checksum we can do consistently for patches included in Spack's source and patches fetched remotely, both compressed and uncompressed. - we *still* need the patch of the downloaded archive, because we want to verify the download *before* handing it off to tar, unzip, or another decompressor. Not doing so is a security risk and leaves users exposed to any arbitrary code execution vulnerabilities in compression tools.
2017-09-30add spack flake8 exception for long checksumsTodd Gamblin1-2/+2
2017-09-30Clean up exceptions and function names in directives.Todd Gamblin1-41/+23
- Functions returned by directives were all called `_execute`, which made reading stack traces hard because you couldn't tell what directive a frame came from. - renamed them all to `_execute_<directive>` - Exceptions in directives were only really used in one or two places -- get rid of the boilerplate init functions and let the callsite specify the message.
2017-09-30Consolidate some web-spidering commands in spack.util.webTodd Gamblin6-116/+118
- move `spack.cmd.checksum.get_checksums` to `spack.util.web.spider_checksums` - move `spack.error.NoNetworkError` to `spack.util.web.NoNetworkError` since it is only used there.
2017-09-30Disable duplicate cross-reference warnings in Sphinx.Todd Gamblin1-0/+14
2017-09-30Refactor Package dependency metadataTodd Gamblin14-123/+217
- Previously, dependencies and dependency_types were stored as separate dicts on Package. - This means a package can only depend on another in one specific way, which is usually but not always true. - Prior code unioned dependency types statically across dependencies on the same package. - New code stores dependency relationships as their own object, with a spec constraint and a set of dependency types per relationship. - Dependency types are now more precise - There is now room to add more information to dependency relationships. - New Dependency class lives in dependency.py, along with deptype definitions that used to live in spack.spec. Move deptype definitions to spack.dependency
2017-09-30Patch.apply() shouldn't affect working directory of caller.Todd Gamblin1-11/+12
2017-09-30Only print "no patches needed" if there were no patches.Todd Gamblin1-1/+5
2017-09-29Add test deptype (#5132)scheibelp9-11/+181
* Add '--test=all' and '--test=root' options to test either the root or the root and all dependencies. * add a test dependency type that is only used when --test is enabled. * test dependencies are not added to the spec, but they are provided in the test environment.
2017-09-29modules: specialized configure_options for external packages (#5543)Massimiliano Culpo2-2/+20
closes #5473 Prior to this PR we were not exiting early for external packages, which caused the `configure_options` property of the contexts to fail with e.g. a key error because the DAG gets truncated for them. More importantly Spack configure options don't make any sense for externals. Now we exit early, and leave a message in the module file clarifying that this package has been installed outside of Spack.
2017-09-25module files: system paths are excluded from path inspection (#5460)Massimiliano Culpo4-11/+72
closes #5201 Currently, if a user sets an external package to have a prefix that is one of the system paths (like '/usr') the module files that are generated will prepend '/usr/bin' to 'PATH', etc. This is particularly nasty at the time when a module file is unloaded, and e.g. paths like '/usr/bin' will be discarded from PATH. This PR solves the issue skipping system paths when a prefix inspection is made to generate module files.
2017-09-21Prefer later versions of compilers by default (#5234)scheibelp3-24/+18
* Prefer later versions of compilers by default * update test to make it less fragile
2017-09-20update Blas/Lapack section of packaging guide (#5383)Denis Davydov1-12/+41
2017-09-19Modulefiles generated with a template engine (#3183)Massimiliano Culpo94-1775/+15845
* Module files now are generated using a template engine refers #2902 #3173 jinja2 has been hooked into Spack. The python module `modules.py` has been splitted into several modules under the python package `spack/modules`. Unit tests stressing module file generation have been refactored accordingly. The module file generator for Lmod has been extended to multi-providers and deeper hierarchies. * Improved the support for templates in module files. Added an entry in `config.yaml` (`template_dirs`) to list all the directories where Spack could find templates for `jinja2`. Module file generators have a simple override mechanism to override template selection ('modules.yaml' beats 'package.py' beats 'default'). * Added jinja2 and MarkupSafe to vendored packages. * Spec.concretize() sets mutual spec-package references The correct place to set the mutual references between spec and package objects at the end of concretization. After a call to concretize we should now be ensured that spec is the same object as spec.package.spec. Code in `build_environment.py` that was performing the same operation has been turned into an assertion to be defensive on the new behavior. * Improved code and data layout for modules and related tests. Common fixtures related to module file generation have been extracted in `conftest.py`. All the mock configurations for module files have been extracted from python code and have been put into their own yaml file. Added a `context_property` decorator for the template engine, to make it easy to define dictionaries out of properties. The default for `verbose` in `modules.yaml` is now False instead of True. * Extendable module file contexts + short description from docstring The contexts that are used in conjunction with `jinja2` templates to generate module files can now be extended from package.py and modules.yaml. Module files generators now infer the short description from package.py docstring (and as you may expect it's the first paragraph) * 'module refresh' regenerates all modules by default `module refresh` without `--module-type` specified tries to regenerate all known module types. The same holds true for `module rm` Configure options used at build time are extracted and written into the module files where possible. * Fixed python3 compatibility, tests for Lmod and Tcl. Added test for exceptional paths of execution when generating Lmod module files. Fixed a few compatibility issues with python3. Fixed a bug in Tcl with naming_scheme and autoload + unit tests * Updated module file tutorial docs. Fixed a few typos in docstrings. The reference section for module files has been reorganized. The idea is to have only three topics at the highest level: - shell support + spack load/unload use/unuse - module file generation (a.k.a. APIs + modules.yaml) - module file maintenance (spack module refresh/rm) Module file generation will cover the entries in modules.yaml Also: - Licenses have been updated to include NOTICE and extended to 2017 - docstrings have been reformatted according to Google style * Removed redundant arguments to RPackage and WafPackage. All the callbacks in `RPackage` and `WafPackage` that are not build phases have been modified not to accept a `spec` and a `prefix` argument. This permits to leverage the common `configure_args` signature to insert by default the configuration arguments into the generated module files. I think it's preferable to handling those packages differently than `AutotoolsPackage`. Besides only one package seems to override one of these methods. * Fixed broken indentation + improved resiliency of refresh Fixed broken indentation in `spack module refresh` (probably a rebase gone silently wrong?). Filter the writers for blacklisted specs before searching for name clashes. An error with a single writer will not stop regeneration, but instead will print a warning and continue the command.
2017-09-17Add --show-log-on-error option to `spack install`Todd Gamblin4-14/+59
- converted `log_path` and `env_path` to properties of PackageBase. - InstallErrors in build_environment are now annotated with the package that caused them, in the 'pkg' attribute. - Add `--show-log-on-error` option to `spack install` that catches InstallErrors and prints the log to stderr if it exists. Note that adding a reference to the Pakcage allows a lot of stuff currently handled by do_install() and build_environment to be handled externally.
2017-09-17Remove redundant dest arguments in install.pyTodd Gamblin1-8/+8
2017-09-17Fix log error parsing bug introduced in c830eda0e (#5387)Todd Gamblin2-3/+3
- '\b' in regular expression needs to be in a raw string (r'\b') - Regression test that would've caught this was unintentionally disabled - This fixes the string and the test
2017-09-17Filter system paths from CMAKE_PREFIX_PATH (#5385)Pramod S Kumbhar1-0/+2
2017-09-16Improve external package location detection algorithm. (#5145)Kelly (KT) Thompson2-1/+8
Also inspect `PATH` to help locate an external package and provide a test for getting path from module's PATH. Fixes #5141
2017-09-16set CMAKE_PREFIX_PATH for cmake packages (#5364)Denis Davydov1-0/+5
* cmake: set CMAKE_PREFIX_PATH * cmake: use build/link immediate dependencies to construct CMAKE_PREFIX_PATH
2017-09-12Force reference consistency between Spec & PackageMassimiliano Culpo2-13/+23
The correct place to set the mutual references between spec and package objects is at the end of concretization. After a call to concretize we should now be ensured that spec is the same object as spec.package.spec. Code in `build_environment.py` that was performing the same operation has been turned into an assertion to be defensive on the new behavior.
2017-09-11clean up concreteness detectionTodd Gamblin3-99/+27
- Fixes bugs where concretization would fail due to an erroneously cached _concrete attribute. - Ripped out a bunch of code in spec.py that isn't needed/valid anymore: - The various concrete() methods on different types of Specs would attempt to statically compute whether the Spec was concrete. - This dates back to when DAGs were simpler and there were no optional dependencies. It's actually NOT possible to compute statically whether a Spec is concrete now. The ONLY way you know is if it goes through concretization and is marked concrete once that completes. - This commit removes all simple concreteness checks and relies only on the _concrete attribute. This should make thinking about concreteness simpler. - Fixed a couple places where Specs need to be marked concrete explicitly. - Specs read from files and Specs that are destructively copied from concrete Specs now need to be marked concrete explicitly. - These spots may previously have "worked", but they were brittle and should be explcitly marked anyway.
2017-09-11bugfix: concrete dependencies are now copied properly.Todd Gamblin1-25/+44
- Dependencies in concrete specs did not previously have their cache fields (_concrete, _normal, etc.) preserved. - _dup and _dup_deps weren't passing each other enough information to preserve concreteness properly, so only the root was properly preserved. - cached concreteness is now preserved properly for the entire DAG, not just the root. - added method docs.
2017-09-11Simplify logic in Spec.normalize()Todd Gamblin1-4/+4
2017-09-11Preserve original stack trace for UnsatisfiableSpecErrorTodd Gamblin1-3/+4
2017-09-11'with_or_without' accepts bool variantsMassimiliano Culpo2-36/+151
Fixes #4112 This commit extends the support of the AutotoolsPackage methods `with_or_without` and `enable_or_disable` to bool-valued variants. It also defines for those functions a convenience short-cut if the activation parameter is the prefix of a spec (like in `--with-{pkg}={prefix}`). This commit also includes: * Updates to viennarna and adios accordingly: they have been modified to use `enable_or_disable` and `with_or_without` * Improved docstrings in `autotools.py`. Raise `KeyError` if name is not a variant.
2017-09-09Fix name detection in HeaderList and LibraryList (#5118)Adam J. Stewart2-34/+68
* Fix name detection in HeaderList and LibraryList * Add support for CUDA header files
2017-09-08Bootstrap environment-modulesMatthew Scott Krafczyk4-112/+233
Renames the existing bootstrap command to 'clone'. Repurposes 'spack bootstrap' to install packages that are useful to the operation of Spack (for now this is just environment-modules). For bash and ksh users running setup-env.sh, if a Spack-installed instance of environment-modules is detected and environment modules and dotkit are not externally available, Spack will define the 'module' command in the user's shell to use the environment-modules built by Spack.
2017-09-07dump environment in sourceable form (#5301)Rob Latham1-1/+1
First, quote the environment variable values. Second, export the variables. sorry, this is bourn-shell syntax. Happy to consider a shell-independent way to do this, but spack is already using sh-like "env=value"
2017-09-06Update copyright notices for 2017 (#5295)Michael Kuhn232-232/+232
2017-09-05Added support for querying by tags (#4786)Massimiliano Culpo9-127/+518
* Added support to query packages by tags. - The querying commands `spack list`, `spack find` and `spack info` have been modified to support querying by tags. Tests have been added to check that the feature is working correctly under what should be the most frequent use cases. * Refactored Repo class to make insertion of new file caches easier. - Added the class FastPackageChecker. This class is a Mapping from package names to stat info, that gets memoized for faster access. - Extracted the creation of a ProviderIndex to its own factory function. * Added a cache file for tags. - Following what was done for providers, a TagIndex class has been added. This class can serialize and deserialize objects from json. Repo and RepoPath have a new method 'packages_with_tags', that uses the TagIndex to compute a list of package names that have all the tags passed as arguments. On Ubuntu 14.04 the effect if the cache reduces the time for spack list from ~3sec. to ~0.3sec. after the cache has been built. * Fixed colorization of `spack info`