- Rework internal state handling to gather all state definitions in a global array and use the same initialization and retrieval procedure, named
getState
, for all these states. - Add the
setState
,unsetState
,lappendState
,isStateDefined
andisStateEqual
procedures to provide unified ways to set or check the value of state. - Introduce the
sh-to-mod
sub-command, to evaluate shell script and determine the environment changes it does. Corresponding modulefile content is outputted as a result. Changes on environment variables, shell aliases, shell functions and current working directory are tracked. The following shells are supported: sh, dash, csh, tcsh, bash, ksh, ksh93, zsh and fish. - Doc: add Source shell script in modulefile design notes.
- Introduce the
source-sh
modulefile command, to evaluate shell script and apply resulting environment changes through modulefile commands. When a modulefile usingsource-sh
modulefile command is loaded, the modulefile commands resulting from shell script evaluation are recorded in the :envvar:MODULES_LMSOURCESH
environment variable to be able to undo these environment changes when modulefile is unloaded and to report the modulefile commands used when modulefile is displayed. The same kind of environment changes than thesh-to-mod
sub-command are tracked. The same list of shells thansh-to-mod
sub-command are supported. (fix issue #346) - Doc: add Source shell script in modulefile cookbook recipe.
- Doc: embed new Modules logo on website, online README and documentation portal.
- Install: disable by default the build of Modules compatibility version. From now on, option
--enable-compat-version
has to be set to trigger this build. - Introduce the
username
sub-command to themodule-info
modulefile command to get the username of the user currently runningmodulecmd.tcl
or to test a string passed as argument corresponds to this username. - Introduce the
usergroups
sub-command to themodule-info
modulefile command to get all the groups of the user currently runningmodulecmd.tcl
or to test a string passed as argument corresponds to one of these groups. - Doc: improve markup of
NEWS
andMIGRATING
documents starting from this 4.6 version to enable references to module sub-commands, command line switches, environment variables and modulefile Tcl commands. - Use inclusive terminology to eliminate master and slave terms as much as possible from code source and documentation.
- Doc: use a versioned magic cookie in examples that demonstrate new modulefile features. (fix issue #349)
- Introduce the
--enable-multilib-support
configure option to add mechanism inmodulecmd.tcl
to look at an alternative location to find the Modules Tcl extension library in case this library cannot be found at its main location. - Lib: remove fetch_hidden argument from
getFilesInDirectory
procedure of Modules Tcl extension library. - Doc: add Hide or forbid modulefile design notes.
- Add the
module-hide
modulefile command, to dynamically hide modulefile, module alias or symbolic version matching passed specification. When hidden, a modulefile, an alias or a symbolic version is not reported nor selected unless referred by its exact name, like for module whose name or version starts with a dot character.module-hide
supports the advanced module version specifiers. (fix issue #202) - Add option
--soft
to themodule-hide
modulefile command to introduce a soften level of camouflage: modules targeted by such hide directive are made visible as soon as their root name is part of search query. - Add option
--hard
to themodule-hide
modulefile command to introduce a hardened level of camouflage: modules targeted by such hide directive keep being hidden even if they are fully matched by search query. - Do not report among
whatis
search result the modulefiles with version name prefixed by a dot character and targeted by a symbolic version unless if they are precisely searched. - When a loading module has hidden alternative names (hidden due to their name or version starting with a dot character or because they match a
module-hide
statement), these alternative names are not recorded in environment unless if they are not hard-hidden and if they have been used in query to select loading module. - On
avail
sub-command, remove hidden symbolic versions from the list to display along modulefile or directory they target, unless these symbols are not hard-hidden and are used in query to search modules. - When the g
--default
filter ofavail
sub-command is set, unhide all the default symbolic versions or modules targeted by these symbols unless if they are hard-hidden. - Define the default and latest automatic symbolic versions only if relative module name matches search query to ensure all elements for this module have been processed prior assigning the symbols.
- In case a symbolic version is transitively applied toward a modulefile, like for instance when this symbol is first set onto a directory, record the resolution of each transitively applied symbol. By doing so, a module
load
tentative using the transitively applied symbolic version will now correctly resolve to the modulefile targeted by symbol. - Fix use of the advanced version specifiers in arguments to the
is-avail
modulefile command. - Introduce the g
--all
/-a
option foravail
,aliases
,whatis
andsearch
sub-commands, to include in the search process all hidden modulefiles, module aliases or symbolic versions. Hard-hidden modules stay hidden even if--all
/-a
option is used. - Add the
module-forbid
modulefile command, to dynamically forbid evaluation of modulefile matching passed specification. When forbidden, a module cannot be loaded and an access error is obtained when trying to evaluate them.module-forbid
supports the advanced module version specifiers. - Add
--not-user
and--not-group
options tomodule-hide
andmodule-forbid
modulefile commands to ignore hiding or forbidding definition if current user is respectively part of specified username list or member of one of specified group list. - Add
--before
and--after
options tomodule-hide
andmodule-forbid
modulefile commands to ignore hiding or forbidding definition respectively after and before a specified date time. Accepted date time format isYYYY-MM-DD[THH:MM]
. - Add
--message
option tomodule-forbid
modulefile command to supplement the error message obtained when trying to evaluate a forbidden module. - When a module that will soon be forbidden (as the date limit specified on the
--after
option of a matchingmodule-forbid
command is near) is evaluated, warn user this module access will soon be denied. - The range of time the above warning appears can be controlled with the
nearly_forbidden_days
configuration option, whose value equals to the number of days prior the module starts to be forbidden. This configuration is set to14
(days) by default and this value can be controlled atconfigure
time with--with-nearly-forbidden-days
option. When thenearly_forbidden_days
configuration is set through theconfig
sub-command, the :envvar:MODULES_NEARLY_FORBIDDEN_DAYS
environment variable is set. - Add
--nearly-message
option tomodule-forbid
modulefile command to supplement the warning message obtained when evaluating a nearly forbidden module. - Add the
debug2
verbosity level, to report each call ofmodulecmd.tcl
internal procedures in addition to debug messages. Debug2 mode can be enabled by setting theverbosity
config to thedebug2
value or by using the g-D
command-line switch twice. - Install: look for
make
rathergmake
on MinGW and build library with a.dll
extension on this platform. - Add the
trace
verbosity level, to report details on module searches, resolutions, selections and evaluations. Trace mode can be enabled by setting theverbosity
config to thetrace
value or by using the g-T
/--trace
command-line switches. - Introduce the
tr
key in the color palette to specifically render trace messages. Default value fortr
key is2
(decreased intensity). - When trying to set an environment variable to an empty value on the Windows platform, unset this environment variable instead to cope with the underlying OS behavior.