Repository navigation
Releases: envmodules/modules
Releases · envmodules/modules
Release list
5.7.0
Immutable
release. Only release title and notes can be modified.
- Script: improve
mrelto always ask a Fedora Kerberos ticket. - Use CMake
EVAL CODEto forward arguments passed tomoduleCMake function. (fix issue #419 with contribution from Benoit Dumas) - Doc: update email address in
Code of conductto report bad behavior to maintainers. - Move modules-interest mailing-list to HPSF.
- Script: add tests on
mbutility to track performance of load, list and purge sub-commands with large number (>100) of modules. - Script: fix procedure call timing of Tcllib profiler module within
mlprofto avoid mixing timers from calls made at different interpretation level. - Parse loaded environment in early execution stage and always fail if an inconsistency is detected.
- Improve performances of loaded module comparison used when checking conflict and requirement dependencies. (fix issue #603)
- Fix environment variable synchronization issue between modulefile evaluation interpreters: supersede the
appendTcl command rather sync interpreters for each environment variable change. A substantial performance improvement is observed when loading or unloading many modulefiles. (fix issue #603) - Script: add
--with-lmodoption tombcommand to compare current Modules version against an installed version of Lmod. - Update the
sh-to-modmechanism to correctly parse shell alias on Dash shell version 0.5.13. - Update the
sh-to-modmechanism to correctly parse path-like environment variable on Fish shell version 4.3. - When fetching user's groups, in case a group name cannot be resolved use this group gid number as name instead of raising an error. (fix issue #604)
- Introduce
path_entry_reorderconfiguration option that change order of entry in a path-like environment variable when it is added again. This new configuration option is disabled by default. This option can be changed at installation time with--enable-path-entry-reorder. Whenpath_entry_reorderis changed withconfigsub-command, it sets theMODULES_PATH_ENTRY_REORDERenvironment variable. (fix issue #595 with contribution from Achim Gsell) - Install: reorder the options in the
configurescript help message alphabetically. - Doc: add manual page for
modulecmd(1)command. - Make
getenvmodulefile command available from module rc file evaluation context. (fix issue #588) - Install: add installation option
--disable-compressed-changelog<--enable-compressed-changelog>to cope with packaging process handling documentation file compression at their level. (fix issue #592) - Add
-poption as an abbreviated form for--paginate. (fix issue #593) - Add
-Poption as an abbreviated form for--no-pager. (fix issue #606) - Doc: add
organize-tsc-meetingguide. - Add the
paginateconfiguration option to control whether or not output message should be piped into defined pager by default. This option can be changed at installation time with--enable-paginate. Whenpaginateis changed withconfigsub-command, it sets theMODULES_PAGINATEenvironment variable. (fix issue #594) - Doc: add
plan-next-release-contentguide - Introduce the
non_exportable_tagsconfiguration option that lists tags that should not be exported to modules once loaded. Whennon_exportable_tagsis changed withconfigsub-command, it sets theMODULES_NON_EXPORTABLE_TAGSenvironment variable. (fix issue #608) - Improve the performance of the module’s column output by removing the costly optimization that attempts to fit more columns within the available screen width. (fix issue #622)
- Fix superseding definition of
sourceTcl command whensource_cacheconfiguration option is enabled to support-encodingoption. (fix issue #627) - Correctly parse the module specifications passed as argument on
depends-on,always-loadandprereq-allmodulefile commands. It especially fixes module specification containing the definition of variants. (fixes issue #626) - Report the full via path for modules on
availandspidersub-commands rather the last part of this via information. JSON output is updated to report theviakey as an array rather as a string. (fix issue #586) - Introduce the
info_extensionconfiguration option to consider that module extensions have a pure informational purpose and no module alias is associated to them. Extensions defined withprovidemodulefile command are not affected by this mechanism. Wheninfo_extensionis changed withconfigsub-command, it sets theMODULES_INFO_EXTENSIONenvironment variable. (fix issue #585) - Doc: add
linked-envvarsdesign notes. - Add the
linked_envvarsconfiguration option to apply the same value update commands to all linked environment variables. Whenlinked_envvarsis changed withconfigsub-command, it sets theMODULES_LINKED_ENVVARSenvironment variable. (fix issue #609) - Doc: add
init-envvarsdesign notes. - Add the
init_envvarsconfiguration option to define initial values to assign to environment variables before they are modified for the first time. This option can be changed at installation time with--with-init-envvars. Wheninit_envvarsis changed withconfigsub-command, it sets theMODULES_INIT_ENVVARSenvironment variable. (fix issue #572) - Enable lexical binding in Emacs addon file. (contribution from Peter Oliver)
- Script: update
mtutility to analyze test suite log file when test suite run is aborted. - Correctly match loaded modules specified as requirement with a trailing
/character after module name. (fix issue #640) - Also consider
-in addition to.as a version number separator character when selecting a module with theextended_defaultmechanism. (fix issue #619) - Rename Modules initialization script for Python
env_modules.pyto make it a proper Python module name. - Rename the Python initialization script to
env_modules.pyso that it uses a valid Python module name. Generates apython.pysymlink ontoenv_modules.pyto preserve compatibility. (contribution from Byron Boulton) - Install: introduce the
--enable-set-pythonpathinstallation option to prepend Modulesinitdirectory to thePYTHONPATHenvironment variable during Modules initialization. This option is enabled by default and make it easier to import theenv_modulesPython module. (fix issue #483 with contribution from Byron Boulton) - Install: add the
--enable-append-pythonpathinstallation option, which causes--enable-set-pythonpathto append the Modulesinitdirectory toPYTHONPATHinstead of prepending it. (contribution from Byron Boulton) - Doc: clarify shell script, executed by
source-shmodulefile command orsh-to-modsub-command, does not get access to shell aliases, functions or completions settings only available in interactive sessions or defined in profile files. (fix issue #646) - Report a global known error when Modules Tcl extension library cannot be loaded. (fix issue #644)
- Add
domainnameconfiguration option to define the command to run to fetch domain name. It can be changed at installation time with--with-domainnameand--with-domainname-optsoptions. Whendomainnameis changed withconfigsub-command, it sets theMODULES_DOMAINNAMEenvironment variable. (fix issue #645) - Update the
source-shmodulefile command andsh-to-modsub-command mechanism to produce a more consistent value for a path-like environment variable change that requires both a prepended and an appended part expressed with a different delimiter character: asetenvcommand is now generated instead in this situation. - Update the
source-shmodulefile command andsh-to-modsub-command mechanism to no longer de-duplicate a path entry found several times in the entries it prepends or in the entries it appends, and to add the--duplicatesoption on a generatedprepend-pathorappend-pathcommand when one of the path entries it adds is already found in the variable value prior script evaluation, is found several times in the entries it adds or is found in both the entries it prepends and the entries it appends, so this entry is not silently absorbed by these commands' default de-duplication behavior nor relocated by thepath_entry_reorderconfiguration option. - Resolve an exact
name/versionspecification without validating every sibling modulefile found in its directory, by walking versions from the dictionary-highest to the dictionary-lowest and stopping as soon as the implicitdefaultandlatestsymbolic versions are settled. A substantial performance improvement is observed when loading an existing modulefile out of a directory holding hundreds or thousands of sibling versions. (fix issue #561) - Doc: add
module-find-and-resolutiondesign notes. - Doc: add
devel-testsuiteguide describing the DejaGnu testsuite structure. - Doc: document and cross-reference
commit-message-conventionsinCONTRIBUTING. - Doc: document
code-commentsconventions inCONTRIBUTING. - Doc: add
devel-ciguide describing continuous integration usage. - Install: rename the shipped
COPYING.GPLv2license file toCOPYING, the name convention recognized by packaging tools. - Doc: fix favicon rendering with a black background instead of white on viewers that ignore transparency, by setting its transparent pixels to a white matte color instead of black.
- Doc: document Windows Terminal profile setup as an alternative way to initialize Modules on Windows without an install script. (fix issue #634)
- Install: use
reg addinstead ofsetx /Mto persist the system-widePATHenvironment variable inINSTALL.batandUNINSTALL.bat, assetxsilently truncates the value it writes to 1024 characters, which could corrupt the systemPATHwhen installing from a shell with an already long inheritedPATH(e.g. a Visual Studio Developer Prompt). (fix issue #654) - Doc: add
hook-apidesign notes. - Add the
add-hooksiteconfig comm...
5.6.2
Immutable
release. Only release title and notes can be modified.
- Init: fix command injection in Bash completion when module names contain shell meta-characters. Completion candidates were passed to
compgen -Wwhich evaluates command substitution syntax. (fix CVE-2026-85013 found by AISLE in partnership with Red Hat)
5.3.2
Immutable
release. Only release title and notes can be modified.
- Init: fix command injection in Bash completion when module names contain shell meta-characters. Completion candidates were passed to
compgen -Wwhich evaluates command substitution syntax. (fix CVE-2026-85013 found by AISLE in partnership with Red Hat)
4.5.4
Immutable
release. Only release title and notes can be modified.
- Init: fix command injection in Bash completion when module names contain shell meta-characters. Completion candidates were passed to
compgen -Wwhich evaluates command substitution syntax. (fix CVE-2026-85013 found by AISLE in partnership with Red Hat)
5.6.1
- Script: improve
mrelto better support Koji states and not rely on sudo privileges to test a new release. - Script: adapt utilities to only use
curlrather also requiringwget. - Doc:
CHARTERhas been approved on September 4, 2025. - Doc: add
EESSIdesign notes. - Doc: update
modulefile(5)man page to describe thereportmodulefile command, which is supported since version 4.0. - Doc: use Furo Sphinx theme for the documentation published on Read The Docs.
- Doc: describe how to call modulefile command from a hook procedure in
module(1)man page. (fix issue #590) - Doc: add warning in
INSTALL-winto mentionmlcommand name conflict with MSVC x86 toolchainml.exe. (fix issue #589) - Doc: add
maintainer-guide. - Doc: website is now located at https://envmodules.io.
- Doc: precise that no automatic path resolution is performed on
prepend-path,append-pathorremove-pathmodulefile commands. (fix issue #597) - Doc: add way to build latexpdf documentation.
- Ensure that a module having the same name than a loaded module from another modulepath does not inherit its tags. (fix issue #599)
- Drop tags stored in memory that applies to a module when unloading it. It ensures that tags applied to the module when reloaded from a different modulepath are not inherited.
- Always apply abort on error behavior in case a Dependent Reload sticky (and
--forceis not set) or super-sticky module fails to reload. (fix issue #601) - When loading a module, check already loaded modules and their aliases exactly matching specification before looking at available modules and their aliases. (fix issue #602)
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)