diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/spack/spack/modules/common.py | 16 | ||||
-rw-r--r-- | lib/spack/spack/test/modules/lmod.py | 31 | ||||
-rw-r--r-- | lib/spack/spack/test/modules/tcl.py | 40 |
3 files changed, 86 insertions, 1 deletions
diff --git a/lib/spack/spack/modules/common.py b/lib/spack/spack/modules/common.py index ef3f751471..6384069c42 100644 --- a/lib/spack/spack/modules/common.py +++ b/lib/spack/spack/modules/common.py @@ -40,7 +40,7 @@ from typing import Optional import llnl.util.filesystem import llnl.util.tty as tty -from llnl.util.lang import dedupe +from llnl.util.lang import dedupe, memoized import spack.build_environment import spack.config @@ -672,6 +672,7 @@ class BaseContext(tengine.Context): return None @tengine.context_property + @memoized def environment_modifications(self): """List of environment modifications to be processed.""" # Modifications guessed by inspecting the spec prefix @@ -743,6 +744,19 @@ class BaseContext(tengine.Context): return [(type(x).__name__, x) for x in env if x.name not in exclude] @tengine.context_property + def has_manpath_modifications(self): + """True if MANPATH environment variable is modified.""" + for modification_type, cmd in self.environment_modifications: + if not isinstance( + cmd, (spack.util.environment.PrependPath, spack.util.environment.AppendPath) + ): + continue + if cmd.name == "MANPATH": + return True + else: + return False + + @tengine.context_property def autoload(self): """List of modules that needs to be loaded automatically.""" # From 'autoload' configuration option diff --git a/lib/spack/spack/test/modules/lmod.py b/lib/spack/spack/test/modules/lmod.py index d8c34908aa..5cfb6896c3 100644 --- a/lib/spack/spack/test/modules/lmod.py +++ b/lib/spack/spack/test/modules/lmod.py @@ -167,6 +167,37 @@ class TestLmod(object): assert len([x for x in content if 'append_path("SPACE", "qux", " ")' in x]) == 1 assert len([x for x in content if 'remove_path("SPACE", "qux", " ")' in x]) == 1 + @pytest.mark.regression("11355") + def test_manpath_setup(self, modulefile_content, module_configuration): + """Tests specific setup of MANPATH environment variable.""" + + module_configuration("autoload_direct") + + # no manpath set by module + content = modulefile_content("mpileaks") + assert len([x for x in content if 'append_path("MANPATH", "", ":")' in x]) == 0 + + # manpath set by module with prepend_path + content = modulefile_content("module-manpath-prepend") + assert ( + len([x for x in content if 'prepend_path("MANPATH", "/path/to/man", ":")' in x]) == 1 + ) + assert ( + len([x for x in content if 'prepend_path("MANPATH", "/path/to/share/man", ":")' in x]) + == 1 + ) + assert len([x for x in content if 'append_path("MANPATH", "", ":")' in x]) == 1 + + # manpath set by module with append_path + content = modulefile_content("module-manpath-append") + assert len([x for x in content if 'append_path("MANPATH", "/path/to/man", ":")' in x]) == 1 + assert len([x for x in content if 'append_path("MANPATH", "", ":")' in x]) == 1 + + # manpath set by module with setenv + content = modulefile_content("module-manpath-setenv") + assert len([x for x in content if 'setenv("MANPATH", "/path/to/man")' in x]) == 1 + assert len([x for x in content if 'append_path("MANPATH", "", ":")' in x]) == 0 + def test_help_message(self, modulefile_content, module_configuration): """Tests the generation of module help message.""" diff --git a/lib/spack/spack/test/modules/tcl.py b/lib/spack/spack/test/modules/tcl.py index 57f7c2ba36..5b0f9f789d 100644 --- a/lib/spack/spack/test/modules/tcl.py +++ b/lib/spack/spack/test/modules/tcl.py @@ -121,6 +121,46 @@ class TestTcl(object): assert len([x for x in content if 'append-path --delim " " SPACE "qux"' in x]) == 1 assert len([x for x in content if 'remove-path --delim " " SPACE "qux"' in x]) == 1 + @pytest.mark.regression("11355") + def test_manpath_setup(self, modulefile_content, module_configuration): + """Tests specific setup of MANPATH environment variable.""" + + module_configuration("autoload_direct") + + # no manpath set by module + content = modulefile_content("mpileaks") + assert len([x for x in content if 'append-path --delim ":" MANPATH ""' in x]) == 0 + + # manpath set by module with prepend-path + content = modulefile_content("module-manpath-prepend") + assert ( + len([x for x in content if 'prepend-path --delim ":" MANPATH "/path/to/man"' in x]) + == 1 + ) + assert ( + len( + [ + x + for x in content + if 'prepend-path --delim ":" MANPATH "/path/to/share/man"' in x + ] + ) + == 1 + ) + assert len([x for x in content if 'append-path --delim ":" MANPATH ""' in x]) == 1 + + # manpath set by module with append-path + content = modulefile_content("module-manpath-append") + assert ( + len([x for x in content if 'append-path --delim ":" MANPATH "/path/to/man"' in x]) == 1 + ) + assert len([x for x in content if 'append-path --delim ":" MANPATH ""' in x]) == 1 + + # manpath set by module with setenv + content = modulefile_content("module-manpath-setenv") + assert len([x for x in content if 'setenv MANPATH "/path/to/man"' in x]) == 1 + assert len([x for x in content if 'append-path --delim ":" MANPATH ""' in x]) == 0 + def test_help_message(self, modulefile_content, module_configuration): """Tests the generation of module help message.""" |