summaryrefslogtreecommitdiff
path: root/lib/spack/docs/frequently_asked_questions.rst
diff options
context:
space:
mode:
authorHarmen Stoppels <me@harmenstoppels.nl>2023-11-20 09:00:53 +0100
committerGitHub <noreply@github.com>2023-11-20 09:00:53 +0100
commit55d2ee9160a74bcf9f271313322e8aa83db153d1 (patch)
tree48c18ba75acfd846bf6a503a7c1bfe6c0104b83c /lib/spack/docs/frequently_asked_questions.rst
parentedda2ef4199857dc109390e064d8bd856f31fa0d (diff)
downloadspack-55d2ee9160a74bcf9f271313322e8aa83db153d1.tar.gz
spack-55d2ee9160a74bcf9f271313322e8aa83db153d1.tar.bz2
spack-55d2ee9160a74bcf9f271313322e8aa83db153d1.tar.xz
spack-55d2ee9160a74bcf9f271313322e8aa83db153d1.zip
docs: document how spack picks a version / variant (#41070)
Diffstat (limited to 'lib/spack/docs/frequently_asked_questions.rst')
-rw-r--r--lib/spack/docs/frequently_asked_questions.rst77
1 files changed, 77 insertions, 0 deletions
diff --git a/lib/spack/docs/frequently_asked_questions.rst b/lib/spack/docs/frequently_asked_questions.rst
new file mode 100644
index 0000000000..345fa1a81a
--- /dev/null
+++ b/lib/spack/docs/frequently_asked_questions.rst
@@ -0,0 +1,77 @@
+.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
+ Spack Project Developers. See the top-level COPYRIGHT file for details.
+
+ SPDX-License-Identifier: (Apache-2.0 OR MIT)
+
+==========================
+Frequently Asked Questions
+==========================
+
+This page contains answers to frequently asked questions about Spack.
+If you have questions that are not answered here, feel free to ask on
+`Slack <https://slack.spack.io>`_ or `GitHub Discussions
+<https://github.com/spack/spack/discussions>`_. If you've learned the
+answer to a question that you think should be here, please consider
+contributing to this page.
+
+.. _faq-concretizer-precedence:
+
+-----------------------------------------------------
+Why does Spack pick particular versions and variants?
+-----------------------------------------------------
+
+This question comes up in a variety of forms:
+
+ 1. Why does Spack seem to ignore my package preferences from ``packages.yaml`` config?
+ 2. Why does Spack toggle a variant instead of using the default from the ``package.py`` file?
+
+The short answer is that Spack always picks an optimal configuration
+based on a complex set of criteria\ [#f1]_. These criteria are more nuanced
+than always choosing the latest versions or default variants.
+
+.. note::
+
+ As a rule of thumb: requirements + constraints > reuse > preferences > defaults.
+
+The following set of criteria (from lowest to highest precedence) explain
+common cases where concretization output may seem surprising at first.
+
+1. :ref:`Package preferences <package-preferences>` configured in ``packages.yaml``
+ override variant defaults from ``package.py`` files, and influence the optimal
+ ordering of versions. Preferences are specified as follows:
+
+ .. code-block:: yaml
+
+ packages:
+ foo:
+ version: [1.0, 1.1]
+ variants: ~mpi
+
+2. :ref:`Reuse concretization <concretizer-options>` configured in ``concretizer.yaml``
+ overrides preferences, since it's typically faster to reuse an existing spec than to
+ build a preferred one from sources. When build caches are enabled, specs may be reused
+ from a remote location too. Reuse concretization is configured as follows:
+
+ .. code-block:: yaml
+
+ concretizer:
+ reuse: dependencies # other options are 'true' and 'false'
+
+3. :ref:`Package requirements <package-requirements>` configured in ``packages.yaml``,
+ and constraints from the command line as well as ``package.py`` files override all
+ of the above. Requirements are specified as follows:
+
+ .. code-block:: yaml
+
+ packages:
+ foo:
+ require:
+ - "@1.2: +mpi"
+
+Requirements and constraints restrict the set of possible solutions, while reuse
+behavior and preferences influence what an optimal solution looks like.
+
+
+.. rubric:: Footnotes
+
+.. [#f1] The exact list of criteria can be retrieved with the ``spack solve`` command