Releases: envmodules/modules
Releases · envmodules/modules
5.6.0
- Rename
contribdirectory assharein sources to use clearer name for architecture and configuration independent files. - Set a Security policy for the project.
- Add red, white and black SVG logo files of Modules project.
- Doc: improve Links, Community sections in documentation index and README
- Doc: improve Authors and Acknowledgments sections in README
- Doc: add
create-new-releaseguide - Update repository URL to https://github.com/envmodules/modules.
- Install: update
configurescript to allow running it from a current working directory different than where this file is stored. (fix issue #558) - Doc: create Developer HowTos section on documentation website to group development how-to guides.
- Doc: add
acknowledgmentspage in the documentation. - Doc: describe
GOVERNANCE. - Doc: add
CHARTER. - Escape square brackets (
[]) used in values within produced shell code as these characters may have special meaning on some shells (like csh). (fix issue #565) - Doc: advertise the Modules chat room (
#modules:matrix.org) to discuss with the community. - Doc: describe the
developer-certificate-of-originprocess now applied on contributions. - Doc: add
add-new-maintainerguide - Fix interpreter variable reset between multiple modulefile or modulerc evaluations when variable initial value is an invalid list. (fix issue #570)
- Fix
source-shandsh-to-modshell translation when used with new fish shell version (4.0). - Doc: add
mode-selectdesign notes. - Introduce
useextra specifier to search forMODULEPATHchanges performed withmodule use,append-pathorprepend-pathmodulefile commands onavail,whatisandpathssub-commands. - Add
--dumpnameoption to report name of current Environment Modules implementation. Here it returnsModules. This option is also available on Lmod starting version 8.7.50. - Add the
depends-on-anymodulefile command, alias over theprereqcommand for compatibility with Lmod Tcl modulefiles. - Add
depends-on-anyextra specifier to query modulefile requirement definitions. The extra specifier aliasesprereq,prereq-anyorrequiremay also be used to query this modulefile command. - Introduce the
spidersub-command that lists available modules found in enabled modulepaths and recursively found in modulepaths enabled by available modules. After a first step aimed at collecting all modulepaths,spiderproceeds and reports likeavailsub-command. The same set of options are supported. - Introduce the
spider_outputandspider_terse_outputconfiguration options to define the content to report in addition to the available module names respectively forspidersub-command regular and terse output modes. Excepted value for these configuration options is a colon separated list of elements to report. Default value ismodulepath:alias:dirwsym:sym:tag:variantifspec:keyforspider_outputandmodulepath:alias:dirwsym:sym:tag:variantifspecforspider_terse_output. These values can be changed at installation time respectively with the--with-spider-outputand--with-spider-terse-outputoptions. These values can then be superseded by using theconfigsub-command which sets theMODULES_SPIDER_OUTPUTandMODULES_SPIDER_TERSE_OUTPUTenvironment variables. - Introduce the ability to control whether
spidercommand search results should recursively include or not modulefiles from directories matching search query by use of the--indepthand--no-indepthcommand-line switches orspider_indepthconfiguration option (that setsMODULES_SPIDER_INDEPTHenvironment variable throughconfigcommand). Default value (enabled) may also be changed at installation time with--disable-spider-indepthoption. - Doc: add
spider-sub-commanddesign notes. - The
lintsub-command now also lint any readable modulecache files when no modulefile specification is passed as argument or if.modulecachefile location is specifically passed as argument. - Add the
hiddenelement in the allowed value list of theavail_output,avail_terse_output,list_output,list_terse_output,spider_outputandspider_terse_outputconfiguration options. When set, it is equivalent to use--alloption: hidden modules are shown. - Produce a single output for multi pattern
availsearch rather than a separate output for each submitted pattern. - Produce a single output for multi pattern
whatissearch rather than a separate output for each submitted pattern. - Doc: clarify that character used in version specification like , and : cannot be used as variant shortcut.
- Introduce
__MODULES_LMUSEenvironment variable to keep track of the loaded modules that enable modulepaths. - Apply modulepath label defined with
modulepath-labelalso on output ofwhatisandsearchsub-commands. - Report via information for each module entry on JSON output of
availandspidersub-commands. Via information is the name of the loaded or interpreted module that enables the modulepath in which reported modules are stored. - Add the
viaelement in the allowed value list of theavail_outputandspider_outputconfiguration options. When set, if a modulepath is enabled by a module, this module name is reported next to the modulepath name.viaelement is not available for terse output mode.viais set by default inspider_outputconfiguration option. - Add
modules_releaseinternal state. It will help to know the current version of Modules withinsiteconfig.tclscript. - Introduce
module-helpmodulefile command which defines help text to print when modulefile is evaluated inhelpmode. - Update
add-propertymodulefile command to use its value argument to define tag on currently loading module. - Doc: add
module-warndesign notes. - Add
module-warnmodulerc and modulefile command which prints a warning message when designated modulefile is evaluated. This command accepts options to emit the warning only for specific users, groups or times. - Introduce the
warninginformational module tag on modulefiles targeted bymodule-warncommand. Update defaulttag_abbrevconfiguration option to add an abbreviation for the new tag (W) and default light and dark color palettes. - Change light and dark color palettes for
nearly-forbiddentag (red text with yellow background), to make it look closer toforbiddentag (red background) and distinguish it from newwarningtag (black text and yellow background). - No raise of nearly-forbidden warning when affected modulefile is evaluated in
refreshmode. - Issue the nearly-forbidden warning at the end of the affected modulefile evaluation, ensuring it is always reported at the same stage regardless of where it is defined.
- Change underlying shell code to set environment variable on sh, bash, ksh, zsh and fish shells: enclose value within single quotes rather escaping each special characters.
setenvmodulefile command now supports environment variable value containing newline character. Exception is made for csh and tcsh shells where newline characters are chopped from value. (fix issue #557)- Sort modules in JSON output as done on regular output.
cachebuildcommand now sets the minimal Modules version specified in the cache file magic cookie header to the oldest Modules version compatible with this cache file, rather than the version that generated the cache file. Freshly generated cache files are compatible with Modules 5.3 and above.- Doc: improve
enable-modules-in-shellsguidelines. - Doc: add
man-pathcookbook recipe. - Doc: add
other-implementationsdocument. - Add
updatesub-command, an alias ofreload - Add
disablesub-command, an alias ofsaverm - Add
describesub-command, an alias ofsaveshow - Add
--show_hiddenoption, an alias of--all - Add
haveDynamicMPATHmodulefile command - Fix
use.ownexample modulefile to report when creating local modulefiles directory. (fix issue #576) - Doc: add manual page for
envml(1)command. (fix issue #190) - Introduce Emacs addon files to highlight the modulefile syntax. Installation of these files, which is enabled by default, is controlled by the
--enable-emacs-addonsand--emacsdatadirconfigure options. (contribution from Laurent Besson) - Add
require_viaconfiguration option that controls whether or not a requirement is considered between a module stored in a modulepath and the loaded module that enables this modulepath. With Automated module handling mechanisms enabled, modules stored in a modulepath are unloaded or reloaded when the module enabling this modulepath is changed.require_viais disabled by default but everyone willing to hierarchically organize their modulefiles is encouraged to enable this new option. This option can be changed at installation time with--enable-require-via. Whenrequire_viais changed withconfigsub-command, it sets theMODULES_REQUIRE_VIAenvironment variable. - Install: installation option
--enable-new-featuresis updated to include--enable-require-via. - Doc: add
require-viadesign notes. - Skip reload of a Dependent Reload module if it is not found after a change in enabled modulepaths. Reload of a not found module is attempted only if it is tagged super-sticky or sticky and force mode is disabled. Skipped module is considered Dependent Unload module.
- Script: update
mbtool to skip test for Modules version below 5.5 if Tcl 9 is selected. - Introduce the
providemodulefile command that defines module alias over currently evaluating module. This helps convey that the module offers additional functionality or components. (fix issue #539) - Change
extensionsmodulefile command to be an alias over theprovidecommand. - Ad...
5.5.0
- Init: update
cmdshell initialization script to correctly defineMODULESHOMEwhen installation pathname contains dot character. (fix issue #525 with contribution from V-clone) - Init: add completion for
mlcommand on Tcsh shell. (fix issue #416 with contribution from Laurent Besson) - Init: fix completion of
mod-to-sh's options on Bash and Tcsh shells. - Fix modulepath file search when libtclenvmodules is disabled and modulepath contains glob characters.
- Lib: correct libtclenvmodules to retrieve all user groups on Darwin systems when user is member of more than 16 groups.
- Script: output testsuite run progress on
mtdevelopment utility. - Resolve switched-on module prior testing stickiness preservation.
- Contrib: fix versions modulefiles generated when
--enable-versioninginstallation option is set. Use--not-reqoption onmodule unloadcommands to avoid declaring a conflict toward these modules to unload. (fix issue #531) - Add
hide-modulefileandhide-versionmodulerc commands to support modulerc files written for Lmod. - Update
autoinitsub-command to definemoguishell function or alias ifmogui-cmdcommand is found inPATH. - Add the
hide_auto_loadedconfiguration option to tag automatically loaded moduleshidden-loaded. These modules will not appear onlistsub-command output unless--alloption is set. Option is disabled by default and when set, it defines theMODULES_HIDE_AUTO_LOADEDenvironment variable. - Introduce the
--modulepathoption to thealways-load,depends-on,prereq,prereq-allandprereq-anymodulefile commands. When this option is set, required module should be located in a path listed in the specified list or in an enabled modulepath matching one path of the list. This information is recorded in loaded environment in__MODULES_LMPREREQPATHvariable. - Add
lsb-releasemodulefile command to get certain Linux Standard Base (LSB) information. It accepts to following sub-commands:id,codenameandrelease. - Add information logging capabilities controlled by two new configuration options:
loggerwhich defines the command to use to sent information to the log system andlogged_eventswhich controls the information sent to logs. loggerconfiguration option relies on theloggercommand by default. It can be changed at installation time with--with-loggerand--with-logger-optsoptions. Whenloggeris changed withconfigsub-command, it sets theMODULES_LOGGERenvironment variable.loggercan be declared as a locked configuration option inlocked_configs.logged_eventsconfiguration option is a list of event names separated by colon character. It is empty by default, thus nothing is logged by default. Allowed event names arerequested_cmd(log module commands directly executed by users),requested_eval(modulefile evaluations directly asked by users) andauto_eval(modulefile evaluations automatically triggered). Option value can be changed at installation time with--with-logged-eventsoption. Whenlogged_eventsis changed withconfigsub-command, it sets theMODULES_LOGGED_EVENTSenvironment variable.logged_eventscan be declared as a locked configuration option inlocked_configs.- Add
logchannel to theputsmodulefile command. String message passed toputs logis sent to theloggercommand. - Doc: update
log-module-commandcookbook recipe with integrated logging feature. - Install: update
configurescript to ignore all--with-*options if no value is associated to them. - Install: update
configurescript to set option to an empty string if specified with--without-*argument. Exception is made for--without-icasewhich sets option to thenevervalue. - Introduce
not:prefix for extra specifier and variant criteria on module search context. This prefix allows to negate search criteria onExtra match searchmechanism. - Adopt stricter naming rule for variant names. Only characters within the
A-Za-z0-9_-range are allowed. Also, a variant name cannot start with-(minus) character and the overall name cannot just be a number. - Allow
+and~characters to be part of module name or version specification as long as the string following them is not a valid variant name (e.g.,foo/1.2+8). (fix issue #527) - In case of an issue external to Modules, do not mention at the end of the error stack trace the web link to report this issue. (fix issue #546)
- When a modulefile performs a
module unloadcommand that fails due to dependent modules loaded, stop unload evaluation right after this failed command unless--forceoption is used. - Exclude sticky modules from the useless requirement unload mechanism as they cannot be unloaded.
- Tag automatically loaded module
auto-loadedprior evaluation to be able to query this state during modulefile evaluation withmodule-info tags. - Doc: describe in
module(1)man page how to initialize Modules in a Ruby script. (fix issue #535) - Add PowerShell Core (
pwsh) shell support. (fix issue #326 with contribution from Simon Lukas Märtens) - Lib: adapt Modules Tcl extension library to properly load on Tcl 9.
- Doc: describe how to upgrade Modules in
INSTALL. (fix issue #544) - Set exit code returned by
modulecmd.tclscript to1when a modulefile evaluation fails (modulefile does not exist, is buggy, etc). (fix issue #540) - Disable pager when running
modulecmd.tclscript for script language (python, perl, ruby, tcl, cmake, r and lisp). (fix issue #542) - Update error and warning messages when attempting to unload a module required by another. Distinguish if this module is a requirement of an already loaded or a currently loading module.
- Introduce
conflict_unloadconfiguration option that controls whether or not conflicting modules and their dependent should be unloaded when loading a module. All kind of conflicts are supported: conflicts defined by already loaded modules, conflict declared by loading module throughconflict,familyormodule unloadcommands.conflict_unloadalso handles the unload of a module that is loaded again but with different variant values or from a different modulepath.conflict_unloadis disabled by default as it changes behaviors of the automated module handling mode. But everyone is encouraged to enable this new option to benefit from an highly automated experience. This option can be changed at installation time with--enable-conflict-unload. Whenconflict_unloadis changed withconfigsub-command, it sets theMODULES_CONFLICT_UNLOADenvironment variable. Bothauto_handlingandconflict_unloadoptions should be enabled to activate Conflict Unload automated behavior. (fix issue #242) - When both
auto_handlingandconflict_unloadoptions are enabled, all loaded modules matching module specifications set onconflictormodule unloadcommands are unloaded. If both options are not enabled, only one matching loaded module per specification argument ofmodule unloadis unloaded. (fix issue #215) - When both
auto_handlingandconflict_unloadoptions are enabled,--forceoption set onloadsub-command is taken into account during the Conflict Unload mechanism. For instance, it continues this unload process even if one module unload fails. - Install: installation option
--enable-new-featuresis updated to include--enable-conflict-unload. - Fix detection of already loaded module with variant set. If trying to load same module with compatible variant set, a module is already loaded message is now returned instead of another variant is loaded.
- Correctly report module evaluation error in case during the same execution this module was already evaluated and failed silently during a Requirement Load mechanism.
- Split processing of Dependent Reload (DepRe) modules to treat the DepRe modules consequence of Useless Requirement Unload (UReqUn) modules separately, right before unloading the UReqUn modules. As a result, modules in conflict with UReqUn modules are unloaded right before UReqUn process and reloaded with the other DepRe modules.
- Handle UReqUn process in case of
switchsub-command after the switch load phase. Unload of these modules were previously occurring at the end of the switch unload phase. Unload of DepRe modules consequence of UReqUn modules is also moved after switch load phase. - Introduce the Useless Requirement Unload (UReqUn) process on
loadsub-command. It eliminates auto loaded modules that were requirements of Conflict Unload modules. In case ofswitchsub-command, UReqUn modules coming from the switch load phase are handled with UReqUn modules coming from switch unload phase. - Rework handling of DepRe modules that also are UReqUn modules to unload them during the DepRe unload phase instead of during UReqUn process. As a consequence these modules part of both DepRe and UReqUn lists are unloaded prior main module action and prior unload of the other UReqUn modules. The DepRe modules may be also qualified UReqUn even if they are not a dependency of a module unloaded in the current processing.
- Mix unload of Dependent Unload and Dependent Reload modules to ensure they are processed in their reverse loading order. As a result, if a module is part of DepUn process and some of its requirements are part of DepRe process, requirements are unloaded after their dependent modules.
- Skip reload of a Dependent Reload module if found not loadable (either its requirements are not loaded or a conflict is spotted with loaded environment). Reload is attempted only if module is tagged super-sticky or sticky and force mode is disabled. Skipped module is considered Dependent Unload module.
- Reload all Dependent Reload modules after the main load, unload or switch module evaluation rather after...
5.4.0
- Allow to designate module by its full path file name on
module-tag,module-hideandmodule-forbid. (fix issue #485) - Introduce
tagextra specifier to search modules onavail,whatisandpathssub-commands based on tags applied. Tag abbreviation may also be used as extra specifier name. - Add ability to specify multiple names on one extra specifier criterion to select modules matching any of these names (e.g.,
env:PATH,LD_LIBRARY_PATH) - Add ability to specify multiple values on one variant criterion to select modules providing any of these variant values (e.g.,
foo=val1,val2) - Add the
indesymelement in the allowed value list of thelist_outputandlist_terse_outputconfiguration options. When set, symbolic versions are reported as independent elements rather along the loaded module they are attached to. - Add the
aliaselement in the allowed value list of thelist_outputandlist_terse_outputconfiguration options. When set, module aliases targeting loaded modules are reported. - Introduce
sticky_purgeconfiguration option to define behavior when unloading sticky or super-sticky module during apurgecommand. Raise anerror(default) or emit awarningor besilent. When set, it defines theMODULES_STICKY_PURGEenvironment variable. Default value can be changed with--with-sticky-purgeinstallation option. (fix issue #502) - Introduce
modulepath-labelmodulerc command, which defines label used instead of modulepath directory path inavailoutput. - More than one global rc file can now be specified in
MODULERCFILEor viarcfileconfiguration option. - Add the
unique_name_loadedconfiguration option to allow, when enabled, only one module loaded per module name. When set, it defines theMODULES_UNIQUE_NAME_LOADEDenvironment variable. Default value (disabled) can be changed with--enable-unique-name-loadedinstallation option. - Add
evaluation-errorsdesign notes. - Add
abort_on_errorconfiguration option to define module sub-commands that should abort when a module evaluation fails instead of continuing their evaluation sequence. When configuration option is set, it defines theMODULES_ABORT_ON_ERRORenvironment variable. Default value can be changed with--with-abort-on-errorinstallation option. - Add support for
abort_on_errorevaluation behavior onload,mod-to-shandtry-loadsub-commands. - Report issue on modulefile when it fails to load an erroneous requirement through
module try-loadmodulefile command. - Doc/Install: modernize modulefile code example in documentation and installed example modulefiles.
- Vim: correctly highlight modulefile commands containing a dash character.
- Update requirement load error report to place it only under the message block of the module requiring this load. This change helps to better understand the chronology of actions and from where an error occurs.
- Do not report requirement load error when an alternative requirement module is found and loaded afterward. (fix issue #509)
- Do not render an error exit code on multi-module option requirement when one module option fails to load but another does. (fix issue #510)
- Do not report module not found error when loading a requirement if an alternative requirement module is found and loaded afterward. (fix issue #511)
- Add
--globoption toremove-pathmodulefile command in order to remove any values in variable matching a glob-style pattern. - Record module specification on which loaded module stickiness applies in
__MODULES_LMSTICKYRULEenvironment variable. It helps to determine if stickiness is satisfied when changing loaded modules. Which was not working correctly for virtual modules. (fix issue #506) - Silently ignore cache file when it requires a greater Modules version. (fix issue #515)
- Doc: move
modulefile(5)man page in section 5. (fix issue #518 with contribution from Laurent Chardon) - Add
source_cacheconfiguration option to cache files evaluated in modulefiles withsourceTcl command. Files sourced multiple times are only read once when option is enabled.source_cacheis disabled by default. When set, it defines theMODULES_SOURCE_CACHEenvironment variable. Default value can be changed with--enable-source-cacheinstallation option. - Add support for
abort_on_errorevaluation behavior onunloadsub-command. - A modulefile is unloaded anyway even if an evaluation error occurs when
--forceoption is used onml,purge,reload,reset,restore,stash,stashpop,switchandunloadsub-commands. To forbid the unload of a modulefile it is recommended to tag itsuper-stickywithmodule-tagcommand. - Disable
abort_on_errorwhen--forceoption is used. In this case, behavior is to continue when an error occurs. - Add support for
abort_on_errorevaluation behavior onmlcommand. Abort on error behavior is on by default withml. Removing it fromabort_on_error's value enables the continue on error behavior. - Add support for
abort_on_errorevaluation behavior onreloadcommand. Abort on error behavior is on by default withreload. Removing it fromabort_on_error's value enables the continue on error behavior. - Add support for
abort_on_errorevaluation behavior onpurgesub-command. - Add support for
abort_on_errorevaluation behavior on unload phase ofswitchcommand. Abort on error behavior is on by default there. Removingswitch_unloadfromabort_on_error's value enables the continue on error behavior. - Add support for
abort_on_errorevaluation behavior onswitchcommand. Abort on error behavior is applied ifswitchvalue is set inabort_on_errorand either switch unload or switch load phase fails. - Install: installation option
--enable-new-featuresis updated to enable abort on error behavior onloadandswitchsub-commands. - Lib: slightly adapt code of Modules Tcl extension library to properly build against Tcl 9.0.
- Adapt alias unset shell code for sh-kind shells to avoid errors when alias to unset is not defined.
- Adapt function unset shell code for sh-kind shells to avoid errors when function to unset is not defined.
- No output of unload of switched-off failed and load of switched-on failed error messages when
module switchcommand is run from a modulefile. - No Switching block message report when
module switchcommand is run from a modulefile. - Report all error and warning messages locally under Loading or Unloading block message rather reporting some of them under the block message of the main action. These errors and warnings are thus reported where they occur.
- Report switched-on load failure as error rather warning.
- Report switched-on module locating or access issues only once.
- Report conflict error message when it occurs rather than after modulefile evaluation.
- Update conflict error message to report all conflicting modules name and version rather conflict module specification.
- Fix conflict error check to avoid reporting both unloading conflict failed and conflict is loading messages.
- Raise an error and stop modulefile evaluation when
module switchcommand fails unless if--forceoption is set. - When a useless requirement unload fails, do not increase error count as this failure is reported as a warning and main unload process is not affected.
- Path element equals to delimiter character is allowed on
append-pathandprepend-pathmodulefile commands. (fix issue #522) - Add
bash-evalshell mode tosource-shmodulefile command andsh-to-modsub-command. With this mode, the generated output of the bash shell script is evaluated to get the environment changes instead of sourcing this script. (fix issue #519) - Add
--ignoreoption tosource-shmodulefile command to define shell elements changed by shell script that should be ignored. (fix issue #503) - Init: Improve Tcsh shell completion script to complete against existing files when pattern starts with
/,.or~/. (fix issue #523) - Add
--useroption tomodule-forbid,module-hideandmodule-tagmodulefile commands to forbid, hide or tag only if user is listed in the value of this new option. (fix issue #520 with contribution from Jérémy Déchard) - Add
--groupoption tomodule-forbid,module-hideandmodule-tagmodulefile commands to forbid, hide or tag only if one user's group is listed in the value of this new option. (fix issue #520 with contribution from Jérémy Déchard)
5.3.1
- Fix additional ShellCheck warning reports over sh and bash shell scripts.
- Install: distribute
ChangeLogas a zipped file to reduce installation size. As a consequence,gzipbecomes a requirement when building Modules from git repository. - Install: adapt RPM spec file to install module initialization script for fish as configuration snippet for this shell.
- Fix extra specifier search to evaluate module matching requirement query. (fix issue #494)
- Fix extra specifier requirement search when module searched is also defining a requirement and is the sole module to define it. (fix issue #495)
- Script: update
pre-commitandcommit-msggit hook scripts to use Hunspell as spell checker instead of Aspell. - Fix unaligned
listoutput when 100 or more modules are loaded. (fix issue #496) - Fix extra specifier search when an identical module name and version is available in several modulepaths. (fix issue #497)
- Do not match module commands with
--not-reqoption set onrequireorincompatextra specifier queries. (fix issue #498) - When one variant is specified multiple times on search context (
avail,pathsorwhatissub-commands), available modules returned are those providing all variant values set. (fix issue #499) - Add the
indesymelement in the allowed value list of theavail_outputandavail_terse_outputconfiguration options. When set, symbolic versions are reported as independent elements rather along the module or directory they are attached to. - Init: fix completion scripts to report module symbolic versions and aliases among available modules. (fix issue #500)
5.3.0
- Add
module-cachedesign notes. - Add
cachebuildsub-command to create cache for modulepaths enabled or specified on the command line. Cache files are named.modulecacheand stored at the root of modulepath directories. - Add
cacheclearsub-command to delete cache file in all enabled modulepaths. - Use cache file if available rather search the content of modulepath directories when searching for modules (e.g., during
avail,load,display, etc). - Script: add cache-enabled version of avail, whatis and load tests on
mbbenchmark utility. - Add the
ignore_cacheconfiguration option to ignore module cache file. Option is disabled by default and when set, it definesMODULES_IGNORE_CACHEenvironment variable. - Add
--ignore-cachecommand-line switch to enableignore_cacheconfiguration option and ignore module cache file for current execution. - Add
cache_buffer_bytesconfiguration option to define buffer size when reading or writing cache files. Option is set to32768by default. When set it definesMODULES_CACHE_BUFFER_BYTESenvironment variable. - Add
cache_expiry_secsconfiguration option that defines the number of seconds a cache file is considered valid after being generated. Option is set to0by default which means cache files never expire. When option is set it definesMODULES_CACHE_EXPIRY_SECSenvironment variable. - Modulefiles and directories that are not accessible by everyone are not recorded in cache file. A limited access directive is recorded instead to indicate these modulefiles have to be tested and directories have to be walked down to determine what the running user can access.
- Doc: update
reduce-io-loadcookbook recipe with module cache description. - Correctly apply extra tag set when loading a module whose variant has value automatically set. (fix issue #484)
- Catch collection directory creation error and report appropriate message. (fix issue #482)
- Fix
source-shandsh-to-modshell alias translation when used with new fish shell version (3.6). - Install: allow to build Modules from a short-depth git repository. (fix issue #486)
- Install: ensure git log format is not influenced by user's configuration in
gitlog2changelog.py. (fix issue #487) - Init: fix bash shell completion script to be able to complete full name of available modules. (fix issue #490)
- Install: move licence name to SPDX format in RPM spec file.
- Doc: add
extra-match-searchdesign notes. - Introduce extra match search mechanism that evaluates available modulefiles during a module search to find those matching an extra query on a variant value, a dependency or an environment variable definition. During this specific evaluation, modulefiles are interpreted in scan mode.
scanstring is returned bymodule-info modewhen queried during a scan modulefile evaluation.- Add the
variantelement in the allowed value list of theavail_outputandavail_terse_outputconfiguration options. When set, variants and their possible values are reported along the module they are associated to onavailcommand output. Adding variant information to this output activates the extra match search mechanism that scan modulefiles to find variants they define. (fix issue #407) - Apply graphic rendition of default version (
deSGR key) to default variant value on eitherlistandavailcommand output. - Apply either loaded or auto-loaded graphic rendition to the loaded variant value on
availcommand output. - Update
avail,pathsandwhatissub-commands to take into account variant set in module specification. Available modules are filtered with extra match search mechanism to only return those matching the variant specification. - Update
avail,pathsandwhatissub-commands to accept module specification with just a variant set (no module name and version). Available modules are filtered with extra match search mechanism to only return those matching the variant specification. - Update
listsub-command to accept module specification with just a variant set (no module name and version). Loaded modules are filtered to only return those matching the variant specification. - Highlight searched variant name and value (
hiSGR key) on eitherlistandavailcommand output. - Doc: add
Extra match searchdescription inmodule(1)man page. - Introduce extra specifiers to query content of modulefiles. Extra specifiers can be specified with element:name syntax as part of module specification on module search commands (
avail,pathsandwhatis). For instance with themodule avail append-path:PATHcommand, all modulefiles defining theappend-pathcommand onPATHenvironment variable are returned. - Add
variantextra specifier to query modulefile variant definitions. (fix issue #408) - Add
setenv,unsetenv,append-path,prepend-path,remove-pathandpushenvextra specifiers to query modulefile environment variable definitions. The extra specifier aliasenvvarmay also be used to query any of these modulefile commands. - Add
completeanduncompleteextra specifiers to query modulefile shell completion definitions. - Add
set-aliasandunset-aliasextra specifiers to query modulefile shell alias definitions. - Add
set-functionandunset-functionextra specifiers to query modulefile shell function definitions. - Add
chdirextra specifier to query modulefile current working directory change definitions. - Add
familyextra specifier to query modulefile family definitions. - Add
prereq,prereq-any,prereq-all,depends-on,always-load,load,load-any,try-load,switchandswitch-onextra specifiers to query modulefile requirement definitions. The extra specifier aliasrequiremay also be used to query any of these modulefile commands. - Add
conflict,unload,switchandswitch-offextra specifiers to query modulefile incompatibility definitions. The extra specifier aliasincompatmay also be used to query any of these modulefile commands. - Requirement and incompatibility extra specifiers accept module specification as value.
- Doc: add
Extra specifierdescription inmodule(1)man page. - Mark loaded modules as qualified for refresh evaluation when they send content to
stdoutorprestdoutchannels withputsmodulefile command. (fix issue #488) - Add the
ignore_user_rcconfiguration option to skip evaluation of user-specific module rc file. Option is disabled by default and when set, it definesMODULES_IGNORE_USER_RCenvironment variable. - Add
--ignore-user-rccommand-line switch to enableignore_user_rcconfiguration option and ignore user-specific module rc file for current execution. - Add the
variantifspecelement in the allowed value list of theavail_outputandavail_terse_outputconfiguration options. Set this new element in the default value list of both options. When set and if a variant is specified in search query, variants and their possible values are reported along the module they are associated to onavailcommand output. - Accept value starting with
+or-characters on--output/-ocommand-line switches to indicate value should respectively be appended to or subtracted from current configuration option value. - Accept value starting with
+or-characters onavail_output,avail_terse_output,list_output,list_terse_output,colors,protected_envvars,shells_with_ksh_fpath,tag_abbrev,tag_color_name,variant_shortcutconfiguration options to indicate value should respectively be appended to or subtracted from current configuration option value. - Fix
switchsub-command not to unload sticky module when switched-on module does not exist. (fix issue #492)
5.2.0
- Introduce the
--optionaloption onprereq,prereq-all,depends-onandalways-loadmodulefile commands. Expressed optional dependency is considered satisfied even if modulefile is not loaded. If optional requirement is loaded afterward, dependent module is automatically reloaded, unless if theauto_handlingconfiguration option is disabled. - A dependency expressed in modulefile with
module try-load<module>command is considered optional. Dependent module is automatically reloaded if the optional requirement is loaded afterward, unless if theauto_handlingconfiguration option is disabled. - Raise error in case of unknown or misplaced option set on
prereq,prereq-all,depends-onoralways-loadmodulefile commands. - Add the
--timercommand-line switch to report the total execution time of themodulecommand. Also report the execution time of every internal procedure calls when mixed with--debugoption. - Init: move
PATHsetup (to locate Modules' binaries location) from shell initialization scripts to theautoinitsub-command. (fix issue #462) - Init: move
MANPATHsetup (to locate Modules' man-pages) from shell initialization scripts to theautoinitsub-command. (fix issue #462) - Init: move shell completion setup from shell initialization scripts to the
autoinitsub-command. (fix issue #462) - Enclose installation path references in shell code produced by
autoinit, in initialization scripts and Makefiles to guaranty correct evaluation in case these paths contain a space character. Note that the quarantine mechanism is not compatible with such installation paths. - Fix
source-shandsh-to-modwhen used with fish shell script ifregex-easyescfish option is enabled. (fix issue #463) - Add the
protected_envvarsconfiguration option to define a list of environment variables that cannot be modified by modulefile commands. When set,protected_envvarsdefinesMODULES_PROTECTED_ENVVARSenvironment variable. (fix issue #429 with contribution from Adrien Cotte) - Introduce the
lintsub-command to statically analyze syntax of modulefiles, modulerc and global/user rc. (fix issue #451) - Add the
tcl_linterconfiguration option to define the program used to analyze files withlintsub-command. This option is set tonagelfar.tclby default. When changed from default value, theMODULES_TCL_LINTERenvironment variable is defined. Default value can be changed with--with-tcl-linterand--with-tcl-linter-optsinstallation options. - Add the
--enable-nagelfar-addonsinstallation option (enabled by default) to install specific syntax databases and plugins to lint modulefiles, modulerc and global/user rc with Nagelfar. These files are installed in the directory designated by the--nagelfardatadir(DATAROOTDIR/nagelfarby default). - Doc: add
lint-sub-commanddesign notes. - Install: use
installcommand rathercpormkdirto install Modules and guaranty consistent permission modes on deployed files. - Also unset
pushenvvalue stacks onclearsub-command. - Doc: add
mod-to-sh-sub-commanddesign notes. - Introduce the
mod-to-shsub-command to translate designated modulefile(s) into code for specified shell. (fix issue #447) - Make
sourcesub-command accepts modulefile specification as argument. If argument does not correspond to a file path, search it among available modulefiles. (fix issue #424) - Doc: clarify
set-aliasonly define shell alias and not shell function. - Add the ability to filter the list of collections returned by
savelistsub-command. Filtering pattern is matched in a case insensitive manner by default. - Add support for
--starts-withand--containsoptions onsavelistsub-command. - Highlight all search patterns on
listsub-command output instead of only the first one.. - Highlight all search patterns on
savelistsub-command output. - Add support for
--alloption onsavelistsub-command not to limit result to the collection matching currently definedcollection_target. - Doc: add
Shell supportsection inmodulefile(4)man page to describe how shells support the different kind of environment changes that can be defined in modulefiles. - Record during
autoinitsub-command the initial environment state in__MODULES_LMINIT. Enabled modulepaths and loaded modulefiles throughmodulespathandinitrcinitialization configuration files are recorded in this new environment variable. - Add
resetsub-command to restore initial environment. It takes recorded environment in__MODULES_LMINITand restores it. - Initial environment is restored when collection name specified on
restoresub-command equals__init__. - When no argument is provided to
restoresub-command and if default collection does not exist, initial environment is restored. - Initial environment content is displayed when collection name specified on
saveshowsub-command equals__init__. - When no argument is provided to
saveshowsub-command and if default collection does not exist, initial environment content is displayed. - Add
reset_target_stateconfiguration option to determine behavior ofresetsub-command. When set to__init__(default value) initial environment is restored. When set to__purge__, apurgesub-command is performed. Any other value, corresponds to the name of a collection torestore. When set,reset_target_statedefinesMODULES_RESET_TARGET_STATEenvironment variable. - Doc: add
initial-environmentdesign notes. - Unload sticky modules on
restoreandresetsub-commands to fully set environment in collection or initial state. - Testsuite: add lint testsuite to validate syntax of shell and Tcl scripts of this project. This testsuite can be invoked with
make testlintorscript/mt lint. sh, bash and ksh scripts are checked with ShellCheck tool and tcl scripts are checked with Nagelfar. - Update
modulecmd.tclcode and add Nagelfar inline comments to fix linter reports. - Script: add usage message and support for
-h/--helpoption onmrel,mpub,mt,mtreview,nglfar2ccov,mbandmlprofdevelopment utilities. - Doc: describe
script/mtandscript/mbutilities inCONTRIBUTINGguide. - Fix ShellCheck error, warning and info reports over all sh, bash and ksh shell scripts. (fix issue #470 with contribution from Lukáš Zaoral)
- Init: update profile script for sh-like shells to only source sh or bash initialization script when BASH environment variable is found set. (fix issue #473)
- Add
stashsub-command to save current environment and restore initial one. - Add
stashpopsub-command to restore stash collection then delete this collection file. - Add
stashrmsub-command to delete stash collection file. - Add
stashshowsub-command to display stash collection file. - Add
stashclearsub-command to delete all stash collection files. - Add
stashlistsub-command to list all stash collection files. - Update
savelistsub-command to filter out stash collections unless if--alloption is set. - Doc: ensure current user environment does not break logging system in
log-module-commandrecipe. (fix issue #475) - Rename the default git branch from master to main to use inclusive terminology.
- Mark loaded modules that could benefit from a refresh evaluation in the
__MODULES_LMREFRESHenvironment variable. - Optimize
refreshsub-command to only evaluate loaded modules that defines volatile environment changes (shell completion, alias or function). (fix issue #477) - Add
modulefile_extra_cmdshook variable that could be defined insiteconfig.tclfile to define specific commands in modulefile interpreter context.modulefile_extra_cmdsis a list of command name and relative procedure pairs. (fix issue #286) - Add
modulefile_extra_varshook variable that could be defined insiteconfig.tclfile to define specific variables in modulefile interpreter context.modulefile_extra_varsis a list of variable name and value pairs. (fix issue #286) - Add
modulerc_extra_cmdshook variable that could be defined insiteconfig.tclfile to define specific commands in modulerc interpreter context.modulerc_extra_cmdsis a list of command name and relative procedure pairs. (fix issue #286) - Add
modulerc_extra_varshook variable that could be defined insiteconfig.tclfile to define specific variables in modulerc interpreter context.modulerc_extra_varsis a list of variable name and value pairs. (fix issue #286) - Doc: Add
Site-specific configurationsection inmodule(1)man page. - Doc: extend
Collectionssection with examples inmodule(1)man page.
5.1.1
- Install: add
rpmlintrc configuration file to filter false positive warning messages. - Install: better guess
libdir64andlibdir32directory locations whenlibdirdoes not end with 64 but contains 64. - Install: update RPM spec file to move libtclenvmodules in an environment-modules directory under
libdir. - Fix rendering of loading or unloading module designation when configured color palette does not set the
hicolor key. (fix issue #455) - Remove the already loaded message displayed when verbosity level is higher or equal to
verbose2if new tags are applied to the loaded module. (fix issue #456) - Report a global known error when current working directory cannot be retrieved due to the removal of this directory. (fix issue #457)
- Update tags set through
prereqcommand on all already loaded requirements. (fix issue #459) - Update module designation with the tags set by reloading dependent module. (fix issue #460)
- Install: include the
lib/config.guessandlib/config.subscripts in distribution tarball if generated byautoreconf. - Install: call
gitcommand inMakefileonly if the definitions ofversion.incneed to get built or refreshed.
5.1.0
- Allow to declare
variantwith no list of accepted value. Such variant accepts any value specified. (fix issue #405) - Add the
redirect_outputconfiguration option to control on sh, bash, ksh, zsh and fish shells whether or not the output of themodulefunction should be redirected from stderr to stdout. When set,redirect_outputdefinesMODULES_REDIRECT_OUTPUTenvironment variable. - Introduce the
--redirect/--no-redirectcommand-line switches to supersede the value of theredirect_outputconfiguration option on sh, bash, ksh, zsh and fish shells. (fix issue #410) - Add the
--return-valueoption to thegetenvandgetvariantmodulefile commands to force to return the value of respectively designated environment variable or variant when modulefile is evaluated in display mode. (fix issue #422) - Introduce the
statesub-command to display Modules states. - Add the
supported_shellsstate to get the list of the shells that are supported bymodulecmd.tclthrough thestatesub-command . (fix issue #426) - Filter out the variables intended for Modules private usage when processing the environment changes made by a script evaluated by
sh-to-modsub-command orsource-shmodulefile command. (fix issue #427) - Doc: add
control-mode-behaviorsdesign notes. - Doc: add
add-new-config-optiondesign notes. - Set a Code of conduct for the project and its community based on the widely adopted Contributor Covenant.
- Doc: add
add-new-sub-commanddesign notes. - Add the
--remove-on-unloadoption to theremove-pathto also remove value when modulefile is unloaded. - Raise error when an unknown option is set on
module useormodule unusemodulefile command. - Rework emitted debug messages to remove obvious ones and systematically report each modulefile command processed with their arguments.
- Add the
--append-on-unloadoption to theremove-pathandmodule unusemodulefile commands to append back when modulefile is unloaded the value removed at load time or a specific value set after this option. - Add the
--prepend-on-unloadoption to theremove-pathandmodule unusemodulefile commands to prepend back when modulefile is unloaded the value removed at load time or a specific value set after this option. - Add the
--noop-on-unloadoption to theunsetenv,remove-pathandmodule unusemodulefile commands to perform no operation when modulefile is unloaded. - Add the
--unset-on-unloadoption to theunsetenvmodulefile command to also unset environment variable when modulefile is unloaded. - Add the
--set-if-undefoption to thesetenvmodulefile command to set environment variable when modulefile is loaded only this variable is not yet defined. - Install: add the
--with-bashcompletiondir,--with-fishcompletiondirand--with-zshcompletiondirinstallation options to install shell completion scripts in their system-wide location. (fix issue #428) - Doc: add
lmod-tcl-modulefile-compatdesign notes. - Introduce the
add-property,remove-propertyandextensionsmodulefile commands for compatibility with Lmod Tcl modulefiles. These commands are evaluated as a no-operation command. - Introduce the
prereq-anymodulefile command for compatibility with Lmod Tcl modulefiles.prereq-anyis an alias ofprereqcommand. - Produce a clear error message when wrong number of argument is received by
prereqcommand. - Doc: describe
ModulesVersionin Modules Variables section inmodulefile(4)man page. - Set
ModuleVersionas an alias overModulesVersionmodulefile variable for compatibility with Lmod Tcl modulefiles. - Doc: describe
reportErrorandreportWarningmodulefile commands. - Add the
require-fullnamemodulefile command for compatibility with Lmod Tcl modulefiles. This command aborts modulefile load evaluation if modulefile's name is not fully specified. - Add the
prereq-allmodulefile command, alias over theprereqcommand which acts as an AND operation when multiple modulefiles are specified. - Add the
depends-onmodulefile command, alias over theprereq-allcommand for compatibility with Lmod Tcl modulefiles. - Introduce the
keep-loadedmodule tag that avoids an auto-loaded module to get automatically unloaded when its dependent modules are getting unloaded. Update defaulttag_abbrevconfiguration option to add an abbreviation for the new tag (kL) and default light and dark color palettes. - Add the
always-loadmodulefile command for compatibility with Lmod Tcl modulefiles. This command loads designated modulefile and applies thekeep-loadedtag to it. - Add the
load-anysub-command andmodule load-anymodulefile command for compatibility with Lmod Tcl modulefiles. This command loads one modulefile from specified list. - Add support for
--not-reqoption onmodule try-loadandmodule load-anymodulefile commands. - Doc: add
magic-cookie-checkdesign notes. - Add the
mcookie_checkconfiguration option that control whether the magic cookie at the start of modulefile (i.e.,#%Modulefile signature) need to get checked or not. When set toevalthe number of file checks is significantly reduced when walking through modulepaths to search for modulefiles. Default value for this option is overridden by theMODULES_MCOOKIE_CHECKenvironment variable. - Doc: describe
putsTcl command and its specific feature when used in modulefile. - Create the
prestdoutchannel forputsmodulefile command to be able to send content that will be evaluated in current shell session prior any other content. (fix issue #432) - Add the
familymodulefile command for compatibility with Lmod Tcl modulefiles. This command defines family name as a module alias over currently loading module and express a conflict over this name to ensure only one member of a family can be loaded in user environment.familyalso defines theMODULES_FAMILY_<NAME>andLMOD_FAMILY_<NAME>environment variables. - Doc: add
reduce-io-loadcookbook recipe. - Add the ability to filter the list of loaded modules returned by
listsub-command. Filtering pattern could be part of module name, symbolic version or alias and is matched in a case insensitive manner by default. It could also leverage theAdvanced module version specifierssyntax. - Add support for
--starts-withand--containsoptions onlistsub-command. - Doc: add
shell-completiondesign notes. - Introduce
completeanduncompletemodulefile commands to respectively enable and disable shell completion for a given command name. bash, tcsh and fish shells are supported. - Track shell completion changes of bash, tcsh and fish shell scripts on
sh-to-modsub-command andsource-shmodulefile command. - Fix typos found in code, tests and documentation. (contribution from Dimitri Papadopoulos Orfanos)
- Update the
sh-to-modandsource-shmechanisms to support nested function definition on fish shell. - Fix the
sh-to-modandsource-shmechanisms to correctly detect functions with a_character in their name on fish shell. - Update the
moduleshell function definition for sh-kind shell to enclose the output generated bymodulecmd.tclin quotes in order to pass it to the eval command. This change fixes definition of shell function, especially when coming from shell script evaluation over thesh-to-modandsource-shmechanisms. (fix issue #434) - Fix csh shell alias detection on
sh-to-modandsource-shmechanisms when enclosed in parenthesis. (fix issue #434) - Include for fish shell environment analysis on
sh-to-modandsource-shmechanisms the private functions defined by evaluated script, in order to catch all definitions that may be useful for shell completion. - Fix the
sh-to-modandsource-shmechanisms to correctly detect empty function on fish shell. - Script: add
pre-commitgit hook script to help verify if commits are free of misspellings (with codespell tool) and trailing spaces. - Doc: fix typos found in documentation with Aspell utility.
- Doc: describe
Dependencies between modulefilesinmodulefile(4)man page. (fix issues #431 and #433) - Script: update
pre-commitgit hook script to spell check documentation files with Aspell tool. - Script: add
commit-msggit hook script to spell check commit message with Aspell tool. - Doc: clarify that
#%Moduleis a file signature also called Modules magic cookie. - Doc: update the
module ENVIRONMENTsection inmodule(1)man page to provide for each Modules environment variable the name of the configuration option that could be used to set the variable with theconfigsub-command. - Doc: clarify in
module(1)man page thatMODULES_SET_SHELL_STARTUP,MODULES_SHELLS_WITH_KSH_FPATHandMODULES_WA_277should be set prior Modules initialization to get taken into account. - Doc: update
INSTALLdocument to provide the name of the configuration option linked the installation options. - Doc: describe in
module(1)man page the default value of each configuration option and linked installation option and command-line switches. - Doc: add Configuration options section in
INSTALLdocument with a table summarizing all configuration options and their relative installation options and environment variables. - Add the
pushenvmodulefile command for compatibility with Lmod Tcl modulefiles. This command sets designated environment variable with specified value and save the previous value set to restore it when the modulefile is unloaded. Previous values are saved in a__MODULES_PUSHENV_<VAR>environment variable. - Doc: add
Compatibility with Lmod Tcl modulefilesection inmodulefile(4)man page. - Update defini...
5.0.1
- Doc: add How to preserve my loaded environment when running screen entry in FAQ.
- Fix the advanced version specifier resolution when the
extended_defaultoption is off andicaseoption is on when resolving version list specification. (fix issue #411) - Doc: improve the Log module command cookbook to rely on the
traceTcl command to track every modulefile evaluation and module/ml procedure calls. (fix issue #412) - Doc: fix missing space between list entries in
variantsdesign doc. (fix issue #413) - Correctly detect tags set on loaded modules when refreshing them.
- Set the
__MODULES_AUTOINIT_INPROGRESSenvironment variable when running theautoinitsub-command and quit autoinit process if this variable is found defined and equal to 1 when starting it. Ensure this way that an autoinit process will not be triggered indefinitely by itself when theset_shell_startupoption is enabled and some module loaded at initialization time relies on the execution of a bash script. (fix issue #414) - Remove warning message when unloading a
prepend-pathorappend-pathmodulefile command with--duplicatesoption set. (fix issue #421) - Clarify the module sub-commands that are allowed to be used within a modulefile. (fix issue #423)
- Install: set in the module magic cookie of the
initrcconfiguration file installed by default the version of Modules required to evaluate this file. - Doc: fix documentation of
getenvmodulefile command to describe that an empty string is now returned when designated environment variable is not defined and no default value to return is specified.
5.0.0
- Remove deprecated
createmodule.shandcreatemodule.pytools as shell script to modulefile conversion is now achieved with thesh-to-modsub-command. - Remove mention of the
init*sub-commands in module usage message to put focus on the collection handling sub-commands. - Do not declare anymore the
chdir,module,module-trace,module-verbosity,module-userandmodule-logcommands under the modulerc Tcl interpreter as no-op commands. A clear error message is obtained if these commands are still used in modulerc files instead of silently ignoring them. - Return by default an empty string rather
_UNDEFINED_ongetenvmodulefile command if passed environment variable is not defined. - Align empty directory name error message obtained on
usesub-command with message obtained when module or collection name is empty. - Accept non-existent modulepath on
usesub-command. - Install: installation option
--enable-auto-handlingis set on by default which enables the automated module handling mode (seeMODULES_AUTO_HANDLING). - Install: installation option
--enable-extended-defaultis set on by default which allows partial module version specification (seeMODULES_EXTENDED_DEFAULT). - Install: installation option
--enable-advanced-version-specis set on by default which activates theAdvanced module version specifiers - Install: installation option
--enable-coloris set on by default which enables theautooutput color mode (seeMODULES_COLOR). - Install: installation option
--with-icaseis set tosearchby default to activate case insensitive match on search contexts (seeMODULES_ICASE). - Install: installation option
--enable-new-featureshas been reset following major version change as all the options it implied are now enabled by default. - Install: installation option
--enable-set-shell-startupis set off by default but could be enabled once installed through theinitrcconfiguration file. - Install: installation option
--with-initconf-inis set toetcdirby default to locate configuration files in the directory designated by the--etcdiroption. Therefore the initialization configuration file is namedinitrcin this directory, and the modulepath-specific configuration file is namedmodulespath. - Only look at configuration files found in the location designated by the
--etcdiror--initdiroption (depending on the value of--with-initconf-inoption). Configuration files were previously searched in both locations. - Install: remove installation option
--enable-compat-version. Compatiblity version co-installation is discontinued.switchmlshell function andMODULES_USE_COMPAT_VERSIONare thus removed as well. - Testsuite: introduce the non-regression quick test mode. When the
QUICKTESTenvironment variable is set to1, only the main tests from the non-regression testsuite are run. When first argument of themtscript isquick, tests are run in quick mode. - Install: run non-regression testsuite in quick mode in RPM spec file.
- Rename the environment variables that are used by Modules to track loaded environment state (variables whose name starts with
MODULES_LM). A__prefix is added to the name of these variables to indicate that they are intended for internal use only. - Rename the environment variables used to indirectly pass to
modulecmd.tclthe value of variables set in quarantine (variables whose name finishes with_modquar). A__MODULES_QUAR_<VAR>prefix is applied to the name of these variables instead of the_modquarsuffix to indicate they are intended for Modules internal use of only. - Update Tcl requirement to version 8.5 as Tcl 8.4 is deprecated since a long time and this version is not available anymore on recent OS distributions. Update internal code of
modulecmd.tclto take benefit from the features brought by Tcl 8.5. - Split source code in several Tcl files hosted in
tcldirectory. When building Modules, the Tcl files are concatenated to make themodulecmd.tclscript. - Record
auto-loadedtag of loaded modules in__MODULES_LMTAGenvironment variable rather set a specific entry for module in the__MODULES_LMNOTUASKEDenvironment variable. - Rename the environment variables used by the reference counting mechanism of path-like environment variables. A
__MODULES_SHARE_<VAR>prefix is applied to the name of these variables instead of the_modsharesuffix to clearly indicate they are intended for Modules internal use of only. - Reference counting mechanism is not anymore applied to the Modules-specific path variables (like
LOADEDMODULES). As a result no__MODULES_SHARE_<VAR>variable is set in user environment for these variables. Exception is made forMODULEPATHenvironment variable where the mechanism still applies. - When an element is added to a path-like variable through the
append-pathorprepend-pathmodulefile commands, add this element to the associated reference counter variable (named__MODULES_SHARE_<VAR>) only when this element is added multiple times to the path-like variable. When an element is removed from a path-like variable, this element is removed from the reference counter variable when its counter is equal to 1. - When the
useandunusemodule sub-commands are not called during a modulefile evaluation, the reference counter associated with each entry inMODULEPATHenvironment variable is ignored. In such context, amodule usewill not increase the reference counter of a path entry already defined and amodule unusewill remove specified path whatever its reference counter value. - When the
append-path,prepend-pathandremove-pathmodule sub-commands are not called during a modulefile evaluation, the reference counter associated with each entry in targeted environment variable is ignored. In such context, amodule append-path/prepend-pathwill not increase the reference counter of a path entry already defined and amodule remove-pathwill remove specified path whatever its reference counter value. - Fix
unusesub-command when sereval modulepaths are specified as a single argument (i.e.,/path/to/dir1:/path/to/dir2). Enabled modulepaths were not correctly detected when specified this way. - Doc: clarify that an already defined path is not added again or moved when passed to the
usesub-command or theappend-path/prepend-pathmodulefile commands. (fix issue #60) - Change the
refreshsub-command to evaluate all loaded modulefiles and re-apply the non-persistent environment changes they define (i.e., shell aliases and functions). With this change therefreshsub-command is restored to the behavior it had on Modules version 3.2. - Evaluate the modulefile commands resulting from a
source-shcommand through the current modulefile Tcl interpreter in order to evaluate them according to the current modulefile evaluation mode. - When initializing Modules, refresh the loaded modules in case some user environment is already configured. This is especially useful when starting a sub-shell session as it ensures that the loaded environment in parent shell is correctly inherited, as the
refreshsub-command re-applies the non-persistent environment configuration (i.e., shell alias and function that are not exported to the sub-shell). (fix issue #86) - Init: add example code in default
initrc, the initialization script of Modules, to either restore user's default collection if it exists or load a predefined module list at the end of the initialization process. - When initializing Modules, evaluate the
initrcconfiguration file in addition to the themodulespathconfiguration file and not instead of this file.initrcis evaluated aftermodulespathfile. - When the installation option
--enable-modulespathis set, the list of modulepath to enable by default is now only defined in themodulespathconfiguration file and not anymore in theinitrcconfiguration file. - No error is raised when evaluating in
displaymode a modulefile without a value specified for thevariantit defines. This change helps to learn all the variant a modulefile defines. As a result, the unspecified variant is not instantiated in theModuleVariantarray variable. (fix issue #406) - When running the
unsetenvmodulefile command on an unload evaluation, do not unset designated environment variable if no value to restore is provided. - Fix
unsetenvto distinguish between being called on a unload evaluation without a value to restore or with an empty string value to restore. - Make
systemmodulefile command available from a modulerc evaluation context whatever the underlying module evaluation mode. - Make
is-usedmodulefile command available from a modulerc evaluation context. - Remove internal state
tcl_version_lt85as Tcl 8.5+ is now a requirement. - Forbid use of
module source<source>command in modulefile or in an initialization rc file, thesourceTcl command should be used instead.sourcesub-command should only be called from the command-line. - Report the modules loading and unloading during the
modulecommand initialization (i.e., during the evaluation of theinitrcconfiguration file). These report messages are disabled when theverbosityconfiguration option is set toconciseorsilent. - During a module
restoreorsource, only report the module load and unload directly triggered by these sub-commands. Load and unload triggered by other modules are reported through the automated module handling messages of the main modules. - Enforce use of the module magic cookie (i.e.,
#%Module) at the start of global or user rc files,initrcconfiguration file or any scriptfile passed for evaluation to thesourcesub-command. These files are not evaluated and an error is produced if the magic cookie is missing or if the optional version number placed after the cookie string...