From e72f87ec647028f61b2f97541d00188fedd72c93 Mon Sep 17 00:00:00 2001
From: Harmen Stoppels <harmenstoppels@gmail.com>
Date: Tue, 18 Jan 2022 18:06:41 +0100
Subject: Switch lmod default all:autoload from none to direct (#28357)

* Switch lmod module all autoload default from none to direct

* Fix the docs
---
 etc/spack/defaults/modules.yaml                    |  6 +++
 lib/spack/docs/module_file_support.rst             | 45 ++++++++++------------
 lib/spack/spack/modules/common.py                  |  2 +-
 .../test/data/modules/lmod/alter_environment.yaml  |  1 +
 .../spack/test/data/modules/lmod/autoload_all.yaml |  2 +-
 .../test/data/modules/lmod/autoload_direct.yaml    |  2 +-
 .../spack/test/data/modules/lmod/blacklist.yaml    |  2 +-
 .../test/data/modules/lmod/complex_hierarchy.yaml  |  2 +-
 .../data/modules/lmod/core_compilers_empty.yaml    |  2 +
 .../data/modules/lmod/missing_core_compilers.yaml  |  2 +
 .../data/modules/lmod/module_path_separator.yaml   |  2 +
 .../spack/test/data/modules/lmod/no_arch.yaml      |  2 +
 .../spack/test/data/modules/lmod/no_hash.yaml      |  2 +
 .../modules/lmod/non_virtual_in_hierarchy.yaml     |  2 +-
 .../test/data/modules/lmod/override_template.yaml  |  1 +
 .../spack/test/data/modules/lmod/projections.yaml  |  2 +
 .../spack/test/data/modules/lmod/with_view.yaml    |  2 +
 .../test/data/modules/tcl/alter_environment.yaml   |  1 +
 .../spack/test/data/modules/tcl/autoload_all.yaml  |  2 +-
 .../test/data/modules/tcl/autoload_direct.yaml     |  2 +-
 .../modules/tcl/autoload_with_constraints.yaml     |  7 ++--
 .../spack/test/data/modules/tcl/blacklist.yaml     |  2 +-
 .../test/data/modules/tcl/blacklist_implicits.yaml |  2 +-
 .../spack/test/data/modules/tcl/conflicts.yaml     |  1 +
 .../data/modules/tcl/invalid_naming_scheme.yaml    |  2 +
 .../modules/tcl/invalid_token_in_env_var_name.yaml |  1 +
 .../spack/test/data/modules/tcl/naming_scheme.yaml |  2 +
 lib/spack/spack/test/data/modules/tcl/no_arch.yaml |  2 +
 .../test/data/modules/tcl/override_config.yaml     |  1 +
 .../test/data/modules/tcl/override_template.yaml   |  1 +
 .../test/data/modules/tcl/prerequisites_all.yaml   |  3 +-
 .../data/modules/tcl/prerequisites_direct.yaml     |  3 +-
 .../spack/test/data/modules/tcl/projections.yaml   |  2 +
 lib/spack/spack/test/data/modules/tcl/suffix.yaml  |  2 +
 .../test/data/modules/tcl/wrong_conflicts.yaml     |  1 +
 35 files changed, 76 insertions(+), 40 deletions(-)

diff --git a/etc/spack/defaults/modules.yaml b/etc/spack/defaults/modules.yaml
index 27b7c45f66..35be259d4d 100644
--- a/etc/spack/defaults/modules.yaml
+++ b/etc/spack/defaults/modules.yaml
@@ -46,7 +46,13 @@ modules:
     enable:
       - tcl
 
+    tcl:
+      all:
+        autoload: none
+
     # Default configurations if lmod is enabled
     lmod:
+      all:
+        autoload: direct
       hierarchy:
         - mpi
diff --git a/lib/spack/docs/module_file_support.rst b/lib/spack/docs/module_file_support.rst
index 0e79900958..72e28b653e 100644
--- a/lib/spack/docs/module_file_support.rst
+++ b/lib/spack/docs/module_file_support.rst
@@ -615,44 +615,39 @@ modifications to either ``CPATH`` or ``LIBRARY_PATH``.
 Autoload dependencies
 """""""""""""""""""""
 
-In some cases it can be useful to have module files that automatically load
-their dependencies.  This may be the case for Python extensions, if not
-activated using ``spack activate``:
+Often it is required for a module to have its (transient) dependencies loaded as well.
+One example where this is useful is when one package needs to use executables provided
+by its dependency; when the dependency is autoloaded, the executable will be in the
+PATH. Similarly for scripting languages such as Python, packages and their dependencies
+have to be loaded together.
+
+Autoloading is enabled by default for LMod, as it has great builtin support for through
+the ``depends_on`` function. For Environment Modules it is disabled by default.
+
+Autoloading can also be enabled conditionally:
 
 .. code-block:: yaml
 
-   modules:
-     default:
-       tcl:
-         ^python:
-           autoload: 'direct'
+    modules:
+      default:
+        tcl:
+          all:
+            autoload: none
+          ^python:
+            autoload: direct
 
 The configuration file above will produce module files that will
 load their direct dependencies if the package installed depends on ``python``.
 The allowed values for the ``autoload`` statement are either ``none``,
-``direct`` or ``all``.  The default is ``none``.
-
-.. tip::
-  Building external software
-     Setting ``autoload`` to ``direct`` for all packages can be useful
-     when building software outside of a Spack installation that depends on
-     artifacts in that installation.  E.g. (adjust ``lmod`` vs ``tcl``
-     as appropriate):
-
-  .. code-block:: yaml
-
-     modules:
-       default:
-         lmod:
-           all:
-             autoload: 'direct'
+``direct`` or ``all``.
 
 .. note::
   TCL prerequisites
      In the ``tcl`` section of the configuration file it is possible to use
      the ``prerequisites`` directive that accepts the same values as
      ``autoload``. It will produce module files that have a ``prereq``
-     statement instead of automatically loading other modules.
+     statement, which can be used to autoload dependencies in some versions
+     of Environment Modules.
 
 ------------------------
 Maintaining Module Files
diff --git a/lib/spack/spack/modules/common.py b/lib/spack/spack/modules/common.py
index 37a5566995..884522b7c2 100644
--- a/lib/spack/spack/modules/common.py
+++ b/lib/spack/spack/modules/common.py
@@ -191,7 +191,7 @@ def merge_config_rules(configuration, spec):
     # Transform keywords for dependencies or prerequisites into a list of spec
 
     # Which modulefiles we want to autoload
-    autoload_strategy = spec_configuration.get('autoload', 'none')
+    autoload_strategy = spec_configuration.get('autoload', 'direct')
     spec_configuration['autoload'] = dependencies(spec, autoload_strategy)
 
     # Which instead we want to mark as prerequisites
diff --git a/lib/spack/spack/test/data/modules/lmod/alter_environment.yaml b/lib/spack/spack/test/data/modules/lmod/alter_environment.yaml
index 314dd1ddf5..5d72dd032d 100644
--- a/lib/spack/spack/test/data/modules/lmod/alter_environment.yaml
+++ b/lib/spack/spack/test/data/modules/lmod/alter_environment.yaml
@@ -8,6 +8,7 @@ lmod:
     - mpi
 
   all:
+    autoload: none
     filter:
       environment_blacklist:
         - CMAKE_PREFIX_PATH
diff --git a/lib/spack/spack/test/data/modules/lmod/autoload_all.yaml b/lib/spack/spack/test/data/modules/lmod/autoload_all.yaml
index ae08639a9f..a7dc8c7734 100644
--- a/lib/spack/spack/test/data/modules/lmod/autoload_all.yaml
+++ b/lib/spack/spack/test/data/modules/lmod/autoload_all.yaml
@@ -8,4 +8,4 @@ lmod:
   verbose: true
 
   all:
-    autoload: 'all'
+    autoload: all
diff --git a/lib/spack/spack/test/data/modules/lmod/autoload_direct.yaml b/lib/spack/spack/test/data/modules/lmod/autoload_direct.yaml
index 2c68672f84..1c74349c4d 100644
--- a/lib/spack/spack/test/data/modules/lmod/autoload_direct.yaml
+++ b/lib/spack/spack/test/data/modules/lmod/autoload_direct.yaml
@@ -7,4 +7,4 @@ lmod:
     - mpi
 
   all:
-    autoload: 'direct'
+    autoload: direct
diff --git a/lib/spack/spack/test/data/modules/lmod/blacklist.yaml b/lib/spack/spack/test/data/modules/lmod/blacklist.yaml
index e1813910aa..f94d6d8ec2 100644
--- a/lib/spack/spack/test/data/modules/lmod/blacklist.yaml
+++ b/lib/spack/spack/test/data/modules/lmod/blacklist.yaml
@@ -9,4 +9,4 @@ lmod:
     - callpath
 
   all:
-    autoload: 'direct'
+    autoload: direct
diff --git a/lib/spack/spack/test/data/modules/lmod/complex_hierarchy.yaml b/lib/spack/spack/test/data/modules/lmod/complex_hierarchy.yaml
index 5cad95c7fa..cb39ecfa92 100644
--- a/lib/spack/spack/test/data/modules/lmod/complex_hierarchy.yaml
+++ b/lib/spack/spack/test/data/modules/lmod/complex_hierarchy.yaml
@@ -17,4 +17,4 @@ lmod:
   verbose: false
 
   all:
-    autoload: 'all'
+    autoload: all
diff --git a/lib/spack/spack/test/data/modules/lmod/core_compilers_empty.yaml b/lib/spack/spack/test/data/modules/lmod/core_compilers_empty.yaml
index 5cfc3356bb..0ec4059994 100644
--- a/lib/spack/spack/test/data/modules/lmod/core_compilers_empty.yaml
+++ b/lib/spack/spack/test/data/modules/lmod/core_compilers_empty.yaml
@@ -1,6 +1,8 @@
 enable:
   - lmod
 lmod:
+  all:
+    autoload: none
   core_compilers: []
   hierarchy:
     - mpi
diff --git a/lib/spack/spack/test/data/modules/lmod/missing_core_compilers.yaml b/lib/spack/spack/test/data/modules/lmod/missing_core_compilers.yaml
index f5fe65651c..74a6092cdc 100644
--- a/lib/spack/spack/test/data/modules/lmod/missing_core_compilers.yaml
+++ b/lib/spack/spack/test/data/modules/lmod/missing_core_compilers.yaml
@@ -1,5 +1,7 @@
 enable:
   - lmod
 lmod:
+  all:
+    autoload: none
   hierarchy:
     - mpi
diff --git a/lib/spack/spack/test/data/modules/lmod/module_path_separator.yaml b/lib/spack/spack/test/data/modules/lmod/module_path_separator.yaml
index 208554968f..8f70086986 100644
--- a/lib/spack/spack/test/data/modules/lmod/module_path_separator.yaml
+++ b/lib/spack/spack/test/data/modules/lmod/module_path_separator.yaml
@@ -1,5 +1,7 @@
 enable:
   - lmod
 lmod:
+  all:
+    autoload: none
   core_compilers:
     - 'clang@3.3'
diff --git a/lib/spack/spack/test/data/modules/lmod/no_arch.yaml b/lib/spack/spack/test/data/modules/lmod/no_arch.yaml
index 1f10bcb792..6fdc7ab946 100644
--- a/lib/spack/spack/test/data/modules/lmod/no_arch.yaml
+++ b/lib/spack/spack/test/data/modules/lmod/no_arch.yaml
@@ -2,5 +2,7 @@ enable:
   - lmod
 arch_folder: false
 lmod:
+  all:
+    autoload: none
   core_compilers:
     - 'clang@3.3'
\ No newline at end of file
diff --git a/lib/spack/spack/test/data/modules/lmod/no_hash.yaml b/lib/spack/spack/test/data/modules/lmod/no_hash.yaml
index 726ba4d264..6c8b3cf9b6 100644
--- a/lib/spack/spack/test/data/modules/lmod/no_hash.yaml
+++ b/lib/spack/spack/test/data/modules/lmod/no_hash.yaml
@@ -1,6 +1,8 @@
 enable:
   - lmod
 lmod:
+  all:
+    autoload: none
   hash_length: 0
 
   core_compilers:
diff --git a/lib/spack/spack/test/data/modules/lmod/non_virtual_in_hierarchy.yaml b/lib/spack/spack/test/data/modules/lmod/non_virtual_in_hierarchy.yaml
index d6c74132d4..bf9df440d0 100644
--- a/lib/spack/spack/test/data/modules/lmod/non_virtual_in_hierarchy.yaml
+++ b/lib/spack/spack/test/data/modules/lmod/non_virtual_in_hierarchy.yaml
@@ -8,4 +8,4 @@ lmod:
     - openblas
 
   all:
-    autoload: 'direct'
+    autoload: direct
diff --git a/lib/spack/spack/test/data/modules/lmod/override_template.yaml b/lib/spack/spack/test/data/modules/lmod/override_template.yaml
index 979309a725..9f82622ed5 100644
--- a/lib/spack/spack/test/data/modules/lmod/override_template.yaml
+++ b/lib/spack/spack/test/data/modules/lmod/override_template.yaml
@@ -8,3 +8,4 @@ lmod:
 
   all:
     template: 'override_from_modules.txt'
+    autoload: none
diff --git a/lib/spack/spack/test/data/modules/lmod/projections.yaml b/lib/spack/spack/test/data/modules/lmod/projections.yaml
index 1efd93bc89..6b1fadbb67 100644
--- a/lib/spack/spack/test/data/modules/lmod/projections.yaml
+++ b/lib/spack/spack/test/data/modules/lmod/projections.yaml
@@ -1,6 +1,8 @@
 enable:
   - lmod
 lmod:
+  all:
+    autoload: none
   projections:
     all: '{name}/v{version}'
     mpileaks: '{name}-mpiprojection'
diff --git a/lib/spack/spack/test/data/modules/lmod/with_view.yaml b/lib/spack/spack/test/data/modules/lmod/with_view.yaml
index 28220fe445..0947b67e7d 100644
--- a/lib/spack/spack/test/data/modules/lmod/with_view.yaml
+++ b/lib/spack/spack/test/data/modules/lmod/with_view.yaml
@@ -2,5 +2,7 @@ enable:
   - lmod
 use_view: default
 lmod:
+  all:
+    autoload: none
   core_compilers:
     - 'clang@3.3'
diff --git a/lib/spack/spack/test/data/modules/tcl/alter_environment.yaml b/lib/spack/spack/test/data/modules/tcl/alter_environment.yaml
index 74d9724695..b9082c9529 100644
--- a/lib/spack/spack/test/data/modules/tcl/alter_environment.yaml
+++ b/lib/spack/spack/test/data/modules/tcl/alter_environment.yaml
@@ -2,6 +2,7 @@ enable:
   - tcl
 tcl:
   all:
+    autoload: none
     filter:
       environment_blacklist:
         - CMAKE_PREFIX_PATH
diff --git a/lib/spack/spack/test/data/modules/tcl/autoload_all.yaml b/lib/spack/spack/test/data/modules/tcl/autoload_all.yaml
index 6b6a9b0736..f24c7d6dbc 100644
--- a/lib/spack/spack/test/data/modules/tcl/autoload_all.yaml
+++ b/lib/spack/spack/test/data/modules/tcl/autoload_all.yaml
@@ -3,4 +3,4 @@ enable:
 tcl:
   verbose: true
   all:
-    autoload: 'all'
+    autoload: all
diff --git a/lib/spack/spack/test/data/modules/tcl/autoload_direct.yaml b/lib/spack/spack/test/data/modules/tcl/autoload_direct.yaml
index 3cdf3b525b..2d3cdbf0d5 100644
--- a/lib/spack/spack/test/data/modules/tcl/autoload_direct.yaml
+++ b/lib/spack/spack/test/data/modules/tcl/autoload_direct.yaml
@@ -2,4 +2,4 @@ enable:
   - tcl
 tcl:
   all:
-    autoload: 'direct'
+    autoload: direct
diff --git a/lib/spack/spack/test/data/modules/tcl/autoload_with_constraints.yaml b/lib/spack/spack/test/data/modules/tcl/autoload_with_constraints.yaml
index 52796cad5b..98277b98fa 100644
--- a/lib/spack/spack/test/data/modules/tcl/autoload_with_constraints.yaml
+++ b/lib/spack/spack/test/data/modules/tcl/autoload_with_constraints.yaml
@@ -1,8 +1,9 @@
 enable:
   - tcl
 tcl:
+  all:
+    autoload: none
   ^mpich2:
-    autoload: 'direct'
-
+    autoload: direct
   ^python:
-    autoload: 'direct'
+    autoload: direct
diff --git a/lib/spack/spack/test/data/modules/tcl/blacklist.yaml b/lib/spack/spack/test/data/modules/tcl/blacklist.yaml
index ab2502f83a..8e691526bd 100644
--- a/lib/spack/spack/test/data/modules/tcl/blacklist.yaml
+++ b/lib/spack/spack/test/data/modules/tcl/blacklist.yaml
@@ -7,4 +7,4 @@ tcl:
     - callpath
     - mpi
   all:
-    autoload: 'direct'
+    autoload: direct
diff --git a/lib/spack/spack/test/data/modules/tcl/blacklist_implicits.yaml b/lib/spack/spack/test/data/modules/tcl/blacklist_implicits.yaml
index 4d5fbfb04a..a76a6bfabb 100644
--- a/lib/spack/spack/test/data/modules/tcl/blacklist_implicits.yaml
+++ b/lib/spack/spack/test/data/modules/tcl/blacklist_implicits.yaml
@@ -3,4 +3,4 @@ enable:
 tcl:
   blacklist_implicits: true
   all:
-    autoload: 'direct'
+    autoload: direct
diff --git a/lib/spack/spack/test/data/modules/tcl/conflicts.yaml b/lib/spack/spack/test/data/modules/tcl/conflicts.yaml
index 0183753e55..c5648eb45b 100644
--- a/lib/spack/spack/test/data/modules/tcl/conflicts.yaml
+++ b/lib/spack/spack/test/data/modules/tcl/conflicts.yaml
@@ -4,6 +4,7 @@ tcl:
   projections:
     all: '{name}/{version}-{compiler.name}'
   all:
+    autoload: none
     conflict:
       - '{name}'
       - 'intel/14.0.1'
diff --git a/lib/spack/spack/test/data/modules/tcl/invalid_naming_scheme.yaml b/lib/spack/spack/test/data/modules/tcl/invalid_naming_scheme.yaml
index 36b58670da..95c0abf2e8 100644
--- a/lib/spack/spack/test/data/modules/tcl/invalid_naming_scheme.yaml
+++ b/lib/spack/spack/test/data/modules/tcl/invalid_naming_scheme.yaml
@@ -1,6 +1,8 @@
 enable:
   - tcl
 tcl:
+  all:
+    autoload: none
   # {variants} is not allowed in the naming scheme, see #2884
   projections:
     all: '{name}/{version}-{compiler.name}-{variants}'
diff --git a/lib/spack/spack/test/data/modules/tcl/invalid_token_in_env_var_name.yaml b/lib/spack/spack/test/data/modules/tcl/invalid_token_in_env_var_name.yaml
index 6012a2d3b0..b03f966c7c 100644
--- a/lib/spack/spack/test/data/modules/tcl/invalid_token_in_env_var_name.yaml
+++ b/lib/spack/spack/test/data/modules/tcl/invalid_token_in_env_var_name.yaml
@@ -2,6 +2,7 @@ enable:
   - tcl
 tcl:
   all:
+    autoload: none
     filter:
       environment_blacklist:
         - CMAKE_PREFIX_PATH
diff --git a/lib/spack/spack/test/data/modules/tcl/naming_scheme.yaml b/lib/spack/spack/test/data/modules/tcl/naming_scheme.yaml
index cc4cf8f782..1f54acb04f 100644
--- a/lib/spack/spack/test/data/modules/tcl/naming_scheme.yaml
+++ b/lib/spack/spack/test/data/modules/tcl/naming_scheme.yaml
@@ -1,4 +1,6 @@
 enable:
   - tcl
 tcl:
+  all:
+    autoload: none
   naming_scheme: '{name}/{version}-{compiler.name}'
diff --git a/lib/spack/spack/test/data/modules/tcl/no_arch.yaml b/lib/spack/spack/test/data/modules/tcl/no_arch.yaml
index f997251654..10074c9578 100644
--- a/lib/spack/spack/test/data/modules/tcl/no_arch.yaml
+++ b/lib/spack/spack/test/data/modules/tcl/no_arch.yaml
@@ -2,5 +2,7 @@ enable:
   - tcl
 arch_folder: false
 tcl:
+  all:
+    autoload: none
   projections:
     all: ''
\ No newline at end of file
diff --git a/lib/spack/spack/test/data/modules/tcl/override_config.yaml b/lib/spack/spack/test/data/modules/tcl/override_config.yaml
index 4d3aaea7ae..337b12698c 100644
--- a/lib/spack/spack/test/data/modules/tcl/override_config.yaml
+++ b/lib/spack/spack/test/data/modules/tcl/override_config.yaml
@@ -2,6 +2,7 @@ enable:
   - tcl
 tcl:
   all:
+    autoload: none
     suffixes:
       '^mpich': mpich
   mpileaks:
diff --git a/lib/spack/spack/test/data/modules/tcl/override_template.yaml b/lib/spack/spack/test/data/modules/tcl/override_template.yaml
index a12e7ffd10..9aaba51809 100644
--- a/lib/spack/spack/test/data/modules/tcl/override_template.yaml
+++ b/lib/spack/spack/test/data/modules/tcl/override_template.yaml
@@ -2,4 +2,5 @@ enable:
   - tcl
 tcl:
   all:
+    autoload: none
     template: 'override_from_modules.txt'
diff --git a/lib/spack/spack/test/data/modules/tcl/prerequisites_all.yaml b/lib/spack/spack/test/data/modules/tcl/prerequisites_all.yaml
index 420c988062..eb6d097007 100644
--- a/lib/spack/spack/test/data/modules/tcl/prerequisites_all.yaml
+++ b/lib/spack/spack/test/data/modules/tcl/prerequisites_all.yaml
@@ -2,4 +2,5 @@ enable:
   - tcl
 tcl:
   all:
-    prerequisites: 'all'
+    autoload: none
+    prerequisites: all
diff --git a/lib/spack/spack/test/data/modules/tcl/prerequisites_direct.yaml b/lib/spack/spack/test/data/modules/tcl/prerequisites_direct.yaml
index 61e9fba8fc..2fbfa967f2 100644
--- a/lib/spack/spack/test/data/modules/tcl/prerequisites_direct.yaml
+++ b/lib/spack/spack/test/data/modules/tcl/prerequisites_direct.yaml
@@ -2,4 +2,5 @@ enable:
   - tcl
 tcl:
   all:
-    prerequisites: 'direct'
+    autoload: none
+    prerequisites: direct
diff --git a/lib/spack/spack/test/data/modules/tcl/projections.yaml b/lib/spack/spack/test/data/modules/tcl/projections.yaml
index 11dbd053f9..d6422de9be 100644
--- a/lib/spack/spack/test/data/modules/tcl/projections.yaml
+++ b/lib/spack/spack/test/data/modules/tcl/projections.yaml
@@ -1,6 +1,8 @@
 enable:
   - tcl
 tcl:
+  all:
+    autoload: none
   projections:
     all: '{name}/{version}-{compiler.name}'
     mpileaks: '{name}-mpiprojection'
diff --git a/lib/spack/spack/test/data/modules/tcl/suffix.yaml b/lib/spack/spack/test/data/modules/tcl/suffix.yaml
index db2e5f9d64..9e16aaeda8 100644
--- a/lib/spack/spack/test/data/modules/tcl/suffix.yaml
+++ b/lib/spack/spack/test/data/modules/tcl/suffix.yaml
@@ -1,6 +1,8 @@
 enable:
   - tcl
 tcl:
+  all:
+    autoload: none
   mpileaks:
     suffixes:
       '+opt': baz
diff --git a/lib/spack/spack/test/data/modules/tcl/wrong_conflicts.yaml b/lib/spack/spack/test/data/modules/tcl/wrong_conflicts.yaml
index 22377816c8..00116231a7 100644
--- a/lib/spack/spack/test/data/modules/tcl/wrong_conflicts.yaml
+++ b/lib/spack/spack/test/data/modules/tcl/wrong_conflicts.yaml
@@ -4,5 +4,6 @@ tcl:
   projections:
     all: '{name}/{version}-{compiler.name}'
   all:
+    autoload: none
     conflict:
       - '{name}/{compiler.name}'
-- 
cgit v1.2.3-70-g09d2