1.. _NEWS:
2
3Release notes
4=============
5
6This file describes changes in recent versions of Modules. It primarily
7documents those changes that are of interest to users and admins.
8
9Modules 4.6.0 (2020-09-16)
10--------------------------------
11
12* Rework internal state handling to gather all state definitions in a global
13  array and use the same initialization and retrieval procedure, named
14  ``getState``, for all these states.
15* Add the ``setState``, ``unsetState``, ``lappendState``, ``isStateDefined``
16  and ``isStateEqual`` procedures to provide unified ways to set or check the
17  value of state.
18* Introduce the :subcmd:`sh-to-mod` sub-command, to evaluate shell script and
19  determine the environment changes it does. Corresponding modulefile
20  content is outputted as a result. Changes on environment variables, shell
21  aliases, shell functions and current working directory are tracked. The
22  following shells are supported: sh, dash, csh, tcsh, bash, ksh, ksh93, zsh
23  and fish.
24* Doc: add *Source shell script in modulefile* design notes.
25* Introduce the :mfcmd:`source-sh` modulefile command, to evaluate shell
26  script and apply resulting environment changes through modulefile commands.
27  When a modulefile using :mfcmd:`source-sh` modulefile command is loaded, the
28  modulefile commands resulting from shell script evaluation are recorded in
29  the :envvar:`MODULES_LMSOURCESH` environment variable to be able to undo
30  these environment changes when modulefile is unloaded and to report the
31  modulefile commands used when modulefile is displayed. The same kind of
32  environment changes than the :subcmd:`sh-to-mod` sub-command are tracked.
33  The same list of shells than :subcmd:`sh-to-mod` sub-command are supported.
34  (fix issue #346)
35* Doc: add *Source shell script in modulefile* cookbook recipe.
36* Doc: embed new Modules logo on website, online README and documentation
37  portal.
38* Install: disable by default the build of Modules compatibility version. From
39  now on, option ``--enable-compat-version`` has to be set to trigger this
40  build.
41* Introduce the ``username`` sub-command to the :mfcmd:`module-info`
42  modulefile command to get the username of the user currently running
43  :file:`modulecmd.tcl` or to test a string passed as argument corresponds to
44  this username.
45* Introduce the ``usergroups`` sub-command to the :mfcmd:`module-info`
46  modulefile command to get all the groups of the user currently running
47  :file:`modulecmd.tcl` or to test a string passed as argument corresponds to
48  one of these groups.
49* Doc: improve markup of :ref:`NEWS` and :ref:`MIGRATING` documents starting
50  from this 4.6 version to enable references to module sub-commands, command
51  line switches, environment variables and modulefile Tcl commands.
52* Use inclusive terminology to eliminate *master* and *slave* terms as much as
53  possible from code source and documentation.
54* Doc: use a versioned magic cookie in examples that demonstrate new
55  modulefile features. (fix issue #349)
56* Introduce the ``--enable-multilib-support`` configure option to add
57  mechanism in :file:`modulecmd.tcl` to look at an alternative location to
58  find the Modules Tcl extension library in case this library cannot be found
59  at its main location.
60* Lib: remove *fetch_hidden* argument from ``getFilesInDirectory`` procedure
61  of Modules Tcl extension library.
62* Doc: add *Hide or forbid modulefile* design notes.
63* Add the :mfcmd:`module-hide` modulefile command, to dynamically hide
64  modulefile, module alias or symbolic version matching passed specification.
65  When hidden, a modulefile, an alias or a symbolic version is not reported
66  nor selected unless referred by its exact name, like for module whose name
67  or version starts with a dot character. :mfcmd:`module-hide` supports the
68  advanced module version specifiers. (fix issue #202)
69* Add option ``--soft`` to the :mfcmd:`module-hide` modulefile command to
70  introduce a soften level of camouflage: modules targeted by such hide
71  directive are made visible as soon as their root name is part of search
72  query.
73* Add option ``--hard`` to the :mfcmd:`module-hide` modulefile command to
74  introduce a hardened level of camouflage: modules targeted by such hide
75  directive keep being hidden even if they are fully matched by search query.
76* Do not report among :subcmd:`whatis` search result the modulefiles with
77  version name prefixed by a dot character and targeted by a symbolic version
78  unless if they are precisely searched.
79* When a loading module has hidden alternative names (hidden due to their
80  name or version starting with a dot character or because they match a
81  :mfcmd:`module-hide` statement), these alternative names are not recorded in
82  environment unless if they are not hard-hidden and if they have been used in
83  query to select loading module.
84* On :subcmd:`avail` sub-command, remove hidden symbolic versions from the
85  list to display along modulefile or directory they target, unless these
86  symbols are not hard-hidden and are used in query to search modules.
87* When the :option:`--default` filter of :subcmd:`avail` sub-command is set,
88  unhide all the *default* symbolic versions or modules targeted by these
89  symbols unless if they are hard-hidden.
90* Define the *default* and *latest* automatic symbolic versions only if
91  relative module name matches search query to ensure all elements for this
92  module have been processed prior assigning the symbols.
93* In case a symbolic version is transitively applied toward a modulefile, like
94  for instance when this symbol is first set onto a directory, record the
95  resolution of each transitively applied symbol. By doing so, a module
96  :subcmd:`load` tentative using the transitively applied symbolic version
97  will now correctly resolve to the modulefile targeted by symbol.
98* Fix use of the advanced version specifiers in arguments to the
99  :mfcmd:`is-avail` modulefile command.
100* Introduce the :option:`--all`/:option:`-a` option for :subcmd:`avail`,
101  :subcmd:`aliases`, :subcmd:`whatis` and :subcmd:`search` sub-commands, to
102  include in the search process all hidden modulefiles, module aliases or
103  symbolic versions. Hard-hidden modules stay hidden even if
104  :option:`--all`/:option:`-a` option is used.
105* Add the :mfcmd:`module-forbid` modulefile command, to dynamically forbid
106  evaluation of modulefile matching passed specification. When forbidden, a
107  module cannot be loaded and an access error is obtained when trying to
108  evaluate them. :mfcmd:`module-forbid` supports the advanced module version
109  specifiers.
110* Add ``--not-user`` and ``--not-group`` options to :mfcmd:`module-hide` and
111  :mfcmd:`module-forbid` modulefile commands to ignore hiding or forbidding
112  definition if current user is respectively part of specified username list
113  or member of one of specified group list.
114* Add ``--before`` and ``--after`` options to :mfcmd:`module-hide` and
115  :mfcmd:`module-forbid` modulefile commands to ignore hiding or forbidding
116  definition respectively after and before a specified date time. Accepted
117  date time format is ``YYYY-MM-DD[THH:MM]``.
118* Add ``--message`` option to :mfcmd:`module-forbid` modulefile command to
119  supplement the error message obtained when trying to evaluate a forbidden
120  module.
121* When a module that will soon be forbidden (as the date limit specified on
122  the ``--after`` option of a matching :mfcmd:`module-forbid` command is near)
123  is evaluated, warn user this module access will soon be denied.
124* The range of time the above warning appears can be controlled with the
125  ``nearly_forbidden_days`` configuration option, whose value equals to the
126  number of days prior the module starts to be forbidden. This configuration
127  is set to ``14`` (days) by default and this value can be controlled at
128  :file:`configure` time with ``--with-nearly-forbidden-days`` option. When
129  the ``nearly_forbidden_days`` configuration is set through the
130  :subcmd:`config` sub-command, the :envvar:`MODULES_NEARLY_FORBIDDEN_DAYS`
131  environment variable is set.
132* Add ``--nearly-message`` option to :mfcmd:`module-forbid` modulefile command
133  to supplement the warning message obtained when evaluating a nearly
134  forbidden module.
135* Add the ``debug2`` verbosity level, to report each call of
136  :file:`modulecmd.tcl` internal procedures in addition to debug messages.
137  Debug2 mode can be enabled by setting the ``verbosity`` config to the
138  ``debug2`` value or by using the :option:`-D` command-line switch twice.
139* Install: look for ``make`` rather ``gmake`` on MinGW and build library with
140  a ``.dll`` extension on this platform.
141* Add the ``trace`` verbosity level, to report details on module searches,
142  resolutions, selections and evaluations. Trace mode can be enabled by
143  setting the ``verbosity`` config to the ``trace`` value or by using the
144  :option:`-T`/:option:`--trace` command-line switches.
145* Introduce the ``tr`` key in the color palette to specifically render trace
146  messages. Default value for ``tr`` key is ``2`` (decreased intensity).
147* When trying to set an environment variable to an empty value on the Windows
148  platform, unset this environment variable instead to cope with the
149  underlying OS behavior.
150
151
152Modules 4.5.3 (2020-08-31)
153--------------------------
154
155* Install: take into account the ``--build``, ``--host``, ``--target``,
156  ``--enable-dependency-tracking`` and ``--disable-dependency-tracking``
157  configure options to transmit them to the :file:`configure` scripts of
158  Modules Tcl extension library and Modules compatibility version. (fix issue
159  #354)
160* Install: ignore some regular options of an Autoconf :file:`configure` script
161  that are useless for this project but usually implied in build macros (like
162  RPM ``%configure`` macro).
163* Install: ignore unsupported ``--enable-*`` and ``--with-*`` options on
164  :file:`configure` script rather raise an error and add support to define
165  environment variable and build system type as :file:`configure` script
166  arguments to comply with `GNU configuration recommendations`_.
167* Install: fix :file:`modulecmd` pre-alternatives check in RPM spec file.
168* Install: use ``%make_build`` and ``%make_install`` macros in RPM spec file.
169* When :mfcmd:`module switch<module>` command is used in modulefile, do not
170  state when processing it a conflict over switched-off module if its
171  specification on the ``module switch`` command also matches switched-on
172  module's specification. Allow this way the replacement of any loaded version
173  of a module for a specific one required by currently loading module. (fix
174  issue #355)
175* Correctly report failed attempts to load module requirements expressed with
176  advanced version specifiers. (fix issue #356)
177
178.. _GNU configuration recommendations: https://www.gnu.org/prep/standards/html_node/Configuration.html
179
180
181Modules 4.5.2 (2020-07-30)
182--------------------------
183
184* Init: :subcmd:`list` and :subcmd:`source` sub-commands do not take available
185  modules as argument in fish completion script.
186* Init: fix option list for :subcmd:`search` sub-command in bash completion
187  script.
188* Fix double error counter increase when modulefile evaluation breaks.
189* Install: adapt :file:`configure` script to pass to the :file:`configure`
190  script of Modules compatibility version only a subset of the options it
191  supports (most commonly used options).
192* Install: raise an error when an unknown option is passed to
193  :file:`configure` script rather silently ignore it. (fix issue #348)
194* Install: enable the definition of installation directory options of
195  :file:`configure` script with the ``--option value`` syntax in addition to
196  the ``--option=value`` syntax. (fix issue #348)
197* Doc: alphabetically sort sub-commands of :mfcmd:`module-info` modulefile Tcl
198  command in :ref:`modulefile(4)` document.
199* Script: clean previously built environment-modules RPMs in :command:`mrel`.
200* Clearly separate quarantine variable definition from tclsh binary on
201  :file:`modulecmd.tcl` evaluated command call in ``_module_raw`` function for
202  *sh*, *bash*, *ksh* and *zsh* shells. (fix issue #350)
203* Doc: clarify in documentation index that Environment Modules should not be
204  confused with language-specific modules. (contribution from Rob Hurt)
205* Adapt conflict detection tests to ensure a module loaded by its full
206  pathname will not detect itself as a conflict when declaring a reflexive
207  conflict. (fix issue #352)
208* Adapt the :command:`mrel` and :command:`mpub` commands to produce new
209  Modules release from a *vZ.Y.x* git branch rather than from the repository
210  main branch.
211
212
213Modules 4.5.1 (2020-06-01)
214--------------------------
215
216* Install: consistently output Makefile warning messages on stderr.
217* Script: add the ``mrel`` script, that automates build of the Modules release
218  files and performs tests over these distribution files to guaranty their
219  correctness.
220* Script: add the ``mpub`` script, that automates Modules new release
221  publishing over git repositories and websites.
222* Install: remove project-specific tools from git repository export thus from
223  release distribution files.
224* Disable pager when ``clear`` sub-command is called from ``ml`` shortcut
225  command. (fix issue #338)
226* In case a modulefile evaluation fails, environment context prior this failed
227  evaluation is restored. Fix environment variable restoration mechanism to
228  keep the link that monitors and updates environment variable array ``env``
229  in every Tcl sub-interpreters. (fix issue #340)
230* Ensure environment variable change at the Tcl interpreter level is
231  propagated to every sub-interpreters used to evaluate modulefiles or
232  modulercs. (fix issue #342)
233* Use absolute path to load Modules Tcl extension library. (fix issue #344
234  with contribution from Roy Storey)
235* Fix formatting of error stack trace not to look for internal commands to
236  withdraw if start-up stack pattern cannot be matched.
237
238
239Modules 4.5.0 (2020-04-07)
240--------------------------
241
242* Doc: fix typos and grammar mistakes on :ref:`module(1)`,
243  :ref:`modulefile(4)` and :ref:`diff_v3_v4` documents. (contribution from
244  Colin Marquardt)
245* Doc: update cookbook recipes to highlight code of the Tcl scripts included.
246  (contribution from Colin Marquardt)
247* Doc: improve markup of :ref:`module(1)`, :ref:`modulefile(4)` and
248  :ref:`diff_v3_v4` documents to enable references to module sub-commands,
249  command line switches, environment variables and modulefile Tcl commands.
250  (contribution from Colin Marquardt)
251* Doc: alphabetically sort module sub-commands, command-line switches,
252  environment variables and modulefile Tcl commands in :ref:`module(1)` and
253  :ref:`modulefile(4)` documents.
254* Introduce the ``ml`` command, a handy frontend to the ``module`` command.
255  ``ml`` reduces the number of characters to type to trigger ``module``. With
256  no argument ``ml`` is equivalent to ``module list``, ``ml mod`` corresponds
257  to ``module load mod`` and ``ml -mod`` means ``module unload mod``. Multiple
258  modules to either load or unload can be combined on a single command. ``ml``
259  accepts all command-line switches and sub-commands accepted by ``module``
260  command. ``ml`` command is defined by default. Its definition can be
261  controlled at ``./configure`` time with ``--enable-ml`` option or later on
262  with ``ml`` configuration option (which defines ``MODULES_ML`` environment
263  variable when set).
264* Fix module sub-command abbreviation match to ensure passed abbreviated
265  form fully match sub-command, not only its minimal abbreviated form. As an
266  example, ``lod`` or ``loda`` do not match anymore the ``load``
267  sub-command, ``lo`` or ``loa`` still do.
268* Add the ``-j``/``--json`` command line switches to the ``avail``, ``list``,
269  ``savelist``, ``whatis`` and ``search`` module sub-commands to render their
270  output in `JSON`_ format. (fix issue #303)
271* Script: remove need to build project management-specific tools
272  (``mtreview``, ``mb``, ``mlprof`` and ``playdemo``) prior using them.
273* Script: gather all distributed and maintained scripts in a ``script``
274  directory at the root of the project repository tree.
275* Install: provide Windows-specific batch files when ``./configure`` option
276  ``--enable-windows-support`` is set. module command wrapper ``module.cmd``
277  is installed in ``bindir`` and initialization script ``cmd.cmd`` in
278  ``initdir``. Those batch files are relocatable and expect ``modulecmd.tcl``
279  in ``..\libexec`` directory. (fix issue #272 with contribution from Jacques
280  Raphanel)
281* Install: add ml command wrapper ``ml.cmd`` and install it in ``bindir`` when
282  ``./configure`` option ``--enable-windows-support`` is set.
283* Install: introduce envml command wrapper ``envml.cmd`` for Windows ``cmd``
284  shell and install it in ``bindir`` when ``./configure`` option
285  ``--enable-windows-support`` is set. (contribution from Jacques Raphanel)
286* Doc: improve documentation portal index.
287* Install: add ``dist-win`` target to Makefile in order to build a
288  distribution zipball containing the required files to run Modules on a
289  Windows platform. ``INSTALL.bat`` and ``UNINSTALL.bat`` Windows batch files
290  are introduced and shipped in the zipball to automate installation and basic
291  configuration of Modules on the Windows platform.
292* Doc: update :ref:`INSTALL-win` document to describe how to install Modules
293  with newly provided Windows-specific distribution zipball.
294* Install: enable build of Modules from ``git archive`` tarball or zipball
295  exports (like download source archives automatically provided on GitHub
296  project)
297* Install: ship reStructuredText and MarkDown source documents at the root of
298  Modules distribution tarball rather their built txt counterpart.
299* Script: fix ``createmodule.sh`` script to correctly analyses environment
300  when shell functions are found defined in it.
301* Script: inhibit output generated by scripts evaluated by ``createmodule.sh``
302  and ``createmodule.py`` to ensure these outputs will not get in the way when
303  analyzing the environment changes. (fix issue #309)
304* Correctly handle symbolic version target including a whitespace in their
305  name.
306* Testsuite: output test error details whatever the testsuite run verbose
307  mode.
308* Install: adapt configure script and Makefile to detect ``python`` command
309  location and set it as shebang for ``createmodule.py`` and
310  ``gitlog2changelog.py``. If ``python`` command is not found, ``python3``
311  then ``python2`` are searched.
312* Install: enable to pass a specific Python interpreter command name or
313  location at configure step with ``--with-python`` option. Specified command
314  name or location should be found on build system only if building from git
315  repository.
316* Install: build ``createmodule.py`` script and install it in ``bindir``.
317* Install: update RPM spec file to explicitly define Python interpreter
318  location.
319* Script: fix ``createmodule.py`` script for Python3 (fix issue #315 with
320  contribution from Armin Wehrfritz)
321* Lift Perl variable strictness when defining ``_mlstatus`` variable in case
322  ``modulecmd.tcl`` output is directly evaluated without use of the ``module``
323  sub-routine in Perl script. (with contribution from Andrey Maslennikov)
324* Script: fix path de-duplication in ``createmodule.sh``. (fix issue #316)
325* Doc: add *Handling Compiler and other Package Dependencies* cookbook
326  recipe, which discusses various strategies for creating modulefiles for
327  packages with multiple builds depending on previously loaded compiler,
328  MPI libraries, etc. (contribution from Tom Payerle)
329* Init: test availability of ``compopt`` Bash builtin prior using it in
330  Bash completion script to avoid error with versions of this shell older
331  than 4.0. (fix issue #318)
332* Install: adapt configure step to detect if ``sed`` option ``-E`` is
333  supported and fallback to ``-r`` otherwise in shell completion scripts.
334  (fix issue #317)
335* Add support for the ``NO_COLOR`` environment variable
336  (https://no-color.org/) which when set (regardless of its value) prevents
337  the addition of ANSI color. When set, ``NO_COLOR`` prevails over
338  ``CLICOLOR`` and ``CLICOLOR_FORCE`` environment variables. ``MODULES_COLOR``
339  overrides these three variables. (fix issue #310)
340* Script: when analyzing environment variable changes in ``createmodule.sh``
341  applied by shell script passed as argument, produce a ``setenv`` modulefile
342  statement for any variable found set prior script evaluation and for which
343  value is completely changed after script evaluation. (fix issue #320)
344* When an error message is composed of multiple lines, render it in the same
345  way whether it is part of a block message or not: lines after the first one
346  are prepended with a 2-space padding. As a result error messages appear
347  clearly separated from each other.
348* Append to the error message the error stack trace when a general unknown
349  error occurs in ``modulecmd.tcl`` and provide a link to encourage users to
350  report such error to the GitHub project.
351* Add to the error message the error stack trace for errors occurring during
352  site-specific configuration evaluation. Error stack is expunged from the
353  ``modulecmd.tcl`` internals to only report information relevant to
354  site-specific configuration file.
355* When an error occurs during the evaluation of a modulefile or a modulerc,
356  report associated error stack trace expunged from ``modulecmd.tcl`` internal
357  references to only output useful information for users.
358* GitHub: add issue templates to guide people submitting a bug report or a
359  feature request.
360* Doc: provide a link toward issues that have been fixed between versions 3.2
361  and 4.0 in :ref:`diff_v3_v4` document.
362* Script: introduce ``envml.cmd`` script for Windows platform providing
363  similar behavior than ``envml`` Bash script. (contribution from Jacques
364  Raphanel)
365* Init: add Bash shell completion for the ``ml`` command. (contribution from
366  Adrien Cotte)
367* Fix Fish shell stderr redirection for newer Fish versions. (fix issue #325)
368* Correctly handle modulefiles and modulepaths containing a space character in
369  their name whether they are used from the command-line, in collections,
370  within modulefiles or from loaded environment definitions.
371* Doc: add *Default and latest version specifiers* design note.
372* An ``avail`` search over a symbolic version targeting a directory now
373  correctly returns the special modules (alias and virtual module) lying in
374  this directory. (fix issue #327)
375* ``whatis`` and ``paths`` searches only return special modules (symbolic
376  version, alias and virtual modules) that fully match search query, not
377  those that partially match it. (fix issue #328)
378* alias and virtual module whose name mention a directory that does not
379  exists are correctly handled. (fix issue #168)
380* Hide special modules (aliases, symbolic versions and virtual modules)
381  whose version name starts with a dot character (``.``) from ``avail``,
382  ``whatis`` and ``paths`` searches if their query does not fully match
383  special module name. (fix issue #329)
384* Filter-out from the output of the ``aliases`` sub-command all hidden
385  aliases, symbolic versions or hidden modules targeted by a non-hidden
386  symbolic version. (fix issue #330)
387* Enable resolution of default module in module sub-directory when this
388  default symbol targets a hidden directory (whose name starts with a dot
389  character). (fix issue #331)
390* Doc: clarify hidden module location in :ref:`modulefile(4)` man page.
391* Install: define ``LD_PRELOAD`` as quarantine var along with
392  ``LD_LIBRARY_PATH`` in RPM specfile.
393* When ``implicit_default`` and ``advanced_version_spec`` configuration are
394  enabled, automatically define a ``default`` and ``latest`` symbolic version
395  for each module name (at each module depth for deep modules) if those
396  version names does not already exist. (fix issue #210)
397* Once a module is loaded, the automatically defined symbols associated to it
398  are recorded in loaded environment in the ``MODULES_LMALTNAME`` environment
399  variable. They are distinguished from the other alternative names applying
400  to the module by a ``as|`` prefix, which qualifies their *auto symbol* type.
401* When an advanced version specifier list contains symbolic version
402  references, fix resolving to honor default version if part of the specified
403  list. (fix issue #334)
404
405.. _JSON: https://tools.ietf.org/html/rfc8259
406
407
408Modules 4.4.1 (2020-01-03)
409--------------------------
410
411* Fix error and warning messages relative to dependency management to enclose
412  dependency specification in single quotes to clearly distinguish
413  specification from each other.
414* Skip output of module loading message if module is already loaded.
415* Doc: add demonstration material played at SC19 to promote the new features
416  of Modules.
417* Contrib: add ``playdemo`` script to play recorded demonstration cast.
418* Doc: add a web anchor to each modulefile Tcl command, module sub-command
419  and module environment variable documentation.
420* Install: update RPM spec file to enable build on ``el8``.
421* Doc: fix RST syntax for bullet lists in design docs. (fix issue #306)
422* In case ``module avail`` query does not match a directory but only its
423  contained elements (for instance ``module av mod/7`` matches ``mod/7.1`` and
424  ``mod/7.2`` but not ``mod/``), fix query processing to correctly return
425  latest or default element in case ``--latest`` or ``--default`` flags are
426  set.
427* In case a ``module avail`` query performed in a no-indepth mode with
428  ``--latest`` or ``--default`` flags either enabled or disabled, fix query
429  processing to return directory elements if they are part of result.
430* When a ``module avail`` query performed in no-indepth mode targets a virtual
431  module, fix result to filter-out the directory holding the virtual module
432  from result.
433* Fix ``module avail --default`` queries when modulefile default version does
434  not match query: select latest version from modulefiles matching query
435  unless ``implicit_default`` configuration is disabled in which case no
436  default version is returned.
437* Improve highlighting of module ``avail`` and ``whatis`` search result by
438  coloring module names matching search query expressed with the advanced
439  version specifiers. ``name@1,3`` or ``name@1:3`` queries now highlight
440  ``name/1`` and ``name/3`` strings found in search result.
441* Contrib: add the ``mlprof`` script which wraps ``modulecmd.tcl`` to collect
442  profiling information on its execution.
443* Contrib: adapt ``mb`` script to profile ``modulecmd.tcl`` run tests rather
444  bench them when ``profile`` argument is passed to the script.
445* Improve overall performances of module names and versions comparison by
446  introducing optimized procedures and caching in memory module search
447  results.
448
449
450Modules 4.4.0 (2019-11-17)
451--------------------------
452
453* Doc: add *Return file basename on module-info name for full path modulefile*
454  recipe to cookbook. (fix issue #297)
455* Rework internal handling of configuration options to gather all option
456  definitions in a global array and use the same initialization and retrieval
457  procedure, named ``getConf``, for all these options.
458* Add the ``setConf``, ``unsetConf`` and ``lappendConf`` procedures to provide
459  unified ways to set the value of configuration option. These procedures
460  should be used in site configuration files to override configuration option
461  value instead of directly setting corresponding option variable as it was
462  done in previous Modules releases.
463* Add the ability to match module specification in a case insensitive manner.
464  Default case sensitiveness behavior is set at ``./configure`` time with the
465  ``--with-icase`` option. It could be superseded with the ``MODULES_ICASE``
466  environment variable, that could be set with ``config`` module sub-command
467  through the ``icase`` option. Command-line switch ``--icase`` (``-i``)
468  enables to supersede defined case sensitiveness configuration. (fix issue
469  #212 with contribution from Eric Deveaud)
470* Introduce the extended default mechanism, to help selecting a module when
471  only the first numbers in its version are specified. Starting portion of the
472  version, part separated from the rest of the version string by a ``.``
473  character, will get matched to the appropriate complete version name. In
474  case multiple versions match partial version specified and only one module
475  should be returned, default version (implicit or explicit) among matches is
476  returned. In case ``implicit_default`` option is disabled and no explicit
477  default is found among matches, an error is returned. This mechanism is
478  enabled through a new configuration option named ``extended_default`` (which
479  defines ``MODULES_EXTENDED_DEFAULT`` environment variable when set). It may
480  be enabled by default in ``modulecmd.tcl`` script with option
481  ``--enable-extended-default`` passed to the ``./configure`` script.
482* Introduce the advanced module version specifiers mechanism to specify finer
483  constraints on module version. This new feature enables to filter the module
484  selection to a given version list or range by specifying after the module
485  name a version constraint prefixed by the ``@`` character. It leverages the
486  version specifier syntax of the `Spack`_ package manager. A single version
487  can be specified with the ``@version`` syntax, a list of versions with
488  ``@version1,version2,...``, a greater than or equal to range with
489  ``@version1:`` syntax, a less than or equal to range with ``@:version2`` and
490  an in between or equal to range with ``@version1:version2`` syntax. In case
491  ``implicit_default`` option is disabled and no explicit default is found
492  among version specifier matches, an error is returned. This mechanism is
493  enabled through a new configuration option named ``advanced_version_spec``
494  (which  defines ``MODULES_ADVANCED_VERSION_SPEC`` environment variable when
495  set). It may be enabled by default in ``modulecmd.tcl`` script with option
496  ``--enable-advanced-version-spec`` passed to the ``./configure`` script.
497* Conflict defined with a generic module name or an advanced version specifier
498  may match multiple loaded modules (generally in case multiple loaded modules
499  share same root name). Loaded environment analysis has been fixed to bind
500  conflict to all loaded modules matching it. As a result the *Dependent
501  Reload* mechanism is not triggered when one loaded module matching conflict
502  is removed if another loaded module still match the conflict.
503* Doc: add *Module selection contexts*, *Insensitive case*, *Extended default*
504  and *Advanced module version specifiers* design notes.
505* Make ``MODULESHOME`` environment variable controllable through the
506  ``config`` sub-command with ``home`` configuration option. A
507  ``--with-moduleshome`` argument is also added to the ./configure script to
508  set specific default value for this option at installation time. (fix issue
509  #292)
510
511.. _Spack: https://github.com/spack/spack
512
513
514Modules 4.3.1 (2019-09-21)
515--------------------------
516
517* Contrib: add ``mb`` script to bench Modules versions.
518* Correct ``modulecmd.tcl`` script startup to correctly report error in case
519  Tcl extension library fails to load. (fix issue #284)
520* Install: fix typo on ``CFLAGS`` definition in ``lib/Makefile``. (fix issue
521  #287 with contribution from Felix Neumärker)
522* Remove useless code in Modules Tcl extension library
523* Make URLs in README correctly rendered in HTML. (contribution from Per
524  Persson)
525* Doc: clarify modulefile evaluation modes in modulefile.4 man page. (fix
526  issue #289)
527* When looking at the closest match among loaded modules when switching module
528  with just a single module argument specified, load the information on the
529  currently set environment to get the alternative names of loaded modules
530  prior to look at closest module match. (fix issue #290)
531* Doc: describe the way to determine the site-specific configuration script
532  location in cookbook recipes implying the installation of such a file. (fix
533  issue #266)
534* Doc: add *Log module command* recipe to cookbook. (fix issue #283)
535* Doc: add *Expose procedures and variables to modulefiles* recipe to
536  cookbook.
537* Doc: add *Make defined modulepaths persist over sudo* recipe to cookbook.
538* Doc: add *Ensure user fully qualify the modules they use* recipe to
539  cookbook.
540* Introduce the ``wa_277`` configuration option to workaround an issue with
541  Tcsh history mechanism. Default ``module`` alias definition for Tcsh hits
542  an issue with shell history mechanism: erroneous history entries are
543  recorded each time the ``module`` command is called. When ``wa_277`` option
544  is enabled (which sets the ``MODULES_WA_277`` environment variable to *1*),
545  an alternative module alias is defined which fixes the history mechanism
546  issue. However the alternative definition of the module alias weakens shell
547  evaluation of the code produced by modulefiles. Characters with special
548  meaning for Tcsh shell (like *{* and *}*) may not be used anymore in shell
549  alias definition elsewhere the evaluation of the code produced by
550  modulefiles will return a syntax error. (fix issue #277)
551* Doc: add *Tips for Code Reuse in Modulefiles* recipe to cookbook.
552  (contribution from Tom Payerle)
553* Fix the ``whatis`` and ``paths`` sub-command results for module symbolic
554  versions targeting a directory when ``implicit_default`` configuration
555  option is disabled. No error is returned and same result is now obtained
556  whether the symbolic name or its target is used as argument for those two
557  sub-commands. (fix issue #294)
558* Fix the ``whatis`` and ``paths`` sub-command results for module aliases
559  targeting a directory when ``implicit_default`` configuration option is
560  disabled. No error is returned and same result is now obtained whether the
561  alias name or its target is used as argument for those two sub-commands.
562  (fix issue #295)
563* Rework all the ternary operator expressions in ``modulecmd.tcl`` that may
564  result in a *nan* value (whatever the case used to write this string) as the
565  ``expr`` Tcl command raises an error when it returns such a value, which
566  breaks Modules as soon as a modulefile, an alias or a symbolic version is
567  named *nan*. (fix issue #296)
568
569
570Modules 4.3.0 (2019-07-26)
571--------------------------
572
573* Introduce Vim addon files to highlight the modulefile syntax. Installation
574  of these files, which is enabled by default, is controlled by the
575  ``--enable-vim-addons`` and ``--vimdatadir`` configure options.
576  (contribution from Felix Neumärker)
577* If modulefile is fully read, cache the content read and the file header
578  computed to avoid another file read if the same modulefile need to be read
579  multiple times.
580* Except for path, paths, list, avail and aliases module commands always fully
581  read a modulefile whether its full content is needed or just its header to
582  verify its validity. Proceed this way to only read file once on commands
583  that first just check modulefile validity then read again valid files to get
584  their full content.
585* Introduce Modules Tcl extension library (written in C) to extend Tcl
586  language in order to provide more optimized I/O commands to read a file or a
587  directory content than native Tcl commands do.
588* Install: add ``--libdir``, ``--enable-libtclenvmodules``, ``--with-tcl`` and
589  ``--with-tclinclude`` options to configure script to control
590  libtclenvmodules build and installation.
591* When an error is caught during modulecmd.tcl first initialization steps,
592  ensure the error report facility is initialized to render error message.
593* When looking for modulefiles in enabled modulepaths, take ``.modulerc`` file
594  found at the root of a modulepath directory into account. Which means these
595  rc files are now evaluated like global rc files and can be used to define
596  module aliases targeting modulefiles stored in the underlying file tree.
597* Correctly get available default (-d) and latest (-L) version whether search
598  pattern is passed with an ending forward slash character or not or if it
599  contains a ``*`` wildcard character.
600* Append a forward slash character to any directory result of an avail command
601  to better distinguish these directories from regular files.
602* Introduce the ability to control whether ``avail`` command search results
603  should recursively include or not modulefiles from directories matching
604  search query by use of the ``--indepth`` and ``--no-indepth`` command-line
605  switches or the environment variable ``MODULES_AVAIL_INDEPTH``. Default
606  behavior is set at the ``./configure`` time with the
607  ``--enable-avail-indepth`` and ``--disable-avail-indepth`` switches. (fix
608  issue #150)
609* Update ``bash``, ``fish`` and ``zsh`` completion scripts to propose
610  available modulefiles in the no in depth mode.
611* Add the ability to graphically enhance some part of the produced output to
612  improve readability by the use of the ``--color`` command-line switch or the
613  ``MODULES_COLOR`` environment variable. Both accept the following values:
614  ``never``, ``auto`` and ``always``. When color mode is set to ``auto``,
615  output is colored if stderr is attached to a terminal. Default color mode
616  could be controlled at configure time with the ``--enable-color`` and the
617  ``--disable-color`` option, which respectively correspond to the ``auto``
618  and ``never`` color mode.
619* Control the color to apply to each element with the ``MODULES_COLORS``
620  environment variable or the ``--with-dark-background-colors`` and
621  ``--with-light-background-colors`` configure options. These variable and
622  options take as value a colon-separated list in the same fashion
623  ``LS_COLORS`` does. In this list, each element that should be highlighted is
624  associated to a Select Graphic Rendition (SGR) code.
625* Inform Modules of the terminal background color with the
626  ``MODULES_TERM_BACKGROUND`` environment variable or the
627  ``--with-terminal-background`` configure option, which helps to determine if
628  either the dark or light background colors should be used to color output in
629  case no specific color set is defined with the ``MODULES_COLORS``.
630* Color prefix tag of debug, error, warning, module error and info messages.
631* Highlight the modulefile or collection name when reporting messages for a
632  an action made over this modulefile or collection.
633* Color the modulepaths reported on a ``use`` command.
634* Highlight title of separator lines or column name of table header.
635* Color modulepaths, directories, aliases and symbols reported by the
636  ``avail``, ``aliases``, ``list``, ``whatis`` and ``search`` commands.
637* When color mode is enabled and module aliases are colored, do not associate
638  them a ``@`` tag as the color already distinguish them from regular
639  modulefile.
640* When color mode is enabled and a Select Graphic Rendition (SGR) code is set
641  for the ``default`` modulefile symbol, apply this SGR code to the modulefile
642  name instead of associating it the ``default`` symbol tag.
643* Highlight matched module search query string among ``avail``, ``whatis`` and
644  ``search`` command results.
645* Highlight the modulefile and collection full path name on ``display``,
646  ``help``, ``test`` and ``saveshow`` command reports.
647* Color modulefile Tcl commands set in a modulefile on a ``display`` command
648  report.
649* Color module commands set in a collection on a ``saveshow`` command report.
650* Re-introduce ``clear`` sub-command. (fix issue #203)
651* Leverage ``--force`` command-line switch on ``clear`` sub-command to skip
652  confirmation dialog. (fix issue #268)
653* Init: improve readability of variable definition operations by writing one
654  definition operation per line rather having multiple commands on a single
655  line like ``VAR=val; export VAR``. (fix issue #225)
656* Add the ability to define a site-specific configuration file with an
657  environment variable: ``MODULES_SITECONFIG``. When set, the script file
658  pointed by the variable is sourced (if readable) after the site-specific
659  configuration file initially defined in ``modulecmd.tcl``. (contribution
660  from Ben Bowers, fix issue #234)
661* Doc: add description in the module.1 man page of ``MODULERCFILE`` in the
662  environment section and ``siteconfig.tcl`` in the files section.
663* Install: provide at installation time a bare site-specific configuration
664  script in designated ``etcdir`` if no pre-existing ``siteconfig.tcl`` file
665  is found at designated location.
666* Introduce the ``config`` sub-command to get and set ``modulecmd.tcl``
667  options and to report its current state.
668* Contrib: update ``createmodule.py`` script to support execution from the
669  *cmd* shell. (contribution from Jacques Raphanel, fix issue #270)
670* Add the ability to configure when unloading a module and multiple loaded
671  modules match request if firstly loaded module should be chosen or lastly
672  loaded module. Configure option ``--with-unload-match-order`` defines this
673  setting which can be superseded with the ``MODULES_UNLOAD_MATCH_ORDER``
674  environment variable. This variable can be set with the option
675  ``unload_match_order`` on the ``config`` sub-command. By default, lastly
676  loaded module is selected. It is recommended to keep this behavior when the
677  modulefiles used express dependencies between each other.
678* Add the ability to configure whether an implicit default version should be
679  defined for modules with no default version explicitly defined. When
680  enabled, which stays the default behavior, a module version is automatically
681  selected (latest one) when the generic name of the module is passed. When
682  implicit default selection is disabled, the name of modules to evaluate
683  should be fully qualified elsewhere an error is returned. This option is set
684  at ``./configure`` time with the ``--enable-implicit-default`` and
685  ``--disable-implicit-default`` options. It could be superseded with the
686  ``MODULES_IMPLICIT_DEFAULT`` environment variable, that could be set with
687  ``config`` module sub-command through the ``implicit_default`` option.
688* Install: add to the configure script the ``--with-locked-configs`` option to
689  ignore environment variable superseding of Modules configurations defined in
690  ``modulecmd.tcl`` script. Lockable configuration option are
691  ``extra_siteconfig`` and ``implicit_default``. Currently locked options are
692  reported through the ``locked_configs`` option on the ``config``
693  sub-command.
694* Introduce the ability to control the module search match. Search query
695  string should match module name start or any part of module fully qualified
696  name. Default search match behavior is set at ``./configure`` time with the
697  ``--with-search-match`` option. It could be superseded with the
698  ``MODULES_SEARCH_MATCH`` environment variable, that could be set with
699  ``config`` module sub-command through the ``search_match`` option.
700  Command-line switches ``--starts-with`` (``-S``) and ``--contains`` (``-C``)
701  for ``avail`` module sub-command enable to supersede defined search match
702  configuration.
703* Introduce the ability not to set the shell startup file that ensure
704  ``module`` command is defined once shell has been initialized. Setting shell
705  startup file currently means defining ``ENV`` and ``BASH_ENV`` environment
706  variables to the Modules bourne shell initialization script. ``./configure``
707  options ``--enable-set-shell-startup`` and ``--disable-set-shell-startup``
708  define if shell startup should be set or not by default. It could be
709  superseded with the ``MODULES_SET_SHELL_STARTUP`` environment variable, that
710  could be set with ``config`` module sub-command through the
711  ``set_shell_startup`` option.
712* Cookbook: add the *test-modulefiles* recipe. (fix issue #182 with
713  contribution from Colin Marquardt)
714* Fix location of global RC file to ``@etcdir@/rc`` instead of
715  ``@prefix@/etc/rc`` to cope with ``@etcdir@`` specific setup (``@etcdir@``
716  defaults to ``@prefix@/etc``).
717* Take into account Modules initialization configurations found in ``etc``
718  directory if they exist rather in ``init`` directory. If ``initrc``
719  configuration file is found in ``etcdir`` then it is preferred over
720  ``modulerc`` file in ``initdir``. Following the same trend, ``modulespath``
721  configuration file is found in ``etcdir`` then it is preferred over
722  ``.modulespath`` file in ``initdir``.
723* Introduce the ability to install the Modules initialization configuration
724  files in the ``etcdir`` rather than in the ``initdir``. A new configure
725  option is introduced for this task: ``--with-initconf-in``. Accepted values
726  for this option are: ``etcdir`` or ``initdir`` (default).
727* Add the ``--enable-modulespath`` configure option, which is an alias for the
728  ``--enable-dotmodulespath`` option as ``.modulespath`` configuration file is
729  named ``modulespath`` when installed in ``etcdic``.
730* Install: update RPM spec file to disable ``set_shell_startup`` option by
731  default, set ``/etc/environment-modules`` as configuration directory and
732  store Modules initialization configuration files in it.
733* Report an error when a module load or unload evaluation aborts due to the
734  use of the ``break`` or ``exit`` modulefile commands. This error
735  notification clarifies that module evaluation failed. (fix issue #267)
736* Remove the message block display output for the ``reload``, ``purge`` and
737  ``restore`` sub-commands to preserve this output style for modulefile
738  evaluation modes (load, unload and switch) and thus clarify understanding.
739* When unloading a module that contains a ``module load`` or ``module switch``
740  modulefile command, inhibit the unload performed of the useless requirement
741  when auto_handling mode is disabled if currently performing a ``purge``,
742  ``reload`` or ``restore`` sub-command. As the unload sequence is determined
743  and managed from these top commands.
744* Add ability to control module command message verbosity with configuration
745  option. Introduced verbosity levels from the least to the most verbose are
746  ``silent``, ``concise``, ``normal``, ``verbose`` and ``debug``. This option
747  could be set at ``./configure`` time with ``--with-verbosity`` option.
748  It could be superseded with the ``MODULES_VERBOSITY`` environment variable,
749  that could be set with ``config`` module sub-command through the
750  ``verbosity`` option. Silent, verbose and debug verbosity modes can be set
751  at the command-line level respectively with ``--silent``/``-s``,
752  ``--verbose``/``-v`` and ``--debug``/``-D`` command-line switches. (fix
753  issue #204)
754* When verbosity level is ``normal`` or higher, reports every module loads or
755  unloads performed to ``restore`` a collection or ``source`` a scriptfile,
756  even if there is no specific message to output for these module evaluations.
757  Clarifies what module evaluations have been triggered by these sub-commands.
758* Also honor the ``CLICOLOR`` and ``CLICOLOR_FORCE`` environment variables to
759  define color mode. (fix issue #279)
760
761
762Modules 4.2.5 (2019-07-08)
763--------------------------
764
765* Correctly escape ``?`` character in shell alias. (fix issue #275)
766* When resolving the enabled list of modulepaths, ensure resolved path
767  entries are unique. (fix issue #274)
768* Right trim '#' characters from the fetched modulefile magic cookie string
769  to ensure a correct compatibility version comparison. Useful when modulefile
770  first line is equal to ``#%Module4.2##############``.
771* Fix argument parsing for the ``append-path``, ``prepend-path`` and
772  ``remove-path`` modulefile commands to consider every arguments found after
773  the variable name as variable values and not command option even if argument
774  starts with ``-`` character. (fix issue #278)
775* Fix automatic loading of modulefiles when multiple module names are set on a
776  single ``module load`` modulefile command. When auto_handling mode was
777  disabled, the load of not loaded modules was not achieved as soon as some
778  modules on this list were already loaded. (fix issue #281)
779
780
781Modules 4.2.4 (2019-04-26)
782--------------------------
783
784* Better track each module evaluation and the context associated to it in
785  order to report a more accurate information on the additional modules
786  loaded or unloaded when proceeding the main evaluation request. (fix issue
787  #244, #245, #246, #247 and #248)
788* Doc: preserve quotes and dashes when making HTML docs. (fix issue #250 with
789  contribution from Riccardo Coccioli)
790* Fix hanging ``list`` sub-command when terminal width is equal to the single
791  column text width to be printed. (contribution from Jesper Dahlberg)
792* During an additional evaluation triggered by an automated module handling
793  mechanism, ensure warning and error messages are reported under the message
794  block of the main evaluation. (fix issue #252)
795* During the unload of a module when the automated module handling mode is
796  disabled, report a warning message for each unload of a useless requirement
797  that fails as done when the automated module handling mode is enabled. (fix
798  issue #253)
799* When multiple modules are listed on a ``prereq`` command, drop the output of
800  those modules that fails to load (by the *Requirement Load* automated
801  mechanism) to only keep the output of the module whose load succeed. (fix
802  issue #254)
803* Fix ``switch`` sub-command when the switched-off module cannot be unloaded
804  when other loaded modules depend on it. Whole switch process is failed and
805  no load of the switched-on module is attempted. (fix issue #251)
806* When switching modules, report failure of switched-off module unload or
807  switched-on module load under the message block of the switch action. A
808  failed switched-off module unload is reported as an error, as it aborts the
809  switch evaluation, whereas a failed switched-on module load is reported as a
810  warning. (fix issue #255)
811* When a module requirement is seen missing but the load of this module was
812  attempted, report a more specific error or warning message to let user
813  understand that the load of the requirement was attempted but failed. (fix
814  issue #257)
815* When loading a module, report any missing requirement on the message
816  reporting block corresponding to this module load. This warning or error
817  message comes in addition to the eventual *Requirement Load* message
818  reported under the message block of the main evaluation. (fix issue #258)
819* When unloading a module which has some dependent module still loaded,
820  produce a more specific error or warning message if an evaluation of these
821  dependent modules has been realized or if the unload of the required module
822  is forced. (fix issue #259)
823* When a conflicting module is seen loaded but the unload of this module was
824  attempted, report a *Conflict Unload* error or warning message toward the
825  main evaluation message block. (fix issue #261)
826* When loading a module, report any loaded conflict on the message reporting
827  block corresponding to this module load. This warning or error message comes
828  in addition to the eventual *Conflict Unload* message reported under the
829  message block of the main evaluation. (fix issue #261)
830* Correctly report loading state of conflicting module. (fix issue #262)
831* Adapt warning, error and info messages relative to the *Dependent Reload*
832  mechanism to distinguish the unload phase from the load (reload) phase of
833  this mechanism. In the automated module handling summary report, unloaded
834  modules via this mechanism are reported in the *Unloading dependent* list
835  and modules reloaded afterward are reported against the *Reloading
836  dependent* list. (fix issue #263)
837* When the automated module handling mode is disabled, do not attempt to load
838  a requirement expressed in a modulefile with a ``module load`` command, if
839  this requirement is already loaded or loading.
840* Skip load or unload evaluation of a module whose respectively load or unload
841  was already attempted but failed. If this second evaluation attempt occurs
842  within the same main evaluation frame. (fix issue #264)
843* When reloading modules through the *Dependent Reload* automated mechanism,
844  prevent modules to automatically load of other modules with the ``module
845  load`` modulefile command, as it is done for the ``prereq`` command. (fix
846  issue #265)
847* Raise an error when an invalid option is set on ``append-path``,
848  ``prepend-path`` or ``remove-path`` modulefile command. (fix issue #249)
849* Zsh initializes by default the ``MANPATH`` environment variable to an empty
850  value when it starts. To preserve ``manpath`` system configuration even
851  after addition to this variable by modulefiles, set ``MANPATH`` variable to
852  ``:`` if found empty. (improve fix for issue #224)
853* Doc: provide a short installation guideline in README file. (fix issue #230)
854
855
856Modules 4.2.3 (2019-03-23)
857--------------------------
858
859* Add all the module dependency-related internal information to those saved
860  prior a modulefile evaluation in order to correctly restore internal state
861  in case modulefile evaluation fails.
862* Init: in shell initialization scripts, initialize ``MANPATH`` if not set
863  with a value that preserves ``manpath`` system configuration even after
864  addition of paths to this variable by modulefiles. (fix issue#224)
865* Enable to define an entire path entry to the ``MODULEPATH`` variable which
866  corresponds to a variable reference only. (fix issue#223)
867* Cookbook: add the *modulefiles-in-git* recipe. (contribution from Scott
868  Johnson)
869* When ``module switch`` commands are found in modulefiles, track switched-off
870  modulefile as a conflict and switched-to modulefile as a requirement to
871  apply same behaviors than for ``module load`` and ``module unload`` commands
872  in modulefiles. If ``module switch`` has only one argument, do not define a
873  conflict toward switched-off modulefile. *CAUTION: it is not recommended to
874  use `module switch` command in modulefiles*. (fix issue#229)
875* When unloading a module, revert ``module switch`` commands found in
876  modulefile: switched-on module is converted to a ``module unload``, like for
877  ``module load`` command. Nothing is done for switched-off module, like for
878  ``module unload`` command. (fix issue#226)
879* For default element in a modulefile directory which is a module alias that
880  points to a modulefile, when this modulefile is loaded, it receives as
881  alternative names the eventual module aliases set on the distant directory
882  holding the alias pointing to it. (fix issue#231)
883* When unloading a module that contains ``module load`` or ``module switch``
884  commands in its modulefile, select for unload the automatically loaded
885  requirement module which has been loaded prior its dependent. (fix
886  issue#232)
887* Doc: describe Emacs settings useful for adhering to coding conventions in
888  CONTRIBUTING guide. (fix issue #233 with contribution from Ben Bowers)
889* When looking for a loaded or loading dependency requirement, select among
890  the eventual multiple candidates the closest match to the dependent module.
891* During the unload of a module, if the unload of one of its dependent (by the
892  *Dependent Unload* mechanism) fails, abort the whole unload process.
893  Exception made if the force mode is enabled. In this case failing module
894  stays loaded and the *Dependent Unload* mechanism continues with next module
895  to unload.
896* During the unload of a module, if the unload of one of its useless
897  requirements (by the *Useless Requirement Unload* mechanism) fails, keep the
898  requirements of this failing module loaded. Such error is reported as a
899  warning and it does not stop the whole unload process. (fix issue#240)
900* During the load or the unload of a module, if the unload of one of its
901  dependent (by the *Dependent Reload* mechanism) fails, abort the whole
902  unload or load process. Exception made if the force mode is enabled. In this
903  case failing module stays loaded and *Dependent Reload* mechanism continues
904  with next module to unload. This failing module is removed from the
905  *Dependent Reload* list, so it will not take part of the load phrase of the
906  mechanism. (fix issue#239)
907* During the load or the unload of a module, if the load of one of its
908  dependent (by the *Dependent Reload* mechanism) fails, abort the whole
909  unload or load process. Exception made if the force mode is enabled. In this
910  case failing module stays loaded and *Dependent Reload* mechanism continues
911  with next module to load. When the mechanism is applied during a ``switch``
912  command, force mode is enabled by default on the load phase. (fix issue#241)
913* When reloading all loaded modules with the ``reload`` sub-command, if one
914  reloading module fails to unload or load, abort the whole reload process to
915  preserve environment sanity. (fix issue#237)
916* During the unload of a module when the automated module handling mode is
917  disabled and this module declares its requirements with the ``module load``
918  modulefile command. If the unload of one of its useless requirements (by the
919  *Useless Requirement Unload* mechanism) fails, whole unload process is not
920  aborted and continue with next module to unload. (fix issue#238)
921* Contrib: add ``mtreview`` utility script that analyzes test suite log file
922  to compare actual and expected output of failed test. ``mt`` does not output
923  the full test suite logs anymore but only the information produced by
924  ``mtreview`` on failed tests.
925* Install: exclude Continuous Integration configurations from dist tarballs.
926
927
928Modules 4.2.2 (2019-02-17)
929--------------------------
930
931* Correct the *Dependent Unload* mechanism when it triggers the unload of 2
932  modules making together a requirement from another module. This module is
933  now also added to the dependent modules to unload.
934* Doc: add a cookbook section in the documentation and port there the 3
935  pre-existing recipes: *inhibit-report-info*, *top-priority-values* and
936  *unload-firstly-loaded*.
937* Doc: add a CONTRIBUTING guide.
938* Doc: fix a typo on the Python initialization example in module man page.
939* Doc: add a FAQ entry to describe the use of module from Makefile. (with
940  contribution from Robert McLay)
941* Trim any white-space, newline or ``;`` characters at the beginning or end of
942  the function body passed to set-function modulefile command.
943* Init: add recognition of the ``--auto``, ``--no-auto`` and ``--force``
944  command-line switches in fish shell completion script.
945* Init: add recognition of the ``--auto``, ``--no-auto``, ``--force``,
946  ``--paginate`` and ``--no-pager`` command-line switches in zsh shell
947  completion script.
948* When the load of a modulefile is asked but a conflict is registered against
949  this modulefile by an already loaded module, the load evaluation is now
950  performed and the conflict is checked after this evaluation. If the conflict
951  is still there, this evaluation (and the evaluation of its requirements) is
952  rolled back. (fix issue#216)
953* Init: fix ``_module_not_yet_loaded`` alias in tcsh completion script to
954  handle situation when ``noclobber`` variable is set. Also ensure actual
955  ``rm`` command is called and not an alias. (fix issue#219)
956* Fix warning message when the load of a modulefile is forced over a reflexive
957  conflict (message was reported twice).
958* When looking at the dependency of a loaded module, only consider requirement
959  loaded before dependent module (holding a prior position in the loaded
960  module list) as valid. Those loaded after dependent module are considered as
961  an unmet dependency thus they are not taking part in the *Dependent Unload*,
962  the *Useless Requirement Unload* and the *Dependent Reload* mechanisms.
963
964
965Modules 4.2.1 (2018-11-11)
966--------------------------
967
968* Cookbook: add the *inhibit-report-info* recipe.
969* Cookbook: port *unload-firstly-loaded* and *top-priority-values* recipes to
970  v4.2.
971* Init: fix listing of loaded modules for *fish* and *tcsh* shell completions.
972* Init: fix saved collection listing when no collection found for *bash*,
973  *zsh*, *tcsh* and *fish* shell completions.
974* Adapt ``system`` modulefile Tcl command to execute the command passed as
975  argument through shell, like it is performed on compatibility version. (fix
976  issue#205)
977* Correctly filter modulefile search memory cache entries when using a full
978  search result to search later on a specific modulefile.
979* Prefix debug messages by information on the current modulefile or modulerc
980  interpreter if any.
981* Init: fix listing of loaded modules on unload and switch sub-commands for
982  *bash* shell completion.
983* Refrain ``module unload`` modulefile command from unloading a module
984  required by another loading module.
985* Enable ``is-loaded`` modulefile Tcl command in modulerc interpretation
986  context, like done on compatibility version. (fix issue#207)
987* Check a required module is not already loading before attempting to load it.
988  Helps to handle cyclic dependencies.
989* Compute loaded modules requirement dependency relations without cycle and
990  consider the module closing the cycle in a constraint violation state to
991  avoid reloading loops on the *Dependent Reload* mechanism.
992* Safely unset dependency reference when computing dependency relations as
993  some dependencies expressed may target same module.
994* Ensure a loaded module matching multiple entries of a same *or* ``prereq``
995  will just be considered as one module matching this requirement.
996* Init: quote prompt in *csh* and *tcsh* script with ``:q`` rather double
997  quotes to accommodate prompts with embedded newlines. (fix issue#209 with
998  contribution from Satya Mishra)
999* Init: skip shell environment alteration if ``autoinit`` command fails. (fix
1000  issue#208)
1001* Reword path-like variable element counter reference handling to simply
1002  ignore the counter values not coherent with the content of related
1003  path-like variable. (fix issue#206)
1004
1005
1006Modules 4.2.0 (2018-10-18)
1007--------------------------
1008
1009* Add ``chdir`` and ``puts`` environment settings to the per-modulefile
1010  evaluation saved context. So previous values of these settings are restored
1011  in case of evaluation failure.
1012* Fix save and restore of ``x-resource`` environment settings on the
1013  per-modulefile evaluation context.
1014* Use the correct warning procedure to report the full reference counter
1015  inconsistency message (so this message is fully inhibited during global
1016  ``whatis`` evaluations).
1017* Make ``append-path``, ``prepend-path``, ``remove-path`` and ``unsetenv``
1018  commands alter ``env`` Tcl global array during ``display``, ``help``,
1019  ``test`` or ``whatis`` evaluation modes. Thus an invalid argument passed to
1020  these commands will now raise error on these modes. (see
1021  :ref:`v42-variable-change-through-modulefile-evaluation` section in
1022  MIGRATING document)
1023* On ``whatis`` mode, ``append-path``, ``prepend-path``, ``remove-path``,
1024  ``setenv`` and ``unsetenv`` commands initialize variables if undefined but
1025  do not set them to their accurate value for performance concern.
1026* Clear value instead of unsetting it during an unload mode evaluation of
1027  ``setenv`` or ``*-path`` commands to avoid breaking later reference to the
1028  variable in modulefile.
1029* Make ``getenv`` command returns value on ``help``, ``test`` or ``whatis``
1030  evaluation modes. (fix issue#188)
1031* Add an argument to the ``getenv`` command to return the value of this
1032  argument if the queried variable is undefined.
1033* Use a different modulefile interpreter for each evaluation mode.
1034* Adapt the procedure called for each modulefile command depending on the
1035  evaluation mode to adapt behavior of these commands to the module command
1036  currently running.
1037* Report calling name and arguments for modulefile commands on ``display``
1038  mode. For the commands evaluated during this mode, trigger this report at
1039  the end of the evaluation.
1040* Inhibit ``chdir``, ``conflict``, ``module``, ``module-log``,
1041  ``module-trace``, ``module-user``, ``module-verbosity``, ``prereq``,
1042  ``set-alias``, ``system``, ``unset-alias``, ``x-resource`` commands on
1043  ``help``, ``test`` and ``whatis`` evaluation modes.
1044* Ignore ``chdir``, ``module``, ``module-trace``, ``module-verbosity``,
1045  ``module-user`` and ``module-log`` commands found during modulerc
1046  evaluation.
1047* Correctly restore an empty string value on sub-interpreter global variables
1048  when sanitizing this interpreter between two modulefile/modulerc
1049  evaluations.
1050* Cache in memory results of a modulefile search to reuse it in case of rerun
1051  instead of re-walking the filesystem.
1052* Evaluate global rc files once module sub-command is known and registered,
1053  so it can be queried during their evaluation.
1054* Rename ``_moduleraw`` shell function in ``_module_raw`` to use a common
1055  ``_module_`` prefix for all module-related internal shell functions.
1056* Install: add ``--enable-append-binpath`` and ``--enable-append-binpath``
1057  configure options to append rather prepend the bin or man directory when
1058  adding them to the relative environment variable.
1059* Doc: clarify documentation for module usage on scripting language like Perl
1060  or Python to mention that arguments to the ``module`` function should be
1061  passed as list and not as a single string.
1062* When interpreting a ``setenv`` modulefile order during an unload evaluation,
1063  variable is still set to be unset in generated shell code but it is set to
1064  the value defined on the ``setenv`` order in the interpreter context instead
1065  of being cleared.
1066* Register the conflicts defined by loaded modules in the environment
1067  (variable ``MODULES_LMCONFLICT``) and ensure they keep satisfied. (see
1068  :ref:`v42-conflict-constraints-consistency` section in MIGRATING document)
1069* Register the prereqs defined by loaded modules in the environment (variable
1070  ``MODULES_LMPREREQ``) and ensure they keep satisfied. (see
1071  :ref:`v42-prereq-constraints-consistency` section in MIGRATING document)
1072* Introduce the automated module handling mode, which consists in additional
1073  actions triggered when loading or unloading a modulefile to satisfy the
1074  dependency constraints it declares. Those actions are when loading a
1075  modulefile: the *Requirement Load* and the *Dependent Reload*. When
1076  unloading a modulefile, *Dependent Unload*, *Useless Requirement Unload* and
1077  *Dependent Reload* actions are triggered. (see
1078  :ref:`v42-automated-module-handling-mode` section in MIGRATING document)
1079* Track the loaded modules that have been automatically loaded (with
1080  environment variable ``MODULES_LMNOTUASKED``) to distinguish them from
1081  modules that have been explicitly asked by user. This information helps to
1082  determine what module becomes a useless requirement once all its dependent
1083  modules are unloaded.
1084* Track in saved collections the loaded modules that have been automatically
1085  loaded by add of a ``--notuasked`` argument to ``module load`` collection
1086  lines. So this information is restored in loaded environment when collection
1087  is restored. This ``--notuasked`` argument is ignored outside of a
1088  collection restore context.
1089* Consider modules loaded from a ``module source`` file as explicitly asked by
1090  user.
1091* Install: add ``--enable-auto-handling`` configure option to enable or
1092  disable the automatic modulefile handling mechanism.
1093* Process list of loaded modules or modules to load one by one during the
1094  ``restore``, ``purge`` and ``reload`` sub-commands whatever the auto
1095  handling mode is.
1096* Add the ability to control whether the auto_handling mode should be enabled
1097  or disabled with an environment variable called ``MODULES_AUTO_HANDLING`` or
1098  from the command-line with ``--auto`` and ``--no-auto`` switches. These
1099  command-line switches are ignored when called from modulefile.
1100* Init: add pager-related command-line options in shell completion scripts.
1101* Doc: describe ``MODULES_LMCONFLICT``, ``MODULES_LMPREREQ`` and
1102  ``MODULES_LMNOTUASKED`` in module.1 man page.
1103* Add ``-f`` and ``--force`` command-line switches to by-pass dependency
1104  consistency during ``load``, ``unload`` or ``switch`` sub-commands. (see
1105  :ref:`v42-by-passing-module-constraints` section in MIGRATING document)
1106* Disallow collection ``save`` or loaded modules ``reload`` if some loaded
1107  modules have some of their dependency constraints unsatisfied.
1108* The *Dependent Reload* action of a ``load``, ``unload`` and ``switch``
1109  sub-commands excludes modules that have unsatisfied constraints and includes
1110  modules whose constraints are satisfied again (when sub-command process
1111  solves a conflict for instance).
1112* Doc: describe ``--force``, ``--auto`` and ``--no-auto`` command-line
1113  switches and ``MODULES_AUTO_HANDLING`` variable in module.1 man page.
1114* Ignore directories ``.SYNC`` (DesignSync) and ``.sos`` (SOS) when walking
1115  through modulepath directory content. (contribution from Colin Marquardt)
1116* Install: look for ``make`` rather ``gmake`` on MSYS2.
1117* Fix ``exec()`` usage in Python module function definition to retrieve the
1118  correct return status on Python3.
1119* Cookbook: add the *top-priority-values* and *unload-firstly-loaded* recipes.
1120* Install: add ``gcc`` to the build requirements in RPM specfile.
1121* Silent any prereq violation warning message when processing *Dependent
1122  Reload* mechanism or ``purge`` sub-command.
1123* Doc: mention ``createmodule.sh`` and ``createmodule.py`` scripts in FAQ.
1124  (fix issue#189)
1125* Register all alternative names of loaded modules in environment with
1126  ``MODULES_LMALTNAME`` variable. These names correspond to the symbolic
1127  versions and aliases resolving to the loaded modules. Helps to consistenly
1128  solve ``conflict`` or ``prereq`` constraints set over these alternative
1129  names. (fix issue#143 / see
1130  :ref:`v42-consistency-module-load-unload-commands` section in MIGRATING
1131  document)
1132* Doc: describe ``MODULES_LMALTNAME`` in module.1 man page.
1133* Install: add ``--with-bin-search-path`` configure option to get in control
1134  of the path list used to search the tools required to build and configure
1135  Modules. (fix issue#164)
1136* Install: add ``--enable-silent-shell-debug-support`` configure option to add
1137  the ability to control whether or not code to support silent shell debug
1138  should be added to the module function and sh-kind initialization scripts.
1139  (fix issue#166)
1140* Install: add ``--enable-quarantine-support`` configure option to add the
1141  ability to control whether or not code to support quarantine mechanism
1142  should be added to the module function and initialization scripts.
1143  (fix issue#167)
1144* Check version set in modulefile magic cookie. If modulefile sets a version
1145  number greater than ``modulecmd.tcl`` script version, this modulefile is not
1146  evaluated like when no magic cookie is set at all. (fix issue#171 / see
1147  :ref:`v42-versioned-magic-cookie` section in MIGRATING document)
1148* Fix uninitialized variable in procedure producing list of element output.
1149  (fix issue#195)
1150* Ensure the consistency of ``module load`` modulefile command once the
1151  modulefile defining it has been loaded by assimilating this command to a
1152  ``prereq`` command. Thus the defined constraint is recorded in the
1153  ``MODULES_LMPREREQ`` environment variable. Same approach is used for
1154  ``module unload`` modulefile command which is assimilated to a ``conflict``
1155  command. Thus the defined constraint is recorded in the
1156  ``MODULES_LMCONFLICT`` environment variable. (see
1157  :ref:`v42-alias-symbolic-name-consistency` section in MIGRATING document)
1158* Only look at loaded modules when unloading so unloading an nonexistent
1159  modulefile does not produce an error anymore. (fix issue#199)
1160* Report error raised from modulefile evaluation as ``ERROR`` rather
1161  ``WARNING``, like when a conflict constraint is hit. Moreover this kind of
1162  evaluation error is now silenced on global evaluation like when proceding
1163  ``avail`` or ``search`` sub-commands.
1164* Record messages to report them by block on when processing a ``load`` or an
1165  ``unload`` modulefile evaluation to improve readability on these evaluating
1166  modes that may cascade additional actions. (see
1167  :ref:`v42-module-message-report` section in MIGRATING document)
1168* Foreground ``load``, ``unload``, ``switch`` and ``restore`` actions (ie.
1169  asked on the command-line) now report a summary of the additional load and
1170  unload evaluations that were eventually triggered in the process.
1171* Support ``del`` and ``remove`` aliases for ``unload`` sub-command like on
1172  compatibility version. (fix issue#200 with contribution from Wenzler)
1173* Correctly transmit the arguments along with the command to execute on
1174  ``system`` modulefile command. (fix issue#201)
1175* Contrib: add ``mt`` utility script which helps to run just specific part of
1176  the test suite.
1177* Introduce ``set-function`` and ``unset-function`` modulefile commands to
1178  define shell function on sh-kind and fish shells. (fix issue#193 with
1179  contribution from Ben Bowers)
1180
1181
1182Modules 4.1.4 (2018-08-20)
1183--------------------------
1184
1185* Doc: fix typo on ``getenv`` command description in modulefile(4) man page
1186  and clarify this command should be preferred over ``::env`` variable to
1187  query environment variable value in modulefile.
1188* Init: fix ``bash`` and ``zsh`` completion scripts to enable Extended Regular
1189  Expression (ERE) on ``sed`` command with ``-E`` argument (rather ``-r``) for
1190  compatibility with OS X's and BSDs' sed. (fix issue#178)
1191* Handle default version sets on an hidden modulefile (were not found
1192  previously). (fix issue#177)
1193* Init: fix ``ksh`` initialization script for ksh88 compatibility. (fix
1194  issue#159)
1195* Install: use ``sed`` command rather ``grep`` and ``cut`` in ``configure``
1196  and ``Makefile`` scripts. (fix issue#175 with contribution from Michael
1197  Sternberg)
1198* Fix typo, tab indentation and pipe opening mode on ``createmodule.py``
1199  utility script. (contribution from Jan Synacek)
1200* Check ``ModulesVersion`` value set from ``.version`` rc file to ensure this
1201  value refers to a version name in current directory. Report error if a
1202  nested value is detected and ignore this value. (fix issue#176)
1203
1204
1205Modules 4.1.3 (2018-06-18)
1206--------------------------
1207
1208* Make ``setenv`` command alter ``env`` Tcl global array during ``help``,
1209  ``test`` or ``whatis`` evaluation modes. (fix issue#160)
1210* Doc: describe MANPATH variable special treatment on compatibility version
1211  in diff_v3_v4 document.
1212* Initialize and export _moduleraw SH shell function if ``stderr`` is attached
1213  to a terminal. Was previously checking ``stdout``. (fix issue#169)
1214* For ``csh`` shells, quote code generated by modulecmd.tcl to pass it to the
1215  ``eval`` shell command.
1216* Escape special characters when producing code to define shell aliases (fix
1217  issue#165)
1218* Correct modulefile lookup when a modulefile directory is overwritten by a
1219  module alias definition but it contains an empty sub-directory. (fix
1220  issue#170)
1221* Doc: describe ``getenv`` command in modulefile(4) man page.
1222* Improve SH shell detection in profile.sh initialization script to use shell
1223  variable on ``bash`` or ``zsh`` to determine current shell name. (fix
1224  issue#173)
1225
1226
1227Modules 4.1.2 (2018-03-31)
1228--------------------------
1229
1230* Add an example global rc file in ``contrib/etc`` directory that ensures
1231  ``MODULEPATH`` is always defined.
1232* Check ``HOME`` environment variable is defined on ``savelist`` and
1233  ``is-saved`` commands or raise error if not.
1234* Fix saving of deep module default version in collection when version pinning
1235  is disabled: if ``foo/bar/version`` is default version for ``foo``,
1236  collection will retain just ``foo`` (was retaining ``foo/bar``).
1237* Enable to save and restore collections containing full path modulefiles
1238  eventually with no modulepath defined.
1239* Run ``puts`` command not related to ``stderr`` or ``stdout`` channels in
1240  calling modulefile context to correctly get access to the targeted file
1241  channel. (fix issue#157)
1242* Quote ``autoinit`` result for eval interpretation on SH-kind shells to avoid
1243  parameter expansion to randomly occur on generated code depending on file
1244  or directory names of current working directory. (fix RH bug#1549664)
1245* Ignore empty elements found in ``MODULEPATH``, ``LOADEDMODULES`` or
1246  ``_LMFILES_`` to ensure all elements in these variables are non-empty
1247  strings.
1248* Raise error if loaded environment is in an inconsistent state when calling
1249  commands requiring correlation of information from the ``LOADEDMODULES`` and
1250  the ``_LMFILES_`` environment variables. Error raised on ``load``,
1251  ``unload``, ``switch``, ``reload``, ``purge``, ``list``, ``save`` and
1252  ``restore`` commands.  May affect ``info-loaded`` or ``is-loaded`` commands
1253  if module passed as argument to these command is specified as a full path
1254  modulefile.
1255* Fix ``list`` command to process loaded modules information before performing
1256  any content output.
1257* Install: adapt ``configure`` script and Makefiles to support installation on
1258  Cygwin system.
1259* Detect terminal width on Windows ``cmd`` terminal with ``mode`` command.
1260* Improve Windows ``cmd`` shell support: error code returned, echoing text,
1261  shell alias creation and removal, working directory change.
1262* Raise error when an empty module name is passed to module sub-commands like
1263  ``load``, ``display`` or ``unload``.
1264* Raise error when an empty collection name is passed to module sub-commands
1265  like ``save``, ``saveshow`` or ``restore``.
1266* Raise error when an empty path is passed to module ``unuse`` sub-command,
1267  like already done on ``use`` sub-command.
1268* Clear argument list if an empty module command name is passed.
1269* Fix ``module`` function definition for all shells in ``autoinit`` command to
1270  correctly handle empty-string parameters or parameters containing
1271  white-spaces, quotes, escape characters.
1272* Fix ``module`` function definition for Python to accept being called with no
1273  argument.
1274* Fix parameter expansion on ``module`` function for all SH-kind shells when
1275  quarantine mode is activated.
1276* Escape ``\`` character when producing R shell code.
1277
1278
1279Modules 4.1.1 (2018-02-17)
1280--------------------------
1281
1282* Make separator lines, used on ``display`` command result for instance, fit
1283  small screen width.
1284* Install: give ability to build and install Modules from git repository
1285  without documentation if ``sphinx-build`` cannot be found.
1286* Install: adapt ``configure`` script and Makefiles to support installation on
1287  FreeBSD, Solaris and OS X systems. (fix issue#147)
1288* Rework code generated by ``autoinit`` for sh-kind shells to avoid use of
1289  local variables as those are defined differently through the sh variants.
1290  (also fix issue#147)
1291* Init: use a default value on undefined variables in sh-kind scripts to avoid
1292  unbound variables in bash ``-eu`` mode. (fix issue#151)
1293* Correctly detect terminal column number on Solaris.
1294* Init: fix csh init script to get compatibility with pure csh shell
1295* Sanitize content of ``MODULEPATH`` before using it at run-time, to make
1296  potential relative paths absolute, remove trailing slashes, etc. (fix
1297  issue#152)
1298* Check loaded modulefiles still exists before displaying statistics on them
1299  during a ``list`` action.
1300* Use a specific reference counter variable name (``MODULES_MODSHARE_<VAR>``
1301  instead of ``<VAR>_modshare``) for DYLD-specific variables. (fix issue#153)
1302* No error raise when updating a DYLD or LD path-like variable on OS X when
1303  System Integrity Protection (SIP) is enabled. In this situation, these
1304  variables are not exported in subshell context, so they appear undefined.
1305* Init: protect arguments passed to the ``_moduleraw`` sh function from
1306  interfering content of current working directory. (fix issue#154)
1307* Install: move ``hostname`` RPM requirement to the compat sub-package.
1308* Start pager process only if some text has to be printed. (partially fix
1309  issue#146)
1310* Ignore ``PAGER`` environment variable to configure Modules pager to avoid
1311  side effects coming from a general pager configuration not compatible with
1312  Modules pager handling. (fix issue#146)
1313* Do not blank anymore default Modules pager options if default pager is
1314  ``less`` when the ``LESS`` environment variable is defined. (fix issue#146)
1315
1316.. warning:: With this bugfix release, changes have been made on the pager
1317   setup to avoid side effects coming from the system general pager
1318   configuration. As a result ``PAGER`` environment variable is now ignored
1319   and ``MODULES_PAGER`` should be used instead to adapt Modules pager
1320   configuration at run-time.
1321
1322
1323Modules 4.1.0 (2018-01-15)
1324--------------------------
1325
1326* Extend stderr output redirection on sh-kind shells to all terminal-attached
1327  shell session, not only interactive shell session.
1328* Extend shell code produced by the ``autoinit`` command to perform the same
1329  environment initialization as done in ``init`` shell scripts (default value
1330  set for module-specific environment variables, parse or source of
1331  configuration files).
1332* Make init shell scripts rely on ``autoinit`` command to define the
1333  ``module`` command and setup its default environment.
1334* Fix error rendering code for Tcl shell by producing a call to the ``error``
1335  procedure.
1336* Introduce pager support to handle informational messages, using ``less``
1337  command with ``-eFKRX`` options by default. Environment variable
1338  ``MODULES_PAGER`` or ``PAGER`` may be used to supersede default pager
1339  command and options. ``--paginate`` and ``--no-pager`` switches enable or
1340  disable pager from the command line.
1341* Install: add ``--with-pager`` and ``--with-pager-opts`` configure options to
1342  define default pager command and its relative command-line options.
1343* Introduce quarantine mechanism to protect module execution against side
1344  effect coming from the current environment definition. Variables whose name
1345  has been put in ``MODULES_RUN_QUARANTINE`` will be emptied or set to the
1346  value hold by ``MODULES_RUNENV_<VAR>`` in the modulecmd.tcl run-time
1347  environment. Quarantine variable original value is then restored within
1348  modulecmd.tcl execution context once it has started.
1349* Install: add ``--with-quarantine-vars`` configure option to define at build
1350  time the ``MODULES_RUN_QUARANTINE`` and ``MODULES_RUNENV_<VAR>`` environment
1351  variables set in initialization scripts.
1352* Add ``MODULES_SILENT_SHELL_DEBUG`` environment variable to disable on sh
1353  shell and derivatives any ``xtrace`` or ``verbose`` debugging property for
1354  the duration of either the module command or the module shell initialization
1355  script. (fix issue#121)
1356* Change error code produced by modulecmd.tcl for the Tcl, Perl, Python, Ruby,
1357  CMake and R scripting languages to return a 'false' boolean value in case of
1358  error rather raising a fatal exception.
1359* Adapt module function definition for Tcl, Perl, Python, Ruby, CMake and R
1360  scripting languages to always return a value, result of the modulecmd.tcl
1361  run. When modulecmd.tcl run does not produce a specific status, a 'true'
1362  boolean value is returned. On CMake, resulting value is returned though a
1363  ``module_result`` global variable.
1364* Spool content sent to the stdout channel with ``puts`` command during a
1365  modulefile interpretation, to effectively transmit this content to stdout
1366  after rendering the environment changes made by this modulefile. (fix
1367  issue#113)
1368* Introduce ``append-path``, ``prepend-path``, ``remove-path`` and
1369  ``is-loaded`` module sub-commands, based on existing modulefile-specific
1370  Tcl commands. (fix issue#116)
1371* Introduce ``is-saved``, ``is-used`` and ``is-avail`` modulefile Tcl commands
1372  and module sub-commands to test availability of collection, modulepath or
1373  modulefile.
1374* Raise error when a call to ``path`` or ``paths`` module sub-commands is
1375  attempted during a modulefile interpretation. Both commands now return text
1376  rather print text on scripting languages. An empty string is returned in
1377  no match case instead of a false boolean value.
1378* Introduce ``module-info loaded`` modulefile command and its module
1379  sub-command counterpart ``info-loaded``. This new command returns name of
1380  the modules currently loaded corresponding to the name passed as argument.
1381  (fix issue#3)
1382* Fix ``is-loaded`` command to correctly handle multiple module names passed
1383  as argument (fix issue#138)
1384* Support no argument on ``is-loaded``, ``is-saved`` and ``is-used`` commands
1385  to return if anything is respectively loaded, saved or used.
1386* Interpret ``module source`` command set in modulefile in ``unload`` mode
1387  when the modulefile itself is interpreted in this mode.
1388* Consider a modulefile passed with name starting by ``./`` or ``../`` a full
1389  path name modulefile, like those starting by ``/``. These kind of names are
1390  converted to absolute path names, for instance to register them in loaded
1391  modulefile list during a ``load`` command.
1392* Correlate modulefile passed as full path name (starting by either ``./``,
1393  ``../`` or ``/``) to already loaded modulefile registered with regular
1394  module name (file name without its modulepath prefix) to prevent for
1395  instance from loading twice same modulefile. Correlate in the same way
1396  regular module name to already loaded full path name modulefile.
1397* Introduce ``MODULES_COLLECTION_PIN_VERSION`` environment variable to record
1398  modulefile version number when saving collections even if version
1399  corresponds to the default one. (fix issue#89)
1400* Fix location of ``etc/rc`` global RC file to ``@prefix@/etc/rc`` instead of
1401  ``$MODULESHOME/etc/rc`` not to depend on ``MODULESHOME`` environment
1402  variable value.
1403* Strengthen argument check for ``append-path``, ``prepend-path`` and
1404  ``remove-path`` modulefile Tcl commands and module sub-commands. Raise error
1405  if argument list is not correct.
1406* Fix support for the ``--delim=C`` argument form on ``append-path``,
1407  ``prepend-path`` and ``remove-path`` commands.
1408* Fix path reference counter handling in case path element is an empty string.
1409  Distinguish an empty path element from a variable set empty to clear it.
1410* Pass multiple path elements separated by delimiter character as one string
1411  on ``append-path``, ``prepend-path`` and ``remove-path`` commands.
1412* Accept multiple path element arguments on ``append-path``, ``prepend-path``
1413  and ``remove-path`` commands.
1414* Introduce the ``--duplicates`` argument option to ``append-path`` and
1415  ``prepend-path`` commands to add a path element already registered in
1416  variable.
1417* Introduce the ``--index`` argument option to ``remove-path`` command to
1418  delete a path entry by passing its position index in variable.
1419* Provide the ability to setup a site-specific configuration sourced at the
1420  start of ``modulecmd.tcl`` main procedure. This configuration is a Tcl
1421  script named ``siteconfig.tcl`` which enables to supersede any Tcl
1422  definition made in ``modulecmd.tcl``. Location of this file is controlled
1423  at configure time with the ``--etcdir`` option.
1424* Add the ability to handle paths containing reference to environment variable
1425  in ``MODULEPATH``. When these kind of paths are used by ``module`` command,
1426  the variable references are converted to their corresponding value or to an
1427  empty string if they are not defined.
1428* Enclose value set to environment variable on Tcl within curly braces rather
1429  double quotes to protect special characters in it from interpretation.
1430* Correctly parse ``.modulespath`` initialization file to handle lines without
1431  any ``#`` character or to handle files with no content to extract.
1432* Re-introduce the ``--enable-versioning`` configure option, which appends
1433  Modules version to installation prefix and deploy a ``versions`` modulepath
1434  shared between all versioning enabled Modules installation. A modulefile
1435  corresponding to Modules version is added to the shared modulepath and
1436  enables to switch from one Modules version to another.
1437* Fix removal of CMake generated temporary script file by stripping newline
1438  character from script file name.
1439* Add ``MODULES_CMD`` environment variable to expose path to the currently
1440  active module command script. This variable is set at initialization time.
1441* Introduce ``modulecmd`` wrapper script, installed in binary directory, which
1442  executes the active module command.
1443* Fix modulefile Tcl interpreter reset when handling list variables. (fix
1444  issue#145)
1445* Introduce 'module-virtual' modulefile Tcl command to associate a virtual
1446  module name to a modulefile. This module can be located with its virtual
1447  name and the associated modulefile is the script interpreted when loading,
1448  unloading, etc.
1449* Resolution of relative paths occurring during a modulefile interpretation to
1450  target a modulefile or a modulepath now takes the directory of the currently
1451  interpreted modulefile as the current working directory to solve the
1452  relative paths.
1453
1454
1455Modules 4.0.0 (2017-10-16)
1456--------------------------
1457
1458Starting with this release, modules-tcl has become Modules. The following
1459changes describe the differences with last modules-tcl release (1.923). To
1460learn about the changes between this release and last Modules 3.2 release,
1461please see the :ref:`MIGRATING` document.
1462
1463* Relax constraint on command-line argument position so options and
1464  switches can be passed either before or after command name.
1465* Report ``unsupported option`` warning rather stop on error when
1466  compatibility-version specific command-line switches are passed (
1467  ``--force``, ``--human``, ``--verbose``, ``--silent``, ``--create``,
1468  ``--icase``, ``--userlvl``).
1469* Keep empty ``module load`` line in shell configuration files after running
1470  the ``initrm`` or ``initclear`` commands.
1471* Always return the value of ``tcl_platform(osVersion)`` for ``uname release``
1472* Optimize code output, for Perl to only return ``1;`` once for a no-operation
1473  situation and for Python to not ``import os`` when there is only an error
1474  to render.
1475* Use value of system command ``uname -n`` for ``uname nodename``.
1476* Add support for CMake *shell*
1477* Ignore ``/`` character used as suffix in modulefile name passed on command
1478  line.
1479* Rename Perl initialization script in ``perl.pm`` and Python in
1480  ``python.py``.
1481* Add support for Ruby *shell* (with contribution from Tammo Tjarks)
1482* Add support for R *shell* (with contribution from Roy Storey)
1483* When a *default* is set for a given module name, target modulefile can
1484  be referred on as *modulename/default* in addition to just *modulename*.
1485* Locate symbolic versions on ``avail`` command even these symbols are set
1486  over a module alias or another symbolic version. In this situation the
1487  symbol spread along the resolution path until reaching a modulefile.
1488* Define a more standard shebang on modulecmd.tcl script.
1489* Determine modulefile corresponding to given module name using the loaded
1490  context only on ``unload`` situation.
1491* Enable to unload *mod/dir/subdir/vers* when unload of *mod* or *mod/dir*
1492  asked. Was previously working only if deep module to unload was also the
1493  default version for these root names.
1494* Make -l/-t switches mutually exclusive. Last switch mentioned on the
1495  command-line is honored.
1496* Output parsable modulepath header when -l/-t switches are enabled.
1497* When searching for a module in a given modulepath directory, if a module
1498  alias or a symbolic version matches searched module but the target of
1499  this alias or symbol is not found in current modulepath directory,
1500  search for this target restarting search from the first modulepath in
1501  list to ensure modulepath priority.
1502* Solve aliases or symbolic versions looking for all modulepaths on ``search``
1503  and ``paths`` commands. Was previously solved if their target was found in
1504  same modulepath directory.
1505* Add support for hidden *dot* modulefiles. A hidden modulefile does not
1506  appear in case of wild search, it is only returned when search is about
1507  its exact name.
1508* No table header print in --long mode on an ``avail`` command if no result
1509  are returned.
1510* Add blank line between displayed list of elements, for instance between
1511  modulepath content on ``avail`` command.
1512* Improve readability of error messages encountered during modulefile
1513  execution by putting Tcl error message first after the ``Module ERROR``
1514  prefix.
1515* Do not exit immediately when an internal error occurs in currently
1516  interpreted modulefile. Consider this interpretation as failed and
1517  continue to proceed the other modulefile arguments.
1518* When multiple modulefiles are passed on ``display``, ``help`` and ``test``
1519  commands only output one separator line between 2 interpreted modulefiles.
1520* Fix environment settings stack handling issue when restoring stack after
1521  a failed attempt to load a modulefile in a modulefile.
1522* Failed attempt to load or unload a modulefile within a modulefile now
1523  leads to this upper modulefile load or unload failure. Previously upper
1524  modulefile were loaded respectively unloaded even if its dependent
1525  sub-modulefile failed to load or unload.
1526* During a ``switch`` command, if the unloading part fails the loading part
1527  will not be tried. Unloading part fails if module to unload does not
1528  exist or its unload interpretation raise error.
1529* Init: use ``module source`` rather shell command ``source`` to load modulerc
1530  system configuration in sh-kind, csh-kind and fish shell init scripts.
1531* Install: transform configuration options to bind to an existing
1532  compatibility Modules version into option (--enable-compat-version) to
1533  build and install this compatibility version along with main version.
1534* Init: adapt initialization scripts to handle both main and compatibility
1535  version. By default a shell script enables main version and if the
1536  environment variable MODULES_USE_COMPAT_VERSION is set to 1, the
1537  compatibility version is enabled instead of main version.
1538* Install: import from compatibility version and install ``add.modules``
1539  and ``mkroot`` utility scripts (scripts developed by R.K. Owen).
1540* Install: update RPM spec file to handle compatibility version as a
1541  ``compat`` sub-package.
1542* Add completion script for Fish shell (contribution from BEFH).
1543* Doc: extend content of diff_v3_v4 to details all noticeable changes
1544  between v3.2 and v4.0.
1545* Doc: introduce MIGRATING guide to learn the major changes when moving
1546  from v3.2 to v4.0.
1547* Fix ``list`` command when full pathname modulefile is loaded (fix bug#132)
1548* Install: handle version number though git tags in scripts, documentation
1549  and RPM spec file.
1550* Doc: migrate documents from POD format to reStructuredText to benefit from
1551  Sphinx documentation framework and Read The Docs publishing capabilities.
1552
1553Above changes describe the differences with modules-tcl release 1.923. To
1554learn about the changes between Modules 4.0 and last Modules 3.2 release,
1555please see the :ref:`MIGRATING` document.
1556
1557
1558modules-tcl-1.923 (2017-07-20)
1559------------------------------
1560
1561* Fix ``aliases`` command when a global or user RC file is set.
1562* Find and solve global or user RC aliases and symbolic versions on
1563  ``search``, ``whatis`` and ``paths`` commands.
1564* Do not look at currently loaded modules to resolve the target of a module
1565  alias.
1566* Rework default and latest versions search on ``avail`` command. Correct
1567  display when at a given level a sub-directory element is last element in
1568  directory among modulefiles. Previously sub-directory was printed but
1569  last file among modulefiles was also printed (2 latest versions at the
1570  same level). A directory tagged "default" does not appear anymore in
1571  default listing result as its content (the default version found in that
1572  directory) will be displayed.
1573* When an alias is set and overrides name of an existing directory, take
1574  this alias into account for default and latest choice and ignore
1575  directory content.
1576* Bad default set will lead to no result displayed for the corresponding
1577  module in case of default ``avail`` display.
1578* Correct inclusion of aliases in output result when these aliases are not
1579  part of the exact same module path than module path of the search.
1580* Rewrite existing shell initialization file with initadd, initprepend,
1581  initswitch, initrm and initclear commands rather than writing a new
1582  file then copying this new file to replace the existing initialization
1583  file. In addition only re-writes shell initialization file if its content
1584  need to be altered.
1585* Raise an error on initadd, initprepend, initswitch, initrm and initclear
1586  commands when no ``module load`` line are found in shell initialization
1587  file.
1588* Normalize error messages for the various collection-related commands
1589  when collection cannot be accessed.
1590* Cleanup existing reference counters of a path list variable when this
1591  variable is altered by a ``setenv`` or an ``unsetenv`` command.
1592* Init: do not pollute tab-completion with moduleraw command. (Bert Wesarg)
1593* Make use of the same Tcl interp for each modulefile interpretation and
1594  use another one for each modulerc (but the same for each modulerc). By
1595  doing so we proceed like on C-version where same interpreter is used
1596  across modulefile or modulerc interpretation. Huge performance
1597  improvement is achieved with this change on commands making intensive
1598  use of interp like ``avail``. Interpreter state is reset from one
1599  interpretation to another: the initial variable and procedure state is
1600  restored before each new interpretation to avoid spread of definitions
1601  from one interpretation to another. Also in case of nested interpretation
1602  each interpretation level has its own interpreter so a module loaded by
1603  another does not influence the interpretation of the module loading it.
1604* Improve performance of aliases and symbolic versions resolution by
1605  computing these resolution at definition time. As a consequence
1606  resolution loop are not registered anymore and produce an error message
1607  when spotted not at display time.
1608* Reduce number of ``access`` system call by trying access to modulefile
1609  when reading the content of a modulefile directory rather testing access
1610  before trying it.
1611* No error raise on empty argument list for load. To cope with initadd
1612  behavior that requires at least an empty ``module load`` line in startup
1613  files. (fix SF bug#88)
1614* Fix initadd to handle load line without trailing space. Was previously
1615  expecting load directive to be written "module load "  to get a match.
1616  With fix, ``module load`` line will also be matched.
1617* Like C-version catch raised error when break or continue are called from
1618  outside of a loop to handle them as when they are called from modulefile
1619  main body. (fix SF bug#87)
1620* Return error on ``module use`` command when an empty path string is
1621  provided rather ignoring it.
1622* Workaround ``min`` and ``max`` functions and ``lreverse`` procedure for
1623  correct operations under Tcl version 8.4.
1624* Install: add --with-tclsh configure option to give the ability to choose
1625  the Tcl interpreter shell to setup in initialization scripts.
1626* Handle error raised from the ModulesDisplay, ModulesHelp and ModulesTest
1627  procedures in the same way than for the evaluation of the modulefile
1628  content. An error occurring during the evaluation of the modulefile
1629  content will lead to no evaluation of the ``display``, ``help`` and
1630  ``test`` command specific functions.
1631* Remove ``debug`` module command
1632* Doc: describe ``path``, ``paths`` and ``autoinit`` module command.
1633* Correct use of xrdb tool when not installed in default path.
1634* Fix ``init*`` module commands to behave more like C-version and document
1635  remaining differences in diff_with_c-version.
1636* Init: make ``sh`` init script closer to POSIX specification to support sh
1637  flavors different than Bash or Zsh like Dash.
1638* Fix column-mode display for very short width terminal.
1639* Install: introduce an ``install`` non-regression testsuite which is
1640  triggered by the ``make testinstall`` command and checks modules-tcl
1641  installation is operational.
1642* Init: fix modulerc load test on ``fish`` init script.
1643* Init: fix interactive shell test on ``sh`` init script.
1644* Install: add --enable-example-modulefiles configure option that install
1645  by default some modulefiles provided as example in the system modulefiles
1646  directory.
1647* Install: when uninstalling, do not remove modulefiles directory if it is
1648  not empty.
1649* Add completion script for Zsh shell.
1650* Add ``module test`` command to trigger when called execution of a
1651  ModulesTest procedure in target modulefile following same kind of
1652  mechanism than ``module help``.
1653
1654
1655modules-tcl-1.832 (2017-04-29)
1656------------------------------
1657
1658* Fix ``getenv`` sub-command to correctly return environment variable value.
1659* Clarify in man-pages display of module alias and symbolic version-name on
1660  ``avail`` command and management of file access issue when locating
1661  modulefiles.
1662* Distinguish access issue (permission denied) from find issue (cannot
1663  locate) when trying to access directly a directory or a modulefile as
1664  done on ``load``, ``display`` or ``whatis`` commands. In addition on this
1665  kind of access, not readable .modulerc files are ignored rather producing a
1666  missing magic cookie error.
1667* When mode is set to unload, ``module load`` commands in modulefile are
1668  interpreted as ``module unload`` commands. To guaranty correct behavior
1669  regarding requirements, the module list passed to the load command is
1670  reversed to unload the modulefiles in the reverse order than they have
1671  been loaded.
1672* Correct ``display`` command to only report module commands set in
1673  modulefile and not those set in the various .modulerc on the path toward
1674  this modulefile.
1675* Fix bash and tcsh completion scripts to eliminate symbolic version names
1676  from ``avail`` command result.
1677* Improve ``avail`` command when a symbolic version-name is passed as
1678  argument to return the modulefile target of this symbolic version-name.
1679* When looking for an implicit default in a directory, now a module alias is
1680  taken into account so it can be returned as the last element in it
1681  (highest numerically sorted version).
1682* Fix ``list`` command to correctly display the ``default`` tag along loaded
1683  modules when set via a .version file.
1684* Fix long output of ``list`` command to display the symbolic version-names
1685  associated to each loaded module if any.
1686* Improve ``avail`` command to return alias module when an alias name is
1687  passed as argument.
1688* On a ``--default`` listing, a modulefile does not appear anymore if a
1689  directory is set default at the same level. On a ``--latest`` listing, a
1690  directory does not appear anymore if set default but not the latest.
1691* Read modulerc and validate its header in a single open/read/close sequence
1692  instead of two in order to reduce to number of IO operations during an
1693  ``avail`` command.
1694* Drastically reduce grid size computation time which removes overhead when
1695  displaying module avail results in column-mode.
1696* Translate module name to currently interpreted module name when name
1697  correspond to the last part this interpreted module only in case of
1698  symbolic version-name or alias resolution.
1699* Avoid resetting regular path (/usr/bin) or manpath (/usr/share/man) when
1700  switching from Tcl to C version in switchml utility.
1701* Raise error on x-resource if DISPLAY environment variable is not set.
1702* Fix lisp init script which was broken for environment change actions.
1703
1704
1705modules-tcl-1.775 (2017-03-07)
1706------------------------------
1707
1708* Improve README with examples, requirements, links, etc. Also update
1709  INSTALL documentation with details on the new configure/make/make install
1710  process.
1711* Add display of a release date next to the version number when calling for
1712  ``--help`` or ``--version``.
1713* Update diff_with_c-version document to describe the features of the
1714  Tcl-version that are not supported on the C-version. Also state that the
1715  diff takes C version 3.2.10 against Tcl version 1.729 as a basis.
1716* Introduce ``switchml`` tool, a shell function (or alias for csh or tcsh
1717  shells) that swap currently enabled Modules version (C or Tcl) by the
1718  other version (C or Tcl). Configure option ``--with-cver-initdir`` must be
1719  defined to enable ``switchml`` in initialization script.
1720* Define a PATH and MANPATH in shell initialization scripts that point to
1721  the defined modules-tcl installation directories.
1722* Give ability to generate distribution tarball from the git repository with
1723  Makefile ``dist`` target.
1724* Introduce an installation process for this software following the
1725  configure/make/make install fashion. Configure step enables to choose
1726  installation paths and init scripts features to activate. Make step mainly
1727  translates init scripts with the configuration set. Make install creates
1728  target directories and copy files into them.
1729* Fix MODULESHOME setup in autoinit command to define it as an absolute path
1730  and set it to the upper directory when modulecmd.tcl is located in a ``bin``
1731  or a ``libexec`` directory.
1732* Correct alias and version resolution on avail command which was erroneous
1733  in case of a modulefile holding symbols (like ``default``) and targeted by
1734  aliases. Avail output was showing the aliases holding the symbols instead
1735  of the modulefile.
1736
1737
1738modules-tcl-1.729 (2017-02-01)
1739------------------------------
1740
1741* Add documentation in module(1) man page on the modulefile collection
1742  concept and the relative ``save``, ``restore``, ``saverm``, ``saveshow``
1743  and ``savelist`` commands.
1744* Add document to list the differences of the functionalities that can be
1745  found on the C-version of the Modules package compared to the
1746  Tcl-version.
1747* Improve modulecmd.tcl shebang to only search ``tclsh`` once if found in
1748  PATH.
1749* Add ``module-info mode`` check against ``remove`` and ``switch`` values.
1750* Introduce ``module-info command`` Modules-specific Tcl command to
1751  distinguish complex ``load`` or ``unload`` commands that cannot be
1752  determined with ``module-info mode`` alone. For instance a modulefile can
1753  now be aware that a ``switch``, a ``restore`` or a ``purge`` command is
1754  currently being run.
1755* Enable usage of ``module-info`` Modules-specific Tcl command from a
1756  modulerc file.
1757* Fix ``module-info specified`` Modules-specific Tcl command.
1758* No exit raise on modulefile or modulerc error during ``avail``, ``aliases``,
1759  ``whatis`` and ``search`` commands to avoid harming results from these
1760  global commands if error exists in a few modulefiles.
1761* Exit with error code when a critical error is encountered when
1762  interpreting a modulefile or a modulerc.
1763* Inhibit non-critical error report raised from modulefiles during ``avail``,
1764  ``aliases``, ``whatis`` and ``search`` commands to avoid error flood when
1765  parsing all modulefiles or modulercs.
1766* Handle multiple lines of ``module-whatis`` Modules-specific Tcl commands
1767  defined for the same modulefile.
1768* Handle multiple arguments passed to the ``module-whatis`` Modules-specific
1769  Tcl commands. They are joined to get a single line of text.
1770* Return error on ``whatis`` command if searched modulefile is not found.
1771
1772
1773modules-tcl-1.704 (2017-01-20)
1774------------------------------
1775
1776* Set path variable counter to 1 for paths without a known reference count
1777  (was previously set to 999999999).
1778* Introduce ``envml`` utility which acts as an application launcher where
1779  module commands are instantiated to setup environment before launching
1780  the given application.
1781* Always register paths provided to be part of MODULEPATH environment
1782  variable as absolute paths to get independent from the current working
1783  directory.
1784* Inhibit next modulefiles interpretation with ``exit`` Modules-specific Tcl
1785  command only if current mode is ``load``.
1786* Add argument to ``module-info shell`` and ``module-info shelltype`` to test
1787  current shell or shelltype value.
1788* Fix use of ``default`` version-name to not consider it as a module symbol
1789  if a modulefile is named ``default``.
1790* Fix path variable counters when ``:`` character is used in elements of a
1791  path-like variable.
1792* Update module(1) and modulefile(4) man pages to clear content specific to
1793  the C version of Modules and add content specific to or adapt content that
1794  behave differently on this Tcl version.
1795* Fix TCLSH variable issue in Python init script.
1796
1797
1798modules-tcl-1.677 (2017-01-04)
1799------------------------------
1800
1801* Make ``switch`` command handle a single argument. The modulefile to switch
1802  to is the one passed on the command-line and the modulefile to unload is
1803  assumed to be the currently loaded module with the same root name as
1804  this modulefile specified on the command-line.
1805* Make ``switch`` command idempotent by always ending up with ``old`` unloaded
1806  and ``new`` loaded, whatever the starting situation is.
1807* Fix ``exit`` Modules-specific Tcl command.
1808* Add ``refresh`` command as alias on ``reload`` command.
1809* Add dummy ``module-log``, ``module-trace``, ``module-user`` and
1810  ``module-verbosity`` Modules-specific Tcl commands to enable support for
1811  modulefiles using them.
1812* Fix ``system`` Modules-specific Tcl command  to behave like described on
1813  the man page.
1814* Fix ``module list`` when module loaded with full path
1815* Disable ``g_force`` property by default to avoid loading a modulefile
1816  already loaded. It also avoids path element reference counting to get
1817  increased when the same module is asked twice for load.
1818* Clarify module-info ``mode`` option and set ``help`` mode on ``module help``
1819  command.
1820* Clarify module-info ``flags`` and ``user`` options.
1821* Handle empty or separator path on ``add-path`` ad ``unload-path`` commands.
1822* Delete environment variable targeted by an ``unsetenv`` command on
1823  ``unload`` mode if no value has been provided along. On display mode, print
1824  environment variable value if any has been passed to ``unsetenv`` command.
1825* When setting Tcl variable, enclose value within double quotes.
1826* Fix perl quoting style for variable set, escape single quotes rather
1827  double quotes.
1828* Call ``unuse`` command instead of ``use`` command on a ``module unload``.
1829* Fix ``continue`` Modules-specific Tcl command.
1830* Add ``chdir`` Modules-specific Tcl command.
1831* Fix ``break`` Modules-specific Tcl command.
1832
1833
1834modules-tcl-1.655 (2016-11-23)
1835------------------------------
1836
1837* No display of modulepath header if no module found in it.
1838* Remove call to ``module aliases`` on ``module avail`` command, as aliases
1839  are now directly included in the ``avail`` results.
1840* Include module aliases in the displayed result of an ``avail`` command.
1841  Also display aliases defined in a global or user modulerc file.
1842* Exit with error code if error occurred on display or help commands.
1843* Fix module-info symbols resolution.
1844* Better handling of .modulerc and .version files when searching for a
1845  modulefile.
1846* Fix module-info version resolution.
1847* Fix module-info alias resolution.
1848* Register alias and version by the short module name and improve their
1849  resolution to avoid loop.
1850* Source $MODULERCFILE/modulerc when $MODULERCFILE is dir.
1851* Make it so you can do ``module avail un``, wildcard ``*`` character
1852  implied.
1853
1854
1855modules-tcl-1.632 (2016-09-06)
1856------------------------------
1857
1858* Raise error if command does not receive the excepted number of arguments.
1859* Improve column-mode display to get a denser output on ``avail`` command.
1860* Standardize the output of Warning, Error, InternalBug and ErrorAndExit
1861  messages.
1862* Add short option -d for --delim on prepend-path.
1863* Introduce collection target concept to distinguish between machines,
1864  environments or domains that are incompatible with each other.
1865* Introduce ``saveshow`` command, to display content of saved collections.
1866* Improve ``save`` and ``restore`` commands to handle collection specified as
1867  absolute or relative file path.
1868* Introduce ``saverm`` command, to delete saved collections.
1869* Enable to ``restore`` collection with multiple modulefiles specified on the
1870  same line.
1871* Fix ``restore`` command when there is no module to load in collection.
1872* Fix ``restore`` command when collection fully rewind module paths.
1873* Fix ``restore`` command to preserve module path order set in collection.
1874* Raise error if try to save an empty environment in a collection.
1875
1876
1877modules-tcl-1.602 (2016-08-13)
1878------------------------------
1879
1880* Add support for Fish shell.
1881* Import recent tests added to C-version on 10-use and 50-cmds testsuites.
1882* Add short option -d for --delim on append-path and remove-path.
1883* Fix load and implement unload x-resource.
1884* Fix Python code that was broken or not Python3-compliant. Fixed code is
1885  used to define the module command, to render error and to process
1886  x-resource.
1887* Always dictionary-sort (also called numerical-sort) list of modulefiles
1888  or list of collections.
1889* Fix bash completion script to be compliant with bash posix mode.
1890
1891
1892modules-tcl-1.578 (2014-12-24)
1893------------------------------
1894
1895* First release to be described in this NEWS file but it does not mean this
1896  is the first version of modules-tcl as this Modules flavor is born in
1897  2002.
1898* At this stage, modules-tcl handles a majority of the module commands and
1899  modulefile Tcl commands available on C version.
1900