summaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2022-01-14CDO package: add version 2.0.3 (#28416)Brian Spilner1-0/+1
2022-01-14Python: add ensurepip variant (#28205)Adam J. Stewart2-6/+31
2022-01-14valgrind: default to ~ubsan (#28389)Adam J. Stewart1-1/+1
2022-01-14gdbm@1.22: fix build on MacOS (#28379)Satish Balay1-1/+1
2022-01-14scorpio: add new package (#28375)Peter Brady1-0/+29
Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
2022-01-14PythonPackage: install packages with pip (#27798)Adam J. Stewart331-1563/+1474
* Use pip to bootstrap pip * Bootstrap wheel from source * Update PythonPackage to install using pip * Update several packages * Add wheel as base class dep * Build phase no longer exists * Add py-poetry package, fix py-flit-core bootstrapping * Fix isort build * Clean up many more packages * Remove unused import * Fix unit tests * Don't directly run setup.py * Typo fix * Remove unused imports * Fix issues caught by CI * Remove custom setup.py file handling * Use PythonPackage for installing wheels * Remove custom phases in PythonPackages * Remove <phase>_args methods * Remove unused import * Fix various packages * Try to test Python packages directly in CI * Actually run the pipeline * Fix more packages * Fix mappings, fix packages * Fix dep version * Work around bug in concretizer * Various concretization fixes * Fix gitlab yaml, packages * Fix typo in gitlab yaml * Skip more packages that fail to concretize * Fix? jupyter ecosystem concretization issues * Solve Jupyter concretization issues * Prevent duplicate entries in PYTHONPATH * Skip fenics-dolfinx * Build fewer Python packages * Fix missing npm dep * Specify image * More package fixes * Add backends for every from-source package * Fix version arg * Remove GitLab CI stuff, add py-installer package * Remove test deps, re-add install_options * Function declaration syntax fix * More build fixes * Update spack create template * Update PythonPackage documentation * Fix documentation build * Fix unit tests * Remove pip flag added only in newer pip * flux: add explicit dependency on jsonschema * Update packages that have been added since this was branched off of develop * Move Python 2 deprecation to a separate PR * py-neurolab: add build dep on py-setuptools * Use wheels for pip/wheel * Allow use of pre-installed pip for external Python * pip -> python -m pip * Use python -m pip for all packages * Fix py-wrapt * Add both platlib and purelib to PYTHONPATH * py-pyyaml: setuptools is needed for all versions * py-pyyaml: link flags aren't needed * Appease spack audit packages * Some build backend is required for all versions, distutils -> setuptools * Correctly handle different setup.py filename * Use wheels for py-tomli to avoid circular dep on py-flit-core * Fix busco installation procedure * Clarify things in spack create template * Test other Python build backends * Undo changes to busco * Various fixes * Don't test other backends
2022-01-14hsakmt-roct@4.5.0: needs pkgconf (#28400)eugeneswalker1-0/+1
2022-01-13Python: improve site_packages_dir handling (#28346)Adam J. Stewart46-225/+186
* Python: improve site_packages_dir handling * Replace all site_packages_dir with purelib/platlib
2022-01-13Python: add maintainers for Python 2 (#28386)Adam J. Stewart1-1/+1
2022-01-13Add new survey package to spack. (#25518)Jim Galarowicz1-0/+101
* Add new package to spack. survey is a lightweight application performance tool that also gathers system information and stores it as metadata. * Add maintainer and note about source access. * Update the man path per spack reviewer suggestion. * Remove redundant settings for PYTHONPATH, PATH, and MANPATH. * Move to a one mpi collector approach for cce/tce integration. * Add pyyaml dependency * Make further spack reviewer changes to python type specs, mpi args, build type variant. * Add reviewer requested changes. * Add reviewer docstring requested changes. * Add more updates from spack reviewer comments. * Update the versions to use tags, not branches * Redo dashes to fix issue with spack testing. Co-authored-by: Jim Galarowicz <jgalarowicz@newmexicoconsortium.org>
2022-01-13AMReX Smoke Test (#27411)Erik1-0/+56
2022-01-13musl: set syslibdir correctly, new versions (#28373)Andrew W Elble1-0/+5
2022-01-12fenics: specify python exe (#28323)Adam J. Stewart1-1/+7
2022-01-12Do not initialize config on spack compiler list (#28042)Harmen Stoppels4-11/+37
When `spack compiler list` is run without being restricted to a particular scope, and no compilers are found, say that none are available, and hint that the use should run spack compiler find to auto detect compilers. * Improve docs * Check if stdin is a tty * add a test
2022-01-12bootstrap: fix bootstrapping GnuPG from different macOS versions (#28350)Massimiliano Culpo3-8/+27
2022-01-12libogg: patch stdint include, add v1.3.5 (#28332)Nils Leif Fischer1-0/+7
Backport a patch for v1.3.4 that fixes an unsigned typedef problem on macOS: https://github.com/xiph/ogg/pull/64 Also add v1.3.5 that has this issue fixed.
2022-01-12grace: workaround for buffer overflows (#28232)Andrew W Elble1-0/+8
spack paths can be long and this overflows (at least) these buffers inside of the bundled T1lib inside of the grace distribution, leading to crashes on startup.
2022-01-12ECP-DAV: Propagate adios2 variant to paraview (#26747)kwryankrattiger1-2/+1
Depends on #26728 and #26175
2022-01-12gptune: fix build by setting compilers to mpi wrappers (#28235)Matthieu Dorier1-0/+3
2022-01-12lmod: add v8.6.5 (#28353)Harmen Stoppels1-0/+2
2022-01-12charmpp: disable pre-7.0.0 macOS builds with clang@7: (#28221)Nils Leif Fischer1-0/+10
Charm++ versions below 7.0.0 have build issues on macOS, mainly due to the pre-7.0.0 `VERSION` file conflicting with other version files on the system: https://github.com/UIUC-PPL/charm/issues/2844. Specifically, it conflicts with LLVM's `<version>` header that was added in llvm@7.0.0 to comply with the C++20 standard: https://en.cppreference.com/w/cpp/header/version. The conflict only occurs on case-insensitive file systems, as typically used on macOS machines.
2022-01-12py-torch: use conditional variants (#28242)Adam J. Stewart1-111/+77
2022-01-12unparser: handle package-level loops, if statements, and with blocksTodd Gamblin5-74/+1039
Many packages implement logic at the class level to handle complex dependencies and conflicts. Others have started using `with when("@1.0"):` blocks since we added that capability. The loops and other control logic can cause some pure directive logic not to be removed by our package hashing logic -- and in many cases that's a lot of code that will cause unnecessary rebuilds. This commit changes the unparser so that it will descend into these blocks. Specifically: 1. Descend into loops, if statements, and with blocks at the class level. 2. Don't look inside function definitions (in or outside a class). 3. Don't look at nested class definitions (they don't have directives) 4. Add logic to *remove* empty loops/with blocks/if statements if all directives in them were removed. This allows our package hash to ignore a lot of pure metadata that it was not ignoring before, and makes it less sensitive. In addition, we add `maintainers` and `tags` to the list of metadata attributes that Spack should remove from packages when constructing canonoical source for a package hash. - [x] Make unparser handle if/for/while/with at class level. - [x] Add tests for control logic removal. - [x] Add a test to ensure that all packages are not only unparseable, but also that their canonical source is still compilable. This is a test for our control logic removal. - [x] Add another unparse test package that has complex logic.
2022-01-12unparser: add unparser unit testsTodd Gamblin3-1/+528
These are the unit tests from astunparse, converted to pytest, with a few backports from upstream cpython. These should hopefully keep `unparser.py` well covered as we change it.
2022-01-12unparser: rename `t` to `node` to mirror upstreamTodd Gamblin1-359/+363
These refactors have happened in upstream `ast.unparse()`
2022-01-12unparser: rename `_Class()` methods to `visit_Class()` to mirror upstreamTodd Gamblin1-75/+75
These are refactors that have happened in upstream `ast.unparse()`
2022-01-12unparser: do a better job of roundtripping stringsTodd Gamblin1-19/+99
Handle complex f-strings. Backport of: https://github.com/python/cpython/commit/a993e901ebe60c38d46ecb31f771d0b4a206828c#
2022-01-12unparser: treat `print(a, b, c)` and `print((a, b, c))` the sameTodd Gamblin3-18/+453
We can't tell `print(a, b, c)` and `print((a, b, c))` apart -- both of these expressions generate different ASTs in Python 2 and Python 3. However, we can decide that we don't care. This commit treats both of them the same when `py_ver_consistent` is set with `unparse()`. This means that the package hash won't notice changes from printing a tuple to printing multiple values, but we don't care, because this is extremely unlikely to affect the build. More than likely this is just an error message for the user of the package. - [x] treat `print(a, b, c)` and `print((a, b, c))` the same in py2 and py3 - [x] add another package parsing test -- legion -- that exercises this feature
2022-01-12commands: add `spack pkg source` and `spack pkg hash`Todd Gamblin4-8/+147
To make it easier to see how package hashes change and how they are computed, add two commands: * `spack pkg source <spec>`: dumps source code for a package to the terminal * `spack pkg source --canonical <spec>`: dumps canonicalized source code for a package to the terminal. It strips comments, directives, and known-unused multimethods from the package. It is used to generate package hashes. * `spack pkg hash <spec>`: This gives the package hash for a particular spec. It is generated from the canonical source code for the spec. - [x] `add spack pkg source` and `spack pkg hash` - [x] add tests - [x] fix bug in multimethod resolution with boolean `@when` values Co-authored-by: Greg Becker <becker33@llnl.gov>
2022-01-12package_hash: switch to using canonical source instead of AST reprTodd Gamblin4-108/+120
We are planning to switch to using full hashes for Spack specs, which means that the package hash will be included in the deployment descriptor. This means we need a more robust package hash than simply dumping the `repr` of the AST. The AST repr that we previously used for package content is unreliable because it can vary between python versions (Python's AST actually changes fairly frequently). - [x] change `package_hash`, `package_ast`, and `canonical_source` to accept a string for alternate source instead of a filename. - [x] consolidate package hash tests in `test/util/package_hash.py`. - [x] remove old `package_content` method. - [x] make `package_hash` do what `canonical_source_hash` was doing before. - [x] modify `content_hash` in `package.py` to use the new `package_hash` function. Co-authored-by: Danny McClanahan <1305167+cosmicexplorer@users.noreply.github.com>
2022-01-12unparser: Don't omit parenthesis when unparsing a sliceTodd Gamblin1-14/+39
Backport of https://github.com/python/cpython/commit/c102a148256b00b7d48c51a1a97df19042e603de Includes support for Python 2.
2022-01-12unparser: Don't put unnecessary parentheses on class declarationsTodd Gamblin1-1/+1
Backport of * https://github.com/python/cpython/commit/25160cdc4775a1ddb4e37c8bf5a6e31ad9c146ed
2022-01-12package_hash: add test to ensure that every package in Spack can be unparsedTodd Gamblin3-7/+30
- [x] add option to canonical source to *not* filter multimethods - [x] add test to unparse every package in builtin
2022-01-12package_hash: add test to ensure consistency across Python versionsTodd Gamblin7-0/+2486
Our package hash is supposed to be consistent from python version to python version. Test this by adding some known unparse inputs and ensuring that they always have the same canonical hash. This test relies on the fact that we run Spack's unit tests across many python versions. We can't compute for several python versions within the same test run so we precompute the hashes and check them in CI.
2022-01-12package_hash: fix handling of multimethods and add testsTodd Gamblin2-35/+261
Package hashing was not properly handling multimethods. In particular, it was removing any functions that had decorators from the output, so we'd miss things like `@run_after("install")`, etc. There were also problems with handling multiple `@when`'s in a single file, and with handling `@when` functions that *had* to be evaluated dynamically. - [x] Rework static `@when` resolution for package hash - [x] Ensure that functions with decorators are not removed from output - [x] Add tests for many different @when scenarios (multiple @when's, combining with other decorators, default/no default, etc.) Co-authored-by: Danny McClanahan <1305167+cosmicexplorer@users.noreply.github.com>
2022-01-12package_hash: rework `RemoveDirectives` and add a testTodd Gamblin3-6/+41
Previously we used `directives.__all__` to get directive names, but it wasn't quite right -- it included `DirectiveMeta`, etc. It's not wrong, but it's also not the clearest way to do this. - [x] Refactor `@directive` to track names in `directive_names` global - [x] Rename `_directive_names` to `_directive_dict_names` in `DirectiveMeta` - [x] Add a test for `RemoveDirectives` Co-authored-by: Danny McClanahan <1305167+cosmicexplorer@users.noreply.github.com>
2022-01-12package_hash: remove all unassigned strings, not just docstringsTodd Gamblin2-9/+77
Some packages use top-level unassigned strings instead of comments, either just after a docstring on in the body somewhere else. Ignore those strings becasue they have no effect on package behavior. - [x] adjust RemoveDocstrings to remove all free-standing strings. - [x] move tests for util/package_hash.py to test/util/package_hash.py Co-authored-by: Danny McClanahan <1305167+cosmicexplorer@users.noreply.github.com>
2022-01-12unparser: handle unicode string literals consistently across Python versionsTodd Gamblin1-2/+16
Python 2 and 3 represent string literals differently in the AST. Python 2 requires '\x' literals, and Python 3 source is always unicode, and allows unicode to be written directly. These also unparse differently by default. - [x] modify unparser to write both out the way `repr` would in Python 2 when `py_ver_consistent` is provided.
2022-01-12unparser: implement operator precedence algorithm for unparserTodd Gamblin7-169/+314
Backport operator precedence algorithm from here: https://github.com/python/cpython/commit/397b96f6d7a89f778ebc0591e32216a8183fe667 This eliminates unnecessary parentheses from our unparsed output and makes Spack's unparser consistent with the one in upstream Python 3.9+, with one exception. Our parser normalizes argument order when `py_ver_consistent` is set, so that star arguments in function calls come last. We have to do this because Python 2's AST doesn't have information about their actual order. If we ever support only Python 3.9 and higher, we can easily switch over to `ast.unparse`, as the unparsing is consistent except for this detail (modulo future changes to `ast.unparse`)
2022-01-12unparser: refactor delimiting with context managers in ast.unparseTodd Gamblin1-190/+177
Backport of https://github.com/python/cpython/commit/4b3b1226e86df6cd45e921c8f2ad23c3639c43b2
2022-01-12unparser: add block() context manager for indentationTodd Gamblin1-63/+63
This is a backport of a refactor from cpython 3.9
2022-01-12unparse: Make unparsing consistent for 2.7 and 3.5-3.10Todd Gamblin2-13/+71
Previously, there were differences in the unparsed code for Python 2.7 and for 3.5-3.10. This makes unparsed code the same across these Python versions by: 1. Ensuring there are no spaces between unary operators and their operands. 2. Ensuring that *args and **kwargs are always the last arguments, regardless of the python version. 3. Always unparsing print as a function. 4. Not putting an extra comma after Python 2 class definitions. Without these changes, the same source can generate different code for different Python versions, depending on subtle AST differences. One place where single source will generate an inconsistent AST is with multi-argument print statements, e.g.: ``` print("foo", "bar", "baz") ``` In Python 2, this prints a tuple; in Python 3, it is the print function with multiple arguments. Use `from __future__ import print_function` to avoid this inconsistency.
2022-01-12externals: add astunparseTodd Gamblin5-18/+1022
Add `astunparse` as `spack_astunparse`. This library unparses Python ASTs and we're adding it under our own name so that we can make modifications to it. Ultimately this will be used to make `package_hash` consistent across Python versions.
2022-01-12perl-tk: add missing dependencies (#28240)Andrew W Elble1-0/+6
2022-01-12e2fsprogs: fix non-root install (#28255)Dylan Simon1-0/+6
2022-01-12Use depends_on over load in lmod module files generated by Spack (#28352)Harmen Stoppels2-21/+4
2022-01-12poamsa: fix build errors for gcc10+ (#28262)snehring1-0/+4
2022-01-12yarn: add runtime dependency on `node-js@4.0:` (#27654)Danny McClanahan2-0/+6
2022-01-12HDF5 GPU VFD: add new package. (#28272)H. Joe Lee1-0/+35
2022-01-12ITensor: add v3.1.10 and 'shared' variant (#28370)Melven Roehrig-Zoellner1-0/+9