summaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2021-05-22bugfix: allow imposed constraints to be overridden in special casesTodd Gamblin1-6/+16
In most cases, we want condition_holds(ID) to imply any imposed constraints associated with the ID. However, the dependency relationship in Spack is special because it's "extra" conditional -- a dependency *condition* may hold, but we have decided that externals will not have dependencies, so we need a way to avoid having imposed constraints appear for nodes that don't exist. This introduces a new rule that says that constraints are imposed *unless* we define `do_not_impose(ID)`. This allows rules like dependencies, which rely on more than just spec conditions, to cancel imposed constraints. We add one special case for this: dependencies of externals.
2021-05-22bugfix: do not generate dep conditions when no dependencyTodd Gamblin1-10/+15
We only consider test dependencies some of the time. Some packages are *only* test dependencies. Spack's algorithm was previously generating dependency conditions that could hold, *even* if there was no potential dependency type. - [x] change asp.py so that this can't happen -- we now only generate dependency types for possible dependencies.
2021-05-22concretizer: unify logic for spec conditionalsTodd Gamblin3-183/+119
This builds on #20638 by unifying all the places in the concretizer where things are conditional on specs. Previously, we duplicated a common spec conditional pattern for dependencies, virtual providers, conflicts, and externals. That was introduced in #20423 and refined in #20507, and roughly looked as follows. Given some directives in a package like: ```python depends_on("foo@1.0+bar", when="@2.0+variant") provides("mpi@2:", when="@1.9:") ``` We handled the `@2.0+variant` and `@1.9:` parts by generating generated `dependency_condition()`, `required_dependency_condition()`, and `imposed_dependency_condition()` facts to trigger rules like this: ```prolog dependency_conditions_hold(ID, Parent, Dependency) :- attr(Name, Arg1) : required_dependency_condition(ID, Name, Arg1); attr(Name, Arg1, Arg2) : required_dependency_condition(ID, Name, Arg1, Arg2); attr(Name, Arg1, Arg2, Arg3) : required_dependency_condition(ID, Name, Arg1, Arg2, Arg3); dependency_condition(ID, Parent, Dependency); node(Parent). ``` And we handled `foo@1.0+bar` and `mpi@2:` parts ("imposed constraints") like this: ```prolog attr(Name, Arg1, Arg2) :- dependency_conditions_hold(ID, Package, Dependency), imposed_dependency_condition(ID, Name, Arg1, Arg2). attr(Name, Arg1, Arg2, Arg3) :- dependency_conditions_hold(ID, Package, Dependency), imposed_dependency_condition(ID, Name, Arg1, Arg2, Arg3). ``` These rules were repeated with different input predicates for requirements (e.g., `required_dependency_condition`) and imposed constraints (e.g., `imposed_dependency_condition`) throughout `concretize.lp`. In #20638 it got to be a bit confusing, because we used the same `dependency_condition_holds` predicate to impose constraints on conditional dependencies and virtual providers. So, even though the pattern was repeated, some of the conditional rules were conjoined in a weird way. Instead of repeating this pattern everywhere, we now have *one* set of consolidated rules for conditions: ```prolog condition_holds(ID) :- condition(ID); attr(Name, A1) : condition_requirement(ID, Name, A1); attr(Name, A1, A2) : condition_requirement(ID, Name, A1, A2); attr(Name, A1, A2, A3) : condition_requirement(ID, Name, A1, A2, A3). attr(Name, A1) :- condition_holds(ID), imposed_constraint(ID, Name, A1). attr(Name, A1, A2) :- condition_holds(ID), imposed_constraint(ID, Name, A1, A2). attr(Name, A1, A2, A3) :- condition_holds(ID), imposed_constraint(ID, Name, A1, A2, A3). ``` this allows us to use `condition(ID)` and `condition_holds(ID)` to encapsulate the conditional logic on specs in all the scenarios where we need it. Instead of defining predicates for the requirements and imposed constraints, we generate the condition inputs with generic facts, and define predicates to associate the condition ID with a particular scenario. So, now, the generated facts for a condition look like this: ```prolog condition(121). condition_requirement(121,"node","cairo"). condition_requirement(121,"variant_value","cairo","fc","True"). imposed_constraint(121,"version_satisfies","fontconfig","2.10.91:"). dependency_condition(121,"cairo","fontconfig"). dependency_type(121,"build"). dependency_type(121,"link"). ``` The requirements and imposed constraints are generic, and we associate them with their meaning via the id. Here, `dependency_condition(121, "cairo", "fontconfig")` tells us that condition 121 has to do with the dependency of `cairo` on `fontconfig`, and the conditional dependency rules just become: ```prolog dependency_holds(Package, Dependency, Type) :- dependency_condition(ID, Package, Dependency), dependency_type(ID, Type), condition_holds(ID). ``` Dependencies, virtuals, conflicts, and externals all now use similar patterns, and the logic for generating condition facts is common to all of them on the python side, as well. The more specific routines like `package_dependencies_rules` just call `self.condition(...)` to get an id and generate requirements and imposed constraints, then they generate their extra facts with the returned id, like this: ```python def package_dependencies_rules(self, pkg, tests): """Translate 'depends_on' directives into ASP logic.""" for _, conditions in sorted(pkg.dependencies.items()): for cond, dep in sorted(conditions.items()): condition_id = self.condition(cond, dep.spec, pkg.name) # create a condition and get its id self.gen.fact(fn.dependency_condition( # associate specifics about the dependency w/the id condition_id, pkg.name, dep.spec.name )) # etc. ``` - [x] unify generation and logic for conditions - [x] use unified logic for dependencies - [x] use unified logic for virtuals - [x] use unified logic for conflicts - [x] use unified logic for externals LocalWords: concretizer mpi attr Arg concretize lp cairo fc fontconfig LocalWords: virtuals def pkg cond dep fn refactor github py
2021-05-22bootstrap: account for platform specific configuration scopes (#22489)Massimiliano Culpo1-7/+18
This change accounts for platform specific configuration scopes, like ~/.spack/linux, during bootstrapping. These scopes were previously not accounted for and that was causing issues e.g. when searching for compilers. (cherry picked from commit 413c422e53843a9e33d7b77a8c44dcfd4bf701be)
2021-05-22Bootstrap clingo from sources (#21446)Massimiliano Culpo12-46/+363
* Allow the bootstrapping of clingo from sources Allow python builds with system python as external for MacOS * Ensure consistent configuration when bootstrapping clingo This commit uses context managers to ensure we can bootstrap clingo using a consistent configuration regardless of the use case being managed. * Github actions: test clingo with bootstrapping from sources * Add command to inspect and clean the bootstrap store Prevent users to set the install tree root to the bootstrap store * clingo: documented how to bootstrap from sources Co-authored-by: Gregory Becker <becker33@llnl.gov> (cherry picked from commit 10e9e142b75c6ca8bc61f688260c002201cc1b22)
2021-05-21clingo-bootstrap: account for cray platform (#22460)Massimiliano Culpo1-3/+7
(cherry picked from commit 138312efabd534fa42d1a16e172e859f0d2b5842)
2021-05-21clingo: fix typo (#22444)Maxim Belkin1-1/+1
2021-05-21clingo: added a package with option for bootstrapping clingo (#20652)Massimiliano Culpo2-2/+66
* clingo/clingo-bootstrap: added a package with option for bootstrapping clingo package builds in Release mode uses GCC options to link libstdc++ and libgcc statically * clingo-bootstrap: apple-clang options to bootstrap statically on darwin * clingo: fix the path of the Python interpreter In case multiple Python versions are in the same prefix (e.g. when clingo is built against an external Python), it may happen that the Python used by CMake does not match the corresponding node in the current spec. This is fixed here by defining "Python_EXECUTABLE" properly as a hint to CMake. * clingo: the commit for "spack" version has been updated.
2021-05-21Clingo: fix missing import (#21364)Adam J. Stewart1-0/+1
2021-05-21clingo: prefer master branchTodd Gamblin1-1/+1
Most people installing `clingo` with Spack are going to be doing it to use the new concretizer, and that requires the `master` branch. - [x] make `master` the default so we don't have to keep telling people to install `clingo@master`. We'll update the preferred version when there's a new release.
2021-05-21make `spack fetch` work with environments (#19166)Andreas Baumbach4-20/+117
* make `spack fetch` work with environments * previously: `spack fetch` required the explicit statement of the specs to be fetched, even when in an environment * now: if there is no spec(s) provided to `spack fetch` we check if an environment is active and if yes we fetch all uninstalled specs.
2021-05-21Added a context manager to swap architecturesMassimiliano Culpo5-35/+89
This solves a few FIXMEs in conftest.py, where we were manipulating globals and seeing side effects prior to registering fixtures. This commit solves the FIXMEs, but introduces a performance regression on tests that may need to be investigated (cherry picked from commit 4558dc06e21e01ab07a43737b8cb99d1d69abb5d)
2021-05-21bugfix for target adjustments on target ranges (#20537)Greg Becker3-15/+20
(cherry picked from commit 61c1b71d38e62a5af81b3b7b8a8d12b954d99f0a)
2021-05-21Move context manager to swap the current configuration into spack.configMassimiliano Culpo3-64/+78
The context manager can be used to swap the current configuration temporarily, for any use case that may need it. (cherry picked from commit 553d37a6d62b05f15986a702394f67486fa44e0e)
2021-05-21Move context manager to swap the current store into spack.storeMassimiliano Culpo3-15/+32
The context manager can be used to swap the current store temporarily, for any use case that may need it. (cherry picked from commit cb2c233a97073f8c5d89581ee2a2401fef5f878d)
2021-05-21repo: generalize "swap" context manager to also accept pathsMassimiliano Culpo16-61/+71
The method is now called "use_repositories" and makes it clear in the docstring that it accepts as arguments either Repo objects or paths. Since there was some duplication between this contextmanager and "use_repo" in the testing framework, remove the latter and use spack.repo.use_repositories across the entire code base. Make a few adjustment to MockPackageMultiRepo, since it was stating in the docstring that it was supposed to mock spack.repo.Repo and was instead mocking spack.repo.RepoPath. (cherry picked from commit 1a8963b0f4c11c4b7ddd347e6cd95cdc68ddcbe0)
2021-05-21Run clingo-cffi tests in a container (#21913)Massimiliano Culpo1-36/+6
There clingo-cffi job has two issues to be solved: 1. It uses the default concretizer 2. It requires a package from https://test.pypi.org/simple/ The former can be fixed by setting the SPACK_TEST_SOLVER environment variable to "clingo". The latter though requires clingo-cffi to be pushed to a more stable package index (since https://test.pypi.org/simple/ is meant as a scratch version of PyPI that can be wiped at any time). For the time being run the tests in a container. Switch back to PyPI whenever a new official version of clingo will be released.
2021-05-21Updates to support clingo-cffi (#20657)Josh Essman2-9/+70
* Support clingo when used with cffi Clingo recently merged in a new Python module option based on cffi. Compatibility with this module requires a few changes to spack - it does not automatically convert strings/ints/etc to Symbol and clingo.Symbol.string throws on failure. manually convert str/int to clingo.Symbol types catch stringify exceptions add job for clingo-cffi to Spack CI switch to potassco-vendored wheel for clingo-cffi CI on_unsat argument when cffi (cherry picked from commit 93ed1a410c4a202eab3a68769fd8c0d4ff8b1c8e)
2021-05-21Improve error message for inconsistencies in package.py (#21811)Massimiliano Culpo4-5/+66
* Improve error message for inconsistencies in package.py Sometimes directives refer to variants that do not exist. Make it such that: 1. The name of the variant 2. The name of the package which is supposed to have such variant 3. The name of the package making this assumption are all printed in the error message for easier debugging. * Add unit tests (cherry picked from commit 7226bd64dc3b46a1ed361f1e9d7fb4a2a5b65200)
2021-05-21concretizer: simplify "fact" method (#21148)Massimiliano Culpo1-23/+5
The "fact" method before was dealing with multiple facts registered per call, which was used when we were emitting grounded rules from knowledge of the problem instance. Now that the encoding is changed we can simplify the method to deal only with a single fact per call. (cherry picked from commit ba42c36f00fe40c047121a32117018eb93e0c4b1)
2021-05-21Python 3.10 support: collections.abc (#20441)Adam J. Stewart19-43/+141
(cherry picked from commit 40a40e0265d6704a7836aeb30a776d66da8f7fe6)
2021-05-10use package supplied autogen.sh (#20319)Phil Tooley1-0/+6
2021-05-10respect -k/verify-ssl-false in _existing_url method (#21864)Greg Becker1-0/+2
2021-04-15update tutorial public keyGregory Becker1-35/+26
2021-04-15updates for new tutorialGregory Becker1-2/+2
update s3 bucket update tutorial branch
2021-02-19Update CHANGELOG and release versionv0.16.1Tamara Dahlgren2-1/+30
2021-02-19Resolve (post-cherry-picking) flake8 errorsTamara Dahlgren4-6/+12
2021-02-17apple-clang: add correct path to compiler wrappers (#21662)Adam J. Stewart1-1/+1
Follow-up to #17110 ### Before ```bash CC=/Users/Adam/spack/lib/spack/env/clang/clang; export CC SPACK_CC=/usr/bin/clang; export SPACK_CC PATH=...:/Users/Adam/spack/lib/spack/env/apple-clang:/Users/Adam/spack/lib/spack/env/case-insensitive:/Users/Adam/spack/lib/spack/env:...; export PATH ``` ### After ```bash CC=/Users/Adam/spack/lib/spack/env/clang/clang; export CC SPACK_CC=/usr/bin/clang; export SPACK_CC PATH=...:/Users/Adam/spack/lib/spack/env/clang:/Users/Adam/spack/lib/spack/env/case-insensitive:/Users/Adam/spack/lib/spack/env:...; export PATH ``` `CC` and `SPACK_CC` were being set correctly, but `PATH` was using the name of the compiler `apple-clang` instead of `clang`. For most packages, since `CC` was set correctly, nothing broke. But for packages using `Makefiles` that set `CC` based on `which clang`, it was using the system compilers instead of the compiler wrappers. Discovered when working on `py-xgboost@0.90`. An alternative fix would be to copy the symlinks in `env/clang` to `env/apple-clang`. Let me know if you think there's a better way to do this, or to test this.
2021-02-17intel-oneapi-compilers/mpi: add module support (#20808)Frank Willmore2-0/+48
Facilitate running intel-oneapi-mpi outside of Spack (set PATH, LD_LIBRARY_PATH, etc. appropriately). Co-authored-by: Robert Cohn <rscohn2@gmail.com>
2021-02-17intel-oneapi-compilers: add to LD_LIBRARY_PATH so that it finds libimf.so ↵Frank Willmore1-22/+31
(#20717) * add to LD_LIBRARY_PATH so that it finds libimf.so * amrex: fix handling of CUDA arch (#20786) * amrex: fix handling of CUDA arch * amrex: fix style * amrex: fix bug * Update var/spack/repos/builtin/packages/amrex/package.py * Update var/spack/repos/builtin/packages/amrex/package.py Co-authored-by: Axel Huebl <axel.huebl@plasma.ninja> * ecp-data-vis-sdk: Combine the vis and io SDK packages (#20737) This better enables the collective set to be deployed togethor satisfying eachothers dependencies * r-sf: fix dependency error (#20898) * improve documentation for Rocm (hip amd builds) (#20812) * improve documentation * astyle: Fix makefile for install parameter (#20899) * llvm-doe: added new package (#20719) The package contains duplicated code from llvm/package.py, will supersede solve. * r-e1071: added v1.7-4 (#20891) * r-diffusionmap: added v1.2.0 (#20881) * r-covr: added v3.5.1 (#20868) * r-class: added v7.3-17 (#20856) * py-h5py: HDF5_DIR is needed for ~mpi too (#20905) For the `~mpi` variant, the environment variable `HDF5_DIR` is still required. I moved this command out of the `+mpi` conditional. * py-hovorod: fix typo on variant name in conflicts directive (#20906) * fujitsu-fftw: Add new package (#20824) * pocl: added v1.6 (#20932) Made version 1.5 or lower conflicts with a64fx. * PCL: add new package (#20933) * r-rle: new package (#20916) Common 'base' and 'stats' methods for 'rle' objects, aiming to make it possible to treat them transparently as vectors. * r-ellipsis: added v0.3.1 (#20913) * libconfig: add build dependency on texinfo (#20930) * r-flexmix: add v2.3-17 (#20924) * r-fitdistrplus: add v1.1-3 (#20923) * r-fit-models: add v0.64 (#20922) * r-fields: add v11.6 (#20921) * r-fftwtools: add v0.9-9 (#20920) * r-farver: add v2.0.3 (#20919) * r-expm: add v0.999-6 (#20918) * cln: add build dependency on texinfo (#20928) * r-expint: add v0.1-6 (#20917) * r-envstats: add v2.4.0 (#20915) * r-energy: add v1.7-7 (#20914) * r-ellipse: add v0.4.2 (#20912) * py-fiscalyear: add v0.3.0 (#20911) * r-ecp: add v3.1.3 (#20910) * r-plotmo: add v3.6.0 (#20909) * Improve gcc detection in llvm. (#20189) Co-authored-by: Tom Scogland <tom.scogland@gmail.com> Co-authored-by: Thomas Green <ca-tgreen@gw4a64fxlogin00.head.gw4.metoffice.gov.uk> * hatchet: updated urls (#20908) * py-anuga: add new package (#20782) * libvips: added v8.10.5 (#20902) * libzmq: add platform conditions to libbsd dependency (#20893) * r-dtw: add v1.22-3 (#20890) * r-dt: add v0.17 (#20889) * r-dosnow: add v1.0.19 (#20888) * add version 1.0.16 to r-doparallel (#20886) * add version 1.3.7 to r-domc (#20885) * add version 0.9-15 to r-diversitree (#20884) * add version 1.3-3 to r-dismo (#20883) * add version 0.6.27 to r-digest (#20882) * add version 1.5 to r-rngtools (#20887) * add version 1.5.8 to r-dicekriging (#20877) * add version 1.4.2 to r-httr (#20876) * add version 1.28 to r-desolve (#20875) * add version 2.2-5 to r-deoptim (#20874) * add version 0.2-3 to r-deldir (#20873) * add version 1.0.0 to r-crul (#20870) * add version 1.1.0.1 to r-crosstalk (#20869) * add version 1.0-1 to r-copula (#20867) * add version 5.0.2 to r-rcppparallel (#20866) * add version 2.0-1 to r-compositions (#20865) * add version 0.4.10 to r-rlang (#20796) * add version 0.3.6 to r-vctrs (#20878) * amrex: add ROCm support (#20809) * add version 2.0-0 to r-colorspace (#20864) * add version 1.3-1 to r-coin (#20863) * add version 0.19-4 to r-coda (#20862) * add version 1.3.7 to r-clustergeneration (#20861) * add version 0.3-58 to r-clue (#20860) * add version 0.7.1 to r-clipr (#20859) * add version 2.2.0 to r-cli (#20858) * add version 0.4-3 to r-classint (#20857) * add version 0.1.2 to r-globaloptions (#20855) * add version 2.3-56 to r-chron (#20854) * add version 0.4.10 to r-checkpoint (#20853) * add version 2.0.0 to r-checkmate (#20852) * add version 1.18.1 to r-catools (#20850) * add version 1.2.2.2 to r-modelmetrics (#20849) * add version 3.0-4 to r-cardata (#20847) * add version 1.0.1 to r-caracas (#20846) * r-lifecycle: new package at v0.2.0 (#20845) * add version 3.0-10 to r-car (#20844) * add version 3.4.5 to r-processx (#20843) * add version 1.5-12.2 to r-cairo (#20842) * add version 0.2.3 to r-cubist (#20841) * add version 2.6 to r-rmarkdown (#20838) * add version 1.2.1 to r-blob (#20819) * add version 4.0.4 to r-bit (#20818) * add version 2.4-1 to r-bio3d (#20816) * add version 0.4.2.3 to r-bibtex (#20815) * add version 3.1-4 to r-bayesm (#20807) * add version 1.2.1 to r-backports (#20806) * add version 2.0.3 to r-argparse (#20805) * add version 5.4-1 to r-ape (#20804) * add version 0.8-18 to r-amap (#20803) * r-pixmap: added new package (#20795) * zoltan: source code location change (#20787) * refactor path logic * added some paths to make compilers and libs discoverable * add to LD_LIBRARY_PATH so that it finds libimf.so and cleanup PEP8 * refactor path logic * adding paths to LIBRARY_PATH so compiler wrappers will find -lmpi * added vals for CC=icx, CXX=icpx, FC=ifx to generated module * back out changes to intel-oneapi-mpi, save for separate PR * Update var/spack/repos/builtin/packages/intel-oneapi-compilers/package.py path is joined in _ld_library_path() Co-authored-by: Robert Cohn <rscohn2@gmail.com> * set absolute paths to icx,icpx,ifx * dang close parenthesis Co-authored-by: Robert Cohn <rscohn2@gmail.com> Co-authored-by: mic84 <mrosso@lbl.gov> Co-authored-by: Axel Huebl <axel.huebl@plasma.ninja> Co-authored-by: Chuck Atkins <chuck.atkins@kitware.com> Co-authored-by: darmac <xiaojun2@hisilicon.com> Co-authored-by: Danny Taller <66029857+dtaller@users.noreply.github.com> Co-authored-by: Tomoyasu Nojiri <68096132+t-nojiri@users.noreply.github.com> Co-authored-by: Shintaro Iwasaki <siwasaki@anl.gov> Co-authored-by: Glenn Johnson <glenn-johnson@uiowa.edu> Co-authored-by: Kelly (KT) Thompson <KineticTheory@users.noreply.github.com> Co-authored-by: Henrique Mendonça <henrique@users.noreply.github.com> Co-authored-by: h-denpo <57649496+h-denpo@users.noreply.github.com> Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com> Co-authored-by: Thomas Green <tomgreen66@hotmail.com> Co-authored-by: Tom Scogland <tom.scogland@gmail.com> Co-authored-by: Thomas Green <ca-tgreen@gw4a64fxlogin00.head.gw4.metoffice.gov.uk> Co-authored-by: Abhinav Bhatele <bhatele@cs.umd.edu> Co-authored-by: a-saitoh-fj <63334055+a-saitoh-fj@users.noreply.github.com> Co-authored-by: QuellynSnead <quellyn@lanl.gov>
2021-02-17adding environment to OneMKL packages so that examples will build (#21377)Frank Willmore2-0/+42
2021-02-17add intel oneapi to compiler/pkg translations (#21448)Greg Becker1-1/+2
2021-02-17llvm: "master" branch is now "main" branch (#21411)eugeneswalker1-1/+1
2021-02-17Print groups properly for spack find -d (#20028)Yang Zongze1-1/+1
2021-02-17store sbang_install_path in buildinfo, use for subsequent relocation (#20768)eugeneswalker1-0/+11
2021-02-17[WIP] relocate.py: parallelize test replacement logic (#19690)Nathan Hanford10-210/+316
* sbang pushed back to callers; star moved to util.lang * updated unit test * sbang test moved; local tests pass Co-authored-by: Nathan Hanford <hanford1@llnl.gov>
2021-02-17py-hovorod: fix typo on variant name in conflicts directive (#20906)Henrique Mendonça1-1/+1
2021-02-17concretizer: require at least a dependency type to say the dependency holdsMassimiliano Culpo3-0/+28
fixes #20784 Similarly to the previous bug, here we were deducing conditions to be imposed on nodes that were not part of the DAG.
2021-02-17concretizer: dependency conditions cannot hold if package is externalMassimiliano Culpo4-2/+12
fixes #20736 Before this one line fix we were erroneously deducing that dependency conditions hold even if a package was external. This may result in answer sets that contain imposed conditions on a node without the node being present in the DAG, hence #20736.
2021-02-17libyogrt: remove conflicts triggered by an invalid value (#20794)Massimiliano Culpo1-4/+2
fixes #20611 The conflict was triggered by an invalid value of the 'scheduler' variant. This causes Spack to error when libyogrt facts are validated by the ASP-based concretizer.
2021-02-17restore ability of dev-build to skip patches (#20351)Robert Underwood1-0/+1
At some point in the past, the skip_patch argument was removed from the call to package.do_install() this broke the --skip-patch flag on the dev-build command.
2021-02-17intel-oneapi-mpi: virtual provider support (#20732)Robert Cohn1-0/+14
Set up environment and dependent packages properly when building with intel-oneapi-mpi as a dependency MPI provider (e.g. point to mpicc compiler wrapper).
2021-02-17intel-oneapi-compilers package: correct module file (#20686)Frank Willmore1-0/+10
This properly sets PATH/CPATH/LIBRARY_PATH etc. to make the Spack-generated module file for intel-oneapi-compilers useful (without this, 'icx' would not be found after loading the module file for intel-oneapi-compilers).
2021-02-17fix mpi lib paths, add virtual provides (#20693)Robert Cohn4-0/+21
2021-02-17Remove hard-coded standard C++ library selection and add more releases in ↵Ye Luo1-2/+2
llvm package (#19933) * Restore OS based Clang default choice of C++ standard library. * Add LLVM 11.0.1 release
2021-02-17concretizer: make rules on virtual packages more linearMassimiliano Culpo1-11/+9
fixes #20679 In this refactor we have a single cardinality rule on the provider, which triggers a rule transforming a dependency on a virtual package into a dependency on the provider of the virtual.
2021-02-17concretizer: use consistent naming for compiler predicates (#20677)Todd Gamblin2-10/+8
Every other predicate in the concretizer uses a `_set` suffix to implement user- or package-supplied settings, but compiler settings use a `_hard` suffix for this. There's no difference in how they're used, so make the names the same. - [x] change `node_compiler_hard` to `node_compiler_set` - [x] change `node_compiler_version_hard` to `node_compiler_version_set`
2021-02-17concretizer: simplify handling of virtual version constraintsTodd Gamblin2-18/+29
Previously, the concretizer handled version constraints by comparing all pairs of constraints and ensuring they satisfied each other. This led to INCONSISTENT ressults from clingo, due to ambiguous semantics like: version_constraint_satisfies("mpi", ":1", ":3") version_constraint_satisfies("mpi", ":3", ":1") To get around this, we introduce possible (fake) versions for virtuals, based on their constraints. Essentially, we add any Versions, VersionRange endpoints, and all such Versions and endpoints from VersionLists to the constraint. Virtuals will have one of these synthetic versions "picked" by the solver. This also allows us to remove a special case from handling of `version_satisfies/3` -- virtuals now work just like regular packages.
2021-02-17concretizer: remove rule generation code from concretizerTodd Gamblin1-70/+1
Our program only generates facts now, so remove all unused code related to generating cardinality constraints and rules.
2021-02-17concretizer: convert virtuals to facts; move all rules to `concretize.lp`Todd Gamblin2-116/+164
This converts the virtual handling in the new concretizer from already-ground rules to facts. This is the last thing that needs to be refactored, and it converts the entire concretizer to just use facts. The previous way of handling virtuals hinged on rules involving `single_provider_for` facts that were tied to the virtual and a version range. The new method uses the condition pattern we've been using for dependencies, externals, and conflicts. To handle virtuals as conditions, we impose constraints on "fake" virtual specs in the logic program. i.e., `version_satisfies("mpi", "2.0:", "2.0")` is legal whereas before we wouldn't have seen something like this. Currently, constriants are only handled on versions -- we don't handle variants or anything else yet, but they key change here is that we *could*. For a long time, virtual handling in Spack has only dealt with versions, and we'd like to be able to handle variants as well. We could easily add an integrity constraint to handle variants like the one we use for versions. One issue with the implementation here is that virtual packages don't actually declare possible versions like regular packages do. To get around that, we implement an integrity constraint like this: :- virtual_node(Virtual), version_satisfies(Virtual, V1), version_satisfies(Virtual, V2), not version_constraint_satisfies(Virtual, V1, V2). This requires us to compare every version constraint to every other, both in program generation and within the concretizer -- so there's a potentially quadratic evaluation time on virtual constraints because we don't have a real version to "anchor" things to. We just say that all the constraints need to agree for the virtual constraint to hold. We can investigate adding synthetic versions for virtuals in the future, to speed this up.