From 617c1a37060b975d12f8bfa4bdfd0acb0fa8a2d0 Mon Sep 17 00:00:00 2001
From: Michael Kuhn <suraia@ikkoku.de>
Date: Thu, 28 Feb 2019 13:22:44 +0100
Subject: [PATCH] Fix shell integration with environment-modules@4 (#10736)

---
 lib/spack/spack/cmd/bootstrap.py |  2 +-
 share/spack/setup-env.sh         | 14 ++++++++++----
 2 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/lib/spack/spack/cmd/bootstrap.py b/lib/spack/spack/cmd/bootstrap.py
index f6464f97b8..593b581c30 100644
--- a/lib/spack/spack/cmd/bootstrap.py
+++ b/lib/spack/spack/cmd/bootstrap.py
@@ -46,7 +46,7 @@ def bootstrap(parser, args, **kwargs):
     # Define requirement dictionary defining general specs which need
     # to be satisfied, and the specs to install when the general spec
     # isn't satisfied.
-    requirement_dict = {'environment-modules': 'environment-modules@3.2.10~X'}
+    requirement_dict = {'environment-modules': 'environment-modules~X'}
 
     for requirement in requirement_dict:
         installed_specs = spack.store.db.query(requirement)
diff --git a/share/spack/setup-env.sh b/share/spack/setup-env.sh
index f82a55d8f1..19bb3e24e8 100755
--- a/share/spack/setup-env.sh
+++ b/share/spack/setup-env.sh
@@ -272,10 +272,16 @@ if [ "${need_module}" = "yes" ]; then
 
     # _sp_module_prefix is set by spack --print-sh-vars
     if [ "${_sp_module_prefix}" != "not_installed" ]; then
-        #activate it!
-        export MODULE_PREFIX=${_sp_module_prefix}
-        _spack_pathadd PATH "${MODULE_PREFIX}/Modules/bin"
-        module() { eval `${MODULE_PREFIX}/Modules/bin/modulecmd ${SPACK_SHELL} $*`; }
+        # activate it!
+        # environment-modules@4: has a bin directory inside its prefix
+        MODULE_PREFIX_BIN="${_sp_module_prefix}/bin"
+        if [ ! -d "${MODULE_PREFIX_BIN}" ]; then
+            # environment-modules@3 has a nested bin directory
+            MODULE_PREFIX_BIN="${_sp_module_prefix}/Modules/bin"
+        fi
+        export MODULE_PREFIX_BIN
+        _spack_pathadd PATH "${MODULE_PREFIX_BIN}"
+        module() { eval `${MODULE_PREFIX_BIN}/modulecmd ${SPACK_SHELL} $*`; }
     fi;
 else
     eval `spack --print-shell-vars sh`
-- 
GitLab