Commit graph

20156 commits

Author SHA1 Message Date
Todd Gamblin
a1d9a56a43 specs: remove "or ''" from Spec comparisons
Since `lazy_lexicographic_ordering` handles `None` comparison for us, we
don't need to adjust the spec comparators to return empty strings or
other type-specific empty types. We can just leverage the None-awareness
of `lazy_lexicographic_ordering`.

- [x] remove "or ''" from `_cmp_iter` in `Spec`
- [x] remove setting of `self.namespace` to `''` in `MockPackage`
2021-03-31 14:39:23 -07:00
Todd Gamblin
01a6adb5f7 specs: use lazy lexicographic comparison instead of key_ordering
We have been using the `@llnl.util.lang.key_ordering` decorator for specs
and most of their components. This leverages the fact that in Python,
tuple comparison is lexicographic. It allows you to implement a
`_cmp_key` method on your class, and have `__eq__`, `__lt__`, etc.
implemented automatically using that key. For example, you might use
tuple keys to implement comparison, e.g.:

```python
class Widget:
    # author implements this
    def _cmp_key(self):
        return (
            self.a,
            self.b,
            (self.c, self.d),
            self.e
        )

    # operators are generated by @key_ordering
    def __eq__(self, other):
        return self._cmp_key() == other._cmp_key()

    def __lt__(self):
        return self._cmp_key() < other._cmp_key()

    # etc.
```

The issue there for simple comparators is that we have to bulid the
tuples *and* we have to generate all the values in them up front. When
implementing comparisons for large data structures, this can be costly.

This PR replaces `@key_ordering` with a new decorator,
`@lazy_lexicographic_ordering`. Lazy lexicographic comparison maps the
tuple comparison shown above to generator functions. Instead of comparing
based on pre-constructed tuple keys, users of this decorator can compare
using elements from a generator. So, you'd write:

