Releases: cea-hpc/modules
Releases · cea-hpc/modules
4.4.0
- Doc: add Return file basename on module-info name for full path modulefile recipe to cookbook. (fix issue #297)
- Rework internal handling of configuration options to gather all option definitions in a global array and use the same initialization and retrieval procedure, named
getConf
, for all these options. - Add the
setConf
,unsetConf
andlappendConf
procedures to provide unified ways to set the value of configuration option. These procedures should be used in site configuration files to override configuration option value instead of directly setting corresponding option variable as it was done in previous Modules releases. - Add the ability to match module specification in a case insensitive manner. Default case sensitiveness behavior is set at
./configure
time with the--with-icase
option. It could be superseded with theMODULES_ICASE
environment variable, that could be set withconfig
module sub-command through theicase
option. Command-line switch--icase
(-i
) enables to supersede defined case sensitiveness configuration. (fix issue #212 with contribution from Eric Deveaud) - Introduce the extended default mechanism, to help selecting a module when only the first numbers in its version are specified. Starting portion of the version, part separated from the rest of the version string by a
.
character, will get matched to the appropriate complete version name. In case multiple versions match partial version specified and only one module should be returned, default version (implicit or explicit) among matches is returned. In caseimplicit_default
option is disabled and no explicit
default is found among matches, an error is returned. This mechanism is enabled through a new configuration option namedextended_default
(which definesMODULES_EXTENDED_DEFAULT
environment variable when set). It may be enabled by default inmodulecmd.tcl
script with option--enable-extended-default
passed to the./configure
script. - Introduce the advanced module version specifiers mechanism to specify finer constraints on module version. This new feature enables to filter the module selection to a given version list or range by specifying after the module name a version constraint prefixed by the
@
character. It leverages the version specifier syntax of the Spack package manager. A single version can be specified with the@version
syntax, a list of versions with@version1,version2,...
, a greater than or equal to range with@version1:
syntax, a less than or equal to range with@:version2
and an in between or equal to range with@version1:version2
syntax. In caseimplicit_default
option is disabled and no explicit default is found among version specifier matches, an error is returned. This mechanism is enabled through a new configuration option namedadvanced_version_spec
(which definesMODULES_ADVANCED_VERSION_SPEC
environment variable when set). It may be enabled by default inmodulecmd.tcl
script with option--enable-advanced-version-spec
passed to the./configure
script. - Conflict defined with a generic module name or an advanced version specifier may match multiple loaded modules (generally in case multiple loaded modules share same root name). Loaded environment analysis has been fixed to bind conflict to all loaded modules matching it. As a result the Dependent Reload mechanism is not triggered when one loaded module matching conflict is removed if another loaded module still match the conflict.
- Doc: add Module selection contexts, Insensitive case, Extended default and Advanced module version specifiers design notes.
- Make
MODULESHOME
environment variable controllable through theconfig
sub-command withhome
configuration option. A--with-moduleshome
argument is also added to the ./configure script to set specific default value for this option at installation time. (fix issue #292)
4.3.1
- Contrib: add
mb
script to bench Modules versions. - Correct
modulecmd.tcl
script startup to correctly report error in case Tcl extension library fails to load. (fix issue #284) - Install: fix typo on
CFLAGS
definition inlib/Makefile
. (fix issue #287 with contribution from Felix Neumärker) - Remove useless code in Modules Tcl extension library
- Make URLs in README correctly rendered in HTML. (contribution from Per Persson)
- Doc: clarify modulefile evaluation modes in modulefile.4 man page. (fix issue #289)
- When looking at the closest match among loaded modules when switching module with just a single module argument specified, load the information on the currently set environment to get the alternative names of loaded modules prior to look at closest module match. (fix issue #290)
- Doc: describe the way to determine the site-specific configuration script location in cookbook recipes implying the installation of such a file. (fix issue #266)
- Doc: add Log module command recipe to cookbook. (fix issue #283)
- Doc: add Expose procedures and variables to modulefiles recipe to cookbook.
- Doc: add Make defined modulepaths persist over sudo recipe to cookbook.
- Doc: add Ensure user fully qualify the modules they use recipe to cookbook.
- Introduce the
wa_277
configuration option to workaround an issue with Tcsh history mechanism. Defaultmodule
alias definition for Tcsh hits an issue with shell history mechanism: erroneous history entries are recorded each time themodule
command is called. Whenwa_277
option is enabled (which sets theMODULES_WA_277
environment variable to 1), an alternative module alias is defined which fixes the history mechanism issue. However the alternative definition of the module alias weakens shell evaluation of the code produced by modulefiles. Characters with special meaning for Tcsh shell (like { and }) may not be used anymore in shell alias definition elsewhere the evaluation of the code produced by modulefiles will return a syntax error. (fix issue #277) - Doc: add Tips for Code Reuse in Modulefiles recipe to cookbook. (contribution from Tom Payerle)
- Fix the
whatis
andpaths
sub-command results for module symbolic versions targeting a directory whenimplicit_default
configuration option is disabled. No error is returned and same result is now obtained whether the symbolic name or its target is used as argument for those two sub-commands. (fix issue #294) - Fix the
whatis
andpaths
sub-command results for module aliases targeting a directory whenimplicit_default
configuration option is disabled. No error is returned and same result is now obtained whether the alias name or its target is used as argument for those two sub-commands. (fix issue #295) - Rework all the ternary operator expressions in
modulecmd.tcl
that may result in a nan value (whatever the case used to write this string) as theexpr
Tcl command raises an error when it returns such a value, which breaks Modules as soon as a modulefile, an alias or a symbolic version is named nan. (fix issue #296)
4.3.0
- Introduce Vim addon files to highlight the modulefile syntax. Installation of these files, which is enabled by default, is controlled by the
--enable-vim-addons
and--vimdatadir
configure options. (contribution from Felix Neumärker) - If modulefile is fully read, cache the content read and the file header computed to avoid another file read if the same modulefile need to be read multiple times.
- Except for path, paths, list, avail and aliases module commands always fully read a modulefile whether its full content is needed or just its header to verify its validity. Proceed this way to only read file once on commands that first just check modulefile validity then read again valid files to get their full content.
- Introduce Modules Tcl extension library (written in C) to extend Tcl language in order to provide more optimized I/O commands to read a file or a directory content than native Tcl commands do.
- Install: add
--libdir
,--enable-libtclenvmodules
,--with-tcl
and--with-tclinclude
options to configure script to control libtclenvmodules build and installation. - When an error is caught during modulecmd.tcl first initialization steps, ensure the error report facility is initialized to render error message.
- When looking for modulefiles in enabled modulepaths, take
.modulerc
file found at the root of a modulepath directory into account. Which means these rc files are now evaluated like global rc files and can be used to define module aliases targeting modulefiles stored in the underlying file tree. - Correctly get available default (-d) and latest (-L) version whether search pattern is passed with an ending forward slash character or not or if it contains a
*
wildcard character. - Append a forward slash character to any directory result of an avail command to better distinguish these directories from regular files.
- Introduce the ability to control whether
avail
command search results should recursively include or not modulefiles from directories matching search query by use of the--indepth
and--no-indepth
command-line switches or the environment variableMODULES_AVAIL_INDEPTH
. Default behavior is set at the./configure
time with the--enable-avail-indepth
and--disable-avail-indepth
switches. (fix issue #150) - Update
bash
,fish
andzsh
completion scripts to propose available modulefiles in the no in depth mode. - Add the ability to graphically enhance some part of the produced output to improve readability by the use of the
--color
command-line switch or theMODULES_COLOR
environment variable. Both accept the following values:never
,auto
andalways
. When color mode is set toauto
, output is colored if stderr is attached to a terminal. Default color mode could be controlled at configure time with the--enable-color
and the--disable-color
option, which respectively correspond to theauto
andnever
color mode. - Control the color to apply to each element with the
MODULES_COLORS
environment variable or the--with-dark-background-colors
and--with-light-background-colors
configure options. These variable and options take as value a colon-separated list in the same fashionLS_COLORS
does. In this list, each element that should be highlighted is associated to a Select Graphic Rendition (SGR) code. - Inform Modules of the terminal background color with the
MODULES_TERM_BACKGROUND
environment variable or the--with-terminal-background
configure option, which helps to determine if either the dark or light background colors should be used to color output in case no specific color set is defined with theMODULES_COLORS
. - Color prefix tag of debug, error, warning, module error and info messages.
- Highlight the modulefile or collection name when reporting messages for a an action made over this modulefile or collection.
- Color the modulepaths reported on a
use
command. - Highlight title of separator lines or column name of table header.
- Color modulepaths, directories, aliases and symbols reported by the
avail
,aliases
,list
,whatis
andsearch
commands. - When color mode is enabled and module aliases are colored, do not associate them a
@
tag as the color already distinguish them from regular modulefile. - When color mode is enabled and a Select Graphic Rendition (SGR) code is set for the
default
modulefile symbol, apply this SGR code to the modulefile name instead of associating it thedefault
symbol tag. - Highlight matched module search query string among
avail
,whatis
andsearch
command results. - Highlight the modulefile and collection full path name on
display
,help
,test
andsaveshow
command reports. - Color modulefile Tcl commands set in a modulefile on a
display
command report. - Color module commands set in a collection on a
saveshow
command report. - Re-introduce
clear
sub-command. (fix issue #203) - Leverage
--force
command-line switch onclear
sub-command to skip confirmation dialog. (fix issue #268) - Init: improve readability of variable definition operations by writing one definition operation per line rather having multiple commands on a single line like
VAR=val; export VAR
. (fix issue #225) - Add the ability to define a site-specific configuration file with an environment variable:
MODULES_SITECONFIG
. When set, the script file pointed by the variable is sourced (if readable) after the site-specific configuration file initially defined inmodulecmd.tcl
. (contribution from Ben Bowers, fix issue #234) - Doc: add description in the module.1 man page of
MODULERCFILE
in the environment section andsiteconfig.tcl
in the files section. - Install: provide at installation time a bare site-specific configuration script in designated
etcdir
if no pre-existingsiteconfig.tcl
file is found at designated location. - Introduce the
config
sub-command to get and setmodulecmd.tcl
options and to report its current state. - Contrib: update
createmodule.py
script to support execution from the cmd shell. (contribution from Jacques Raphanel, fix issue #270) - Add the ability to configure when unloading a module and multiple loaded modules match request if firstly loaded module should be chosen or lastly loaded module. Configure option
--with-unload-match-order
defines this setting which can be superseded with theMODULES_UNLOAD_MATCH_ORDER
environment variable. This variable can be set with the optionunload_match_order
on theconfig
sub-command. By default, lastly loaded module is selected. It is recommended to keep this behavior when the modulefiles used express dependencies between each other. - Add the ability to configure whether an implicit default version should be defined for modules with no default version explicitly defined. When enabled, which stays the default behavior, a module version is automatically selected (latest one) when the generic name of the module is passed. When implicit default selection is disabled, the name of modules to evaluate should be fully qualified elsewhere an error is returned. This option is set at
./configure
time with the--enable-implicit-default
and--disable-implicit-default
options. It could be superseded with theMODULES_IMPLICIT_DEFAULT
environment variable, that could be set withconfig
module sub-command through theimplicit_default
option. - Install: add to the configure script the
--with-locked-configs
option to ignore environment variable superseding of Modules configurations defined inmodulecmd.tcl
script. Lockable configuration option areextra_siteconfig
andimplicit_default
. Currently locked options are reported through thelocked_configs
option on theconfig
sub-command. - Introduce the ability to control the module search match. Search query string should match module name start or any part of module fully qualified name. Default search match behavior is set at
./configure
time with the--with-search-match
option. It could be superseded with theMODULES_SEARCH_MATCH
environment variable, that could be set withconfig
module sub-command through thesearch_match
option. Command-line switches--starts-with
(-S
) and--contains
(-C
) foravail
module sub-command enable to supersede defined search match configuration. - Introduce the ability not to set the shell startup file that ensure
module
command is defined once shell has been initialized. Setting shell startup file currently means definingENV
andBASH_ENV
environment variables to the Modules bourne shell initialization script../configure
options--enable-set-shell-startup
and--disable-set-shell-startup
define if shell startup should be set or not by default. It could be superseded with theMODULES_SET_SHELL_STARTUP
environment variable, that could be set withconfig
module sub-command through theset_shell_startup
option. - Cookbook: add the test-modulefiles recipe. (fix issue #182 with contribution from Colin Marquardt)
- Fix location of global RC file to
@etcdir@/rc
instead of@prefix@/etc/rc
to cope with@etcdir@
specific setup (@etcdir@
defaults to@prefix@/etc
). - Take into account Modules initialization configurations found in
etc
directory if they exist rather ininit
directory. Ifinitrc
configuration file is found inetcdir
then it is preferred overmodulerc
file ininitdir
. Following the same trend,modulespath
configuration file is found inetcdir
then it is preferred over.modulespath
file ininitdir
. - Introduce the ability to install the Modules initialization configuration files in the
etcdir
rather than in theinitdir
. A new configure option is introduced for this task:--with-initconf-in
. Accepted values for this option are:etcdir
orinitdir
(default). - Add the
--enable-modulespath
configure option, which is an alias for the--enable-dotmodulespath
option as.modulespath
configuration file i...
4.2.5
- Correctly escape
?
character in shell alias. (fix issue #275) - When resolving the enabled list of modulepaths, ensure resolved path entries are unique. (fix issue #274)
- Right trim '#' characters from the fetched modulefile magic cookie string to ensure a correct compatibility version comparison. Useful when modulefile first line is equal to
#%Module4.2##############
. - Fix argument parsing for the
append-path
,prepend-path
andremove-path
modulefile commands to consider every arguments found after the variable name as variable values and not command option even if argument starts with-
character. (fix issue #278) - Fix automatic loading of modulefiles when multiple module names are set on a single
module load
modulefile command. When auto_handling mode was disabled, the load of not loaded modules was not achieved as soon as some modules on this list were already loaded. (fix issue #281)
4.2.4
- Better track each module evaluation and the context associated to it in order to report a more accurate information on the additional modules loaded or unloaded when proceeding the main evaluation request. (fix issue #244, #245, #246, #247 and #248)
- Doc: preserve quotes and dashes when making HTML docs. (fix issue #250 with contribution from Riccardo Coccioli)
- Fix hanging
list
sub-command when terminal width is equal to the single column text width to be printed. (contribution from Jesper Dahlberg) - During an additional evaluation triggered by an automated module handling mechanism, ensure warning and error messages are reported under the message block of the main evaluation. (fix issue #252)
- During the unload of a module when the automated module handling mode is disabled, report a warning message for each unload of a useless requirement that fails as done when the automated module handling mode is enabled. (fix issue #253)
- When multiple modules are listed on a
prereq
command, drop the output of those modules that fails to load (by the Requirement Load automated mechanism) to only keep the output of the module whose load succeed. (fix issue #254) - Fix
switch
sub-command when the switched-off module cannot be unloaded when other loaded modules depend on it. Whole switch process is failed and no load of the switched-on module is attempted. (fix issue #251) - When switching modules, report failure of switched-off module unload or switched-on module load under the message block of the switch action. A failed switched-off module unload is reported as an error, as it aborts the switch evaluation, whereas a failed switched-on module load is reported as a warning. (fix issue #255)
- When a module requirement is seen missing but the load of this module was attempted, report a more specific error or warning message to let user understand that the load of the requirement was attempted but failed. (fix issue #257)
- When loading a module, report any missing requirement on the message reporting block corresponding to this module load. This warning or error message comes in addition to the eventual Requirement Load message reported under the message block of the main evaluation. (fix issue #258)
- When unloading a module which has some dependent module still loaded, produce a more specific error or warning message if an evaluation of these dependent modules has been realized or if the unload of the required module is forced. (fix issue #259)
- When a conflicting module is seen loaded but the unload of this module was attempted, report a Conflict Unload error or warning message toward the main evaluation message block. (fix issue #261)
- When loading a module, report any loaded conflict on the message reporting block corresponding to this module load. This warning or error message comes in addition to the eventual Conflict Unload message reported under the message block of the main evaluation. (fix issue #261)
- Correctly report loading state of conflicting module. (fix issue #262)
- Adapt warning, error and info messages relative to the Dependent Reload mechanism to distinguish the unload phase from the load (reload) phase of this mechanism. In the automated module handling summary report, unloaded modules via this mechanism are reported in the Unloading dependent list and modules reloaded afterward are reported against the Reloading dependent list. (fix issue #263)
- When the automated module handling mode is disabled, do not attempt to load a requirement expressed in a modulefile with a
module load
command, if this requirement is already loaded or loading. - Skip load or unload evaluation of a module whose respectively load or unload was already attempted but failed. If this second evaluation attempt occurs within the same main evaluation frame. (fix issue #264)
- When reloading modules through the Dependent Reload automated mechanism, prevent modules to automatically load of other modules with the
module load
modulefile command, as it is done for theprereq
command. (fix issue #265) - Raise an error when an invalid option is set on
append-path
,prepend-path
orremove-path
modulefile command. (fix issue #249) - Zsh initializes by default the
MANPATH
environment variable to an empty value when it starts. To preservemanpath
system configuration even after addition to this variable by modulefiles, setMANPATH
variable to:
if found empty. (improve fix for issue #224) - Doc: provide a short installation guideline in README file. (fix issue #230)
4.2.3
- Add all the module dependency-related internal information to those saved prior a modulefile evaluation in order to correctly restore internal state in case modulefile evaluation fails.
- Init: in shell initialization scripts, initialize
MANPATH
if not set with a value that preservesmanpath
system configuration even after addition of paths to this variable by modulefiles. (fix issue#224) - Enable to define an entire path entry to the
MODULEPATH
variable which corresponds to a variable reference only. (fix issue#223) - Cookbook: add the modulefiles-in-git recipe. (contribution from Scott Johnson)
- When
module switch
commands are found in modulefiles, track switched-off modulefile as a conflict and switched-to modulefile as a requirement to apply same behaviors than formodule load
andmodule unload
commands in modulefiles. Ifmodule switch
has only one argument, do not define a conflict toward switched-off modulefile. CAUTION: it is not recommended to usemodule switch
command in modulefiles. (fix issue#229) - When unloading a module, revert
module switch
commands found in modulefile: switched-on module is converted to amodule unload
, like formodule load
command. Nothing is done for switched-off module, like formodule unload
command. (fix issue#226) - For default element in a modulefile directory which is a module alias that points to a modulefile, when this modulefile is loaded, it receives as alternative names the eventual module aliases set on the distant directory holding the alias pointing to it. (fix issue#231)
- When unloading a module that contains
module load
ormodule switch
commands in its modulefile, select for unload the automatically loaded requirement module which has been loaded prior its dependent. (fix issue#232) - Doc: describe Emacs settings useful for adhering to coding conventions in CONTRIBUTING guide. (fix issue#233 with contribution from Ben Bowers)
- When looking for a loaded or loading dependency requirement, select among the eventual multiple candidates the closest match to the dependent module.
- During the unload of a module, if the unload of one of its dependent (by the Dependent Unload mechanism) fails, abort the whole unload process. Exception made if the force mode is enabled. In this case failing module stays loaded and the Dependent Unload mechanism continues with next module to unload.
- During the unload of a module, if the unload of one of its useless requirements (by the Useless Requirement Unload mechanism) fails, keep the requirements of this failing module loaded. Such error is reported as a warning and it does not stop the whole unload process. (fix issue#240)
- During the load or the unload of a module, if the unload of one of its dependent (by the Dependent Reload mechanism) fails, abort the whole unload or load process. Exception made if the force mode is enabled. In this case failing module stays loaded and Dependent Reload mechanism continues with next module to unload. This failing module is removed from the Dependent Reload list, so it will not take part of the load phrase of the mechanism. (fix issue#239)
- During the load or the unload of a module, if the load of one of its dependent (by the Dependent Reload mechanism) fails, abort the whole unload or load process. Exception made if the force mode is enabled. In this case failing module stays loaded and Dependent Reload mechanism continues with next module to load. When the mechanism is applied during a
switch
command, force mode is enabled by default on the load phase. (fix issue#241) - When reloading all loaded modules with the
reload
sub-command, if one reloading module fails to unload or load, abort the whole reload process to preserve environment sanity. (fix issue#237) - During the unload of a module when the automated module handling mode is disabled and this module declares its requirements with the
module load
modulefile command. If the unload of one of its useless requirements (by the Useless Requirement Unload mechanism) fails, whole unload process is not aborted and continue with next module to unload. (fix issue#238) - Contrib: add
mtreview
utility script that analyzes test suite log file to compare actual and expected output of failed test.mt
does not output the full test suite logs anymore but only the information produced bymtreview
on failed tests. - Install: exclude Continuous Integration configurations from dist tarballs.
4.2.2
- Correct the Dependent Unload mechanism when it triggers the unload of 2 modules making together a requirement from another module. This module is now also added to the dependent modules to unload.
- Doc: add a cookbook section in the documentation and port there the 3 pre-existing recipes: inhibit-report-info, top-priority-values and unload-firstly-loaded.
- Doc: add a CONTRIBUTING guide.
- Doc: fix a typo on the Python initialization example in module man page.
- Doc: add a FAQ entry to describe the use of module from Makefile. (with contribution from Robert McLay)
- Trim any white-space, newline or
;
characters at the beginning or end of the function body passed to set-function modulefile command. - Init: add recognition of the
--auto
,--no-auto
and--force
command-line switches in fish shell completion script. - Init: add recognition of the
--auto
,--no-auto
,--force
,--paginate
and--no-pager
command-line switches in zsh shell completion script. - When the load of a modulefile is asked but a conflict is registered against this modulefile by an already loaded module, the load evaluation is now performed and the conflict is checked after this evaluation. If the conflict is still there, this evaluation (and the evaluation of its requirements) is rolled back. (fix issue#216)
- Init: fix
_module_not_yet_loaded
alias in tcsh completion script to handle situation whennoclobber
variable is set. Also ensure actualrm
command is called and not an alias. (fix issue#219) - Fix warning message when the load of a modulefile is forced over a reflexive conflict (message was reported twice).
- When looking at the dependency of a loaded module, only consider requirement loaded before dependent module (holding a prior position in the loaded module list) as valid. Those loaded after dependent module are considered as an unmet dependency thus they are not taking part in the Dependent Unload, the Useless Requirement Unload and the Dependent Reload mechanisms.
4.2.1
- Cookbook: add the inhibit-report-info recipe.
- Cookbook: port unload-firstly-loaded and top-priority-values recipes to v4.2.
- Init: fix listing of loaded modules for fish and tcsh shell completions.
- Init: fix saved collection listing when no collection found for bash, zsh, tcsh and fish shell completions.
- Adapt
system
modulefile Tcl command to execute the command passed as argument through shell, like it is performed on compatibility version. (fix issue#205) - Correctly filter modulefile search memory cache entries when using a full search result to search later on a specific modulefile.
- Prefix debug messages by information on the current modulefile or modulerc interpreter if any.
- Init: fix listing of loaded modules on unload and switch sub-commands for bash shell completion.
- Refrain
module unload
modulefile command from unloading a module required by another loading module. - Enable
is-loaded
modulefile Tcl command in modulerc interpretation context, like done on compatibility version. (fix issue#207) - Check a required module is not already loading before attempting to load it. Helps to handle cyclic dependencies.
- Compute loaded modules requirement dependency relations without cycle and consider the module closing the cycle in a constraint violation state to avoid reloading loops on the Dependent Reload mechanism.
- Safely unset dependency reference when computing dependency relations as some dependencies expressed may target same module.
- Ensure a loaded module matching multiple entries of a same or
prereq
will just be considered as one module matching this requirement. - Init: quote prompt in csh and tcsh script with
:q
rather double-quotes to accommodate prompts with embedded newlines. (fix issue#209 with contribution from Satya Mishra) - Init: skip shell environment alteration if
autoinit
command fails. (fix issue#208) - Reword path-like variable element counter reference handling to simply ignore the counter values not coherent with the content of related path-like variable. (fix issue#206)
4.2.0
- Add
chdir
andputs
environment settings to the per-modulefile evaluation saved context. So previous values of these settings are restored in case of evaluation failure. - Fix save and restore of
x-resource
environment settings on the per-modulefile evaluation context. - Use the correct warning procedure to report the full reference counter inconsistency message (so this message is fully inhibited during global
whatis
evaluations). - Make
append-path
,prepend-path
,remove-path
andunsetenv
commands alterenv
Tcl global array duringdisplay
,help
,test
orwhatis
evaluation modes. Thus an invalid argument passed to these commands will now raise error on these modes. (see MIGRATING document) - On
whatis
mode,append-path
,prepend-path
,remove-path
,setenv
andunsetenv
commands initialize variables if undefined but do not set them to their accurate value for performance concern. - Clear value instead of unsetting it during an unload mode evaluation of
setenv
or*-path
commands to avoid breaking later reference to the variable in modulefile. - Make
getenv
command returns value onhelp
,test
orwhatis
evaluation modes. (fix issue#188) - Add an argument to the
getenv
command to return the value of this argument if the queried variable is undefined. - Use a different modulefile interpreter for each evaluation mode.
- Adapt the procedure called for each modulefile command depending on the evaluation mode to adapt behavior of these commands to the module command currently running.
- Report calling name and arguments for modulefile commands on
display
mode. For the commands evaluated during this mode, trigger this report at the end of the evaluation. - Inhibit
chdir
,conflict
,module
,module-log
,module-trace
,module-user
,module-verbosity
,prereq
,set-alias
,system
,unset-alias
,x-resource
commands onhelp
,test
andwhatis
evaluation modes. - Ignore
chdir
,module
,module-trace
,module-verbosity
,module-user
andmodule-log
commands found during modulerc evaluation. - Correctly restore an empty string value on sub-interpreter global variables when sanitizing this interpreter between two modulefile/modulerc evaluations.
- Cache in memory results of a modulefile search to reuse it in case of rerun instead of re-walking the filesystem.
- Evaluate global rc files once module sub-command is known and registered, so it can be queried during their evaluation.
- Rename
_moduleraw
shell function in_module_raw
to use a common_module_
prefix for all module-related internal shell functions. - Install: add
--enable-append-binpath
and--enable-append-binpath
configure options to append rather prepend the bin or man directory when adding them to the relative environment variable. - Doc: clarify documentation for module usage on scripting language like Perl or Python to mention that arguments to the
module
function should be passed as list and not as a single string. - When interpreting a
setenv
modulefile order during an unload evaluation, variable is still set to be unset in generated shell code but it is set to the value defined on thesetenv
order in the interpreter context instead of being cleared. - Register the conflicts defined by loaded modules in the environment (variable
MODULES_LMCONFLICT
) and ensure they keep satisfied. (see MIGRATING document) - Register the prereqs defined by loaded modules in the environment (variable
MODULES_LMPREREQ
) and ensure they keep satisfied. (see MIGRATING document) - Introduce the automated module handling mode, which consists in additional actions triggered when loading or unloading a modulefile to satisfy the dependency constraints it declares. Those actions are when loading a modulefile: the Requirement Load and the Dependent Reload. When unloading a modulefile, Dependent Unload, Useless Requirement Unload and Dependent Reload actions are triggered. (see MIGRATING document)
- Track the loaded modules that have been automatically loaded (with environment variable
MODULES_LMNOTUASKED
) to distinguish them from modules that have been explicitly asked by user. This information helps to determine what module becomes a useless requirement once all its dependent modules are unloaded. - Track in saved collections the loaded modules that have been automatically loaded by add of a
--notuasked
argument tomodule load
collection lines. So this information is restored in loaded environment when collection is restored. This--notuasked
argument is ignored outside of a collection restore context. - Consider modules loaded from a
module source
file as explicitly asked by user. - Install: add
--enable-auto-handling
configure option to enable or disable the automatic modulefile handling mechanism. - Process list of loaded modules or modules to load one by one during the
restore
,purge
andreload
sub-commands whatever the auto handling mode is. - Add the ability to control whether the auto_handling mode should be enabled or disabled with an environment variable called
MODULES_AUTO_HANDLING
or from the command-line with--auto
and--no-auto
switches. These command-line switches are ignored when called from modulefile. - Init: add pager-related command-line options in shell completion scripts.
- Doc: describe
MODULES_LMCONFLICT
,MODULES_LMPREREQ
andMODULES_LMNOTUASKED
in module.1 man page. - Add
-f
and--force
command-line switches to by-pass dependency consistency duringload
,unload
orswitch
sub-commands. (see MIGRATING document) - Disallow collection
save
or loaded modulesreload
if some loaded modules have some of their dependency constraints unsatisfied. - The Dependent Reload action of a
load
,unload
andswitch
sub-commands excludes modules that have unsatisfied constraints and includes modules whose constraints are satisfied again (when sub-command process solves a conflict for instance). - Doc: describe
--force
,--auto
and--no-auto
command-line switches andMODULES_AUTO_HANDLING
variable in module.1 man page. - Ignore directories
.SYNC
(DesignSync) and.sos
(SOS) when walking through modulepath directory content. (contribution from Colin Marquardt) - Install: look for
make
rathergmake
on MSYS2. - Fix
exec()
usage in Python module function definition to retrieve the correct return status on Python3. - Cookbook: add the top-priority-values and unload-firstly-loaded recipes.
- Install: add
gcc
to the build requirements in RPM specfile. - Silent any prereq violation warning message when processing Dependent Reload mechanism or
purge
sub-command. - Doc: mention
createmodule.sh
andcreatemodule.py
scripts in FAQ. (fix issue#189) - Register all alternative names of loaded modules in environment with
MODULES_LMALTNAME
variable. These names correspond to the symbolic versions and aliases resolving to the loaded modules. Helps to consistenly solveconflict
orprereq
constraints set over these alternative names. (fix issue#143 / see MIGRATING document) - Doc: describe
MODULES_LMALTNAME
in module.1 man page. - Install: add
--with-bin-search-path
configure option to get in control of the path list used to search the tools required to build and configure Modules. (fix issue#164) - Install: add
--enable-silent-shell-debug-support
configure option to add the ability to control whether or not code to support silent shell debug should be added to the module function and sh-kind initialization scripts. (fix issue#166) - Install: add
--enable-quarantine-support
configure option to add the ability to control whether or not code to support quarantine mechanism should be added to the module function and initialization scripts. (fix issue#167) - Check version set in modulefile magic cookie. If modulefile sets a version number greater than
modulecmd.tcl
script version, this modulefile is not evaluated like when no magic cookie is set at all. (fix issue#171 / see MIGRATING document) - Fix uninitialized variable in procedure producing list of element output. (fix issue#195)
- Ensure the consistency of
module load
modulefile command once the modulefile defining it has been loaded by assimilating this command to aprereq
command. Thus the defined constraint is recorded in theMODULES_LMPREREQ
environment variable. Same approach is used formodule unload
modulefile command which is assimilated to aconflict
command. Thus the defined constraint is recorded in theMODULES_LMCONFLICT
environment variable. (see MIGRATING document) - Only look at loaded modules when unloading so unloading an nonexistent modulefile does not produce an error anymore. (fix issue#199)
- Report error raised from modulefile evaluation as
ERROR
ratherWARNING
, like when a conflict constraint is hit. Moreover this kind of evaluation error is now silenced on global evaluation like when procedingavail
orsearch
sub-commands. - Record messages to report them by block on when processing a
load
or anunload
modulefile evaluation to improve readability on these evaluating modes that may cascade additional actions. (see MIGRATING document) - Foreground
load
,unload
,switch
andrestore
actions (ie. asked on the command-line) now report a summary of the additional load and unload evaluations that were eventually triggered in the process. - Support
del
andremove
aliases forunload
sub-command like on compatibility version. (fix issue#200 with contribution from Wenzler) - Correctly transmit the arguments along with the command to execute on
system
modulefile command. (fix issue#201) - Contrib: add
mt
...
4.1.4
- Doc: fix typo on
getenv
command description in modulefile(4) man page and clarify this command should be preferred over::env
variable to query environment variable value in modulefile. - Init: fix
bash
andzsh
completion scripts to enable Extended Regular Expression (ERE) onsed
command with-E
argument (rather-r
) for compatibility with OS X's and BSDs' sed. (fix issue#178) - Handle default version sets on an hidden modulefile (were not found previously). (fix issue#177)
- Init: fix
ksh
initialization script for ksh88 compatibility. (fix issue#159) - Install: use
sed
command rathergrep
andcut
inconfigure
andMakefile
scripts. (fix issue#175 with contribution from Michael Sternberg) - Fix typo, tab indentation and pipe opening mode on
createmodule.py
utility script. (contribution from Jan Synacek) - Check
ModulesVersion
value set from.version
rc file to ensure this value refers to a version name in current directory. Report error if a nested value is detected and ignore this value. (fix issue#176)