From ea60220a84b0547abe886683fabbb44184cdfb63 Mon Sep 17 00:00:00 2001 From: Xavier Delaruelle Date: Mon, 27 Mar 2023 10:48:25 +0200 Subject: modules: enhance help message (#36410) Update tcl and lmod modulefile template to provide more information on help message (name, version and target) like done on whatis for lmod modulefiles. --- lib/spack/spack/test/modules/lmod.py | 27 ++++++++++++++++++++++++++- lib/spack/spack/test/modules/tcl.py | 28 ++++++++++++++++++++++++++++ share/spack/templates/modules/modulefile.lua | 4 ++++ share/spack/templates/modules/modulefile.tcl | 10 +++++++--- 4 files changed, 65 insertions(+), 4 deletions(-) diff --git a/lib/spack/spack/test/modules/lmod.py b/lib/spack/spack/test/modules/lmod.py index 4ac888f2d5..3ba4953844 100644 --- a/lib/spack/spack/test/modules/lmod.py +++ b/lib/spack/spack/test/modules/lmod.py @@ -88,7 +88,7 @@ class TestLmod(object): assert provides["compiler"] == spack.spec.CompilerSpec("oneapi@3.0") def test_simple_case(self, modulefile_content, module_configuration): - """Tests the generation of a simple Tcl module file.""" + """Tests the generation of a simple Lua module file.""" module_configuration("autoload_direct") content = modulefile_content(mpich_spec_string) @@ -147,6 +147,31 @@ 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 + def test_help_message(self, modulefile_content, module_configuration): + """Tests the generation of module help message.""" + + module_configuration("autoload_direct") + content = modulefile_content("mpileaks target=core2") + + help_msg = ( + "help([[Name : mpileaks]])" + "help([[Version: 2.3]])" + "help([[Target : core2]])" + "help()" + "help([[Mpileaks is a mock package that passes audits]])" + ) + assert help_msg in "".join(content) + + content = modulefile_content("libdwarf target=core2") + + help_msg = ( + "help([[Name : libdwarf]])" + "help([[Version: 20130729]])" + "help([[Target : core2]])" + "depends_on(" + ) + assert help_msg in "".join(content) + @pytest.mark.parametrize("config_name", ["exclude", "blacklist"]) def test_exclude(self, modulefile_content, module_configuration, config_name): """Tests excluding the generation of selected modules.""" diff --git a/lib/spack/spack/test/modules/tcl.py b/lib/spack/spack/test/modules/tcl.py index f91a55691f..5b60fba785 100644 --- a/lib/spack/spack/test/modules/tcl.py +++ b/lib/spack/spack/test/modules/tcl.py @@ -123,6 +123,34 @@ 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 + def test_help_message(self, modulefile_content, module_configuration): + """Tests the generation of module help message.""" + + module_configuration("autoload_direct") + content = modulefile_content("mpileaks target=core2") + + help_msg = ( + "proc ModulesHelp { } {" + ' puts stderr "Name : mpileaks"' + ' puts stderr "Version: 2.3"' + ' puts stderr "Target : core2"' + ' puts stderr ""' + ' puts stderr "Mpileaks is a mock package that passes audits"' + "}" + ) + assert help_msg in "".join(content) + + content = modulefile_content("libdwarf target=core2") + + help_msg = ( + "proc ModulesHelp { } {" + ' puts stderr "Name : libdwarf"' + ' puts stderr "Version: 20130729"' + ' puts stderr "Target : core2"' + "}" + ) + assert help_msg in "".join(content) + @pytest.mark.parametrize("config_name", ["exclude", "blacklist"]) def test_exclude(self, modulefile_content, module_configuration, config_name): """Tests excluding the generation of selected modules.""" diff --git a/share/spack/templates/modules/modulefile.lua b/share/spack/templates/modules/modulefile.lua index 8a8329ecd1..42ef9e5fd1 100644 --- a/share/spack/templates/modules/modulefile.lua +++ b/share/spack/templates/modules/modulefile.lua @@ -15,7 +15,11 @@ whatis([[Short description : {{ short_description }}]]) whatis([[Configure options : {{ configure_options }}]]) {% endif %} +help([[Name : {{ spec.name }}]]) +help([[Version: {{ spec.version }}]]) +help([[Target : {{ spec.target }}]]) {% if long_description %} +help() help([[{{ long_description| textwrap(72)| join() }}]]) {% endif %} {% endblock %} diff --git a/share/spack/templates/modules/modulefile.tcl b/share/spack/templates/modules/modulefile.tcl index 5ea976fbdd..935d1df72d 100644 --- a/share/spack/templates/modules/modulefile.tcl +++ b/share/spack/templates/modules/modulefile.tcl @@ -14,11 +14,15 @@ module-whatis "{{ short_description }}" {% endif %} -{% if long_description %} proc ModulesHelp { } { -{{ long_description| textwrap(72)| quote()| prepend_to_line('puts stderr ')| join() }} -} + puts stderr "Name : {{ spec.name }}" + puts stderr "Version: {{ spec.version }}" + puts stderr "Target : {{ spec.target }}" +{% if long_description %} + puts stderr "" +{{ long_description| textwrap(72)| quote()| prepend_to_line(' puts stderr ')| join() }} {% endif %} +} {% endblock %} {% block autoloads %} -- cgit v1.2.3-60-g2f50