```python
@lazy_lexicographic_ordering
class Widget:
    def _cmp_iter(self):
        yield a
        yield b
        def cd_fun():
            yield c
            yield d
        yield cd_fun
        yield e

    # operators are added by decorator (but are a bit more complex)

There are no tuples that have to be pre-constructed, and the generator
does not have to complete. Instead of tuples, we simply make functions
that lazily yield what would've been in the tuple. If a yielded value is
a `callable`, the comparison functions will call it and recursively
compar it. The comparator just walks the data structure like you'd expect
it to.

The ``@lazy_lexicographic_ordering`` decorator handles the details of
implementing comparison operators, and the ``Widget`` implementor only
has to worry about writing ``_cmp_iter``, and making sure the elements in
it are also comparable.

Using this PR shaves another 1.5 sec off the runtime of `spack buildcache
list`, and it also speeds up Spec comparison by about 30%. The runtime
improvement comes mostly from *not* calling `hash()` `_cmp_iter()`.
2021-03-31 14:39:23 -07:00
Todd Gamblin
fd12cba18b specs: speed up traversal by avoiding redundant canonicalization 2021-03-31 14:39:23 -07:00
Rémi Lacroix
bb60dbd2ad
OpenFOAM-org: Add version 2.3.1. (#22473) 2021-03-31 23:19:37 +02:00
Rémi Lacroix
772dd7bcb2
Molden: Add new versions (#22685)
Fix the download URL and add new versions.
2021-03-31 13:28:06 -07:00
Scott McMillan
25747a037a
Do not set CPATH in nvhpc package (#22652)
Co-authored-by: Scott McMillan <smcmillan@nvidia.com>
2021-03-31 12:19:17 -06:00
Jungwon Kim
2196c24e97
papyrus: setup environment variables #22681 (#22682) 2021-03-31 11:08:18 -07:00
kurtsansom
904867703e
fix: modify for change in meson options (#22678) 2021-03-31 11:25:18 -06:00
Glenn Johnson
1ed7762327
new package: py-uproot (#22658) 2021-03-31 10:57:34 -05:00
Michael Kuhn
bee9e34b50
wget: add 1.21 (#22675) 2021-03-31 10:55:15 -05:00
AMD Toolchain Support
1144666c09
AOCC support for QE 6.7 (#22664)
Adding qe_6.7_aocc_support
2021-03-31 09:34:21 -06:00
yellowhat
802f5afac0
hpl: FIX ^intel-oneapi-mkl (#22674) 2021-03-31 08:17:27 -07:00
AMD Toolchain Support
9a453b2e74
adding AOCC support for CP2K 7.1 (#22641) 2021-03-31 13:22:04 +02:00
Harmen Stoppels
fa6e30c6a7
squashfuse: add v0.1.104 and variants (#22605) 2021-03-31 10:17:35 +02:00
Harmen Stoppels
64d4ab85e7
There is no symlink fusermount->fusermount3 by default (#22638) 2021-03-30 14:05:37 -07:00
Rémi Lacroix
2747af6000
SRILM: Add new package. (#22640) 2021-03-30 20:53:31 +00:00
Desmond Orton
c57a74e3b0
New package py-flexmock (#22549)
* New package py-flexmock

* Switched to proper deps

* Changed setuptools type
2021-03-30 14:49:07 -06:00
Desmond Orton
3ce4dae1bf
New package py-argh (#22551)
* New package py-argh

* Fixed deps

* Changed setuptools type

* Update var/spack/repos/builtin/packages/py-argh/package.py

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2021-03-30 19:45:04 +00:00
Desmond Orton
2e6cdd3ec1
New package py-iocapture (#22550)
* New package py-iocapture

* Added the proper deps

* Changed setuptools type
2021-03-30 19:21:47 +00:00
Harmen Stoppels
1db6cd5d16
Make -j flag less exceptional (#22360)
* Make -j flag less exceptional

The -j flag in spack behaves differently from make, ctest, ninja, etc,
because it caps the number of jobs to an arbitrary number 16.
Spack will behave like other tools if `spack install` uses a reasonable
default, and `spack install -j <num>` *overrides* that default.

This will be particularly useful for Spack usage outside of a traditional
HPC context and for HPC centers that encourage users to compile on
login nodes with many cores instead of on compute nodes, which has
become increasingly common as individual nodes have more cores.

This maintains the existing default value of min(num_cpus, 16). However, 
as it is right now, Spack does a poor job at determining the number of 
cpus on linux, since it doesn't take cgroups into account. This is
particularly problematic when using distributed builds with slurm. This PR
also introduces `spack.util.cpus.cpus_available()` to consolidate
knowledge on determining the number of available cores, and improves
core detection for linux. This should also improve core detection for Docker/
Kubernetes, which also use cgroups.
2021-03-30 12:03:50 -07:00
Rémi Lacroix
d3a9824ea2
libLBFGS: Add new package. (#22639) 2021-03-30 18:54:12 +00:00
Gregory Lee
c1f1dc163e
stat: new version 4.1.0 (#22523)
* fix issue #22228 build of gdk-pixbuf
* added stat 4.1.0 and GUI variant
2021-03-30 12:52:06 -06:00
Scott McMillan
a78677a835
Add setup_dependent_build_environment() method to nvhpc package (#22578)
Fix #22520

Co-authored-by: Scott McMillan <smcmillan@nvidia.com>
2021-03-30 11:37:26 -07:00
Sergey Kosukhin
eb48b29375
claw: support for gcc10 (#22618) 2021-03-30 11:33:31 -07:00
Hao Lyu
db37e67c3b
Correct the sha256 ioapi v3.2 (#22633)
The sha256 of [ioapi-3.2](https://www.cmascenter.org/ioapi/download/ioapi-3.2.tar.gz) should be `0a3cbf236ffbd9fb5f6509e35308c3353f1f53096efe0c51b84883d2da86924b`
2021-03-30 10:33:46 -07:00
Sreenivasa Murthy Kolam
711d22c9fe
New recipe for rocm-opencl-runtime ,bump up version for rdc for rocm-4.1.0 Release (#22645) 2021-03-30 17:20:07 +00:00
Harmen Stoppels
37b439152d
Add sshfs (#22636) 2021-03-30 11:16:54 -06:00
Harmen Stoppels
176c27f194
New versions of SIRIUS (#22637) 2021-03-30 11:13:14 -06:00
Harmen Stoppels
b848fab3ec
SpackCommand objects can set global args (#22318)
This commit extends the API of the __call__ method of the
SpackCommand class to permit passing global arguments 
like those interposed between the main "spack" command 
and the subsequent subcommand.

The functionality is used to fix an issue where running

```spack -e . location -b some_package```

ends up printing the name of the environment instead of 
the build directory of the package, because the location arg 
parser also stores this value as `arg.env`.
2021-03-30 18:47:36 +02:00
Massimiliano Culpo
c3bab11ee1
Bootstrapping: swap store before configuration (#22631)
fixes #22294

A combination of the swapping order for global variables and
the fact that most of them are lazily evaluated resulted in
custom install tree not being taken into account if clingo
had to be bootstrapped.

This commit fixes that particular issue, but a broader refactor
may be needed to ensure that similar situations won't affect us
in the future.
2021-03-30 17:23:32 +02:00
lorddavidiii
220c0d9cfc
cuda: add dev variant and ABI variant for ncurses (#22536)
* ncurses: add variant +abi5 for version 5 ABI
* cuda: add variant dev, which makes cuda-gdb useable

- cuda-gdb needs libncurses.so.5, which most distros doesn't have
 see also https://docs.nvidia.com/cuda/cuda-gdb/index.html#common-issues-oss
2021-03-30 10:57:15 -04:00
Yan Hang
1bd0964ed3
curl package: add new stable version 7.75.0 (#22635) 2021-03-30 15:28:19 +02:00
Harmen Stoppels
a37c916dff
Bootstrap: add _builtin config scope (#22610) 2021-03-30 13:41:34 +02:00
Harmen Stoppels
2a4c06b1e6
Fix clearing cache of InternalConfigScope (#22609)
Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
2021-03-30 11:23:39 +00:00
Asher Mancinelli
e3bcb0ec1e
Update hiop package (#22232)
Co-authored-by: Harmen Stoppels <harmenstoppels@gmail.com>
2021-03-30 02:13:04 -06:00
takanori-ihara
a63a3c1d3d
py-numpy: Add the setting to use fujitsu-ssl2 (#22604)
* py-numpy: Add the setting to use fujitsu-ssl2

* py-numpy: Fix for comments
2021-03-30 04:24:42 +00:00
Brian Van Essen
9d42381d38
Bugfixes in LBANN software stack identified by clingo (#22554)
* Fixed a bug in the DiHydrogen package where the variant legacy was
changed to distconv and wasn't fully propagated.  Cleaned up the
openmp variants on the blas library packages in DiHydrogen and
Elemental.  Extended support for Aluminum v1.0 in LBANN, Hydrogen, and
DiHydrogen.  Fixed a when clause in the LBANN dependencies.

* Removed the upper range limit for the Aluminum library dependence

* Update var/spack/repos/builtin/packages/dihydrogen/package.py

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2021-03-30 02:25:56 +00:00
Cameron Stanavige
846cf954f0
spath: new releases (#22625)
This commit adds the url and the two releases/versions to the package.
2021-03-30 02:02:33 +00:00
Danny McClanahan
f67d4774ea
move binary indices are stored into the misc_cache (#22500)
Remote buildcache indices need to be stored in a place that does not
require writing to the Spack prefix. Move them from the install_tree to
the misc_cache.
2021-03-29 17:20:04 -07:00
Cyrus Harrison
79193dc37c
bugfix for active when pkg is already active error (#22587)
* bugfix for active when pkg is already active error

Co-authored-by: Greg Becker <becker33@llnl.gov>
2021-03-29 17:09:34 -07:00
Massimiliano Culpo
4079bbce97 Externals are preferred even when they have non-default variant values
fixes #22596

Variants which are specified in an external spec are not
scored negatively if they encode a non-default value.
2021-03-29 16:06:11 -07:00
Massimiliano Culpo
4ed5c366fa Enforce uniqueness of the version_weight atom per node
fixes #22565

This change enforces the uniqueness of the version_weight
atom per node(Package) in the DAG. It does so by applying
FTSE and adding an extra layer of indirection with the
possible_version_weight/2 atom.

Before this change it may have happened that for the same
node two different version_weight/2 were in the answer set,
each of which referred to a different spec with the same
version, and their weights would sum up.

This lead to unexpected result like preferring to build a
new version of an external if the external version was
older.
2021-03-29 16:06:11 -07:00
Sreenivasa Murthy Kolam
ebbce40a88
bumpup version for hipify-clang,rocm-gdb-api,rocm-gdb for rocm-4.1.rel (#22622) 2021-03-29 22:49:07 +00:00
Harmen Stoppels
e89c9ec082
Make stage use concrete specs from environment (#22320)
* Make stage use concrete specs from environment

Same as in https://github.com/spack/spack/pull/21642, the idea is that
we want to easily stage a package that fails to build in a complex
environment. Instead of making the user create a spec by hand (basically
transforming all the rules in the environment manifest into a spec,
defying the purpose of the environment...), use the provided spec as a
filter for the already concretized specs. This also speeds up things,
cause we don't have to reconcretize.
2021-03-29 11:10:44 -07:00
Rémi Lacroix
f9cc073be0
ELPA: Add missing Python build dependency. (#22466)
Also patch the "manual_cpp" Python script with proper shebang to ensure the Spack provided Python is used instead of the system Python.
2021-03-29 17:47:02 +02:00
Harmen Stoppels
8b16728fd9
Add "spack [cd|location] --source-dir" (#22321) 2021-03-29 17:31:24 +02:00
Tomoki, Karatsu
3d7069e039
hdf5: fix link error in dependent packages with %fj (#22512) 2021-03-29 09:12:59 -04:00
Harmen Stoppels
1a080b9a00
libfuse: run system install script based on a variant (#22518) 2021-03-29 09:33:55 +00:00
Adam J. Stewart
e5d106c9ce
py-matplotlib: add v3.4.0 (#22574) 2021-03-29 10:39:17 +02:00
Adam J. Stewart
22e3620021
py-numpy: add v1.20.2 (#22603) 2021-03-29 09:43:40 +02:00