2023-05-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst, NEWS.rst, contrib/rpm/environment-modules.spec.in,
  doc/source/conf.py, testsuite/modules.51-scan/020-avail_output-variant.exp,
  version.inc.in: Release of version 5.3.0

  * MIGRATING.rst: doc: desc +/- value prefix for opts/configs in MIGRATING

  * NEWS.rst, tcl/subcmd.tcl.in, testsuite/modulefiles.3/bar/2.0,
  testsuite/modules.50-cmds/460-sticky.exp,
  testsuite/modules.50-cmds/461-super-sticky.exp: No sticky mod unload if
  switched-on mod does not exist  Fix switch sub-command not to unload sticky
  or super-sticky module when switched-on module does not exist.  Fixes #492

2023-05-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * configure: install: fix SC20{04,28,86} warnings in configure

  * doc/source/module.rst: doc: desc +/- value prefix for opts/configs in man

2023-05-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/changes.rst: doc: desc +/- value prefix for
  opts/configs in NEWS/CHANGES

2023-05-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/360-avail_output.exp,
  testsuite/modules.70-maint/361-list_output.exp: ts: test -o/--output value
  append/subtract in 70/36{0,1}

2023-05-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/init.tcl.in, tcl/main.tcl.in: Allow append/subtract value with
  --output option  Allow to append or subtract value on avail_*output and
  list_*output configuration options through --output command line switch. If
  value associated to --output/-o switch starts with '+' or '-', this new
  value is respectively appended or subtracted from existing configuration
  value.

  * tcl/main.tcl.in: Fix duplicate space character in option parsing code

2023-05-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/220-config.exp: ts: test append/subtract config
  option value in 70/220

  * tcl/main.tcl.in, testsuite/modules.70-maint/220-config.exp: Allow to pass
  value starting with '-' on config subcmd  Allow to pass configuration option
  value starting with minus sign (-) on config sub-command. Was previously
  mistaken with command-line switches. This change allows to subtract a value
  to a configuration option already set.

  * tcl/subcmd.tcl.in: Config option value append or subtract for list option
  Allow to update colon-separated list configuration option with config
  sub-command. If new value starts with '+' or '-', this new value is
  respectively appended or subtracted from existing configuration value.

  * doc/source/design/add-new-config-option.rst, tcl/init.tcl.in,
  tcl/main.tcl.in, tcl/subcmd.tcl.in, testsuite/example/siteconfig.tcl-1: Add
  value kind attribute in config option definition array  Update configuration
  option definition array (g_config_defs) to add value kind attribute as 4th
  entry in definition list. This attribute has following possible values: 'i'
  for integer, 's' for string, 'b' for boolean, 'l' for colon-separated list,
  'o' for other.

2023-05-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/report.tcl.in: Mention 'variant' as --output example value in usage
  msg

  * doc/source/changes.rst: doc: desc. avail/paths/whatis/list search query
  changes

  * .aspell.en.pws, MIGRATING.rst, NEWS.rst: doc: desc. variantifspec in
  NEWS/MIGRATING

2023-05-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.70-maint/370-variant.exp: ts: adapt and add variantifspec
  tests in 70/370

  * testsuite/modules.70-maint/220-config.exp,
  testsuite/modules.70-maint/360-avail_output.exp: ts: adapt tests for
  variantifspec val in avail_*output cfgs in 70/{220,360}

  * INSTALL.rst, configure, doc/source/changes.rst, doc/source/module.rst:
  install/doc: desc. variantifspec addition to avail_{,terse_}output
  variantifspec new value is also added to the default list of value for these
  configuration options.

  * doc/source/design/output-configuration.rst,
  doc/source/design/variants.rst: doc: desc. variantifspec report on avail in
  design notes

  * .aspell.en.pws, tcl/init.tcl.in, tcl/report.tcl.in: Add variantifspec
  value to avail_{,terse_}output config  Report defined variants on avail
  regular or terse output if some variant is specified in search query.

2023-05-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.20-locate/070-homerc.exp: ts: add
  ignore_user_rc/--ignore-user-rc tests in 20/070

  * doc/source/module.rst: doc: desc ignore_user_rc/--ignore-user-rc in man

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.70-maint/220-config.exp: ts: test ignore_user_rc config
  option

  * INSTALL.rst, NEWS.rst: doc: desc ignore_user_rc/--ignore-user-rc in
  NEWS/INSTALL

  * doc/source/changes.rst: doc: desc --ignore-user-rc/ignore_user_rc in
  changes

  * init/Makefile, init/fish_completion, init/zsh-functions/_module.in: init:
  add ignore_user_rc/--ignore-user-rc to comp script

  * tcl/modfind.tcl.in: Ignore user rc when ignore_user_rc enabled  Do not
  evaluate user-specific module rc file when ignore_user_rc configuration is
  enabled.  Fixes #479

  * tcl/init.tcl.in, tcl/main.tcl.in, tcl/report.tcl.in: Add ignore_user_rc
  configuration option  Add ignore_user_rc configuration option that controls
  whether or not the $HOME/.modulerc file should be ignored. Disabled by
  default. When configuration is modified it sets the MODULES_IGNORE_USER_RC
  environment variable.  --ignore-user-rc command line switch can be used to
  enable ignore_user_rc for current execution.

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst,
  tcl/mfinterp.tcl.in, testsuite/modulefiles.3/refresh/1.0,
  testsuite/modulefiles.3/refresh/2.0,
  testsuite/modules.50-cmds/078-refresh.exp,
  testsuite/modules.50-cmds/083-info-mode.exp,
  testsuite/modules.50-cmds/084-info-mode-exp.exp,
  testsuite/modules.50-cmds/085-info-flags.exp,
  testsuite/modules.50-cmds/310-puts.exp,
  testsuite/modules.50-cmds/311-puts-prestdout.exp,
  testsuite/modules.70-maint/230-verbosity.exp: Refresh modules that put
  content to stdout/prestdout  Mark modulefile qualified for refresh
  evaluation when puts command is used to send content to stdout or prestdout
  channels.  Such loaded modules where wrongly skipped during refresh unless
  if they declared another volatile environment change.  Choice is made to
  also refresh modules that put content to stdout/prestdout to keep the
  behavior of Modules 3.2  Fixes #488

2023-05-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/module.rst: doc: desc. extra specifier in man

2023-05-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst: doc: desc. extra specifier work in MIGRATING

  * NEWS.rst: doc: desc. extra specifier work in NEWS

2023-04-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.4/extra/1.0,
  .../modules.51-scan/042-extra_spec-conflict.exp,
  .../modules.51-scan/043-extra_spec-require.exp: ts: add module switch extra
  spec tests in 51/04{2,3}

  * testsuite/modulefiles.4/extra/1.0,
  testsuite/modules.51-scan/042-extra_spec-conflict.exp: ts: add conflict
  extra spec tests in 51/042

  * testsuite/modulefiles.4/extra/1.0,
  testsuite/modules.51-scan/042-extra_spec-conflict.exp: ts: add module unload
  extra spec tests in 51/042

2023-04-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.4/extra/1.0,
  testsuite/modules.51-scan/043-extra_spec-require.exp: ts: add module
  load-any extra spec tests in 51/043

  * testsuite/modulefiles.4/extra/1.0,
  testsuite/modules.51-scan/043-extra_spec-require.exp: ts: add module
  try-load extra spec tests in 51/043

  * testsuite/modulefiles.4/extra/1.0,
  .../modules.51-scan/043-extra_spec-require.exp: ts: add module erroneous
  extra spec tests in 51/043

  * testsuite/modulefiles.4/extra/1.0,
  .../modules.51-scan/043-extra_spec-require.exp: ts: add module load extra
  spec tests in 51/043

  * testsuite/modulefiles.4/extra/1.0,
  testsuite/modules.51-scan/043-extra_spec-require.exp: ts: add always-load
  extra spec tests in 51/043

2023-04-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, doc/source/design/extra-match-search.rst: doc: desc. mod
  spec filtering in EMS spec

2023-04-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.4/extra/1.0,
  testsuite/modules.51-scan/043-extra_spec-require.exp: ts: add
  prereq-all/depends-on extra spec tests in 51/043

2023-04-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.4/.modulerc,
  testsuite/modulefiles.4/extra/.modulerc, testsuite/modulefiles.4/extra/1.0,
  testsuite/modulefiles.4/xtbar/1.0, testsuite/modulefiles.4/xtbar/2.0,
  testsuite/modulefiles.4/xtfoo/1.0,
  .../modules.51-scan/043-extra_spec-require.exp: ts: add prereq/prereq-any
  extra specifier tests in 51/043

2023-04-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modscan.tcl, tcl/modspec.tcl: Parse mod spec in extra specifier value
  with getavails on  For some extra specifier, a module specification is
  expected as value. For them parse this module specification with resolution
  of all matching available modules.  During extra match search process, test
  match of specification against all matching available modules recorded when
  parsing spec.  modEq procedures have been updated to fetch available module
  names recorded in module version spec structure as alternative names for
  spec when ismodlo argument is set to 5.  modVariantCmp procedure has been
  updated to let a missing variant definition of mod be considered as a match.
  As compared pattern and mod are switched on extra specifier context (pattern
  is definition found in modulefile and mod is also a pattern used for extra
  specifier definition on command line).  Note that this methodology is not
  yet perfect as aliases, symbolic versions and modules that do not exist are
  not part of the list of available modules returned.

2023-04-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, tcl/coll.tcl.in, tcl/main.tcl.in, tcl/mfinterp.tcl.in,
  tcl/modeval.tcl, tcl/modfind.tcl.in, tcl/modscan.tcl, tcl/modspec.tcl,
  tcl/subcmd.tcl.in, testsuite/example/siteconfig.tcl-1: Record avail mods
  matching mod spec when parsing it  Update module specification parsing
  mechanism to add a getavails argument. It indicates that available modules
  matching spec should be searched in enabled modulepaths to record them in
  module version specification structure.  When searching for available
  matching modules, disable extra match search to avoid an infinite resolution
  loop.

2023-04-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modspec.tcl: Parse extra specifier prior variant  Give more priority
  to extra specifier (name:value) than variant specification (name=value) as
  extra specifier accepting a module specification as value may contain a
  variant specification. For instance: "prereq:mod@1.0 foo=value".

  * tcl/modspec.tcl: Skip arg split when parsing modspec if extra spec
  detected  Update module specification parsing to skip argument split when an
  extra specifier is detected. Value for extra specifier may be a module
  specification, thus argument split on version specifier or variant shortcut
  should be skipped to keep extra specifier value as one string.

2023-04-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.51-scan/030-scan_eval-avail.exp,
  testsuite/modules.51-scan/031-scan_eval-whatis.exp,
  testsuite/modules.51-scan/032-scan_eval-paths.exp: ts: adapt existing tests
  to extra specifier changes

  * tcl/envmngt.tcl.in, tcl/mfinterp.tcl.in, tcl/modfind.tcl.in,
  tcl/modspec.tcl, tcl/report.tcl.in, tcl/util.tcl: Refer to string index with
  M+N notation  As M+N notation is now a valid syntax to refer to a string
  index (starting Tcl 8.5), change code to use this syntax rather using expr
  to compute an index value.

2023-04-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/mfinterp.tcl.in, tcl/modscan.tcl, tcl/modspec.tcl: Record conflict
  during scan eval  conflict command is an extra specifier. incompat is an
  alias of it.

  * tcl/modscan.tcl, tcl/modspec.tcl: Record module switch during scan eval
  switch sub-command name is an extra specifier. Switched-on module
  specification also matches switch-on and require extra specifier aliases.
  With two-arg form module switch, switched-off module specification also
  matches switch-off and incompat extra specifier aliases.

2023-04-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modscan.tcl, tcl/modspec.tcl: Record module unload during scan eval
  unload sub-command name is an extra specifier. incompat is an alias of it.

  * tcl/mfinterp.tcl.in, tcl/modscan.tcl, tcl/modspec.tcl: Record module
  load/load-any/try-load during scan eval  load, try-load and load-any
  sub-command names are an extra specifier. require is an alias of them.

2023-04-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/mfinterp.tcl.in, tcl/modscan.tcl, tcl/modspec.tcl: Record always-load
  definitions during scan eval  require is an alias of always-load extra
  specifier.

  * tcl/mfinterp.tcl.in, tcl/modscan.tcl, tcl/modspec.tcl: Record
  prereq-all/depends-on definitions during scan eval  require, prereq-all and
  depends-on are aliases of prereq-all and depends-on extra specifiers.

2023-03-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modscan.tcl: Match module designation for some extra specifiers
  Update extra specifier query test for those whose value is a module
  specification. Currently prereq, require and prereq-any extra specifiers
  accept a module specification as value.  This module specification is
  matched against the specification passe to the corresponding modulefile Tcl
  command. Match is done with modEq procedure.  LIMITATION: not all module
  specification currently works as modEq is made to compare a module
  specification against a qualified module name and version. Using module
  generic name or advanced version specifiers on extra specifier value will
  not currently work.

2023-03-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/mfinterp.tcl.in, tcl/modscan.tcl, tcl/modspec.tcl: Record
  prereq/prereq-any definitions during scan eval  require and prereq-any are
  aliases of prereq and prereq-any extra specifiers.

2023-03-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.51-scan/040-extra_spec.exp: ts: test extra spec on
  non-search cmds in 51/040

  * tcl/coll.tcl.in, tcl/main.tcl.in, tcl/mfinterp.tcl.in, tcl/modeval.tcl,
  tcl/modfind.tcl.in, tcl/modspec.tcl, tcl/subcmd.tcl.in,
  testsuite/example/siteconfig.tcl-1: Raise error when extra spec on
  non-search cmds  Extra specification in module search query is only allowed
  on search sub-commands (avail, paths, whatis). An error is raised when
  parsing a module specification if it contains an extra specification on a
  non-search context.  xtspec argument is added to parseModuleSpecification
  procedure to know if extra specification is allowed or not.

2023-03-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, doc/source/design/extra-match-search.rst: doc: desc. extra
  specifier in EMS design

2023-03-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modspec.tcl, testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.51-scan/040-extra_spec.exp,
  testsuite/modules.51-scan/041-extra_spec-env.exp: Raise error when unknown
  extra specifier used

  * testsuite/modulefiles.4/extra/1.0,
  .../modules.51-scan/042-extra_spec-conflict.exp: ts: add family extra
  specifier tests in 51/042

  * tcl/mfinterp.tcl.in, tcl/modscan.tcl: Record family definitions during
  scan eval

2023-03-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.4/extra/1.0,
  testsuite/modules.51-scan/041-extra_spec-env.exp: ts: add setenv duplicate
  definition test in 51/041

  * tcl/modscan.tcl: Rework extra specifier filtering  Update extra match
  search process to filter results with extra specifiers only one after all
  modulefile scan evaluations.  As g_scanModuleElt global structure
  consolidates all modules matching a given extra specifier criteria (element
  > name = list of matching modules), with one test per extra specifier
  criteria result can be obtain. Instead of testing each module against the
  criteria independently.  doesModExtraMatch procedure is removed and replaced
  by getModMatchingExtraSpec to achieve this single global criteria match
  test.

  * tcl/util.tcl: Add getIntersectBetweenList helper procedure  Compute
  intersection of multiple lists with getIntersectBetweenList procedure.

2023-03-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.51-scan/040-extra_spec.exp: ts: test unknown extra
  specifier and special char in 50/040

  * testsuite/modulefiles.4/extra/1.0,
  testsuite/modules.51-scan/041-extra_spec-env.exp: ts: add extra specifier
  tests with source-sh in 51/041

  * testsuite/modulefiles.4/extra/1.0,
  testsuite/modules.51-scan/041-extra_spec-env.exp: ts: add erroneous env
  extra specifier tests in 51/041

  * testsuite/modulefiles.4/extra/1.0,
  testsuite/modules.51-scan/041-extra_spec-env.exp: ts: add other env extra
  specifier tests in 51/041

  * tcl/mfinterp.tcl.in, tcl/modscan.tcl: Record chdir definitions during scan
  eval

  * tcl/mfinterp.tcl.in, tcl/modscan.tcl: Record unset-function definitions
  during scan eval

  * tcl/mfinterp.tcl.in, tcl/modscan.tcl: Record set-function definitions
  during scan eval

2023-03-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/mfinterp.tcl.in, tcl/modscan.tcl: Record unset-alias definitions
  during scan eval

  * tcl/mfinterp.tcl.in, tcl/modscan.tcl: Record set-alias definitions during
  scan eval

  * tcl/mfinterp.tcl.in, tcl/modscan.tcl: Record uncomplete definitions during
  scan eval

  * tcl/mfinterp.tcl.in, tcl/modscan.tcl: Record complete definitions during
  scan eval

2023-03-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.4/extra/1.0, testsuite/modulefiles.4/extra/2.0,
  testsuite/modules.51-scan/041-extra_spec-env.exp: ts: add envvar extra
  specifier tests in 51/041

  * testsuite/modulefiles.4/extra/1.0, testsuite/modulefiles.4/extra/2.0,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.51-scan/040-extra_spec.exp: ts: initial tests for extra
  specifiers in 51/040

  * tcl/mfinterp.tcl.in, tcl/modscan.tcl: Record unsetenv definitions during
  scan eval

  * tcl/mfinterp.tcl.in, tcl/modscan.tcl: Record pushenv definitions during
  scan eval

2023-03-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/mfinterp.tcl.in, tcl/modscan.tcl: Record *-path definitions during
  scan eval

2023-03-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/mfinterp.tcl.in, tcl/modscan.tcl: Record setenv definition during scan
  eval

  * tcl/modscan.tcl: Record variant name in scanned mod element  When
  evaluating a variant command in scan mode, record that this module defines a
  variant with its name. This information is saved in g_scanModuleElt global
  structure (Tcl dict).  This structure is then used to test if extra
  specifiers of search query match definition of available modules.  Fixes
  #408

  * tcl/modscan.tcl: Filter avail module based on extra specifier  Update
  extra match search process to allow specification of extra specifiers in
  addition to module name, version and variants. Filter results through extra
  match search to only return modules matching extra specifiers (where
  specified element and name is defined by module).

  * tcl/modscan.tcl: EMS required if mod spec contains extra specifier  During
  avail, paths or whatis sub-commands

  * tcl/modspec.tcl: Parse extra specifiers in module specification  When
  parsing module specification, take into account extra specifiers (elt:name)
  and record them in g_moduleVersSpec structure. Add getExtraListFromVersSpec
  utility procedure to get the extra specifiers of the specification.

2023-04-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst, doc/source/_static/terminal_output.css, doc/source/conf.py:
  doc: desc. Querying available module variants in MIGRATING

2023-04-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .github/workflows/windows_tests.yaml: gh: install new tcl-devel package on
  MSYS2

2023-03-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/extra-match-search.rst, tcl/modfind.tcl.in,
  testsuite/modulefiles.4/scan/.modulerc, testsuite/modulefiles.4/scan/1.0,
  testsuite/modules.51-scan/030-scan_eval-avail.exp: Fix EMS filter against
  alias overriding dir  Directory information override alias in result
  structure if extra match search is required.

2023-03-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modscan.tcl, testsuite/modules.51-scan/030-scan_eval-avail.exp: Fix
  EMS filter against not matching dot hidden symbol

2023-03-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, doc/source/design/extra-match-search.rst: doc: desc extra
  match search query grammar in design

2023-02-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/module.rst: doc: desc extra match search process in
  man

  * doc/source/module.rst: doc: use pattern terminology on whatis/paths desc.

  * NEWS.rst: doc: desc. search variant name/value highlight in NEWS

2023-02-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/extra-match-search.rst,
  doc/source/design/source-shell-script-in-modulefile.rst,
  tcl/mfinterp.tcl.in: Interpret source-sh cmd on scan mode as on load mode

  * doc/source/design/extra-match-search.rst: doc: update extra match search
  spec for error entries

2023-02-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.4/scan/1.0, testsuite/modulefiles.4/scan/2.0,
  testsuite/modules.51-scan/030-scan_eval-avail.exp,
  testsuite/modules.51-scan/031-scan_eval-whatis.exp,
  testsuite/modules.51-scan/032-scan_eval-paths.exp: ts: access issue and EMS
  on avail/whatis/paths

  * testsuite/modulefiles.4/scan/1.0, testsuite/modulefiles.4/scan/2.0,
  testsuite/modules.51-scan/030-scan_eval-avail.exp,
  testsuite/modules.51-scan/031-scan_eval-whatis.exp,
  testsuite/modules.51-scan/032-scan_eval-paths.exp: ts: special chars and EMS
  on avail/whatis/paths

  * testsuite/modulefiles.4/scan/1.0, testsuite/modulefiles.4/scan/2.0,
  testsuite/modules.51-scan/030-scan_eval-avail.exp: ts: add no-indepth avail
  EMS tests in 51/030

  * doc/source/design/extra-match-search.rst, tcl/modfind.tcl.in: Fetch all
  files if no-indepth mode and EMS asked  In case no-indepth mode is asked and
  extra match search should be performed, traditional file lookup (by
  ``findModules``) is made to return all existing files. Not only those
  matching depth level. As extra match filtering process may eliminate some
  entries, all of them should be tested to obtain accurate result.

2023-02-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.4/scan/.modulerc, testsuite/modulefiles.4/scan/1.0,
  testsuite/modulefiles.4/scan/2.0,
  testsuite/modules.51-scan/030-scan_eval-avail.exp,
  testsuite/modules.51-scan/031-scan_eval-whatis.exp,
  testsuite/modules.51-scan/032-scan_eval-paths.exp: ts: auto symbols and EMS
  on avail/whatis/paths

2023-02-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.4/scan/.modulerc, testsuite/modulefiles.4/scan/1.0,
  testsuite/modulefiles.4/scan/2.0,
  testsuite/modules.51-scan/030-scan_eval-avail.exp,
  testsuite/modules.51-scan/031-scan_eval-whatis.exp,
  testsuite/modules.51-scan/032-scan_eval-paths.exp: ts: default symbol and
  EMS on avail/whatis/paths

  * testsuite/modules.51-scan/030-scan_eval-avail.exp,
  testsuite/modules.51-scan/031-scan_eval-whatis.exp,
  testsuite/modules.51-scan/032-scan_eval-paths.exp: ts: adapt wild variant
  avail/whatis/paths tests in 51/03{0,1,2}

  * tcl/modfind.tcl.in, tcl/modspec.tcl: Disable auto symbols on wild search
  with variant  Do not compute auto symbols if search query does not contain a
  module name and version but contain variant specification.  Add
  isSpecWildWithVariant procedure to determine if search query is wild with
  variant specification.  Disabling auto symbols is especially useful for
  sub-commands like 'paths' that take getModules result and try to resolve
  each entry. In this situation it is important not to have any auto symbol
  that indirectly targets an element withdrawn from extra match filter.

  * doc/source/design/extra-match-search.rst, tcl/modfind.tcl.in: Correctly
  handle auto symbols during EMS  Move extra match search in getModules from
  phase 3 to phase 4 to proceed after auto symbols computation. Add auto
  symbols defined in versmod_list structure so extra match search filtering
  can unset these elements if their target is filtered out.

2023-02-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.51-scan/032-scan_eval-paths.exp: ts: test alias/sym
  filtering during EMS on paths

  * testsuite/modulefiles.4/scan/1.0, testsuite/modulefiles.4/scan/2.0,
  testsuite/modules.51-scan/031-scan_eval-whatis.exp: ts: test alias/sym
  filtering during EMS on whatis

2023-02-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/extra-match-search.rst: doc: update extra match search
  spec for alias/sym

  * testsuite/etc/modulerc.scan, testsuite/modulefiles.4/scan/.modulerc,
  testsuite/modulefiles.4/scan/1.0,
  testsuite/modules.51-scan/030-scan_eval-avail.exp: ts: test alias filtering
  during extra match search in 51/030

2023-02-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/etc/modulerc.scan, testsuite/modulefiles.4/foo/.modulerc,
  testsuite/modulefiles.4/foo/1.0, testsuite/modulefiles.4/scan/.modulerc,
  testsuite/modulefiles.4/scan/1.0,
  testsuite/modules.51-scan/030-scan_eval-avail.exp: ts: test symbol filtering
  during extra match search in 51/030

2023-02-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modfind.tcl.in, tcl/modscan.tcl: Filter sym ver if target unset during
  extra match  Unset the symbolic version elements targeting an element
  removed during the extra match search.

  * testsuite/modules.70-maint/370-variant.exp: ts: no mod name/vers but vr
  spec on avail/paths in 70/370

  * testsuite/modules.70-maint/375-variant-whatis.exp: ts: no mod name/vers
  but vr spec on whatis in 70/375

2023-02-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .../021-avail_output-variant-sgr.exp: ts: no mod name/vers but vr spec on
  colored avail in 51/021

  * testsuite/modules.70-maint/370-variant.exp: ts: test variant spec only on
  module list in 70/370

2023-02-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/370-variant.exp: ts: test variant spec
  highlight on module list in 70/370

  * testsuite/modulefiles.3/variant/6.0,
  testsuite/modules.70-maint/370-variant.exp,
  testsuite/modules.70-maint/375-variant-whatis.exp: ts: test free value
  variant spec on av/is-avail/wh/paths

2023-02-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/variant/1.0, .../021-avail_output-variant-sgr.exp:
  ts: test to color selected variant name and value in 51/021

2023-02-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .../021-avail_output-variant-sgr.exp,
  testsuite/modules.70-maint/370-variant.exp,
  testsuite/modules.70-maint/371-variant-msg.exp,
  .../modules.70-maint/377-variant-shortcut.exp: ts: adapt existing sgr
  variant tests  Take into account sgr output code change due to variant sgr
  highlight feature.

2023-02-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modfind.tcl.in, tcl/report.tcl.in: Highlight searched variant name and
  value in output

2023-02-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/mfinterp.tcl.in: No error count raise during scan evaluation  If the
  evaluation of a modulefile aborts (due to a break or exit error), do not
  increase error count if evaluation mode is scan.  As scan is a global
  operation, like an avail search, an error on one modulefile should not
  impact the overall result of the scan.

2023-02-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/030-options.exp: ts: fix version module avail
  resolution in install 00/030

  * testsuite/modules.70-maint/376-variant-tag.exp: ts: add hide/forbid tag
  tests applying to variant in 70/376

2023-02-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modscan.tcl: Inhibit error report during scan mode evaluations
  Disable error reporting to avoid modulefile errors to pollute output. This
  is particularly useful when dealing with modulefile that does not cope with
  scan mode evaluation.

2023-01-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/variant/6.0,
  testsuite/modules.70-maint/370-variant.exp,
  testsuite/modules.70-maint/375-variant-whatis.exp,
  testsuite/modules.70-maint/376-variant-tag.exp: ts: test variant spec on
  avail/whatis/paths  Adapt existing avail, whatis, is-avail, path and paths
  tests that demonstrate whether sub-command takes variant specification into
  account or not.  Add boolean variant, shortcut variant tests. Add also more
  tests of scan evaluation for avail/whatis/paths when module is forbidden.

2023-01-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc variant spec on avail/list/paths/whatis in NEWS

2023-01-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, doc/source/design/module-selection-contexts.rst,
  doc/source/design/variants.rst: doc: desc extra match search in
  variant/selection notes

2023-01-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/coll.tcl.in, tcl/main.tcl.in, tcl/mfinterp.tcl.in, tcl/modeval.tcl,
  tcl/modfind.tcl.in, tcl/modspec.tcl, tcl/subcmd.tcl.in,
  testsuite/example/siteconfig.tcl-1: Allow module spec without name on
  several subcmds  Allow module specification with variant definition and no
  module name version for avail, list, paths and whatis sub-commands.

2023-01-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modscan.tcl: Filter avail module based on variant specification
  Update extra match search process to allow specification of module variants
  in addition to module name and version. Filter results through extra match
  search to only return modules matching variant specification (where
  specified variant name and value is defined for module).

2023-01-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/modulefiles/module-info: contrib: fix module-info example
  modulefile for scan mode

  * tcl/modscan.tcl: Extra match search required if mod spec contains variant
  During avail, paths or whatis sub-commands

2023-01-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.4/scan/.modulerc, testsuite/modulefiles.4/scan/1.0,
  testsuite/modulefiles.4/scan/2.0,
  testsuite/modules.51-scan/030-scan_eval-avail.exp: ts: add diverse scan mode
  eval tests in 51/030

2023-01-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.4/variant1/.modulerc,
  testsuite/modulefiles.4/variant1/1.0, testsuite/modulefiles.4/variant1/2.0,
  .../modules.51-scan/020-avail_output-variant.exp: ts: test scan evaluation
  and output with variants in 51/020

2023-01-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/variant/1.0, .../021-avail_output-variant-sgr.exp:
  ts: add avail report sgr tests for free-value variant in 51/021

  * tcl/modfind.tcl.in: Adapt report for free-value variant  When reporting
  value list of free-value variant, mention '*' to indicate all kind of values
  are accepted. If a default value is defined or if module is loaded report
  these values among variant value list.

2023-01-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/variant/1.0,
  testsuite/modules.51-scan/010-init_ts.exp,
  .../021-avail_output-variant-sgr.exp,
  testsuite/modules.51-scan/999-cleanup.exp: ts: test avail output with
  rendition of default/loaded variant

2023-01-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/370-variant.exp,
  .../modules.70-maint/377-variant-shortcut.exp: ts: test list output with
  rendition of default variant

2023-01-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc. default/loaded variant value SGR in NEWS

  * tcl/modfind.tcl.in, tcl/report.tcl.in: Adapt loaded variant report to
  loaded kind  To highlight loaded variant value use the sgr key associated to
  the loaded kind (loaded or auto-loaded). Resolve abbreviation used for these
  module tag to apply the correct SGR key.

  * tcl/modfind.tcl.in: Fix boolean variant key report issue on avail output

2023-01-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modfind.tcl.in, tcl/report.tcl.in: Adapt variant report to highlight
  loaded variant value  Update variant report mechanism to highlight variant
  value if it is the loaded one (if this module is currently loaded). Use 'L'
  sgr code highlight loaded variant value, like done for loaded module name
  and version.

  * tcl/modfind.tcl.in, tcl/modscan.tcl, tcl/report.tcl.in: Adapt variant
  report to highlight default variant value  Update variant report mechanism
  to highlight variant value if it is the default one. Use 'de' sgr code
  highlight default variant value, like done for default version.  Both avail
  and list output reports benefit from this highlight enhancement.

  * tcl/modfind.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Adapt
  multiple-value variant report to highlight comma  Update variant report
  mechanism to highlight comma separator when all available values of a
  variant is reported. Use 'se' sgr code to highlight comma, like done for '{'
  and '}'. The link to 'name=value' key entry is this way reinforced.
  Introduce report mechanism #7 in getVariantList procedure to achieve this.
  getVariantList will need refactoring.

2022-12-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.4/info/mode7, testsuite/modulefiles.4/info/mode8,
  testsuite/modules.50-cmds/083-info-mode.exp,
  testsuite/modules.50-cmds/084-info-mode-exp.exp: ts: test scan mode on
  module-info in 50/{083,084}

  * doc/source/modulefile.rst: doc: desc. scan string returned by module-info
  mode

  * testsuite/modules.70-maint/220-config.exp,
  testsuite/modules.70-maint/360-avail_output.exp: ts: adapt tests for variant
  val in avail_*output cfgs in 70/{220,360}

  * NEWS.rst: doc: desc. extra-match-search and variant report in NEWS

  * INSTALL.rst, configure, doc/source/changes.rst, doc/source/module.rst:
  install/doc: desc. variant addition to avail_{,terse_}output

  * doc/source/design/output-configuration.rst,
  doc/source/design/variants.rst: doc: desc. variant report on avail in design
  notes

  * tcl/init.tcl.in, tcl/modfind.tcl.in, tcl/report.tcl.in: Add variant value
  to avail_{,terse_}output config  Add the ability to report defined variants
  on avail regular or terse output. Variant report is updated to output all
  possible values in the name=value1,value2,... form. This form also applies
  to boolean variant with on,off as possible values.  Fixes #407

2022-12-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, tcl/mfinterp.tcl.in, tcl/modeval.tcl, tcl/modscan.tcl:
  Configure scan evaluation mode for modulefile  Add scan evaluation mode for
  modulefile. It will analyzes modulefile content for extra match search
  process.  To define environment variable in modulefile context during
  evaluation, use whatis-variant of environment variable edition modulefile
  commands.  Setup first specific scan-variant of a modulefile command with
  variant-sc procedure. Reuse code from whatis-variant to initialize variant
  value in environment when evaluating modulefile. Also gather variant
  definition for modules in a global array structure.

  * tcl/modfind.tcl.in, tcl/modscan.tcl: Add extra match search process
  Update getModules procedure to insert extra match search at phase 3.
  filterExtraMatchSearch procedure codes the extra match search process.  As a
  start, all modules in result are evaluated in scan mode.

  * tcl/modscan.tcl: Add isExtraMatchSearchRequired proc  Add
  isExtraMatchSearchRequired procedure that determine if current module search
  requires an extra match search.  Extra match search is required currently if
  variant should be reported in resulting output.

  * .aspell.en.pws, Makefile, tcl/modscan.tcl: Add modscan.tcl code file  Add
  modscan.tcl code file that will host Tcl procedures for the scan modulefile
  evaluation mode and the extra match search process.

  * .aspell.en.pws, doc/source/design/extra-match-search.rst,
  doc/source/design/module-cache.rst: doc: add initial version of
  extra-match-search design

2023-04-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, contrib/rpm/environment-modules.spec.in: install: migrate to
  SPDX licence format in RPM spec file

  * NEWS.rst, init/bash_completion.in: init: fix nospace activation in bash
  completion script  Fix bash shell completion script to be able to complete
  full name of available modules.  Fixes #490.

2023-04-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst: doc: clarify python initialization example  Update
  Python initialization example to precise that the init script should be
  exec-ed in the global scope. This is important when init script is executed
  from a function.  This change helps to clarify a question asked on #483.

2023-03-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, script/gitlog2changelog.py.in: install: fix expected log format
  in gitlog2changelog.py  Update gitlog2changelog.py script to ensure git log
  format is not influenced by user git configuration.  Fixes #487.

2023-03-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .codespellrc, .github/workflows/windows_tests.yaml: codespell: ignore
  additional generated content

2023-03-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile, NEWS.rst: install: allow to build from short-depth git repo  Fix
  Makefile to allow building Modules from a git repository with short commit
  depth.  Fixes #486

2023-02-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/config/base-config.exp: ts: escape shell text output for regexp
  enabled tests

  * .cirrus.yml: cirrus: tcl-tk homebrew pkg now use default location

2023-02-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/400-source-sh.exp,
  testsuite/modules.70-maint/410-timer.exp: ts: fix tests when run with Tcl
  9.0

  * testsuite/config/base-config.exp: ts: update procedure to allow tests to
  fail  Provide a way to track tests that are expected to fail. Add failcmd
  argument on all test procedure to indicate the fail command to use to report
  test failure. Use fail command by default. When using xfail command, it
  indicates that test is expected to fail.

2023-02-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .github/workflows/linux_tests.yaml: gh: add new Linux test case for Tcl
  9.0

  * .github/workflows/linux_tests.yaml: gh: add new Linux test case for Tcl
  8.7

  * testsuite/modules.70-maint/451-stashpop.exp,
  testsuite/modules.70-maint/452-stashrm.exp,
  testsuite/modules.70-maint/453-stashshow.exp: ts: fix tests when run with
  Tcl 8.7

2023-01-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, .cirrus.yml: cirrus: fix Codecov run on MacOS M1
  environment  Codecov tool is not available on arm64 platform. Use arch
  utility to run x86_64 codecov binary on MacOS M1 virtual machine.

  * NEWS.rst, tcl/mfinterp.tcl.in: Fix shell alias translation with fish shell
  3.6  A '$argv' string is added in fish 3.6 at the end of shell alias
  definition when reported with functions command.

2023-01-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/210-clear.exp: ts: adapt 70/210 test result for
  MSYS platform

  * NEWS.rst, tcl/subcmd.tcl.in, testsuite/example/siteconfig.tcl-1,
  testsuite/modules.61-coll/030-save.exp: Catch collection dir error and
  report correct msg  Fixes #482

2023-01-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, .cirrus.yml: cirrus: use new macOS images for M1 instead
  of Intel

  * NEWS.rst, tcl/mfinterp.tcl.in, testsuite/modulefiles.3/foo/1.0,
  testsuite/modulefiles.3/tag/.modulerc, testsuite/modulefiles.3/tag/8.0,
  testsuite/modules.50-cmds/465-tag-opt.exp: Correctly apply extra tag when
  variant not set  Correctly apply extra tag set when loading a module whose
  variant has no specific value set (default value used).  Fixes #484

2022-12-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/cookbook/reduce-io-load.rst: doc: update
  reduce-io-load recipe with module cache

  * MIGRATING.rst: doc: desc. Module cache in MIGRATING

2022-12-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/module.rst, doc/source/modulefile.rst: doc: desc.
  limited-access & cache in NEWS/man

2022-12-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp,
  .../045-cache-use-misc-inconsistent.exp: ts: add more cache not in sync
  tests in 30/045

2022-12-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/module-cache.rst: doc: desc. in design notes when cache
  is not in sync

  * .../044-cache-use-limited-access-inconsistent.exp: ts: add tests for
  inconsistent limited accesses in 30/044

2022-12-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.20-locate/057-mcookie.exp,
  testsuite/modules.20-locate/080-access.exp,
  testsuite/modules.20-locate/081-access-rc.exp,
  testsuite/modules.20-locate/090-memcache.exp,
  testsuite/modules.20-locate/113-hide-all-opt.exp,
  .../modules.20-locate/130-mcookie_check_eval.exp,
  testsuite/modules.70-maint/240-icase.exp,
  testsuite/modules.70-maint/260-extended_default.exp,
  testsuite/modules.70-maint/290-json.exp,
  testsuite/modules.70-maint/330-large-file.exp,
  testsuite/modules.70-maint/420-lint.exp,
  testsuite/modules.80-deep/080-access-deep.exp: ts: ignore pre-built cache
  for tests changing file access

  * testsuite/modules.70-maint/120-autoinit.exp: ts: fix shell completion
  script file tests in 70/120

  * .cirrus.yml, .github/workflows/linux_tests.yaml, script/mt,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.00-init/060-build_cache.exp,
  .../modules.30-cache/051-cache-buffer-bytes.exp,
  testsuite/modules.70-maint/220-config.exp,
  testsuite/modules.99-finish/999-cleanup.exp: ts: optionally build cache
  files to run tests  When TESTSUITE_ENABLE_MODULECACHE environment variable
  is set, cache file is built for all modulepaths of the testsuite. Tests are
  run using the cache files to resolve available modules.

2022-12-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/module-cache.rst: doc: additional notes on module cache
  design

  * testsuite/modules.30-cache/010-init_ts.exp,
  .../modules.30-cache/043-cache-use-limited-access.exp: ts: add
  limited-access hidden module tests in 30/043

2022-12-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.30-cache/010-init_ts.exp,
  testsuite/modules.30-cache/031-cachebuild-full.exp,
  .../032-cachebuild-limited-access.exp,
  testsuite/modules.30-cache/040-cache-use.exp,
  .../043-cache-use-limited-access.exp: ts: add ignored files and dirs in
  cache test structure

  * .../043-cache-use-limited-access.exp: ts: add tests for limited-access
  cache elt resolution in 30/043

2022-12-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.30-cache/040-cache-use.exp: ts: adapt existing tests for
  limited-access resolution

  * .aspell.en.pws, tcl/cache.tcl.in, tcl/modfind.tcl.in: Resolve limited
  access files/dirs when using cache  When searching modules through cache
  files resolve files and directories marked as limited access. First check
  such entries match the search query, then test if these files and
  directories can be accessed by current user.  The access test relies on the
  findModulesFromDirsAndFiles procedure, as if module search was not performed
  with cache file, but just for the limited-access entries.

2022-12-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modfind.tcl.in: Create findModulesFromDirsAndFiles from findModules
  Split code from findModules procedure that walk through a list of files and
  directories to find modules. Create a new procedure named
  findModulesFromDirsAndFiles for that purpose.  This new procedure will be
  helpful to resolve limited access files and directories spotted in cache
  file.

2022-12-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/cache.tcl.in, tcl/mfinterp.tcl.in: Add limited-access-directory
  cachefile command  Add limited-access-directory cachefile command to record
  all directories with limited access in modulepath.

  * tcl/cache.tcl.in, tcl/mfinterp.tcl.in: Add limited-access-file cachefile
  command  Add limited-access-file cachefile command to record all files with
  limited access in modulepath.

2022-12-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.30-cache/010-init_ts.exp,
  .../032-cachebuild-limited-access.exp: ts: add limited-access cachebuild
  tests in 30/032

2022-12-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/module-cache.rst: doc: elaborate limited access in
  module cache design

  * testsuite/modules.30-cache/031-cachebuild-full.exp: ts: adapt existing
  tests now limited access are recorded

  * tcl/cache.tcl.in: Register files/dir with limited access in cache  When
  building cache, check all files and directory within modulepath that have
  limited access. Limited access is when user building cache or others cannot
  read file or cannot either read or search directory.  Limited access file or
  directory are recorded in cache file with respectively limited-access-file
  and limited-access-directory cachefile commands.  Limited access commands
  replace modulefile/modulerc definitions in the cache if files or their
  parent directory has limited access.

2022-12-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .../modules.30-cache/052-cache-expiry-secs.exp: ts: add cache_expiry_secs
  tests in 30/051

  * doc/source/module.rst: doc: desc cache_expiry_secs in man

  * INSTALL.rst, NEWS.rst: doc: desc cache_expiry_secs in NEWS/INSTALL

  * doc/source/changes.rst, doc/source/design/module-cache.rst: doc: desc
  cache_expiry_secs in design/changes

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.30-cache/040-cache-use.exp,
  testsuite/modules.70-maint/220-config.exp: ts: test cache_expiry_secs config
  option

  * init/Makefile, init/fish_completion, init/zsh-functions/_module.in: init:
  add cache_expiry_secs config to completion script

  * tcl/cache.tcl.in, tcl/init.tcl.in: Introduce cache_expiry_secs
  configuration option  Add cache_expiry_secs configuration option to control
  after how many seconds (after last modification) to consider cache file
  expired and ignore it. Set to 0 by default which means cache file never
  expires. Value can vary from 0 to 31536000 which corresponds to the number
  of seconds during one year.  When configuration option is set, it defies the
  MODULES_CACHE_EXPIRY_SECS environment variable.

  * .../modules.30-cache/051-cache-buffer-bytes.exp: ts: add
  cache_buffer_bytes tests in 30/051

2022-12-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.70-maint/220-config.exp: ts: test cache_buffer_bytes
  config option

  * doc/source/module.rst: doc: desc cache_buffer_bytes in man

  * INSTALL.rst, NEWS.rst: doc: desc cache_buffer_bytes in NEWS/INSTALL

  * doc/source/changes.rst, doc/source/design/module-cache.rst: doc: desc
  cache_buffer_bytes in design/changes

  * init/Makefile, init/fish_completion, init/zsh-functions/_module.in: init:
  add cache_buffer_bytes config to completion script

  * tcl/cache.tcl.in, tcl/init.tcl.in, tcl/subcmd.tcl.in: Introduce
  cache_buffer_bytes configuration option  Add cache_buffer_bytes
  configuration option to control the buffer size used when reading or writing
  cache files. A 32 kbytes buffer is set by default. It can vary from 4 kbytes
  to 1 MB. It is useful to have a large buffer when reading or writing large
  files to reduce the number or read or write system calls.  When
  configuration option is set, it defies the MODULES_CACHE_BUFFER_BYTES
  environment variable.

2022-12-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.30-cache/040-cache-use.exp,
  testsuite/modules.30-cache/041-cache-interp.exp: ts: adapt tests to specific
  cache read code

2022-12-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/cache.tcl.in: Add specific proc to read cache file  Introduce
  readCacheContent procedure to specifically read cache file rather using read
  procedure for modulefile. Avoid cache file to be cached in memory. Produce
  more specific error message.

2022-12-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.30-cache/050-ignore-cache.exp: ts: add
  ignore_cache/--ignore-cache tests in 30/050

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.70-maint/220-config.exp: ts: test ignore_cache config
  option

  * doc/source/module.rst: doc: desc ignore_cache/--ignore-cache in man

  * INSTALL.rst, NEWS.rst: doc: desc ignore_cache/--ignore-cache in
  NEWS/INSTALL

  * doc/source/changes.rst, doc/source/design/module-cache.rst: doc: desc
  --ignore-cache/ignore_cache in design/changes

  * init/Makefile, init/fish_completion, init/zsh-functions/_module.in: init:
  add ignore_cache/--ignore-cache to comp script

  * tcl/cache.tcl.in, tcl/subcmd.tcl.in: Ignore cache file when ignore_cache
  enabled  Do not check or evaluate cache file if ignore_cache option is
  enabled.  Use this new option in cachebuild sub-command to ignore cache when
  building cache files.

  * tcl/init.tcl.in, tcl/main.tcl.in, tcl/report.tcl.in: Add ignore_cache
  configuration option  Add ignore_cache configuration option that controls
  whether or not module cache file should be considered if available. Disabled
  by default. When configuration is modified it sets the MODULES_IGNORE_CACHE
  environment variable.  --ignore-cache command line switch can be used to
  enable ignore_cache for the current execution.  --ignore_cache is also
  supported for compatibility with Lmod.

2022-11-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst, doc/source/modulefile.rst: doc: desc cache in man
  pages

  * NEWS.rst: doc: desc. cache usage work in NEWS

2022-11-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/module-cache.rst,
  testsuite/modules.30-cache/031-cachebuild-full.exp,
  testsuite/modules.30-cache/040-cache-use.exp: doc/ts: cache build & use with
  module header options

  * tcl/subcmd.tcl.in: Enable mcookie_check/mcookie_version_check on
  cachebuild  Enable both mcookie_check and mcookie_version_check
  configuration options when recording cache. These two options are not
  honored when building or using cache.

2022-11-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.30-cache/042-cache-error.exp: ts: test erroneous cache
  file in 30/042

  * tcl/cache.tcl.in: Revert optimization filter tries for
  findModulesInCacheFile  As the improvement obtained by either of these
  optimization methods was not perceptible, they are withdrawn to keep
  filtering code simpler.  Gain was also not perceptible since the additional
  cost taken by cache was not perceptible in the first place.

  * tcl/cache.tcl.in: Second optimization filter try for
  findModulesInCacheFile  As first try is not 100% accurate since it does not
  compare element root names. This second attempt first compute the list of
  element root names to compare, same lsearch -glob mechanism for comparison.
  Then unset elements whose root name has been returned by comparison.

2022-11-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/cache.tcl.in: Optimize module filtering in findModulesInCacheFile
  Increase filtering performance in findModulesInCacheFile: instead of testing
  for match each module in cache through modEqStatic, gets all module to
  exclude from result at once with lsearch command.

  * script/mb, testsuite/modules.30-cache/040-cache-use.exp: script: skip v5.2
  from bench/profile in mb  Ignore Modules v5.2 when benching or profiling
  releases not to get too much results on output.

  * script/mb: script: add benchmark tests for cache in mb  Add cache version
  of avail, whatis and load benchmark tests in mb tool.

  * testsuite/modules.30-cache/041-cache-interp.exp: ts: test cache file
  interp taint protection

2022-11-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.30-cache/040-cache-use.exp: ts: add cache usage tests in
  30/040

2022-11-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/cache.tcl.in, tcl/modfind.tcl.in: Distinguish empty cache result from
  no cache result  Update structure of result returned by
  findModulesInCacheFile to indicate if cache load was successful or not. It
  is possible this way to distinguish between a *there is no cache* result and
  a *no match in cache* or *empty cache* results.

  * tcl/cache.tcl.in: Cache content filer in findModulesInCacheFile  Add code
  in findModulesInCacheFile to filter fetched cache content to tailor it to
  the search query. Proceed following what is done in findModules procedure
  but in a reverse order (we remove elements from a full structure, rather we
  add elements to an empty structure).

  * tcl/report.tcl.in: Set time string as separate arg on reportTimer  Avoid
  evaluating full message string to replace time pattern by execution time
  value. Message could contain string that could be misinterpreted by format
  command as time pattern.

2022-11-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/cache.tcl.in: Add modulefile-invalid cachefile command  Add
  modulefile-invalid cachefile command used to record a invalid modulefile in
  modulepath.

  * tcl/cache.tcl.in: Add modulerc-content cachefile command  Add
  modulerc-content cachefile command used to record a modulerc available in
  modulepath. Record modulerc information in memory cache variables:
  g_modfileContent.

  * tcl/cache.tcl.in: Add modulefile-content cachefile command  Add
  modulefile-content cachefile command used to record a modulefile available
  in modulepath. Record modulefile information in memory cache variables:
  g_modfileContent and g_fileMtime.

  * .aspell.en.pws, tcl/cache.tcl.in, tcl/mfinterp.tcl.in, tcl/report.tcl.in:
  Core code for execute-cachefile  Add core code for execute-cachefile
  procedure. Initialize an interpreter to evaluate the cache file. Reuse the
  same mechanisms than for modulefile or modulerc evaluation.

  * .aspell.en.pws, tcl/cache.tcl.in, tcl/modfind.tcl.in: Add initial code
  structure to evaluate cache file  Add call to findModulesInCacheFile
  procedure in findModules to retrieve available modulefile and modulerc
  information from modulepath cache file.  findModulesInCacheFile tests a
  cache file is available and evaluate it if not yet done with
  execute-cachefile procedure. Cache file information will then be parsed to
  return the information matching the search query.  Initial code structure is
  inserted with this commit. Code for cache file evaluation and cache
  information tailoring will come next.

2022-11-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.30-cache/010-init_ts.exp,
  testsuite/modules.30-cache/030-cachebuild.exp,
  testsuite/modules.30-cache/031-cachebuild-full.exp,
  testsuite/modules.30-cache/999-cleanup.exp: ts: add/update cachebuild tests
  with real cache file

2022-11-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .gitignore, Makefile, tcl/{cache.tcl => cache.tcl.in}: Add major.minor
  version number in cache files  Append major.minor version number to the
  #%Module header prefix of generated cache files. Cache file can be used only
  if generated for the current release of Modules used.  Change cache.tcl into
  cache.tcl.in to get Modules release number resolved at build time.

2022-11-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/cache.tcl, tcl/modfind.tcl.in, tcl/subcmd.tcl.in: Core code for
  formatModuleCacheContent  Implement formatModuleCacheContent procedure.
  findModules procedure is first called to get all files from designated
  modulepath directory. A cache entry is made for each result obtained from
  findModules with cache file commands: modulefile-content, modulerc-content
  and modulefile-invalid.  Goal is to record all information produced by
  findModules to be able to replace findModules processing by cache file
  evaluation. Thus modulefile modification time and validity check issues are
  recorded in cache file.  Modulerc and modulefile content is read and
  recorded as-is in cache file. Error occurring during file read is raised and
  ends cache file creation.

2022-11-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.30-cache/030-cachebuild.exp: ts: add initial cachebuild
  sub-cmd tests

  * .aspell.en.pws, tcl/cache.tcl, tcl/report.tcl.in, tcl/subcmd.tcl.in: Core
  code for cmdModuleCachebuild  Implement cachebuild sub-command. For each
  modulepath enabled or passed as argument, if modulepath is writable for user
  build cache content for this modulepath and record it in cache file.  Report
  message block is used to report file creation. Reports are output in normal
  verbosity level or higher. A warning message is emitted if modulepath is not
  writable for user, or if cache content to create is empty.  Provide empty
  skeleton for formatModuleCacheContent procedure.

  * testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.30-cache/010-init_ts.exp,
  testsuite/modules.30-cache/020-cacheclear.exp,
  testsuite/modules.30-cache/999-cleanup.exp: ts: add cacheclear sub-cmd tests

2022-11-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile, tcl/cache.tcl, tcl/report.tcl.in, tcl/subcmd.tcl.in: Core code
  for cmdModuleCacheclear  Implement cacheclear sub-command. For each
  modulepath enabled, check module cache file exists. If yes and if modulepath
  is writable for user, try to delete the cache file.  Report message block is
  used to report file deletion. Reports are output in normal verbosity level
  or higher. A warning message is emitted if modulepath is not writable for
  user.  Add tcl/cache.tcl source file to store procedure related to cache
  mechanism. Update Makefile to properly generate modulecmd.tcl with this new
  tcl file.

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc.
  cacheclear subcmd in NEWS/man/changes

  * testsuite/modulefiles.3/modbad/cacheclear,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.50-cmds/151-module-onlytop.exp: ts: adapt existing
  testfiles for cacheclear sub-command

  * init/Makefile, init/bash_completion.in, init/fish_completion,
  init/tcsh_completion.in, init/zsh-functions/_module.in: init: add cacheclear
  subcmd to completion scripts

  * .aspell.en.pws, tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Add
  'cacheclear' sub-command  Introduce cacheclear sub-command to delete cache
  file under modulepaths.  This sub-command cannot be called from a modulefile
  evaluation context.  Add sub-command empty skeleton: cmdModuleCacheclear.
  Sub-command accepts no option nor argument. Cache files are deleted in every
  enabled modulepaths.

  * .aspell.en.pws, NEWS.rst, doc/source/design/module-cache.rst: doc: add
  module-cache design doc

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc.
  cachebuild subcmd in NEWS/man/changes

  * testsuite/modulefiles.3/modbad/cachebuild,
  testsuite/modules.50-cmds/151-module-onlytop.exp: ts: adapt existing
  testfiles for cachebuild sub-command

  * init/Makefile, init/bash_completion.in, init/fish_completion,
  init/tcsh_completion.in, init/zsh-functions/_module.in: init: add cachebuild
  subcmd to completion scripts

  * .aspell.en.pws, tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Add
  'cachebuild' sub-command  Introduce cachebuild sub-command to create cache
  file under modulepaths.  This sub-command cannot be called from a modulefile
  evaluation context.  Add sub-command empty skeleton: cmdModuleCachebuild.
  Sub-command accepts no option. It may take optional arguments: list of
  modulepath directory where to build cache. When no argument is specified,
  cache is built for all enabled modulepaths.

2022-11-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst, NEWS.rst, contrib/rpm/environment-modules.spec.in,
  doc/source/conf.py, version.inc.in: Release of version 5.2.0

2022-11-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, NEWS.rst, doc/source/module.rst: doc: extend Collections
  desc in module man

2022-11-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * CONTRIBUTING.rst, INSTALL-win.rst, INSTALL.rst,
  contrib/vim/syntax/modulefile.vim,
  doc/source/cookbook/log-module-commands.rst: doc/vim: update tcl.tk links
  into tcl-lang.org

  * doc/source/module.rst: doc: desc hooks made with rename in module man

2022-11-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, MIGRATING.rst: doc: desc. siteconfig hook var in MIGRATING

  * MIGRATING.rst: doc: fix path issue in sticky module examples

2022-10-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, NEWS.rst, doc/source/module.rst, siteconfig.tcl: doc: add
  Site-specific configuration section in man

2022-10-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/siteconfig.tcl-1, testsuite/modulefiles.3/.modulerc,
  testsuite/modulefiles.3/interp/.modulerc, testsuite/modulefiles.3/interp/0,
  testsuite/modulefiles.3/interp/1, testsuite/modulefiles.3/interp/2,
  .../modules.50-cmds/560-siteconfig-interp.exp: ts: test specific vars/cmds
  hooks in 50/560

2022-10-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, NEWS.rst, doc/source/conf.py: doc: desc. cmds/vars hooks
  in NEWS

  * siteconfig.tcl, tcl/mfinterp.tcl.in: Add hooks for specific vars/cmds in
  modulerc interp ctx  Introduce hooks to define specific variables and
  commands for modulerc interpreter context. It relies on variables defined in
  siteconfig.tcl configuration file:  * modulerc_extra_vars is a list of
  variable name and value pairs * modulerc_extra_cmds is a list of command
  name and procedure pairs  Fixes #286

  * siteconfig.tcl, tcl/mfinterp.tcl.in: Add hooks for specific vars/cmds in
  modulefile interp ctx  Introduce hooks to define specific variables and
  commands for modulefile interpreter context. It relies on variables defined
  in siteconfig.tcl configuration file:  * modulefile_extra_vars is a list of
  variable name and value pairs * modulefile_extra_cmds is a list of command
  name and procedure pairs  Fixes #286

2022-10-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modfind.tcl.in: Remove modvr default value on setLoadedModule proc

2022-10-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/025-autoinit.exp,
  .../modules.20-locate/130-mcookie_check_eval.exp,
  testsuite/modules.50-cmds/075-alias.exp,
  testsuite/modules.50-cmds/076-alias-sub.exp,
  testsuite/modules.50-cmds/077-alias-undo.exp,
  testsuite/modules.50-cmds/078-refresh.exp,
  testsuite/modules.50-cmds/083-info-mode.exp,
  testsuite/modules.50-cmds/084-info-mode-exp.exp,
  testsuite/modules.50-cmds/282-info-command.exp,
  testsuite/modules.50-cmds/283-info-command-exp.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.50-cmds/360-restoreenv.exp,
  testsuite/modules.50-cmds/390-function.exp,
  testsuite/modules.50-cmds/391-function-undo.exp,
  testsuite/modules.50-cmds/400-source-sh.exp,
  testsuite/modules.50-cmds/540-complete.exp,
  testsuite/modules.50-cmds/541-uncomplete.exp,
  testsuite/modules.70-maint/120-autoinit.exp,
  testsuite/modules.70-maint/210-clear.exp: ts: adapt existing tests to
  __MODULES_LMREFRESH

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc.
  refresh only modules requiring it

  * .aspell.en.pws, NEWS.rst, doc/source/changes.rst, doc/source/module.rst:
  doc: desc. __MODULES_LMREFRESH in NEWS/man/changes

  * tcl/subcmd.tcl.in: Only refresh loaded modules requiring it  Use the
  qualified refresh property to only evaluate in refresh mode the loaded
  modules marked with this property.  Fixes #477

  * tcl/mfinterp.tcl.in, tcl/modeval.tcl, tcl/modfind.tcl.in,
  tcl/subcmd.tcl.in: Track loaded modules qualified for refresh eval  Track
  loaded modules that are qualified for a refresh evaluation. Refresh
  evaluation is only useful if module defines volatile environment changes:
  shell completion, alias or function.  An internal state, named
  refresh_qualified, marks loading modules defining such volatile environment
  changes. Such modules are then added to the __MODULES_LMREFRESH environment
  variable to track this property once module is loaded.  Code is also added
  to remove module from __MODULES_LMREFRESH when it is unloaded.

  * .github/workflows/differential_shellcheck.yml,
  .github/workflows/lint_tests.yaml, .github/workflows/linux_tests.yaml,
  .github/workflows/windows_tests.yaml, CONTRIBUTING.rst, Makefile, NEWS.rst,
  README.md, configure, doc/source/conf.py,
  doc/source/cookbook/modulefiles-in-git.rst, script/mpub, script/mrel: Use
  main as new name for default git branch

2022-10-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .github/workflows/windows_tests.yaml: gh: use cygwin-install-action rather
  builtin chocolatey  Chocolatey version 1.2.0 shipped with latest windows
  2022 image does not seem to correctly install packages from Cygwin source.
  So move to cygwin/cygwin-install-action to install Cygwin packages.

  * Makefile: install: use newer version of nagelfar (1.3.3)

2022-10-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp,
  .../modules.20-locate/112-hide-user-group.exp,
  .../modules.20-locate/117-forbid-user-group.exp,
  testsuite/modules.20-locate/119-hide-cascading.exp,
  testsuite/modules.50-cmds/287-info-usergroups.exp,
  testsuite/modules.50-cmds/440-module-tag.exp,
  testsuite/modules.70-maint/220-config.exp,
  testsuite/modules.70-maint/390-state.exp: ts: fix testsuite run when id cmd
  cannot resolve group  Update testsuite to cope with user group whose name
  cannot be resolved.  Fixes #476.

2022-10-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile, NEWS.rst, init/Makefile, init/zsh.in, tcl/subcmd.tcl.in,
  testsuite/modules.70-maint/120-autoinit.exp: Revert "init: setup zsh FPATH
  through autoinit command"  This reverts commit
  59ac24e2431df012d8b22872a0e8fd1e86a20e9f.  FPATH variable cannot be handled
  within autoinit process as this is not an environment variable. Thus when
  modulecmd.tcl is executed, it does not know the current value of FPATH. So
  if it sets FPATH during autoinit, previous value of this variable is lost.
  As a result FPATH must stay defined in initialization script.

2022-10-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, NEWS.rst, doc/example/log-module-commands/siteconfig.tcl,
  doc/source/cookbook/log-module-commands.rst: doc: fix logging sys on
  log-module-command recipe  Update log-module-command recipe to ensure the
  logging system is not broken by the current user environment.  Fixes #475.

2022-10-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/005-init_ts.exp: ts: skip basheu tests on bash
  5.2  bash -eu test of install testsuite are skipped on new version of bash
  (5.2) as internal messages currently appear when using module function with
  -eu options on this version.  A bug as been submitted to the bash
  developers:
  https://lists.gnu.org/archive/html/bug-bash/2022-10/msg00073.html

2022-10-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .github/workflows/linux_tests.yaml: gh: update to codecov-action v3

  * .github/workflows/lint_tests.yaml, .github/workflows/linux_tests.yaml,
  .github/workflows/windows_tests.yaml: gh: update actions/upload-artifact to
  v3

  * .github/workflows/lint_tests.yaml, .github/workflows/linux_tests.yaml,
  .github/workflows/windows_tests.yaml: gh: update actions/checkout to v3

  * .github/workflows/windows_tests.yaml: gh: move windows tests to
  windows-2022 image

2022-10-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/210-clear.exp: ts: fix env of clear subcmd test
  case

  * Makefile: install: correct arg order for date cmd on FreeBSD

2022-10-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst: doc: desc. stash env in MIGRATING

2022-10-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst: doc: desc stash in collection section of man page

  * testsuite/modules.70-maint/457-stash-savelist.exp: ts: test savelist
  subcmd with stash collections

2022-10-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/design/stash-environment.rst, doc/source/module.rst:
  doc: desc. savelist stash filter in design/NEWS/man doc

  * tcl/subcmd.tcl.in: Filter stash collection on savelist  Update savelist
  sub-command to filter out stash collections unless --all option is set.

  * testsuite/modules.70-maint/456-stash-restore.exp: ts: test restore subcmd
  with stash collections

2022-10-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in,
  init/zsh-functions/_module.in: init: update completion with stashlist output
  Update stashpop, stashrm and stashshow completion definition to use
  stashlist output.

2022-10-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp: ts: clear
  MODULES_QUARANTINE_SUPPORT prior tests

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.70-maint/455-stashlist.exp: ts: add stashlist sub-cmd
  tests

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/152-module-emptyarg.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.61-coll/020-savelist.exp,
  testsuite/modules.61-coll/021-savelist-search.exp,
  testsuite/modules.61-coll/080-access-coll.exp,
  testsuite/modules.70-maint/190-emptyarg.exp,
  testsuite/modules.70-maint/350-term_width.exp: ts: add helper procs for
  collection list header msgs

2022-10-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/subcmd.tcl.in: Core code for cmdModuleStashlist  Implement 'stashlist'
  sub-command. Rely on cmdModuleSavelist but adapt this procedure to make
  several behavior changes when called by cmdModuleStashlist:  * elements are
  sorted in reverse order * element index starts at 0 * when no collection
  target set, only return collection without a target set

2022-10-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/report.tcl.in, tcl/subcmd.tcl.in, tcl/util.tcl: Add getCallingProcName
  util proc  Return name of calling procedure with getCallingProcName.

  * tcl/report.tcl.in, tcl/subcmd.tcl.in, testsuite/example/siteconfig.tcl-1:
  Add start_idx argument on displayElementList  Add start_idx argument on
  displayElementList procedure to define what is the starting index for the
  elements to report.

2022-09-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc.
  stashlist subcmd in NEWS/man/changes

  * testsuite/modulefiles.3/modbad/stashlist,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.50-cmds/151-module-onlytop.exp: ts: adapt existing
  testfiles for stashlist sub-command

  * init/Makefile, init/bash_completion.in, init/fish_completion,
  init/tcsh_completion.in, init/zsh-functions/_module.in: init: add stashlist
  subcmd to completion scripts

2022-09-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Add
  'stashlist' sub-command  Introduce stashlist sub-command to list stash
  collection file.  This sub-command cannot be called from a modulefile
  evaluation context.  Add sub-command empty skeleton: cmdModuleStashlist.
  Sub-command accepts no argument. It accepts --terse, --long and --json
  options.

  * .aspell.en.pws, doc/source/design/stash-environment.rst: doc: desc.
  stashlist in stash-environment design doc

2022-09-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/config/base-config.exp,
  testsuite/modules.70-maint/454-stashclear.exp: ts: add stashclear sub-cmd
  tests

  * tcl/subcmd.tcl.in: Core code for cmdModuleStashclear  Implement
  'stashclear' sub-command. Fetch all existing stash collection for current
  collection target. Then call 'saverm' sub-command over all of these
  collection obtained.

2022-09-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/modbad/stashclear,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.50-cmds/151-module-onlytop.exp: ts: adapt existing
  testfiles for stashclear subcmd

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc.
  stashclear subcmd in NEWS/man/changes

2022-09-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/Makefile, init/bash_completion.in, init/fish_completion,
  init/tcsh_completion.in, init/zsh-functions/_module.in: init: add stashclear
  subcmd to completion scripts

  * .aspell.en.pws, tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Add
  'stashclear' sub-command  Introduce stashclear sub-command to delete all
  stash collection file.  This sub-command cannot be called from a modulefile
  evaluation context.  Add sub-command empty skeleton: cmdModuleStashclear.
  Sub-command accepts no argument nor option.

  * .aspell.en.pws, doc/source/design/stash-environment.rst: doc: desc.
  stashclear in stash-environment design doc

  * testsuite/modules.00-init/005-init_ts.exp: ts: accept version name with
  '/' char

  * testsuite/modules.70-maint/453-stashshow.exp: ts: add stashshow sub-cmd
  tests

  * tcl/subcmd.tcl.in: Core code for cmdModuleStashshow  Implement 'stashshow'
  sub-command. Parse stash argument to get corresponding collection, then call
  saveshow over this collection name.

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc.
  stashshow subcmd in NEWS/man/changes

  * testsuite/modulefiles.3/modbad/stashshow,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.50-cmds/151-module-onlytop.exp: ts: adapt existing
  testfiles for stashshow sub-command

  * init/Makefile, init/bash_completion.in, init/fish_completion,
  init/tcsh_completion.in, init/zsh-functions/_module.in: init: add stashshow
  subcmd to completion scripts

  * .aspell.en.pws, tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Add
  'stashshow' sub-command  Introduce stashshow sub-command to display stash
  collection file.  This sub-command cannot be called from a modulefile
  evaluation context.  Add sub-command empty skeleton: cmdModuleStashshow.
  Sub-command accepts no option. It may take an optional argument: the index
  of the stash collection to display or the name of the stash collection. If
  no argument is provided, stash collection 0 is assumed.

  * .aspell.en.pws, doc/source/design/stash-environment.rst: doc: desc.
  stashshow in stash-environment design doc

  * testsuite/config/base-config.exp,
  testsuite/modules.70-maint/452-stashrm.exp: ts: add stashrm sub-cmd tests

2022-09-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/subcmd.tcl.in: Core code for cmdModuleStashrm  Implement 'stashrm'
  sub-command. Parse stash argument to get corresponding collection, then call
  saverm over this collection name.

  * tcl/coll.tcl.in, tcl/subcmd.tcl.in: Move collection resolution from stash
  in dedicated proc  Move collection name resolution from stash name from
  cmdModuleStashpop into getCollectionFromStash procedure.

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc.
  stashrm subcmd in NEWS/man/changes

  * testsuite/modulefiles.3/modbad/stashrm,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.50-cmds/151-module-onlytop.exp: ts: adapt existing
  testfiles for stashrm sub-command

  * init/Makefile, init/bash_completion.in, init/fish_completion,
  init/tcsh_completion.in, init/zsh-functions/_module.in: init: add stashrm
  subcmd to completion scripts

  * .aspell.en.pws, tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Add
  'stashrm' sub-command  Introduce stashrm sub-command to delete stash
  collection file.  This sub-command cannot be called from a modulefile
  evaluation context.  Add sub-command empty skeleton: cmdModuleStashrm.
  Sub-command accepts no option. It may take an optional argument: the index
  of the stash collection to delete or the name of the stash collection. If no
  argument is provided, stash collection 0 is assumed.

  * .aspell.en.pws, doc/source/design/stash-environment.rst: doc: desc.
  stashrm in stash-environment design doc

2022-09-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.70-maint/451-stashpop.exp: ts: add stashpop sub-cmd tests

  * tcl/subcmd.tcl.in: Core code for cmdModuleStashpop  Implement 'stashpop'
  sub-command. First parse stash argument to determine corresponding stash
  collection name or raise an error if stash value is invalid. Then restore
  stash collection. Afterward delete stash collection.

2022-09-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/coll.tcl.in: Add no_other_target option to findCollections  Add
  no_other_target option to findCollections procedure to filter when glob
  searching the result from other target. Especially useful when collections
  for specific targets exist but no target is currently set in user
  environment.  This no_other_target is disabled by default. savelist
  sub-command currently returns other targets when no target is set. But the
  option will be enabled for stashpop, to ensure that the popped collection is
  from the current target or from the *no target* if none set.

2022-09-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc.
  stashpop subcmd in NEWS/man/changes

  * testsuite/modulefiles.3/modbad/stashpop,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.50-cmds/151-module-onlytop.exp: ts: adapt existing
  testfiles for stashpop sub-command

  * doc/source/modulefile.rst, testsuite/modulefiles/info/commandexp,
  testsuite/modules.50-cmds/282-info-command.exp,
  testsuite/modules.50-cmds/283-info-command-exp.exp: ts/doc: add stashpop
  test/doc on 'module-info command'

  * doc/source/design/stash-environment.rst: doc: desc. stashpop in
  stash-environment design doc

  * init/Makefile, init/bash_completion.in, init/fish_completion,
  init/tcsh_completion.in, init/zsh-functions/_module.in: init: add stashpop
  subcmd to completion scripts

  * .aspell.en.pws, tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Add
  'stashpop' sub-command  Introduce stashpop sub-command to restore a stash
  collection then delete it.  This sub-command cannot be called from a
  modulefile evaluation context.  Add sub-command empty skeleton:
  cmdModuleStashpop.  Sub-command accepts no option. It may take an optional
  argument: the index of the stash collection to restore or the name of the
  stash collection. If no argument is provided, stash collection 0 is assumed.

2022-09-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/config/base-config.exp, testsuite/modulefiles.3/foo/.modulerc,
  testsuite/modulefiles.3/tag/.modulerc,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.70-maint/450-stash.exp: ts: add stash sub-cmd tests

2022-09-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.61-coll/030-save.exp: ts: move unsatisfied constraint msg
  to init section

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.61-coll/030-save.exp: ts: move nothing to save err msg in
  init section

2022-09-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/060-saveshow.exp: ts: put coll not valid msg in a
  proc

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/050-saverm.exp,
  testsuite/modules.61-coll/060-saveshow.exp,
  testsuite/modules.61-coll/080-access-coll.exp,
  testsuite/modules.70-maint/240-icase.exp,
  testsuite/modules.70-maint/440-reset.exp: ts: put coll not found msg in a
  proc

2022-09-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modfind.tcl.in: Fix init property unserialization  Update
  getLoadedModulePropertyList to apply unserialization translation map also
  for property not requiring sub-element split, like init.

2022-09-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/subcmd.tcl.in: Core code for cmdModuleStash  Implement stash
  sub-command. First check that a difference exists between current
  environment and initial one. If so, save current environment in a
  collection, then reset to initial environment.

2022-09-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/coll.tcl.in, tcl/subcmd.tcl.in: Reword findCollections to swap default
  coll by __init__  Update findCollections procedure to add swap_by_init
  argument, disabled by default. When enabled if specified collection is not
  found, change it to __init__.  Helps to remove duplicate code from
  cmdModuleSaveshow and cmdModuleRestore.

2022-09-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/coll.tcl.in, tcl/subcmd.tcl.in: Return is_tags_diff from
  getDiffBetweenCurEnvAndColl  Update getDiffBetweenCurEnvAndColl to also
  return is_tags_diff information. is_tags_diff indicates if loaded modules
  that matches modules in collection have different tags set.

  * tcl/util.tcl: Add unordered_lists_compared arg on getDiffBetweenArray
  Update getDiffBetweenArray procedure to add unordered_lists_compared
  argument (disabled by default). When enabled, array elements are considered
  unordered list, so value comparison is adapted to check differences between
  two lists.

  * tcl/util.tcl, testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/120-siteconfig.exp: Add notset_equals_empty arg to
  getDiffBetweenArray  Update getDiffBetweenArray procedure to add
  notset_equals_empty argument (disabled by default). When enabled not-set
  element in array is equivalent to element set to an empty value.

2022-09-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/coll.tcl.in, tcl/subcmd.tcl.in: Create getDiffBetweenCurEnvAndColl
  from cmdModuleRestore  Create getDiffBetweenCurEnvAndColl procedure from
  code of cmdModuleRestore to analyze a collection content and produce
  differences compared to current environment.

2022-09-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc. stash
  subcmd in NEWS/man/changes

  * testsuite/modulefiles.3/modbad/stash,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.50-cmds/151-module-onlytop.exp: ts: adapt existing
  testfiles for stash sub-command

  * doc/source/modulefile.rst, testsuite/modulefiles/info/commandexp,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/282-info-command.exp,
  testsuite/modules.50-cmds/283-info-command-exp.exp,
  testsuite/modules.61-coll/030-save.exp: ts/doc: add stash test/doc on
  'module-info command'

  * init/Makefile, init/bash_completion.in, init/fish_completion,
  init/tcsh_completion.in, init/zsh-functions/_module.in: init: add stash
  subcmd to completion scripts

  * .aspell.en.pws, tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Add
  'stash' sub-command  Introduce stash sub-command to save current environment
  and restore initial one.  This sub-command cannot be called from a
  modulefile evaluation context.  Add sub-command empty skeleton:
  cmdModuleStash.  Sub-command accepts no argument nor option.

  * .aspell.en.pws, doc/source/design/initial-environment.rst,
  doc/source/design/stash-environment.rst: doc: add stash-environment design
  doc

2022-09-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .cirrus.yml: cirrus: test FreeBSD 13.1 instead of eol 13.0

2022-09-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/lint.00-init/005-init_ts.exp: ts: do not lint lib/config.guess
  generated file

  * .aspell.en.pws, NEWS.rst, testsuite/lint.00-init/005-init_ts.exp: ts:
  temporarily ignore remaining shellcheck reports  Make 'mt lint' pass with
  remaining shellcheck reports on sh, bash and ksh scripts. Waiting for
  another contribution to fix the remaining warnings and notices.  Related:
  #470

  * NEWS.rst, init/profile.sh.in: init: only source sh or bash init if BASH
  var is set  Update profile script for sh-like shells to only source sh or
  bash initialization script when BASH environment variable is found set.
  Fixes #473

2022-09-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * CONTRIBUTING.rst, NEWS.rst: doc: desc. script/mb in CONTRIBUTING

2022-09-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * CONTRIBUTING.rst: doc: desc lint testsuite in CONTRIBUTING

  * .aspell.en.pws, CONTRIBUTING.rst: doc: desc. script/mt utility in
  CONTRIBUTING

  * CONTRIBUTING.rst: doc: desc. quick testsuite mode in CONTRIBUTING

2022-09-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/envmngt.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Update
  autoinit sh code to fix SC2166/SC2086  Apply on auto-generated autoinit code
  for sh-kind shells the same changes than initialization scripts to fix the
  SC2166 and SC2086 issues reported by ShellCheck linter.  Autoinit generated
  code is thus kept in line with initialization script code.

2022-08-31  Lukáš Zaoral <lzaoral@redhat.com>

  * configure: lint(ShellCheck): fix SC2163 warning  According to ShellCheck's
  documentation:  export takes a variable name, but ShellCheck has noticed
  that you give it an expanded variable instead.  Remove $/${} for that, or
  use ${var?} to quiet.  Related: https://www.shellcheck.net/wiki/SC2163
  Related: #470

  * init/profile.sh.in, script/add.modules.in, script/mkroot:
  lint(ShellCheck): fix SC2046 warning  According to ShellCheck's
  documentation:  When command expansions are unquoted, word splitting and
  globbing will occur. This often manifests itself by breaking when filenames
  contain spaces.  Related: https://www.shellcheck.net/wiki/SC2046 Related:
  #470

  * configure, .../example-sessions/bar-defaults.sh,
  .../example-sessions/bar-loads.sh, .../example-sessions/bar-switch.sh,
  .../example-sessions/foo-avail1.sh, .../example-sessions/foo-avail2.sh,
  .../example-sessions/foo-defaults.sh, .../example-sessions/foo-loads.sh,
  .../example-sessions/foo-switch.sh, .../example-sessions/modavail.sh,
  .../example-sessions/modversion.sh, .../example-sessions/ompi-defaults.sh,
  .../example-sessions/ompi-loads1.sh, .../example-sessions/ompi-switch.sh,
  .../example-sessions/ompi-switch.sh.m431, init/bash.in,
  init/bash_completion.in, init/ksh.in, init/sh.in, script/add.modules.in,
  script/commit-msg, script/envml, script/mkroot, script/mt,
  script/pre-commit, testsuite/bin/install_test_sh, testsuite/systest:
  lint(ShellCheck): fix SC2086 info diagnostic  Some variables, that were
  unquoted intentionally were converted to arrays.  According to ShellCheck's
  documentation:  Quoting variables prevents word splitting and glob
  expansion, and prevents the script from breaking when input contains spaces,
  line feeds, glob characters and such.  Related:
  https://www.shellcheck.net/wiki/SC2086 Related: #470

  * configure, doc/example/source-script-in-modulefile/bar-2.1/bar-setup.sh,
  doc/example/source-script-in-modulefile/foo-1.2/foo-setup.sh:
  lint(ShellCheck): fix SC2155 warning  According to ShellCheck's
  documentation:  In the original code, the return value of mycmd in $(mycmd)
  is ignored, and export will instead always return true.  This may prevent
  conditionals, set -e and traps from working correctly.  Related:
  https://www.shellcheck.net/wiki/SC2155 Related: #470

2022-08-26  Lukáš Zaoral <lzaoral@redhat.com>

  * doc/example/source-script-in-modulefile/bar-2.1/bar-setup.sh,
  doc/example/source-script-in-modulefile/foo-1.2/foo-setup.sh:
  lint(ShellCheck): fix SC2128 warning  These occurrences do not cause any
  problems described below but it's better to be verbose that we indeed want
  to access the first array element.  According to ShellCheck's documentation:
  When referencing arrays, $myarray is equivalent to ${myarray[0]} -- it
  results in only the first of multiple elements.  Related:
  https://www.shellcheck.net/wiki/SC2128 Related: #470

  * script/envml, testsuite/cmd.exe: lint(ShellCheck): fix SC2048 warning
  According to ShellCheck's documentation:  Use "$@" (with quotes) to prevent
  whitespace problems.  $* and ${array[*]}, unquoted, is subject to word
  splitting and globbing.  Related: https://www.shellcheck.net/wiki/SC2048
  Related: #470

  * init/bash_completion.in: lint(ShellCheck): fix SC2178 warning  These
  occurrences do not seem to cause any problems described below but let's
  still fix it for the sake of consistency within this script.  According to
  ShellCheck's documentation:  ShellCheck noticed that you have used a
  variable as an array, but then assign it a string.  array=foo is equivalent
  to array[0]=foo, and leaves the rest of the elements unaffected.  Related:
  https://www.shellcheck.net/wiki/SC2178 Related: #470

2022-08-25  Lukáš Zaoral <lzaoral@redhat.com>

  * configure, init/bash.in, init/bash_completion.in, init/ksh.in, init/sh.in,
  script/envml, testsuite/bin/install_test_sh: lint(ShellCheck): fix SC2166
  warning  According to ShellCheck's documentation:  -a and -o  in [ .. ] test
  expressions are not well defined, and can cause incorrect results when
  arguments start with dashes or contain !.  Related:
  https://www.shellcheck.net/wiki/SC2166 Related: #470

  * init/bash_completion.in: lint(ShellCheck): fix SC1035 error  According to
  ShellCheck's documentation:  Bourne shells are very whitespace sensitive.
  Adding or removing spaces can drastically alter the meaning of a script.
  Related: https://www.shellcheck.net/wiki/SC1035 Related: #470

  * script/envml, script/mt: lint(ShellCheck): fix SC2068 error  According to
  ShellCheck's documentation:  Double quotes around $@ and ${array[@]})
  prevent globbing and word splitting of individual elements, while still
  expanding to multiple separate arguments.  Related:
  https://www.shellcheck.net/wiki/SC2068 Related: #470

  * doc/example/compiler-etc-dependencies/example-sessions/common_code.sh,
  init/bash.in, init/bash_completion.in, init/ksh.in, init/profile.sh.in,
  init/sh.in: lint(ShellCheck): fix SC2148 error  According to ShellCheck's
  documentation:  Different shells support different features.  To give
  effective advice, ShellCheck needs to know which shell your script is going
  to run on.  Related: https://www.shellcheck.net/wiki/SC2148 Related: #470

  * init/bash.in, init/ksh.in, init/sh.in: init: add vim modeline to {,b,k}sh
  scripts  ... to enable correct syntax highlighting.

2022-08-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, NEWS.rst: doc: desc. usage and --help work for scripts in
  NEWS

  * script/mtreview: script: add usage msg and --help option on mtreview

  * script/mlprof: script: add usage msg and --help option on mlprof

  * script/mt: script: add usage msg and --help option on mt

2022-08-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp: ts: accept version name with
  '_' char

  * script/mb: script: keep old releases among benched versions in mb  Update
  mb script to skip several releases and be able to run bench or profiling on
  old and recent releases. Versions 4.1, 4.3, 4.5, 4.7 and 5.1 are retained
  for bench mode. 4.5, 4.7 and 5.1 are retained for profile mode.

  * script/mb: script: add usage msg and --help option on mb

  * script/mrel: script: add usage msg and --help option on mrel

  * script/mpub: script: add usage msg and --help option on mpub

2022-08-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, tcl/envmngt.tcl.in, tcl/init.tcl.in, tcl/main.tcl.in,
  tcl/mfinterp.tcl.in, tcl/modeval.tcl, tcl/modfind.tcl.in, tcl/modspec.tcl,
  tcl/report.tcl.in, tcl/subcmd.tcl.in,
  testsuite/lint.00-init/005-init_ts.exp: Fix notices reported by linter on
  tcl source files  All linter reports are now fixed. Remove specific linter
  rule for modulecmd.tcl in lint testsuite.

  * .aspell.en.pws, .github/workflows/linux_tests.yaml: gh: migrate linux
  tests to ubuntu-20.04  ubuntu-18.04 is being deprecated and will be removed
  in a few weeks. For Tcl 8.5 jobs, the Tcl version has to be deployed
  manually.

  * tcl/envmngt.tcl.in, tcl/init.tcl.in, tcl/main.tcl.in, tcl/mfinterp.tcl.in,
  tcl/modfind.tcl.in, tcl/modspec.tcl, tcl/report.tcl.in, tcl/subcmd.tcl.in:
  Fix too long line issues on Tcl source files

  * .github/workflows/lint_tests.yaml: gh: add lint-tests workflow

  * tcl/envmngt.tcl.in, tcl/init.tcl.in, tcl/main.tcl.in, tcl/mfinterp.tcl.in,
  tcl/modfind.tcl.in, tcl/modspec.tcl, tcl/report.tcl.in, tcl/subcmd.tcl.in:
  Fix warnings reported by linter on tcl source files

2022-08-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/coll.tcl.in, tcl/main.tcl.in, tcl/mfinterp.tcl.in, tcl/modspec.tcl,
  tcl/report.tcl.in, tcl/subcmd.tcl.in, tcl/util.tcl: Fix errors reported by
  linter on tcl source files  Use Nagelfar comments to help linter to
  correctly understand dynamic aspects of the code.

  * init/tcl.in: init: fix too long line issues in tcl

  * script/mb, script/mrel, script/nglfar2ccov: script: fix too long line
  issues in mb/mrel/nglfar2ccov

  * script/mlprof, script/mrel, script/mtreview: script: fix lint issues on
  mrel/mlprof/mtreview

  * testsuite/lint.00-init/030-tcl.exp: ts: add tcl script lint tests

  * Makefile: Remove testsyntax Makefile target  testsyntax Makefile target is
  removed. testlint testsuite has to be used instead.

  * testsuite/lint.00-init/022-ksh.exp: ts: add ksh script lint tests

  * testsuite/lint.00-init/021-bash.exp: ts: add bash script lint tests

  * testsuite/lint.00-init/020-sh.exp: ts: add sh script lint tests

  * .aspell.en.pws, .gitignore, Makefile, NEWS.rst, script/mt,
  testsuite/config/unix.exp, testsuite/lint.00-init/005-init_ts.exp,
  testsuite/lint.00-init/006-procs.exp,
  testsuite/lint.00-init/011-save_test_env.exp: ts: add lint testsuite

2022-08-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/readme.txt, contrib/scripts/resetenv, contrib/scripts/resetgnome,
  contrib/template/.aliases, contrib/template/.bash_profile,
  contrib/template/.bashrc, contrib/template/.cshrc,
  contrib/template/.fvwm2rc, contrib/template/.login,
  contrib/template/.logout, contrib/template/.mailcap,
  contrib/template/.mime.types, contrib/template/README.dotfiles,
  contrib/template/resetenv.conf: contrib: remove unmaintained template/script
  content  Remove the contrib template and scripts files as they are not
  maintained since a long time in this repository and seem to be deprecated.

2022-08-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst: doc: desc initial environment in MIGRATING

2022-08-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/changes.rst: doc: fix changed/new features dispatch in changes
  doc

2022-08-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/initial-environment.rst,
  doc/source/design/module-tags.rst, doc/source/design/sticky-modules.rst:
  doc: desc. sticky unload on restore in design notes

  * doc/source/changes.rst: doc: use bullet list for concise desc. in change
  doc

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc. sticky
  unload on restore in NEWS/man/changes

2022-08-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/460-sticky.exp,
  testsuite/modules.50-cmds/462-sticky-corner.exp,
  testsuite/modules.70-maint/440-reset.exp: ts: adapt existing tests for
  sticky unload on restore

  * tcl/mfinterp.tcl.in, tcl/subcmd.tcl.in: Allow unload of sticky modules on
  restore sub-cmd  Allow the unload of sticky modules when restoring
  collection. Goal is to be able to restore designated collection as it was
  saved, thus without the loaded sticky modules. If such collections were
  saved without the sticky modules in it, it means that these sticky modules
  can safely be unloaded when moving to the collection state.  As a result,
  using the --force option is of no use for restore sub-command.  This change
  does not impact super-sticky modules. Such modules cannot be unloaded during
  a restore, even if forced.  With this change, behavior of restore
  sub-command with sticky modules is aligned with Lmod.

2022-08-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/design/initial-environment.rst: doc: add
  initial-environment design notes

2022-08-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/440-reset.exp: ts: add reset_target_state tests
  in 70/440

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc.
  reset_target_state in NEWS/man/changes

2022-08-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.70-maint/220-config.exp: ts: test reset_target_state
  config option

  * init/Makefile, init/fish_completion, init/zsh-functions/_module.in: init:
  add reset_target_state config to completion script

  * tcl/init.tcl.in, tcl/subcmd.tcl.in: Add reset_target_state configuration
  option  Add reset_target_state configuration option that defines the
  environment state restored by the reset sub-command. Equals __init__ by
  default, which means reset restore the initial environment by default.
  Other valid values are __purge__, which means target state is purged
  environment, and any existing collection name.

2022-08-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst,
  testsuite/modules.61-coll/060-saveshow.exp: doc: desc module saveshow when
  no default in NEWS/man/changes

  * testsuite/modules.61-coll/060-saveshow.exp: ts: update/add tests for
  'module saveshow' behavior

  * tcl/subcmd.tcl.in: Show initial env when no default collection exists
  Update saveshow sub-command to display initial environment when no specific
  collection is asked and default collection does not exist.

  * testsuite/example/initrc.in, testsuite/modules.70-maint/120-autoinit.exp:
  ts: test 'module restore' without arg in initrc

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc module
  restore when no default in NEWS/man/changes

  * testsuite/modules.61-coll/040-restore.exp: ts: update/add tests for
  'module restore' behavior

  * tcl/subcmd.tcl.in: Restore initial env when no default collection exists
  Update restore sub-command to restore initial environment when no specific
  collection is asked and default collection does not exist.

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc. module
  restore __init__ in NEWS/man/changes

  * testsuite/modules.70-maint/310-sh-to-mod.exp: ts: fix binpath add
  detection in 70/310

  * tcl/main.tcl.in, tcl/report.tcl.in: Same special treatment for reset than
  restore subcmd  Reports loads/unloads like restore sub-command. No auto
  unload of modules if auto_handling is disabled.

  * testsuite/modulefiles.3/reset/1, testsuite/modulefiles.3/reset/2,
  testsuite/modules.70-maint/440-reset.exp: ts: add auto unload test during
  reset sub-cmd in 70/440

2022-08-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/440-reset.exp: ts: add restore __init__ tests
  in 70/440

  * testsuite/example/initrc.in, testsuite/modulefiles.3/foo/.modulerc,
  testsuite/modules.70-maint/120-autoinit.exp,
  testsuite/modules.70-maint/440-reset.exp: ts: add reset sub-cmd tests

2022-08-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/initrc.in, testsuite/modulefiles.3/variant/1.0,
  testsuite/modules.70-maint/120-autoinit.exp: ts: add autoinit tests for
  __MODULES_LMINIT

  * testsuite/modules.70-maint/210-clear.exp: ts: add clear tests for
  __MODULES_LMINIT

  * .github/workflows/linux_tests.yaml: gh: add missing xrdb tool to test
  x-resource on bionic

  * testsuite/modules.00-init/005-init_ts.exp: ts: add X11 setup state info to
  test log

2022-08-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.70-maint/120-autoinit.exp: ts: adapt autoinit tests for
  __MODULES_LMINIT  Fix several issues in 70/120 test case on the way.

  * .aspell.en.pws, tcl/coll.tcl.in, tcl/modfind.tcl.in, tcl/subcmd.tcl.in:
  Core code for cmdModuleReset  Implement reset sub-command as a 'module
  restore __init__'. Where __init__ designates the virtual init collection
  made of the initial environment state described in __MODULES_LMINIT.
  readCollectionContent has been split to create parseCollectionContent
  procedure which analyzes collection content passed as argument.  When
  __init__ collection is designated, cmdModuleRestore do not check collection
  files but parseCollectionContent based on value fetched from
  __MODULES_LMINIT environment variable.

  * testsuite/modulefiles.3/modbad/reset,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.50-cmds/151-module-onlytop.exp: ts: add tests for
  mod-to-sh sub-command

  * doc/source/modulefile.rst, testsuite/modulefiles/info/commandexp,
  testsuite/modules.50-cmds/282-info-command.exp,
  testsuite/modules.50-cmds/283-info-command-exp.exp: ts/doc: add reset
  test/doc on 'module-info command'

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc. reset
  subcmd in NEWS/man/changes

  * .aspell.en.pws, tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Add
  'reset' sub-command  Introduce reset sub-command to restore initial
  environment state.  This sub-command cannot be called from a modulefile
  evaluation context.  Add sub-command empty skeleton: cmdModuleReset.
  Sub-command accepts no argument nor option.

2022-08-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/Makefile, init/bash_completion.in, init/fish_completion,
  init/tcsh_completion.in, init/zsh-functions/_module.in: init: add reset
  subcmd to completion scripts

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc.
  __MODULES_LMINIT in NEWS/man/changes

  * .aspell.en.pws, tcl/modfind.tcl.in, tcl/subcmd.tcl.in: Record init state
  in __MODULES_LMINIT  During the autoinit sub-command, record the initial
  loaded state (state obtained after evaluating modulespath and initrc
  initialization files) in the __MODULES_LMINIT environment variable.  The
  initial loaded state is formed as a collection content, describing the
  enabled modulepaths and the loaded modules with the tags applied to these
  modules.  __MODULES_LMINIT is a colon-separated list. Each entry
  corresponding to a 'module use' or 'module load' collection line.

2022-08-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/coll.tcl.in, tcl/main.tcl.in, tcl/mfinterp.tcl.in, tcl/modeval.tcl,
  tcl/modfind.tcl.in, tcl/subcmd.tcl.in,
  testsuite/modules.00-init/120-siteconfig.exp: Fetch loaded mod props with
  getLoadedModulePropertyList  Create the getLoadedModulePropertyList
  procedure to fetch the different loaded module properties.
  getLoadedModulePropertyList replaces the specific procedure used for each
  property kind.

2022-08-24  Jan Macku <jamacku@redhat.com>

  * .github/workflows/differential_shellcheck.yml: ci(lint): add shell linter
  - Differential ShellCheck  It performs differential ShellCheck scans and
  report results directly in pull request.  documentation:
  https://github.com/redhat-plumbers-in-action/differential-shellcheck

2022-08-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/modulefile.rst: doc: add shell support section in
  modulefile man

2022-08-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * README.md, doc/source/changes.rst, doc/source/index.rst,
  doc/source/module.rst, doc/source/modulefile.rst: doc: fix missing ref to
  cmd shell support

2022-08-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst: doc: desc changes on --all/--force options in man

  * doc/source/module.rst: doc: reword --auto/--no-auto option desc. in man
  --auto and --no-auto options are global to all sub-commands evaluating
  modulefile in load or unload mode. Rewrite the description of these option
  in module(1) man not to update them each time a new load or unload
  sub-command is introduced (as --auto and --no-auto are not changed).

  * testsuite/modules.61-coll/021-savelist-search.exp: ts: add savelist --all
  tests

2022-08-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc. --all
  option on savelist in NEWS/man/changes

  * tcl/coll.tcl.in, tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in:
  List coll from any target with --all opt on savelist  Add support for --all
  command-line option for savelist sub-command. When set, all collections are
  reported and not only those for currently defined collection target.

2022-08-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, tcl/subcmd.tcl.in, testsuite/modules.00-init/140-color.exp:
  Highlight all savelist subcmd search patterns  Refactor on the way a little
  bit cmdModuleSavelist.

  * NEWS.rst, tcl/report.tcl.in, tcl/subcmd.tcl.in,
  testsuite/modules.00-init/140-color.exp: Highlight all list subcmd search
  patterns

  * testsuite/modules.61-coll/021-savelist-search.exp,
  testsuite/modules.70-maint/290-json.exp: ts: test pattern search on savelist
  sub-cmd

2022-08-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc.
  savelist filtering in NEWS/changes/man

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.50-cmds/152-module-emptyarg.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.61-coll/020-savelist.exp,
  testsuite/modules.61-coll/080-access-coll.exp,
  testsuite/modules.70-maint/190-emptyarg.exp,
  testsuite/modules.70-maint/350-term_width.exp: ts: adapt existing tests now
  savelist accepts args

  * tcl/init.tcl.in, tcl/subcmd.tcl.in: Add search capabilities to savelist
  subcmd  When one or multiple strings are passed to the savelist sub-command,
  only output the collections that match at least one of this string (OR
  operation).  Sub-command header message is adapted when strings are passed
  to the sub-command. However same header message is reported if there is no
  saved collection to report from the start.  Search capabilities rely on the
  modEq comparison procedure, so it takes into account the search_match mode
  (starts-with/contains) and the insensitive case search mode.  Icase mode is
  set to search by default for savelist sub-command.

  * tcl/subcmd.tcl.in: Use coll name/file array rather list in
  cmdModuleSavelist

2022-08-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Allow search match
  option on savelist subcmd  Allow to pass the search match options (-S/-C) to
  the savelist sub-command.

  * tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Allow collection
  name as argument to savelist subcmd  Allow the savelist sub-command to
  receive collection name as argument.

2022-08-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modspec.tcl, tcl/subcmd.tcl.in: Unset mod spec on source subcmd if
  file exists  In case module specification corresponds to a full path name
  file, unset parsed module specification on source sub-command. It is done
  not to confuse specific character in file path name (like '+') with module
  variant specification.

2022-07-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/modulefile.rst: doc: clarify set-alias only define
  shell alias

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/170-cwd.exp,
  testsuite/modules.70-maint/090-source.exp: ts: add avail modfile source
  tests in 70/090

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc. arg
  update on source subcmd in changes/man/news

  * tcl/main.tcl.in, tcl/subcmd.tcl.in: Allow module to be specified on source
  subcmd  Update source sub-command to accept module specification as
  argument. File path stay the main specification kind. Which means if a file
  foo/1.0 exists, this file is sourced and not the modulefile foo/1.0 in
  enabled modulepath.  Fixes #424.

2022-08-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modspec.tcl: Record raw arg with parsed module spec  Update module
  specification parsing to record the raw argument translated by specification
  analysis.  Add getRawArgumentFromVersSpec procedure to fetch this raw spec
  from recorded analyzed module specification.

2022-07-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/envmngt.tcl.in, tcl/init.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in:
  Check state is defined before unset in unsetState

  * testsuite/config/base-config.exp, testsuite/modulefiles.3/mod-to-sh/1.0,
  testsuite/modulefiles.3/mod-to-sh/1.1,
  testsuite/modulefiles.3/mod-to-sh/2.0,
  testsuite/modulefiles.3/modbad/mod-to-sh,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.50-cmds/151-module-onlytop.exp,
  testsuite/modules.70-maint/430-mod-to-sh.exp: ts: add tests for mod-to-sh
  sub-command

2022-07-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst, NEWS.rst: doc: desc mod-to-sh in NEWS/MIGRATING

2022-07-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst: doc: desc. mod-to-sh subcmd in module man

  * NEWS.rst, doc/source/module.rst: doc: fix subcmd list using
  --auto/--no-auto/--force opts

  * doc/source/design/add-new-config-option.rst,
  doc/source/design/add-new-sub-command.rst,
  .../design/advanced-module-version-specifiers.rst,
  doc/source/design/control-mode-behaviors.rst,
  .../design/default-latest-version-specifiers.rst,
  doc/source/design/extended-default.rst,
  doc/source/design/hide-or-forbid-modulefile.rst,
  doc/source/design/insensitive-case.rst,
  doc/source/design/lmod-tcl-modulefile-compat.rst,
  doc/source/design/module-selection-contexts.rst,
  doc/source/design/module-tags.rst,
  doc/source/design/output-configuration.rst,
  .../design/source-shell-script-in-modulefile.rst,
  doc/source/design/sticky-modules.rst, doc/source/design/variants.rst: doc:
  fix indent in design documents

  * doc/source/design/add-new-config-option.rst,
  doc/source/design/add-new-sub-command.rst,
  doc/source/design/advanced-module-version-specifiers.rst,
  doc/source/design/control-mode-behaviors.rst,
  doc/source/design/default-latest-version-specifiers.rst,
  doc/source/design/extended-default.rst,
  doc/source/design/hide-or-forbid-modulefile.rst,
  doc/source/design/insensitive-case.rst,
  doc/source/design/lint-sub-command.rst,
  doc/source/design/lmod-tcl-modulefile-compat.rst,
  doc/source/design/magic-cookie-check.rst,
  doc/source/design/module-selection-contexts.rst,
  doc/source/design/module-tags.rst,
  doc/source/design/output-configuration.rst,
  doc/source/design/shell-completion.rst,
  doc/source/design/source-shell-script-in-modulefile.rst,
  doc/source/design/sticky-modules.rst, doc/source/design/variants.rst: doc:
  add vim settings at end of design documents

  * .aspell.en.pws, doc/source/cookbook/compiler-etc-dependencies.rst,
  doc/source/cookbook/ensure-user-qualify-modules.rst,
  doc/source/cookbook/expose-procs-vars-to-modulefiles.rst,
  doc/source/cookbook/hide-and-forbid-modules.rst,
  doc/source/cookbook/inhibit-report-info.rst,
  doc/source/cookbook/log-module-commands.rst,
  doc/source/cookbook/module-info-name-return-basename.rst,
  doc/source/cookbook/modulefiles-in-git.rst,
  doc/source/cookbook/modulepaths-persist-over-sudo.rst,
  doc/source/cookbook/new-features-without-breaking-old-module.rst,
  doc/source/cookbook/reduce-io-load.rst,
  doc/source/cookbook/source-script-in-modulefile.rst,
  doc/source/cookbook/sticky-modules.rst,
  doc/source/cookbook/test-modulefiles.rst,
  doc/source/cookbook/tips-for-code-reuse.rst,
  doc/source/cookbook/top-priority-values.rst,
  doc/source/cookbook/unload-firstly-loaded.rst: doc: add vim settings at end
  of cookbook documents

  * doc/source/cookbook/tips-for-code-reuse.rst: doc: fix trailing wspace &
  list ident in tips-for-code-reuse

2022-07-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/design/mod-to-sh-sub-command.rst: doc: add mod-to-sh
  subcmd design notes

  * NEWS.rst: doc: desc. lint-sub-command design notes in NEWS

2022-07-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/210-clear.exp,
  testsuite/modules.70-maint/280-ml.exp: ts: update clear subcmd tests as only
  set vars are unset

  * testsuite/modules.00-init/100-pager.exp,
  testsuite/modules.00-init/120-siteconfig.exp,
  testsuite/modules.00-init/150-access-init.exp,
  testsuite/modules.70-maint/070-display.exp: ts: adapt existing tests to new
  shelltype state setup

  * tcl/subcmd.tcl.in: Silence message report on mod-to-sh subcmd  When
  performing a mod-to-sh sub-command make message report silent not to mix
  these messages with the produced shell code that will be output on the
  message channel.  If a debugging verbosity is defined (trace mode or above),
  message report is left as is.

  * tcl/envmngt.tcl.in: Filter Modules-specific env var from mod-to-sh result
  When running modulefile evaluation for mod-to-sh sub-command, removes all
  Modules-specific environment variable from result to only report the
  environment changes done by modulefile, not the Modules load context.

2022-07-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/envmngt.tcl.in, tcl/subcmd.tcl.in: Get list of Modules-specific env
  var in glob form  Add getModulesEnvVarGlobList procedure to get all
  Modules-specific environment variable in glob form.  Update clear and state
  sub-command to rely on this procedure.  With this change clear sub-command
  only unset Modules-specific environment variables that are set.

  * NEWS.rst, tcl/subcmd.tcl.in: Clear pushenv stacks on clear subcmd

  * tcl/envmngt.tcl.in, tcl/subcmd.tcl.in: Core code for cmdModuleModToSh  Add
  code for mod-to-sh sub-command. Introduce modtosh_real_shell shell to save
  evaluation shell set for modulecmd.tcl. Then shell set for mod-to-sh is set
  as target shell for shell code production.  Modulefiles specified are loaded
  through cmdModuleLoad. Generated shell code is then sent to the report
  message channel (stderr) by renderSettings. Shell code is then cleared and
  modulecmd.tcl evaluation shell is restored to get final evaluation status on
  regular shell code output channel (stdout).

  * tcl/envmngt.tcl.in, tcl/main.tcl.in: Rename cleanupAndExit into
  flushAndExit

  * tcl/envmngt.tcl.in, tcl/init.tcl.in, tcl/main.tcl.in: Deduce shelltype
  state value from shell state  Add initStateShellType procedure to set
  shelltype state when first retrieving its value (with getState). shelltype
  is set based on value set for shell state.

2022-07-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/main.tcl.in, tcl/report.tcl.in: Move report msg flush in dedicated
  proc  Create reportFlush, procedure that output the final report messages,
  flush the message channel and close it. Make cleanupAndExit procedure call
  reportFlush rather implementing these actions locally.

  * tcl/envmngt.tcl.in, tcl/main.tcl.in, tcl/mfinterp.tcl.in: Output produced
  shell code in one puts call  Instead of outputting shell code to sdtout for
  each line, collect all produced shell code in a list variable (g_shcode_out)
  and output all the code in a single puts call at the end of module command
  execution.  Create a specific renderFlush procedure to make the puts to
  stdout as output could occur after renderSettings but also after
  reportErrorAndExit and the exit catch branch in the main procedure.
  renderFlush is called in cleanupAndExit procedure, as it is always run in
  the end of the execution whatever if everything goes well or if error
  occurs.  Code of the putsModfileCmd procedure is also adapted to build list
  of message to output to stdout with a flag to know if end-of-line should be
  added at end of message. Previously this procedure was listing arguments to
  directly pass to puts calls.

2022-07-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/modulefile.rst, testsuite/modulefiles/info/command,
  testsuite/modulefiles/info/commandexp,
  testsuite/modules.50-cmds/282-info-command.exp,
  testsuite/modules.50-cmds/283-info-command-exp.exp: ts/doc: add mod-to-sh
  test/doc on 'module-info command'

2022-07-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/add-new-sub-command.rst, doc/source/modulefile.rst: doc:
  desc. subcmd in modulefile(4) if avail from this ctx

  * doc/source/changes.rst: doc: desc. mod-to-sh in changes

  * doc/source/design/add-new-sub-command.rst: doc: add subcmd to linter db if
  callable from modfile

  * init/Makefile, init/bash_completion.in, init/fish_completion,
  init/tcsh_completion.in, init/zsh-functions/_module.in: init: add mod-to-sh
  subcmd to completion scripts

  * tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Add 'mod-to-sh'
  sub-command  Introduce mod-to-sh sub-command to output shell code
  corresponding to the environment changes of designated modulefiles.  This
  sub-command cannot be called from a modulefile evaluation context.  Add
  sub-command empty skeleton: cmdModuleModToSh.  Sub-command accepts --icase,
  --auto/--no-auto and --force options.  Fixes #447.

  * CONTRIBUTING.rst: doc: fix misplaced anchor in CONTRIBUTING

2022-07-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, Makefile, NEWS.rst, doc/Makefile, init/Makefile: install:
  use install rather mkdir or cp  Use install command rather mkdir or cp to
  apply regular file mode when installing Modules. A specific umask
  configuration set in the current environment will not impact modes set on
  installed files.  Follow same approach than Makefiles generated by
  autotools, with an INSTALL Makefile variable.

2022-07-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, MIGRATING.rst: doc: desc. lint subcmd and options in
  MIGRATING  Closes #451.

2022-07-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc. lint subcmd and options in NEWS

  * Makefile, tcl/subcmd.tcl.in: Disable nagelfar syntaxdb/plugin usage if
  addons disabled

  * .aspell.en.pws, doc/source/design/lint-sub-command.rst: doc: desc. lint
  subcmd in design

2022-07-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/rpm/environment-modules.spec.in: rpm: recommends nagelfar
  installation  Now nagelfar is available on Fedora and EPEL, recommends its
  installation to be able to lint modulefiles.

2022-07-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/add-new-sub-command.rst: doc: update linter scripts when
  adding new subcmd

2022-07-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/changes.rst, doc/source/module.rst: doc: desc lint subcmd in
  man/changes

2022-07-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/030-options.exp,
  testsuite/modules.70-maint/420-lint.exp: ts: add module lint install test

2022-07-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile: install: add rules to deploy global rc linter plugin

  * contrib/nagelfar/plugin_globalrc.tcl, tcl/subcmd.tcl.in: Lint global rc
  file specifically  Global rc file are evaluated as modulefile but it is not
  recommended to use commands that change user environment in such file. When
  linting global rc file, the modulefile syntax database is used but a
  specific plugin is set to warn against non-recommended usages.

2022-07-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/main.tcl.in, tcl/modfind.tcl.in, tcl/subcmd.tcl.in: Lint global RC
  files  When no argument is provided to lint sub-command, also lint all
  existing and readable global RC files. When arguments are provided to lint,
  test if resolved files are global RC files. If so, lint them as modulerc
  files instead of modulefile.  The getGlobalRcFileList procedure has been
  created from code present in runModulerc procedure. The new procedure return
  the list of existing and readable global RC files.

2022-07-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/subcmd.tcl.in: Detect whether file to lint is modulefile or modulerc
  When a file path is provided as argument, detect if it is a modulerc or a
  modulefile to accurately lint this file.

  * .aspell.en.pws, INSTALL.rst: doc: desc.
  --nagelfardatadir/--enable-nagelfar-addons

  * contrib/rpm/environment-modules.spec.in: rpm: install Modules-specific
  Nagelfar linter addons

  * Makefile, Makefile.inc.in, configure, tcl/subcmd.tcl.in: install: add
  --nagelfardatadir/--enable-nagelfar-addons  Add --nagelfardatadir and
  --enable-nagelfar-addons installation option to control whether or not
  Modules-specific Nagelfar files need to be installed and in what location.

2022-06-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/lint/.modulerc, testsuite/modulefiles.3/lint/1.0,
  testsuite/modulefiles.3/lint/1.1, testsuite/modulefiles.3/lint/1.2,
  testsuite/modulefiles.3/lint/1.3, testsuite/modulefiles.3/lint/1.4,
  testsuite/modulefiles.3/lint/2.0, testsuite/modulefiles.3/modbad/lint,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/151-module-onlytop.exp,
  testsuite/modules.70-maint/420-lint.exp: ts: add tests for lint sub-command

2022-07-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/subcmd.tcl.in: Use specific-plugin when linting with Nagelfar  Use the
  specific plugin to lint modulefile or the one to lint modulerc when Tcl
  linter is Nagelfar.

  * contrib/nagelfar/plugin_modulefile.tcl,
  contrib/nagelfar/plugin_modulerc.tcl: nagelfar: add plugins to lint
  modulefile/modulerc  Create a Nagelfar plugin to lint modulefile and another
  one to lint modulerc. These plugins help to report usage of deprecated, not
  implemented or not recommended commands or variables. Also help to handle
  --option=value argument form.

2022-06-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/modulefiles/module-git, contrib/modulefiles/use.own: contrib: fix
  lint warning on example modulefiles

  * tcl/subcmd.tcl.in: Use Nagelfar syntax db located in contrib directory

  * contrib/nagelfar/syntaxdb_modulefile.tcl,
  contrib/nagelfar/syntaxdb_modulerc.tcl: Add specific syntaxdb for modulefile
  and modulerc  Add Nagelfar syntax databases to lint modulefile and another
  one to lint modulerc.

2022-06-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/subcmd.tcl.in: Lint modulerc files when no arg provided  In addition
  to the modulefiles available from enabled modulepaths, also lint the
  modulerc files from these modulepaths.  Set specific command for linting
  modulerc files, with a different syntax db file when Nagelfar is used.

  * tcl/subcmd.tcl.in: Use syntax database when linting with Nagelfar  When
  Tcl linter is Nagelfar, use a specific syntax database to lint modulefiles.

  * .aspell.en.pws, tcl/subcmd.tcl.in: Lint all avail modfile when no arg
  provided  When no argument is provided to the lint sub-command, resolve all
  modulefiles that current user has access to and lint all these files.
  Update cmdModuleLint to first gather the list of all files to lint, then
  lint these files.

2022-06-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .github/workflows/linux_tests.yaml: gh: add --with-tcl-linter on a test
  case

2022-06-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/report.tcl.in, tcl/subcmd.tcl.in: Move linter output report in
  dedicated proc  Create displayLinterOutput procedure to handle the parsing
  and output of each linter messages. Current code handles specific output
  from Nagelfar linter and generic error report for other programs set as
  linter.

  * configure: install: warning if tcllinter program not found

  * INSTALL.rst, doc/source/module.rst: doc: desc --with-tcl-linter-opts in
  INSTALL/man

  * testsuite/modules.70-maint/220-config.exp: ts: adapt tcl_linter tests for
  --with-tcl-linter-opts

  * Makefile, Makefile.inc.in, configure, site.exp.in, tcl/init.tcl.in:
  install: add --with-tcl-linter-opts configure option  Introduce the
  --with-tcl-linter-opts configure option to choose at installation time the
  options to pass to the tcl linter program. Default option is ''.

2022-06-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.70-maint/220-config.exp: ts: test tcl_linter config option

  * doc/source/changes.rst, doc/source/module.rst: doc: desc.
  MODULES_TCL_LINTER in man/changes

  * INSTALL.rst: doc: desc --with-tcl-linter in INSTALL

  * INSTALL.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc.
  tcl_linter config in man/changes

  * init/Makefile, init/fish_completion, init/zsh-functions/_module.in: init:
  add tcl_linter config to completion script

  * Makefile, Makefile.inc.in, configure, site.exp.in, tcl/init.tcl.in:
  install: add --with-tcl-linter configure option  Introduce the
  --with-tcl-linter configure option to choose at installation time the
  default program command to use to lint modulefiles. Default Tcl linter is
  'nagelfar.tcl'.

  * tcl/init.tcl.in, tcl/subcmd.tcl.in: Introduce tcl_linter configuration
  option  Add tcl_linter option to configure the program to use by lint
  sub-command to lint modulefiles. When configuration is modified it sets the
  MODULES_TCL_LINTER environment variable.

2022-06-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, tcl/subcmd.tcl.in: Parse and format linter output  Output
  linter output under a *Linting* message block. Parse each output line to
  produce NOTICE, WARNING or ERROR report messages.

2022-06-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, tcl/subcmd.tcl.in: Lint every modulefile passed as
  argument  Update cmdModuleLint to resolve each argument and find
  corresponding modulefile. Pass these modulefile to Nagelfar to lint them.
  In this initial code, Nagelfar is expected to be found at
  nagelfar/nagelfar.tcl and its execution output is sent to the terminal.

2022-06-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/Makefile, init/bash_completion.in, init/fish_completion,
  init/tcsh_completion.in, init/zsh-functions/_module.in: init: add lint
  subcmd to completion scripts

  * .aspell.en.pws, tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in:
  Introduce 'lint' sub-command  Add the lint sub-command to check syntax of
  modulefiles.  Initial commit which adds empty cmdModuleLint procedure and
  add code to reach it through module procedure.  General sub-command
  properties: * shortcut name: none * accepted options: --all, --icase *
  expected number of argument: 0 to N * accept boolean variant specification:
  no * parse module version specification: yes * fully read modulefile when
  checking validity: no * only called from top level: yes

2022-07-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc protected_envvars in NEWS  Fixes #429.

2022-07-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .github/workflows/windows_tests.yaml: gh: fix missing liblapack0 dep for R
  pkg on Cygwin

  * .cirrus.yml: cirrus: update to python39 on FreeBSD-13

2022-06-08  Adrien Cotte <adrien@cotte.com>

  * testsuite/modulefiles.3/protect/1.0, testsuite/modulefiles.3/protect/2.0,
  .../modules.70-maint/410-protected_envvars.exp: ts: add 70/410
  protected_envvars

2022-03-04  Adrien Cotte <adrien@cotte.com>

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.70-maint/220-config.exp: ts: test protected_envvars config
  option

2022-02-21  Adrien Cotte <adrien@cotte.com>

  * init/zsh-functions/_module.in: Zsh completion support for
  protected_envvars config

  * init/fish_completion: Fish completion support for protected_envvars config

  * init/Makefile: Bash completion support for protected_envvars config

  * .aspell.en.pws, INSTALL.rst, doc/source/changes.rst,
  doc/source/module.rst: doc: desc. protected_envvars configuration

  * tcl/envmngt.tcl.in, tcl/init.tcl.in: Add protected_envvars configuration
  option  Add the protected_envvars configuration option that prevents choosen
  environment variables to be set or unset by Module commands.

2022-06-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, NEWS.rst, tcl/mfinterp.tcl.in: Fix source-sh/sh-to-mod
  when fish regex-easyesc is on  Fix source-sh modulefile command and
  sh-to-mod sub-command when used with a fish shell script when the
  regex-easyesc fish option is enabled. This option has been introduced in
  fish 3.1 and is turned on by default starting fish 3.5.  Fixes #463.

  * NEWS.rst: doc: desc. enclose install paths work in NEWS

2022-06-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/Makefile: install: create etcdir from init Makefile if used

2022-06-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/_static/literal_block.css,
  doc/source/_static/rtd_literal_block.css, doc/source/conf.py: doc: fix css
  config for sphinx >= 3.5  Use html_css_files configuration option introduced
  in Sphinx 1.8 to setup CSS in a more conventional way. Also fix
  pre.literal-block specific styling as the 'section' div is not used anymore
  in newer Sphinx versions.

2022-06-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .cirrus.yml: cirrus: test install path containing space char  Transform
  the second FreeBSD test case into a Ubuntu testcase, running on last LTS
  release. For this test case, installation is made over a path containing a
  whitespace character.  No specific quarantine setup with this test case, as
  it is not compatible with installation in path containing a whitespace
  character.

2022-06-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/bin/install_test_csh, testsuite/bin/install_test_fish,
  testsuite/bin/install_test_sh, testsuite/bin/install_test_tcl,
  testsuite/config/unix.exp, testsuite/install.00-init/005-init_ts.exp,
  testsuite/install.00-init/030-options.exp,
  testsuite/install.00-init/060-quar.exp,
  testsuite/install.00-init/080-args.exp: ts: fix install tests if space char
  in install path

2022-06-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/envmngt.tcl.in: Update autoinit produced code to enclose install path
  Update code generated by the autoinit sub-command to enclose all references
  to installation path to cope with an installation done in a path containing
  whitespace character.  Enclosing modulecmd.tcl installation path this way is
  not effective with the quarantine mechanism that implies a double shell code
  evaluation. So it is advised not to install Modules in a path containing a
  whitespace character if the quarantine mechanism is needed.

2022-06-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/config/unix.exp, testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/120-siteconfig.exp,
  testsuite/modules.00-init/140-color.exp,
  testsuite/modules.50-cmds/400-source-sh.exp,
  testsuite/modules.70-maint/120-autoinit.exp,
  testsuite/modules.70-maint/310-sh-to-mod.exp: ts: fix tests if space char in
  install location path

  * Makefile, doc/Makefile, init/Makefile: install: enclose install path refs
  in Makefiles

  * init/bash.in, init/cmake.in, init/csh.in, init/fish.in, init/ksh.in,
  init/perl.pm.in, init/profile.csh.in, init/profile.sh.in, init/r.R.in,
  init/ruby.rb.in, init/sh.in, init/tcl.in, init/tcsh_completion.in,
  init/zsh.in: init: enclose installation path references  Update
  initialization, profile and completion scripts to enclose all references to
  the installation paths.  Enclosing modulecmd.tcl installation path this way
  is not effective with the quarantine mechanism that implies a double shell
  code evaluation. So it is advised not to install Modules in a path
  containing a whitespace character if the quarantine mechanism is needed.

  * contrib/modulefiles/modules.in, contrib/modulefiles/version.in,
  script/add.modules.in: contrib,script: enclose installation path references
  Update add.modules script and example modulefiles to enclose all references
  to the installation paths.

  * tcl/init.tcl.in, tcl/main.tcl.in, tcl/subcmd.tcl.in: Enclose all
  installation path references  Fix modulecmd.tcl to enclose all references to
  an installation path. These references are thus robust in case a space
  character is part of the installation location.

  * NEWS.rst: doc: desc. init scripts > autoinit migration work

  * .github/workflows/linux_tests.yaml: gh: update test case with disabled
  bin/manpath config

2022-06-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/120-autoinit.exp: ts: test source of shell
  completion during autoinit

  * testsuite/modules.70-maint/120-autoinit.exp: ts: add autoinit MANPATH
  setup tests

2022-06-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .cirrus.yml: cirrus: use leap 15.3 to get python-Sphinx

2022-06-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * site.exp.in, testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/400-source-sh.exp,
  testsuite/modules.70-maint/120-autoinit.exp,
  testsuite/modules.70-maint/310-sh-to-mod.exp: ts: update tests now autoinit
  sets PATH/MANPATH/etc

  * Makefile, init/Makefile, init/zsh.in, tcl/subcmd.tcl.in: init: setup zsh
  FPATH through autoinit command  Add zsh FPATH setup in autoinit command
  instead of zsh shell initialization script. This way all the shell setup is
  gathered in the autoinit process. What is left in initialization script is
  the code to properly call the autoinit process.  Fixes #462.

  * Makefile, init/Makefile, init/bash.in, init/csh.in, init/fish.in,
  tcl/subcmd.tcl.in: init: setup shell completion through autoinit command
  Add shell completion setup in autoinit command instead of shell
  initialization scripts. Use this way one modulecmd.tcl internal code instead
  of shell code for every shell having some completion to source (bash, tcsh,
  fish).  Fixes #462.

2022-06-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile, init/Makefile, init/bash.in, init/csh.in, init/fish.in,
  init/ksh.in, init/sh.in, init/zsh.in, tcl/subcmd.tcl.in: init: setup MANPATH
  through autoinit command  Add MANPATH setup in autoinit command instead of
  shell initialization scripts. Use this way one modulecmd.tcl internal code
  instead of shell code for every shell requiring to setup MANPATH with
  Modules binaries location (sh, bash, ksh, zsh, csh, tcsh, fish).  Fixes
  #462.

2022-06-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile, init/Makefile, init/bash.in, init/csh.in, init/fish.in,
  init/ksh.in, init/sh.in, init/zsh.in, tcl/subcmd.tcl.in: init: setup PATH
  through autoinit command  Add PATH setup in autoinit command instead of
  shell initialization scripts. Use this way one modulecmd.tcl internal code
  instead of shell code for every shell requiring to setup PATH with Modules
  binaries location (sh, bash, ksh, zsh, csh, tcsh, fish).  Fixes #462.

  * init/bash.in, tcl/envmngt.tcl.in: Export module bash functions directly
  through autoinit  Export the module, _module_raw and ml bash shell functions
  directly through the autoinit sub-command process rather within the bash
  shell initialization script.  Cannot apply the same change to the sh shell
  when it is bash launched as sh, since we cannot tell in the modulecmd.tcl
  execution that the current sh shell is bash (as BASH environment variable is
  not exported to sub-shells).  Fixes #462.

2022-05-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.70-maint/410-timer.exp: ts: add --timer tests in 70/410

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc.
  --timer option in NEWS/changes/man

  * testsuite/modules.00-init/100-pager.exp,
  testsuite/modules.00-init/120-siteconfig.exp,
  testsuite/modules.00-init/150-access-init.exp: ts: adapt existing tests for
  timer state introduction

2022-05-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/mfinterp.tcl.in, tcl/modspec.tcl, tcl/report.tcl.in: Report duration
  of each proc in timer debug mode  When --timer option is enabled and
  verbosity level is higher or equal to verbose, report trace of each
  procedure executed with their duration. All regular debug messages are
  replaced by these timer trace messages.

2022-05-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, tcl/init.tcl.in, tcl/main.tcl.in, tcl/report.tcl.in:
  Introduce --timer option  Add --timer global option to report execution time
  in milliseconds at the end.  Set start time in timer_start global variable
  when --timer is set. Also enable timer state, to know later on that timer
  mode has been asked. Timer report is produced at the and, in last run
  procedure: cleanupAndExit.  Report is shown at any verbosity level.  Timer
  reports are kind of debug information, thus they also use the 'db' sgr key
  to get graphically enhanced.  No need for a dummy reportTimer procedure like
  for reportDebug, to use to gather all messages prior error report
  initialization, as reportTimer is always called after error report being
  initialized.

2022-05-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst: doc: describe Optional requirements in MIGRATING

  * testsuite/modulefiles.3/optional/1.0,
  testsuite/modules.50-cmds/465-tag-opt.exp,
  testsuite/modules.50-cmds/550-optional-opt.exp,
  testsuite/modules.70-maint/240-icase.exp: ts: test misplaced/invalid prereq
  option in 50/550

  * NEWS.rst, tcl/mfinterp.tcl.in: Error on misplaced/invalid options on
  prereq commands  Update prereq command parsing to raise error in case of an
  invalid option or a misplaced one.

  * testsuite/modules.50-cmds/550-optional-opt.exp: ts: adapt optional tests
  as eval failure are not reported

  * tcl/main.tcl.in, tcl/mfinterp.tcl.in, tcl/modeval.tcl: No report of eval
  error of optional requirement  Do not report the evaluation error of
  optional requirements. Proceed like on a prereq-any command, when some
  evaluation fails but one succeed.  Update the loadRequirementModuleList
  procedure by adding an argument named 'optional' to know if current load
  attempt is mandatory or not.

2022-05-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/mfinterp.tcl.in: Disable auto loading on always-load in DepRe context
  Disable auto-loading on always-load sub-command when evaluated in a
  Dependency Reload context.

2022-05-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/foo/1.0, testsuite/modulefiles.3/optional/1.0,
  testsuite/modulefiles.3/optional/2.0,
  testsuite/modules.50-cmds/550-optional-opt.exp: ts: add --optional option
  tests in 50/550

2022-05-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc. --optional and try-load changes in NEWS

  * doc/source/changes.rst, doc/source/design/lmod-tcl-modulefile-compat.rst,
  doc/source/modulefile.rst: doc: desc --optional option in man/changes/design

2022-05-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/tryload/2.0,
  testsuite/modules.50-cmds/490-try-load.exp,
  testsuite/modules.50-cmds/518-load-any.exp: ts: add depre tests for
  try-load/load-any mfcmd

2022-05-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/main.tcl.in, tcl/mfinterp.tcl.in, tcl/modeval.tcl, tcl/subcmd.tcl.in:
  Change try_modulefile state into a cmdModuleLoad arg  Replace the
  try_modulefile state by the tryload argument on the cmdModuleLoad procedure.
  Update prereqAnyModfileCmd, prereqAllModfileCmd and
  loadRequirementModuleList procedure to pass this tryload argument all along
  toward cmdModuleLoad. This is needed when evaluating module try-load and
  module load-any commands in modulefile.

  * tcl/mfinterp.tcl.in: Allow to pass multiple pre-args on interp cmd alias
  Update initialization of the command aliases on modulefile interpreter to
  allow to pre defined more than one argument to transmit.

2022-05-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, tcl/main.tcl.in: Inhibit autoload in depre ctx for all
  kind of load cmd  Inhibit the auto loading mechanism when module is
  currently evaluated in a Dependency Reload (DepRe) context for load,
  try-load and load-any sub-commands.  This way it avoids to auto reload the
  optional dependency module currently targeted by the main unload order from
  user.

  * testsuite/modules.50-cmds/152-module-emptyarg.exp,
  testsuite/modules.50-cmds/465-tag-opt.exp,
  testsuite/modules.50-cmds/490-try-load.exp,
  testsuite/modules.61-coll/040-restore.exp: ts: adapt existing tests to
  try-load prereq record change

2022-05-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/main.tcl.in: Use optional prereq to record try-load requirements  When
  try-load is used in a modulefile, record implied requirement as optional
  instead of only recording those that are loaded. This way the modulefile
  will get reloaded if requirement is loaded afterward.  Cannot fully rely on
  prereqAllModfileCmd procedure as try-load does not fully correspond to a
  prereq-all --optional: an requirement evaluation error will lead to an error
  of the module try-load command that will abort the modulefile evaluation.

  * tcl/main.tcl.in: Refactor module load/try-load/load-any modulefile code

  * testsuite/modules.70-maint/080-help.exp: ts: adapt existing tests for
  prereq cmds refactoring

  * .aspell.en.pws, tcl/main.tcl.in, tcl/mfinterp.tcl.in: Merge
  prereq-all/prereq-allAH into prereqAllModfileCmd  Merge the prereq-all and
  prereq-allAH procedure into a single prereqAllModfileCmd procedure taking
  current auto_handling option value as first arg to know whether to
  automatically load requirements or not.

  * .aspell.en.pws, tcl/main.tcl.in, tcl/mfinterp.tcl.in, tcl/subcmd.tcl.in:
  Merge prereq/prereqAH into prereqAnyModfileCmd proc  Merge the prereq and
  prereqAH procedure into a single prereqAnyModfileCmd procedure taking
  current auto_handling option value as first arg to know whether to
  automatically load requirements or not.

2022-05-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/465-tag-opt.exp,
  testsuite/modules.50-cmds/513-prereq-any.exp,
  testsuite/modules.50-cmds/515-depends-on.exp,
  testsuite/modules.50-cmds/516-prereq-all.exp,
  testsuite/modules.50-cmds/517-always-load.exp: ts: adapt existing tests to
  --optional addition

  * tcl/mfinterp.tcl.in: Add --optional option to prereq commands  Introduce
  the --optional option on prereq commands (prereq, prereq-all, always-load,
  prereq-any and depends-on) to indicate that the prereq list is fully
  optional: if none of these prereqs are loaded, no error occurs.  When
  recording these prereq list in persistency information (__MODULES_LMPREREQ
  variable), the current module name is added as first module in prereq list
  to get this rule always satisfied even if no module from the prereq list is
  loaded.

2022-05-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/main.tcl.in, tcl/modeval.tcl, tcl/subcmd.tcl.in: Change any_modulefile
  state into a cmdModuleLoad arg  Replace any_modulefile state by the anyload
  argument on cmdModuleLoad procedure.  any_modulefile branch were already not
  in use for 'module load-any' commands used in modulefiles.

  * tcl/mfinterp.tcl.in: Make always-load proc directly use prereq-all  Update
  always-load procedure to make it use directly the auto_handling version of
  prereq-all command.

  * testsuite/modules.50-cmds/152-module-emptyarg.exp,
  testsuite/modules.70-maint/080-help.exp: ts: adapt existing tests for prereq
  interp refactoring

  * tcl/subcmd.tcl.in: No need to disable auto_handling to call prereq  Update
  cmdModuleSwitch procedure as it is not anymore needed to disable
  auto_handling option to call a prereq command that does not automatically
  load requirements.

  * tcl/main.tcl.in: Make module load rely on prereq/prereq-all cmds  Update
  module procedure to directly use, when 'module load' is called within a
  modulefile, the prereq/prereq-all commands in their auto_handling or
  non-auto_handling versions.

  * .aspell.en.pws, tcl/mfinterp.tcl.in: Create auto_handling and not version
  of prereq procs  Split prereq and prereq-all procedures into a auto_handling
  version, that attempts to automatically load requirements, and a non
  auto_handling version that raise an error directly if requirement is not
  already loaded.  Adapt Tcl sub-interpreter initialization to make it
  dependent of the auto_handling option enablement. When auto_handling is
  enabled, the auto_handling versions of the prereqs procedure are configured.
  With this change other parts of the code will be able to call either prereq
  or prereqAH directly whether they need a load attempt or not, whatever the
  current status of the auto_handling option.

2022-05-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, contrib/rpm/environment-modules.spec.in, doc/source/conf.py,
  version.inc.in: Release of version 5.1.1

  * testsuite/is_module_defined, testsuite/modules.00-init/005-init_ts.exp:
  ts: fix is_modules_defined test  Add bash script to test whether module
  function is defined

  * Makefile, NEWS.rst: install: call git cmds in Makefile only if needed
  Update Makefile to call git command only if the version.inc file needs to
  get rebuilt (if it does not exist or if the git repository has been updated
  after version.inc built).  Include version.inc file in main Makefile only if
  its variables have not been just generated within Makefile flow.

2022-05-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, Makefile, NEWS.rst, lib/.gitignore, lib/Makefile.in:
  install: include generated config.{guess,sub} in dist  Include the
  lib/config.guess and lib/config.sub scripts in distribution tarball if
  generated by autoreconf

  * Makefile, init/Makefile: install: no dependency to version.inc in
  init/Makefile  The Makefile script in the init directory does not depend on
  the definitions stored in the version.inc file. So remove inclusion and
  requirement definition to this version.inc file in init/Makefile.

  * script/mrel: install: locate rpmlint rc file with -r in mrel  Update mrel
  script to locate rpmlint rc file with the -r command-line switch as -f is
  not recognized anymore on rpmlint v2.

  * contrib/rpm/environment-modules.rpmlintrc: install: update rpmlint rc
  config for fc36  Update rpmlint rc file to match the new rpmlint version and
  configuration provided in Fedora 36.

2022-05-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/lcompat/1.7,
  testsuite/modules.50-cmds/517-always-load.exp: ts: add depre tests for
  always-load command in 50/517

  * NEWS.rst, tcl/subcmd.tcl.in, testsuite/modules.50-cmds/465-tag-opt.exp:
  Update mod designation with tags set by DepRe modules  Update module
  designation with the tags set by reloading dependent module.  Closes #460.

2022-05-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/design/module-tags.rst, tcl/mfinterp.tcl.in,
  tcl/modeval.tcl, testsuite/modulefiles.3/tag/8.0,
  testsuite/modules.50-cmds/465-tag-opt.exp: Update tags set with prereq on
  all loaded mods  Update tags set through prereq command on all already
  loaded requirements.  Closes #459.

2022-05-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/170-cwd.exp:
  ts: test module over a removed current working dir

  * NEWS.rst, tcl/util.tcl: Report known error when cwd cannot be retrieved
  Closes #457.

2022-05-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/mfinterp.tcl.in, tcl/report.tcl.in: Migration conflict error report in
  dedicated proc  Add reportPresentConflictError procedure to report error
  when a conflict is detected.

  * tcl/mfinterp.tcl.in, tcl/report.tcl.in: Migrate prereq error report in
  dedicated proc  Add the reportMissingPrereqError procedure to report error
  when prereq is not satisfied.

  * tcl/mfinterp.tcl.in: Add getCurrentModfileInterpName proc  Add
  getCurrentModfileInterpName procedure to return identifier name of current
  Tcl modulefile interpreter.

2022-05-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/main.tcl.in, tcl/modeval.tcl: Return if prereq has been loaded on
  loadRequirementModuleList  Update loadRequirementModuleList procedure to
  also return if one of the requirement from list has been loaded.

2022-05-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/subcmd.tcl.in: Remove dependency to try_modulefile of cmdModuleUnload
  The try_modulefile state does not impact the cmdModuleUnload procedure as
  the only kind of error reported here is when an empty module name is
  specified. Such error should be reported whatever the try_modulefile state.

  * tcl/main.tcl.in: Clarify {try,any}_modulefile state in ml proc  Clarify
  that the try_modulefile and any_modulefile states cannot be enabled when set
  through the ml procedure: ml shortcut syntax leads to regular load and not
  load-any or try-load.

2022-05-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/main.tcl.in, tcl/subcmd.tcl.in: Move load-any no load error into
  cmdModuleLoad  Refactor module procedure to move the error raise when no
  error and no module loaded in case of a load-any sub-command. This code is
  moved directly at the end of cmdModuleLoad.

2022-05-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modfind.tcl.in: Refactor setModuleTag call in setLoadedModule  As
  setModuleTag now ensures no duplicate tag are set, no need to check if
  auto-loaded tag is already set. Simplify also the if/else branch as same
  commands are applied whether the loaded or auto-loaded tag need to be set.

2022-05-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/main.tcl.in, tcl/modeval.tcl,
  testsuite/modules.50-cmds/517-always-load.exp: Refactor 'module load' to use
  loadRequirementModuleList  Update module procedure to use
  loadRequirementModuleList procedure when loading modules in load evaluation
  mode when auto_handling is disabled.  Update the loadRequirementModuleList
  to return 0 is everything went well or 1 if an issue occurred.

  * testsuite/modules.70-maint/310-sh-to-mod.exp: ts: fix 70/310 tests when
  module is defined in env

  * tcl/main.tcl.in: Refactor use of --tag option within module load

  * testsuite/modules.70-maint/350-term_width.exp: ts: add tests to improve
  --width option coverage

  * testsuite/modules.50-cmds/520-pushenv.exp: ts: add pushenv test to improve
  coverage

  * testsuite/modules.50-cmds/400-source-sh.exp: ts: test loaded completion
  not defined in source-sh script

  * testsuite/example/sh-to-mod.csh, testsuite/example/sh-to-mod.fish,
  testsuite/example/sh-to-mod.sh, testsuite/example/siteconfig.tcl-1,
  testsuite/modules.50-cmds/400-source-sh.exp: ts: test removal of
  alias/func/comp from source-sh script

2022-05-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, tcl/subcmd.tcl.in, testsuite/modules.50-cmds/465-tag-opt.exp,
  testsuite/modules.70-maint/322-tag-sgr.exp: No already loaded msg if new tag
  applied  Remove the *already loaded* message displayed when verbosity level
  is higher or equal to 'verbose2', if new tags are applied to the loaded
  module.  Closes #456

2022-05-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/465-tag-opt.exp,
  testsuite/modules.70-maint/321-tag_abbrev.exp,
  testsuite/modules.70-maint/322-tag-sgr.exp: ts: test module designation with
  tags when loading

  * NEWS.rst, tcl/report.tcl.in: Fix module designation rendering when no 'hi'
  color key  Fix rendering of loading or unloading module designation when
  configured color palette does not set the 'hi' color key.  Closes #455

2022-05-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/045-listlong.exp,
  testsuite/modules.70-maint/290-json.exp,
  testsuite/modules.70-maint/322-tag-sgr.exp: ts: test space in module name on
  list/avail outputs

2022-05-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/120-siteconfig.exp: ts: add readCollectionContent
  coverage test

2022-05-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .cirrus.yml: cirrus: test FreeBSD 13.0 instead of eol 11.4

  * testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/120-siteconfig.exp: ts: add
  unsetModuleTag/unsetModuleExtraTag coverage test

  * testsuite/modules.00-init/120-siteconfig.exp: ts: no tcl ext lib err call
  tests if test libs not there

  * NEWS.rst, contrib/rpm/environment-modules.spec.in: rpm: install lib in
  specific directory  Move libtclenvmodules in an environment-modules
  directory under libdir, as it is a private library.

  * NEWS.rst, configure: install: fix libdir64/32 guess in configure script
  Update configure script to better guess the libdir64 and libdir32 directory
  locations based on specified libdir.  Correctly guess these directories when
  libdir does not end with '64' but contains '64' like in
  '/usr/lib64/environment-modules'.

  * .aspell.en.pws, NEWS.rst, contrib/rpm/environment-modules.rpmlintrc,
  script/mrel: install: add rpmlint rc config file  Add rpmlint rc
  configuration file to filter false positive warning messages when checking
  RPM spec file and built packages.  Update 'mrel' script to use this rc
  configuration file when linting RPM spec file.

  * contrib/rpm/environment-modules.spec.in: rpm: remove useless
  environment-modules provides  Remove useless environment-modules Provides
  statement since this package is already named environment-modules.

2022-05-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/sh-to-mod.sh, testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/400-source-sh.exp: ts: fix 50/400 tests when
  module was defined but uninstalled  Correct source-sh tests in 50/400 to
  succeed when tests are run in an environment where module is defined but has
  been uninstalled. It corresponds to the environment created for 'mrel'
  script execution.

2022-05-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .../modules.20-locate/130-mcookie_check_eval.exp: ts: fix 20/130 tests
  when run from path containing + char

  * script/mpub, script/mrel: script: no line number dependency for expected
  errors  Update mpub and mrel scripts not to depend on the line number
  expressed in error message when comparing them to expected error message.

  * NEWS.rst: doc: fix rst typo in 5.1 NEWS

2022-04-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst, NEWS.rst, contrib/rpm/environment-modules.spec.in,
  doc/source/conf.py, lib/configure.ac, tcl/subcmd.tcl.in,
  testsuite/home/coll40, testsuite/home/coll41, testsuite/home/coll42,
  testsuite/home/coll43, testsuite/home/coll45, testsuite/home/coll46,
  testsuite/home/coll49, testsuite/home/coll49-tosource,
  testsuite/modules.61-coll/010-init_ts.exp, version.inc.in: Release of
  version 5.1.0

2022-04-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/home/coll49-tosource, testsuite/modules.50-cmds/465-tag-opt.exp,
  testsuite/modules.61-coll/040-restore.exp: ts: tests tagging messages on
  verbose/verbose2 modes

2022-04-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/hide-or-forbid-modulefile.rst, tcl/main.tcl.in,
  tcl/mfinterp.tcl.in, tcl/modeval.tcl, tcl/subcmd.tcl.in: No Tagging msg
  block if hidden and nuasked  Do not output Tagging message block if module
  is set hidden-loaded and evaluation has not been directly asked by user.
  Add uasked argument to cmdModuleTag procedure to know if the evaluation of
  module has been asked or not by user.

  * .aspell.en.pws, MIGRATING.rst, doc/source/_static/terminal_output.css,
  doc/source/conf.py: doc: add examples in more tagging section in MIGRATING

  * NEWS.rst, doc/source/design/module-tags.rst, doc/source/module.rst: doc:
  desc. tagging evaluation message

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.61-coll/040-restore.exp: ts: adapt existing restore tests
  to the Tagging msg

  * tcl/subcmd.tcl.in: Add Tagging message block  When just tagging a module
  already loaded, report a *Tagging* message with module denomination. Like
  for *Loading* message, it is only seen during a restore/source sub-commands
  or in verbose mode.

  * .aspell.en.pws, NEWS.rst, doc/example/log-module-commands/siteconfig.tcl,
  doc/source/cookbook/log-module-commands.rst: doc: fix log-module-command
  recipe siteconfig.tcl  Fix the siteconfig.tcl file of the log-module-command
  cookbook recipe not to break when a file is sourced through cmdModuleSource.
  Limit the addition of the 'auto' log field only if load evaluation comes
  from cmdModuleLoad procedure.  Fixes #453

  * NEWS.rst, doc/source/design/module-tags.rst, doc/source/module.rst: doc:
  desc. tag report on load/unload/refresh msg block

2022-04-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/020-module.exp,
  testsuite/install.00-init/024-ml.exp,
  testsuite/modules.00-init/130-auto_handling.exp,
  testsuite/modules.20-locate/100-wspace.exp,
  testsuite/modules.20-locate/115-forbid.exp,
  testsuite/modules.20-locate/118-hidden-loaded.exp,
  testsuite/modules.20-locate/119-hide-cascading.exp,
  testsuite/modules.50-cmds/078-refresh.exp,
  testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/121-prereq-module.exp,
  testsuite/modules.50-cmds/122-prereq-fullpath.exp,
  testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/288-info-tags.exp,
  testsuite/modules.50-cmds/370-deps-bis.exp,
  testsuite/modules.50-cmds/370-deps.exp,
  testsuite/modules.50-cmds/372-deps3.exp,
  testsuite/modules.50-cmds/373-deps4.exp,
  testsuite/modules.50-cmds/374-deps5.exp,
  testsuite/modules.50-cmds/375-deps6.exp,
  testsuite/modules.50-cmds/375-order.exp,
  testsuite/modules.50-cmds/376-deps7.exp,
  testsuite/modules.50-cmds/376-switch.exp,
  testsuite/modules.50-cmds/377-cyclic.exp,
  testsuite/modules.50-cmds/377-error.exp,
  testsuite/modules.50-cmds/377-opposite.exp,
  testsuite/modules.50-cmds/378-sametarget.exp,
  testsuite/modules.50-cmds/379-module-unload.exp,
  testsuite/modules.50-cmds/380-altname.exp,
  testsuite/modules.50-cmds/430-implicit-req.exp,
  testsuite/modules.50-cmds/431-not-req.exp,
  testsuite/modules.50-cmds/450-hidden-loaded.exp,
  testsuite/modules.50-cmds/460-sticky.exp,
  testsuite/modules.50-cmds/461-super-sticky.exp,
  testsuite/modules.50-cmds/462-sticky-corner.exp,
  testsuite/modules.50-cmds/465-tag-opt.exp,
  testsuite/modules.50-cmds/473-variant-prereq.exp,
  testsuite/modules.50-cmds/474-variant-conflict.exp,
  testsuite/modules.50-cmds/475-variant-tag.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.70-maint/120-autoinit.exp,
  testsuite/modules.70-maint/230-verbosity.exp,
  .../modules.70-maint/270-adv_version_spec.exp,
  .../modules.70-maint/271-adv_version_spec-in.exp,
  .../272-adv_version_spec-range.exp, .../273-adv_version_spec-space.exp,
  .../274-adv_version_spec-autosym.exp,
  testsuite/modules.70-maint/320-tags.exp,
  .../modules.70-maint/377-variant-shortcut.exp: ts: update tests with tags
  reported in msg block

  * tcl/report.tcl.in: Report module tags in header message block  Update
  Loading/Unloading/Refreshing header message block to render the tags
  applying on the currently analyzed module over or along this module name, as
  done when reporting loaded modules with list sub-command.

  * tcl/report.tcl.in: Make getModuleDesignation rely on
  formatListEltToDisplay  Use formatListEltToDisplay in getModuleDesignation
  to render module designation.

2022-04-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.20-locate/090-memcache.exp,
  testsuite/modules.20-locate/100-wspace.exp,
  testsuite/modules.70-maint/240-icase.exp,
  .../272-adv_version_spec-range.exp,
  testsuite/modules.70-maint/376-variant-tag.exp,
  testsuite/modules.90-avail/080-noindepth.exp: ts: update avail/list tests
  when space in module name

  * NEWS.rst, tcl/report.tcl.in: Quote name if it contains space when listing
  modules  Update formatListEltToDisplay and formatListEltToLongDisplay to
  enclose element name in single quote if it contains a space character. As a
  result list and avail output will now report enclosed module names if space
  character if found in them, like it is done when reporting module
  designation as loading/unloading header.  Only enclose element name and not
  suffix, to follow the same output approach than 'ls' command.

  * tcl/report.tcl.in, tcl/subcmd.tcl.in: Register tag list in module
  designation  Update registerModuleDesignation procedure to also register the
  list of tags applied along module name and variants.

  * MIGRATING.rst, NEWS.rst: doc: desc. tags improvement in NEWS/MIGRATING

  * doc/source/design/module-tags.rst: doc: list mfcmd where --tag opt is
  available in design

  * NEWS.rst, doc/source/changes.rst, doc/source/design/module-tags.rst: doc:
  link to --tag option section

2022-04-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .github/workflows/windows_tests.yaml: gh: configure safe.directory git opt
  on Cygwin & win native

  * doc/source/module.rst: doc: mention --tag in Module tags section

  * doc/source/module.rst, doc/source/modulefile.rst: doc: --tag update tag
  list if mod is loaded already

  * doc/source/module.rst: doc: add an option section for --tag in module(1)

  * testsuite/modules.50-cmds/465-tag-opt.exp: ts: test tag set with full path
  module spec

2022-04-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/home/coll49, testsuite/modulefiles.3/foo/.modulerc,
  testsuite/modulefiles.3/keep/1.0, testsuite/modulefiles.3/tag/8.0,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/999-cleanup.exp: ts: add restore tests with tags
  set or not

  * tcl/subcmd.tcl.in: Clear auto-loaded tag on cmdModuleTag  When the
  unset_extra flag is enabled, also remove the auto-loaded tag on module if it
  is not part of the target tag_list.

  * tcl/subcmd.tcl.in: Clear auto-loaded/keep-loaded tags when unloading
  Remove from the in-memory knowledge the auto-loaded and keep-loaded tags set
  on unloading modules. These tags are then forgotten and will not be
  reapplied if module is currently reloading.

2022-04-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modeval.tcl, tcl/subcmd.tcl.in,
  testsuite/modules.50-cmds/377-error.exp,
  testsuite/modules.50-cmds/450-hidden-loaded.exp,
  testsuite/modules.50-cmds/465-tag-opt.exp: Save/restore extra tags when
  reloading modules  Update reloadModuleListUnloadPhase and
  reloadModuleListLoadPhase procedures to save extra tags of unloaded modules
  to re-inject them when reloading these modules.

  * testsuite/modules.61-coll/040-restore.exp: ts: update restore tests now
  extra tags are cleared

  * tcl/subcmd.tcl.in: Clear extra tags when unloading module  Remove from the
  in-memory knowledge the extra tags set on unloading modules. These extra
  tags are then forgotten and will not be reapplied if module is currently
  reloading.

  * tcl/subcmd.tcl.in: Clear extra tags when restoring collection  When
  restoring a collection, unset the extra tags on loaded modules that are not
  defined in collection.

  * tcl/main.tcl.in, tcl/mfinterp.tcl.in, tcl/modeval.tcl, tcl/modfind.tcl.in,
  tcl/subcmd.tcl.in: Unset extra tags on cmdModuleTag  Add unset_extra
  argument to the cmdModuleTag procedure to remove, when enabled, the extra
  tags currently set on designated modules that are not part of the
  transmitted tag list.  Update every cmdModuleTag calls to take into account
  this new unset_extra argument.

2022-04-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/module-tags.rst: doc: desc. updating tags on loaded mods
  in design doc

2022-04-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/foo/1.0, testsuite/modulefiles.3/tag/8.0,
  testsuite/modules.50-cmds/465-tag-opt.exp,
  testsuite/modules.50-cmds/517-always-load.exp: ts: add tests where tags are
  updated on loaded mods

2022-04-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/465-tag-opt.exp: ts: fix existing tests to set
  tags on already loaded mod

  * tcl/main.tcl.in, tcl/mfinterp.tcl.in, tcl/modeval.tcl: Apply new tags set
  on loaded requirement  Update the loadRequirementModuleList procedure to
  apply tags defined on the first requirement found loaded.

2022-04-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/subcmd.tcl.in: Apply new tags set on loaded module  When a module load
  attempt is made on an already loaded module with additional tag set, update
  the tag list set on this loaded module: add the new tags not already set on
  the loaded module.

2022-04-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .cirrus.yml: cirrus: test over newer FreeBSD 12 release

  * NEWS.rst, doc/source/modulefile.rst: doc: desc avail module subcmds in
  modulefile interp ctx

2022-04-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/modulefile.rst: doc: add mfile/rc interp diff table
  in modulefile man

2022-04-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.rst, doc/source/module.rst: doc: mention rc files are not for
  module config

2022-04-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/modulefile.rst: doc: mention use/unuse in module modulefile man
  section

  * NEWS.rst: doc: desc. coll file signature change in NEWS

2022-04-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/home/.module/coll48, testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/020-savelist.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/050-saverm.exp,
  testsuite/modules.61-coll/060-saveshow.exp,
  testsuite/modules.61-coll/999-cleanup.exp,
  testsuite/modules.70-maint/154-is-saved.exp: ts: verify coll compat on all
  coll subcmds

2022-04-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.61-coll/080-access-coll.exp: ts: adapt existing tests
  now coll compat is verified

2022-04-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .gitignore, Makefile, tcl/{coll.tcl => coll.tcl.in}: install: tcl/coll.tcl
  should be built  Need to build tcl/coll.tcl as this part of the code need to
  use the @MODULES_VERSION@ pattern.

2022-04-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/coll.tcl, tcl/subcmd.tcl.in: Check collections are valid when
  searching them  Update findCollections procedure to rely on a checkValidColl
  procedure that verifies given collections can be read and are compatible
  with current Modules version if they express a minimum version requirement.
  As a side effect, when listing available collections with savelist
  sub-command, now the collections that cannot be read are withdrawn from
  result list.

2022-04-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/coll.tcl, tcl/mfinterp.tcl.in, tcl/subcmd.tcl.in: Merge
  getCollectionFilename into findCollections  Update findCollections procedure
  to merge behavior of getCollectionFilename in it. If search argument is set
  to 'exact' an exact collection search match is performed. If search argument
  is set to 'name', only the name of the collection file is computed.

2022-04-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/home/coll40, testsuite/home/coll41, testsuite/home/coll42,
  testsuite/home/coll43, testsuite/home/coll45, testsuite/home/coll46,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/999-cleanup.exp: ts: update tag saved in
  collection tests  Set temporarily file signature to 5.0 version. Will move
  to 5.1 version with the release commit of 5.1.0.

  * tcl/coll.tcl, tcl/subcmd.tcl.in: Add Module header when saving coll with
  tags  Record Modules magic cookie at the beginning of a collection when tags
  are found set on the module to save. The #%Module file signature is followed
  by the version number of Modules introducing the tag support.  This version
  number is temporarily set to 5.0 for test purpose. It will be moved to 5.1,
  on the release commit of 5.1.0.  If collection starts with a Modules file
  signature, this header will not be reported on saveshow output.

  * tcl/coll.tcl, tcl/modfind.tcl.in: No empty entry in tag array for build
  coll  Update getSimplifiedLoadedModuleList and
  getLoadedModuleWithVariantSaveTagArrayList procedure to fill the tag array
  only with entries for modules with tags applied to them. This way it is
  possible to know if collection define tags by checking number if this array
  is empty.

2022-04-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/tag/.modulerc,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/999-cleanup.exp: ts: test saving nearly-forbidden
  tag in collection

  * testsuite/home/coll45, testsuite/home/coll46,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/999-cleanup.exp: ts: test restore colls with
  invalid tags saved

2022-03-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc. __MODULES_LMEXTRATAG/collection_pin_tag in NEWS

2022-03-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/tag/8.0,
  testsuite/modules.50-cmds/465-tag-opt.exp: ts: test reload with extra tags
  in 50/465

  * doc/source/design/module-tags.rst: doc: desc. collection_pin_tag in design
  doc

  * testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/999-cleanup.exp: ts: test save/restore with
  collection_pin_tag enabled

2022-03-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modfind.tcl.in: Save all tags if collection_pin_tag is enabled  Update
  the getSaveTagList procedure to return all defined tags for given module
  when the collection_pin_tag configuration option is enabled. An exception is
  made for nearly-forbidden tag which is not saved due to its temporal
  meaning.

  * testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.70-maint/220-config.exp: ts: test collection_pin_tag
  config option

  * doc/source/changes.rst, doc/source/module.rst: doc: desc.
  MODULES_COLLECTION_PIN_TAG in man/changes

  * INSTALL.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc.
  collection_pin_tag config in man/changes/INSTALL

  * init/Makefile, init/fish_completion, init/zsh-functions/_module.in: init:
  add collection_pin_tag config to completion scripts

  * tcl/init.tcl.in: Add collection_pin_tag configuration option  Add
  collection_pin_tag configuration option that controls whether all tags
  should be recorded in collection or just the tags specifically set with
  --tag option or describing loaded module state (like auto-loaded or
  keep-loaded tags). Disabled by default. When configuration is modified it
  sets the MODULES_COLLECTION_PIN_TAG environment variable.

  * testsuite/modulefiles.3/tag/.modulerc, testsuite/modulefiles.3/tag/8.0,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/999-cleanup.exp: ts: add collection tests for
  extra tag record

2022-03-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, tcl/coll.tcl, tcl/modfind.tcl.in, tcl/subcmd.tcl.in: Only
  record extra tags in collection  Update way collection is saved to only
  record in it the extra tags set through --tag option and tags describing the
  load state of a module like auto-loaded and keep-loaded.  The getSaveTagList
  procedure is introduce to return the list of tag to save for each loaded
  module.

  * testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/999-cleanup.exp: ts: adapt --tag option collection
  tests

  * testsuite/modules.50-cmds/465-tag-opt.exp: ts: adapt --tag option tests

2022-03-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/210-clear.exp,
  testsuite/modules.70-maint/280-ml.exp: ts: adapt clear subcmd tests for
  __MODULES_LMEXTRATAG

  * tcl/modfind.tcl.in, tcl/subcmd.tcl.in: Record extra tags in
  __MODULES_LMEXTRATAG  Introduce __MODULES_LMEXTRATAG environment variable to
  record the extra tags that have been set on loaded modules through the --tag
  option.  Exclude from this variable the auto-loaded and keep-loaded tags
  that may be in some situation set through --tag option.

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp: ts: clear __MODULES_LMEXTRATAG
  prior tests

  * .aspell.en.pws, doc/source/changes.rst, doc/source/design/module-tags.rst,
  doc/source/module.rst: doc: desc. __MODULES_LMEXTRATAG in man/changes/design

2022-03-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, NEWS.rst: doc: desc. sysconf error handling in ext lib

  * Makefile, lib/.gitignore, lib/Makefile.in, lib/testutil-sysconf.c,
  testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/120-siteconfig.exp: ts/lib: test tcl ext lib
  against a failed sysconf call  Add an utility library that supersedes the
  sysconf function from libc. The sysconf function from this added library
  always returns an error (-1). It is used for coverage test of the sysconf
  call made within the Envmodules_InitStateUsergroupsObjCmd function of the
  Tcl extension library.

2022-03-30  Lukáš Zaoral <lzaoral@redhat.com>

  * lib/envmodules.c: lib: handle sysconf failure in InitStateUsergroupsObjCmd
  sysconf may fail to obtain the value of the NGROUPS_MAX variable.  In such
  case, it returns -1 and sets errno to indicate the error.  Let's handle this
  situation as the size argument of ckalloc is an unsigned int so the size of
  the allocated memory would be UINT_MAX instead. Subsequently, getgroups
  would fail with EINVAL as maxgroupsize is non-zero but less than the number
  of GIDs that would have been returned.  Note that if sysconf returns -1 and
  leaves errno intact, the given variable has no limit.  However, that does
  not seem to be the case on any reasonable operating system [1].  Found by
  Coverity.  Resolves: modules-5.0.1/lib/envmodules.c:355: negative_return_fn:
  Function "sysconf(_SC_NGROUPS_MAX)" returns a negative number.
  modules-5.0.1/lib/envmodules.c:355: assign: Assigning: "maxgroups" =
  "sysconf(_SC_NGROUPS_MAX)". modules-5.0.1/lib/envmodules.c:368:
  negative_returns: "maxgroups" is passed to a parameter that cannot be
  negative. 366| 367|   #if defined (HAVE_GETGROUPS) 368|->    if ((ngroups =
  getgroups(maxgroups, groups)) == -1) { 369|         Tcl_SetErrno(errno);
  370|         Tcl_SetObjResult(interp,  [1] https://www.j3e.de/ngroups.html

2022-03-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/python.py.in: init: explicitly send err output to sys.stderr in
  python  Update python initialization script to explicitly send error output
  to the sys.stderr channel (instead of parent process stderr channel) to be
  able to catch this content.

2022-03-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/120-autoinit.exp: ts: update autoinit tests to
  new python code

  * .aspell.en.pws, NEWS.rst, tcl/envmngt.tcl.in: Update module() python func
  to send output to sys.stderr  Update definition of the module() python
  function to explicitly send output to sys.stderr to get the ability to catch
  this content.

  * MIGRATING.rst: doc: fix missing word in Lmod Tcl mfile support desc.

  * MIGRATING.rst: doc: desc. Lmod Tcl mfile support in MIGRATING

2022-03-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/modulefile.rst: doc: add Lmod Tcl mfile support
  section in modulefile(4)

2022-03-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, doc/source/design/lmod-tcl-modulefile-compat.rst: doc:
  desc. pushenv in design notes

2022-03-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc. pushenv in NEWS

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp: ts: clean family envvar prior
  tests

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp: ts: clean pushenv stack envvar
  prior tests

2022-03-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/flatlcompat,
  testsuite/modulefiles.3/lcompat/.modulerc,
  testsuite/modulefiles.3/lcompat/1.10, testsuite/modulefiles.3/lcompat/1.11,
  testsuite/modules.50-cmds/511-remove-property.exp,
  testsuite/modules.50-cmds/520-pushenv.exp: ts: test pushenv mfcmd in 50/520

2022-03-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/envmngt.tcl.in, tcl/mfinterp.tcl.in: Ensure pushenv stack var is
  cleared by other cmds  Like for the reference counter array, ensure the push
  stack environment variable is cleared when targeted variable is handled by
  append-path, prepend-path, remove-path, setenv and unsetenv modulefile
  commands.

2022-03-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/envmngt.tcl.in, tcl/mfinterp.tcl.in: Add pushenv modulefile command
  Introduce the pushenv modulefile command that sets an environment variable
  with a value specified as argument but saves the previous value set to
  restore it when modulefile is unloaded.  Use a __MODULES_PUSHENV_<VAR>
  environment variable as a stack to record the previous values of environment
  variable <VAR>. Each element in this Modules-specific variable is the
  combination of the currently evaluating modulename and pushed value. When
  unloading, the value set by this module is removed not the value on top of
  the list.  When saving value set before any module, an empty module name is
  used to push to the stack. When restoring this initial value, initial entry
  in stack is also cleared (as no other module unload will unset it).  Follow
  same implementation principle that setenv, with a dedicated procedure for
  the unload and whatis modes.

2022-03-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/changes.rst, doc/source/module.rst: doc: desc.
  __MODULES_PUSHENV_<VAR> in changes/man

  * doc/source/changes.rst, doc/source/modulefile.rst: doc: desc. pushenv in
  changes/man

2022-03-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/vim/syntax/modulefile.vim: vim: add syntax highlight for pushenv
  mfcmd

  * INSTALL.rst, doc/source/_static/rtd_theme_overrides.css: doc: fix config
  opt table layout in INSTALL  Update CSS and content of table to make default
  value words correctly wrap and be able to see the 4th and 5th cols on small
  screens.

2022-03-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, INSTALL.rst, NEWS.rst,
  doc/source/design/add-new-config-option.rst: doc: add Configuration options
  section in INSTALL

2022-03-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst: doc: reorder silent_shell_debug config opt in
  module(1)

  * doc/source/module.rst: doc: see linked envvar for details on configs

2022-03-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.rst: doc: fix wrong default value for some install opts

  * CONTRIBUTING.rst: doc: use plural for Commit hook section in CONTRIBUTING

2022-03-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .aspell.en.pws, NEWS.rst, doc/source/conf.py, doc/source/module.rst: doc:
  clarify instopt & default value of config opts

2022-03-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst: doc: MODULES_ML has to get set prior Modules init

  * INSTALL.rst, NEWS.rst: doc: clarify config opt linked to install opt

  * NEWS.rst, doc/source/module.rst: doc: clarify env vars to set prior
  Modules initialization

  * doc/source/module.rst: doc: clarify module-generated env vars in module(1)

2022-03-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/module.rst: doc: clarify config opt linked to env var
  Update the ENVIRONMENT section in module(1) man page to provide for each
  Modules environment variable the name of the configuration option that could
  be used to set the variable through the config sub-command.

2022-03-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.rst, MIGRATING.rst, NEWS.rst, doc/source/changes.rst,
  doc/source/cookbook/reduce-io-load.rst, doc/source/module.rst,
  doc/source/modulefile.rst: doc: magic cookie means file signature  Update
  documentation to clarify that the Modules magic cookie corresponds to a file
  signature.

2022-03-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .gitattributes: install: exclude git hook stuff from git export

  * CONTRIBUTING.rst, INSTALL.rst, NEWS.rst, script/commit-msg: script: add
  commit-msg hook script to check commit msg

  * .aspell.en.pws, .codespellrc, .gitignore, CONTRIBUTING.rst, NEWS.rst,
  script/pre-commit: script: update pre-commit to spell check docs with Aspell

2022-03-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * script/pre-commit: script: pre-commit warn if codespell not installed

  * NEWS.rst, doc/source/modulefile.rst: doc: desc. Dependencies between
  modulefiles  Fixes #431. Fixes #433.

2022-03-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * CONTRIBUTING.rst, MIGRATING.rst, NEWS.rst, README.md, doc/source/FAQ.rst,
  doc/source/changes.rst, doc/source/cookbook/compiler-etc-dependencies.rst,
  doc/source/design/hide-or-forbid-modulefile.rst,
  doc/source/design/output-configuration.rst,
  .../design/source-shell-script-in-modulefile.rst,
  doc/source/design/variants.rst, doc/source/index.rst: doc: fix typos found
  with Aspell

2022-03-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * CONTRIBUTING.rst, NEWS.rst, script/pre-commit: script: add pre-commit
  script to verify commits

  * NEWS.rst, tcl/mfinterp.tcl.in, testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.70-maint/310-sh-to-mod.exp: Handle empty fish shell
  function in sh-to-mod/source-sh  Update the sh-to-mod and source-sh
  mechanism to handle fish shell function with an empty body.

  * NEWS.rst: doc: desc. recent sh-to-mod/source-sh fixes in NEWS

  * tcl/mfinterp.tcl.in, testsuite/install.00-init/091-source-sh.exp,
  testsuite/modules.70-maint/310-sh-to-mod.exp: Include private functions in
  fish sh-to-mod analysis  Update the environment analysis made for sh-to-mod
  sub-command and source-sh modulefile command for fish shell to include the
  private functions. Catch this way all definition that may be used to set
  shell completion.

2022-02-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/091-source-sh.exp: ts: test unload of source-sh
  mods in install ts

2022-02-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .github/workflows/windows_tests.yaml: gh: upgrade to python 3.9 on Cygwin
  Seem a new python37-sphinx release on Cygwin has broken dependencies, so
  upgrate Cygwin test cases to python 3.9 which is the recommanded version.

  * .codespellrc: codespell: ignore spack/miniconda3/OpenFOAM-dev content

  * .cirrus.yml, .gitignore, Makefile,
  testsuite/install.00-init/091-source-sh.exp,
  testsuite/modulefiles.3/source-sh/openfoam: install/ts: test source-sh over
  OpenFOAM scripts

2022-02-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/091-source-sh.exp: ts: test source-sh over Conda
  script on ksh/zsh/tcsh/fish

  * tcl/mfinterp.tcl.in: Fix csh alias detection on source-sh  Alias
  definition may sometimes be enclosed in parenthesis on csh shell. Fix alias
  parsing regexp to support such definition.  Useful for Conda initialization
  script for csh shell: conda shell alias definition is presented by csh shell
  enclosed in parenthesis.  Fixes #434.

  * .cirrus.yml, .gitignore, Makefile: install/ts: fetch/install Conda/Spack
  for source-sh tests  Add directives into Makefile to fetch and install Spack
  and Conda in order to test source-sh feature against their profile scripts.

  * testsuite/example/sh-to-mod.fish: ts: test fish complete def without -c
  when fish>=3.2  Test fish shell completion definition without -c/--complete
  option when fish is >=3.2 instead of >=3.0.

  * .cirrus.yml, testsuite/install.00-init/091-source-sh.exp,
  testsuite/modulefiles.3/source-sh/conda: ts: test source-sh over Conda
  scripts in install ts

  * .cirrus.yml: cirrus: upgrade linux test env to ubuntu 20.04

2022-02-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/120-autoinit.exp: ts: fix autoinit tests after
  modulecmd.tcl output quoting

  * testsuite/install.00-init/020-module.exp,
  testsuite/install.00-init/090-sh-to-mod.exp,
  testsuite/modulefiles.3/noglobeval/1.0: ts: update install tests after
  modulecmd.tcl output quoting

  * .github/workflows/linux_tests.yaml, INSTALL.rst, Makefile,
  Makefile.inc.in, NEWS.rst, configure, doc/source/changes.rst,
  doc/source/module.rst, init/Makefile, init/fish_completion,
  init/zsh-functions/_module.in, site.exp.in, tcl/envmngt.tcl.in,
  tcl/init.tcl.in, testsuite/example/initrc.in,
  testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.70-maint/120-autoinit.exp,
  testsuite/modules.70-maint/220-config.exp: Revert work on noglob_eval_shells
  config option  Remove entirely the work on the noglob_eval_shells option as
  enclosing in quotes the generated output of modulecmd.tcl to pass it to the
  eval command is equivalent to disable the pathname expansion mechanism of
  sh-kind shells.

  * init/bash.in, init/ksh.in, init/sh.in, init/zsh.in: init: translate ``
  into $() for sh-kind shells

  * doc/source/FAQ.rst, doc/source/module.rst: doc: translate `` into $() for
  sh-kind shells

2022-02-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/envmngt.tcl.in: Translate `` into $() for sh-kind shells  As the
  module shell function code is currently updated for sh-kind shells, take
  this opportunity to translate the `cmd` execution syntax into the more
  modern $(cmd) syntax.

2022-02-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/091-source-sh.exp: ts: test ksh/zsh over Spack
  scripts in install ts

  * tcl/envmngt.tcl.in: Enclose modulecmd.tcl output in quotes on sh-kind
  shells  Update the module shell function definition for sh-kind shell to
  enclose the output generated by modulecmd.tcl in quotes in order to pass it
  to the eval command.  Quoting code to pass it to eval brings correctness to
  the definition of shell functions without harming already well functionning
  definition. Regular shell function definition could now be correctly defined
  in user environment: no more need to get each command line in these function
  ending with a ';' character.  Same mechanism was applied in initialization
  script to evaluate the code produced by the autoinit sub-command.  Multiple
  function-definition issues spotted when using source-sh across environment
  setting script shell are fixed with this change.  Moreover, all the
  noglob_eval_shells work is made useless with this change as no globbing is
  applyed to the code produced by modulecmd.tcl as it is now enclosed in
  quotes.

2022-02-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/sh-to-mod.fish, testsuite/example/sh-to-mod.sh,
  testsuite/install.00-init/090-sh-to-mod.exp,
  testsuite/modules.50-cmds/078-refresh.exp,
  testsuite/modules.50-cmds/400-source-sh.exp,
  testsuite/modules.70-maint/310-sh-to-mod.exp: ts: test wildcard char in func
  on sh-to-mod tests

2022-02-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/bin/install_test_csh, testsuite/example/sh-to-mod.csh,
  testsuite/example/sh-to-mod.fish, testsuite/example/sh-to-mod.sh,
  testsuite/install.00-init/090-sh-to-mod.exp,
  testsuite/modules.50-cmds/400-source-sh.exp,
  testsuite/modules.70-maint/310-sh-to-mod.exp: ts: test wildcard char in
  envvar on sh-to-mod tests

2022-02-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .cirrus.yml, testsuite/install.00-init/091-source-sh.exp,
  testsuite/modulefiles.3/source-sh/spack: ts: test source-sh over Spack
  scripts in install ts

  * doc/source/changes.rst: doc: desc. MODULES_NOGLOB_EVAL_SHELLS in changes

  * testsuite/example/sh-to-mod.fish,
  testsuite/modules.70-maint/310-sh-to-mod.exp: ts: test sh-to-mod against
  fish nested func/_ in name

2022-02-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/mfinterp.tcl.in: Correctly escape [ and | in builtin fish funcs
  Update execShAndGetEnv to correctly escape the '[' and '|' characters in
  fish shell code to filter builtin commands. These character were not
  correctly escaped previously (replaced by '$1').

  * tcl/mfinterp.tcl.in: Remove dup ';' in execShAndGetEnv getfunc fish code

  * NEWS.rst, tcl/mfinterp.tcl.in: Fix fish builtin func withdrawal on
  sh-to-mod/source-sh  Fix the fish code to withdraw builtin functions to
  compare functions defined before and after fish script shell execution in
  execShAndGetEnv procedure.  Previous regexp was not matching the full
  string, so every function whose name contained a substring equal to the name
  of a builtin function (like '_') where filtered.

  * NEWS.rst, doc/source/design/source-shell-script-in-modulefile.rst,
  tcl/mfinterp.tcl.in: Support fish nested function on sh-to-mod/source-sh  On
  fish shell, function definition can be embedded inside function definition.
  Update the execShAndGetEnv procedure to add a string separated after each
  function definition (%ModulesSubShToMod%) to clearly delimitate the shell
  function to analyse and report and skip the definition of nested functions.

2022-02-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .cirrus.yml, .github/workflows/linux_tests.yaml: cirrus/gh: remove broken
  snapd fish config  Remove snapd file that breaks fish shell on bionic (see
  https://bugs.launchpad.net/ubuntu/+source/snapd/+bug/1961365).

  * testsuite/install.00-init/020-module.exp,
  testsuite/modulefiles.3/noglobeval/1.0: ts: add install tests for
  noglob_eval_shells

  * .github/workflows/linux_tests.yaml, testsuite/example/initrc.in,
  testsuite/modules.70-maint/120-autoinit.exp: ts: test noglob_eval_shells
  over autoinit subcmd

2022-02-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.70-maint/220-config.exp: ts: test noglob_eval_shells
  config option

2022-02-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc.
  noglob_eval_shells in man/changes/NEWS

2022-02-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.rst: doc: desc. --with-noglob-eval-shells option in INSTALL

  * tcl/envmngt.tcl.in: Disable pathname expansion prior shell eval  Add code
  in module shell function (for shells listed in noglob_eval_shells) to
  disable pathname expansion for the time of produced shell code evaluation.

2022-02-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/Makefile, init/fish_completion, init/zsh-functions/_module.in: init:
  add noglob_eval_shells config to completion scripts

  * Makefile, Makefile.inc.in, configure, site.exp.in, tcl/init.tcl.in:
  install: add --with-noglob-eval-shells configure opt  Introduce the
  --with-noglob-eval-shells configure option to choose at installation time if
  the pathname expansion should be disabled or not in the module function to
  evaluate shell code produced by modulecmd.tcl, for the shells listed in
  option value.

  * tcl/init.tcl.in: Add noglob_eval_shells configuration option  Add
  noglob_eval_shells configuration option that controls whether or not the
  module shell function should disable pathname expansion to evaluate shell
  code produced by modulecmd.tcl script.  Enabled by default for sh, bash ans
  ksh shells. Support also zsh shell. When configuration option is modified it
  sets the MODULES_NOGLOB_EVAL_SHELLS environment variable.  Pathname
  expansion is primarily an issue of bash and ksh93 shells when evaluating
  shell function body code. It also impacts bash-flavored sh shells. So the
  option is provided to support any shell from the sh family, but disabled by
  default for shells not having the globbing issue (zsh).

2022-02-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .codespellrc: Add codespell configuration for the project

  * contrib/modulefiles/openwin, testsuite/modules.50-cmds/190-load.exp: ts:
  fix some other typos in tests

  * MIGRATING.rst, NEWS.rst, doc/source/cookbook/sticky-modules.rst,
  doc/source/design/sticky-modules.rst, doc/source/design/variants.rst,
  doc/source/module.rst, tcl/modeval.tcl, tcl/subcmd.tcl.in,
  testsuite/modules.50-cmds/460-sticky.exp,
  testsuite/modules.50-cmds/461-super-sticky.exp,
  testsuite/modules.50-cmds/462-sticky-corner.exp,
  testsuite/modules.50-cmds/475-variant-tag.exp,
  testsuite/modules.61-coll/040-restore.exp: Fix stickiness typos  Fixes #442.

2022-02-17  Dimitri Papadopoulos <3234522+DimitriPapadopoulos@users.noreply.github.com>

  * INSTALL.rst, contrib/modulefiles/scheme/racket/5.0.2,
  doc/source/cookbook/new-features-without-breaking-old-module.rst,
  doc/source/design/extended-default.rst,
  doc/source/design/hide-or-forbid-modulefile.rst,
  doc/source/design/insensitive-case.rst,
  doc/source/design/sticky-modules.rst: Fix typos not found by codespell

  * contrib/modulefiles/gnu, contrib/modulefiles/openwin: contrib: fix
  additional typos

2022-02-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/modulefiles/java/6/35, contrib/modulefiles/java/6/38,
  contrib/modulefiles/java/7/07, contrib/modulefiles/java/7/11,
  contrib/modulefiles/openwin, contrib/readme.txt,
  contrib/rpm/environment-modules.spec.in: contrib: fix typos found in several
  files

  * NEWS.rst: doc: fix typos in NEWS

  * testsuite/modulefiles/module/unk,
  testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/180-unload.exp,
  testsuite/modules.70-maint/055-whatis.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/080-help.exp,
  testsuite/modules.70-maint/085-test.exp: ts: fix NonExistent typo in several
  tests  Fixes #439

2022-02-16  Dimitri Papadopoulos <3234522+DimitriPapadopoulos@users.noreply.github.com>

  * init/bash.in, init/cmake.in, init/fish.in, init/ksh.in, init/perl.pm.in,
  init/python.py.in, init/r.R.in, init/ruby.rb.in, init/sh.in, init/tcl.in,
  init/zsh.in: init: fix typo in comment

2022-02-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/120-siteconfig.exp,
  testsuite/modules.00-init/140-color.exp: ts: fix 00/{120,140} tests after
  typos fix

  * NEWS.rst: doc: desc. typos fix in NEWS

2022-02-13  Dimitri Papadopoulos <3234522+DimitriPapadopoulos@users.noreply.github.com>

  * .github/ISSUE_TEMPLATE/bug_report.md, Makefile.inc.in, README.md,
  configure, .../guide/get_started/08-guide_modulefile_search-alias.sh,
  doc/example/compiler-etc-dependencies/homebrewed/bar/common,
  doc/example/expose-procs-vars-to-modulefiles/siteconfig.tcl,
  doc/example/inhibit-report-info/siteconfig.tcl,
  doc/example/unload-firstly-loaded/siteconfig.tcl, doc/source/FAQ.rst,
  doc/source/changes.rst, doc/source/cookbook/compiler-etc-dependencies.rst,
  doc/source/cookbook/modulefiles-in-git.rst,
  .../cookbook/new-features-without-breaking-old-module.rst,
  doc/source/design/default-latest-version-specifiers.rst,
  doc/source/design/hide-or-forbid-modulefile.rst,
  doc/source/design/lmod-tcl-modulefile-compat.rst,
  doc/source/design/sticky-modules.rst, doc/source/design/variants.rst,
  doc/source/module.rst, script/mlprof, script/mpub, tcl/coll.tcl,
  tcl/init.tcl.in, tcl/modfind.tcl.in, testsuite/config/base-config.exp,
  testsuite/example/siteconfig.tcl-1,
  testsuite/install.00-init/005-init_ts.exp,
  testsuite/install.00-init/070-stderrtty.exp,
  testsuite/modulefiles/append/1.7, testsuite/modulefiles/append/2.4,
  testsuite/modulefiles/help/2.0, testsuite/modulefiles/info/mode3,
  testsuite/modulefiles/info/mode4, testsuite/modulefiles/info/userexp,
  testsuite/modulefiles/loc_dv1/1.0, testsuite/modulefiles/loc_dv1/2.0,
  testsuite/modulefiles/loc_dv1/3.0, testsuite/modulefiles/loc_dv2/1.0,
  testsuite/modulefiles/loc_dv2/2.0, testsuite/modulefiles/loc_dv3/1.0,
  testsuite/modulefiles/loc_dv3/2.0, testsuite/modulefiles/loc_dv4/1.0,
  testsuite/modulefiles/loc_dv4/2.0, testsuite/modulefiles/loc_dv6/1.0,
  testsuite/modulefiles/loc_dv7/1.0, testsuite/modulefiles/loc_dv7/3.0,
  testsuite/modulefiles/loc_dv8/1.0, testsuite/modulefiles/loc_dv8/2.0,
  testsuite/modulefiles/loc_dv9/.version, testsuite/modulefiles/loc_dv9/1.0,
  testsuite/modulefiles/loc_dv9/2.0, testsuite/modulefiles/loc_dvv1/.common,
  testsuite/modulefiles/loc_dvv1/.modulerc,
  testsuite/modulefiles/loc_dvv1/.version, testsuite/modulefiles/loc_fq/1.0,
  testsuite/modulefiles/loc_fq/2.0, testsuite/modulefiles/loc_rc5/1.0,
  testsuite/modulefiles/loc_rc5/2.0, testsuite/modulefiles/loc_sym/alias3,
  testsuite/modulefiles/loc_sym/alias5, testsuite/modulefiles/loc_sym/alias8,
  testsuite/modulefiles/loc_sym/getvers10,
  testsuite/modulefiles/loc_sym/getvers5,
  testsuite/modulefiles/loc_sym/getvers6,
  testsuite/modulefiles/loc_sym/getvers7,
  testsuite/modulefiles/loc_sym/versinf3,
  testsuite/modulefiles/loc_sym/versinf4,
  testsuite/modulefiles/loc_sym/versinf5,
  testsuite/modulefiles/loc_sym/version11,
  testsuite/modulefiles/loc_sym/version12,
  testsuite/modulefiles/loc_sym/version13,
  testsuite/modulefiles/loc_sym/version14,
  testsuite/modulefiles/loc_sym/version2,
  testsuite/modulefiles/loc_sym/version3,
  testsuite/modulefiles/loc_sym/version4,
  testsuite/modulefiles/loc_sym/version6,
  testsuite/modulefiles/loc_sym/version7,
  testsuite/modulefiles/loc_sym/version8,
  testsuite/modulefiles/loc_sym/version9, testsuite/modulefiles/spread/1.0,
  testsuite/modulefiles/spread/2.0, testsuite/modulefiles/spread/3.0,
  testsuite/modulefiles/spread/4.0, testsuite/modulefiles/spread/5.0,
  testsuite/modulefiles/spread/6.0, testsuite/modulefiles/spread/7.0,
  testsuite/modulefiles/spread/8.0, testsuite/modulefiles/spreadrc/dir1/1.0,
  testsuite/modulefiles/spreadrc/dir2/1.0,
  testsuite/modulefiles/spreadrc/dir3/1.0,
  testsuite/modulefiles/spreadrc/dir4/1.0,
  testsuite/modulefiles/spreadrc/dir5/1.0,
  testsuite/modulefiles/spreadrc/dir6/1.0,
  testsuite/modulefiles/spreadrc/dir7/1.0,
  testsuite/modulefiles/spreadrc/dir8/1.0,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/100-pager.exp,
  testsuite/modules.00-init/120-siteconfig.exp,
  testsuite/modules.00-init/130-auto_handling.exp,
  testsuite/modules.00-init/140-color.exp,
  testsuite/modules.10-use/030-use.exp,
  testsuite/modules.20-locate/030-defvers.exp,
  testsuite/modules.20-locate/031-defvers2.exp,
  testsuite/modules.20-locate/038-defcontext.exp,
  testsuite/modules.20-locate/065-rcerrs.exp,
  testsuite/modules.20-locate/069-cross.exp,
  testsuite/modules.20-locate/110-hide.exp,
  testsuite/modules.20-locate/111-hide-hard.exp,
  testsuite/modules.20-locate/115-forbid.exp,
  testsuite/modules.20-locate/118-hidden-loaded.exp,
  testsuite/modules.20-locate/119-hide-cascading.exp,
  testsuite/modules.50-cmds/035-unsetenv-undo.exp,
  testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.50-cmds/076-alias-sub.exp,
  testsuite/modules.50-cmds/084-info-mode-exp.exp,
  testsuite/modules.50-cmds/085-info-flags.exp,
  testsuite/modules.50-cmds/100-loglevel.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/180-unload.exp,
  testsuite/modules.50-cmds/190-load.exp,
  testsuite/modules.50-cmds/371-deps2.exp,
  testsuite/modules.50-cmds/372-deps3.exp,
  testsuite/modules.50-cmds/375-deps6.exp,
  testsuite/modules.50-cmds/376-deps7.exp,
  testsuite/modules.50-cmds/376-switch.exp,
  testsuite/modules.50-cmds/377-deps8.exp,
  testsuite/modules.50-cmds/378-sametarget.exp,
  testsuite/modules.50-cmds/380-altname.exp,
  testsuite/modules.50-cmds/450-hidden-loaded.exp,
  testsuite/modules.61-coll/020-savelist.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/060-saveshow.exp,
  testsuite/modules.70-maint/030-purge.exp,
  testsuite/modules.70-maint/040-list.exp,
  testsuite/modules.70-maint/048-listlongno.exp,
  testsuite/modules.70-maint/056-whatis-nullpath.exp,
  testsuite/modules.70-maint/060-apropos.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/080-help.exp,
  testsuite/modules.70-maint/120-autoinit.exp,
  testsuite/modules.70-maint/200-errdisp.exp,
  testsuite/modules.70-maint/271-adv_version_spec-in.exp,
  testsuite/modules.70-maint/272-adv_version_spec-range.exp,
  testsuite/modules.70-maint/273-adv_version_spec-space.exp,
  testsuite/modules.70-maint/310-sh-to-mod.exp,
  testsuite/modules.70-maint/320-tags.exp,
  testsuite/modules.70-maint/350-term_width.exp,
  testsuite/modules.70-maint/360-avail_output.exp,
  testsuite/modules.70-maint/999-cleanup.exp,
  testsuite/modules.90-avail/020-single.exp,
  testsuite/modules.90-avail/030-multiple.exp,
  testsuite/modules.90-avail/040-wild.exp,
  testsuite/modules.90-avail/050-long.exp,
  testsuite/modules.90-avail/060-empty.exp,
  testsuite/modules.90-avail/070-full.exp,
  testsuite/modules.91-sort/020-avail.exp: Fix typos found by codespell

2022-02-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .cirrus.yml: cirrus: move from centos8 to rockylinux8

2022-02-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst: doc: desc. shell completion features in MIGRATING

2022-02-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/400-source-sh.exp: ts: add refresh tests on
  source-sh in 50/400

  * doc/source/design/shell-completion.rst,
  .../design/source-shell-script-in-modulefile.rst,
  testsuite/modules.50-cmds/400-source-sh.exp,
  testsuite/modules.50-cmds/540-complete.exp: doc/ts: completion is first
  cleared before set on fish

  * tcl/envmngt.tcl.in, tcl/mfinterp.tcl.in: Ensure pre-existing fish
  completion is cleared  When defining completion for a given command on fish
  shell, start by clearing any potential previous completion definition.
  Modulefile should this way provide the full completion definition for
  command and cannot rely on partial definition coming from other sides.

2022-02-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc. completion support on source-sh/sh-to-mod in NEWS

  * .../design/source-shell-script-in-modulefile.rst: doc: desc. shell
  completion support on source-sh in design

  * doc/source/changes.rst: doc: desc. completion support on
  sh-to-mod/source-sh in changes

  * doc/source/module.rst, doc/source/modulefile.rst: doc: desc. completion
  support on sh-to-mod/source-sh man

2022-02-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/sh-to-mod.fish, testsuite/modulefiles.2/source-sh/7.2,
  testsuite/modules.50-cmds/400-source-sh.exp,
  testsuite/modules.70-maint/310-sh-to-mod.exp: ts: test fish complete on
  sh-to-mod/source-sh

2022-02-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/sh-to-mod.sh, testsuite/modulefiles.2/source-sh/7.1,
  testsuite/modules.50-cmds/400-source-sh.exp,
  testsuite/modules.70-maint/310-sh-to-mod.exp: ts: test bash complete on
  sh-to-mod/source-sh

2022-02-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/sh-to-mod.csh, testsuite/modulefiles.2/source-sh/7.0,
  testsuite/modulefiles.2/source-sh/8.0,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/400-source-sh.exp,
  testsuite/modules.70-maint/310-sh-to-mod.exp: ts: test tcsh complete on
  sh-to-mod/source-sh

2022-02-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/mfinterp.tcl.in: Tcsh support for complete/uncomplete changes on
  sh-to-mod  Update execShAndGetEnv procedure to add support for complete and
  uncomplete changes on sh-to-mod for tcsh shell.

  * tcl/mfinterp.tcl.in: Fish support for complete/uncomplete changes on
  sh-to-mod  Update execShAndGetEnv procedure to add support for complete and
  uncomplete changes on sh-to-mod for fish shell.

  * tcl/mfinterp.tcl.in: Bash support for complete/uncomplete changes on
  sh-to-mod  Update execShAndGetEnv procedure to add support for complete and
  uncomplete changes on sh-to-mod for bash shell.

  * tcl/mfinterp.tcl.in, tcl/modfind.tcl.in: Support for complete/uncomplete
  changes on sh-to-mod  Update the sh-to-mod and execShAndGetEnv procedures to
  analyze complete and uncomplete changes on sourced shell script and render
  the corresponding modulefile commands.  Add basic code for shells that do no
  support complete/uncomplete environment changes.

2022-02-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/020-module.exp,
  testsuite/modulefiles.3/complete/1.0, testsuite/modulefiles.3/complete/1.1:
  ts: add complete test in install ts

2022-02-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/complete/.modulerc,
  testsuite/modulefiles.3/complete/1.1, testsuite/modulefiles.3/complete/1.2,
  testsuite/modules.50-cmds/541-uncomplete.exp: ts: add tests for uncomplete
  mfcmd in 50/541

2022-01-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/complete/.modulerc,
  testsuite/modulefiles.3/complete/1.0, testsuite/modulefiles.3/complete/1.2,
  testsuite/modulefiles.3/complete/2.0,
  testsuite/modules.50-cmds/540-complete.exp: ts: add tests for complete mfcmd
  in 50/540

2022-01-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/vim/syntax/modulefile.vim: vim: add syntax highlight for
  complete/uncomplete

  * doc/source/modulefile.rst: doc: desc. complete/uncomplete in man

  * NEWS.rst, doc/source/changes.rst: doc: desc. complete/uncomplete in
  NEWS/changes

  * tcl/envmngt.tcl.in, tcl/mfinterp.tcl.in, tcl/modeval.tcl: Add
  complete/uncomplete modulefile commands  Introduce the complete and
  uncomplete modulefile commands to define completion mechanism on running
  shell. It supports only shell with completion capabilities that could be
  defined with shell commands: bash, tcsh and fish.  complete command takes a
  shell name as first argument to apply completion specification only if
  currently running shell corresponds to this shell name set as argument. This
  is done as completion implementation is really different from one shell to
  another. Also the arguments passed after command name are specific of the
  shell and are not checked by module command.  When unloading module,
  complete becomes uncomplete. uncomplete can also be set as an independent
  modulefile command and only acts on load evaluation module. complete is also
  evaluated in refresh evaluation mode to push completion definition in
  sub-shells for instance.  Multiple completion definition for the same
  command may be defined and will be applied to shell. Some shell, like fish,
  needs multiple complete commands to fully define all parameters for the
  completion of a single command.

  * NEWS.rst, doc/source/design/shell-completion.rst: doc: add
  shell-completion design notes

2022-01-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/230-verbosity.exp: ts: check trace of
  dynamically defined procs

2022-01-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/list/1.0, testsuite/modulefiles.3/list/2.0,
  testsuite/modulefiles.3/variant/6.0,
  testsuite/modules.00-init/140-color.exp,
  testsuite/modules.50-cmds/530-module-list.exp,
  testsuite/modules.70-maint/290-json.exp,
  testsuite/modules.70-maint/361-list_output.exp,
  testsuite/modules.70-maint/400-list-search.exp: ts: test pattern search on
  list sub-cmd

2022-01-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst: doc: improve pattern search desc. on avail subcmd

2022-01-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc. list
  filtering in NEWS/changes/man

2022-01-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.50-cmds/152-module-emptyarg.exp,
  testsuite/modules.70-maint/190-emptyarg.exp: ts: adapt existing tests now
  list accepts args

2022-01-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/init.tcl.in, tcl/subcmd.tcl.in: Add search capabilities to list subcmd
  When module specification is passed to the list sub-command, only output the
  loaded modules that matches at least one of these specification (OR
  operation).  Sub-command header message is adapted when module
  specifications are passed to the sub-command. However same header message is
  reported if there is no loaded module to report from the start.  Search
  capabilities rely on the modEq comparison procedure, so it takes into
  account the search_match mode (starts-with/contains), the alternative names
  set over loaded modules and the variant defined.  Only the first specified
  search pattern is set for SGR highlight due to the current limitation of
  reportModules procedure (which only accepts one mod argument).

2022-01-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modspec.tcl, testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/120-siteconfig.exp: Restore psuf arg on modEq proc
  Pattern suffix is useful again on modEq comparison procedure due to the
  introduction of search capabilities on the list sub-command.

2022-01-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Allow search match
  option on list subcmd  Allow to pass the search match options (-S/-C) to the
  list sub-command.

  * tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Allow mod spec as
  argument to list subcmd  Allow the list sub-command to receive module
  specifications as argument.

  * tcl/modspec.tcl: Trace dynamically defined procs in debug2 mode  When
  verbosity is set to debug2 or an higher mode, also add trace to the
  procedure that are dynamically generated during the modulecmd.tcl run.

2022-01-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/main.tcl.in, testsuite/modules.00-init/090-switches.exp: Add
  --initial_load cmd-line option  Add dummy support for the --initial_load
  command-line option for compatiblity with script written for Lmod.  Goal
  here is just to avoid error when this option is used.

  * tcl/main.tcl.in, testsuite/modules.00-init/090-switches.exp: Add
  --no_redirect cmd-line option  Add dummy support for the --no_redirect
  command-line option for compatiblity with script written for Lmod.  Goal
  here is to avoid error when this option is used. Support not added within
  module shell function.

2022-01-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst: doc: add ref to reduce-io-load recipe in MIGRATING

  * MIGRATING.rst, doc/source/changes.rst,
  doc/source/cookbook/reduce-io-load.rst: doc: fix typos in
  MIGRATING/changes/reduce-io-load

2022-01-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/_static/terminal_output.css, doc/source/conf.py,
  doc/source/cookbook/reduce-io-load.rst: doc: add reduce-io-load cookbook
  recipe

2022-01-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/flatlcompat,
  testsuite/modulefiles.3/lcompat/.modulerc,
  testsuite/modulefiles.3/lcompat/1.8,
  testsuite/modulefiles.3/lcompat/1.9/1.9,
  testsuite/modulefiles.3/lcompat/1.9/2.0,
  testsuite/modules.50-cmds/519-family.exp: ts: test family mfcmd in 50/519

2022-01-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/lmod-tcl-modulefile-compat.rst: doc: desc. family in
  design doc

  * NEWS.rst: doc: desc. family/MODULES_FAMILY_<NAME> in NEWS

  * contrib/vim/syntax/modulefile.vim: vim: add syntax highlight for family
  mfcmd

  * doc/source/changes.rst, doc/source/module.rst: doc: desc.
  MODULES_FAMILY_<NAME> in man/changes

  * doc/source/changes.rst, doc/source/modulefile.rst: doc: desc. family in
  man/changes

2022-01-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/mfinterp.tcl.in: Add family modulefile command  Introduce the family
  modulefile command that indicates currently loading module provides name
  passed as argument and this name could only be provided by one loaded
  module.  family is implemented with the combined definition of a conflict
  and a module alias.  An environment variable is set to indicate what module
  currently provides for the family within the loaded environment.

2022-01-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/puts/prestdout,
  testsuite/modules.50-cmds/311-puts-prestdout.exp: ts: test prestdout channel
  on puts command in 50/311

  * NEWS.rst, doc/source/changes.rst, doc/source/modulefile.rst: doc: desc.
  prestdout channel in man/changes/NEWS

  * tcl/envmngt.tcl.in, tcl/mfinterp.tcl.in, tcl/modeval.tcl: Add prestdout
  channel to puts command  Introduce the prestdout channel for the modified
  puts command to be able to set specific content prior any other content sent
  to stdout after the environment changes generated by modulefile evaluation.
  Fixes #432

  * NEWS.rst, doc/source/modulefile.rst: doc: desc. puts mfcmd in man

2022-01-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/modulefile.rst: doc: desc auto_handling on prereq in man

2022-01-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modfind.tcl.in: Clean useless code in setLoadedAltname

2022-01-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst: doc: desc. mcookie_check in MIGRATING

2022-01-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modfind.tcl.in: Protect 'file mtime' call when do not know what we
  check  Catch error of file mtime when targeted file has not been checked
  previously (when mcookie_check is set to 'eval').

2022-01-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc. mcookie_check in NEWS

2021-12-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles/loc_dv1/3.0, testsuite/modulefiles/loc_dv4/1.0,
  testsuite/modulefiles/loc_dv4/2.0, testsuite/modulefiles/loc_rc1/.modulerc,
  testsuite/modulefiles/loc_virt2/.modulerc, testsuite/modulefiles/mcookie/1,
  testsuite/modules.00-init/005-init_ts.exp,
  .../modules.20-locate/130-mcookie_check_eval.exp,
  testsuite/modules.61-coll/040-restore.exp: ts: test mcookie_check set to
  eval in 20/130

2021-12-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/design/magic-cookie-check.rst: doc: add
  magic-cookie-check design notes

2021-12-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.70-maint/220-config.exp: ts: test mcookie_check config
  option

  * tcl/modfind.tcl.in: No mcookie check when searching module  Update
  checkValidModule to skip Module magic cookie check in file if mcookie_check
  configuration option is not set to 'always'.  When mcookie_check is set to
  'eval', files are not read when searching modulefiles. Which means any file
  located within a modulepath directory is considered a modulefile. An error
  will be obtained if an attempt is made to evaluate a non-modulefile located
  in a modulepath directory.  Also if a modulefile is specified fullpath,
  Modules magic cookie will also not be checked if mcookie_check is set to
  'eval', and if this file is not a modulefile an error will be obtained if an
  attempt is made to evaluate this file.

2021-12-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/changes.rst, doc/source/module.rst, doc/source/modulefile.rst:
  doc: desc mcookie_check in changes/man

  * doc/source/changes.rst, doc/source/module.rst: doc: desc
  MODULES_MCOOKIE_CHECK in changes/man

  * init/Makefile, init/fish_completion, init/zsh-functions/_module.in: init:
  add mcookie_check config to completion script

  * tcl/init.tcl.in: Add mcookie_check configuration option  Add the
  mcookie_check configuration option that controls whether or not the magic
  cookie at the start of modulefile (`#%Module`) need to get checked.

2022-01-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * configure, doc/source/conf.py, tcl/coll.tcl, tcl/envmngt.tcl.in,
  tcl/init.tcl.in, tcl/main.tcl.in, tcl/mfinterp.tcl.in, tcl/modeval.tcl,
  tcl/modfind.tcl.in, tcl/modspec.tcl, tcl/report.tcl.in, tcl/subcmd.tcl.in,
  tcl/util.tcl: New year (2022) copyright mention update

2021-12-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .github/workflows/windows_tests.yaml: gh: precise python-sphinx deps on
  Cygwin  Need to precise all sphinxcontrib packages required as dependency
  specification of python37-sphinx Cygwin package is regularly broken.

2021-12-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/notreq/loadany,
  testsuite/modulefiles.3/notreq/loadanymul,
  testsuite/modulefiles.3/notreq/tryload,
  testsuite/modulefiles.3/notreq/tryloadmul,
  testsuite/modules.50-cmds/431-not-req.exp: ts: test --not-req with module
  try-load/load-any in 50/431

  * tcl/main.tcl.in: Add support for --not-req on module try-load/load-any

  * NEWS.rst, doc/source/changes.rst, doc/source/modulefile.rst: doc: desc.
  --not-req support on module try-load/load-any

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst,
  doc/source/modulefile.rst: doc: desc. load-any in NEWS/changes/man

  * NEWS.rst, doc/source/changes.rst, doc/source/design/module-tags.rst,
  doc/source/modulefile.rst: doc: desc. --tag opt on load-any in
  NEWS/changes/man/design

  * doc/source/design/add-new-sub-command.rst: doc: desc. module-info command
  in add new subcmd guide

  * testsuite/modulefiles.3/tag/8.0,
  testsuite/modules.50-cmds/465-tag-opt.exp: ts: add --tag tests for load-any
  subcmd in 50/465

2021-12-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/loadany/.modulerc,
  testsuite/modulefiles.3/loadany/1.0, testsuite/modulefiles.3/loadany/2.0,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/518-load-any.exp: ts: test load-any subcmd in
  50/518

2021-12-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/modulefile.rst, testsuite/modulefiles/info/commandexp,
  testsuite/modules.50-cmds/282-info-command.exp,
  testsuite/modules.50-cmds/283-info-command-exp.exp: ts/doc: add load-any
  test/doc on 'module-info command'

  * testsuite/modulefiles.2/modemptyarg/load-any,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.50-cmds/152-module-emptyarg.exp: ts: adapt existing tests
  for try-load subcmd

  * init/Makefile, init/bash_completion.in, init/fish_completion,
  init/tcsh_completion.in, init/zsh-functions/_module.in: init: add load-any
  sub-cmd to completion scripts

  * tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Introduce load-any
  sub-command  Add the load-any module sub-command that loads first valid
  module in specified list. Errors for unknown modulefile are silenced like
  for try-load sub-command. add-any is an alias over load-any sub-command.
  The any_modulefile state is introduced to indicate cmdModuleLoad to stop
  after first loaded modulefile in list.  When used from a modulefile
  evaluation context, load-any first checks if a module from its specified
  list is already loaded. If this is the case, no additional requirement load
  is performed as constraint is considered satisfied.

2021-12-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/mfinterp.tcl.in, tcl/modeval.tcl: Move requirement load code of prereq
  in dedicated proc  Create the dedicated loadRequirementModuleList procedure
  to attempt to load a list of module requirement in an OR operation. This
  procedure is called by prereq modulefile command when auto_handling mode is
  enabled.

2021-12-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/lmod-tcl-modulefile-compat.rst: doc: desc module
  load-any in design doc

  * doc/source/design/lmod-tcl-modulefile-compat.rst: doc: desc. always-load
  in design doc

2021-12-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modfind.tcl.in, testsuite/modules.50-cmds/465-tag-opt.exp,
  testsuite/modules.50-cmds/467-keep-loaded.exp,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/040-restore.exp: Ensure no duplicate in tags set
  to module  Update setModuleTag procedure to avoid adding a tag to module
  which is already set to avoid duplicate entries. Adapt existing tests.

2021-12-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/changes.rst, doc/source/modulefile.rst: doc: desc.
  always-load in NEWS/changes/man

  * testsuite/modules.50-cmds/465-tag-opt.exp: ts: fix tests in 50/465 for Tcl
  8.5

2021-12-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/keep/1.0,
  testsuite/modulefiles.3/lcompat/.modulerc,
  testsuite/modulefiles.3/lcompat/1.7, testsuite/modulefiles.3/tag/8.0,
  testsuite/modules.50-cmds/465-tag-opt.exp,
  testsuite/modules.50-cmds/467-keep-loaded.exp,
  testsuite/modules.50-cmds/517-always-load.exp: ts: test always-load mfcmd in
  50/{465,467,517}

  * tcl/mfinterp.tcl.in: Add always-load modulefile command  Introduce
  always-load modulefile command that loads all modulefile specified (AND
  operation) and applies to them the keep-loaded module tag in order to avoid
  these modules to get automatically unloaded.

2021-12-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/mfinterp.tcl.in, testsuite/modules.50-cmds/465-tag-opt.exp,
  testsuite/modules.50-cmds/515-depends-on.exp,
  testsuite/modules.50-cmds/516-prereq-all.exp: Pass mfcmd name to
  parsePrereqCommandArgs proc

  * contrib/vim/syntax/modulefile.vim: vim: add syntax highlight for
  always-load mfcmd

2021-12-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/vim/syntax/modulefile.vim: vim: add
  prereq-{all,any}/require-filename/depends-on mfcmds

  * testsuite/modulefiles.3/keep/1.0, testsuite/modulefiles.3/keep/2.0,
  testsuite/modules.50-cmds/467-keep-loaded.exp: ts: test keep-loaded module
  tag in 50/467

  * doc/source/module.rst, doc/source/modulefile.rst: doc: fix missing only
  html directive in mans

  * NEWS.rst: doc: desc keep-loaded tag in NEWS

  * doc/source/changes.rst: doc: fix missing tag_abbrev mconfig in changes

2021-12-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.rst, doc/source/design/module-tags.rst, doc/source/module.rst,
  doc/source/modulefile.rst: doc: desc keep-loaded tag in INSTALL/design/mans

  * configure: install: add default abbrev/sgr for keep-loaded tag

  * tcl/modeval.tcl: Add keep-loaded module tag  Introduce the keep-loaded
  module tag that avoids an auto-loaded module to get automatically unloaded
  when all its dependent modules are unloaded.

2021-12-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst: doc: reorg option desc for load/switch/try-load in
  man

  * doc/source/module.rst: doc: fix sort of try-add subcmd in man

  * NEWS.rst, doc/source/changes.rst, doc/source/module.rst,
  doc/source/modulefile.rst: doc: desc --tag option in changes/NEWS/mans

  * testsuite/home/coll39, testsuite/home/coll40, testsuite/home/coll41,
  testsuite/home/coll42, testsuite/home/coll43,
  testsuite/modulefiles.3/tag/.modulerc, testsuite/modulefiles.3/tag/8.0,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/060-saveshow.exp,
  testsuite/modules.61-coll/999-cleanup.exp: ts: add collection tests for
  --tag option

2021-12-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.20-locate/118-hidden-loaded.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/040-restore.exp: ts: adapt existing collection
  tests for --tag record

  * tcl/coll.tcl, tcl/modfind.tcl.in, tcl/subcmd.tcl.in: Create
  getExportTagList from getTagList  Create getExportTagList procedure to get
  list of tags applying to module that can be exported (not loaded or hidden).
  Use getExportTagList when building persistency variable so serializing code
  is only useful in this procedure and not anymore in getTagList.

  * testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/999-cleanup.exp: ts: fix auto-loaded module
  restore tests in 61/040

2021-12-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/coll.tcl, tcl/modfind.tcl.in, tcl/subcmd.tcl.in: Save tags set on
  loaded modules in collection  Adapt collection mechanism to dump the tags
  set on loaded module when saving a collection and setting them back when
  collection is restored.  Tags are recorded in collection with the --tag=
  option set on module load lines. Previously used --notuasked option is still
  processed if found in collection but when saving new ones the auto-loaded
  tag is dumped instead 'module load --tag=auto-loaded foo/1.0' for instance.
  With this current patch savec tags are restored if module is not yet loaded
  at the correct position in expected loaded module list.

2021-12-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/513-prereq-any.exp,
  testsuite/modules.50-cmds/515-depends-on.exp,
  testsuite/modules.50-cmds/516-prereq-all.exp: ts: adapt existing prereq
  tests for --tag opt

2021-12-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/tag/.modulerc, testsuite/modulefiles.3/tag/8.0,
  testsuite/modulefiles.3/tag/9.0, testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/465-tag-opt.exp: ts: add test for --tag option in
  50/465

2021-12-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/main.tcl.in, tcl/mfinterp.tcl.in: Add --tag option to prereq
  modulefile command  Add the --tag option for the prereq modulefile command
  to be albe to precise tags to apply to loading module when auto handling
  mode is enabled. This way tags could be specified whatever the dependency
  mechanism used.  Also apply on prereq-any, prereq-all and depends-on
  modulefile commands.

2021-12-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/module-tags.rst: doc: update module tag design for --tag
  opt

2021-12-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/main.tcl.in, tcl/mfinterp.tcl.in, tcl/modeval.tcl, tcl/subcmd.tcl.in:
  Pass and apply tag_list in cmdModuleLoad  Transmit the tag list specified on
  module load, try-load or switch to the cmdModuleLoad procedure to apply
  these tags to the module to load.  Need to refine later on tag list
  transmission on collection management (cmdModuleRestore) and environment
  reload (reloadModuleListLoadPhase).  An already loaded module will not be
  reloaded if a different tag list is specified. Loaded tags for this module
  are not changed either.

  * init/Makefile, init/bash_completion.in, init/fish_completion,
  init/tcsh_completion.in, init/zsh-functions/_module.in: init: add --tag= opt
  to completion scripts

2021-12-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/main.tcl.in, tcl/report.tcl.in: Add parsing of --tag opt for
  load/switch/try-load subcmds  Adapt parseModuleCommandArgs and reportUsage
  procedures to handle the --tag option for the load, switch and try-load
  sub-comands.  '--tag=LIST' is the syntax for the command-line whereas '--tag
  LIST' is the main syntax for use within modulefiles. LIST is composed of tag
  names separated by colon character.  Allow --tag for unload sub-command to
  avoid errors on mixed unload/load ml command.

2021-12-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/lcompat/.modulerc,
  testsuite/modulefiles.3/lcompat/1.6,
  testsuite/modules.50-cmds/516-prereq-all.exp: ts: add tests for prereq-all
  in 50/516

2021-12-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/changes.rst, doc/source/modulefile.rst: doc: desc
  prereq-all in NEWS/changes/man

  * tcl/mfinterp.tcl.in: Add prereq-all modulefile command  Rename depends-on
  into prereq-all modulefile command and make depends-on an alias on it.

  * testsuite/modulefiles.3/lcompat/.modulerc,
  testsuite/modulefiles.3/lcompat/1.5,
  testsuite/modules.50-cmds/515-depends-on.exp: ts: add tests for depends-on
  in 50/515

  * doc/source/modulefile.rst: doc: split prereq/conflict man description

  * tcl/mfinterp.tcl.in: Add depends-on modulefile command  Introduce the
  depends-on modulefile command which defines module requirements for
  currently loading modulefile. This command is an alias over prereq command
  with all modulefile arguments treated as a Boolean AND operation: all
  specified modulefiles are required.

  * NEWS.rst, doc/source/changes.rst,
  doc/source/design/lmod-tcl-modulefile-compat.rst, doc/source/modulefile.rst:
  doc: desc depends-on in NEWS/changes/man/design

2021-11-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/lcompat/.modulerc,
  testsuite/modulefiles.3/lcompat/1.4, testsuite/modulefiles.3/lcompatdep/1.4,
  testsuite/modulefiles.3/lcompatdep/2.0,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/514-require-fullname.exp: ts: add tests for
  require-fullname in 50/514

  * tcl/mfinterp.tcl.in, tcl/modfind.tcl.in, tcl/modspec.tcl: Add
  require-fullname modulefile command  Introduce the require-fullname
  modulefile command that raises an error if loading module is not fully
  qualified. Alias and symbols are considered fully qualified versions expect
  for the default symbol.  Add the filter_default argument on
  getAllModuleResolvedName procedure to exclude module parent name and default
  symbol version from alternative name list.  Update modEq procedures to call
  for getAllModuleResolvedName with filter_default mode enabled when ismodlo
  argument is set to 4.

2021-11-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/changes.rst, doc/source/modulefile.rst: doc: desc.
  require-fullname in man/changes/NEWS

  * NEWS.rst, doc/source/design/lmod-tcl-modulefile-compat.rst: doc: add
  lmod-tcl-modulefile-compat initial version

  * NEWS.rst, doc/source/changes.rst, doc/source/modulefile.rst: doc: desc
  reportError and reportWarning in man/changes/NEWS

2021-11-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/lcompat/.version,
  testsuite/modules.20-locate/120-moduleversion.exp: ts: test ModuleVersion in
  20/120

  * NEWS.rst, doc/source/changes.rst, tcl/mfinterp.tcl.in: Set ModuleVersion
  as an alias over ModulesVersion  Set ModuleVersion as an alias over
  ModulesVersion modulefile variable for compatibility with Lmod Tcl
  modulefiles.

  * NEWS.rst, doc/source/modulefile.rst: doc: desc ModulesVersion mfvar in man

  * NEWS.rst, tcl/mfinterp.tcl.in,
  testsuite/modules.50-cmds/513-prereq-any.exp: Clear msg when no arg is
  passed to prereq  Produce a clear error message when wrong number of
  argument is received by prereq command.

  * testsuite/modulefiles.3/lcompat/.modulerc,
  testsuite/modulefiles.3/lcompat/1.3,
  testsuite/modules.50-cmds/513-prereq-any.exp: ts: add tests for prereq-any
  in 50/513

  * NEWS.rst, doc/source/changes.rst, doc/source/modulefile.rst: doc: desc
  prereq-any in man/NEWS/changes

  * tcl/mfinterp.tcl.in: Add prereq-any modulefile command  Introduce the
  prereq-any modulefile command which is a bare alias for the prereq command.

  * NEWS.rst, doc/source/modulefile.rst: doc: desc
  {add,remove}-property/extensions in man/NEWS

2021-11-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/lcompat/.modulerc,
  testsuite/modulefiles.3/lcompat/1.2,
  testsuite/modules.50-cmds/512-extensions.exp: ts: add test for extensions in
  50/512

  * testsuite/modulefiles.3/lcompat/.modulerc,
  testsuite/modulefiles.3/lcompat/1.1,
  testsuite/modules.50-cmds/511-remove-property.exp: ts: add tests for
  remove-property in 50/511

  * testsuite/modulefiles.3/lcompat/.modulerc,
  testsuite/modulefiles.3/lcompat/1.0, testsuite/modulefiles.3/lcompat/2.0,
  testsuite/modules.50-cmds/510-add-property.exp: ts: add tests for
  add-property in 50/510

  * doc/source/changes.rst: doc: desc. add-property/remove-property/extensions
  in changes

  * tcl/mfinterp.tcl.in: Add add-property/extensions/remove-property cmds
  Introduce the add-property, extensions and remove-property modulefile
  commands. Implemented as a no-operation command for modulefile evaluation
  context.

2021-11-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .cirrus.yml: ts: update CI config to test completiondir install opt

2021-11-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.rst, NEWS.rst: doc: desc completiondir install opts in
  NEWS/INSTALL

2021-11-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/rpm/environment-modules.spec.in: rpm: use shell-specific
  completion dir

  * Makefile.inc.in, configure, init/Makefile, init/fish.in, site.exp.in:
  install: add --with-fishcompletiondir configure opt  Add the
  --with-fishcompletiondir option to the configure installation script to
  define a particular installation directory for the fish completion script.
  If option is not defined, fish completion script is installed by default in
  initdir and it is sourced in fish init script. If option is set, completion
  script is installed in designated directory and fish init script does not
  source it.

  * Makefile.inc.in, configure, init/Makefile, init/bash.in, site.exp.in:
  install: add --with-bashcompletiondir configure opt  Add the
  --with-bashcompletiondir option to the configure installation script to
  define a particular installation directory for the bash completion script.
  If option is not defined, bash completion script is installed by default in
  initdir and it is sourced in bash init script. If option is set, completion
  script is installed in designated directory and bash init script does not
  source it.

2021-11-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile.inc.in, configure, init/Makefile, init/zsh.in, site.exp.in:
  install: add --with-zshcompletiondir configure opt  Add the
  --with-zshcompletiondir option to the configure installation script to
  define a particular installation directory for the zsh completion script.
  If option is not defined, zsh completion script is installed by default in
  initdir and the FPATH environment variable is set in zsh init script. If
  option is set, completion script is installed in designated directory and
  zsh init script does not set the FPATH environment variable.  Fixes #428

  * MIGRATING.rst: doc: desc. modfile command behavior opts in MIGRATING

2021-11-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/path-cmd-opt/1.5,
  testsuite/modules.50-cmds/505-set-if-undef.exp: ts: test setenv
  --set-if-undef on modfile cmds

  * doc/example/top-priority-values/siteconfig.tcl,
  doc/source/cookbook/top-priority-values.rst: doc: update setenv in
  top-priority-values recipe config

2021-11-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/120-siteconfig.exp,
  testsuite/modules.50-cmds/400-source-sh.exp,
  testsuite/modules.50-cmds/504-unset-on-unload.exp,
  testsuite/modules.70-maint/300-err_stack.exp: ts: fix existing setenv tests
  for --set-if-undef

  * NEWS.rst, doc/source/changes.rst, doc/source/modulefile.rst: doc: desc.
  setenv --set-if-undef in man/changes/NEWS

  * tcl/mfinterp.tcl.in: Add --set-if-undef option on setenv  Add the
  --set-if-undef option on the setenv modulefile command. When set, the
  environment variable is set when modulefile is loaded only if currently
  unset.  Fixes #425

2021-11-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/mfinterp.tcl.in: Parse setenv args with parseUnsetenvCommandArgs  Add
  the parseUnsetenvCommandArgs procedure to parse arguments set on setenv
  modulefile command.  Split procedure for setenv and unsetenv commands in
  whatis evaluation mode, as both commands now have different set of options
  that should also be parsed in whatis mode to extract targeted environment
  variable name.

  * testsuite/modulefiles.3/path-cmd-opt/1.4,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/504-unset-on-unload.exp: ts: test unsetenv
  --unset-on-unload on modfile cmds

  * NEWS.rst, doc/source/changes.rst, doc/source/modulefile.rst: doc: desc.
  unsetenv --unset-on-unload in man/changes/NEWS

  * testsuite/modules.50-cmds/030-unsetenv.exp,
  testsuite/modules.50-cmds/035-unsetenv-undo.exp: ts: fix existing unsetenv
  tests for --unset-on-unload

  * tcl/mfinterp.tcl.in: Add --unset-on-unload option on unsetenv  Add the
  --unset-on-unload option on the unsetenv modulefile command. When set, the
  environment variable is unset when modulefile is unloaded, like it does when
  modulefile is loaded.

2021-11-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/path-cmd-opt/1.3,
  testsuite/modules.50-cmds/503-noop-on-unload.exp: ts: test unsetenv
  --noop-on-unload on modfile cmds

  * NEWS.rst, doc/source/changes.rst, doc/source/modulefile.rst: doc: desc.
  unsetenv --noop-on-unload in man/changes/NEWS

  * testsuite/modules.50-cmds/030-unsetenv.exp,
  testsuite/modules.50-cmds/035-unsetenv-undo.exp: ts: fix existing unsetenv
  tests for --noop-on-unload

  * tcl/mfinterp.tcl.in: Add --noop-on-unload option on unsetenv  Add the
  --noop-on-unload option to the unsetenv modulefile command. Corresponds to
  the actual default behavior, which is enforced even if a value to restore on
  unload mode is specified.

  * tcl/mfinterp.tcl.in: Parse unsetenv args with parseUnsetenvCommandArgs
  Add the parseUnsetenvCommandArgs procedure to parse the arguments set on an
  unsetenv moduefile command.

2021-11-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/path-cmd-opt/1.3,
  testsuite/modules.50-cmds/503-noop-on-unload.exp: ts: test --noop-on-unload
  option on modfile cmds

2021-11-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/changes.rst, doc/source/modulefile.rst: doc: desc.
  --noop-on-unload in man/changes/NEWS

  * testsuite/modules.10-use/030-use.exp,
  testsuite/modules.10-use/070-unuse.exp,
  testsuite/modules.70-maint/150-append-path.exp,
  testsuite/modules.70-maint/151-prepend-path.exp,
  testsuite/modules.70-maint/152-remove-path.exp: ts: test --noop-on-unload
  option on subcmds

  * tcl/envmngt.tcl.in, tcl/mfinterp.tcl.in, tcl/subcmd.tcl.in: Add
  --noop-on-unload on remove-path/module unuse  Add the --noop-on-unload
  option to the remove-path and module unuse sub-command to perform no
  operation when commands are evaluated in unload mode.

2021-11-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/path-cmd-opt/1.2,
  .../modules.50-cmds/502-prepend-on-unload.exp: ts: test --prepend-on-unload
  option on modfile cmds

  * testsuite/modules.10-use/030-use.exp,
  testsuite/modules.10-use/070-unuse.exp,
  testsuite/modules.70-maint/150-append-path.exp,
  testsuite/modules.70-maint/151-prepend-path.exp,
  testsuite/modules.70-maint/152-remove-path.exp: ts: test --prepend-on-unload
  option on subcmds

  * tcl/envmngt.tcl.in, tcl/subcmd.tcl.in: Add --prepend-on-unload on
  remove-path/module unuse  Add the --prepend-on-unload option to the
  remove-path and module unuse sub-command to append specified paths when
  commands are evaluated in unload mode.  If option is set prior path list
  specification, this path list which is unsets when modulefile loads is
  appended back when modulefile unloads. If a different path list is passed
  after option specification, this list is appended on unload mode instead of
  the list removed at load time.  --prepend-on-unload option cannot be mixed
  with --index option.

  * tcl/envmngt.tcl.in, tcl/mfinterp.tcl.in, tcl/subcmd.tcl.in: Pass precise
  behavior to apply to add-path  Instead of barely setting 'add' as default
  behavior to apply on add-path procedure, precise this behavior with 'append'
  and 'prepend' value.

  * NEWS.rst, doc/source/changes.rst, doc/source/modulefile.rst: doc: desc.
  --prepend-on-unload in man/changes/NEWS

  * NEWS.rst, doc/source/changes.rst, doc/source/modulefile.rst: doc: desc.
  --append-on-unload in man/changes/NEWS

  * doc/source/design/control-mode-behaviors.rst: doc: add noop-on-unload +
  details in ctrl mode bhv design

2021-11-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/example/top-priority-values/siteconfig.tcl: doc: update
  top-priority-values recipe config  Update the siteconfig.tcl configuration
  of top-priority-values cookbook recipe after the add-path/unload-path
  changes.

2021-11-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/path-cmd-opt/1.0,
  testsuite/modulefiles.3/path-cmd-opt/1.1,
  testsuite/modules.50-cmds/500-remove-on-load.exp,
  testsuite/modules.50-cmds/501-append-on-unload.exp: ts: additional
  --remove-on-unload/--append-on-unload tests

  * tcl/subcmd.tcl.in, testsuite/modules.50-cmds/500-remove-on-load.exp,
  testsuite/modules.50-cmds/501-append-on-unload.exp: Allow use of
  --remove-on-unload on module unuse  Even if it corresponds to the default
  behavior, allow the use of the --remove-on-unload option on the module unuse
  modulefile command.  Adapt existing tests.

  * tcl/envmngt.tcl.in, testsuite/modules.50-cmds/500-remove-on-load.exp,
  testsuite/modules.50-cmds/501-append-on-unload.exp: Allow --remove-on-unload
  to get set after variable name  Adapt parsePathCommandArgs procedure to
  allow the --remove-on-unload option to get set after the variable name, like
  for --append-on-unload.  Adapt existing tests.

  * testsuite/modules.50-cmds/501-append-on-unload.exp: ts: fix
  append-on-unload tests for reuse of load path list

  * tcl/envmngt.tcl.in, tcl/subcmd.tcl.in: Reuse more path list defined for
  load in parsePathCommandArgs  In case the --append-on-unload argument is set
  after environment variable name but prior path list definition, the path
  list to use for load evaluation will also be used on the append behavior
  during unload evaluation.  In addition, if no path list is defined after
  --append-on-unload argument, the list used for load evaluation is reused on
  the append behavior of unload evaluation.  Applies to remove-path and module
  unuse modulefile commands.

  * tcl/report.tcl.in: Filter internal cmd starting from $ sign from stack
  trace  Update the formatErrStackTrace procedure to filter from error stack
  trace the internal calls made through the use of a variable to designate the
  command to call (like done in runModuleUse).

  * tcl/subcmd.tcl.in: No error catch in runModuleUse  Remove the error catch
  set in runModuleUse when calling for add-path or unload-path. Errors are
  this way rendered like any other: internal module bug if called during a
  modulefile evaluation or top error with report link advice.

2021-11-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/path-cmd-opt/1.1,
  testsuite/modules.50-cmds/501-append-on-unload.exp: ts: test
  --append-on-unload option on modfile cmds

  * tcl/subcmd.tcl.in: Make runModuleUse rely on add-path/unload-path  Make
  the runModuleUse procedure rely on the add-path and unload-path procedures
  rather {append,prepend,remove}-path to be able to precise the current
  evaluation mode.

  * tcl/envmngt.tcl.in, tcl/mfinterp.tcl.in: Align add-path args with
  unload-path  Adopt same argument list for add-path procedure as unload-path
  to make it easy to dynamically call one or the other.

  * tcl/main.tcl.in, tcl/subcmd.tcl.in: Pass down eval mode to runModuleUse
  Add argument mode to the runModuleUse procedure to get knowledge of current
  evaluation mode in order to distinguish a module unuse in load or unload
  evaluation mode.  Update the module, cmdModuleUse and cmdModuleUnuse
  procedures to pass down the mode information.

2021-11-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.10-use/030-use.exp,
  testsuite/modules.10-use/070-unuse.exp,
  testsuite/modules.70-maint/150-append-path.exp,
  testsuite/modules.70-maint/151-prepend-path.exp,
  testsuite/modules.70-maint/152-remove-path.exp: ts: test --append-on-unload
  option on subcmds

  * tcl/envmngt.tcl.in, tcl/subcmd.tcl.in: Add --append-on-unload on
  remove-path/module unuse  Add the --append-on-unload option to the
  remove-path and module unuse sub-command to append specified paths when
  commands are evaluated in unload mode.  If option is set prior path list
  specification, this path list which is unsets when modulefile loads is
  appended back when modulefile unloads. If a different path list is passed
  after option specification, this list is appended on unload mode instead of
  the list removed at load time.  --append-on-unload option cannot be mixed
  with --index option.  Fixes #114

2021-11-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/envmngt.tcl.in, tcl/mfinterp.tcl.in: Add mode arg to
  unload-path/parsePathCommandArgs  Update the unload-path and
  parsePathCommandArgs procedure to add a mode argument to get knowledge of
  the current evaluation mode when checking passed arguments.

2021-11-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.10-use/030-use.exp,
  testsuite/modules.10-use/031-append.exp,
  testsuite/modules.10-use/032-prepend.exp,
  testsuite/modules.10-use/070-unuse.exp: ts: add use/unuse tests with var ref
  in modpath

  * testsuite/modules.10-use/030-use.exp,
  testsuite/modules.50-cmds/040-append.exp: ts: fix comments on work to be
  done in a future release

  * testsuite/modules.00-init/120-siteconfig.exp,
  testsuite/modules.20-locate/090-memcache.exp,
  testsuite/modules.50-cmds/310-puts.exp,
  testsuite/modules.70-maint/080-help.exp,
  testsuite/modules.70-maint/230-verbosity.exp: ts: adapt existing debug msg
  tests

  * NEWS.rst: doc: desc. debug msg rework in NEWS

  * tcl/main.tcl.in: Add debug report at end of parseModuleCommandName

  * tcl/mfinterp.tcl.in: Move arg debug report of getenv/getvariant in parse
  proc

  * tcl/envmngt.tcl.in, tcl/main.tcl.in, tcl/mfinterp.tcl.in, tcl/modeval.tcl,
  tcl/modfind.tcl.in, tcl/subcmd.tcl.in: Remove obvious debug reports  Remove
  the debug reports of argument passed to the procedure as they are already
  generated when debug2 verbosity mode is enabled and for the debug verbosity
  mode the procedures bound to a modulefile command are traced to emit a debug
  report of their call.

  * tcl/mfinterp.tcl.in: Trace mfcmd calls to report them in debug verbosity
  mode  Add trace over each modulefile/modulerc commands to report when they
  are called and with what paramaters. These traces are set only if the
  verbosity equals to debug. When verbosity is higher than debug, traces are
  set on all modulecmd.tcl procedures.

2021-11-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/changes.rst: doc: error when unk opt for use/unuse in
  changes/NEWS

2021-11-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/changes.rst, doc/source/modulefile.rst: doc: desc.
  --remove-on-unload in man/changes/NEWS

  * testsuite/modulefiles.3/path-cmd-opt/1.0,
  testsuite/modulefiles.3/path-cmd-opt/2.0,
  testsuite/modules.50-cmds/500-remove-on-load.exp: ts: test
  --remove-on-unload option on modfile cmds

  * tcl/subcmd.tcl.in: Raise error when unknown argument passed to use/unuse
  Raise an error when an unknown option is passed to module use or module
  unuse modulefile command.

  * tcl/main.tcl.in, tcl/subcmd.tcl.in: Add runModuleUse procedure for both
  use/unuse subcmd  Introduce the runModuleUse procedure that is called by
  cmdModuleUse and cmdModuleUnuse to share execution code between both
  sub-commands. runModuleUse takes a position argument (append, prepend,
  remove) and a command (use or unuse) to know what arguments are allowed and
  what kind of path change to apply.  Aplying module use in unload mode now
  calls for cmdModuleUse with position argument set to remove. To allow same
  set of arguments for the module use command whatever the evaluation mode
  set.

2021-11-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/subcmd.tcl.in: Push eval mode if none on use/unuse  Push a load
  evaluation mode when processing module use or module unuse command only if
  no evaluation mode already set.

2021-11-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.10-use/030-use.exp,
  testsuite/modules.10-use/070-unuse.exp,
  testsuite/modules.70-maint/150-append-path.exp,
  testsuite/modules.70-maint/151-prepend-path.exp,
  testsuite/modules.70-maint/152-remove-path.exp: ts: test --remove-on-unload
  option on subcmds

  * tcl/envmngt.tcl.in: Add --remove-on-unload option to remove-path  Add the
  --remove-on-unload option on remove-path modulefile command to also remove
  the path elements specified when modulefile is evaluated in unload mode.

  * tcl/envmngt.tcl.in, tcl/mfinterp.tcl.in: Update unload-path for nop and
  return bhv & var  Update the unload-path procedure to return immediately
  when the behavior to apply is 'nop' (no-operation). Also always make this
  procedure return a list with behavior applied and variable name.  Make
  remove-path-un procedure (remove-path when called within an unload mode
  modulefile interpreter) rely on unload-path after this change, instead of
  directly calling parsePathCommandArgs.

  * tcl/envmngt.tcl.in, tcl/mfinterp.tcl.in: Precise default behavior to apply
  by parsePathCommandArgs  Pass down the default behavior to apply on
  parsePathCommandArgs procedure to prepare ground for upcoming new arguments
  to change path command behavior.

2021-10-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.50-cmds/042-append-delim.exp,
  testsuite/modules.50-cmds/045-append-undo.exp,
  testsuite/modules.50-cmds/047-app-del-undo.exp,
  testsuite/modules.50-cmds/050-prepend.exp,
  testsuite/modules.50-cmds/052-prepend-delim.exp,
  testsuite/modules.50-cmds/055-prepend-undo.exp,
  testsuite/modules.50-cmds/057-pre-del-undo.exp,
  testsuite/modules.50-cmds/060-remove.exp,
  testsuite/modules.50-cmds/062-remove-delim.exp,
  testsuite/modules.50-cmds/065-remove-undo.exp,
  testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.70-maint/140-multiargs.exp,
  testsuite/modules.70-maint/150-append-path.exp,
  testsuite/modules.70-maint/151-prepend-path.exp,
  testsuite/modules.70-maint/152-remove-path.exp,
  testsuite/modules.70-maint/190-emptyarg.exp: ts: update unload-path/add-path
  error msgs

  * tcl/envmngt.tcl.in, tcl/mfinterp.tcl.in: Pass effective mfcmd name to
  parsePathCommandArgs  Update the procedure chain from append-path,
  prepend-path and remove-path modulefile commands to parsePathCommandArgs, to
  pass command name down the way.  So add-path and unload-path are changed to
  get modulefile command name as first argument and pass it down to
  parsePathCommandArgs.  As a consequence error message raised from
  parsePathCommandArgs now use the accurate modulefile command name.

2021-10-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/mfinterp.tcl.in, tcl/subcmd.tcl.in: Revert "Pass calling name as first
  arg of remove-path"  This reverts commit
  2970dcc2fa10725548325c7a2adf702969fc6850.

  * tcl/mfinterp.tcl.in: Use specific proc for {append,prepend}-path on unload
  When modulefile interpreter is set for unload mode, use specific procedures
  for the append-path and prepend-path suffixed -un rather reusing remove-path
  proc. This way it is possible to distinguish a real remove-path call.

2021-10-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/subcmd.tcl.in: Use append-path instead of add-path in subcmd procs
  Update sub-command procedures to make use of append-path rather directly
  add-path.

  * tcl/subcmd.tcl.in: Use remove-path instead of unload-path in subcmd procs
  Update sub-command procedures to make use of remove-path rather directly
  unload-path.

  * tcl/mfinterp.tcl.in, tcl/subcmd.tcl.in: Pass calling name as first arg of
  remove-path  Update way to call remove-path procedure to pass as first
  argument the alias name used to call it. Will enable to distinguish a true
  remove-path call from an append-path call in unload mode.

2021-11-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .cirrus.yml: cirrus: update OSX image version

2021-11-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * CONTRIBUTING.rst: doc: add design notes section in CONTRIBUTING

2021-11-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/design/add-new-sub-command.rst: doc: add
  add-new-sub-command design doc

  * doc/source/design/add-new-config-option.rst: doc: fix typo in
  add-new-config-option design doc

2021-11-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/add-new-config-option.rst: doc: use ghcommit role in
  add-new-config-option doc

  * doc/source/conf.py: doc: add new 'ghcommit' sphinx role

  * CODE_OF_CONDUCT.md, Makefile, NEWS.rst, README.md: Set a Code of conduct
  for Modules  Set a Code of conduct for the Modules project and its
  community. This Code of conduct is based on the Contribution Covenant,
  version 2.1.

  * doc/source/design/control-mode-behaviors.rst: doc: refine
  {restore,set}-on-unload in ctrl mode bhvs

2021-10-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/design/add-new-config-option.rst: doc: add
  add-new-config-option design doc

2021-10-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/design/control-mode-behaviors.rst: doc: add
  control-mode-behaviors design doc

2021-10-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst, doc/source/modulefile.rst: doc: fix missing
  only-html tag in man pages

2021-10-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/400-source-sh.exp: ts: module usage in script
  run through source-sh

2021-10-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc. env filtering for sh-to-mod/source-sh in NEWS

2021-10-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst, doc/source/modulefile.rst: doc: desc var filtering
  on source-sh/sh-to-mod man

  * doc/source/design/source-shell-script-in-modulefile.rst: doc: desc private
  env var filter on sh-to-mod design

  * tcl/mfinterp.tcl.in: ignore Modules private variables on sh-to-mod
  processing  Filter out the variables intended for Modules private usage when
  processing the environment changes made by a script evaluated by sh-to-mod
  sub-command or source-sh modulefile command.  _LMFILES_, LOADEDMODULES and
  any variable prefixed by __MODULES_ are withdrawn this way.  Closes #427.

  * testsuite/example/sh-to-mod.csh, testsuite/example/sh-to-mod.fish,
  testsuite/example/sh-to-mod.sh,
  testsuite/modules.70-maint/310-sh-to-mod.exp: ts: module usage in script run
  through sh-to-mod

2021-10-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/source-shell-script-in-modulefile.rst: doc: note to
  extend source-sh/sh-to-mod for other tools

2021-10-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc state/supported_shells in NEWS

  * testsuite/modulefiles.3/modbad/state,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.00-init/100-pager.exp,
  testsuite/modules.00-init/120-siteconfig.exp,
  testsuite/modules.00-init/150-access-init.exp,
  testsuite/modules.50-cmds/151-module-onlytop.exp,
  testsuite/modules.70-maint/220-config.exp,
  testsuite/modules.70-maint/390-state.exp: ts: add tests for state subcmd

2021-10-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/Makefile, init/bash_completion.in, init/fish_completion,
  init/tcsh_completion.in, init/zsh-functions/_module.in: init: add state
  subcmd to completion scripts

  * tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Introduce 'state'
  sub-command  Add the state sub-command to get all states or one state
  specified as argument.  Code that was previously reporting state for config
  sub-command has been moved to a dedicated cmdModuleState procedure. state
  sub-command can only be called from top level and accepts 0 or 1 argument.
  Closes #426

2021-10-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/changes.rst, doc/source/module.rst, doc/source/modulefile.rst:
  doc: desc. state subcmd in man/changes

  * tcl/main.tcl.in: Add supported_shells state  Add the supported_shells
  state to list the shells Modules is able to produce output for.

2021-10-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/260-getenv.exp,
  testsuite/modules.50-cmds/472-getvariant.exp: ts: fix --return-value tests
  for Tcl8.5 in 50/{260,472}

2021-10-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/variant/5.1,
  testsuite/modules.50-cmds/472-getvariant.exp: ts: add getvariant
  --return-value tests in 50/472

2021-10-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles/getenv/1.0,
  testsuite/modules.50-cmds/260-getenv.exp: ts: add getenv --return-value
  tests in 50/260

  * NEWS.rst: doc: desc. --return-value option in NEWS

  * doc/source/changes.rst, doc/source/modulefile.rst: doc: desc. getvariant
  --return-value option in man/changes

  * tcl/mfinterp.tcl.in: Add --return-value option to getvariant modulefile
  command  Add the --return-value option to the getvariant modulefile command
  to force to return the value of designated variant when modulefile is
  evaluated in display mode.

  * doc/source/changes.rst, doc/source/modulefile.rst: doc: desc. getenv
  --return-value option in man/changes

  * tcl/mfinterp.tcl.in: Add --return-value option to getenv modulefile
  command  Add the --return-value option to the getenv modulefile command to
  force to return the value of designated environment variable when modulefile
  is evaluated in display mode.  Closes #422.

2021-10-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst, NEWS.rst: doc: desc. redirect_output in NEWS/MIGRATING

2021-10-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/005-init_ts.exp,
  testsuite/install.00-init/070-stderrtty.exp: ts: add install tests to check
  redirect_output

2021-10-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/120-autoinit.exp: ts: adapt autoinit test for
  output redirection code

  * tcl/envmngt.tcl.in: Add output redirection handling on fish module
  function  Update the definition of the module function for fish shell family
  to support the output redirection.  Now both _module_raw and module shell
  functions are always defined. Default redirection behavior depends on the
  interactiveness of the shell when the autoinit command is run. Then shell
  code is set in module function definition to adapt behavior depending on
  MODULES_REDIRECT_OUTPUT environment variable value or
  --redirect/--no-redirect command-line switches.

2021-10-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/bash.in, init/sh.in, tcl/envmngt.tcl.in: Add output redirection
  handling on sh module function  Update the definition of the module function
  for sh shell family (sh, bash, ksh and zsh) to support the output
  redirection.  Now both _module_raw and module shell functions are always
  defined. Default redirection behavior depends on the interactiveness of the
  shell when the autoinit command is run. Then shell code is set in module
  function definition to adapt behavior depending on MODULES_REDIRECT_OUTPUT
  environment variable value or --redirect/--no-redirect command-line
  switches.

2021-10-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst, tcl/main.tcl.in, tcl/report.tcl.in,
  testsuite/modules.00-init/090-switches.exp: Warn if --redirect is used on
  unsupported shells  --redirect is only supported on sh, bash, ksh, zsh and
  fish shells. Emit a warning message when used on another shells.

2021-10-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/changes.rst, doc/source/module.rst: doc: desc.
  --redirect/--no-redirect in man/changes

  * testsuite/modules.00-init/090-switches.exp,
  testsuite/modules.70-maint/220-config.exp: ts: basic tests for
  --redirect/--no-redirect switches

  * tcl/main.tcl.in, tcl/report.tcl.in: Add --redirect/--no-redirect cmdline
  switches  Add the --redirect and --no-redirect command line switches to
  control where the output of the module command should be sent. When
  redirected it is sent to stdout otherwise not redirected means it is left on
  stderr.  These command line switches have no effect within modulecmd.tcl
  code. They are treated directly in module shell function to adapt output
  redirection.  Closes #410.

2021-10-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/changes.rst, doc/source/module.rst: doc: desc.
  MODULES_REDIRECT_OUTPUT in man/changes

  * doc/source/changes.rst, doc/source/module.rst: doc: desc. redirect_output
  config in man/changes

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.70-maint/220-config.exp: ts: test redirect_output config
  option

  * init/Makefile, init/fish_completion, init/zsh-functions/_module.in: init:
  add redirect_output config to completion script

2021-10-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/init.tcl.in: Add redirect_output configuration option  Add
  redirect_output configuration option that controls whether or not the output
  of module command should be redirected from stderr to stdout. Enabled by
  default. When configuration is modified it sets the MODULES_REDIRECT_OUTPUT
  environment variable.

2021-09-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/changes.rst: doc: desc open value variant in
  NEWS/changes

  * testsuite/modulefiles.3/variant/1.0, testsuite/modulefiles.3/vrreq1/1.0,
  testsuite/modulefiles.3/vrreq2/1.0,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/470-variant.exp,
  testsuite/modules.50-cmds/471-variant-unload.exp,
  testsuite/modules.50-cmds/473-variant-prereq.exp,
  testsuite/modules.50-cmds/479-variant-boolean.exp: ts: add new variant tests
  to check open value variant

2021-09-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/470-variant.exp,
  testsuite/modules.70-maint/375-variant-whatis.exp: ts: adapt existing tests
  for open value variant

  * tcl/mfinterp.tcl.in: Allow variant with no accepted value list  Allow to
  declare variant with no list of accepted value. Such variant accepts any
  value specified.  Closes #405.

  * doc/source/module.rst, doc/source/modulefile.rst: doc: desc optional
  variant value list in man pages

  * doc/source/design/variants.rst: doc: allow variant definition with no
  accepted value list

2021-10-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, contrib/rpm/environment-modules.spec.in, doc/source/conf.py,
  version.inc.in: Release of version 5.0.1

2021-10-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile: install: use newer version of icdiff (2.0.4)

  * Makefile: install: use newer version of nagelfar (1.3.2)

  * .cirrus.yml, .github/workflows/linux_tests.yaml: codecov: migrate to new
  uploader  see
  https://about.codecov.io/blog/introducing-codecovs-new-uploader/.  gcov
  needs to be run manually with new uploader.

  * doc/source/modulefile.rst: doc: fix default value returned on getenv in
  man  Fix documentation of getenv modulefile command to describe that an
  empty string is now returned when designated environment variable is not
  defined and no default value to return is specified.

  * init/initrc.in: init: set min version required to run default initrc  Set
  in the module magic cookie of the initrc configuration file installed by
  default the version of Modules required to evaluate this file.  Set version
  to 5.0 as current configuration file mention the quarantine_support
  configuration option.

2021-10-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/modulefile.rst: doc: clarify module subcmd allowed in
  modulefile  Clarify the module sub-commands that are allowed to be used
  within a modulefile.  Fixes #423

2021-10-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/envmngt.tcl.in: No warning on {preprend,append}-path --duplicates
  unload  Remove warning message when unloading a prepend-path or append-path
  modulefile command with --duplicates option set.  Fixes #421

  * testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.50-cmds/060-remove.exp: ts: highlight --duplicates issue
  when unloading

2021-09-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/changes.rst, doc/source/module.rst: doc: desc.
  __MODULES_AUTOINIT_INPROGRESS in man/changes

  * testsuite/example/initrc.in, testsuite/modulefiles.3/refresh/5.0,
  testsuite/modulefiles.3/refresh/6.0,
  testsuite/modules.70-maint/120-autoinit.exp, testsuite/systest2: ts: check
  autoinit loop safeguard mechanism in 70/120

  * tcl/subcmd.tcl.in: Ensure no autoinit loop when set_shell_startup set  Set
  the __MODULES_AUTOINIT_INPROGRESS environment variable when running the
  `autoinit` sub-command and quit autoinit process if this variable is found
  defined and equal to 1 when starting it. Ensure this way that an autoinit
  process will not be triggered indefinitely by itself when the
  set_shell_startup option is enabled and some module loaded at initialization
  time relies on the execution of a bash script.  Fixes #414.

2021-09-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/010-environ.exp: ts: ensure shell startup is not
  set when running tests

2021-09-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modfind.tcl.in, testsuite/modules.50-cmds/078-refresh.exp: Set tag on
  modvr desig of loaded mod  Correctly detect tags set on loaded modules when
  refreshing them.  Update the cacheCurrentModules procedure to record the
  tags of loaded modules also on the module name version and variant list
  designation. So when the `module-info tags` command is called from a
  modulefile loaded with variant set, it correctly retrieves the tags defined
  on this module if currently loaded.  Add the report mode '6' on
  getVariantList procedure to proceed like mode '1' but without updating the
  key map reference.

2021-09-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/variants.rst: doc: fix missing space between list
  entries in variant doc

2021-09-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/example/log-module-commands/siteconfig.tcl,
  doc/source/cookbook/log-module-commands.rst: doc: extend *Log module
  commands* cookbook  Improve the *Log module commands* cookbook to rely on
  the `trace` Tcl command to track every modulefile evaluation and module/ml
  procedure calls.  Fixes #412.

2021-09-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * tcl/modspec.tcl,
  testsuite/modules.70-maint/276-adv_version_spec-rangein.exp: Fix version res
  when icase on & extdfl off  Fix the advanced version specifier resolution
  when the extended_default option is off and icase option is on when
  resolving version list specification.  Fixes #411.

2021-09-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/FAQ.rst: doc: desc module reload on screen session in FAQ

2021-09-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, contrib/rpm/environment-modules.spec.in, doc/source/conf.py,
  version.inc.in: Release of version 5.0.0

  * MIGRATING.rst: doc: desc. Upgraded dfl conf in MIGRATING for Modules 5

2021-09-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst, doc/source/changes.rst: doc: describe first MIGRATING items
  for Modules 5.0

2021-09-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/changes.rst: doc: desc. new special chars for module name in
  change doc

  * doc/source/index.rst: doc: add ref to changes doc on index

  * README.md: doc: add ref to changes doc in README

2021-09-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/changes.rst: doc: desc. Modules 5 diffs in changes document

  * NEWS.rst: doc: fix rst markup in NEWS

2021-09-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/changes.rst: doc: add config option section in changes doc

  * NEWS.rst, doc/source/changes.rst: doc: reorg changes document

  * MIGRATING.rst, Makefile, NEWS.rst, configure,
  contrib/rpm/environment-modules.spec.in, doc/Makefile,
  doc/source/{diff_v3_v4.rst => changes.rst}, doc/source/index.rst:
  doc/install: rename 'diff_v3_v4' doc into 'changes'

  * NEWS.rst, contrib/rpm/environment-modules.spec.in: rpm: add INSTALL.txt
  Include INSTALL guide to the rpm package.

  * contrib/rpm/environment-modules.spec.in, doc/Makefile, doc/example.txt,
  doc/readme.txt: doc/install: remove deprecated example.txt guide
  example.txt was providing hints applying to old version of Modules. Now the
  new commands and configuration mechanism simplify such tasks. Should rely on
  INSTALL guide instead.

2021-09-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.rst, NEWS.rst, .../cookbook/ensure-user-qualify-modules.rst: doc:
  apply file rst markup for initrc/modulespath

  * NEWS.rst, doc/source/conf.py, doc/source/module.rst: doc: document
  initrc/modulespath files in module(1)

  * INSTALL.rst, NEWS.rst, doc/source/module.rst: doc: fix some rst markup in
  INSTALL/NEWS/module(1)

2021-09-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.rst, NEWS.rst, doc/source/module.rst, doc/source/modulefile.rst:
  doc: improve config steps explanation in INSTALL

2021-09-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile, README.md: doc: add doc ref and links in README

  * README.md, doc/source/index.rst: doc: update gcc example in README/index

  * doc/source/index.rst: doc: add 'Get started with Modules' section in index

  * doc/source/index.rst: doc: fix envvar/command markup in index

2021-09-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst, NEWS.rst: doc: clarify TOC and title of MIGRATING

  * NEWS.rst: doc: desc. silent_shell_debug changes in NEWS

  * doc/source/module.rst: doc: update MODULES_SILENT_SHELL_DEBUG in module(1)

  * testsuite/example/initrc.in, testsuite/modules.70-maint/120-autoinit.exp:
  ts: add silent_shell_debug autoinit test

  * testsuite/modules.70-maint/220-config.exp: ts: update silent_shell_debug
  config tests

  * .cirrus.yml, .github/workflows/linux_tests.yaml: ts: update CI configs as
  silent sh dbg is disabled by dfl

2021-08-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/initrc.in: init: example to enable silent_shell_debug in dfl initrc

  * INSTALL.rst: doc: update --enable-silent-shell-debug-support desc in
  INSTALL

  * configure: install: disable silent_shell_debug by default  Change
  installation option --enable-silent-shell-debug-support to disable it by
  default. Now the silent_shell_debug configuration option enables to locally
  enable this feature from the initrc configuration file.

  * Makefile, tcl/envmngt.tcl.in, tcl/init.tcl.in: Set silent_shell_debug code
  if option enabled on autoinit  Generate the silent_shell_debug code in
  module shell function during the autoinit processing if the
  silent_shell_debug configuration option is enabled.  Choice made at
  installation time may now be updated later on with the silent_shell_debug
  configuration option. If enabled prior calling autoinit (or enabled within
  initrc configuration file), the silent shell debug code will be included in
  module shell function.

  * init/Makefile, init/bash.in, init/ksh.in, init/sh.in, init/zsh.in: init:
  always set code for silent_shell_debug code  Update initialization scripts
  to make the code for the silent_shell_debug mechanism always defined there.

  * NEWS.rst: doc: desc. quarantine mechanism changes in NEWS

2021-08-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst: doc: desc. MODULES_QUARANTINE_SUPPORT in module(1)

  * doc/source/module.rst: doc: desc. __MODULES_QUARANTINE_SET in module(1)

  * INSTALL.rst: doc: update --enable-quarantine-support desc in INSTALL

  * testsuite/example/initrc.in, testsuite/modules.00-init/110-quar.exp,
  testsuite/modules.70-maint/120-autoinit.exp: ts: add some quarantine tests

2021-08-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .cirrus.yml, .github/workflows/linux_tests.yaml: ts: update CI configs as
  quarantine is disabled by dfl

2021-08-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/initrc.in: init: example to enable quarantine_support in dfl initrc

  * configure: install: disable quarantine_support by default  Change
  installation option --enable-quarantine-support to disable it by default.
  Now the quarantine_support configuration option enables to locally enable
  this feature from the initrc configuration file.

  * testsuite/modules.70-maint/220-config.exp: ts: test quarantine_support
  config option

  * init/Makefile, init/fish_completion, init/zsh-functions/_module.in: init:
  add quarantine_support config to completion script

  * Makefile, init/Makefile, tcl/envmngt.tcl.in, tcl/init.tcl.in: Add
  quarantine_support configuration option  Convert the
  --enable-quarantine-support installation option in a quarantine_support
  configuration option. When this option is enabled the autoinit sub-command
  produces the module shell code with quarantine mecahnism support. When
  disabled, code is generated without quarantine support.  This way decision
  to have or not the quarantine mechanism code can also be made in initrc
  configuration file. As a result --enable-quarantine-support installation
  option new controls the default behavior to generate or not the quarantine
  code, but this could now be superseded in initrc configuration file.
  Different setup cases are foreseen: 1. quarantine code has been included in
  module shell function, then quarantine_support config is disabled > config
  disablement is not effective as shell code is already set 2. quarantine code
  has not been included in module shell function, then quarantine_support
  config is enabled >  config enablement is not effective as shell code is
  already set 3. during module initialization, quarantine_support config is
  enabled in initrc > shell code generated with quarantine code 4. during
  module initialization, quarantine_support config is disabled in initrc >
  shell code generated without quarantine code 5. during module
  initialization, quarantine_support config is enabled by default or via env >
  shell code generated with quarantine code 6. during module initialization,
  quarantine_support config is disabled by default or via env > shell code
  generated with quarantine code

2021-08-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/110-quar.exp,
  testsuite/modules.70-maint/120-autoinit.exp: ts: update module function
  def/quarantine tests

  * tcl/main.tcl.in: Always enable quarantine restore mecanishm code  Always
  set in modulecmd.tcl script the code to restore the user environment set in
  quarantine by module shell function of shell initialization script. Do not
  depend on the quarantinesupport installation option to enable of disable
  this code in the main procedure of the modulecmd.tcl script.  Thanks to the
  __MODULES_QUARANTINE_SET environment variable, we know when to branch to
  execute the quarantine unhold code.

  * init/bash.in, init/cmake.in, init/fish.in, init/ksh.in, init/perl.pm.in,
  init/python.py.in, init/r.R.in, init/ruby.rb.in, init/sh.in, init/tcl.in,
  init/zsh.in, tcl/envmngt.tcl.in, tcl/main.tcl.in: Restore quarantine if
  __MODULES_QUARANTINE_SET defined  Introduce the __MODULES_QUARANTINE_SET
  environment variable to put back when starting modulecmd.tcl run the
  environment set on hold by initialization script (for autoinit calls) or by
  module shell function (for regular calls).  This new environment variable is
  tested to apply quarantine unhold mechanism instead of checking if the
  run_quarantine configuration option is set and shell accurately supports the
  mecanishm. With this change it is possible to enable or disable the
  quarantine support at module initialization time (through initrc
  configuration file) instead of freezing this configuration when building the
  modulecmd.tcl script.

2021-08-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/bash.in, init/cmake.in, init/fish.in, init/ksh.in, init/perl.pm.in,
  init/python.py.in, init/r.R.in, init/ruby.rb.in, init/sh.in, init/tcl.in,
  init/zsh.in: init: quarantine mech always set for autoinit call  Update
  initialization scripts to make the quarantine mechanism always defined for
  the module autoinit call.

2021-08-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .gitignore, .globalrc, Makefile: install: add Makefile rules to build
  Gtags indexes

  * INSTALL.rst, NEWS.rst: doc: alphabetically sort installation option in
  INSTALL

  * doc/source/design/sticky-modules.rst: doc: clarify unload sticky errors in
  design doc

2021-08-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/conf.py: doc: same index template for mfcmd/mfvar than others

2021-08-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/home.3/.modulerc, testsuite/home.4/.modulerc,
  testsuite/home/coll-hide-once-loaded,
  testsuite/modules.20-locate/057-mcookie.exp,
  testsuite/modules.20-locate/060-rc.exp,
  testsuite/modules.20-locate/070-homerc.exp,
  testsuite/modules.70-maint/090-source.exp,
  testsuite/modules.70-maint/120-autoinit.exp: ts: test magic cookie on
  init/global/user rc files

  * NEWS.rst, doc/source/module.rst, tcl/mfinterp.tcl.in, tcl/modfind.tcl.in,
  tcl/subcmd.tcl.in: Enforce magic cookie in source and init/user/global rc
  Enforce use of the module magic cookie (i.e., `#%Module`) at the start of
  global or user rc files, `initrc` configuration file or any scriptfile
  passed for evaluation to the `source` sub-command. These files are not
  evaluated and an error is produced if the magic cookie is missing or if the
  optional version number placed after the cookie string is higher than the
  version of the `modulecmd.tcl` script in use.  Note that version 3.2 of
  Modules was already enforcing the magic cookie for the user/global rc files.
  This enforced back globally to ensure people understand, especially for the
  source sub-command, that the script is made for module and it is not a shell
  script. It will also help to protect module from automatically evaluating
  files with expected file name but unrelated content.  This commit among
  things reverts 3fe71c0d.

  * init/initrc.in: init: remove useless '1.0' in initrc magic cookie  Remove
  the '1.0' in the #%Module magic cookie header of the generated initrc
  configuration file. Users may define a more appropriate magic cookie
  compatibility version.

  * testsuite/install.00-init/006-procs.exp,
  testsuite/install.00-init/030-options.exp,
  testsuite/install.00-init/060-quar.exp: ts: fix install tests when dfl
  loadedmodules are set  When the loadedmodules installation option is set and
  if the module initialization is triggered then the default module to load
  will emit a message on stderr. Adapt the testsuite code, especially the
  _test_sub procedure to automatically take this situation into account (no
  need to set these load message in each expected stderr answer).

  * tcl/mfinterp.tcl.in, testsuite/modulefiles.3/unsetenv/2.0,
  testsuite/modules.50-cmds/030-unsetenv.exp,
  testsuite/modules.50-cmds/035-unsetenv-undo.exp: Error if bad arg number on
  unsetenv  Raise error if more than 2 arguments are set on the unsetenv
  modulefile command. Specific code need to be set here as we now use args for
  the unsetenv procedure (to distinguish between no value to restore and an
  empty string value to restore)

  * tcl/subcmd.tcl.in: rc_running state is useless for initrc eval  The
  rc_running state used to distinguish top evaluation from the rest is useless
  for the initrc evaluation as the isTopEvaluation procedure already
  recognized it as top evaluation as in this situation depth of modulename
  state is 1 and above command name is source.

2021-08-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, tcl/report.tcl.in, tcl/subcmd.tcl.in,
  testsuite/modules.50-cmds/430-implicit-req.exp,
  testsuite/modules.50-cmds/431-not-req.exp,
  testsuite/modules.50-cmds/490-try-load.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.70-maint/120-autoinit.exp: Fix module load/unload msg of
  restore/source subcmds  Report the modules loading and unloading during the
  `module` command initialization (i.e., during the evaluation of the `initrc`
  configuration file). These report messages are disabled when the `verbosity`
  configuration option is set to `concise` or `silent`.  During a module
  `restore` or `source`, only report the module load and unload directly
  triggered by these sub-commands. Load and unload triggered by other modules
  are reported through the automated module handling messages of the main
  modules.  Register the cmdModuleSource call made by cmdModuleAutoinit as a
  `source` command call to benefit from the message report mechanism. Do not
  apply the same for the cmdModuleSource call made by runModulerc as those
  calls will be changed to execute-modulerc in the future.

  * .../modemptyarg => modulefiles.3/modbad}/source,
  testsuite/modulefiles.allin/allin/1,
  testsuite/modules.50-cmds/151-module-onlytop.exp,
  testsuite/modules.50-cmds/152-module-emptyarg.exp,
  testsuite/modules.50-cmds/330-source.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.70-maint/090-source.exp: ts: adapt 'module source' tests
  Do not remove now useless source/* modulefiles not to break 'module avail'
  bench comparison with previous versions.

  * NEWS.rst, tcl/main.tcl.in, tcl/subcmd.tcl.in: Forbid use of source subcmd
  in modulefile  Forbid use of `module source` command in modulefile or in an
  initialization rc file, the `source` Tcl command should be used instead.
  `source` module sub-command should only be called from the command-line.
  Using 'module source' in a modulefile was a non-sense as it does not provide
  any benefit than using the regular 'source' Tcl command. It also implied to
  reverse the subcommand to the unsource one when unloading the module.

  * doc/source/modulefile.rst: doc: desc when --not-req option has been added

  * NEWS.rst, tcl/init.tcl.in, tcl/mfinterp.tcl.in,
  testsuite/modules.70-maint/220-config.exp: Remove useless tcl_version_lt85
  internal state  Remove internal state tcl_version_lt85 as Tcl 8.5+ is now a
  requirement.

2021-08-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, tcl/mfinterp.tcl.in, testsuite/modulefiles/info/.modulerc,
  testsuite/modules.50-cmds/321-is-used.exp: Enable is-used mfcmd in modulerc
  Make is-used modulefile command available from a modulerc evaluation
  context.

  * NEWS.rst, tcl/mfinterp.tcl.in, testsuite/modulefiles/system/.modulerc,
  testsuite/modules.50-cmds/140-system.exp: Enable system mfcmd in modulerc
  Fully enable the system modulefile command in modulerc, whatever the
  underlying module evaluation mode (unload, display, whatis, etc).

2021-08-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/modulefile.rst: doc: update desc. of unsetenv on
  unload in NEWS/man

  * testsuite/modules.50-cmds/035-unsetenv-undo.exp,
  testsuite/modules.50-cmds/039-unsetenv-env.exp,
  testsuite/modules.50-cmds/269-getenv-env.exp,
  testsuite/modules.50-cmds/360-restoreenv.exp: ts: update tests of unsetenv
  value to restore mechanism

  * tcl/mfinterp.tcl.in: Distinguish empty str from no value to restore on
  unsetenv  Distinguish if the unsetenv command is called without a value to
  restore on unload or with an empty string value to restore.

  * tcl/mfinterp.tcl.in: No var unset if unsetenv is run on unload mode  Do
  not unset environment variable when running the unsetenv modulefile command
  during an unload evaluation with no value to restore provided.  With this
  change, the unsetenv command acts like the remove-path command on unload
  mode.

  * NEWS.rst: doc: fix few markup issues in NEWS

2021-08-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/design/variants.rst, doc/source/modulefile.rst,
  tcl/mfinterp.tcl.in, testsuite/modulefiles.3/variant/4.0,
  testsuite/modules.70-maint/372-variant-display.exp: No error if variant
  unspecified on display mode  No error is raised when evaluating in `display`
  mode a modulefile without a value specified for the variant it defines. This
  change helps to learn all the variant a modulefile defines. As a result, the
  unspecified variant is not instantiated in the ModuleVariant array variable.
  Fixes #406.

  * NEWS.rst, init/Makefile, init/initrc.in: init: set modulepaths only in
  modulespath if installed  When the installation option
  `--enable-modulespath` is set, the list of modulepath to enable by default
  is now only defined in the `modulespath` configuration file and not anymore
  in the `initrc` configuration file.

2021-08-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/Makefile: install: use bash shell to translate init scripts  Set init
  Makefile to use bash as shell to correctly expand the $'' syntax used in
  translate-in-script.

2021-08-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/120-autoinit.exp: ts: modulespath and initrc
  are both use if deployed

2021-08-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/025-autoinit.exp,
  testsuite/modulefiles.3/refresh/4.0,
  testsuite/modules.70-maint/120-autoinit.exp: ts: test refresh mechanism
  during autoinit

  * NEWS.rst, tcl/subcmd.tcl.in: Eval both modulespath and initrc when
  initializing  When initializing Modules, evaluate the initrc configuration
  file in addition to the the modulespath configuration file and not instead
  of this file. initrc is evaluated after modulespath file.  Both
  configuration files are only evaluated if the current environment if found
  unset, in other words when the MODULEPATH and LOADEDMODULES environment
  variables are both found unset or empty.  As initrc is evaluated after
  modulespath, it has the ability to undo what was done by modulespath,
  especially if it restores a module collection.

  * NEWS.rst, init/initrc.in: init: add example code to load init env in
  initrc  Add example code in default initrc, the initialization script of
  Modules, to either restore user's default collection if it exists or load a
  predefined module list when initializating Modules.

  * NEWS.rst, tcl/subcmd.tcl.in: Refresh loaded modules when initializing
  When initializing Modules, refresh the loaded modules in case some user
  environment is already configured. This is especially useful when starting a
  sub-shell session as it ensures that the loaded environment in parent shell
  will be correctly inherited, as the `refresh` sub-command re-applies the
  non-persistent environment configuration (i.e., shell alias and function
  that are not exported to the sub-shell).  If a refresh has to be attempted,
  loaded environment is parsed. In case this environment is inconsistent, an
  error code is returned but this error is trapped and initialization
  evaluation continues without launching the refresh process. No error message
  is reported to avoid noise on the full shell session initialization. The
  user will get the error message as soon as he will launch the next module
  command that parse the loaded environment.  Fixes #86.

2021-08-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/refresh/1.0, testsuite/modulefiles.3/refresh/2.0,
  testsuite/modules.50-cmds/078-refresh.exp: ts: test
  break/exit/continue/unkcmd err on refresh subcmd

  * tcl/mfinterp.tcl.in, tcl/subcmd.tcl.in: Handle break/exit/continue err in
  refresh subcmd

2021-08-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/078-refresh.exp: ts: test refresh subcmd in
  verbose mode

  * tcl/subcmd.tcl.in: Apply msg record mech to refresh subcmd

  * NEWS.rst, tcl/mfinterp.tcl.in: Run resulting source-sh mfcmd through
  modfile interp  Evaluate the modulefile commands resulting from the
  `source-sh` evaluation through the current modulefile Tcl interpreter. This
  way the modulefile commands are evaluated according to the current
  modulefile evaluation mode.

  * NEWS.rst: doc: desc. refresh subcmd change in NEWS

  * testsuite/example/initrc.in, testsuite/modulefiles.3/modbad/refresh,
  testsuite/modulefiles.3/refresh/.modulerc,
  testsuite/modulefiles.3/refresh/1.0, testsuite/modulefiles.3/refresh/2.0,
  testsuite/modulefiles.3/refresh/3.0, testsuite/modulefiles/info/commandexp,
  testsuite/modulefiles/info/mode3, testsuite/modules.00-init/071-args.exp,
  testsuite/modules.50-cmds/078-refresh.exp,
  testsuite/modules.50-cmds/083-info-mode.exp,
  testsuite/modules.50-cmds/084-info-mode-exp.exp,
  testsuite/modules.50-cmds/151-module-onlytop.exp,
  testsuite/modules.50-cmds/282-info-command.exp,
  testsuite/modules.50-cmds/283-info-command-exp.exp,
  testsuite/modules.70-maint/120-autoinit.exp,
  testsuite/modules.70-maint/180-reload.exp: ts: add tests for 'refresh'
  subcmd

  * testsuite/config/base-config.exp: ts: allow expected result with only OK
  code  To produce the accurate "return true" code for tested shell.

  * doc/source/modulefile.rst, testsuite/modulefiles/info/commandexp,
  testsuite/modules.50-cmds/282-info-command.exp,
  testsuite/modules.50-cmds/283-info-command-exp.exp: ts/doc: add try-load
  test/doc on 'module-info command'

  * doc/source/modulefile.rst: doc: desc. new mode/cmd on 'module-info
  {mode,command}'

  * tcl/mfinterp.tcl.in: Set 'nonpersist' as an alias of 'refresh' eval mode
  For compatibility with Modules 3.2, module-info mode returns true if tested
  against the `nonpersist` string and currently in `refresh` evaluation mode.

  * init/fish_completion, init/zsh-functions/_module.in: init: update refresh
  subcmd desc in completion scripts

  * doc/source/module.rst: doc: desc. refresh subcmd in module(1)

  * tcl/main.tcl.in, tcl/mfinterp.tcl.in, tcl/report.tcl.in,
  tcl/subcmd.tcl.in: Revive the refresh subcmd  Restore the refresh
  sub-command as it worked in version 3.2: not anymore an alias on the reload
  sub-command but an evaluation of each loaded module (in their loaded order)
  in 'refresh' mode.  `refresh` evaluation mode only execute the modulefile
  commands generating volatile environment changes like set-alias and
  set-function. variant and source-sh commands should also be enabled to
  ensure a modulefile evaluation that regenerates the expected volatile
  environment changes.  `refresh` evaluation mode does not require that the
  modulefile commands triggering environment variable changes (setenv,
  unsetenv, append-path, etc) to operate as the targetted variables should
  already be set as the refreshed modules are loaded. Same goes for the
  x-resource and system modulefile commands. Configuring these commands as 'no
  operation' for this refresh mode should not disrupt the modulefile
  evaluation.  refresh sub-command does not accept any argument and cannot be
  called within modulefile or sourced or initilization module script (initrc).
  When the evaluation of a refreshed modulefile fails, the environment changes
  prior this evaluation is restored. Then refresh evaluation continue on the
  remaining loaded modules.

2021-08-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/module.rst, doc/source/modulefile.rst: doc: clarify
  already defined path on use/{append,prepend}-path  Fixes #60.

  * NEWS.rst: doc: update next release target in NEWS

  * testsuite/modules.10-use/070-unuse.exp,
  testsuite/modules.50-cmds/017-use-undo.exp,
  testsuite/modules.50-cmds/350-allin.exp: ts: fix unuse when multiple paths
  are set as one str

  * NEWS.rst, doc/source/module.rst, tcl/subcmd.tcl.in: Fix unuse when
  multiple paths are passed as single arg  Fix unuse sub-command when sereval
  modulepaths are specified as a single argument (i.e.,
  `/path/to/dir1:/path/to/dir2`). Enabled modulepaths were not correctly
  detected when specified this way.

  * NEWS.rst: doc: desc. ignore ref count on subcmds in NEWS

2021-08-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/initrc.in, testsuite/modulefiles/use/2.0,
  testsuite/modules.10-use/030-use.exp,
  testsuite/modules.10-use/070-unuse.exp,
  testsuite/modules.50-cmds/015-use.exp,
  testsuite/modules.50-cmds/017-use-undo.exp,
  testsuite/modules.70-maint/120-autoinit.exp,
  testsuite/modules.70-maint/151-prepend-path.exp,
  testsuite/modules.70-maint/152-remove-path.exp: ts: add new ref count tests
  on *use/*-path subcmds

  * testsuite/modules.10-use/030-use.exp,
  testsuite/modules.10-use/031-append.exp,
  testsuite/modules.10-use/032-prepend.exp,
  testsuite/modules.10-use/070-unuse.exp,
  testsuite/modules.20-locate/118-hidden-loaded.exp,
  testsuite/modules.70-maint/150-append-path.exp,
  testsuite/modules.70-maint/151-prepend-path.exp,
  testsuite/modules.70-maint/152-remove-path.exp: ts: ignore ref count from
  *use/*-path subcmds

  * doc/source/module.rst: doc: ignore ref count from *use/*-path subcmds

  * tcl/subcmd.tcl.in: Ignore ref count on append/prepend/remove-path subcmds
  The append-path, prepend-path and remove-path sub-commands are always called
  from a top level context. The reference counter associated with each entry
  in targeted environment variable is now ignored so:  - a "module
  prepend/append-path" will not increase the reference counter of a path entry
  already defined unless if the duplication mode is enabled  - a "module
  remove-path" will remove specified paths whatever their reference counter
  value.

  * tcl/subcmd.tcl.in: Ignore ref count on use/unuse subcmds  When the use and
  unuse sub-commands are called from a top level context, ignore the reference
  counter associated to each entry in the MODULEPATH environment variable.
  This way a "module use" called from top context will not increase the
  reference counter of a path entry already defined and a "module unuse"
  called from top context will remove specified paths whatever their reference
  counter value.

  * tcl/envmngt.tcl.in, tcl/mfinterp.tcl.in: Add --ignore-refcount opt to
  add-path/unload-path proc  Add the '--ignore-refcount' option to the
  add-path and unload-path procedures (parsed by parsePathCommandArgs
  procedure). When set this option makes the reference counter value ignored.
  Which means on add-path that the reference counter of each path element
  passed is not increased unless if the duplication mode is enabled.  On
  unload-path it means that the reference counter is not take into account and
  each path element is removed (even if the reference counter is greater than
  1).

  * tcl/subcmd.tcl.in: Pass all paths at once to {add,unload}-path in
  use/unuse  Update cmdModuleUse and cmdModuleUnuse to pass all the paths
  specified respectively for addition or removal to the underlying environment
  management procedure (respectively add-path and unload-path).

  * tcl/main.tcl.in: Add isTopEvaluation proc  Gather in a dedicated procedure
  named isTopEvaluation the test to know if current evaluation is made at top
  level.  "Top level" is either: (1) at the modulecmd level (module command
  written by user in terminal or script) or (2) during  the evaluation of rc
  or modulefile by a source or autoinit sub-command triggered from modulecmd
  level or (3) during the evaluation of global rc file.  (2) and (3) are
  considered "extended" top evaluation contexts.

2021-08-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.70-maint/151-prepend-path.exp: ts: unset ref cnt var if
  found set but no cnt to record

  * tcl/envmngt.tcl.in: Unset ref cnt var if found set but no cnt to record
  Unset the reference counter variable if it is found defined whereas there is
  no counter to record for the associated path-like variable.

  * testsuite/modules.00-init/120-siteconfig.exp,
  testsuite/modules.50-cmds/042-append-delim.exp,
  testsuite/modules.50-cmds/047-app-del-undo.exp,
  testsuite/modules.50-cmds/062-remove-delim.exp,
  testsuite/modules.70-maint/151-prepend-path.exp,
  testsuite/modules.70-maint/152-remove-path.exp: ts: add new reference
  counter tests

  * tcl/envmngt.tcl.in: Ignore reference count lower than 1  If a reference
  count for an element in a path-like variable is lower than 1, this value is
  ignored which means element is considered added only once.

2021-08-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/config/base-config.exp,
  testsuite/modules.00-init/120-siteconfig.exp,
  testsuite/modules.10-use/030-use.exp,
  testsuite/modules.10-use/031-append.exp,
  testsuite/modules.10-use/032-prepend.exp,
  testsuite/modules.10-use/040-load-use.exp,
  testsuite/modules.10-use/070-unuse.exp,
  testsuite/modules.10-use/080-access-use.exp,
  testsuite/modules.10-use/090-bad.exp,
  testsuite/modules.20-locate/100-wspace.exp,
  testsuite/modules.20-locate/118-hidden-loaded.exp,
  testsuite/modules.50-cmds/015-use.exp,
  testsuite/modules.50-cmds/017-use-undo.exp,
  testsuite/modules.50-cmds/028-setenv-refcount.exp,
  .../modules.50-cmds/038-unsetenv-refcount.exp,
  testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.50-cmds/042-append-delim.exp,
  testsuite/modules.50-cmds/045-append-undo.exp,
  testsuite/modules.50-cmds/047-app-del-undo.exp,
  testsuite/modules.50-cmds/049-append-env.exp,
  testsuite/modules.50-cmds/050-prepend.exp,
  testsuite/modules.50-cmds/052-prepend-delim.exp,
  testsuite/modules.50-cmds/055-prepend-undo.exp,
  testsuite/modules.50-cmds/057-pre-del-undo.exp,
  testsuite/modules.50-cmds/059-prepend-env.exp,
  testsuite/modules.50-cmds/060-remove.exp,
  testsuite/modules.50-cmds/062-remove-delim.exp,
  testsuite/modules.50-cmds/069-remove-env.exp,
  testsuite/modules.50-cmds/172-swap-app-delim.exp,
  testsuite/modules.50-cmds/173-swap-app-delim.exp,
  testsuite/modules.50-cmds/175-swap2.exp,
  testsuite/modules.50-cmds/177-swap-prep-delim.exp,
  testsuite/modules.50-cmds/178-swap-prep-delim.exp,
  testsuite/modules.50-cmds/180-unload.exp,
  testsuite/modules.50-cmds/321-is-used.exp,
  testsuite/modules.50-cmds/330-source.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.50-cmds/359-allin-env.exp,
  testsuite/modules.50-cmds/373-deps4.exp,
  testsuite/modules.50-cmds/400-source-sh.exp,
  testsuite/modules.50-cmds/431-not-req.exp,
  testsuite/modules.50-cmds/471-variant-unload.exp,
  testsuite/modules.50-cmds/472-getvariant.exp,
  testsuite/modules.50-cmds/479-variant-boolean.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/080-access-coll.exp,
  testsuite/modules.70-maint/020-update.exp,
  testsuite/modules.70-maint/120-autoinit.exp,
  testsuite/modules.70-maint/140-multiargs.exp,
  testsuite/modules.70-maint/150-append-path.exp,
  testsuite/modules.70-maint/151-prepend-path.exp,
  testsuite/modules.70-maint/152-remove-path.exp,
  testsuite/modules.70-maint/210-clear.exp,
  testsuite/modules.70-maint/280-ml.exp,
  testsuite/modules.95-version/020-load-version.exp,
  testsuite/modules.95-version/020-unload.exp,
  testsuite/modules.95-version/022-load2.exp,
  testsuite/modules.95-version/022-unload2.exp,
  testsuite/modules.95-version/050-fullpathentry.exp: ts: update tests for ref
  cnt change for elt added once

  * NEWS.rst, doc/source/module.rst, doc/source/modulefile.rst: doc: desc
  removal from ref count var of elts added once

  * tcl/envmngt.tcl.in: Update ref count var when element is added several
  times  When an element is added to a path-like variable through the
  append-path or prepend-path modulefile commands, add this element to the
  associated reference counter variable only when this element is added
  multiple times to the path-like variable. When an element is removed from a
  path-like variable, this element is removed from the reference counter
  variable when its counter is equal to 1.  Exception is made when element is
  an empty string: in this case element is added to the reference counter
  variable even if only added once to the path-like variable in order to
  distinguish between an empty path-like variable and a path-like variable
  containing an empty string as single element.

  * NEWS.rst: doc: desc. __MODULES_SHARE_* renaming in NEWS

  * testsuite/install.00-init/005-init_ts.exp,
  testsuite/modules.00-init/005-init_ts.exp: ts: remove lassign/lreverse proc
  setup for Tcl8.4  Since Tcl8.5 or later is now required.

2021-08-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/diff_v3_v4.rst, doc/source/module.rst,
  doc/source/modulefile.rst: doc: update reference to renamed
  __MODULES_SHARE_* vars

  * script/mb: script: update modshare var name in mb

  * testsuite/config/base-config.exp,
  testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.00-init/120-siteconfig.exp,
  testsuite/modules.10-use/030-use.exp,
  testsuite/modules.10-use/031-append.exp,
  testsuite/modules.10-use/032-prepend.exp,
  testsuite/modules.10-use/070-unuse.exp,
  testsuite/modules.10-use/080-access-use.exp,
  testsuite/modules.50-cmds/028-setenv-refcount.exp,
  .../modules.50-cmds/038-unsetenv-refcount.exp,
  testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.50-cmds/042-append-delim.exp,
  testsuite/modules.50-cmds/045-append-undo.exp,
  testsuite/modules.50-cmds/047-app-del-undo.exp,
  testsuite/modules.50-cmds/050-prepend.exp,
  testsuite/modules.50-cmds/052-prepend-delim.exp,
  testsuite/modules.50-cmds/055-prepend-undo.exp,
  testsuite/modules.50-cmds/057-pre-del-undo.exp,
  testsuite/modules.50-cmds/060-remove.exp,
  testsuite/modules.50-cmds/062-remove-delim.exp,
  testsuite/modules.50-cmds/065-remove-undo.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.50-cmds/359-allin-env.exp,
  testsuite/modules.50-cmds/373-deps4.exp,
  testsuite/modules.50-cmds/400-source-sh.exp,
  testsuite/modules.50-cmds/471-variant-unload.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.70-maint/120-autoinit.exp,
  testsuite/modules.70-maint/140-multiargs.exp,
  testsuite/modules.70-maint/150-append-path.exp,
  testsuite/modules.70-maint/151-prepend-path.exp,
  testsuite/modules.70-maint/152-remove-path.exp,
  testsuite/modules.70-maint/210-clear.exp,
  testsuite/modules.70-maint/220-config.exp,
  testsuite/modules.70-maint/280-ml.exp: ts: update reference to renamed
  __MODULES_SHARE_* vars

  * tcl/envmngt.tcl.in, tcl/subcmd.tcl.in: Use '__MODULES_SHARE_' prefix on
  ref count env var  Rename the environment variables used to record the
  reference count of each element in path-like environment variables. A
  `__MODULES_SHARE_` prefix is applied to the name of these variables instead
  of the `_modshare` suffix to indicate they are intended for Modules internal
  use of only.  It also helps with DYLD_* environment variables where using a
  suffixed-variable led to warning messages on OS X.

  * NEWS.rst: doc: desc no more ref count for mod-specific vars in NEWS

  * testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/130-conflict-full.exp,
  testsuite/modules.50-cmds/380-altname.exp,
  testsuite/modules.70-maint/180-reload.exp,
  testsuite/modules.70-maint/320-tags.exp: ts: empty elts are now cleared from
  variable  Adapt tests with element elements injected in Modules environment
  variables like LOADEDMODULES: since there is no more reference counter
  variable (like LOADEDMODULES_modshare) the empty entries added on such
  variable are cleared when a new entry is added to the variable.  Such empty
  entries are non-sense for these Modules variables so having them cleaned
  when the variable is updated is a positive side effect.

2021-08-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/377-deps8.exp,
  testsuite/modules.50-cmds/450-hidden-loaded.exp,
  testsuite/modules.50-cmds/473-variant-prereq.exp,
  testsuite/modules.50-cmds/474-variant-conflict.exp,
  testsuite/modules.70-maint/280-ml.exp: ts: correct erroneous env of some
  tests

2021-08-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/config/base-config.exp, testsuite/modulefiles/spread/3.0,
  testsuite/modulefiles/spread/7.0,
  testsuite/modulefiles/spreadrc/dir3/.modulerc,
  testsuite/modulefiles/spreadrc/dir3/1.0,
  testsuite/modulefiles/spreadrc/dir4/.modulerc,
  testsuite/modulefiles/spreadrc/dir7/.modulerc,
  testsuite/modulefiles/spreadrc/dir7/1.0,
  testsuite/modulefiles/spreadrc/dir8/.modulerc,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.00-init/100-pager.exp,
  testsuite/modules.00-init/120-siteconfig.exp,
  testsuite/modules.00-init/130-auto_handling.exp,
  testsuite/modules.00-init/140-color.exp,
  testsuite/modules.10-use/040-load-use.exp,
  testsuite/modules.10-use/080-access-use.exp,
  testsuite/modules.20-locate/031-defvers2.exp,
  testsuite/modules.20-locate/035-defname.exp,
  testsuite/modules.20-locate/038-defcontext.exp,
  testsuite/modules.20-locate/040-alias.exp,
  testsuite/modules.20-locate/043-virtual.exp,
  testsuite/modules.20-locate/045-symvers.exp,
  testsuite/modules.20-locate/046-getsym.exp,
  testsuite/modules.20-locate/047-symerrs.exp,
  testsuite/modules.20-locate/048-symexec.exp,
  testsuite/modules.20-locate/050-locrc.exp,
  testsuite/modules.20-locate/057-mcookie.exp,
  testsuite/modules.20-locate/060-rc.exp,
  testsuite/modules.20-locate/066-modulepath-rc.exp,
  testsuite/modules.20-locate/067-hidden.exp,
  testsuite/modules.20-locate/068-transitive.exp,
  testsuite/modules.20-locate/069-cross.exp,
  testsuite/modules.20-locate/070-homerc.exp,
  testsuite/modules.20-locate/075-symlink.exp,
  testsuite/modules.20-locate/080-access.exp,
  testsuite/modules.20-locate/081-access-rc.exp,
  testsuite/modules.20-locate/100-wspace.exp,
  testsuite/modules.20-locate/110-hide.exp,
  testsuite/modules.20-locate/111-hide-hard.exp,
  testsuite/modules.20-locate/111-hide-soft.exp,
  .../modules.20-locate/112-hide-user-group.exp,
  testsuite/modules.20-locate/113-hide-all-opt.exp,
  .../modules.20-locate/114-hide-before-after.exp,
  testsuite/modules.20-locate/115-forbid.exp,
  .../modules.20-locate/116-forbid-before-after.exp,
  .../modules.20-locate/117-forbid-user-group.exp,
  testsuite/modules.20-locate/118-hidden-loaded.exp,
  testsuite/modules.20-locate/119-hide-cascading.exp,
  testsuite/modules.50-cmds/015-use.exp,
  testsuite/modules.50-cmds/017-use-undo.exp,
  testsuite/modules.50-cmds/020-setenv.exp,
  testsuite/modules.50-cmds/022-setenv-eschars.exp,
  testsuite/modules.50-cmds/025-setenv-undo.exp,
  testsuite/modules.50-cmds/028-setenv-refcount.exp,
  testsuite/modules.50-cmds/029-setenv-env.exp,
  testsuite/modules.50-cmds/030-unsetenv.exp,
  testsuite/modules.50-cmds/035-unsetenv-undo.exp,
  testsuite/modules.50-cmds/036-unsetenv-x.exp,
  .../modules.50-cmds/038-unsetenv-refcount.exp,
  testsuite/modules.50-cmds/039-unsetenv-env.exp,
  testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.50-cmds/042-append-delim.exp,
  testsuite/modules.50-cmds/045-append-undo.exp,
  testsuite/modules.50-cmds/047-app-del-undo.exp,
  testsuite/modules.50-cmds/049-append-env.exp,
  testsuite/modules.50-cmds/050-prepend.exp,
  testsuite/modules.50-cmds/052-prepend-delim.exp,
  testsuite/modules.50-cmds/055-prepend-undo.exp,
  testsuite/modules.50-cmds/057-pre-del-undo.exp,
  testsuite/modules.50-cmds/059-prepend-env.exp,
  testsuite/modules.50-cmds/060-remove.exp,
  testsuite/modules.50-cmds/062-remove-delim.exp,
  testsuite/modules.50-cmds/065-remove-undo.exp,
  testsuite/modules.50-cmds/069-remove-env.exp,
  testsuite/modules.50-cmds/075-alias.exp,
  testsuite/modules.50-cmds/076-alias-sub.exp,
  testsuite/modules.50-cmds/077-alias-undo.exp,
  testsuite/modules.50-cmds/078-refresh.exp,
  testsuite/modules.50-cmds/080-info-name.exp,
  testsuite/modules.50-cmds/081-info-user.exp,
  testsuite/modules.50-cmds/082-info-user-exp.exp,
  testsuite/modules.50-cmds/083-info-mode.exp,
  testsuite/modules.50-cmds/084-info-mode-exp.exp,
  testsuite/modules.50-cmds/085-info-flags.exp,
  testsuite/modules.50-cmds/086-info-shells.exp,
  testsuite/modules.50-cmds/087-info-shells-exp.exp,
  testsuite/modules.50-cmds/088-info-isloaded.exp,
  testsuite/modules.50-cmds/089-info-type.exp,
  testsuite/modules.50-cmds/095-uname.exp,
  testsuite/modules.50-cmds/100-loglevel.exp,
  testsuite/modules.50-cmds/101-badfac.exp,
  testsuite/modules.50-cmds/105-trace.exp,
  testsuite/modules.50-cmds/110-verbose.exp,
  testsuite/modules.50-cmds/115-verbose-msg.exp,
  testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/121-prereq-module.exp,
  testsuite/modules.50-cmds/122-prereq-fullpath.exp,
  testsuite/modules.50-cmds/130-conflict-full.exp,
  testsuite/modules.50-cmds/131-conflict-module.exp,
  .../modules.50-cmds/132-conflict-fullpath.exp,
  testsuite/modules.50-cmds/140-system.exp,
  testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.50-cmds/152-module-emptyarg.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/172-swap-app-delim.exp,
  testsuite/modules.50-cmds/173-swap-app-delim.exp,
  testsuite/modules.50-cmds/175-swap2.exp,
  testsuite/modules.50-cmds/177-swap-prep-delim.exp,
  testsuite/modules.50-cmds/178-swap-prep-delim.exp,
  testsuite/modules.50-cmds/180-unload.exp,
  testsuite/modules.50-cmds/190-load.exp,
  testsuite/modules.50-cmds/195-load-recurs.exp,
  testsuite/modules.50-cmds/197-load-lots.exp,
  testsuite/modules.50-cmds/200-break.exp,
  testsuite/modules.50-cmds/210-exit.exp,
  testsuite/modules.50-cmds/220-continue.exp,
  testsuite/modules.50-cmds/230-loop.exp,
  testsuite/modules.50-cmds/240-chdir.exp,
  testsuite/modules.50-cmds/250-x-resource.exp,
  testsuite/modules.50-cmds/260-getenv.exp,
  testsuite/modules.50-cmds/269-getenv-env.exp,
  testsuite/modules.50-cmds/280-info-specified.exp,
  testsuite/modules.50-cmds/281-info-modulerc.exp,
  testsuite/modules.50-cmds/282-info-command.exp,
  testsuite/modules.50-cmds/283-info-command-exp.exp,
  testsuite/modules.50-cmds/285-info-loaded.exp,
  testsuite/modules.50-cmds/286-info-username.exp,
  testsuite/modules.50-cmds/287-info-usergroups.exp,
  testsuite/modules.50-cmds/288-info-tags.exp,
  testsuite/modules.50-cmds/300-interp.exp,
  testsuite/modules.50-cmds/301-interp-command.exp,
  testsuite/modules.50-cmds/302-interp-cascaded.exp,
  testsuite/modules.50-cmds/310-puts.exp,
  testsuite/modules.50-cmds/320-is-saved.exp,
  testsuite/modules.50-cmds/321-is-used.exp,
  testsuite/modules.50-cmds/322-is-avail.exp,
  testsuite/modules.50-cmds/330-source.exp,
  testsuite/modules.50-cmds/340-modvar.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.50-cmds/359-allin-env.exp,
  testsuite/modules.50-cmds/360-restoreenv.exp,
  testsuite/modules.50-cmds/370-deps-bis.exp,
  testsuite/modules.50-cmds/370-deps-fullpath.exp,
  testsuite/modules.50-cmds/370-deps.exp,
  testsuite/modules.50-cmds/371-deps2.exp,
  testsuite/modules.50-cmds/372-deps3.exp,
  testsuite/modules.50-cmds/373-deps4.exp,
  testsuite/modules.50-cmds/374-deps5.exp,
  testsuite/modules.50-cmds/375-deps6.exp,
  testsuite/modules.50-cmds/375-order.exp,
  testsuite/modules.50-cmds/376-deps7.exp,
  .../modules.50-cmds/376-switch-change-vers.exp,
  testsuite/modules.50-cmds/376-switch.exp,
  testsuite/modules.50-cmds/377-cyclic.exp,
  testsuite/modules.50-cmds/377-deps8.exp,
  testsuite/modules.50-cmds/377-error.exp,
  testsuite/modules.50-cmds/377-opposite.exp,
  testsuite/modules.50-cmds/378-sametarget.exp,
  testsuite/modules.50-cmds/379-module-unload.exp,
  testsuite/modules.50-cmds/380-altname.exp,
  testsuite/modules.50-cmds/390-function.exp,
  testsuite/modules.50-cmds/391-function-undo.exp,
  testsuite/modules.50-cmds/400-source-sh.exp,
  testsuite/modules.50-cmds/410-modvar.exp,
  testsuite/modules.50-cmds/420-versioncmp.exp,
  testsuite/modules.50-cmds/430-implicit-req.exp,
  testsuite/modules.50-cmds/431-not-req.exp,
  testsuite/modules.50-cmds/440-module-tag.exp,
  testsuite/modules.50-cmds/450-hidden-loaded.exp,
  testsuite/modules.50-cmds/460-sticky.exp,
  testsuite/modules.50-cmds/461-super-sticky.exp,
  testsuite/modules.50-cmds/462-sticky-corner.exp,
  testsuite/modules.50-cmds/470-variant.exp,
  testsuite/modules.50-cmds/471-variant-unload.exp,
  testsuite/modules.50-cmds/472-getvariant.exp,
  testsuite/modules.50-cmds/473-variant-prereq.exp,
  testsuite/modules.50-cmds/474-variant-conflict.exp,
  testsuite/modules.50-cmds/475-variant-tag.exp,
  testsuite/modules.50-cmds/476-variant-aliassym.exp,
  testsuite/modules.50-cmds/477-variant-info.exp,
  testsuite/modules.50-cmds/479-variant-boolean.exp,
  testsuite/modules.50-cmds/490-try-load.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/060-saveshow.exp,
  testsuite/modules.61-coll/080-access-coll.exp,
  testsuite/modules.70-maint/020-update.exp,
  testsuite/modules.70-maint/030-purge.exp,
  testsuite/modules.70-maint/040-list.exp,
  testsuite/modules.70-maint/045-listlong.exp,
  testsuite/modules.70-maint/050-whatis-load.exp,
  testsuite/modules.70-maint/120-autoinit.exp,
  testsuite/modules.70-maint/140-multiargs.exp,
  testsuite/modules.70-maint/180-reload.exp,
  testsuite/modules.70-maint/190-emptyarg.exp,
  testsuite/modules.70-maint/210-clear.exp,
  testsuite/modules.70-maint/220-config.exp,
  testsuite/modules.70-maint/230-verbosity.exp,
  testsuite/modules.70-maint/231-verbose2.exp,
  testsuite/modules.70-maint/240-icase.exp,
  testsuite/modules.70-maint/250-nan.exp,
  .../modules.70-maint/260-extended_default.exp,
  .../modules.70-maint/270-adv_version_spec.exp,
  .../modules.70-maint/271-adv_version_spec-in.exp,
  .../272-adv_version_spec-range.exp, .../273-adv_version_spec-space.exp,
  .../274-adv_version_spec-autosym.exp, .../275-adv_version_spec-loaded.exp,
  .../276-adv_version_spec-rangein.exp, testsuite/modules.70-maint/280-ml.exp,
  testsuite/modules.70-maint/290-json.exp,
  testsuite/modules.70-maint/300-err_stack.exp,
  testsuite/modules.70-maint/320-tags.exp,
  testsuite/modules.70-maint/321-tag_abbrev.exp,
  testsuite/modules.70-maint/322-tag-sgr.exp,
  testsuite/modules.70-maint/330-large-file.exp,
  testsuite/modules.70-maint/340-output-key.exp,
  testsuite/modules.70-maint/350-term_width.exp,
  testsuite/modules.70-maint/360-avail_output.exp,
  testsuite/modules.70-maint/361-list_output.exp,
  testsuite/modules.70-maint/370-variant.exp,
  testsuite/modules.70-maint/371-variant-msg.exp,
  testsuite/modules.70-maint/372-variant-display.exp,
  testsuite/modules.70-maint/373-variant-help.exp,
  testsuite/modules.70-maint/374-variant-test.exp,
  testsuite/modules.70-maint/375-variant-whatis.exp,
  testsuite/modules.70-maint/376-variant-tag.exp,
  .../modules.70-maint/377-variant-shortcut.exp,
  testsuite/modules.80-deep/020-load-deep.exp,
  testsuite/modules.80-deep/021-unload.exp,
  testsuite/modules.80-deep/022-switch.exp,
  testsuite/modules.80-deep/068-transitive-deep.exp,
  testsuite/modules.80-deep/080-access-deep.exp,
  testsuite/modules.80-deep/090-deepvirt.exp,
  testsuite/modules.90-avail/080-noindepth.exp,
  testsuite/modules.90-avail/100-tags.exp,
  testsuite/modules.91-sort/040-load-sort.exp,
  testsuite/modules.95-version/020-load-version.exp,
  testsuite/modules.95-version/020-unload.exp,
  testsuite/modules.95-version/022-load2.exp,
  testsuite/modules.95-version/022-unload2.exp,
  testsuite/modules.95-version/040-xgetenv.exp,
  testsuite/modules.95-version/050-fullpathentry.exp: ts: no ref count on most
  Modules-specific env var

  * tcl/envmngt.tcl.in: No ref count for Modules-specific path variables
  Exclude the Modules-specific variables (like LOADEDMODULES) from the
  reference counting mechanism. As a result no <VAR>_modshare variable is set
  in user environment for these variables. Exception is made for MODULEPATH
  environment variable that still benefit from the mechanism.  This change is
  made as the reference counting mechanism is useless for all Modules-specific
  variables except for MODULEPATH. Either the entries are unique (same module
  cannot be loaded twice in LOADEDMODULES) or duplicate elements are allowed
  (same modulefile could be used twice by virtual modules in _LMFILES_). Also
  each entry in the __MODULES_LM* variables uses as prefix the loaded module
  name the entry is associated to.

2021-08-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .gitignore, Makefile: install: add Makefile rule to build Ctags index

2021-08-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/config/base-config.exp,
  testsuite/install.00-init/010-environ.exp, testsuite/modulefiles/spread/3.0,
  testsuite/modulefiles/spread/7.0,
  testsuite/modulefiles/spreadrc/dir3/.modulerc,
  testsuite/modulefiles/spreadrc/dir3/1.0,
  testsuite/modulefiles/spreadrc/dir4/.modulerc,
  testsuite/modulefiles/spreadrc/dir7/.modulerc,
  testsuite/modulefiles/spreadrc/dir7/1.0,
  testsuite/modulefiles/spreadrc/dir8/.modulerc,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.00-init/130-auto_handling.exp,
  testsuite/modules.20-locate/069-cross.exp,
  testsuite/modules.20-locate/070-homerc.exp,
  testsuite/modules.20-locate/100-wspace.exp,
  testsuite/modules.20-locate/110-hide.exp,
  testsuite/modules.20-locate/111-hide-hard.exp,
  testsuite/modules.20-locate/111-hide-soft.exp,
  testsuite/modules.20-locate/115-forbid.exp,
  testsuite/modules.20-locate/118-hidden-loaded.exp,
  testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/121-prereq-module.exp,
  testsuite/modules.50-cmds/122-prereq-fullpath.exp,
  testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/195-load-recurs.exp,
  testsuite/modules.50-cmds/197-load-lots.exp,
  testsuite/modules.50-cmds/288-info-tags.exp,
  testsuite/modules.50-cmds/302-interp-cascaded.exp,
  testsuite/modules.50-cmds/310-puts.exp,
  testsuite/modules.50-cmds/340-modvar.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.50-cmds/370-deps-bis.exp,
  testsuite/modules.50-cmds/370-deps.exp,
  testsuite/modules.50-cmds/371-deps2.exp,
  testsuite/modules.50-cmds/373-deps4.exp,
  testsuite/modules.50-cmds/374-deps5.exp,
  testsuite/modules.50-cmds/375-deps6.exp,
  testsuite/modules.50-cmds/375-order.exp,
  testsuite/modules.50-cmds/376-deps7.exp,
  .../modules.50-cmds/376-switch-change-vers.exp,
  testsuite/modules.50-cmds/376-switch.exp,
  testsuite/modules.50-cmds/377-cyclic.exp,
  testsuite/modules.50-cmds/377-deps8.exp,
  testsuite/modules.50-cmds/377-error.exp,
  testsuite/modules.50-cmds/377-opposite.exp,
  testsuite/modules.50-cmds/378-sametarget.exp,
  testsuite/modules.50-cmds/379-module-unload.exp,
  testsuite/modules.50-cmds/380-altname.exp,
  testsuite/modules.50-cmds/410-modvar.exp,
  testsuite/modules.50-cmds/430-implicit-req.exp,
  testsuite/modules.50-cmds/431-not-req.exp,
  testsuite/modules.50-cmds/450-hidden-loaded.exp,
  testsuite/modules.50-cmds/460-sticky.exp,
  testsuite/modules.50-cmds/461-super-sticky.exp,
  testsuite/modules.50-cmds/473-variant-prereq.exp,
  testsuite/modules.50-cmds/474-variant-conflict.exp,
  testsuite/modules.50-cmds/475-variant-tag.exp,
  testsuite/modules.50-cmds/479-variant-boolean.exp,
  testsuite/modules.50-cmds/490-try-load.exp,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.70-maint/120-autoinit.exp,
  testsuite/modules.70-maint/210-clear.exp,
  testsuite/modules.70-maint/230-verbosity.exp,
  testsuite/modules.70-maint/240-icase.exp,
  testsuite/modules.70-maint/250-nan.exp,
  .../modules.70-maint/260-extended_default.exp,
  .../modules.70-maint/270-adv_version_spec.exp,
  .../modules.70-maint/271-adv_version_spec-in.exp,
  .../272-adv_version_spec-range.exp, .../273-adv_version_spec-space.exp,
  .../274-adv_version_spec-autosym.exp, .../276-adv_version_spec-rangein.exp,
  testsuite/modules.70-maint/280-ml.exp,
  testsuite/modules.70-maint/320-tags.exp,
  testsuite/modules.70-maint/321-tag_abbrev.exp,
  testsuite/modules.70-maint/322-tag-sgr.exp,
  .../modules.70-maint/377-variant-shortcut.exp,
  testsuite/modules.80-deep/020-load-deep.exp: ts: adapt tests for
  __MODULES_LMNOTUASKED removal

  * tcl/modfind.tcl.in, tcl/subcmd.tcl.in: Record loaded/auto-loaded tag on
  mod name with variants  Also set loaded or auto-loaded tag on the module
  designation including variants, as tags to export in __MODULES_LMTAG
  variable are those set on the variant designation.

2021-08-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc auto-loaded tag record change in NEWS

  * doc/source/design/module-tags.rst, doc/source/diff_v3_v4.rst,
  doc/source/module.rst: doc: remove ref of __MODULES_LMNOTUASKED env var

  * tcl/coll.tcl, tcl/modeval.tcl, tcl/modfind.tcl.in, tcl/subcmd.tcl.in:
  Check loaded/auto-loaded tag rather specific struct/proc  Remove the
  isModuleUserAsked procedure and g_loadedModuleUasked array. Check if the
  'loaded' or 'auto-loaded' tag is set instead.

  * tcl/modfind.tcl.in, tcl/subcmd.tcl.in: Record auto-loaded tag rather use
  specific env variable  Record the 'auto-loaded' tag for loaded modules that
  have been loaded automatically, rather recording this state in a specific
  environment variable __MODULES_LMNOTUASKED.

  * lib/.gitignore, lib/Makefile.in: install: split lib build in two steps for
  coverage  To ensure the coverage files are correctly named after the .c
  source file name, first build the object file then process it with linker to
  build the shared library.

  * NEWS.rst: doc: desc. source code split in NEWS

  * CONTRIBUTING.rst: doc: desc. coverage build changes in CONTRIBUTING

2021-07-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * script/mb: script: exclude alpha/beta and old releases in mb  Exclude from
  bench or profiling tests releases older than 4.3 (or 4.6 in profiling mode).
  Also exclude from these tests the alpha and beta releases.

2021-07-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .cirrus.yml, .github/workflows/linux_tests.yaml, script/nglfar2ccov:
  script: call nglfar2ccov over each tcl split scripts

  * testsuite/modules.00-init/005-init_ts.exp: ts: more precise extension
  library filename guess

  * .gitignore, Makefile: ts: check coverage of split tcl files  Update
  makefile rules to check coverage of split tcl source files rather built
  modulecmd.tcl script.

2021-07-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .gitignore, Makefile: install: add rules to build modulecmd.tcl from split
  files  modulecmd.tcl has been split in the repository in several tcl files
  located in the tcl/ directory. This change has been done to make code
  editing easier.  modulecmd.tcl is still shipped as a single executable
  script to ensure best performances. This single script is made by joining
  all the tcl files from tcl/ directory.  An alternative approach has been
  tested where modulecmd.tcl auto loads the procedure located in external tcl
  files. But a performance overhead was observed. So it has been decided to
  split code to edit sources but still build and ship a standalone
  modulecmd.tcl script.

2021-07-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * script/mt, modulecmd.tcl.in => tcl/main.tcl.in: Split main procs and code
  in dedicated file

  * modulecmd.tcl.in, tcl/report.tcl.in: Split report procs in dedicated file

  * modulecmd.tcl.in, tcl/envmngt.tcl.in: Split env management procs in
  dedicated file

  * modulecmd.tcl.in, tcl/util.tcl: Split utility procs in dedicated file

  * modulecmd.tcl.in, tcl/init.tcl.in: Split config and state handling procs
  in dedicated file

  * modulecmd.tcl.in, tcl/subcmd.tcl.in: Make dedicated procs for usage msg
  report  Extract the usage message report from cmdModuleHelp and cmdMlHelp
  procedures and create standalone procedures respectively reportUsage and
  reportMlUsage.  When usage message has to be printed, the appropriate
  procedure can be fetched from the report side and not from the sub-command
  side.

  * script/mb: script: limit output header length in mb

2021-07-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, tcl/subcmd.tcl.in: Split module sub-command procs in
  dedicated file

  * modulecmd.tcl.in, tcl/coll.tcl: Split collection mngt procs in dedicated
  file

  * modulecmd.tcl.in, tcl/modspec.tcl: Split module specification procs in
  dedicated file

  * modulecmd.tcl.in, tcl/modeval.tcl: Split module evaluation procs in
  dedicated file

  * modulecmd.tcl.in, tcl/modfind.tcl.in: Split avail/loaded module find procs
  in dedicated file

  * modulecmd.tcl.in, tcl/mfinterp.tcl.in: Split modulefile interpretation
  procs in dedicated file

  * modulecmd.tcl.in: Regroup avail/loaded module find procs

  * modulecmd.tcl.in: Regroup module evaluation procs

  * modulecmd.tcl.in: Regroup module specification procs

  * modulecmd.tcl.in: Regroup collection management procs

  * modulecmd.tcl.in: Regroup module sub-commands procs

  * modulecmd.tcl.in: Regroup utilities procs

  * modulecmd.tcl.in: Regroup modulefile interpretation procs

  * modulecmd.tcl.in: Regroup main procs and core code

  * modulecmd.tcl.in: Regroup report procedures

  * modulecmd.tcl.in: Regroup environment management procs

  * modulecmd.tcl.in: Regroup config and state handling procs

2021-07-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, contrib/rpm/environment-modules.spec.in, doc/source/conf.py,
  version.inc.in: Release of version 5.0.0-alpha

  * script/mpub, script/mrel: script: consider alpha/beta valid release name
  in mrel/mpub

  * modulecmd.tcl.in: Make use of 'list' or 'lappend' instead of 'concat'
  Joining two lists should be achieved with 'list' or 'lappend' commands in
  conjunction with '{*}' rather using the 'concat' command.

  * testsuite/modules.50-cmds/286-info-username.exp,
  testsuite/modules.50-cmds/287-info-usergroups.exp,
  testsuite/modules.70-maint/120-autoinit.exp: ts: update tests changed by use
  of '{*}'

  * modulecmd.tcl.in: Also use '{*}' for module proc def on Tcl  Use '{*}'
  instead of 'eval' in the definition of the 'module' procedure for Tcl shell.

  * modulecmd.tcl.in: Use '{*}' to unfold list in place  Update
  'modulecmd.tcl' code to use '{*}' rather than 'eval' to unfold list in
  place.

  * testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/120-siteconfig.exp,
  testsuite/modules.20-locate/110-hide.exp,
  .../modules.20-locate/114-hide-before-after.exp,
  testsuite/modules.20-locate/115-forbid.exp,
  .../modules.20-locate/116-forbid-before-after.exp,
  testsuite/modules.20-locate/119-hide-cascading.exp,
  testsuite/modules.50-cmds/095-uname.exp,
  testsuite/modules.50-cmds/151-module-onlytop.exp,
  testsuite/modules.50-cmds/152-module-emptyarg.exp,
  testsuite/modules.50-cmds/284-info-others.exp,
  testsuite/modules.50-cmds/286-info-username.exp,
  testsuite/modules.50-cmds/287-info-usergroups.exp,
  testsuite/modules.50-cmds/288-info-tags.exp,
  testsuite/modules.50-cmds/330-source.exp,
  testsuite/modules.50-cmds/400-source-sh.exp,
  testsuite/modules.50-cmds/440-module-tag.exp,
  testsuite/modules.50-cmds/475-variant-tag.exp,
  testsuite/modules.50-cmds/476-variant-aliassym.exp,
  testsuite/modules.50-cmds/478-variant-version.exp,
  testsuite/modules.50-cmds/479-variant-boolean.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/080-help.exp,
  testsuite/modules.70-maint/085-test.exp,
  testsuite/modules.70-maint/120-autoinit.exp,
  testsuite/modules.70-maint/170-contact.exp,
  testsuite/modules.70-maint/300-err_stack.exp,
  testsuite/modules.70-maint/320-tags.exp: ts: update/clean tests with
  specific answer for Tcl 8.4

2021-07-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Use 'in' list containment test available starting Tcl
  8.5  Update 'modulecmd.tcl' code to use the 'in' list containment test from
  'expr' rather the home-made isInList procedure.

  * modulecmd.tcl.in: Use 'ni' list containment test available starting Tcl
  8.5  Update 'modulecmd.tcl' code to use the 'ni' list containment test from
  'expr' rather the home-made notInList procedure.

  * modulecmd.tcl.in: Rely on 'glob -nocomplain' to raise permission error  On
  Tcl 8.4, the -nocomplain option of glob command was also catching file
  permission error in addition to empty result error. Starting Tcl 8.5, the
  -nocompain option let the permission error be thrown upward.

  * modulecmd.tcl.in: Use min/max procedures available starting Tcl 8.5.
  Update 'modulecmd.tcl' code to use the tcl::mathfunc::min and
  tcl::mathfunc::max procedures that are available starting Tcl version 8.5.

  * modulecmd.tcl.in: Remove lreverse/lassign procs provided for Tcl8.4
  Remove the lreverse and lassign procedures defined when 'modulecmd.tcl'
  script were running with Tcl 8.4. These two procedures are natively
  available on Tcl 8.5.

  * .github/workflows/linux_tests.yaml: gh: migrate Tcl 8.4 test cases to Tcl
  8.5

  * lib/configure.ac, lib/envmodules.c: lib: Tcl requirement moved to version
  8.5+  Update Tcl Envmodules library to clean specific code required to raise
  error on Tcl 8.4.  Bump version of Tcl Envmodules library to 1.4.0.

  * CONTRIBUTING.rst, INSTALL-win.rst, INSTALL.rst, NEWS.rst, README.md: doc:
  Tcl requirement moved to version 8.5+  Update Tcl requirement to version 8.5
  as Tcl 8.4 is deprecated since a long time and this version is not available
  anymore on recent OS distributions. Update internal code of
  :file:`modulecmd.tcl` to take benefit from the features brought by Tcl 8.5.

2021-07-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/010-environ.exp, testsuite/modulefiles.2/quar,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.00-init/110-quar.exp,
  testsuite/modules.70-maint/120-autoinit.exp,
  testsuite/modules.70-maint/220-config.exp: ts: update reference to renamed
  __MODULES_QUAR_* vars

  * doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: update reference to
  renamed __MODULES_QUAR_* vars

  * NEWS.rst, init/bash.in, init/cmake.in, init/fish.in, init/ksh.in,
  init/perl.pm.in, init/python.py.in, init/r.R.in, init/ruby.rb.in,
  init/sh.in, init/tcl.in, init/zsh.in, modulecmd.tcl.in: Use
  '__MODULES_QUAR_' prefix on env var set in quarantine  Rename the
  environment variables used to indirectly pass to `modulecmd.tcl` the value
  of variables set in quarantine (variables whose name finishes with
  `_modquar`). A `__MODULES_QUAR_` prefix is applied to the name of these
  variables instead of the `_modquar` suffix to indicate they are intended for
  Modules internal use of only.

  * testsuite/modules.10-use/080-access-use.exp,
  testsuite/modules.50-cmds/122-prereq-fullpath.exp,
  .../modules.50-cmds/132-conflict-fullpath.exp,
  testsuite/modules.50-cmds/197-load-lots.exp,
  testsuite/modules.50-cmds/280-info-specified.exp,
  testsuite/modules.50-cmds/281-info-modulerc.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.50-cmds/400-source-sh.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.70-maint/120-autoinit.exp,
  testsuite/modules.70-maint/210-clear.exp,
  testsuite/modules.70-maint/220-config.exp,
  testsuite/modules.70-maint/280-ml.exp,
  testsuite/modules.80-deep/020-load-deep.exp: ts: update tests after LM env
  var renaming

  * testsuite/config/base-config.exp,
  testsuite/install.00-init/010-environ.exp, testsuite/modulefiles/spread/3.0,
  testsuite/modulefiles/spread/7.0,
  testsuite/modulefiles/spreadrc/dir3/.modulerc,
  testsuite/modulefiles/spreadrc/dir3/1.0,
  testsuite/modulefiles/spreadrc/dir4/.modulerc,
  testsuite/modulefiles/spreadrc/dir7/.modulerc,
  testsuite/modulefiles/spreadrc/dir7/1.0,
  testsuite/modulefiles/spreadrc/dir8/.modulerc,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.00-init/120-siteconfig.exp,
  testsuite/modules.00-init/130-auto_handling.exp,
  testsuite/modules.00-init/140-color.exp,
  testsuite/modules.10-use/040-load-use.exp,
  testsuite/modules.10-use/080-access-use.exp,
  testsuite/modules.20-locate/031-defvers2.exp,
  testsuite/modules.20-locate/035-defname.exp,
  testsuite/modules.20-locate/038-defcontext.exp,
  testsuite/modules.20-locate/045-symvers.exp,
  testsuite/modules.20-locate/048-symexec.exp,
  testsuite/modules.20-locate/050-locrc.exp,
  testsuite/modules.20-locate/060-rc.exp,
  testsuite/modules.20-locate/066-modulepath-rc.exp,
  testsuite/modules.20-locate/067-hidden.exp,
  testsuite/modules.20-locate/068-transitive.exp,
  testsuite/modules.20-locate/069-cross.exp,
  testsuite/modules.20-locate/070-homerc.exp,
  testsuite/modules.20-locate/075-symlink.exp,
  testsuite/modules.20-locate/080-access.exp,
  testsuite/modules.20-locate/100-wspace.exp,
  testsuite/modules.20-locate/110-hide.exp,
  testsuite/modules.20-locate/111-hide-hard.exp,
  testsuite/modules.20-locate/111-hide-soft.exp,
  .../modules.20-locate/112-hide-user-group.exp,
  testsuite/modules.20-locate/113-hide-all-opt.exp,
  .../modules.20-locate/114-hide-before-after.exp,
  testsuite/modules.20-locate/115-forbid.exp,
  .../modules.20-locate/116-forbid-before-after.exp,
  .../modules.20-locate/117-forbid-user-group.exp,
  testsuite/modules.20-locate/118-hidden-loaded.exp,
  testsuite/modules.20-locate/119-hide-cascading.exp,
  testsuite/modules.50-cmds/015-use.exp,
  testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/121-prereq-module.exp,
  testsuite/modules.50-cmds/122-prereq-fullpath.exp,
  testsuite/modules.50-cmds/130-conflict-full.exp,
  testsuite/modules.50-cmds/131-conflict-module.exp,
  .../modules.50-cmds/132-conflict-fullpath.exp,
  testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/195-load-recurs.exp,
  testsuite/modules.50-cmds/197-load-lots.exp,
  testsuite/modules.50-cmds/280-info-specified.exp,
  testsuite/modules.50-cmds/281-info-modulerc.exp,
  testsuite/modules.50-cmds/288-info-tags.exp,
  testsuite/modules.50-cmds/302-interp-cascaded.exp,
  testsuite/modules.50-cmds/310-puts.exp,
  testsuite/modules.50-cmds/340-modvar.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.50-cmds/370-deps-bis.exp,
  testsuite/modules.50-cmds/370-deps-fullpath.exp,
  testsuite/modules.50-cmds/370-deps.exp,
  testsuite/modules.50-cmds/371-deps2.exp,
  testsuite/modules.50-cmds/372-deps3.exp,
  testsuite/modules.50-cmds/373-deps4.exp,
  testsuite/modules.50-cmds/374-deps5.exp,
  testsuite/modules.50-cmds/375-deps6.exp,
  testsuite/modules.50-cmds/375-order.exp,
  testsuite/modules.50-cmds/376-deps7.exp,
  .../modules.50-cmds/376-switch-change-vers.exp,
  testsuite/modules.50-cmds/376-switch.exp,
  testsuite/modules.50-cmds/377-cyclic.exp,
  testsuite/modules.50-cmds/377-deps8.exp,
  testsuite/modules.50-cmds/377-error.exp,
  testsuite/modules.50-cmds/377-opposite.exp,
  testsuite/modules.50-cmds/378-sametarget.exp,
  testsuite/modules.50-cmds/379-module-unload.exp,
  testsuite/modules.50-cmds/380-altname.exp,
  testsuite/modules.50-cmds/400-source-sh.exp,
  testsuite/modules.50-cmds/410-modvar.exp,
  testsuite/modules.50-cmds/430-implicit-req.exp,
  testsuite/modules.50-cmds/431-not-req.exp,
  testsuite/modules.50-cmds/440-module-tag.exp,
  testsuite/modules.50-cmds/450-hidden-loaded.exp,
  testsuite/modules.50-cmds/460-sticky.exp,
  testsuite/modules.50-cmds/461-super-sticky.exp,
  testsuite/modules.50-cmds/462-sticky-corner.exp,
  testsuite/modules.50-cmds/470-variant.exp,
  testsuite/modules.50-cmds/471-variant-unload.exp,
  testsuite/modules.50-cmds/472-getvariant.exp,
  testsuite/modules.50-cmds/473-variant-prereq.exp,
  testsuite/modules.50-cmds/474-variant-conflict.exp,
  testsuite/modules.50-cmds/475-variant-tag.exp,
  testsuite/modules.50-cmds/476-variant-aliassym.exp,
  testsuite/modules.50-cmds/477-variant-info.exp,
  testsuite/modules.50-cmds/479-variant-boolean.exp,
  testsuite/modules.50-cmds/490-try-load.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/080-access-coll.exp,
  testsuite/modules.70-maint/040-list.exp,
  testsuite/modules.70-maint/045-listlong.exp,
  testsuite/modules.70-maint/120-autoinit.exp,
  testsuite/modules.70-maint/210-clear.exp,
  testsuite/modules.70-maint/220-config.exp,
  testsuite/modules.70-maint/230-verbosity.exp,
  testsuite/modules.70-maint/231-verbose2.exp,
  testsuite/modules.70-maint/240-icase.exp,
  testsuite/modules.70-maint/250-nan.exp,
  .../modules.70-maint/260-extended_default.exp,
  .../modules.70-maint/270-adv_version_spec.exp,
  .../modules.70-maint/271-adv_version_spec-in.exp,
  .../272-adv_version_spec-range.exp, .../273-adv_version_spec-space.exp,
  .../274-adv_version_spec-autosym.exp, .../275-adv_version_spec-loaded.exp,
  .../276-adv_version_spec-rangein.exp, testsuite/modules.70-maint/280-ml.exp,
  testsuite/modules.70-maint/290-json.exp,
  testsuite/modules.70-maint/300-err_stack.exp,
  testsuite/modules.70-maint/320-tags.exp,
  testsuite/modules.70-maint/321-tag_abbrev.exp,
  testsuite/modules.70-maint/322-tag-sgr.exp,
  testsuite/modules.70-maint/340-output-key.exp,
  testsuite/modules.70-maint/350-term_width.exp,
  testsuite/modules.70-maint/361-list_output.exp,
  testsuite/modules.70-maint/370-variant.exp,
  testsuite/modules.70-maint/371-variant-msg.exp,
  testsuite/modules.70-maint/372-variant-display.exp,
  testsuite/modules.70-maint/373-variant-help.exp,
  testsuite/modules.70-maint/374-variant-test.exp,
  testsuite/modules.70-maint/375-variant-whatis.exp,
  testsuite/modules.70-maint/376-variant-tag.exp,
  .../modules.70-maint/377-variant-shortcut.exp,
  testsuite/modules.80-deep/020-load-deep.exp,
  testsuite/modules.80-deep/021-unload.exp,
  testsuite/modules.80-deep/022-switch.exp,
  testsuite/modules.80-deep/068-transitive-deep.exp,
  testsuite/modules.80-deep/080-access-deep.exp,
  testsuite/modules.80-deep/090-deepvirt.exp,
  testsuite/modules.90-avail/100-tags.exp,
  testsuite/modules.91-sort/040-load-sort.exp,
  testsuite/modules.95-version/022-load2.exp: ts: update reference to renamed
  __MODULES_LM* vars

  * NEWS.rst, .../design/advanced-module-version-specifiers.rst,
  .../design/default-latest-version-specifiers.rst,
  doc/source/design/hide-or-forbid-modulefile.rst,
  doc/source/design/module-tags.rst,
  .../design/source-shell-script-in-modulefile.rst,
  doc/source/design/variants.rst, doc/source/diff_v3_v4.rst,
  doc/source/module.rst, doc/source/modulefile.rst: doc: update reference to
  renamed __MODULES_LM* vars

  * NEWS.rst, modulecmd.tcl.in, script/mb: Add '__' prefix to name of loaded
  env tracking env variable  Rename the environment variables that are used by
  Modules to track loaded environment state (variables whose name starts with
  `MODULES_LM`). A `__` prefix is added to the name of these variables to
  indicate that they are intended for internal use only.

  * testsuite/modules.50-cmds/015-use.exp,
  testsuite/modules.50-cmds/017-use-undo.exp,
  testsuite/modules.50-cmds/020-setenv.exp,
  testsuite/modules.50-cmds/022-setenv-eschars.exp,
  testsuite/modules.50-cmds/025-setenv-undo.exp,
  testsuite/modules.50-cmds/028-setenv-refcount.exp,
  testsuite/modules.50-cmds/029-setenv-env.exp,
  testsuite/modules.50-cmds/035-unsetenv-undo.exp,
  testsuite/modules.50-cmds/036-unsetenv-x.exp,
  testsuite/modules.50-cmds/038-unsetenv-refcount.exp,
  testsuite/modules.50-cmds/039-unsetenv-env.exp,
  testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.50-cmds/042-append-delim.exp,
  testsuite/modules.50-cmds/045-append-undo.exp,
  testsuite/modules.50-cmds/047-app-del-undo.exp,
  testsuite/modules.50-cmds/049-append-env.exp,
  testsuite/modules.50-cmds/050-prepend.exp,
  testsuite/modules.50-cmds/052-prepend-delim.exp,
  testsuite/modules.50-cmds/055-prepend-undo.exp,
  testsuite/modules.50-cmds/057-pre-del-undo.exp,
  testsuite/modules.50-cmds/059-prepend-env.exp,
  testsuite/modules.50-cmds/060-remove.exp,
  testsuite/modules.50-cmds/062-remove-delim.exp,
  testsuite/modules.50-cmds/065-remove-undo.exp,
  testsuite/modules.50-cmds/069-remove-env.exp,
  testsuite/modules.50-cmds/076-alias-sub.exp,
  testsuite/modules.50-cmds/081-info-user.exp,
  testsuite/modules.50-cmds/082-info-user-exp.exp,
  testsuite/modules.50-cmds/084-info-mode-exp.exp,
  testsuite/modules.50-cmds/085-info-flags.exp,
  testsuite/modules.50-cmds/087-info-shells-exp.exp,
  testsuite/modules.50-cmds/088-info-isloaded.exp,
  testsuite/modules.50-cmds/089-info-type.exp,
  testsuite/modules.50-cmds/090-uname-proc.exp,
  testsuite/modules.50-cmds/095-uname.exp,
  testsuite/modules.50-cmds/100-loglevel.exp,
  testsuite/modules.50-cmds/101-badfac.exp,
  testsuite/modules.50-cmds/105-trace.exp,
  testsuite/modules.50-cmds/110-verbose.exp,
  testsuite/modules.50-cmds/115-verbose-msg.exp,
  testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/121-prereq-module.exp,
  testsuite/modules.50-cmds/122-prereq-fullpath.exp,
  testsuite/modules.50-cmds/130-conflict-full.exp,
  testsuite/modules.50-cmds/131-conflict-module.exp,
  testsuite/modules.50-cmds/132-conflict-fullpath.exp,
  testsuite/modules.50-cmds/140-system.exp,
  testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.50-cmds/151-module-onlytop.exp,
  testsuite/modules.50-cmds/152-module-emptyarg.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/172-swap-app-delim.exp,
  testsuite/modules.50-cmds/173-swap-app-delim.exp,
  testsuite/modules.50-cmds/175-swap2.exp,
  testsuite/modules.50-cmds/177-swap-prep-delim.exp,
  testsuite/modules.50-cmds/178-swap-prep-delim.exp,
  testsuite/modules.50-cmds/180-unload.exp,
  testsuite/modules.50-cmds/190-load.exp,
  testsuite/modules.50-cmds/195-load-recurs.exp,
  testsuite/modules.50-cmds/197-load-lots.exp,
  testsuite/modules.50-cmds/210-exit.exp,
  testsuite/modules.50-cmds/220-continue.exp,
  testsuite/modules.50-cmds/230-loop.exp,
  testsuite/modules.50-cmds/240-chdir.exp,
  testsuite/modules.50-cmds/250-x-resource.exp,
  testsuite/modules.50-cmds/260-getenv.exp,
  testsuite/modules.50-cmds/269-getenv-env.exp,
  testsuite/modules.50-cmds/280-info-specified.exp,
  testsuite/modules.50-cmds/281-info-modulerc.exp,
  testsuite/modules.50-cmds/282-info-command.exp,
  testsuite/modules.50-cmds/283-info-command-exp.exp,
  testsuite/modules.50-cmds/284-info-others.exp,
  testsuite/modules.50-cmds/285-info-loaded.exp,
  testsuite/modules.50-cmds/286-info-username.exp,
  testsuite/modules.50-cmds/287-info-usergroups.exp,
  testsuite/modules.50-cmds/288-info-tags.exp,
  testsuite/modules.50-cmds/300-interp.exp,
  testsuite/modules.50-cmds/301-interp-command.exp,
  testsuite/modules.50-cmds/302-interp-cascaded.exp,
  testsuite/modules.50-cmds/310-puts.exp,
  testsuite/modules.50-cmds/320-is-saved.exp,
  testsuite/modules.50-cmds/321-is-used.exp,
  testsuite/modules.50-cmds/330-source.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.50-cmds/359-allin-env.exp,
  testsuite/modules.50-cmds/360-restoreenv.exp,
  testsuite/modules.50-cmds/370-deps-bis.exp,
  testsuite/modules.50-cmds/370-deps-fullpath.exp,
  testsuite/modules.50-cmds/370-deps.exp,
  testsuite/modules.50-cmds/371-deps2.exp,
  testsuite/modules.50-cmds/372-deps3.exp,
  testsuite/modules.50-cmds/373-deps4.exp,
  testsuite/modules.50-cmds/374-deps5.exp,
  testsuite/modules.50-cmds/375-deps6.exp,
  testsuite/modules.50-cmds/375-order.exp,
  testsuite/modules.50-cmds/376-deps7.exp,
  testsuite/modules.50-cmds/376-switch-change-vers.exp,
  testsuite/modules.50-cmds/376-switch.exp,
  testsuite/modules.50-cmds/377-cyclic.exp,
  testsuite/modules.50-cmds/377-deps8.exp,
  testsuite/modules.50-cmds/377-error.exp,
  testsuite/modules.50-cmds/377-opposite.exp,
  testsuite/modules.50-cmds/378-sametarget.exp,
  testsuite/modules.50-cmds/379-module-unload.exp,
  testsuite/modules.50-cmds/380-altname.exp,
  testsuite/modules.50-cmds/390-function.exp,
  testsuite/modules.50-cmds/400-source-sh.exp,
  testsuite/modules.50-cmds/410-modvar.exp,
  testsuite/modules.50-cmds/430-implicit-req.exp,
  testsuite/modules.50-cmds/431-not-req.exp,
  testsuite/modules.50-cmds/440-module-tag.exp,
  testsuite/modules.50-cmds/450-hidden-loaded.exp,
  testsuite/modules.50-cmds/460-sticky.exp,
  testsuite/modules.50-cmds/461-super-sticky.exp,
  testsuite/modules.50-cmds/462-sticky-corner.exp,
  testsuite/modules.50-cmds/470-variant.exp,
  testsuite/modules.50-cmds/471-variant-unload.exp,
  testsuite/modules.50-cmds/472-getvariant.exp,
  testsuite/modules.50-cmds/473-variant-prereq.exp,
  testsuite/modules.50-cmds/474-variant-conflict.exp,
  testsuite/modules.50-cmds/475-variant-tag.exp,
  testsuite/modules.50-cmds/476-variant-aliassym.exp,
  testsuite/modules.50-cmds/477-variant-info.exp,
  testsuite/modules.50-cmds/478-variant-version.exp,
  testsuite/modules.50-cmds/479-variant-boolean.exp,
  testsuite/modules.50-cmds/490-try-load.exp: ts: add skip_if_quick_mode in 50
  suite

2021-07-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/030-purge.exp,
  testsuite/modules.70-maint/040-list.exp,
  testsuite/modules.70-maint/045-listlong.exp,
  testsuite/modules.70-maint/050-whatis-load.exp,
  testsuite/modules.70-maint/055-whatis.exp,
  testsuite/modules.70-maint/056-whatis-nullpath.exp,
  testsuite/modules.70-maint/060-apropos.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/080-help.exp,
  testsuite/modules.70-maint/085-test.exp,
  testsuite/modules.70-maint/090-source.exp,
  testsuite/modules.70-maint/100-path.exp,
  testsuite/modules.70-maint/110-paths.exp,
  testsuite/modules.70-maint/120-autoinit.exp,
  testsuite/modules.70-maint/130-aliases.exp,
  testsuite/modules.70-maint/140-multiargs.exp,
  testsuite/modules.70-maint/150-append-path.exp,
  testsuite/modules.70-maint/151-prepend-path.exp,
  testsuite/modules.70-maint/152-remove-path.exp,
  testsuite/modules.70-maint/153-is-loaded.exp,
  testsuite/modules.70-maint/154-is-saved.exp,
  testsuite/modules.70-maint/155-is-used.exp,
  testsuite/modules.70-maint/157-info-loaded.exp,
  testsuite/modules.70-maint/170-contact.exp,
  testsuite/modules.70-maint/180-reload.exp,
  testsuite/modules.70-maint/190-emptyarg.exp,
  testsuite/modules.70-maint/200-errdisp.exp,
  testsuite/modules.70-maint/210-clear.exp,
  testsuite/modules.70-maint/220-config.exp,
  testsuite/modules.70-maint/230-verbosity.exp,
  testsuite/modules.70-maint/231-verbose2.exp,
  testsuite/modules.70-maint/240-icase.exp,
  testsuite/modules.70-maint/250-nan.exp,
  .../modules.70-maint/260-extended_default.exp,
  .../modules.70-maint/270-adv_version_spec.exp,
  .../modules.70-maint/271-adv_version_spec-in.exp,
  .../272-adv_version_spec-range.exp, .../273-adv_version_spec-space.exp,
  .../274-adv_version_spec-autosym.exp, .../275-adv_version_spec-loaded.exp,
  .../276-adv_version_spec-rangein.exp, testsuite/modules.70-maint/280-ml.exp,
  testsuite/modules.70-maint/290-json.exp,
  testsuite/modules.70-maint/300-err_stack.exp,
  testsuite/modules.70-maint/310-sh-to-mod.exp,
  testsuite/modules.70-maint/320-tags.exp,
  testsuite/modules.70-maint/321-tag_abbrev.exp,
  testsuite/modules.70-maint/322-tag-sgr.exp,
  testsuite/modules.70-maint/330-large-file.exp,
  testsuite/modules.70-maint/340-output-key.exp,
  testsuite/modules.70-maint/350-term_width.exp,
  testsuite/modules.70-maint/360-avail_output.exp,
  testsuite/modules.70-maint/361-list_output.exp,
  testsuite/modules.70-maint/370-variant.exp,
  testsuite/modules.70-maint/371-variant-msg.exp,
  testsuite/modules.70-maint/372-variant-display.exp,
  testsuite/modules.70-maint/373-variant-help.exp,
  testsuite/modules.70-maint/374-variant-test.exp,
  testsuite/modules.70-maint/375-variant-whatis.exp,
  testsuite/modules.70-maint/376-variant-tag.exp,
  .../modules.70-maint/377-variant-shortcut.exp,
  testsuite/modules.70-maint/380-edit.exp: ts: add skip_if_quick_mode in 70
  suite

  * testsuite/modules.90-avail/020-single.exp,
  testsuite/modules.90-avail/030-multiple.exp,
  testsuite/modules.90-avail/040-wild.exp,
  testsuite/modules.90-avail/050-long.exp,
  testsuite/modules.90-avail/060-empty.exp,
  testsuite/modules.90-avail/070-full.exp,
  testsuite/modules.90-avail/080-noindepth.exp,
  testsuite/modules.90-avail/100-tags.exp,
  testsuite/modules.91-sort/020-avail.exp,
  testsuite/modules.95-version/020-unload.exp,
  testsuite/modules.95-version/022-load2.exp,
  testsuite/modules.95-version/022-unload2.exp,
  testsuite/modules.95-version/050-fullpathentry.exp,
  testsuite/modules.95-version/090-dup-modpath-version.exp: ts: add
  skip_if_quick_mode in 90/91/95 suites

  * testsuite/modules.60-initx/015-list.exp,
  testsuite/modules.60-initx/020-add.exp,
  testsuite/modules.60-initx/030-switch.exp,
  testsuite/modules.60-initx/040-prepend.exp,
  testsuite/modules.60-initx/050-rm.exp,
  testsuite/modules.60-initx/060-2nd.exp,
  testsuite/modules.60-initx/080-access-initx.exp,
  testsuite/modules.61-coll/020-savelist.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/050-saverm.exp,
  testsuite/modules.61-coll/060-saveshow.exp,
  testsuite/modules.61-coll/080-access-coll.exp,
  testsuite/modules.80-deep/020-load-deep.exp,
  testsuite/modules.80-deep/021-unload.exp,
  testsuite/modules.80-deep/022-switch.exp,
  testsuite/modules.80-deep/030-display.exp,
  testsuite/modules.80-deep/050-whatis.exp,
  testsuite/modules.80-deep/068-transitive-deep.exp,
  testsuite/modules.80-deep/080-access-deep.exp,
  testsuite/modules.80-deep/090-deepvirt.exp: ts: add skip_if_quick_mode in
  60/61/80 suites

  * testsuite/modules.00-init/100-pager.exp,
  testsuite/modules.00-init/110-quar.exp,
  testsuite/modules.00-init/120-siteconfig.exp,
  testsuite/modules.00-init/130-auto_handling.exp,
  testsuite/modules.00-init/140-color.exp,
  testsuite/modules.00-init/150-access-init.exp,
  testsuite/modules.10-use/030-use.exp,
  testsuite/modules.10-use/031-append.exp,
  testsuite/modules.10-use/032-prepend.exp,
  testsuite/modules.10-use/070-unuse.exp,
  testsuite/modules.10-use/080-access-use.exp,
  testsuite/modules.10-use/090-bad.exp,
  testsuite/modules.20-locate/030-defvers.exp,
  testsuite/modules.20-locate/031-defvers2.exp,
  testsuite/modules.20-locate/035-defname.exp,
  testsuite/modules.20-locate/038-defcontext.exp,
  testsuite/modules.20-locate/040-alias.exp,
  testsuite/modules.20-locate/043-virtual.exp,
  testsuite/modules.20-locate/045-symvers.exp,
  testsuite/modules.20-locate/048-symexec.exp,
  testsuite/modules.20-locate/050-locrc.exp,
  testsuite/modules.20-locate/057-mcookie.exp,
  testsuite/modules.20-locate/060-rc.exp,
  testsuite/modules.20-locate/066-modulepath-rc.exp,
  testsuite/modules.20-locate/067-hidden.exp,
  testsuite/modules.20-locate/068-transitive.exp,
  testsuite/modules.20-locate/069-cross.exp,
  testsuite/modules.20-locate/070-homerc.exp,
  testsuite/modules.20-locate/075-symlink.exp,
  testsuite/modules.20-locate/080-access.exp,
  testsuite/modules.20-locate/081-access-rc.exp,
  testsuite/modules.20-locate/090-memcache.exp,
  testsuite/modules.20-locate/100-wspace.exp,
  testsuite/modules.20-locate/110-hide.exp,
  testsuite/modules.20-locate/111-hide-hard.exp,
  testsuite/modules.20-locate/111-hide-soft.exp,
  testsuite/modules.20-locate/112-hide-user-group.exp,
  testsuite/modules.20-locate/113-hide-all-opt.exp,
  testsuite/modules.20-locate/114-hide-before-after.exp,
  testsuite/modules.20-locate/115-forbid.exp,
  testsuite/modules.20-locate/116-forbid-before-after.exp,
  testsuite/modules.20-locate/117-forbid-user-group.exp,
  testsuite/modules.20-locate/118-hidden-loaded.exp,
  testsuite/modules.20-locate/119-hide-cascading.exp: ts: add
  skip_if_quick_mode in 00/10/20 suites

  * NEWS.rst, contrib/rpm/environment-modules.spec.in: rpm: run tests in quick
  mode

  * NEWS.rst, script/mt, testsuite/config/base-config.exp: ts: introduce quick
  test mode  Introduce the non-regression quick test mode. When the
  `QUICKTEST` environment variable is set to 1, only the main tests from the
  non-regression testsuite are run.  When first argument of the `mt` script is
  `quick`, tests are run in quick mode.  Goal is to complete the quick tests
  in a minute, rather the 10+ minutes required by the full testsuite.

2021-07-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/rpm/environment-modules.spec.in: rpm: remove compat specific
  subpackage  Remove the code that was specific to the generation of the
  compat subpackage.  Make environment-modules-compat subpackage obsolete by
  the environment-module package, following Fedora guidelines [1]  [1] https:/
  /docs.fedoraproject.org/en-US/packaging-guidelines/#renaming-or-replacing-ex
  isting-packages

  * script/mb, script/mt: script: remove compat version-related code in mt/mb

  * script/mpub, script/mrel: script: remove compat version-related code in
  mrel/mpub

  * NEWS.rst, doc/source/module.rst, script/modulecmd.in: Remove
  MODULES_USE_COMPAT_VERSION env variable

  * init/.gitignore, init/bash.in, init/bash_completion.in, init/cmake.in,
  init/csh.in, init/fish.in, init/ksh.in, init/perl.pm.in,
  init/profile-compat.csh.in, init/profile-compat.sh.in, init/python.py.in,
  init/ruby.rb.in, init/sh.in, init/zsh.in: init: remove compat
  version-related code

  * README.md: doc: remove compat version transition section from README

  * .gitignore, Makefile, Makefile.inc.in, doc/Makefile, init/Makefile:
  install: remove compat version-related rules

  * Makefile.inc.in, configure: install: remove useless gitworktree install
  config var

  * Makefile.inc.in, configure: install: remove useless EXEEXT install config
  var

2021-07-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .cirrus.yml, .github/workflows/linux_tests.yaml,
  .github/workflows/windows_tests.yaml: cirrus/gh: no more test case with
  compat version build

  * site.exp.in, testsuite/install.00-init/005-init_ts.exp,
  testsuite/install.00-init/022-module-compat.exp,
  testsuite/install.00-init/030-options.exp: ts: remove install tests of
  compat version

  * INSTALL.rst, NEWS.rst, configure: install: remove --enable-compat-version
  install option  Remove installation option '--enable-compat-version'.
  Compatiblity version co-installation is discontinued.

  * init/.gitignore, init/Makefile, init/{modulerc.in => initrc.in},
  init/{.modulespath.in => modulespath.in}: init: name default config files
  initrc/modulespath  Rename the configuration template files following the
  new default naming scheme for these files: modulerc becomes initrc and
  .modulespath becomes modulespath.

  * .github/workflows/linux_tests.yaml, .gitignore, Makefile,
  testsuite/example/{modulerc-1.in => initrc-1.in},
  .../example/{.modulespath-empty => modulespath-empty},
  .../{.modulespath-wild.in => modulespath-wild.in},
  testsuite/modules.70-maint/120-autoinit.exp: ts: use default conf names in
  example for tests

  * testsuite/install.00-init/005-init_ts.exp,
  testsuite/install.00-init/020-module.exp,
  testsuite/install.00-init/024-ml.exp,
  testsuite/modules.00-init/050-modpath.exp,
  testsuite/modules.50-cmds/029-setenv-env.exp,
  testsuite/modules.50-cmds/180-unload.exp,
  testsuite/modules.50-cmds/190-load.exp,
  testsuite/modules.50-cmds/321-is-used.exp,
  testsuite/modules.50-cmds/370-deps-fullpath.exp,
  testsuite/modules.50-cmds/372-deps3.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/080-help.exp,
  testsuite/modules.70-maint/085-test.exp: ts: adapt full path tests when +
  sign is found in modpath  Plus sign in full path modulefile designation is
  understood as a variant specification when advanced_version_spec config
  option is enabled. So disable the option for the full path tests.

2021-07-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/005-init_ts.exp: ts: report env properties when
  starting install tests

  * .cirrus.yml, .github/workflows/linux_tests.yaml,
  testsuite/modules.70-maint/120-autoinit.exp: cirrus/gh: adapt setup
  following default config changes

  * testsuite/modules.10-use/080-access-use.exp,
  testsuite/modules.20-locate/110-hide.exp,
  testsuite/modules.50-cmds/472-getvariant.exp,
  testsuite/modules.70-maint/220-config.exp,
  testsuite/modules.70-maint/260-extended_default.exp,
  testsuite/modules.70-maint/270-adv_version_spec.exp,
  testsuite/modules.70-maint/271-adv_version_spec-in.exp,
  .../modules.70-maint/272-adv_version_spec-range.exp,
  .../modules.70-maint/276-adv_version_spec-rangein.exp,
  testsuite/modules.80-deep/090-deepvirt.exp,
  testsuite/modules.91-sort/040-load-sort.exp: ts: adapt tests setup following
  default config changes  Now some features are enabled by default, some test
  files have to be corrected to ensure the appropriate setup is made prior
  running these tests.

2021-07-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/005-init_ts.exp,
  testsuite/install.00-init/030-options.exp,
  testsuite/install.00-init/050-crossshell.exp: ts: fix subshell tests when sh
  kind is bash  sh is transmitting exported function definition to a bash
  subshell if sh is the bash one.

  * .github/workflows/linux_tests.yaml, INSTALL.rst, Makefile.inc.in,
  configure, contrib/rpm/environment-modules.spec.in, init/Makefile: install:
  swap --enable-dotmodulespath/--enable-modulespath  Make --enable-modulespath
  the primary option name and --enable-dotmodulespath the secondary option
  name as .modulespath is not anymore the primary name of this configuration
  file.

  * Makefile, NEWS.rst, modulecmd.tcl.in,
  testsuite/install.00-init/005-init_ts.exp: Look at conf files in etcdir or
  initdir not both  Only look at configuration files found in the location
  designated by the '--etcdir' or '--initdir' option (depending on the value
  of '--with-initconf-in' option). Configuration files were previously
  searched in both locations.

  * INSTALL.rst, NEWS.rst, configure, contrib/rpm/environment-modules.spec.in:
  install: set --with-initconf-in to etcdir by default  Installation option
  '--with-initconf-in' is set to 'etdir' by default to locate configuration
  files in the directory designated by the '--etcdir' option. Therefore the
  initialization configuration file is named `initrc` in this directory, and
  the  modulepath-specific configuration file is named `modulespath`.
  Configuration files are thus located in a traditional etcdir rather being
  part of the init dir among scripts that should stay read only.

2021-07-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.rst, configure: missing/doc: missing inst opt default value
  mention

  * INSTALL.rst, NEWS.rst, configure, contrib/rpm/environment-modules.spec.in,
  init/modulerc.in: install: set --enable-set-shell-startup off by default
  Installation option '--enable-set-shell-startup' is set off by default but
  could be enabled once installed through the `initrc` configuration file.  It
  seems better to let people choose to enable this option than being surprised
  to find Modules initialization script run automatically each time a
  sub-shell is spawn.

  * INSTALL.rst, NEWS.rst, configure: install: reset --enable-new-features
  Installation option '--enable-new-features' has been reset following major
  version change as all the options it implied are now enabled by default.

  * INSTALL.rst, NEWS.rst, configure: install: set --with-icase on by default
  Installation option '--with-icase' is set to `search` by default to activate
  case insensitive match on search contexts.

  * INSTALL.rst, NEWS.rst, configure: install: set --enable-color on by
  default  Installation option '--enable-color' is set on by default which
  enables the `auto` output color mode.

  * INSTALL.rst: doc: mention variant on --enable-advanced-version-spec

  * INSTALL.rst, NEWS.rst, configure: install: set
  --enable-advanced-version-spec on by default  Installation option
  '--enable-advanced-version-spec' is set on by default which activates the
  Advanced module version specifiers.

  * INSTALL.rst, NEWS.rst, configure: install: set --enable-extended-default
  on by default  Installation option '--enable-extended-default' is set on by
  default which allows partial module version specification.

  * INSTALL.rst, NEWS.rst, configure: install: set --enable-auto-handling on
  by default  Installation option '--enable-auto-handling' is set on by
  default which enables the automated module handling mode.

  * configure: install: remove debug statement in configure

2021-07-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.10-use/030-use.exp,
  testsuite/modules.10-use/031-append.exp,
  testsuite/modules.10-use/032-prepend.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.70-maint/230-verbosity.exp: ts: update non-existent dir
  add on use subcmd

  * NEWS.rst, doc/source/module.rst, modulecmd.tcl.in: Accept non-existent
  modulepath on use subcmd  Allow non-existent directory to be specified to
  use sub-command so directory that does not exist yet could be added to
  MODULEPATH prior being created.  Also it may allow a shared module
  configuration to define all existing paths across the network but only some
  of these paths are enabled on a given host.

  * modulecmd.tcl.in: Gather invalid empty name err msg in a proc  Add
  getEmptyNameMsg procedure to gather all error message strings when a module,
  directory or collection name is an empty string.

  * testsuite/install.00-init/080-args.exp,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/015-use.exp: ts: update invalid directory name err
  msg

  * NEWS.rst, modulecmd.tcl.in: Update empty dir err msg on use/unuse subcmd
  Align empty directory name error message obtained on use and unuse
  sub-commands with message obtained when module or collection name is empty.

  * testsuite/modules.50-cmds/260-getenv.exp,
  testsuite/modules.50-cmds/269-getenv-env.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.50-cmds/359-allin-env.exp: ts: update getenv default
  return value tests

  * NEWS.rst, modulecmd.tcl.in: Return empty string on getenv if var not
  defined  Return by default an empty string rather `_UNDEFINED` on `getenv`
  modulefile command if passed environment variable is not defined.  Behavior
  is this way aligned with `getvariant` procedure. It is also the most common
  behavior for this kind of fetch procedure.

  * NEWS.rst, modulecmd.tcl.in: Remove nop cmds from modulerc interp  Do not
  declare anymore the chdir, module, module-trace, module-verbosity,
  module-user and module-log commands in modulerc Tcl interpreter. A clear
  error message will be obtained if an attempt to use these commands is made
  instead of a silent no-operation treatment.

  * NEWS.rst, modulecmd.tcl.in: Remove mention of init* subcmd in usage msg

  * MIGRATING.rst, doc/source/FAQ.rst: doc: advertise sh-to-mod/source-sh in
  FAQ

  * testsuite/install.00-init/030-options.exp: ts: remove createmodule.py
  install test

  * contrib/rpm/environment-modules.spec.in: rpm: remove specific installation
  of createmodule.sh

  * .gitignore, Makefile, NEWS.rst, script/createmodule.py.in,
  script/createmodule.sh: script: remove createmodule.sh and createmodule.py
  createmodule.sh and createmodule.py scripts are superseded by the
  `sh-to-mod` sub-command that supports conversion from more shell languages
  (ksh, zsh, fish, csh) and handles more environment changes (alias, shell
  function).

2021-07-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, contrib/rpm/environment-modules.spec.in, doc/source/conf.py,
  version.inc.in: Release of version 4.8.0

  * MIGRATING.rst: doc: desc. 'Variant shortcuts' in MIGRATING

2021-07-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst: doc: desc. 'Module variants' in MIGRATING

  * .cirrus.yml: cirrus: update to python38 on FreeBSD test cases  py37-sphinx
  is not available anymore on freebsd-12-2 and freebsd-11-4.

  * NEWS.rst, init/zsh.in, modulecmd.tcl.in,
  testsuite/modules.70-maint/120-autoinit.exp: Inhibit rcexpandparam Zsh
  option when initializing  Protect quarantine mechanism code from
  'rcexpandparam' Zsh option when initializing the module command on this
  shell.  Fixes #403

2021-07-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/modulefile.rst: doc: desc. variant mfcmd in modulefile(4)

2021-07-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst: doc: add 'Module variants' section in module(1)

  * doc/source/module.rst, doc/source/modulefile.rst: doc: desc. variant
  specification in module(1)/modulefile(4)

  * doc/source/module.rst: doc: fix syntax of edit subcmd desc. in module(1)

2021-07-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc. variant work in NEWS

  * doc/source/modulefile.rst: doc: add variant info to module-info in
  modulefile(4)

2021-07-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst: doc: desc. MODULES_VARIANT_SHORTCUT in module(1)

  * doc/source/module.rst: doc: desc. MODULES_LMVARIANT in module(1)

2021-07-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .cirrus.yml: cirrus: start darwin test by updating homebrew  Fix
  inconsistent issue with deprecated homebrew setup.

  * doc/source/modulefile.rst: doc: desc. no implicit req if module not found
  by try-load

  * doc/source/modulefile.rst: doc: desc. getenv on display eval mode in
  modulefile(4)

  * doc/source/modulefile.rst: doc: desc. ModuleVariant in modulefile(4)

  * doc/source/diff_v3_v4.rst, doc/source/modulefile.rst: doc: mention getenv
  introduction release

  * doc/source/modulefile.rst: doc: desc. getvariant in modulefile(4)

2021-07-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst: doc: desc. try-load addition in MIGRATING

2021-07-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc. try-load addition in NEWS

  * init/fish.in: init: update stderr redirection in fish init script  Use of
  '^' character to redirect stderr has been deprecated starting Fish version
  3.1. It now produces an error. Stderr should be redirected with '2>' like on
  SH shells. Hopefully '2>' redirection is also supported on old Fish versions
  (all version 2 support it).  This update was performed on modulecmd.tcl with
  711c901 commit, but fish initialization script was forgotten at that time.

  * doc/source/diff_v3_v4.rst: doc: use catch to get v3 module load behavior
  in modfile  Add description to the diff doc to get the behavior of Modules
  v3 back when using `module load` command in modulefile. To pursue evaluation
  even when the `module load` fails, enclose it within a `catch` Tcl command.
  Fixes #197.

  * doc/source/module.rst: doc: fix options on subcmd aliases in module(1)

  * doc/source/module.rst: doc: desc try-load in module(1) man

  * testsuite/example/initrc.in, testsuite/modules.70-maint/120-autoinit.exp:
  ts: test try-load in rc file

  * testsuite/modulefiles.3/tryload/.modulerc,
  testsuite/modulefiles.3/tryload/1.0, testsuite/modulefiles.3/tryload/2.0,
  testsuite/modules.50-cmds/490-try-load.exp: ts: add specific tests for
  try-load subcmd in 50/490

  * testsuite/modulefiles.2/modemptyarg/try-load,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.50-cmds/152-module-emptyarg.exp: ts: adapt existing tests
  for try-load subcmd

2021-07-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: No requirement record when try-load fails  Do not record
  the prereq requirement on the try-loaded module, if this load temptative
  fails.

2021-07-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Add 'try-load' sub-command  Introduce the `try-load`
  sub-command that could also be aliased `try-add`. try-load attempts to load
  modulefile(s) but does not raise error (message or code) if module(s) cannot
  be found (does not exist or forbidden).  Error is still raised if an
  evaluation error occurs.  The `try_modulefile` internal state is added to
  transmit the information that the load (or unload when load is proccessed
  during an unload evaluation) is performed in *try* mode or not.  Fixes #392

2021-06-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/diff_v3_v4.rst: doc: desc. try-load in diff doc

  * init/Makefile, init/bash_completion.in, init/fish_completion,
  init/tcsh_completion.in, init/zsh-functions/_module.in: init: add try-load
  sub-cmd to completion scripts

  * init/Makefile, init/bash_completion.in, init/fish_completion,
  init/tcsh_completion.in, init/zsh-functions/_module.in: init: add edit
  sub-cmd to completion scripts

2021-06-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Dead code cleanup in
  parseModuleSpecificationProcAdvVersSpec  Remove code branches in the
  parseModuleSpecificationProcAdvVersSpec procedure that are never reached due
  to the code refactoring done for boolean variant and variant shortcut.

2021-06-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/210-clear.exp,
  testsuite/modules.70-maint/280-ml.exp: ts: unset MODULES_LMVARIANT on clear
  subcmd tests

  * modulecmd.tcl.in: Unset MODULES_LMVARIANT env var on clear subcmd

  * doc/source/design/variants.rst: doc: refine desc of variant_shortcut in
  design

  * testsuite/modulefiles.3/variant/1.0,
  .../modules.70-maint/377-variant-shortcut.exp: ts: test specific mod desig.
  with variant_shortcut in 70/377

  * testsuite/modulefiles.3/variant/1.0,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/060-saveshow.exp,
  testsuite/modules.61-coll/999-cleanup.exp: ts: test collection with
  variant_shortcut in 61

  * modulecmd.tcl.in: Ignore shortcut when reporting variant set for
  collection  When saving collection, do not use variant shortcut to produce
  the module designation to save in collection files, as shortcuts are a
  configuration that could evolve over time.  Add the '5' report mode in
  getVariantList procedure to avoid defined shortcuts when producing module
  designation.

2021-06-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/variant/1.0, testsuite/modulefiles.3/variant/7.0,
  .../modules.70-maint/377-variant-shortcut.exp: ts: test variant_shortcut use
  in modfile in 70/377

  * testsuite/modulefiles.3/variant/.modulerc,
  .../modules.70-maint/377-variant-shortcut.exp: ts: test module tag with
  variant_shortcut in 70/377

  * .../modules.70-maint/377-variant-shortcut.exp: ts: test unload subcmd with
  variant_shortcut in 70/377

  * .../modules.70-maint/377-variant-shortcut.exp: ts: test load subcmd with
  variant_shortcut in 70/377

2021-06-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .../modules.70-maint/377-variant-shortcut.exp: ts: test list subcmd with
  variant_shortcut in 70/377

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp: ts: add variant to default
  MODULES_LIST_OUTPUT value

  * testsuite/example/siteconfig.tcl-1,
  .../modules.70-maint/377-variant-shortcut.exp: ts: variant_shortcut specific
  config tests in 70/377

  * testsuite/modules.70-maint/370-variant.exp: ts: update variant explanation
  in display key in 70/370

  * modulecmd.tcl.in: Explain each variant shortcut in display key  For each
  variant shortcut reported, add an entry in the display key to expose the
  variant name associated with the shortcut.

2021-06-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Rework display key for variant  Use a single global
  array '::g_used_va' to track usage of the different variant report form
  (var=val, +var, ...).  Use the {variant=value} syntax to explain enabled or
  disabled boolean variant in display key: {+variant}={variant=on}.  As a
  consequence of last point, '{variant=value}' is added to display key to
  explain the {variant=on} or {variant=off} part of boolean variant key entry.

  * modulecmd.tcl.in: Use defined shortcut to report variant  Like boolean
  variants are reported '+name' or '-name', variant with a defined shortcut
  are reported using this shortcut, for instance '%value'.

2021-06-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Parse variant shortcut in module specification  Adapt
  the parseModuleSpecification process to also resolve the variant shortcut
  defined when analyzing module specifications.

  * init/Makefile, init/fish_completion, init/zsh-functions/_module.in: init:
  add variant_shortcut config to completion script

2021-06-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/220-config.exp: ts: adapt existing config tests
  for variant_shortcut

2021-06-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp: ts: clean any variant_shortcut
  config

2021-06-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.rst: doc: desc --with-variant-shortcut in INSTALL

  * Makefile, Makefile.inc.in, configure, site.exp.in: install: add
  --with-variant-shortcut configure option

2021-06-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Add 'variant_shortcut' config option

  * doc/source/design/variants.rst: doc: update boolean variant specs

2021-06-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/071-args.exp: ts: fix tests with -* arg and
  advverspec enabled in 00/071

2021-06-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/siteconfig.tcl-1: ts: update tests using '+' in mod name
  in 00/120

  * testsuite/modulefiles.3/variant/1.0, testsuite/modulefiles.3/variant/6.0,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/999-cleanup.exp: ts: bool variant and collection
  in 61/{030,040}

  * testsuite/modulefiles.3/variant/7.0,
  testsuite/modules.50-cmds/479-variant-boolean.exp: ts: bool variant and
  requirement in 50/479

2021-06-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/479-variant-boolean.exp: ts: bool variant
  specified multiple times in 50/479

  * testsuite/modulefiles.3/variant/1.0,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/470-variant.exp,
  testsuite/modules.50-cmds/479-variant-boolean.exp: ts: bad boolean variant
  specification in 50/479

  * modulecmd.tcl.in: Raise error if variant specification contains several
  '='

2021-06-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/variant/1.0,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/479-variant-boolean.exp: ts: non-boolean variant
  with boolean-like value in 50/479

  * modulecmd.tcl.in: Translate var=val boolean value in canonical boolean
  When variant is specified with the variant=value form, translate any boolean
  value in boolean canonical form (0 or 1).  Specifications are parsed prior
  knowing if variant is defined as a boolean or not. Thus boolean value are
  forbidden on non-boolean variant (see previous commit).

  * modulecmd.tcl.in: Raise error when bool val set on non-bool variant  Raise
  an error when a non-boolean variant defines a boolean value in its accepted
  value list. Integers which also are boolean (0 and 1) are yet accepted on
  non-boolean variant.  As boolean value are translated in canonical form (0
  or 1) when the module specification is parsed, boolean value cannot be
  defined as accepted value of non-boolean variant since it would never get
  matched.

2021-06-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/479-variant-boolean.exp: ts: bool variant and
  @loaded version specifier

  * testsuite/modules.50-cmds/479-variant-boolean.exp: ts: bool variant and
  is-loaded/unload/switch

  * testsuite/modulefiles.3/variant/4.0,
  testsuite/modules.70-maint/372-variant-display.exp,
  testsuite/modules.70-maint/373-variant-help.exp,
  testsuite/modules.70-maint/374-variant-test.exp: ts: bool variant and
  display/help/test

  * testsuite/modules.70-maint/370-variant.exp,
  testsuite/modules.70-maint/375-variant-whatis.exp: ts: bool variant and
  is-avail/avail/path/paths/whatis

2021-06-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/370-variant.exp: ts: test boolean variant with
  list sub-cmd in 70/370

  * testsuite/modulefiles.3/variant/1.0, testsuite/modulefiles.3/variant/5.0,
  testsuite/modules.50-cmds/479-variant-boolean.exp: ts: test boolean variant
  specification in 50/479

  * modulecmd.tcl.in: Render boolean variant value as boolean json value  When
  reporting variant set in the JSON output mode, render the value of boolean
  variant as boolean JSON value (true/false, no quote).  Update the
  getVariantList to provide variant with value and is-boolean flag when report
  mode is set to 4.

  * testsuite/modulefiles.2/{e+t.fl => e.t.fl}/1.3.1,
  testsuite/modulefiles.2/{e+t.fl => e.t.fl}/1.3.7,
  testsuite/modulefiles.2/{e+t.fl => e.t.fl}/1.4.5,
  testsuite/modules.70-maint/260-extended_default.exp,
  testsuite/modules.70-maint/270-adv_version_spec.exp,
  testsuite/modules.70-maint/271-adv_version_spec-in.exp,
  testsuite/modules.70-maint/272-adv_version_spec-range.exp: ts: rename
  'e+t.fl' test mod into 'e.t.fl'  As '+' followed by alpha characters is now
  a boolean variant specification, change the test module 'e+t.fl' name into
  'e.t.fl'. (cannot use '*' or '?' in file name on Windows)

  * modulecmd.tcl.in: Accept + char at end of module name  Accept any number
  of plus (+) character at the end of module name to be part of this module
  name instead of being parsed as a boolean variant character.  '+' character
  should not be followed by alpha character otherwise it will be treated as
  part of boolean variant specification.  Thus 'name+' or 'name++' are
  accepted module names but 'name+name' are taken as module name and enabled
  boolean variant.

2021-06-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Explain var=val/+var/-var on display key  Improve
  display key to also explain the +variant and -variant elements.  Track the
  elements to report from getVariantList procedure, rather when the 'va' SGR
  key is used in order to be able to distinguish the different variant kind.

  * modulecmd.tcl.in: Avoid variant collect when not reporting them  Adapt
  reportModules procedure to avoid collecting variant for each module to
  report in case these variant information should not be reported.

  * modulecmd.tcl.in: Allow -* arg on cmdline for bool variant  Accept any
  minus argument (-*) set after the sub-command name when the
  advanced_version_spec configuration is enabled and if sub-command accepts
  advanced module specification. Boolean variant may be set to false this way.

2021-06-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/variant/1.0,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/479-variant-boolean.exp: ts: test boolean variant
  definition in 50/479

2021-06-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.20-locate/113-hide-all-opt.exp,
  testsuite/modules.50-cmds/470-variant.exp,
  testsuite/modules.50-cmds/471-variant-unload.exp,
  testsuite/modules.50-cmds/472-getvariant.exp,
  testsuite/modules.50-cmds/473-variant-prereq.exp,
  testsuite/modules.50-cmds/474-variant-conflict.exp,
  testsuite/modules.50-cmds/475-variant-tag.exp,
  testsuite/modules.50-cmds/476-variant-aliassym.exp,
  testsuite/modules.50-cmds/477-variant-info.exp,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.70-maint/370-variant.exp,
  testsuite/modules.70-maint/371-variant-msg.exp,
  testsuite/modules.70-maint/372-variant-display.exp,
  testsuite/modules.70-maint/373-variant-help.exp,
  testsuite/modules.70-maint/374-variant-test.exp,
  testsuite/modules.70-maint/375-variant-whatis.exp,
  testsuite/modules.70-maint/376-variant-tag.exp: ts: add isbool flag to
  persistency in existing vr tests

  * modulecmd.tcl.in: Record is-boolean state of variant in internal/env
  struct  Record the is-boolean property of each variant either in the
  internal structure or in the persistency information recorded in user
  environment.  Use this recorded property to adapt reporting of boolean
  variant (use the +name or -name to report them instead of name=1 or name=0).

2021-06-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Add --boolean option to variant mfcmd  Add the --boolean
  option to the variant modulefile command to define a boolean variant. When
  set, no list of accepted value should be defined the variant and any default
  value set should be a boolean value.  When boolean variant is evaluated it
  is checked against any value accepted as boolean by Tcl as described in Tcl
  manual:  "If string is any of 0, false, no, or off, then Tcl_GetBoolean
  stores a zero value at *boolPtr. If string is any of 1, true, yes, or on,
  then 1 is stored at *boolPtr. Any of these values may be abbreviated, and
  upper-case spellings are also acceptable."

2021-06-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Parse boolean variant shortcut  Add support for boolean
  variant in module specification: +variant, ~variant and -variant. The
  -variant syntax is not supported on ml command, as the minus sign already
  means to unload specified module. ~variant and +variant could also be
  defined appended to another specification word, whereas -variant must be the
  start of a new specification word.

  * testsuite/example/siteconfig.tcl-1,
  testsuite/modules.70-maint/271-adv_version_spec-in.exp,
  testsuite/modules.70-maint/280-ml.exp: ts: adapt err msg after
  parseModuleSpecification update

2021-06-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Refactor parseModuleSpecificationProcAdvVersSpec  Rework
  code of parseModuleSpecificationProcAdvVersSpec procedure to prepare for
  parsing boolean variant and variant shortcut.

  * modulecmd.tcl.in: Split parseModuleSpecification in 2 procs  Define
  parseModuleSpecification on the fly depending on the advanced_version_spec
  configuration. Two flavor of the procedure are defined, separately to
  improve code readability.

2021-06-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/variant/.modulerc,
  testsuite/modulefiles.3/variant/2.1/2/1,
  testsuite/modules.50-cmds/470-variant.exp: ts: test vr transmit. with hidden
  mod resolution in 50/470

2021-06-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: No vr array check needed on reloadModuleListLoadPhase
  The vr array is the result of the reloadModuleListUnloadPhase procedure
  which fills it with an entry for every module to reload. So there is no need
  to check if vr contains an entry for each module to reload in
  reloadModuleListLoadPhase.

  * testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/120-siteconfig.exp: ts: test getModuleDesignation
  when sgr=0 in 00/120

  * testsuite/modulefiles.3/variant/1.0,
  testsuite/modules.50-cmds/470-variant.exp,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/999-cleanup.exp: ts: variant redefinition with
  default value in 61/030 & 50/470

  * modulecmd.tcl.in: No need to define modEq in getModuleTag  modEq procedure
  is already defined whatever the context it is called from.

  * testsuite/modulefiles.3/variant/1.0,
  testsuite/modules.50-cmds/470-variant.exp: ts: test variant without name,
  values and option in 50/470

2021-06-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/.modulerc, testsuite/modulefiles.3/variant/7.0,
  testsuite/modules.50-cmds/473-variant-prereq.exp: ts: icase/ext_dfl &
  versrange & altname & variant tests

2021-06-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: No altname check when modEq is called in eqspec mode  Do
  not check alternative names of the passed module specification when modEq
  procedure is called with the eqspec test mode. As in this mode, alternative
  names are currently checked independently from the module they target.

  * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.70-maint/371-variant-msg.exp: Normalize other variant is
  already loaded msg  Use the same variant representation than anywhere else
  when reporting an *other variant is already loaded* error message. Use SGR
  codes to improve readability of such message.

  * testsuite/modulefiles.3/.modulerc, testsuite/modulefiles.3/variant/7.0,
  testsuite/modules.50-cmds/473-variant-prereq.exp: ts: icase/ext_dfl &
  altname & variant tests

2021-05-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.61-coll/040-restore.exp: ts: add icase/ext_dfl & variant
  tests on restore

  * modulecmd.tcl.in, testsuite/modules.50-cmds/470-variant.exp: Raise error
  with modnvspec from getEqArrayKeyProc  When the implicit default mechanism
  is disabled, raise error with the module name and version but without the
  eventually specified variants.

  * testsuite/modulefiles.3/variant/7.0, testsuite/modulefiles.3/vrreq1/1.0,
  testsuite/modules.50-cmds/470-variant.exp,
  testsuite/modules.50-cmds/473-variant-prereq.exp: ts: add
  icase/extended_default & variant tests

2021-05-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Handle break within switch on OS X  On OS X platform,
  when a break command is issued within a switch block the return value is
  TCL_BREAK but there is no specific errorMsg set. Also :errorCode variable is
  not set.  Add support for this case to catch module evaluation abort.

  * testsuite/modules.50-cmds/286-info-username.exp,
  testsuite/modules.50-cmds/287-info-usergroups.exp: ts: fix module-info error
  stack test in 50/{286,287}

2021-05-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/variants.rst: doc: desc. is-dfl-specifically-asked in
  variant design

  * modulecmd.tcl.in: Preserve variant auto set dfl state when reloading  When
  running `reload` sub-command, ensure the automatically set default value
  state of variant is preserved to end with the exact same loaded module
  properties once reloading is finished.  getVariantList procedure is adapted
  to pass the '2' value to the excl_dflval argument, which means that we want
  to exclude the default value that have been automatically set (so when
  reloading they will be this time also automatically set).

2021-05-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/variants.rst: doc: desc. forbidden  version variant in
  design doc

  * testsuite/modulefiles.3/variant/6.0,
  testsuite/modules.50-cmds/478-variant-version.exp: ts: test version variant
  in 50/478

  * modulecmd.tcl.in: Forbid use of 'version' variant name  Raise an error if
  variant name 'version' is used in order to avoid use of this variant name
  prior implementation of the specific behaviors of this variant.

  * testsuite/modules.50-cmds/470-variant.exp,
  testsuite/modules.50-cmds/471-variant-unload.exp,
  testsuite/modules.50-cmds/472-getvariant.exp,
  testsuite/modules.50-cmds/473-variant-prereq.exp,
  testsuite/modules.50-cmds/474-variant-conflict.exp,
  testsuite/modules.50-cmds/475-variant-tag.exp,
  testsuite/modules.50-cmds/476-variant-aliassym.exp,
  testsuite/modules.50-cmds/477-variant-info.exp,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/040-restore.exp: ts: adapt tests with auto set
  variants

2021-05-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Record if variant has been asked by user  Adapt
  is-default variant hint to also record if the default value was asked or if
  it was automatically set.  is-default hint is set to 1 if asked or to 2 if
  default value was automatically set.

  * doc/source/design/variants.rst: doc: desc variant in requirement spec in
  design doc

  * doc/source/design/variants.rst: doc: desc module-info {name,specified} &
  variant in design doc

  * testsuite/modulefiles.3/variant/6.0,
  testsuite/modules.50-cmds/477-variant-info.exp: ts: module-info name &
  variant tests in 50/477

  * testsuite/modulefiles.3/variant/6.0,
  testsuite/modules.50-cmds/477-variant-info.exp: ts: module-info specified &
  variant tests in 50/477

2021-05-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/variants.rst: doc: module-info tags/loaded & variant in
  design doc

  * doc/source/design/variants.rst: doc: fix module-info specified desc. when
  unloading variant

  * testsuite/modulefiles.3/variant/.modulerc,
  testsuite/modulefiles.3/variant/6.0,
  testsuite/modules.50-cmds/477-variant-info.exp: ts: module-info tags &
  variant tests in 50/477

  * modulecmd.tcl.in: collect tags over variant on module-info tags  When
  module-info tags is called, collect the tags recorded against the module
  name version and variants designation to get all tags applying to currently
  evaluating module.

  * testsuite/modulefiles.3/variant/6.0,
  testsuite/modules.50-cmds/477-variant-info.exp: ts: is-avail & variant tests
  in 50/477

  * testsuite/modulefiles.3/variant/6.0,
  testsuite/modules.50-cmds/477-variant-info.exp: ts: module-info loaded &
  variant tests in 50/477

  * testsuite/modulefiles.3/variant/6.0,
  testsuite/modules.50-cmds/477-variant-info.exp: ts: is-loaded & variant
  tests in 50/477

2021-05-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/variants.rst, testsuite/modulefiles.3/.modulerc,
  testsuite/modulefiles.3/variant/6.0,
  testsuite/modules.50-cmds/476-variant-aliassym.exp: doc/ts: no variant on
  module-info {alias,symbols,version}

2021-05-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/variants.rst, testsuite/modulefiles.3/.modulerc,
  testsuite/modulefiles.3/variant/6.0,
  testsuite/modules.50-cmds/476-variant-aliassym.exp: doc/ts: no variant on
  module-{alias,virtual,version}

  * testsuite/modulefiles.3/.modulerc, testsuite/modulefiles.3/variant/6.0,
  testsuite/modules.50-cmds/476-variant-aliassym.exp: ts: simple alias/sym
  resolution tests with variant

  * doc/source/design/variants.rst, testsuite/modulefiles.3/variant/7.0,
  testsuite/modulefiles.3/vrreq1/2.0, testsuite/modulefiles.3/vrreq2/2.0,
  testsuite/modules.50-cmds/473-variant-prereq.exp: doc/ts: depre mod relying
  on default variant  When an optional requirement is loaded by not specifying
  its variant value to rely on default, the Dependent Reload mechanism will
  miss to detect the dependent module to reload, as variant is not specified
  on command line thus it does not match the requirement specification prior
  load.

2021-05-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/var=val,
  testsuite/modules.70-maint/370-variant.exp,
  testsuite/modules.70-maint/375-variant-whatis.exp: ts: variant specified on
  search context

  * doc/source/design/variants.rst: doc: desc. use of variant on search
  contexts

2021-05-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/variant/4.0, testsuite/modulefiles.3/variant/6.0,
  testsuite/modules.50-cmds/471-variant-unload.exp: ts: check variant impact
  over modStartNb proc

2021-05-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/variants.rst: doc: desc sticky/hide/tag in variant
  design

2021-05-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Fix several typos in modulecmd.tcl's comments/debug msgs

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/460-sticky.exp,
  testsuite/modules.50-cmds/461-super-sticky.exp,
  testsuite/modules.50-cmds/462-sticky-corner.exp,
  testsuite/modules.50-cmds/475-variant-tag.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.70-maint/231-verbose2.exp: ts: adapt sticky unload
  error/warn messages

  * modulecmd.tcl.in: No ref to mod in sticky unload msg  Remove reference to
  module name in the sticky module unload message as this kind of message is
  always produced under the "Unloading" message block that already provides
  the module designation.

2021-05-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/home/coll32, testsuite/home/coll33,
  testsuite/modulefiles.3/variant/.modulerc,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/999-cleanup.exp: ts: check stickyness and variants
  when restoring coll

  * modulecmd.tcl.in: Use modvr to test stickyness reload on cmdModuleRestore

2021-05-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Remove useless cmp arg on isModuleTagged

  * testsuite/modulefiles.3/variant/.modulerc,
  testsuite/modules.50-cmds/475-variant-tag.exp,
  testsuite/modules.70-maint/376-variant-tag.exp: ts: test module-tag &
  variant in 50/475 and 70/376

  * modulecmd.tcl.in: Add variant support to stickyness handling  Adapt
  stickyness handling to support variant as, like any other tags, stickyness
  may be applied to module specification including variants.  When testing if
  stickyness is reloading pass the currently module name version with defined
  variants included.  Update isStickynessReloading procedure to handle module
  specification with variants. Improve by the way the test to determine if tag
  applies to module name and version and then if the expected designation is
  reloading or not.

  * modulecmd.tcl.in: Add return_rule arg to getModuleTag  Add the return_rule
  argument to the getModuleTag procedure to return the module specification
  that matches passed mod rather the corresponding tag and its properties.

2021-05-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: No need to fetch tags or update modnamevr when unloading
  There is no need to fetch the tags or update the module name version and
  variants designation of an unloading module, as this information were found
  complete in the persistent environment.

2021-05-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/variant/.modulerc,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/475-variant-tag.exp,
  testsuite/modules.70-maint/376-variant-tag.exp: ts: test module-forbid &
  variant in 50/475 and 70/376

  * doc/source/design/variants.rst: doc: variant ignored on avail/whatis

  * modulecmd.tcl.in: Check nearly-forbidden tag against modnamevr  Check if
  the nearly-forbidden tag applies to a module by using its full name version
  and variant designation.  Also test if this tag applies right after
  modulefile evaluation in case the update designation, with default variant
  set, now matches a module-forbid rule.

  * modulecmd.tcl.in: Check if forbidden tag applies right after mod eval
  Right after the modulefile evaluation, the full variant designation of this
  module is updated. Check is here added to verify that this new designation
  does not match any module-forbid statement. If this is the case, raise an
  error to undo evaluation.

  * testsuite/modules.50-cmds/440-module-tag.exp: ts: fix module-tag eval
  within modulefile in 50/{440,462}

  * modulecmd.tcl.in: Check mod with variants against forbidden tag in
  getPathToModule  Update the getPathToModule procedure to check module
  against the forbidden tag with its full designation (module name version and
  variants).

2021-05-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/variants.rst: doc: tags on variant do not appear on
  avail

  * modulecmd.tcl.in: Update modnamevr after mod eval in execute-modulefile
  Update the module name version with variant designation once modulefile has
  been evaluated in the execute-modulefile procedure. After evaluation, the
  variants with default value are set, so the designation is then complete.
  Tags are then collected for this new designation has it can change the tag
  list applying to loading module.  The up_namevr argument is added to the
  execute-modulefile procedure. When set, it means the modnamevrvar argument
  is a variable name from the calling context to bound to. Otherwise
  modnamevrvar contains the module name version and variant string.  As the
  tags are fetched again after modulefile evaluation, the tags that have been
  defined within modulefile are now collected and exported in persistency
  variable.

  * testsuite/modulefiles.3/variant/.modulerc,
  testsuite/modulefiles.3/variant/.w s, testsuite/modulefiles.3/variant/7.0,
  testsuite/modulefiles.3/variant/8.0,
  testsuite/modules.50-cmds/475-variant-tag.exp,
  testsuite/modules.70-maint/376-variant-tag.exp: ts: test module-hide &
  variant in 50/475 and 70/376

  * modulecmd.tcl.in: Update tag collect/query mechanisms to support variants

  * modulecmd.tcl.in: Fetch variants from spec if mod not load{ed,ing} on
  modEq  Update modEq procedure to fetch the variants set on mod argument from
  the specification of this argument if mod is not loaded or loading (ismodlo
  argument set to 0).

2021-05-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Check mod name with variant to know if hidden-loaded
  When loading a module, check if it is tagged hidden-loaded by comparing its
  full designation (module name, version and variant).  When this module is
  unloading, no need to check against variant as tags are recorded in the
  environment over the module name and version.

  * modulecmd.tcl.in: Check variant set on hidden module spec  When checking
  if module is hidden, compare the variant set on the hidden specifications.
  As a result, hiding specification containing variant specification should
  not hide any module since hiding is checked against available module name
  and version, not their variants.

  * modulecmd.tcl.in: Add vrcmp option to modEq proc  Add the vrcmp option to
  the modEq procedure to indicate whether or not variant should be compared,
  instead of relying on values of the ismodlo option.

2021-05-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/variants.rst: doc: desc already loaded mod in variant
  design

2021-05-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/variants.rst: doc: desc variant cmp when restoring coll
  in variant design

  * modulecmd.tcl.in: Unset variant in collection means default value set  In
  a collection when a variant is not specified (no value set) on the module
  load line it means this variant is set at the default value for variant.
  Code is adapted here in getVariantList and modEq to transmit the is-default
  hint for each variant set on the loaded module against which the module
  specification defined in collection is compared to.  The *missmeandfl*
  option is added to the modVariantCmp procedure to add a specific comparison
  when enabled: if the variant set on loaded module is not the default version
  but this variant is not set on the collection definition, it means module
  specification in collection and loaded module differ.

  * modulecmd.tcl.in: Too soon to rely on autosym on
  getLoadedAltAndSimplifiedName  Autosymbols are not yet ready be used to
  fetch simplified default names when saving/restoring collection. Currently a
  module gets loaded with the default auto-symbol even if there is an explicit
  default set for this module in another enabled modulepath.  Also some
  environment gets loaded and then after user enables the implicit_default and
  advanced_version_spec options, the autosymbols will not be set but modulecmd
  will expect them when saving/restoring collection.

2021-05-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Use computed alt and simplified names when saving coll
  Adapt getSimplifiedLoadedModuleList procedure, which is now only called when
  saving a collection, to rely on the getLoadedAltAndSimplifiedName procedure
  to fetch alternative and simplified names of loaded modules.

  * testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/999-cleanup.exp: ts: correct env when saving coll
  with autosym in 61/040

  * modulecmd.tcl.in: Make restore process rely on regular modEq cmp  Adapt
  getMovementBetweenList procedure to compare element in provided lists with
  the modEq procedure when lists are composed of module specifications. Call
  modEq with a comparison of alternative and simplified names of loaded
  modules.  The module restore process in cmdModuleRestore procedure only need
  one call to getMovementBetweenList to get the list of module to unload, then
  another call to get the list of module to load, in order to restore the
  collection. Whether collection is version-pinned or not the modEq call made
  during collection and loaded module comparison will also check collection
  module name against loaded module simplified names.

  * modulecmd.tcl.in: Compute list of alt and simplified names for loaded mods
  Add the getLoadedAltAndSimplifiedName procedure that compute for designated
  loaded module passed as argument the list of its alternative names and
  simplified names (in case this module name version is the implicit default).
  This information is only fetched from the alternative names in case the
  automated symbols are generated: simplified names are part of the
  alternative names in this case. Otherwise the parent module name is resolve
  against currently set modulepath to determine if parent module resolves to
  currently loaded module version.  Add the ability on modEq procedure to
  compare a module pattern against these alternative and simplified names of a
  loaded module: ismodlo argument should be set to '3'.

2021-05-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/home/coll30, testsuite/home/coll31,
  testsuite/modulefiles.3/.modulerc, testsuite/modulefiles.3/variant/1.0,
  testsuite/modulefiles.3/variant/6.0,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/999-cleanup.exp: ts: restore coll when different
  variant loaded

2021-05-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Identify already reported conflict with evalid

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.20-locate/110-hide.exp,
  testsuite/modules.20-locate/111-hide-hard.exp,
  testsuite/modules.20-locate/115-forbid.exp,
  testsuite/modules.50-cmds/473-variant-prereq.exp,
  testsuite/modules.50-cmds/474-variant-conflict.exp,
  .../modules.70-maint/270-adv_version_spec.exp,
  .../modules.70-maint/271-adv_version_spec-in.exp,
  .../272-adv_version_spec-range.exp: ts: adapt mod designation when express
  as spec

2021-05-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Add formatted mod designation from spec on err/warn msgs
  Adapt error and warning messages relative to requirement or conflict issue
  to report the module specification with the new standard module designation.

  * testsuite/modules.50-cmds/470-variant.exp,
  testsuite/modules.50-cmds/471-variant-unload.exp,
  testsuite/modules.50-cmds/473-variant-prereq.exp,
  testsuite/modules.50-cmds/474-variant-conflict.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.70-maint/231-verbose2.exp,
  testsuite/modules.70-maint/371-variant-msg.exp: ts: adapt mod designation
  string

  * modulecmd.tcl.in: If evalid not found use mod arg as spec in
  getModuleDesignation  If the specified evaluation id passed to
  getModuleDesignation procedure is not found, use the mod argument as a
  module specification to compute the module designation, instead of using it
  as the resulting designation.  Designation of switched-on module that fails
  to load is this way formatted with the regular module designation syntax.

  * modulecmd.tcl.in: Remove variant and separator with SGR in err/warn/info
  msgs  Graphically enhance variants and separators from module designation in
  every error, warning or informational messages. Diminish variant graphically
  impact with the se SGR code unless if it should be hightlighted (when used
  in message block title).

  * modulecmd.tcl.in: Improve mod designation with variant readability  Remove
  space between module name version and variant list and between variants in
  that list. Use the separator sgr color (se) to reduce the visual impact of
  {, } and : separator characters.  Message reports now use same module
  designation syntax than 'module list' report.

2021-05-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/471-variant-unload.exp,
  testsuite/modules.50-cmds/473-variant-prereq.exp,
  testsuite/modules.50-cmds/474-variant-conflict.exp,
  .../modules.70-maint/270-adv_version_spec.exp,
  .../modules.70-maint/271-adv_version_spec-in.exp,
  .../272-adv_version_spec-range.exp,
  testsuite/modules.70-maint/371-variant-msg.exp: ts: adapt prereq/conflict
  err/warn msgs

  * modulecmd.tcl.in: Add complete mod designation from spec on err/warn msgs
  Use getModuleDesignation procedure over module specification to report the
  full module name version and variants.

  * modulecmd.tcl.in: Fetch info from mod spec in getModuleDesignation  Add
  the ability to fetch module information from module specification on
  getModuleDesignation procedure. If from argument equals 'spec', mod argument
  is taken as a module specification and module name version and variants are
  retrieved from the parsed properties of this module specification.

  * modulecmd.tcl.in: Add complete loaded mod designation on err/warn mesgs
  Use getModuleDesignation procedure over loaded modules to report the full
  module name version and variants.

  * modulecmd.tcl.in: Fetch info from loaded context in getModuleDesignation
  Add the ability to fetch module information from loaded context on
  getModuleDesignation procedure. If from argument equals 'loaded', mod
  argument is taken as the module name and version designation, then specified
  variants are fetched from loaded context.

  * modulecmd.tcl.in: Process module designation in getModuleDesignation
  Rather recording generated designation in registerModuleDesignation
  procedure, only record module name and version and specified variant list in
  this procedure.  Then process the module designation from the
  getModuleDesignation procedure.

  * modulecmd.tcl.in: Adapt getModuleDesignation arguments  Reorder and rename
  arguments of the getModuleDesignation procedure to prepare it being called
  from multiple contexts.

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/130-auto_handling.exp,
  testsuite/modules.00-init/140-color.exp,
  testsuite/modules.20-locate/100-wspace.exp,
  testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/121-prereq-module.exp,
  testsuite/modules.50-cmds/122-prereq-fullpath.exp,
  testsuite/modules.50-cmds/130-conflict-full.exp,
  .../modules.50-cmds/132-conflict-fullpath.exp,
  testsuite/modules.50-cmds/370-deps-bis.exp,
  testsuite/modules.50-cmds/370-deps-fullpath.exp,
  testsuite/modules.50-cmds/370-deps.exp,
  testsuite/modules.50-cmds/372-deps3.exp,
  testsuite/modules.50-cmds/373-deps4.exp,
  testsuite/modules.50-cmds/374-deps5.exp,
  testsuite/modules.50-cmds/375-deps6.exp,
  testsuite/modules.50-cmds/375-order.exp,
  testsuite/modules.50-cmds/376-deps7.exp,
  testsuite/modules.50-cmds/376-switch.exp,
  testsuite/modules.50-cmds/377-cyclic.exp,
  testsuite/modules.50-cmds/377-deps8.exp,
  testsuite/modules.50-cmds/377-opposite.exp,
  testsuite/modules.50-cmds/378-sametarget.exp,
  testsuite/modules.50-cmds/379-module-unload.exp,
  testsuite/modules.50-cmds/380-altname.exp,
  testsuite/modules.50-cmds/450-hidden-loaded.exp,
  testsuite/modules.50-cmds/473-variant-prereq.exp,
  testsuite/modules.50-cmds/474-variant-conflict.exp,
  testsuite/modules.70-maint/240-icase.exp,
  .../modules.70-maint/260-extended_default.exp,
  .../modules.70-maint/270-adv_version_spec.exp,
  .../modules.70-maint/271-adv_version_spec-in.exp,
  .../272-adv_version_spec-range.exp, .../273-adv_version_spec-space.exp,
  .../274-adv_version_spec-autosym.exp: ts: adapt conflict/prereq default err
  mesg

  * modulecmd.tcl.in: Simplify conflict/prereq default error message  Do not
  recall current module designation on the default conflict and prereq error
  message, as they are produced under the Loading/Unload message block which
  already report current module designation.

2021-04-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/470-variant.exp: ts: forced load when another
  variant is loaded in 50/470

  * testsuite/modulefiles.3/variant/7.0, testsuite/modulefiles.3/vrreq1/1.0,
  testsuite/modulefiles.3/vrreq1/2.0, testsuite/modulefiles.3/vrreq2/1.0,
  testsuite/modulefiles.3/vrreq2/2.0, testsuite/modulefiles.3/vrreq3/1.0,
  testsuite/modulefiles.3/vrreq3/2.0,
  testsuite/modules.50-cmds/473-variant-prereq.exp: ts: variant special
  requirement spec tests in 50/473

2021-04-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/variant/7.0, testsuite/modulefiles.3/variant/7.1,
  testsuite/modulefiles.3/vrreq1/1.0, testsuite/modulefiles.3/vrreq1/2.0,
  testsuite/modulefiles.3/vrreq2/1.0, testsuite/modulefiles.3/vrreq2/2.0,
  testsuite/modulefiles.3/vrreq3/1.0, testsuite/modulefiles.3/vrreq3/2.0,
  testsuite/modules.50-cmds/473-variant-prereq.exp,
  testsuite/modules.50-cmds/474-variant-conflict.exp: ts: add auto_handling
  switch tests in 50/{473,474}

2021-04-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/variant/7.0,
  testsuite/modulefiles.3/vrreq1/.modulerc,
  testsuite/modulefiles.3/vrreq1/1.0, testsuite/modulefiles.3/vrreq1/2.0,
  testsuite/modulefiles.3/vrreq2/1.0, testsuite/modulefiles.3/vrreq2/2.0,
  testsuite/modulefiles.3/vrreq3/1.0, testsuite/modulefiles.3/vrreq3/2.0,
  testsuite/modulefiles.3/vrreq4/1.0, testsuite/modulefiles.3/vrreq4/2.0,
  testsuite/modules.50-cmds/474-variant-conflict.exp: ts: test variant with
  conflict auto_handling mechanism

2021-04-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/.modulerc, testsuite/modulefiles.3/variant/7.0,
  testsuite/modulefiles.3/vrreq1/.modulerc,
  testsuite/modulefiles.3/vrreq1/1.0, testsuite/modulefiles.3/vrreq1/2.0,
  testsuite/modulefiles.3/vrreq1/w s, testsuite/modulefiles.3/vrreq2/1.0,
  testsuite/modulefiles.3/vrreq2/2.0, testsuite/modulefiles.3/vrreq2/w s,
  testsuite/modulefiles.3/vrreq3/1.0, testsuite/modulefiles.3/vrreq3/2.0,
  testsuite/modulefiles.3/vrreq4/1.0, testsuite/modulefiles.3/vrreq4/2.0,
  testsuite/modules.50-cmds/473-variant-prereq.exp: ts: test variant with
  prereq auto_handling mechanism

  * modulecmd.tcl.in: Pass down variant when recursively calling
  getPathToModule

  * modulecmd.tcl.in: Pass modnamevr to getUnmetDependentLoadedModuleList
  Pass the module name and variants set as argument to the
  getUnmetDependentLoadedModuleList procedure to make it use the variants
  specified to determine the dependent modules. This information has to be
  passed to the modEq procedure as no modulefile evaluation occurred yet when
  getUnmetDependentLoadedModuleList is called, so variants have to be
  transmitted as argument to modEq.

2021-04-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Preserve variants set when reloading DepRe mods

2021-04-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Update mod name and variants using already loaded mod

  * modulecmd.tcl.in: Transmit mod name and variants for switch report sum

  * testsuite/modules.20-locate/100-wspace.exp,
  .../273-adv_version_spec-space.exp: ts: eval mods are reported enclosed if
  contains space

  * modulecmd.tcl.in: Use mod name with variants to define a unique msgrecid

  * modulecmd.tcl.in: Record msgrecid in mod evaluation struct  Use the
  message recording id (msgrecid) to register the module evaluation instead of
  the module name. Call for the module designation based on this recording id
  when reporting evaluated modules. Update the registerModuleEval and
  registerModuleEvalHidden procedures to use msgrecid rather module name. In
  case of evaluation failure, pass the module name with its specified variant
  to record for the isModuleEvalFailed query.  When evaluated modules are
  reported, they use the full denomination syntax with specified variants and
  space enclosed in single quotes.

  * modulecmd.tcl.in: Record both regular and sgr version of mod designation
  When recording evaluated module designation, record it in both regular and
  SGR versions, and add the ability to fetch one or the other.

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/470-variant.exp,
  testsuite/modules.70-maint/371-variant-msg.exp: ts: adapt error when another
  variant of mod is loaded

2021-04-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Error if module is already loaded with diff. variant set
  Break process of cmdModuleLoad if the same module is detected as already
  loaded but with a different variant set than the one specified on this
  module load.

2021-04-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Record modulenamevr in evaluation attempt struct  When
  recording module evaluation attempt use module name with variant as
  identifier. Update all calls to isModuleEvaluated and
  registerModuleEvalAttempt procedures.

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.20-locate/100-wspace.exp,
  .../273-adv_version_spec-space.exp: ts: correctly enclose mod name on eval
  msg block

  * testsuite/modules.50-cmds/471-variant-unload.exp: ts: fix specifiedname
  test in 50/471

  * modulecmd.tcl.in: Add modnamevr arg to execute-modulefile procedure  Add
  the modnamevr argument to the execute-modulefile procedure and save this
  information into the modulenamevr state to make it available during
  evaluation context.  Use that new modulenamevr state to pass variant list to
  the variant procedure when module is unloading. This way the specifiedname
  on unload mode is the specification set by user on command line or in
  modulefile code, like on any other evaluation modes.

  * modulecmd.tcl.in: Fetch modnamevr from getPathToModule calls

2021-04-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Return modnamevr on getPathToModule  Update the
  getPathToModule procedure to return an additional string as result which
  corresponds to the module name plus specified variants. When no variant are
  specified, modnamevr equals to modname.

  * modulecmd.tcl.in: Compare with variant set in isModuleEvaluated

  * modulecmd.tcl.in: Add modvrlist option to modEq proc  Add the modvrlist
  option to the modEq procedure in order to specify the list of variant of mod
  to compare pattern to.  Useful when comparing against a mod that is not
  loaded or loading.

  * modulecmd.tcl.in: Add g_loadedModuleVariant to push/pop/restore settings

2021-04-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/471-variant-unload.exp: ts: update unload tests
  in 50/471 now variants are compared

  * modulecmd.tcl.in: Add variant comparison ability to modEq  Adapt the modEq
  procedures to compare the variant specified for pattern to the variant set
  for designated loaded or loading module. Only perform such comparison if
  module name and version comparison is successful.  Variant comparison relies
  on the modVariantCmp procedure. Every variant set for pattern should be
  found defined and with an identical value on loaded/loading module.
  Otherwise there is no match.

2021-04-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/variants.rst: doc: desc. variant cmp in design doc

2021-04-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Remove unused icase var in isModuleEvaluated

  * modulecmd.tcl.in: Update isModuleEvaluated to rely on new modEq  Update
  the isModuleEvaluated procedure to indicate to also test alternative names
  of evaluated modules through new modEq procedure.

2021-04-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/module-selection-contexts.rst: doc: remove ref to
  does*ModuleMatchesName ref in doc

  * modulecmd.tcl.in: Make conflict report detection rely on new modEq  modEq
  procedure now also test alternative names of loaded modules if ismodlo
  argument is set to 2. Update conflict report detection code to take into
  account this new ability of modEq when checking against loaded modules.

  * modulecmd.tcl.in: Remove useless doesLoadingModuleMatchesName proc

  * modulecmd.tcl.in: Remove useless doesModuleMatchesName proc  Since modEq
  procedure treats alternative names of loaded modules, the
  doesModuleMatchesName procedure is now useless and replaced by a direct call
  to modEq with its ismodlo option set to 1.

  * modulecmd.tcl.in: Retrieve variant list specified in pattern on modEq
  procs

  * modulecmd.tcl.in: No variant comparison on modEqStatic proc  As specified
  variant is currently only useful for module specification comparison with
  loaded or loading module, the modEqStatic procedure does not need to handle
  the variant specified for `modspec` as this procedure is only called on
  non-loaded modules contexts

  * modulecmd.tcl.in: Treat alt names of load{ed,ing} mods on modEq  Add the
  `ismodlo` argument to the modEq procedure to determine is passed `mod` is a
  non-loaded module (0), a loaded module (1) or a loading module (2). If `mod`
  is loaded or loading comparison against `pattern` is also performed over the
  alternative names of mod.  This with one call to modEq, all module name and
  its alternatives are tested against pattern: pattern properties are fetched
  and comparison is prepared only once instead of calling modEq procedure over
  each alternative name of module.

2021-04-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/_static/terminal_output.css, doc/source/conf.py: doc: define
  sphinx roles/css to colorize variant

2021-04-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/470-variant.exp: ts: adapt result if
  implicit_default is disabled on 50/470

2021-04-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/470-variant.exp: ts: fix stack trace err msgs
  for Tcl<8.6 in 50/470

2021-04-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp: ts: clear test-related env var
  prior tests start

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp: ts: clear MODULES_LMVARIANT prior
  test start

2021-03-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/470-variant.exp,
  testsuite/modules.50-cmds/471-variant-unload.exp,
  testsuite/modules.70-maint/372-variant-display.exp,
  testsuite/modules.70-maint/373-variant-help.exp,
  testsuite/modules.70-maint/374-variant-test.exp,
  testsuite/modules.70-maint/375-variant-whatis.exp: ts: test @loaded spec
  with variant

  * modulecmd.tcl.in: Add defined variant when translating @loaded  When
  translating the @loaded version specifier, also retrieve the variant
  specified for corresponding loaded module.

2021-03-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/variant/6.0,
  testsuite/modules.50-cmds/472-getvariant.exp,
  testsuite/modules.70-maint/375-variant-whatis.exp: ts: test
  getvariant/variant on whatis eval mode in 70/375

  * modulecmd.tcl.in: Update variant procs to pass Tcl itrp as first arg
  Update the variant, variant-wh and getvariant procedures to pass them the
  reference to the current Tcl modulefile interpreter, instead of guessing
  this reference within the procedures.

  * modulecmd.tcl.in: Set an optimized version of variant cmd for whatis eval
  Add an optimized version of the variant modulefile command for the whatis
  evaluation mode, not to specifically raise specification error for this mode
  and barely set the variant to an empty string value in the modulefile
  context. This way, operations on variant are lighter on this global
  evaluation mode.  Variant definition errors still produce error which stops
  modulefile evaluation but they are not reported unless if verbosity is set
  to debug mode like any other errors during a whatis global evaluation.

  * modulecmd.tcl.in: Parse variant cmd args in parseVariantCommandArgs proc
  Add the parseVariantCommandArgs procedure to specifically parse arguments
  set on variant modulefile command.

2021-03-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/variant/5.0,
  testsuite/modules.50-cmds/472-getvariant.exp: ts: test getvariant on
  help/test eval mode in 50/472

  * testsuite/modulefiles.3/variant/4.0,
  testsuite/modules.70-maint/374-variant-test.exp: ts: test variant on test
  evalulation mode in 70/374

  * testsuite/modulefiles.3/variant/4.0,
  testsuite/modules.70-maint/373-variant-help.exp: ts: test variant on help
  evalulation mode in 70/373

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.70-maint/372-variant-display.exp: ts: test variant on
  display evalulation mode in 70/372

  * testsuite/modulefiles.3/variant/5.0,
  testsuite/modules.50-cmds/472-getvariant.exp: ts: test getvariant in 50/472

  * doc/source/design/variants.rst: doc: desc. getvariant in variant design
  doc

2021-03-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/vim/syntax/modulefile.vim: vim: add variant-related modulefile
  cmds & var

  * modulecmd.tcl.in: Add 'getvariant' modulefile command  Introduce the
  getvariant modulefile command to query the current value of a given variant
  name. If variant is not defined, an empty string is return or the specific
  value passed as argument. During a display evaluation, getvariant output the
  variant name enclosed in curly braces.

  * modulecmd.tcl.in: Use msgrecid to identify registerd mod designation
  Update the registerModuleDesignation and getModuleDesignation procedures to
  identify the module designation with the message record id, which is also
  the evaluation id. Identification is this way improve as the same module
  name and version could be evaluated multiple times with different variant
  set during the same modulecmd.tcl run.

2021-03-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/variant/4.0,
  testsuite/modules.50-cmds/470-variant.exp,
  testsuite/modules.50-cmds/471-variant-unload.exp: ts: test variant
  evaluation on unload mode in 50/471

2021-03-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Record variant for persistency unless if unloading

  * modulecmd.tcl.in: Return updated module specification on getPathToModule
  When getPathToModule is called to find a module specification from the
  loaded module list, return an updated version of this module specification
  fully matching the designation of found loaded module (name, version and
  variants).  When unloading module, set this updated designation as the
  module specified to unload. Which means querying the [module-info specified]
  during an unload evaluation will return the loaded module specification not
  the module specification set by user.

  * modulecmd.tcl.in: Enclose modname when setting it in switch upper ctx

2021-03-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/variant/1.0, testsuite/modulefiles.3/variant/w s,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/040-restore.exp: ts: update collections tests with
  --default variant opt

  * testsuite/modulefiles.3/variant/1.0,
  testsuite/modules.50-cmds/470-variant.exp: ts: add --default tests in 50/470

  * modulecmd.tcl.in: Add --default option to variant modfile cmd

  * testsuite/modulefiles.3/variant/1.0, testsuite/modulefiles.3/variant/2.0,
  testsuite/modules.50-cmds/470-variant.exp: ts: test variant defined without
  allowed value list in 50/470

2021-03-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Raise error when no allowed val list defined for variant

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/470-variant.exp,
  testsuite/modules.61-coll/040-restore.exp: ts: add err_unkvar helper proc

  * testsuite/modulefiles.3/variant/1.0,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/470-variant.exp,
  testsuite/modules.61-coll/040-restore.exp: ts: update variant tests for
  unspecified variant global err

  * modulecmd.tcl.in: Raise global error if no val specified for variant

2021-03-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/variants.rst: doc: remove --multivalued opt from variant
  cmd  Ability to specify multiple values for a variant does not seem to be
  needed in the first version of the mechanism.

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/470-variant.exp: ts: invalid value for variant is
  global error

2021-03-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Invalid variant value specified is a global error  Raise
  a global error rather a modulefile error when value specified for variant is
  not part of the allowed variant list.

2021-03-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/231-verbose2.exp: ts: test not loaded mod name
  vers spec returned by getPathToModule

  * modulecmd.tcl.in: Return on getPathToModule mod name vers spec if not
  loaded  When looking at a loaded module with getPathToModule procedure, if
  this module designation is not found loaded, return as module name the
  module name and version specification (module specification without the
  variant eventually specified)

  * modulecmd.tcl.in: Record module name and version spec when parsing
  specification  Add to the g_moduleVersSpec structure the module name and
  version specified on the command-line or in modulefile (which is equivalent
  to the module specification minus the variant specified in this
  specification).  Add the getModuleNameAndVersFromVersSpec procedure to
  retrieve this module name and version specification from full module
  specification string.

  * modulecmd.tcl.in: Return empty modname when mod is empty on
  getPathToModule

  * modulecmd.tcl.in: Update mod desis. for switch ctx when unload is skipped
  When the unload phase of a switch action is skipped, because for instance
  module is not loaded, update the switched-off module designation for the
  switch context prior ending the unload phase.

2021-03-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/variant/1.0, testsuite/modulefiles.3/variant/w s,
  testsuite/modules.70-maint/371-variant-msg.exp: ts: add specific report msg
  tests for variant in 70/371

  * testsuite/modules.50-cmds/470-variant.exp,
  testsuite/modules.61-coll/040-restore.exp: ts: update mod designation in
  variant tests

2021-03-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/020-module.exp,
  testsuite/modules.20-locate/100-wspace.exp,
  .../273-adv_version_spec-space.exp: ts: mod desig. with space is now
  enclosed in ''

  * doc/source/design/variants.rst: doc: desc variant report on info msgs in
  design doc

  * modulecmd.tcl.in: Record module designation prior its evaluation  Record
  module designation (module name and version + variants specified on
  load/unload sub-command arguments) prior its load or unload evaluation to
  report an accurate designation on top of the error message obtained.  Update
  getVariantList procedure to get the variant specified list for given module
  from module specification instead of getting it from the loaded environment.

2021-03-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Record/use module designation including variant spec
  Add the registerModuleDesignation and getModuleDesignation procedures to
  report specified variants in addition to module name and version when
  reporting load, unload or switch of modules.  Module name or variant
  specifications are enclosed between single quotes if they contain a space
  character.  Module name and variant specifications are highlighted if
  configured when registered to produce a graphically enhanced report message.
  Variant specification is enclosed between {} to distinguish it from module
  name and version.

2021-03-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Work with mod+variant designations on restore sub-cmd
  Adapt cmdModuleRestore to work with the full module name, version and
  variant specification to compare currently loaded environment against
  environment specified in saved collection.

  * testsuite/modules.70-maint/290-json.exp,
  testsuite/modules.70-maint/320-tags.exp,
  testsuite/modules.70-maint/340-output-key.exp,
  testsuite/modules.70-maint/361-list_output.exp: ts: adapt list sub-cmd json
  tests for variant

  * testsuite/modules.61-coll/040-restore.exp: ts: test variant on restore
  sub-cmd in 61/040

2021-03-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/home/coll27, testsuite/home/coll28, testsuite/home/coll29,
  testsuite/modulefiles.3/variant/1.0,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/060-saveshow.exp,
  testsuite/modules.61-coll/999-cleanup.exp: ts: test variant on saveshow
  sub-cmd in 61/060

  * testsuite/home/coll26, testsuite/modulefiles.3/variant/1.0,
  testsuite/modulefiles.3/variant/3.0, testsuite/modulefiles.3/variant/w s,
  testsuite/modules.50-cmds/470-variant.exp,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/999-cleanup.exp: ts: test variant on save sub-cmd
  in 61/030

  * testsuite/config/base-config.exp,
  testsuite/modules.00-init/005-init_ts.exp: ts: add '*' to the list of
  escaped chars on regexp tests

2021-03-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/variants.rst: doc: desc. recording collection in variant
  design

2021-03-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Record variant specification in saved collection  When
  modules have been loaded with variants specified, record the variants
  specification along module name and version when saving the loaded
  environment as a collection.  In case the collection_pin_version
  configuration option is disabled, only record in collection the variants
  whose value is not the default one. This way the same behavior is obtained
  not to pin version or variant if their default value is the one saved.

2021-03-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/470-variant.exp,
  testsuite/modules.70-maint/370-variant.exp: ts: adapt and add tests for
  is-default variant val persistency

  * modulecmd.tcl.in: Record if variant value is default in persistency var

  * doc/source/design/variants.rst: doc: desc is-default-set persistency in
  variant design

  * testsuite/modules.70-maint/220-config.exp,
  testsuite/modules.70-maint/361-list_output.exp: ts: adapt tests for variant
  val in list_*output cfgs in 70/{220,361}

  * modulecmd.tcl.in: Add default return val if output elt not known on
  isEltInReport

  * testsuite/modules.70-maint/370-variant.exp: ts: test variant report on
  list sub-cmd in 70/370

2021-03-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/output-configuration.rst,
  doc/source/design/variants.rst: doc: desc. variant reporting in design docs

  * modulecmd.tcl.in: Describe variant in list sub-cmd report key

  * modulecmd.tcl.in: Sort variants and remove duplicate defs when reporting

  * modulecmd.tcl.in: Output variants as object in json mode  Adapt
  formatListEltToJsonDisplay to call for formatObjectValToJson to output
  elements passed as argument as a JSON object. Also add an argument for each
  element to control whether it should be reported or not, in order not to
  output the variants field on avail output.

2021-03-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Report variant on module list  Report the variant set
  for loaded modules on module list output if variant are defined in output
  list configuration.  Adapt formatListEltToDisplay and
  formatListEltToJsonDisplay procedures to render the variant set for loaded
  modules. Update displayKey procedure to describe how variant are reported.

2021-03-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Render colon sep only if multiple elt to report

2021-03-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.rst, configure, doc/source/module.rst: install/doc: add `va` color
  key  Add the `va` color key in default light and dark color palettes to
  graphically enhance the report of variant value.

  * INSTALL.rst, configure, doc/source/module.rst, modulecmd.tcl.in:
  install/doc: add variant element on list_*output configs  Add the element
  `variant` in the allow list of the list_output and list_terse_output
  configuration options. Set this new element in the default value list of the
  list_output configuration option.

2021-03-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/470-variant.exp: ts: adapt variant tests for
  persistency in 50/470

  * modulecmd.tcl.in: Set specified variant values persistent  Record in user
  loaded environment the values specified for the variants defined in the
  evaluated modulefile. Use MODULES_LMVARIANT environment variable to record
  such information.

  * testsuite/modulefiles/spread/3.0, testsuite/modulefiles/spread/7.0,
  testsuite/modulefiles/spreadrc/dir3/.modulerc,
  testsuite/modulefiles/spreadrc/dir3/1.0,
  testsuite/modulefiles/spreadrc/dir4/.modulerc,
  testsuite/modulefiles/spreadrc/dir7/.modulerc,
  testsuite/modulefiles/spreadrc/dir7/1.0,
  testsuite/modulefiles/spreadrc/dir8/.modulerc: ts: adapt existing interp
  tests now variant are checked

2021-03-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/470-variant.exp: ts: test mixing variant and
  version spec in 50/470

2021-03-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/470-variant.exp: ts: test specification of
  unknown variant in 50/470

  * modulecmd.tcl.in: Raise error is specified variant is unknown

2021-03-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/var=val, testsuite/modulefiles.3/variant/1.0,
  testsuite/modulefiles.3/variant/2.0, testsuite/modulefiles.3/variant/3.0,
  testsuite/modules.50-cmds/470-variant.exp: ts: add initial variant tests in
  50/470

2021-03-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Add variant modulefile command  Add initial version of
  the variant modulefile command taking as argument a variant name then the
  list of allowed values.  Variant value specified is retrieved with
  getVariantListFromVersSpec procedure. Then variant name is instanciated in
  ModuleVariant array with specified value in modulefile interpretation
  context.

2021-03-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Parse valued-variant specified  Update
  parseModuleSpecification procedure to parse valued-variant (name=value) set
  in module specification.

  * modulecmd.tcl.in: Add variantlist field to module name version spec struct
  Update setModuleVersSpec procedure to add as 7th entry in struct list the
  list of variant specified for modarg.  Introduce the
  getVariantListFromVersSpec procedure to retrieve just this variant list from
  module name version specification.

2021-03-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/diff_v3_v4.rst: doc: desc. variant changes in diff doc

2021-06-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/390-function.exp,
  testsuite/modules.50-cmds/400-source-sh.exp: ts: update set-function export
  mech. in 50/{390,400}

  * NEWS.rst, modulecmd.tcl.in: Export defined shell function only on Bash
  When defining a shell function with the set-function modulefile command,
  only export this function when using the Bash shell (using the export -f
  shell command) to make it available in sub-shell contexts. Shell function
  export is not supported on other kind of sh shell (sh, ksh and zsh).  Fixes
  #401.

  * .cirrus.yml: cirrus: force libarchive update on el8.3

2021-06-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/diff_v3_v4.rst: doc: desc. setenv diff between Modules 3.2 and
  4+  Describe the difference between Modules 3.2 and 4+ when it comes to the
  arguments passed to the setenv modulefile command.  Fixes #402.

2021-05-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, .../bar-2.1/bar-setup.csh, .../bar-2.1/bar-setup.sh,
  .../source-script-in-modulefile/bar-2.1/bin/barbin, .../modulefiles/bar/2.1,
  .../modulefiles/foo/1.2, .../cookbook/source-script-in-modulefile.rst: doc:
  desc setup with shell-specific scripts in cookbook  Update the *Source
  script in modulefile* cookbook recipe to add it a *Usage with shell-specific
  scripts* section that demonstrate how to use modulefiles with `source-sh`
  commands when software provide a specific initialization script for each
  shell it supports.  Take this opportunity to improve the readability of this
  recipe by coloring/highlighting shell session examples.  Fixes #399.

2021-05-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/siteconfig.tcl-1: ts: fix modVersCmp redefinition test
  in 00/120

2021-05-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .github/workflows/linux_tests.yaml: gh: exit run on error if executed
  through script

2021-05-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile, NEWS.rst, configure: install: allow building from submodule
  repository  Fix installation scripts to allow building Modules when its
  repository is set as a git submodule.  Closes #398.

  * MIGRATING.rst, NEWS.rst: doc: desc range in list on NEWS/MIGRATING

  * doc/source/module.rst: doc: desc. when new concepts were added in
  module(1)

  * doc/source/module.rst, doc/source/modulefile.rst: doc: desc use of version
  range in version list in manpages

  * doc/source/design/advanced-module-version-specifiers.rst: doc: update
  design doc now vers range allowed in list

  * testsuite/modulefiles.3/advvers2/.modulerc,
  testsuite/modulefiles.3/advvers2/1.0, testsuite/modulefiles.3/advvers2/1.1,
  testsuite/modulefiles.3/advvers2/2.0, testsuite/modulefiles.3/advvers2/2.10,
  testsuite/modulefiles.3/advvers2/2.2, testsuite/modulefiles.3/advvers2/2.8,
  testsuite/modulefiles.3/advvers2/3.7, testsuite/modulefiles.3/advvers2/4.2,
  testsuite/modulefiles.3/advvers2/foo, .../276-adv_version_spec-rangein.exp:
  ts: test use of version ranges in version lists

2021-05-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Allow version range in version list  Improve the
  advanced version specifier to support use of version ranges within version
  list. The syntax `@:2,4:5,7:` enables to exclude versions.  Closes #397.

2021-03-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Split version specifier parsing in dedicated proc  Add
  parseModuleVersionSpecifier procedure, called from parseModuleSpecification
  to analyze the version specifier part in full module specification.

  * modulecmd.tcl.in, testsuite/example/siteconfig.tcl-1: Rename
  parseModuleVersionSpecifier into parseModuleSpecification  Rename the
  parseModuleVersionSpecifier procedure into parseModuleSpecification, as it
  will now on take in charge more than just the version specifier parsing
  (specified variants will be parsed too).

2021-02-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/variants.rst: doc: add *Variants* design document

2021-05-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/config/base-config.exp: ts: never reset exit_status var between
  tests

  * doc/example/log-module-commands/siteconfig.tcl,
  doc/example/top-priority-values/siteconfig.tcl: doc: fix modulecmd state
  check in recipe code  Code to handle the internal states of modulecmd have
  been reworked on Modules v4.6. As a consequence several siteconfig.tcl
  extension scripts described on documentation recipes have to be adapted.
  Closes #396

2021-04-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst, NEWS.rst: doc: desc. edit/MODULES_EDITOR in NEWS/MIGRATING

  * testsuite/modules.70-maint/380-edit.exp: ts: add 'edit' sub-command
  specific tests in 70/380

2021-04-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles/modbad/edit, testsuite/modules.00-init/071-args.exp,
  testsuite/modules.50-cmds/151-module-onlytop.exp,
  testsuite/modules.70-maint/220-config.exp,
  testsuite/modules.90-avail/070-full.exp: ts: update existing tests to check
  'edit'

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp: ts: clean any editor config

  * doc/source/module.rst: doc: desc. edit/MODULES_EDITOR in module(1)

  * INSTALL.rst: doc: desc --with-editor in INSTALL

  * modulecmd.tcl.in: Throw any error from editor as external error

  * Makefile, Makefile.inc.in, configure, modulecmd.tcl.in, site.exp.in:
  install: add --with-editor configure option  Introduce the --with-editor
  configure option to choose at installation time the default editor command
  to use to interactively edit modulefiles. Default editor is 'vi'.

  * doc/source/diff_v3_v4.rst: doc: desc. edit/editor in diff doc

  * init/Makefile, init/fish_completion, init/zsh-functions/_module.in: init:
  add editor config to completion script

2021-04-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Add the 'editor' configuration option  Add the editor
  module configuration option to define the editor command to use to
  interactively edit modulefiles. When specifically set, the MODULES_EDITOR
  environment variable is defined. If not set, environment variable VISUAL or
  EDITOR can be used to define the value of this configuration (in this
  order).  Follow the same configuration scheme than Git with GIT_EDITOR,
  VISUAL and EDITOR environment variables.

  * modulecmd.tcl.in: Add 'edit' sub-command  Introduce the edit sub-command
  to interactively edit existing modulefiles.

  * testsuite/modules.00-init/005-init_ts.exp: ts: attempt to set term size if
  failing to detect it

2021-04-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, contrib/rpm/environment-modules.spec.in, doc/source/conf.py,
  version.inc.in: Release of version 4.7.1

2021-04-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .../sticky-modules/modulefiles/compiler/.modulerc,
  .../sticky-modules/modulefiles/compiler/compA/1.0,
  .../sticky-modules/modulefiles/compiler/compA/1.2,
  .../sticky-modules/modulefiles/compiler/compB/1.3,
  .../sticky-modules/modulefiles/compiler/compB/2.1,
  .../sticky-modules/modulefiles/core/.modulerc,
  doc/example/sticky-modules/modulefiles/core/1.0,
  doc/example/sticky-modules/modulefiles/core/2.0, doc/source/conf.py,
  doc/source/cookbook/sticky-modules.rst: doc: add *sticky modules* cookbook
  recipe

  * doc/source/conf.py: doc: update default etcdir exposed

  * doc/source/cookbook/hide-and-forbid-modules.rst: doc: fix
  hide-and-forbid-modules document ref

  * INSTALL.rst: doc: fix --with-tag-abbrev default value in INSTALL  Correct
  the default value of the --with-tag-abbrev installation option in INSTALL
  document.

  * INSTALL.rst, doc/source/module.rst: doc: desc. changes on
  MODULES_COLORS/--with-*-background-colors  Add description of changes that
  occurred on version 4.6 and 4.7 for the --with-dark-background-colors and
  --with-light-background-colors installation options and for the
  MODULES_COLORS environment variable.

  * INSTALL.rst: doc: fix desc. --with-{dark,light}-background-colors in
  INSTALL  Update the description and default value of the
  --with-dark-background-colors and --with-light-background-colors
  installation options in INSTALL document.

2021-04-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/vim/syntax/modulefile.vim: vim: add modfile vars
  Module{Tool,ToolVersion,sCurrentModulefile}

2021-04-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/005-init_ts.exp,
  testsuite/install.00-init/040-subshell.exp,
  testsuite/install.00-init/050-crossshell.exp: ts: exit code on fish>=3.2
  saturates at 255  Update fish install tests following change introduced on
  fish 3.2, where the exit code now saturates to 255 for all builtins commands
  rather overflowing. (see https://github.com/fish-shell/fish-shell/pull/7702)

  * modulecmd.tcl.in: Fix sh-to-mod to support fish 3.2  Update the sh-to-mod
  mechanism to support version 3.2 of the fish shell. This new version
  introduces the `.` builtin command that should be regexp-escaped when
  determining the shell functions or aliases defined by the script analyzed by
  sh-to-mod.  An extra space character is also added by fish 3.2 at the end of
  shell alias or function definition. Update parsing of these elements to
  ignore such extra space.

2021-03-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .github/ISSUE_TEMPLATE/question.md: github: add question issue template

2021-03-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * configure: install: re-license configure script from GPLv3+ to GPLv2+
  Change license of the configure installation script from GPLv3+ to GPLv2+.
  Align this way all files from the Modules project under the GPLv2+ license.
  Consent has been obtained from the copyright holders (I, @xdch47 and
  @jraphanel) to perform such move. Consent from Jacques Raphanel and Felix
  Neumärker were collected by email.  Revert contribution from R.K. Owen
  (cc4d3194), from whom consent is not yet obtained. Contribution will be
  restored as soon as consent will be obrained.  Related to #389

  * script/envml, script/envml.cmd: script: re-license envml scripts from
  GPLv3+ to GPLv2+  Change license of envml and envml.cmd scripts from GPLv3+
  to GPLv2+.  Align this way all files from the Modules project under the
  GPLv2+ license.  Consent has been obtained from the copyright holders (I and
  @jraphanel) to perform such move. Consent from Jacques Raphanel was
  collected by email.  Related to #389

2021-02-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst, doc/source/modulefile.rst: doc: fixes few typos in
  module.1 and modulefile.4

  * Makefile, README.md: doc: add link to @EnvModules Twitter page in README

  * lib/envmodules.c, lib/envmodules.h: lib: re-license envmodules lib from
  GPLv3+ to GPLv2+  Change license of the Modules Tcl extension library from
  GPLv3+ to GPLv2+.  Align this way all files from the Modules project under
  the GPLv2+ license.  Consent has been obtained from copyright holder to
  perform such move (I hold the full copyright for this library).  Related to
  #389

  * lib/testutil-0getgroups.c, lib/testutil-closedir.c,
  lib/testutil-dupgetgroups.c, lib/testutil-getgrgid.c,
  lib/testutil-getgroups.c, lib/testutil-getpwuid.c, lib/testutil-mktime.c,
  lib/testutil-time.c: ts: re-license test libraries from GPLv3+ to GPLv2+
  Change license of all testutil-* libraries, used to test Modules Tcl
  extension library, from GPLv3+ to GPLv2+.  Align this way all files from the
  Modules project under the GPLv2+ license.  Consent has been obtained from
  copyright holder to perform such move (I hold the full copyright for these
  librairies).  Related to #389

  * testsuite/bin/install_test_cmake, testsuite/bin/install_test_csh,
  testsuite/bin/install_test_fish, testsuite/bin/install_test_perl,
  testsuite/bin/install_test_python, testsuite/bin/install_test_r,
  testsuite/bin/install_test_ruby, testsuite/bin/install_test_sh,
  testsuite/bin/install_test_tcl: ts: re-license install test scripts from
  GPLv3+ to GPLv2+  Change license of all install_test_* scripts, used to test
  Modules installation, from GPLv3+ to GPLv2+.  Align this way all files from
  the Modules project under the GPLv2+ license.  Consent has been obtained
  from copyright holder to perform such move (I hold the full copyright for
  these script files).  Related to #389

  * script/mb, script/mlprof, script/modulecmd.in, script/mpub, script/mrel,
  script/mt, script/mtreview, script/nglfar2ccov, script/playdemo: script:
  re-license script from GPLv3+ to GPLv2+  Change license of mb, mlprof,
  modulecmd, mpub, mrel, mt, mtreview, nglfar2ccov and playdemo scripts from
  GPLv3+ to GPLv2+.  Align this way all files from the Modules project under
  the GPLv2+ license.  Consent has been obtained from copyright holder to
  perform such move (I hold the full copyright for these script files).
  Related to #389

2021-02-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * README.md, doc/source/index.rst: doc: clarify license terms (GPLv2+)
  Related to #389

2021-02-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst, NEWS.rst, contrib/rpm/environment-modules.spec.in,
  doc/source/conf.py, version.inc.in: Release of version 4.7.0

  * .gitattributes: install: exclude codecov.yml from git export

2021-02-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.rst, NEWS.rst, doc/source/conf.py: doc: add *Get Modules* section
  in INSTALL

  * INSTALL.rst: doc: use term output-style for examples in INSTALL

2021-02-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc. term_width/--width/-w in NEWS

  * doc/source/diff_v3_v4.rst: doc: desc. term_width in diff doc

2021-02-15  Anais GAERTNER <anais.gaertner@cea.fr>

  * doc/source/module.rst: doc: desc. term_width/--witdh/-w in module(1) man

2021-02-12  Anais GAERTNER <anais.gaertner@cea.fr>

  * init/Makefile, init/fish_completion, init/zsh-functions/_module.in: init:
  add -w/--width options to completion scripts

2021-02-09  Anais GAERTNER <anais.gaertner@cea.fr>

  * init/Makefile, init/fish_completion, init/zsh-functions/_module.in: init:
  add term_width config to completion script

  * modulecmd.tcl.in: Add a range of acceptable values for term_width config
  Add a range of acceptable values for the options -w and --width using
  configuration option kind 'intbe'. The value should be an integer comprised
  between 0 and 1000. An error message is sent when a value is out of this
  range.

2021-02-08  Anais GAERTNER <anais.gaertner@cea.fr>

  * testsuite/modules.70-maint/220-config.exp: ts: adapt existing tests for
  term_width config in 70/220

2021-01-25  Anais GAERTNER <anais.gaertner@cea.fr>

  * testsuite/modules.70-maint/350-term_width.exp: ts: add test for term_width
  config in 70/350

2021-01-07  Anais GAERTNER <anais.gaertner@cea.fr>

  * modulecmd.tcl.in: Add term_width configuration  By default, term_width is
  equal to 0, but can be overridden by the environment variable, which can be
  also overriden by the command-line options -w or --width=. When term_width
  is equal to 0, the output width is the full terminal width, automatically
  detected by the module command. If term_width is different from 0, this sets
  a specific number of columns for the display of the output.  Closes #359

2021-02-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst: doc: desc. {avail,list}_*output in MIGRATING

  * NEWS.rst: doc: desc. silent make and recent inst/mpub/rpm work in NEWS

  * NEWS.rst: doc: desc. {avail,list}_*output in NEWS

2021-02-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/module-tags.rst: doc: fix mfcmd ref in module-tags
  design doc

  * testsuite/example/siteconfig.tcl-1,
  testsuite/modules.90-avail/070-full.exp: ts: update tests relying on
  avail_report_{dir,mfile}_sym cfg

  * doc/source/module.rst: doc: desc. --output/-o cmd line switches

  * doc/source/module.rst: doc: desc {avail,list}_*output configs with related
  envar

  * doc/source/module.rst: doc: remove avail_report_{dir,mfile}_sym configs

  * contrib/rpm/environment-modules.spec.in: rpm: align spec syntax with
  Fedora spec file  Add on the way a missing build dependency on 'make'
  package.  Also remove obsolete 'Group' tag (see
  https://fedoraproject.org/wiki/Changes/Remove_Group_Tag)

2021-02-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * script/mpub: script: correctly detect previous version tag on mpub  In
  case last bugfix release was made from a branch not parent of the current
  branch from which the next release will be rolled out. List all tags and get
  previous version name from the second to last position.

  * Makefile: install: correctly clear git remote in build ref tag

  * testsuite/modules.20-locate/043-virtual.exp: ts: illegal dir error now
  obtained on FreeBSD 12.2

  * .cirrus.yml: cirrus: test over newer FreeBSD 11 & 12 releases

  * Makefile, doc/Makefile, init/Makefile: install: silently include
  version.inc in Makefiles  Silently include version.inc in main, doc and init
  Makefiles to avoid 'Makefile:349: version.inc: No such file or directory'
  warning message when version.inc needs to be rebuilt prior being loaded.

2021-02-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/Makefile: install: doc cannot be built in parallel

  * configure: install: add -i opt to lib autoreconf  Ensure missing auxiliary
  file are copied when running autoreconf for Modules Tcl extension library.

  * lib/tcl.m4: install: import new version of lib/tcl.m4  Import new version
  of tcl.m4 for compatibility with autoconf >=2.69.  File is imported from
  https://github.com/tcltk/tclconfig.

  * lib/configure.ac: install: fix lib/configure.ac syntax for autoconf>=2.69

  * Makefile, doc/Makefile: install: silent compat version make build

  * Makefile, doc/Makefile, init/Makefile: install: no include of version.inc
  for 'clean' make goals

  * doc/Makefile: install: put 'all' rule first in doc Makefile

  * doc/Makefile, init/Makefile: install: build ../version.inc from init/doc
  Makefiles  Add makefile rule to build ../version.inc file if missing from
  the init and doc Makefiles.

2021-02-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/modulefile.rst: doc: fix link to module-info in modulefile(4)
  man

2021-02-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile, doc/Makefile: install: no print directory change for build make
  targets  Pass the --no-print-directory option to the make commands which are
  silenced by default.

2021-02-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile, doc/Makefile, init/Makefile, lib/Makefile.in: install: pretty
  print on makefile build targets  Print generated file names rather commands
  executed to generate these files on makefile build targets. Output when
  making Modules is this way simplified. When option `V=1` is passed to make
  verbose mode is enabled and executed commands are shown.  Simplified make
  output does not apply to the install, uninstall, test, clean, distclean
  targets and their relatives.

2021-02-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/Makefile: install: improve doc-related makefile rules

2021-02-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .github/workflows/linux_tests.yaml: gh: emulate tty on linux tests with
  specific siteconfig

  * init/Makefile, init/zsh-functions/_module.in: init: add completion of
  -a/--all opt on list sub-cmd

2021-02-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/Makefile, init/fish_completion, init/zsh-functions/_module.in: init:
  add -o/--output options to completion scripts

  * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in,
  init/zsh-functions/_module.in: init: use -o option instead of sed in
  completion scripts  Update shell completion scripts to make use of the
  module option -o to control the element to find in output rather using sed
  command to discard the unwanted elements.

  * testsuite/modulefiles.3/foo/.modulerc, testsuite/modulefiles.3/foo/0.2,
  testsuite/modules.70-maint/360-avail_output.exp: ts: test modulepath elt
  output on avail sub-cmd

2021-02-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Make cmdModuleList rely on reportModules  Use
  reportModules to output the loaded modules and their properties. Add the
  mod_list_order argument to the reportModules procedure to precise the order
  to report the results.

  * modulecmd.tcl.in: Add show_idx and excluded_tag args to reportModules

  * modulecmd.tcl.in: Transform listModules into reportModules  Rename the
  listModules procedure into reportModules and handle result output from there
  by directly calling displayElementList rather returning the list of elements
  to output.

  * modulecmd.tcl.in: Report modulepath on avail sub-cmd if included in output
  If modulepath is not included in output, available modules collected from
  global/user rc and enabled modulepaths are aggregated and reported all
  together. Firstly defined module wins.

  * modulecmd.tcl.in: Externalize getModules call outside of listModules

  * modulecmd.tcl.in: Consolidate search filters in cmdModuleAvail

2021-02-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/modulerc-1.in,
  testsuite/install.00-init/050-crossshell.exp,
  testsuite/modules.70-maint/120-autoinit.exp,
  testsuite/modules.70-maint/220-config.exp: ts: update tests of
  shells_with_ksh_fpath config  Now configuration value expect a specific list
  of shell names separated by colon character.

  * NEWS.rst, doc/source/module.rst, modulecmd.tcl.in: Validate elements in
  shells_with_ksh_fpath value list  The shells_with_ksh_fpath configuration
  option and its relative environment variable MODULES_SHELLS_WITH_KSH_FPATH
  accept a list of shell each of them separated by colon character. Accepted
  shell names are sh, bash, csh, tcsh and fish.

2021-02-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, configure: install: split configure err msg over an extra line

  * NEWS.rst, configure: install: color ERROR/WARNING msg header in configure
  Color the *ERROR* and *WARNING* message headers produced by configure script
  if output is sent to a terminal.

  * INSTALL.rst: doc: desc. expected value for --with-nearly-forbidden-days

  * NEWS.rst, configure: install: check --with-nearly-forbidden-days int value
  Check the value set for the --with-nearly-forbidden-days option is an
  integer comprised between 0 and 365.

  * testsuite/modules.20-locate/115-forbid.exp: ts: test bad val in
  MODULES_NEARLY_FORBIDDEN_DAYS in 20/115

2021-02-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .cirrus.yml: cirrus: increase git clone depth

  * testsuite/modules.70-maint/220-config.exp: ts: update
  nearly_forbidden_days config tests in 70/220

  * NEWS.rst, doc/source/module.rst, modulecmd.tcl.in: Restrict accepted
  values for nearly_forbidden_days config  Restrict the value accepted by
  nearly_forbidden_days configuration option to integer comprised between 0
  and 365.

  * modulecmd.tcl.in: Add configuration option kind 'intbe'  Add configuration
  option kind 'intbe' which stands for *integer between* where value must be
  an integer comprised between a lower and an upper bound. These bounds are
  described as a list of two elements in configuration value value list.
  Adapt getConf and cmdModuleConfig procedures to check such configuration
  option kind.

2021-01-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/360-avail_output.exp: ts: test dirwsym elt
  output on avail sub-cmd

  * modulecmd.tcl.in: Report dirwsym on avail sub-cmd if included in output

  * testsuite/modules.70-maint/360-avail_output.exp: ts: test alias elt output
  on avail sub-cmd

  * modulecmd.tcl.in: Report alias on avail sub-cmd if included in output

  * testsuite/modulefiles.3/foo/.modulerc,
  testsuite/modules.70-maint/360-avail_output.exp,
  testsuite/modules.70-maint/361-list_output.exp: ts: test tag elt output on
  avail/list sub-cmd

  * modulecmd.tcl.in: Report tag on avail/list sub-cmd if included in output

  * testsuite/modules.00-init/100-pager.exp,
  testsuite/modules.00-init/120-siteconfig.exp,
  testsuite/modules.00-init/150-access-init.exp: ts: update test after
  report_format default val change

  * testsuite/modules.70-maint/220-config.exp: ts: remove
  avail_report_{mfile,dir}_sym config tests

  * testsuite/modules.70-maint/360-avail_output.exp,
  testsuite/modules.70-maint/361-list_output.exp: ts: test sym elt output on
  avail/list sub-cmd

  * modulecmd.tcl.in: Report sym on avail/list sub-cmd if included in output
  Update avail and list sub-command output mechanism to report symbolic
  versions only if `sym` keyword is part of current output configuration.
  This change makes both avail_report_dir_sym and avail_report_mfile_sym
  configuration options useless. Thus these 2 options are removed as it was
  not possible to configure them for users without updating the modulecmd.tcl
  script.

  * testsuite/modules.70-maint/361-list_output.exp: ts: test idx elt output on
  list sub-cmd

2021-01-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Report idx on list sub-cmd if included in output

  * testsuite/modules.70-maint/360-avail_output.exp,
  testsuite/modules.70-maint/361-list_output.exp: ts: test key elt output on
  avail/list sub-cmd

  * testsuite/modules.70-maint/361-list_output.exp: ts: test header elt output
  on list sub-cmd

  * modulecmd.tcl.in: Report key on avail/list sub-cmd if included in output

  * modulecmd.tcl.in: Report header on list sub-cmd if included in output

  * modulecmd.tcl.in: Add isEltInReport procedure  Introduce the isEltInReport
  procedure to check if a given element should be part of the content to
  report. This procedure checks for the list of element to report relative to
  the currently running module sub-command and currently defined output mode.

2021-01-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/360-avail_output.exp,
  testsuite/modules.70-maint/361-list_output.exp: ts: initial MODULES_*OUTPUT
  env var tests in 70/{360,361}

2021-01-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/output/1.0,
  testsuite/modules.70-maint/360-avail_output.exp,
  testsuite/modules.70-maint/361-list_output.exp: ts: invalid value set on
  -o/--output opt in 70/{360,361}

2021-01-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/220-config.exp: ts: adapt existing tests for
  {avail,list}_*output in 70/220

2021-01-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/360-avail_output.exp,
  testsuite/modules.70-maint/361-list_output.exp: ts: adapt 70/{360,361} tests
  for tcl<8.6

2021-01-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Validate {avail,list}_*output config values  Validate
  the value list set for the output content configuration based on selected
  module sub-command. Error is raised as soon as an element in value list is
  not defined in the allowed value list.  Add isDiffBetweenList procedure to
  check if an element in a list is not part of a second list passed as
  argument.  Update getConf, cmdModuleConfig and parseModuleCommandArgs
  procedures to correctly check the value passed to the output content
  configuration options.

2021-01-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/output/1.0,
  testsuite/modules.70-maint/360-avail_output.exp,
  testsuite/modules.70-maint/361-list_output.exp: ts: mix -o/--output with
  -t/-l/-j in 70/{360,361}

  * modulecmd.tcl.in: Raise error if -o/--output used on long/json modes

2021-01-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Update report_format state with terse/long mode  Change
  the report_format state to also hold the terse and long value in case the
  --terse or --long mode is enabled. Change default value of report_format
  state to regular. This way the state now indicates the output mode which is
  expected with long and terse modes standing for a specific plain output
  format.

2021-01-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.50-cmds/431-not-req.exp: Raise error
  if --not-req not used in correct context  Raise an error to terminate
  evaluation instead of printing a warning message when the --not-req option
  is used for an unsupported sub-command.

2021-01-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/foo/.modulerc, testsuite/modulefiles.3/output/1.0,
  testsuite/modules.70-maint/360-avail_output.exp,
  testsuite/modules.70-maint/361-list_output.exp: ts: initial -o/--output
  tests in 70/{360,361}

2021-01-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Add -o/--output command-line switches  Add the
  -o/--output command-line switches to supersedes the default output
  configuration for avail and list sub-commands.  -o requires a value set as
  next argument whereas --output requires its value to be joined to it after
  '=' character.  Adapt parseModuleCommandArgs, to be able to tell it to
  ignore errors on first call pass performed on 'ml' command (as at the start
  module sub-command is not known). Then a second call is made to raise the
  errors for options not appropriate to the selected sub-command.  When the
  -o/--output options are used on an unsupported module sub-command, or if
  these options are wrongly specified an error is raised.

2021-01-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp: ts: ensure expected default
  output for tests

  * doc/source/diff_v3_v4.rst: doc: desc new avail/list output configs in diff
  doc

  * INSTALL.rst: doc: desc --with-{avail,list}-*output opts in INSTALL

2021-01-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/Makefile, init/fish_completion, init/zsh-functions/_module.in: init:
  add {avail,list}_*output configs to completion scripts

  * Makefile, Makefile.inc.in, configure, modulecmd.tcl.in, site.exp.in: Add
  {avail,list}_{terse_,}output configurations

  * doc/source/design/module-tags.rst,
  doc/source/design/output-configuration.rst: doc: add *Output configuration*
  design document  Describe customization of the output in a dedicated
  document. Move all reference on that topic from *Module tags* document to
  this new document.

2021-02-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp: ts: filter out volatile OS X
  sharepoint user group

  * codecov.yml: codecov: no notification before receiving the 5 builds

  * NEWS.rst: doc: desc. configure & make docs latest changes in NEWS

2021-02-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * configure: install: correctly detect pre-built doc environment  Do not set
  docs as pre-built if configure script is ran another time after building
  doc.

  * doc/Makefile: install: no html doc build if docs are pre-built  Disable
  the Makefile rules to build the HTML documentation in case if the
  documentation is found pre-built in the dist archive.

2021-02-05  R.K. Owen <rk@owen.sj.ca.us>

  * configure: install: fix configure script when called from PATH  Have
  configure assume the '.' dot directory when invoked without the prepended ./

2021-02-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, modulecmd.tcl.in, testsuite/home.2/.modulerc,
  testsuite/modules.20-locate/070-homerc.exp: Consider user/global rc eval
  like top level eval  Introduce rc_running state to flag when the init rc or
  user/global rc files are evaluated. Consider the module load, unload and
  switch performed in user/global rc like top level load, unload or switch
  evaluation.  Closes #372.

2021-02-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, modulecmd.tcl.in, testsuite/modules.10-use/030-use.exp,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/060-saveshow.exp,
  testsuite/modules.61-coll/999-cleanup.exp: Modulepath starting with env var
  ref is considered absolute  Consider modulepath starting with a reference to
  an environment variable as absolute.  Closes #376.

2021-02-03  Colin Marquardt <cmarqu42@gmail.com>

  * NEWS.rst, init/Makefile, init/bash_completion.in, init/tcsh_completion.in:
  init: replace completion helper vars with their content  This is done for
  tcsh and bash where those variables clutter the environment.  Closes #382

2021-01-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, modulecmd.tcl.in: Fix msg output on very small term width (6<12)
  Closes #381.

2021-01-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst: doc: desc. MODULES_MCOOKIE_VERSION_CHECK in config
  section

  * NEWS.rst, modulecmd.tcl.in, testsuite/modules.70-maint/220-config.exp: Fix
  config sub-cmd to set nearly_forbidden_days  Correct the config sub-command
  to accurately check values passed to set the nearly_forbidden_days config
  and accept valid integer values.  Closes #380.

  * NEWS.rst, modulecmd.tcl.in: Fix msg output on very small term width (<6)
  The max_idx variable set in reportMsgRecord got a value lower than one
  character when terminal width is very small. In addition empty lines were
  produced for messages starting with a serie of whitespace (for instance when
  reporting error stack trace).  Closes #379.

2021-01-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.70-maint/220-config.exp: ts: adapt existing tests for
  mcookie_version_check

  * testsuite/modules.20-locate/057-mcookie.exp: ts:
  MODULES_MCOOKIE_VERSION_CHECK disabled test in 20/057

  * NEWS.rst: doc: desc. mcookie_version_check in NEWS

  * doc/source/module.rst, doc/source/modulefile.rst: doc: desc.
  mcookie_version_check in module(1)/modulefile(4)

  * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in,
  init/zsh-functions/_module.in: init: add mcookie_version_check config to
  completion scripts

  * INSTALL.rst, doc/source/diff_v3_v4.rst: doc: desc. mcookie_version_check
  in INSTALL/diff

  * Makefile, Makefile.inc.in, configure, modulecmd.tcl.in, site.exp.in: Add
  mcookie_version_check config  Add mcookie_version_check configuration to
  disable the version check on the Modules magic cookie used in modulefiles.
  Option, enabled by default, is linked to the MODULES_MCOOKIE_VERSION_CHECK
  environment variable.  Closes #377.

  * .github/workflows/windows_tests.yaml: gh: no more need to create python
  link on Cygwin env

  * NEWS.rst, modulecmd.tcl.in: Fix output on very small term width (<3)  The
  cur_cols variable set in displayElementList got a negative value in case
  terminal width is lower or equal to 3. In this situation, set cur_cols to 0.
  Closes #378.

2021-01-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst: doc: desc. key section in module(1) man

  * MIGRATING.rst, NEWS.rst: doc: desc. added key section in NEWS/MIGRATING

  * modulecmd.tcl.in, testsuite/modules.70-maint/220-config.exp: Fix config
  cmd to also report dynamic states  Update config sub-command to also report
  when --dump-state option is set the value of the states that are dynamically
  set (states with no definition in ::g_state_defs array)

  * testsuite/modulefiles.3/key/.modulerc, testsuite/modulefiles.3/key/1.0,
  testsuite/modulefiles.3/key/2.0, testsuite/modulefiles.3/key/4.0,
  testsuite/modulefiles.3/key/5.0,
  testsuite/modules.70-maint/340-output-key.exp: ts: test key output on
  avail/list in 70/340

2021-01-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.20-locate/060-rc.exp,
  testsuite/modules.20-locate/100-wspace.exp,
  testsuite/modules.50-cmds/281-info-modulerc.exp,
  testsuite/modules.50-cmds/440-module-tag.exp,
  testsuite/modules.70-maint/040-list.exp,
  .../274-adv_version_spec-autosym.exp, testsuite/modules.70-maint/280-ml.exp,
  testsuite/modules.70-maint/320-tags.exp,
  testsuite/modules.70-maint/321-tag_abbrev.exp,
  testsuite/modules.70-maint/322-tag-sgr.exp,
  testsuite/modules.90-avail/020-single.exp,
  testsuite/modules.90-avail/030-multiple.exp,
  testsuite/modules.90-avail/070-full.exp,
  testsuite/modules.90-avail/100-tags.exp: ts: adapt existing test to output
  key addition

2021-01-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Add a key at end of avail/list sub-cmd output  In case
  the output result of the avail or list sub-command makes use of graphical
  rendering or tag abbreviation, add a key at the end of the output to help
  understanding what these colors or acronyms stand for.

2021-01-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Track if some alias are reported  Set
  g_used_alias_nocolor global variable if alias are reported in parentheses
  (no color to graphically render it).

  * modulecmd.tcl.in: Track if some sym are reported  Set g_used_sym_nocolor
  global variable if symbols are reported in parentheses, excluding alias
  abbreviation '@'.

2021-01-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/module-tags.rst: doc: update 'key' description in module
  tag design doc

2021-01-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Add isSgrkeyColored to check if an sgr key is colored
  Test if color mode is enabled and passed sgr key exists. Useful to test if
  some graphical rendering can be applied without making use of it.

2021-01-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Track tag name or abbrev that have been used  Collect
  all tag name or abbreviation that are used to graphically render output in a
  global array named g_used_tags. Will help to know what to put in output key.

2021-01-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Track color keys that have been used  Collect all color
  keys are that used to graphically render output in a global array named
  g_used_colors. Will help to know what to put in output key.

  * modulecmd.tcl.in: Build g_abbrevTag array in initConfTagAbbrev  In
  addition to build the g_tagAbbrev array in initConfTagAbbrev procedure that
  associate each tag with their corresponding abbreviation, the g_abbrevTag is
  now also built to associate each abbreviation with their corresponding tag.
  Some tags are known to share the same abbreviation, like hidden-loaded and
  hidden tags, but these tags are used in different contexts. So when building
  g_abbrevTag array skip tags not relevant to the current command context

2021-01-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.rst, NEWS.rst: doc: desc inst opt --enable-new-features in
  INSTALL/NEWS

  * configure: install: add --enable-new-features configure option  Introduce
  --enable-new-features configure option to enable all at once all the new
  features disabled by default due to the behavior change they introduced on
  Modules 4.  --enable-new-features option is equivalent to
  --enable-auto-handling, --enable-color, --with-icase=search,
  --enable-extended-default, --enable-advanced-version-spec.

2021-01-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst, doc/source/_static/terminal_output.css: doc: desc. module
  tags in MIGRATING

2021-01-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc. modulefile read cancellation in NEWS

  * testsuite/modules.70-maint/330-large-file.exp: ts: test large modulfile
  read in 70/330

  * codecov.yml: ts: add codecov configuration file  Fix CodeCov behavior to
  raise error if CI tests failed or if coverage result is decreasing.

  * testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/120-siteconfig.exp: ts: update readFile bad call
  tests in 00/120

  * lib/configure.ac, lib/envmodules.c, lib/envmodules.h: lib: add
  must_have_cookie arg to readFile proc  Update C-version of the readFile
  procedure to add it the `must_have_cookie` argument that tells if the
  Modules magic cookie (#%Module) has to be checked when reading file to abort
  reading as soon as possible if read file must be a modulefile.  Bump version
  of Tcl Envmodules library to 1.3.0.  Fixes #375.

  * modulecmd.tcl.in: Add must_have_cookie arg to readFile proc  Update
  pure-Tcl version of the readFile procedure to add it the `must_have_cookie`
  argument that tells if the Modules magic cookie (#%Module) has to be checked
  when reading file to abort reading as soon as possible if read file must be
  a modulefile.  Fixes #375.

  * testsuite/modules.00-init/120-siteconfig.exp: ts: fix 00/120 tests now
  testouterr_cmd auto append nl

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp: ts: no cleanup of
  TESTSUITE_ENABLE_SITECONFIG when starting ts

2021-01-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst, NEWS.rst: doc: colorize term output example in MIGRATING

  * doc/source/_static/literal_block.css,
  doc/source/_static/rtd_literal_block.css,
  doc/source/_static/terminal_output.css, doc/source/conf.py: doc: define
  sphinx roles/css to colorize parsed-literal

2021-01-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc. recent doc improvements in NEWS

  * MIGRATING.rst: doc: fix typo on sticky mod desc in MIGRATING

2021-01-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .../cookbook/ensure-user-qualify-modules.rst,
  doc/source/cookbook/inhibit-report-info.rst,
  .../cookbook/module-info-name-return-basename.rst,
  doc/source/cookbook/modulefiles-in-git.rst,
  .../cookbook/modulepaths-persist-over-sudo.rst,
  .../new-features-without-breaking-old-module.rst,
  doc/source/cookbook/top-priority-values.rst,
  doc/source/cookbook/unload-firstly-loaded.rst,
  .../design/advanced-module-version-specifiers.rst,
  .../design/default-latest-version-specifiers.rst,
  doc/source/design/extended-default.rst,
  doc/source/design/hide-or-forbid-modulefile.rst,
  doc/source/design/insensitive-case.rst, doc/source/design/module-tags.rst,
  .../design/source-shell-script-in-modulefile.rst: doc: markup
  config/subcmd/mfcmd in cookbook/design

  * doc/source/module.rst, doc/source/modulefile.rst: doc: desc. when opt were
  added to sub-cmd and mf cmd

  * doc/source/module.rst: doc: desc. -a option on list subcmd in module(1)

2021-01-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/index.rst: doc: reorg index table of content

  * INSTALL.rst, MIGRATING.rst, NEWS.rst, doc/source/module.rst,
  doc/source/modulefile.rst: doc: markup mconfig refs

  * MIGRATING.rst: doc: desc. sticky modules in MIGRATING

  * MIGRATING.rst: doc: desc. hidden-loaded in MIGRATING

2021-01-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst: doc: desc. when config opts were introduced in
  module(1)

  * doc/source/conf.py, doc/source/module.rst: doc: desc. module config.
  option with :mconfig: directive

  * INSTALL.rst: doc: desc. when inst. opt. were introduced in INSTALL

  * NEWS.rst: doc: fix typo on --enable-append-manpath in NEWS

2021-01-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.rst: doc: markup subcmd/mfcmd/command refs in INSTALL

  * INSTALL.rst, MIGRATING.rst, NEWS.rst: doc: mark refs to installation
  option with :instopt:

  * INSTALL.rst, doc/source/conf.py: doc: desc. inst. option with :instopt:
  directive  Add the :instopt: sphinx directive to describe installation
  option.

  * doc/source/_static/rtd_theme_overrides.css, doc/source/conf.py: doc:
  override wide tables in RTD theme

  * doc/source/module.rst: doc: desc. -f option on purge subcmd in module(1)
  man

  * NEWS.rst: doc: desc. sticky/super-sticky in NEWS

  * doc/source/modulefile.rst: doc: desc. hidden-loaded in 'Hiding
  modulefiles' section

  * doc/source/conf.py, modulecmd.tcl.in: New year (2021) copyright mention
  update

2020-12-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc. hidden-loaded and verbose2 in NEWS

2020-12-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Fix fish function check in sh-to-mod env change
  Correctly get all shell functions defined in fish shell prior
  sh-to-mod/source-sh script evaluation as some functions may be autoloading
  after the initial function definition check. So function check should be
  done twice to ensure to get all function defined on the second pass.

  * doc/source/module.rst, doc/source/modulefile.rst: doc: add 'Sticky
  modules' section in module(1)  And add reference to this new section
  everytime the sticky module concept is mentionned in module(1) and
  modulefile(4).

2020-12-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst, doc/source/modulefile.rst: doc: add 'Module tags'
  section in module(1)  And add reference to this new section everytime the
  module tag concept is mentionned in module(1) and modulefile(4).

  * NEWS.rst: doc: desc. module tag graphical rendering in NEWS

  * NEWS.rst: doc: desc. module tag abbreviations in NEWS

  * NEWS.rst: doc: update module tag desc. with new special tags in NEWS

  * doc/source/modulefile.rst: doc: desc. special module tags in modulefile(4)
  man

2020-12-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/377-error.exp,
  testsuite/modules.50-cmds/460-sticky.exp,
  testsuite/modules.50-cmds/461-super-sticky.exp: ts: test purge -f on
  sticky/broken mod with dep in 50/{377,460,461}

  * doc/source/design/sticky-modules.rst, modulecmd.tcl.in: Unload dependent
  module on purge if forced  When performing a `purge` sub-command with the
  `--force` option set, unload modules that are depended by other modules that
  cannot unload. This way `purge --force` behaves like `unload --force`.

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp: ts: clear all TESTSUITE_* vars
  prior running tests

2020-12-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/sticky/.modulerc,
  testsuite/modulefiles.3/stickysub/.modulerc,
  testsuite/modules.50-cmds/462-sticky-corner.exp: ts: test corner cases for
  stickyness swap in 50/462

2020-12-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/home/coll-sticky-4, testsuite/home/coll-sticky-5,
  testsuite/home/coll-sticky-6, testsuite/modulefiles.3/sticky/.modulerc,
  testsuite/modulefiles.3/stickysub/.modulerc,
  testsuite/modulefiles.3/stickysub/dir1/1.0,
  testsuite/modulefiles.3/stickysub/dir1/2.0,
  testsuite/modulefiles.3/stickysub/dir2/3.0,
  testsuite/modulefiles.3/stickysub/dir2/4.0,
  testsuite/modules.50-cmds/460-sticky.exp,
  testsuite/modules.50-cmds/461-super-sticky.exp: ts: test stickyness swap in
  50/{460,461}

  * doc/source/design/module-tags.rst, doc/source/design/sticky-modules.rst:
  doc: add *Sticky modules* design notes

2020-12-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Split reloading_mod state  Split reloading_mod state in
  reloading_sticky and reloading_supersticky states to get the accurate
  information to report in case a module is both sticky and super-sticky and
  one of these stickyness declaration is not honored during a reload attempt.

2020-12-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Swap sticky module if stickyness definition is preserved
  Allow a sticky or super-sticky module to be swapped by another modulefile
  version as soon as stickyness definition is still satisfied. For instance,
  if a sticky tag is applied over *foo* module, *foo/1.0* can be swapped by
  *foo/2.0* as *foo* stickyness is preserved. If the sticky tag applies to
  *foo/1.0*, this module cannot be replaced by another version of *foo*
  module.  Such swap may occur when processing a `restore` or a `switch`
  sub-command.

2020-12-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Pass module string cmp method to
  getModuleTag/isModuleTagged  Add `cmp` option to the getModuleTag and
  isModuleTagged procedures to specify the module designation comparison
  method.

2020-12-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.70-maint/231-verbose2.exp: ts: test new verbose2 msgs on
  load/unload in 70/231

  * doc/source/module.rst, modulecmd.tcl.in: Report already loaded/unloaded
  mod if verbosity>=verbose2  Report when trying to load a module which is
  already loaded or when trying to unload a module which is not loaded in case
  the verbosity level currently set is equal to or higher than *verbose2*.
  Closes #187

2020-12-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/sticky/.modulerc,
  testsuite/modulefiles.3/sticky/2.0, testsuite/modulefiles.3/sticky/3.0,
  testsuite/modules.50-cmds/462-sticky-corner.exp: ts: add some corner case
  tests in 50/462

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/461-super-sticky.exp: ts: test super-sticky
  modules in 50/461

  * testsuite/home/coll-sticky-0, testsuite/home/coll-sticky-1,
  testsuite/home/coll-sticky-2, testsuite/home/coll-sticky-3,
  testsuite/modulefiles.3/bar/2.0, testsuite/modulefiles.3/sticky/.modulerc,
  testsuite/modulefiles.3/sticky/1.0, testsuite/modulefiles.3/sticky/4.0,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/460-sticky.exp: ts: test sticky modules in 50/460

2020-12-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/module-tags.rst: doc: update sticky module desc. in tag
  design

  * modulecmd.tcl.in: Super-sticky mod cannot be unloaded unless reloading
  Raise an error on an attempt to unload a module tagged *super-sticky*,
  unless if this module is reloading. *super-sticky* modules cannot be
  unloaded even if unload is forced  Closes #269

  * configure: install: add default color/abbrev for super-sticky tag

  * modulecmd.tcl.in: Allow unload of sticky module if reloading  When
  reloading a module, during a `reload` or `restore` sub-command or the
  processing of the *Dependency Reload* mechanism, allow the unload of modules
  that are tagged sticky, as we know they will be reloaded.  Add
  `reloading_mod` state to record the name of modules that are unloaded but
  that will be reloaded right after. With this new state, unload of sticky
  modules can be allowed.

  * modulecmd.tcl.in: Remove useless args arg from lpopState proc

2020-12-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Module tagged 'sticky' cannot be unloaded unless forced
  Raise error on an unload attempt of a module that is tagged *sticky*. If
  this unload attempt is forced, raise a warning and proceed.  Closes #269

  * configure: install: add default color/abbrev to sticky tag

  * doc/source/diff_v3_v4.rst: doc: use tables to desc. new cmds/switches in
  diff doc

2020-12-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.20-locate/118-hidden-loaded.exp,
  testsuite/modules.50-cmds/450-hidden-loaded.exp,
  testsuite/modules.70-maint/220-config.exp,
  testsuite/modules.70-maint/230-verbosity.exp: ts: test verbose2 verbosity in
  20/118 70/{220,230} 50/410

  * INSTALL.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: desc.
  verbose2 verbosity level in man/INSTALL/diff

  * doc/source/module.rst: doc: precise debug2/-DD were added in v4.6 in
  module(1) man

  * configure, modulecmd.tcl.in: Introduce verbose2 verbosity level  verbose2
  verbosity level is introduced as a higher level than verbose and lower than
  trace level. This new verbosity level currently enables to view the loading
  and unloading notification of *hidden-loaded* modules.

2020-12-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst, doc/source/modulefile.rst: doc: desc hidden-loaded
  in module/modulefile man pages

  * .../hide-and-forbid-modules/modulefiles/.modulerc,
  doc/source/cookbook/hide-and-forbid-modules.rst: doc: add hidden-loaded
  example on hide/forbid recipe

2020-12-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/tag/.modulerc,
  testsuite/modules.70-maint/320-tags.exp,
  testsuite/modules.70-maint/322-tag-sgr.exp,
  testsuite/modules.90-avail/100-tags.exp: ts: test hidden-loaded tag on
  70/{320,322} and 90/100

  * modulecmd.tcl.in: No report of hidden-loaded tag on avail context

  * testsuite/modules.20-locate/038-defcontext.exp,
  testsuite/modules.20-locate/110-hide.exp,
  testsuite/modules.20-locate/113-hide-all-opt.exp,
  testsuite/modules.20-locate/115-forbid.exp,
  testsuite/modules.20-locate/117-forbid-user-group.exp,
  testsuite/modules.20-locate/119-hide-cascading.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.70-maint/270-adv_version_spec.exp,
  testsuite/modules.70-maint/271-adv_version_spec-in.exp,
  testsuite/modules.70-maint/275-adv_version_spec-loaded.exp,
  testsuite/modules.70-maint/320-tags.exp,
  testsuite/modules.90-avail/040-wild.exp,
  testsuite/modules.90-avail/080-noindepth.exp,
  testsuite/modules.90-avail/100-tags.exp: ts: update existing tests with
  hidden-loaded tag abbrev

  * modulecmd.tcl.in, testsuite/modulefiles.3/tag/.modulerc,
  testsuite/modules.50-cmds/440-module-tag.exp: Raise error when hidden-loaded
  tag is manually set

2020-07-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/etc/modulerc.hide, testsuite/modulefiles.2/hide1/.modulerc,
  testsuite/modules.20-locate/119-hide-cascading.exp: ts: add module-hide
  --hidden-loaded casc tests in 20/119

2020-07-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/etc/modulerc.hide-deps,
  testsuite/home/coll-hide-once-loaded-nuasked,
  testsuite/modulefiles.2/hidereq/4.2, testsuite/modulefiles.2/hidereq/4.3,
  testsuite/modulefiles.2/hidereq/4.4, testsuite/modulefiles.deps/h1,
  testsuite/modulefiles.deps/h10, testsuite/modulefiles.deps/h2,
  testsuite/modulefiles.deps/h20, testsuite/modulefiles.deps/h21,
  testsuite/modulefiles.deps/h22, testsuite/modulefiles.deps/h3,
  testsuite/modulefiles.deps/h30, testsuite/modulefiles.deps/h31,
  testsuite/modulefiles.deps/h32, testsuite/modulefiles.deps/h33,
  testsuite/modulefiles.deps/h4, testsuite/modulefiles.deps/ra,
  testsuite/modulefiles.deps/rae, testsuite/modulefiles.deps/raf,
  testsuite/modulefiles.deps/rag, testsuite/modulefiles.deps/rah,
  testsuite/modulefiles.deps/swa, testsuite/modulefiles.deps/swb,
  testsuite/modulefiles.deps/swc, testsuite/modulefiles.deps/swj,
  testsuite/modules.20-locate/118-hidden-loaded.exp,
  testsuite/modules.50-cmds/450-hidden-loaded.exp: ts: check hidden loaded
  mods visibility on eval report msgs

2020-12-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * configure: install: add abbrev for hidden-loaded tag  hidden-loaded tag
  will use same abbreviation than hidden tag (*H*), as hidden tag is reported
  only on avail context and hidden-loaded on list context. So the sgr code
  defined for H abbreviation will also applies to hidden-loaded tag.

2020-07-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/home/coll-hide-once-loaded,
  testsuite/modulefiles.2/hide3/.modulerc,
  testsuite/modulefiles.2/hidereq/4.1, testsuite/modulefiles.2/hidereq/4.2,
  testsuite/modules.20-locate/110-hide.exp,
  testsuite/modules.20-locate/113-hide-all-opt.exp,
  testsuite/modules.20-locate/118-hidden-loaded.exp: ts: test --hidden-loaded
  opt of module-hide cmd

2020-07-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/hide-or-forbid-modulefile.rst,
  doc/source/design/module-tags.rst: doc: update hidden once loaded module
  design

2020-07-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Exclude hidden loaded mods from auto handling reports
  Do not report hidden loaded modules in the informational messages of the
  auto handling mechanisms unless these hidden modules have been specifically
  loaded or unloaded by user, verbosity level is set to debug or an higher
  level or any messages are recorded for the hidden module evaluation.  The
  g_moduleHiddenEval array is introduced to record whether module evaluation
  is hidden (hidden once loaded + automated evaluation of module) or not.

  * modulecmd.tcl.in: No eval msg report of hidden auto-loaded mod  Do not
  report load, unload or switch of modules set hidden once loaded if these
  modules have been loaded, unloaded or switched automatically. Unless
  verbosity mode is set to debug or higher or if any messages are recorded for
  this module evaluation.

2020-07-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Do not report hidden loaded mods on list sub-cmd  Unless
  -a/--all option is set, do not report loaded modules that have been declared
  *hidden once loaded* through *hidden-loaded* module tag.

2020-12-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Add --hidden-loaded opt to module-hide cmd  Add the
  --hidden-loaded option to the module-hide modulefile command that indicates
  module should be hidden once loaded. When set, the *hidden-loaded* module
  tag applies to module specification set on module-hide command  A
  hidden-loaded tag set is retained even if it is not held by the module-hide
  command with highest hiding level.

2020-12-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * configure: Set color for basic tag abbrev  Provide in the default light
  and dark background color set a graphical rendition code for the basic
  module tags (loaded, auto-loaded, hidden, forbidden, nearly-forbidden).

  * testsuite/modules.70-maint/322-tag-sgr.exp: ts: add test for
  tag_color_name config in 70/322

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.70-maint/220-config.exp: ts: adapt tests for
  tag_color_name config

2020-12-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst: doc: desc. MODULES_TAG_COLOR_NAME in module(1) man

  * modulecmd.tcl.in: Rename getSgrkeysFromList proc in getTagSgrForModname
  Clarify procedure name since it only applies to tag graphical rendering.

  * modulecmd.tcl.in: Color tag by their own name  For tags set in
  tag_color_name configuration, apply graphical rendering over their name
  rather than over the name of the module they are attached to.  If an
  abbreviation is defined for tag, this abbreviation name should be placed in
  tag_color_name configuration value to make it stand by itself and not
  disappear over module name rendition.

  * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in,
  init/zsh-functions/_module.in: init: add tag_color_name config to completion
  scripts

  * doc/source/diff_v3_v4.rst: doc: desc. MODULES_TAG_COLOR_NAME in diff doc

  * INSTALL.rst, Makefile, Makefile.inc.in, configure, modulecmd.tcl.in,
  site.exp.in: Add tag_color_name configuration

2020-12-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/tag/.modulerc,
  testsuite/modules.70-maint/322-tag-sgr.exp: ts: test more tags than chars in
  name in 70/322

  * modulecmd.tcl.in: Render tags separately if more sgr tags than char in
  name  In case there are more tags that should be rendered with a SGR code
  than character in the module name to display, apply rendering of additionnal
  tags other these tag names in the side tag list.

2020-11-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/tag/.modulerc,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.70-maint/322-tag-sgr.exp: ts: test graphical rendering of
  tags in 70/322

2020-11-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/module-tags.rst: doc: desc. SGR mechanism for tags in
  design doc

  * testsuite/modules.00-init/140-color.exp: ts: test cumulative sgr codes in
  00/140

  * modulecmd.tcl.in: Render multiple tags and hightlight matching substr
  Update sgr procedure to render multiple other keys applying to the string,
  by applying each of these keys to a sub part of string, yet mixing with
  matching sub string highlight.

2020-11-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Apply tag sgr keys to element  When tags apply to a
  module to display, apply to this module name the sgr keys that are defined
  to represent the tags. Each module tag matching a sgr code is then
  graphically represented over module name and not reported by its tag name or
  abbreviated name.  If an abbreviation exists for tag name, sgr key is
  matched against this abbreviated string. If no abbreviation exists for a
  tag, sgr key is matched against tag full name.  Currently only graphically
  render single tag.

2020-11-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Handle matching substring hightlight in sgr proc

  * modulecmd.tcl.in: Render default sym through single sgr elt processing

2020-11-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Add the ability to apply multiple sgr keys

  * modulecmd.tcl.in: Remove useless tagsgr arg on formatListEltToDisplay

2020-11-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst: doc: desc. MODULES_TAG_ABBREV in module(1) man

2020-11-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/siteconfig.tcl-1,
  testsuite/modules.70-maint/321-tag_abbrev.exp: ts: check tag abbrev in
  70/321

  * doc/source/design/module-tags.rst: doc: desc. tag abbrev in module tags
  design

2020-11-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/030-options.exp,
  testsuite/modules.20-locate/038-defcontext.exp,
  testsuite/modules.20-locate/110-hide.exp,
  testsuite/modules.20-locate/113-hide-all-opt.exp,
  testsuite/modules.20-locate/115-forbid.exp,
  .../modules.20-locate/117-forbid-user-group.exp,
  testsuite/modules.20-locate/119-hide-cascading.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  .../modules.70-maint/270-adv_version_spec.exp,
  .../modules.70-maint/271-adv_version_spec-in.exp,
  .../275-adv_version_spec-loaded.exp,
  testsuite/modules.70-maint/320-tags.exp,
  testsuite/modules.90-avail/040-wild.exp,
  testsuite/modules.90-avail/080-noindepth.exp,
  testsuite/modules.90-avail/100-tags.exp: ts: adapt existing tests for tag
  abbrev

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.70-maint/220-config.exp: ts: adapt tests for tag_abbrev
  config

  * modulecmd.tcl.in: Abbreviate tags when reporting them on avail/list  Use
  abbreviation defined for each tag if any to report them over the avail and
  list sub-command output result.

  * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in,
  init/zsh-functions/_module.in: init: add tag_abbrev config to completion
  scripts

  * doc/source/diff_v3_v4.rst: doc: desc. MODULES_TAG_ABBREV in diff doc

  * INSTALL.rst, Makefile, Makefile.inc.in, configure, modulecmd.tcl.in,
  site.exp.in: Add tag_abbrev configuration

2020-11-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.20-locate/115-forbid.exp,
  testsuite/modules.50-cmds/440-module-tag.exp,
  testsuite/modules.70-maint/320-tags.exp,
  testsuite/modules.90-avail/100-tags.exp: Separate tags with ':' instead of
  ','  When reporting module tags on avail and list sub-commands, use ':'
  character to separate multiple tags applying to the same module.

  * doc/source/design/module-tags.rst, modulecmd.tcl.in,
  testsuite/modulefiles.3/tag/.modulerc,
  testsuite/modules.50-cmds/440-module-tag.exp: Raise error when reserved tag
  name is set  Raise an error when a reserved tag name is defined with
  module-tag. Reserved names are currently: loaded, auto-loaded, forbidden,
  nearly-forbidden and hidden.

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp: ts: clear MODULES_LMTAG prior
  test start

2020-11-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile, configure: install: clear git remote in build ref tag

2020-11-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/modulefile.rst: doc: desc. inherited tag from
  module-{hide,forbid}

  * modulecmd.tcl.in, testsuite/modules.50-cmds/288-info-tags.exp: Update
  isModuleTagged to fetch info from collected tags  Add the collected argument
  to the isModuleTagged procedure to get the ability to query tag information
  for designed modulefile from collected tags data for module rather raw tag
  definition applying to module specification.  Enable this query mode to
  determine if module is nearly-forbidden in execute-modulefile procedure (as
  tags for evaluated modules are fetched right before this test).  Disable
  'nearly-forbidden' tag check when performing an unload evaluation.

  * NEWS.rst: doc: desc. initial module tag work in NEWS

  * doc/source/modulefile.rst: doc: desc. module-tag in modulefile(4)

2020-11-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/286-info-username.exp,
  testsuite/modules.50-cmds/287-info-usergroups.exp: ts: adapt existing tests
  for 'module-info tags' change

  * doc/source/module.rst: doc: desc MODULES_LMTAG in module(1) man

  * testsuite/etc/modulerc.tag, testsuite/modulefiles.3/info/.modulerc,
  testsuite/modulefiles.3/tag/.modulerc, testsuite/modulefiles.3/tag/6.0,
  testsuite/modulefiles.3/tag/7.0, testsuite/modulefiles.3/tag/8.0,
  testsuite/modules.50-cmds/288-info-tags.exp,
  testsuite/modules.50-cmds/440-module-tag.exp: ts: add tests for module-tag
  in 50/{288,440}

  * testsuite/modulefiles.3/info/.modulerc,
  testsuite/modulefiles.3/info/tags2,
  testsuite/modules.50-cmds/288-info-tags.exp,
  testsuite/modules.70-maint/070-display.exp: ts: test module-info tags on all
  eval contexts

2020-10-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/diff_v3_v4.rst: doc: desc. MODULES_TAG on diff doc

  * doc/source/diff_v3_v4.rst: doc: desc. module-tag in diff doc

  * contrib/vim/syntax/modulefile.vim: vim: add new modulefile command
  'module-tag'

  * modulecmd.tcl.in: Fetch tags before starting modulefile eval  Collect all
  tags applying to the modulefile that need to be evaluated right before the
  start of its evaluation. It enables to get the accurate tag information
  during modulefile evaluation whatever the kind of evaluation (load, unload,
  display, help, ...). Disable mechanism for source and unsource evaluation
  contexts.  In case current user environment state is inconsistent, do not
  break the whole modulefile evaluation.

  * modulecmd.tcl.in: Introduce 'module-tag' modulefile command  Introduce the
  `module-tag` modulefile command to enable users to associate their own tag
  to modulefiles. These tags are reported on `avail` and `list` sub-command
  outputs.  This new command is intended to be used in modulerc evaluation
  context. It is also recorded for modulefile evaluation context as it
  corresponds to the evaluation context of the global and user RCs.

  * modulecmd.tcl.in: Make --{after,before} optional in
  parseApplicationCriteriaArgs  Add the `aftbef` argument to the
  parseApplicationCriteriaArgs procedure to optionally support the --after and
  --before command-line switches. If support disabled (aftbef set to 0) an
  argument equal to --after or --before is treated as regular content.

2020-10-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/modulefile.rst: doc: desc module-info tags in modulefile(4) man

  * doc/source/diff_v3_v4.rst: doc: desc. module-info tags in diff doc

  * testsuite/modulefiles.3/info/.modulerc, testsuite/modulefiles.3/info/tags,
  testsuite/modules.50-cmds/288-info-tags.exp: ts: test 'module-info tags' in
  50/288

2020-10-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Add tags sub-command to module-info modulefile command
  Introduce the `tags` sub-command to the module-info modulefile command to
  return the list of tags applying to currently evaluated module or tell if
  tag specified as argument applyes to this module.

2020-10-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.20-locate/110-hide.exp,
  testsuite/modules.20-locate/113-hide-all-opt.exp,
  testsuite/modules.20-locate/115-forbid.exp,
  testsuite/modules.20-locate/119-hide-cascading.exp,
  .../modules.70-maint/270-adv_version_spec.exp,
  .../modules.70-maint/271-adv_version_spec-in.exp,
  testsuite/modules.70-maint/320-tags.exp,
  testsuite/modules.90-avail/040-wild.exp,
  testsuite/modules.90-avail/070-full.exp,
  testsuite/modules.90-avail/080-noindepth.exp: ts: adapt existing tests to
  'hidden' tag

  * modulecmd.tcl.in: Apply 'hidden' tag to module defined hidden  Set a
  `hidden` tag for each module targetted by a hidden definition coming whether
  from a module-hide statement or by module name or version starting with a
  dot character.  The `hidden` tag is not exported in MODULES_LMTAG for
  loading module as the hidden state concerns the `avail` report only.

2020-10-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/320-tags.exp: ts: test loaded/auto-loaded tags
  in 70/320

  * testsuite/modules.70-maint/320-tags.exp: ts: test tags output on list
  sub-cmd in 70/320

2020-10-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Output tags along module on list subcmd  Output the tags
  of the modules returned by the list sub-command. Adapt module list regular
  and json output styles to include these tags (enclosed in <> like for avail
  sub-command).  No output of tags on terse output mode as nothing other than
  module name is displayed on this mode currently.

  * testsuite/modulefiles.3/tag/.modulerc, testsuite/modulefiles.3/tag/4.0,
  testsuite/modulefiles.3/tag/5.0, testsuite/modules.70-maint/320-tags.exp:
  ts: test MODULES_LMTAG in 70/320

2020-10-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.20-locate/115-forbid.exp,
  testsuite/modules.20-locate/119-hide-cascading.exp,
  testsuite/modules.70-maint/210-clear.exp,
  testsuite/modules.70-maint/280-ml.exp: ts: adapt existing tests for
  MODULES_LMTAG

  * modulecmd.tcl.in: Record tags of loaded mods in MODULES_LMTAG env var
  Record in user environment the tags applying to loaded modules. Making this
  information persist in environment via MODULES_LMTAG variable helps to
  report them on `list` sub-command and to remember these tags when the module
  will be unloaded.

  * testsuite/modulefiles.3/tag/.modulerc, testsuite/modulefiles.3/tag/1.0,
  testsuite/modules.90-avail/100-tags.exp: ts: test tags output on avail
  sub-cmd in 90/100

  * modulecmd.tcl.in: Apply getModules phase 5 only for avail subcmd
  Consolidate tags set for the modules returned by getModules procedure only
  if called from an avail sub-command, as these informations are only useful
  for this context (list sub-command does not rely on getModules).

  * testsuite/install.00-init/030-options.exp,
  testsuite/modules.20-locate/038-defcontext.exp,
  testsuite/modules.20-locate/115-forbid.exp,
  .../modules.20-locate/117-forbid-user-group.exp,
  testsuite/modules.20-locate/119-hide-cascading.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  .../275-adv_version_spec-loaded.exp,
  testsuite/modules.70-maint/290-json.exp,
  testsuite/modules.90-avail/070-full.exp: ts: adapt existing tests for tag
  output on avail

  * modulecmd.tcl.in: Record loaded/auto-loaded tags for loaded modules  When
  parsing loaded environment, record a loaded tag for each loaded module or an
  auto-loaded tag if this module has been automatically loaded by another
  module.  Load these tags information at phase #5 of getModules prior
  fetching the tags found from getModules search.  If current user environment
  state is inconsistent do not stop the whole avail process on this error.

2020-10-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Allow to recover from cacheCurrentModules error  In case
  the current user environment is stated inconsistent, allow to only report
  this error and not terminate execution.  An exitonerr argument is added to
  cacheCurrentModules procedure to just call reportError procedure instead of
  reportErrorAndExit.

2020-10-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Add global/user rc def to module symbol list in any
  cases  When building the module symbol list in phase #1 of getModules
  procedure, also add the definitions coming from global or user rc files even
  if rc definitions should not be part of the result. As these symbolic names
  may match query and make their targetted module from the currently searched
  directory included in result.

2020-10-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Output tags along module on avail subcmd  Output the
  tags of the modules returned by the avail sub-command. Adapt module listing
  regular, terse and json output styles to include these tags. These tags are
  enclosed in <> to distinguish them from symbolic versions.  Tags are sorted
  when printed.  No tag report for long output style not to exceed 80 columns.

  * modulecmd.tcl.in: Collect tags for each elt returned by getModules  Add a
  fifth stage for getModules to gather all the tags applying to resulting
  modules. These tags are stored in a g_tagHash global array to be used to
  output these tags along the module they belong to.

  * modulecmd.tcl.in: Refactor eltsuffix mngt on formatListEltToDisplay

  * modulecmd.tcl.in: Rename tag_list var into sym_list for clarity

  * modulecmd.tcl.in: Remove useless tag_list var in findModules

2020-10-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/module-tags.rst: doc: add initial module-tag design
  notes

2020-12-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .github/workflows/windows_tests.yaml: gh: use python installed by cygwin
  to build win dist

2020-12-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * README.md: doc: fix *slight* typo in README  Thanks @mirkov for spotting
  this.  Fixes #373.

2020-12-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .cirrus.yml: cirrus: fix centos8 repo config

2020-12-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.95-version/020-load-version.exp,
  testsuite/modules.95-version/020-unload.exp,
  testsuite/modules.95-version/022-load2.exp,
  testsuite/modules.95-version/022-unload2.exp,
  testsuite/modules.95-version/040-xgetenv.exp,
  testsuite/modules.95-version/050-fullpathentry.exp,
  testsuite/modules.95-version/090-dup-modpath-version.exp: ts: use
  reset_test_env at end of 95-version ts

  * testsuite/modules.91-sort/020-avail.exp,
  testsuite/modules.91-sort/030-whatis.exp,
  testsuite/modules.91-sort/040-load-sort.exp: ts: use reset_test_env at end
  of 91-sort ts

  * testsuite/modules.90-avail/020-single.exp,
  testsuite/modules.90-avail/030-multiple.exp,
  testsuite/modules.90-avail/040-wild.exp,
  testsuite/modules.90-avail/050-long.exp,
  testsuite/modules.90-avail/060-empty.exp,
  testsuite/modules.90-avail/070-full.exp,
  testsuite/modules.90-avail/080-noindepth.exp,
  testsuite/modules.90-avail/090-dup-modpath.exp: ts: use reset_test_env at
  end of 90-avail ts

  * testsuite/modules.80-deep/020-load-deep.exp,
  testsuite/modules.80-deep/021-unload.exp,
  testsuite/modules.80-deep/022-switch.exp,
  testsuite/modules.80-deep/030-display.exp,
  testsuite/modules.80-deep/050-whatis.exp,
  testsuite/modules.80-deep/068-transitive-deep.exp,
  testsuite/modules.80-deep/080-access-deep.exp,
  testsuite/modules.80-deep/090-deepvirt.exp: ts: use reset_test_env at end of
  80-deep ts

  * testsuite/modules.70-maint/020-update.exp,
  testsuite/modules.70-maint/030-purge.exp,
  testsuite/modules.70-maint/040-list.exp,
  testsuite/modules.70-maint/045-listlong.exp,
  testsuite/modules.70-maint/048-listlongno.exp,
  testsuite/modules.70-maint/050-whatis-load.exp,
  testsuite/modules.70-maint/055-whatis.exp,
  testsuite/modules.70-maint/056-whatis-nullpath.exp,
  testsuite/modules.70-maint/060-apropos.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/080-help.exp,
  testsuite/modules.70-maint/085-test.exp,
  testsuite/modules.70-maint/090-source.exp,
  testsuite/modules.70-maint/100-path.exp,
  testsuite/modules.70-maint/110-paths.exp,
  testsuite/modules.70-maint/120-autoinit.exp,
  testsuite/modules.70-maint/130-aliases.exp,
  testsuite/modules.70-maint/140-multiargs.exp,
  testsuite/modules.70-maint/150-append-path.exp,
  testsuite/modules.70-maint/151-prepend-path.exp,
  testsuite/modules.70-maint/152-remove-path.exp,
  testsuite/modules.70-maint/153-is-loaded.exp,
  testsuite/modules.70-maint/154-is-saved.exp,
  testsuite/modules.70-maint/155-is-used.exp,
  testsuite/modules.70-maint/156-is-avail.exp,
  testsuite/modules.70-maint/157-info-loaded.exp,
  testsuite/modules.70-maint/170-contact.exp,
  testsuite/modules.70-maint/180-reload.exp,
  testsuite/modules.70-maint/190-emptyarg.exp,
  testsuite/modules.70-maint/200-errdisp.exp,
  testsuite/modules.70-maint/210-clear.exp,
  testsuite/modules.70-maint/220-config.exp,
  testsuite/modules.70-maint/230-verbosity.exp,
  testsuite/modules.70-maint/240-icase.exp,
  testsuite/modules.70-maint/250-nan.exp,
  .../modules.70-maint/260-extended_default.exp,
  .../modules.70-maint/270-adv_version_spec.exp,
  .../modules.70-maint/271-adv_version_spec-in.exp,
  .../272-adv_version_spec-range.exp, .../273-adv_version_spec-space.exp,
  .../274-adv_version_spec-autosym.exp, .../275-adv_version_spec-loaded.exp,
  testsuite/modules.70-maint/280-ml.exp,
  testsuite/modules.70-maint/290-json.exp,
  testsuite/modules.70-maint/300-err_stack.exp,
  testsuite/modules.70-maint/310-sh-to-mod.exp: ts: use reset_test_env at end
  of 70-maint ts

  * testsuite/modules.61-coll/020-savelist.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/050-saverm.exp,
  testsuite/modules.61-coll/060-saveshow.exp,
  testsuite/modules.61-coll/080-access-coll.exp: ts: use reset_test_env at end
  of 61-coll ts

  * testsuite/modules.60-initx/015-list.exp,
  testsuite/modules.60-initx/080-access-initx.exp: ts: use reset_test_env at
  end of 60-initx ts

  * testsuite/modules.50-cmds/015-use.exp,
  testsuite/modules.50-cmds/017-use-undo.exp,
  testsuite/modules.50-cmds/020-setenv.exp,
  testsuite/modules.50-cmds/022-setenv-eschars.exp,
  testsuite/modules.50-cmds/025-setenv-undo.exp,
  testsuite/modules.50-cmds/028-setenv-refcount.exp,
  testsuite/modules.50-cmds/029-setenv-env.exp,
  testsuite/modules.50-cmds/030-unsetenv.exp,
  testsuite/modules.50-cmds/035-unsetenv-undo.exp,
  testsuite/modules.50-cmds/036-unsetenv-x.exp,
  .../modules.50-cmds/038-unsetenv-refcount.exp,
  testsuite/modules.50-cmds/039-unsetenv-env.exp,
  testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.50-cmds/042-append-delim.exp,
  testsuite/modules.50-cmds/045-append-undo.exp,
  testsuite/modules.50-cmds/047-app-del-undo.exp,
  testsuite/modules.50-cmds/049-append-env.exp,
  testsuite/modules.50-cmds/050-prepend.exp,
  testsuite/modules.50-cmds/052-prepend-delim.exp,
  testsuite/modules.50-cmds/055-prepend-undo.exp,
  testsuite/modules.50-cmds/057-pre-del-undo.exp,
  testsuite/modules.50-cmds/059-prepend-env.exp,
  testsuite/modules.50-cmds/060-remove.exp,
  testsuite/modules.50-cmds/062-remove-delim.exp,
  testsuite/modules.50-cmds/065-remove-undo.exp,
  testsuite/modules.50-cmds/069-remove-env.exp,
  testsuite/modules.50-cmds/075-alias.exp,
  testsuite/modules.50-cmds/076-alias-sub.exp,
  testsuite/modules.50-cmds/077-alias-undo.exp,
  testsuite/modules.50-cmds/078-refresh.exp,
  testsuite/modules.50-cmds/080-info-name.exp,
  testsuite/modules.50-cmds/081-info-user.exp,
  testsuite/modules.50-cmds/082-info-user-exp.exp,
  testsuite/modules.50-cmds/083-info-mode.exp,
  testsuite/modules.50-cmds/084-info-mode-exp.exp,
  testsuite/modules.50-cmds/085-info-flags.exp,
  testsuite/modules.50-cmds/086-info-shells.exp,
  testsuite/modules.50-cmds/087-info-shells-exp.exp,
  testsuite/modules.50-cmds/088-info-isloaded.exp,
  testsuite/modules.50-cmds/089-info-type.exp,
  testsuite/modules.50-cmds/095-uname.exp,
  testsuite/modules.50-cmds/099-uname-cleanup.exp,
  testsuite/modules.50-cmds/100-loglevel.exp,
  testsuite/modules.50-cmds/101-badfac.exp,
  testsuite/modules.50-cmds/105-trace.exp,
  testsuite/modules.50-cmds/110-verbose.exp,
  testsuite/modules.50-cmds/115-verbose-msg.exp,
  testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/121-prereq-module.exp,
  testsuite/modules.50-cmds/122-prereq-fullpath.exp,
  testsuite/modules.50-cmds/130-conflict-full.exp,
  testsuite/modules.50-cmds/131-conflict-module.exp,
  .../modules.50-cmds/132-conflict-fullpath.exp,
  testsuite/modules.50-cmds/140-system.exp,
  testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.50-cmds/151-module-onlytop.exp,
  testsuite/modules.50-cmds/152-module-emptyarg.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/172-swap-app-delim.exp,
  testsuite/modules.50-cmds/173-swap-app-delim.exp,
  testsuite/modules.50-cmds/175-swap2.exp,
  testsuite/modules.50-cmds/177-swap-prep-delim.exp,
  testsuite/modules.50-cmds/178-swap-prep-delim.exp,
  testsuite/modules.50-cmds/180-unload.exp,
  testsuite/modules.50-cmds/190-load.exp,
  testsuite/modules.50-cmds/195-load-recurs.exp,
  testsuite/modules.50-cmds/197-load-lots.exp,
  testsuite/modules.50-cmds/200-break.exp,
  testsuite/modules.50-cmds/210-exit.exp,
  testsuite/modules.50-cmds/220-continue.exp,
  testsuite/modules.50-cmds/230-loop.exp,
  testsuite/modules.50-cmds/240-chdir.exp,
  testsuite/modules.50-cmds/250-x-resource.exp,
  testsuite/modules.50-cmds/260-getenv.exp,
  testsuite/modules.50-cmds/269-getenv-env.exp,
  testsuite/modules.50-cmds/280-info-specified.exp,
  testsuite/modules.50-cmds/281-info-modulerc.exp,
  testsuite/modules.50-cmds/282-info-command.exp,
  testsuite/modules.50-cmds/283-info-command-exp.exp,
  testsuite/modules.50-cmds/284-info-others.exp,
  testsuite/modules.50-cmds/285-info-loaded.exp,
  testsuite/modules.50-cmds/286-info-username.exp,
  testsuite/modules.50-cmds/287-info-usergroups.exp,
  testsuite/modules.50-cmds/300-interp.exp,
  testsuite/modules.50-cmds/301-interp-command.exp,
  testsuite/modules.50-cmds/302-interp-cascaded.exp,
  testsuite/modules.50-cmds/310-puts.exp,
  testsuite/modules.50-cmds/320-is-saved.exp,
  testsuite/modules.50-cmds/321-is-used.exp,
  testsuite/modules.50-cmds/322-is-avail.exp,
  testsuite/modules.50-cmds/330-source.exp,
  testsuite/modules.50-cmds/340-modvar.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.50-cmds/359-allin-env.exp,
  testsuite/modules.50-cmds/360-restoreenv.exp,
  testsuite/modules.50-cmds/370-deps-bis.exp,
  testsuite/modules.50-cmds/370-deps-fullpath.exp,
  testsuite/modules.50-cmds/370-deps.exp,
  testsuite/modules.50-cmds/371-deps2.exp,
  testsuite/modules.50-cmds/372-deps3.exp,
  testsuite/modules.50-cmds/373-deps4.exp,
  testsuite/modules.50-cmds/374-deps5.exp,
  testsuite/modules.50-cmds/375-deps6.exp,
  testsuite/modules.50-cmds/375-order.exp,
  testsuite/modules.50-cmds/376-deps7.exp,
  .../modules.50-cmds/376-switch-change-vers.exp,
  testsuite/modules.50-cmds/376-switch.exp,
  testsuite/modules.50-cmds/377-cyclic.exp,
  testsuite/modules.50-cmds/377-deps8.exp,
  testsuite/modules.50-cmds/377-error.exp,
  testsuite/modules.50-cmds/377-opposite.exp,
  testsuite/modules.50-cmds/378-sametarget.exp,
  testsuite/modules.50-cmds/379-module-unload.exp,
  testsuite/modules.50-cmds/380-altname.exp,
  testsuite/modules.50-cmds/390-function.exp,
  testsuite/modules.50-cmds/391-function-undo.exp,
  testsuite/modules.50-cmds/400-source-sh.exp,
  testsuite/modules.50-cmds/410-modvar.exp,
  testsuite/modules.50-cmds/420-versioncmp.exp,
  testsuite/modules.50-cmds/430-implicit-req.exp,
  testsuite/modules.50-cmds/431-not-req.exp: ts: use reset_test_env at end of
  50-cmds ts

  * testsuite/modules.20-locate/030-defvers.exp,
  testsuite/modules.20-locate/031-defvers2.exp,
  testsuite/modules.20-locate/035-defname.exp,
  testsuite/modules.20-locate/038-defcontext.exp,
  testsuite/modules.20-locate/040-alias.exp,
  testsuite/modules.20-locate/043-virtual.exp,
  testsuite/modules.20-locate/045-symvers.exp,
  testsuite/modules.20-locate/046-getsym.exp,
  testsuite/modules.20-locate/047-symerrs.exp,
  testsuite/modules.20-locate/048-symexec.exp,
  testsuite/modules.20-locate/050-locrc.exp,
  testsuite/modules.20-locate/055-locrcerrs.exp,
  testsuite/modules.20-locate/057-mcookie.exp,
  testsuite/modules.20-locate/060-rc.exp,
  testsuite/modules.20-locate/065-rcerrs.exp,
  testsuite/modules.20-locate/066-modulepath-rc.exp,
  testsuite/modules.20-locate/067-hidden.exp,
  testsuite/modules.20-locate/068-transitive.exp,
  testsuite/modules.20-locate/069-cross.exp,
  testsuite/modules.20-locate/070-homerc.exp,
  testsuite/modules.20-locate/075-symlink.exp,
  testsuite/modules.20-locate/080-access.exp,
  testsuite/modules.20-locate/081-access-rc.exp,
  testsuite/modules.20-locate/090-memcache.exp,
  testsuite/modules.20-locate/100-wspace.exp,
  testsuite/modules.20-locate/110-hide.exp,
  testsuite/modules.20-locate/111-hide-hard.exp,
  testsuite/modules.20-locate/111-hide-soft.exp,
  .../modules.20-locate/112-hide-user-group.exp,
  testsuite/modules.20-locate/113-hide-all-opt.exp,
  .../modules.20-locate/114-hide-before-after.exp,
  testsuite/modules.20-locate/115-forbid.exp,
  .../modules.20-locate/116-forbid-before-after.exp,
  .../modules.20-locate/117-forbid-user-group.exp,
  testsuite/modules.20-locate/119-hide-cascading.exp: ts: use reset_test_env
  at end of 20-locate ts

  * testsuite/modules.10-use/030-use.exp,
  testsuite/modules.10-use/031-append.exp,
  testsuite/modules.10-use/032-prepend.exp,
  testsuite/modules.10-use/040-load-use.exp,
  testsuite/modules.10-use/070-unuse.exp,
  testsuite/modules.10-use/080-access-use.exp,
  testsuite/modules.10-use/090-bad.exp: ts: use reset_test_env at end of
  10-use ts

  * testsuite/modules.00-init/015-version.exp,
  testsuite/modules.00-init/090-switches.exp,
  testsuite/modules.00-init/100-pager.exp,
  testsuite/modules.00-init/110-quar.exp,
  testsuite/modules.00-init/120-siteconfig.exp,
  testsuite/modules.00-init/130-auto_handling.exp,
  testsuite/modules.00-init/140-color.exp,
  testsuite/modules.00-init/150-access-init.exp,
  testsuite/modules.00-init/160-multilib.exp: ts: use reset_test_env at end of
  00-init ts

  * testsuite/install.00-init/005-init_ts.exp,
  testsuite/install.00-init/020-module.exp,
  testsuite/install.00-init/022-module-compat.exp,
  testsuite/install.00-init/024-ml.exp,
  testsuite/install.00-init/025-autoinit.exp,
  testsuite/install.00-init/030-options.exp,
  testsuite/install.00-init/040-subshell.exp,
  testsuite/install.00-init/050-crossshell.exp,
  testsuite/install.00-init/060-quar.exp,
  testsuite/install.00-init/070-stderrtty.exp,
  testsuite/install.00-init/080-args.exp,
  testsuite/install.00-init/090-sh-to-mod.exp: ts: use reset_test_env at end
  of install ts

  * script/mt, testsuite/config/base-config.exp,
  testsuite/install.00-init/011-save_test_env.exp,
  testsuite/modules.00-init/085-save_test_env.exp,
  testsuite/modules.60-initx/010-init_ts.exp,
  testsuite/modules.60-initx/999-cleanup.exp,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/999-cleanup.exp,
  testsuite/modules.70-maint/010-init_ts.exp,
  testsuite/modules.70-maint/999-cleanup.exp,
  testsuite/modules.80-deep/010-init_ts.exp,
  testsuite/modules.80-deep/999-cleanup.exp,
  testsuite/modules.91-sort/010-init_ts.exp,
  testsuite/modules.91-sort/999-cleanup.exp,
  testsuite/modules.95-version/010-init_ts.exp,
  testsuite/modules.95-version/999-cleanup.exp: ts: add test env save/restore
  mechanism  Add the save_test_env and reset_test_env procedure to record
  original test environment (global and environment variables) and restore it
  once a test set has been done.

  * testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.50-cmds/010-init_ts.exp,
  testsuite/modules.50-cmds/999-cleanup.exp: ts: clear testsuite env var prior
  starting tests

  * testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.00-init/120-siteconfig.exp,
  testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.50-cmds/050-prepend.exp,
  testsuite/modules.50-cmds/095-uname.exp,
  testsuite/modules.50-cmds/250-x-resource.exp,
  testsuite/modules.50-cmds/286-info-username.exp,
  testsuite/modules.50-cmds/287-info-usergroups.exp,
  testsuite/modules.70-maint/220-config.exp,
  testsuite/modules.70-maint/310-sh-to-mod.exp: ts: save orig PATH value in a
  global ORIG_PATH var

  * testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.00-init/150-access-init.exp,
  testsuite/modules.20-locate/060-rc.exp,
  testsuite/modules.20-locate/065-rcerrs.exp,
  testsuite/modules.20-locate/069-cross.exp,
  testsuite/modules.20-locate/081-access-rc.exp,
  testsuite/modules.20-locate/110-hide.exp,
  testsuite/modules.20-locate/111-hide-hard.exp,
  testsuite/modules.20-locate/111-hide-soft.exp,
  testsuite/modules.20-locate/112-hide-user-group.exp,
  testsuite/modules.20-locate/113-hide-all-opt.exp,
  testsuite/modules.20-locate/114-hide-before-after.exp,
  testsuite/modules.20-locate/115-forbid.exp,
  testsuite/modules.20-locate/116-forbid-before-after.exp,
  testsuite/modules.20-locate/117-forbid-user-group.exp,
  testsuite/modules.20-locate/119-hide-cascading.exp,
  testsuite/modules.50-cmds/375-deps6.exp,
  testsuite/modules.50-cmds/377-deps8.exp,
  testsuite/modules.50-cmds/377-opposite.exp,
  testsuite/modules.50-cmds/380-altname.exp,
  testsuite/modules.70-maint/130-aliases.exp,
  testsuite/modules.70-maint/220-config.exp,
  testsuite/modules.70-maint/290-json.exp,
  testsuite/modules.80-deep/090-deepvirt.exp,
  testsuite/modules.90-avail/030-multiple.exp,
  testsuite/modules.90-avail/040-wild.exp,
  testsuite/modules.90-avail/050-long.exp,
  testsuite/modules.90-avail/060-empty.exp: ts: save orig MODULERCFILE value
  in a global var

  * testsuite/modules.00-init/080-begenv.exp,
  testsuite/modules.20-locate/070-homerc.exp,
  testsuite/modules.20-locate/081-access-rc.exp,
  testsuite/modules.50-cmds/282-info-command.exp,
  testsuite/modules.50-cmds/283-info-command-exp.exp,
  testsuite/modules.50-cmds/320-is-saved.exp,
  testsuite/modules.60-initx/010-init_ts.exp,
  testsuite/modules.60-initx/999-cleanup.exp,
  testsuite/modules.61-coll/020-savelist.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/050-saverm.exp,
  testsuite/modules.61-coll/060-saveshow.exp,
  testsuite/modules.61-coll/080-access-coll.exp,
  testsuite/modules.70-maint/154-is-saved.exp,
  testsuite/modules.70-maint/240-icase.exp: ts: save orig HOME value in a
  global ORIG_HOME var

  * testsuite/modules.61-coll/999-cleanup.exp,
  testsuite/modules.95-version/999-cleanup.exp: ts: clear temp vars used in
  61-coll/95-version tests

2020-12-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .cirrus.yml: cirrus: test with R on OSX instance

  * testsuite/config/base-config.exp, testsuite/install.00-init/006-procs.exp,
  testsuite/modules.00-init/006-procs.exp: ts: share base code between
  testsuites  Use dejagnu 'base-config' file to share code between the two
  testsuites.

  * testsuite/config/unix.exp: ts: collect install test output through pipes
  Alternative method to collect stdout and stderr from command execution (on
  Tcl>=8.6): use channel pipe instead of saving these outputs in file.

  * testsuite/config/unix.exp, testsuite/install.00-init/006-procs.exp,
  testsuite/install.00-init/020-module.exp,
  testsuite/install.00-init/024-ml.exp,
  testsuite/install.00-init/030-options.exp,
  testsuite/install.00-init/070-stderrtty.exp,
  testsuite/install.00-init/080-args.exp: ts: do not ignore newline returned
  at install result end  Update install tests not to ignore the newline
  returned at the end of stdout and stderr output.

2020-12-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/020-module.exp,
  testsuite/install.00-init/022-module-compat.exp,
  testsuite/install.00-init/024-ml.exp,
  testsuite/install.00-init/025-autoinit.exp,
  testsuite/install.00-init/030-options.exp,
  testsuite/install.00-init/040-subshell.exp,
  testsuite/install.00-init/050-crossshell.exp,
  testsuite/install.00-init/070-stderrtty.exp: ts: fix expected regexp on
  install test now full str is matched

  * testsuite/install.00-init/006-procs.exp,
  testsuite/install.00-init/010-environ.exp,
  testsuite/install.00-init/020-module.exp,
  testsuite/install.00-init/024-ml.exp,
  testsuite/install.00-init/040-subshell.exp,
  testsuite/install.00-init/050-crossshell.exp,
  testsuite/install.00-init/060-quar.exp,
  testsuite/install.00-init/070-stderrtty.exp,
  testsuite/install.00-init/080-args.exp: ts: install ts now checks for full
  string match

2020-12-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .appveyor.yml, .gitattributes: appveyor: remove config, tests are migrated
  to GH Actions

  * CONTRIBUTING.rst, README.md, script/mtreview: doc/script: windows CI tests
  are now on GitHub Actions

  * testsuite/modules.20-locate/100-wspace.exp,
  testsuite/modules.90-avail/080-noindepth.exp: ts: skip symlink tests if
  cannot create it on 20/100 & 90/080

2020-11-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .github/workflows/windows_tests.yaml: gh: port Windows tests from AppVeyor
  to GH Actions

2020-11-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/config/unix.exp: ts: remove need to use thread to collect test
  outputs

2020-11-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/config/unix.exp: ts: collect tests output through pipes and
  thread  Alternative method to collect stdout and stderr from command
  execution (on Tcl>=8.6 and if Thread package is available): use channel pipe
  and threads instead of saving these outputs in file.

  * testsuite/config/unix.exp, testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.00-init/160-multilib.exp,
  testsuite/modules.20-locate/113-hide-all-opt.exp,
  testsuite/modules.20-locate/115-forbid.exp,
  testsuite/modules.50-cmds/152-module-emptyarg.exp,
  testsuite/modules.61-coll/060-saveshow.exp,
  testsuite/modules.61-coll/080-access-coll.exp,
  testsuite/modules.70-maint/120-autoinit.exp,
  testsuite/modules.70-maint/150-append-path.exp,
  testsuite/modules.70-maint/152-remove-path.exp,
  testsuite/modules.70-maint/190-emptyarg.exp: ts: do not ignore newline
  returned at result end  Update tests not to ignore the newline returned at
  the end of stdout and stderr output.

2020-11-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .gitattributes, .travis.yml: travis: remove config, tests are migrated to
  GH Actions

2020-11-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * script/mtreview: script: add diff config for GHA in 'mtreview'

  * CONTRIBUTING.rst, README.md: doc: linux CI tests are now on GitHub Actions

  * doc/source/cookbook/hide-and-forbid-modules.rst: doc: fix code-block
  syntax issue in hide-and-forbid-modules  An argument value was missing for a
  code-block in the hide-and-forbid-modules cookbook recipe. Set value to
  none, as this block cannot be highlighted as Tcl code.

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/120-siteconfig.exp: ts: skip tests relying on a
  stdin attached to tty  In case stdin is not attached to a tty

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.20-locate/110-hide.exp,
  testsuite/modules.20-locate/115-forbid.exp,
  testsuite/modules.50-cmds/095-uname.exp,
  testsuite/modules.50-cmds/151-module-onlytop.exp,
  testsuite/modules.50-cmds/152-module-emptyarg.exp,
  testsuite/modules.50-cmds/284-info-others.exp,
  testsuite/modules.50-cmds/286-info-username.exp,
  testsuite/modules.50-cmds/287-info-usergroups.exp,
  testsuite/modules.50-cmds/330-source.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/080-help.exp,
  testsuite/modules.70-maint/085-test.exp,
  testsuite/modules.70-maint/120-autoinit.exp,
  testsuite/modules.70-maint/170-contact.exp,
  testsuite/modules.70-maint/300-err_stack.exp: ts: fix ans escaping to cope
  with block content output

2020-11-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/config/unix.exp, testsuite/install.00-init/005-init_ts.exp: ts:
  ignore ruby insecure dir msg

  * script/mt: script: remove --base64-failed-log opt from mt script  Remove
  the --base64-failed-log option from the mt script as there is no more need
  to output full test output serialized since the CI systems now used can
  upload the test log files as artifact.

2020-11-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .github/workflows/linux_tests.yaml: gh: port Linux tests from Travis to GH
  Actions

2020-11-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/cookbook/test-modulefiles.rst: doc: fix missing space in
  test-modulefiles rcp  Thanks to Aurélien Degrémont for spotting this issue.

2020-11-16  Colin Marquardt <cmarqu42@gmail.com>

  * doc/source/cookbook/test-modulefiles.rst: doc: add proper ReST references
  in test-modulefiles rcp

  * .../test-modulefiles/modulefiles/test_dir_and_file: doc: use versioned
  cookie+getenv in test-modulefiles rcp  Use versioned magic cookie and getenv
  over $env

2020-11-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst, NEWS.rst: doc: desc. 'loaded' sym in NEWS/MIGRATING

  * doc/source/module.rst: doc: desc. 'loaded' sym in module(1) man

  * testsuite/modulefiles.3/advvers/1.0,
  testsuite/modules.00-init/005-init_ts.exp,
  .../275-adv_version_spec-loaded.exp: ts: test 'loaded' auto sym in 70/275

2020-11-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Add 'loaded' auto sym to designated loaded version  Add
  the `loaded` symbolic version among the advanced version specifier to
  designate the currently loaded version of designated module. An error is
  returned if no matching module is currently loaded.  Fixes #366

2020-10-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc. state changes in NEWS

2020-10-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/120-siteconfig.exp,
  testsuite/modules.50-cmds/286-info-username.exp,
  testsuite/modules.50-cmds/287-info-usergroups.exp,
  testsuite/modules.70-maint/220-config.exp,
  testsuite/modules.70-maint/230-verbosity.exp: ts: update tests for runtime
  state handling changes

  * modulecmd.tcl.in: Exclude new state helper procs from debug2  Do not
  pollute debug2 output with the numerous calls to the new runtime state
  helper procedures (lpopState currentState depthState).

  * modulecmd.tcl.in: No definition record for basic states  Remove the need
  to record the definition of runtime states in the g_state_defs global array
  for states with no specific properties.

  * modulecmd.tcl.in: Use directly depthState on reportholdid rather
  isReportHeld  Remove isReportHeld procedure and rebase calls directly on
  depthState with reportholdid state.

  * modulecmd.tcl.in: Rebase llength+getState calls on depthState  Use
  depthState specific procedure rather calling llength on getState result.

  * modulecmd.tcl.in: Use depthState rather getEvalModuleStackDepth  Remove
  getEvalModuleStackDepth procedure and use depthState procedure over
  modulename state instead

  * modulecmd.tcl.in: Add depthState proc  Add the depthState helper procedure
  that returns the number of elements in the list of values for specified
  state.

  * modulecmd.tcl.in: Migrate evalid to state struct

  * modulecmd.tcl.in: Migrate msgrecordid to state struct

  * modulecmd.tcl.in: Add topState proc  Add the topState helper procedure
  that returns the first element from the list of values for specified state.

  * modulecmd.tcl.in: Migrate debug_msg_prefix to state struct

  * modulecmd.tcl.in: Migrate reportholdid to state struct

  * modulecmd.tcl.in: Migrate commandname to state struct

  * modulecmd.tcl.in: Migrate specifiedname to state struct

  * modulecmd.tcl.in: Drop ::ModulesCurrentModulefile outside of eval context
  Rely on modulefile current state value rather use a distinct global variable
  named ::ModulesCurrentModulefile outside of modulefile or modulerc
  evaluation context.

2020-10-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Migrate modulefile to state struct

  * modulecmd.tcl.in: Migrate modulename to state struct

  * modulecmd.tcl.in: Migrate mode to state struct

  * modulecmd.tcl.in: Migrate always_read_full_file to state struct

2020-10-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Remove dup appending val with lappendState only if
  -nodup set  Update the lappendState procedure to clear duplicate entries to
  append only if the `-nodup` option is set as first argument.

2020-10-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc. lpopState/currentState in NEWS

  * NEWS.rst: doc: desc. implicit_requirement/--not-req in NEWS

  * .travis.yml: travis: add --disable-implicit-requirement to a test case

  * doc/source/modulefile.rst: doc: desc. --not-req in modulefile(4) man

  * doc/source/module.rst: doc: desc. implicit_requirement in module(1) man

2020-10-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/notreq/load,
  testsuite/modulefiles.3/notreq/loaderr,
  testsuite/modulefiles.3/notreq/loadmul,
  testsuite/modulefiles.3/notreq/loadsubm,
  testsuite/modulefiles.3/notreq/loadsubp,
  testsuite/modulefiles.3/notreq/loadunk, testsuite/modulefiles.3/notreq/mix,
  testsuite/modulefiles.3/notreq/prereq,
  testsuite/modulefiles.3/notreq/switch1,
  testsuite/modulefiles.3/notreq/switch1err,
  testsuite/modulefiles.3/notreq/switch1unk,
  testsuite/modulefiles.3/notreq/switch2,
  testsuite/modulefiles.3/notreq/switchsubm,
  testsuite/modulefiles.3/notreq/switchsubp,
  testsuite/modulefiles.3/notreq/unload,
  testsuite/modulefiles.3/notreq/unloaderr,
  testsuite/modulefiles.3/notreq/unloadmul,
  testsuite/modulefiles.3/notreq/use,
  testsuite/modules.50-cmds/431-not-req.exp: ts: test --not-req option in
  50/431

  * modulecmd.tcl.in: Do not rely on auto_handling if implicit req disabled
  Do not rely on the auto_handling code to solve dependency implied by 'module
  unload' or 'module switch' commands during an unload evaluation if implicit
  requirement feature is disabled as no requirement were recorded for these
  commands on load phase.

2020-10-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.3/bar/1.0, testsuite/modulefiles.3/bar/2.0,
  testsuite/modulefiles.3/baz/1.0, testsuite/modulefiles.3/baz/2.0,
  testsuite/modulefiles.3/foo/0.err, testsuite/modulefiles.3/foo/0.load,
  testsuite/modulefiles.3/foo/0.prereq, testsuite/modulefiles.3/foo/1.0,
  testsuite/modulefiles.3/foo/2.0, testsuite/modulefiles.3/impreq/load,
  testsuite/modulefiles.3/impreq/loaderr,
  testsuite/modulefiles.3/impreq/loadmul,
  testsuite/modulefiles.3/impreq/loadsubm,
  testsuite/modulefiles.3/impreq/loadsubp,
  testsuite/modulefiles.3/impreq/loadunk, testsuite/modulefiles.3/impreq/mix,
  testsuite/modulefiles.3/impreq/prereq,
  testsuite/modulefiles.3/impreq/switch1,
  testsuite/modulefiles.3/impreq/switch1err,
  testsuite/modulefiles.3/impreq/switch1unk,
  testsuite/modulefiles.3/impreq/switch2,
  testsuite/modulefiles.3/impreq/switchsubm,
  testsuite/modulefiles.3/impreq/switchsubp,
  testsuite/modulefiles.3/impreq/unload,
  testsuite/modulefiles.3/impreq/unloaderr,
  testsuite/modulefiles.3/impreq/unloadmul,
  testsuite/modules.50-cmds/430-implicit-req.exp: ts: test disabled
  implicit_requirement conf in 50/430

2020-10-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Extend req recording inhibition to switch subcontext

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.70-maint/220-config.exp: ts: ensure implicit requirement
  is enabled for tests

  * doc/source/diff_v3_v4.rst: doc: desc. --not-req in diff doc

2020-10-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Inhibit requirement record  Inhibit prereq or conflict
  requirement record on module load, module unload or module switch if
  implicit_requirement option is disabled or --not-user option is set.  Add an
  inhibit_req_record state to track whether requirement should be recorded or
  not.  Fixes #260

  * testsuite/modules.70-maint/220-config.exp: ts: adapt existing test for
  implicit_requirement conf

  * modulecmd.tcl.in: Add lpopState/currentState procs  Add the lpopState and
  currentState helper procedures that respectively remove last element or
  return last element from list value of specified state.

  * modulecmd.tcl.in: Add --not-req opt to module {load,unload,switch} in
  modfile  Add the --not-req option for the module load, module unload and
  module switch commands when used in modulefile. When set, specified modules
  to load, unload of part of a switch are not recorded as requirement for
  currently evaluating modulefile.

  * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in,
  init/zsh-functions/_module.in: init: add implicit_requirement config to
  completion scripts

  * doc/source/diff_v3_v4.rst: doc: desc. MODULES_IMPLICIT_REQUIREMENT in diff

  * INSTALL.rst: doc: desc. --enable-implicit-requirement in INSTALL

  * Makefile, Makefile.inc.in, configure, modulecmd.tcl.in, site.exp.in: Add
  implicit_requirement config  Introduce the implicit_requirement
  configuration option to control whether a prereq or conflict requirement
  should be implicitly set toward modules respectively specified on module
  load or module unload commands in modulefile.  Default value for option
  could be set at configure time with the --enable-implicit-requirement option
  (enabled by default). This value could be superseded by setup of
  implicit_requirement option with config sub-command. Which set the
  MODULES_IMPLICIT_REQUIREMENT environment variable.

2020-10-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/050-crossshell.exp: ts: add cross shell tests
  with shells_with_ksh_fpath

  * NEWS.rst: doc: desc. shells_with_ksh_fpath in NEWS

  * doc/source/module.rst: doc: desc. shells_with_ksh_fpath in module(1)

2020-10-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/modulerc-1.in,
  testsuite/modules.70-maint/120-autoinit.exp: ts: test shells_with_ksh_fpath
  in 70/120

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.70-maint/220-config.exp: ts: adapt existing tests for
  shells_with_ksh_fpath

  * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in,
  init/zsh-functions/_module.in: init: add shells_with_ksh_fpath config to
  completion scripts

2020-10-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/diff_v3_v4.rst: doc: desc. MODULES_SHELLS_WITH_KSH_FPATH in
  diff doc

  * modulecmd.tcl.in: Add shells_with_ksh_fpath config  Introduce
  `shells_with_ksh_fpath` configuration to define shells where the FPATH
  environment has to be defined to target ksh function directory. Value for
  this configuration can be set through the MODULES_SHELLS_WITH_KSH_FPATH
  environment variable.  Fixes #364

  * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: ts: adapt
  test to FPATH setup change for ksh

  * init/ksh.in, modulecmd.tcl.in: Define FPATH during autoinit for ksh shell
  When initializing module on ksh shell with the autoinit sub-command, add to
  the FPATH environment variable the directory where module function is
  defined. Which helps to get module function defined in ksh interactive and
  non-interactive sub-shells.  This FPATH setup for ksh shell was previously
  done in ksh initialization script.

  * NEWS.rst: doc: desc. MODULES_LMALTNAME/list changes in NEWS

  * doc/source/module.rst: doc: MODULES_LMALTNAME used on list to report syms

  * testsuite/modules.70-maint/040-list.exp,
  testsuite/modules.70-maint/045-listlong.exp: ts: new list report tests with
  syms

2020-10-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/140-color.exp,
  testsuite/modules.20-locate/100-wspace.exp,
  testsuite/modules.50-cmds/281-info-modulerc.exp,
  testsuite/modules.70-maint/045-listlong.exp,
  testsuite/modules.70-maint/280-ml.exp: ts: adapt tests for loaded mod sym
  fetch change

  * modulecmd.tcl.in: Report sym recorded in env on list sub-command  Use
  symbolic versions recorded in environment, with MODULES_LMALTNAME variable,
  to report symbols applying to loaded modules on list sub-command.  This
  change removes the need to evalute modulercs to fetch symbolic versions for
  loaded modules, which leads to significant performance improvement for the
  list sub-command.

  * modulecmd.tcl.in: Simplify mtime fetch in cmdModuleList  Fetch file
  modification time only if required by module list display format.

2020-10-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.10-use/080-access-use.exp,
  testsuite/modules.20-locate/048-symexec.exp,
  testsuite/modules.20-locate/050-locrc.exp,
  testsuite/modules.20-locate/060-rc.exp,
  testsuite/modules.20-locate/066-modulepath-rc.exp,
  testsuite/modules.20-locate/067-hidden.exp,
  testsuite/modules.20-locate/068-transitive.exp,
  testsuite/modules.20-locate/069-cross.exp,
  testsuite/modules.20-locate/075-symlink.exp,
  testsuite/modules.20-locate/100-wspace.exp,
  testsuite/modules.20-locate/110-hide.exp,
  testsuite/modules.20-locate/111-hide-hard.exp,
  testsuite/modules.20-locate/111-hide-soft.exp,
  testsuite/modules.20-locate/115-forbid.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/375-deps6.exp,
  testsuite/modules.50-cmds/377-deps8.exp,
  testsuite/modules.50-cmds/377-opposite.exp,
  testsuite/modules.50-cmds/380-altname.exp,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.70-maint/230-verbosity.exp,
  testsuite/modules.70-maint/240-icase.exp,
  .../modules.70-maint/270-adv_version_spec.exp,
  .../modules.70-maint/271-adv_version_spec-in.exp,
  .../272-adv_version_spec-range.exp, .../273-adv_version_spec-space.exp,
  .../274-adv_version_spec-autosym.exp,
  testsuite/modules.80-deep/010-init_ts.exp,
  testsuite/modules.80-deep/068-transitive-deep.exp: ts: update
  MODULES_LMALTNAME for new alias prefix

  * doc/source/module.rst: doc: desc alt name prefixes used in
  MODULES_LMALTNAME

  * modulecmd.tcl.in: Flag alias in MODULES_LMALTNAME  Distinguish aliases
  from symbolic versions in MODULES_LMALTNAME environment variable. Prefix
  these alias entries with the `al|` string.

2020-10-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .../modulefiles/bar/.common, .../modulefiles/bar/.modulerc,
  .../new-features-without-breaking-old-module.rst: doc: update
  new-features-without-breaking-old-module recipe  Describe use of new
  ModuleTool and ModuleToolVersion Tcl variables as well as versioncmp
  modulefile command.

  * MIGRATING.rst: doc: mention Lmod support for ModuleTool&co in MIGRATING

2020-10-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .cirrus.yml, Makefile, testsuite/example/.modulespath-wild.in: ts: test
  wildcard char in modulespath conf

  * NEWS.rst, modulecmd.tcl.in: Use of wildcard char to designate dirs in
  modulespath  Enable the use of wildcard character to designate multiple
  directories at once in modulespath configuration file.  Fixes #125

  * testsuite/modulefiles.3/versioncmp/.modulerc,
  testsuite/modulefiles.3/versioncmp/1.0,
  testsuite/modules.50-cmds/420-versioncmp.exp: ts: test versioncmp in 50/420

  * configure, site.exp.in, testsuite/modulefiles.3/mfvar/.modulerc,
  testsuite/modulefiles.3/mfvar/1.0, testsuite/modulefiles.3/mfvar/2.0,
  testsuite/modules.50-cmds/410-modvar.exp: ts: test
  ModuleTool/ModuleToolVersion in 50/410

2020-10-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc. versioncmp in NEWS

  * MIGRATING.rst: doc: desc versioncmp in MIGRATING

  * MIGRATING.rst: doc: simplify TOC of MIGRATING document

  * doc/source/modulefile.rst: doc: desc. new versioncmp command in
  modulefile(4)

  * doc/source/conf.py, doc/source/modulefile.rst: doc: desc. ModuleTool and
  ModuleToolVersion in modulefile(4)

  * doc/source/conf.py, doc/source/modulefile.rst: doc: add new 'mfvar' sphinx
  directive/role

  * doc/source/diff_v3_v4.rst: doc: desc. versioncmp new elements in diff doc

2020-10-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Introduce 'versioncmp' modulefile command  Compare two
  version strings and return -1, 0 or 1 respectively if first version string
  is lower, equal or higher than second version string specified.

  * modulecmd.tcl.in: Record module tool properties on eval interp  For each
  modulefile or modulerc Tcl interpreter created, initialize the global
  variables ModuleTool and ModuleToolVersion with the information relative to
  the module tool in use. Which help to know how modulefiles or modulerc
  should be written, what features can be used or not.

2020-11-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, contrib/rpm/environment-modules.spec.in, version.inc.in: Release
  of version 4.6.1

  * testsuite/modulefiles.2/hide1/.modulerc,
  .../modules.20-locate/114-hide-before-after.exp,
  .../modules.20-locate/116-forbid-before-after.exp: ts: fix tested future
  date for tests on 32bit sys

2020-11-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .../hide-and-forbid-modules/modulefiles/.modulerc,
  .../hide-and-forbid-modules/modulefiles/appA/1.0,
  .../hide-and-forbid-modules/modulefiles/appA/2.0,
  .../hide-and-forbid-modules/modulefiles/appB/1.0,
  .../hide-and-forbid-modules/modulefiles/appB/2.0,
  .../modulefiles/bioappA/1.0, .../modulefiles/bioappA/2.0,
  .../modulefiles/bioappB/1.0, .../modulefiles/bioappB/2.0,
  .../modulefiles/chemappA/1.0, .../modulefiles/chemappA/2.0,
  .../modulefiles/chemappB/1.0, .../modulefiles/chemappB/2.0,
  .../modulefiles/deplibA/1.0, .../modulefiles/deplibA/2.0,
  .../modulefiles/deplibB/1.0, .../modulefiles/deplibB/2.0,
  doc/source/cookbook/hide-and-forbid-modules.rst: doc: add
  'hide-and-forbid-modules' cookbook recipe

2020-11-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.50-cmds/377-error.exp: Skip unload of
  depended mods on purge  When a module fails to unload during a `purge`
  sub-command, preserve loaded the modules it requires to keep environment
  consistent.  Fixes #370

2020-11-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.20-locate/110-hide.exp,
  testsuite/modules.20-locate/111-hide-hard.exp: ts: fix hide tests for sym
  resolution update

2020-11-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Drop result cache in isModuleHidden  Recheck module
  hiddenness each time isModuleHidden procedure is called. Drop cache result
  of this procedure to ensure hiddenness is checked against up-to-date
  module-hide definitions.  Fix module hiddenness resolution for symbolic
  versions defined in a global RC file when module-hide statements are set in
  the modulepath where the modulefiles targeted by these symbols are located.
  Fixes #369

2020-10-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Add global/user rc def to module symbol list in any
  cases  When building the module symbol list in phase #1 of getModules
  procedure, also add the definitions coming from global or user rc files even
  if rc definitions should not be part of the result. As these symbolic names
  may match query and make their targetted module from the currently searched
  directory included in result.  Fixes #368

2020-11-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.70-maint/210-clear.exp,
  testsuite/modules.70-maint/280-ml.exp: Unset MODULES_LMSOURCESH with clear
  sub-cmd  Fix `clear` sub-command to unset the MODULES_LMSOURCESH environment
  variable.  Fixes #367

  * .cirrus.yml: cirrus: adapt make command name to build env

  * .cirrus.yml: cirrus: use template for build/install/uninstall scripts

2020-11-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/modulefile.rst: doc: remove duplicate envvar desc. section

  * .appveyor.yml: appveyor: use latest Win image to get msys2 ok

  * CONTRIBUTING.rst, README.md: doc: update desc. related to CI systems used

  * .cirrus.yml: cirrus: use template for tests and split test phases

  * .cirrus.yml: cirrus: make a dedicated template for git clone script

  * .travis.yml: travis: factorize linux test cases

2020-11-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .cirrus.yml: cirrus: expose test log files as artifacts

  * .travis.yml: travis: cleanup useless code now some tests are migrated

  * .cirrus.yml, .travis.yml: travis/cirrus: migrate first Ubuntu test case to
  Cirrus CI

2020-11-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .cirrus.yml, .travis.yml: travis/cirrus: migrate OpenSUSE test cases to
  Cirrus CI

  * .cirrus.yml: cirrus: FreeBSD test cases just need 1 cpu

  * testsuite/install.00-init/005-init_ts.exp: ts: ignore ruby warning when
  tests are run from /tmp

  * .cirrus.yml, .travis.yml: travis/cirrus: migrate CentOS test cases to
  Cirrus CI

  * .travis.yml: travis: remove non-essential CentOS tests

  * testsuite/modules.70-maint/150-append-path.exp,
  testsuite/modules.70-maint/152-remove-path.exp: ts: adapt DYLD warning msg
  on new OSX test env

2020-11-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .cirrus.yml, .travis.yml: travis/cirrus: migrate OSX test case to Cirrus
  CI

2020-10-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/diff_v3_v4.rst: doc: desc. shell special chars escaping in diff
  doc  Shell special characters like backticks are escaped when used in values
  starting Modules 4.  Fixes #365

  * doc/source/diff_v3_v4.rst: doc: fix typo on 4.5 and 4.6 envvar desc.

2020-10-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/modulefile.rst: doc: rework module-{hide,forbid} option
  description

2020-10-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: add anchor for each feature release in NEWS

  * NEWS.rst: doc: fix typo on 4.6.0 title in NEWS

  * doc/source/diff_v3_v4.rst: doc: fix typos in diff doc for 4.6 new mf cmds

2020-10-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .../modulefiles/.modulerc, .../modulefiles/foo/1.1,
  .../modulefiles/foo/1.2, .../new-features-without-breaking-old-module.rst:
  doc: add 'new-features-without-breaking-old-module' recipe

2020-09-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/hide-or-forbid-modulefile.rst: doc: clarify hide-forbid
  design regarding retained rule

2020-09-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.20-locate/115-forbid.exp: Optimize
  module tag search  Optimize internal recording of module tag specification
  inherited from module-forbid commands found when parsing modulerc files.
  Thus time taken to fetch a given tag applying to a module is reduced.
  Record module tag specification in an array where key is module root name
  and each tag has its own list of module specification/associated properties
  couplet applying to it. When looking if a given module matches a given tag,
  the associated properties to the tag from first matching module
  specification is returned.

2020-09-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * script/mb: script: add ability to select test to perform on 'mb'

  * modulecmd.tcl.in: Filter entries in phase 2 of getModules for simple
  searches  Apply an early filter to remove entries not matching search query
  module root in phase 2 of getModules procedure. Doing so improve
  performances of whatis and search sub-commands.  Only proceed with this
  early filtering for basic searches (non wild, non contains and no wildcard
  character in searched module root name).

2020-09-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Optimize hidden property search  Optimize internal
  recording of hidden module specification when parsing modulerc files in
  order to reduce the time taken to test if a given module is hidden or not.
  Record hidden module specification in an array where key is module root
  name. So it can be easy to check if there is some hidden specification to
  test for a given module (based on root name). Within each array entry hidden
  module specifications are sorted by hidden level to be able to search these
  specifications from strongest to weakest hidding level.

  * modulecmd.tcl.in: Save/get module root name from module name and vers spec
  When parsing module version specifiers compute the module root name and
  record it in module version spec structure.  Add the
  getModuleRootFromVersSpec procedure to fetch module root name from a module
  version spec.

2020-09-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .travis.yml, Makefile, testsuite/modules.00-init/100-pager.exp,
  testsuite/modules.00-init/160-multilib.exp: ts/travis: test multilib support
  with use of alt lib

2020-09-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.70-maint/270-adv_version_spec.exp:
  Raise error if mod spec is equal to '@'  When full module specification is
  equal to `@`, raise an error as no module name is provided.  Fixes #362

2020-09-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/sh-to-mod.csh, testsuite/example/sh-to-mod.fish,
  testsuite/example/sh-to-mod.sh,
  testsuite/modules.70-maint/310-sh-to-mod.exp: ts: improve coverage of
  sh-to-mod proc

2020-09-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * script/mb: script: drop profiling of <4.4 releases in mb

  * lib/configure.ac: lib: bump version to 1.2.0

  * lib/configure.ac, lib/envmodules.c: lib: include missing
  stdio.h/_ISOC99_SOURCE for snprintf

  * testsuite/modules.50-cmds/400-source-sh.exp: ts: display loaded mod with
  MODULES_LMSOURCESH cleared

2020-09-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/272-adv_version_spec-range.exp: ts: improve
  coverage of modVersCmpProcIcaseExtdfl proc

  * testsuite/modules.00-init/140-color.exp: ts: test --color opt set to an
  unknown value

  * testsuite/modules.00-init/071-args.exp: ts: improve coverage of
  parseModuleCommandArgs proc

  * modulecmd.tcl.in: findModules proc is always called on mod root  Clean up
  code relative to call over deep module name, which are not made anymore.

  * modulecmd.tcl.in: No need to test if 'ml' was called within modulefile  As
  'ml' is not defined as a valid command for modulefile or modulerc
  interpreters.

  * modulecmd.tcl.in: Remove nextargisign from parseApplicationCriteriaArgs
  proc  nextargisign variable defined in parseApplicationCriteriaArgs is
  useless as it was only set after an error raise. So it was never reached.

  * testsuite/modules.20-locate/110-hide.exp: ts: improve coverage of eqspec
  mode of modEq proc

  * modulecmd.tcl.in, testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/120-siteconfig.exp: Remove useless psuf arg on
  modEq proc  Pattern suffix is not used anymore in modEq comparison procedure
  (it is only useful for modEqStatic procedure). So remove this useless
  argument.

2020-09-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/120-siteconfig.exp: ts: check parseDateTimeArg lib
  func against bad date

  * .appveyor.yml: appveyor: need to set TZ for date time tests on MSYS

2020-09-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile, lib/.gitignore, lib/Makefile.in, lib/testutil-mktime.c,
  testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/120-siteconfig.exp: ts/lib: test tcl ext lib
  against a failed mktime call  Add an utility library that supersedes the
  mktime function from libc. The mktime function from this added library
  always returns an error (-1). It is used for coverage test of the mktime
  call made within the Envmodules_ParseDateTimeArgObjCmd function of the Tcl
  extension library.

  * testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/120-siteconfig.exp: ts: test parseDateTimeArg proc
  with no arg in 00/120

2020-09-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * script/mb: script: fix min version condition bench test

  * lib/envmodules.c, lib/envmodules.h, modulecmd.tcl.in: lib: implement
  parseDateTimeArg  Add function in libtclenvmodules to implement
  'parseDateTimeArg' as a Tcl command, which provides a more efficient way to
  convert a datetime string into an Epoch time.

2020-09-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile, lib/.gitignore, lib/Makefile.in, lib/testutil-time.c,
  testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/120-siteconfig.exp: ts/lib: test tcl ext lib
  against a failed time call  Add an utility library that supersedes the time
  function from libc. The time function from this added library always returns
  an error (-1). It is used for coverage test of the time call made within the
  Envmodules_InitStateClockSecondsObjCmd function of the Tcl extension
  library.

  * lib/configure.ac, lib/envmodules.c, lib/envmodules.h, modulecmd.tcl.in:
  lib: implement initStateClockSeconds  Add function in libtclenvmodules to
  implement 'initStateClockSeconds' as a Tcl command, which provides a more
  efficient way to retrieve current Epoch time.

  * MIGRATING.rst, NEWS.rst, contrib/rpm/environment-modules.spec.in,
  version.inc.in: Release of version 4.6.0

  * script/mrel: script: build src with compat vers enabled on mrel

2020-09-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc. blank value set on win platform in NEWS

2020-09-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.20-locate/090-memcache.exp: Simplify
  arg setup to call findModules  For the record, findModules need to get all
  root module-related elements to correctly compute auto symbols to know if
  they apply to searched modules.

2020-09-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Use get-env to manipulate env var in cmdModuleAutoinit
  As LOADEDMODULES and MODULEPATH are defined empty in cmdModuleAutoinit
  procedure, use the get-env procedure to manipulate these variables to avoid
  accessing undefined variable on Windows platform (as setting these variables
  to an empty string means to unset these variables on this platform).

  * modulecmd.tcl.in: unset env var when setting it to empty val on Win  When
  an empty string is set to an environment variable on Windows platform, this
  variable is unset yet still seen defined by 'info exists' command on Tcl,
  which leads to errors when trying to access variable content. So when trying
  to set an empty string to an environment variable on Windows platform, call
  for variable unset instead to reflect underlying OS behavior.

2020-09-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .travis.yml: travis: disable git clone depth

2020-09-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .appveyor.yml: appveyor: use BAWT Tcl installer for native Win test

2020-09-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst: doc: fix some typos in MIGRATING

2020-09-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst: doc: desc. module-forbid in MIGRATING

2020-09-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst: doc: desc. trace verbosity mode in MIGRATING

2020-09-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/140-color.exp,
  testsuite/modules.70-maint/230-verbosity.exp: ts: test trace verbosity in
  00/140 and 70/230

  * NEWS.rst: doc: desc. trace verbosity in NEWS

2020-09-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.rst, doc/source/module.rst: doc: desc. trace in INSTALL/module(1)

2020-09-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * configure, modulecmd.tcl.in: Add 'tr' sgr color key for trace messages

2020-09-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.20-locate/090-memcache.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/080-help.exp,
  testsuite/modules.70-maint/220-config.exp: ts: adapt existing tests for new
  trace verbosity

  * NEWS.rst, configure, testsuite/install.00-init/005-init_ts.exp: install:
  add support for MinGW platform  Look for `make` rather `gmake` on MinGW and
  build library with a `.dll` extension on this platform.

2020-09-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst: doc: finalize module-hide desc. in MIGRATING

2020-09-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * configure, modulecmd.tcl.in: Rework trace verbosity level  Report module
  resolution/search/selection/evaluation to trace big steps of modulecmd.tcl
  activity.

2020-09-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/220-config.exp,
  testsuite/modules.70-maint/230-verbosity.exp: ts: test debug2 verbosity in
  70/{220,230}

  * INSTALL.rst, NEWS.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst:
  doc: desc. debug2 verbosity mode in diff/man/NEWS/INSTALL

  * configure, modulecmd.tcl.in: Rework current trace verbose mode into debug2
  mode  Report procedure call in addition to other debug messages through the
  `debug2` verbosity level rather the `trace` level (that is preserved for
  another task).  When -D/--debug option is set multiple times, `debug2` mode
  is set.

  * modulecmd.tcl.in: Add caller argument to reportDebug proc  Introduce the
  `caller` argument to the reportDebug procedure to get the ability to define
  the calling procedure name to report. This argument is especially used by
  the initial reportDebug procedure set prior report initialization, to send
  toward final reportDebug procedure the actual caller name.

2020-09-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * script/mb, testsuite/etc/modulerc.bench3: script: add avail3/whatis3 tests
  to mb  Bench new hide/forbid features mixed with advanced version specifiers
  syntax. These new tests only apply to newer versions.

2020-08-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: merge release of version 4.5.3

  * modulecmd.tcl.in: Make --before matches if strictly below  Instead of
  matching past or current time, make value of `--before` option only match if
  specified time is over.

  * testsuite/modules.20-locate/115-forbid.exp: ts: help old dejagnu version
  to load `msgcat` cmd

2020-08-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.2/hide1/.modulerc,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.20-locate/115-forbid.exp,
  testsuite/modules.20-locate/119-hide-cascading.exp: ts: test when
  nealy-forbidden tag applies

2020-08-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/hide-or-forbid-modulefile.rst: doc: desc.
  nearly-forbidden feature and opts in design notes

  * NEWS.rst: doc: desc. nearly-forbidden feature and opts in NEWS

  * doc/source/modulefile.rst: doc: desc. --nearly-message option in
  modulefile(4) man

  * modulecmd.tcl.in: Add --nearly-message option to module-forbid command
  Add the --nearly-message option on module-forbid command to enable set of
  specific additionnal error message when an attempt to evaluate a *nearly
  forbidden* module is made.  When defined, record message as a property of
  the nearly-forbidden tag.

  * modulecmd.tcl.in: Warn when evaluate a nearly-forbidden module  Produce a
  warning message when a module with *nearly-forbidden* is evaluated. Message
  produced indicate the date time starting when module will effectively be
  forbidden.

  * modulecmd.tcl.in: Set nearly-forbidden tag if in range  Update
  parseApplicationCriteriaArgs procedure to get a *near range in seconds* as
  first argument, then determine in this procedure if the *after* criteria is
  near. Add this information and the *after* criteria value to the list of
  returned values.  With these new informations, the *nearly-forbidden* tag is
  set in module-forbid for module specification that are close to reach the
  *after* limit defined.

2020-08-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.70-maint/220-config.exp: ts: adapt tests for
  nearly_forbidden_days config

  * doc/source/diff_v3_v4.rst, doc/source/module.rst,
  doc/source/modulefile.rst: doc: desc. nearly_forbidden_days config in
  man/diff docs

  * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in,
  init/zsh-functions/_module.in: init: add nearly_forbidden_days config in
  completion scripts

  * modulecmd.tcl.in: Add nearly_forbidden_days configuration  Introduce the
  `nearly_forbidden_days` configuration to determine the number of days a
  module should be considered *nearly forbidden* prior reaching its expiry
  date set by `module-forbid` modulefile command.  Default value for this
  option is obtained from --with-nearly-forbidden-days configure option, which
  is set to 14 days by default.  Configuration value can be superseded by use
  of MODULES_NEARLY_FORBIDDEN_DAYS environment variable.

  * modulecmd.tcl.in: Validate config value against class  Add the ability to
  validate a configuration value against a value class (integer, string, ...)
  rather a list of accepted values. See list of accepted class names on Tcl
  `string is` command.

  * INSTALL.rst, Makefile, Makefile.inc.in, configure, site.exp.in: install:
  add --with-nearly-forbidden-days configure opt  Introduce the
  --with-nearly-forbidden-days ./configure script option to define the number
  of days a module is considered nearly forbidden prior reaching its expiry
  date limit set by module-forbid command.

2020-08-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .travis.yml: travis: increase mt run timeout for macos coverage build

  * doc/source/design/hide-or-forbid-modulefile.rst: doc: desc. --message in
  module-forbid design notes

2020-08-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.2/hide1/.modulerc,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.20-locate/115-forbid.exp: ts: test --message option in
  20/115

  * modulecmd.tcl.in: Add --message option to module-forbid command  Add the
  --message option on module-forbid command to enable set of specific
  additionnal error message when an attempt to evaluate a forbidden module is
  made.  When defined, record message as a property of the forbidden tag.

  * modulecmd.tcl.in: Record properties along tag  Adapt
  setModspecTag/getModuleTag/isModuleTagged procedure to give the ability to
  set a list of properties for a tag. Add getModuleTagProp procedure to
  retrieve the properties associated to recorded tag.

  * NEWS.rst, doc/source/modulefile.rst: doc: desc --message module-forbid
  option in NEWS/modulefile(4)

  * modulecmd.tcl.in: Define forbidden err msg from getForbiddenMsg proc  Add
  getForbiddenMsg procedure to generate error message obtained when trying to
  evaluate a forbidden module.

2020-08-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/etc/modulerc.hide, testsuite/modulefiles.2/hide2/.modulerc,
  testsuite/modulefiles.2/hide3/.modulerc,
  testsuite/modules.20-locate/115-forbid.exp: ts: add module-forbid tests
  Tests over different kind of elements and coupled with different kind of
  module-hide commands

2020-08-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/etc/modulerc.hide, testsuite/modulefiles.2/hide1/.modulerc,
  testsuite/modulefiles.2/hide2/.modulerc,
  testsuite/modulefiles.2/hide3/.modulerc,
  testsuite/modules.20-locate/113-hide-all-opt.exp,
  .../modules.20-locate/114-hide-before-after.exp,
  testsuite/modules.20-locate/115-forbid.exp,
  .../modules.20-locate/116-forbid-before-after.exp,
  .../modules.20-locate/117-forbid-user-group.exp,
  testsuite/modules.20-locate/118-forbid-all-opt.exp,
  testsuite/modules.20-locate/119-hide-cascading.exp: ts: reduce/adapt number
  of module-forbid tests  To avoid duplication with module-hide --hard tests

2020-08-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/hide-or-forbid-modulefile.rst: doc: update desc. of
  module-forbid in design notes

  * modulecmd.tcl.in: Disallow evaluation of forbidden modules  When a module
  has been tagged forbidden, disallow its evaluation by transforming
  modulefile path location result in an `accesserror` entry. As evaluation is
  concerned, it only has an impact on modulefile or virtual modules.
  Directories, alias or symbolic version are not impacted thus still used to
  resolve path to modulefile and virtual module even if tagged forbidden.

2020-08-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst, doc/source/modulefile.rst: doc: update desc. of
  module-forbid in man pages.

  * NEWS.rst: doc: update desc. of module-forbid in NEWS

2020-08-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/etc/modulerc.hide, testsuite/modulefiles.2/hide1/.modulerc,
  testsuite/modulefiles.2/hide2/.modulerc,
  testsuite/modulefiles.2/hide3/.modulerc,
  .../modules.20-locate/114-hide-before-after.exp,
  testsuite/modules.20-locate/115-forbid.exp,
  .../modules.20-locate/116-forbid-before-after.exp,
  .../modules.20-locate/117-forbid-user-group.exp: ts: transform 20/115 tests
  in module-hide --hard + module-forbid

  * modulecmd.tcl.in: Uncouple module hiding from module-forbid command  Do
  not imply hiding specified module on `module-forbid` command. Just record
  module specification is said *forbidden* which will be checked to disallow
  module load.  Doing so, hiding module is now only done through `module-hide`
  command and the previous behavior of `module-forbid` command can now be
  achieved with `module-hide --hard` + `module-forbid`.  This change also
  enables to forbid use of modules that are visible.  Hard-hiding level is
  lowered to *2*, as this spot was left empty through this change.

  * modulecmd.tcl.in: Add internal helper procs to define tags over modules
  Add the setModspecTag procedure to record defined tag over a module
  specification.  getModuleTag procedure enables to retrieve all the tags
  applying to a module passed as argument.  isModuleTagged procedure returns
  whether or not given module has given tag set on it.

  * modulecmd.tcl.in: Reword doesModuleHaveTag proc in doesModuleHaveSym  To
  avoid confusion with upcoming tag feature.

  * doc/source/design/hide-or-forbid-modulefile.rst: doc: desc. --hard in
  hide-or-forbid design doc

  * MIGRATING.rst: doc: desc. module-hide --hard in MIGRATING

  * testsuite/etc/modulerc.hide, testsuite/modulefiles.2/hide1/.modulerc,
  testsuite/modules.20-locate/119-hide-cascading.exp: ts: add cascading tests
  for --hard in 20/119

  * doc/source/modulefile.rst: doc: desc auto sym hidden properties in
  modulefile(4)

  * testsuite/modules.20-locate/110-hide.exp,
  testsuite/modules.20-locate/115-forbid.exp,
  testsuite/modules.20-locate/119-hide-cascading.exp: ts: fix 20/11* tests as
  auto-syms cannot be set hidden

  * modulecmd.tcl.in: Get default version from sym target in getModules
  Rework getModules procedure to get the defined default version from the
  fetched symbolic version target available in found_list structure rather
  querying g_resolvedPath global structure. Doing so, hidden default are
  automatically dropped.

2020-08-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/hide-or-forbid-modulefile.rst, modulecmd.tcl.in:
  Auto-symbols cannot be set hidden  Hidden statements can only target
  declared symbolic versions and not those automatically defined (@default and
  @latest). Thus when a declared `default` or `latest` symbol is set hidden,
  an auto-symbol is automatically defnied instead (targeting highest module
  version available).

  * NEWS.rst, doc/source/module.rst, doc/source/modulefile.rst: doc: desc
  --hard option in NEWS/MIGRATING/man

  * testsuite/etc/modulerc.hide, testsuite/modulefiles.2/hide1/.modulerc,
  testsuite/modulefiles.2/hide2/.modulerc,
  testsuite/modulefiles.2/hide3/.modulerc,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.20-locate/111-hide-hard.exp: ts: test --hard option in
  20/111-hide-hard

2020-08-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Add --hard option to module-hide command  Add `--hard`
  option to module-hide modulefile command. When set, modules specified are
  hidden with highest stealth level. They are never disclosed, even if
  precisely targetted by search or selection query.

  * modulecmd.tcl.in: Rework isModuleHidden procedure  Rework isModuleHidden
  procedure to split test per hiding level and category. Transform retlvl
  option into retdetails that now returns a list of values: is module hidden,
  what is module hiding level and is module considered matching search query
  depending on its hiding level.

2020-08-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.2/hide1/.modulerc,
  testsuite/modules.20-locate/119-hide-cascading.exp: ts: combinated use of
  module-hide/module-forbid opts in 20/119

  * testsuite/modulefiles.2/hide1/.modulerc,
  .../modules.20-locate/116-forbid-before-after.exp: ts: test --before/--after
  on module-forbid in 20/116

  * testsuite/modulefiles.2/hide1/.modulerc,
  .../modules.20-locate/114-hide-before-after.exp: ts: test --before/--after
  on module-hide in 20/114

  * doc/source/design/hide-or-forbid-modulefile.rst: doc: specify date time
  format in hide/forbid design notes

  * doc/source/design/hide-or-forbid-modulefile.rst, modulecmd.tcl.in,
  .../modules.20-locate/112-hide-user-group.exp,
  .../modules.20-locate/117-forbid-user-group.exp: Raise error rather warn
  when --not-{user,group} used on Win  Raise an error rather report a warning
  when the --not-user or --not-group options to the module-hide or
  module-forbid commands are used on Windows platform.  Issue is clearly
  localized this way when trying to load impacted modules. Also as such error
  leads to skip remaining part of modulerc, staff will fix it right away.

  * doc/source/modulefile.rst: doc: desc. --before/--after in modulefile(4)
  man

  * NEWS.rst: doc: desc. --before/--after in NEWS

  * modulecmd.tcl.in: Factorize --not-group/--not-user switch cases

  * modulecmd.tcl.in: Add --before/--after options to module-{hide,forbid}
  cmds  Introduce the `--before` and `--after` options to `module-hide` and
  `module-forbid` to make these commands apply only before a specific date
  and/or after a specific date.  Procedure parseDateTimeArg is added to
  evaluate date time value specified on the 2 new options and translate it
  into an epoch time for comparison against current epoch time, saved in
  `clock_seconds` state.  Accepted datetime format are `YYYY-MM-DD` or
  `YYYY-MM-DDTHH:MM`.  Both options are ignored on Tcl<8.5 as -format option
  of clock scan command is not available, which does not permit to work with
  selected date time format.

2020-08-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Add clock_seconds and tcl_version_lt85 states

  * doc/source/module.rst, doc/source/modulefile.rst: doc: desc module-forbid
  in module(1)/modulefile(4)

  * NEWS.rst: doc: desc. module-forbid in NEWS

  * testsuite/etc/modulerc.hide,
  testsuite/modules.20-locate/118-forbid-all-opt.exp,
  testsuite/modules.20-locate/119-hide-cascading.exp: ts: test dot mod
  targetted by module-forbid in 20/{118,119}

  * testsuite/etc/modulerc.hide, testsuite/modulefiles.2/hide1/.modulerc,
  testsuite/modules.20-locate/115-forbid.exp,
  .../modules.20-locate/117-forbid-user-group.exp,
  testsuite/modules.20-locate/119-hide-cascading.exp: ts: add cascading tests
  with module-forbid in 20/119

  * testsuite/modules.20-locate/118-forbid-all-opt.exp: ts: test --all option
  over forbidden mods in 20/118

  * testsuite/modulefiles.2/hide1/.modulerc,
  .../modules.20-locate/117-forbid-user-group.exp: ts: add module-forbid
  --not-{user,group} tests in 20/117

  * doc/source/design/hide-or-forbid-modulefile.rst: doc: clarify mod@1.0,2.0
  load selection in forbid context

2020-08-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/hide-or-forbid-modulefile.rst, modulecmd.tcl.in,
  testsuite/modules.20-locate/112-hide-user-group.exp: Ignore
  --not-user/--not-group options on Windows platform  Ignore any `--not-user`
  or `--not-group` option set on `module-hide` or `module-forbid` commands on
  Windows platform. Emit a warning message to indicate these options are not
  supported.

  * modulecmd.tcl.in: Ignore forbidden default symbol  In case a `default`
  symbolic version is defined forbidden, ignore this default resolution.

  * testsuite/etc/modulerc.hide, testsuite/modulefiles.2/hide1/.modulerc,
  testsuite/modulefiles.2/hide2/.modulerc,
  testsuite/modulefiles.2/hide3/.modulerc,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.20-locate/115-forbid.exp: ts: add 20/115 to test
  'module-forbid'

2020-08-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Unset forbidden or set them as error elts in getModules
  res  Adapt `isModuleHidden` procedure and phase #2 of `getModules` procedure
  to transform module entries set as forbidden in error entries shipped with a
  *Access denied* message if these entries are specified in search query or
  unset the forbidden entries not specified in search query (like for hidden
  entries).  When search query matches forbidden modules, the error entry is
  processed by procedure like `getPathToModule` to report the error message to
  the user.

  * contrib/vim/syntax/modulefile.vim: vim: add new modulefile command
  'module-forbid'

2020-08-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Introduce 'module-forbid' modulefile command  Create
  initial 'module-forbid' procedure and record it in modulefile and modulerc
  evaluation context.  Procedure follows the same approach than 'module-hide'
  except than hiding level is *2* here.

2020-08-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.20-locate/110-hide.exp,
  testsuite/modules.70-maint/270-adv_version_spec.exp,
  testsuite/modules.70-maint/271-adv_version_spec-in.exp,
  testsuite/modules.70-maint/272-adv_version_spec-range.exp: Correctly report
  failed eval attempt of adv_vers_spec prereq  Correctly report failed
  attempts to load module requirements expressed with advanced version
  specifiers.  Fixes #356

2020-08-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .appveyor.yml: appveyor: temporarily stop testing CMake in Cygwin platform
  On Cygwin platform, CMake installation seems currently broken under the
  AppVeyor CI environment (see https://github.com/appveyor/ci/issues/3508). So
  for the time being, remove CMake installation to avoid failing test results.

2020-08-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modulefiles.2/hide1/.modulerc,
  testsuite/modules.20-locate/110-hide.exp,
  .../modules.20-locate/112-hide-user-group.exp: Raise error when invalid opt
  set on module-hide  Raise an error when an invalid option is passed to
  `module-hide` command.

  * modulecmd.tcl.in: Record mod spec hiding level with setModspecHidingLevel
  proc  Add `setModspecHidingLevel` procedure to record hiding level of a
  given module specification.

  * modulecmd.tcl.in: Parse and eval application criteria args in specific
  proc  Add `parseApplicationCriteriaArgs` procedure to deleguate from
  `module-hide` procedure the parsing and evaluation of application criteria
  arguments (--not-user, --not-group). This new procedure returns if command
  applies and the other arguments to parse in command procedure.

  * NEWS.rst: doc: desc. module switch conflict skip in NEWS

2020-08-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.deps/swaa/1.0, testsuite/modulefiles.deps/swaa/1.1,
  testsuite/modulefiles.deps/swaa/1.2, testsuite/modulefiles.deps/swaa/1.4,
  testsuite/modulefiles.deps/swaa/2/0, testsuite/modulefiles.deps/swaa/2/2,
  testsuite/modulefiles.deps/swaa/2/8, testsuite/modulefiles.deps/swaa/3.0,
  testsuite/modulefiles.deps/swaa/3.2, testsuite/modulefiles.deps/swaa/3.8,
  testsuite/modulefiles.deps/swab,
  .../modules.50-cmds/376-switch-change-vers.exp: ts: test 'switch to change
  module version' usecase in 50/376

  * modulecmd.tcl.in: Skip module switch conflict set if old matches new
  `module switch` command used in modulefile is sometimes used to ensure a
  given version of a module is loaded. Currently loaded version of this module
  is unloaded to replace it by the designated specific version. This use case
  does not cope with the conflict declaration that is set over switched-off
  module specification. To support this use case, conflict definition is
  skipped if swapped-off module specification matches (includes) swapped-on
  module specification.  Fixes #355

  * MIGRATING.rst, NEWS.rst, doc/source/design/hide-or-forbid-modulefile.rst,
  doc/source/modulefile.rst, modulecmd.tcl.in, testsuite/etc/modulerc.hide,
  testsuite/modulefiles.2/hide1/.modulerc,
  .../modules.20-locate/112-hide-user-group.exp,
  testsuite/modules.20-locate/119-hide-cascading.exp: Reword '--allow-group'
  option into '--not-group'  Reword module-hide option `--allow-group' into
  `--not-group` to get a generic term to designate that command does not apply
  to specified groups. Such generic term could be reused on other future
  modulefile commands, making this concept easier to understand as it applies
  with the same meaning on several commands.

  * MIGRATING.rst, NEWS.rst, doc/source/design/hide-or-forbid-modulefile.rst,
  doc/source/modulefile.rst, modulecmd.tcl.in, testsuite/etc/modulerc.hide,
  testsuite/modulefiles.2/hide1/.modulerc,
  .../modules.20-locate/112-hide-user-group.exp,
  testsuite/modules.20-locate/119-hide-cascading.exp: Reword '--allow-user'
  option into '--not-user'  Reword module-hide option `--allow-user' into
  `--not-user` to get a generic term to designate that command does not apply
  to specified users. Such generic term could be reused on other future
  modulefile commands, making this concept easier to understand as it applies
  with the same meaning on several commands.

2020-08-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst: doc: update module-hide ex with --allow-* opts in MIGRATING

2020-08-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/etc/modulerc.hide, testsuite/modulefiles.2/hide1/.modulerc,
  testsuite/modules.20-locate/119-hide-cascading.exp: ts: cascading tests with
  --allow-{user,group} in 20/119

  * testsuite/modulefiles.2/hide1/.modulerc,
  .../modules.20-locate/112-hide-user-group.exp: ts: test --allow-{user,group}
  options in 20/112

2020-08-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst: doc: use console code-block for 4.6 examples in MIGRATING

  * NEWS.rst, doc/source/modulefile.rst: doc: desc. --allow-group in
  modulefile(4) man and NEWS

  * modulecmd.tcl.in: Add '--allow-group' option to module-hide mf cmd

  * NEWS.rst, doc/source/modulefile.rst: doc: desc. --allow-user opt in
  modulefile(4) man and NEWS

  * modulecmd.tcl.in: Add '--allow-user' option to module-hide mf cmd

  * MIGRATING.rst: doc: desc. module-hide in MIGRATING

2020-08-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/modulefile.rst: doc: desc. module-hide in modulefile(4) man

  * doc/source/module.rst: doc: desc. --all/-a option in module(1) man

2020-07-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc. module-hide & related changes in NEWS

2020-07-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/etc/modulerc.hide, testsuite/modulefiles.2/hide4/.1.0,
  testsuite/modules.20-locate/113-hide-all-opt.exp,
  testsuite/modules.20-locate/119-hide-cascading.exp: ts: test module-hide
  statements of dot named mod in 20/119

  * contrib/vim/syntax/modulefile.vim: vim: add new modulefile command
  'module-hide'

2020-07-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Highest hiding level defined wins  In case multiple
  module-hide commands target the same module set, the highest hiding level
  among those commands wins and is retained, which means most restrictive
  command wins.

  * testsuite/etc/modulerc.hide, testsuite/modulefiles.2/hide1/.modulerc,
  testsuite/modules.20-locate/119-hide-cascading.exp: ts: add 20/119,
  module-hide cascading tests

  * modulecmd.tcl.in: Clean trailing space character

  * script/createmodule.py.in, script/createmodule.sh, script/envml,
  script/mkroot, script/mrel, script/mtreview: script: clean trailing space
  character

2020-07-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/hide-or-forbid-modulefile.rst, modulecmd.tcl.in,
  testsuite/modules.20-locate/113-hide-all-opt.exp: Remove -a/--all option for
  is-avail sub-cmd  As it seems more consistent that any `is-avail mod`
  command returning true should lead to a ``load mod`` command effectively
  loading a module, -a/--all option does not apply to is-avail sub-command.

  * modulecmd.tcl.in: Refactor add path pos opt pass toward cmdModuleUse
  Parse --append/--prepend and derivatives options for cmdModuleUse procedure
  in the general module command parsing procedure: parseModuleCommandArgs. By
  doing so, it is possible to distinguish if -a option is the --append option
  of use sub-command or --all option of searching/listing sub-command.

2020-07-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.20-locate/113-hide-all-opt.exp,
  testsuite/modules.90-avail/070-full.exp: ts: test --all option in 20/113

2020-07-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/etc/modulerc.hide, testsuite/modulefiles.2/hide1/.modulerc,
  testsuite/modulefiles.2/hide2/.modulerc,
  testsuite/modulefiles.2/hide3/.modulerc,
  testsuite/modules.20-locate/111-hide-soft.exp: ts: add 'module-hide --soft'
  tests in 20/111

2020-07-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/diff_v3_v4.rst: doc: desc. module-hide/module-forbid/--all in
  diff doc

  * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in,
  init/zsh-functions/_module.in: init: add -a/--all option to completion
  scripts

  * modulecmd.tcl.in: Add -a/--all opt for av/al/wh/search/is-avail sub-cmd
  Introduce the -a/--all option to include hidden modules in avail, aliases,
  whatis, search and is-avail search sub-commands.  When set, -a/--all option
  increase hiding_threshold to 2, which means dot name modules or modules
  declared hidden with module-hide are visible.

  * modulecmd.tcl.in: Add 'hiding_threshold' state  Introduce the
  'hiding_threshold' state that determine the threshold value starting from a
  module is considered hidden.

  * modulecmd.tcl.in: Introduce '--soft' option to module-hide modfile cmd
  Soften level of camouflage with new option --soft of module-hide Tcl
  modulefile command. Modules targeted by such hide directive are made visible
  as soon as their root name is part of search query.  A '0' hiding level is
  applied to soft hide.

  * modulecmd.tcl.in: Cache isModuleHidden test result

  * modulecmd.tcl.in: Record a hiding level of module  Rather querying if
  module has been declared hidden or not with isModuleDeclHidden procedure,
  query the hiding level of module with getModuleHidingLevel procedure. -1
  means module is not hidden. any value above -1 means module is hidden.

2020-07-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Test search query match directly in isModuleHidden  Move
  test that determine if a dot-named module or a declared hidden module is
  matching search query, which renders it visible, into the isModuleHidden
  procedure. Thus this procedure directly tells if module is effectively
  hidden based on search query.

  * testsuite/etc/modulerc.hide, testsuite/modulefiles.2/hide3/.modulerc: ts:
  test cascading module-hide defs in 20/110

  * testsuite/modules.20-locate/110-hide.exp: ts: add tests over loaded env in
  20/110

  * testsuite/modulefiles.2/hidereq/4.0, testsuite/modulefiles.2/hidereq/{3.1
  => 4.1}, testsuite/modules.20-locate/110-hide.exp: ts: add is-avail test in
  20/110

  * modulecmd.tcl.in: Fix use of adv vers spec arg on is-avail in modulefile
  Fix use of the advanced version specifiers in arguments to the is-avail Tcl
  modulefile command.

2020-07-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/etc/modulerc.hide, testsuite/modulefiles.2/hide2/.modulerc,
  testsuite/modulefiles.2/hide3/.modulerc, testsuite/modulefiles.2/hide3/1.0,
  testsuite/modulefiles.2/hide3/sub1/2.0,
  testsuite/modulefiles.2/hide3/sub1/3.0,
  testsuite/modulefiles.2/hide3/sub2/.modulerc,
  testsuite/modulefiles.2/hide3/sub2/4.0,
  testsuite/modulefiles.2/hide3/sub2/5.0,
  testsuite/modules.20-locate/110-hide.exp: ts: add module-hide tests over
  deep mods

  * modulecmd.tcl.in, testsuite/modules.80-deep/010-init_ts.exp: Record
  resolution of transitive symbols  In case a symbolic version is transitively
  applied toward a modulefile, like for instance when this symbol is first set
  onto a directory, record resolution of each transitively applied symbol. By
  doing so, a module load tentative using the transitively applied symbolic
  version will now correctly resolve to the modulefile targeted by symbol.

2020-06-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/etc/modulerc.hide, testsuite/modulefiles.2/hide1/.modulerc,
  testsuite/modulefiles.2/hide1/1.0, testsuite/modulefiles.2/hide1/2.0,
  testsuite/modulefiles.2/hide1/2.1, testsuite/modulefiles.2/hide1/2.2,
  testsuite/modulefiles.2/hide1/3.0, testsuite/modulefiles.2/hide1/3.1,
  testsuite/modulefiles.2/hide1/3.2, testsuite/modulefiles.2/hide1/4.0,
  testsuite/modulefiles.2/hide1/5.0, testsuite/modulefiles.2/hide2/.modulerc,
  testsuite/modulefiles.2/hide2/1.0, testsuite/modulefiles.2/hidereq/1.0,
  testsuite/modulefiles.2/hidereq/1.1, testsuite/modulefiles.2/hidereq/1.2,
  testsuite/modulefiles.2/hidereq/1.3, testsuite/modulefiles.2/hidereq/1.4,
  testsuite/modulefiles.2/hidereq/1.5, testsuite/modulefiles.2/hidereq/2.0,
  testsuite/modulefiles.2/hidereq/2.1, testsuite/modulefiles.2/hidereq/2.2,
  testsuite/modulefiles.2/hidereq/2.3, testsuite/modulefiles.2/hidereq/2.4,
  testsuite/modulefiles.2/hidereq/2.5, testsuite/modulefiles.2/hidereq/2.6,
  testsuite/modulefiles.2/hidereq/3.0, testsuite/modulefiles.2/hidereq/3.1,
  testsuite/modules.20-locate/110-hide.exp: ts: add initial module-hide tests
  in 20/110

2020-07-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Relocate defineModEqStaticProc call in getModules

2020-07-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Define autosym only for dir matching query  Define the
  default and latest auto symbols only if module name matches search query to
  ensure all module entries have been processed prior setting these symbols.
  If some alias are defined in global or user modulerc, their relative module
  name will automatically be part of names analyzed for auto symbol
  definition. However if available module searched does not match this alias,
  auto symbol were previously defined without all the module entries evaluated
  to know if these symbols should be defined and how.

  * modulecmd.tcl.in: Unhide default symbol on res ctx matching bare mod name
  On a resolution context, like a load sub-command, unhide any default
  symbolic version if search query matches bare module name.

  * modulecmd.tcl.in: Hide mod root name from alt names if default sym hidden
  When loading module, if it matches default version but this symbolic version
  is set hidden, also remove module parent name from the list of alternative
  names to record in environment.

  * modulecmd.tcl.in: Unhide 'default' symbol on 'avail -d'  When the *only
  defaults* filter of avail sub-command is enabled, unhide all the default
  symbolic version or module targeted by this symbol.

2020-07-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.20-locate/067-hidden.exp,
  testsuite/modules.20-locate/080-access.exp,
  testsuite/modules.90-avail/070-full.exp: Do not report hidden symbol on
  avail  On avail sub-command, remove hidden symbolic version from list to
  display along modulefile or directory they target, unless these symbols are
  specifically referred in search query.  As side effect, symbol prefixed by a
  dot character are also made hidden from avail sub-command with this change.

  * modulecmd.tcl.in, testsuite/modules.20-locate/067-hidden.exp: No record of
  hidden alt names  When loading module has alternative names declared hidden
  (alias or symbolic version), withdraw these names from the alternative names
  to record in environment (in MODULES_LMALTNAME) unless they precisely match
  search query used to load module.  Applies to both module declared hidden or
  whose name starts with a dot character.

2020-07-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Simplify ternary operators rendering boolean result

  * modulecmd.tcl.in: Keep hidden tgt of default sym in resolve context  When
  getModules procedure is called in a resolution context (when it is called by
  getPathToModule proceudre), keep the hidden target of the default symbol if
  search query is equivalent to module name. As during a resolution context
  'mod' query is equivalent to 'mod/default' query.

2020-07-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.20-locate/067-hidden.exp: No specific
  res for sym ver target in cmdModuleSearch  Modulefile targeted by symbolic
  version should be included in getModules result along with symbolic version
  entry. So there is no need to specifically resolve by default symbolic
  version target in cmdModuleSearch procedure.  If symbol's target is found in
  error, record it if search query matches symbol. And if symbol's target has
  not been found in directory where symbol is defined, add this symbol target
  to the list of element to resolve in other modulepath directories later on
  cmdModuleSearch procedure.

  * modulecmd.tcl.in: Resolve icase symver target in getModules  When looking
  for symbolic version target to add them to getModules result in case
  symbolic versions targeting them match search query. Resolves symbolic
  version target in an icase way when icase mode is enabled.

2020-07-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Refactor hversmod_list in getModules  Rather testing if
  symbol target is hidden in phase #1 of getModules procedure when building
  list of symbolic versions, build at this first stage the list of symbols for
  each module having at least one symbol targeting it.  Use this array list,
  named versmod_list, at stage #2 when withdrawing hidden modules unless if
  they are directly targeted by search query or the symbolic versions
  targeting them.

  * modulecmd.tcl.in: Exclude declared hidden mods from getModules res  Adapt
  phase #2 of getModules procedure to withdraw all modules declared hidden
  unless if they match search query. Hidden elements should exactly match
  search query to be retained.

  * modulecmd.tcl.in: Add 'eqspec' test on modEq proc  Add the `eqspec` test
  on modEq procedure to check equality against precise version specification,
  even when extended_default configuration is enabled, and precisely match
  versions specified in list or as range boundaries.

2020-07-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Check for hidden mod spec in isModuleHidden  Transform
  existing isModuleHidden procedure in isModuleDotHidden procedure, checking
  hidden state against dot name aspect only.  Introduce isModuleDeclHidden
  procedure to check hidden state against hidden module specifications.  Make
  isModuleHidden procedure to check against dot name hidden and declared
  hidden modules by calling isModuleDotHidden and isModuleDeclHidden
  procedure.

  * modulecmd.tcl.in: One global statement for all req vars in getModules

2020-06-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Introduce 'module-hide' modulefile command  Create
  initial `module-hide` procedure and record it in modulefile and modulerc
  evaluation context.  Throw an error if no module is specified as argument.
  Every module specification is recorded in a global array named g_moduleHide
  are being parsed like any other module version specification.  Fixes #202.

2020-06-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/hide-or-forbid-modulefile.rst: doc: add
  hide-or-forbid-modulefile design doc

2020-07-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, lib/configure.ac, lib/envmodules.c, modulecmd.tcl.in,
  testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/120-siteconfig.exp: Remove fetch_hidden arg on
  getFilesInDirectory proc  Always return hidden directory entries.  Update
  both pure-Tcl and C version of getFilesInDirectory procedure

  * modulecmd.tcl.in: Remove fetch_hidden arg on findModules proc  Always
  fetch hidden elements, getModules query is then used to filter and only
  return accurate entries.

  * modulecmd.tcl.in: Remove fetch_hidden arg on getModules proc  Now hidden
  entries are automatically searched if specified on query.  Remove
  isModuleSpecHidden procedure which is now useless.

2020-06-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.20-locate/067-hidden.exp: Auto return
  hidden elt if matching query on getModules  Automatically determine if
  hidden elements have to be returned on getModules procedure, rather
  explicitly setting a fetch_hidden flag. These hidden elements need to be
  returned if they exactly match search query.

2020-06-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.00-init/120-siteconfig.exp: Fix
  modStartNb to return nb of matching parts  0 means no match, 1+ the number
  of element in names that are matching.

2020-06-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * script/mb: script: add single module avail/whatis test on mb

  * modulecmd.tcl.in: Limit search to specified query in getPathToModule  Call
  getModules procedure with query specified to getPathToModule rather on
  module root name. As a consequence getPathToModule recalls itself more often
  when resolution hit a module alias or a symbolic version, as those elements
  are less likely to be part of initial getModules result.  Delete the
  isSameModuleRoot procedure which is not used anymore.

  * modulecmd.tcl.in, testsuite/modules.70-maint/290-json.exp: Fix
  modEq/modEqStatic for mod with trailing /s  When specified module has
  several trailing slash characters, adapt modEq and modEqStatic procedure to
  clear the extra slashes (mod// gives mod/) and adapt suffix appending, when
  this suffix also starts by a slash character (mod/ + /* gives mod/* not
  mod//*).

  * modulecmd.tcl.in: Trim all trailing / from querydir in getModules  string
  range operation was only removing the last one, but did not cover cases
  where mod is specified 'mod//'.

2020-06-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Return parent dir of matching elements in getModules
  When performing a non-wild search in getModules (for instance when it is
  called by getPathToModule procedure), returns the parent directory element
  equal to query module name in order to retrieve the default and latest entry
  information in calling procedure.

2020-08-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc. configure updates and multilib support in NEWS

2020-08-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .travis.yml: travis: del 'make srpm' test on non-compat el7 cases

  * Makefile, lib/.gitignore, lib/Makefile.in, lib/testutil-dupgetgroups.c,
  testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/120-siteconfig.exp: ts/lib: test tcl ext lib
  against a dup ent res getgroups call  Add an utility library that supersedes
  the getgroups function from libc. The getgroups function from this added
  library always returns a list with 3 elements that all correspond to user's
  primary group. It is used for coverage test of the getgroups call made
  within the Envmodules_InitStateUsergroupsObjCmd function of the Tcl
  extension library.

  * lib/configure.ac, lib/envmodules.c: lib: remove dup from getgroups result
  `getgroups` system call may return a group list with duplicate entries, so
  these duplicates need to be removed from result list. Use a *sort then skip
  consecutive identical entries* strategy for this cleanup task.  Sort is
  performed with `qsort` system call therefore a `+__Envmodules_IntCmp`
  function is introduced for it.

2020-08-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/100-pager.exp,
  testsuite/modules.00-init/120-siteconfig.exp,
  testsuite/modules.00-init/150-access-init.exp: ts: adapt existing tests for
  multilib support

  * Makefile: install: raise error when making srpm/rpm if no compat  Raise an
  error when trying to build SRPM or RPM packages if compatibility version
  sources are missing.

  * contrib/rpm/environment-modules.spec.in: rpm: build with multilib support
  enabled

  * .travis.yml: travis: update ubuntu version to xenial

  * INSTALL.rst, Makefile, Makefile.inc.in, configure, modulecmd.tcl.in,
  site.exp.in: Add support for multilib systems  Introduce the
  `--enable-multilib-support` configure option to add mechanism in
  `modulecmd.tcl` to look at an alternative location to find the Modules Tcl
  extension library in case this library cannot be found at its main location.
  It adds the ability on specific architecture (e.g., x86_64) to use the
  library build for another architecture compatible with current machine
  (e.g., i686).  When this option is enabled, modulecmd.tcl is produced in a
  way that make it identical whether built from 32bit or 64bit systems. This
  way no conflict happen on EL/Fedora systems when installing both 64bit and
  32bit RPM packages.

2020-08-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp: ts: report current sys info at
  beginning of tests

  * .travis.yml: travis: test set of dummy configure args

  * contrib/rpm/environment-modules.spec.in: rpm: use make macros to build and
  install  Apply requested change for F33:
  https://fedoraproject.org/wiki/Changes/UseMakeBuildInstallMacro

  * contrib/rpm/environment-modules.spec.in: rpm: fix modulecmd
  pre-alternatives check  Was wrongly checking %{buildroot} content rather
  targeted system.

  * configure: install: pass --{build,target,host} opt to lib configure  Also
  pass the --build, --target and --host options down to the `configure` script
  of Modules Tcl extension library.

  * configure: install: add support for env var and system type set on
  configure  Add support to define environment variable and build system type
  as `configure` script arguments to better match GNU configuration
  specification.

2020-08-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * configure: install: ign not supported --enable-*/--with-* opts  Ignore not
  supported `--enable-*` and `--with-*` options on `configure` script rather
  raise an error to comply with GNU configuration specification.

  * configure: install: ignore configure script standard option  To cope with
  default build macro, like `%configure` in RPM spec, ignore `configure`
  script standard options like `--program-prefix` rather raise an *unsupported
  option* error.

2020-08-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * configure, contrib/rpm/environment-modules.spec.in: install: accept new
  compat-specific opts on ./configure  Take into account the `--build`,
  `--host`, `--target`, `--enable-dependency-tracking` and
  `--disable-dependency-tracking` configure options to transmit them to
  Modules compatibility version ./configure script. Such options are implied
  when using `%configure` macro in RPM spec file.  Fixes #354

2020-07-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * script/mrel: script: add support of koji 'free' task state in mrel

  * NEWS.rst: doc: merge release of version 4.5.2

  * testsuite/modules.50-cmds/370-deps-fullpath.exp: ts: fix 50/370 tests on
  short term size

  * script/mpub, script/mrel: script: enable mrel/mpub to release from a
  vZ.Y.x branch  Adapt the `mrel` and `mpub` release to produce new Modules
  release from a 'vZ.Y.x' branch rather from 'master' branch.

2020-07-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.50-cmds/370-deps-fullpath.exp: Fix
  reflexive conflict issue when mod is loaded full path  Adapt conflict
  detection tests to ensure a module loaded by its full pathname will not
  detect itself as a conflict when declaring a reflexive conflict.  Fixes
  #352.

2020-07-28  Rob Hurt <rchurt@users.noreply.github.com>

  * doc/source/index.rst: doc: clarify about lang-specific modules in index  I
  think it would be worth adding a clarification about Perl (and other
  language) modules vs. the environment modules described here, because the
  use of the term "modules" for both can be confusing to new users.  Also
  fixed some typos and formatting.

2020-07-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp:
  Separate quar var def from tclshbin in _module_raw  Clearly separate
  quarantine variable definition from tclsh binary on modulecmd.tcl evaluated
  command call in _module_raw function for sh, bash, ksh and zsh shells.  When
  _module_raw is evaluted in zsh completion process, the command call was not
  correctly generated and location of tclsh binary was the value set to all
  quarantine variable declared. Which in case of LD_PRELOAD, led to error
  messages.  Fixes #350.

2020-07-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc. inclusivity/versioned magic cookie in NEWS

  * MIGRATING.rst, doc/source/cookbook/source-script-in-modulefile.rst: doc:
  use versioned magic cookie in recent examples  Fixes #349.

2020-06-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * CONTRIBUTING.rst: doc: state code must comply with Tcl8.4+ in CONTRIBUTING

  * MIGRATING.rst: doc: desc. module-info user{name,groups} in MIGRATING

2020-06-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile, lib/.gitignore, lib/Makefile.in, lib/testutil-0getgroups.c,
  testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/120-siteconfig.exp: ts/lib: test tcl ext lib
  against a zero res getgroups call  Add an utility library that supersedes
  the getgroups function from libc. The getgroups function from this added
  library always returns an empty result (0). It is used for coverage test of
  the getgroups call made within the Envmodules_InitStateUsergroupsObjCmd
  function of the Tcl extension library.

  * .appveyor.yml, .cirrus.yml, .travis.yml: travis/appveyor/cirrus: use
  --base64-failed-log mt opt

  * script/mt: script: add option --base64-failed-log to mt  Add option
  ``--base64-failed-log`` to the ``mt`` script to output test log on failure
  in a base64 serialized format.

2020-06-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile, lib/.gitignore, lib/Makefile.in, lib/testutil-getgrgid.c,
  testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/120-siteconfig.exp: ts/lib: test tcl ext lib
  against a failed getgrgid call  Add an utility library that supersedes the
  getgrgid function from libc. The getgrgid function from this added library
  always returns an error (NULL). It is used for coverage test of the getgrgid
  call made within the Envmodules_InitStateUsergroupsObjCmd function of the
  Tcl extension library.

  * Makefile, lib/.gitignore, lib/Makefile.in, lib/testutil-getgroups.c,
  testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/120-siteconfig.exp: ts/lib: test tcl ext lib
  against a failed getgroups call  Add an utility library that supersedes the
  getgroups function from libc. The getgroups function from this added library
  always returns an error (-1). It is used for coverage test of the getgroups
  call made within the Envmodules_InitStateUsergroupsObjCmd function of the
  Tcl extension library.

  * Makefile, lib/.gitignore, lib/Makefile.in, lib/testutil-getpwuid.c,
  testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/120-siteconfig.exp: ts/lib: test tcl ext lib
  against a failed getpwuid call  Add an utility library that supersedes the
  getpwuid function from libc. The getpwuid function from this added library
  always returns an error (NULL). It is used for coverage test of the getpwuid
  call made within the Envmodules_InitStateUsernameObjCmd function of the Tcl
  extension library.

  * MIGRATING.rst, NEWS.rst: doc: mark subcmd/mfcmd/command in NEWS/MIGRATING
  Improve markup of NEWS and MIGRATING documents starting from this 4.6
  version to enable references to module sub-commands, command line switches,
  environment variables and modulefile Tcl commands.

  * NEWS.rst: doc: desc. module-info usergroups/username in NEWS

  * script/mpub, script/mrel: script: fix distclean err to ignore in mrel/mpub

  * script/mrel: script: add cleaning of prev built rpm in 'mrel'

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/286-info-username.exp,
  testsuite/modules.50-cmds/287-info-usergroups.exp: ts: adapt stack trace
  msgs to tcl vers in 50/{286,287}

2020-06-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/286-info-username.exp,
  testsuite/modules.50-cmds/287-info-usergroups.exp: ts: test module-info
  user{name,groups} on win platform

  * testsuite/modulefiles.2/info/.modulerc,
  testsuite/modulefiles.2/info/usergroups,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/287-info-usergroups.exp: ts: test 'module-info
  usergroups' in 50/287

  * testsuite/modulefiles.2/info/.modulerc,
  testsuite/modulefiles.2/info/username,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/286-info-username.exp,
  testsuite/modules.70-maint/220-config.exp: ts: test 'module-info username'
  in 50/286

  * lib/configure.ac, lib/envmodules.c, lib/envmodules.h: lib: implement
  initStateUsergroups  Add function in libtclenvmodules to implement
  `initStateUsergroups` as a Tcl command, which provides a more efficient way
  to retrieve current groups of running process, rather forking to execute
  `id` external binary.  Note that if current system does not support the
  `getgroups` system call, only the primary group name of current user will be
  returned.

2020-06-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * lib/configure.ac, lib/envmodules.c, lib/envmodules.h: lib: Implement
  initStateUsername  Add function in libtclenvmodules to implement
  `initStateUsername` as a Tcl command, which provides a more efficient way to
  retrieve current username, rather forking to execute `id` external binary.

  * modulecmd.tcl.in: Raise error if module-info usergroups/username called
  from win

  * doc/source/modulefile.rst: doc: desc. module-info usergroups/username in
  modulefile(4)

  * doc/source/modulefile.rst: doc: reorder module-info sub-cmd desc. in
  modulefile(4)

  * doc/source/diff_v3_v4.rst: doc: desc. module-info username/usergroups in
  diff doc

  * modulecmd.tcl.in: Add 'usergroups' sub-cmd to module-info command  Be able
  to fetch groups of current user through `module-info` modulefile command.
  With no extra argument, all group names are returned. If a name is provided
  as argument, true is returned if this name matches one entry in the group
  list, false is returned otherwise.

  * modulecmd.tcl.in: Add 'usergroups' state  Create `usergroups` state to
  collect all the groups the user running modulecmd.tcl process is member of.
  Add an initStateUsergroups procedure to initialize this state, which calls
  `id -G -n` to fetch these group names. This external command is available on
  every Unices and its `-G -n` arguments operate the same way.  An error will
  be obtained on Windows platform as `id` command is not known there.
  initStateUsergroups procedure is recorded in modulecmd.tcl as
  __initStateUsergroups and renamed if initStateUsergroups procedure is not
  found from Modules Tcl extension library. A more efficient version of
  initStateUsergroups will be provided in the library later on (not to depend
  on an external command call).

  * modulecmd.tcl.in: Add 'username' sub-cmd to module-info command  Be able
  to fetch current username through `module-info` modulefile command. With no
  extra argument, username is returned. If a name is provided as argument,
  true is returned if this name matches current username, false is returned
  otherwise.

  * modulecmd.tcl.in: Add 'username' state  Create `username` state to collect
  the name of the user running modulecmd.tcl process. Add an initStateUsername
  procedure to initialize this state, which calls `id -u -n` to fetch
  username. This external command is available on every Unices and its `-u -n`
  arguments operate the same way.  An error will be obtained on Windows
  platform as `id` command is not known there.  initStateUsername procedure is
  recorded in modulecmd.tcl as __initStateUsername and renamed if
  initStateUsername procedure is not found from Modules Tcl extension library.
  A more efficient version of initStateUsername will be provided in the
  library later on (not to depend on an external command call).

2020-07-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.rst, configure,
  doc/example/modulefiles-in-git/modulefiles/localmodules,
  doc/source/cookbook/modulefiles-in-git.rst, doc/source/module.rst,
  modulecmd.tcl.in: Apply inclusive terminology in code and docs  Use
  inclusive terminology [1] to eliminate 'master' and 'slave' terms as much as
  possible from code and documentation. 'master' has been changed into 'main'
  and 'slave' into 'subordinate' or 'sub'.  After this change, some references
  to the 'master' and 'slave' word can still be found in repository: *
  `slaves` sub-command of `interp` Tcl command * `--slave` option of
  `update-alternatives tool in RPM spec file * `master_doc` attribute of
  Sphinx `conf.py` file * git 'master' branch need to be renamed and tools
  referring it need to be updated accordingly (configure, script/mpub,
  script/mrel)  [1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/l
  inux.git/commit/?id=49decddd39e5f6132ccd7d9fdc3d7c470b0061bb

2020-07-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc. recent doc and configure script updates in NEWS

  * testsuite/install.00-init/060-quar.exp: ts: fix install quar test when
  LD_PRELOAD is set

2020-07-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .appveyor.yml, .cirrus.yml, .travis.yml, INSTALL.rst, configure,
  contrib/rpm/environment-modules.spec.in: install: disable compat version
  build by default  Version 4 of Modules is available since almost 3 years.
  Many improvements have been made to integrate features of version 3.2 still
  needed in module command. So it is now time to disable the build of version
  3.2 which was triggered by default since 4.0.

  * .travis.yml: travis: use '--arg val' configure syntax on 2 test cases

  * configure: install: set dir arg with '--arg val' form in configure  Enable
  the definition of the installation directory argument of the ./configure
  script with the `--arg val` syntax form in addition to the `--arg=val`
  syntax.  Fixes #348

  * .travis.yml: travis: fix --with-quarantine-vars arg bad definition

  * configure: install: show lib/compat configure args on configure

  * configure: install: raise error on unknown configure argument  Fixes #348

  * configure: install: limit compat args to those supported in configure
  Only pass to compatibility version ./configure script arguments that make
  sense to it. Do not transmit anymore arguments that are unknown to this
  compatibility version ./configure script.  Compatibility version ./configure
  script argument listed in project's main configure script are only a subset
  of supported arguments. Main configure script can only be used to run
  compatibility configure script with the argument list here.

2020-06-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/img/modules_red.svg: doc: use brighter variation of red svg logo
  Built from CMYK EPS file.

2020-06-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile, README.md: doc: include logo on README

  * doc/source/conf.py: doc: fix html theme on RTD  To avoid RTD to override
  html_theme_options when html_theme is set to 'default'.

  * doc/img/favicon.ico, doc/img/modules_red.svg, doc/img/modules_white.svg,
  doc/source/conf.py: doc: include logo in doc portal

2020-05-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .../source-script-in-modulefile/foo-1.2/bin/foobin,
  .../foo-1.2/foo-setup.sh, .../modulefiles/foo/1.2,
  .../cookbook/source-script-in-modulefile.rst: doc: add
  source-script-in-modulefile recipe

2020-05-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst, NEWS.rst: doc: desc. source-sh in MIGRATING/NEWS

  * doc/source/diff_v3_v4.rst, doc/source/module.rst,
  doc/source/modulefile.rst: doc: desc. source-sh/MODULES_LMSOURCESH in
  man/diff

2020-05-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .../design/source-shell-script-in-modulefile.rst: doc: desc. env recording
  in  source-sh design doc

2020-05-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.2/source-sh/3,
  testsuite/modulefiles.2/source-sh/5.0,
  testsuite/modules.50-cmds/400-source-sh.exp: ts: fix result order on 50/400
  tests

  * testsuite/modules.50-cmds/400-source-sh.exp: ts: adapt 50/400 err stack
  trace msg to Tcl version used

  * testsuite/modulefiles.2/source-sh/6.0,
  testsuite/modules.50-cmds/400-source-sh.exp: ts: test var relying on
  source-sh script defined var

  * testsuite/modules.50-cmds/400-source-sh.exp: ts: add 'display' mode test
  for source-sh cmd

2020-05-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Implement 'source-sh' for display mode  When modulefile
  is displayed, report modulefile commands resulting from source-sh script
  evaluation rather source-sh modulefile command.  As for unload modulefile
  evaluation, display mode relies on MODULES_LMSOURCESH if modulefile is
  currently loaded. However it will requery script to fetch the definition of
  shell aliases and functions.

2020-05-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Split sh-to-mod code in 2 procs  Separate script
  evaluation and output extraction in a dedicated procedure called
  execShAndGetEnv.

2020-05-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/mini-sh-to-mod.sh, testsuite/modulefiles.2/source-sh/1,
  testsuite/modulefiles.2/source-sh/2, testsuite/modulefiles.2/source-sh/3,
  testsuite/modulefiles.2/source-sh/4.0,
  testsuite/modulefiles.2/source-sh/4.1,
  testsuite/modulefiles.2/source-sh/4.2,
  testsuite/modulefiles.2/source-sh/4.3,
  testsuite/modulefiles.2/source-sh/5.0,
  testsuite/modulefiles.2/source-sh/5.1,
  testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.50-cmds/400-source-sh.exp: ts: test 'source-sh' modulefile
  command

2020-05-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Transform sep char used in MODULES_LMSOURCESH value
  Transform character used as separator to structure MODULES_LMSOURCESH
  environment variable value (:, & and |), when these characters are used
  among values set by source-sh scripts. Respectively transform these
  characters into `<EnvModEscPS>`, `<EnvModEscS1>` and `<EnvModEscS2>`.

2020-05-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Implement 'source-sh' for unload mode  Rely on
  information saved in MODULES_LMSOURCESH environment variable to know what to
  undo when modulefile is evaluated in unload mode. Evaluate source-sh
  resulting modulefile commands through unload Tcl interpreter to get those
  command reversed.

2020-05-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Record cmds from source-sh in MODULES_LMSOURCESH env var
  Record in user environment the modulefile commands resulting from source-sh
  evaluations. Making this information persist in environment via
  MODULES_LMSOURCESH variable helps to determine what to undo when unloading
  modulefiles making use of the source-sh command.

2020-05-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Implement 'source-sh' command for load mode

2020-05-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/vim/syntax/modulefile.vim: vim: add new modulefile command
  'source-sh'

  * modulecmd.tcl.in: Add skeleton for new modulefile command 'source-sh'  Add
  an undo procedure to apply on unload modulefile evaluation mode. Print
  command call on display mode. And no operation for other modes.

2020-05-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc. -T/--trace option in NEWS

  * testsuite/modules.70-maint/220-config.exp,
  testsuite/modules.70-maint/230-verbosity.exp: ts: add tests for 'trace'
  verbosity level

  * INSTALL.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: desc.
  -T/--trace in man/diff/INSTALL docs

  * modulecmd.tcl.in: Fix double err counter increase when mod eval breaks

2020-05-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in,
  init/zsh-functions/_module.in: init: add -T/--trace options to completion
  scripts

2020-05-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * configure, modulecmd.tcl.in: Introduce 'trace' verbosity level

2020-05-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst, NEWS.rst: doc: desc. sh-to-mod in NEWS/MIGRATING

2020-05-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: desc. sh-to-mod in
  module(1) and diff docs

  * .../design/source-shell-script-in-modulefile.rst: doc: add
  source-shell-script-in-modulefile design doc

2020-05-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/sh-to-mod.csh, testsuite/example/sh-to-mod.fish,
  testsuite/example/sh-to-mod.sh,
  testsuite/modules.70-maint/310-sh-to-mod.exp: ts: add test for path-like
  variable in 70/310

2020-05-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Dedup path entries found after sh-to-mod script source
  For path-like variable set by sourced script, the newly added path entries
  are analyzed to remove duplicates among the same portion to avoid a path to
  be prepended multiple times or appended multiple times.  Deduplication does
  not apply between prepended portion and appended portion. Path entries found
  set prior script sourced are also excluded from deduplication process.

2020-05-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Exclude PS1 variable from sh-to-mod environment change
  Sourced scripts may detect the need to update PS1, but this decision is
  taken over a specific environment where initialization scripts have not been
  evaluated for the shells.

2020-05-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/090-sh-to-mod.exp,
  testsuite/modules.70-maint/310-sh-to-mod.exp: No support of BSD sh shell on
  sh-to-mod currently  sh shell on BSD platform outputs alias definition with
  different character escaping than regular sh or dash on Linux platform.
  Disable test for this shell on this platform currently. Will see later on if
  a need to support this shell is needed.

  * testsuite/example/sh-to-mod.sh,
  testsuite/modules.70-maint/310-sh-to-mod.exp: ts: rework FOOSHELL var test
  in 70/310  Prefer BASH environment variable to SHELL to check bash binary
  location used for current shell session.

2020-05-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Run shell without loading its config to proceed
  sh-to-mod eval

  * modulecmd.tcl.in, testsuite/bin/install_test_csh,
  testsuite/example/sh-to-mod.csh,
  testsuite/install.00-init/090-sh-to-mod.exp,
  testsuite/modules.70-maint/310-sh-to-mod.exp: Add support for csh/tcsh
  shells on sh-to-mod sub-cmd

2020-05-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/005-init_ts.exp,
  testsuite/install.00-init/090-sh-to-mod.exp,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.70-maint/310-sh-to-mod.exp: ts: mksh not supported on
  sh-to-mod currently

  * testsuite/install.00-init/090-sh-to-mod.exp: ts: fix install 00/090 when
  quarantine is disabled  With quarantine mechanism disabled, no specific IFS
  is set when modulecmd.tcl output is evaluated with zsh and ksh shells,
  sh-to-mod does not output ';' character at end of each function line, thus
  when evaluated with default IFS the multiple lines are treated as a single
  command line.

2020-04-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .gitignore, modulecmd.tcl.in, testsuite/example/sh-to-mod.fish,
  testsuite/install.00-init/090-sh-to-mod.exp,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.70-maint/310-sh-to-mod.exp: Add support for fish shell on
  sh-to-mod sub-cmd

2020-04-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/310-sh-to-mod.exp: ts: prepare 70/310 for
  non-sh shells

2020-04-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/install.00-init/090-sh-to-mod.exp,
  testsuite/modules.70-maint/310-sh-to-mod.exp: Add support for ksh93 shell on
  sh-to-mod sub-cmd

  * modulecmd.tcl.in, testsuite/install.00-init/090-sh-to-mod.exp,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.70-maint/310-sh-to-mod.exp: Add support for dash shell on
  sh-to-mod sub-cmd  dash has some limitations for this task: - there is no
  mechanism to report shell functions set, so no shell function will be
  defined or unset with this shell through sh-to-mod - arguments cannot be
  passed to a sourced script

2020-04-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/install.00-init/090-sh-to-mod.exp,
  testsuite/modules.70-maint/310-sh-to-mod.exp: Add support for sh shell on
  sh-to-mod sub-cmd

2020-04-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/090-sh-to-mod.exp: ts: add install tests for
  sh-to-mod sub-cmd

2020-04-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.70-maint/310-sh-to-mod.exp: Add
  support for ksh shell on sh-to-mod sub-cmd  Specific code is required to
  retrieve defined functions in environment as `typeset -f` may output
  function definition with no clear separation between each other.

  * modulecmd.tcl.in, testsuite/modules.70-maint/310-sh-to-mod.exp: Add
  support for zsh shell on sh-to-mod sub-cmd

2020-04-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/sh-to-mod.sh,
  testsuite/modules.70-maint/310-sh-to-mod.exp: ts: add tests for 'sh-to-mod'
  sub-command

  * modulecmd.tcl.in: Handle error occuring when sourcing script in sh-to-mod
  Redirect stderr onto stdout when sourcing script in sh-to-mod sub-command in
  order to avoid a warning message put on stderr by script were taken as an
  error by Tcl exec command.  Also mix stdout and stderr messages of script to
  be able to provide all of them to user in case an error occurs during script
  source by shell (exit code found different than 0).  An error returned by
  shell execution is reported and ends sh-to-mod processing.

  * modulecmd.tcl.in: Format string and list for output  Add the strTo and
  listTo procedures to format a string or a list of string making it compliant
  with the destination language. Add support for Tcl and shell output,
  enclosing strings if they are empty or if they contain a space character
  respectively with curly braces or single quotes. And escaping those
  character if used in strings.  Use the new procedures in sh-to-mod to
  enclose/escape script name and its argument to source in shell command. Also
  use listTo in reportCmd, which was previously doing the same enclosing work.
  Make use of reportCmd to output result of sh-to-mod sub-command, in order to
  get the same formatted output than when doing a module display (with tabs
  and colors if enabled).  Add a -nativeargrep argument to reportCmd procedure
  to use (when called for sh-to-mod result) Tcl native string representation
  of list, which automatically enclose string if needed and escape special
  characters if present. Do not make this behavior a default as output made
  for module display should not automatically enclose strings using variable
  value reference (eg. $VAR).

2020-04-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Add 'sh-to-mod' procedure  Add the `sh-to-mod' procedure
  that executes script with args through shell and converts environment
  changes the script performs into corresponding modulefile commands.
  Environment changes made by script are found by making shell first outputing
  environment state, then sourcing script and after that outputing resulting
  environment state. Shell full output is after this execution parsed and
  analyzed, comparing environment state prior script source with state after
  script source.  Add support for Bash shell and track changes over
  environment variables, shell functions, shell aliases and current working
  directory.  Result is returned as a list of modulefile commands. Procedure
  is called by cmdModuleShToMod which outputs the modulefile commands with
  modulefile header '#%Module'.

2020-04-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/bash_completion.in: init: fix dup apropos/keyword/search in bash comp
  apropos, keyword and search sub-commands now accept arguments so they need
  to be removed from empty-or-wide-argument-command list

  * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in,
  init/zsh-functions/_module.in: init: add 'sh-to-mod' sub-cmd to shell comp
  scripts

  * init/fish_completion: init: fix list/source sub-cmd in fish completion
  list and source sub-commands do not need available modulefiles as argument.

  * testsuite/modulefiles/modbad/sh-to-mod,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.50-cmds/151-module-onlytop.exp,
  testsuite/modules.90-avail/070-full.exp: ts: update existing tests to check
  'sh-to-mod'

  * modulecmd.tcl.in: Add skeleton for new 'sh-to-mod' sub-command

2020-04-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.70-maint/220-config.exp: Optionally
  catch error when initializing a state  Ensure, when dumping all states that
  an error occuring during a state initialiaztion will not break the whole
  report.

2020-04-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc. state handling rework in NEWS

  * testsuite/modules.00-init/100-pager.exp,
  testsuite/modules.00-init/120-siteconfig.exp,
  testsuite/modules.00-init/140-color.exp,
  testsuite/modules.00-init/150-access-init.exp,
  testsuite/modules.70-maint/060-apropos.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/220-config.exp: ts: adapt tests to new state mngt

2020-04-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Refactor 'reportfd' state initialization  Transform the
  startPager procedure into initStateReportfd to have it automatically called
  first time value of 'reportfd' state is queried (so first time a message has
  to be outputed).  initStateReportfd procedure embeds the output of document
  start in case of structured output mode. This output is done there to avoid
  an infinite loop of reportfd state initialization.  Initialization of the
  'reportfd' state is triggered in initErrorReport if debug mode is enabled to
  have its reportDebug calls processed in buffer mode to get processed in
  correct order (otherwise reportfd initialization will appear first, before
  debug messages stored in buffer).  'already_report' state is removed as it
  is now useless.

  * modulecmd.tcl.in: Refactor 'paginate' state initialization  Transform
  initPager procedure into initStatePaginate and set this procedure as the
  initialization one for the 'paginate' state. Keep a specific call to
  'paginate' state to get it set prior pager initialization.  'pager_started'
  state is removed as it is now useless.

  * modulecmd.tcl.in: Migrate 'report_sep_next' to state struct

  * modulecmd.tcl.in: Migrate 'init_error_report' to state struct

  * CONTRIBUTING.rst, modulecmd.tcl.in: Migrating 'already_report' to state
  struct

  * modulecmd.tcl.in: Migrate 'false_rendered' to state struct

  * modulecmd.tcl.in: Migrate 'lm_info_cached' to state struct

  * modulecmd.tcl.in: Migrate all uname props to state struct  Instead of
  using a specific struct to cache uname properties value, use global state
  structure. As a consequence, domainname, kernelversion, nodename and
  osversion states are introduced. os state is changed just to store OS name
  and not OS name and version: OS version has its own state now.

  * modulecmd.tcl.in: Migrate 'sub2_separator' to state struct

  * modulecmd.tcl.in: Migrate 'sub1_separator' to state struct

  * modulecmd.tcl.in: Migrate 'cwd' to state struct

  * modulecmd.tcl.in: Migrate 'error_count' to state struct

  * modulecmd.tcl.in: Migrate 'return_false' to state struct

  * modulecmd.tcl.in: Migrate 'autoinit' to state struct

  * modulecmd.tcl.in: Migrate 'inhibit_interp' to state struct

  * modulecmd.tcl.in: Migrate 'inhibit_errreport' to state struct

2020-04-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Migrate CSH_LIMIT to 'csh_limit' cfg option

  * modulecmd.tcl.in: Migrate 'reportfd' to state struct

  * modulecmd.tcl.in: Migrate 'report_format' to state struct

  * modulecmd.tcl.in: Migrate 'cmdline' state retrieval to getState

  * modulecmd.tcl.in: Migrate 'extra_siteconfig_loaded' state retrieval to
  getState

  * modulecmd.tcl.in: Migrate 'force' state retrieval to getState

  * modulecmd.tcl.in, testsuite/example/siteconfig.tcl-1,
  testsuite/install.00-init/005-init_ts.exp,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/120-siteconfig.exp,
  testsuite/modules.00-init/140-color.exp: Migrate 'is_stderr_tty' state
  retrieval to getState

  * modulecmd.tcl.in: Migrate 'is_win' state retrieval to getState

  * modulecmd.tcl.in: Migrate 'machine' state retrieval to getState

  * modulecmd.tcl.in: Migrate 'os' state retrieval to getState

  * modulecmd.tcl.in: Migrate 'pager_started' state retrieval to getState

2020-04-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Migrate 'paginate' state retrieval to getState

  * modulecmd.tcl.in: Migrate 'path_separator' state retrieval to getState

2020-04-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Migrate 'rc_loaded' state retrieval to getState

  * modulecmd.tcl.in: Migrate 'siteconfig_loaded' state retrieval to getState

  * modulecmd.tcl.in: Migrate 'shell' state retrieval to getState

  * modulecmd.tcl.in: Migrate 'shelltype' state retrieval to getState

  * modulecmd.tcl.in: Migrate 'subcmd' state retrieval to getState

  * modulecmd.tcl.in: Migrate 'subcmd_args' state retrieval to getState

  * modulecmd.tcl.in: Migrate 'tcl_ext_lib_loaded' state retrieval to getState

  * modulecmd.tcl.in: Migrate 'tcl_version' state retrieval to getState

  * modulecmd.tcl.in, testsuite/example/siteconfig.tcl-1: Migrate
  'term_columns' state retrieval to getState

  * modulecmd.tcl.in: Create structs/procs to store/get states in common array

2020-06-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, contrib/rpm/environment-modules.spec.in, version.inc.in: Release
  of version 4.5.1

2020-05-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Fix format of err stack trace start  Fix formatting of
  error stack trace not to look for internal commands to withdraw if startup
  stack pattern cannot be matched.

2020-05-14  Roy Storey <kiwiroy@users.noreply.github.com>

  * modulecmd.tcl.in, testsuite/modules.00-init/150-access-init.exp: Use
  absolute path to load tcl_ext_lib  Fixes #344

2020-05-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .travis.yml: travis: update one OSX case to use latest img version

2020-05-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile: install: improve test deps dl retry mechanism

2020-05-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .travis.yml, Makefile: travis: retry test deps setup as their dl regularly
  fail  Add a 'test-deps' make target to specifically build all dependencies
  for tests, like Nagelfar and Tcl8.3 download. Call this specific target in
  Travis CI through the `travis_retry` utility to retry dependency download if
  they fail.

  * modulecmd.tcl.in, testsuite/modulefiles.2/setenv/0.1,
  testsuite/modulefiles/spread/3.0, testsuite/modulefiles/spread/7.0,
  testsuite/modulefiles/spreadrc/dir3/.modulerc,
  testsuite/modulefiles/spreadrc/dir3/1.0,
  testsuite/modulefiles/spreadrc/dir4/.modulerc,
  testsuite/modulefiles/spreadrc/dir7/.modulerc,
  testsuite/modulefiles/spreadrc/dir7/1.0,
  testsuite/modulefiles/spreadrc/dir8/.modulerc,
  testsuite/modules.50-cmds/029-setenv-env.exp: Sync env var changes across
  Tcl sub-interpreters  Ensure environment variable change at the Tcl
  interpreter level is propagated to every sub-interpreters used to evaluate
  modulefiles or modulercs.  Tcl by default maintain the `::env` array in sync
  across all started interpreters. But in some cases, it appears a change
  occuring in master interpreter is not correctly propagated when the variable
  is later on updated in sub-interpreter.  Fixes #342

2020-05-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modulefiles.allin/restoreenv/0.1,
  testsuite/modulefiles.allin/restoreenv/0.2,
  testsuite/modules.50-cmds/360-restoreenv.exp: Keep link with env vars when
  restoring settings after breakage  In case a modulefile evaluation fails,
  environment context prior this failed evaluation is restored. Fix
  environment variable restoration mechanism to keep the link that monitors
  and updates environment variable array `env` in every Tcl sub-interpreters.
  Unsetting the whole `env` array makes Tcl stop monitoring env accesses and
  stop updating environment variables. Environment context restoration is now
  done by updating the `env` array (unsetting keys in the array and setting
  value for new or existing keys).  Fixes #340

2020-05-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.70-maint/280-ml.exp: Disable pager
  when clear sub-cmd called with ml cmd  To ensure a proper prompt message
  output on clear sub-command, no pager is started. This commit also turns off
  pager when clear sub-command is called through the ml shortcut command.
  Fixes #338

2020-04-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .gitattributes: install: remove project-specific tools from git export

2020-04-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .gitattributes, script/mpub: script: add 'mpub' to publish new release
  Add the `mpub` script, that automates Modules new release publishing over
  git repositories and websites.

  * .gitattributes, script/mrel: script: add 'mrel' to build/test release
  files  Introduce the `mrel` script, that automates build of the Modules
  release files and performs tests over these distribution files to guaranty
  their correctness.

  * Makefile: install: consistenly output Makefile warning msgs on stderr

2020-04-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, contrib/rpm/environment-modules.spec.in, version.inc.in: Release
  of version 4.5.0

  * .gitattributes: install: exclude .github dir from dist tarballs

  * .cirrus.yml: cirrus: use updated FreeBSD images  Remove openmp package,
  not available in these new images. (was required on previous images to get
  an operational R setup)

  * testsuite/modulefiles.2/autosym1/.modulerc,
  testsuite/modulefiles.2/autosym1/1, testsuite/modulefiles.2/autosym1/2,
  testsuite/modulefiles.2/autosym2/.modulerc,
  testsuite/modulefiles.2/autosym2/1, testsuite/modulefiles.2/autosym2/2,
  testsuite/modulefiles.2/autosym3/.modulerc,
  testsuite/modulefiles.2/autosym3/1, testsuite/modulefiles.2/autosym3/2,
  testsuite/modulefiles.2/autosym4/.modulerc,
  testsuite/modulefiles.2/autosym4/1, testsuite/modulefiles.2/autosym4/2,
  testsuite/modulefiles.2/autosym5/.modulerc,
  testsuite/modulefiles.2/autosym5/1, testsuite/modulefiles.2/autosym5/2,
  testsuite/modulefiles.2/autosym5/default,
  testsuite/modulefiles.2/autosym6/.modulerc,
  testsuite/modulefiles.2/autosym6/1, testsuite/modulefiles.2/autosym6/2,
  testsuite/modulefiles.2/autosym7/dir1/1,
  testsuite/modulefiles.2/autosym7/dir1/2,
  testsuite/modulefiles.2/autosym7/dir2/1,
  testsuite/modulefiles.2/autosym7/dir2/2,
  testsuite/modulefiles.2/autosym8/.modulerc,
  testsuite/modulefiles.2/autosym8/1, testsuite/modulefiles.2/autosym8/2,
  testsuite/modulefiles.2/autosym9/1, .../274-adv_version_spec-autosym.exp:
  ts: add 70/274 tests to validate auto symbols

2020-04-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, modulecmd.tcl.in,
  .../modules.70-maint/271-adv_version_spec-in.exp: Honor default when version
  list is composed of symvers  When an advanced version specifier list
  contains symbolic version references, fix resolving to honor default version
  if part of the specified list.  Fixes #334.

2020-04-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc. getModules improvements in NEWS

  * MIGRATING.rst: doc: desc. auto default/latest symbols in MIGRATING

  * doc/source/module.rst, doc/source/modulefile.rst: doc: desc.
  default/latest auto symbols in man pages

2020-04-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/130-auto_handling.exp,
  testsuite/modules.10-use/040-load-use.exp,
  testsuite/modules.20-locate/031-defvers2.exp,
  testsuite/modules.20-locate/035-defname.exp,
  testsuite/modules.20-locate/038-defcontext.exp,
  testsuite/modules.20-locate/040-alias.exp,
  testsuite/modules.20-locate/043-virtual.exp,
  testsuite/modules.20-locate/045-symvers.exp,
  testsuite/modules.20-locate/048-symexec.exp,
  testsuite/modules.20-locate/050-locrc.exp,
  testsuite/modules.20-locate/057-mcookie.exp,
  testsuite/modules.20-locate/066-modulepath-rc.exp,
  testsuite/modules.20-locate/067-hidden.exp,
  testsuite/modules.20-locate/068-transitive.exp,
  testsuite/modules.20-locate/069-cross.exp,
  testsuite/modules.20-locate/075-symlink.exp,
  testsuite/modules.20-locate/080-access.exp,
  testsuite/modules.20-locate/090-memcache.exp,
  testsuite/modules.20-locate/100-wspace.exp,
  testsuite/modules.50-cmds/015-use.exp,
  testsuite/modules.50-cmds/020-setenv.exp,
  testsuite/modules.50-cmds/022-setenv-eschars.exp,
  testsuite/modules.50-cmds/030-unsetenv.exp,
  testsuite/modules.50-cmds/076-alias-sub.exp,
  testsuite/modules.50-cmds/081-info-user.exp,
  testsuite/modules.50-cmds/095-uname.exp,
  testsuite/modules.50-cmds/100-loglevel.exp,
  testsuite/modules.50-cmds/105-trace.exp,
  testsuite/modules.50-cmds/110-verbose.exp,
  testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/121-prereq-module.exp,
  testsuite/modules.50-cmds/122-prereq-fullpath.exp,
  testsuite/modules.50-cmds/130-conflict-full.exp,
  testsuite/modules.50-cmds/131-conflict-module.exp,
  .../modules.50-cmds/132-conflict-fullpath.exp,
  testsuite/modules.50-cmds/140-system.exp,
  testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.50-cmds/152-module-emptyarg.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/195-load-recurs.exp,
  testsuite/modules.50-cmds/197-load-lots.exp,
  testsuite/modules.50-cmds/230-loop.exp,
  testsuite/modules.50-cmds/240-chdir.exp,
  testsuite/modules.50-cmds/250-x-resource.exp,
  testsuite/modules.50-cmds/260-getenv.exp,
  testsuite/modules.50-cmds/300-interp.exp,
  testsuite/modules.50-cmds/301-interp-command.exp,
  testsuite/modules.50-cmds/302-interp-cascaded.exp,
  testsuite/modules.50-cmds/310-puts.exp,
  testsuite/modules.50-cmds/340-modvar.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.50-cmds/359-allin-env.exp,
  testsuite/modules.50-cmds/360-restoreenv.exp,
  testsuite/modules.50-cmds/375-deps6.exp,
  testsuite/modules.50-cmds/375-order.exp,
  testsuite/modules.50-cmds/376-switch.exp,
  testsuite/modules.50-cmds/378-sametarget.exp,
  testsuite/modules.50-cmds/380-altname.exp,
  testsuite/modules.50-cmds/390-function.exp,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.70-maint/050-whatis-load.exp,
  testsuite/modules.70-maint/180-reload.exp,
  testsuite/modules.70-maint/230-verbosity.exp,
  testsuite/modules.70-maint/240-icase.exp,
  testsuite/modules.70-maint/250-nan.exp,
  .../modules.70-maint/260-extended_default.exp,
  .../modules.70-maint/270-adv_version_spec.exp,
  .../modules.70-maint/271-adv_version_spec-in.exp,
  .../272-adv_version_spec-range.exp, .../273-adv_version_spec-space.exp,
  testsuite/modules.70-maint/280-ml.exp,
  testsuite/modules.70-maint/290-json.exp,
  testsuite/modules.70-maint/300-err_stack.exp,
  testsuite/modules.80-deep/020-load-deep.exp,
  testsuite/modules.80-deep/022-switch.exp,
  testsuite/modules.80-deep/068-transitive-deep.exp,
  testsuite/modules.80-deep/080-access-deep.exp,
  testsuite/modules.80-deep/090-deepvirt.exp,
  testsuite/modules.91-sort/040-load-sort.exp,
  testsuite/modules.95-version/022-load2.exp: ts: adapt existing tests for
  auto symbols

2020-04-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Record auto symbol in loaded environment  Once a module,
  which benefits from automatically defined symbolic versions, is loaded, the
  associated auto symbols are recorded in loaded environment among all the
  alternative names applying to the loaded module (in `MODULES_LMALTNAME`
  environment variable).  Auto symbols are distinguished from regular symbols
  by the `as|` prefix which is applied to them.

2020-03-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Auto define default/latest symbol when adv_vers_spec
  enabled  When `advanced_version_spec` is enabled, automatically define a
  `default` and `latest` symbolic version for each module (at each module
  depth for deep modules) if those symbols or alias or regular modules with
  these names are not defined.  In case `implicit_default` configuration is
  disabled, these automatic symbolic versions are not defined.  Design
  principles are described in *Default and latest version specifiers*
  document.  Fixes #210.

2020-04-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Fix version target inclusion loop in getModules  Change
  loop variable name, as direlt is already used to control what entry to
  record in parent directory.

2020-04-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .../design/default-latest-version-specifiers.rst: doc: refine
  default/latest vers spec design

2020-03-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.20-locate/090-memcache.exp,
  .../modules.70-maint/260-extended_default.exp: Perform noplaindir filter
  within getModules  Rather applying a filter that removes the directory
  entries with no tag attached to them, except if search is performed in a
  no-indepth manner, perform this filter directly withing getModules
  procedure.

  * modulecmd.tcl.in, .../modules.70-maint/260-extended_default.exp,
  .../modules.70-maint/270-adv_version_spec.exp,
  testsuite/modules.90-avail/080-noindepth.exp: Perform
  onlydefaults/onlylatest filter within getModules  Rather re-filtering result
  from getModules procedure within listModules procedure, perform the
  onlydefaults/onlylatest (-d/-L) avail filters directly within getModules.

2020-03-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Ensure dir struct definition when only contains
  not-searched default  In case a directory has set for default element an
  hidden entry not searched in this getModules processing, still record this
  directory in dir_list with the default target referred in it (even if not
  part of found_list result.  Doing so ensure that starting phase 3 of
  getModules processing, all directories with a default defined will have an
  entry in found_list.

  * testsuite/modules.70-maint/220-config.exp: ts: fix 70/220 when
  MODULES_ICASE is externally set

2020-03-31  Adrien Cotte <adrien.cotte@eolen.com>

  * init/bash_completion.in: bash_completion: fix ml no space between -modules

2020-03-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Remove uneeded test when removing dir from getModules
  res

  * .travis.yml, contrib/rpm/environment-modules.spec.in: rpm: define
  LD_PRELOAD as quarantine var along with LD_LIBRARY_PATH  To ensure a sane
  quarantine effect in case LD_PRELOAD libs depend on libraries found with
  LD_LIBRARY_PATH.  See
  https://sourceforge.net/p/modules/mailman/message/36959212/

  * modulecmd.tcl.in, testsuite/modulefiles/loc_rc010/.modulerc,
  testsuite/modulefiles/loc_rc010/dir/.4.0,
  testsuite/modulefiles/loc_rc010/dir/sub1/notamod,
  testsuite/modulefiles/loc_rc010/dir/sub2/incompat,
  testsuite/modulefiles/loc_rc010/wrong,
  testsuite/modules.20-locate/045-symvers.exp,
  testsuite/modules.70-maint/130-aliases.exp: Rework version target inclusion
  in getModules result  Rework loop walking the symbolic version target to
  include all elements recursively contained in directory targeted by symbolic
  version. Now using dir_list structure to walk path rather querying the whole
  found_list with modEq test procedure.

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.80-deep/068-transitive-deep.exp: ts: fix indepth-dependent
  test in 80/068  For 3 tests, result depends on indepth option, not
  implicit_default option.

2020-03-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/modulefile.rst: doc: clarify hidden module location in
  modulefile.4

  * modulecmd.tcl.in, testsuite/modulefiles/loc_rc010/subdir/.hidsub/3.0,
  testsuite/modulefiles/loc_rc010/subdir/.modulerc,
  testsuite/modulefiles/loc_rc010/subdir/.subdir/3.0,
  testsuite/modules.20-locate/067-hidden.exp: Add ref in res to version target
  not in res but not searched  Enable resolution of default module in module
  sub-directory when this default symbol targets an hidden directory (whose
  name starts with a dot character).  Adapt getModules procedure to add
  reference, in the directory description returned as result, for symbolic
  version targets that are hidden, not included in returned result but
  excluded from search made.  Fixes #331

  * modulecmd.tcl.in, testsuite/modules.70-maint/130-aliases.exp: Filter
  hidden sym/alias/module from aliases output  Filter-out from the output of
  the `aliases` sub-command all hidden aliases, symbolic versions or hidden
  modules targeted by a non-hidden symbolic version.  Fixes #330

2020-03-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles/loc_rc010/.modulerc,
  testsuite/modulefiles/loc_rcv1/.modulerc,
  testsuite/modules.20-locate/067-hidden.exp,
  testsuite/modules.20-locate/080-access.exp,
  testsuite/modules.90-avail/070-full.exp: ts: test alias/symver/virtual
  hidden modules in 20/067

2020-03-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Consider alias/symver/virtual hidden if name starts with
  .  Hide special modules (aliases, symbolic versions and virtual modules)
  whose version name starts with a dot character (.) from avail, whatis and
  paths searches if their query does not fully match special module name.
  Hidden symbolic version will still be reported if the modulefile it targets
  is part of search result.  Fixes #329

2020-03-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/etc/modulerc.deepvirt, testsuite/modulefiles.2/.modulerc,
  testsuite/modulefiles.2/deepvirt1/.modulerc, testsuite/modulefiles.2/quux/1,
  testsuite/modules.80-deep/090-deepvirt.exp: ts: add 80/090 deep alias and
  virtual module tests

  * testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.70-maint/290-json.exp,
  testsuite/modules.90-avail/070-full.exp: ts: compare sorted json output  As
  json output is not sorted by modulecmd.tcl it may happens that test output
  found on some configurations or platforms is not the one expected although
  it is correct.  To avoid these errors a new test procedure is added to
  compare stderr output in a sorted manner, so error will be obtained if
  something is missing in the result but not if the result is outputed in a
  different order.

2020-03-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.20-locate/090-memcache.exp,
  testsuite/modules.70-maint/290-json.exp,
  testsuite/modules.90-avail/070-full.exp: Exclude directory from findModules
  result  There is no need to record found directory in findModules result as
  these elements will be computed in getModules.

  * modulecmd.tcl.in: No record of dir content in res returned by findModules
  No need to record the content of each directory in the result returned by
  the findModules procedure as full directory content (with virtual elements)
  is computed in getModules.

  * modulecmd.tcl.in: Remove useless modMatchAtDepth procedure  Following
  getModules code refactoring, the generated procedure modMatchAtDepth has
  become useless. Only doesModMatchAtDepth is now used.

2020-03-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/190-emptyarg.exp,
  testsuite/modules.70-maint/240-icase.exp,
  testsuite/modules.70-maint/290-json.exp,
  testsuite/modules.80-deep/068-transitive-deep.exp,
  testsuite/modules.90-avail/070-full.exp: ts: adapt tests to getModules
  refactoring  Available modules search process is not changed but the
  refactoring of the getModules procedure fixed some hidden issues like in
  80/068: symbol targeting a directory which contains aliases where not
  correctly analyzed previously (aliases where skipped from result)  Module
  avail result order also change when JSON format output is enabled due to
  this code refactoring (as JSON output is not sorted).  It also fix non-wild
  searches (performed during whatis or paths sub-commands) that previously
  matched partial alias, symbolic version or virtual module names. Fully
  matching names for these kind of modules are not only retained for these
  non-wild searches. Test results in 70/190, 70/240 and 70/290 have been
  adapted.

2020-03-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Refactor getModules procedure  Rework the full
  getModules procedure to simplify its processing and apply the same match
  tests to every kind of modules (regular modulefile, symbolic, version, alias
  or virtual module).  getModules procedure acts now in 4 phases. First every
  kind of modules are gathered. Then a second phase is set to filter-out
  modules dynamically hidden or forbidden (this filter will be deployed later
  on). Third phase is the elaboration of each directory content to determine
  especially their default and latest versions. At last the fourth phase
  process all gathered results to only keep those matching search query.  As
  the procedure now applies the same mechanisms for all kind of modules, this
  code refactoring has solved several issues:  * An `avail` search over a
  symbolic version targeting a directory now correctly returns the special
  modules (alias and virtual module) lying in this directory.  * `whatis` and
  `paths` searches only return special modules (symbolic version, alias and
  virtual modules) that fully match search query not those that partially
  match it.  * alias and virtual module whose name mention a directory that
  does not exists are correctly handled.  Fixes #168, #327 and #328

2020-03-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/default-latest-version-specifiers.rst: doc: update
  deflatest design for default/latest modfile

2020-03-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc. ml bash comp/fish stderr fix/space fixes in NEWS

2020-03-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.20-locate/100-wspace.exp: Fix path cmd
  result if it contains space char

  * testsuite/install.00-init/080-args.exp,
  testsuite/modules.20-locate/100-wspace.exp,
  .../273-adv_version_spec-space.exp: ts: adapt tests after enclosed mod names
  in adv_vers_spec disabled mode

2020-02-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Enclose names incl. space even if adv_vers_spec is
  disabled  Enclose module name and versions if it contains a space character
  even if the advanced versio specifier mechanism is disabled.  Rework the
  advanced version specifier parsing done in parseModuleVersionSpecifier
  procedure to also check argument passed if advanced_version_spec mechanism
  is disabled and enclose them in curly braces if a space character is found
  in them.

2020-03-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/home/coll15, testsuite/home/coll16,
  testsuite/modulefiles.2/space ye/1.8, testsuite/modulefiles.2/space ye/1.9,
  testsuite/modulefiles.2/space ye/2.8, testsuite/modulefiles.2/space ye/2.9,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.20-locate/100-wspace.exp,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/999-cleanup.exp,
  .../273-adv_version_spec-space.exp,
  testsuite/modules.90-avail/080-noindepth.exp: ts: tests module
  path/name/version finishing by a space char

2020-03-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.2/sp.ce y+/0 2, testsuite/modulefiles.2/space
  ye/1.0, testsuite/modulefiles.2/space ye/1.1, testsuite/modulefiles.2/space
  ye/1.2, testsuite/modulefiles.2/space ye/1.3, testsuite/modulefiles.2/space
  ye/1.4, testsuite/modulefiles.2/space ye/1.5, testsuite/modulefiles.2/space
  ye/1.6, testsuite/modulefiles.2/space ye/1.7, testsuite/modulefiles.2/space
  ye/2.0, testsuite/modulefiles.2/space ye/2.1, testsuite/modulefiles.2/space
  ye/2.2, testsuite/modulefiles.2/space ye/2.3, testsuite/modulefiles.2/space
  ye/2.4, testsuite/modulefiles.2/space ye/2.5, testsuite/modulefiles.2/space
  ye/2.6, testsuite/modulefiles.2/space ye/2.7,
  testsuite/modules.00-init/005-init_ts.exp,
  .../272-adv_version_spec-range.exp, .../273-adv_version_spec-space.exp: ts:
  add tests mixing adv vers spec and deps

2020-02-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.20-locate/100-wspace.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/060-saveshow.exp,
  testsuite/modules.70-maint/240-icase.exp,
  testsuite/modules.70-maint/260-extended_default.exp,
  testsuite/modules.70-maint/270-adv_version_spec.exp,
  testsuite/modules.70-maint/272-adv_version_spec-range.exp: ts: skip wspace
  tests if symlinks not supported on fs

2020-02-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Correctly enclose mod name when defining cmp proc

  * modulecmd.tcl.in: Keep mod vers spec enclosed if containing space when
  parsed

2020-02-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.2/sp.ce y+/1.2, testsuite/modulefiles.2/sp.ce
  y+/2.10, testsuite/modulefiles.2/sp.ce y+/2.4, testsuite/modulefiles.2/sp.ce
  y+/2.6, testsuite/modulefiles.2/sp.ce y+/2.7, testsuite/modulefiles.2/space
  yd/2.1, testsuite/modulefiles.2/space yd/2.10, testsuite/modulefiles.2/space
  yd/2.2, testsuite/modulefiles.2/space yd/3.0, testsuite/modulefiles.2/space
  yd/4.1, testsuite/modulefiles.2/space yd/5.0,
  testsuite/modules.70-maint/240-icase.exp,
  .../modules.70-maint/260-extended_default.exp,
  .../modules.70-maint/270-adv_version_spec.exp,
  .../272-adv_version_spec-range.exp: ts: test space in names with
  icase/extdfl/adv_vers_spec

2020-02-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/initrc.in, testsuite/modules.70-maint/120-autoinit.exp:
  ts: add names with space in test example initrc

  * testsuite/install.00-init/005-init_ts.exp,
  testsuite/install.00-init/020-module.exp: ts: test name containing space on
  install ts

  * .appveyor.yml: appveyor: use default inst dir for win native test

  * site.exp.in, testsuite/install.00-init/030-options.exp: ts: check
  availability of createmodule.py in install ts

  * testsuite/modules.20-locate/100-wspace.exp,
  testsuite/modules.90-avail/080-noindepth.exp: ts: test space in name against
  no-indepth and no implicit_default

  * modulecmd.tcl.in: Enclose mod and modpath names if space in them when
  saving coll

  * modulecmd.tcl.in: Fix collection parsing to handle enclosed names
  Correctly read modulepath and module names if enclosed in double-quotes or
  curly-braces to escape space characters used in these names.

  * testsuite/home/coll15, testsuite/home/coll16,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/060-saveshow.exp,
  testsuite/modules.61-coll/999-cleanup.exp: ts: test colls with space in
  modulepath and module names

  * testsuite/modules.20-locate/100-wspace.exp: ts: test space in module name
  against ml command

2020-02-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.2/space yc/2, testsuite/modulefiles.2/space yc/3,
  testsuite/modulefiles.2/space yc/4, testsuite/modulefiles.2/space yc/5,
  testsuite/modulefiles.2/spacenc/2, testsuite/modulefiles.2/spacenc/3,
  testsuite/modulefiles.2/spacenc/4,
  testsuite/modules.20-locate/100-wspace.exp: ts: tests using space in module
  dependencies

  * modulecmd.tcl.in: Fix handling of mod containing space when set as deps
  Fix dependency analysis mechanisms to correctly handle modulefiles contaning
  space in their name.

2020-02-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/config/unix.exp, testsuite/modulefiles wspace,
  testsuite/modulefiles.2/space ya/.modulerc, testsuite/modulefiles.2/space
  ya/1, testsuite/modulefiles.2/space ya/2, testsuite/modulefiles.2/space
  yb/.modulerc, testsuite/modulefiles.2/space yb/1,
  testsuite/modulefiles.2/spacen/.modulerc, testsuite/modulefiles.2/spacen/1,
  testsuite/modulefiles.2/spacen/2 s,
  testsuite/modulefiles.2/spacenb/.modulerc,
  testsuite/modulefiles.2/spacenb/1,
  testsuite/modules.20-locate/100-wspace.exp: ts: tests using space in module
  or modulepath names

2020-02-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Protect mod or modpath names containing space from eval
  Correctly handle modulefiles and modulepaths containing a space character in
  their name.  Protect module and modulepath names which contain a space from
  being splitted in two words.

2020-03-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/fish_completion, modulecmd.tcl.in,
  testsuite/modules.70-maint/120-autoinit.exp: Update stderr redirection for
  new Fish shell versions  Use of '^' character to redirect stderr has been
  deprecated starting Fish version 3.1. It now produces an error. Stderr
  should be redirected with '2>' like on SH shells. Hopefully '2>' redirection
  is also supported on old Fish versions (all version 2 support it).  Fixes
  #325

2020-03-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/bash_completion.in: init: define ml completion only if ml command
  defined

2020-03-12  Adrien Cotte <adrien@cotte.com>

  * init/bash_completion.in: init: add 'ml' command support in bash completion

2020-03-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc. recent changes in NEWS

2020-03-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.rst, MIGRATING.rst, Makefile, NEWS.rst, script/TESTINSTALL.bat,
  testsuite/install.00-init/030-options.exp: install/ts/doc: install and test
  envml.cmd along other *.cmd

  * script/envml.cmd: script: apply same module enablement check in all *.cmd

2020-02-29  Jacques Raphanel <Jacques.Raphanel@esi-group.com>

  * script/envml, script/envml.cmd: script: introduce envml.cmd for windows
  Provide a dedicated batch file to provide similar behavior of envml bash
  script but for CMD Windows shell. Update existing envml bash script to
  provide same behavior for cmd and sh file (split argument over ';'
  character, in addition to '&' character).

2020-03-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/diff_v3_v4.rst: doc: add ref to 4.0 closed issues in diff doc

  * MIGRATING.rst: doc: desc. error stack trace in MIGRATING

2020-03-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .github/ISSUE_TEMPLATE/bug_report.md,
  .github/ISSUE_TEMPLATE/feature_request.md: github: add issue templates

  * testsuite/example/siteconfig.tcl-1, testsuite/modulefiles.2/bad3/bodyfor,
  testsuite/modulefiles.2/bad3/bodyif, testsuite/modulefiles.2/bad3/bodywhile,
  testsuite/modulefiles.2/bad3/proc2, testsuite/modulefiles.2/bad3/proc3,
  testsuite/modulefiles.2/badrc3/.modulerc,
  testsuite/modules.00-init/120-siteconfig.exp,
  testsuite/modules.70-maint/300-err_stack.exp: ts: add more error stack tests

2020-03-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/120-autoinit.exp: ts: tclsh is reported
  tclshX.Y on FreeBSD

2020-03-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/120-siteconfig.exp,
  testsuite/modules.00-init/140-color.exp: ts: adapt err stack output for
  siteconfig failed eval

  * modulecmd.tcl.in: Rework error stack filtering for siteconfig eval issue
  When a error occurs during the evaluation of the siteconfig specific file,
  only remove from error stack the elements relative to the modulecmd.tcl code
  that evaluates the file.

  * .cirrus.yml: cirrus: add tclsh to FreeBSD test env

  * script/mt: script: mt exits in err if ts ok but review failed

  * testsuite/modules.50-cmds/095-uname.exp,
  testsuite/modules.50-cmds/151-module-onlytop.exp,
  testsuite/modules.50-cmds/152-module-emptyarg.exp,
  testsuite/modules.50-cmds/284-info-others.exp,
  testsuite/modules.50-cmds/330-source.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/080-help.exp,
  testsuite/modules.70-maint/085-test.exp,
  testsuite/modules.70-maint/120-autoinit.exp,
  testsuite/modules.70-maint/170-contact.exp,
  testsuite/modules.70-maint/300-err_stack.exp: ts: fix expected err stack
  result for Tcl8.4 ran with coverage  Do not match error stack output exactly
  as extended code block reported on Tcl8.4 differ whether tests are run with
  coverage enabled or disabled.

2020-03-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.20-locate/066-modulepath-rc.exp,
  testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.50-cmds/042-append-delim.exp,
  testsuite/modules.50-cmds/045-append-undo.exp,
  testsuite/modules.50-cmds/047-app-del-undo.exp,
  testsuite/modules.50-cmds/050-prepend.exp,
  testsuite/modules.50-cmds/052-prepend-delim.exp,
  testsuite/modules.50-cmds/055-prepend-undo.exp,
  testsuite/modules.50-cmds/057-pre-del-undo.exp,
  testsuite/modules.50-cmds/060-remove.exp,
  testsuite/modules.50-cmds/062-remove-delim.exp,
  testsuite/modules.50-cmds/065-remove-undo.exp,
  testsuite/modules.50-cmds/122-prereq-fullpath.exp,
  testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.50-cmds/152-module-emptyarg.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/180-unload.exp,
  testsuite/modules.50-cmds/190-load.exp,
  testsuite/modules.50-cmds/330-source.exp,
  testsuite/modules.50-cmds/376-switch.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/080-help.exp,
  testsuite/modules.70-maint/085-test.exp,
  testsuite/modules.70-maint/090-source.exp,
  testsuite/modules.70-maint/140-multiargs.exp,
  testsuite/modules.70-maint/150-append-path.exp,
  testsuite/modules.70-maint/151-prepend-path.exp,
  testsuite/modules.70-maint/152-remove-path.exp,
  testsuite/modules.70-maint/170-contact.exp,
  testsuite/modules.70-maint/190-emptyarg.exp,
  testsuite/modules.70-maint/230-verbosity.exp,
  .../modules.70-maint/270-adv_version_spec.exp,
  .../modules.70-maint/271-adv_version_spec-in.exp,
  .../272-adv_version_spec-range.exp, testsuite/modules.70-maint/280-ml.exp,
  testsuite/modules.70-maint/290-json.exp,
  testsuite/modules.70-maint/300-err_stack.exp: ts: refactor common modulefile
  error msg

  * testsuite/modules.50-cmds/095-uname.exp,
  testsuite/modules.50-cmds/151-module-onlytop.exp,
  testsuite/modules.50-cmds/152-module-emptyarg.exp,
  testsuite/modules.50-cmds/284-info-others.exp,
  testsuite/modules.50-cmds/330-source.exp: ts: new err stack format expose
  switch block on Tcl8.4

2020-03-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Rework error stack filtering  Improve error stack output
  format to only filter elements of the stack describing modulecmd.tcl
  internals. This is now achieved by comparing procedure name in the stack or
  its caller procedure name against interpreter known Tcl commands and
  procedures. If procedure or caller name in the stack is only known by
  modulecmd.tcl Tcl interpreter (and not modulefile or modulerc Tcl
  interpreter) then this element in the error stack is discarded.

2020-03-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Also report modulerc err stack trace for known error

  * testsuite/modules.20-locate/066-modulepath-rc.exp,
  testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.50-cmds/042-append-delim.exp,
  testsuite/modules.50-cmds/045-append-undo.exp,
  testsuite/modules.50-cmds/047-app-del-undo.exp,
  testsuite/modules.50-cmds/050-prepend.exp,
  testsuite/modules.50-cmds/052-prepend-delim.exp,
  testsuite/modules.50-cmds/055-prepend-undo.exp,
  testsuite/modules.50-cmds/057-pre-del-undo.exp,
  testsuite/modules.50-cmds/060-remove.exp,
  testsuite/modules.50-cmds/062-remove-delim.exp,
  testsuite/modules.50-cmds/065-remove-undo.exp,
  testsuite/modules.50-cmds/095-uname.exp,
  testsuite/modules.50-cmds/122-prereq-fullpath.exp,
  testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.50-cmds/151-module-onlytop.exp,
  testsuite/modules.50-cmds/152-module-emptyarg.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/284-info-others.exp,
  testsuite/modules.50-cmds/310-puts.exp,
  testsuite/modules.50-cmds/330-source.exp,
  testsuite/modules.70-maint/085-test.exp,
  testsuite/modules.70-maint/140-multiargs.exp,
  .../modules.70-maint/270-adv_version_spec.exp,
  .../modules.70-maint/271-adv_version_spec-in.exp,
  .../272-adv_version_spec-range.exp: ts: adapt module err output to display
  err stack

  * modulecmd.tcl.in: Also report modulefile err stack trace for known error
  When an error occurs during the evaluation of a modulefile, report
  associated error stack trace filtered to only output useful information for
  users. Errors thrown by a modulecmd.tcl procedure, only the second to last
  element in error stack has to be kept to hide modulecmd.tcl internals.

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.20-locate/066-modulepath-rc.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/080-help.exp,
  testsuite/modules.70-maint/085-test.exp,
  testsuite/modules.70-maint/170-contact.exp,
  testsuite/modules.70-maint/300-err_stack.exp: ts: adapt err stack output for
  old tcl version

2020-02-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.2/bad3/.bodycommon,
  testsuite/modulefiles.2/bad3/.proccommon,
  testsuite/modulefiles.2/bad3/bodyproc,
  testsuite/modulefiles.2/bad3/bodysource,
  testsuite/modulefiles.2/bad3/procproc,
  testsuite/modulefiles.2/bad3/procsource,
  testsuite/modulefiles.2/badrc3/.modulerc, testsuite/modulefiles.2/badrc3/1,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.70-maint/300-err_stack.exp: ts: test err stack trace
  output in 70/300

  * testsuite/modules.20-locate/066-modulepath-rc.exp,
  testsuite/modules.50-cmds/190-load.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/080-help.exp,
  testsuite/modules.70-maint/085-test.exp: ts: adapt modulerc err output to
  display err stack

  * modulecmd.tcl.in: Report modulerc err stack trace if error is unknown
  When an error occurs during the evaluation of a modulerc, report associated
  error stack trace filtered to only output useful information for users.

2020-02-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/180-unload.exp,
  testsuite/modules.50-cmds/190-load.exp,
  testsuite/modules.50-cmds/376-switch.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/080-help.exp,
  testsuite/modules.70-maint/085-test.exp,
  testsuite/modules.70-maint/090-source.exp,
  testsuite/modules.70-maint/140-multiargs.exp,
  testsuite/modules.70-maint/170-contact.exp,
  testsuite/modules.70-maint/200-errdisp.exp,
  testsuite/modules.70-maint/230-verbosity.exp,
  testsuite/modules.70-maint/280-ml.exp: ts: adapt module err output to
  display err stack

  * modulecmd.tcl.in: Return error thrown by puts with a specific code  As
  `puts` procedure is specifically handled in modulefile evaluation context,
  also consider the errors it thrown as specific not to disclose the specific
  stack trace.

2020-02-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Report modulefile err stack trace if error is unknown
  When an error occurs during the evaluation of a modulefile, report
  associated error stack trace filtered to only output useful information for
  users.

2020-02-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/120-siteconfig.exp: ts: test unknown issue throw
  in 00/120

  * modulecmd.tcl.in: Encourage unknown issue report to GitHub project

  * modulecmd.tcl.in: Catch modulefile known errors with error codes  Use
  specific error code (MODULES_ERR_SUBFAILED, MODULES_ERR_GLOBALTOP and
  MODULES_ERR_GLOBAL) rather prepending error message with a specific string
  to throw known errors occurring during modulefile evaluation.

  * modulecmd.tcl.in, testsuite/modules.00-init/120-siteconfig.exp,
  testsuite/modules.00-init/140-color.exp: Report err stack trace for
  siteconfig eval errors  Add to the error message the error stack trace for
  errors occuring during site-specific configuration evaluation. Error stack
  is expunged from the modulecmd.tcl internals to only report information
  relevant to site-specific configuration file.  Introduce the
  `formatErrStackTrace` procedure to tailor error stack trace to filter and
  only keep informations that are relevant to users to understand what code is
  broken.

  * modulecmd.tcl.in: Report err stack trace if error is unknown  Add to the
  error message the error stack trace on a global error when this error is
  unknown.

2020-02-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Throw known error with a specific error code  Use
  `MODULES_ERR_KNOWN` error code to throw errors that are known to the module
  system. `knerror` procedure is introduced to throw error with this new
  specific error code set.

  * modulecmd.tcl.in: Render error in main's catch  Define
  `MODULES_ERR_RENDERED` error code, used in `reportErrorAndExit` procedure to
  express that generated error has been rendered (error count increased and
  false value returned on stdout).  If an error is caught in main procedure
  catch, render its error if not done yet (if obtained errorCode is not
  `MODULES_ERR_RENDERED`).  So there is no more need to catch error around
  main call to `module` or `ml` procedure has it will be now correctly handled
  by main catch. Thus in this situation error will only be rendered once.

2020-02-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/005-init_ts.exp,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/120-siteconfig.exp,
  testsuite/modules.00-init/140-color.exp,
  testsuite/modules.60-initx/080-access-initx.exp,
  testsuite/modules.61-coll/080-access-coll.exp,
  testsuite/modules.70-maint/290-json.exp: ts: adapt err msg for multi-line
  msg harmonization

  * modulecmd.tcl.in: Harmonize multi-line error message report  When an error
  message is composed of multiple lines, render it in the same way whether it
  is part of a block message or not: lines after the first one are prepended
  with a 2-space padding. As a result error messages appear clearly separated
  from each other.

2020-03-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: clarify next version if not released yet

2020-03-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * script/createmodule.sh: script: handle variable value change in
  createmodule.sh  When analyzing environment variable changes applied by
  shell script passed as argument, produce a `setenv` modulefile statement for
  any variable found set prior script evaluation and for which value is
  completely changed after script evaluation.  Fixes #320

2020-02-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * script/nglfar2ccov: script: adapt nglfar2ccov to nagelfar new format
  output  Analyzed script name is now reported with its path name.

2020-02-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst, modulecmd.tcl.in,
  testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.00-init/140-color.exp: Add support for NO_COLOR env
  variable  Add support for the NO_COLOR environment variable
  (https://no-color.org/) which when set (regardess of its value) prevents the
  addition of ANSI color.  When set, NO_COLOR prevails over CLICOLOR and
  CLICOLOR_FORCE environment variables. MODULES_COLOR overrides these tree
  variables.  Fixes #310

2020-02-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile: install: rm README on 'make clean'

  * Makefile.inc.in, configure, init/.gitignore, init/Makefile,
  init/bash_completion.in, init/zsh-functions/{_module => _module.in}: init:
  use 'sed -r' if 'sed -E' not supported  `-E` option is a *relatively* recent
  option of GNU sed (v4.2), yet mandatory for OS portability (as detailled in
  b68e44e).  Adapt configure step to detect if sed option `-E` is supported
  and fallback to `-r` otherwise.  Fixes #317

  * init/bash_completion.in: init: fix bash completion script for Bash <4.0
  `compopt` Bash builtin has been introduced in Bash 4.0, so using it on Bash
  <4.0 prints error messages. To fix this, `comptopt` availability is checked
  prior usage. If not available, the no-space-append behavior will not be
  obtained which will not be an optimal situation if the `no-indepth` mode is
  set for the `avail` sub-command.  Fixes #318

2020-02-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/cookbook/compiler-etc-dependencies.rst: doc: clarify some
  statements in compiler-etc-depend recipe

  * doc/source/cookbook/compiler-etc-dependencies.rst: doc: add refs between
  sections in compiler-etc-depend recipe

  * .../{modules3.2.10 => modules3}/bar-defaults.out, .../{modules3.2.10 =>
  modules3}/bar-loads.out, .../{modules3.2.10 => modules3}/bar-switch.out,
  .../{modules3.2.10 => modules3}/foo-avail1.out, .../{modules3.2.10 =>
  modules3}/foo-avail2.out, .../{modules3.2.10 => modules3}/foo-defaults.out,
  .../{modules3.2.10 => modules3}/foo-loads.out, .../{modules3.2.10 =>
  modules3}/foo-switch.out, .../{modules3.2.10 => modules3}/modavail.out,
  .../{modules3.2.10 => modules3}/modversion.out, .../{modules3.2.10 =>
  modules3}/ompi-defaults.out, .../{modules3.2.10 =>
  modules3}/ompi-loads1.out, .../{modules3.2.10 => modules3}/ompi-switch.out,
  .../{modules4.3.1 => modules4}/bar-defaults.out, .../{modules4.3.1 =>
  modules4}/bar-loads.out, .../{modules4.3.1 => modules4}/bar-switch.out,
  .../{modules4.3.1 => modules4}/foo-avail1.out, .../{modules4.3.1 =>
  modules4}/foo-avail2.out, .../{modules4.3.1 => modules4}/foo-defaults.out,
  .../{modules4.3.1 => modules4}/foo-loads.out, .../{modules4.3.1 =>
  modules4}/foo-switch.out, .../{modules4.3.1 => modules4}/modavail.out,
  .../{modules4.3.1 => modules4}/modversion.out, .../{modules4.3.1 =>
  modules4}/ompi-defaults.out, .../{modules4.3.1 => modules4}/ompi-loads1.out,
  .../{modules4.3.1 => modules4}/ompi-switch.out, .../{modules3.2.10 =>
  modules3}/bar-defaults.out, .../{modules3.2.10 => modules3}/bar-loads.out,
  .../{modules3.2.10 => modules3}/bar-switch.out, .../{modules3.2.10 =>
  modules3}/foo-avail1.out, .../{modules3.2.10 => modules3}/foo-avail2.out,
  .../{modules3.2.10 => modules3}/foo-defaults.out, .../{modules3.2.10 =>
  modules3}/foo-loads.out, .../{modules3.2.10 => modules3}/foo-switch.out,
  .../{modules3.2.10 => modules3}/modavail.out, .../{modules3.2.10 =>
  modules3}/modversion.out, .../{modules3.2.10 => modules3}/ompi-defaults.out,
  .../{modules3.2.10 => modules3}/ompi-loads1.out, .../{modules3.2.10 =>
  modules3}/ompi-switch.out, .../{modules4.3.1 => modules4}/bar-defaults.out,
  .../{modules4.3.1 => modules4}/bar-loads.out, .../{modules4.3.1 =>
  modules4}/bar-switch.out, .../{modules4.3.1 => modules4}/foo-avail1.out,
  .../{modules4.3.1 => modules4}/foo-avail2.out, .../{modules4.3.1 =>
  modules4}/foo-defaults.out, .../{modules4.3.1 => modules4}/foo-loads.out,
  .../{modules4.3.1 => modules4}/foo-switch.out, .../{modules4.3.1 =>
  modules4}/modavail.out, .../{modules4.3.1 => modules4}/modversion.out,
  .../{modules4.3.1 => modules4}/ompi-defaults.out, .../{modules4.3.1 =>
  modules4}/ompi-loads1.out, .../{modules4.3.1 => modules4}/ompi-switch.out,
  .../{modules3.2.10 => modules3}/bar-defaults.out, .../{modules3.2.10 =>
  modules3}/bar-loads.out, .../{modules3.2.10 => modules3}/bar-switch.out,
  .../{modules3.2.10 => modules3}/foo-avail1.out, .../{modules3.2.10 =>
  modules3}/foo-avail2.out, .../{modules3.2.10 => modules3}/foo-defaults.out,
  .../{modules3.2.10 => modules3}/foo-loads.out, .../{modules3.2.10 =>
  modules3}/foo-switch.out, .../{modules3.2.10 => modules3}/modavail.out,
  .../{modules3.2.10 => modules3}/modversion.out, .../{modules3.2.10 =>
  modules3}/ompi-defaults.out, .../{modules3.2.10 =>
  modules3}/ompi-loads1.out, .../{modules3.2.10 => modules3}/ompi-switch.out,
  .../{modules4.3.1 => modules4}/bar-defaults.out, .../{modules4.3.1 =>
  modules4}/bar-loads.out, .../{modules4.3.1 => modules4}/bar-switch.out,
  .../{modules4.3.1 => modules4}/foo-avail1.out, .../{modules4.3.1 =>
  modules4}/foo-avail2.out, .../{modules4.3.1 => modules4}/foo-defaults.out,
  .../{modules4.3.1 => modules4}/foo-loads.out, .../{modules4.3.1 =>
  modules4}/foo-switch.out, .../{modules4.3.1 => modules4}/modavail.out,
  .../{modules4.3.1 => modules4}/modversion.out, .../{modules4.3.1 =>
  modules4}/ompi-defaults.out, .../{modules4.3.1 => modules4}/ompi-loads1.out,
  .../{modules4.3.1 => modules4}/ompi-switch.out, .../{modules3.2.10 =>
  modules3}/bar-defaults.out, .../{modules3.2.10 => modules3}/bar-loads.out,
  .../{modules3.2.10 => modules3}/bar-switch.out, .../{modules3.2.10 =>
  modules3}/foo-avail1.out, .../{modules3.2.10 => modules3}/foo-avail2.out,
  .../{modules3.2.10 => modules3}/foo-defaults.out, .../{modules3.2.10 =>
  modules3}/foo-loads.out, .../{modules3.2.10 => modules3}/foo-switch.out,
  .../{modules3.2.10 => modules3}/modavail.out, .../{modules3.2.10 =>
  modules3}/modversion.out, .../{modules3.2.10 => modules3}/ompi-defaults.out,
  .../{modules3.2.10 => modules3}/ompi-loads1.out, .../{modules3.2.10 =>
  modules3}/ompi-switch.out, .../{modules4.3.1 => modules4}/bar-defaults.out,
  .../{modules4.3.1 => modules4}/bar-loads.out, .../{modules4.3.1 =>
  modules4}/bar-switch.out, .../{modules4.3.1 => modules4}/foo-avail1.out,
  .../{modules4.3.1 => modules4}/foo-avail2.out, .../{modules4.3.1 =>
  modules4}/foo-defaults.out, .../{modules4.3.1 => modules4}/foo-loads.out,
  .../{modules4.3.1 => modules4}/foo-switch.out, .../{modules4.3.1 =>
  modules4}/modavail.out, .../{modules4.3.1 => modules4}/modversion.out,
  .../{modules4.3.1 => modules4}/ompi-defaults.out, .../{modules4.3.1 =>
  modules4}/ompi-loads1.out, .../{modules4.3.1 => modules4}/ompi-switch.out,
  doc/source/cookbook/compiler-etc-dependencies.rst: doc: refer to more
  generic vers name in compiler-etc-depend recipe

  * doc/source/cookbook/compiler-etc-dependencies.rst: doc: simplify reading
  of compiler-etc-depend recipe (code)

2020-02-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .../example-sessions/common_code.sh,
  .../flavours/modules3.2.10/bar-defaults.out,
  .../flavours/modules3.2.10/bar-loads.out,
  .../flavours/modules3.2.10/bar-switch.out,
  .../flavours/modules3.2.10/foo-avail1.out,
  .../flavours/modules3.2.10/foo-avail2.out,
  .../flavours/modules3.2.10/foo-defaults.out,
  .../flavours/modules3.2.10/foo-loads.out,
  .../flavours/modules3.2.10/foo-switch.out,
  .../flavours/modules3.2.10/modavail.out,
  .../flavours/modules3.2.10/modversion.out,
  .../flavours/modules3.2.10/ompi-defaults.out,
  .../flavours/modules3.2.10/ompi-loads1.out,
  .../flavours/modules3.2.10/ompi-switch.out,
  .../flavours/modules4.3.1/bar-defaults.out,
  .../flavours/modules4.3.1/bar-loads.out,
  .../flavours/modules4.3.1/bar-switch.out,
  .../flavours/modules4.3.1/foo-avail1.out,
  .../flavours/modules4.3.1/foo-avail2.out,
  .../flavours/modules4.3.1/foo-defaults.out,
  .../flavours/modules4.3.1/foo-loads.out,
  .../flavours/modules4.3.1/foo-switch.out,
  .../flavours/modules4.3.1/modavail.out,
  .../flavours/modules4.3.1/modversion.out,
  .../flavours/modules4.3.1/ompi-defaults.out,
  .../flavours/modules4.3.1/ompi-loads1.out,
  .../flavours/modules4.3.1/ompi-switch.out,
  .../homebrewed/modules3.2.10/bar-defaults.out,
  .../homebrewed/modules3.2.10/bar-loads.out,
  .../homebrewed/modules3.2.10/bar-switch.out,
  .../homebrewed/modules3.2.10/foo-avail1.out,
  .../homebrewed/modules3.2.10/foo-avail2.out,
  .../homebrewed/modules3.2.10/foo-defaults.out,
  .../homebrewed/modules3.2.10/foo-loads.out,
  .../homebrewed/modules3.2.10/foo-switch.out,
  .../homebrewed/modules3.2.10/modavail.out,
  .../homebrewed/modules3.2.10/modversion.out,
  .../homebrewed/modules3.2.10/ompi-defaults.out,
  .../homebrewed/modules3.2.10/ompi-loads1.out,
  .../homebrewed/modules3.2.10/ompi-switch.out,
  .../homebrewed/modules4.3.1/bar-defaults.out,
  .../homebrewed/modules4.3.1/bar-loads.out,
  .../homebrewed/modules4.3.1/bar-switch.out,
  .../homebrewed/modules4.3.1/foo-avail1.out,
  .../homebrewed/modules4.3.1/foo-avail2.out,
  .../homebrewed/modules4.3.1/foo-defaults.out,
  .../homebrewed/modules4.3.1/foo-loads.out,
  .../homebrewed/modules4.3.1/foo-switch.out,
  .../homebrewed/modules4.3.1/modavail.out,
  .../homebrewed/modules4.3.1/modversion.out,
  .../homebrewed/modules4.3.1/ompi-defaults.out,
  .../homebrewed/modules4.3.1/ompi-loads1.out,
  .../homebrewed/modules4.3.1/ompi-switch.out,
  .../modulepath/modules3.2.10/bar-defaults.out,
  .../modulepath/modules3.2.10/bar-loads.out,
  .../modulepath/modules3.2.10/bar-switch.out,
  .../modulepath/modules3.2.10/foo-avail1.out,
  .../modulepath/modules3.2.10/foo-avail2.out,
  .../modulepath/modules3.2.10/foo-defaults.out,
  .../modulepath/modules3.2.10/foo-loads.out,
  .../modulepath/modules3.2.10/foo-switch.out,
  .../modulepath/modules3.2.10/modavail.out,
  .../modulepath/modules3.2.10/modversion.out,
  .../modulepath/modules3.2.10/ompi-defaults.out,
  .../modulepath/modules3.2.10/ompi-loads1.out,
  .../modulepath/modules3.2.10/ompi-switch.out,
  .../modulepath/modules4.3.1/bar-defaults.out,
  .../modulepath/modules4.3.1/bar-loads.out,
  .../modulepath/modules4.3.1/bar-switch.out,
  .../modulepath/modules4.3.1/foo-avail1.out,
  .../modulepath/modules4.3.1/foo-avail2.out,
  .../modulepath/modules4.3.1/foo-defaults.out,
  .../modulepath/modules4.3.1/foo-loads.out,
  .../modulepath/modules4.3.1/foo-switch.out,
  .../modulepath/modules4.3.1/modavail.out,
  .../modulepath/modules4.3.1/modversion.out,
  .../modulepath/modules4.3.1/ompi-defaults.out,
  .../modulepath/modules4.3.1/ompi-loads1.out,
  .../modulepath/modules4.3.1/ompi-switch.out,
  .../modulerc/modules3.2.10/bar-defaults.out,
  .../modulerc/modules3.2.10/bar-loads.out,
  .../modulerc/modules3.2.10/bar-switch.out,
  .../modulerc/modules3.2.10/foo-avail1.out,
  .../modulerc/modules3.2.10/foo-avail2.out,
  .../modulerc/modules3.2.10/foo-defaults.out,
  .../modulerc/modules3.2.10/foo-loads.out,
  .../modulerc/modules3.2.10/foo-switch.out,
  .../modulerc/modules3.2.10/modavail.out,
  .../modulerc/modules3.2.10/modversion.out,
  .../modulerc/modules3.2.10/ompi-defaults.out,
  .../modulerc/modules3.2.10/ompi-loads1.out,
  .../modulerc/modules3.2.10/ompi-switch.out,
  .../modulerc/modules4.3.1/bar-defaults.out,
  .../modulerc/modules4.3.1/bar-loads.out,
  .../modulerc/modules4.3.1/bar-switch.out,
  .../modulerc/modules4.3.1/foo-avail1.out,
  .../modulerc/modules4.3.1/foo-avail2.out,
  .../modulerc/modules4.3.1/foo-defaults.out,
  .../modulerc/modules4.3.1/foo-loads.out,
  .../modulerc/modules4.3.1/foo-switch.out,
  .../modulerc/modules4.3.1/modavail.out,
  .../modulerc/modules4.3.1/modversion.out,
  .../modulerc/modules4.3.1/ompi-defaults.out,
  .../modulerc/modules4.3.1/ompi-loads1.out,
  .../modulerc/modules4.3.1/ompi-switch.out, .../tcllib/LoadedCompMatches.tcl,
  .../tcllib/LoadedMpiMatches.tcl, .../tcllib/WarningUtils.tcl,
  doc/source/cookbook/compiler-etc-dependencies.rst: doc: improve console
  output reading of compiler-etc-depend recipe

  * doc/source/cookbook/compiler-etc-dependencies.rst: doc: adopt neutral tone
  compiler-etc-depend recipe

  * doc/source/cookbook/compiler-etc-dependencies.rst: doc: add ref to ext
  tools mentionned in compiler-etc-depend recipe

  * doc/source/cookbook/compiler-etc-dependencies.rst: doc: normalize rst
  section/link syntax in compiler-etc-depend recipe

  * doc/source/cookbook/compiler-etc-dependencies.rst: doc: fix typos in
  compiler-etc-depend recipe

  * .../compiler-etc-dependencies/flavours/bar/4.7,
  .../compiler-etc-dependencies/flavours/bar/5.4,
  .../compiler-etc-dependencies/flavours/bar/common,
  .../compiler-etc-dependencies/flavours/foo/1.1,
  .../compiler-etc-dependencies/flavours/foo/2.4,
  .../compiler-etc-dependencies/flavours/foo/common,
  .../compiler-etc-dependencies/flavours/gnu/8.2.0,
  .../compiler-etc-dependencies/flavours/gnu/9.1.0,
  .../compiler-etc-dependencies/flavours/gnu/common,
  .../compiler-etc-dependencies/flavours/intel/2018,
  .../compiler-etc-dependencies/flavours/intel/2019,
  .../flavours/intel/common, .../flavours/intelmpi/default,
  .../compiler-etc-dependencies/flavours/mvapich/2.1,
  .../flavours/mvapich/2.3.1, .../flavours/mvapich/common,
  .../compiler-etc-dependencies/flavours/openmpi/3.1,
  .../compiler-etc-dependencies/flavours/openmpi/4.0,
  .../flavours/openmpi/common,
  .../compiler-etc-dependencies/flavours/pgi/18.4,
  .../compiler-etc-dependencies/flavours/pgi/19.4,
  .../compiler-etc-dependencies/flavours/pgi/common,
  .../compiler-etc-dependencies/flavours/simd/avx,
  .../compiler-etc-dependencies/flavours/simd/avx2,
  .../compiler-etc-dependencies/flavours/simd/common,
  .../compiler-etc-dependencies/flavours/simd/sse4.1,
  .../compiler-etc-dependencies/homebrewed/bar/4.7,
  .../compiler-etc-dependencies/homebrewed/bar/5.4, .../homebrewed/bar/common,
  .../compiler-etc-dependencies/homebrewed/foo/1.1,
  .../compiler-etc-dependencies/homebrewed/foo/2.4, .../homebrewed/foo/common,
  .../compiler-etc-dependencies/homebrewed/gcc/8.2.0,
  .../compiler-etc-dependencies/homebrewed/gcc/9.1.0,
  .../homebrewed/gcc/common, .../homebrewed/intel/2018,
  .../homebrewed/intel/2019, .../homebrewed/intel/common,
  .../homebrewed/intelmpi/default, .../homebrewed/mvapich/2.1,
  .../homebrewed/mvapich/2.3.1, .../homebrewed/mvapich/common,
  .../homebrewed/openmpi/3.1, .../homebrewed/openmpi/4.0,
  .../homebrewed/openmpi/common,
  .../compiler-etc-dependencies/homebrewed/pgi/18.4,
  .../compiler-etc-dependencies/homebrewed/pgi/19.4,
  .../homebrewed/pgi/common,
  .../compiler-etc-dependencies/homebrewed/simd/avx,
  .../compiler-etc-dependencies/homebrewed/simd/avx2,
  .../homebrewed/simd/common, .../homebrewed/simd/sse4.1,
  .../modrc_common/modulerc.default_lowest_simd,
  .../modrc_common/modulerc.select_compiler_family,
  .../modrc_common/modulerc.select_compiler_version,
  .../modrc_common/modulerc.select_mpi_family,
  .../modrc_common/modulerc.select_mpi_version,
  .../modulepath/Compiler/gcc/8.2.0/bar/4.7/avx,
  .../modulepath/Compiler/gcc/8.2.0/bar/4.7/sse4.1,
  .../modulepath/Compiler/gcc/8.2.0/foo/1.1,
  .../modulepath/Compiler/gcc/8.2.0/mvapich/2.1,
  .../modulepath/Compiler/gcc/8.2.0/openmpi/3.1,
  .../modulepath/Compiler/gcc/9.1.0/bar/5.4/avx,
  .../modulepath/Compiler/gcc/9.1.0/bar/5.4/avx2,
  .../modulepath/Compiler/gcc/9.1.0/foo/2.4,
  .../modulepath/Compiler/gcc/9.1.0/mvapich/2.1,
  .../modulepath/Compiler/gcc/9.1.0/mvapich/2.3.1,
  .../modulepath/Compiler/gcc/9.1.0/openmpi/3.1,
  .../modulepath/Compiler/gcc/9.1.0/openmpi/4.0,
  .../modulepath/Compiler/intel/2018/foo/1.1,
  .../Compiler/intel/2018/intelmpi/default,
  .../modulepath/Compiler/intel/2018/mvapich/2.1,
  .../modulepath/Compiler/intel/2018/openmpi/3.1,
  .../modulepath/Compiler/intel/2019/foo/2.4,
  .../Compiler/intel/2019/intelmpi/default,
  .../modulepath/Compiler/intel/2019/mvapich/2.1,
  .../modulepath/Compiler/intel/2019/mvapich/2.3.1,
  .../modulepath/Compiler/intel/2019/openmpi/3.1,
  .../modulepath/Compiler/intel/2019/openmpi/4.0,
  .../modulepath/Compiler/pgi/18.4/foo/1.1,
  .../modulepath/Compiler/pgi/18.4/mvapich/2.1,
  .../modulepath/Compiler/pgi/18.4/openmpi/3.1,
  .../modulepath/Compiler/pgi/19.4/foo/2.4,
  .../modulepath/Compiler/pgi/19.4/mvapich/2.1,
  .../modulepath/Compiler/pgi/19.4/mvapich/2.3.1,
  .../modulepath/Compiler/pgi/19.4/openmpi/3.1,
  .../modulepath/Compiler/pgi/19.4/openmpi/4.0,
  .../CompilerMPI/gcc/8.2.0/mvapich/2.1/foo/1.1,
  .../CompilerMPI/gcc/8.2.0/openmpi/3.1/foo/1.1,
  .../CompilerMPI/gcc/9.1.0/mvapich/2.3.1/foo/2.4,
  .../CompilerMPI/gcc/9.1.0/openmpi/4.0/foo/2.4,
  .../intel/2018/intelmpi/default/foo/1.1,
  .../CompilerMPI/intel/2018/mvapich/2.1/foo/1.1,
  .../CompilerMPI/intel/2018/openmpi/3.1/foo/1.1,
  .../intel/2019/intelmpi/default/foo/2.4,
  .../CompilerMPI/intel/2019/mvapich/2.3.1/foo/2.4,
  .../CompilerMPI/intel/2019/openmpi/4.0/foo/2.4,
  .../CompilerMPI/pgi/18.4/mvapich/2.1/foo/1.1,
  .../CompilerMPI/pgi/18.4/openmpi/3.1/foo/1.1,
  .../CompilerMPI/pgi/19.4/openmpi/3.1/foo/2.4,
  .../19.4/openmpi/4.0/{REAMDE.txt => README.txt},
  .../modulepath/Core/gcc/8.2.0, .../modulepath/Core/gcc/9.1.0,
  .../modulepath/Core/gcc/common, .../modulepath/Core/intel/2018,
  .../modulepath/Core/intel/2019, .../modulepath/Core/intel/common,
  .../modulepath/Core/pgi/18.4, .../modulepath/Core/pgi/19.4,
  .../modulepath/Core/pgi/common, .../modulepath/common/bar/common,
  .../modulepath/common/foo/common, .../modulepath/common/intelmpi/common,
  .../modulepath/common/mvapich/common, .../modulepath/common/openmpi/common,
  .../compiler-etc-dependencies/modulerc3/bar/common,
  .../compiler-etc-dependencies/modulerc3/foo/common,
  .../modulerc3/mvapich/common, .../modulerc3/openmpi/common,
  .../modulerc4/bar/4.7/gcc/8.2.0/avx, .../modulerc4/bar/4.7/gcc/8.2.0/sse4.1,
  .../modulerc4/bar/5.4/gcc/9.1.0/avx, .../modulerc4/bar/5.4/gcc/9.1.0/avx2,
  .../compiler-etc-dependencies/modulerc4/bar/common,
  .../modulerc4/foo/1.1/gcc/8.2.0/mvapich/2.1,
  .../modulerc4/foo/1.1/gcc/8.2.0/nompi,
  .../modulerc4/foo/1.1/gcc/8.2.0/openmpi/3.1,
  .../modulerc4/foo/1.1/intel/2018/intelmpi,
  .../modulerc4/foo/1.1/intel/2018/mvapich/2.1,
  .../modulerc4/foo/1.1/intel/2018/nompi,
  .../modulerc4/foo/1.1/intel/2018/openmpi/3.1,
  .../modulerc4/foo/1.1/pgi/18.4/mvapich/2.1,
  .../modulerc4/foo/1.1/pgi/18.4/nompi,
  .../modulerc4/foo/1.1/pgi/18.4/openmpi/3.1,
  .../modulerc4/foo/2.4/gcc/9.1.0/mvapich/2.3.1,
  .../modulerc4/foo/2.4/gcc/9.1.0/nompi,
  .../modulerc4/foo/2.4/gcc/9.1.0/openmpi/4.0,
  .../modulerc4/foo/2.4/intel/2019/intelmpi,
  .../modulerc4/foo/2.4/intel/2019/mvapich/2.3.1,
  .../modulerc4/foo/2.4/intel/2019/nompi,
  .../modulerc4/foo/2.4/intel/2019/openmpi/4.0,
  .../modulerc4/foo/2.4/pgi/19.4/nompi,
  .../modulerc4/foo/2.4/pgi/19.4/openmpi/3.1,
  .../compiler-etc-dependencies/modulerc4/foo/common,
  .../compiler-etc-dependencies/modulerc4/gcc/8.2.0,
  .../compiler-etc-dependencies/modulerc4/gcc/9.1.0,
  .../compiler-etc-dependencies/modulerc4/gcc/common,
  .../compiler-etc-dependencies/modulerc4/intel/2018,
  .../compiler-etc-dependencies/modulerc4/intel/2019,
  .../modulerc4/intel/common, .../modulerc4/mvapich/2.1/gcc/8.2.0,
  .../modulerc4/mvapich/2.1/gcc/9.1.0, .../modulerc4/mvapich/2.1/intel/2018,
  .../modulerc4/mvapich/2.1/intel/2019, .../modulerc4/mvapich/2.1/pgi/18.4,
  .../modulerc4/mvapich/2.1/pgi/19.4, .../modulerc4/mvapich/2.3.1/gcc/9.1.0,
  .../modulerc4/mvapich/2.3.1/intel/2019,
  .../modulerc4/mvapich/2.3.1/pgi/19.4, .../modulerc4/mvapich/common,
  .../modulerc4/openmpi/3.1/gcc/8.2.0, .../modulerc4/openmpi/3.1/gcc/9.1.0,
  .../modulerc4/openmpi/3.1/intel/2018, .../modulerc4/openmpi/3.1/intel/2019,
  .../modulerc4/openmpi/3.1/pgi/18.4, .../modulerc4/openmpi/3.1/pgi/19.4,
  .../modulerc4/openmpi/4.0/gcc/9.1.0, .../modulerc4/openmpi/4.0/intel/2019,
  .../modulerc4/openmpi/4.0/pgi/19.4, .../modulerc4/openmpi/common,
  .../compiler-etc-dependencies/modulerc4/pgi/18.4,
  .../compiler-etc-dependencies/modulerc4/pgi/19.4,
  .../compiler-etc-dependencies/modulerc4/pgi/common,
  doc/source/cookbook/compiler-etc-dependencies.rst: doc: normalize code of
  modulefile of compiler-etc-depend recipe  And include these modulefile
  examples as Tcl code in recipe document to get their content highlighted.

2020-02-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .../tcllib/ChildModules.tcl, .../tcllib/CompilerFromPath.tcl,
  .../tcllib/CompilerUtils.tcl,
  .../compiler-etc-dependencies/tcllib/GetFamVer.tcl,
  .../tcllib/LoadedCompMatches.tcl, .../tcllib/LoadedModules.tcl,
  .../tcllib/LoadedMpiMatches.tcl,
  .../compiler-etc-dependencies/tcllib/MpiUtils.tcl,
  .../tcllib/WarningUtils.tcl, .../tcllib/common_utilities.tcl,
  .../compiler-etc-dependencies/tcllib/temp.tcl,
  doc/source/cookbook/compiler-etc-dependencies.rst: doc: normalize code of
  Tcl lib of compiler-etc-depend recipe  Add authorship information, same
  header and comment structure for all Tcl files to include these files in
  cookbook recipe document with Tcl syntax highlight.

  * doc/source/cookbook/compiler-etc-dependencies.rst: doc: fix broken refs in
  compiler-etc-depend recipe

2020-02-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .../flavours/modules3.2.10/foo-avail1.out,
  .../flavours/modules3.2.10/foo-avail2.out,
  .../flavours/modules3.2.10/modavail.out,
  .../flavours/modules4.3.1/bar-loads.out,
  .../flavours/modules4.3.1/bar-switch.out,
  .../flavours/modules4.3.1/foo-avail1.out,
  .../flavours/modules4.3.1/foo-avail2.out,
  .../flavours/modules4.3.1/foo-defaults.out,
  .../flavours/modules4.3.1/foo-loads.out,
  .../flavours/modules4.3.1/foo-switch.out,
  .../flavours/modules4.3.1/modavail.out,
  .../flavours/modules4.3.1/ompi-defaults.out,
  .../flavours/modules4.3.1/ompi-loads1.out,
  .../flavours/modules4.3.1/ompi-switch.out,
  .../example-sessions/foo-loads.sh,
  .../homebrewed/modules3.2.10/foo-avail1.out,
  .../homebrewed/modules3.2.10/foo-avail2.out,
  .../homebrewed/modules3.2.10/modavail.out,
  .../homebrewed/modules4.3.1/bar-defaults.out,
  .../homebrewed/modules4.3.1/bar-loads.out,
  .../homebrewed/modules4.3.1/bar-switch.out,
  .../homebrewed/modules4.3.1/foo-avail1.out,
  .../homebrewed/modules4.3.1/foo-avail2.out,
  .../homebrewed/modules4.3.1/foo-defaults.out,
  .../homebrewed/modules4.3.1/foo-loads.out,
  .../homebrewed/modules4.3.1/foo-switch.out,
  .../homebrewed/modules4.3.1/modavail.out,
  .../homebrewed/modules4.3.1/ompi-defaults.out,
  .../homebrewed/modules4.3.1/ompi-loads1.out,
  .../homebrewed/modules4.3.1/ompi-switch.out,
  .../modulepath/modules3.2.10/foo-avail1.out,
  .../modulepath/modules3.2.10/modavail.out,
  .../modulepath/modules4.3.1/bar-defaults.out,
  .../modulepath/modules4.3.1/bar-loads.out,
  .../modulepath/modules4.3.1/bar-switch.out,
  .../modulepath/modules4.3.1/foo-avail1.out,
  .../modulepath/modules4.3.1/foo-defaults.out,
  .../modulepath/modules4.3.1/foo-loads.out,
  .../modulepath/modules4.3.1/foo-switch.out,
  .../modulepath/modules4.3.1/modavail.out,
  .../modulepath/modules4.3.1/ompi-defaults.out,
  .../modulepath/modules4.3.1/ompi-loads1.out,
  .../modulepath/modules4.3.1/ompi-switch.out,
  .../modulerc/modules3.2.10/foo-avail1.out,
  .../modulerc/modules3.2.10/foo-avail2.out,
  .../modulerc/modules3.2.10/modavail.out,
  .../modulerc/modules4.3.1/bar-defaults.out,
  .../modulerc/modules4.3.1/bar-loads.out,
  .../modulerc/modules4.3.1/bar-switch.out,
  .../modulerc/modules4.3.1/foo-avail1.out,
  .../modulerc/modules4.3.1/foo-avail2.out,
  .../modulerc/modules4.3.1/foo-defaults.out,
  .../modulerc/modules4.3.1/foo-loads.out,
  .../modulerc/modules4.3.1/foo-switch.out,
  .../modulerc/modules4.3.1/modavail.out,
  .../modulerc/modules4.3.1/ompi-defaults.out,
  .../modulerc/modules4.3.1/ompi-loads1.out,
  .../modulerc/modules4.3.1/ompi-switch.out,
  .../example-sessions/ompi-switch.sh,
  .../compiler-etc-dependencies/flavours/gnu/common,
  .../flavours/intel/common, .../flavours/openmpi/common,
  .../compiler-etc-dependencies/flavours/pgi/common,
  .../homebrewed/foo/common, .../homebrewed/gcc/common,
  .../homebrewed/intel/common, .../homebrewed/pgi/common,
  .../homebrewed/simd/common, .../modrc_common/modulerc.default_lowest_simd,
  .../modrc_common/modulerc.select_compiler_family,
  .../modrc_common/modulerc.select_compiler_version,
  .../modrc_common/modulerc.select_mpi_family,
  .../modrc_common/modulerc.select_mpi_version,
  .../CompilerMPI/pgi/19.4/openmpi/4.0/REAMDE.txt,
  .../modulepath/Core/gcc/common, .../modulepath/Core/intel/common,
  .../modulepath/Core/pgi/common, .../modulepath/common/intelmpi/common,
  .../modulepath/common/mvapich/common, .../modulepath/common/openmpi/common,
  .../modulerc3/mvapich/common, .../modulerc3/openmpi/common,
  .../compiler-etc-dependencies/modulerc4/gcc/common,
  .../modulerc4/intel/common, .../modulerc4/mvapich/common,
  .../modulerc4/openmpi/common,
  .../compiler-etc-dependencies/modulerc4/pgi/common,
  .../tcllib/ChildModules.tcl, .../tcllib/CompilerFromPath.tcl,
  .../tcllib/CompilerUtils.tcl,
  .../compiler-etc-dependencies/tcllib/GetFamVer.tcl,
  .../tcllib/LoadedCompMatches.tcl, .../tcllib/LoadedMpiMatches.tcl,
  .../compiler-etc-dependencies/tcllib/MpiUtils.tcl,
  .../tcllib/WarningUtils.tcl, .../tcllib/common_utilities.tcl,
  .../compiler-etc-dependencies/tcllib/temp.tcl: doc: simplify reading of
  compiler-etc-depend recipe (trailing space)

  * .../flavours/modules3.2.10/bar-loads.out,
  .../flavours/modules3.2.10/bar-switch.out,
  .../flavours/modules3.2.10/foo-loads.out,
  .../flavours/modules3.2.10/foo-switch.out,
  .../flavours/modules3.2.10/ompi-loads1.out,
  .../flavours/modules3.2.10/ompi-switch.out,
  .../flavours/modules4.3.1/bar-loads.out,
  .../flavours/modules4.3.1/bar-switch.out,
  .../flavours/modules4.3.1/foo-loads.out,
  .../flavours/modules4.3.1/foo-switch.out,
  .../flavours/modules4.3.1/ompi-loads1.out,
  .../flavours/modules4.3.1/ompi-switch.out,
  .../homebrewed/modules3.2.10/bar-loads.out,
  .../homebrewed/modules3.2.10/bar-switch.out,
  .../homebrewed/modules3.2.10/foo-loads.out,
  .../homebrewed/modules3.2.10/foo-switch.out,
  .../homebrewed/modules3.2.10/ompi-loads1.out,
  .../homebrewed/modules3.2.10/ompi-switch.out,
  .../homebrewed/modules4.3.1/bar-defaults.out,
  .../homebrewed/modules4.3.1/bar-loads.out,
  .../homebrewed/modules4.3.1/bar-switch.out,
  .../homebrewed/modules4.3.1/foo-defaults.out,
  .../homebrewed/modules4.3.1/foo-loads.out,
  .../homebrewed/modules4.3.1/foo-switch.out,
  .../homebrewed/modules4.3.1/ompi-defaults.out,
  .../homebrewed/modules4.3.1/ompi-loads1.out,
  .../homebrewed/modules4.3.1/ompi-switch.out,
  .../modulepath/modules3.2.10/bar-defaults.out,
  .../modulepath/modules3.2.10/bar-loads.out,
  .../modulepath/modules3.2.10/bar-switch.out,
  .../modulepath/modules3.2.10/foo-defaults.out,
  .../modulepath/modules3.2.10/foo-loads.out,
  .../modulepath/modules3.2.10/foo-switch.out,
  .../modulepath/modules3.2.10/ompi-defaults.out,
  .../modulepath/modules3.2.10/ompi-loads1.out,
  .../modulepath/modules3.2.10/ompi-switch.out,
  .../modulepath/modules4.3.1/bar-defaults.out,
  .../modulepath/modules4.3.1/bar-loads.out,
  .../modulepath/modules4.3.1/bar-switch.out,
  .../modulepath/modules4.3.1/foo-defaults.out,
  .../modulepath/modules4.3.1/foo-loads.out,
  .../modulepath/modules4.3.1/foo-switch.out,
  .../modulepath/modules4.3.1/ompi-defaults.out,
  .../modulepath/modules4.3.1/ompi-loads1.out,
  .../modulepath/modules4.3.1/ompi-switch.out,
  .../modulerc/modules3.2.10/bar-defaults.out,
  .../modulerc/modules3.2.10/bar-loads.out,
  .../modulerc/modules3.2.10/bar-switch.out,
  .../modulerc/modules3.2.10/foo-defaults.out,
  .../modulerc/modules3.2.10/foo-loads.out,
  .../modulerc/modules3.2.10/foo-switch.out,
  .../modulerc/modules3.2.10/ompi-defaults.out,
  .../modulerc/modules3.2.10/ompi-loads1.out,
  .../modulerc/modules3.2.10/ompi-switch.out,
  .../modulerc/modules4.3.1/bar-defaults.out,
  .../modulerc/modules4.3.1/bar-loads.out,
  .../modulerc/modules4.3.1/bar-switch.out,
  .../modulerc/modules4.3.1/foo-defaults.out,
  .../modulerc/modules4.3.1/foo-loads.out,
  .../modulerc/modules4.3.1/foo-switch.out,
  .../modulerc/modules4.3.1/ompi-defaults.out,
  .../modulerc/modules4.3.1/ompi-loads1.out,
  .../modulerc/modules4.3.1/ompi-switch.out,
  .../fake-sw-root/bar/4.7/gcc/8.2.0/avx/bin/bar,
  .../fake-sw-root/bar/4.7/gcc/8.2.0/sse4.1/bin/bar,
  .../fake-sw-root/bar/5.4/gcc/9.1.0/avx/bin/bar,
  .../fake-sw-root/bar/5.4/gcc/9.1.0/avx2/bin/bar,
  .../fake-sw-root/foo/1.1/gcc/8.2.0/mvapich/2.1/bin/foo,
  .../fake-sw-root/foo/1.1/gcc/8.2.0/nompi/bin/foo,
  .../fake-sw-root/foo/1.1/gcc/8.2.0/openmpi/3.1/bin/foo,
  .../fake-sw-root/foo/1.1/intel/2018/intelmpi/bin/foo,
  .../foo/1.1/intel/2018/mvapich/2.1/bin/foo,
  .../fake-sw-root/foo/1.1/intel/2018/nompi/bin/foo,
  .../foo/1.1/intel/2018/openmpi/3.1/bin/foo,
  .../fake-sw-root/foo/1.1/pgi/18.4/mvapich/2.1/bin/foo,
  .../fake-sw-root/foo/1.1/pgi/18.4/nompi/bin/foo,
  .../fake-sw-root/foo/1.1/pgi/18.4/openmpi/3.1/bin/foo,
  .../foo/2.4/gcc/9.1.0/mvapich/2.3.1/bin/foo,
  .../fake-sw-root/foo/2.4/gcc/9.1.0/nompi/bin/foo,
  .../fake-sw-root/foo/2.4/gcc/9.1.0/openmpi/4.0/bin/foo,
  .../fake-sw-root/foo/2.4/intel/2019/intelmpi/bin/foo,
  .../foo/2.4/intel/2019/mvapich/2.3.1/bin/foo,
  .../fake-sw-root/foo/2.4/intel/2019/nompi/bin/foo,
  .../foo/2.4/intel/2019/openmpi/4.0/bin/foo,
  .../fake-sw-root/foo/2.4/pgi/19.4/nompi/bin/foo,
  .../fake-sw-root/foo/2.4/pgi/19.4/openmpi/3.1/bin/foo,
  .../fake-sw-root/gcc/8.2.0/bin/gcc, .../fake-sw-root/gcc/9.1.0/bin/gcc,
  .../fake-sw-root/intel/2018/bin/icc, .../fake-sw-root/intel/2019/bin/icc,
  .../fake-sw-root/mvapich/2.1/gcc/8.2.0/bin/mpirun,
  .../fake-sw-root/mvapich/2.1/gcc/9.1.0/bin/mpirun,
  .../fake-sw-root/mvapich/2.1/intel/2018/bin/mpirun,
  .../fake-sw-root/mvapich/2.1/intel/2019/bin/mpirun,
  .../fake-sw-root/mvapich/2.1/pgi/18.4/bin/mpirun,
  .../fake-sw-root/mvapich/2.1/pgi/19.4/bin/mpirun,
  .../fake-sw-root/mvapich/2.3.1/gcc/9.1.0/bin/mpirun,
  .../fake-sw-root/mvapich/2.3.1/intel/2019/bin/mpirun,
  .../fake-sw-root/mvapich/2.3.1/pgi/19.4/bin/mpirun,
  .../fake-sw-root/openmpi/3.1/gcc/8.2.0/bin/mpirun,
  .../fake-sw-root/openmpi/3.1/gcc/9.1.0/bin/mpirun,
  .../fake-sw-root/openmpi/3.1/intel/2018/bin/mpirun,
  .../fake-sw-root/openmpi/3.1/intel/2019/bin/mpirun,
  .../fake-sw-root/openmpi/3.1/pgi/18.4/bin/mpirun,
  .../fake-sw-root/openmpi/3.1/pgi/19.4/bin/mpirun,
  .../fake-sw-root/openmpi/4.0/gcc/9.1.0/bin/mpirun,
  .../fake-sw-root/openmpi/4.0/intel/2019/bin/mpirun,
  .../fake-sw-root/openmpi/4.0/pgi/19.4/bin/mpirun,
  .../fake-sw-root/pgi/18.4/bin/pgcc, .../fake-sw-root/pgi/19.4/bin/pgcc,
  doc/example/compiler-etc-dependencies/flavours/bar/4.7,
  doc/example/compiler-etc-dependencies/flavours/bar/5.4,
  .../compiler-etc-dependencies/flavours/bar/common,
  doc/example/compiler-etc-dependencies/flavours/foo/1.1,
  doc/example/compiler-etc-dependencies/flavours/foo/2.4,
  .../compiler-etc-dependencies/flavours/foo/common,
  .../compiler-etc-dependencies/flavours/gnu/8.2.0,
  .../compiler-etc-dependencies/flavours/gnu/9.1.0,
  .../compiler-etc-dependencies/flavours/gnu/common,
  .../compiler-etc-dependencies/flavours/intel/2018,
  .../compiler-etc-dependencies/flavours/intel/2019,
  .../compiler-etc-dependencies/flavours/intel/common,
  .../compiler-etc-dependencies/flavours/mvapich/2.1,
  .../compiler-etc-dependencies/flavours/mvapich/2.3.1,
  .../compiler-etc-dependencies/flavours/mvapich/common,
  .../compiler-etc-dependencies/flavours/openmpi/3.1,
  .../compiler-etc-dependencies/flavours/openmpi/4.0,
  .../compiler-etc-dependencies/flavours/openmpi/common,
  .../compiler-etc-dependencies/flavours/pgi/18.4,
  .../compiler-etc-dependencies/flavours/pgi/19.4,
  .../compiler-etc-dependencies/flavours/pgi/common,
  .../compiler-etc-dependencies/homebrewed/bar/4.7,
  .../compiler-etc-dependencies/homebrewed/bar/5.4,
  .../compiler-etc-dependencies/homebrewed/bar/common,
  .../compiler-etc-dependencies/homebrewed/foo/1.1,
  .../compiler-etc-dependencies/homebrewed/foo/2.4,
  .../compiler-etc-dependencies/homebrewed/foo/common,
  .../compiler-etc-dependencies/homebrewed/gcc/8.2.0,
  .../compiler-etc-dependencies/homebrewed/gcc/9.1.0,
  .../compiler-etc-dependencies/homebrewed/gcc/common,
  .../compiler-etc-dependencies/homebrewed/intel/2018,
  .../compiler-etc-dependencies/homebrewed/intel/2019,
  .../compiler-etc-dependencies/homebrewed/intel/common,
  .../compiler-etc-dependencies/homebrewed/mvapich/2.1,
  .../compiler-etc-dependencies/homebrewed/mvapich/2.3.1,
  .../homebrewed/mvapich/common,
  .../compiler-etc-dependencies/homebrewed/openmpi/3.1,
  .../compiler-etc-dependencies/homebrewed/openmpi/4.0,
  .../homebrewed/openmpi/common,
  .../compiler-etc-dependencies/homebrewed/pgi/18.4,
  .../compiler-etc-dependencies/homebrewed/pgi/19.4,
  .../compiler-etc-dependencies/homebrewed/pgi/common,
  .../modulepath/Compiler/gcc/8.2.0/bar/4.7/avx,
  .../modulepath/Compiler/gcc/8.2.0/bar/4.7/sse4.1,
  .../modulepath/Compiler/gcc/8.2.0/foo/1.1,
  .../modulepath/Compiler/gcc/8.2.0/mvapich/2.1,
  .../modulepath/Compiler/gcc/8.2.0/openmpi/3.1,
  .../modulepath/Compiler/gcc/9.1.0/bar/5.4/avx,
  .../modulepath/Compiler/gcc/9.1.0/bar/5.4/avx2,
  .../modulepath/Compiler/gcc/9.1.0/foo/2.4,
  .../modulepath/Compiler/gcc/9.1.0/mvapich/2.1,
  .../modulepath/Compiler/gcc/9.1.0/mvapich/2.3.1,
  .../modulepath/Compiler/gcc/9.1.0/openmpi/3.1,
  .../modulepath/Compiler/gcc/9.1.0/openmpi/4.0,
  .../modulepath/Compiler/intel/2018/foo/1.1,
  .../modulepath/Compiler/intel/2018/intelmpi/default,
  .../modulepath/Compiler/intel/2018/mvapich/2.1,
  .../modulepath/Compiler/intel/2018/openmpi/3.1,
  .../modulepath/Compiler/intel/2019/foo/2.4,
  .../modulepath/Compiler/intel/2019/intelmpi/default,
  .../modulepath/Compiler/intel/2019/mvapich/2.1,
  .../modulepath/Compiler/intel/2019/mvapich/2.3.1,
  .../modulepath/Compiler/intel/2019/openmpi/3.1,
  .../modulepath/Compiler/intel/2019/openmpi/4.0,
  .../modulepath/Compiler/pgi/18.4/foo/1.1,
  .../modulepath/Compiler/pgi/18.4/mvapich/2.1,
  .../modulepath/Compiler/pgi/18.4/openmpi/3.1,
  .../modulepath/Compiler/pgi/19.4/foo/2.4,
  .../modulepath/Compiler/pgi/19.4/mvapich/2.1,
  .../modulepath/Compiler/pgi/19.4/mvapich/2.3.1,
  .../modulepath/Compiler/pgi/19.4/openmpi/3.1,
  .../modulepath/Compiler/pgi/19.4/openmpi/4.0,
  .../CompilerMPI/gcc/8.2.0/mvapich/2.1/foo/1.1,
  .../CompilerMPI/gcc/8.2.0/openmpi/3.1/foo/1.1,
  .../CompilerMPI/gcc/9.1.0/mvapich/2.3.1/foo/2.4,
  .../CompilerMPI/gcc/9.1.0/openmpi/4.0/foo/2.4,
  .../CompilerMPI/intel/2018/intelmpi/default/foo/1.1,
  .../CompilerMPI/intel/2018/mvapich/2.1/foo/1.1,
  .../CompilerMPI/intel/2018/openmpi/3.1/foo/1.1,
  .../CompilerMPI/intel/2019/intelmpi/default/foo/2.4,
  .../CompilerMPI/intel/2019/mvapich/2.3.1/foo/2.4,
  .../CompilerMPI/intel/2019/openmpi/4.0/foo/2.4,
  .../CompilerMPI/pgi/18.4/mvapich/2.1/foo/1.1,
  .../CompilerMPI/pgi/18.4/openmpi/3.1/foo/1.1,
  .../CompilerMPI/pgi/19.4/openmpi/3.1/foo/2.4, .../modulepath/Core/gcc/8.2.0,
  .../modulepath/Core/gcc/9.1.0, .../modulepath/Core/gcc/common,
  .../modulepath/Core/intel/2018, .../modulepath/Core/intel/2019,
  .../modulepath/Core/intel/common,
  .../compiler-etc-dependencies/modulepath/Core/pgi/18.4,
  .../compiler-etc-dependencies/modulepath/Core/pgi/19.4,
  .../modulepath/Core/pgi/common, .../modulepath/common/bar/common,
  .../modulepath/common/foo/common, .../modulepath/common/mvapich/common,
  .../modulepath/common/openmpi/common,
  .../compiler-etc-dependencies/modulerc3/bar/common,
  .../compiler-etc-dependencies/modulerc3/foo/common,
  .../compiler-etc-dependencies/modulerc3/mvapich/common,
  .../compiler-etc-dependencies/modulerc3/openmpi/common,
  .../modulerc4/bar/4.7/gcc/8.2.0/avx, .../modulerc4/bar/4.7/gcc/8.2.0/sse4.1,
  .../modulerc4/bar/5.4/gcc/9.1.0/avx, .../modulerc4/bar/5.4/gcc/9.1.0/avx2,
  .../compiler-etc-dependencies/modulerc4/bar/common,
  .../modulerc4/foo/1.1/gcc/8.2.0/mvapich/2.1,
  .../modulerc4/foo/1.1/gcc/8.2.0/nompi,
  .../modulerc4/foo/1.1/gcc/8.2.0/openmpi/3.1,
  .../modulerc4/foo/1.1/intel/2018/intelmpi,
  .../modulerc4/foo/1.1/intel/2018/mvapich/2.1,
  .../modulerc4/foo/1.1/intel/2018/nompi,
  .../modulerc4/foo/1.1/intel/2018/openmpi/3.1,
  .../modulerc4/foo/1.1/pgi/18.4/mvapich/2.1,
  .../modulerc4/foo/1.1/pgi/18.4/nompi,
  .../modulerc4/foo/1.1/pgi/18.4/openmpi/3.1,
  .../modulerc4/foo/2.4/gcc/9.1.0/mvapich/2.3.1,
  .../modulerc4/foo/2.4/gcc/9.1.0/nompi,
  .../modulerc4/foo/2.4/gcc/9.1.0/openmpi/4.0,
  .../modulerc4/foo/2.4/intel/2019/intelmpi,
  .../modulerc4/foo/2.4/intel/2019/mvapich/2.3.1,
  .../modulerc4/foo/2.4/intel/2019/nompi,
  .../modulerc4/foo/2.4/intel/2019/openmpi/4.0,
  .../modulerc4/foo/2.4/pgi/19.4/nompi,
  .../modulerc4/foo/2.4/pgi/19.4/openmpi/3.1,
  .../compiler-etc-dependencies/modulerc4/foo/common,
  .../compiler-etc-dependencies/modulerc4/gcc/8.2.0,
  .../compiler-etc-dependencies/modulerc4/gcc/9.1.0,
  .../compiler-etc-dependencies/modulerc4/gcc/common,
  .../compiler-etc-dependencies/modulerc4/intel/2018,
  .../compiler-etc-dependencies/modulerc4/intel/2019,
  .../compiler-etc-dependencies/modulerc4/intel/common,
  .../modulerc4/mvapich/2.1/gcc/8.2.0, .../modulerc4/mvapich/2.1/gcc/9.1.0,
  .../modulerc4/mvapich/2.1/intel/2018, .../modulerc4/mvapich/2.1/intel/2019,
  .../modulerc4/mvapich/2.1/pgi/18.4, .../modulerc4/mvapich/2.1/pgi/19.4,
  .../modulerc4/mvapich/2.3.1/gcc/9.1.0,
  .../modulerc4/mvapich/2.3.1/intel/2019,
  .../modulerc4/mvapich/2.3.1/pgi/19.4,
  .../compiler-etc-dependencies/modulerc4/mvapich/common,
  .../modulerc4/openmpi/3.1/gcc/8.2.0, .../modulerc4/openmpi/3.1/gcc/9.1.0,
  .../modulerc4/openmpi/3.1/intel/2018, .../modulerc4/openmpi/3.1/intel/2019,
  .../modulerc4/openmpi/3.1/pgi/18.4, .../modulerc4/openmpi/3.1/pgi/19.4,
  .../modulerc4/openmpi/4.0/gcc/9.1.0, .../modulerc4/openmpi/4.0/intel/2019,
  .../modulerc4/openmpi/4.0/pgi/19.4,
  .../compiler-etc-dependencies/modulerc4/openmpi/common,
  .../compiler-etc-dependencies/modulerc4/pgi/18.4,
  .../compiler-etc-dependencies/modulerc4/pgi/19.4,
  .../compiler-etc-dependencies/modulerc4/pgi/common,
  doc/source/cookbook/compiler-etc-dependencies.rst: doc: simplify reading of
  compiler-etc-depend recipe (dummy)

2019-12-20  Tom Payerle <payerle@umd.edu>

  * .../example-sessions/bar-defaults.sh, .../example-sessions/bar-loads.sh,
  .../example-sessions/bar-switch.sh, .../example-sessions/common_code.sh,
  .../flavours/modules3.2.10/bar-defaults.out,
  .../flavours/modules3.2.10/bar-loads.out,
  .../flavours/modules3.2.10/bar-switch.out,
  .../flavours/modules3.2.10/foo-avail1.out,
  .../flavours/modules3.2.10/foo-avail2.out,
  .../flavours/modules3.2.10/foo-defaults.out,
  .../flavours/modules3.2.10/foo-loads.out,
  .../flavours/modules3.2.10/foo-switch.out,
  .../flavours/modules3.2.10/modavail.out,
  .../flavours/modules3.2.10/modversion.out,
  .../flavours/modules3.2.10/ompi-defaults.out,
  .../flavours/modules3.2.10/ompi-loads1.out,
  .../flavours/modules3.2.10/ompi-switch.out,
  .../flavours/modules4.3.1/bar-defaults.out,
  .../flavours/modules4.3.1/bar-loads.out,
  .../flavours/modules4.3.1/bar-switch.out,
  .../flavours/modules4.3.1/foo-avail1.out,
  .../flavours/modules4.3.1/foo-avail2.out,
  .../flavours/modules4.3.1/foo-defaults.out,
  .../flavours/modules4.3.1/foo-loads.out,
  .../flavours/modules4.3.1/foo-switch.out,
  .../flavours/modules4.3.1/modavail.out,
  .../flavours/modules4.3.1/modversion.out,
  .../flavours/modules4.3.1/ompi-defaults.out,
  .../flavours/modules4.3.1/ompi-loads1.out,
  .../flavours/modules4.3.1/ompi-switch.out,
  .../example-sessions/foo-avail1.sh, .../example-sessions/foo-avail2.sh,
  .../example-sessions/foo-defaults.sh, .../example-sessions/foo-loads.sh,
  .../example-sessions/foo-switch.sh,
  .../homebrewed/modules3.2.10/bar-defaults.out,
  .../homebrewed/modules3.2.10/bar-loads.out,
  .../homebrewed/modules3.2.10/bar-switch.out,
  .../homebrewed/modules3.2.10/foo-avail1.out,
  .../homebrewed/modules3.2.10/foo-avail2.out,
  .../homebrewed/modules3.2.10/foo-defaults.out,
  .../homebrewed/modules3.2.10/foo-loads.out,
  .../homebrewed/modules3.2.10/foo-switch.out,
  .../homebrewed/modules3.2.10/modavail.out,
  .../homebrewed/modules3.2.10/modversion.out,
  .../homebrewed/modules3.2.10/ompi-defaults.out,
  .../homebrewed/modules3.2.10/ompi-loads1.out,
  .../homebrewed/modules3.2.10/ompi-switch.out,
  .../homebrewed/modules4.3.1/bar-defaults.out,
  .../homebrewed/modules4.3.1/bar-loads.out,
  .../homebrewed/modules4.3.1/bar-switch.out,
  .../homebrewed/modules4.3.1/foo-avail1.out,
  .../homebrewed/modules4.3.1/foo-avail2.out,
  .../homebrewed/modules4.3.1/foo-defaults.out,
  .../homebrewed/modules4.3.1/foo-loads.out,
  .../homebrewed/modules4.3.1/foo-switch.out,
  .../homebrewed/modules4.3.1/modavail.out,
  .../homebrewed/modules4.3.1/modversion.out,
  .../homebrewed/modules4.3.1/ompi-defaults.out,
  .../homebrewed/modules4.3.1/ompi-loads1.out,
  .../homebrewed/modules4.3.1/ompi-switch.out,
  .../example-sessions/modavail.sh,
  .../modulepath/modules3.2.10/bar-defaults.out,
  .../modulepath/modules3.2.10/bar-loads.out,
  .../modulepath/modules3.2.10/bar-switch.out,
  .../modulepath/modules3.2.10/foo-avail1.out,
  .../modulepath/modules3.2.10/foo-avail2.out,
  .../modulepath/modules3.2.10/foo-defaults.out,
  .../modulepath/modules3.2.10/foo-loads.out,
  .../modulepath/modules3.2.10/foo-switch.out,
  .../modulepath/modules3.2.10/modavail.out,
  .../modulepath/modules3.2.10/modversion.out,
  .../modulepath/modules3.2.10/ompi-defaults.out,
  .../modulepath/modules3.2.10/ompi-loads1.out,
  .../modulepath/modules3.2.10/ompi-switch.out,
  .../modulepath/modules4.3.1/bar-defaults.out,
  .../modulepath/modules4.3.1/bar-loads.out,
  .../modulepath/modules4.3.1/bar-switch.out,
  .../modulepath/modules4.3.1/foo-avail1.out,
  .../modulepath/modules4.3.1/foo-avail2.out,
  .../modulepath/modules4.3.1/foo-defaults.out,
  .../modulepath/modules4.3.1/foo-loads.out,
  .../modulepath/modules4.3.1/foo-switch.out,
  .../modulepath/modules4.3.1/modavail.out,
  .../modulepath/modules4.3.1/modversion.out,
  .../modulepath/modules4.3.1/ompi-defaults.out,
  .../modulepath/modules4.3.1/ompi-loads1.out,
  .../modulepath/modules4.3.1/ompi-switch.out,
  .../modulerc/modules3.2.10/bar-defaults.out,
  .../modulerc/modules3.2.10/bar-loads.out,
  .../modulerc/modules3.2.10/bar-switch.out,
  .../modulerc/modules3.2.10/foo-avail1.out,
  .../modulerc/modules3.2.10/foo-avail2.out,
  .../modulerc/modules3.2.10/foo-defaults.out,
  .../modulerc/modules3.2.10/foo-loads.out,
  .../modulerc/modules3.2.10/foo-switch.out,
  .../modulerc/modules3.2.10/modavail.out,
  .../modulerc/modules3.2.10/modversion.out,
  .../modulerc/modules3.2.10/ompi-defaults.out,
  .../modulerc/modules3.2.10/ompi-loads1.out,
  .../modulerc/modules3.2.10/ompi-switch.out,
  .../modulerc/modules4.3.1/bar-defaults.out,
  .../modulerc/modules4.3.1/bar-loads.out,
  .../modulerc/modules4.3.1/bar-switch.out,
  .../modulerc/modules4.3.1/foo-avail1.out,
  .../modulerc/modules4.3.1/foo-avail2.out,
  .../modulerc/modules4.3.1/foo-defaults.out,
  .../modulerc/modules4.3.1/foo-loads.out,
  .../modulerc/modules4.3.1/foo-switch.out,
  .../modulerc/modules4.3.1/modavail.out,
  .../modulerc/modules4.3.1/modversion.out,
  .../modulerc/modules4.3.1/ompi-defaults.out,
  .../modulerc/modules4.3.1/ompi-loads1.out,
  .../modulerc/modules4.3.1/ompi-switch.out,
  .../example-sessions/modversion.sh, .../example-sessions/ompi-defaults.sh,
  .../example-sessions/ompi-loads1.sh, .../example-sessions/ompi-switch.sh,
  .../example-sessions/ompi-switch.sh.m431,
  .../fake-sw-root/bar/4.7/1/README.txt,
  .../fake-sw-root/bar/4.7/1/gnu-8.2.0-simd-avx,
  .../fake-sw-root/bar/4.7/1/gnu-8.2.0-simd-sse4.1,
  .../fake-sw-root/bar/4.7/gcc/8.2.0/avx/bin/bar,
  .../fake-sw-root/bar/4.7/gcc/8.2.0/sse4.1/bin/bar,
  .../fake-sw-root/bar/5.4/1/README.txt,
  .../fake-sw-root/bar/5.4/1/gnu-9.1.0-simd-avx,
  .../fake-sw-root/bar/5.4/1/gnu-9.1.0-simd-avx2,
  .../fake-sw-root/bar/5.4/gcc/9.1.0/avx/bin/bar,
  .../fake-sw-root/bar/5.4/gcc/9.1.0/avx2/bin/bar,
  .../fake-sw-root/foo/1.1/1/README.txt, .../fake-sw-root/foo/1.1/1/gnu-8.2.0,
  .../fake-sw-root/foo/1.1/1/gnu-8.2.0-mvapich-2.1,
  .../fake-sw-root/foo/1.1/1/gnu-8.2.0-openmpi-3.1,
  .../fake-sw-root/foo/1.1/1/intel-2018,
  .../foo/1.1/1/intel-2018-intelmpi-default,
  .../fake-sw-root/foo/1.1/1/intel-2018-mvapich-2.1,
  .../fake-sw-root/foo/1.1/1/intel-2018-openmpi-3.1,
  .../fake-sw-root/foo/1.1/1/pgi-18.4,
  .../fake-sw-root/foo/1.1/1/pgi-18.4-mvapich-2.1,
  .../fake-sw-root/foo/1.1/1/pgi-18.4-openmpi-3.1,
  .../foo/1.1/gcc/8.2.0/mvapich/2.1/bin/foo,
  .../fake-sw-root/foo/1.1/gcc/8.2.0/nompi/bin/foo,
  .../foo/1.1/gcc/8.2.0/openmpi/3.1/bin/foo,
  .../foo/1.1/intel/2018/intelmpi/bin/foo,
  .../foo/1.1/intel/2018/mvapich/2.1/bin/foo,
  .../fake-sw-root/foo/1.1/intel/2018/nompi/bin/foo,
  .../foo/1.1/intel/2018/openmpi/3.1/bin/foo,
  .../foo/1.1/pgi/18.4/mvapich/2.1/bin/foo,
  .../fake-sw-root/foo/1.1/pgi/18.4/nompi/bin/foo,
  .../foo/1.1/pgi/18.4/openmpi/3.1/bin/foo,
  .../fake-sw-root/foo/2.4/1/README.txt, .../fake-sw-root/foo/2.4/1/gnu-9.1.0,
  .../fake-sw-root/foo/2.4/1/gnu-9.1.0-mvapich-2.3.1,
  .../fake-sw-root/foo/2.4/1/gnu-9.1.0-openmpi-4.0,
  .../fake-sw-root/foo/2.4/1/intel-2019,
  .../foo/2.4/1/intel-2019-intelmpi-default,
  .../foo/2.4/1/intel-2019-mvapich-2.3.1,
  .../fake-sw-root/foo/2.4/1/intel-2019-openmpi-4.0,
  .../fake-sw-root/foo/2.4/1/pgi-19.4,
  .../fake-sw-root/foo/2.4/1/pgi-19.4-openmpi-3.1,
  .../foo/2.4/gcc/9.1.0/mvapich/2.3.1/bin/foo,
  .../fake-sw-root/foo/2.4/gcc/9.1.0/nompi/bin/foo,
  .../foo/2.4/gcc/9.1.0/openmpi/4.0/bin/foo,
  .../foo/2.4/intel/2019/intelmpi/bin/foo,
  .../foo/2.4/intel/2019/mvapich/2.3.1/bin/foo,
  .../fake-sw-root/foo/2.4/intel/2019/nompi/bin/foo,
  .../foo/2.4/intel/2019/openmpi/4.0/bin/foo,
  .../fake-sw-root/foo/2.4/pgi/19.4/nompi/bin/foo,
  .../foo/2.4/pgi/19.4/openmpi/3.1/bin/foo,
  .../fake-sw-root/gcc/8.2.0/bin/gcc, .../fake-sw-root/gcc/9.1.0/bin/gcc,
  .../fake-sw-root/intel/2018/bin/icc, .../fake-sw-root/intel/2019/bin/icc,
  .../fake-sw-root/mvapich/2.1/1/README.txt,
  .../fake-sw-root/mvapich/2.1/1/gnu-8.2.0,
  .../fake-sw-root/mvapich/2.1/1/gnu-9.1.0,
  .../fake-sw-root/mvapich/2.1/1/intel-2018,
  .../fake-sw-root/mvapich/2.1/1/intel-2019,
  .../fake-sw-root/mvapich/2.1/1/pgi-18.4,
  .../fake-sw-root/mvapich/2.1/1/pgi-19.4,
  .../fake-sw-root/mvapich/2.1/gcc/8.2.0/bin/mpirun,
  .../fake-sw-root/mvapich/2.1/gcc/9.1.0/bin/mpirun,
  .../fake-sw-root/mvapich/2.1/intel/2018/bin/mpirun,
  .../fake-sw-root/mvapich/2.1/intel/2019/bin/mpirun,
  .../fake-sw-root/mvapich/2.1/pgi/18.4/bin/mpirun,
  .../fake-sw-root/mvapich/2.1/pgi/19.4/bin/mpirun,
  .../fake-sw-root/mvapich/2.3.1/1/README.txt,
  .../fake-sw-root/mvapich/2.3.1/1/gnu-9.1.0,
  .../fake-sw-root/mvapich/2.3.1/1/intel-2019,
  .../fake-sw-root/mvapich/2.3.1/1/pgi-19.4,
  .../mvapich/2.3.1/gcc/9.1.0/bin/mpirun,
  .../mvapich/2.3.1/intel/2019/bin/mpirun,
  .../fake-sw-root/mvapich/2.3.1/pgi/19.4/bin/mpirun,
  .../fake-sw-root/openmpi/3.1/1/README.txt,
  .../fake-sw-root/openmpi/3.1/1/gnu-8.2.0,
  .../fake-sw-root/openmpi/3.1/1/gnu-9.1.0,
  .../fake-sw-root/openmpi/3.1/1/intel-2018,
  .../fake-sw-root/openmpi/3.1/1/intel-2019,
  .../fake-sw-root/openmpi/3.1/1/pgi-18.4,
  .../fake-sw-root/openmpi/3.1/1/pgi-19.4,
  .../fake-sw-root/openmpi/3.1/gcc/8.2.0/bin/mpirun,
  .../fake-sw-root/openmpi/3.1/gcc/9.1.0/bin/mpirun,
  .../fake-sw-root/openmpi/3.1/intel/2018/bin/mpirun,
  .../fake-sw-root/openmpi/3.1/intel/2019/bin/mpirun,
  .../fake-sw-root/openmpi/3.1/pgi/18.4/bin/mpirun,
  .../fake-sw-root/openmpi/3.1/pgi/19.4/bin/mpirun,
  .../fake-sw-root/openmpi/4.0/1/README.txt,
  .../fake-sw-root/openmpi/4.0/1/gnu-9.1.0,
  .../fake-sw-root/openmpi/4.0/1/intel-2019,
  .../fake-sw-root/openmpi/4.0/1/pgi-19.4,
  .../fake-sw-root/openmpi/4.0/gcc/9.1.0/bin/mpirun,
  .../fake-sw-root/openmpi/4.0/intel/2019/bin/mpirun,
  .../fake-sw-root/openmpi/4.0/pgi/19.4/bin/mpirun,
  .../fake-sw-root/pgi/18.4/bin/pgcc, .../fake-sw-root/pgi/19.4/bin/pgcc,
  .../compiler-etc-dependencies/flavours/bar/4.7,
  .../compiler-etc-dependencies/flavours/bar/5.4,
  .../compiler-etc-dependencies/flavours/bar/common,
  .../compiler-etc-dependencies/flavours/foo/1.1,
  .../compiler-etc-dependencies/flavours/foo/2.4,
  .../compiler-etc-dependencies/flavours/foo/common,
  .../compiler-etc-dependencies/flavours/gnu/8.2.0,
  .../compiler-etc-dependencies/flavours/gnu/9.1.0,
  .../compiler-etc-dependencies/flavours/gnu/common,
  .../compiler-etc-dependencies/flavours/intel/2018,
  .../compiler-etc-dependencies/flavours/intel/2019,
  .../flavours/intel/common, .../flavours/intelmpi/default,
  .../compiler-etc-dependencies/flavours/mvapich/2.1,
  .../flavours/mvapich/2.3.1, .../flavours/mvapich/common,
  .../compiler-etc-dependencies/flavours/openmpi/3.1,
  .../compiler-etc-dependencies/flavours/openmpi/4.0,
  .../flavours/openmpi/common,
  .../compiler-etc-dependencies/flavours/pgi/18.4,
  .../compiler-etc-dependencies/flavours/pgi/19.4,
  .../compiler-etc-dependencies/flavours/pgi/common,
  .../compiler-etc-dependencies/flavours/simd/avx,
  .../compiler-etc-dependencies/flavours/simd/avx2,
  .../compiler-etc-dependencies/flavours/simd/common,
  .../compiler-etc-dependencies/flavours/simd/sse4.1,
  .../compiler-etc-dependencies/homebrewed/bar/4.7,
  .../compiler-etc-dependencies/homebrewed/bar/5.4, .../homebrewed/bar/common,
  .../compiler-etc-dependencies/homebrewed/foo/1.1,
  .../compiler-etc-dependencies/homebrewed/foo/2.4, .../homebrewed/foo/common,
  .../compiler-etc-dependencies/homebrewed/gcc/8.2.0,
  .../compiler-etc-dependencies/homebrewed/gcc/9.1.0,
  .../homebrewed/gcc/common, .../homebrewed/intel/2018,
  .../homebrewed/intel/2019, .../homebrewed/intel/common,
  .../homebrewed/intelmpi/default, .../homebrewed/mvapich/2.1,
  .../homebrewed/mvapich/2.3.1, .../homebrewed/mvapich/common,
  .../homebrewed/openmpi/3.1, .../homebrewed/openmpi/4.0,
  .../homebrewed/openmpi/common,
  .../compiler-etc-dependencies/homebrewed/pgi/18.4,
  .../compiler-etc-dependencies/homebrewed/pgi/19.4,
  .../homebrewed/pgi/common,
  .../compiler-etc-dependencies/homebrewed/simd/avx,
  .../compiler-etc-dependencies/homebrewed/simd/avx2,
  .../homebrewed/simd/common, .../homebrewed/simd/sse4.1,
  .../modrc_common/modulerc.default_lowest_simd,
  .../modrc_common/modulerc.select_compiler_family,
  .../modrc_common/modulerc.select_compiler_version,
  .../modrc_common/modulerc.select_mpi_family,
  .../modrc_common/modulerc.select_mpi_version,
  .../Compiler/gcc/8.2.0/bar/4.7/.modulerc,
  .../modulepath/Compiler/gcc/8.2.0/bar/4.7/avx,
  .../modulepath/Compiler/gcc/8.2.0/bar/4.7/sse4.1,
  .../modulepath/Compiler/gcc/8.2.0/bar/common,
  .../modulepath/Compiler/gcc/8.2.0/foo/1.1,
  .../modulepath/Compiler/gcc/8.2.0/foo/common,
  .../modulepath/Compiler/gcc/8.2.0/mvapich/2.1,
  .../modulepath/Compiler/gcc/8.2.0/mvapich/common,
  .../modulepath/Compiler/gcc/8.2.0/openmpi/3.1,
  .../modulepath/Compiler/gcc/8.2.0/openmpi/common,
  .../Compiler/gcc/9.1.0/bar/5.4/.modulerc,
  .../modulepath/Compiler/gcc/9.1.0/bar/5.4/avx,
  .../modulepath/Compiler/gcc/9.1.0/bar/5.4/avx2,
  .../modulepath/Compiler/gcc/9.1.0/bar/common,
  .../modulepath/Compiler/gcc/9.1.0/foo/2.4,
  .../modulepath/Compiler/gcc/9.1.0/foo/common,
  .../modulepath/Compiler/gcc/9.1.0/mvapich/2.1,
  .../modulepath/Compiler/gcc/9.1.0/mvapich/2.3.1,
  .../modulepath/Compiler/gcc/9.1.0/mvapich/common,
  .../modulepath/Compiler/gcc/9.1.0/openmpi/3.1,
  .../modulepath/Compiler/gcc/9.1.0/openmpi/4.0,
  .../modulepath/Compiler/gcc/9.1.0/openmpi/common,
  .../modulepath/Compiler/intel/2018/foo/1.1,
  .../modulepath/Compiler/intel/2018/foo/common,
  .../modulepath/Compiler/intel/2018/intelmpi/common,
  .../Compiler/intel/2018/intelmpi/default,
  .../modulepath/Compiler/intel/2018/mvapich/2.1,
  .../modulepath/Compiler/intel/2018/mvapich/common,
  .../modulepath/Compiler/intel/2018/openmpi/3.1,
  .../modulepath/Compiler/intel/2018/openmpi/common,
  .../modulepath/Compiler/intel/2019/foo/2.4,
  .../modulepath/Compiler/intel/2019/foo/common,
  .../modulepath/Compiler/intel/2019/intelmpi/common,
  .../Compiler/intel/2019/intelmpi/default,
  .../modulepath/Compiler/intel/2019/mvapich/2.1,
  .../modulepath/Compiler/intel/2019/mvapich/2.3.1,
  .../modulepath/Compiler/intel/2019/mvapich/common,
  .../modulepath/Compiler/intel/2019/openmpi/3.1,
  .../modulepath/Compiler/intel/2019/openmpi/4.0,
  .../modulepath/Compiler/intel/2019/openmpi/common,
  .../modulepath/Compiler/pgi/18.4/foo/1.1,
  .../modulepath/Compiler/pgi/18.4/foo/common,
  .../modulepath/Compiler/pgi/18.4/mvapich/2.1,
  .../modulepath/Compiler/pgi/18.4/mvapich/common,
  .../modulepath/Compiler/pgi/18.4/openmpi/3.1,
  .../modulepath/Compiler/pgi/18.4/openmpi/common,
  .../modulepath/Compiler/pgi/19.4/foo/2.4,
  .../modulepath/Compiler/pgi/19.4/foo/common,
  .../modulepath/Compiler/pgi/19.4/mvapich/2.1,
  .../modulepath/Compiler/pgi/19.4/mvapich/2.3.1,
  .../modulepath/Compiler/pgi/19.4/mvapich/common,
  .../modulepath/Compiler/pgi/19.4/openmpi/3.1,
  .../modulepath/Compiler/pgi/19.4/openmpi/4.0,
  .../modulepath/Compiler/pgi/19.4/openmpi/common,
  .../CompilerMPI/gcc/8.2.0/mvapich/2.1/foo/1.1,
  .../CompilerMPI/gcc/8.2.0/mvapich/2.1/foo/common,
  .../CompilerMPI/gcc/8.2.0/openmpi/3.1/foo/1.1,
  .../CompilerMPI/gcc/8.2.0/openmpi/3.1/foo/common,
  .../CompilerMPI/gcc/9.1.0/mvapich/2.3.1/foo/2.4,
  .../CompilerMPI/gcc/9.1.0/mvapich/2.3.1/foo/common,
  .../CompilerMPI/gcc/9.1.0/openmpi/4.0/foo/2.4,
  .../CompilerMPI/gcc/9.1.0/openmpi/4.0/foo/common,
  .../intel/2018/intelmpi/default/foo/1.1,
  .../intel/2018/intelmpi/default/foo/common,
  .../CompilerMPI/intel/2018/mvapich/2.1/foo/1.1,
  .../CompilerMPI/intel/2018/mvapich/2.1/foo/common,
  .../CompilerMPI/intel/2018/openmpi/3.1/foo/1.1,
  .../CompilerMPI/intel/2018/openmpi/3.1/foo/common,
  .../intel/2019/intelmpi/default/foo/2.4,
  .../intel/2019/intelmpi/default/foo/common,
  .../CompilerMPI/intel/2019/mvapich/2.3.1/foo/2.4,
  .../intel/2019/mvapich/2.3.1/foo/common,
  .../CompilerMPI/intel/2019/openmpi/4.0/foo/2.4,
  .../CompilerMPI/intel/2019/openmpi/4.0/foo/common,
  .../CompilerMPI/pgi/18.4/mvapich/2.1/foo/1.1,
  .../CompilerMPI/pgi/18.4/mvapich/2.1/foo/common,
  .../CompilerMPI/pgi/18.4/openmpi/3.1/foo/1.1,
  .../CompilerMPI/pgi/18.4/openmpi/3.1/foo/common,
  .../CompilerMPI/pgi/19.4/openmpi/3.1/foo/2.4,
  .../CompilerMPI/pgi/19.4/openmpi/3.1/foo/common,
  .../CompilerMPI/pgi/19.4/openmpi/4.0/REAMDE.txt,
  .../modulepath/Core/gcc/8.2.0, .../modulepath/Core/gcc/9.1.0,
  .../modulepath/Core/gcc/common, .../modulepath/Core/intel/2018,
  .../modulepath/Core/intel/2019, .../modulepath/Core/intel/common,
  .../modulepath/Core/pgi/18.4, .../modulepath/Core/pgi/19.4,
  .../modulepath/Core/pgi/common, .../modulepath/common/bar/common,
  .../modulepath/common/foo/common, .../modulepath/common/intelmpi/common,
  .../modulepath/common/mvapich/common, .../modulepath/common/openmpi/common,
  .../modulerc3/bar/.modulerc, .../modulerc3/bar/4.7/.modulerc,
  .../modulerc3/bar/4.7/gcc/.modulerc,
  .../modulerc3/bar/4.7/gcc/8.2.0/.modulerc,
  .../modulerc3/bar/4.7/gcc/8.2.0/avx, .../modulerc3/bar/4.7/gcc/8.2.0/sse4.1,
  .../modulerc3/bar/5.4/.modulerc, .../modulerc3/bar/5.4/gcc/.modulerc,
  .../modulerc3/bar/5.4/gcc/9.1.0/avx, .../modulerc3/bar/5.4/gcc/9.1.0/avx2,
  .../modulerc3/bar/avx/.modulerc, .../modulerc3/bar/avx/gcc/.modulerc,
  .../modulerc3/bar/avx/gcc/8.2.0/4.7, .../modulerc3/bar/avx/gcc/9.1.0/5.4,
  .../modulerc3/bar/avx2/.modulerc, .../modulerc3/bar/avx2/gcc/.modulerc,
  .../modulerc3/bar/avx2/gcc/9.1.0/5.4,
  .../compiler-etc-dependencies/modulerc3/bar/common,
  .../modulerc3/bar/gcc/.modulerc, .../modulerc3/bar/gcc/8.2.0/.modulerc,
  .../modulerc3/bar/gcc/8.2.0/avx/4.7, .../modulerc3/bar/gcc/8.2.0/sse4.1/4.7,
  .../modulerc3/bar/gcc/9.1.0/.modulerc, .../modulerc3/bar/gcc/9.1.0/avx/5.4,
  .../modulerc3/bar/gcc/9.1.0/avx2/5.4, .../modulerc3/bar/sse4.1/.modulerc,
  .../modulerc3/bar/sse4.1/gcc/.modulerc,
  .../modulerc3/bar/sse4.1/gcc/8.2.0/4.7, .../modulerc3/foo/.modulerc,
  .../modulerc3/foo/1.1/.modulerc, .../modulerc3/foo/1.1/gcc/.modulerc,
  .../modulerc3/foo/1.1/gcc/8.2.0/.modulerc,
  .../modulerc3/foo/1.1/gcc/8.2.0/mvapich/.modulerc,
  .../modulerc3/foo/1.1/gcc/8.2.0/mvapich/2.1,
  .../modulerc3/foo/1.1/gcc/8.2.0/nompi,
  .../modulerc3/foo/1.1/gcc/8.2.0/openmpi/.modulerc,
  .../modulerc3/foo/1.1/gcc/8.2.0/openmpi/3.1,
  .../modulerc3/foo/1.1/intel/.modulerc,
  .../modulerc3/foo/1.1/intel/2018/.modulerc,
  .../modulerc3/foo/1.1/intel/2018/intelmpi,
  .../modulerc3/foo/1.1/intel/2018/mvapich/.modulerc,
  .../modulerc3/foo/1.1/intel/2018/mvapich/2.1,
  .../modulerc3/foo/1.1/intel/2018/nompi,
  .../modulerc3/foo/1.1/intel/2018/openmpi/.modulerc,
  .../modulerc3/foo/1.1/intel/2018/openmpi/3.1,
  .../modulerc3/foo/1.1/pgi/.modulerc,
  .../modulerc3/foo/1.1/pgi/18.4/.modulerc,
  .../modulerc3/foo/1.1/pgi/18.4/mvapich/.modulerc,
  .../modulerc3/foo/1.1/pgi/18.4/mvapich/2.1,
  .../modulerc3/foo/1.1/pgi/18.4/nompi,
  .../modulerc3/foo/1.1/pgi/18.4/openmpi/.modulerc,
  .../modulerc3/foo/1.1/pgi/18.4/openmpi/3.1, .../modulerc3/foo/2.4/.modulerc,
  .../modulerc3/foo/2.4/gcc/.modulerc,
  .../modulerc3/foo/2.4/gcc/9.1.0/.modulerc,
  .../modulerc3/foo/2.4/gcc/9.1.0/mvapich/.modulerc,
  .../modulerc3/foo/2.4/gcc/9.1.0/mvapich/2.3.1,
  .../modulerc3/foo/2.4/gcc/9.1.0/nompi,
  .../modulerc3/foo/2.4/gcc/9.1.0/openmpi/.modulerc,
  .../modulerc3/foo/2.4/gcc/9.1.0/openmpi/4.0,
  .../modulerc3/foo/2.4/intel/.modulerc,
  .../modulerc3/foo/2.4/intel/2019/.modulerc,
  .../modulerc3/foo/2.4/intel/2019/intelmpi,
  .../modulerc3/foo/2.4/intel/2019/mvapich/.modulerc,
  .../modulerc3/foo/2.4/intel/2019/mvapich/2.3.1,
  .../modulerc3/foo/2.4/intel/2019/nompi,
  .../modulerc3/foo/2.4/intel/2019/openmpi/.modulerc,
  .../modulerc3/foo/2.4/intel/2019/openmpi/4.0,
  .../modulerc3/foo/2.4/pgi/.modulerc,
  .../modulerc3/foo/2.4/pgi/19.4/.modulerc,
  .../modulerc3/foo/2.4/pgi/19.4/nompi,
  .../modulerc3/foo/2.4/pgi/19.4/openmpi/.modulerc,
  .../modulerc3/foo/2.4/pgi/19.4/openmpi/3.1,
  .../compiler-etc-dependencies/modulerc3/foo/common,
  .../modulerc3/foo/gcc/.modulerc, .../modulerc3/foo/gcc/8.2.0/.modulerc,
  .../modulerc3/foo/gcc/8.2.0/mvapich/.modulerc,
  .../modulerc3/foo/gcc/8.2.0/mvapich/2.1/1.1,
  .../modulerc3/foo/gcc/8.2.0/nompi/1.1,
  .../modulerc3/foo/gcc/8.2.0/openmpi/.modulerc,
  .../modulerc3/foo/gcc/8.2.0/openmpi/3.1/1.1,
  .../modulerc3/foo/gcc/9.1.0/.modulerc,
  .../modulerc3/foo/gcc/9.1.0/mvapich/.modulerc,
  .../modulerc3/foo/gcc/9.1.0/mvapich/2.3.1/2.4,
  .../modulerc3/foo/gcc/9.1.0/nompi/2.4,
  .../modulerc3/foo/gcc/9.1.0/openmpi/.modulerc,
  .../modulerc3/foo/gcc/9.1.0/openmpi/4.0/2.4,
  .../modulerc3/foo/intel/.modulerc, .../modulerc3/foo/intel/2018/.modulerc,
  .../modulerc3/foo/intel/2018/intelmpi/1.1,
  .../modulerc3/foo/intel/2018/mvapich/.modulerc,
  .../modulerc3/foo/intel/2018/mvapich/2.1/1.1,
  .../modulerc3/foo/intel/2018/nompi/1.1,
  .../modulerc3/foo/intel/2018/openmpi/.modulerc,
  .../modulerc3/foo/intel/2018/openmpi/3.1/1.1,
  .../modulerc3/foo/intel/2019/.modulerc,
  .../modulerc3/foo/intel/2019/intelmpi/2.4,
  .../modulerc3/foo/intel/2019/mvapich/.modulerc,
  .../modulerc3/foo/intel/2019/mvapich/2.3.1/2.4,
  .../modulerc3/foo/intel/2019/nompi/2.4,
  .../modulerc3/foo/intel/2019/openmpi/.modulerc,
  .../modulerc3/foo/intel/2019/openmpi/4.0/2.4,
  .../modulerc3/foo/pgi/.modulerc, .../modulerc3/foo/pgi/18.4/.modulerc,
  .../modulerc3/foo/pgi/18.4/mvapich/.modulerc,
  .../modulerc3/foo/pgi/18.4/mvapich/2.1/1.1,
  .../modulerc3/foo/pgi/18.4/nompi/1.1,
  .../modulerc3/foo/pgi/18.4/openmpi/.modulerc,
  .../modulerc3/foo/pgi/18.4/openmpi/3.1/1.1,
  .../modulerc3/foo/pgi/19.4/.modulerc, .../modulerc3/foo/pgi/19.4/nompi/2.4,
  .../modulerc3/foo/pgi/19.4/openmpi/.modulerc,
  .../modulerc3/foo/pgi/19.4/openmpi/3.1/2.4,
  .../compiler-etc-dependencies/modulerc3/gcc/8.2.0,
  .../compiler-etc-dependencies/modulerc3/gcc/9.1.0,
  .../compiler-etc-dependencies/modulerc3/gcc/common,
  .../compiler-etc-dependencies/modulerc3/intel/2018,
  .../compiler-etc-dependencies/modulerc3/intel/2019,
  .../modulerc3/intel/common, .../modulerc3/mvapich/.modulerc,
  .../modulerc3/mvapich/2.1/.modulerc,
  .../modulerc3/mvapich/2.1/gcc/.modulerc,
  .../modulerc3/mvapich/2.1/gcc/8.2.0, .../modulerc3/mvapich/2.1/gcc/9.1.0,
  .../modulerc3/mvapich/2.1/intel/.modulerc,
  .../modulerc3/mvapich/2.1/intel/2018, .../modulerc3/mvapich/2.1/intel/2019,
  .../modulerc3/mvapich/2.1/pgi/.modulerc, .../modulerc3/mvapich/2.1/pgi/18.4,
  .../modulerc3/mvapich/2.1/pgi/19.4, .../modulerc3/mvapich/2.3.1/.modulerc,
  .../modulerc3/mvapich/2.3.1/gcc/.modulerc,
  .../modulerc3/mvapich/2.3.1/gcc/9.1.0,
  .../modulerc3/mvapich/2.3.1/intel/.modulerc,
  .../modulerc3/mvapich/2.3.1/intel/2019,
  .../modulerc3/mvapich/2.3.1/pgi/.modulerc,
  .../modulerc3/mvapich/2.3.1/pgi/19.4, .../modulerc3/mvapich/common,
  .../modulerc3/mvapich/gcc/.modulerc, .../modulerc3/mvapich/gcc/8.2.0/2.1,
  .../modulerc3/mvapich/gcc/9.1.0/2.1, .../modulerc3/mvapich/gcc/9.1.0/2.3.1,
  .../modulerc3/mvapich/intel/.modulerc, .../modulerc3/mvapich/intel/2018/2.1,
  .../modulerc3/mvapich/intel/2019/2.1,
  .../modulerc3/mvapich/intel/2019/2.3.1, .../modulerc3/mvapich/pgi/.modulerc,
  .../modulerc3/mvapich/pgi/18.4/2.1, .../modulerc3/mvapich/pgi/19.4/2.1,
  .../modulerc3/mvapich/pgi/19.4/2.3.1, .../modulerc3/openmpi/.modulerc,
  .../modulerc3/openmpi/3.1/.modulerc,
  .../modulerc3/openmpi/3.1/gcc/.modulerc,
  .../modulerc3/openmpi/3.1/gcc/8.2.0, .../modulerc3/openmpi/3.1/gcc/9.1.0,
  .../modulerc3/openmpi/3.1/intel/.modulerc,
  .../modulerc3/openmpi/3.1/intel/2018, .../modulerc3/openmpi/3.1/intel/2019,
  .../modulerc3/openmpi/3.1/pgi/.modulerc, .../modulerc3/openmpi/3.1/pgi/18.4,
  .../modulerc3/openmpi/3.1/pgi/19.4, .../modulerc3/openmpi/4.0/.modulerc,
  .../modulerc3/openmpi/4.0/gcc/.modulerc,
  .../modulerc3/openmpi/4.0/gcc/9.1.0,
  .../modulerc3/openmpi/4.0/intel/.modulerc,
  .../modulerc3/openmpi/4.0/intel/2019,
  .../modulerc3/openmpi/4.0/pgi/.modulerc, .../modulerc3/openmpi/4.0/pgi/19.4,
  .../modulerc3/openmpi/common, .../modulerc3/openmpi/gcc/.modulerc,
  .../modulerc3/openmpi/gcc/8.2.0/3.1, .../modulerc3/openmpi/gcc/9.1.0/3.1,
  .../modulerc3/openmpi/gcc/9.1.0/4.0, .../modulerc3/openmpi/intel/.modulerc,
  .../modulerc3/openmpi/intel/2018/3.1, .../modulerc3/openmpi/intel/2019/3.1,
  .../modulerc3/openmpi/intel/2019/4.0, .../modulerc3/openmpi/pgi/.modulerc,
  .../modulerc3/openmpi/pgi/18.4/3.1, .../modulerc3/openmpi/pgi/19.4/3.1,
  .../modulerc3/openmpi/pgi/19.4/4.0,
  .../compiler-etc-dependencies/modulerc3/pgi/18.4,
  .../compiler-etc-dependencies/modulerc3/pgi/19.4,
  .../compiler-etc-dependencies/modulerc3/pgi/common,
  .../modulerc4/bar/.modulerc, .../modulerc4/bar/4.7/.modulerc,
  .../modulerc4/bar/4.7/gcc/.modulerc,
  .../modulerc4/bar/4.7/gcc/8.2.0/.modulerc,
  .../modulerc4/bar/4.7/gcc/8.2.0/avx, .../modulerc4/bar/4.7/gcc/8.2.0/sse4.1,
  .../modulerc4/bar/5.4/.modulerc, .../modulerc4/bar/5.4/gcc/.modulerc,
  .../modulerc4/bar/5.4/gcc/9.1.0/avx, .../modulerc4/bar/5.4/gcc/9.1.0/avx2,
  .../modulerc4/bar/avx/.modulerc, .../modulerc4/bar/avx/gcc/.modulerc,
  .../modulerc4/bar/avx/gcc/8.2.0/4.7, .../modulerc4/bar/avx/gcc/9.1.0/5.4,
  .../modulerc4/bar/avx2/.modulerc, .../modulerc4/bar/avx2/gcc/.modulerc,
  .../modulerc4/bar/avx2/gcc/9.1.0/5.4,
  .../compiler-etc-dependencies/modulerc4/bar/common,
  .../modulerc4/bar/gcc/.modulerc, .../modulerc4/bar/gcc/8.2.0/.modulerc,
  .../modulerc4/bar/gcc/8.2.0/avx/4.7, .../modulerc4/bar/gcc/8.2.0/sse4.1/4.7,
  .../modulerc4/bar/gcc/9.1.0/.modulerc, .../modulerc4/bar/gcc/9.1.0/avx/5.4,
  .../modulerc4/bar/gcc/9.1.0/avx2/5.4, .../modulerc4/bar/sse4.1/.modulerc,
  .../modulerc4/bar/sse4.1/gcc/.modulerc,
  .../modulerc4/bar/sse4.1/gcc/8.2.0/4.7, .../modulerc4/foo/.modulerc,
  .../modulerc4/foo/1.1/.modulerc, .../modulerc4/foo/1.1/gcc/.modulerc,
  .../modulerc4/foo/1.1/gcc/8.2.0/.modulerc,
  .../modulerc4/foo/1.1/gcc/8.2.0/mvapich/.modulerc,
  .../modulerc4/foo/1.1/gcc/8.2.0/mvapich/2.1,
  .../modulerc4/foo/1.1/gcc/8.2.0/nompi,
  .../modulerc4/foo/1.1/gcc/8.2.0/openmpi/.modulerc,
  .../modulerc4/foo/1.1/gcc/8.2.0/openmpi/3.1,
  .../modulerc4/foo/1.1/intel/.modulerc,
  .../modulerc4/foo/1.1/intel/2018/.modulerc,
  .../modulerc4/foo/1.1/intel/2018/intelmpi,
  .../modulerc4/foo/1.1/intel/2018/mvapich/.modulerc,
  .../modulerc4/foo/1.1/intel/2018/mvapich/2.1,
  .../modulerc4/foo/1.1/intel/2018/nompi,
  .../modulerc4/foo/1.1/intel/2018/openmpi/.modulerc,
  .../modulerc4/foo/1.1/intel/2018/openmpi/3.1,
  .../modulerc4/foo/1.1/pgi/.modulerc,
  .../modulerc4/foo/1.1/pgi/18.4/.modulerc,
  .../modulerc4/foo/1.1/pgi/18.4/mvapich/.modulerc,
  .../modulerc4/foo/1.1/pgi/18.4/mvapich/2.1,
  .../modulerc4/foo/1.1/pgi/18.4/nompi,
  .../modulerc4/foo/1.1/pgi/18.4/openmpi/.modulerc,
  .../modulerc4/foo/1.1/pgi/18.4/openmpi/3.1, .../modulerc4/foo/2.4/.modulerc,
  .../modulerc4/foo/2.4/gcc/.modulerc,
  .../modulerc4/foo/2.4/gcc/9.1.0/.modulerc,
  .../modulerc4/foo/2.4/gcc/9.1.0/mvapich/.modulerc,
  .../modulerc4/foo/2.4/gcc/9.1.0/mvapich/2.3.1,
  .../modulerc4/foo/2.4/gcc/9.1.0/nompi,
  .../modulerc4/foo/2.4/gcc/9.1.0/openmpi/.modulerc,
  .../modulerc4/foo/2.4/gcc/9.1.0/openmpi/4.0,
  .../modulerc4/foo/2.4/intel/.modulerc,
  .../modulerc4/foo/2.4/intel/2019/.modulerc,
  .../modulerc4/foo/2.4/intel/2019/intelmpi,
  .../modulerc4/foo/2.4/intel/2019/mvapich/.modulerc,
  .../modulerc4/foo/2.4/intel/2019/mvapich/2.3.1,
  .../modulerc4/foo/2.4/intel/2019/nompi,
  .../modulerc4/foo/2.4/intel/2019/openmpi/.modulerc,
  .../modulerc4/foo/2.4/intel/2019/openmpi/4.0,
  .../modulerc4/foo/2.4/pgi/.modulerc,
  .../modulerc4/foo/2.4/pgi/19.4/.modulerc,
  .../modulerc4/foo/2.4/pgi/19.4/nompi,
  .../modulerc4/foo/2.4/pgi/19.4/openmpi/.modulerc,
  .../modulerc4/foo/2.4/pgi/19.4/openmpi/3.1,
  .../compiler-etc-dependencies/modulerc4/foo/common,
  .../modulerc4/foo/gcc/.modulerc, .../modulerc4/foo/gcc/8.2.0/.modulerc,
  .../modulerc4/foo/gcc/8.2.0/mvapich/.modulerc,
  .../modulerc4/foo/gcc/8.2.0/mvapich/2.1/1.1,
  .../modulerc4/foo/gcc/8.2.0/nompi/1.1,
  .../modulerc4/foo/gcc/8.2.0/openmpi/.modulerc,
  .../modulerc4/foo/gcc/8.2.0/openmpi/3.1/1.1,
  .../modulerc4/foo/gcc/9.1.0/.modulerc,
  .../modulerc4/foo/gcc/9.1.0/mvapich/.modulerc,
  .../modulerc4/foo/gcc/9.1.0/mvapich/2.3.1/2.4,
  .../modulerc4/foo/gcc/9.1.0/nompi/2.4,
  .../modulerc4/foo/gcc/9.1.0/openmpi/.modulerc,
  .../modulerc4/foo/gcc/9.1.0/openmpi/4.0/2.4,
  .../modulerc4/foo/intel/.modulerc, .../modulerc4/foo/intel/2018/.modulerc,
  .../modulerc4/foo/intel/2018/intelmpi/1.1,
  .../modulerc4/foo/intel/2018/mvapich/.modulerc,
  .../modulerc4/foo/intel/2018/mvapich/2.1/1.1,
  .../modulerc4/foo/intel/2018/nompi/1.1,
  .../modulerc4/foo/intel/2018/openmpi/.modulerc,
  .../modulerc4/foo/intel/2018/openmpi/3.1/1.1,
  .../modulerc4/foo/intel/2019/.modulerc,
  .../modulerc4/foo/intel/2019/intelmpi/2.4,
  .../modulerc4/foo/intel/2019/mvapich/.modulerc,
  .../modulerc4/foo/intel/2019/mvapich/2.3.1/2.4,
  .../modulerc4/foo/intel/2019/nompi/2.4,
  .../modulerc4/foo/intel/2019/openmpi/.modulerc,
  .../modulerc4/foo/intel/2019/openmpi/4.0/2.4,
  .../modulerc4/foo/pgi/.modulerc, .../modulerc4/foo/pgi/18.4/.modulerc,
  .../modulerc4/foo/pgi/18.4/mvapich/.modulerc,
  .../modulerc4/foo/pgi/18.4/mvapich/2.1/1.1,
  .../modulerc4/foo/pgi/18.4/nompi/1.1,
  .../modulerc4/foo/pgi/18.4/openmpi/.modulerc,
  .../modulerc4/foo/pgi/18.4/openmpi/3.1/1.1,
  .../modulerc4/foo/pgi/19.4/.modulerc, .../modulerc4/foo/pgi/19.4/nompi/2.4,
  .../modulerc4/foo/pgi/19.4/openmpi/.modulerc,
  .../modulerc4/foo/pgi/19.4/openmpi/3.1/2.4,
  .../compiler-etc-dependencies/modulerc4/gcc/8.2.0,
  .../compiler-etc-dependencies/modulerc4/gcc/9.1.0,
  .../compiler-etc-dependencies/modulerc4/gcc/common,
  .../compiler-etc-dependencies/modulerc4/intel/2018,
  .../compiler-etc-dependencies/modulerc4/intel/2019,
  .../modulerc4/intel/common, .../modulerc4/mvapich/.modulerc,
  .../modulerc4/mvapich/2.1/.modulerc,
  .../modulerc4/mvapich/2.1/gcc/.modulerc,
  .../modulerc4/mvapich/2.1/gcc/8.2.0, .../modulerc4/mvapich/2.1/gcc/9.1.0,
  .../modulerc4/mvapich/2.1/intel/.modulerc,
  .../modulerc4/mvapich/2.1/intel/2018, .../modulerc4/mvapich/2.1/intel/2019,
  .../modulerc4/mvapich/2.1/pgi/.modulerc, .../modulerc4/mvapich/2.1/pgi/18.4,
  .../modulerc4/mvapich/2.1/pgi/19.4, .../modulerc4/mvapich/2.3.1/.modulerc,
  .../modulerc4/mvapich/2.3.1/gcc/.modulerc,
  .../modulerc4/mvapich/2.3.1/gcc/9.1.0,
  .../modulerc4/mvapich/2.3.1/intel/.modulerc,
  .../modulerc4/mvapich/2.3.1/intel/2019,
  .../modulerc4/mvapich/2.3.1/pgi/.modulerc,
  .../modulerc4/mvapich/2.3.1/pgi/19.4, .../modulerc4/mvapich/common,
  .../modulerc4/mvapich/gcc/.modulerc, .../modulerc4/mvapich/gcc/8.2.0/2.1,
  .../modulerc4/mvapich/gcc/9.1.0/2.1, .../modulerc4/mvapich/gcc/9.1.0/2.3.1,
  .../modulerc4/mvapich/intel/.modulerc, .../modulerc4/mvapich/intel/2018/2.1,
  .../modulerc4/mvapich/intel/2019/2.1,
  .../modulerc4/mvapich/intel/2019/2.3.1, .../modulerc4/mvapich/pgi/.modulerc,
  .../modulerc4/mvapich/pgi/18.4/2.1, .../modulerc4/mvapich/pgi/19.4/2.1,
  .../modulerc4/mvapich/pgi/19.4/2.3.1, .../modulerc4/openmpi/.modulerc,
  .../modulerc4/openmpi/3.1/.modulerc,
  .../modulerc4/openmpi/3.1/gcc/.modulerc,
  .../modulerc4/openmpi/3.1/gcc/8.2.0, .../modulerc4/openmpi/3.1/gcc/9.1.0,
  .../modulerc4/openmpi/3.1/intel/.modulerc,
  .../modulerc4/openmpi/3.1/intel/2018, .../modulerc4/openmpi/3.1/intel/2019,
  .../modulerc4/openmpi/3.1/pgi/.modulerc, .../modulerc4/openmpi/3.1/pgi/18.4,
  .../modulerc4/openmpi/3.1/pgi/19.4, .../modulerc4/openmpi/4.0/.modulerc,
  .../modulerc4/openmpi/4.0/gcc/.modulerc,
  .../modulerc4/openmpi/4.0/gcc/9.1.0,
  .../modulerc4/openmpi/4.0/intel/.modulerc,
  .../modulerc4/openmpi/4.0/intel/2019,
  .../modulerc4/openmpi/4.0/pgi/.modulerc, .../modulerc4/openmpi/4.0/pgi/19.4,
  .../modulerc4/openmpi/common, .../modulerc4/openmpi/gcc/.modulerc,
  .../modulerc4/openmpi/gcc/8.2.0/3.1, .../modulerc4/openmpi/gcc/9.1.0/3.1,
  .../modulerc4/openmpi/gcc/9.1.0/4.0, .../modulerc4/openmpi/intel/.modulerc,
  .../modulerc4/openmpi/intel/2018/3.1, .../modulerc4/openmpi/intel/2019/3.1,
  .../modulerc4/openmpi/intel/2019/4.0, .../modulerc4/openmpi/pgi/.modulerc,
  .../modulerc4/openmpi/pgi/18.4/3.1, .../modulerc4/openmpi/pgi/19.4/3.1,
  .../modulerc4/openmpi/pgi/19.4/4.0,
  .../compiler-etc-dependencies/modulerc4/pgi/18.4,
  .../compiler-etc-dependencies/modulerc4/pgi/19.4,
  .../compiler-etc-dependencies/modulerc4/pgi/common,
  .../tcllib/ChildModules.tcl, .../tcllib/CompilerFromPath.tcl,
  .../tcllib/CompilerUtils.tcl,
  .../compiler-etc-dependencies/tcllib/GetFamVer.tcl,
  .../tcllib/LoadedCompMatches.tcl, .../tcllib/LoadedModules.tcl,
  .../tcllib/LoadedMpiMatches.tcl,
  .../compiler-etc-dependencies/tcllib/MpiUtils.tcl,
  .../tcllib/WarningUtils.tcl, .../tcllib/common_utilities.tcl,
  .../compiler-etc-dependencies/tcllib/temp.tcl,
  doc/source/cookbook/compiler-etc-dependencies.rst: doc: add
  compiler-etc-dependencies cookbook recipe  New cookbook discussing various
  strategies for creating modulefiles for packages with multiple builds
  depending on previously loaded compiler, MPI libraries etc. (E.g. handling
  different "flavors" of packages)

2020-02-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * script/createmodule.sh: script: fix path deduplication in createmodule.sh
  Fixes #316

2020-02-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/006-procs.exp: ts: adapt perl code which sets
  _mlstatus

  * modulecmd.tcl.in: Lift perl variable strictness for _mlstatus  Declaration
  of $_mlstatus (evaluation status variable) cannot be done as part of
  generated code passed to `eval` statement. If $_mlstatus is declared or
  re-declared as part of evaluated code, defined value cannot be retrieved
  afterward in `module` subroutine.  To be able to retrieve the value of
  $_mlstatus set within generated code evaluation yet avoiding warnings of a
  'use strict;' mode, temporarily disable variable strictness.

2020-02-10  Andrey Maslennikov <andrew.maslennikov@gmail.com>

  * modulecmd.tcl.in: Add "my" for perl's $_mlstatus  Since this variable is
  always rendered it might be evaluated in a strict scope and fail with the
  following error: `Global symbol "$_mlstatus" requires explicit package name
  (did you forget to declare "my $_mlstatus"?)`

2020-02-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/005-init_ts.exp,
  testsuite/install.00-init/040-subshell.exp,
  testsuite/install.00-init/050-crossshell.exp: ts: adapt (again) err msg and
  code for fish 3.1

2020-02-17  Armin Wehrfritz <armin.wehrfritz@unsw.edu.au>

  * script/createmodule.py.in: script: fix createmodule.py for python3  Fixes
  #315

2020-02-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .gitignore: git: ignore dir used for local tests

2020-02-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/040-subshell.exp: ts: adapt err msg for fish 3.1

2020-02-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * configure: install: pass --with-python option to compat configure

2020-02-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/rpm/environment-modules.spec.in: rpm: use configure option
  --with-python to set shebang

  * Makefile: install: build and install createmodule.py in bindir

  * Makefile: install: ensure all built scripts have exec perms

  * INSTALL.rst, configure: install: add --with-python configure option
  Enable to pass a specific Python interpreter command name or location at
  configure step with `--with-python` option. Specified command name or
  location should be found on build system only if building from git
  repository.

  * .gitignore, INSTALL.rst, Makefile, Makefile.inc.in, configure,
  script/{createmodule.py => createmodule.py.in}, .../{gitlog2changelog.py =>
  gitlog2changelog.py.in}: install: build createmodule.py/gitlog2changelog.py
  to set shebang  Adapt configure script and Makefile to detect `python`
  command location and set it as shebang for `createmodule.py` and
  `gitlog2changelog.py`. If python command is not found python3 then python2
  are searched.

2020-02-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .travis.yml: travis: fix configuration warnings

  * .travis.yml: travis: replace a CentOS 6 test case by a CentOS 8

  * Makefile, configure: install: %D git-log placeholder by not be supported

  * .travis.yml, Makefile: install/travis: add rules to build rpm and test it

  * testsuite/modules.00-init/005-init_ts.exp: ts: output detected tty col
  number

2020-02-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/375-deps6.exp,
  testsuite/modules.50-cmds/376-switch.exp: ts: fix msg block err tests with
  regexp special chars

2020-02-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.60-initx/010-init_ts.exp: ts: output test error details
  whatever verbose value

2020-02-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .gitignore, Makefile, script/mt: install/script: abort auxiliary tools
  download after few seconds  Abort download of icdiff, nagelfar or tclsh83
  after 2 timeouts of 5 seconds and record download failure for icdiff to
  avoid mt script to attempt a new download tentative every time it is called.

2020-02-03  Andrey Portnoy <aportnoy@fastmail.com>

  * script/add.modules.in: Fix typo in add.modules.in

2020-02-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modulefiles.path1/loc_dv10/.version,
  testsuite/modulefiles.path1/loc_dv10/1.1,
  testsuite/modulefiles.path2/loc_dv10/.version,
  testsuite/modulefiles.path2/loc_dv10/1.2,
  testsuite/modules.20-locate/069-cross.exp: Fix sym version targetting mod
  version with space in name  Correctly handle symbolic version target
  including a whitespace in their name.

2020-02-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc. git archive build and createmodule script fixes in
  NEWS

2020-02-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * script/createmodule.py, script/createmodule.sh: script: fix
  createmodule.{sh,py} for script outputting text  Inhibit output generated by
  scripts evaluated by createmodule.sh and createmodule.py to ensure these
  outputs will not get in the way when analyzing the environment change done
  by the evaluated scripts.  Fixes #309

  * script/createmodule.sh: script: avoid shell func defs in createmodule.sh
  Fix createmodule.sh script to correctly analyses environment when shell
  functions are found defined in it. These shell function definitions are
  skipped.

2020-01-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.rst: doc: need more tools to install from a git archive export

2020-01-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile, configure, doc/Makefile,
  testsuite/install.00-init/030-options.exp: install: need sphinx if dist does
  not contain prebuilt doc  Check at configure step if pre-built documents are
  available, if found Sphinx-related makefile rules are inhibited. Otherwise
  Sphinx availability is tested and documentation build is disabled if not
  found.

  * .gitignore, Makefile: install: no txt version of docs at dist root

  * Makefile: install: no need to pre-build README file in dist

  * README.md: doc: update core dev list in README

  * .gitattributes, Makefile, doc/Makefile: install: no exclude of doc files
  from git archive dist  No more exclusion of project-related or installation
  documents from git archive distribution. Enable makefile rules relative to
  Sphinx documentation build even if not building from git repository. With
  release distribution tarballs nothing changes as document is pre-built in
  these archives. When working from a `git archive` export, these Sphinx rules
  will help to build docs.

2020-01-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/Makefile: install: do not clean ml.1 on 'make clean' if pre-built

  * Makefile: install: add missing ml.1 pre-built doc in dist

  * .gitattributes, Makefile: install: build empty changelog if not building
  from git  In case Modules is built from a `git archive` distribution,
  generate a bare ChangeLog file only referring to the NEWS document. Always
  include gitlog2changelog.py tool in distributions, but do not run it if not
  building from a git repository.

  * configure: install: auto disable compat build if no src and not in git

2020-01-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .gitattributes, Makefile, configure, version.inc.in: install: enable
  version.inc build outside git repository  Make `git archive` substitute
  .version.inc.in with commit hash, date and refs. Compute MODULES_BUILD and
  MODULES_BUILD_DATE from these informations in ./configure and Makefile if
  not working from git repository.

2020-01-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst, NEWS.rst: doc: desc. Improved Windows support in
  NEWS/MIGRATING

2020-01-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * README.md: doc: add ref to ml(1) man page in README

2020-01-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .appveyor.yml: appveyor: add native windows installation test case

2020-01-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile, script/TESTINSTALL.bat: script: add TESTINSTALL.bat script and
  ship it in dist-win

  * script/ml.cmd, script/module.cmd: script: ensure relevant exit code is set
  at end of win scripts

2020-01-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile, INSTALL.bat => script/INSTALL.bat, UNINSTALL.bat =>
  script/UNINSTALL.bat: script: move INSTALL.bat & UNINSTALL.bat in script dir

2020-01-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.bat, UNINSTALL.bat: install: set session PATH in INSTALL/UNINSTALL
  win scripts

  * INSTALL.bat: install: fix location of Windows find command

2020-01-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/FAQ.rst, doc/source/index.rst: doc: reorganize documentation
  index

2020-01-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/howto/using_on_windows.pdf: doc: remove now deprecated
  using_on_windows howto

  * Makefile, UNINSTALL.bat: install: provide a basic uninstall script for
  Windows

2020-01-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/cmd.cmd, script/ml.cmd, script/module.cmd: script/init: quote path
  variables in win-specific scripts  To handle installation path containing
  whitespaces like "C:\Program Files\Environment Modules".

  * INSTALL.bat, Makefile: install: provide a basic install script for Windows

  * .gitignore, Makefile, init/Makefile: install: add dist-win rule to build
  win-specific dist zip ball

  * Makefile, NEWS.rst, script/ml.cmd,
  testsuite/install.00-init/030-options.exp: install: add ml.cmd wrapper on
  Windows installation

  * .gitattributes, .gitignore, INSTALL-win.rst, INSTALL-win.txt, Makefile,
  doc/Makefile, doc/source/INSTALL-win.rst, doc/source/index.rst: doc:
  transform INSTALL-win.txt into INSTALL-win.rst

2020-01-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.rst, NEWS.rst: doc: desc --enable-windows-support in NEWS/INSTALL

  * .travis.yml, site.exp.in, testsuite/install.00-init/030-options.exp: ts:
  add test to check win-specific file install

  * script/module.cmd: script: simplify module.cmd batch file  Execute
  initialization script if MODULES_CMD environment variable is not found
  defined.

  * init/cmd.cmd: init: simplify cmd init file  Always define Modules-specific
  environment variables when running `cmd` initialization file.

  * Makefile, {windows => script}/module.cmd: script: move win-specific
  module.cmd file in script dir

  * Makefile, init/Makefile, windows/moduleinit.cmd => init/cmd.cmd,
  windows/module.cmd: init: move windows/moduleinit.cmd as init/cmd.cmd file

2019-05-21  Jacques Raphanel <dvp@crabisoft.fr>

  * Makefile, Makefile.inc.in, configure: Install: add
  --enable-windows-support configure option  Provide new
  `--enable-windows-support` option for configure to automatically install
  windows batch file to bin directory during install step. This new option is
  not enabled by default.

2019-05-08  Jacques Raphanel <dvp@crabisoft.fr>

  * windows/module.cmd, windows/moduleinit.cmd: Add support for
  portable/standalone install on Windows  Update moduleinit.cmd file to set
  Modules-specific environment variables according to the script directory and
  the file existence for:  * MODULESHOME if not defined yet and if
  `..\libexec\modulecmd.tcl` exists * add `..\bin` directory to PATH if
  `module.cmd` is not available from PATH and available from `..\bin` * add
  `..\bin` directory to PATH if `tclsh.exe` is not available from PATH and
  available from `..\bin`  Automatically call `moduleinit.cmd` from
  `module.cmd` if modules is not initialized yet (based on environment
  variables)  Fixes #272

2020-01-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .travis.yml: travis: increase testsuite timeout to 25mins

  * Makefile: install: use newer version of nagelfar (1.3.1)

  * Makefile: install: use newer version of icdiff (1.9.5)

  * .gitattributes, contrib/pre-commit: contrib: remove not-used-anymore
  pre-commit script

  * .gitattributes, .gitignore: git: remove refs to deleted www-specific stuff

  * .appveyor.yml, .cirrus.yml, .gitattributes, .gitignore, .travis.yml,
  Makefile, NEWS.rst, contrib/readme.txt,
  contrib/rpm/environment-modules.spec.in, {contrib/scripts =>
  script}/add.modules.in, {contrib/scripts => script}/createmodule.py,
  {contrib/scripts => script}/createmodule.sh, {contrib => script}/envml,
  {contrib => script}/gitlog2changelog.py, {contrib => script}/mb,
  {contrib/scripts => script}/mkroot, {contrib => script}/mlprof,
  {contrib/scripts => script}/modulecmd.in, {contrib => script}/mt, {contrib
  => script}/mtreview, {contrib => script}/nglfar2ccov, {contrib =>
  script}/playdemo: script: move all dist. and maint. scripts in a script dir

  * .gitignore, Makefile, NEWS.rst, contrib/{mb.in => mb}, contrib/{mlprof.in
  => mlprof}, contrib/mt, contrib/{mtreview.in => mtreview},
  contrib/{playdemo.in => playdemo}: script: remove need to build project
  management-specific tools  Make mb, mlprof, mtreview and playdemo use
  `/usr/bin/env tclsh` shebang rather applying there TCLSH location defined by
  `./configure` process.

2019-12-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.2/NaN, testsuite/modules.70-maint/040-list.exp,
  testsuite/modules.70-maint/045-listlong.exp,
  testsuite/modules.70-maint/290-json.exp,
  testsuite/modules.90-avail/070-full.exp: ts: test json output in 70/290

2019-12-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Make -j/-t/-l mutually exclusive  Use of --json command
  line switch automatically disables previous enablement of -t or -l. Same
  goes for --terse and --long switches.

  * modulecmd.tcl.in: Save err msg if json output to render them all together
  Record error messages in a g_report_erralist global array list rather output
  them directly in order to output all of them together in a JSON structure
  right before exiting.

  * modulecmd.tcl.in: Render final error message through reportError  Use
  regular reportError procedure to also render the last error message before
  exiting. Re-enable error report prior this call in case it was previously
  inhibited. Also clear all record message ids to ensure last error will be
  rendered at top level.

2019-12-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Enable JSON output only on supported sub-cmd

2019-12-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst, NEWS.rst: doc: desc -j/--json in NEWS/MIGRATING

  * doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: desc. -j/--json
  option in diff/man

  * modulecmd.tcl.in: Add support for JSON output on whatis/search subcmds

2019-12-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Add support for JSON output on savelist subcmd

  * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in,
  init/zsh-functions/_module: init: add -j/--json options to completion
  scripts

  * modulecmd.tcl.in: Add support for JSON output on list subcmd

2019-12-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Add support for JSON output on avail subcmd  Fixes #303

  * modulecmd.tcl.in: Add --json/-j command-line switches

  * modulecmd.tcl.in: Handle output report done in JSON format

  * modulecmd.tcl.in: Add modfile pathname to result returned by findModules

2019-12-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, modulecmd.tcl.in, testsuite/modulefiles.2/loc,
  testsuite/modulefiles.2/unloc, testsuite/modules.00-init/070-command.exp,
  testsuite/modules.70-maint/280-ml.exp: Fix mod subcmd abbrev match  Fix
  module sub-command abbreviation match to ensure passed abbreviated form
  fully match sub-command, not only its minimal abbreviated form. As an
  example, ``lod`` or ``loda`` do not match anymore the ``load`` sub-command,
  ``lo`` or ``loa`` still do.

  * modulecmd.tcl.in, testsuite/modulefiles.2/f, testsuite/modulefiles.2/t,
  testsuite/modules.70-maint/280-ml.exp: Filter-out all known cmd line
  switches when parsing ml args  To accurately determine specified module
  sub-command or list of modules to load or unload.

2019-12-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst, NEWS.rst: doc: desc ml in NEWS/MIGRATING

2019-12-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/Makefile, init/bash.in, init/sh.in: init: ensure ml is defined in
  bash/ksh subshells

  * .travis.yml: travis: disable ml on a CI case

  * testsuite/example/modulerc-1.in,
  testsuite/modules.70-maint/120-autoinit.exp: ts: adapt autoinit output test
  for 'ml'

  * testsuite/bin/install_test_cmake, testsuite/bin/install_test_perl,
  testsuite/bin/install_test_python, testsuite/bin/install_test_r,
  testsuite/bin/install_test_ruby, testsuite/bin/install_test_tcl,
  testsuite/install.00-init/024-ml.exp,
  testsuite/install.00-init/025-autoinit.exp,
  testsuite/install.00-init/040-subshell.exp,
  testsuite/install.00-init/080-args.exp: ts: test 'ml' over Modules
  installation

2019-11-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.2/bar/0.1, testsuite/modulefiles.2/bar/0.2,
  testsuite/modulefiles.2/bar/1, testsuite/modulefiles.2/bar/2,
  testsuite/modulefiles.2/baz/1, testsuite/modulefiles.2/baz/2,
  testsuite/modulefiles.2/foo/0.1, testsuite/modulefiles.2/foo/0.2,
  testsuite/modulefiles.2/foo/1, testsuite/modulefiles.2/foo/2,
  testsuite/modulefiles.2/load, testsuite/modulefiles.2/mlinmod,
  testsuite/modulefiles.2/modemptyarg/swap,
  testsuite/modulefiles.2/modemptyarg/swap2, testsuite/modulefiles.2/qux/1,
  testsuite/modulefiles.2/qux/2,
  testsuite/modules.50-cmds/152-module-emptyarg.exp,
  testsuite/modules.70-maint/280-ml.exp: ts: add test for 'ml' command

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.20-locate/043-virtual.exp,
  testsuite/modules.50-cmds/281-info-modulerc.exp,
  testsuite/modules.50-cmds/300-interp.exp,
  testsuite/modules.50-cmds/301-interp-command.exp,
  testsuite/modules.50-cmds/302-interp-cascaded.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.70-maint/040-list.exp,
  testsuite/modules.70-maint/045-listlong.exp,
  testsuite/modules.70-maint/230-verbosity.exp: ts: set global var for cur
  loaded msg header

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/080-begenv.exp,
  testsuite/modules.00-init/150-access-init.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.70-maint/043-listno.exp,
  testsuite/modules.70-maint/048-listlongno.exp: ts: set in a common var the
  no loaded msg

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/015-version.exp,
  testsuite/modules.00-init/100-pager.exp,
  testsuite/modules.00-init/120-siteconfig.exp,
  testsuite/modules.00-init/150-access-init.exp,
  testsuite/modules.70-maint/220-config.exp: ts: set a common var for Modules
  version report msg

2019-11-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Add ml procedure

2019-11-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/example/siteconfig.tcl-1: Adapt
  parseModuleVersionSpecifier proc mlspec  Add a 'mlspec' argument to the
  parseModuleVersionSpecifier procedure to indicate module specification comes
  or not from the 'ml' command. A slightly different processing is applied in
  this case as module name may be prefixed by a '-' character when specified
  over the 'ml' command to indicate this module should be unloaded.  When
  mlspec is enabled two lists are returned by parseModuleVersionSpecifier: one
  for the list of the module to load and another for the modules to unload.

2019-11-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Define ml func/alias if enabled in renderAutoinit

  * modulecmd.tcl.in: Add cmdMlHelp proc to output ml usage msg

  * modulecmd.tcl.in: Adapt main to call 'ml' procs when ml is called cmd

2019-11-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Resolve and check module command in
  parseModuleCommandName  Add parseModuleCommandName procedure to handle the
  name check and resolution (in case of aliased name) of the command supplied
  to the module procedure.

2019-11-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/rpm/environment-modules.spec.in, doc/Makefile, doc/source/conf.py,
  doc/source/index.rst, doc/source/ml.rst, doc/source/module.rst: doc/rpm: add
  ml man page

  * INSTALL.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst,
  doc/source/modulefile.rst: doc: desc ml in man/diff/INSTALL

  * testsuite/modules.70-maint/220-config.exp: ts: adapt existing tests to ml
  cfg opt

  * Makefile, Makefile.inc.in, configure, init/bash_completion.in,
  init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module,
  modulecmd.tcl.in, site.exp.in: Introduce ml configuration option  Add the
  ability to control whether or not a ``ml`` command should be defined at
  Modules initialization time. `ml` is a handy frontend to the module command:
  it reduces the number of characters to type to trigger module.  Enablement
  is managed throught a new configuration option named `ml` (which defines
  `MODULES_ML` environment variable when set). It may be enabled by default in
  `modulecmd.tcl` script with option `--enable-ml` passed to `./configure`
  script.

2019-11-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .../design/default-latest-version-specifiers.rst: doc: add
  default-latest-version-specifiers design notes

2020-01-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc. doc improvements in NEWS

2020-01-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst: doc: alphabetically sort sub-cmds, opts and envar
  in module.1

  * doc/source/modulefile.rst: doc: alphabetically sort modulefile cmds in
  modulefile.4

  * doc/source/diff_v3_v4.rst: doc: apply same markup on diff doc than man
  pages

  * doc/source/module.rst, doc/source/modulefile.rst: doc: split lines larger
  than 78 cols in man pages

  * doc/source/modulefile.rst: doc: desc. modulefile cmd version addition in
  modulefile.4

2020-01-08  Colin Marquardt <cmarqu42@gmail.com>

  * doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: desc. env var
  version addition in module.1

  * doc/source/module.rst: doc: desc. sub-cmds version addition in module.1

2020-01-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst: doc: desc. cmd line switches version addition in
  module.1

2020-01-08  Colin Marquardt <cmarqu42@gmail.com>

  * doc/source/module.rst, doc/source/modulefile.rst: doc: markup code with
  double backticks in man pages

2020-01-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst, doc/source/modulefile.rst: doc: fix missing ref
  link in or between man pages

2020-01-07  Colin Marquardt <cmarqu42@gmail.com>

  * doc/source/module.rst, doc/source/modulefile.rst: doc: markup modulefile
  cmd with :mfcmd: in man pages

  * doc/source/modulefile.rst: doc: markup modulefile cmd sections with ..
  mfcmd:: in man pages

  * doc/source/module.rst, doc/source/modulefile.rst: doc: markup subcmd with
  :subcmd: in man pages

  * doc/source/module.rst: doc: markup subcmd sections with .. subcmd:: in man
  pages

2020-01-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/conf.py: doc: add sphinx directives/roles for sub-cmd and
  modulefile cmd

2020-01-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/conf.py, doc/source/module.rst: doc: markup autogen files with
  :file: in man pages

2020-01-06  Colin Marquardt <cmarqu42@gmail.com>

  * doc/source/module.rst: doc: markup option sections with .. option:: in man
  pages

  * doc/source/module.rst, doc/source/modulefile.rst: doc: markup cmd opt with
  :option: in man pages

  * doc/source/module.rst, doc/source/modulefile.rst: doc: markup env var with
  :envvar: in man pages

  * doc/source/module.rst, doc/source/modulefile.rst: doc: markup env var
  sections with .. envar:: in man pages

  * doc/source/module.rst, doc/source/modulefile.rst: doc: markup cmds with
  :command: in man pages

2020-01-05  Colin Marquardt <cmarqu42@gmail.com>

  * doc/source/modulefile.rst: doc: markup man page ref with :manpage: in man
  pages

  * doc/source/module.rst, doc/source/modulefile.rst: doc: markup files with
  :file: in man pages

  * doc/source/module.rst, doc/source/modulefile.rst: doc: fix ref link to
  Locating Modulefiles section

  * doc/example/modulepaths-persist-over-sudo/rc,
  doc/example/test-modulefiles/modulefiles/test_dir_and_file,
  doc/source/cookbook/ensure-user-qualify-modules.rst,
  doc/source/cookbook/inhibit-report-info.rst,
  doc/source/cookbook/log-module-commands.rst,
  doc/source/cookbook/module-info-name-return-basename.rst,
  doc/source/cookbook/modulepaths-persist-over-sudo.rst,
  doc/source/cookbook/test-modulefiles.rst,
  doc/source/cookbook/unload-firstly-loaded.rst: doc: highlight code included
  in cookbook recipes  Specify language directive for included Tcl script
  files in cookbook recipes to get their code highlighted in resulting HTML
  documents. As Pygment Tcl lexer used by Sphinx does not support the whole
  Tcl syntax, scripts of modulepaths-persist-over-sudo and test-modulefiles
  recipes have been adapted to enable highlighting. Change has not been
  performed over the expose-procs-vars-to-modulefiles and top-priority-values
  recipes as their code cannot be adapted to match lexer needs.

  * doc/source/diff_v3_v4.rst, doc/source/module.rst,
  doc/source/modulefile.rst: doc: fix some typos and grammar across documents

2020-01-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .cirrus.yml: cirrus: update python requirement on FreeBSD test env

2020-01-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version
  4.4.1

  * doc/source/design/advanced-module-version-specifiers.rst: doc: clarify adv
  vers spec does not support identification context

  * testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/120-siteconfig.exp: ts: add tests to improve
  on-the-fly proc define coverage

  * testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/120-siteconfig.exp,
  .../modules.70-maint/260-extended_default.exp,
  .../272-adv_version_spec-range.exp,
  testsuite/modules.90-avail/080-noindepth.exp: ts: add tests to improve modEq
  procs coverage

  * modulecmd.tcl.in: Remove useless getModuleFromVersSpec proc

2020-01-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/mlprof.in, doc/source/conf.py, modulecmd.tcl.in: New year (2020)
  copyright mention update

  * contrib/mlprof.in: contrib/mlprof: keep proc stats even if redefined

2019-12-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modulefiles/loc_sym/exec2,
  testsuite/modulefiles/loc_sym/exec3,
  testsuite/modules.20-locate/048-symexec.exp,
  testsuite/modules.20-locate/090-memcache.exp: Cache getModules results
  Introduce a memory cache for the results build up by getModules procedure.
  Done in order to reuse these results if next searches are identical, which
  happens in whatis/search context.  As a side effect a module resolution
  cannot be changed by the evaluation of a modulefile sharing same root name,
  as the initial module resolution to find this modulefile to evaluation has
  cached resolution result.  This side effect should not however impact more
  than the project testsuite as module resolution should not be defined within
  a modulefile but within modulerc files.

2019-12-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Use modEqStatic proc in findModules

  * modulecmd.tcl.in: Introduce doesModMatchAtDepth procedure  When defining
  modMatchAtDepth procedure also define the doesModMatchAtDepth procedure,
  similar to modMatchAtDepth but only receiving one module name as argument
  and returning a boolean.

  * modulecmd.tcl.in: Hardwire modMatchAtDepth procedure  Redefine the
  modMatchAtDepth to hardwire indepth and test argument directly at procedure
  definition time to optimize performances.

  * modulecmd.tcl.in: Introduce modEqStatic procedure  Introduce the
  modEqStatic procedure, a more static version of the modEq procedure to use
  in repetitive comparison contexts like done in getModules and
  modMatchAtDepth. In modEqStatic, search query is hard wired which removes
  the need to call getModuleVersSpec each time the procedure is called.
  Instead getModuleVersSpec is called when the modEqStatic procedure is
  defined to get the hard wire elements. Doing so saves a lot of time in the
  getModules routine.

2019-12-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/mb.in: contrib: adapt 'mb' script to profile rather bench module
  Adapt `mb` script to profile modulecmd test runs rather bench them when
  `profile` argument is passed to the script.

  * .gitignore, Makefile, contrib/mlprof.in: contrib: add 'mlprof' script  Add
  the 'mlprof' script which wraps modulecmd.tcl to collect profiling
  information on its execution.

2019-12-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.00-init/140-color.exp: Highlight
  avail/whatis res matching adv vers spec query  Improve highlighting of
  module avail and whatis search result by coloring module names matching
  search query expressed with the advanced version specifiers. A name@1,3 or
  name@1:3 queries now highlight name/1 and name/3 strings found in search
  result.

2019-12-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.70-maint/260-extended_default.exp,
  testsuite/modules.70-maint/270-adv_version_spec.exp,
  .../modules.70-maint/272-adv_version_spec-range.exp: Fix avail search for
  default vers when not matching query  Fix module avail --default queries
  when modulefile default version does not match query: select latest version
  from modulefiles matching query unless implicit_default configuration is
  disabled in which case no default version is returned.

  * modulecmd.tcl.in, testsuite/modules.70-maint/270-adv_version_spec.exp,
  testsuite/modules.70-maint/271-adv_version_spec-in.exp: Fix avail queries in
  no-depth mode when res is a virtual mod  When a module avail query performed
  in no-indepth mode and targets a virtual module, fix result to filter-out
  the directory holding the virtual module from result.

  * testsuite/modulefiles.indepth/deepA/1/notamod,
  testsuite/modulefiles.indepth/deepA/2/1/notamod,
  testsuite/modulefiles.indepth/deepA/4/.modulerc,
  testsuite/modulefiles.indepth/deepA/4/1/1/notamod,
  testsuite/modulefiles.indepth/deepA/4/1/2/1,
  testsuite/modulefiles.indepth/deepA/4/1/2/3,
  testsuite/modulefiles.indepth/deepA/4/1/3/.modulerc,
  testsuite/modulefiles.indepth/deepA/4/1/3/1,
  testsuite/modulefiles.indepth/deepA/4/1/3/2,
  testsuite/modules.70-maint/260-extended_default.exp,
  testsuite/modules.70-maint/270-adv_version_spec.exp,
  testsuite/modules.70-maint/272-adv_version_spec-range.exp,
  testsuite/modules.90-avail/040-wild.exp,
  testsuite/modules.90-avail/080-noindepth.exp: ts: add tests for avail dir
  and filtering fixes

  * modulecmd.tcl.in: Fix avail queries when dirs in result in no-indepth mode
  In case a module avail query performed in a no-indepth mode with --latest/-L
  or --default/-d flags either enabled or disabled, fix query processing to
  return directory elements if they are part of result.

2019-12-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Fix -L/-d queries when upper dir not matching query  In
  case module avail query does not match a directory but only its contained
  elements (for instance `module av mod/7` matches mod/7.1 and mod/7.2 but not
  mod/), fix query processing to correctly return latest or default element in
  case --latest/-L or --default/-d flags are set.  Add an ext_filter argument
  to getModules procedure to indicate that directories of elements matching
  query should be part of the result list even if these directories does not
  match query. This ext_filter argument is enabled by listModules procedure
  when latest or default filters are enabled. These directories are used when
  filtering is enabled to determine what element should be displayed.

2019-12-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .travis.yml: travis: no more need for md5sha1sum pkg on OSX  md5sum is now
  provided by coreutils

2019-12-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .../design/advanced-module-version-specifiers.rst,
  doc/source/design/extended-default.rst,
  doc/source/design/insensitive-case.rst,
  doc/source/design/module-selection-contexts.rst: doc: fix rst bullet lists
  in design docs  Conform to RST docutils standard [1] that express bullet
  lists and nested bullet lists should be separated by a blank line before and
  after them.  Fixes #306.  [1] https://docutils.sourceforge.io/docs/ref/rst/r
  estructuredtext.html#bullet-lists

2019-12-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/rpm/environment-modules.spec.in: rpm: fix spec file for el8 build
  Remove Modules compat version build dependency on tclx-devel package as TclX
  is not provided anymore in el8.  Convert shebang of createmodule.py tool
  from python to python3.

2019-11-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .travis.yml: travis: explicitly install wget on osx to fix libssl dep
  issue

2019-11-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst: doc: add anchor for each module sub-cmd and env var

  * doc/source/modulefile.rst: doc: add anchor for each modulefile command

2019-11-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.2/advvers10/1, testsuite/modulefiles.2/advvers10/2,
  testsuite/modulefiles.2/advvers10/3, testsuite/modulefiles.2/advvers10/4,
  testsuite/modulefiles.2/advvers10/5, testsuite/modulefiles.2/advvers10/6,
  testsuite/modulefiles.2/advvers10/7, testsuite/modulefiles.2/advvers10/8,
  testsuite/modulefiles.2/advvers8/1, testsuite/modulefiles.2/advvers8/2,
  testsuite/modulefiles.2/advvers8/3,
  testsuite/modulefiles.2/advvers9/.modulerc,
  testsuite/modulefiles.2/advvers9/1, testsuite/modulefiles.2/advvers9/2,
  testsuite/modulefiles.2/advvers9/3, testsuite/modulefiles.deps/haa,
  testsuite/modulefiles.deps/hab, testsuite/modulefiles.deps/hac/.modulerc,
  testsuite/modulefiles.deps/hac/1, testsuite/modulefiles.deps/hac/2,
  testsuite/modulefiles.deps/had, testsuite/modulefiles.deps/hae,
  testsuite/modules.50-cmds/378-sametarget.exp,
  .../modules.70-maint/271-adv_version_spec-in.exp,
  .../272-adv_version_spec-range.exp: ts: check load/prereq handle loaded
  non-default the same  Add test to check dependency resolution applies the
  same against a non default version loaded whether module load/prereq is used
  to declared and whatever the auto_handling module enabled.  Handling was
  different between module load and prereq prior
  c50e2ba7d3a03ecd2baa933a5ce8991835f3feb1. Which fixes #228.  Added tests
  also check behavior against advanced module version specifier.

2019-11-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .gitignore, doc/demo/Makefile: doc/demo: add Makefile to build imgs from
  session cast

  * .gitignore, Makefile, contrib/playdemo.in: contrib: add 'playdemo' script

2019-11-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/demo/sc19/01welcome.cast, doc/demo/sc19/02config.cast,
  doc/demo/sc19/03auto_handling.cast, doc/demo/sc19/04icase.cast,
  doc/demo/sc19/05extended_default.cast,
  doc/demo/sc19/06advanced_version_spec.cast, doc/demo/sc19/07thanks.cast,
  doc/demo/sc19/script, doc/example/sc19/modulefiles/appA/1.0,
  doc/example/sc19/modulefiles/appA/2.0,
  doc/example/sc19/modulefiles/appB/1.0,
  doc/example/sc19/modulefiles/appC/.modulerc,
  doc/example/sc19/modulefiles/appC/1.0,
  doc/example/sc19/modulefiles/appC/2.0,
  doc/example/sc19/modulefiles/appC/2.2.10,
  doc/example/sc19/modulefiles/appC/2.2.2,
  doc/example/sc19/modulefiles/appC/2.4,
  doc/example/sc19/modulefiles/appC/3.6,
  doc/example/sc19/modulefiles/appD/1.2,
  doc/example/sc19/modulefiles/appD/2.1,
  doc/example/sc19/modulefiles/libX/1.0,
  doc/example/sc19/modulefiles/libX/2.0,
  doc/example/sc19/modulefiles/libY/.modulerc,
  doc/example/sc19/modulefiles/libY/1.0,
  doc/example/sc19/modulefiles/libY/2.0,
  doc/example/sc19/modulefiles/toolchain/a,
  doc/example/sc19/modulefiles/toolchain/b: doc: add sc19 demo

2019-11-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Skip mod loading msg if mod already loaded  Skip output
  of module loading message if module is already loaded.

  * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp: Enclose in
  quote dep spec in error/warning mesg  Fix error and warning messages
  relative to dependency management to enclose dependency specification in
  single quotes to clearly distinguish specification from each other.

2019-11-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version
  4.4.0

2019-11-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc. conflict fix/design notes/MODULESHOME in NEWS

  * doc/source/diff_v3_v4.rst, doc/source/module.rst,
  doc/source/modulefile.rst: doc: desc. advanced_version_spec in diff/man

  * INSTALL.rst, configure: doc: desc. advanced_version_spec in
  configure/INSTALL

  * MIGRATING.rst, NEWS.rst: doc: desc. advanced_version_spec in NEWS

2019-11-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst: doc: desc. advanced_version_spec in MIGRATING

2019-11-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in,
  init/zsh-functions/_module: init: fix missing -i/--icase in completion
  scripts

  * testsuite/example/modulerc-1.in,
  testsuite/modules.70-maint/120-autoinit.exp,
  testsuite/modules.70-maint/220-config.exp: ts: adapt tests to new config
  option home

  * INSTALL.rst, Makefile, Makefile.inc.in, configure, doc/source/module.rst,
  init/bash_completion.in, init/fish_completion, init/tcsh_completion.in,
  init/zsh-functions/_module, modulecmd.tcl.in, site.exp.in: Introduce home
  configuration option  Make MODULESHOME environment variable controllable
  through the `config` sub-command with `home` configuration option. A
  `--with-moduleshome` argument is also added to the ./configure script to set
  specific default value for this option at installation time.  Fixes #292

2019-11-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .../design/advanced-module-version-specifiers.rst: doc: refine again
  advanced_version_spec design

  * testsuite/install.00-init/005-init_ts.exp,
  testsuite/install.00-init/020-module.exp,
  testsuite/modulefiles.2/advvers6/3.0, testsuite/modulefiles.2/advvers6/3.1,
  testsuite/modulefiles.2/advvers6/3.2, .../272-adv_version_spec-range.exp:
  ts: additionnal adv_vers_spec in 70/272 and install ts

  * .cirrus.yml: cirrus: install openmp to satisfy R needs

2019-11-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.2/advvers6/1.2,
  testsuite/modulefiles.2/advvers6/1.3, testsuite/modulefiles.2/advvers6/1.4,
  testsuite/modulefiles.2/advvers6/1.5.1,
  testsuite/modulefiles.2/advvers6/1.5.2,
  testsuite/modulefiles.2/advvers6/1.6, testsuite/modulefiles.2/advvers6/1.7,
  testsuite/modulefiles.2/advvers6/1.8, testsuite/modulefiles.2/advvers6/2.0,
  testsuite/modulefiles.2/advvers6/2.1,
  testsuite/modulefiles.2/advvers7/.modulerc,
  testsuite/modulefiles.2/advvers7/0.9, testsuite/modulefiles.2/advvers7/1.0,
  testsuite/modulefiles.2/advvers7/1.1, testsuite/modulefiles.2/advvers7/1.2,
  testsuite/modulefiles.2/advvers7/1.3.1,
  testsuite/modulefiles.2/advvers7/1.3.2,
  testsuite/modulefiles.2/advvers7/2.0, testsuite/modulefiles.2/advvers7/2.1,
  testsuite/modulefiles.2/advvers7/2.2, testsuite/modulefiles.2/advvers7/3.0,
  testsuite/modulefiles.2/advvers7/3.1, testsuite/modulefiles.2/advvers7/3.2,
  testsuite/modulefiles.2/advvers7/3.3, testsuite/modulefiles.2/advvers7/4.0,
  testsuite/modulefiles.2/advvers7/4.1, testsuite/modulefiles.2/advvers7/4.2,
  testsuite/modulefiles.2/advvers7/5.0, testsuite/modulefiles.2/advvers7/5.1,
  testsuite/modulefiles.2/advvers7/5.2, testsuite/modulefiles.2/advvers7/5.3,
  testsuite/modulefiles.2/advvers7/6.0, testsuite/modulefiles.2/advvers7/6.1,
  testsuite/modulefiles.2/advvers7/6.2, testsuite/modulefiles.2/advvers7/6.3,
  testsuite/modulefiles.2/advvers7/6.4, testsuite/modulefiles.2/advvers7/6.5,
  testsuite/modulefiles.2/advvers7/6.6, testsuite/modulefiles.2/advvers7/6.7,
  testsuite/modulefiles.2/advvers7/7.0,
  testsuite/modulefiles.2/advvers7/8.1.1,
  testsuite/modulefiles.2/advvers7/8.1.2,
  testsuite/modulefiles.2/advvers7/8.2.1,
  testsuite/modulefiles.2/advvers7/8.2.2,
  testsuite/modulefiles.2/advvers7/8.3.1,
  testsuite/modulefiles.2/advvers7/8.3.2,
  testsuite/modulefiles.2/advvers7/8.4.1,
  testsuite/modulefiles.2/advvers7/8.4.2,
  testsuite/modulefiles.2/advvers7/8.5.1,
  testsuite/modulefiles.2/advvers7/8.5.2,
  testsuite/modulefiles.2/advvers7/9.0,
  testsuite/modules.00-init/006-procs.exp, .../272-adv_version_spec-range.exp:
  ts: vers range spec compat check mod ctx tests

2019-11-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .../272-adv_version_spec-range.exp: ts: vers range spec select one mod ctx
  tests

2019-11-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Serialize version range specifier in
  MODULES_{LMPREREQ,LMCONFLICT}  When saving current loaded prereq and
  conflict through MODULES_LMPREREQ and MODULES_LMCONFLICT environment
  variable, translate version range specifier `:` into `<` character to
  distinguish it from path separator character.

  * testsuite/modulefiles.2/extdfl7/.modulerc,
  testsuite/modulefiles.2/extdfl7/10a, testsuite/modulefiles.2/extdfl7/10foo,
  testsuite/modulefiles.2/extdfl7/10g, testsuite/modulefiles.2/extdfl8/1.3.1,
  testsuite/modulefiles.2/extdfl8/1.3.7, testsuite/modulefiles.2/extdfl8/1.33,
  testsuite/modulefiles.2/extdfl8/1.4.5,
  testsuite/modules.00-init/005-init_ts.exp,
  .../272-adv_version_spec-range.exp: ts: vers range spec basic and
  search-specific ctx tests

2019-11-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Introduce range of version in mod version spec  A range
  of version may be specified after '@' with the help of ':' character to
  express *greater or equal* (ex: `1.2:`), *lower or equal* (ex: `:1.2`) or
  *between or equal* (ex: `1.1:1.2`) conditions.  Adapt procedures that parse
  module version specifier or compare module version. Error is raised if
  version specified for range are not versions or higher version is lower than
  lower version.  Non 'xdigit' character in higher part of version number is
  considered as a non version number. It avoids symbols like `default`, `new`
  and so on to get in the version range way.

2019-11-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.70-maint/240-icase.exp,
  .../modules.70-maint/270-adv_version_spec.exp,
  .../modules.70-maint/271-adv_version_spec-in.exp: ts: skip icase tests if
  underlying fs is case-insensitive

2019-11-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.50-cmds/378-sametarget.exp: One
  conflict statement may match multiple loaded mod  Conflict defined with a
  generic module name or an advanced version specifier may match multiple
  loaded modules (generally in case multiple loaded modules share same root
  name). Loaded environment analysis has been fixed to bound conflict to all
  loaded modules matching it. As a result the dependent reload mechanism is
  not triggered when one loaded module matching conflict is removed if another
  loaded module still match the conflict.

  * testsuite/modulefiles.2/advvers4/1.1,
  testsuite/modulefiles.2/advvers4/1.2, testsuite/modulefiles.2/advvers4/1.3,
  testsuite/modulefiles.2/advvers4/1.4,
  testsuite/modulefiles.2/advvers4/1.5.1,
  testsuite/modulefiles.2/advvers4/1.5.2,
  testsuite/modulefiles.2/advvers4/1.6, testsuite/modulefiles.2/advvers4/1.7,
  testsuite/modulefiles.2/advvers4/1.8, testsuite/modulefiles.2/advvers4/2.0,
  testsuite/modulefiles.2/advvers4/2.1,
  testsuite/modulefiles.2/advvers5/.modulerc,
  testsuite/modulefiles.2/advvers5/0.9, testsuite/modulefiles.2/advvers5/1.0,
  testsuite/modulefiles.2/advvers5/1.1, testsuite/modulefiles.2/advvers5/1.2,
  testsuite/modulefiles.2/advvers5/1.3.1,
  testsuite/modulefiles.2/advvers5/1.3.2,
  testsuite/modulefiles.2/advvers5/2.0, testsuite/modulefiles.2/advvers5/2.1,
  testsuite/modulefiles.2/advvers5/2.2, testsuite/modulefiles.2/advvers5/3.0,
  testsuite/modulefiles.2/advvers5/3.1, testsuite/modulefiles.2/advvers5/3.2,
  testsuite/modulefiles.2/advvers5/3.3, testsuite/modulefiles.2/advvers5/4.0,
  testsuite/modulefiles.2/advvers5/4.1, testsuite/modulefiles.2/advvers5/4.2,
  testsuite/modulefiles.2/advvers5/5.0, testsuite/modulefiles.2/advvers5/5.1,
  testsuite/modulefiles.2/advvers5/5.2, testsuite/modulefiles.2/advvers5/5.3,
  testsuite/modulefiles.2/advvers5/6.0, testsuite/modulefiles.2/advvers5/6.1,
  testsuite/modulefiles.2/advvers5/6.2, testsuite/modulefiles.2/advvers5/6.3,
  testsuite/modulefiles.2/advvers5/6.4, testsuite/modulefiles.2/advvers5/6.5,
  testsuite/modulefiles.2/advvers5/6.6, testsuite/modulefiles.2/advvers5/6.7,
  testsuite/modulefiles.2/advvers5/7.0,
  testsuite/modulefiles.2/advvers5/8.1.1,
  testsuite/modulefiles.2/advvers5/8.1.2,
  testsuite/modulefiles.2/advvers5/8.2.1,
  testsuite/modulefiles.2/advvers5/8.2.2,
  testsuite/modulefiles.2/advvers5/8.3.1,
  testsuite/modulefiles.2/advvers5/8.3.2,
  testsuite/modulefiles.2/advvers5/8.4.1,
  testsuite/modulefiles.2/advvers5/8.4.2,
  testsuite/modulefiles.2/advvers5/8.5.1,
  testsuite/modulefiles.2/advvers5/8.5.2,
  testsuite/modulefiles.2/advvers5/9.0,
  .../modules.70-maint/271-adv_version_spec-in.exp: ts: vers list spec compat
  check mod ctx tests

2019-10-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Record mod vers spec with setModuleVersSpec proc

  * doc/source/design/insensitive-case.rst: doc: desc avail/load corner case
  for icase design

  * .../design/advanced-module-version-specifiers.rst: doc: refine
  advanced_version_spec design

  * testsuite/modulefiles.2/extdfl/.1.3.3,
  .../modules.70-maint/271-adv_version_spec-in.exp: ts: vers list spec select
  one mod ctx tests

2019-10-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.2/ICASE3/1.1, testsuite/modulefiles.2/ICASE3/VERS.1,
  testsuite/modulefiles.2/ICASE3/vers.1, testsuite/modulefiles.2/advvers@2.2,
  testsuite/modulefiles.2/iCaSe3/1.3, testsuite/modulefiles.2/iCaSe3/1.4,
  testsuite/modulefiles.2/icase3/1.2, testsuite/modulefiles.2/nocase/deep/2,
  testsuite/modules.70-maint/240-icase.exp,
  .../modules.70-maint/271-adv_version_spec-in.exp: ts: vers list spec basic
  and search-specific ctx tests

2019-10-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modulefiles.deps/con1/1.1,
  testsuite/modulefiles.deps/con1/1.2, testsuite/modulefiles.deps/con2/2.1,
  testsuite/modulefiles.deps/con2/2.2, testsuite/modulefiles.deps/con2/2.3,
  testsuite/modules.50-cmds/131-conflict-module.exp,
  testsuite/modules.50-cmds/373-deps4.exp,
  testsuite/modules.50-cmds/380-altname.exp,
  testsuite/modules.70-maint/240-icase.exp,
  .../modules.70-maint/260-extended_default.exp,
  .../modules.70-maint/270-adv_version_spec.exp: Handle complex mod vers spec
  in isModuleEvaluated  Rework whole isModuleEvaluated procedure to check all
  names of loaded or loadind module attempt against module version specifiers
  passed as argument.  Add the 'exclmod' argument to the procedure to exclude
  from tested list the currently evaluated module: avoid this way detecting
  self on reflexive conflict definition.  As a result just loaded or currently
  loading conflicting modules are better detected when conflict is expressed
  against an alias name or a module generic name.

  * modulecmd.tcl.in: Rename arrayKeyMatch into getEqArrayKey  As procedure
  returns key string, not a boolean value.

  * modulecmd.tcl.in: Rename arrayKeyEq into getArrayKey  And remove call to
  module version specifier translation: procedure only receive regular
  module/version specification.

  * modulecmd.tcl.in: Improve extdfl check in modVersCmp

2019-10-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, .../modules.70-maint/260-extended_default.exp: Adapt mod
  ext dfl check in modEq if contains *?  When query's module contains globbing
  wildcard characters (? or *) adapt extended default match test to use an
  escaped version of module designation when modEq is called for an equal
  test.

2019-10-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.20-locate/030-defvers.exp,
  .../modules.70-maint/270-adv_version_spec.exp: Makes arrayKeyMatch rely on
  modEq  Call modEq to check mod name passed matches array elements, so
  arrayKeyMatch procedure does not need to be specialized to match icase and
  extended_default setup, which is now deleguated to modEq.

  * modulecmd.tcl.in: Makes modMatchAtDepth rely on modEq  Call modEq to check
  mod name passed in modMatchAtDepth, so this procedure  does not need to
  handle the icase check which is deleguated to modEq.

  * modulecmd.tcl.in: Fix modEq for empty mod name  Test empty module name
  against simple module name/vers test branch.

2019-10-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Add support for contains test in modEq  By setting test
  argument of modEq procedure to 'matchin', perform contains-style match test.

2019-10-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Adapt modname check in modEq if contains *?  When
  query's module name contains globbing wildcard characters (? or *) adapt
  test to check module names match and then extract module version in modEq.

  * testsuite/modulefiles.2/e+t.fl/1.3.1,
  testsuite/modulefiles.2/e+t.fl/1.3.7, testsuite/modulefiles.2/e+t.fl/1.4.5,
  testsuite/modules.70-maint/260-extended_default.exp,
  testsuite/modules.70-maint/270-adv_version_spec.exp: ts: test wildcard chars
  in mod name on 70/{260,270}

2019-10-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Handle version list spec on modEq  Adapt modEq procedure
  to handle version list specifier (ex: @1,2). Introduce modVersCmp procedure
  to handle version comparison.

  * modulecmd.tcl.in: Introduce list of version in mod version spec  A list of
  version may be specified after '@' by joining the multiple versions to set
  with the ',' character (ex: @1.2,1.3).  Parse this syntax and store version
  specification information in parseModuleVersionSpecifier procedure and adapt
  procedures that handle the version specification information like
  getOneModuleFromVersSpec and getAllModuleFromVersSpec.

  * modulecmd.tcl.in: Rework storage of mod version specifier  Change internal
  storage structure to hold module version specifier with 4 fields: complete
  module name version, module name, version comparison set, and module
  version.

  * modulecmd.tcl.in: Rework getModuleVersSpec into getModuleFromVersSpec
  Change getModuleVersSpec procedure into getModuleFromVersSpec to extract
  just specified module (name and version) from module name and version
  specifier.

2019-10-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Get one mod name from spec with getOneModuleFromVersSpec
  Introduce getOneModuleFromVersSpec procedure to extract one module name from
  module name version specification.

  * modulecmd.tcl.in: Test all mod mentionned in spec on isModuleSpecHidden
  Add a getAllModulesFromVersSpec procedure that parses module name version
  specification to return a list of all the module mentionned in
  specification.  Use this new helper procedure in isModuleSpecHidden to check
  if one module from returned list is an hidden module.

  * modulecmd.tcl.in: Adapt modEq to include modMatch test  Refactor modEq
  procedure to include modMatch-kind test.

  * modulecmd.tcl.in: Define mod cmp procs in getModules instead findModules
  Define the module name and version comparison procedures at the beginning of
  the getModules procedure so it is not needed to define the modMatch
  procedure in findModules as findModules is only called by getModules.

2019-10-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Adapt modEq to include modStartEq test  Add a 'test'
  argument to modEq procedure to only check if passed module name matches
  pattern on pattern length when it equals to 'eqstart'. So modStartEq
  procedure is not needed anymore, calls are replaced with [modEq $pattern
  $mod eqstart].

  * modulecmd.tcl.in: Makes modStartNb rely on modStartEq  Call modStartEq to
  check full name passed in modStartNb, so modStartNb does not need to handle
  the extended_default check which is then deleguated to modStartEq.
  Introduce getModuleNameFromVersSpec to extract module name from module name
  version specification.

2019-10-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp,
  .../modules.70-maint/270-adv_version_spec.exp: Module version specifier
  cannot contain / char  No deep version specification to ease version
  comparison.

  * modulecmd.tcl.in: Translate vers spec directly in arrayKeyEq  Pass the
  module version specification toward arrayKeyEq to translate it there for
  module matching.

  * modulecmd.tcl.in: Translate vers spec directly in modStartNb  Pass the
  module version specification toward modStartNb to translate it there for
  module matching.

2019-10-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Translate vers spec directly in modStartEq  Pass the
  module version specification toward modStartEq to translate it there for
  module matching.

  * modulecmd.tcl.in: Translate vers spec directly in arrayKeyMatch  Pass the
  module version specification toward arrayKeyMatch to translate it there for
  module matching.

  * modulecmd.tcl.in: Get one module name from vers spec in getPathToModule
  Translate module name version specification in getPathToModule to extract
  one module version name from it. Use that to determine the module name root
  to find.

  * modulecmd.tcl.in: Get one module name from vers spec in listModules
  Translate module name version specification in listModules to extract one
  module version name from it. Use that to determine the no-indepth search
  properties.

  * modulecmd.tcl.in: Get one module name from vers spec in getModules
  Translate module name version specification in getModules to extract one
  module version name from it. Use that to determine the module name root to
  find and no-indepth search properties.

  * modulecmd.tcl.in: Translate vers spec directly in modMatch  Pass the
  module version specification toward modMatch procedure to translate it there
  for module matching. modMatch procedure is adapted to apply the translation
  only if a 'trspec' argument is set to 1.  A pattern suffix 'psuf' argument
  is also added to give the ability to append a suffix string to translated
  module name version.

  * modulecmd.tcl.in: Add isModuleSpecHidden to translate vers spec  Introduce
  the isModuleSpecHidden procedure to pass it the module version specification
  which is there translated to check if corresponding module names are hidden
  or not.

  * modulecmd.tcl.in: Translate vers spec directly in modMatchAtDepth  Pass
  the module version specification toward modMatchAtDepth to translate it
  there for module matching.  Also pass the 'contains' mode toward this
  procedure to adapt module name version once translated.

2019-10-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modulefiles.2/extdfl2/.modulerc,
  testsuite/modulefiles.2/extdfl7/.modulerc,
  testsuite/modules.70-maint/240-icase.exp,
  .../modules.70-maint/260-extended_default.exp,
  .../modules.70-maint/270-adv_version_spec.exp: Adapt modEq proc to icase and
  extended_default config

2019-10-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.70-maint/270-adv_version_spec.exp: No
  need to translate mod vers spec in conflict proc  Get error message
  reflecting way conflict is defined.

  * modulecmd.tcl.in, .../modules.70-maint/270-adv_version_spec.exp: Introduce
  a modEq proc for cmdModuleSearch/getModules  Check 2 module names are equal
  with a dedicated proc called 'modEq' that translates one name argument
  against recorded module version specifiers.  Use this procedure in
  cmdModuleSearch, thus this procedure does not need to translate module name
  it receives against recorded module version specifiers.  Also use modEq for
  a comparison in getModules procedure.

2019-10-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.2/.modulerc, testsuite/modulefiles.2/advvers/1.3,
  testsuite/modulefiles.2/advvers/1.4, testsuite/modulefiles.2/advvers/1.5,
  testsuite/modulefiles.2/advvers/1.6, testsuite/modulefiles.2/advvers/1.7,
  testsuite/modulefiles.2/advvers/1.8, testsuite/modulefiles.2/advvers2/1.0,
  testsuite/modulefiles.2/advvers2/1.1, testsuite/modulefiles.2/advvers2/1.2,
  testsuite/modulefiles.2/advvers2/1.3, testsuite/modulefiles.2/advvers2/2.0,
  testsuite/modulefiles.2/advvers2/2.1, testsuite/modulefiles.2/advvers2/2.2,
  testsuite/modulefiles.2/advvers2/3.0, testsuite/modulefiles.2/advvers2/3.1,
  testsuite/modulefiles.2/advvers2/3.2, testsuite/modulefiles.2/advvers2/3.3,
  testsuite/modulefiles.2/advvers2/4.0, testsuite/modulefiles.2/advvers2/4.1,
  testsuite/modulefiles.2/advvers2/4.2, testsuite/modulefiles.2/advvers2/5.0,
  testsuite/modulefiles.2/advvers2/5.1, testsuite/modulefiles.2/advvers2/5.2,
  testsuite/modulefiles.2/advvers2/5.3, testsuite/modulefiles.2/advvers2/6.0,
  testsuite/modulefiles.2/advvers2/6.1, testsuite/modulefiles.2/advvers2/6.2,
  testsuite/modulefiles.2/advvers2/6.3, testsuite/modulefiles.2/advvers2/6.4,
  testsuite/modulefiles.2/advvers2/6.5, testsuite/modulefiles.2/advvers2/6.6,
  testsuite/modulefiles.2/advvers2/6.7, testsuite/modulefiles.2/advvers2/7.0,
  testsuite/modulefiles.2/advvers2/8.1.1,
  testsuite/modulefiles.2/advvers2/8.1.2,
  testsuite/modulefiles.2/advvers2/8.2.1,
  testsuite/modulefiles.2/advvers2/8.2.2,
  testsuite/modulefiles.2/advvers2/8.3.1,
  testsuite/modulefiles.2/advvers2/8.3.2,
  testsuite/modulefiles.2/advvers2/8.4.1,
  testsuite/modulefiles.2/advvers2/8.4.2,
  testsuite/modulefiles.2/advvers2/8.5.1,
  testsuite/modulefiles.2/advvers2/8.5.2,
  testsuite/modules.50-cmds/152-module-emptyarg.exp,
  testsuite/modules.70-maint/240-icase.exp,
  .../modules.70-maint/270-adv_version_spec.exp: ts: add adv vers spec tests
  for check compat mod ctx

2019-10-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.2/advvers/1.2,
  .../modules.70-maint/270-adv_version_spec.exp: ts: add adv vers spec tests
  for select one mod ctx

2019-10-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.2/advvers/deep/1/1.2,
  testsuite/modulefiles.2/advvers@2.1, testsuite/modulefiles.2/extdfl/.1.3.4,
  testsuite/modules.00-init/005-init_ts.exp,
  .../modules.70-maint/270-adv_version_spec.exp: ts: add basic adv vers spec
  test + search-specific ctx

2019-10-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Fetch translated vers spec in 'check compat' contexts

  * modulecmd.tcl.in: Fetch translated vers spec in 'select one' contexts

  * modulecmd.tcl.in: Fetch translated vers spec in 'return all' contexts

2019-10-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Parse mod vers specifier where mod could be specified
  Introduce parseModuleVersionSpecifier procedure to parse module
  specification and extract from it module name and version specifier.  Call
  this new procedure in all procedures receiving module specification: module,
  conflict, prereq and is-loaded.

  * modulecmd.tcl.in: Rework error mngt in module proc  Do not catch error in
  procedure, let it flow upstream and catch it at top level.

2019-09-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .travis.yml, testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.70-maint/220-config.exp: ts/travis: adapt existing tests
  to advanced_version_spec cfg opt

  * Makefile, Makefile.inc.in, configure, init/bash_completion.in,
  init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module,
  modulecmd.tcl.in, site.exp.in: Introduce advanced_version_spec configuration
  option  Add the advanced_version_spec configuration option that will control
  the activation of advanced module version specifier syntax.

2019-08-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .../design/advanced-module-version-specifiers.rst: doc: add
  advanced-module-version-specifiers design spec

2019-11-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst, NEWS.rst: doc: desc extended_default in NEWS/MIGRATING

2019-11-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: mention module-info-name-return-basename recipe add in NEWS

2019-09-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.rst, doc/source/design/extended-default.rst,
  doc/source/module.rst, doc/source/modulefile.rst, modulecmd.tcl.in,
  .../modules.70-maint/260-extended_default.exp: Remove '-' from list of ext
  dfl separator char  Remove the '-' character from the list of extended
  default separator characters, as it is not feasible to determine in all
  cases the highest version specified after this character (to determine an
  implicit default). This removal means that only '.' is taken into account as
  extended default separator.

2019-09-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Apply extended_default to compatibility check context

2019-09-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Rework def of modStartNb alternatives  Expand procedure
  alternatives as individual procedures. The one to activate is renamed
  'modStartNb' by defineModStartNbProc.

  * modulecmd.tcl.in: Rework def of modStartEq alternatives  Expand procedure
  alternatives as individual procedures. The one to activate is renamed
  'modStartEq' by defineModStartEqProc.

2019-09-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.2/extdfl/.modulerc,
  testsuite/modulefiles.2/extdfl/1.0.0-alpha.1,
  testsuite/modulefiles.2/extdfl/1.0.0-alpha.beta,
  testsuite/modulefiles.2/extdfl/1.0.0-beta,
  testsuite/modulefiles.2/extdfl/1.0.2, testsuite/modulefiles.2/extdfl/1.1.0,
  testsuite/modulefiles.2/extdfl/1.1.0-beta,
  testsuite/modulefiles.2/extdfl/1.2.10, testsuite/modulefiles.2/extdfl/1.2.3,
  testsuite/modulefiles.2/extdfl/1.3.1, testsuite/modulefiles.2/extdfl/1.3.7,
  testsuite/modulefiles.2/extdfl/1.4.5, testsuite/modulefiles.2/extdfl/2.0,
  testsuite/modulefiles.2/extdfl/2.0.1,
  testsuite/modulefiles.2/extdfl2/2.rc.1,
  testsuite/modulefiles.2/extdfl2/2.rc.2,
  testsuite/modulefiles.2/extdfl2/3.0.0,
  testsuite/modulefiles.2/extdfl2/3.0.15,
  testsuite/modulefiles.2/extdfl2/3.0.2,
  testsuite/modulefiles.2/extdfl2/3.010.1,
  testsuite/modulefiles.2/extdfl2/3.09.3,
  testsuite/modulefiles.2/extdfl2/3.1.3,
  testsuite/modulefiles.2/extdfl2/3.1.7,
  testsuite/modulefiles.2/extdfl2/3.10.2,
  testsuite/modulefiles.2/extdfl2/3.9.2,
  testsuite/modulefiles.2/extdfl3/.modulerc,
  testsuite/modulefiles.2/extdfl3/1.0, testsuite/modulefiles.2/extdfl3/1.1/3,
  testsuite/modulefiles.2/extdfl3/1.3/4,
  testsuite/modulefiles.2/extdfl6/conflict,
  testsuite/modulefiles.2/extdfl6/conflict2,
  testsuite/modulefiles.2/extdfl6/conflicta,
  testsuite/modulefiles.2/extdfl6/conflicts,
  testsuite/modulefiles.2/extdfl6/info, testsuite/modulefiles.2/extdfl6/info2,
  testsuite/modulefiles.2/extdfl6/isloaded,
  testsuite/modulefiles.2/extdfl6/isloaded2,
  testsuite/modulefiles.2/extdfl6/load, testsuite/modulefiles.2/extdfl6/load2,
  testsuite/modulefiles.2/extdfl6/load3,
  testsuite/modulefiles.2/extdfl6/prereq,
  testsuite/modulefiles.2/extdfl6/prereq2,
  testsuite/modulefiles.2/extdfl6/prereqc,
  testsuite/modulefiles.2/extdfl6/prereqi,
  testsuite/modulefiles.2/extdfl6/prereqi2,
  testsuite/modulefiles.2/extdfl6/unload,
  testsuite/modulefiles.2/extdfl6/unload2,
  testsuite/modulefiles.2/extdfl7/.modulerc,
  testsuite/modulefiles.2/extdfl7/1.1, testsuite/modulefiles.2/extdfl7/2.1,
  testsuite/modulefiles.2/extdfl7/2.10, testsuite/modulefiles.2/extdfl7/3.1,
  testsuite/modulefiles.2/extdfl7/4.1, testsuite/modulefiles.2/extdfl7/5.1,
  testsuite/modulefiles.2/extdfl7/6.1, testsuite/modulefiles.2/extdfl7/7.0,
  testsuite/modulefiles.2/extdfl7/7.1, testsuite/modulefiles.2/extdflb.4.0,
  testsuite/modulefiles.2/extdflb.4.1/1, testsuite/modulefiles.2/extdflc-4/1,
  testsuite/modulefiles.2/extdflc-5/1,
  .../modules.70-maint/260-extended_default.exp: ts: cover extended_default
  with tests

2019-09-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Rework def of arrayKeyMatch alternatives  Expand
  procedure alternatives as individual procedures. The one to activate is
  renamed 'arrayKeyMatch' by defineArrayKeyMatchProc.

  * modulecmd.tcl.in: Rework def of modMatch alternatives  Expand procedure
  alternatives as individual procedures. The one to activate is renamed
  'modMatch' by defineModMatchProc.

  * modulecmd.tcl.in: Rework def of modMatchAtDepth alternatives  Expand
  procedure alternatives as individual procedures. The one to activate is
  renamed 'modMatchAtDepth' by defineModMatchAtDepthProc.

  * modulecmd.tcl.in: Apply extended_default to return all matching mod
  context  Only update modMatch. No need to update modMatchAtDepth procedure
  to take into account extended_default, as all match tests going through this
  procedures are already appended with a wildcard character (*).

2019-09-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/extended-default.rst: doc: refine extended_default
  design

2019-09-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Apply extended_default to single module selection
  context

2019-09-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst,
  doc/source/modulefile.rst: doc: desc extended_default in man/diff/INSTALL

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.70-maint/220-config.exp: ts: adapt existing tests to
  extended_default cfg opt

  * Makefile, Makefile.inc.in, configure, init/bash_completion.in,
  init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module,
  modulecmd.tcl.in, site.exp.in: Introduce extended_default configuration
  option  Add the ability to select a module when its version is partially
  specified. Enable this behavior through a new configuration option named
  `extended_default` (which defines `MODULES_EXTENDED_DEFAULT` environment
  variable when set).  When extended_default mechanism is enabled a module
  version may be specified by its starting portion, part separated from the
  rest of the version string by a `.` or `-` character.  When multiple
  versions match partial version specified and only one module should be
  returned, default version (implicit or explicit) among matches is returned.
  In case `implicit_default` is disabled and no explicit default is found
  among matches, an error is returned.  Mechanism may be enabled by default in
  `modulecmd.tcl` script with option `--enable-extended-default` passed to
  `./configure` script.

2019-11-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: add in NEWS issue ref and contrib. name for icase feature

2019-09-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/250-nan.exp: ts: ensure icase is disabled for
  70/250 tests

2019-09-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/insensitive-case.rst: doc: desc corner cases in icase
  design

2019-09-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/152-module-emptyarg.exp: ts: adapt 50/152 tests
  due to whatis changes in ts/modpath.2

  * modulecmd.tcl.in: Introduce arrayKeyEq help proc  Search array keys for an
  insensitive case match if icase mode is enabled and no sensitive case match
  is found.

2019-09-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Resolve vers or alias specified with different case
  When insensitive case match is enabled for module version specification to
  select one module context, if no case sensitive exact match is found when
  trying to resolve a symbolic version or a module alias, then select highest
  case insensitive matching version if any.  This change enables a case
  insensitive match only for direct alias or symbol resolution. In case an
  alias or symbolic version icase matches another alias or symbolic version
  which in turn also icase matches a modulefile, resolution will currently
  fail.

  * modulecmd.tcl.in: Define modStartNb proc on the fly  Make
  getLoadedWithClosestName procedure relies on a modStartNb procedure to
  compare how many starting parts between both names passed as argument are
  equivalent.  This modStartNb is defined on the fly by the
  defineModStartNbProc procedure to adapt its code to the current icase
  enabled mode.

2019-09-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Define modStartEq proc on the fly  Make
  doesModuleMatchesName, doesLoadingModuleMatchesName and
  getAllModuleResolvedName procedures rely on a modStartEq procedure to
  compare if both names passed as argument have the same starting parts.  This
  modStartEq is defined on the fly by the defineModStartEqProc procedure to
  adapt its code to the current icase enabled mode.

  * modulecmd.tcl.in: Get path to module specified with different case  When
  insensitive case match is enabled for module version specification to select
  one module context, if no case sensitive exact match is found then select
  highest case insensitive matching version.

2019-09-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Define modMatchAtDepth procedure on the fly  Add a
  defineModMatchAtDepthProc procedure that defines modMatchAtDepth procedure
  with code adapted to the current indepth and icase configuration. On the fly
  procedure definition helps to improve performance as defined procedure is
  finely tuned.

  * modulecmd.tcl.in: Define modMatch procedure on the fly  Add a
  defineModMatchProc procedure that defines modMatch procedure with code
  adapted to the current icase configuration. On the fly procedure definition
  helps to improve performance as defined procedure is finely tuned.

2019-09-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.2/.modulerc, testsuite/modulefiles.2/ICASE/1,
  testsuite/modulefiles.2/ICASE2/1, testsuite/modulefiles.2/IcAsE/1,
  testsuite/modulefiles.2/iCaSe/1, testsuite/modulefiles.2/iCaSe2/1,
  testsuite/modulefiles.2/icASE/1, testsuite/modulefiles.2/icase/1,
  testsuite/modulefiles.2/icase/conflict,
  testsuite/modulefiles.2/icase/conflicta,
  testsuite/modulefiles.2/icase/conflictp,
  testsuite/modulefiles.2/icase/conflicts, testsuite/modulefiles.2/icase/info,
  testsuite/modulefiles.2/icase/infoloaded,
  testsuite/modulefiles.2/icase/isloaded, testsuite/modulefiles.2/icase/load,
  testsuite/modulefiles.2/icase/loadi, testsuite/modulefiles.2/icase/prereq,
  testsuite/modulefiles.2/icase/prereqc, testsuite/modulefiles.2/icase/unload,
  testsuite/modulefiles.2/icase/z, testsuite/modulefiles.2/nocase/.hidden,
  testsuite/modulefiles.2/nocase/.modulerc, testsuite/modulefiles.2/nocase/1,
  testsuite/modulefiles.2/nocase/deep/3,
  testsuite/modulefiles.2/nocase/deep2/notamodule,
  testsuite/modulefiles.2/nocase/regular, testsuite/modulefiles.2/nocase2,
  testsuite/modulefiles.2/nocase7/conflictim1,
  testsuite/modulefiles.2/nocase7/conflictim2,
  testsuite/modulefiles.2/nocase7/prereqim1,
  testsuite/modulefiles.2/nocase7/prereqim2,
  testsuite/modules.70-maint/220-config.exp,
  testsuite/modules.70-maint/240-icase.exp: ts: add tests for icase config

  * doc/source/module.rst: doc: search sub-cmd is always performed icase
  Clarify on search sub-command that search query string is always matched in
  a case insensitive manner.

  * modulecmd.tcl.in: Mention -i/--icase in help message

2019-09-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in,
  init/zsh-functions/_module: init: add 'icase' option to completion scripts

2019-09-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile, Makefile.inc.in, configure, modulecmd.tcl.in, site.exp.in:
  Rework avail_icase into icase option  Rework avail_icase configuration
  option in a generic icase option which defines the contexts where to apply a
  case insensitive match for search query string and module specification:
  never, only on search-related sub-commands or always.

  * modulecmd.tcl.in: Migrate 'avail_icase' cfg option retrieval to getConf

  * INSTALL.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: desc
  icase in man/diff/INSTALL  Fixes #212

  * doc/source/module.rst: doc: fix typo in MODULES_SEARCH_MATCH section of
  module.1

2019-09-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst, NEWS.rst: doc: desc icase in NEWS/MIGRATING

2019-05-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Match module name in case or nocase mode with modMatch

  * testsuite/modules.00-init/090-switches.exp,
  testsuite/modules.70-maint/060-apropos.exp: ts: adapt existing tests to
  reintroduced icase mode

2019-04-15  Eric Deveaud <edeveaud@pasteur.fr>

  * modulecmd.tcl.in: icase search only when argument provided

  * Makefile, Makefile.inc.in, configure, modulecmd.tcl.in: control icase
  module av at configure time

  * modulecmd.tcl.in: poc for case insensitive search//avail

2019-08-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/design/extended-default.rst: doc: add extended-default design
  spec

  * doc/source/design/insensitive-case.rst: doc: add insensitive-case design
  spec

  * doc/source/design.rst, doc/source/design/module-selection-contexts.rst,
  doc/source/index.rst: doc: add module-selection-contexts design spec

2019-09-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/example/ensure-user-qualify-modules/siteconfig.tcl,
  .../ensure-user-qualify-modules/siteconfig.tcl-4.3,
  doc/source/cookbook/ensure-user-qualify-modules.rst: doc: adapt
  ensure-user-qualify-modules recipe to config rework

2019-09-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst, NEWS.rst: doc: desc. conf opt internal rework in
  NEWS/MIGRATING

2019-08-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * siteconfig.tcl, testsuite/example/siteconfig.tcl-1: Update siteconfig.tcl
  files with new int config setup ways  Use the lappendConf procedure to set
  the locked_configs option and the setConf procedure to set the
  avail_report_dir_sym and avail_report_mfile_sym options.

  * modulecmd.tcl.in: Introduce setConf/unsetConf/lappendConf  Add the
  setConf, unsetConf and lappendConf procedures to provide unified ways to set
  the value of configuration option.

2019-08-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/100-pager.exp,
  testsuite/modules.00-init/120-siteconfig.exp,
  testsuite/modules.00-init/140-color.exp,
  testsuite/modules.00-init/150-access-init.exp,
  testsuite/modules.70-maint/220-config.exp: ts: adapt tests to match new
  getConf debugging output

  * modulecmd.tcl.in: Rework config option val retrieval in cmdModuleConfig

2019-09-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Migrate 'wa_277' cfg option retrieval to getConf

2019-08-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile, modulecmd.tcl.in, site.exp.in: Migrate 'pager' cfg option
  retrieval to getConf  Introduce on the way the @pagercmd@ configuration
  pattern which is the concatenation of the @pager@ and @pageropts@ patterns
  with a whitespace joining the two when @pageropts@ is not empty.

  * modulecmd.tcl.in: Migrate 'colors' cfg option retrieval to getConf

  * Makefile, modulecmd.tcl.in: Migrate 'color' cfg option retrieval to
  getConf  Use an 'initConfColor' procedure to specifically initialize this
  'color' configuration option. Adapt value set for this option from the
  configure script or through the command-line switches to use the valid
  public names (never, auto and always) to ensure convertion to the internal
  value only occurs in the initConfColor procedure.

2019-08-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Migrate 'tcl_ext_lib' cfg option retrieval to getConf

  * modulecmd.tcl.in: Migrate 'siteconfig' cfg option retrieval to getConf

  * modulecmd.tcl.in: Migrate 'run_quarantine' cfg option retrieval to getConf

  * modulecmd.tcl.in: Migrate 'rcfile' cfg option retrieval to getConf

  * modulecmd.tcl.in: Migrate 'silent_shell_debug' cfg option retrieval to
  getConf

  * modulecmd.tcl.in: Migrate 'collection_target' cfg option retrieval to
  getConf

  * modulecmd.tcl.in: Migrate 'collection_pin_version' cfg option retrieval to
  getConf

  * modulecmd.tcl.in: Migrate 'avail_report_mfile_sym' cfg option retrieval to
  getConf

  * modulecmd.tcl.in: Migrate 'avail_report_dir_sym' cfg option retrieval to
  getConf

  * modulecmd.tcl.in: Migrate 'extra_siteconfig' cfg option retrieval to
  getConf

  * modulecmd.tcl.in: Migrate 'locked_configs' cfg option retrieval to getConf

2019-08-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Migrate 'verbosity' cfg option retrieval to getConf

  * modulecmd.tcl.in: Make isVerbosityLevel rely on g_config_defs  To get
  existing verbosity levels

  * modulecmd.tcl.in: Migrate 'set_shell_startup' cfg option retrieval to
  getConf

  * modulecmd.tcl.in: Migrate 'search_match' cfg option retrieval to getConf

  * modulecmd.tcl.in: Migrate 'implicit_default' cfg option retrieval to
  getConf

  * modulecmd.tcl.in: Migrate 'unload_match_order' cfg option retrieval to
  getConf

  * modulecmd.tcl.in: Migrate 'term_background' cfg option retrieval to
  getConf

  * modulecmd.tcl.in: Migrate 'avail_indepth' cfg option retrieval to getConf

  * modulecmd.tcl.in: Migrate 'auto_handling' cfg option retrieval to getConf

  * modulecmd.tcl.in: Migrate 'ignored_dirs' cfg option retrieval to getConf

  * modulecmd.tcl.in: Migrate 'contact' cfg option retrieval to getConf

2019-07-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Introduce 'getConf' proc  Add getConf procedure that
  retrieves any configuration option value and set the value of this option if
  not yet defined.

  * modulecmd.tcl.in: Store all configs in a g_configs array

  * modulecmd.tcl.in, testsuite/modules.00-init/100-pager.exp,
  testsuite/modules.00-init/120-siteconfig.exp,
  testsuite/modules.00-init/150-access-init.exp: Rework pager config internal
  variable  Use only one global variable to store pager command configuration
  and its associated command-line options rather using one variable for the
  command name and a second one for its options.

  * modulecmd.tcl.in: Rework colors initialization code  Use ::g_colors_list
  list variable as primary configuration variable rather ::g_colors array
  variable. Sync array value on list value.

  * modulecmd.tcl.in: Auto guess config option cmd-line overridde  Check if a
  '::asked_$option' exists, if true it means configuration option has been
  overridden from the command-line.

  * modulecmd.tcl.in: Store conf opt props in g_config_defs global array
  Define a global array named 'g_config_defs' to store the properties of all
  configuration options. For each option, a list is set to indicate associated
  superseding environment variable, default value if any, is configuration
  option lockable to default value, valid value list, internal value
  representation and procedure to call to initialize option value.

2019-10-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .../modulefiles/info/name, .../siteconfig.tcl,
  .../cookbook/module-info-name-return-basename.rst,
  doc/source/diff_v3_v4.rst: doc: add module-info-name-return-basename recipe
  Fixes #297.

2019-09-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst, NEWS.rst, contrib/rpm/environment-modules.spec.in: Release
  of version 4.3.1

  * modulecmd.tcl.in, testsuite/modulefiles.2/NaN,
  testsuite/modulefiles.2/nanbar/1, testsuite/modulefiles.2/nanbar/2,
  testsuite/modulefiles.2/nanbar/nan,
  testsuite/modulefiles.2/nanfoo/.modulerc, testsuite/modulefiles.2/nanfoo/1,
  testsuite/modules.70-maint/250-nan.exp: Rework ternary operator expr if res
  may equal 'nan'  Rework all the ternary operator expressions (eg. [expr
  {cond ? true : false}] if their true or false result may be equal to the nan
  string (whatever the case used to write it). When a 'nan' value is returned
  from such an expression an error is raised, which breaks Modules as soon as
  a modulefile, an alias or a symbolic version is named 'nan'.  These
  expressions are rewritten as bare if/then/else blocks.  Fixes #296.

2019-09-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.deep/modulerc/.modulerc,
  testsuite/modulefiles/loc_rc3/.modulerc,
  testsuite/modulefiles/loc_rc3/0.0/.notmodfile,
  testsuite/modules.20-locate/031-defvers2.exp,
  testsuite/modules.70-maint/130-aliases.exp,
  testsuite/modules.80-deep/010-init_ts.exp,
  testsuite/modules.80-deep/030-display.exp,
  testsuite/modules.80-deep/050-whatis.exp,
  testsuite/modules.80-deep/068-transitive-deep.exp,
  testsuite/modules.90-avail/040-wild.exp,
  testsuite/modules.90-avail/070-full.exp: ts: adapt tests for #294 and #295
  fixes

  * modulecmd.tcl.in: Fix alias over dir when implicit_default is disabled
  Fix the whatis and paths sub-command results for module aliases targeting a
  directory when implicit_default configuration option is disabled. No error
  is returned and same result is now obtained whether the alias name or its
  target is used as argument for those two sub-commands.  Fixes #295.

  * modulecmd.tcl.in: Fix sym over dir when implicit_default is disabled  Fix
  the whatis and paths sub-command results for module symbolic versions
  targeting a directory when implicit_default configuration option is
  disabled. No error is returned and same result is now obtained whether the
  symbolic name or its target is used as argument for those two sub-commands.
  Fixes #294.

2019-09-16  Tom Payerle <payerle@umd.edu>

  * doc/example/tips-for-code-reuse/bar/1.0/nothreads,
  doc/example/tips-for-code-reuse/bar/1.0/openmp,
  doc/example/tips-for-code-reuse/bar/1.0/pthreads,
  doc/example/tips-for-code-reuse/bar/2.0/nothreads,
  doc/example/tips-for-code-reuse/bar/2.0/openmp,
  doc/example/tips-for-code-reuse/bar/2.0/pthreads,
  doc/example/tips-for-code-reuse/bar/common,
  doc/example/tips-for-code-reuse/foo/1.0,
  doc/example/tips-for-code-reuse/foo/2.0,
  doc/example/tips-for-code-reuse/fooA/1.0,
  doc/example/tips-for-code-reuse/fooA/2.0,
  doc/example/tips-for-code-reuse/fooA/common,
  doc/example/tips-for-code-reuse/fooB/.generic,
  doc/example/tips-for-code-reuse/fooB/1.0,
  doc/example/tips-for-code-reuse/fooB/2.0,
  doc/example/tips-for-code-reuse/fooB/common,
  doc/source/cookbook/tips-for-code-reuse.rst: doc: Adding cookbook page
  "tips-for-code-reuse"

2019-09-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: desc
  wa_277 in man/diff/INSTALL

2019-09-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .travis.yml, testsuite/install.00-init/020-module.exp,
  testsuite/modules.70-maint/120-autoinit.exp,
  testsuite/modules.70-maint/220-config.exp: ts/travis: adapt tests to wa_277
  cfg

  * Makefile, Makefile.inc.in, configure, init/bash_completion.in,
  init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module,
  modulecmd.tcl.in, site.exp.in: Workaround for Tcsh history issue with wa_277
  conf opt  Introduce the wa_277 configuration option to workaround an issue
  with Tcsh history described on ticket #277.  When option is enabled (which
  sets the MODULES_WA_277 environment variable to 1), an alternative module
  alias is defined which fixes the history mechanism issue. However the
  alternative definition of the module alias weakens shell evaluation of the
  code produced by modulefiles. Characters with special meaning for Tcsh shell
  (like { and }) may not be used anymore in shell alias definition elsewhere
  the evaluation of the code produced by modulefiles will return a syntax
  error.  Fixes #277.

2019-09-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/example/ensure-user-qualify-modules/initrc, .../modulefiles/softa/1,
  .../modulefiles/softa/2, .../modulefiles/softb/.modulerc,
  .../modulefiles/softb/1, .../modulefiles/softb/2,
  .../ensure-user-qualify-modules/siteconfig.tcl,
  .../cookbook/ensure-user-qualify-modules.rst: doc: add
  ensure-user-qualify-modules recipe to cookbook

  * contrib/etc/rc-modulepath, doc/example/modulepaths-persist-over-sudo/rc,
  .../cookbook/modulepaths-persist-over-sudo.rst: doc: add
  modulepaths-persist-over-sudo recipe to cookbook  Rework global RC file
  proposed in contrib/etc/rc-modulepath, for use case described at [1], as a
  cookbook recipe.  [1] https://bugzilla.redhat.com/show_bug.cgi?id=1139165

2019-09-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .../modulefiles/bar/1, .../modulefiles/foo/1, .../siteconfig.tcl,
  .../cookbook/expose-procs-vars-to-modulefiles.rst: doc: add
  expose-procs-vars-to-modulefiles recipe to cookbook

2019-09-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/example/log-module-commands/siteconfig.tcl,
  doc/source/cookbook/log-module-commands.rst: doc: add log-module-commands
  recipe to cookbook  Fixes #283.

  * doc/source/cookbook/inhibit-report-info.rst,
  doc/source/cookbook/top-priority-values.rst,
  doc/source/cookbook/unload-firstly-loaded.rst: doc: desc way to find
  siteconfig script location in recipes  In cookbook recipes implying the
  installation of a site-specific configuration script, instructions are
  provided to help to find the expected location of this script on the current
  setup.  Fixes #266.

2019-09-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.80-deep/022-switch.exp: Load current env info prior match
  switch one-name-rule  When looking at the closest match among loaded modules
  when switching module with just a single module argument specified, load the
  informations on the currently set environment to get the alternative names
  of loaded modules prior to look at closest module match.  Fixes #290.

2019-09-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/modulefile.rst: doc: attempt to clarify eval mode in modulefile
  man  Fixes #289

2019-08-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/bin/install_test_csh, testsuite/home/.module/.target,
  testsuite/home/.module/coll1, testsuite/home/.module/coll2,
  testsuite/home/.module/coll3, testsuite/home/.module/coll4.target,
  testsuite/home/coll5, testsuite/install.00-init/060-quar.exp,
  testsuite/install.00-init/080-args.exp, testsuite/{modulefiles.other =>
  modulefiles.2}/1.1/version, testsuite/{modulefiles.other =>
  modulefiles.2}/1.2/version, testsuite/{modulefiles.other =>
  modulefiles.2}/1.3/version, .../{modulefiles.other2 =>
  modulefiles.2}/clear/.modulerc, testsuite/{modulefiles.other2 =>
  modulefiles.2}/clear/1, testsuite/{modulefiles.other2 =>
  modulefiles.2}/clear/2, testsuite/{modulefiles.other2 =>
  modulefiles.2}/clear/3, testsuite/{modulefiles.other =>
  modulefiles.2}/longerrword, .../{modulefiles.other =>
  modulefiles.2}/modemptyarg/aliases, .../{modulefiles.other =>
  modulefiles.2}/modemptyarg/apropos, .../{modulefiles.other =>
  modulefiles.2}/modemptyarg/avail, .../{modulefiles.other =>
  modulefiles.2}/modemptyarg/display, .../{modulefiles.other =>
  modulefiles.2}/modemptyarg/list, .../{modulefiles.other =>
  modulefiles.2}/modemptyarg/load, .../{modulefiles.other =>
  modulefiles.2}/modemptyarg/purge, .../{modulefiles.other =>
  modulefiles.2}/modemptyarg/reload, .../{modulefiles.other =>
  modulefiles.2}/modemptyarg/restore, .../{modulefiles.other =>
  modulefiles.2}/modemptyarg/save, .../modemptyarg/savelist,
  .../{modulefiles.other => modulefiles.2}/modemptyarg/saverm,
  .../modemptyarg/saveshow, .../{modulefiles.other =>
  modulefiles.2}/modemptyarg/source, .../{modulefiles.other =>
  modulefiles.2}/modemptyarg/swap, .../{modulefiles.other =>
  modulefiles.2}/modemptyarg/swap2, .../{modulefiles.other =>
  modulefiles.2}/modemptyarg/swap3, .../{modulefiles.other =>
  modulefiles.2}/modemptyarg/test, .../{modulefiles.other =>
  modulefiles.2}/modemptyarg/unload, .../{modulefiles.other =>
  modulefiles.2}/modemptyarg/unuse, .../{modulefiles.other =>
  modulefiles.2}/modemptyarg/use, .../{modulefiles.other =>
  modulefiles.2}/modemptyarg/whatis, testsuite/{modulefiles.other =>
  modulefiles.2}/putsvar, testsuite/{modulefiles.other => modulefiles.2}/quar,
  testsuite/{modulefiles.other => modulefiles.2}/restore,
  .../veryveryveryveryveryveryveryverylong/.modulerc,
  .../veryveryveryveryveryveryveryverylong/name,
  testsuite/modulefiles.other/README, testsuite/modulefiles/info/isused,
  testsuite/modulefiles/use/1.0, testsuite/modulefiles/use/2.0,
  testsuite/modulefiles/use/2.1, testsuite/modulefiles/use/2.2,
  testsuite/modulefiles/use/3.0, testsuite/modulefiles/use/3.1,
  testsuite/modulefiles/use/3.2, testsuite/modulefiles/use/4.1,
  testsuite/modules.00-init/110-quar.exp,
  testsuite/modules.10-use/030-use.exp,
  testsuite/modules.10-use/031-append.exp,
  testsuite/modules.10-use/032-prepend.exp,
  testsuite/modules.10-use/040-load-use.exp,
  testsuite/modules.10-use/070-unuse.exp,
  testsuite/modules.50-cmds/015-use.exp,
  testsuite/modules.50-cmds/017-use-undo.exp,
  testsuite/modules.50-cmds/152-module-emptyarg.exp,
  testsuite/modules.50-cmds/180-unload.exp,
  testsuite/modules.50-cmds/190-load.exp,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.70-maint/045-listlong.exp,
  testsuite/modules.70-maint/130-aliases.exp,
  testsuite/modules.70-maint/153-is-loaded.exp,
  testsuite/modules.70-maint/200-errdisp.exp,
  testsuite/modules.70-maint/210-clear.exp,
  testsuite/modules.90-avail/050-long.exp,
  testsuite/modules.95-version/010-init_ts.exp,
  testsuite/modules.95-version/050-fullpathentry.exp: ts: add modulefiles.2
  test modulepath repository  And make it a repository for additional test
  modulefiles that do not need to take part in the global avail tests made
  over the main repository (modulefiles) and who could mixed with others (like
  other and other2).

2019-08-27  Per Persson <md2perpe+github@gmail.com>

  * README.md: doc: use quote instead of code for links in README  Inside a
  code block URLs are not converted to links when the Markdown is rendered as
  HTML. In a quote they do. The other differences are minor both for the raw
  text and for the rendered text.

2019-08-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/120-autoinit.exp: ts: check precedence of
  etc/modulespath over init/.modulespath

  * testsuite/modules.70-maint/120-autoinit.exp: ts: check precedence of
  etc/initrc over init/modulerc

  * .gitignore, .travis.yml, Makefile, testsuite/example/initrc.in,
  testsuite/modules.70-maint/120-autoinit.exp: ts: test initrc eval output
  during autoinit

2019-08-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/home/coll14, testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/999-cleanup.exp: ts: check urequn mech when
  restoring collection

  * modulecmd.tcl.in: Remove useless dir content cleanup in getModules proc
  No need to remove purged entries from directory content list as elements are
  added to these list only if valid for the search performed (they are not
  removed later on, so no need to update directory content).

2019-08-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Remove useless var test in mod reload helper procs

  * testsuite/modules.70-maint/230-verbosity.exp: ts: add more verbosity tests
  in 70/230

2019-08-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * lib/configure.ac: lib: bump Envmodules lib version to 1.0.1  Bump version
  of Envmodules library after the small changes made: - directly return result
  of Envmodules_Init last operation - Tcl_GetBooleanFromObj already set error
  message, no need to rewrite an error message in case boolean argument is not
  boolean

  * lib/envmodules.c, lib/envmodules.h: lib: bump copyright year mention

  * Makefile, lib/.gitignore, lib/Makefile.in, lib/configure.ac,
  lib/testutil-closedir.c, testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/120-siteconfig.exp: ts/lib: test tcl ext lib
  against a failed closedir call  Add an utility library that supersedes the
  closedir function from libc. The closedir function from this added library
  always returns an error (-1). It is used for coverage test of the closedir
  call made withing the Envmodules_GetFilesInDirectoryObjCmd function of the
  Tcl extension library.

2019-08-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/120-siteconfig.exp: ts: test tcl ext lib
  procedures against erroneous calls

  * .travis.yml: travis: add a tcl8.4 build to the matrix to check
  testsiteconfig-1

  * lib/envmodules.c: lib: Tcl_GetBooleanFromObj already set err msg  No need
  to craft an error message when a non-boolean value is passed to procedures
  as the Tcl_GetBooleanFromObj function already set the accurate message when
  it returns non-OK.

2019-08-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/120-siteconfig.exp: ts: load tcl ext lib by
  tclsh83 in 00/120

  * .gitignore, .travis.yml, Makefile: install/ts: fetch & install old Tcl
  interp for coverage  Add directives into Makefile to install a Tcl8.3
  interpreter in order to unlock some additional non-regression tests to
  improve code coverage tests.

2019-08-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * lib/envmodules.c: lib: directly return res of Envmodules_Init last op

2019-08-05  Felix Neumärker <xdch47@posteo.de>

  * lib/Makefile.in: install: fix typo on CFLAGS definition in lib/Makefile
  Fixes #287.

2019-08-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .travis.yml: travis: increase testsuite run wait time  As 15 minutes has
  become not enough on OSX.

  * testsuite/install.00-init/050-crossshell.exp: ts: fix not found error msg
  for mksh  New version of mksh returns a 'inaccessible or not found' error
  message:  https://github.com/MirBSD/mksh/commit/64918da0043974fe07450e99427c
  5f276d1b6ea0

2019-07-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.00-init/150-access-init.exp: Fix error
  report when Tcl ext lib fails to load  Correct modulecmd.tcl script startup
  to correctly report error in case Tcl extension library fails to load.
  Fixes #284.

2019-07-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .gitignore, Makefile, contrib/mb.in: contrib: add 'mb' script to bench
  modules versions

2019-07-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst, NEWS.rst, contrib/rpm/environment-modules.spec.in: Release
  of version 4.3.0

  * MIGRATING.rst, NEWS.rst, doc/source/module.rst, modulecmd.tcl.in,
  testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.00-init/140-color.exp: Honor CLICOLOR/CLICOLOR_FORCE env
  var to set color mode  Add support for standard variables CLICOLOR and
  CLICOLOR_FORCE to define color mode. Implement specification for these
  variables described at https://bixense.com/clicolors/.  Fixes #279.

2019-07-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/230-verbosity.exp: ts: add tests for verbosity
  cfg

2019-07-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst, NEWS.rst: doc: desc verbosity in NEWS/MIGRATING

  * INSTALL.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: desc
  verbosity in man/diff/INSTALL

  * doc/source/cookbook/inhibit-report-info.rst: doc: update
  inhibit-report-info recipe with verbosity cfg

  * configure, modulecmd.tcl.in, testsuite/modules.70-maint/220-config.exp:
  Introduce 'concise' verbosity level  Introduce the ``concise`` verbosity
  level to get slightly less messages than under normal verbosity mode.
  Concise mode disables informational messages, like additional module
  evaluation triggered by a module load or unload, aborted evaluation issues
  or module evaluation report occurring on ``restore`` or ``source``
  sub-commands. The ``module`` command could be set concise at ``./configure``
  time with ``--with-verbosity`` option. ``MODULES_VERBOSITY`` environment
  variable supersedes this setting and it could be set with ``config`` module
  sub-command through the ``verbosity`` option.  Fixes #204.

  * modulecmd.tcl.in: Report every mod load/unload on source sub-cmd  When
  verbosity level is normal or at an higher level, reports every module loads
  or unloads performed to ``source`` a scriptfile, even if there is no
  specific message to output for these module evaluations. Clarifies what
  module evaluations have been triggered to source the scriptfile.

  * modulecmd.tcl.in, testsuite/modules.50-cmds/282-info-command.exp,
  testsuite/modules.50-cmds/283-info-command-exp.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/080-access-coll.exp: Report every mod load/unload
  on restore sub-cmd  When verbosity level is normal or at an higher level,
  reports every module loads or unloads performed to ``restore`` a collection,
  even if there is no specific message to output for these module evaluations.
  Clarifies what module evaluations have been triggered to restore the
  collection.

2019-07-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * configure, init/bash_completion.in, init/fish_completion,
  init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in,
  testsuite/modules.00-init/090-switches.exp,
  testsuite/modules.70-maint/220-config.exp: Reintroduce 'verbose' verbosity
  level  Reintroduce the ``verbose`` verbosity level and associated
  ``--verbose`` and ``-v`` command-line switches, which were available on
  Modules v3. Verbose mode adds additional informational messages, like a
  systematic report of the loading or unloading module evaluations. The
  ``module`` command could be set verbose by default at ``./configure`` time
  with ``--with-verbosity`` option. ``MODULES_VERBOSITY`` environment variable
  supersedes this setting and it could be set with ``config`` module
  sub-command through the ``verbosity`` option.

  * configure, init/bash_completion.in, init/fish_completion,
  init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in,
  testsuite/modules.00-init/090-switches.exp,
  testsuite/modules.70-maint/220-config.exp: Reintroduce 'silent' verbosity
  level  Reintroduce the ``silent`` verbosity level and associated
  ``--silent`` and ``-s`` command-line switches, which were available on
  Modules v3. Silent mode turns off error, warning and informational messages.
  The ``module`` command could be set silent by default at ``./configure``
  time with ``--with-verbosity`` option. ``MODULES_VERBOSITY`` environment
  variable supersedes this setting and it could be set with ``config`` module
  sub-command through the ``verbosity`` option.

2019-07-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile, Makefile.inc.in, configure, init/bash_completion.in,
  init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module,
  modulecmd.tcl.in, site.exp.in, testsuite/example/siteconfig.tcl-1,
  testsuite/example/siteconfig.tcl-2,
  testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.00-init/100-pager.exp,
  testsuite/modules.00-init/120-siteconfig.exp,
  testsuite/modules.00-init/150-access-init.exp,
  testsuite/modules.70-maint/220-config.exp: Add ability to control message
  verbosity  Add a ``verbosity`` configuration option to define the default
  message verbosity level (between a ``normal`` and a ``debug`` level). This
  option could be set at ``./configure`` time with ``--with-verbosity``
  option. It could be superseded with the ``MODULES_VERBOSITY`` environment
  variable, that could be set with ``config`` module sub-command through the
  ``verbosity`` option.  Defining a ``debug`` verbosity level at the
  command-line level is still achieved by using the ``-D`` or ``--debug``
  command-line switches.

2019-07-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.50-cmds/376-deps7.exp: Inhibit UreqUn
  when performing purge/reload/restore sub-cmd  When unloading a module that
  contains a ``module load`` or ``module switch`` modulefile command, inhibit
  the unload performed of the useless requirement when auto_handling mode is
  disabled if currently performing a purge, reload or restore sub-command. As
  the unload sequence is determined and managed from these top commands.

  * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/282-info-command.exp,
  testsuite/modules.50-cmds/283-info-command-exp.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/080-access-coll.exp: No message block for restore
  sub-cmd  Remove the message block display output for the ``restore``
  sub-command as this output style is reserved for modulefile evaluation mode
  (load, unload and switch) to clarify understanding.

  * modulecmd.tcl.in: Remove msg record set for purge sub-cmd  No the message
  block display output for the ``purge`` sub-command as this output style is
  reserved for modulefile evaluation mode (load, unload and switch) to clarify
  understanding.

  * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/130-conflict-full.exp,
  testsuite/modules.50-cmds/375-deps6.exp,
  testsuite/modules.50-cmds/377-cyclic.exp,
  testsuite/modules.50-cmds/377-error.exp: No message block for reload sub-cmd
  Remove the message block display output for the ``reload`` sub-command as
  this output style is reserved for modulefile evaluation mode (load, unload
  and switch) to clarify understanding.

2019-07-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Dissociate an eval id from a record msg id  Adapt the
  pushMsgRecordId and popMsgRecordId procedures to set and evaluation id in
  addition to a record message id. These evaluation ids will track successful
  and failed module evaluation to distinguish these evaluation results from
  output message recording.  A setmsgid argument is added to both procedures
  to optionally set this record message id, which is unwanted on global
  actions not outputing their results under some message block.

2019-07-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.50-cmds/360-restoreenv.exp,
  testsuite/modules.50-cmds/370-deps-bis.exp,
  testsuite/modules.50-cmds/370-deps.exp,
  testsuite/modules.50-cmds/373-deps4.exp,
  testsuite/modules.50-cmds/374-deps5.exp,
  testsuite/modules.50-cmds/376-switch.exp,
  testsuite/modules.50-cmds/377-error.exp: Report load/unload evaluation break
  Report an error when a module load or unload evaluation aborts due to the
  use of the ``break`` or ``exit`` modulefile commands. This error
  notification clarifies that module evaluation failed.  Fixes #267.

2019-07-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/050-crossshell.exp: ts: fix ksh err msg change
  in install/050 tests

  * .cirrus.yml: cirrus: install readline to satisfy R needs

2019-07-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst: doc: clarifies usage of config sub-cmd in init RC

  * MIGRATING.rst, NEWS.rst: doc: desc init conf alt naming in NEWS/MIGRATING

2019-07-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/rpm/environment-modules.spec.in: rpm: use /etc/environment-modules
  as etcdir  And store Modules initialization configurations in it.

  * contrib/rpm/environment-modules.spec.in: rpm: disable set_shell_startup

2019-07-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.rst, doc/source/diff_v3_v4.rst: doc: desc init conf alt naming in
  diff/INSTALL

  * .travis.yml, testsuite/install.00-init/005-init_ts.exp,
  testsuite/modules.70-maint/120-autoinit.exp: ts: adapt tests to
  --with-initconf-in=etcdir

  * configure: install: add --enable-modulespath configure opt  Add the
  ``--enable-modulespath`` configure option, which is an alias for the
  ``--enable-dotmodulespath`` option as ``.modulespath`` configuration file is
  named ``modulespath`` when installed in ``etcdic``.

  * testsuite/modules.70-maint/220-config.exp: ts: fix regexp char escaping in
  70/220

  * Makefile, Makefile.inc.in, configure, init/Makefile, site.exp.in: install:
  add --with-initconf-in configure opt  Introduce the ability to install the
  Modules initialization configuration files in the ``etcdir`` rather than in
  the ``initdir``. A new configure option is introduced for this task:
  ``--with-initconf-in``. Accepted values for this option are: ``etcdir`` or
  ``initdir`` (default).

2019-07-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/bash.in, init/cmake.in, init/csh.in, init/fish.in, init/ksh.in,
  init/python.py.in, init/r.R.in, init/ruby.rb.in, init/sh.in, init/tcl.in,
  init/zsh.in, modulecmd.tcl.in: Use initconf in etcdir rather initdir if it
  exists  Take into account Modules initialization configurations found in
  ``etc`` directory if they exist rather in ``init`` directory. If ``initrc``
  configuration file is found in ``etcdir`` then it is preferred over
  ``modulerc`` file in ``initdir``. Following the same trend, ``modulespath``
  configuration file is found in ``etcdir`` then it is preferred over
  ``.modulespath`` file in ``initdir``.

  * Makefile, doc/source/module.rst, modulecmd.tcl.in,
  testsuite/modules.20-locate/060-rc.exp,
  testsuite/modules.20-locate/081-access-rc.exp: Set global RC file in
  @etcdir@ instead @prefix@/etc  Fix location of ``etc/rc`` global RC file to
  ``@etcdir@/rc`` instead of ``@prefix@/etc/rc`` to cope with ``@etcdir@``
  specific setup (defaults to ``@prefix@/etc``).

2019-07-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, contrib/rpm/environment-modules.spec.in: doc/rpm: merge release
  of version 4.2.5

  * modulecmd.tcl.in, testsuite/modulefiles.deps/m10,
  testsuite/modulefiles.deps/m11, testsuite/modulefiles.deps/m12,
  testsuite/modules.50-cmds/376-deps7.exp: Fix 'module load a b' in modfiles
  when a or b is loaded  Fix automatic loading of modulefiles when multiple
  module names are set on a single ``module load`` modulefile command. When
  auto_handling mode was disabled, the load of not loaded modules was not
  achieved as soon as some modules on this list were already loaded.  Fixes
  #281.

2019-07-04  Colin Marquardt <cmarqu42@gmail.com>

  * NEWS.rst, .../test-modulefiles/modulefiles/test_dir_and_file,
  doc/source/cookbook/test-modulefiles.rst: doc: add cookbook recipe for
  ModulesTest  Fixes #182.

2019-07-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .travis.yml: travis: fix opensuse/leap docker container install

2019-07-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .gitignore, .travis.yml, Makefile, testsuite/example/modulerc-1.in,
  testsuite/install.00-init/005-init_ts.exp,
  testsuite/install.00-init/030-options.exp,
  testsuite/install.00-init/050-crossshell.exp,
  testsuite/modules.70-maint/120-autoinit.exp: ts: test init modulerc that
  disables set_shell_startup

  * modulecmd.tcl.in: Clear cached config value when setting config  During a
  ``config`` sub-command, config values are fetched which leads for some of
  the configuration options to the cache of their value. When ``config``
  sub-command is called to set a configuration option value, unsets any cached
  value for this option (as value has just been updated).

2019-07-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/modulerc.in, testsuite/example/modulerc.in: init: mention possible
  config set in modulerc

  * modulecmd.tcl.in: Enable 'config' sub-cmd from source/autoinit eval  Allow
  ``config`` sub-command to be called from a modulefile if this modulefile is
  evaluated by the ``autoinit`` or ``source`` sub-commands called at a
  top-level module context.

2019-07-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst, NEWS.rst: doc: desc search_match in NEWS/MIGRATING

  * .travis.yml, testsuite/install.00-init/010-environ.exp,
  testsuite/install.00-init/050-crossshell.exp,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.70-maint/120-autoinit.exp,
  testsuite/modules.70-maint/220-config.exp: ts/travis: adapt tests to
  set_shell_startup cfg

  * contrib/mt: contrib: fix array init issue on 'mt' script

  * INSTALL.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: desc
  set_shell_startup in man/diff/INSTALL

2019-07-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile, Makefile.inc.in, configure, init/bash.in,
  init/bash_completion.in, init/csh.in, init/fish.in, init/fish_completion,
  init/ksh.in, init/sh.in, init/tcsh_completion.in,
  init/zsh-functions/_module, init/zsh.in, modulecmd.tcl.in, site.exp.in: Add
  ability to disable shell startup file set  Introduce the ability not to set
  the shell startup file that ensure ``module`` command is defined once shell
  has been initialized. Setting shell startup file currently means defining
  ``ENV`` and ``BASH_ENV`` environment variable to the Modules bourne shell
  initialization script. ``./configure`` options
  ``--enable-set-shell-startup`` and ``--disable-set-shell-startup`` define if
  shell startup should be set or not by default. It could be superseded with
  the ``MODULES_SET_SHELL_STARTUP`` environment variable, that could be set
  with ``config`` module sub-command through the ``set_shell_startup`` option.

2019-07-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/140-color.exp,
  testsuite/modules.70-maint/220-config.exp: ts: correctly escape exp res in
  00/140 and 70/220

  * contrib/mt: contrib: fix var unbound issue on 'mt' with older bash

  * .travis.yml: travis: optionally change clone dir  To launch tests from
  path containing specific chars (with special meaning in regular expressions)
  to ensure expected results from test cases are correctly escaped.

2019-06-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .travis.yml, testsuite/modulefiles.indepth/modv/.common,
  testsuite/modulefiles.indepth/modv/.modulerc,
  testsuite/modules.00-init/140-color.exp,
  testsuite/modules.20-locate/068-transitive.exp,
  testsuite/modules.20-locate/090-memcache.exp,
  testsuite/modules.70-maint/220-config.exp,
  testsuite/modules.80-deep/068-transitive-deep.exp,
  testsuite/modules.90-avail/020-single.exp,
  testsuite/modules.90-avail/030-multiple.exp,
  testsuite/modules.90-avail/040-wild.exp,
  testsuite/modules.90-avail/050-long.exp,
  testsuite/modules.90-avail/080-noindepth.exp,
  testsuite/modules.91-sort/020-avail.exp: ts/travis: adapt tests to
  search_match cfg

2019-06-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst, NEWS.rst: doc: desc search_match in NEWS/MIGRATING

  * INSTALL.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: desc
  search_match in man/diff/INSTALL

  * Makefile, Makefile.inc.in, configure, init/bash_completion.in,
  init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module,
  modulecmd.tcl.in, site.exp.in: Add ability to control module search match
  Introduce the ability to control the module search match. Search query
  string should match module name start or any part of module fully qualified
  name. Default search match behavior is set at ``./configure`` time with the
  ``--with-search-match`` option. It could be superseded with the
  ``MODULES_SEARCH_MATCH`` environment variable, that could be set with
  ``config`` module sub-command through the ``search_match`` option.
  Command-line switches ``--starts-with`` (``-S``) and ``--contains`` (``-C``)
  for ``avail`` module sub-command enable to supersede defined search match
  configuration.

2019-07-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Rework no-indepth mod match in getModules  Match search
  query at corresponding search depth level when indepth mode is disabled
  without implying that search query matches beginning of module names. This
  is a preparatory work to a search match option where query could be
  contained in module name and not only be the start of module name.  As some
  results from findModules are removed through the process of getModules,
  update element list of directories to fit results.

2019-06-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, modulecmd.tcl.in, testsuite/modulefiles/append/1.8,
  testsuite/modulefiles/prepend/1.10, testsuite/modulefiles/remove/1.8,
  testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.50-cmds/045-append-undo.exp,
  testsuite/modules.50-cmds/050-prepend.exp,
  testsuite/modules.50-cmds/055-prepend-undo.exp,
  testsuite/modules.50-cmds/060-remove.exp,
  testsuite/modules.50-cmds/065-remove-undo.exp,
  testsuite/modules.90-avail/070-full.exp: Args after var name are values on
  {append,prepend,remove}-path  Fix argument parsing for the `append-path`,
  `prepend-path` and `remove-path` modulefile commands to consider every
  arguments found after the variable name as variable values and not command
  option even if argument starts with `-` character.  Fixes #278.

  * modulecmd.tcl.in, testsuite/modules.20-locate/057-mcookie.exp: Trim
  modfile magic cookie string from # chars  Right trim '#' characters from the
  fetched modulefile magic cookie string to ensure a correct compatibility
  version comparison. Useful when modulefile first line is equal to
  '#%Module4.3##############'.  Thanks to Eric Deveaud for the issue report.

2019-06-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst, modulecmd.tcl.in,
  testsuite/modules.70-maint/220-config.exp: Report locked config option value
  with a locked mention

  * doc/source/module.rst, modulecmd.tcl.in,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.70-maint/220-config.exp: Raise error when setting locked
  config option  Raise an error and exit if module 'config' sub-command
  attempts to modify a configuration option which is locked.

2019-06-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .travis.yml, INSTALL.rst, MIGRATING.rst, NEWS.rst, configure,
  doc/source/module.rst, modulecmd.tcl.in, siteconfig.tcl,
  testsuite/modules.00-init/140-color.exp,
  testsuite/modules.20-locate/050-locrc.exp,
  testsuite/modules.20-locate/090-memcache.exp,
  testsuite/modules.50-cmds/190-load.exp,
  testsuite/modules.50-cmds/376-switch.exp,
  testsuite/modules.50-cmds/378-sametarget.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/080-help.exp,
  testsuite/modules.70-maint/085-test.exp,
  testsuite/modules.70-maint/100-path.exp,
  testsuite/modules.70-maint/170-contact.exp,
  testsuite/modules.70-maint/220-config.exp,
  testsuite/modules.91-sort/040-load-sort.exp: install: enable
  implicit_default in locked_configs  Makes implicit_default configuration
  option lockable through locked_configs option.

  * .travis.yml, INSTALL.rst, MIGRATING.rst, Makefile, Makefile.inc.in,
  NEWS.rst, configure, doc/source/module.rst, init/bash_completion.in,
  init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module,
  modulecmd.tcl.in, site.exp.in, siteconfig.tcl,
  testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/100-pager.exp,
  testsuite/modules.00-init/120-siteconfig.exp,
  testsuite/modules.00-init/150-access-init.exp,
  testsuite/modules.70-maint/220-config.exp: install: replaces
  --enable-extra-siteconfig with --with-locked-configs  Add to the configure
  script the --with-locked-configs option to ignore environment variable
  superseding of Modules configurations defined in modulecmd.tcl script.
  Lockable configuration option are extra_siteconfig. Currently locked options
  are reported through the locked_configs option on the config sub-command.
  This new configure option replces --enable-extra-siteconfig which was
  dedicated to the control over the MODULES_SITECONFIG variable.

2019-06-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst: doc: clarify source sub-cmd in module.1 man  Talk
  about scriptfile on `source` sub-command rather modulefile to clarify a bit
  usage.

2019-06-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst, NEWS.rst: doc: desc implicit_default in NEWS/MIGRATING

2019-06-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .travis.yml, testsuite/home/coll13,
  testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.00-init/140-color.exp,
  testsuite/modules.20-locate/030-defvers.exp,
  testsuite/modules.20-locate/031-defvers2.exp,
  testsuite/modules.20-locate/035-defname.exp,
  testsuite/modules.20-locate/038-defcontext.exp,
  testsuite/modules.20-locate/043-virtual.exp,
  testsuite/modules.20-locate/050-locrc.exp,
  testsuite/modules.20-locate/055-locrcerrs.exp,
  testsuite/modules.20-locate/057-mcookie.exp,
  testsuite/modules.20-locate/067-hidden.exp,
  testsuite/modules.20-locate/069-cross.exp,
  testsuite/modules.20-locate/075-symlink.exp,
  testsuite/modules.20-locate/080-access.exp,
  testsuite/modules.20-locate/090-memcache.exp,
  testsuite/modules.50-cmds/121-prereq-module.exp,
  testsuite/modules.50-cmds/122-prereq-fullpath.exp,
  testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/190-load.exp,
  testsuite/modules.50-cmds/322-is-avail.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.50-cmds/376-switch.exp,
  testsuite/modules.50-cmds/378-sametarget.exp,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/060-saveshow.exp,
  testsuite/modules.61-coll/080-access-coll.exp,
  testsuite/modules.61-coll/999-cleanup.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/080-help.exp,
  testsuite/modules.70-maint/085-test.exp,
  testsuite/modules.70-maint/100-path.exp,
  testsuite/modules.70-maint/156-is-avail.exp,
  testsuite/modules.70-maint/170-contact.exp,
  testsuite/modules.70-maint/220-config.exp,
  testsuite/modules.80-deep/020-load-deep.exp,
  testsuite/modules.80-deep/022-switch.exp,
  testsuite/modules.80-deep/030-display.exp,
  testsuite/modules.80-deep/068-transitive-deep.exp,
  testsuite/modules.80-deep/080-access-deep.exp,
  testsuite/modules.90-avail/080-noindepth.exp,
  testsuite/modules.91-sort/020-avail.exp,
  testsuite/modules.91-sort/040-load-sort.exp: ts/travis: adapt tests to
  implicit_default cfg

2019-05-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Force implicit_default enablement during 'restore'  When
  performing a 'module restore', forcibly enable the implicit_default option
  to correctly match current state against the collection to restore, even if
  this collection was saved with implicit_default enabled and current setup at
  restore time has this option disabled.  implicit_default is then restored to
  its defined value once the match is over. So the load of a module to restore
  from the collection may fail when implicit_default is disabled if this
  module is an implicit default and collection was saved with implicit_default
  enabled.

2019-05-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst,
  doc/source/modulefile.rst: doc: desc implicit_default in man/diff/INSTALL

  * Makefile, Makefile.inc.in, configure, init/bash_completion.in,
  init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module,
  modulecmd.tcl.in, site.exp.in: Control whether an implicit default should be
  selected  Add the ability to configure whether an implicit default version
  should be defined for modules with no default version explicitly defined.
  When enabled, which stays the default behavior, a module version is
  automatically selected (latest one) when the generic name of the module is
  passed. When implicit default selection is disabled, the name of modules to
  evaluate should be fully qualified elsewhere an error is returned. This
  option is set at `./configure` time with the `--enable-implicit-default` and
  `--disable-implicit-default` options. It could be superseded with the
  `MODULES_IMPLICIT_DEFAULT` environment variable, that could be set with
  `config` module sub-command throught the `implicit_default` option.  When
  implicit_default is disabled: - module implicit default versions are
  excluded from 'module avail -d' results. - false is returned when argument
  passed to the 'is-avail' sub-command is a directory without an explicit
  default set in it. - and auto_handling is enabled, the requirement load
  mechanism will fail on requirement relying on module implicit default
  version  Fixes #179.

2019-05-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Add report_issue arg to getPathToModule proc  Add the
  report_issue argument to the getPathToModule procedure to inhibit the report
  of issue raised during the search and resolution of a passed module name.
  Issue report is unwanted when performing a reverse lookup of the module
  names resolving to a known modulefile (like done in procedures
  getSimplifiedLoadedModuleList and getAllModuleResolvedName).  Issue report
  is also disabled in cmdModuleSearch, as found issues are reported later on
  through the list returned by the getPathToModule call.

2019-05-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .travis.yml, testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.20-locate/043-virtual.exp,
  testsuite/modules.50-cmds/180-unload.exp,
  testsuite/modules.50-cmds/375-deps6.exp,
  testsuite/modules.50-cmds/375-order.exp,
  testsuite/modules.50-cmds/376-switch.exp,
  testsuite/modules.50-cmds/378-sametarget.exp,
  testsuite/modules.50-cmds/379-module-unload.exp,
  testsuite/modules.70-maint/220-config.exp,
  testsuite/modules.80-deep/021-unload.exp: ts/travis: adapt tests to
  unload_match_order cfg

2019-05-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst, NEWS.rst: doc: desc unload_match_order in NEWS/MIGRATING

  * doc/source/cookbook/unload-firstly-loaded.rst: doc: update
  unload-firstly-loaded recipe with unload_match_order cfg

2019-05-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: desc
  unload_match_order in man/diff/INSTALL

  * Makefile, Makefile.inc.in, configure, init/bash_completion.in,
  init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module,
  modulecmd.tcl.in, site.exp.in: Add the ability to configure of unload match
  order  Add the ability to configure when unloading a module and multiple
  loaded modules match request if firstly loaded module should be choosen or
  lastly loaded module. Default behavior is set at the `./configure` time with
  the `--with-unload-match-order` switch. This default could be superseded
  with the `MODULES_UNLOAD_MATCH_ORDER` environment variable, that could be
  set with `config` module sub-command throught the `unload_match_order`
  option.  This change allows to restore behavior of Modules compatibility
  version where first matching module in loaded module list were unloaded in
  such situation.  By default, lastly loaded module is set for unload (like it
  was before this change) to limit impact on the loaded module list when
  dependencies are woven between these loaded modules.  Even if this change
  enables to change the default behavior, it is highly recommanded to keep it
  as soon your modulefiles express dependencies between each other.  Fixes
  #198.

2019-05-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc fix for #270 in NEWS

2019-05-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp: ts: clean any automated handling
  mode configuration

2019-05-08  Jacques Raphanel <dvp@crabisoft.fr>

  * contrib/scripts/createmodule.py: contrib: add support for creating module
  file skeleton from MSDOS prompt  Update createmodule.py to provide support
  for cmd shell to use `set` instead of `env`.  Fixes #270.

2019-05-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst, NEWS.rst: doc: desc config cmd in NEWS/MIGRATING

2019-05-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * site.exp.in, testsuite/modulefiles/modbad/config,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.50-cmds/151-module-onlytop.exp,
  testsuite/modules.70-maint/220-config.exp,
  testsuite/modules.90-avail/070-full.exp: ts: test 'config' sub-command

  * contrib/mt, contrib/mtreview.in: ts: outputs full log in 'mt' if testsuite
  failed but no failure found

2019-01-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst: doc: desc config cmd in man module.1

2019-05-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Reword configuration 'key' into configuration 'option'

2019-05-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile, NEWS.rst, contrib/rpm/environment-modules.spec.in,
  siteconfig.tcl: install: provide a bare siteconfig.tcl  Provide a bare
  siteconfig.tcl in designated etcdir at installation time if no pre-existing
  site-specific configuration file is found at designated location.

2019-05-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .travis.yml, INSTALL.rst, MIGRATING.rst, Makefile, Makefile.inc.in,
  NEWS.rst, configure, doc/source/module.rst, init/bash_completion.in,
  init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module,
  modulecmd.tcl.in, site.exp.in, testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/120-siteconfig.exp,
  testsuite/modules.00-init/150-access-init.exp: Add ability to disallow
  MODULES_SITECONFIG  Add to the configure script the
  `--enable-extra-siteconfig` and `--disable-extra-siteconfig` options to
  allow or forbid the definition of a site-specific configuration script
  controlled with the `MODULES_SITECONFIG` environment variable.  These
  options control the default value of the `g_extrasiteconfig` variable in
  `modulecmd.tcl`. If this variable is true (by default), MODULES_SITECONFIG
  is looked at the siteconfig sourcing time. Thus the primary siteconfig.tcl
  can set the variable to false to ensure the extra siteconfig is disabled
  whatever the option passed at ./configure time.

2019-05-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/diff_v3_v4.rst: doc: desc config sub-cmd in diff_v3_v4

  * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in,
  init/zsh-functions/_module, modulecmd.tcl.in: Report and set
  'extra_siteconfig' on 'config' sub-command  Report and be able to set the
  'extra_siteconfig' configuration, linked to the MODULES_SITECONFIG
  environment variable, on the 'config' sub-command.

2019-01-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.00-init/140-color.exp: Fix block
  report line split when output color

2019-01-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst: doc: desc. MODULECONTACT/MODULERCFILE in module.1

  * CONTRIBUTING.rst: doc: provide 'config --dump-state' result when reporting
  issue

  * modulecmd.tcl.in: Dump machine/os/tcl_version state on 'config' sub-cmd

2019-01-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in,
  init/zsh-functions/_module, modulecmd.tcl.in: Report and set 'rcfile' on
  'config' sub-command  Report and be able to set the 'rcfile' configuration,
  linked to the MODULERCFILE environment variable, on the 'config'
  sub-command.

  * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in,
  init/zsh-functions/_module: init: add 'config' sub-cmd to shell comp scripts

  * modulecmd.tcl.in: Rework cmdModuleConfig argument parsing  To handle the
  definition of empty value.

  * modulecmd.tcl.in: Add the ability to report one config on 'config' sub-cmd
  When just a configuration key name is passed to the 'config' sub-command
  (and no value associated to it) just report this configuration key value
  rather reporting all configuration keys.

  * modulecmd.tcl.in: Add ability to unset conf from 'config' sub-cmd  When
  the '--reset' command-line switch and a configuration key name is passed to
  the 'config' sub-cmd, unset the relative environment variable. Ensure this
  configuration key could be altered.

  * modulecmd.tcl.in: Reword cmdModuleConfig data structure  Split details in
  multiple arrays for modularity.

  * modulecmd.tcl.in: Rework displayConfig procedure  Pass configuration value
  directly and re-order arguments.

  * modulecmd.tcl.in: Add ability to set conf from 'config' sub-cmd  When a
  configuration key name and value is passed to the 'config' sub-command, set
  the relative environment variable with passed value. Ensure on the way that
  configuration key name can be altered with an environment variable and that
  passed value is valid.

2019-01-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Report Modules env variable on config --dump-state
  Report the list of the environment variables related to Modules in an
  additionnal table displayed on the --dump-state action of the 'config'
  sub-command.

  * modulecmd.tcl.in: Report in state list global RC files loaded  Track the
  global RC files that are loaded and report this information on a 'config'
  sub-command among the current state information.

  * modulecmd.tcl.in: Report in state list if siteconfig/tcl_ext_lib have been
  loaded  Track if a site configuration has been sourced and if the Tcl
  extension library has been loaded. This information is reported on a
  'config' sub-command among the current state information.

  * modulecmd.tcl.in: Dump Modules state on 'config' sub-cmd with --dump-state
  Add the --dump-state command-line switch to the 'config' module sub-cmd. Add
  a second report table that displays each state value of the current
  modulecmd.tcl execution.  Take this opportunity to move 'path_separator',
  'term_columns', 'debug', 'force' and 'paginate' from the config table to the
  state table.

  * modulecmd.tcl.in: Report runenv configs set for modulecmd run-time
  execution  Report the environment variable set for modulecmd run-time
  execution configuration on 'module config' sub-command.

  * modulecmd.tcl.in: Report avail_report_{dir,mfile}_sym/ignored_dirs configs
  Report the avail_report_dir_sym, avail_report_mfile_sym and ignored_dirs
  configuration on 'module config' sub-command.

2019-01-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Define global 'ignored_dirs' at first use  Instead of
  initializing ignored dirs in modulecmd.tcl main script body, introduce a
  'getIgnoredDirs' procedure that will initialize this information at first
  call.

  * modulecmd.tcl.in: Define global 'contact' at first use  Instead of
  initializing 'contact' address in modulecmd.tcl main script body, introduce
  a 'getContact' procedure that will initialize this information at first
  call.

  * modulecmd.tcl.in: Report if config has been overridden on 'config' sub-cmd
  Introduce a displayConfig helper procedure that checks if a given
  configuration parameter has been overridden from its default value by
  command-line switch or environment variable. Report configuration value and
  from where it has eventually been overridden.

  * modulecmd.tcl.in: Register use_pager as a global variable  To get access
  to this value, on which the paginate option is based, when reporting
  configuration.

  * modulecmd.tcl.in: Also register colors as a global list  To get access to
  this value, on which the color table is based, when reporting configuration.

2019-01-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Introduce 'config' sub-command  Add the 'config'
  sub-command to report all the different parameter set for the tool.

2019-05-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc. fixes for #274 and #275 in NEWS

  * modulecmd.tcl.in, testsuite/modules.90-avail/090-dup-modpath.exp,
  .../modules.95-version/090-dup-modpath-version.exp: No duplicate entry in
  resolved modulepath list  When resolving the enabled list of modulepaths,
  ensure resolved path entries are unique.  Fixes #274.

  * testsuite/modules.10-use/999-cleanup.exp,
  testsuite/modules.61-coll/999-cleanup.exp,
  testsuite/modules.90-avail/999-cleanup.exp: ts: ensure a correct 999-cleanup
  exist for every ts parts

  * modulecmd.tcl.in, testsuite/install.00-init/020-module.exp,
  testsuite/modulefiles/alias/3.0, testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.50-cmds/076-alias-sub.exp: Fix escaping of '?' character
  in shell alias  Fixes #275.

2019-05-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/siteconfig.tcl-2,
  testsuite/modules.00-init/120-siteconfig.exp: ts: superseded defs between
  siteconfig files

  * testsuite/modules.00-init/150-access-init.exp: ts: test restricted access
  to siteconfig and MODULERCFILE

2019-05-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, doc/source/module.rst: doc: desc etcdir/siteconfig.tcl in FILES
  sect. of module.1

  * doc/source/module.rst: doc: desc. MODULERCFILE var in module.1 man page

2019-05-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst, NEWS.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst,
  testsuite/example/siteconfig.tcl-2,
  testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.00-init/100-pager.exp,
  testsuite/modules.00-init/120-siteconfig.exp,
  testsuite/modules.00-init/150-access-init.exp: adding documentation and
  tests for MODULES_SITECONFIG

2019-03-06  Ben Bowers <nanobowers@gmail.com>

  * modulecmd.tcl.in: adding MODULES_SITECONFIG env. variable support  Add the
  ability to define a site-specific configuration file with an environment
  variable: MODULES_SITECONFIG. When set, the script file pointed by the
  variable is sourced (if readable) after the site-specific configuration file
  initially defined in modulecmd.tcl.  Fixes #234.

2019-05-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst: doc: fix typo in migrating guide for v4.3

  * .travis.yml: travis: add CentOS 7 test case where extlib is disabled  Add
  a CentOS 7 test case with compat version disabled and Tcl extension library
  disabled. Helps to compare performances between 2 test cases where the only
  difference is the enablement of the Tcl extension library.

2019-05-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, init/bash.in, init/ksh.in, init/profile-compat.sh.in,
  init/sh.in, init/zsh.in: init: improve readability of var definition
  operations  Improve readability of variable definition operations by writing
  one definition operation per line rather having multiple commands on a
  single line like 'VAR=val; export VAR'.  Fixes #225.

2019-05-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst, NEWS.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst,
  init/bash_completion.in, init/fish_completion, init/tcsh_completion.in,
  init/zsh-functions/_module, modulecmd.tcl.in,
  testsuite/modules.70-maint/210-clear.exp: Leverage --force cmd-line switch
  on 'clear' sub-cmd  Leverage --force command-line switch on 'clear'
  sub-command to skip confirmation dialog.  Fixes #268.

2019-05-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/150-access-init.exp: ts: test tclextlib restricted
  read access

  * modulecmd.tcl.in: Remove useless var exist test in __getFilesInDirectory

  * testsuite/modules.10-use/{040-load.exp => 040-load-use.exp},
  testsuite/modules.10-use/{080-access.exp => 080-access-use.exp},
  testsuite/modules.20-locate/{095-cleanup.exp => 999-cleanup.exp},
  testsuite/modules.60-initx/{005-init.exp => 010-init_ts.exp},
  testsuite/modules.60-initx/{010-list.exp => 015-list.exp},
  testsuite/modules.60-initx/{080-access.exp => 080-access-initx.exp},
  testsuite/modules.60-initx/{095-cleanup.exp => 999-cleanup.exp},
  testsuite/modules.61-coll/{080-access.exp => 080-access-coll.exp},
  testsuite/modules.80-deep/{020-load.exp => 020-load-deep.exp},
  testsuite/modules.80-deep/{040-list.exp => 040-list-deep.exp},
  testsuite/modules.80-deep/{068-transitive.exp => 068-transitive-deep.exp},
  testsuite/modules.80-deep/{080-access.exp => 080-access-deep.exp},
  testsuite/modules.91-sort/{040-load.exp => 040-load-sort.exp},
  testsuite/modules.95-version/{020-load.exp => 020-load-version.exp}: ts:
  ensure test file name are unique  To ensure test file selection done in 'mt'
  script will not end up with test file collision.

  * Makefile, contrib/mt: ts: rework way 'mt' pass test list to runtest
  Instead of removing read access to test files that should not be run in 'mt'
  script, transmits to 'runtest' the list of test files to run via a
  RUNTESTFILES environment variable appended to 'runtest' command line in
  Makefile targets.

  * testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/120-siteconfig.exp: ts: check clear cmd
  confirmation msg

  * testsuite/config/unix.exp, testsuite/modules.00-init/006-procs.exp: ts:
  improve test launch procedures

2019-05-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/140-color.exp: ts: test calling color
  initialization procedures twice

  * .travis.yml: travis: set coverage on 2 cases where extlib is enabled
  Enable code coverage on 2 existing test cases where the Modules Tcl
  extension library is enabled.

2019-05-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .travis.yml, lib/.gitignore, lib/Makefile.in: install/ts: enable gcov on
  Modules Tcl ext lib  When coverage is asked (COVERAGE=y) also check
  lib/envmodules.c (Modules Tcl extension library) and report obtained
  coverage result (Codecov script automatically finds Gcov coverage results).

2019-05-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .travis.yml, CONTRIBUTING.rst, Makefile, contrib/mt: install/ts: trigger
  coverage with var instead of make target  Instead of running test coverage
  with 'make testcoverage', use COVERAGE variable to trigger this run ('make
  test COVERAGE=y').

  * CONTRIBUTING.rst: doc: adapt name of coverage annoted script in
  CONTRIBUTING  Annoted script generated by test coverage process has changed
  following to the introduction of the Modules Tcl extension library.

2019-01-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/config/unix.exp, testsuite/modulefiles.other2/clear/.modulerc,
  testsuite/modulefiles.other2/clear/1, testsuite/modulefiles.other2/clear/2,
  testsuite/modulefiles.other2/clear/3, testsuite/modulefiles/modbad/clear,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.50-cmds/151-module-onlytop.exp,
  testsuite/modules.70-maint/210-clear.exp,
  testsuite/modules.90-avail/070-full.exp: ts: test 'clear' sub-command

  * MIGRATING.rst, NEWS.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst,
  init/bash_completion.in, init/fish_completion, init/tcsh_completion.in,
  init/zsh-functions/_module, modulecmd.tcl.in,
  testsuite/modules.00-init/100-pager.exp: Re-introduce 'clear' sub-command
  With same behavior than on compatibility version. The list of the environmet
  variables that are cleared by this sub-command has been updated to match the
  recent development (MODULES_LMPREREQ, ...)  Fixes #203.

2019-05-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Fix colors init against badly formed MODULES_COLORS
  Seems that 'array set' could partially set values to an array in case the
  list passed to it is badly formed (odd number of element). This situation
  has been witnessed on FreeBSD. So unset the array variable to ensure it will
  not be found set at all by the remaining code of the initColors procedure.

2019-01-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/diff_v3_v4.rst: doc: desc color mode in diff_v3_v4

2019-01-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/140-color.exp: ts: test colored output

  * modulecmd.tcl.in: Buffer reportError calls before initErrorReport  To
  produce first warning and error messages (triggered during argument parse)
  with expected pager and color mode.

2019-01-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.rst, MIGRATING.rst, NEWS.rst, configure, doc/source/module.rst:
  doc: desc color mode in man/NEWS/INSTALL/MIGRATING

2019-01-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, .../veryveryveryveryveryveryveryverylong/.modulerc,
  .../veryveryveryveryveryveryveryverylong/name,
  testsuite/modules.20-locate/043-virtual.exp,
  testsuite/modules.70-maint/045-listlong.exp,
  testsuite/modules.90-avail/050-long.exp: Adapt padding for long modulename
  on long-mode reporting  Fix some tests that were assuming at least one
  whitespace between list long output fields.

2019-01-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Highlight table column title  When displaying a report
  table, list when doing a module list or module avail in --long mode,
  highlight each column title with the 'hi' SGR code.

2019-01-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Pass each col len as arg to displayTableHeader  Change
  displayTableHeader procedure to pass each column length after each column
  title.

2019-01-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/siteconfig.tcl-1,
  testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.00-init/100-pager.exp,
  testsuite/modules.00-init/120-siteconfig.exp: ts: adapt existing tests for
  color

2019-01-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Show caller name of bootstrap reportDebug  Like for the
  regular reportDebug procedure, report the name of the calling procedure of
  the bootstrap reportDebug (procedure set prior paging initialization). So
  both bootstrap and regular reportDebug behave and report the same way.

2019-01-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile, Makefile.inc.in, configure, modulecmd.tcl.in, site.exp.in:
  Define a light and dark background default color set  Define by default a
  color set for dark background and a color set for light background. These
  color sets can be define at configure time with the
  --with-dark-background-colors and --with-dark-background-colors options
  respectively.  Terminal background color kind can be defined to 'light' or
  'dark'. This value can be set at configure time with the
  --with-terminal-background option or with the environment variable
  MODULES_TERM_BACKGROUND.  If the default color set is not superseded by the
  MODULES_COLORS environment variable, the dark background colors will apply
  if terminal background is set to dark. If the terminal background is set to
  light, the light background colors will apply instead.

2018-12-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in,
  init/zsh-functions/_module: init: add --color opt to bash/fish/tcsh/zsh comp
  scripts  Add both the --color and --color= forms of the colorize output
  command-line switch to the shell completion scripts.

  * modulecmd.tcl.in: Color module cmd reported by 'saveshow' cmd  Graphically
  enhance the 'module' command reported on a 'module saveshow' command. As for
  modulefile commands use the 'cm' SGR key.

  * modulecmd.tcl.in: Color modfile cmd reported by 'display' cmd  Graphically
  enhance the modulefile commands reported on a 'module display' command.
  Introduce the 'cm' SGR key for these modulefile commands.

  * modulecmd.tcl.in: Highlight modfile/collfile name on
  display/help/test/saveshow  Hightlight the modulefile header name reported
  on the display, help and test commands. Following the same trend, highlight
  the collection file header name reported on the saveshow command.

  * modulecmd.tcl.in: Hightlight matched module whatis/search query string
  Hightlight in each module whatis module name result or in each module search
  whatis string result the substring matching the search query string
  following the same process than for module avail search query hightlight.

  * modulecmd.tcl.in: Hightlight matched module avail search query string
  Hightlight in each module avail result the substring matching the search
  query string in which the wildcard characters have been right trimmed off.
  No hightlight is performed if color mode is disabled or if some wildcard
  characters persist after the right trim.

2018-12-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Graphically represent 'default' symbol  Instead of
  outputing the 'default' symbol among the whole symbol list, represent it
  graphically with the 'de' SGR key applied to the module name.  If color mode
  is disabled or no specific 'de' SGR key is defined, output 'default' symbol
  like any other symbol.

  * modulecmd.tcl.in: Color sym and its separator differently  Use 'sy' sgr
  key to color symbols and 'se' sgr key to color the separator characters
  surrounding these symbols '(', ':' and ')'.

  * modulecmd.tcl.in: No '@' tag added to aliases when they are colored  Do
  not add a '@' tag, to indicate element reported is an alias, when alias are
  colored (which already indicates the entry is an alias)

  * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in,
  init/zsh-functions/_module: init: run module in --color=never mode in shell
  comp scripts  Ensure color mode is disabled when calling module command in
  the bash, fish, tcsh and zsh completion scripts.

  * modulecmd.tcl.in: Color sym reported by 'list' cmd  Graphically enhance
  symbols on 'module list' command like done for 'module avail'.  Make use of
  formatListEltToLongDisplay and formatListEltToDisplay procedure to format
  the elements to output in the same way than 'module avail'.

  * modulecmd.tcl.in: Color alias/sym reported by 'aliases' cmd  Graphically
  enhance aliases and symbols on 'module aliases' command like done for
  'module avail'.

  * modulecmd.tcl.in: Color dir/alias/syms reported by 'avail' cmd
  Graphically enhance directories, aliases and symbols on 'module avail'
  reports (regular, terse and long). Introduce the 'di', 'al' and 'sy' SGR
  keys respectively for directories, aliases and symbols).

2018-12-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Pass elts length to displayElementList proc  Externalize
  from the displayElementList procedure the computation of the length of each
  element to display. This is done to prepare the output of graphically
  enhanced elements from this procedure. Element lengths are computed in each
  procedure building the display list. This is where the graphical enhancement
  will take place so it is the right spot to learn the real length (without
  SGR code) of these elements to output.  Take this opportunity to also change
  displayElementList procedure to pass it the display list as a list argument
  rather as "args" which requires to 'eval' the procedure call.

  * modulecmd.tcl.in: Highlight displayed list header  When reporting list
  elements, hightlight passed header, mainly with the 'hi' sgr key except if
  header is a modulepath, in this case 'mp' sgr key is used.

  * modulecmd.tcl.in: Color modulepaths reported by module use  Graphically
  render modulepaths reported on 'module use' and 'module unuse' with 'mp' sgr
  key.

  * modulecmd.tcl.in: Highlight named element of msg record  Highlight named
  element passed as header to reportMsgRecord procedure (using 'hi' sgr key).

  * modulecmd.tcl.in: Color DEBUG/ERROR/Module ERROR/WARNING/INFO msgs  Make
  use of sgr procedure to graphically render header of ERROR, Module ERROR,
  WARNING and INFO messages (respectively with 'er', 'me', 'wa' and 'in' sgr
  keys).  Graphically render the whole DEBUG message (header + message text)
  with 'db' sgr key.

2018-12-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .travis.yml, Makefile, Makefile.inc.in, configure, modulecmd.tcl.in,
  site.exp.in: Introduce colored output  Add the ability to graphically
  enhance some part of the produced output to improve result readability.
  Colored output enablement could be controlled at configure time with the
  --enable-color option, or with the MODULES_COLOR environment variable or
  with the command-line switch --color. MODULES_COLOR variable and --color
  switch accepts the following values: never, auto and always. With the
  --enable-color configure option, the 'auto' color mode is applied. When
  color mode is set to 'auto', output is colored if a terminal is attached to
  stderr.  Colors to apply to each elements can be controlled at configure
  time with the --with-colors option or with the MODULES_COLORS environment
  variable. A color set consists of a list of key=value separated by colon
  where each key represents an output element that can be colored and each
  value represents a SGR code applied to this element to color it.  Thanks to
  [1] for the detailled description of the Select Graphic Rendition (SGR)
  codes.  [1] https://stackoverflow.com/questions/4842424/list-of-ansi-color-e
  scape-sequences

2019-01-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/diff_v3_v4.rst: doc: desc avail in depth mode in diff_v3_v4

2018-12-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst, NEWS.rst, doc/source/module.rst: doc: desc avail in depth
  mode in man/NEWS/MIGRATING

  * testsuite/modulefiles.indepth/mod30/.1,
  testsuite/modulefiles.indepth/mod30/2,
  testsuite/modulefiles.indepth/mod9/3/.version,
  testsuite/modulefiles.indepth/mod9/3/2,
  testsuite/modules.90-avail/040-wild.exp,
  testsuite/modules.90-avail/080-noindepth.exp: ts: more tests for avail
  --no-indepth mode  Add situations to check optimisations made to findModules
  procedure when no in depth mode is enabled.

  * modulecmd.tcl.in: Optimize findModules when no in depth search is asked
  Cut down some I/O operations in findModules procedure when a no in depth
  search is performed as it is not required to check in depth existing
  modulefiles, only those matching query depth level.  .modulerc files are
  still searched in depth, as they can produce virtual modules and in the
  future they may invalidate modulefiles. All files at the search query depth
  level are analyze. And for the directories below this depth level
  modulefiles are analyzed until one is found valid (other modulefiles are
  skipped as we only want to determine if directory holds at least one valid
  modulefile and should be reported).

2018-12-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/zsh-functions/_module: init: zsh completes avail mods in no in depth
  mode

  * init/fish_completion: init: fish completes avail mods in no in depth mode

2018-12-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/bash_completion.in: init: bash completes avail mods in no in depth
  mode  Take advantage of the no in depth mode of the module avail command to
  only get available choices for the current query file depth level.

  * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in,
  init/zsh-functions/_module: init: add support for --indepth/--no-indepth
  avail opts

2018-12-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.90-avail/040-wild.exp: ts: test avail in depth mode with
  wildcard chars

  * testsuite/modulefiles.indepth/mod0, testsuite/modulefiles.indepth/mod1/1,
  testsuite/modulefiles.indepth/mod1/2, testsuite/modulefiles.indepth/mod10,
  testsuite/modulefiles.indepth/mod11/.modulerc,
  testsuite/modulefiles.indepth/mod11/1,
  testsuite/modulefiles.indepth/mod11/2,
  testsuite/modulefiles.indepth/mod2/.modulerc,
  testsuite/modulefiles.indepth/mod2/1, testsuite/modulefiles.indepth/mod2/2,
  testsuite/modulefiles.indepth/mod3/.modulerc,
  testsuite/modulefiles.indepth/mod4/.1,
  testsuite/modulefiles.indepth/mod5/.common,
  testsuite/modulefiles.indepth/mod5/.modulerc,
  testsuite/modulefiles.indepth/mod6/1/notamod,
  testsuite/modulefiles.indepth/mod6/2/1/notamod,
  testsuite/modulefiles.indepth/mod6/3/1/1/notamod,
  testsuite/modulefiles.indepth/mod6/3/1/2/1,
  testsuite/modulefiles.indepth/mod7/1/notamod,
  testsuite/modulefiles.indepth/mod7/2/1/notamod,
  testsuite/modulefiles.indepth/mod7/3/1/1/notamod,
  testsuite/modulefiles.indepth/mod7/3/1/2/notamod,
  testsuite/modulefiles.indepth/mod7/4/1,
  testsuite/modulefiles.indepth/mod8/1/notamod,
  testsuite/modulefiles.indepth/mod8/2/1/notamod,
  testsuite/modulefiles.indepth/mod8/3/1/1/notamod,
  testsuite/modulefiles.indepth/mod8/3/1/2/notamod,
  testsuite/modulefiles.indepth/mod8/4/.modulerc,
  testsuite/modulefiles.indepth/mod9/1/notamod,
  testsuite/modulefiles.indepth/mod9/2/1/notamod,
  testsuite/modulefiles.indepth/mod9/3/1/1/notamod,
  testsuite/modulefiles.indepth/mod9/3/1/2/notamod,
  testsuite/modulefiles.indepth/mod9/4/.common,
  testsuite/modulefiles.indepth/mod9/4/.modulerc,
  testsuite/modulefiles.indepth/notmod1/notamod,
  testsuite/modulefiles.indepth/notmod2/1/notamod,
  testsuite/modulefiles.indepth/notmod3/1/1/.notamod,
  testsuite/modulefiles.indepth/notmod3/1/2,
  .../modulefiles.indepth/notmod4/1/1/1/notamod,
  testsuite/modulefiles.indepth/notmod4/2,
  testsuite/modules.90-avail/080-noindepth.exp: ts: test avail --no-indepth
  mode

2018-12-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.20-locate/031-defvers2.exp,
  testsuite/modules.20-locate/035-defname.exp,
  testsuite/modules.20-locate/038-defcontext.exp,
  testsuite/modules.20-locate/043-virtual.exp,
  testsuite/modules.20-locate/067-hidden.exp,
  testsuite/modules.20-locate/080-access.exp,
  testsuite/modules.20-locate/090-memcache.exp,
  testsuite/modules.50-cmds/281-info-modulerc.exp,
  testsuite/modules.50-cmds/300-interp.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.80-deep/080-access.exp,
  testsuite/modules.90-avail/020-single.exp,
  testsuite/modules.90-avail/030-multiple.exp,
  testsuite/modules.90-avail/040-wild.exp,
  testsuite/modules.90-avail/050-long.exp,
  testsuite/modules.90-avail/070-full.exp,
  testsuite/modules.91-sort/020-avail.exp: ts: ensure existing avail tests use
  'in depth' mode

  * modulecmd.tcl.in: Adapt getModules/listModules to --no-indepth mode
  Remove in getModules the result entries collected within the procedure where
  more filename path separator are found than in search query string. This way
  entries related to the content of directories matching query are removed.
  Only entries matching search query at its very same depth level are kept +
  the matching directories holding those entries.  This or these matching
  directories holding entries matching search query are kept to get access to
  the default or the latest entries in these directories if -d (default) or -L
  (latest) filters are enabled.  The directories holding entries are then
  excluded from display output in listModules procedure to keep this
  --no-indepth mode displaying only entries lying at the same directory depth
  level.  When the -d (default) or -L (latest) filters are enabled and the
  --no-indepth mode is enabled too, if search query targets the root content
  of the modulepath, do not apply the output filter. In this situation every
  elements at the root of a modulepath can be considered a default of a latest
  entry.

2018-12-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .travis.yml, INSTALL.rst, Makefile, Makefile.inc.in, configure,
  modulecmd.tcl.in, site.exp.in: Introduce --indepth/--no-indepth avail mode
  Add the ability to perform non-recursive avail search by limiting results to
  the elements matching search query and not including elements contained in
  the directories part of the result.  Default behavior is unchanged: in depth
  search is performed. --indepth and --no-indepth command-line switches are
  introduced to control behavior as well as an environment variable:
  MODULES_AVAIL_INDEPTH. Default behavior may also be controlled at
  ./configure time with the --enable-avail-indepth and --disable-avail-indepth
  switches.  The --no-indepth mode is pretty useful to provide an efficient
  glance at the available packages when a lot of different versions exist for
  each of them. Shell completion scripts also benefit from the non-recursive
  view to propose choices corresponding to the current depth level only.
  Moreover I/O operations are reduced on this --no-indepth mode as the full
  modulefile tree is not entirely walked through.  This commit introduces the
  new configure script and modulecmd options and it lays the ground for the
  changes on the module find and the result display that will be made in the
  next commits.  Fixes #150.

2018-12-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.20-locate/031-defvers2.exp,
  testsuite/modules.80-deep/068-transitive.exp,
  testsuite/modules.90-avail/070-full.exp,
  testsuite/modules.91-sort/020-avail.exp: Append / char to dir results of
  avail command  Append a forward slash character to any directory result of
  an avail command to better distinguish these directories from regular files.
  Will also help shell completion scripts to more efficienlty guide users to
  the directory entries (no need to type this forward slash character to look
  deeper in directory).

2018-12-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.91-sort/020-avail.exp: Fix -d/-L avail
  search when arg ends with trailing slash  Correctly get available default
  (-d) and latest (-L) version whether search pattern is passed with an ending
  forward slash character or not or if it contains '*' wildcard character.

  * modulecmd.tcl.in: Fix listModules to display dir tags if any only

2018-12-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Make all findModules proc args mandatory

  * modulecmd.tcl.in: Make all listModules proc args mandatory

2018-12-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst, NEWS.rst, doc/source/modulefile.rst: doc: desc Modulepath
  rc file in man/NEWS/MIGRATING

2018-12-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.rc/.modulerc, testsuite/modulefiles.rc/.version,
  testsuite/modulefiles.rc/bar/.modulerc, testsuite/modulefiles.rc/bar/1,
  testsuite/modulefiles.rc/bar/2, testsuite/modulefiles.rc/foo/.common,
  testsuite/modulefiles.rc/foo/.modulerc, testsuite/modulefiles.rc/plain,
  testsuite/modules.20-locate/066-modulepath-rc.exp,
  testsuite/modules.20-locate/081-access-rc.exp: ts: test usage of modulepath
  rc file

  * lib/envmodules.c, modulecmd.tcl.in, .../.modulerc =>
  etc/modulerc.depsaltname}, testsuite/modules.50-cmds/377-deps8.exp,
  testsuite/modules.50-cmds/377-opposite.exp: Take .modulerc at modulepath
  root into account  When looking for modulefiles in enabled modulepaths, take
  .modulerc file found at the root of a modulepath directory into account.
  Which means these RC files are now evaluated like global rc files and can be
  used to define module aliases targeting modulefiles stored in the underlying
  file tree.  findModules procedure has been adapted to return any .modulerc
  file found at the root of the directory. Code that look at modulepath root
  has been adapted to use the getFilesInDirectory procedure or command.  A
  fetch_dotversion argument is added to the getFilesInDirectory Tcl procedure
  and its libtclenvmodules counterpart. This argument is disabled when looking
  at modulepath root content to avoid returning eventual .version file stored
  there.  Shorthand version notation (ex: /1.0) cannot be used in a modulepath
  rc file as a module name cannot be determined from this location.

  * MIGRATING.rst, NEWS.rst: doc: desc. I/O optim work in NEWS and MIGRATING

2018-12-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.rst: doc: refer to Modules Tcl extension lib in INSTALL

2018-12-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * lib/configure.ac, lib/envmodules.c, lib/envmodules.h, modulecmd.tcl.in:
  Implement getFilesInDirectory in Tcl extension library  Add function in
  libtclenvmodules to implement getFilesInDirectory as a command, which
  provides a more IO-optimized way than native Tcl commands perform by
  avoiding specific additional queries to get hidden files like .modulerc and
  .version. As a result 1 stat and 2 access syscalls are saved per directory
  read.

2018-12-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Introduce getFilesInDirectory proc to get dir elt list
  Extract code from findModules procedure that analyzes and returns the
  content of a given directory to define a dedicate procedure for that job:
  getFilesInDirectory.  This getFilesInDirectory procedure will also be made
  available as a command defined in the Tcl extension library to reduce the IO
  calls made to achieve the task.

2018-12-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * lib/Makefile.in: install: fix lib/Makefile to ensure CFLAGS is applied
  Which is required on FreeBSD to pass include location directives.

  * testsuite/modules.00-init/100-pager.exp,
  testsuite/modules.00-init/120-siteconfig.exp: ts: fix tests confused by ext
  lib load debug msg

  * lib/envmodules.c: lib: adapt error report to support Tcl8.4  Add code to
  Tcl extension library to report error specifically when built against
  Tcl8.4. This version of Tcl does not propose a Tcl_ObjPrintf function, so
  the Tcl_AppendResult function is used instead when the library is built
  against this version.

  * .gitignore, .travis.yml, Makefile, contrib/nglfar2ccov,
  testsuite/config/unix.exp: install/ts: run ts against currently built ext
  lib  Adapt Makefile and testsuite initialization to set then use a specific
  modulecmd.tcl script tuned to load the libtclenvmodules.so currently built
  in 'lib' directory.

2018-12-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Init error report when rendering top main error  When an
  error is caught during modulecmd.tcl first initialization steps, ensure the
  error report facility is initialized to render error message.  On main
  procedure when an error raised, attempt to initialize error report before
  rendering catched error message, as error may have occurred prior regular
  error report init.  Adapt initErrorReport procedure to ensure its content is
  run only once even if called multiple times.

  * lib/Makefile.in, lib/configure.ac: install: adapt lib makefile to build
  with Tcl8.5  Add @TCL_SHLIB_CFLAGS@ flag to the CFLAGS_DEFAULT to ensure to
  obtain the '-fPIC' directive on the resulting compiling command.

2018-12-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .appveyor.yml, .travis.yml, INSTALL.rst, Makefile, Makefile.inc.in,
  configure, contrib/rpm/environment-modules.spec.in, modulecmd.tcl.in,
  site.exp.in: install: configure/build/install lib from main scripts  Call
  configure script and Makefile of 'lib' directory from main configure and
  Makefile to configure/build/install/clean libtclenvmodules from top-level
  scripts.  Add '--libdir', '--enable-libtclenvmodules', '--with-tcl' and
  '--with-tclinclude' options to main configure script to control
  libtclenvmodules build and installation. Documentation of these new options
  has been added to INSTALL guide.  When '--enable-libtclenvmodules' option is
  set (default) code in modulecmd.tcl is enabled to load compiled
  libtclenvmodules shared library.  Update RPM spec file to take into account
  libtclenvmodules.  Update Travis and AppVeyor configurations to check
  libtclenvmodules enablement and disablement over the various test cases.

2018-12-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile: install: improve Makefile install/test target prereqs spec

2018-11-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * lib/.gitignore, lib/Makefile.in, lib/aclocal.m4, lib/configure.ac,
  lib/tcl.m4: Add autotools configs to build libtclenvmodules  Build this
  extension library against Tcl stub library to be able to 'load' it in
  modulecmd.tcl script.

  * lib/envmodules.c, lib/envmodules.h: Introduce Modules Tcl extension
  library  Introduce Modules Tcl extension library (written in C) to extend
  Tcl language in order to provide more optimized I/O commands than native Tcl
  commands do.  This library first provides a 'readFile' command which
  performs an open, read, close of a given modulefile to fetch its content.
  Compared to the Tcl native open, read, close commands it saves 1 ioctl + 1
  fcntl + N lstat system calls per modulefile.

2018-11-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Introduce readFile proc to read a file  Adapt all
  procedures reading file (modulefile, shell init file, collection file) to
  use the readFile procedure for that reading job.  This readFile command is
  defined as a Tcl procedure if not found defined (by the load of the upcoming
  C extension).

  * modulecmd.tcl.in: Always read full modfile on most module cmds  Except for
  path, paths, list, avail and aliases module commands always fully read a
  modulefile whether its full content is needed or just its header to verify
  its validity. Proceed this way to only read file once on commands that first
  just check modulefile validity then read again valid files to get their full
  content.  The path, paths, list, avail and aliases module commands are
  excluded from this 'always read full modulefile' mechanism as they never
  need to get the full modulefile content.  Most files found within
  modulepaths are intended to be modulefiles so always reading full file
  content even for invalid modulefiles should not harm much performances
  compared to the gain of reading every valid modulefiles only once instead of
  two.

  * modulecmd.tcl.in: Cache modfile content read to minimize file ops  If
  modulefile is fully read, cache the content read and the file header
  computed to avoid another file read if the same modulefile need to be read
  multiple times.

2018-11-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Call readModuleContent in checkValidModule proc  To read
  a modulefile so the code to read file and analyze its header to check it is
  a valid modulefile is just written once.  readModuleContent procedure has
  been adapted to proceed like checkValidModule did when it is called in a
  only_check_validity mode. In this mode, only the first line of the file is
  read as we just want to parse the header of the file (as it was done
  previously in checkValidModule procedure).

2019-04-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.rst, NEWS.rst: doc: desc. Vim addons in NEWS and INSTALL

  * .appveyor.yml, .cirrus.yml: appveyor/cirrus: test 'make uninstall'

2019-04-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/rpm/environment-modules.spec.in: rpm: install modulefile vim
  syntax addons

2019-04-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile, Makefile.inc.in, configure: install: rename vim addons configure
  options  For disambiguation with Vim plugins and for letting room for
  further improvements in this area, rename '--enable-vimplugin' configure
  option into '--enable-vim-addons' and '--vimplugindir' into '--vimdatadir'.

2018-12-08  Felix Neumärker <xdch47@posteo.de>

  * Makefile, Makefile.inc.in, configure, contrib/vim/ftdetect/modulefile.vim,
  contrib/vim/ftplugin/modulefile.vim, contrib/vim/syntax/modulefile.vim: add
  vim syntax support

2019-04-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version
  4.2.4

  * testsuite/modules.50-cmds/042-append-delim.exp,
  testsuite/modules.50-cmds/047-app-del-undo.exp,
  testsuite/modules.50-cmds/052-prepend-delim.exp,
  testsuite/modules.50-cmds/057-pre-del-undo.exp,
  testsuite/modules.50-cmds/062-remove-delim.exp,
  testsuite/modules.50-cmds/065-remove-undo.exp: ts: correctly escape exp res
  in 50/{042,047,052,057,062,065}

2019-04-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * README.md: doc: provide short install guideline in README  Fixes #230.

  * init/zsh.in: init: init MANPATH on zsh if empty to preserve man sysconfig
  Zsh initializes by default the MANPATH environment variable to an empty
  value when it starts. To preserve manpath system configuration even after
  addition to this variable by modulefiles, set MANPATH variable to ':' if
  found empty.  Fixes #224.

  * testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/120-siteconfig.exp: ts: improve getDiffBetweenList
  proc test coverage

  * modulecmd.tcl.in, testsuite/modulefiles/append/8.0,
  testsuite/modulefiles/prepend/8.0, testsuite/modulefiles/remove/8.0,
  testsuite/modules.50-cmds/042-append-delim.exp,
  testsuite/modules.50-cmds/047-app-del-undo.exp,
  testsuite/modules.50-cmds/052-prepend-delim.exp,
  testsuite/modules.50-cmds/057-pre-del-undo.exp,
  testsuite/modules.50-cmds/062-remove-delim.exp,
  testsuite/modules.50-cmds/065-remove-undo.exp,
  testsuite/modules.90-avail/070-full.exp: Raise error when bad option passed
  to {append,prepend,remove}-path  Raise an error when an invalid option is
  set on append-path, prepend-path or remove-path modulefile command.  Fixes
  #249.

  * .appveyor.yml: Revert "appveyor: stop testing R in Cygwin platform"  This
  reverts commit 48624f9d11e3f118b7a6f7d31a16614597e179cf.  AppVeyor Cygwin
  environment has been updated, which fixed the R issue.  See
  appveyor/ci#2898.

  * modulecmd.tcl.in, testsuite/modules.50-cmds/377-error.exp: Inhibit 'module
  load' in DepRe context  When reloading modules through the *Dependent
  Reload* automated mechanism, disable the automated loading of modules by
  other modules with the 'module load' modulefile command as done for the
  'prereq' command.  It saves the mechanism from the reload of modules that
  have just been unloaded (and asked by the user to be unloaded from instance
  when performing a 'switch' command).  Fixes #265.

2019-04-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.50-cmds/374-deps5.exp: No req load
  suggestion msg as soon as one has been tried  Instead of requiring that all
  possibilities need be tried to consider the requirement load or the conflict
  unload has been tried, consider it tried as soon as one module choice has
  been evaluated.

  * modulecmd.tcl.in, testsuite/modules.50-cmds/372-deps3.exp,
  testsuite/modules.50-cmds/377-error.exp,
  testsuite/modules.61-coll/040-restore.exp: Do not re-evaluate a failing
  module  Skip load or unload evaluation of a module whose respectively load
  or unload was already attempted but failed. If this second evaluation
  attempt occurs within the same main evaluation frame.  Fixes #264.

  * modulecmd.tcl.in: Refactor eval context change for switch cmd in modfile

  * modulecmd.tcl.in, testsuite/modules.50-cmds/377-opposite.exp: No load
  attempt of already loaded mod in no-auto mode  When the automated module
  handling mode is disabled, do not attempt to load a requirement expressed in
  a modulefile with a 'module load' command, if this requirement is already
  loaded or loading.

2019-04-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/374-deps5.exp,
  testsuite/modules.50-cmds/376-switch.exp,
  testsuite/modules.50-cmds/377-cyclic.exp,
  testsuite/modules.50-cmds/377-error.exp: Distinguish DepRe load/unload
  phases in msgs  Adapt warning, error and info messages relative to the
  Dependent Reload mechanism to distinguish the unload phase from the load
  (reload) phase of this mechanism. In the automated module handling summary
  report, unloaded modules via this mechanism are reported in the *Unloading
  dependent* list and modules reloaded afterward are reported against the
  "Reloading dependent* list.  Fixes #263.

2019-04-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.50-cmds/370-deps-bis.exp,
  testsuite/modules.50-cmds/370-deps.exp,
  testsuite/modules.50-cmds/377-opposite.exp,
  testsuite/modules.50-cmds/380-altname.exp: Correctly report loading state of
  conflicting module  Fixes #262.

  * testsuite/modulefiles.deps/alt/.modulerc,
  testsuite/modulefiles.deps/alt/8, testsuite/modulefiles.deps/i3b,
  testsuite/modulefiles.deps/i4b, testsuite/modules.50-cmds/380-altname.exp:
  ts: test issue with prereq using alt name in 50/380

2019-04-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/380-altname.exp: Resolve mod name passed to
  isModuleEvaluated  To check if actual module has been evaluated based on its
  aliased or symbolic name.

2019-04-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Register modfile eval attempt in addition to modname
  Helps to find a given module has been evaluated when a conflict/prereq
  statement is sometimes done on the module name and other times on the
  modulefile.

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/130-conflict-full.exp,
  testsuite/modules.50-cmds/370-deps-bis.exp,
  testsuite/modules.50-cmds/370-deps.exp,
  testsuite/modules.50-cmds/372-deps3.exp,
  testsuite/modules.50-cmds/373-deps4.exp,
  testsuite/modules.50-cmds/374-deps5.exp,
  testsuite/modules.50-cmds/375-deps6.exp,
  testsuite/modules.50-cmds/376-deps7.exp,
  testsuite/modules.50-cmds/376-switch.exp,
  testsuite/modules.50-cmds/377-cyclic.exp,
  testsuite/modules.50-cmds/377-deps8.exp,
  testsuite/modules.50-cmds/377-error.exp,
  testsuite/modules.50-cmds/377-opposite.exp,
  testsuite/modules.50-cmds/378-sametarget.exp,
  testsuite/modules.50-cmds/379-module-unload.exp,
  testsuite/modules.50-cmds/380-altname.exp,
  testsuite/modules.61-coll/040-restore.exp: ts: adapt text msgs to fixed
  loaded conflict report

2019-04-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Report loaded conflict on corresp. module msg block
  When loading a module, report any loaded conflict on the message reporting
  block corresponding to this module load. This warning or error message comes
  in addition to the eventual conflict unload message reported under the
  message block of the main evaluation.  When a module load is forced and a
  conflict of this module is loaded, report this conflict with the same
  concise message (no hint) whether an unload of this conflicting module was
  attempted or not.  Fixes #261.

2019-04-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Raise ConUn err/warn msg to top level message block
  When a conflicting module is seen loaded but the unload of this module was
  attempted, report a conflict unload error or warning message toward the main
  evaluation message block.  Fixes #261.

  * modulecmd.tcl.in: Refactor error raising code in conflict proc

2019-04-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/370-deps-bis.exp,
  testsuite/modules.50-cmds/372-deps3.exp,
  testsuite/modules.50-cmds/373-deps4.exp,
  testsuite/modules.50-cmds/375-deps6.exp,
  testsuite/modules.50-cmds/376-switch.exp,
  testsuite/modules.50-cmds/377-error.exp,
  testsuite/modules.50-cmds/377-opposite.exp: Clearer error/warn msg when
  unloading a required mod  When unloading a module which has some dependent
  module still loaded, produce a more specific error or warning message if an
  evaluation of these dependent modules has been realized or if the unload of
  the required module is forced.  Fixes #259.

2019-04-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/374-deps5.exp,
  testsuite/modules.50-cmds/376-switch.exp,
  testsuite/modules.50-cmds/377-opposite.exp: Also register unload evaluation
  attempt  In addition to load evaluation attempt, also register the various
  unload evaluation attempt to get a more appropriate warning or error message
  regarding the missing requirement during a module load. When these
  requirements are unloaded due to a conflict or a dependent unload/reload
  mechanism, it seems better not to advise user to load this requirement (as
  the dependency management system has unloaded it).

  * modulecmd.tcl.in: Use distinctive context for main load and unload

2019-04-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/375-deps6.exp,
  testsuite/modules.50-cmds/376-switch.exp,
  testsuite/modules.50-cmds/377-cyclic.exp,
  testsuite/modules.50-cmds/377-deps8.exp,
  testsuite/modules.50-cmds/377-error.exp,
  testsuite/modules.50-cmds/377-opposite.exp: Same req missing warn msg in
  force mode whatever the auto mode  When a module load is forced and a
  requirement of this module is missing, report this miss with the same
  concise message (no hint) whether a load of this requirement was attempted
  or not.

  * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/370-deps-bis.exp,
  testsuite/modules.50-cmds/370-deps.exp,
  testsuite/modules.50-cmds/374-deps5.exp,
  testsuite/modules.50-cmds/377-error.exp,
  testsuite/modules.61-coll/040-restore.exp: Report missing req on
  corresponding module msg block  When loading a module, report any missing
  requirement on the message reporting block corresponding to this module
  load. This warning or error message comes in addition to the eventual
  requirement load message reported under the message block of the main
  evaluation.  Fixes #258.

  * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/370-deps-bis.exp,
  testsuite/modules.50-cmds/370-deps.exp,
  testsuite/modules.50-cmds/374-deps5.exp,
  testsuite/modules.50-cmds/377-error.exp,
  testsuite/modules.61-coll/040-restore.exp: Raise failed ReqLo msg to top
  level message block

2019-04-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.50-cmds/152-module-emptyarg.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/370-deps-bis.exp,
  testsuite/modules.50-cmds/370-deps.exp,
  testsuite/modules.50-cmds/372-deps3.exp,
  testsuite/modules.50-cmds/374-deps5.exp,
  testsuite/modules.50-cmds/376-deps7.exp,
  testsuite/modules.50-cmds/376-switch.exp,
  testsuite/modules.50-cmds/377-error.exp,
  testsuite/modules.50-cmds/377-opposite.exp,
  testsuite/modules.50-cmds/379-module-unload.exp,
  testsuite/modules.50-cmds/380-altname.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.70-maint/140-multiargs.exp: More appropriate warn/err msg
  for failed ReqLo  When a module requirement is seen missing but the load of
  this module was attempted, report a more specific error or warning message
  to let user understand that the load of the requirement was attempted but
  failed.  Thus distinction is made between missing requirements where a load
  tentative was made and those were the no load attempt was performed (when
  the automated module handling mode is disabled for instance).  Fixes #257.

2019-04-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Refactor cmdModule{Load,Unload} error catch code

2019-04-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/130-conflict-full.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/372-deps3.exp,
  testsuite/modules.50-cmds/374-deps5.exp,
  testsuite/modules.50-cmds/376-deps7.exp,
  testsuite/modules.50-cmds/376-switch.exp: Report failed {load,unload} of
  switched-{off,on} module  When switching modules, report failure of
  switched-off module unload or switched-on module load under the message
  block of the switch action. A failed switched-off module unload is reported
  as an error, as it aborts the switch evaluation, whereas a failed
  switched-on module load is reported as a warning.  Fixes #255.

2019-04-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/376-switch.exp: Rely on cmdModuleUnload error
  catch mech for prereq report  When attempting to unload a module, if this
  module has dependent loaded it cannot be unloaded if auto_handling mode is
  disabled. Treat that situation through the cmdModuleUnload error catch
  rather just with a reportError call.  In case this situation happens through
  a 'module unload' command in a modulefile evaluated in load mode, no error
  return code should be set. However in other situations, cmdModuleUnload
  command should return an error code.  So this change fixes 'switch'
  sub-command when the switched-off module cannot be unloaded as it has some
  dependent module loaded. Now it fails the whole switch process and no load
  of the switched-on module is not tried.  Fixes #251.

  * modulecmd.tcl.in: Rely on cmdModuleLoad error catch mech for conflict
  report

  * modulecmd.tcl.in, testsuite/modules.50-cmds/152-module-emptyarg.exp,
  testsuite/modules.50-cmds/376-switch.exp: Move 'module switch' deps set in
  cmdModuleSwitch  Used for 'module switch' commands is set in modulefile. In
  order to get finer control on the dependency definition and error report
  when the unload of the switched-off module or the load of the switched-on
  module fail.

2019-04-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.50-cmds/373-deps4.exp: Drop output of
  failed ReqLo eval if one succeed  When multiple modules are listed on a
  prereq command, drop the output of those modules that fails to load (by the
  requirement load automated mechanism) to only keep the output of the module
  whose load succeed.  Introduces procedures and variables to hold reports
  until all requirement choices are tried to be loaded, then release held
  output (drop or print). Exception is made for debug output which is always
  immediately printed.  Fixes #254.

  * testsuite/modules.50-cmds/376-deps7.exp: ts: clarify comment on no-auto
  urequn report in 50/376

2019-04-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/376-switch.exp,
  testsuite/modules.50-cmds/377-error.exp: Warn if useless requirement unload
  fails on no-auto mode  During the unload of a module when the automated
  module handling mode is disabled, report a warning message foreach unload of
  a useless requirement that fails as done when the automated module handling
  mode is enabled.  Fixes #253.

2019-03-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Remove useless priorlmlist var from
  cmdModule{Load,Unload}

  * doc/example/inhibit-report-info/siteconfig.tcl, modulecmd.tcl.in,
  testsuite/modules.50-cmds/376-switch.exp,
  testsuite/modules.50-cmds/377-error.exp: Report auto mech warn/err to top
  level message block  During an additional evaluation triggered by an
  automated module handling mechanism, ensure warning and error messages are
  reported under the message block of the main evaluation.  Add a 'recordtop'
  argument to the reportWarning and reportError procedures in order to
  indicate that the message should be recorded under the top-level message
  block instead of the currently active message block.  Fixes #252.

2019-04-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/040-list.exp: ts: add specific term width tests
  for list subcommand

2019-04-15  Jesper Dahlberg <jesper@ludd.ltu.se>

  * modulecmd.tcl.in: Fix hanging 'list' command  Bug correction of the list
  command for the case when the terminal width is equal to the text width to
  be printed when only a single column is used.  Without the correction, the
  'moudule list' command hangs.

2019-04-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .appveyor.yml: appveyor: stop testing R in Cygwin platform  On Cygwin
  platform, R installation seems currently broken under the AppVeyor CI
  environment (see https://github.com/appveyor/ci/issues/2913). So for the
  time being, remove R installation to avoid failing test results.

2019-04-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/conf.py: doc: improve code that disable smart quotes  With
  contribution from @volans- for the Sphinx version test code.

  * doc/source/conf.py: doc: preserve quotes and dashes when making html docs
  Restrain Sphinx from converting quotes and dashes to lang-specific entities
  with either the html_use_smartypants or smartquotes options.  Fixes #250

2019-03-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/370-deps-bis.exp,
  testsuite/modules.50-cmds/377-error.exp: ts: report UReqUn eval in accurate
  order in --no-auto mode

  * testsuite/modules.50-cmds/377-error.exp: ts: no auto mech summary report
  when top eval fails

  * testsuite/modules.50-cmds/376-deps7.exp,
  testsuite/modules.50-cmds/376-switch.exp,
  testsuite/modules.50-cmds/377-cyclic.exp,
  testsuite/modules.50-cmds/377-error.exp,
  testsuite/modules.61-coll/040-restore.exp: ts: detect mod eval in accurate
  context on sumup lists

2019-03-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/374-deps5.exp,
  testsuite/modules.50-cmds/376-switch.exp,
  testsuite/modules.50-cmds/377-error.exp: ts: failed eval are not part of
  auto mech summary lists

2019-03-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/374-deps5.exp,
  testsuite/modules.50-cmds/377-error.exp: ts: auto mech msg summary always
  after err/warn msgs

  * modulecmd.tcl.in: Rely on context arg of to know if switch is ongoing

  * modulecmd.tcl.in: Register and report each evaluation and assoc context
  Better track each module evaluation and the context associated to it in
  order to report a more accurate information on the additional modules loaded
  or unloaded when proceeding the main evaluation request.  When calling for a
  module load or unload, pass a context name to either the cmdModuleLoad or
  cmdModuleUnload procedure called to let it register the module evaluation
  and its associated context into a global structure gathering all these
  informations per top-level evaluation.  Report messages on the additional
  evaluation occuring during a main one are now based on these registered
  information rather on computed list of elements passed to the cmdModuleLoad
  or cmdModuleUnload procedures. As a result a more reliable information is
  obtained, especially during a main load evaluation, where previously some
  unload/load additional evaluation were not seen or were reported against
  another automated mechanism.  Additional evaluation messages are only
  reported if the main evaluation goes to its end, which means that if some
  event forces it to rollback the summary list of actions will not be seen to
  let users better understand the resulting situation (nothing was unloaded or
  loaded) and focus on the error message. Previously finished auto mechanisms
  were immediatly reported which confused people as an error occuring after
  the mechanism leads to a full rollback.  In case an additional evaluation
  fails, the corresponding module is removed from the list of modules on which
  the auto mechanism triggered a load or an unload evaluation.  When unloading
  useless requirements in no-auto mode, these unloads are now reported in
  their correct evaluation order (order of definition found in modulefiles).
  Fixes #244, fixes #245, fixes #246, fixes #247 and fixes #248

2019-03-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version
  4.2.3

  * testsuite/modules.50-cmds/375-deps6.exp,
  testsuite/modules.50-cmds/376-switch.exp,
  testsuite/modules.61-coll/040-restore.exp: ts: correctly escape exp res in
  50/{375,376} and 61/041

  * .gitattributes: install: exclude CI confs from dist tarballs

2019-03-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .gitattributes, .gitignore, Makefile, doc/Makefile: install: fix
  CONTRIBUTING guide build and install

2019-03-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Fix useless conditions on
  reloadModuleList{Load,Unload}Phase

  * testsuite/modules.50-cmds/377-error.exp: ts: add force mode tests in
  50-377-error

2019-03-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/mtreview.in, testsuite/install.00-init/006-procs.exp,
  testsuite/modules.00-init/006-procs.exp: ts: add distinctive mark at end of
  res/exp string  To distinguish the end of the output or expected result from
  the output or expected result content. 'mtreview' tool better catches the
  content it has to compare.

2019-03-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile: install: fix md5sum passed argument  To perform correctly on OS
  X.

2019-03-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .cirrus.yml, .gitignore, .travis.yml, Makefile, contrib/mt,
  contrib/mtreview.in: install: fetch 'icdiff' to process test res throught it

  * contrib/mt: contrib: mt calls mtreview to process test results

  * testsuite/modulefiles.deps/rfa, testsuite/modulefiles.deps/rfb,
  testsuite/modulefiles.deps/rfc, testsuite/modulefiles.deps/rfd,
  testsuite/modulefiles.deps/rfe, testsuite/modulefiles.deps/rff,
  testsuite/modulefiles.deps/rfg, testsuite/modulefiles.deps/rfh,
  testsuite/modulefiles.deps/rfi, testsuite/modulefiles.deps/rfj,
  testsuite/modulefiles.deps/rfk, testsuite/modulefiles.deps/rfl,
  testsuite/modulefiles.deps/rfm, testsuite/modulefiles.deps/rfn,
  testsuite/modulefiles.deps/rga, testsuite/modulefiles.deps/rgb,
  testsuite/modulefiles.deps/rgc, testsuite/modulefiles.deps/rgd,
  testsuite/modulefiles.deps/rge, testsuite/modulefiles.deps/rgf,
  testsuite/modulefiles.deps/rgg, testsuite/modulefiles.deps/rgh,
  testsuite/modulefiles.deps/rgi, testsuite/modulefiles.deps/rgj,
  testsuite/modulefiles.deps/rgk, testsuite/modulefiles.deps/rgl,
  testsuite/modulefiles.deps/rgm, testsuite/modulefiles.deps/rgn,
  testsuite/modules.50-cmds/377-error.exp: ts: add situations in 50/377-error
  where crashes occur on multiple auto mech

2019-03-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .appveyor.yml, .cirrus.yml, .travis.yml, contrib/mt:
  travis,appveyor,cirrus: launch tests throught 'mt'

  * .gitignore, Makefile, contrib/mtreview.in: contrib: add 'mtreview' script
  to highlight failed tests

  * modulecmd.tcl.in, testsuite/modulefiles.deps/raam,
  testsuite/modulefiles.deps/rabm, testsuite/modulefiles.deps/racm,
  testsuite/modulefiles.deps/radm, testsuite/modulefiles.deps/raem,
  testsuite/modulefiles.deps/rafm, testsuite/modulefiles.deps/ragm,
  testsuite/modulefiles.deps/rahm, testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/377-error.exp: In no-auto mode one UReqUn failure
  should not fail whole unload  During the unload of a module with
  auto_handling mode disabled, if the unload of one of its useless
  requirements (by the useless requirement unload mechanism triggered in
  --no-auto mode when requirements are declared with the 'module load'
  modulefile command) fails, it should not fail the whole unload process like
  when auto_handling mode is enabled.  Fixes #238

2019-03-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.deps/rea, testsuite/modulefiles.deps/reb,
  testsuite/modulefiles.deps/rec, testsuite/modulefiles.deps/red,
  testsuite/modulefiles.deps/ree, testsuite/modulefiles.deps/ref,
  testsuite/modulefiles.deps/reg, testsuite/modulefiles.deps/reh,
  testsuite/modulefiles.deps/rei, testsuite/modulefiles.deps/rej,
  testsuite/modulefiles.deps/rek, testsuite/modulefiles.deps/rel,
  testsuite/modulefiles.deps/rem, testsuite/modulefiles.deps/ren,
  testsuite/modules.50-cmds/377-error.exp: ts: add DepRe tests in 50/377-error

2019-03-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modulefiles.deps/rdc,
  testsuite/modulefiles.deps/rdd, testsuite/modulefiles.deps/rde,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/130-conflict-full.exp,
  testsuite/modules.50-cmds/375-deps6.exp,
  testsuite/modules.50-cmds/377-cyclic.exp,
  testsuite/modules.50-cmds/377-error.exp: On reload cmd, stop if one
  unloading/loading mod fails  When reloading all loaded modules with the
  'reload' sub-command, if one reloading module fails to unload or load abort
  the whole reload process to preserve environment sanity.  Add a sum-up
  message group for reload sub-command to clearly get all errors related to
  this command under the same message block.  Fixes #237

2019-03-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/373-deps4.exp,
  testsuite/modules.50-cmds/374-deps5.exp,
  testsuite/modules.50-cmds/376-switch.exp: Stop if one DepRe load fails
  except if force mode set  During the load or the unload of a module, if the
  load of one of its dependent (by the dependent reload mechanism) fails abort
  the whole unload/load process. Exception made if the force mode is enabled.
  In this case failing module stays loaded and Dependent Unload mechanism
  continues with next module to load.  When applying DepRe load phase during a
  switch command, consider force mode a default since here we are trying to
  reload the dependent modules found when unloading switched-off module.
  Switch action does not guarantee to find all DepRe modules still loaded at
  the end of process.  Fixes #241

2019-03-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Stop if one DepRe unload fails except if force mode set
  During the load or the unload of a module, if the unload of one of its
  dependent (by the dependent reload mechanism) fails abort the whole
  unload/load process. Exception made if the force mode is enabled. In this
  case failing module stays loaded and Dependent Unload mechanism continues
  with next module to unload. This failing module is removed from the
  Dependent Reload list, so it will not take part of the load phrase of the
  mechanism.  Fixes #239

2019-03-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.deps/rca, testsuite/modulefiles.deps/rcb,
  testsuite/modulefiles.deps/rcc, testsuite/modulefiles.deps/rcd,
  testsuite/modulefiles.deps/rce, testsuite/modules.50-cmds/377-error.exp: ts:
  add purge/reload tests in 50/377-error

  * modulecmd.tcl.in: Add debug msgs to {push,pop,restore}Settings procs

2019-03-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/376-switch.exp,
  testsuite/modules.50-cmds/377-error.exp: If one UReqUn fails removes its
  requirements from UReqUn list  During the unload of a module, if the unload
  of one of its useless requirements (by the useless requirement unload
  mechanism) fails, removes the requirements of this failing module from the
  useless requirement list so they are kept loaded as failing module will
  still be loaded.  Such error is reported as a warning and it does not stop
  the whole unload process as main module to unload and its dependent are able
  to unload, just its requirements automatically loaded cannot be unloaded. So
  the job has been done, not perfectly but main task is successful and
  resulting user environment is coherent.  A getRequiredLoadedModuleList
  procedure is introduced to get all the loaded modules required by a list of
  modules passed to the procedure.  Fixes #240

2019-03-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/377-error.exp: Stop unload if one DepUn fails
  except if force mode set  During the unload of a module, if the unload of
  one of its dependent (by the dependent unload mechanism) fails abort the
  whole unload process. Exception made if the force mode is enabled. In this
  case failing module stays loaded and Dependent Unload mechanism continues
  with next module to unload.

2019-03-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Rework cmdModuleLoad code with break/continue commands
  To improve clarity of the cmdModuleLoad procedure replace large if/then/else
  conditional blocks by break or continue abortion commands. A catch statement
  is set around the evaluation parts of the procedure and if a break happens,
  saved settings are restored (which means some evaluation went wrong and
  previous settings are rolled back).

  * modulecmd.tcl.in: Remove useless rollback in cmdModuleLoad  Now
  push/pop/restoreSettings procedures correctly handle the conflict, prereq
  and alternative names information, there is no need to specificly clear
  their relative structures in cmdModuleLoad when setup must be rolled back.

  * modulecmd.tcl.in: Rework cmdModuleUnload code with break/continue commands
  To improve clarity of the cmdModuleUnload procedure replace large
  if/then/else conditional blocks by break or continue abortion commands. A
  catch statement is set around the evaluation parts of the procedure and if a
  break happens, saved settings are restored (which means some evaluation went
  wrong and previous settings are rolled back).

2019-03-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/example/flavored-modules/modulefiles/.common,
  .../modulefiles/flavor/gromacs/plumed,
  .../modulefiles/flavor/gromacs/standard,
  .../modulefiles/flavor/hdf5/parallel, .../modulefiles/flavor/hdf5/serial,
  .../modulefiles/flavor/netcdf-fortran/.modulerc,
  .../modulefiles/flavor/netcdf/.modulerc,
  doc/example/flavored-modules/modulefiles/gcc/4.8,
  doc/example/flavored-modules/modulefiles/gcc/8,
  doc/example/flavored-modules/modulefiles/gromacs/5,
  doc/example/flavored-modules/modulefiles/hdf5/1.10,
  doc/example/flavored-modules/modulefiles/hdf5/1.8,
  doc/example/flavored-modules/modulefiles/intel/15,
  doc/example/flavored-modules/modulefiles/intel/17,
  .../flavored-modules/modulefiles/intelmpi/17,
  .../flavored-modules/modulefiles/jasper/1.900,
  .../modulefiles/netcdf-fortran/4.4,
  .../flavored-modules/modulefiles/netcdf/4.6,
  .../flavored-modules/modulefiles/openmpi/2.0,
  doc/example/flavored-modules/modulefiles/pgi/18,
  doc/example/flavored-modules/modulefiles/wrf/3.9: doc: add example
  modulefiles for 'flavored-modules' recipe

2019-03-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.deps/ibm, testsuite/modules.50-cmds/375-order.exp,
  testsuite/modules.50-cmds/376-switch.exp: ts: test reverting 'module
  load/switch' when req loaded after

2019-03-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.50-cmds/378-sametarget.exp: Set
  requirement from closest match  When computing dependencies between loaded
  or loading modules, if multiple candidates match a requirement, the closest
  one to the requiring module is selected instead of the farest one.  This
  change makes dependency selection consistent with loaded module selection
  which selects lastly loaded module when multiple modules match search.

  * modulecmd.tcl.in: Add a 'isModuleUnloadable' helper procedure
  isModuleUnloadable checks whether a given loaded module could be
  automatically unloaded or not (it can if it has been automatically loaded
  and no other loaded module requires it).  Use this new procedure in
  getUnloadableLoadedModuleList and cmdModuleUnload procedures. For the latter
  it simplifies the treatment when 'onlyureq' argment is enabled

  * modulecmd.tcl.in, testsuite/modules.50-cmds/375-order.exp,
  testsuite/modules.50-cmds/376-switch.exp: Correct unloadable mod search when
  reverting 'module load/switch'  Select unload candidate from loaded module
  list excluding modules loaded after the current unloading module. So only
  module loaded prior dependent module are taken into account.  Then pass this
  candidate, if any, to cmdModuleUnload and rely on this procedure to unload
  module only if it is unloadable.  Previous commit was relying on the list of
  unloadable modules, obtained from getUnloadableLoadedModuleList procedure,
  which sometimes led to corner cases especially if dependency information
  were not set somehow (no module would be unloaded in that case as
  getUnloadableLoadedModuleList relies only on these dependency information).
  As the candidate is selected to be the closest one from the module requiring
  it, it changes unloading result when multiple candidates are found prior
  requiring module (previously firstly loaded module was unloaded).

2019-03-06  Ben Bowers <nanobowers@gmail.com>

  * CONTRIBUTING.rst: Adding emacs settings useful for adhering to coding
  conventions  Fixes #233

2019-03-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .cirrus.yml: cirrus: fix custom clone script for pull request

2019-03-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modulefiles.deps/ih/0,
  testsuite/modulefiles.deps/iim, testsuite/modulefiles.deps/swg/0,
  testsuite/modules.50-cmds/152-module-emptyarg.exp,
  testsuite/modules.50-cmds/375-order.exp,
  testsuite/modules.50-cmds/376-switch.exp: Fix mod selection for 'module
  load/switch' in modfile when unloading  When unloading a loaded module that
  contains 'module load' or 'module switch' commands in its modulefile, loaded
  required module should be unloaded if it has been automatically loaded.
  This commit fixes the selection of this module to unload automatically when
  evaluating in unload mode the 'module load' or 'module switch' commands used
  in modulefiles. If a loaded module matches the 'module load' or 'module
  switch' statement but was loaded after the module making these statements,
  it should not be selected as the module to automatically unload.  Fixes #232

2019-03-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.deps/swi, testsuite/modulefiles.deps/swj,
  testsuite/modulefiles.deps/swk, testsuite/modulefiles.deps/swl,
  testsuite/modulefiles.deps/swm, testsuite/modulefiles.deps/swn,
  testsuite/modules.50-cmds/376-switch.exp: ts: add 'module switch' in modfile
  erroneous situation  With switched-off or switched-on or both modules
  targeted by 'module switch' fail to load/unload.

2019-02-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.80-deep/068-transitive.exp: Find alt
  names of mod coming from distant dirs  If an alias is set on a directory and
  this directory default element is an alias toward a modulefile. When this
  modulefile is loaded, it holds no reference to first alias.  For default
  elements in a directory that points to a modulefile, when this modulefile is
  loaded, it should receive the eventual aliases set on the distant directory
  as alternative names.  Fixes #231

2019-02-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Remove unneeded control prior reporting info when
  unloading  No need to check if we are on main unload action prior reporting
  lists of additionnally loaded or unloaded modules in cmdModuleUnload
  procedure, as these code sections could only be reached from the main unload
  action.

  * modulecmd.tcl.in: Remove unneeded recordId push/pop in switch context  No
  need to adapt message record id for a switch action for code sections that
  are never reached when a switch action is ongoing.

  * testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/120-siteconfig.exp: ts: check getLoadedConflict
  proc in non-serialized mode

  * testsuite/cmd.exe, testsuite/modules.50-cmds/140-system.exp: ts: check
  'system' cmd in a Windows simulated context

2019-02-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.other/restore,
  testsuite/modules.61-coll/040-restore.exp: ts: check load msg report when
  modfile use restore cmd

  * testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/120-siteconfig.exp: ts: check
  getModuleFromLoadingModulefile proc in 00/120  Call procedure against a not
  loaded modulefile.

  * testsuite/modulefiles.deps/msf, testsuite/modulefiles.deps/mtf,
  testsuite/modules.50-cmds/372-deps3.exp,
  testsuite/modules.50-cmds/375-deps6.exp: ts: basic conflict/prereq test on
  fully qualified module name

  * modulecmd.tcl.in: Rewrite evaluation mode test in 'system' proc

  * testsuite/modules.50-cmds/375-deps6.exp: ts: test an is-loading conflict
  check in force mode

2019-02-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.deps/swa, testsuite/modulefiles.deps/swb,
  testsuite/modulefiles.deps/swc, testsuite/modulefiles.deps/swd,
  testsuite/modulefiles.deps/swe, testsuite/modulefiles.deps/swf,
  testsuite/modulefiles.deps/swg/1, testsuite/modulefiles.deps/swg/2,
  testsuite/modulefiles.deps/swh, testsuite/modules.50-cmds/376-switch.exp:
  ts: add 'module switch' in modfile dep tests

  * modulecmd.tcl.in, testsuite/modulefiles.other/modemptyarg/swap3,
  testsuite/modules.50-cmds/152-module-emptyarg.exp: Revert 'module switch' in
  modfile when unloading modfile  No distinction were made previously for
  'module switch' command used in modulefile regarding modulefile evaluation
  mode. This was a mistake as an unload evaluation of a modulefile should
  revert what has been set at load time.  During an unload evaluation, a
  'module switch' command is converted to a 'module unload' of the switched-on
  module, like for 'module load' command. Nothing is done for switched-off
  module, like for 'module unload' command.  CAUTION: it is not recommended to
  use the `switch` sub-command in modulefiles as this command is intended for
  the command-line for a 2in1 operation. Could be removed from the modulefile
  scope in a future release. Use `module unload` and `module load` commands in
  modulefiles instead.  Fixes #226

2019-02-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.50-cmds/152-module-emptyarg.exp: Track
  deps defined by 'module switch' in modfile  When 'module switch' commands
  are found in modulefiles, track switched-off modulefile as a conflict and
  switched-to modulefile as a requirement to apply same behaviors than for
  'module load' and 'module unload' commands in modulefiles.  If 'switch'
  sub-command has only one argument, do not define any conflict, only a
  requirement on the defined switched-to argument.  CAUTION: it is not
  recommended to use the `switch` sub-command in modulefiles as this command
  is intended for the command-line for a 2in1 operation. Could be removed from
  the modulefile scope in a future release. Use `module unload` and `module
  load` commands in modulefiles instead.  Fixes #229

  * testsuite/modules.95-version/050-fullpathentry.exp: ts: add use/unuse
  tests in 95/050  Demonstrate correct addition or removal to MODULEPATH of
  entry composed of a bare variable reference.

2019-02-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/example/modulefiles-in-git/modulefiles/localmodules: doc: mention
  author of modulefiles-in-git examples

2019-02-24  Scott Johnson <scottjohnsoninsf@gmail.com>

  * .../modulefiles-in-git/modulefiles/localmodules,
  doc/source/cookbook/modulefiles-in-git.rst: New cookbook entry for
  versioning Modulefiles with Git  Originally developed at:
  https://github.com/scottj97/environment-modules-in-git

2019-02-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.95-version/050-fullpathentry.exp:
  Accept a variable reference as a full MODULEPATH entry  Enable to define a
  path entry to the MODULEPATH variable which corresponds to a variable
  reference only (not a variable reference mixed in a path string).  Was
  previously prefixing this variable reference with current working directory
  path as variable reference was detected as a relative path.  Fixes #223

  * init/bash.in, init/csh.in, init/fish.in, init/ksh.in, init/sh.in,
  init/zsh.in: init: init MANPATH if not set to preserve man sysconfig  In
  shell initialization scripts, initialize MANPATH if not set with a value
  that preserves manpath system configuration even after addition of paths to
  this variable by modulefiles  Fixes #224

  * contrib/rpm/environment-modules.spec.in: rpm: add CONTRIBUTING guide to
  %doc

2019-02-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.deps/ra, testsuite/modulefiles.deps/raa,
  testsuite/modulefiles.deps/rab, testsuite/modulefiles.deps/rac,
  testsuite/modulefiles.deps/rad, testsuite/modulefiles.deps/rae,
  testsuite/modulefiles.deps/raf, testsuite/modulefiles.deps/rag,
  testsuite/modulefiles.deps/rah, testsuite/modulefiles.deps/rb,
  testsuite/modulefiles.deps/rba, testsuite/modulefiles.deps/rbb,
  testsuite/modulefiles.deps/rbc, testsuite/modulefiles.deps/rbd,
  testsuite/modulefiles.deps/rbe, testsuite/modulefiles.deps/rbf,
  testsuite/modulefiles.deps/rbg, testsuite/modulefiles.deps/rbh,
  testsuite/modulefiles.deps/rc, testsuite/modulefiles.deps/rd,
  testsuite/modulefiles.deps/re, testsuite/modulefiles.deps/rf,
  testsuite/modulefiles.deps/rg, testsuite/modulefiles.deps/rh,
  testsuite/modulefiles.deps/ri, testsuite/modulefiles.deps/rj,
  testsuite/modulefiles.deps/rk, testsuite/modulefiles.deps/rl,
  testsuite/modulefiles.deps/rm, testsuite/modulefiles.deps/rn,
  testsuite/modulefiles.deps/ro, testsuite/modulefiles.deps/rq,
  testsuite/modulefiles.deps/rr, testsuite/modulefiles.deps/rs,
  testsuite/modules.50-cmds/377-error.exp: ts: test mod eval crash during auto
  handling mechs

2019-02-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Add dep-related internal structs to settings
  save/restore  In order to correctly restore internal information state when
  a modulefile evaluation fails, add all the dependency-related internal
  arrays to the list of variables saved prior modulefile evaluation, then
  restored in case modulefile evaluation fails.

2019-02-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/375-order.exp: ts: clear unneeded comment in
  50/375-order

2019-02-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version
  4.2.2

2019-02-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.deps/ie, testsuite/modulefiles.deps/if,
  testsuite/modulefiles.deps/ig, testsuite/modulefiles.deps/ih/1,
  testsuite/modulefiles.deps/ih/2, testsuite/modulefiles.deps/ii,
  testsuite/modulefiles.deps/ij, testsuite/modules.50-cmds/375-order.exp: ts:
  check requirement loading order in 50/375-order

2019-02-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Use NPO deps to compute DepUn list if it heals loaded
  mods  Compute Dependent Unload module list with regular or "No Particular
  Order" dependency structures. Compare both list to choose the accurate one.
  Result list obtained from the "No Particular Order" stuctures is chosen if
  the loaded environment could be healed after unloading asked module with
  dependencies loaded after the modules requiring them.  This is guessed from
  the length of the obtained lists: less element in NPO list means NPO
  dependencies could save some loaded modules from being unloaded by the
  Dependent Unload mechanism.

2019-02-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/040-subshell.exp,
  testsuite/install.00-init/050-crossshell.exp: ts: adapt err msg for fish 3.0

  * modulecmd.tcl.in: No dep struct exist check in
  areModuleConstraintsSatisfied  No need to test existence of the requirement
  list for a loaded module in g_moduleDepend or g_moduleNPODepend structure,
  as all loaded modules get an array key in these arrays whether they have
  requirements or not.

2019-02-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Clarify auto handled mods in debug msgs

  * modulecmd.tcl.in: Clarify debug msgs on {set,unset}ModuleDependency

2019-02-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modulefiles.deps/go,
  testsuite/modulefiles.deps/gp, testsuite/modulefiles.deps/gq,
  testsuite/modulefiles.deps/gr, testsuite/modulefiles.deps/gs,
  testsuite/modules.50-cmds/377-cyclic.exp: Update NPO dep structs to break
  dep cycle  Update the setModuleDependency and unsetModuleDependency
  procedures to break any dependency cycle spotted in the No Particular Order
  dependency structures.

2019-02-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Use NPO deps struct to compute DepUn/DepRe on unload
  Use the No Particular Order dependency structures to get the modules to
  handle via the Dependent Unload and the Dependend Reload mechanisms at
  unload time.  Using these No Particular Order dependency structures help to
  "heal" the loaded environment after an unload batch as some dependent
  modules loaded before their requirements could be reloaded to get an
  unloaded requirement replaced by another loaded after dependent.  This
  change mainly adds the 'nporeq' argument to the getDependentLoadedModuleList
  procedure to use the NPO structures rather the order-dependent ones. Then
  the sortModulePerLoadedAndDepOrder, areModuleConstraintsSatisfied and
  getDirectDependentList procedures are updated in turns to use these NPO
  structures when called by getDependentLoadedModuleList in nporeq mode.

  * modulecmd.tcl.in: Add structs to manipulate NPO requirements  In addition
  to the g_moduleDepend, g_dependHash and g_prereqViolation structures that
  hold requirement state of loaded modules, taking into account loading order,
  introduce the g_moduleNPODepend, g_dependNPOHash and g_prereqNPOViolation
  structures that hold requirements between loaded modules whatever their
  loading order (No Particular Order taken into account), which means a
  requirement loaded after its dependent module will be found in the *NPO*
  structures but not in the regular ones.

2019-02-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/373-deps4.exp,
  testsuite/modules.50-cmds/375-deps6.exp: ts: adapt test res for only PRE req
  are valid

  * modulecmd.tcl.in: Only PRE requirement are considered valid  When looking
  at the dependency of a loaded module, only consider requirement loaded
  before dependent (holding a prior position in the loaded module list) as
  valid, those loaded after dependent module are considered as an unmet
  dependency.

2019-02-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Add getUnmetDependentLoadedModuleList for load DepRe
  Compute the Dependent Reload module list when loading a module with the
  introduced getUnmetDependentLoadedModuleList procedure.  Instead of faking
  new module is already loaded to get the dependent list able to be reloaded,
  missing requirement over new module is just silenced to determine these
  Dependent Reload modules.  Also take into account requirements loaded after
  dependent that help to solve a requirement constraint with upcoming loaded
  mod.

2019-01-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modulefiles.deps/refcon/1,
  testsuite/modulefiles.deps/refcon/2,
  testsuite/modules.50-cmds/375-deps6.exp: Fix warn msg when forcing a
  reflexive conflict  Message appeared twice (one for generic name at conflict
  command evaluation and one during persistent conflict check at end of load).

2019-01-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/tcsh_completion.in: init: fix tcsh completion when 'noclobber' var is
  set  Fix _module_not_yet_loaded alias in tcsh completion script to handle
  situation when 'noclobber' variable is set (should force to write to the
  fifo files).  Also ensure actual 'rm' command is called and not an alias
  that may ask for confirmation.  Fixes #219

2019-01-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .cirrus.yml, README.md: Introduce Cirrus CI config file for FreeBSD CI

  * .appveyor.yml: appveyor: exclude compat branches from ci

2019-01-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst: doc: up MIGRATING for 'eval then check if conflict'

2019-01-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.deps/un/1, testsuite/modulefiles.deps/un/2,
  testsuite/modulefiles.deps/un/3, testsuite/modulefiles.deps/una,
  testsuite/modulefiles.deps/unb, testsuite/modulefiles.deps/unc,
  testsuite/modulefiles.deps/und,
  testsuite/modules.50-cmds/379-module-unload.exp: ts: add tests for 'eval
  then check if conflict'

2019-01-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/130-conflict-full.exp,
  testsuite/modules.50-cmds/370-deps-bis.exp,
  testsuite/modules.50-cmds/370-deps.exp,
  testsuite/modules.50-cmds/372-deps3.exp,
  testsuite/modules.50-cmds/373-deps4.exp,
  testsuite/modules.50-cmds/374-deps5.exp,
  testsuite/modules.50-cmds/376-deps7.exp,
  testsuite/modules.50-cmds/377-cyclic.exp,
  testsuite/modules.50-cmds/377-opposite.exp,
  testsuite/modules.50-cmds/378-sametarget.exp,
  testsuite/modules.50-cmds/380-altname.exp: ts: fix for 'eval then check if
  conflict'  Adapt existing tests according to the modulefile evaluation that
  now occurs even if a conflict toward modulefile is set prior load.  There is
  no change to the output shell code (output order may vary as some rollback
  may occur after a load tentative if a conflict violation is detected
  afterward).  Also some stderr output messages may change since a load
  tentative is made (so messages outputed within modulefile will be seen).  If
  evaluation attempt fails on something else than a conflict violation, this
  error will take precedence over the conflict error (prereq not found,
  modulefile syntax error, etc).  If modulefile declares multiple conflicts
  which are currently violated, there will be an error message for each of
  them as evaluation is going through the whole modulefile before raising
  conflict errors.

2019-01-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Evaluate mod then check conflict violation  Give the
  chance to the 'module unload' statements in modulefile to solve conflict
  that were registered prior the load attempt of this modulefile by evaluating
  modulefile then check afterward if a conflict violation is there rather
  checking if a conflict violation exists (and shout error if there is) before
  evaluating modulefile.  So modulefile is evaluated even if a conflict is
  registered against him prior its evaluation. If a conflict is still set
  after its evaluation (and the evaluation of its requirements) everything is
  rolled back.  The 'module unload' commands could solve these already
  registered conflicts. 'conflict' commands used in the loading modulefile
  will however still break the load immediately if the conflict is seen
  violated to maintain same behavior.  With this change, behavior of these
  'module unload' modulefile commands is restored to what it was able to do
  prior conflict consistency changes, yet this consistency is maintained as
  everything is rolled back in the end if conflict is still there.
  doesModuleConflict procedure has also been changed to look at loading
  modules in addition to loaded modules, since the conflict check triggered by
  'module unload' will not raise an error (error is now raised based on the
  result of the doesModuleConflict call.  Fixes #216

  * testsuite/modules.50-cmds/095-uname.exp: ts: escape (, ) and + in 'uname
  -v' res

2019-01-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * README.md: doc: add repology packaging status badge in README

2019-01-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/conf.py, modulecmd.tcl.in: New year (2019) copyright mention
  update

2019-01-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .travis.yml: travis: fix OSX brew install  Ensure homebrew is up-to-date
  to avoid consistency issue

2018-12-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/zsh-functions/_module: init: recognize
  --{auto,no-auto,force,paginate,no-pager} opts in zsh comp  Add recognition
  of the --auto, --no-auto, --force, --paginate and --no-pager command-line
  switches in zsh shell completion script.

  * init/fish_completion: init: recognize --{auto,no-auto,force} opts in fish
  comp  Add recognition of the --auto, --no-auto and --force command-line
  switches in fish shell completion script.

  * modulecmd.tcl.in, testsuite/modulefiles/function/1.0,
  testsuite/modules.50-cmds/390-function.exp,
  testsuite/modules.50-cmds/391-function-undo.exp: Trim function body passed
  to set-function cmd  Trim any whitespace, newline or ';' characters at the
  beginning or end of the function body passed to set-function modulefile
  command to correctly define shell function whatever the writing style used.

2018-12-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/FAQ.rst: doc: add a FAQ entry to desc. use of module from
  Makefile  Thanks to Robert McLay for the hint.

  * doc/source/module.rst: doc: fix typo in Python init example in module man
  page

2018-11-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/guide/get_started/03-first_module-bar.sh,
  contrib/guide/get_started/13-datadir-common.sh: contrib: fix mkdir in
  get_started guide scripts

2018-11-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * CONTRIBUTING.rst, doc/source/CONTRIBUTING.rst, doc/source/index.rst: doc:
  add CONTRIBUTING guide

2018-11-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/example/inhibit-report-info/modulefiles/bar,
  doc/example/inhibit-report-info/modulefiles/foo,
  .../example}/inhibit-report-info/siteconfig.tcl,
  .../example}/top-priority-values/modulefiles/bar/1,
  .../example}/top-priority-values/modulefiles/foo/1,
  .../example}/top-priority-values/siteconfig.tcl,
  .../unload-firstly-loaded/modulefiles/foo/1,
  .../unload-firstly-loaded/modulefiles/foo/2,
  .../example}/unload-firstly-loaded/siteconfig.tcl, doc/source/cookbook.rst,
  doc/source/cookbook/inhibit-report-info.rst,
  doc/source/cookbook/top-priority-values.rst,
  doc/source/cookbook/unload-firstly-loaded.rst, doc/source/index.rst: doc:
  introduce cookbook  Add a cookbook section in the documentation and port
  there the 3 pre-existing recipes: inhibit-report-info, top-priority-values
  and unload-firstly-loaded.  Move the examples files of these recipes from
  contrib/cookbook to doc/example directory.

2018-11-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modulefiles.deps/ia,
  testsuite/modulefiles.deps/ib, testsuite/modulefiles.deps/ic,
  testsuite/modulefiles.deps/id, testsuite/modules.50-cmds/373-deps4.exp: Fix
  DepUn when all mods from an opt list are unloaded  Correct the Dependent
  Unload mechanism when it triggers the unload of 2 modules making together a
  requirement from another module. This module is now also added to the
  dependent modules to unload as both modules from its requirement definition
  are unloaded.

2018-11-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version
  4.2.1

2018-11-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.70-maint/152-remove-path.exp: Rework ref counter handling
  and relative error mngt  No more disturbing warning messages when reference
  counter variable is not coherent with its relative environment variable.
  Erroneous value will raise a debug message only and relative reference
  counter is ignored (which means a count of 1 is applied).  Now environment
  variable is trusted and if its path elements are found in a reference
  counter variable, this counter is taken into account. Elsewhere, a reference
  counter of 1 is applied.  Which means a value found in reference counter
  variable but not in variable is ignored. A value found in variable but not
  in reference counter (or with a bad reference counter value) gets a count of
  1 applied.  Adapt existing tests in 70/152 and 50/40 and add some unload
  command tests in 50/040.  Fixes #206

2018-11-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/bash.in, init/csh.in, init/fish.in, init/ksh.in, init/sh.in,
  init/zsh.in: init: skip shell env alteration if autoinit cmd failed  Fixes
  #208

2018-11-07  Satya Mishra <satya.devel@gmail.com>

  * init/csh.in, testsuite/modules.70-maint/120-autoinit.exp: use :q to quote
  prompt to accomodate prompts with embedded newlines

  * modulecmd.tcl.in: use :q to quote prompt to accomodate prompts with
  embedded newlines

2018-11-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.deps/ha/1, testsuite/modulefiles.deps/ha/2,
  testsuite/modulefiles.deps/ha/3, testsuite/modulefiles.deps/hb,
  testsuite/modulefiles.deps/hc, testsuite/modulefiles.deps/hd,
  testsuite/modulefiles.deps/he, testsuite/modulefiles.deps/hf,
  testsuite/modulefiles.deps/hg, testsuite/modules.50-cmds/378-sametarget.exp:
  ts: tests multiple deps targeting same mod in 50/378

  * modulecmd.tcl.in: Fix dep computation when opt prereq list target same mod
  Ensure a loaded module matching multiple entries of a same 'or' prereq will
  just be considered as one module matching prereq.

  * modulecmd.tcl.in, testsuite/modulefiles.deps/fia,
  testsuite/modules.50-cmds/377-deps8.exp: Fix dep computation when unloading
  for multi ref  Some dependencies expressed may target same module so it is
  important to safely unset dependency reference (in case unset has already
  been performed)

2018-11-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.deps/ga, testsuite/modulefiles.deps/gb,
  testsuite/modulefiles.deps/gc, testsuite/modulefiles.deps/gd,
  testsuite/modulefiles.deps/ge, testsuite/modulefiles.deps/gf,
  testsuite/modulefiles.deps/gg, testsuite/modulefiles.deps/gh,
  testsuite/modulefiles.deps/gi, testsuite/modulefiles.deps/gj,
  testsuite/modulefiles.deps/gk, testsuite/modulefiles.deps/gl,
  testsuite/modulefiles.deps/gm, testsuite/modulefiles.deps/gn,
  testsuite/modulefiles.deps/gw, testsuite/modulefiles.deps/gx,
  testsuite/modulefiles.deps/gy, testsuite/modulefiles.deps/gz,
  testsuite/modules.50-cmds/377-cyclic.exp: ts: tests cyclic dep situations in
  50/377-cyclic

2018-11-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Check 'module load' mod not already loading before
  loading it  Useful in case of cyclic dependencies to avoid an infinite
  loading loop.

2018-10-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Compute loaded mod dependency relations without cycle
  When computing dependency relations between loaded modules and a freshly
  loaded one, do not launch a refresh of those unmet relations for an already
  loaded module with the new one if this relation closes a dependency cycle.
  When parsing the already loaded environment, the loaded module dependency
  relations are computed giving each module only the visibility of modules
  loaded prior it. Modules loaded after one module are not taken into account
  as they have not taken part of its requirements.

2018-11-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Check prereq mod is not already loading before loading
  it  Useful in case of cyclic dependencies to avoid an infinite loading loop.

2018-10-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/373-deps4.exp: ts: clarify test in 50/373 with a
  UreqUn mod found after dependent

2018-10-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/mt: contrib: select between files at same ts num in 'mt'

2018-11-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/diff_v3_v4.rst, modulecmd.tcl.in,
  testsuite/etc/modulerc.altname, testsuite/etc/rc,
  testsuite/modulefiles.deps/alt/9, testsuite/modules.20-locate/060-rc.exp,
  testsuite/modules.50-cmds/380-altname.exp: Enable 'is-loaded' for modulerc
  eval  Make 'is-loaded' modulefile command callable from a modulerc
  interpretation. Restore this way the behavior of compatibility version.
  Update diff doc and add some specific non-regression tests in 20/060 and
  50/380.  Fixes #207

2018-10-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.deps/faa, testsuite/modulefiles.deps/fab,
  testsuite/modulefiles.deps/fac, testsuite/modulefiles.deps/fad,
  testsuite/modulefiles.deps/fae, testsuite/modulefiles.deps/faf,
  testsuite/modulefiles.deps/fai, testsuite/modulefiles.deps/faj,
  testsuite/modulefiles.deps/fak, testsuite/modulefiles.deps/fal,
  testsuite/modulefiles.deps/fam, testsuite/modulefiles.deps/fan,
  testsuite/modules.50-cmds/377-deps8.exp,
  testsuite/modules.50-cmds/377-opposite.exp: ts: test opposite defs using
  diff cmds and alt names 50/377

2018-10-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/380-altname.exp: ts: test empty/bad elt in
  MODULES_LMALTNAME in 50/380

  * testsuite/modules.50-cmds/120-prereq-full.exp: ts: test empty elt in
  MODULES_LMNOTUASKED in 50/120

  * testsuite/modules.50-cmds/130-conflict-full.exp: ts: test empty/bad elt in
  MODULES_LMCONFLICT in 50/130

  * testsuite/modules.50-cmds/120-prereq-full.exp: ts: test empty/bad elt in
  MODULES_LMPREREQ in 50/120

  * testsuite/home/coll12, testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/999-cleanup.exp: ts: restore coll holding incompat
  modfiles in 61/040

  * testsuite/home/coll11, testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/999-cleanup.exp: ts: save/restore coll with mod
  using 'module load' cmd

2018-10-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.deps/.modulerc, testsuite/modulefiles.deps/fr,
  testsuite/modulefiles.deps/fs, testsuite/modulefiles.deps/ft,
  testsuite/modulefiles.deps/fu, testsuite/modules.50-cmds/377-deps8.exp: ts:
  test similar defs using diff cmds and alt names 50/377

  * testsuite/modulefiles.deps/i6, testsuite/modulefiles.deps/i7,
  testsuite/modules.50-cmds/380-altname.exp: ts: test module {unload,load}
  cmds on alt names in 50/380

  * testsuite/modulefiles.deps/.modulerc, testsuite/modulefiles.deps/fn,
  testsuite/modulefiles.deps/fo, testsuite/modulefiles.deps/fp,
  testsuite/modulefiles.deps/fq, testsuite/modules.50-cmds/377-deps8.exp: ts:
  test dup dep set with diff cmds and alt names in 50/377

2018-10-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.deps/fj, testsuite/modulefiles.deps/fk,
  testsuite/modulefiles.deps/fl, testsuite/modulefiles.deps/fm,
  testsuite/modules.50-cmds/377-deps8.exp: ts: test dup dep set with diff cmds
  in 50/377

  * testsuite/modulefiles.deps/fi, testsuite/modules.50-cmds/377-deps8.exp:
  ts: test dependency reordered dup defs in 50/377

  * testsuite/modulefiles.deps/fa, testsuite/modulefiles.deps/fb,
  testsuite/modulefiles.deps/fc, testsuite/modulefiles.deps/fd,
  testsuite/modulefiles.deps/fe, testsuite/modulefiles.deps/ff,
  testsuite/modulefiles.deps/fg, testsuite/modulefiles.deps/fh,
  testsuite/modules.50-cmds/377-deps8.exp: ts: test dependency exact duplicate
  defs in 50/377

2018-10-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.deps/ma, testsuite/modulefiles.deps/mb,
  testsuite/modulefiles.deps/mbs, testsuite/modulefiles.deps/mbt,
  testsuite/modulefiles.deps/mbu, testsuite/modulefiles.deps/mc,
  testsuite/modulefiles.deps/md, testsuite/modulefiles.deps/me,
  testsuite/modulefiles.deps/mf, testsuite/modulefiles.deps/mg,
  testsuite/modulefiles.deps/mh, testsuite/modulefiles.deps/mi,
  testsuite/modulefiles.deps/mj, testsuite/modulefiles.deps/mk,
  testsuite/modulefiles.deps/ml, testsuite/modulefiles.deps/mm,
  testsuite/modulefiles.deps/mn, testsuite/modulefiles.deps/mo,
  testsuite/modulefiles.deps/mp, testsuite/modulefiles.deps/mq,
  testsuite/modulefiles.deps/mr, testsuite/modules.50-cmds/370-deps-bis.exp:
  ts: duplicate 50/370 tests with module {load,unload} cmds  Instead of
  prereq/conflict commands.

  * modulecmd.tcl.in, testsuite/modules.50-cmds/372-deps3.exp,
  testsuite/modules.50-cmds/375-deps6.exp: Check mod to unload is not required
  by a loading mod  Adapt getDependentLoadedModuleList and
  getDirectDependentList procedure to be able to take currently loading
  modules into account when looking for modules requiring a given module.
  Help to refrain a "module unload" order set within a modulefile to unload a
  module required by a loading module evaluated deeper in the stack.  Adapt
  exiting tests working on inconsistent situations.

2018-10-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/bash_completion.in: init: fix unload/switch cmd completion on bash

  * modulecmd.tcl.in, testsuite/modules.20-locate/090-memcache.exp,
  testsuite/modules.50-cmds/310-puts.exp,
  testsuite/modules.70-maint/080-help.exp: Add details on active interp on
  debug msg

  * testsuite/modulefiles.deps/u, testsuite/modules.50-cmds/370-deps.exp: ts:
  no spread of broken mod dep defs to next eval mod

  * testsuite/modules.70-maint/070-display.exp: ts: auto/no-auto/force args
  are ignored on other cmd

2018-10-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles/puts/9, testsuite/modules.50-cmds/310-puts.exp,
  testsuite/modules.90-avail/070-full.exp: ts: check puts is linked to correct
  interp

  * testsuite/etc/rc, testsuite/modules.20-locate/060-rc.exp: ts: check
  'module-info command' resolution from global rc

2018-10-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Use Tcl
  'if' or 'expr' ternary operator

  * modulecmd.tcl.in: Correctly filter a wild findModules cache  When it is
  used in a non-wild case later on.

2018-10-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.memcache/foo/1,
  testsuite/modulefiles.memcache/foo/2, testsuite/modulefiles.memcache/foo1/1,
  testsuite/modulefiles.memcache/foo1/2,
  testsuite/modulefiles.memcache/look/1,
  testsuite/modulefiles.memcache/look/2,
  testsuite/modulefiles.memcache/look/3,
  testsuite/modulefiles.memcache/look/4,
  testsuite/modulefiles.memcache/look/5,
  testsuite/modulefiles.memcache/look/6,
  testsuite/modulefiles.memcache/look/7,
  testsuite/modulefiles.memcache/look/8, testsuite/modulefiles.memcache/sp
  cial/1, testsuite/modules.20-locate/090-memcache.exp: ts: add 20/090 to test
  findModules cache

  * modulecmd.tcl.in: Adopt Tcl minimal escaping style (fix additional strs)

  * modulecmd.tcl.in: Remove useless msg prefix from some reportDebug calls

  * modulecmd.tcl.in: Brace value of default path separator on Win  As ';' is
  elsewhere interpreted as a Tcl syntax keyword

  * modulecmd.tcl.in: Brace g_pager setting as it can be empty  If Modules is
  configured with --without-pager for instance.

  * testsuite/modulefiles/alias/3.0, testsuite/modulefiles/function/2.0,
  testsuite/modules.50-cmds/076-alias-sub.exp,
  testsuite/modules.50-cmds/390-function.exp: ts: fix tests based on
  modulecmd.tcl content  As 'adopt minimal escaping style' change the piece of
  string searched by some tests.

2018-10-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Adopt Tcl minimal escaping style  See
  https://wiki.tcl.tk/41378

  * doc/source/modulefile.rst, modulecmd.tcl.in,
  testsuite/modulefiles/system/2.0, testsuite/modules.50-cmds/140-system.exp,
  testsuite/systest1: Fix 'system' to run cmd through shell  system modulefile
  command is intended to the command passed to it trough shell, like done on
  compatibility version.  So update system procedure to find correct shell on
  the current platform and run command through it.  Doing so, shell commands
  with backticks for instance are correctly run.  Fixes #205

  * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in,
  init/zsh-functions/_module: init: fix saved coll listing in
  bash/zsh/tcsh/fish completions  When no collection is currently found.

  * init/fish_completion, init/tcsh_completion.in: init: fix loaded modules
  listing in tcsh/fish completions

2018-10-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .../cookbook/top-priority-values/siteconfig.tcl: cookbook: port
  'top-priority-values' to v4.2

  * contrib/cookbook/unload-firstly-loaded/siteconfig.tcl: cookbook: port
  'unload-firstly-loaded' to v4.2

  * .../cookbook/inhibit-report-info/siteconfig.tcl: cookbook: add
  'inhibit-report-info' recipe  Helpful for #204

2018-10-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version
  4.2.0

  * MIGRATING.rst: doc: add cross-ref for each v4.2 new feature in MIGRATING

2018-10-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/151-module-onlytop.exp: ts: fix 50/151 for new
  block report style

  * MIGRATING.rst: doc: desc. new modfile cmds for v4.2 in MIGRATING

  * .travis.yml: travis: increase again git clone depth to catch last tag

2018-09-09  Ben Bowers <nanobowers@gmail.com>

  * doc/source/diff_v3_v4.rst, doc/source/modulefile.rst, modulecmd.tcl.in,
  testsuite/modulefiles/function/1.0, testsuite/modulefiles/function/2.0,
  testsuite/modules.50-cmds/390-function.exp,
  testsuite/modules.50-cmds/391-function-undo.exp,
  testsuite/modules.90-avail/070-full.exp: added set-function and
  unset-function commands  fixed linelength and tabs/spaces  adding
  set-function/unset-function documentation  adding tests for
  set-function/unset-function  fixed failing test for function modulefile
  additions

2018-10-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/mt: contrib: add 'mt' utility  Helps to run just a specific part
  of the test suite

  * modulecmd.tcl.in, testsuite/modulefiles/system/2.0,
  testsuite/modules.50-cmds/140-system.exp, testsuite/systest: Fix args pass
  on 'system' modfile command  Correctly transmit the arguments along with the
  command to execute. Need to use 'eval' for the underlying command to get its
  multiple args and not one joined string.  Fixes #201

2018-10-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in,
  init/zsh-functions/_module, modulecmd.tcl.in,
  testsuite/modules.50-cmds/180-unload.exp: Support 'remove' as an alias on
  'unload' command  As compatibility version does  Fixes #200

  * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in,
  init/zsh-functions/_module, modulecmd.tcl.in,
  testsuite/modules.50-cmds/180-unload.exp: Support 'del' as an alias on
  'unload' command  Like compatibility version does.  Fixes #200

2018-10-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.20-locate/057-mcookie.exp,
  testsuite/modules.50-cmds/122-prereq-fullpath.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/310-puts.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.50-cmds/359-allin-env.exp,
  testsuite/modules.50-cmds/360-restoreenv.exp,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/999-cleanup.exp: ts: fix tests when ts path
  includes spec chars

2018-10-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst: doc: desc. improved message report in MIGRATING

  * testsuite/modules.50-cmds/310-puts.exp: ts: fix 50/310 for block output
  rendering  Transform load tests in non-regexp test to avoid re escaping
  chars to count in line split mechanism.

2018-10-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/130-auto_handling.exp,
  testsuite/modules.20-locate/040-alias.exp,
  testsuite/modules.20-locate/043-virtual.exp,
  testsuite/modules.20-locate/047-symerrs.exp,
  testsuite/modules.20-locate/069-cross.exp,
  testsuite/modules.50-cmds/015-use.exp,
  testsuite/modules.50-cmds/017-use-undo.exp,
  testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.50-cmds/042-append-delim.exp,
  testsuite/modules.50-cmds/045-append-undo.exp,
  testsuite/modules.50-cmds/047-app-del-undo.exp,
  testsuite/modules.50-cmds/050-prepend.exp,
  testsuite/modules.50-cmds/052-prepend-delim.exp,
  testsuite/modules.50-cmds/055-prepend-undo.exp,
  testsuite/modules.50-cmds/057-pre-del-undo.exp,
  testsuite/modules.50-cmds/060-remove.exp,
  testsuite/modules.50-cmds/062-remove-delim.exp,
  testsuite/modules.50-cmds/065-remove-undo.exp,
  testsuite/modules.50-cmds/095-uname.exp,
  testsuite/modules.50-cmds/100-loglevel.exp,
  testsuite/modules.50-cmds/101-badfac.exp,
  testsuite/modules.50-cmds/105-trace.exp,
  testsuite/modules.50-cmds/110-verbose.exp,
  testsuite/modules.50-cmds/115-verbose-msg.exp,
  testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/121-prereq-module.exp,
  testsuite/modules.50-cmds/122-prereq-fullpath.exp,
  testsuite/modules.50-cmds/130-conflict-full.exp,
  testsuite/modules.50-cmds/131-conflict-module.exp,
  .../modules.50-cmds/132-conflict-fullpath.exp,
  testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.50-cmds/151-module-onlytop.exp,
  testsuite/modules.50-cmds/152-module-emptyarg.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/180-unload.exp,
  testsuite/modules.50-cmds/190-load.exp,
  testsuite/modules.50-cmds/195-load-recurs.exp,
  testsuite/modules.50-cmds/240-chdir.exp,
  testsuite/modules.50-cmds/250-x-resource.exp,
  testsuite/modules.50-cmds/282-info-command.exp,
  testsuite/modules.50-cmds/283-info-command-exp.exp,
  testsuite/modules.50-cmds/284-info-others.exp,
  testsuite/modules.50-cmds/302-interp-cascaded.exp,
  testsuite/modules.50-cmds/310-puts.exp,
  testsuite/modules.50-cmds/330-source.exp,
  testsuite/modules.50-cmds/340-modvar.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.50-cmds/370-deps.exp,
  testsuite/modules.50-cmds/371-deps2.exp,
  testsuite/modules.50-cmds/372-deps3.exp,
  testsuite/modules.50-cmds/373-deps4.exp,
  testsuite/modules.50-cmds/374-deps5.exp,
  testsuite/modules.50-cmds/375-deps6.exp,
  testsuite/modules.50-cmds/376-deps7.exp,
  testsuite/modules.50-cmds/380-altname.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/080-access.exp,
  testsuite/modules.70-maint/140-multiargs.exp,
  testsuite/modules.70-maint/190-emptyarg.exp,
  testsuite/modules.80-deep/022-switch.exp: ts: adapt tests to new block
  report style

  * modulecmd.tcl.in: Set a rec msg id for reload action  Create a record
  message id during the reload action to let underlying unload and load
  actions to know they are not the top-level action.  May be use later on to
  provide sum-up information resulting from this reload action.

  * modulecmd.tcl.in: Set a rec msg id for purge action  Create a record
  message id during the purge action to let underlying unload actions to know
  they are not the top-level action.  May be use later on to provide sum-up
  information resulting from this purge action.

2018-10-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Report unload/load made during a module restore  Report
  for the top level module restore all the modules that have been unloaded and
  loaded during this restore action.

  * modulecmd.tcl.in: Inhibit DepRe load phase on load if switch ongoing  If a
  switch action is ongoing, inhibit the DepRe load phase when loading switched
  to module. Instead add the DepRe module list to the already gathered DepRe
  list from the unload action of the switched out module.

  * modulecmd.tcl.in: Report additional load/unload during a module switch
  Report for the top level module switch all the additional modules that have
  been automatically unloaded or loaded during this main switch.  Report
  record is still enabled on the top unload/load actions part of switch
  action, but additional unload/load sumup information is recorded against
  switch report. This way errors popping during these main unload or load
  actions are reported against their relative unload/load record like if an
  unload or load has just occured.

2018-10-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Report additional load/unload during a module unload
  Report for the top level module unload all the additional modules that have
  been automatically unloaded or loaded during this main unload  When auto
  handling is disabled but some extra modules have been unloaded during the
  unload process (due to module load commands in modulefile) then report these
  extra unloads as Useless Requirement Unload (UReqUn)

  * modulecmd.tcl.in: Report additional load/unload during a module load  On a
  top level module load (main load action), report all the additional modules
  that have been unload or loaded for this main load process to succeed.
  Three helper procedures are added for this change: reportInfo,
  getDiffBetweenList and isMsgRecordIdTop.

  * modulecmd.tcl.in: Clear all modlist arg from getUnloadableLoadedModuleList
  res

2018-10-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.other/longerrword,
  testsuite/modules.70-maint/200-errdisp.exp: ts: add 70-maint/200-errdisp
  tests

  * modulecmd.tcl.in, testsuite/modules.00-init/120-siteconfig.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.70-maint/060-apropos.exp: Ask for a blankline prior next
  content with reportSeparateNextContent  Update displayElementList procedure
  to use this new reportSeparateNextContent procedure rather handling its own
  global flag (g_eltlist_disp).  Adapt testsuite related to displayElementList
  output

2018-10-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Split line if too wide in reportMsgRecord

  * modulecmd.tcl.in: Add procs to format conflict/prereq err msgs

2018-09-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Record messages to report them by block on load/unload
  Save warning, error and internal bug message produced during a cmdModuleLoad
  or cmdModuleUnload evaluation for a module to report all these messages as a
  dedicated "Loading <module>" or "Unloading <module>" block after evaluation.
  A recording ID is set when preparing a load or an unload evaluation. If a
  recording ID is found when running reportError, the message is recorded in a
  global structure rather reported immediately. Once evaluation is finished,
  all messages are rendered under a block.  Improve this way readability of
  those messages when evaluating mode may cascade a lot of stuff.

  * modulecmd.tcl.in, testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/130-conflict-full.exp,
  testsuite/modules.50-cmds/370-deps.exp,
  testsuite/modules.50-cmds/372-deps3.exp,
  testsuite/modules.50-cmds/373-deps4.exp,
  testsuite/modules.50-cmds/374-deps5.exp,
  testsuite/modules.50-cmds/376-deps7.exp,
  testsuite/modules.50-cmds/380-altname.exp: Neat prereq/conflict err msg when
  called from cmdModule procs  Remove useless 'WARNING: ' prefix as message
  goes to reportError.

  * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/090-uname-proc.exp,
  testsuite/modules.50-cmds/281-info-modulerc.exp,
  testsuite/modules.50-cmds/282-info-command.exp,
  testsuite/modules.50-cmds/283-info-command-exp.exp,
  testsuite/modules.70-maint/060-apropos.exp: Report global error raised from
  modfile eval as error  Was reported as WARNING previously which was
  confusing as these errors are fatal for modulefile evaluation.  Use prefix
  code "GLOBALERR " when raising error to catch them in execute-modulefile and
  distinguish the global errors from the Module internal bug.  As a side nice
  effect, these kind of evaluation error are now reported through reportError,
  which makes them automatically silent on global evaluation (like avail or
  search).  Adapt testsuite

  * modulecmd.tcl.in: Make report{Warning,InternalBug} rely on reportError

  * modulecmd.tcl.in: Handle nonewline report arg as boolean  Instead of a
  string. Remove this nonewline arg from reportDebug, reportWarning and
  reportError as it was unused.

2018-09-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .../cookbook/unload-firstly-loaded/siteconfig.tcl: cookbook: add
  'unload-firstly-loaded' recipe  Helpful for #198

  * doc/source/diff_v3_v4.rst: doc: desc. unload diff when multiple loaded
  mods match  Helpful for #198

  * doc/source/diff_v3_v4.rst, modulecmd.tcl.in,
  testsuite/modules.20-locate/043-virtual.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/180-unload.exp,
  testsuite/modules.80-deep/021-unload.exp,
  testsuite/modules.80-deep/068-transitive.exp: Only look at loaded modules
  when unloading  Adapt getPathToModule procedure to only look at the loaded
  module list when searching a module to unload. If passed module not found in
  this situation does not produce an "Unable to locate modulefile" issue.  So
  unloading an unexistent modulefile does not produce an error anymore, as it
  was the case on compatibility version.  Moreover switching from an
  unexistent modulefile to another modulefile does not produce the "Unable to
  locate modulefile" error and new module load is attempted. Compatibility
  version does not walk in this situation as on this version module to unload
  must be loaded elsewhere an error is triggered.  Adapt testsuite and diff
  document.  Fixes #199

2018-09-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst: doc: desc. module load/unload consistency in MIGRATING

2018-09-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: From warn/nuasked to onlyureq/onlyndep args on
  cmdModuleUnload  Change warn and nuasked arguments previously added to
  cmdModuleUnload procedure by onlyureq and onlyndep to better cope needs.
  'onlyureq' indicates only the not required anymore modules should be
  unloaded (not user asked modules or those not required by another loaded
  module). This flag is enabled when dealing with 'module load' commands in
  modulefiles interpreted in unload mode. If a module cannot be unloaded
  because it is required, then no error message is produced.  So 'onlyureq'
  argument replaces both 'warn' and 'nuasked' arguments.  'onlyndep' indicates
  that only modules not required by other modules should be unloaded. It is
  used when dealing with 'module unload' commands in modulefiles interpreted
  in load mode. This is useful when force mode is enabled to avoid breaking
  the dependency of a loaded module when trying to load a module declaring
  this dependency as a module to unload (acts like for conflicts).

2018-09-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Return err if conflicts found in cmdModuleLoad  When
  passed module cannot be loaded due to a conflict, set cmdModuleLoad to
  return an error code. Which may be interpreted as a sub-interpretation
  failure if this load was triggered by a 'module load' command in modulefile.

  * modulecmd.tcl.in, testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.50-cmds/152-module-emptyarg.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/372-deps3.exp,
  testsuite/modules.70-maint/140-multiargs.exp: Raise prereq error if 'module
  load' not satisfied  Call prereq procedure rather just bare setLoadedPrereq
  when interpreting 'module load' commands found in modulefiles. When
  auto_handling mode is enabled, prereq will also handle the cmdModuleLoad
  call. This call is still done in module procedure if auto_handling is
  disabled.  In case load is not satisfied, prereq error message will be
  obtained.

2018-09-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.deps/m1, testsuite/modulefiles.deps/m2,
  testsuite/modulefiles.deps/m3, testsuite/modulefiles.deps/m4,
  testsuite/modulefiles.deps/m5, testsuite/modulefiles.deps/m6,
  testsuite/modulefiles.deps/m7, testsuite/modules.50-cmds/376-deps7.exp: ts:
  add tests for module load/unload & auto_handling

2018-09-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.allin/allin/1,
  testsuite/modules.50-cmds/152-module-emptyarg.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.50-cmds/372-deps3.exp,
  testsuite/modules.50-cmds/375-deps6.exp: ts: adapt to modfile 'module
  unload' auto handling

  * testsuite/modules.20-locate/069-cross.exp,
  testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.50-cmds/152-module-emptyarg.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/195-load-recurs.exp,
  testsuite/modules.50-cmds/197-load-lots.exp,
  testsuite/modules.50-cmds/302-interp-cascaded.exp: ts: adapt to modfile
  'module load' auto/no-auto handling  More test case adaptation to follow the
  new 'module load' commands handling when the auto_handling mechanisms are
  enabled or disabled.  The tests changed here show different behavior whether
  auto_handling is enabled or not. Due to the fact that module unloads is not
  cascaded when auto_handling is enabled and UReqUn modules ares unloaded in
  reverse loaded order, not in the order specified within modulefile. These 2
  behavior changes lead to different result: command order change, unwind
  process when a module to unload is erroneous, or variable resulting value
  when unloading modules compete over same variable to set.

2018-09-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Auto handling and 'module unload' commands in modulefile
  'module unload' commands in modulefiles may impact the auto handling mode,
  so a few things need to be adapted:  - on 'load' mode, proceed with the
  unload which may raise error if the module is required by another loaded
  module.  - on 'load' mode, set a conflict toward modules to unload to ensure
  they will not be loaded afterward. If module has not been correctly unloaded
  prior the conflict definition, modulefile defining the 'module unload'
  command will not be loaded.  - on 'unload' mode, does nothing as the defined
  conflict ensure environment consistency and will forbid conflicting module
  load. If conflicting module has been loaded, it means this situation has
  been forced so there is no expectation this module who defines a 'module
  unload' effectively unloads this module which is required by the user.

2018-09-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.20-locate/069-cross.exp,
  testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/195-load-recurs.exp,
  testsuite/modules.50-cmds/197-load-lots.exp,
  testsuite/modules.50-cmds/302-interp-cascaded.exp,
  testsuite/modules.50-cmds/340-modvar.exp,
  testsuite/modules.80-deep/020-load.exp: ts: adapt to modfile 'module load'
  auto handling

  * modulecmd.tcl.in: Auto handling and 'module load' commands in modulefile
  'module load' commands in modulefiles may impact the auto handling mode, so
  a few things need to be adapted:  - on a 'load' mode, register each module
  passed to the module load command as a prereq of evaluated modulefile. This
  way the dependency will correctly be tracked  - on an 'unload' mode, proceed
  to the unload action when evaluating the 'module load' statement only if
  auto handling is disabled. Do nothing when evaluating the statement if auto
  handling is enabled, as these modules will be unloaded as part of the UReqUn
  mechanism. This way all unload/reload are triggered from the top unload
  action to ensure nothing will get in the way of the DepUn/DepRe/UReqUn
  processed from there.  Note that on an unload mode, modules are unloaded
  only if no other loaded modules require them and they have not been asked by
  user, elsewhere no unload is made to ensure the consistency of the loaded
  environment (as these modules are explicitely required by user or by another
  loaded module)  Treating these modules to unload through UReqUn mechanism
  leads to some behavior changes:  - unload interpretation is not cascaded
  anymore in this case and every module to unload are processed sequentially -
  a consequence of the previous point is that an error happening when
  processing the unload of a UReqUn module, will not unwinds the whole unload
  process as it does when auto_handling is disabled - unload happens in the
  reverse loaded order, not in the order defined by the 'module load' commands
  in the modulefile - as a consequence of this previous point, environment
  change after the whole unload may be different if the unloaded modules
  compete over a variable to set when unloading (last module to be unloaded
  will not be the same)

2018-09-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Add 'nuasked' arg to cmdModuleUnload proc  Add a
  'nuasked' argument to the cmdModuleUnload procedure to control whether or
  not only the non-user-asked modules should be unloaded.

2018-09-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Remove useless global var in cmdModuleUnload

  * modulecmd.tcl.in: Add 'warn' arg to cmdModuleUnload proc  Add a 'warn'
  argument to the cmdModuleUnload procedure to control whether or not display
  the warning message when a module cannot be unloaded because it is still
  required by other loaded module.  This argument is equal to true every time
  except for the interpretation of 'module load' commands in modulefile when
  mode is 'unload'. In this situation module unload may not be performed if
  module is still required but it is a normal situation like the UReqUn
  mechanism (only the useless modulefiles are automatically unloaded).

  * modulecmd.tcl.in: Avoid unloading mods from getDependentLoadedModuleList
  res  Excludes modules currently being unloaded from the result of
  getDependentLoadedModuleList procedure. This situation may appear when
  unloading a module containing itself a "module load" commands, which is
  translated into a "module unload" command on unload module. When in turns
  this modulefile targetted by the "module load" command is unloaded, it
  should not found its dependent modulefile who is currently being unloaded
  into its dependent result list to avoid UReqUn/DepUn infinite loop.

2018-09-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/120-siteconfig.exp: Fix uninitialized 'rows' var
  in displayElementList proc  Add test case in 00-init/120-siteconfig to
  demonstrate a setup that falls in the uninitialized 'rows' pit.  Fixes #195

2018-09-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst, doc/source/modulefile.rst, modulecmd.tcl.in,
  testsuite/modulefiles/mcookie/1, testsuite/modulefiles/mcookierc/.modulerc,
  testsuite/modulefiles/mcookierc/1,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.20-locate/057-mcookie.exp: Check version set in modulefile
  magic cookie  Magic cookie at the beginning of modulefiles may sometimes set
  a version number, for instance '#Module1.0'. Until now this version number
  was about a modulefile standard version. However there is no known
  modulefile API versioning and new modulefile commands are added along new
  Modules releases.  So the idea here is to match this version number
  optionally set on magic cookie and compare it to the modulecmd.tcl release
  version. If modulefile sets a version number greater than modulecmd.tcl
  version, this modulefile is not evaluated like when no magic cookie is set
  at all.  Add specific tests in 20-locate suite and adapt modulefile man page
  and MIGRATING doc.  Fixes #171

2018-09-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .travis.yml, INSTALL.rst, Makefile, Makefile.inc.in, configure,
  init/Makefile, init/bash.in, init/cmake.in, init/fish.in, init/ksh.in,
  init/perl.pm.in, init/python.py.in, init/r.R.in, init/ruby.rb.in,
  init/sh.in, init/tcl.in, init/zsh.in, modulecmd.tcl.in, site.exp.in,
  testsuite/install.00-init/060-quar.exp,
  testsuite/modules.00-init/110-quar.exp,
  testsuite/modules.70-maint/120-autoinit.exp: install: add
  --enable-quarantine-support configure opt  Add the ability to control
  whether or not code to support quarantine mechanism should be added to the
  module function and initialization scripts. Enabled by default  Fixes #167

2018-09-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .travis.yml, INSTALL.rst, Makefile, Makefile.inc.in, configure,
  init/Makefile, init/bash.in, init/ksh.in, init/sh.in, init/zsh.in,
  modulecmd.tcl.in, site.exp.in, testsuite/install.00-init/030-options.exp,
  testsuite/modules.70-maint/120-autoinit.exp: install: add
  --enable-silent-shell-debug-support configure opt  Add the ability to
  control whether or not code to support silent shell debug should be added to
  the module function and sh-kind initialization scripts. Enabled by default
  Fixes #166

2018-09-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/bash.in, init/ksh.in, init/sh.in, init/zsh.in, modulecmd.tcl.in,
  testsuite/modules.70-maint/120-autoinit.exp: init: split unset of shdbg and
  quar-related vars

  * .travis.yml, INSTALL.rst, configure: install: add --with-bin-search-path
  configure opt  Get in control of the path list used to search the tools
  required to build and configure Modules. Default value:
  /usr/bin:/bin:/usr/local/bin  Adapt one travis scenario to test the setup of
  a specific value for this configure option.  Fixes #164

  * MIGRATING.rst: doc: desc. alt name consistency in MIGRATING

2018-09-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/diff_v3_v4.rst, doc/source/module.rst,
  doc/source/modulefile.rst: doc: desc. alt name in manpages and diff doc
  Also fix some typos found on the way and clarifies commands where symbolic
  versions and aliases where already supported.

  * testsuite/modules.50-cmds/350-allin.exp: ts: skip allin tests if
  domainname tool not there

2018-08-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/etc/modulerc.altname, testsuite/modulefiles.deps/alt/.modulerc,
  testsuite/modulefiles.deps/alt/1, testsuite/modulefiles.deps/alt/7,
  testsuite/modulefiles.deps/alt/8,
  testsuite/modulefiles.deps/alt/dir/.modulerc,
  testsuite/modulefiles.deps/alt/dir/2, testsuite/modulefiles.deps/alt/dir/3,
  testsuite/modulefiles.deps/alt/dir/4, testsuite/modulefiles.deps/alt/dir/5,
  testsuite/modulefiles.deps/alt/dir/6, testsuite/modulefiles.deps/alt2/1,
  testsuite/modulefiles.deps/i1, testsuite/modulefiles.deps/i2,
  testsuite/modulefiles.deps/i3, testsuite/modulefiles.deps/i4,
  testsuite/modulefiles.deps/i5/1, testsuite/modulefiles.deps/i5/2,
  testsuite/modules.50-cmds/380-altname.exp: ts: add alt name specific tests

  * modulecmd.tcl.in: Match alt names on is-loading query  Look at all names
  resolving to loading modules for is-loading queries.

  * modulecmd.tcl.in, testsuite/modules.20-locate/031-defvers2.exp,
  testsuite/modules.80-deep/010-init_ts.exp,
  testsuite/modules.80-deep/020-load.exp,
  testsuite/modules.80-deep/068-transitive.exp,
  testsuite/modules.80-deep/999-cleanup.exp: Mod inherits alt names of its
  parent directories  Improve correlation especially on unload actions. A
  module alias set on a parent directory of a module will be added to the list
  of module alternative names, thus it will be matched when attempting an
  unload on this alias name.

2018-08-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.20-locate/068-transitive.exp,
  testsuite/modules.20-locate/069-cross.exp,
  testsuite/modules.80-deep/068-transitive.exp: ts: adapt resolution warning
  test with alt name  These warning messages are not displayed anymore as
  alternative names registered in environment are used instead of triggering a
  modulefile resolution through the modulepaths.

  * testsuite/modules.70-maint/153-is-loaded.exp,
  testsuite/modules.70-maint/157-info-loaded.exp: ts: adapt env consistency
  test results with alt name  Alternative name match leads to loaded
  environment correlation test. So this test is now performed most of the
  time.

2018-08-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Check mod alt names when comparing mod to names  When
  checking if a loaded module name matches a given string, also checks if
  match happens with any of the alternative names of mod.  Add
  doesModuleMatchesName procedure to check mod main and alternative names.
  Then replace 'string first' tests by a call to this new procedure in
  conflict, getLoadedWithClosestName, getLoadedMatchingName,
  doesModuleConflict and setModuleDependency procedures.  Register alternative
  names of module prior its modulefile evaluation as this information is
  required before any query of matching conflict (call to doesModuleConflict
  procedure or call to conflict procedure during modulefile evaluation).
  Fixes #143

2018-08-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.10-use/040-load.exp,
  testsuite/modules.10-use/080-access.exp,
  testsuite/modules.20-locate/031-defvers2.exp,
  testsuite/modules.20-locate/038-defcontext.exp,
  testsuite/modules.20-locate/048-symexec.exp,
  testsuite/modules.20-locate/050-locrc.exp,
  testsuite/modules.20-locate/060-rc.exp,
  testsuite/modules.20-locate/067-hidden.exp,
  testsuite/modules.20-locate/068-transitive.exp,
  testsuite/modules.20-locate/069-cross.exp,
  testsuite/modules.20-locate/070-homerc.exp,
  testsuite/modules.20-locate/075-symlink.exp,
  testsuite/modules.20-locate/080-access.exp,
  testsuite/modules.50-cmds/015-use.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/197-load-lots.exp,
  testsuite/modules.50-cmds/280-info-specified.exp,
  testsuite/modules.50-cmds/281-info-modulerc.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/080-access.exp,
  testsuite/modules.61-coll/999-cleanup.exp,
  testsuite/modules.80-deep/010-init_ts.exp,
  testsuite/modules.80-deep/020-load.exp,
  testsuite/modules.80-deep/021-unload.exp,
  testsuite/modules.80-deep/022-switch.exp,
  testsuite/modules.80-deep/068-transitive.exp,
  testsuite/modules.80-deep/080-access.exp,
  testsuite/modules.80-deep/999-cleanup.exp: ts: adapt existing tests to
  MODULES_LMALTNAME

2018-08-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Register loaded module alt names in MODULES_LMALTNAME  A
  module may have alternate names resulting from the module alias or symbolic
  version set through the resolution of its modulefile.  Here we start to keep
  track of these alternative names for every loaded modules by using an
  environment variable: MODULES_LMALTNAME. It follows the same tracking
  principle than used for keeping track of conflicts or prereqs between
  modules.  Helper procedures are introduced to get/set module alternative
  names. Right after loading modulefile, its alternative names are retrieved
  from the ::g_resolvedHash resolving array and set to the
  g_loadedModuleAltname array wich is then used to get and set alternative
  names value without dependency to the alias/symbol global resolving process.

  * MIGRATING.rst: doc: cite Flavours for AMHM in MIGRATING doc

  * MIGRATING.rst, doc/source/module.rst: doc: add DepUn + clarify
  UReqUn,DepRe  Especially regarding the inter-dependencies between these
  mechanisms and the specificities of the switch sub-command.

2018-08-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst, doc/source/module.rst, modulecmd.tcl.in,
  testsuite/modules.50-cmds/372-deps3.exp,
  testsuite/modules.50-cmds/373-deps4.exp,
  testsuite/modules.50-cmds/374-deps5.exp,
  testsuite/modules.50-cmds/375-deps6.exp: Brand auto handling mechanisms  *
  Requirement Load (ReqLo) * Dependent Reload (DepRe) * Useless Requirement
  Unload (UReqUn) * Dependent Unload (DepUn)  Mention these mechanism titles
  in MIGRATION and module man page documentations.  Reword code and tests that
  where previously using the DU/DR/URU short names.

2018-08-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/FAQ.rst, doc/source/conf.py: doc: mention createmodule.{sh,py}
  scripts in FAQ  Fixes #189

  * modulecmd.tcl.in: No prereq violation set for dependent on
  getDependentLoadedModuleList  Modules strongly requiring mods where
  previously set in prereq violation state as mod where unloaded. Remove that
  since these modules requiring mod during an unload (the DU modules) are now
  part of the list of modules passed as argument to
  getDependentLoadedModuleList. So this part of the code will not be run
  anymore.

  * modulecmd.tcl.in: Move remaining 'lsearch -exact == -1' to notInList

2018-08-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.50-cmds/375-deps6.exp: No prereq
  violation warn msg for DR mech or purge  During a purge or the unload phase
  of the DR mechanism do not warn about the unload process violating a prereq
  constraint.  In these situation, violation is due to the dependent module
  not being able to also unload or to unload prior its requirement. All of
  this because this dependent module is its in a violation state.

  * testsuite/modules.50-cmds/374-deps5.exp: ts: add DU/DR/URU tests on switch
  action

2018-08-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: No getPathToModule call in cmdModuleSwitch  Simplify
  code of cmdModuleSwitch which now relies more on cmdModuleUnload. There is
  no more need to resolve module to unload within cmdModuleSwitch as it is
  perfectly handled with its related modules to unload within cmdModuleUnload.

  * modulecmd.tcl.in: Rely on cmdModuleUnload DU/URU/DR during switch  Rely on
  the DU/URU mechanisms of cmdModuleUnload during a switch action and also the
  unload part of the DR mechanism.  cmdModuleUnload transmit the DR module
  list to cmdModuleSwitch for this procedure to be able to handle the reload
  phase of the DR mechanism once the newly switched-to module is loaded.  This
  change makes useless the being_reload argument of the
  getDependentLoadedModuleList procedure, as module candidates are now found
  when looking for DU modules in cmdModuleSwitch. being_reload argument is
  thus removed from getDependentLoadedModuleList proc.

2018-08-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.deps/h50, testsuite/modulefiles.deps/h51,
  testsuite/modulefiles.deps/h52, testsuite/modulefiles.deps/h53,
  testsuite/modulefiles.deps/h54, testsuite/modulefiles.deps/h55,
  testsuite/modulefiles.deps/h56, testsuite/modulefiles.deps/h57,
  testsuite/modulefiles.deps/h58, testsuite/modulefiles.deps/h60,
  testsuite/modulefiles.deps/h61, testsuite/modulefiles.deps/h62,
  testsuite/modulefiles.deps/h63, testsuite/modulefiles.deps/h64,
  testsuite/modulefiles.deps/h65, testsuite/modulefiles.deps/h66,
  testsuite/modulefiles.deps/h67, testsuite/modulefiles.deps/h68,
  testsuite/modulefiles.deps/h69, testsuite/modulefiles.deps/h70,
  testsuite/modulefiles.deps/h71, testsuite/modulefiles.deps/h72,
  testsuite/modulefiles.deps/h73, testsuite/modulefiles.deps/h74,
  testsuite/modules.50-cmds/373-deps4.exp: ts: add new tests DU
  mechanism-specific

2018-08-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.50-cmds/370-deps.exp,
  testsuite/modules.50-cmds/372-deps3.exp,
  testsuite/modules.50-cmds/373-deps4.exp,
  testsuite/modules.50-cmds/375-deps6.exp: Introduce "Dependent Unload" (DU)
  mechanism  Add the ability when auto handling is enabled to unload modules
  requiring the module asked for unload rather shouting an error.  Dependent
  Unload (DU) mechanism builds list of all modules actively requiring (not
  optionaly requiring it) the module set for unload or actively requiring
  modules part of this DU batch.  These DU modules are then unloaded prior
  main module unload, not to be there anymore once module asked for unload is
  in turn unloaded.  These DU modules also contributes to determine the list
  of Useless Requirement Unload (URU) modules. As unloading the DU modules may
  also add new URU modules.  These DU modules also contributes to determine
  the list of Dependent Reload (DR) modules. As unloading the DU modules may
  also add new DR modules.  Take this opportunity to clarify comments around
  Dependent Reload (DR) and Useless Requirement Unload (URU) mechanisms in
  cmdModuleUnload procedure.  Update "deps" test expectations now the DU
  mechanism is in place.

  * modulecmd.tcl.in: Pass a module list to getUnloadableLoadedModuleList
  Like for getDependentLoadedModuleList procedure makes
  getUnloadableLoadedModuleList able to process a module list passed as
  argument.

2018-08-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Compute 'drmodlist' only if auto enabled in
  cmdModuleLoad

  * modulecmd.tcl.in: Rename 'depmod' in 'drmodlist' in cmdModule{Load,Unload}
  Rename local variable 'depmod' into 'drmodlist' (dependent reload module
  list) for clarification.

  * modulecmd.tcl.in: Treat list of elt in appendNoDupToList  Adapt
  appendNoDupToList to treat list of elements rather just a single element

  * modulecmd.tcl.in: Work over 1 list in getDependentLoadedModuleList  Only
  use 'fulllist' as 'testlist' could be merged into 'fulllist'.

  * modulecmd.tcl.in: Work over 1 list in getUnloadableLoadedModuleList  Only
  use 'fulllist' as 'unmodlist' could be deduced from it in the end.

  * modulecmd.tcl.in: Add appendNoDupToList helper proc  Add procedure to
  append to a list an element if this element is not already part of this list

  * modulecmd.tcl.in: Add isInList/notInList helper procs  Introduce two
  helper procedures to check existence of an element in a list: isInList and
  notInList.  When this script compatibility will moved from Tcl>=8.4 to
  Tcl>=8.5, will change these helper procs in 'in' and 'ni'.

  * modulecmd.tcl.in: Add getDirectDependentList helper procedure  Add a
  getDirectDependentList procedure in charge of querying ::g_dependHash array
  to return list of dependent modules, stronly or weakly attached to passed
  mod.

2018-08-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modulefiles.deps/h30,
  testsuite/modulefiles.deps/h31, testsuite/modulefiles.deps/h32,
  testsuite/modulefiles.deps/h33, testsuite/modulefiles.deps/h34,
  testsuite/modulefiles.deps/h35, testsuite/modulefiles.deps/h36,
  testsuite/modulefiles.deps/h37, testsuite/modulefiles.deps/h38,
  testsuite/modulefiles.deps/h39, testsuite/modulefiles.deps/h40,
  testsuite/modules.50-cmds/373-deps4.exp: Pass a module list to
  getDependentLoadedModuleList  Adapt getDependentLoadedModuleList procedure
  to get a module list as argument rather a single module name.  Helps to get
  in one call all the dependent modules of those passed as argument.  Also
  improve correctness as sometimes multiple modules may violate constraint of
  another one. To get this module freed, all conflicting modules may set
  unloaded. So if all of these conflicting modules are passed as argument to
  getDependentLoadedModuleList, the dependent module will be seen freed and
  will be part of the procedure result list.

2018-08-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modulefiles.deps/h10,
  testsuite/modulefiles.deps/h11, testsuite/modulefiles.deps/h12,
  testsuite/modulefiles.deps/h20, testsuite/modulefiles.deps/h21,
  testsuite/modulefiles.deps/h22, testsuite/modulefiles.deps/h23,
  testsuite/modulefiles.deps/h24, testsuite/modulefiles.deps/h25,
  testsuite/modules.50-cmds/373-deps4.exp: Trigger full useless prereqs unload
  from main unload  Call from the main unload action the automatic unload of
  prereq modules that became useless due to main module unload.  To achieve
  that, getUnloadableLoadedModuleList procedure now returns to the tree of
  unloadable modules. Then cmdModuleUnload calls over this unloadable module
  list is made in a --no-auto mode not to deviate from what was computed
  before unload/load processing.

  * modulecmd.tcl.in, testsuite/modulefiles.deps/h1,
  testsuite/modulefiles.deps/h2, testsuite/modulefiles.deps/h3,
  testsuite/modulefiles.deps/h4, testsuite/modules.50-cmds/373-deps4.exp:
  Compute list of unloadable required modules prior unload  When unloading a
  module, its requirements that have been automatically loaded and are not
  required by any other module will automatically be unloaded when their
  dependent module is unloaded.  Compute the list of these unloadable required
  modules prior to the unload of their dependent module, not to be confused by
  currently being reloaded dependent module that may hold a requirement on
  these potentially unloadable modules.  Merge getRequiredLoadedModuleList
  procedure into getUnloadableLoadedModuleList that now takes the name of the
  module being unloaded as argument. Call getUnloadableLoadedModuleList prior
  any module change so determine that a required module will be useless after
  module unload if this required module has only one dependent (module
  currently being unloaded)

  * modulecmd.tcl.in: Add 'direct' arg to getDependentLoadedModuleList proc
  Split meaning of 'strong' argument into a new argument named 'direct'. Now
  strong means active dependency (not an optional one). And direct means only
  first-level dependent, when equals to 0 it means the full dependency tree
  should be returned.

2018-08-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.50-cmds/373-deps4.exp: Ensure
  --no-auto mode on load phase of dependent reload  Ensure dependent modules
  reload do not deviate from previously loaded list. Like already done during
  a "switch" action. Here now also applies to "load" and "unload" actions.

  * modulecmd.tcl.in, testsuite/modulefiles.deps/g1,
  testsuite/modulefiles.deps/g2, testsuite/modulefiles.deps/g3,
  testsuite/modulefiles.deps/g4, testsuite/modulefiles.deps/g5,
  testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/373-deps4.exp,
  testsuite/modules.50-cmds/375-deps6.exp: Split dependent reload process
  around main action  When reloading dependent module during a module load or
  a module unload, split this reload process into an unload phase, prior main
  action, than a load phase after main action.  Performing this way helps
  dependent module to get refreshed accurately with an unload phase in same
  situation than their last load. Then load phase of the reload process will
  be able to correctly adapt with new dependency loaded or unloaded.
  Proceeding this way enables modulefiles to adapt their variable definitions
  based on their loaded requirements. However when prereq or conflict
  violation constraint appear, unload stage of a dependent module may not
  correctly unset variable as described in nonreg tests.

2018-08-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Add reloadModuleList{Unload,Load}Phase procs  Split
  module reload process into 2 procedures: reloadModuleListUnloadPhase that
  unloads module list and reloadModuleListLoadPhase that load it again after.
  Adapt cmdModuleReload and cmdModuleSwitch to take advantage of these new
  procedures.

2018-08-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Handle uasked flag on cmdModuleSwitch proc  Add a
  'uasked' argument to the cmdModuleSwitch procedure to determine if the
  module to load during the switch action is asked by user (called on the
  command line or in a first level sourced file) or not.

2018-08-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * README.md: doc: fix cea-hpc/modules appveyor weblink

2018-08-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/rpm/environment-modules.spec.in: rpm: add gcc in build
  requirements for compat version  Reference:
  https://fedoraproject.org/wiki/Changes/Remove_GCC_from_BuildRoot

2018-08-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version
  4.1.4

  * doc/source/modulefile.rst, modulecmd.tcl.in,
  testsuite/modulefiles.deep/badmodvers/.version,
  testsuite/modulefiles.deep/badmodvers/dir1/2.0,
  testsuite/modulefiles.deep/badmodvers/foo,
  testsuite/modules.80-deep/010-init_ts.exp,
  testsuite/modules.80-deep/020-load.exp,
  testsuite/modules.80-deep/021-unload.exp,
  testsuite/modules.80-deep/030-display.exp,
  testsuite/modules.80-deep/050-whatis.exp,
  testsuite/modules.80-deep/999-cleanup.exp,
  testsuite/modules.90-avail/070-full.exp: ModulesVersion can only refer to
  modfile in same dir  Clarify modulefile man page and .version modulerc
  interpretation about ModulesVersion variable which can only refer to
  modulefile located in the same directory than where this .version modulerc
  file is located.  Report error if a nested ModulesVersion value is detected.
  This value is ignored.  Add tests in 80-deep suite on that change.
  Clarifies RH#979787 [1]  Fixes #176  [1]
  https://bugzilla.redhat.com/show_bug.cgi?id=979787

2018-08-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .../cookbook/top-priority-values/modulefiles/bar/1,
  .../cookbook/top-priority-values/modulefiles/foo/1,
  .../cookbook/top-priority-values/siteconfig.tcl: cookbook: add
  'top-priority-values' recipe

2018-08-16  Jan Synacek <jsynacek@redhat.com>

  * contrib/scripts/createmodule.py: contrib: createmodule.py: fix typo

  * contrib/scripts/createmodule.py: contrib: createmodule.py: open pipes in
  text mode  Otherwise, pipes are opened in binary mode and there are type
  errors further down the code.

  * contrib/scripts/createmodule.py: contrib: createmodule.py: fix tab
  indentation

2018-08-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * README.md: doc: add appveyor build badge in README

  * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Fix exec()
  usage in module func on Python3  Need to pass a variable namespace to exec()
  function to get the value of the '_mlstatus' variable generated by
  modulecmd.  This change enables to return correct status on Python3, as
  exec() function behaves differently between Python2 and 3 [1].  [1] https://
  stackoverflow.com/questions/15086040/behavior-of-exec-function-in-python-2-a
  nd-python-3

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.20-locate/080-access.exp,
  testsuite/modules.20-locate/081-access-rc.exp,
  testsuite/modules.60-initx/080-access.exp,
  testsuite/modules.61-coll/080-access.exp,
  testsuite/modules.80-deep/080-access.exp: ts: skip 08?-access tests if
  locked dir/file are still readable

  * testsuite/modules.10-use/080-access.exp: ts: skip tests in 10/080 when
  file readable in locked dir

  * contrib/gitlog2changelog.py: Fix gitlog2changelog.py script for python3

  * testsuite/install.00-init/005-init_ts.exp,
  testsuite/install.00-init/050-crossshell.exp: ts: sh and ksh shells on MSYS2
  behaves like on CYGWIN

2018-08-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.61-coll/020-savelist.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.90-avail/070-full.exp: ts: skip tty cols nb test if cols
  nb cannot be changed

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/090-uname-proc.exp,
  testsuite/modules.50-cmds/099-uname-cleanup.exp,
  testsuite/modules.50-cmds/281-info-modulerc.exp,
  testsuite/modules.50-cmds/282-info-command.exp,
  testsuite/modules.50-cmds/283-info-command-exp.exp,
  testsuite/modules.70-maint/060-apropos.exp: ts: adapt expected results when
  'domainname' not avail  On MSYS2, domainname is not available, which
  produces error message on 'uname/domain' modulefile. This message shows up
  on every 'module search' queries.  Here all impacted test cases are updated
  to expect this error message on all module search queries.

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.20-locate/075-symlink.exp,
  testsuite/modules.70-maint/130-aliases.exp: ts: skip mod symlink tests if no
  fs support

2018-08-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .appveyor.yml: Introduce AppVeyor config file for Windows CI

  * configure: install: look for 'make' on MSYS2

2018-08-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .travis.yml: travis: help compat configure to locate tclConfig.sh on osx

  * testsuite/modulefiles.deps/dh, testsuite/modulefiles.deps/ea,
  testsuite/modulefiles.deps/eb, testsuite/modulefiles.deps/ec,
  testsuite/modulefiles.deps/ed, testsuite/modulefiles.deps/ee,
  testsuite/modulefiles.deps/ef, testsuite/modulefiles.deps/eg,
  testsuite/modules.50-cmds/374-deps5.exp: ts: add complex deps tests on
  switch command

2018-08-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/373-deps4.exp: ts: add more missing prereq tests
  in 50/373

  * testsuite/modules.50-cmds/130-conflict-full.exp: ts: --{no-,}auto switch
  tests on conflict situations

2018-07-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/121-prereq-module.exp: ts: --{no-,}auto switch
  tests on prereq situations

2018-08-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: No auto_handling when reloading dependent during a
  switch  Disable auto handling mode during a switch command when reloading
  the modules dependent on "old" after "new" being loaded.  Proceed this way
  to avoid unsatisfied requirements, now "old" is unloaded to be solved
  automatically against user will.  As a result, some of the dependent modules
  may not be reloaded if "new" module does not satisfy their constraint.

2018-07-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.50-cmds/375-deps6.exp: Reload
  dependent and not conflicting anymore on switch  When switching a module by
  another, add to the list of module to reload, those modules dependent of
  unloaded module and those modules that were in conflict with unloaded module
  that can take advantage of this unload to be reloaded.

2018-07-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.deps/mv, testsuite/modules.50-cmds/375-deps6.exp:
  ts: warning when --force used in modulefile

2018-07-31  Colin Marquardt <github@marquardt-home.de>

  * modulecmd.tcl.in: Ignore dirs .SYNC/ (DesignSync) and .sos/ (SOS).

2018-07-28  Colin Marquardt <github@marquardt-home.de>

  * doc/source/FAQ.rst: Fix small typo.

2018-07-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst: doc: desc. conflict& prereq consistency/auto/force in
  MIGRATING

2018-07-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst: doc: desc. env var change in MIGRATING

  * doc/source/diff_v3_v4.rst: doc: desc. conflict& prereq
  consistency/auto/force in diff

2018-07-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst, doc/source/modulefile.rst: doc: desc. --force in
  module.1

2018-07-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst, doc/source/modulefile.rst: doc: desc.
  --auto/--no-auto/MODULES_AUTO_HANDLING in module.1

2018-07-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/130-conflict-full.exp: ts: --force over
  unsatisfied conflict when --no-auto

  * testsuite/modules.50-cmds/120-prereq-full.exp: ts: --force over
  unsatisfied prereq when --no-auto

2018-07-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.61-coll/030-save.exp: ts: check saving collection when
  constraint not satisfied

2018-07-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/375-deps6.exp: ts: add reload tests to
  50-cmds/375-deps6

  * modulecmd.tcl.in: No reload of all loaded mods if constraints are violated

  * testsuite/modules.50-cmds/375-deps6.exp: ts: add purge tests to
  50-cmds/375-deps6

  * modulecmd.tcl.in: Reload dependent if auto=1 on cmdModuleUnload  Makes
  'auto' argument of cmdModuleUnload procedure also control the reload of all
  dependent modules once passed mod has been unloaded.  'auto' argument was
  already controlling the automatic unload or modules required by passed mod
  to unload if these required modules have been loaded without being asked by
  users.  As a consequence the unloading phase of a purge or reload command or
  event the unload phase of the dependent modules of a switch command do not
  attempt to reload the dependent modules. (as these dependent modules will be
  handled through the same unload phase).

2018-07-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.deps/f1, testsuite/modulefiles.deps/f10,
  testsuite/modulefiles.deps/f11, testsuite/modulefiles.deps/f12,
  testsuite/modulefiles.deps/f13, testsuite/modulefiles.deps/f14,
  testsuite/modulefiles.deps/f15, testsuite/modulefiles.deps/f16,
  testsuite/modulefiles.deps/f17, testsuite/modulefiles.deps/f18,
  testsuite/modulefiles.deps/f19, testsuite/modulefiles.deps/f2,
  testsuite/modulefiles.deps/f20, testsuite/modulefiles.deps/f21,
  testsuite/modulefiles.deps/f22/1, testsuite/modulefiles.deps/f22/2,
  testsuite/modulefiles.deps/f23, testsuite/modulefiles.deps/f24,
  testsuite/modulefiles.deps/f25, testsuite/modulefiles.deps/f26,
  testsuite/modulefiles.deps/f27, testsuite/modulefiles.deps/f28,
  testsuite/modulefiles.deps/f29, testsuite/modulefiles.deps/f3,
  testsuite/modulefiles.deps/f4, testsuite/modulefiles.deps/f5,
  testsuite/modulefiles.deps/f6, testsuite/modulefiles.deps/f7,
  testsuite/modulefiles.deps/f8, testsuite/modulefiles.deps/f9,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/375-deps6.exp: ts: add deps tests when constraints
  are violated

  * modulecmd.tcl.in: Take disapearing prereq in account on
  getDependentLoadedModuleList  When 'being_unload' argument is set, which
  means passed mod is currently being unloaded, exclude from result list the
  loaded modules requiring passed mod. As this module is being unloaded, these
  dependend modules are entering in a violation state, so they cannot be
  reloaded.  This is achieved by temporarily defining the dependent modules in
  prereq violation state, for the time of the getDependentLoadedModuleList
  procedure execution.

2018-07-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Change sortPerModuleLoadedOrder into
  sortModulePerLoadedAndDepOrder  Rename sortPerModuleLoadedOrder proc into
  sortModulePerLoadedAndDepOrder. Sort is now refined to take dependencies
  into account: a dependent module should be placed prior the loaded module
  requiring it.  This refinement is made to avoid reloading multiple times the
  same loaded module when dependent module is set after module requiring it in
  list.

2018-07-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Add 'being_unload' arg to getDependentLoadedModuleList
  Indicate to getDependentLoadedModuleList procedure that targeting module is
  being unloaded. In this case the procedure will return loaded modules
  conflicting with passed mod and the dependent modules of these conflicting
  module.  These loaded modules are added to the dependent loaded module list
  since passed mod is being unloaded, they can be reloaded now the conflict
  violation is fixed. This reload garanties the modules previously in conflict
  are now correctly loaded and in an expected loaded order.

2018-07-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Introduce a 'force' arg to cmdModuleUnload  Add the
  ability to by-pass requiring modules check when unloading a module with an
  argument on the cmdModuleUnload procedure.  This new 'force' argument is
  enabled when reloading modules as the requirement by-pass will immediately
  be fixed once the required modules are loaded again.  Happens when reloading
  dependent modules on load, unload and switch actions. Some of the dependent
  modules may be excluded from reloading module list as they are in a
  prereq/conflict violation state so the remaining modules to reload may face
  some requiring modules still loaded, thus their reload need to be forced.
  Also enabled when purging loaded modules as all modules should be unloaded
  even if some violations make unloading prereqs before the module requiring
  them.

  * modulecmd.tcl.in: Rename 'autounload' cmdModuleUnload arg into 'auto'

2018-06-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: No collection save if mod constraints unsatisfied  Raise
  error on a save sub-command is some module constraint is not satisfied.

  * modulecmd.tcl.in: Update getDependentLoadedModuleList to return sane deps
  Add a sat_constraint argument to getDependentLoadedModuleList procedure to
  ask for dependent loaded modules whose constraints are satisfied. This
  argument is enabled when reloading dependent modules in load, unload and
  switch actions.  A areModuleConstraintsSatisfied procedure is introduced and
  getDependentLoadedModuleList relies on it to determine if a given loaded
  module has its constraints (prereq and conflict) satisfied as well as all
  loaded modules whose given loaded module depends on.  When no module name is
  passed to areModuleConstraintsSatisfied, this procedure returns if all
  loaded module satisfy their loading constraints.

2018-06-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Track loaded mod violating their prereq/conflict def
  Update setModuleDependency and unsetModuleDependency procedures to
  register/unregister in a ::g_prereqViolation array loaded modules violating
  their prereq definition (means they have been loaded in force mode or their
  prereq was unloaded in force mode).  Proceed in a similar way for conflicts
  with a ::g_conflictViolation array, still in setModuleDependency and
  unsetModuleDependency procedures.  For prereq violation, updates of
  dependent loaded module eventual violation is obtained by the re-compute of
  the dependency chain performed in setModuleDependency and
  unsetModuleDependency.  For conflict violation, updates of violation state
  is done for loaded modules conflicting with module processed by
  setModuleDependency or unsetModuleDependency. To achieve that list of
  conflicting-with loaded modules is set in ::g_conflictViolation array. This
  array is handled by setModuleConflictViolation and
  unsetModuleConflictViolation procedures.  doesModuleConflict procedure is
  updated on the way to skip from its result eventual own reflexive conflict,
  as this procedure is now called once mod is effectively loaded and not
  anymore prior mod load (as when it is called from cmdModuleLoad). Also check
  conflicting modules declared by current module are loaded or not.

2018-06-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/bash_completion.in, init/tcsh_completion.in, modulecmd.tcl.in,
  testsuite/modules.00-init/090-switches.exp: By-pass conflict/prereq issue
  with -f/--force cmd-line switches  Add -f/--force command-line switches to
  by-pass dependency consistency in case of * load of a module conflicting
  with another loaded module * load of a module where its declared
  requirements cannot be loaded * unload of a module required by other loaded
  module  These options are only useful for the load, unload and switch module
  sub-commands.  When a dependency is actually by-passed, still produce a
  warning message to help user learn that something has effectively been
  forced. Warning messages will be improved later-on to let user better
  understand what happens  Update shell completion scripts.

2018-06-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/example/siteconfig.tcl-1,
  testsuite/modules.50-cmds/130-conflict-full.exp: Remove g_force with path
  ref counting meaning  As a consequence a loaded module cannot be loaded a
  second time in force mode. So the check of this situation in conflict
  procedure is not useful anymore as the TESTSUITE_ENABLE_SITECONFIG_DEBUG
  non-regression test.

  * modulecmd.tcl.in, testsuite/modulefiles.deps/mu,
  testsuite/modules.50-cmds/372-deps3.exp: Ignore --auto/--no-auto opt when
  called from modulefile

2018-06-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst: doc: desc. MODULES_LM{CONFLICT,NOTUASKED,PREREQ} in
  module.1

2018-06-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in:
  init: add pager opts in shell completion scripts

  * testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/121-prereq-module.exp,
  testsuite/modules.50-cmds/122-prereq-fullpath.exp,
  testsuite/modules.50-cmds/370-deps.exp,
  testsuite/modules.50-cmds/371-deps2.exp,
  testsuite/modules.50-cmds/373-deps4.exp: ts: always test auto handling in
  50-cmds  Adapt tests relying on an enabled auto_handling mode in 50-cmds
  suite to set in any cases MODULES_AUTO_HANDLING environment variable to
  perform the tests whatever the auto_handling mode set at configure time.
  Also update prereq tests in 50-cmds/12* to check behaviors when
  auto_handling is disabled and when it is enabled.

  * init/bash_completion.in, init/tcsh_completion.in, modulecmd.tcl.in,
  testsuite/modules.00-init/130-auto_handling.exp: Add --auto/--no-auto
  command-line switches  Add the ability to control from the command-line
  whether the auto_hanling mode should be enabled or disabled.  Command-line
  option override auto_handling enablement value set with
  MODULES_AUTO_HANDLING environment variable or set at configure time.  Update
  tests and shell completion scripts.

  * modulecmd.tcl.in, testsuite/modules.00-init/130-auto_handling.exp:
  Introduce MODULES_AUTO_HANDLING  Add the ability to control whether the
  auto_handling mode should be enabled or disabled with an environment
  variable: MODULES_AUTO_HANDLING.  When set to 0 or 1, this environment
  variable overrides value set for auto_handling mode at configure time.

2018-06-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.deps/da, testsuite/modulefiles.deps/db,
  testsuite/modulefiles.deps/dc, testsuite/modulefiles.deps/dd,
  testsuite/modulefiles.deps/de, testsuite/modulefiles.deps/df,
  testsuite/modulefiles.deps/dg, testsuite/modules.50-cmds/373-deps4.exp: ts:
  add broken prereq in list tests

  * testsuite/home/coll10, testsuite/home/coll9,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/999-cleanup.exp: ts: add coll tests for
  --notuasked flag

2018-06-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.deps/ca, testsuite/modulefiles.deps/cb,
  testsuite/modulefiles.deps/cc, testsuite/modulefiles.deps/cd,
  testsuite/modulefiles.deps/ce, testsuite/modulefiles.deps/cf,
  testsuite/modulefiles.deps/cg, testsuite/modules.50-cmds/373-deps4.exp: ts:
  add dependent module handling checks

  * testsuite/modulefiles.deps/ms, testsuite/modulefiles.deps/mt,
  testsuite/modulefiles.deps/s, testsuite/modulefiles.deps/t,
  testsuite/modules.50-cmds/372-deps3.exp: ts: add prereq/conflict consistency
  checks

2018-06-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/370-deps.exp,
  testsuite/modules.50-cmds/372-deps3.exp: ts: add tests for is-loading
  conflict check  Introduce 372-deps3 tests to check dependency consistency
  whatever the auto_handling state.

2018-06-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Rework is-loading to get closer to is-loaded handling
  Rework is-loading procedure to call getLoadedMatchingName procedure like
  is-loaded. Adapt getLoadedMatchingName to work on loading modules rather
  loaded modules. To achieve that, isModulefileLoading,
  getModuleFromLoadingModulefile, getLoadingModuleFileList and
  getLoadingModuleList procedures are introduced to be called instead of their
  'loaded' counterpart when getLoadedMatchingName is called to look at loading
  modules.  Remove is-loading procedure from aliases set for modulefile
  interpreter as there is no current need to acces such kind of procedure
  during a modulefile evaluation context.

2018-06-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Check unloading mod prereq violation whatever
  auto_handling state  Ensure unloading module does not violate a registered
  prereq set by an already loaded module whatever the auto_handling state as
  it does not relate to an automatic handling mechanism.

  * modulecmd.tcl.in: Check loading mod conflict violation whatever
  auto_handling state  Ensure loading module does not violate a registered
  conflict set by an already loaded module whatever the auto_handling state as
  it does not relate to an automatic handling mechanism.

  * modulecmd.tcl.in: Raise is-loading conflict error whatever auto_handling
  state  Ensure conflict statement is satisfied even against modules currently
  being loaded. This error raise is not related to an automatic handling
  mechanism so it is triggered whatever the auto_handling state.

2018-06-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Loads from a top source cmd are considered user asked
  If module load orders are made from a 'module source' or during the source
  of an autoinit commands, consider these 'module load' orders found during
  evaluation as user asked orders.

2018-06-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.10-use/040-load.exp,
  testsuite/modules.20-locate/031-defvers2.exp,
  testsuite/modules.20-locate/035-defname.exp,
  testsuite/modules.20-locate/038-defcontext.exp,
  testsuite/modules.20-locate/040-alias.exp,
  testsuite/modules.20-locate/043-virtual.exp,
  testsuite/modules.20-locate/045-symvers.exp,
  testsuite/modules.20-locate/046-getsym.exp,
  testsuite/modules.20-locate/047-symerrs.exp,
  testsuite/modules.20-locate/048-symexec.exp,
  testsuite/modules.20-locate/050-locrc.exp,
  testsuite/modules.20-locate/060-rc.exp,
  testsuite/modules.20-locate/067-hidden.exp,
  testsuite/modules.20-locate/068-transitive.exp,
  testsuite/modules.20-locate/069-cross.exp,
  testsuite/modules.20-locate/070-homerc.exp,
  testsuite/modules.20-locate/075-symlink.exp,
  testsuite/modules.20-locate/080-access.exp,
  testsuite/modules.50-cmds/015-use.exp,
  testsuite/modules.50-cmds/017-use-undo.exp,
  testsuite/modules.50-cmds/020-setenv.exp,
  testsuite/modules.50-cmds/022-setenv-eschars.exp,
  testsuite/modules.50-cmds/025-setenv-undo.exp,
  testsuite/modules.50-cmds/028-setenv-refcount.exp,
  testsuite/modules.50-cmds/029-setenv-env.exp,
  testsuite/modules.50-cmds/030-unsetenv.exp,
  testsuite/modules.50-cmds/035-unsetenv-undo.exp,
  testsuite/modules.50-cmds/036-unsetenv-x.exp,
  .../modules.50-cmds/038-unsetenv-refcount.exp,
  testsuite/modules.50-cmds/039-unsetenv-env.exp,
  testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.50-cmds/042-append-delim.exp,
  testsuite/modules.50-cmds/045-append-undo.exp,
  testsuite/modules.50-cmds/047-app-del-undo.exp,
  testsuite/modules.50-cmds/049-append-env.exp,
  testsuite/modules.50-cmds/050-prepend.exp,
  testsuite/modules.50-cmds/052-prepend-delim.exp,
  testsuite/modules.50-cmds/055-prepend-undo.exp,
  testsuite/modules.50-cmds/057-pre-del-undo.exp,
  testsuite/modules.50-cmds/059-prepend-env.exp,
  testsuite/modules.50-cmds/060-remove.exp,
  testsuite/modules.50-cmds/062-remove-delim.exp,
  testsuite/modules.50-cmds/065-remove-undo.exp,
  testsuite/modules.50-cmds/069-remove-env.exp,
  testsuite/modules.50-cmds/075-alias.exp,
  testsuite/modules.50-cmds/076-alias-sub.exp,
  testsuite/modules.50-cmds/077-alias-undo.exp,
  testsuite/modules.50-cmds/078-refresh.exp,
  testsuite/modules.50-cmds/080-info-name.exp,
  testsuite/modules.50-cmds/081-info-user.exp,
  testsuite/modules.50-cmds/082-info-user-exp.exp,
  testsuite/modules.50-cmds/083-info-mode.exp,
  testsuite/modules.50-cmds/084-info-mode-exp.exp,
  testsuite/modules.50-cmds/085-info-flags.exp,
  testsuite/modules.50-cmds/086-info-shells.exp,
  testsuite/modules.50-cmds/087-info-shells-exp.exp,
  testsuite/modules.50-cmds/088-info-isloaded.exp,
  testsuite/modules.50-cmds/089-info-type.exp,
  testsuite/modules.50-cmds/095-uname.exp,
  testsuite/modules.50-cmds/100-loglevel.exp,
  testsuite/modules.50-cmds/101-badfac.exp,
  testsuite/modules.50-cmds/105-trace.exp,
  testsuite/modules.50-cmds/110-verbose.exp,
  testsuite/modules.50-cmds/115-verbose-msg.exp,
  testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/121-prereq-module.exp,
  testsuite/modules.50-cmds/122-prereq-fullpath.exp,
  testsuite/modules.50-cmds/130-conflict-full.exp,
  testsuite/modules.50-cmds/131-conflict-module.exp,
  .../modules.50-cmds/132-conflict-fullpath.exp,
  testsuite/modules.50-cmds/140-system.exp,
  testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.50-cmds/152-module-emptyarg.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/172-swap-app-delim.exp,
  testsuite/modules.50-cmds/173-swap-app-delim.exp,
  testsuite/modules.50-cmds/175-swap2.exp,
  testsuite/modules.50-cmds/177-swap-prep-delim.exp,
  testsuite/modules.50-cmds/178-swap-prep-delim.exp,
  testsuite/modules.50-cmds/180-unload.exp,
  testsuite/modules.50-cmds/190-load.exp,
  testsuite/modules.50-cmds/195-load-recurs.exp,
  testsuite/modules.50-cmds/197-load-lots.exp,
  testsuite/modules.50-cmds/200-break.exp,
  testsuite/modules.50-cmds/210-exit.exp,
  testsuite/modules.50-cmds/220-continue.exp,
  testsuite/modules.50-cmds/230-loop.exp,
  testsuite/modules.50-cmds/240-chdir.exp,
  testsuite/modules.50-cmds/250-x-resource.exp,
  testsuite/modules.50-cmds/260-getenv.exp,
  testsuite/modules.50-cmds/269-getenv-env.exp,
  testsuite/modules.50-cmds/280-info-specified.exp,
  testsuite/modules.50-cmds/281-info-modulerc.exp,
  testsuite/modules.50-cmds/282-info-command.exp,
  testsuite/modules.50-cmds/283-info-command-exp.exp,
  testsuite/modules.50-cmds/285-info-loaded.exp,
  testsuite/modules.50-cmds/300-interp.exp,
  testsuite/modules.50-cmds/301-interp-command.exp,
  testsuite/modules.50-cmds/302-interp-cascaded.exp,
  testsuite/modules.50-cmds/310-puts.exp,
  testsuite/modules.50-cmds/320-is-saved.exp,
  testsuite/modules.50-cmds/321-is-used.exp,
  testsuite/modules.50-cmds/322-is-avail.exp,
  testsuite/modules.50-cmds/330-source.exp,
  testsuite/modules.50-cmds/340-modvar.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.50-cmds/359-allin-env.exp,
  testsuite/modules.50-cmds/360-restoreenv.exp,
  testsuite/modules.50-cmds/370-deps.exp,
  testsuite/modules.50-cmds/371-deps2.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/080-access.exp,
  testsuite/modules.70-maint/020-update.exp,
  testsuite/modules.70-maint/030-purge.exp,
  testsuite/modules.70-maint/050-whatis-load.exp,
  testsuite/modules.70-maint/140-multiargs.exp,
  testsuite/modules.70-maint/180-reload.exp,
  testsuite/modules.70-maint/190-emptyarg.exp,
  testsuite/modules.80-deep/020-load.exp,
  testsuite/modules.80-deep/021-unload.exp,
  testsuite/modules.80-deep/022-switch.exp,
  testsuite/modules.80-deep/068-transitive.exp,
  testsuite/modules.80-deep/080-access.exp,
  testsuite/modules.91-sort/040-load.exp,
  testsuite/modules.95-version/020-load.exp,
  testsuite/modules.95-version/020-unload.exp,
  testsuite/modules.95-version/022-load2.exp,
  testsuite/modules.95-version/022-unload2.exp,
  testsuite/modules.95-version/040-xgetenv.exp: Record not user asked mod
  rather user asked  For better and simpler compatibility with previous
  modulecmd version and also for using same approach for both loaded
  environment and saved collections, track in the user environment the loaded
  modules that have not been asked by user (modules that have been
  automatically loaded as dependency of another loaded module) instead of
  tracking those loaded modules directly asked by user.  As a consequence
  MODULES_LMUASKED is transformed in MODULES_LMNOTUASKED and modulecmd.tcl
  code is adapted to determine the 'user asked' state from this negated
  record.  Adapt the whole testsuite consequently.

2018-06-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Rely on isModuleUserAsked rather
  getLoadedModuleUserAskedList  Use isModuleUserAsked procedure rather
  checking list result returned by getLoadedModuleUserAskedList procedure to
  determine a loaded module has been asked by user.

  * modulecmd.tcl.in: Replace reloadDepLoadedModuleList by cmdModuleReload
  Drop reloadDepLoadedModuleList procedure to make use of cmdModuleReload in
  cmdModuleLoad and cmdModuleUnload to reload dependent modules.  Adapt
  cmdModuleReload procedure to pass it a module list. If no list provided,
  proc falls back to the full currently loaded module list.

  * modulecmd.tcl.in: Unload/load dep mod one by one in cmdModuleSwitch  Like
  for reload command, change cmdModuleSwitch to unload then reload dependent
  module list one by one rather unloading/loading user asked modules only and
  rely on the dependency mechanism.  Doing so, the loaded module list that
  need to be reloaded is kept as it is exactly reloaded one by one.

  * modulecmd.tcl.in, testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/121-prereq-module.exp,
  testsuite/modules.50-cmds/122-prereq-fullpath.exp,
  testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.50-cmds/197-load-lots.exp,
  testsuite/modules.50-cmds/340-modvar.exp,
  testsuite/modules.50-cmds/370-deps.exp,
  testsuite/modules.50-cmds/371-deps2.exp: Unload/load dep mod one by one in
  reloadDepLoadedModuleList  Like for reload command, change
  reloadDepLoadedModuleList to unload then reload dependent module list one by
  one rather unloading/loading user asked modules only and rely on the
  dependency mechanism.  Doing so, the loaded module list that need to be
  reloaded is kept as it is exactly reloaded one by one.  No more need to mark
  currently loaded module as 'user asked' to avoid it to be reloaded during
  reloadDepLoadedModuleList, since we now proceed one by one. Remove
  setModuleUserAsked and unsetModuleUserAsked procedures now they are useless.

2018-06-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: No auto unload/load on restore/purge/reload  Call
  cmdModuleUnload with autounload of leaf dependencies disabled when
  performing a restore, purge or reload command. So it gets same unload
  behavior (processing each module one by one in specified order) whatever the
  auto_handling state.  Then reload module one by one on restore and reload
  commands whatever the auto_handling state to follow the same principle.

  * modulecmd.tcl.in: Add autounload arg to cmdModuleUnload  Control the
  automatic unload attempt of leaf requirements, once mod has been unloaded,
  with an 'autounload' argument on cmdModuleUnload proc.

  * testsuite/modulefiles.deps/aa, testsuite/modulefiles.deps/ab,
  testsuite/modulefiles.deps/ac, testsuite/modulefiles.deps/ad,
  testsuite/modulefiles.deps/ae, testsuite/modulefiles.deps/af,
  testsuite/modulefiles.deps/ag, testsuite/modulefiles.deps/ah,
  testsuite/modulefiles.deps/ai, testsuite/modulefiles.deps/aj,
  testsuite/modulefiles.deps/ak, testsuite/modulefiles.deps/bf,
  testsuite/modulefiles.deps/bi, testsuite/modulefiles.deps/bj,
  testsuite/modulefiles.deps/bk, testsuite/modules.50-cmds/371-deps2.exp: ts:
  add 50-cmds/371-deps2 tests

2018-06-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Add sortPerModuleLoadedOrder proc  Add
  sortPerModuleLoadedOrder procedure to sort passed module list following the
  module loaded order.

  * modulecmd.tcl.in: Rework code to get unload autoloaded mods when no more
  req  Add getRequiredLoadedModuleList proc to return all loaded modules in
  the requirement list of passed mod. This proc is called once mod has been
  unloaded, prior to the deletion of these requirement info in
  cmdModuleUnload.  Add getUnloadableLoadedModuleList proc, to return the
  modules that have been automatically loaded and could now be automatically
  unloaded, as no more modules requires them (mandatory or optionaly). This
  proc takes the result of getRequiredLoadedModuleList as input.

2018-06-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Gets dep modules with getDependentLoadedModuleList proc
  Introduce the 'getDependentLoadedModuleList' procedure to retrieve the
  currently loaded modules that require the mod passed as argument. By default
  only strong dependencies are returned (loaded modules directly depending on
  passed mod and not having an alternative module loaded to satisfy their
  prereq). When non-strong dependencies are asked, 'depended by' dependencies
  are searched recursively to return all loaded modules linked to passed
  module.  This new 'getDependentLoadedModuleList' procedure relies on the
  global arrays managed by setModuleDependency procedure. It replaces both
  getDepLoadedModuleList and getActiveDepLoadedModuleList procedures.

2018-05-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Move deps-related procs near similar oth procs

  * modulecmd.tcl.in: Build and maintain dep chain between loaded mod
  Introduce setModuleDependency and unsetModuleDependency procedures to build
  and maintain global arrays representing the dependency chain between loaded
  modulefiles based on the prereqs defined by each of these modules.
  setModuleDependency is called when module is loaded or current environment
  state is analyzed (called by setLoadedModule). unsetModuleDependency is
  called when module is unloaded (called by unsetLoadedModule).  The
  g_moduleDepend array is set for each loaded module as a mirror of their
  relative definition in g_loadedModulePrereq, where module reference in the
  prereq definition is replaced by the name of the actual loaded modulefile
  matching the module reference.  When a module reference of a prereq
  definition has no match among the currently loaded modulefiles, this unmet
  dependency is registered instead in the g_moduleUnmetDep global array. This
  situation happens when an optional dependency is not satisfied or if the
  load of a module has been forced (no dependency loaded prior to the load of
  the asked module).  Reverse arrays are also set (g_dependHash and
  g_unmetDepHash) to easy the search of registered elements.  When a new
  module is loaded, setModuleDependency looks if this new module was
  previously set as an unmet dependency. If it is the case, update dependent
  loaded modules dependency definition now the unmet dep is satisfied.

2018-05-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.deps/a, testsuite/modulefiles.deps/b,
  testsuite/modulefiles.deps/c, testsuite/modulefiles.deps/d,
  testsuite/modulefiles.deps/e, testsuite/modulefiles.deps/f,
  testsuite/modulefiles.deps/g, testsuite/modulefiles.deps/h,
  testsuite/modulefiles.deps/i, testsuite/modulefiles.deps/j,
  testsuite/modulefiles.deps/k, testsuite/modulefiles.deps/l,
  testsuite/modulefiles.deps/m, testsuite/modulefiles.deps/n,
  testsuite/modulefiles.deps/o, testsuite/modulefiles.deps/p,
  testsuite/modulefiles.deps/q, testsuite/modulefiles.deps/r,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/370-deps.exp: ts: add 50-cmds/370-deps tests

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/121-prereq-module.exp,
  testsuite/modules.50-cmds/122-prereq-fullpath.exp,
  testsuite/modules.50-cmds/130-conflict-full.exp,
  testsuite/modules.50-cmds/131-conflict-module.exp,
  .../modules.50-cmds/132-conflict-fullpath.exp: ts: add procs to format
  conflict/prereq err msg

  * .travis.yml: travis: enable autohandling on one test config

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp: ts: clean new MODULES_LM* env
  vars at ts startup

  * testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/121-prereq-module.exp,
  testsuite/modules.50-cmds/122-prereq-fullpath.exp: ts: adapt prereq tests if
  autohandling is enabled

2018-05-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Rework mod user asked internal handling  Change module
  user asked internal handling (registering/unregistering in global
  structures) to get similar handling than loaded module list.  Rename
  g_lmUasked into g_loadedModuleUasked to get closer to the name used for
  conflicts and prereqs registration.  Primarily sets g_loadedModuleUasked
  through setLoadedModule procedure and unsets through unsetLoadedModule. Add
  isModuleUserAsked procedure to check if passed mod has been asked by user.
  Temporarily add setModuleUserAsked and unsetModuleUserAsked procedures to
  set/unset g_loadedModuleUasked array, for use around
  reloadDepLoadedModuleList call in cmdModuleLoad.

  * modulecmd.tcl.in: Clean currentModule var from cmdModule{Load,Unload}
  procs

2018-05-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: No uasked found on current env means all are uasked
  When looking at the current environement state in cacheCurrentModules
  procedure, if no user asked modules are found then all loaded modules are
  user asked modules.  Helps transition between a Modules version not knowing
  about 'user asked' modules and a newer Modules version introducting this
  tracking feature. Environment setup on the previous Modules version will
  still be functionnal if newer Modules version is upgraded live.

  * modulecmd.tcl.in: Ignore '--notuasked' flag in case it is passed on module
  load  --notuasked flag enables to keep track of the user asked state in
  saved collection (by flagging those not directly asked by user). Ignore it
  if passed directly to a 'module load' command (do not raise error) in case a
  collection file is sourced like a shell script.  Do not advertise this new
  flag as it has no effect and should be kept internal as user asked mechanism
  is automatically controlled from the location the module load command is
  issued.

  * modulecmd.tcl.in: No uasked found in collection means all are usaked  If
  none of the loaded modules found in collection is marked 'user asked', this
  means all modules saved are user asked to make collections saved prior to
  the user asked change still valid on new Modules version.

  * modulecmd.tcl.in: Track user asked loaded modules whatever auto_handling
  state  Keep track of the loaded modules asked by user whether the
  auto_handling option is enabled or disabled. A loaded module has been asked
  by user when its load order is coming from the user not from the evaluation
  of a modulefile.  Keeping track of this state in any cases will help to
  introduce per-module command automatic handling. Also saved collections do
  not break when auto_handling is enabled or disabled on Modules installation
  afterward.  An 'uasked' first position argument is set on cmdModuleLoad
  procedure to pass the user asked state. cmdModuleReload is reworked to
  correctly restore the user asked state for each module unloaded in its first
  operation phase.  cmdModuleSwitch always sets the module it loads as user
  asked. Should be discussed later on in conjunction with the behavior of this
  sub-command when called from a modulefile.  Collections sub-commands and
  related utility procedures have been reworked to save and restore the
  non-'user asked' state of the loaded modules. Non-'user asked' state is
  recorded rather 'user asked' state to fit collection saved prior to this
  change were every modules mentionned in collection are considered 'user
  asked'. When restoring a collection currently loaded modules are unloaded to
  be loaded again even if they got same loading position than in collection
  but a different user asked state. Non-user asked state is saved in
  collection by adding the '--notuasked' argument on recorded module load
  lines.

2018-05-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Register conflict/prereq/usaked whatever auto_handling
  state  Get, set and export in environment loaded modules declared conflicts,
  prereqs and their 'user asked' state whether the auto_handling option is
  enabled or not.  Keep g_auto_handling to control automated actions but
  information registering is perfomed in any cases.  Will help to introduce
  per-module command automatic handling and by-pass mechanism, still keeping a
  consistent intel.

  * modulecmd.tcl.in: Initial rework of mod prereq internal handling  Change
  module prereq internal handling (registering/unregistering in global
  structures) to get similar handling than loaded module list.  Rename
  g_lmPrereq into g_loadedModulePrereq.  Remove ModulesCurrentPrereq global
  list, that were registering the prereq list of the currently evaluated
  module. Now directly registers into g_loadedModulePrereq. If evaluation goes
  wrong and is aborted, then prereqs registered in g_loadedModulePrereq are
  unregistered to correctly restore state prior evaluation.  Introduce set,
  unset and get accessors for the g_modulesPrereq array. getLoadedPrereq is
  also able to return its result serialized to manage MODULES_LMPREREQ
  environment variable.

2018-05-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Rework mod conflict internal handling  Change module
  conflict internal handling (registering/unregistering in global structures)
  to get similar handling than loaded module list.  Rename g_lmConflict into
  g_loadedModuleConflict.  Remove ModulesCurrentConflict global list, that
  were registering the conflict list of the currently evaluated module. Now
  directly registers into g_loadedModuleConflict, to be able to check only one
  structure to get both loaded and loading defined conflicts. If evaluation
  goes wrong and is aborted, then conflicts registered in
  g_loadedModuleConflict are unregistered to correctly restore state prior
  evaluation.  Introduce set, unset and get accessors for the
  g_loadedModuleConflict array. getLoadedConflict is also able to return its
  result serialized to manage MODULES_LMCONFLICT environment variable.  A
  doesModuleConflict procedure is also added to return whether or not passed
  module conflicts with currently defined rules.

2018-05-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Parse MODULES_LMUASKED with getLoadedModuleUserAskedList
  proc

  * modulecmd.tcl.in: Parse MODULES_LMPREREQ with getLoadedModulePrereqList
  proc

  * modulecmd.tcl.in: Parse MODULES_LMCONFLICT with
  getLoadedModuleConflictList proc

  * modulecmd.tcl.in: Rename g_def_separator_lvl{2,3} in g_sub{1,2}_separator
  And normalize access to these global variables (using $::varname).

2018-05-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.rst, Makefile, Makefile.inc.in, configure, modulecmd.tcl.in,
  site.exp.in: install: add --enable-auto-handling configure opt  Enable or
  disable the automatic modulefile handling at configure time with
  '--enable-auto-handling' option. Disabled by default, will be set enbaled by
  default in next major release (v5).  Throw this configure information to the
  testsuite to adapt result depending of feature enablement.

2018-05-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Set g_auto_handling as
  g_orig_load_control+g_auto_resolve_dep  Gather all automatic module handling
  features enablement under a single g_auto_handling global variable, rather
  g_orig_load_control and g_auto_resolve_dep. Automated actions are all
  enabled or all disabled to simplify tests and configurations.

  * testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.10-use/040-load.exp,
  testsuite/modules.20-locate/031-defvers2.exp,
  testsuite/modules.20-locate/035-defname.exp,
  testsuite/modules.20-locate/038-defcontext.exp,
  testsuite/modules.20-locate/040-alias.exp,
  testsuite/modules.20-locate/043-virtual.exp,
  testsuite/modules.20-locate/045-symvers.exp,
  testsuite/modules.20-locate/046-getsym.exp,
  testsuite/modules.20-locate/047-symerrs.exp,
  testsuite/modules.20-locate/048-symexec.exp,
  testsuite/modules.20-locate/050-locrc.exp,
  testsuite/modules.20-locate/060-rc.exp,
  testsuite/modules.20-locate/067-hidden.exp,
  testsuite/modules.20-locate/068-transitive.exp,
  testsuite/modules.20-locate/069-cross.exp,
  testsuite/modules.20-locate/070-homerc.exp,
  testsuite/modules.20-locate/075-symlink.exp,
  testsuite/modules.20-locate/080-access.exp,
  testsuite/modules.50-cmds/015-use.exp,
  testsuite/modules.50-cmds/017-use-undo.exp,
  testsuite/modules.50-cmds/020-setenv.exp,
  testsuite/modules.50-cmds/022-setenv-eschars.exp,
  testsuite/modules.50-cmds/025-setenv-undo.exp,
  testsuite/modules.50-cmds/028-setenv-refcount.exp,
  testsuite/modules.50-cmds/029-setenv-env.exp,
  testsuite/modules.50-cmds/030-unsetenv.exp,
  testsuite/modules.50-cmds/035-unsetenv-undo.exp,
  testsuite/modules.50-cmds/036-unsetenv-x.exp,
  .../modules.50-cmds/038-unsetenv-refcount.exp,
  testsuite/modules.50-cmds/039-unsetenv-env.exp,
  testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.50-cmds/042-append-delim.exp,
  testsuite/modules.50-cmds/045-append-undo.exp,
  testsuite/modules.50-cmds/047-app-del-undo.exp,
  testsuite/modules.50-cmds/049-append-env.exp,
  testsuite/modules.50-cmds/050-prepend.exp,
  testsuite/modules.50-cmds/052-prepend-delim.exp,
  testsuite/modules.50-cmds/055-prepend-undo.exp,
  testsuite/modules.50-cmds/057-pre-del-undo.exp,
  testsuite/modules.50-cmds/059-prepend-env.exp,
  testsuite/modules.50-cmds/060-remove.exp,
  testsuite/modules.50-cmds/062-remove-delim.exp,
  testsuite/modules.50-cmds/065-remove-undo.exp,
  testsuite/modules.50-cmds/069-remove-env.exp,
  testsuite/modules.50-cmds/075-alias.exp,
  testsuite/modules.50-cmds/076-alias-sub.exp,
  testsuite/modules.50-cmds/077-alias-undo.exp,
  testsuite/modules.50-cmds/078-refresh.exp,
  testsuite/modules.50-cmds/080-info-name.exp,
  testsuite/modules.50-cmds/081-info-user.exp,
  testsuite/modules.50-cmds/082-info-user-exp.exp,
  testsuite/modules.50-cmds/083-info-mode.exp,
  testsuite/modules.50-cmds/084-info-mode-exp.exp,
  testsuite/modules.50-cmds/085-info-flags.exp,
  testsuite/modules.50-cmds/086-info-shells.exp,
  testsuite/modules.50-cmds/087-info-shells-exp.exp,
  testsuite/modules.50-cmds/088-info-isloaded.exp,
  testsuite/modules.50-cmds/089-info-type.exp,
  testsuite/modules.50-cmds/095-uname.exp,
  testsuite/modules.50-cmds/100-loglevel.exp,
  testsuite/modules.50-cmds/101-badfac.exp,
  testsuite/modules.50-cmds/105-trace.exp,
  testsuite/modules.50-cmds/110-verbose.exp,
  testsuite/modules.50-cmds/115-verbose-msg.exp,
  testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/121-prereq-module.exp,
  testsuite/modules.50-cmds/122-prereq-fullpath.exp,
  testsuite/modules.50-cmds/130-conflict-full.exp,
  testsuite/modules.50-cmds/131-conflict-module.exp,
  .../modules.50-cmds/132-conflict-fullpath.exp,
  testsuite/modules.50-cmds/140-system.exp,
  testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.50-cmds/152-module-emptyarg.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/172-swap-app-delim.exp,
  testsuite/modules.50-cmds/173-swap-app-delim.exp,
  testsuite/modules.50-cmds/175-swap2.exp,
  testsuite/modules.50-cmds/177-swap-prep-delim.exp,
  testsuite/modules.50-cmds/178-swap-prep-delim.exp,
  testsuite/modules.50-cmds/180-unload.exp,
  testsuite/modules.50-cmds/190-load.exp,
  testsuite/modules.50-cmds/195-load-recurs.exp,
  testsuite/modules.50-cmds/197-load-lots.exp,
  testsuite/modules.50-cmds/200-break.exp,
  testsuite/modules.50-cmds/210-exit.exp,
  testsuite/modules.50-cmds/220-continue.exp,
  testsuite/modules.50-cmds/230-loop.exp,
  testsuite/modules.50-cmds/240-chdir.exp,
  testsuite/modules.50-cmds/250-x-resource.exp,
  testsuite/modules.50-cmds/260-getenv.exp,
  testsuite/modules.50-cmds/269-getenv-env.exp,
  testsuite/modules.50-cmds/280-info-specified.exp,
  testsuite/modules.50-cmds/281-info-modulerc.exp,
  testsuite/modules.50-cmds/282-info-command.exp,
  testsuite/modules.50-cmds/283-info-command-exp.exp,
  testsuite/modules.50-cmds/285-info-loaded.exp,
  testsuite/modules.50-cmds/300-interp.exp,
  testsuite/modules.50-cmds/301-interp-command.exp,
  testsuite/modules.50-cmds/302-interp-cascaded.exp,
  testsuite/modules.50-cmds/310-puts.exp,
  testsuite/modules.50-cmds/320-is-saved.exp,
  testsuite/modules.50-cmds/321-is-used.exp,
  testsuite/modules.50-cmds/322-is-avail.exp,
  testsuite/modules.50-cmds/330-source.exp,
  testsuite/modules.50-cmds/340-modvar.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.50-cmds/359-allin-env.exp,
  testsuite/modules.50-cmds/360-restoreenv.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/080-access.exp,
  testsuite/modules.70-maint/020-update.exp,
  testsuite/modules.70-maint/030-purge.exp,
  testsuite/modules.70-maint/050-whatis-load.exp,
  testsuite/modules.70-maint/140-multiargs.exp,
  testsuite/modules.70-maint/180-reload.exp,
  testsuite/modules.70-maint/190-emptyarg.exp,
  testsuite/modules.80-deep/020-load.exp,
  testsuite/modules.80-deep/021-unload.exp,
  testsuite/modules.80-deep/022-switch.exp,
  testsuite/modules.80-deep/068-transitive.exp,
  testsuite/modules.80-deep/080-access.exp,
  testsuite/modules.91-sort/040-load.exp,
  testsuite/modules.95-version/020-load.exp,
  testsuite/modules.95-version/020-unload.exp,
  testsuite/modules.95-version/022-load2.exp,
  testsuite/modules.95-version/022-unload2.exp,
  testsuite/modules.95-version/040-xgetenv.exp: ts: adapt test results for
  asked mod registration

2018-05-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Register module asked for load in MODULES_LMUASKED
  Change name of the environment variable used to register the names of
  modules explicitely asked for load by user (not loaded automatically as
  dependency): from _LMSTICKY_ to MODULES_LMUASKED in order to get a MODULES_
  common prefix for all Modules-specific environment variables.

2014-05-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Introducing automatic module dependency resolution
  Introduce an automatic module dependency resolution by attempting during a
  "module load" to load modules declared as prereq and attempting during a
  "module unload" to unload modules declared as prereq if they have been
  loaded automatically.  To distinguish between modules loaded upon user
  request or automatically for dependency resolution, module load requested by
  user are registered as "sticky" in _LMSTICKY_ environment variable.
  Additionnally all switched modules are considered sticky.  Module commands
  managing the whole set of loaded modules (save, restore, purge and reload)
  have been adapted to only work over the sticky modules to take benefit from
  the dependency resolution. Moreover, when reloading modules declaring a
  prereq during a switch, load or unload action, only sticky modules are
  reloaded.  Original dependency management behavior is preserved by default.
  Automatic dependency resolution can be enabled by setting to 0 the
  g_auto_resolve_dep variable in modulecmd.tcl script.

2018-04-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/121-prereq-module.exp,
  testsuite/modules.50-cmds/122-prereq-fullpath.exp,
  testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.50-cmds/350-allin.exp: ts: adapt test results for prereq
  registration

2018-04-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Register declared prereq in MODULES_LMPREREQ  Change
  name of the environment variable used to register prereqs declared by loaded
  modules: from _LMPREREQ_ to MODULES_LMPREREQ in order to get a MODULES_
  common prefix for all Modules-specific environment variables.

2014-04-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Registering prereq of loaded modules to ensure they are
  satisfied  When defining a prereq with module "b" in module "a", this prereq
  is not satisfied when module "b" is unloaded whereas module "a" is still
  loaded. It seems interesting to guaranty that prereq modules cannot be
  unloaded if modules requiring them are still loaded.  To do so, this patch
  introduces the registration of the prereq declared by loaded modules in
  _LMPREREQ_ environment variable. Checks have been added to cmdModuleUnload
  procedure to forbid the unload of modules targeted by a registered prereq.
  In case of a switch action, all modules declaring a prereq on the switched
  module are reloaded. cmdModuleSwitch procedure first unloads the modules
  declaring prereq, then proceed switch as usual and after that loads again
  the modules declaring prereq.  Similarly to switch action, modules declaring
  an optional prereq on a module are reloaded when this module is loaded or
  unloaded. cmdModuleLoad and cmdModuleUnload procedures reload the modules
  declaring prereq after their main load/unload process to avoid reloading
  modules whereas prereq-module fails to load/unload.  Original load control
  behavior is preserved by default. New behavior can be enabled by setting to
  0 the g_orig_load_control variable in modulecmd.tcl script.

2018-04-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.50-cmds/130-conflict-full.exp,
  testsuite/modules.50-cmds/131-conflict-module.exp,
  testsuite/modules.50-cmds/132-conflict-fullpath.exp,
  testsuite/modules.50-cmds/195-load-recurs.exp,
  testsuite/modules.80-deep/020-load.exp,
  testsuite/modules.80-deep/022-switch.exp,
  testsuite/modules.80-deep/080-access.exp: ts: adapt test results for
  conflict registration

  * modulecmd.tcl.in: Register declared conflict in MODULES_LMCONFLICT  Change
  name of the environment variable used to register conflicts declared by
  loaded modules: from _LMCONFLICT_ to MODULES_LMCONFLICT in order to get a
  MODULES_ common prefix for all Modules-specific environment variables.

2014-03-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Registering conflict of loaded modules to ensure they
  are satisfied  When defining a conflict with module "b" in module "a", this
  conflict is not satisfied when loading module "b" unless this module defines
  a conflict with "a". Since it happens that modules "a" and "b" are not
  managed by the same people, it seems interesting to guaranty that conflicts
  defined by loaded modules are always satisfied.  To do so, this patch
  introduces the registration of the conflict declared by loaded modules in
  _LMCONFLICT_ environment variable. Checks have been added to cmdModuleLoad
  procedure to forbid the load of modules targeted by a registered conflict.
  Since modulefile may directly call module load, an is-loading procedure has
  been introduced to also ensure that current module will not be loaded if it
  defines a conflict toward a module which is currently loading.  Original
  load control behavior is preserved by default. New behavior can be enabled
  by setting to 0 the g_orig_load_control variable in modulecmd.tcl script.

2018-07-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile: install: simplify RPM release number generation  Just append
  current build number to previous RPM release number, rather making a complex
  and too much specific computation.  Thanks to Michael Sternberg
  (@mgsternberg) for challenging the way this numbering generation worked.
  Fixes #175

2018-07-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.rst, Makefile, configure: install: use sed rather grep and cut
  Use sed command rather a combination of grep and cut in 'configure' and
  'Makefile' scripts. As a result grep and cut commands are not required
  anymore to install new Modules releases.  However, grep is still required to
  install compatibility version.  Big thanks to Michael Sternberg
  (@mgsternberg) for crafting the right sed commands to achieve a more
  efficient installation process.  Fixes #175

  * init/ksh.in: init: fix ksh script for ksh88 compatibility  Fix a ksh88
  incompatible assignment and use '.' rather 'source' to source external
  script.  Fixes #159

  * modulecmd.tcl.in, testsuite/modulefiles/loc_rc010/.1.0,
  testsuite/modulefiles/loc_rc010/.modulerc,
  testsuite/modulefiles/loc_rc010/2.0,
  testsuite/modules.20-locate/067-hidden.exp,
  testsuite/modules.70-maint/130-aliases.exp,
  testsuite/modules.90-avail/070-full.exp: Handle default version sets on an
  hidden modulefile  When looking for the default version of a given
  modulefile, if this default is set on an hidden modulefile, this hidden
  modulefile were not found as the initial modulefile search were not looking
  for hidden modulefiles.  When this situation is now spotted, modulefile
  search is started again with inclusion of hidden files.  Add a test for this
  situation in 20-locate/067-hidden.  Fixes #177

  * init/bash_completion.in, init/zsh-functions/_module: init: enable ERE on
  sed with '-E' argument rather '-r'  When enabling Extended Regular
  Expression (ERE) on sed command, use the '-E' argument (rather '-r') for
  compatibility with OS X's and BSDs' sed.  'sed -E' is used in bash and zsh
  completion scripts. ERE are required to interpret alternation character '|'.
  Fixes #178

2018-07-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/modulefile.rst: doc: state in modulefile(4) getenv should be
  pref. over ::env

2018-06-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile, Makefile.inc.in, configure: install: relax GNU grep requirement
  constraint  Rely on regular grep options rather grep -P to better cope with
  OSes where BSD grep is available by default.

2018-06-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version
  4.1.3

2018-06-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/profile.sh.in: Detect shell with variables in profile.sh script  To
  improve shell detection code that until now was relying on a parent process
  name check, some shell variables will be used to determine the current shell
  name.  $BASH and $ZSH_NAME variables will be looked at if defined to
  determine calling shell name.  Doing so will avoid some external command
  call when running bash or zsh. Also if people source /etc/profile script in
  their own bash or zsh script it will correctly determine calling shell name,
  as parent process in this case is the script name.  Cannot determine shell
  name on ksh with a variable due to the lack of a consistent detection
  mechanism across all ksh flavors [1].  Fixes #173  [1]
  https://books.google.fr/books?id=53zaxy423xcC&pg=PA161

2018-05-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/diff_v3_v4.rst: doc: env var definition during a whatis mode
  eval

2018-05-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modulefiles.deep/moddalias/.modulerc,
  testsuite/modulefiles.deep/moddalias/dir1/1,
  testsuite/modulefiles.deep/moddalias/dir2/.ignored,
  testsuite/modules.80-deep/010-init_ts.exp,
  testsuite/modules.80-deep/020-load.exp,
  testsuite/modules.80-deep/021-unload.exp,
  testsuite/modules.80-deep/030-display.exp,
  testsuite/modules.80-deep/050-whatis.exp,
  testsuite/modules.80-deep/999-cleanup.exp,
  testsuite/modules.90-avail/070-full.exp: If subdir is empty do not update
  parent dir if overwritten  During a modulefile lookup in getModules,
  directory definitions are updated if some empty directories are found in
  them.  Do not attempt this directory definition update when finding an empty
  directory if parent directory has been overwritten by an alias definition
  for instance.  Fixes #170

2018-05-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modulefiles.allin/allenvchg/1,
  testsuite/modulefiles.allin/allenvchg/2,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.50-cmds/359-allin-env.exp: Setenv on unload mode set var
  to val in interp context  Interpreting a setenv modulefile order during an
  unload evaluation, variable is still set to be unset in generated shell code
  but it is set to the value defined on the setenv order in the interpreter
  context instead of being cleared.  This change is made to recover and
  improve behavior of compat version and previous version of modulecmd.tcl
  where variable's value found in environment were not touch in interpreater
  context.  This is useful when using environment variable value to
  append/prepend-path another variable. This change enables to correctly unset
  this other variable on an unload evaluation. Was previously not unset since
  the first variable used to edit the second was found cleared.  This change
  is currently limited to the setenv order and does not apply to the
  prepend-path and append-path, where during an unload evaluation variable
  value part is removed from variable also in interpreter context. Need to
  distinguish value in interpreter context from value to set in shell output
  code to also apply this mechanism to path edition modulefile orders.

2018-05-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/bin/install_test_sh,
  testsuite/install.00-init/005-init_ts.exp,
  testsuite/install.00-init/020-module.exp, testsuite/modulefiles/alias/3.0,
  testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.50-cmds/075-alias.exp,
  testsuite/modules.50-cmds/076-alias-sub.exp,
  testsuite/modules.90-avail/070-full.exp: Define shell alias with special
  chars escaped  When producing code to output shell alias definition,
  escaping of special characters was missing until now in renderSettings
  procedure.  Code to bake shell alias has been fixed to work in a similar way
  than for environment variable with full range of shell special characters
  escaped.  Translation of $n/$* in !!:n/!* on csh-like shells is maintained
  for compatibility with v3. To improve this compatibility, a \ prior to $
  disables translation on csh (like with v3), then after \$ is translated in $
  for all shells.  Adapt testsuite to use value escaping over expected output
  result for shell alias (like done for environment variable). Adapt
  consequently all shell alias tests in 50-cmds/07*.  Add test in
  50-cmds/076-alias-sub to demonstrate escaping of complex shell alias. Use
  modulefile from this new test within install testsuite to garanty shell
  alias produce is effective on shell sessions. Check availability of tools
  used by this alias (grep, tr, awk) to determine if install test can be
  launched on current system.  Fixes #165

  * testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.50-cmds/042-append-delim.exp,
  testsuite/modules.50-cmds/047-app-del-undo.exp,
  testsuite/modules.50-cmds/052-prepend-delim.exp,
  testsuite/modules.50-cmds/057-pre-del-undo.exp,
  testsuite/modules.50-cmds/062-remove-delim.exp,
  testsuite/modules.70-maint/120-autoinit.exp,
  testsuite/modules.70-maint/150-append-path.exp,
  testsuite/modules.70-maint/151-prepend-path.exp,
  testsuite/modules.70-maint/152-remove-path.exp: ts: fix special chars
  escaping code in values  Add more special characters to the escaping list
  for regular shells. And fix code to over escape special characters relative
  to regular expression when regexp mode is enabled.

  * testsuite/bin/install_test_sh, testsuite/install.00-init/040-subshell.exp:
  ts: fix word splitting for zsh test in install suite

2018-05-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Quote csh
  generated code to pass it to eval  Brace modulecmd.tcl call in module csh
  alias with quotes to pass quoted content to the shell evaluation. Use :q
  modifier on !* to escape quotes passed as arguments to the module command

  * init/bash.in, init/ksh.in, init/sh.in, init/zsh.in: init: init/export
  _module_raw if stderr attached to term  To get coherent with the test made
  by modulecmd.tcl to determine if autoinit sub-command has to produce code
  for the '_module_raw' shell function, export this function (or initialize it
  on compat mode) if stderr is attached to a terminal.  Was previously testing
  stdout, whereas modulecmd.tcl is checking stderr, which led to
  inconsistencies as described in [1].  Fixes #169  [1]
  https://bugzilla.redhat.com/show_bug.cgi?id=1575479

2018-05-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/guide/get_started/00-cleanup.sh,
  contrib/guide/get_started/01-modulepath-modulerc.sh,
  .../guide/get_started/02-first_module-install.sh,
  contrib/guide/get_started/03-first_module-bar.sh,
  contrib/guide/get_started/04-second_modulefile.sh,
  contrib/guide/get_started/05-more_modulefile-foo.sh,
  .../guide/get_started/06-more_modulefile-share.sh,
  .../guide/get_started/07-guide_modulefile_search.sh,
  .../get_started/08-guide_modulefile_search-alias.sh,
  contrib/guide/get_started/09-global_modulerc.sh,
  contrib/guide/get_started/10-restrict_visibility.sh,
  contrib/guide/get_started/11-restore_visibility.sh,
  contrib/guide/get_started/12-datadir-create.sh,
  contrib/guide/get_started/13-datadir-common.sh,
  contrib/guide/get_started/14-datadir-versions.sh,
  contrib/guide/get_started/15-datadir-virtual.sh,
  contrib/guide/get_started/16-conflict.sh,
  contrib/guide/get_started/17-prereq.sh,
  contrib/guide/get_started/18-collection-target.sh,
  contrib/guide/get_started/19-siteconfig.sh,
  contrib/guide/get_started/README, contrib/guide/get_started/test.py:
  contrib: add scripts from upcoming 'get started' guide

2018-05-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * MIGRATING.rst, doc/source/module.rst, modulecmd.tcl.in,
  testsuite/config/unix.exp, testsuite/modules.00-init/071-args.exp: Args
  should be passed as list not single string  Update documentation for module
  usage on scripting language like Perl or Python to provide examples where
  arguments are passed as a list of string rather a single string.  For
  compatibility with previously advertised examples, first argument is
  splitted if multiple word are detected in it.

2018-05-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Clean unneeded global variable set in slave interp

  * modulecmd.tcl.in: Pass cur itrp ref in initInterpCommands to aliases
  needing it  Sets in initInterpCommands procedure interpreter reference as
  first argument to interpreter alias requiring it, rather doing it in
  initModfileModeAliases where actual interpreter reference is not known (as
  this procedure is called at first time a mode-specific interp is created,
  but not on subsequent times when another interp of same mode but working in
  a nested level is build up).  Now initModfileModeAliases defines a specific
  __itrp__ keyword to let initInterpCommands know that the argument to pass to
  the alias to define is the actual interp reference.

  * modulecmd.tcl.in, testsuite/modules.70-maint/080-help.exp: Add
  getEvalModuleStackDepth to learn nb of mod in eval  Get the number of either
  modulerc/modulefile currently being evaluated (nested evaluation) with a new
  procedure called getEvalModuleStackDepth, relying on the number of element
  of the g_moduleNameStack global list.  Use this new procedure rather [info
  level] to determine if module procedure is called at top level or not and to
  determine the slave interpreter to use (an interpreter is reused to evaluate
  a modulefile from same evaluation nested level).  Gives a more precise
  information on modulefile evaluation depth level than [info level] which
  reflects Tcl procedure call stack depth.

  * .travis.yml: travis: test --enable-append-{bin,man}path configure opts

  * INSTALL.rst, Makefile.inc.in, configure, init/Makefile, init/bash.in,
  init/csh.in, init/fish.in, init/ksh.in, init/sh.in, init/zsh.in: install:
  add --enable-append-{bin,man}path configure opts  Add the ability to append
  rather prepend the man or bin directory when adding these directory to the
  relative environment variable is enabled (with --enable-set-manpath or
  --enable-set-binpath).  Takes the form of 2 new configure options:
  --enable-append-manpath and --enable-append-binpath. No effect if set but
  relative --enable-set-{bin,man}path option is unset or disabled.

2018-05-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/bash.in, init/ksh.in, init/sh.in, init/zsh.in, modulecmd.tcl.in,
  testsuite/install.00-init/010-environ.exp,
  testsuite/modules.70-maint/120-autoinit.exp: Rename _moduleraw shell func in
  _module_raw  To use a common _module_ prefix for all module-related internal
  shell functions as suggested by Paul FM [1].  [1]
  https://sourceforge.net/p/modules/mailman/message/36230667/

  * modulecmd.tcl.in: Call runModulerc within module proc at top level  Call
  runModulerc, to find and execute any global rc file found, within module
  procedure once module sub-command is known and registered. This way global
  rc file can learn the current command processed.

2018-05-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Use getModuleNameVersion in execute-modulerc to get mod
  details

  * modulecmd.tcl.in: Track sourced rc files in getModules rather
  execute-modulerc  Handle g_rcfilesSourced global array that track sourced rc
  files in getModules procedure rather execute-modulerc procedure. This way
  only call execute-modulerc procedure if rc file has not yet been sourced.
  It saves a lot of procedure call especially in case of global query command
  like whatis, where initial global findModules result is re-used for each
  sub-query raised during modulefile evaluation.

2018-03-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Cache findModules results  Introduce a memory cache for
  the results build up by findModules procedure. Done in order to reuse these
  results if next searches are compatible instead of re-walking the
  filesystem.  A cached result may be used by a search looking for a subset of
  this result. For instance searching for modules 'foo' in '/path/to/dir' may
  use the cache result saved after the search of '*' modules in 'path/to/dir'.
  This superset result is then filtered-out whithin the getModules procedure.

2018-04-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Fix resetInterpState to restore empty string value
  Useful to restore initial value of ::errorCode and ::errorInfo.

  * modulecmd.tcl.in: Set reportDebug as nop proc when debug is disabled
  Define in initErrorReport the reportDebug procedure as a no-operation
  procedure to optimize operations whether debugging is enabled or not.

  * modulecmd.tcl.in, testsuite/modules.50-cmds/359-allin-env.exp: Set *setenv
  cmds as init-if-undef proc on whatis mode  Define a specific procedure for
  the setenv and unsetenv commands on a whatis evaluation mode: setenv-wh.
  This procedure checks the environment variable targeted by the command and
  initialize it as an empty string if undefined.  Proceed this way to reduce
  the total amount of time of a whatis query but still initializing variables
  if undefined to avoid 'undefined variable' errors during evaluation if
  environment variable value are referred to later in modulefile.  Value set
  to variable are not the correct one (no value set if variable defined, empty
  string set if variable is undefined) but it should not affect the whatis
  query as only the 'module-whatis' commands are valuable in this mode.

  * modulecmd.tcl.in, testsuite/modules.50-cmds/359-allin-env.exp: Set *-path
  cmds as init-if-undef proc on whatis mode  Define a specific procedure for
  the append-path, prepend-path and remove-path commands on a whatis
  evaluation mode: edit-path-wh.  This procedure checks the environment
  variable targeted by the command and initialize it as an empty string if
  undefined.  Proceed this way to reduce the total amount of time of a whatis
  query but still initializing variables if undefined to avoid 'undefined
  variable' errors during evaluation if environment variable value are
  referred to later in modulefile.  Value set to variable are not the correct
  one (no value set if variable defined, empty string set if variable is
  undefined) but it should not affect the whatis query as only the
  'module-whatis' commands are valuable in this mode.

2018-04-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Fallback on split/join in psplit/pjoin if no sep char
  found  Achieve better performances in most cases (as separator character is
  usualy not used)

2018-04-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Remove unneeded g_inhibit_dispreport  As modulefile
  commands do not handle anymore their display-mode report, display report
  inhibition for modulerc evaluation is not needed anymore.

  * modulecmd.tcl.in, testsuite/modulefiles.allin/allin/1,
  testsuite/modulefiles.allin/allin/3, testsuite/modulefiles.allin/allin/4,
  testsuite/modulefiles.other/modemptyarg/apropos,
  testsuite/modulefiles.other/modemptyarg/avail,
  testsuite/modulefiles.other/modemptyarg/whatis,
  testsuite/modulefiles/modbad/append-path,
  testsuite/modulefiles/modbad/autoinit, testsuite/modulefiles/modbad/empty,
  testsuite/modulefiles/modbad/foo, testsuite/modulefiles/modbad/help,
  testsuite/modulefiles/modbad/info-loaded,
  testsuite/modulefiles/modbad/is-avail,
  testsuite/modulefiles/modbad/is-loaded,
  testsuite/modulefiles/modbad/is-saved, testsuite/modulefiles/modbad/is-used,
  testsuite/modulefiles/modbad/path, testsuite/modulefiles/modbad/paths,
  testsuite/modulefiles/modbad/prepend-path,
  testsuite/modulefiles/modbad/remove-path,
  testsuite/modules.50-cmds/151-module-onlytop.exp,
  testsuite/modules.50-cmds/152-module-emptyarg.exp,
  testsuite/modules.50-cmds/302-interp-cascaded.exp,
  testsuite/modules.50-cmds/330-source.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.80-deep/030-display.exp: Move 'module' to the per-mode
  evaluation interp  'module' modulefile command targets module procedure on
  load and unload modes of modulefile evaluation. reportCmd is targeted on
  display mode. For other modes a nop is targeted.  'module' command is now
  disabled on help, test and whatis mode which stabilizes evaluation on these
  modes. On Modules v3, module command was also disabled on all these query
  evaluation modes.

2018-04-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.50-cmds/350-allin.exp: Move
  'x-resource' to the per-mode evaluation interp  'x-resource' modulefile
  command targets x-resource procedure on load and unload modes of modulefile
  evaluation. reportCmd is targeted on display mode. For other modes a nop is
  targeted.

  * modulecmd.tcl.in: Move 'module-virtual' to the per-mode evaluation interp
  'module-virtual' modulefile command targets module-virtual procedure on
  every mode of modulefile evaluation.

  * modulecmd.tcl.in: Move 'module-alias' to the per-mode evaluation interp
  'module-alias' modulefile command targets module-alias procedure on every
  mode of modulefile evaluation.

  * modulecmd.tcl.in: Move 'module-version' to the per-mode evaluation interp
  'module-version' modulefile command targets module-version procedure on
  every mode of modulefile evaluation.

  * modulecmd.tcl.in, testsuite/modules.20-locate/035-defname.exp,
  testsuite/modules.50-cmds/210-exit.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/140-multiargs.exp,
  testsuite/modules.70-maint/170-contact.exp: Brace empty or
  whitespace-containing arg on reportCmd  reportCmd processes the argument
  list of the called command to brace empty arguments or arguments containing
  whitespace character.  Makes visible for a human eye the limit of each
  parameter (especially for empty strings).

  * modulecmd.tcl.in, testsuite/modules.50-cmds/039-unsetenv-env.exp,
  testsuite/modules.50-cmds/069-remove-env.exp,
  testsuite/modules.50-cmds/140-system.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.50-cmds/359-allin-env.exp,
  testsuite/modules.70-maint/140-multiargs.exp: Trace exec to reportCmd on
  display mode enabled cmds  For those commands enables on display mode
  (commands that are also run on this mode, not only reported, like */*-path
  commands): use an execution trace (at leave step) to call for the report
  commands after running the enabled procedure.  With this change these
  enabled-on-display commands do not have to handle their display reporting
  anymore. Current evaluation mode can now be ignored by these procedures.
  The reportCmdTrace procedure is introduced to be set as the execution trace
  procedure in case alias command for modulefile interp is not set to
  reportCmd on a display evaluation mode.  As a side effect of this change,
  commands are reported even if their execution raise an error (helps to see
  the command line along with raised error message).

2018-04-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Refactor code of getenv command  Same kind of debug
  message or mode test than used in other modulefile command procedures.
  g_inhibit_dispreport test is not needed as getenv cannot be reached from a
  modulerc evaluation

2018-04-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.70-maint/070-display.exp: Move
  '*-path' to the per-mode evaluation interp  'append-path' modulefile command
  targets append-path procedure on every mode of modulefile evaluation except
  unload mode where remove-path is targeted. append-path procedure is called
  on all these modes to perform variable set for later use of this variable
  during the modulefile evaluation.  'prepend-path' modulefile command targets
  prepend-path procedure on every mode of modulefile evaluation except unload
  mode where remove-path is targeted. prepend-path procedure is called on all
  these modes to perform variable set for later use of this variable during
  the modulefile evaluation.  'remove-path' modulefile command targets
  remove-path procedure on every mode of modulefile evaluation except unload
  mode where remove-path-un is targeted. remove-path procedure is called on
  all these modes to perform variable set/unset for later use of this variable
  during the modulefile evaluation. remove-path-un procedure is used on unload
  mode to clear variable if currently unset for later use of this variable
  during eval.

  * modulecmd.tcl.in, testsuite/modules.20-locate/048-symexec.exp,
  testsuite/modules.20-locate/050-locrc.exp,
  testsuite/modules.20-locate/055-locrcerrs.exp,
  testsuite/modules.20-locate/060-rc.exp,
  testsuite/modules.20-locate/070-homerc.exp,
  testsuite/modules.20-locate/075-symlink.exp,
  testsuite/modules.20-locate/080-access.exp,
  testsuite/modules.20-locate/081-access-rc.exp,
  testsuite/modules.50-cmds/029-setenv-env.exp,
  testsuite/modules.50-cmds/039-unsetenv-env.exp,
  testsuite/modules.50-cmds/049-append-env.exp,
  testsuite/modules.50-cmds/059-prepend-env.exp,
  testsuite/modules.50-cmds/069-remove-env.exp,
  testsuite/modules.50-cmds/140-system.exp,
  testsuite/modules.50-cmds/210-exit.exp,
  testsuite/modules.50-cmds/260-getenv.exp,
  testsuite/modules.50-cmds/269-getenv-env.exp,
  testsuite/modules.50-cmds/302-interp-cascaded.exp,
  testsuite/modules.50-cmds/310-puts.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.50-cmds/359-allin-env.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/170-contact.exp,
  testsuite/modules.80-deep/080-access.exp: Move '*setenv' to the per-mode
  evaluation interp  'setenv' modulefile command targets setenv procedure on
  every mode of modulefile evaluation except unload mode where setenv-un is
  targeted. setenv procedure is called on all these modes to perform variable
  set for later use of this variable during the modulefile evaluation.
  setenv-un procedure is used on unload mode to call unsetenv with the correct
  argument list.  'unsetenv' modulefile command targets unsetenv procedure on
  every mode of modulefile evaluation except unload mode where unsetenv-un is
  targeted. unsetenv procedure is called on all these modes to perform
  variable set/unset for later use of this variable during the modulefile
  evaluation. unsetenv-un procedure is used on unload mode to call setenv or
  unsetenv depending on the value passed or not as argument.

2018-04-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.70-maint/070-display.exp: Move '*set-alias' to the
  per-mode evaluation interp  'set-alias' modulefile command targets set-alias
  procedure on load mode of modulefile evaluation. set-alias-un is targeted on
  unload mode. reportCmd is targeted on display mode. For other modes a nop is
  targeted. set-alias-un procedure is used on unload mode to call unset-alias
  with the correct argument list.  'unset-alias' modulefile command targets
  unset-alias procedure on load mode of modulefile evaluation. reportCmd is
  targeted on display mode. For other modes a nop is targeted.

  * modulecmd.tcl.in: Move 'conflict' to the per-mode evaluation interp
  'conflict' modulefile command targets conflict procedure on load mode of
  modulefile evaluation. reportCmd is targeted on display mode. For other
  modes a nop is targeted.

  * modulecmd.tcl.in: Move 'prereq' to the per-mode evaluation interp
  'prereq' modulefile command targets prereq procedure on load mode of
  modulefile evaluation. reportCmd is targeted on display mode. For other
  modes a nop is targeted.

  * modulecmd.tcl.in: Move 'module-whatis' to the per-mode evaluation interp
  'module-whatis' modulefile command targets module-whatis procedure on whatis
  mode of modulefile evaluation. reportCmd is targeted on display mode. For
  other modes a nop is targeted.

  * modulecmd.tcl.in: Move 'chdir' to the per-mode evaluation interp  'chdir'
  modulefile command targets chdir procedure on load mode of modulefile
  evaluation. reportCmd is targeted on display mode. For other modes a nop is
  targeted.

  * modulecmd.tcl.in, testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/080-help.exp: Move 'module-{log,trace,user,verb}'
  to the per-mode evaluation interp  module-log, module-trace, module-user and
  module-verbosity modulefile commands target 'nimp' procedure on load and
  unload modes of modulefile evaluation. reportCmd is targeted on display
  mode. For other modes a nop is targeted.

  * modulecmd.tcl.in: Add 'nimp' proc to get a dummy 'not implemented' target

  * modulecmd.tcl.in: Disable chdir,module{,-trace,-log,-user,-verbosity} from
  modulerc eval  Make chdir, module, module-trace, module-verbosity,
  module-user and module-log commands target the 'nop' procedure on modulerc
  interpreter. These commands were declared for modulerc evaluation but this
  did not make any sense as their action only concern modulefile evaluation.

  * modulecmd.tcl.in: Move 'system' to the per-mode evaluation interp
  'system' modulefile command targets system procedure on load and unload
  modes of modulefile evaluation. reportCmd is targeted on display mode. For
  other modes a nop is targeted.  'system' can also currently be called from a
  modulerc evaluation when load or unload mode is detected. Kept as is for the
  moment. May/should change for next major release.

  * modulecmd.tcl.in: Add 'reportCmd' proc to use as target for display mode
  If interpreter alias command targets the reportCmd procedure, make sure
  command name is passed as first argument.

  * modulecmd.tcl.in: Define arg to pass to interp aliases in
  initModfileModeAliases  Transform g_modfileAliasesPassItrp, array listing
  aliases where the interpreter name should be passed as alias command first
  argument, into g_modfile${mode}AliasesPassArg, array listing first argument
  to pass to particular aliases.  The new structure is defined per evaluation
  mode (a specific alias/argument list per mode). So its definition is moved
  from execute-modulefile to initModfileModeAliases.

2018-04-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Add 'nop' proc to get a dummy target for certain eval
  mode

  * modulecmd.tcl.in: Adapt interp alias commands to the evaluation mode  Make
  interpreter alias command targets vary depending on the evaluation mode to
  adapt behavior of modulefile commands to the currently run module command.
  For instance a 'setenv' command is evaluation as an 'unsetenv' command when
  unloading a modulefile.  This commit lays the groundwork to adapt modulefile
  commands to the evaluation mode. All commands are kept for the moment in the
  situation where the same procedure is applied to all evaluation modes.

  * modulecmd.tcl.in: Define slave interp cmds in initInterpCommands proc

  * modulecmd.tcl.in, testsuite/modulefiles/spread/2.0,
  testsuite/modulefiles/spreadrc/dir2/1.0,
  testsuite/modules.70-maint/080-help.exp: Dedicate a modfile interp for each
  evaluation mode

  * modulecmd.tcl.in, testsuite/modules.70-maint/080-help.exp: Use same dump
  state for same kind of interp  Share same dump state between interpreters of
  the same kind (modfile or modrc) but working at different levels.

  * modulecmd.tcl.in: Clarify interp name and reportDebug their creation

  * modulecmd.tcl.in: Push/pop modname and specified in execute-mod* procs

2018-04-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.70-maint/080-help.exp: Automatically
  prefix debug msgs by calling proc name

2018-03-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Harmonize/reduce execute-module{rc,file} debug msg

2018-04-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/diff_v3_v4.rst: doc: remove-path applied when unloading on
  compat vers

  * doc/source/diff_v3_v4.rst: doc: desc. MANPATH special treatment on compat
  version  Describe the difference behavior between Modules 4+ and
  compatibility version regarding how append-path/prepend-path commands handle
  the MANPATH environment variable when unset. Helps clarify [1].  [1]
  https://bugzilla.redhat.com/show_bug.cgi?id=1564899

  * modulecmd.tcl.in, testsuite/modules.50-cmds/065-remove-undo.exp,
  testsuite/modules.50-cmds/069-remove-env.exp: Make remove-path clear
  ::env(var) on unload mode if unset  Clears the variable passed to
  'remove-path' procedure in ::env() array on unload mode and if this variable
  is unset for later use during the modulefile evaluation.  Helps producing
  same variable evaluation behavior whatever the evaluation mode, avoiding
  access to undefined references by defining a cleared but set value to these
  undefined variables.  As a side effect as remove-path command is now
  evaluated on unload mode, invalid argument on this command will raise error.
  Previously arguments were not parsed so no error raised on unload mode.

2018-04-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Get env var set value or fallback value with get-env
  Add a 'get-env' procedure to read values from 'env' array, like what is done
  with 'set-env' for setting value. Distinguish set environment variable from
  cleared one with help of g_clearedEnvVars array.

  * modulecmd.tcl.in, testsuite/modulefiles/getenv/0.6,
  testsuite/modules.50-cmds/269-getenv-env.exp,
  testsuite/modules.50-cmds/359-allin-env.exp: Keep track of cleared env var
  in g_clearedEnvVars  When unsetting (clearing) an environment variable in
  'unset-env' procedure, keep track of it in a g_clearedEnvVars array to be
  able to distinguish later on, in 'getenv' procedure, if variable is equal to
  an empty string or if it has been unset (cleared).

  * testsuite/modulefiles.allin/allenvchg/1,
  testsuite/modulefiles.allin/allenvchg/2,
  testsuite/modules.50-cmds/359-allin-env.exp: ts: add 50-cmds/359-allin-env
  tests  Check environment variable change commands all together over the
  different modulefile evaluation modes.

  * doc/source/modulefile.rst, modulecmd.tcl.in,
  testsuite/modulefiles/getenv/1.0, testsuite/modules.50-cmds/260-getenv.exp:
  Add valifundef arg to getenv procedure  Allow to define value to return if
  variable name passed to the getenv procedure is undef.  Add a description of
  'getenv' command in the modulefile man page.

  * modulecmd.tcl.in, testsuite/modulefiles/getenv/0.6,
  testsuite/modules.50-cmds/269-getenv-env.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.90-avail/070-full.exp: Make getenv return value on
  help/test/whatis modes

2018-04-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.50-cmds/029-setenv-env.exp,
  testsuite/modules.50-cmds/039-unsetenv-env.exp,
  testsuite/modules.50-cmds/049-append-env.exp,
  testsuite/modules.50-cmds/059-prepend-env.exp,
  testsuite/modules.50-cmds/069-remove-env.exp,
  testsuite/modules.50-cmds/350-allin.exp: Clear env var even if not set on
  unset-env  On 'unset-env' procedure, clears environment variable whether it
  is set or not to get consistent behavior whatever the current environment
  setup on later references of this variable during modulefile evaluation.
  Adapt 029-setenv-env, 039-unsetenv-env, 049-append-env, 059-prepend-env and
  069-remove-env test cases: no more 'no such variable' errors.

  * modulecmd.tcl.in, testsuite/modulefiles.allin/allin/1,
  testsuite/modulefiles/unsetenv/0.6,
  testsuite/modules.50-cmds/039-unsetenv-env.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.90-avail/040-wild.exp,
  testsuite/modules.90-avail/070-full.exp: Make unsetenv alter ::env() on
  display/help/test/whatis modes  Like previously done for 'remove-path', set
  the variable passed to 'unsetenv' procedure in ::env() array to make
  accurate value available for later use during the modulefile evaluation.
  Add 50-cmds/039-unsetenv-env test to check this ::env() array change over
  all evaluation mode. Adapt 50-cmds/350-allin to check this change against
  'whatis' mode.

2018-04-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modulefiles/remove/5.0,
  testsuite/modules.50-cmds/069-remove-env.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.90-avail/070-full.exp: Make remove-path alter ::env() on
  display/help/test/whatis modes  Like previously done for 'append-path', set
  the variable passed to 'remove-path' procedure in ::env() array to make
  accurate value available for later use during the modulefile evaluation.  As
  a side effect as remove-path command is now evaluated on help, test, display
  and whatis modes, invalid argument on this command will raise error.
  Previously arguments were not parsed so no error raised.  Add
  50-cmds/069-remove-env test to check this ::env() array change over all
  evaluation mode. Adapt 50-cmds/350-allin to check this change against
  'whatis' mode.

  * testsuite/modulefiles/setenv/0.7.1, testsuite/modulefiles/setenv/0.7.2,
  testsuite/modules.50-cmds/028-setenv-refcount.exp,
  testsuite/modules.90-avail/070-full.exp: ts: add tests to
  50-cmds/028-setenv-refcount  Test load and unload mode on modulefiles where
  setenv and append-path commands play on same variable. Check both ways:
  setenv then append-path or appen-path then setenv.

2018-04-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Set env var and propagate creation with set-env  Make
  use of the 'set-env' procedure to set an environment variable and propagate
  creation to the running shell (outputing set command to stdout).  Creation
  is propagated only if currently in 'load' or 'unload' evaluation mode.

2018-04-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.50-cmds/049-append-env.exp,
  testsuite/modules.50-cmds/180-unload.exp: Unset any ref cnt var on
  setenv/unsetenv in any mode  Whatever the evaluation mode, unset any
  existing reference counter variable when running setenv/unsetenv commands.
  Adapt and add tests to put in light behaviors when unloading a
  standardly-set variable going through append-path/prepend-path. The
  standardly-set variable is transformed into a path-like variable through the
  evaluation, resulting in the end in the definition of a reference counter
  variable (if variable is not setenv/unsetenv during evaluation) or in the
  deletion of this reference counter variable (if setenv/unsetenv during
  evaluation).

2018-04-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.50-cmds/180-unload.exp,
  testsuite/modules.70-maint/152-remove-path.exp,
  testsuite/modules.70-maint/190-emptyarg.exp: Delete env var and propagate
  deletion with unset-env  Make use of the 'unset-env' procedure to delete an
  environment variable and propagate deletion to the running shell (outputing
  deletion command to stdout).  Deletion is propagated only if currently in
  'load' or 'unload' evaluation mode.  unset-env procedure distinguishes
  environment variables from those set for Modules internal use, like path
  reference counter variables. Internal variables are purely unset whereas
  other environment variables are just cleared, not unset, to avoid breaking
  later reference to these variables in modulefiles.  In case of environment
  variable for internal use, variable deletion is propagated to shell only if
  variable was found set. Aligning all unsets on this rule gives no unset of
  reference counter variable on unload mode if the variable is not found
  defined at that time.  Adapt expected test results for the above side
  effect.

2018-04-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/029-setenv-env.exp,
  testsuite/modules.50-cmds/049-append-env.exp,
  testsuite/modules.50-cmds/059-prepend-env.exp,
  testsuite/modules.70-maint/152-remove-path.exp: ts: use helper procs to set
  env vars on env var set tests

2018-04-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/050-modpath.exp,
  testsuite/modules.10-use/030-use.exp,
  testsuite/modules.10-use/031-append.exp,
  testsuite/modules.10-use/032-prepend.exp,
  testsuite/modules.10-use/070-unuse.exp,
  testsuite/modules.10-use/080-access.exp,
  testsuite/modules.10-use/090-bad.exp,
  testsuite/modules.20-locate/043-virtual.exp,
  testsuite/modules.20-locate/069-cross.exp,
  testsuite/modules.50-cmds/010-init_ts.exp,
  testsuite/modules.50-cmds/017-use-undo.exp,
  testsuite/modules.50-cmds/122-prereq-fullpath.exp,
  .../modules.50-cmds/132-conflict-fullpath.exp,
  testsuite/modules.50-cmds/152-module-emptyarg.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/180-unload.exp,
  testsuite/modules.50-cmds/190-load.exp,
  testsuite/modules.50-cmds/321-is-used.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.50-cmds/360-restoreenv.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.70-maint/040-list.exp,
  testsuite/modules.70-maint/055-whatis.exp,
  testsuite/modules.70-maint/056-whatis-nullpath.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/100-path.exp,
  testsuite/modules.70-maint/110-paths.exp,
  testsuite/modules.70-maint/120-autoinit.exp,
  testsuite/modules.70-maint/130-aliases.exp,
  testsuite/modules.70-maint/153-is-loaded.exp,
  testsuite/modules.70-maint/155-is-used.exp,
  testsuite/modules.70-maint/190-emptyarg.exp,
  testsuite/modules.80-deep/010-init_ts.exp,
  testsuite/modules.80-deep/021-unload.exp,
  testsuite/modules.80-deep/999-cleanup.exp,
  testsuite/modules.90-avail/030-multiple.exp,
  testsuite/modules.90-avail/070-full.exp,
  testsuite/modules.91-sort/010-init_ts.exp,
  testsuite/modules.91-sort/020-avail.exp,
  testsuite/modules.95-version/010-init_ts.exp,
  testsuite/modules.95-version/999-cleanup.exp: ts: use helper procs to set
  MODULEPATH env var

2018-04-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.20-locate/038-defcontext.exp,
  testsuite/modules.20-locate/043-virtual.exp,
  testsuite/modules.20-locate/050-locrc.exp,
  testsuite/modules.20-locate/067-hidden.exp,
  testsuite/modules.20-locate/068-transitive.exp,
  testsuite/modules.20-locate/069-cross.exp,
  testsuite/modules.50-cmds/017-use-undo.exp,
  testsuite/modules.50-cmds/025-setenv-undo.exp,
  testsuite/modules.50-cmds/029-setenv-env.exp,
  testsuite/modules.50-cmds/035-unsetenv-undo.exp,
  testsuite/modules.50-cmds/036-unsetenv-x.exp,
  testsuite/modules.50-cmds/045-append-undo.exp,
  testsuite/modules.50-cmds/047-app-del-undo.exp,
  testsuite/modules.50-cmds/049-append-env.exp,
  testsuite/modules.50-cmds/055-prepend-undo.exp,
  testsuite/modules.50-cmds/057-pre-del-undo.exp,
  testsuite/modules.50-cmds/059-prepend-env.exp,
  testsuite/modules.50-cmds/065-remove-undo.exp,
  testsuite/modules.50-cmds/077-alias-undo.exp,
  testsuite/modules.50-cmds/078-refresh.exp,
  testsuite/modules.50-cmds/083-info-mode.exp,
  testsuite/modules.50-cmds/084-info-mode-exp.exp,
  testsuite/modules.50-cmds/085-info-flags.exp,
  testsuite/modules.50-cmds/088-info-isloaded.exp,
  testsuite/modules.50-cmds/122-prereq-fullpath.exp,
  testsuite/modules.50-cmds/130-conflict-full.exp,
  .../modules.50-cmds/132-conflict-fullpath.exp,
  testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.50-cmds/152-module-emptyarg.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/172-swap-app-delim.exp,
  testsuite/modules.50-cmds/173-swap-app-delim.exp,
  testsuite/modules.50-cmds/175-swap2.exp,
  testsuite/modules.50-cmds/177-swap-prep-delim.exp,
  testsuite/modules.50-cmds/178-swap-prep-delim.exp,
  testsuite/modules.50-cmds/180-unload.exp,
  testsuite/modules.50-cmds/190-load.exp,
  testsuite/modules.50-cmds/195-load-recurs.exp,
  testsuite/modules.50-cmds/197-load-lots.exp,
  testsuite/modules.50-cmds/200-break.exp,
  testsuite/modules.50-cmds/210-exit.exp,
  testsuite/modules.50-cmds/220-continue.exp,
  testsuite/modules.50-cmds/230-loop.exp,
  testsuite/modules.50-cmds/240-chdir.exp,
  testsuite/modules.50-cmds/250-x-resource.exp,
  testsuite/modules.50-cmds/280-info-specified.exp,
  testsuite/modules.50-cmds/281-info-modulerc.exp,
  testsuite/modules.50-cmds/282-info-command.exp,
  testsuite/modules.50-cmds/283-info-command-exp.exp,
  testsuite/modules.50-cmds/285-info-loaded.exp,
  testsuite/modules.50-cmds/300-interp.exp,
  testsuite/modules.50-cmds/301-interp-command.exp,
  testsuite/modules.50-cmds/302-interp-cascaded.exp,
  testsuite/modules.50-cmds/330-source.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.50-cmds/360-restoreenv.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.70-maint/020-update.exp,
  testsuite/modules.70-maint/030-purge.exp,
  testsuite/modules.70-maint/040-list.exp,
  testsuite/modules.70-maint/045-listlong.exp,
  testsuite/modules.70-maint/055-whatis.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/120-autoinit.exp,
  testsuite/modules.70-maint/140-multiargs.exp,
  testsuite/modules.70-maint/153-is-loaded.exp,
  testsuite/modules.70-maint/157-info-loaded.exp,
  testsuite/modules.70-maint/180-reload.exp,
  testsuite/modules.70-maint/190-emptyarg.exp,
  testsuite/modules.80-deep/021-unload.exp,
  testsuite/modules.80-deep/022-switch.exp,
  testsuite/modules.80-deep/068-transitive.exp,
  testsuite/modules.90-avail/020-single.exp,
  testsuite/modules.95-version/020-unload.exp,
  testsuite/modules.95-version/022-load2.exp,
  testsuite/modules.95-version/022-unload2.exp,
  testsuite/modules.95-version/040-xgetenv.exp: ts: add helper procs to set
  env for tests  Add new procedures (unsetenv_loaded_module,
  setenv_loaded_module, setenv_path_var, unsetenv_path_var, unsetenv_var,
  setenv_var) to set environment for tests in a consistent way (defining
  reference counter variable for path-like variables).  Adapt all test files
  to set LOADEDMODULES and _LMFILES_ (and relative reference counter
  variables) with these new helper procedures.

2018-04-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.50-cmds/350-allin.exp: Clear var in
  evaluation context on unload mode of setenv  To get a more accurate (empty)
  value when using variable later on during the evaluation of the modulefile.
  Previously set value (prior to unset) was retrieved and used.

  * modulecmd.tcl.in: No env var unset on unload-path in evaluation context
  Do not unset-env in unload-path proc (called by *-path commands) like setenv
  to avoid breaking later reference to the variable in modulefile. Value is
  cleared instead.

2018-04-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modulefiles.allin/allin/1,
  testsuite/modulefiles/append/7.0, testsuite/modulefiles/prepend/4.0,
  testsuite/modules.50-cmds/049-append-env.exp,
  testsuite/modules.50-cmds/059-prepend-env.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.70-maint/140-multiargs.exp,
  testsuite/modules.90-avail/070-full.exp: Make append/prepend-path alter
  ::env() on display/help/test/whatis modes  Like previously done for
  'setenv', set the variable passed to 'append-path' and 'prepend-path'
  procedures in ::env() array to make it available for later use during the
  modulefile evaluation.  As a side effect as append-path/prepend-path
  commands are now evaluated on help, test, display and whatis modes, invalid
  argument on these commands will raise error. Previously arguments were not
  parsed so no error raised.  Add 50-cmds/049-append-env and
  50-cmds/059-prepend-env tests to check this ::env() array change over all
  evaluation mode. Adapt 50-cmds/350-allin to check this change against
  'whatis' mode.

  * modulecmd.tcl.in: Pass full ref cnt inconsistency msg to reportWarning  To
  inhibit full message in case 'g_inhibit_errreport' is enabled.

2018-04-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modulefiles.allin/allin/1,
  testsuite/modulefiles/setenv/0.6,
  testsuite/modules.50-cmds/029-setenv-env.exp,
  testsuite/modules.50-cmds/350-allin.exp,
  testsuite/modules.90-avail/070-full.exp: Make setenv alter ::env() on
  help/test/whatis modes  Set the variable passed to 'setenv' procedure in
  ::env() array to make it available for later use during the modulefile
  evaluation.  Add 50-cmds/029-setenv-env tests to check this ::env() array
  change over all evaluation mode. Adapt 50-cmds/350-allin to check this
  change against 'whatis' mode.  Fixes #160

  * testsuite/modulefiles.allin/restoreenv/1,
  testsuite/modulefiles.allin/restoreenv/2,
  testsuite/modules.50-cmds/360-restoreenv.exp: ts: add 50-cmds/360-restoreenv
  tests  Test all kind of environment change (variable, alias, chdir, xres,
  puts) in case the evaluation of a modulefile fails: previous environment
  context should be restored.

  * modulecmd.tcl.in: Correctly save/restore x-resource env settings  Fix typo
  on x-resource setting array names

2018-04-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Add chdir/puts env settings to the per-mod saved env
  stack  Add the g_changeDir, g_stdoutPuts and g_return_text global variable
  to the saved environment context. Restore stacked value of these variable in
  case a load failed for instance, like for env and g_Aliases array variable.

  * testsuite/modulefiles.allin/allin/1, testsuite/modulefiles.allin/allin/2,
  testsuite/modulefiles.allin/allin/3, testsuite/modulefiles.allin/allin/4,
  testsuite/modulefiles.allin/allin/5,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/250-x-resource.exp,
  testsuite/modules.50-cmds/350-allin.exp: ts: add 50-cmds/350-allin tests
  Gather all Tcl modulefile commands in few modulefiles and test them against
  all the existing modes.  This commit is a record of the current situation
  where many inconsistencies can be seen especially on descriptive modes where
  too many commands are evaluated.

2018-04-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Factorize cmd switch in module proc

  * modulecmd.tcl.in: Treat list-related options within module proc  Handle
  the options related to list commands (list, savelist and avail) within the
  module procedure instead of the main procedure. Makes possible to pass these
  options to the module commands when called from a modulefile or scriptfile.

  * modulecmd.tcl.in: Remove unused show_flags arg on listModules proc  And
  simplify related display option management.

  * modulecmd.tcl.in: Handle arg list within cmdModuleAvail proc

  * modulecmd.tcl.in: Add debug msg at the start of module proc

2018-04-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/060-quar.exp,
  testsuite/install.00-init/070-stderrtty.exp: ts: fix tests where cmd arg
  separator were missing

  * testsuite/modulefiles.other/modemptyarg/aliases,
  testsuite/modulefiles.other/modemptyarg/apropos,
  testsuite/modulefiles.other/modemptyarg/avail,
  testsuite/modulefiles.other/modemptyarg/display,
  testsuite/modulefiles.other/modemptyarg/list,
  testsuite/modulefiles.other/modemptyarg/load,
  testsuite/modulefiles.other/modemptyarg/purge,
  testsuite/modulefiles.other/modemptyarg/reload,
  testsuite/modulefiles.other/modemptyarg/restore,
  testsuite/modulefiles.other/modemptyarg/save,
  testsuite/modulefiles.other/modemptyarg/savelist,
  testsuite/modulefiles.other/modemptyarg/saverm,
  testsuite/modulefiles.other/modemptyarg/saveshow,
  testsuite/modulefiles.other/modemptyarg/source,
  testsuite/modulefiles.other/modemptyarg/swap,
  testsuite/modulefiles.other/modemptyarg/swap2,
  testsuite/modulefiles.other/modemptyarg/test,
  testsuite/modulefiles.other/modemptyarg/unload,
  testsuite/modulefiles.other/modemptyarg/unuse,
  testsuite/modulefiles.other/modemptyarg/use,
  testsuite/modulefiles.other/modemptyarg/whatis,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/152-module-emptyarg.exp,
  testsuite/modules.50-cmds/330-source.exp,
  testsuite/modules.70-maint/190-emptyarg.exp: ts: add
  50-cmds/152-module-emptyarg tests  Check module commands set in modulefiles
  with an empty string argument passed to these commands. This is the "within
  modulefile" counterpart of 70-maint/190-emptyarg which is targetting
  command-line test.  Check the module commands (with their empty string
  argument) on every existing mode (load, unload, display, help, test and
  whatis).  Reveal many inconsistencies, especially on the descriptive modes
  (display, help and test), that should be fixed in future commits.

2018-04-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles/modbad/empty,
  testsuite/modules.50-cmds/151-module-onlytop.exp,
  testsuite/modules.90-avail/070-full.exp: ts: empty mod cmd call check in
  50/151-module-onlytop

  * modulecmd.tcl.in: Handle empty cmd name in module proc only

2018-03-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version
  4.1.2

  * testsuite/modules.10-use/070-unuse.exp,
  testsuite/modules.50-cmds/140-system.exp,
  testsuite/modules.80-deep/080-access.exp: testsuite: fix some re tests for
  special ts dir

2018-03-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/bin/install_test_sh: testsuite: correct IFS setup in
  install_test_sh for dash  The IFS=$';' notation on dash makes $ character
  part of field separator list.

2018-03-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/bin/install_test_csh, testsuite/install.00-init/080-args.exp,
  testsuite/modulefiles.other/putsvar: testsuite: add 080-args test to install
  suite  Add install non-regression tests to check handling of arguments
  passed on the command line of shell langs of passed to the module function
  on other langs.  Test pass of empty string, string containing space,
  variable reference, espace stuff and so on.  Hardwire some test in
  install_test_csh script to correctly pass single quote to the tested module
  command.

  * testsuite/modules.70-maint/120-autoinit.exp: testsuite: adapt
  70/120-autoinit tests to recent changes

2018-03-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.70-maint/120-autoinit.exp: Add '\' to the escape char list
  for R  "Unless it's escaped, \ is interpreted as a special character that
  identifies sectioning and mark-up macros." [1]  Also temporary fix escaping
  code for 70-maint/120-autoinit tests: no re escaping for R (need re escaping
  to better cope with lang escaping).  [1]
  https://developer.r-project.org/parseRd.pdf

  * testsuite/bin/install_test_cmake: testsuite: fix cmake test install script
  for args >2

  * modulecmd.tcl.in: Fix parameter expansion on sh-shells in quar mode
  Protect "$@" from the 'eval' command added when quarantine mode is
  activated.

2018-03-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/bin/install_test_cmake, testsuite/bin/install_test_perl,
  testsuite/bin/install_test_python, testsuite/bin/install_test_r,
  testsuite/bin/install_test_ruby, testsuite/bin/install_test_tcl: testsuite:
  check no arg or empty string arg  Adapt tests of install suite to be able to
  call module function with no passed arg if tested command equals to "NOARG".
  Also adapt these tests to call module with an empty string argument if
  tested command equals to empty string.

  * modulecmd.tcl.in: Fix Python module func to accept no arg  Adapt module
  function for Python to accept being called with no argument.

  * modulecmd.tcl.in: Empty module cmd clears arg list  If an empty command
  name is passed, it is interpreted as "help" command. For more consistency
  argument list (after command name) is cleared in this situation to always
  get the general usage message rather triggering the help mode of an
  arbitrary modulefile.

2018-03-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/bin/install_test_cmake, testsuite/bin/install_test_perl,
  testsuite/bin/install_test_python, testsuite/bin/install_test_r,
  testsuite/bin/install_test_ruby, testsuite/bin/install_test_tcl,
  testsuite/install.00-init/020-module.exp,
  testsuite/install.00-init/022-module-compat.exp,
  testsuite/install.00-init/030-options.exp,
  testsuite/install.00-init/060-quar.exp,
  testsuite/install.00-init/070-stderrtty.exp: testsuite: separate cmd args
  with ','  Adapt tests of install suite to use ',' character as argument
  separator (on same command) for non-pure shell languages (Tcl, Perl, Python,
  Ruby, Cmake and R).  Help to distinguish a separator between args from a
  whitespace within an arg.

  * modulecmd.tcl.in: Fix module func parameter expansion on Perl  To
  correctly handle parameter containing whitespace character or empty string
  parameter.

2018-03-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Fix module func parameter expansion on CMake  To
  correctly handle parameter containing whitespace character or empty
  elements. For the latter case, command definition must be adapted to the
  number of args to be able to pass, to some extend (<5 args) empty string
  element to modulecmd. There is no other way to achieve empty string element
  argument as empty strings are skipped from ${ARGV}. [1]  [1]
  https://gitlab.kitware.com/cmake/cmake/issues/16341

2018-03-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Fix module func parameter expansion on R  To correctly
  handle parameter containing whitespace character.

2018-03-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Fix module func parameter expansion on Ruby  To
  correctly handle no passed parameter or parameter containing whitespace
  character.

  * modulecmd.tcl.in: Fix module func parameter expansion on fish-shell  To
  correctly handle parameter containing whitespace, quote, escape characters.

  * modulecmd.tcl.in: Fix module func parameter expansion on sh-shells  To
  correctly handle parameter containing whitespace character.

2018-03-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.10-use/030-use.exp,
  testsuite/modules.10-use/070-unuse.exp,
  testsuite/modules.50-cmds/017-use-undo.exp,
  testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.70-maint/085-test.exp,
  testsuite/modules.70-maint/190-emptyarg.exp: testsuite: add
  70-maint/190-emptyarg tests  Test all module commands called from cmdline
  with an empty string argument. Move pre-existing empty-string-argument tests
  in this new test file.

2018-03-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Return empty res if mod name empty on
  getLoadedMatchingName

  * modulecmd.tcl.in: Report error if path is empty string on cmdModuleUnuse
  Like done on cmdModuleUse.

  * modulecmd.tcl.in: Return empty res if path empty on getAbsolutePath

  * modulecmd.tcl.in: Raise error if coll name is empty  Add check in
  getCollectionFilename procedure to raise error if passed collection name is
  an empty string. Makes collection-related commands quit in error if empty
  collection name is provided (save, restore, saverm, saveshow, is-saved).  No
  collection name provided still activate default collection, thus no error
  raise.

  * modulecmd.tcl.in: Fix default arg for cmdModule{Save*,Restore} procs
  Default collection name set as default 'coll' argument value is 'default'.
  Change default value of argument, was '', to directly match default
  collection name. It enables to distinguish between an empty string argument
  and default argument value.

2018-03-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Fix handling of empty list on Tcl8.4 lreverse proc  Was
  previously returned a list with 1 empty element instead of a list with 0
  element.

2018-03-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: No skip of empty arg on cmdModuleHelp  Will be handled
  by getPathToModule procedure, who will raise error on empty module name.

  * modulecmd.tcl.in, testsuite/modulefiles/module/empty,
  testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.90-avail/070-full.exp: Report error when empty name passed
  to getPathToModule  Triggered with 'module load ""' call in modulefile.
  Helps to know what is going on.

2018-03-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/120-siteconfig.exp: testsuite: fake win platform
  to check path var handling  Separator ';' is used instead of ':' on Windows
  platform. Add a test leveraging siteconfig.tcl-1 to check path variable
  handling on a fake Windows platform.  Set/get default path variable
  separator with new getPathSeparator procedure. This way, global variable
  g_def_separator is defined after parsing the siteconfig.tcl.

  * testsuite/modulefiles/info/shellsexp,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.50-cmds/076-alias-sub.exp,
  testsuite/modules.70-maint/120-autoinit.exp: testsuite: add 'cmd' to the
  test shell list

  * modulecmd.tcl.in: Improve Windows cmd shell support

  * modulecmd.tcl.in, testsuite/example/siteconfig.tcl-1, testsuite/mode,
  testsuite/modules.90-avail/070-full.exp: Fetch terminal width on Windows
  with 'mode' cmd  Add test with fake 'mode' command to run on Linux.

2018-03-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.61-coll/020-savelist.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.90-avail/070-full.exp: testsuite: check stty can change
  width before tests

  * testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.10-use/030-use.exp,
  testsuite/modules.10-use/031-append.exp,
  testsuite/modules.10-use/032-prepend.exp,
  testsuite/modules.50-cmds/040-append.exp: testsuite: fix tests when value
  contains parenthesis  Escape the environment value like modulecmd does when
  producing shell code. Careful when test is performed in regexp mode.

2018-03-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/005-init_ts.exp,
  testsuite/install.00-init/022-module-compat.exp,
  testsuite/install.00-init/030-options.exp: testsuite: adapt install suite
  for compat on Cygwin

  * modulecmd.tcl.in: Rewrite if/return tests in return/expr

  * Makefile, Makefile.inc.in, configure: install: handle modulecmd exe ext on
  Cygwin  Add EXEEXT Makefile variable in configure/Makefile process to append
  on Cygwin a '.exe' extension to modulecmd binary built.

  * modulecmd.tcl.in: Remove unneeded dir 'reglob' for Cygwin in findModules
  As tested, glob on Cygwin does not change symlink involved in $dir so it
  does not seem useful anymore to 'reglob' $dir on findModules procedure.

  * modulecmd.tcl.in: Remove unneeded symlink transformation for Cygwin
  Symlink created on Cygwin does not get an automatic ".lnk" suffix extension.
  ".lnk" shortcut made on Windows cannot be interpreted as a symlink either on
  Cygwin or Windows cmd. Tcl will not recognize a directory or a modulefile
  when looking at these ".lnk" shortcut.  Remove the .lnk file name
  transformation as it is not useful. In addition, 'isWin' returns false on a
  Cygwin environment as detected platform on this tool equals to 'unix' not
  'windows'.

2018-03-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.10-use/080-access.exp,
  testsuite/modules.20-locate/080-access.exp,
  testsuite/modules.20-locate/081-access-rc.exp,
  testsuite/modules.60-initx/080-access.exp,
  testsuite/modules.61-coll/080-access.exp,
  testsuite/modules.80-deep/080-access.exp: testsuite: fix access tests for
  Cygwin  Check file permission can be edited and check a file in a locked
  directory is readable or not. Adapt access tests depending on these check
  results.  No access test is perfomed if file permission cannot be edited.

  * testsuite/install.00-init/005-init_ts.exp,
  testsuite/install.00-init/050-crossshell.exp: testsuite: adapt install suite
  for Cygwin

  * testsuite/bin/install_test_csh: testsuite: fix csh empty string cmp in
  install_test_csh

  * testsuite/modules.50-cmds/040-append.exp: testsuite: fix truncated csh
  test for escaped content

2018-03-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/095-uname.exp: testsuite: fix uname test for
  Cygwin

  * testsuite/modules.10-use/030-use.exp: testsuite: use modules-specific vars
  for tests in 10-use/030-use

  * configure: install: look for 'make' on Cygwin

2018-03-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/home/.module/.target: Rm uneeded coll name
  test in cmdModuleSavelist

  * testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/120-siteconfig.exp: testsuite: test lm accessor in
  00-init/120-siteconfig

2018-03-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/180-reload.exp: testsuite: add 'reload' cmd
  tests in 70-maint

  * testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/180-unload.exp,
  testsuite/modules.50-cmds/190-load.exp,
  testsuite/modules.60-initx/020-add.exp,
  testsuite/modules.60-initx/050-rm.exp,
  testsuite/modules.70-maint/030-purge.exp,
  testsuite/modules.70-maint/040-list.exp,
  testsuite/modules.70-maint/055-whatis.exp,
  testsuite/modules.70-maint/060-apropos.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/130-aliases.exp,
  testsuite/modules.90-avail/020-single.exp: testsuite: check command
  nicknames

  * modulecmd.tcl.in: Process mod info before any content output on 'list' cmd

  * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/180-unload.exp,
  testsuite/modules.50-cmds/190-load.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.70-maint/030-purge.exp,
  testsuite/modules.70-maint/040-list.exp,
  testsuite/modules.70-maint/055-whatis.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/153-is-loaded.exp,
  testsuite/modules.70-maint/157-info-loaded.exp,
  testsuite/modules.90-avail/020-single.exp: Detect inconsistent loaded
  environment state  When needing to correlate the information from the
  LOADEDMODULES and the _LMFILES_ environment variables.  Does not affect
  module commands not requiring correlation of these informations, like
  whatis/avail. Error raised on load, unload, switch, reload, purge, list,
  save and restore commands.  May affect info-loaded or is-loaded commands if
  module passed as argument to these command is specified as a full path
  modulefile.

2018-03-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Set/get accessors for g_loadedModules{,Files} arrays
  Define set/get accessor procedures to handle the g_loadedModules and
  g_loadedModuleFiles arrays.  Trigger in the get accessors the load of
  currently defined information in LOADEDMODULES and _LMFILES_ in the two
  arrays, by calling the cacheCurrentModules procedure.  Make this loading
  procedure perform its work only once by using a global g_lm_info_cached
  flag.  cacheCurrentModules is not called anymore at the start of the
  modulecmd execution but only once and when needed.

2018-03-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.00-init/071-args.exp: Refactor cmd arg
  nb test in module proc

  * modulecmd.tcl.in: Refactor command name setup in module proc

  * modulecmd.tcl.in: Refactor calling level check for cmd in module proc

  * modulecmd.tcl.in: Resolve module cmd alias/shortcut prior running cmd

  * testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/120-siteconfig.exp: testsuite: file read w/o err
  report in 00/120-siteconfig

  * testsuite/modules.80-deep/080-access.exp: testsuite: test dfl res when
  sibbling dir locked  Add test in 80-deep/080-access to remove access to a
  modulefile from a sibbling directory than implicit default for this module.
  Check that implicit default is not impacted by its sibbling change.

2018-03-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/180-unload.exp,
  testsuite/modules.50-cmds/190-load.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.70-maint/030-purge.exp,
  testsuite/modules.70-maint/040-list.exp,
  testsuite/modules.70-maint/153-is-loaded.exp: Ignore empty path element in
  _LMFILES_  If _LMFILES_ environment variable contains empty module element
  (for instance when it equals to '/path/to/mod1::/path/to/mod2'), this empty
  element is ignored.  This way it ensures all elements from the _LMFILES_
  variable are non-empty string.  Add tests to check module commands against a
  _LMFILES_ variable containing empty element.

  * Makefile: install/testsuite: dl nagelfar from alt. location  If primary
  link is not ok.

2018-03-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/180-unload.exp,
  testsuite/modules.50-cmds/190-load.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.70-maint/030-purge.exp,
  testsuite/modules.70-maint/040-list.exp,
  testsuite/modules.70-maint/153-is-loaded.exp: Ignore empty path element in
  LOADEDMODULES  If LOADEDMODULES environment variable contains empty module
  element (for instance when it equals to 'mod1::mod2'), this empty element is
  ignored.  This way it ensures all elements from the LOADEDMODULES variable
  are non-empty string.  Add tests to check module commands against a
  LOADEDMODULES variable containing empty element.

  * modulecmd.tcl.in, testsuite/modules.10-use/030-use.exp,
  testsuite/modules.10-use/070-unuse.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/180-unload.exp,
  testsuite/modules.50-cmds/190-load.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.70-maint/040-list.exp,
  testsuite/modules.70-maint/055-whatis.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/100-path.exp,
  testsuite/modules.70-maint/110-paths.exp,
  testsuite/modules.70-maint/130-aliases.exp,
  testsuite/modules.70-maint/155-is-used.exp,
  testsuite/modules.90-avail/070-full.exp: Ignore empty path element in
  MODULEPATH  If MODULEPATH environment variable contains empty path element
  (for instance when it equals to '/path/to/dir1::/path/to/dir2'), this empty
  element is ignored.  This way it ensures all elements from the MODULEPATH
  variable are non-empty string.  Add tests to check module commands against a
  MODULEPATH variable containing empty element.

2018-03-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst, init/bash.in, init/ksh.in, init/sh.in, init/zsh.in,
  testsuite/bin/install_test_sh, testsuite/install.00-init/070-stderrtty.exp:
  init: shield autoinit res from param expansion on sh-shells  Quote autoinit
  result for eval interpretation on SH-kind shells to avoid parameter
  expansion to randomly occur on generated code depending on file or directory
  names of current working directory.  Test basic module commands in install
  testsuite with a 'something (test)' file existing in current working
  directory.  Fixes bug reported at [1].  [1]
  https://bugzilla.redhat.com/show_bug.cgi?id=1549664

  * modulecmd.tcl.in: Fix whatis result on empty dir name

  * modulecmd.tcl.in, testsuite/modulefiles/puts/8,
  testsuite/modules.50-cmds/310-puts.exp,
  testsuite/modules.70-maint/080-help.exp,
  testsuite/modules.90-avail/070-full.exp: Call real 'puts' command in caller
  context  To be able to 'puts' content on opened channels, the 'puts' command
  should be executed from the modulefile interpreter context. Elsewhere,
  master interpreter does not know about the channels opened in its
  sub-interpreters.  Adapt interpreter setup to add a command renaming step,
  to avoid the puts modulefile alias to overwrite the original puts command.
  puts modulefile alias now also pass the caller interpreter reference as
  first argument to be able to execute the original puts command, renamed
  _puts, within context of this caller interpreter.  Handle wrong argument
  number error in putsModfileCmd to report an error for 'puts' command rather
  '_puts' which should not be known by users.  Add non-regression test to
  check puts command against opened channel.  Fixes #157

2018-02-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/siteconfig.tcl-1,
  testsuite/modules.50-cmds/130-conflict-full.exp: testsuite: load again
  conflict test in 50/130-conflict-full

  * testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/120-siteconfig.exp: testsuite: terse+numbered disp
  test in 00/120-siteconfig

  * modulecmd.tcl.in: Rely on elt count in displayElementList  Do not check
  element count before calling displayElementList, rely on element count made
  by displayElementList procedure to return if no element has to be displayed.

  * testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/120-siteconfig.exp: testsuite: parseAccessIssue
  custom msg in 00/120-siteconfig

  * testsuite/modules.70-maint/120-autoinit.exp: testsuite: MODULE_VERSION set
  prior autoinit test

  * modulecmd.tcl.in, testsuite/home/coll7, testsuite/home/coll8,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/060-saveshow.exp,
  testsuite/modules.61-coll/999-cleanup.exp: Handle full path mod in
  collection  Enable to save and restore collections containing full path
  modulefiles eventually with no modulepath defined.  Valid collection test is
  changed from 'no modulepath saved' to 'no modulepath AND no loaded module
  saved'.

  * modulecmd.tcl.in, testsuite/home/.module/coll6.target,
  testsuite/modulefiles.path1/novercross,
  testsuite/modulefiles.path2/novercross,
  testsuite/modulefiles.path3/novercross,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/020-savelist.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/080-access.exp,
  testsuite/modules.61-coll/999-cleanup.exp: Rewrite
  getSimplifiedLoadedModuleList proc  Use helper list if it is provided rather
  than only in case no MODULEPATH is defined.  Rework name simplification code
  to make use of getPathToModule procedure instead of listModules. Loop around
  as long as parent name matches tested modulefile, so "foo/bar/version" can
  returned "foo" if "foo/bar/version" is default version of "foo".  Add
  non-regression tests mixing deep and virtual modulefiles whose definitions
  are spread through multiple modulepaths. Help checking default versions are
  correctly detected in complex situation.

2018-02-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/home/coll5, testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/060-saveshow.exp,
  testsuite/modules.61-coll/999-cleanup.exp: testsuite: prepended modulepath
  tests in 61-coll

  * modulecmd.tcl.in, testsuite/modulefiles/append/6.0,
  testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.90-avail/070-full.exp: testsuite: bad ref counter tests in
  50-cmds/040-append

  * .travis.yml: travis: remove already installed deps on OS X  Which led to
  error when an upgrade is available for an already installed brew package.

  * testsuite/modules.10-use/030-use.exp: testsuite: test path with extra ./..
  in 10-use/030-use

  * testsuite/example/siteconfig.tcl-1,
  testsuite/modules.90-avail/070-full.exp, testsuite/stty: testsuite: simulate
  solaris stty in 90-avail/070-full

  * modulecmd.tcl.in, testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/020-savelist.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/050-saverm.exp,
  testsuite/modules.61-coll/060-saveshow.exp,
  testsuite/modules.61-coll/999-cleanup.exp,
  testsuite/modules.70-maint/154-is-saved.exp: Check HOME var exists before
  using in findCollections  Add a test for every collection-related commands
  to check behavior when HOME variable is not defined.

  * testsuite/modules.10-use/070-unuse.exp: testsuite: unuse with ref>1 in
  10-use/070-unuse

  * testsuite/example/siteconfig.tcl-1,
  testsuite/modules.90-avail/070-full.exp: testsuite: no flag report test in
  90-avail/070-full

2018-02-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.70-maint/040-list.exp: testsuite: regular output test in
  70-maint/040-list

  * testsuite/modulefiles/system/1.0,
  testsuite/modules.50-cmds/140-system.exp,
  testsuite/modules.90-avail/070-full.exp, testsuite/systest0: testsuite:
  display/exit 0 tests in 50-cmds/140-system

  * testsuite/modulefiles/append/5.0,
  testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.90-avail/070-full.exp: testsuite: large val append test in
  50-cmds/040-append

  * testsuite/modules.90-avail/070-full.exp: testsuite: small term width test
  in 90-avail/070-full

  * testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.70-maint/170-contact.exp: testsuite: add
  70-maint/170-contact test  Check error message of a broken modulefile when
  MODULECONTACT environment variable is set.

  * modulecmd.tcl.in: Switch over state env vars rather if/elseif

2018-02-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles/loc_sym/alias11,
  testsuite/modules.20-locate/040-alias.exp,
  testsuite/modules.90-avail/070-full.exp: testsuite: alias def loop test in
  20-locate/040-alias

  * modulecmd.tcl.in, testsuite/modules.10-use/030-use.exp: testsuite: test
  modpath var ref in 10-use/030-use

  * contrib/etc/rc-modulepath: contrib: add example global rc file  Ensuring
  MODULEPATH definition, if found empty or undefined. This configuration helps
  fixing [1].  [1] https://bugzilla.redhat.com/show_bug.cgi?id=1139165

  * testsuite/modulefiles/loc_sym/alias10,
  testsuite/modules.20-locate/040-alias.exp,
  testsuite/modules.90-avail/070-full.exp: testsuite: test 'module-info alias'
  on non-alias mod

2018-02-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles/uname/cache, testsuite/modulefiles/uname/unk,
  testsuite/modules.50-cmds/095-uname.exp,
  testsuite/modules.90-avail/040-wild.exp,
  testsuite/modules.90-avail/070-full.exp: testsuite: add uname tests in
  50-cmds/095-uname  Check uname internal cache value mechanism and result
  obtained when an unknown sub-command is passed to uname.

  * testsuite/modules.00-init/100-pager.exp: testsuite: 'puts stderr' test in
  00-init/100-pager  Test that stderr output made during modulefile evaluation
  comes in correct order regarding other debugging information when pager is
  enabled.

2018-02-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/120-siteconfig.exp: testsuite: add 120-siteconfig
  tests in 00-init suite

  * testsuite/modules.00-init/100-pager.exp: testsuite: check bad cmd set as
  pager  Add tests to 100-pager in 00-init suite to check situation where
  defined pager command refers to a non-existent file.

  * testsuite/install.00-init/070-stderrtty.exp: testsuite: check args
  handling in 070-stderrtty  Set a directory with name starting by '$' to
  check if shell arguments are correctly escaped.  Complements #154.

  * testsuite/install.00-init/005-init_ts.exp,
  testsuite/install.00-init/070-stderrtty.exp: testsuite: add 070-stderrtty
  tests to install suite  Check installed Modules version when STDERR channel
  is attached to a TTY.

  * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Improve
  passed args protection on _moduleraw  As suggested by @degremont on #154, $@
  is better suited than $* when surrounded by double-quotes to escape passed
  arguments.  Improve fix for #154.

2018-02-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .travis.yml, Makefile, testsuite/example/siteconfig.tcl-1,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/100-pager.exp,
  testsuite/modules.70-maint/120-autoinit.exp: testsuite/travis: add cases
  forcing term attach state

2018-02-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.70-maint/120-autoinit.exp: Change 'global var' to '::var'
  Work on global variables in procedure with '::var' syntax rather declaring
  them with 'global' command. Linking global variable to local scope with
  'global' command is expensive in terms of performance and only useful if
  variable is accessed more than 15 times [1].  [1] https://wiki.tcl.tk/1177

2018-02-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: fix typo in v4.1.1 release notes

  * MIGRATING.rst, NEWS.rst, contrib/rpm/environment-modules.spec.in: Release
  of version 4.1.1

  * contrib/rpm/environment-modules.spec.in: rpm: add procps in build
  requirements  As 'ps' is now checked at ./configure time.

2018-02-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst, modulecmd.tcl.in,
  testsuite/modules.00-init/100-pager.exp: Ignore LESS env var for pager
  configuration  As for the PAGER environment variable, do not consider
  anymore the LESS environment variable for Modules pager configuration in
  order to avoid side effects coming from a general pager configuration not
  compatible with Modules pager handling.  Previously when LESS was spotted
  defined, default paging command options were blanked if default pager was
  'less'. With this change, even if LESS environment variable is defined,
  default paging command options are still taken into account.  Adapt doc and
  tests accordingly.  Complements #146

  * contrib/rpm/environment-modules.spec.in: rpm: move hostname requirement to
  compat subpackage  As suggested by RH#1545369 [1]  [1]
  https://bugzilla.redhat.com/show_bug.cgi?id=1545369

2018-02-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .travis.yml: travis: add OS X test cases  Cannot install R currently on OS
  X image (homebrew issue with gcc install). Should be added later on.

  * modulecmd.tcl.in: Zero tty cols equals cols not found  'stty size' on OS X
  Travis-CI environment returns '0 0'

  * modulecmd.tcl.in: Protect args passed to _moduleraw SH function  Avoid
  current working directory content to interfere with the arguments to pass
  from module to _moduleraw function on SH-kind shells when shell is attached
  to a terminal.  Fixes #154

2018-02-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/Makefile: install: workaround Linux+Make 3.81 '\\\n' issue  Was
  affecting tests on Ubuntu Trusty

2018-02-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/install.00-init/005-init_ts.exp,
  testsuite/install.00-init/060-quar.exp,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.70-maint/150-append-path.exp,
  testsuite/modules.70-maint/152-remove-path.exp: DYLD/LD vars cannot be
  path-updated on OSX if SIP-enabled  Path-variable handling is not effective
  on OSX for DYLD and LD variables in case System Integrity Protection (SIP)
  id enabled: in this situation these variables are not exported in subshell
  context, so they appear undefined to modulecmd.tcl.  Nullify modshare
  variable content for the moment, do not print warning message. Adapt the
  DYLD/LD test cases when running on OSX if SIP is detected enabled.

  * init/Makefile: install: more portable \n to build init/modulerc  That also
  works on OS X.

2018-02-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/005-init_ts.exp,
  testsuite/install.00-init/050-crossshell.exp: testsuite: fix sh/ksh
  sub/cross shell tests on OSX

  * testsuite/modules.50-cmds/095-uname.exp: testsuite: escape ';' in 'uname
  -v' res on OSX

  * configure: install: fix configure script for OSX  On Darwin, 'make' is a
  GNU make, GNU grep is called 'ggrep' and autopoint is installed in a
  gettext-specific bin directory.

  * doc/source/module.rst, modulecmd.tcl.in,
  testsuite/modules.00-init/100-pager.exp: Ignore PAGER env var for pager
  configuration  Do not consider anymore the PAGER environment variable for
  Modules pager configuration in order to avoid side effects coming from a
  general pager configuration not compatible with Modules pager handling.
  This change makes Modules pager implementation moving away from Git pager
  implementation (which was taken as reference to model configuration behavior
  of Modules pager). Git is able to withstand any pager configuration,
  especially to quit pager if content fits in one screen. Not the case with
  our implementation currently, so it is safer to only take into account pager
  configuration that is specific to Modules.  Adapt doc and tests accordingly.
  Fixes #146

2018-02-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Start pager only if some text has to be printed  Start
  pager if enabled at first message to print on stderr. No pager is started
  anymore when nothing need to be outputted on stderr.  To achieve that pager
  setup is split on a configuration and enablement initialization (initPager
  procedure) and startup (startPager procedure). Split in two procedures is
  required to report debug messages on pager configuration that will be
  printed through the started pager.  Partially fix #146.

  * modulecmd.tcl.in: Split report procedures in pre and post init err report
  Define 2 procedures for reportDebug, reportErrorAndExit and report. First to
  use before error report being initialized, to bufferize messages. The second
  one to be used to effectively report messages once error report being
  initialized.  initErrorReport procedure handles the procedure switch by use
  of 'rename' Tcl command.  g_init_errreport variable is removed as the
  procedure split make it useless.  No performance change is observed.

2018-02-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.70-maint/150-append-path.exp,
  testsuite/modules.70-maint/152-remove-path.exp: Use specific modshare var
  name for DYLD-specific vars  Name modshare variable for DYLD-specific
  variables MODULES_MODSHARE_<var> rather <var>_modshare to avoid warning
  messages due to DYLD detecting unknown variables when using _modshare
  suffix.  A getModshareVarName procedure has been created to determine the
  variable name to use for reference counter variables. Maybe all modshare
  variables will move to a MODULES_MODSHARE prefix fashion in the future.
  Fixes #153

  * modulecmd.tcl.in, testsuite/modules.70-maint/040-list.exp,
  testsuite/modules.70-maint/045-listlong.exp: Harden list cmd against
  unexistent mod  Check loaded module is found before outputing stats on it.

  * modulecmd.tcl.in, testsuite/modulefiles/info/isused,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/180-unload.exp,
  testsuite/modules.50-cmds/190-load.exp,
  testsuite/modules.70-maint/040-list.exp,
  testsuite/modules.70-maint/055-whatis.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/100-path.exp,
  testsuite/modules.70-maint/110-paths.exp,
  testsuite/modules.70-maint/130-aliases.exp,
  testsuite/modules.90-avail/070-full.exp: Clean MODULEPATH content before
  using it  Improve getModulePathList procedure to pass each directory element
  part of the MODULEPATH env variable through getAbsolutePath. Ensure this way
  each directory has correct form to work with afterward.  A 'set_abs'
  argument is added to getModulePathList procedure, enabled by default, to
  apply this new cleanup behavior. Not applied for cmdModuleUse and
  cmdModuleUnuse who will need extra work to detect relative/full paths
  already set in MODULEPATH.  Add bunch of tests to check the various commands
  when modulepath directory has trailing slash at its end.  Fixes #152

2018-02-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/csh.in: init: no call to manpath if MANPATH defined on csh

  * INSTALL.rst: doc: clarify use of 'gmake' to install on non-Linux

  * init/csh.in: init: correct switchml def for Solaris pure csh

2018-02-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/040-subshell.exp,
  testsuite/install.00-init/050-crossshell.exp: testsuite: fix sh sub/cross
  shell tests on Solaris

2018-02-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/csh.in, testsuite/bin/install_test_csh: init/testsuite: need quotes
  for eval arg on pure csh

2018-02-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/bin/install_test_csh, testsuite/bin/install_test_fish,
  testsuite/bin/install_test_sh, testsuite/install.00-init/005-init_ts.exp:
  testsuite: detect ksh93 if ksh not found  Useful on FreeBSD where ksh is not
  there only ksh93 binary.

2018-02-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/bin/install_test_csh: testsuite: use pure csh syntax in
  install_test_csh

  * testsuite/install.00-init/010-environ.exp: testsuite: setup basic locale
  for install tests

  * init/Makefile: install: portable newline echo in Makefile

  * Makefile, Makefile.inc.in, configure, init/Makefile: install: check rmdir
  '--ignore-fail-on-non-empty' exists

  * Makefile, Makefile.inc.in, configure: install: check for GNU grep on
  Solaris

  * testsuite/install.00-init/005-init_ts.exp,
  testsuite/install.00-init/040-subshell.exp,
  testsuite/install.00-init/050-crossshell.exp: testsuite: fix sh sub/cross
  shell tests on FreeBSD

  * init/Makefile: install: fix multi modulepath build in init/modulerc

  * init/Makefile: install: define a portable \n to build init/modulerc

2018-01-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile.inc.in, configure, init/Makefile, init/bash.in, init/csh.in,
  init/fish.in, init/ksh.in, init/sh.in, init/zsh.in: install/init: use
  MANPATH if manpath cmd not there

  * Makefile, Makefile.inc.in, configure: install: save 'git worktree' avail
  for Makefile

  * configure: install: check for 'gmake' cmd on non-Linux systems

2018-01-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * configure, contrib/envml: Use 'env' to start 'bash' in shebang  Adapt
  configure and envml scripts to call bash interpreter through env utility, as
  bash is not installed under /bin on some systems like FreeBSD.  Would be a
  lot more better if 'configure' script were a /bin/sh script.

2018-01-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.61-coll/020-savelist.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.90-avail/070-full.exp: Specific code to query tty col num
  on SunOS

  * testsuite/install.00-init/005-init_ts.exp: testsuite: use tclsh found at
  configuration time  For install testsuite, do not try to find tclsh, use
  location found at configure time.

  * configure: install: detect tclsh8.{4,5,6} if no tclsh found  Adapt
  configure script to be able to test multiple variant of a command name. Use
  that to detect if a version-specific of tclsh is available in case no
  generic 'tclsh' binary exists.

  * testsuite/modules.20-locate/043-virtual.exp: testsuite: no illegal dir op
  on FreeBSD

2018-01-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/bash.in, init/ksh.in, init/sh.in, init/zsh.in, modulecmd.tcl.in,
  testsuite/install.00-init/005-init_ts.exp,
  testsuite/install.00-init/030-options.exp,
  testsuite/install.00-init/050-crossshell.exp,
  testsuite/modules.70-maint/120-autoinit.exp: init: use default value on
  undef var in sh shells  To avoid unbound variables on bash '-eu' mode for
  instance, use a default value on undefined variable. Adapt SH init scripts
  and autoinit code.  Add 'bash -eu' to the list of tested shells on
  'testinstall' suite.  Fixes #151

2018-01-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: No local
  var used in sh shell autoinit code  Considering the diversity of ways local
  variables are handled through the sh-variants ('local' known everywhere
  except on ksh, 'typeset' known everywhere except on pure-sh, and on some
  systems the pure-sh is in fact a 'ksh'), no local variables are defined and
  these variables that should have been local are unset at the beginning and
  the end.  Fixes #147

  * init/Makefile: install: portable symlink copy with '-R -P'  Make symlink
  copy portable with 'cp -R -P' (to support SunOS)

  * configure: install: check automake/aclocal bef. compat configure

  * init/Makefile: install: 'cp --remove-destination' is not portable  Adapt
  'cp --remove-destination' into rm + cp commands as the --remove-destination
  is not understood everywhere (not known on SunOS for instance).

2018-01-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile, Makefile.inc.in, configure, doc/Makefile, site.exp.in,
  testsuite/install.00-init/030-options.exp: install: give ability to install
  without doc built  If no sphinx-build found, warn user but still make it
  possible to build and install Modules (without the documentation).  Enables
  to install Modules from git repository for test purpose on systems where
  python-sphinx is not available in regular pakage repositories.

  * Makefile.inc.in, configure, init/Makefile, init/profile-compat.sh.in,
  init/profile.sh.in: install: get 'ps' and 'basename' loc in configure  Check
  paths in configure script to detect the location of the 'ps' and 'basename'
  commands. Then use this found location in profile.sh scripts.  First part of
  #147 is solved here.

2018-01-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Write once all elt list in terse mode

  * modulecmd.tcl.in, testsuite/modules.70-maint/070-display.exp: Make
  separator line fit small screen width

2018-01-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/Makefile: doc/Makefile: Use $(MAKE) variable for recursive cmds

2018-01-19  Felix Neumärker <xdch47@posteo.de>

  * Makefile: Makefile: Use $(MAKE) variable for recursive cmds

2018-01-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version
  4.1.0

  * MIGRATING.rst: doc: describe v4.1 in MIGRATING

2018-01-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/rpm/environment-modules.spec.in: rpm: add 'less' to build
  requirements  To pass configure step as 'less' is defined as default pager
  and build enables paging capabilities in module.

  * modulecmd.tcl.in, testsuite/modulefiles.deep/modvirt/.common,
  testsuite/modulefiles.deep/modvirt/.modulerc,
  testsuite/modulefiles.deep/modvirt/dir1/.modulerc,
  testsuite/modulefiles.path1/dvcross/.base,
  testsuite/modulefiles.path1/dvcross/.modulerc,
  testsuite/modulefiles.path2/dvcross/.base,
  testsuite/modulefiles.path2/dvcross/.modulerc,
  testsuite/modulefiles.path3/dvcross/.base,
  testsuite/modulefiles.path3/dvcross/.modulerc,
  testsuite/modules.20-locate/069-cross.exp,
  testsuite/modules.80-deep/010-init_ts.exp,
  testsuite/modules.80-deep/020-load.exp,
  testsuite/modules.80-deep/021-unload.exp,
  testsuite/modules.80-deep/022-switch.exp,
  testsuite/modules.80-deep/030-display.exp,
  testsuite/modules.80-deep/050-whatis.exp,
  testsuite/modules.80-deep/080-access.exp,
  testsuite/modules.80-deep/999-cleanup.exp: Correctly handle deep virtual
  modules  Fix getModules procedure to correctly handle virtual modules when
  the sub-directories they refer to does not exist on the filesystem. For
  instance 'modvirt/dir0/sub1/1.0' may be a virtual module defined with
  module-virtual modvirt/dir0/sub1/1.0 .common  in 'modvirt/.modulerc' where
  modvirt/dir0 and modvirt/dir0/sub1 do not correspond to existing directories
  on the filesystem.  Now getModules will define among its result virtual
  directory entries to make the deep virtual modules findable when, for
  instance searching a default version.  Add non-regression tests in 20-locate
  and 80-deep suites for the deep virtual module use-case.

2018-01-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.20-locate/043-virtual.exp: testsuite: less _modshare
  checks in 043-virtual  Simplify test code and protect it from Tcl array to
  list sorting issue.

  * NEWS.rst, doc/source/diff_v3_v4.rst, doc/source/modulefile.rst: doc: desc.
  module-virtual command

  * testsuite/modulefiles/loc_sym/exec3,
  testsuite/modules.20-locate/048-symexec.exp,
  testsuite/modules.90-avail/070-full.exp: testsuite: check module-virtual cmd
  in display mode

  * doc/source/conf.py, modulecmd.tcl.in: New year copyright mention update

  * modulecmd.tcl.in, testsuite/modulefiles/loc_virt2/.modulerc,
  testsuite/modulefiles/loc_virt2/2.0,
  testsuite/modules.20-locate/043-virtual.exp,
  testsuite/modules.90-avail/070-full.exp: Virtual module target may be loaded
  as is  Adapt similar loaded module detection code and add tests to check
  behavior when the target of a virtual module is loaded as is and a virtual
  module targeting it is loaded/unloaded/switched/etc.  Also set test cases on
  module mixing regular and virtual versions, playing with short or full path
  name representation.

  * modulecmd.tcl.in, testsuite/modules.20-locate/043-virtual.exp,
  testsuite/modules.50-cmds/170-swap.exp: Update g_loadedModuleFiles arrays in
  load/unload cmds  Update the content of the g_loadedModuleFiles cache array
  right after loading or unloading a module. Helps subsequent actions to learn
  the exact current state, especially in case of single command implying
  multiple actions (switch or load/unload of multiple modules)

2018-01-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.20-locate/043-virtual.exp: Handle
  _LMFILES_ path var in duplicates mode  Multiple loaded virtual modules may
  target same file so handling of the _LMFILES_ path variable is changed to a
  'duplicates' mode to ensure a file entry will always correspond to a module
  entry in LOADEDMODULES.  Adapt entry removal in _LMFILES_ variable to delete
  the entry at the index corresponding to the index of the entry removed in
  LOADEDMODULES.  Add new test cases to check this duplicate mode entries in
  all situation where _LMFILES_ content is involved.

2018-01-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles/loc_virt1/.common,
  testsuite/modulefiles/loc_virt1/.modulerc,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.20-locate/043-virtual.exp,
  testsuite/modules.70-maint/130-aliases.exp,
  testsuite/modules.90-avail/070-full.exp, testsuite/virttargets/loc_virt:
  testsuite: add module-virtual cmd tests

2018-01-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/etc/rc, testsuite/modulefiles.path1/vcross/.base,
  testsuite/modulefiles.path1/vcross/.modulerc,
  testsuite/modulefiles.path2/vcross/.base,
  testsuite/modulefiles.path2/vcross/.modulerc,
  testsuite/modulefiles.path3/vcross/.base,
  testsuite/modulefiles.path3/vcross/.modulerc,
  testsuite/modulefiles/dirmodvirt/.modulerc,
  testsuite/modulefiles/dirmodvirt/1.0,
  testsuite/modulefiles/loc_dvv1/.common,
  testsuite/modulefiles/loc_dvv1/.modulerc,
  testsuite/modulefiles/loc_dvv1/.version,
  testsuite/modulefiles/loc_rcv1/.base,
  testsuite/modulefiles/loc_rcv1/.common,
  testsuite/modulefiles/loc_rcv1/.modulerc,
  testsuite/modulefiles/loc_rcv2/.common,
  testsuite/modulefiles/loc_rcv2/.modulerc,
  testsuite/modulefiles/loc_sym/.common, testsuite/modulefiles/loc_sym/alias8,
  testsuite/modulefiles/loc_sym/alias9,
  testsuite/modulefiles/loc_sym/getvers10,
  testsuite/modulefiles/loc_sym/getvers9,
  testsuite/modulefiles/loc_sym/version24,
  testsuite/modulefiles/loc_sym/version25,
  testsuite/modulefiles/loc_sym/version26,
  testsuite/modules.20-locate/030-defvers.exp,
  testsuite/modules.20-locate/031-defvers2.exp,
  testsuite/modules.20-locate/040-alias.exp,
  testsuite/modules.20-locate/045-symvers.exp,
  testsuite/modules.20-locate/046-getsym.exp,
  testsuite/modules.20-locate/050-locrc.exp,
  testsuite/modules.20-locate/060-rc.exp,
  testsuite/modules.20-locate/067-hidden.exp,
  testsuite/modules.20-locate/069-cross.exp,
  testsuite/modules.20-locate/080-access.exp, testsuite/virttargets/loc_rcv:
  testsuite: add virtual modules location tests

2018-01-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Cache modulefile validity check result  Add in
  checkValidModule procedure a 'g_modfileValid' global array to save validity
  check result of a modulefile at first query, then reuse this cached result
  on subsequent queries on same modulefile.

  * modulecmd.tcl.in: Cache file mtime query results  Add 'getFileMtime' to
  query file modification time. On first call, cache the result then use cache
  on subsequent calls for the same file.

  * modulecmd.tcl.in: Find modulepath of virtual module on 'search' cmd  Add
  'findModulepathFromModulefile' procedure to get the modulepath corresponding
  to a passed modulefile (or modulerc).  Adapt 'search' cmd when looking at
  module alias target, to correctly handle virtual modules. Modulepath
  directory is retrieved, when detecting a virtual module, from the modulerc
  file that has defined this virtual module.

  * modulecmd.tcl.in: Handle loaded virtual modules on 'list' cmd  Introduce
  'isModuleVirtual' procedure to detect a module is virtual based on its name
  and modulefile. A module is stated virtual if its name cannot be found at
  end of its modulefile name.  When looking at loaded modules during a 'list'
  command, treat specifically virtual modules, almost like full path modules.
  Tags on loaded virtual module are not search as once loaded we do not know
  anymore from what modulepath directory the virtual module was coming from.

2018-01-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modulefiles/source/1.1,
  testsuite/modulefiles/source/1.2, testsuite/modules.50-cmds/330-source.exp,
  testsuite/modules.90-avail/070-full.exp: Treat file relative to cwd in
  source/unsource  So a relative file to source from a modulefile or modulerc,
  is relative starting from the directory of the modulefile/modulerc sourcing
  it.  Add a specific case to treat empty file name by the way.

  * modulecmd.tcl.in, testsuite/modules.10-use/030-use.exp,
  testsuite/modules.50-cmds/015-use.exp: Specific err on cmdModuleUse when
  empty dir name

  * modulecmd.tcl.in, testsuite/modulefiles/conflict/relpath,
  testsuite/modulefiles/info/isused, testsuite/modulefiles/module/relpath,
  testsuite/modulefiles/prereq/relpath, testsuite/modulefiles/use/4.1,
  testsuite/modules.50-cmds/015-use.exp,
  testsuite/modules.50-cmds/017-use-undo.exp,
  testsuite/modules.50-cmds/122-prereq-fullpath.exp,
  .../modules.50-cmds/132-conflict-fullpath.exp,
  testsuite/modules.50-cmds/150-module.exp: Cwd during interp corresponds to
  modfile dir  Now getAbsolutePath procedure, which make a path passed as
  argument an absolute path, check the current path of the interpreted
  modulefile or modulerc rather always taking the current path of the module
  command execution.  So a modulefile or modulerc can use relative paths based
  on a determistic way as it is now based on their location. Previously it was
  not possible as relative paths were dependent of the location from where the
  module command was executed.  If ModulesCurrentModulefile variable is not
  empty, getAbsolutePath nows it is called during a modulefile/modulerc
  interpretation, so it takes the directory name of this
  ModulesCurrentModulefile as current working directory.

  * modulecmd.tcl.in, testsuite/modulefiles/modvar/modfile,
  testsuite/modulefiles/modvar/submodfile,
  testsuite/modules.50-cmds/340-modvar.exp,
  testsuite/modules.90-avail/070-full.exp: Handle ModulesCurrentModulefile in
  a push/pop fashion  Refactor handling of the ModulesCurrentModulefile public
  global variable to get same treatment like ModuleName with a push/pop
  mechanism.  Then call to the new pushModuleFile and popModuleFile procedures
  is gathered in the execute-modulefile and execute-modulerc procedures to
  push filename before interpretation and popping it when interpretation is
  done.  Change is that ModulesCurrentModulefile is reset after
  interpretation, so when this variable is queried in a master interpretation
  context it is possible to know if some file is currently being interpreted
  or not (value restored to the empty string).

2018-01-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Introduce 'module-virtual' modulefile command  Introduce
  the virtual module concept with the 'module-virtual' modulefile command.
  This new command takes a module name as first argument and a modulefile
  location as second argument.  A virtual module stands for this module name
  associated to a modulefile. The modulefile is the script interpreted when
  loading or unloading the virtual module which appears or can be found with
  its virtual name.  Like a module aliases, virtual modules are expected to be
  defined within modulerc files (at whatever rc level). Virtual modules can be
  targeted by aliases or symbolic versions. They also compete with aliases and
  regular modules for the implicit default version of a module.  Multiple
  virtual modules may target the same modulefile, which can distinguish
  between these various virtual names by use of the "[module-info name]"
  command.  A virtual module cannot be loaded using a full path name (merge of
  its module path and its module name) as this file does not exist.  Based on
  a proof of concept made by Bert Wesarg [1].  [1]
  https://github.com/bertwesarg/modules-tcl/commit/545e9f

2018-01-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, modulecmd.tcl.in, testsuite/modulefiles/spread/1.0,
  testsuite/modulefiles/spread/2.0, testsuite/modulefiles/spread/3.0,
  testsuite/modulefiles/spread/4.0, testsuite/modulefiles/spread/5.0,
  testsuite/modulefiles/spread/6.0, testsuite/modulefiles/spread/7.0,
  testsuite/modulefiles/spread/8.0,
  testsuite/modulefiles/spreadrc/dir1/.modulerc,
  testsuite/modulefiles/spreadrc/dir1/1.0,
  testsuite/modulefiles/spreadrc/dir2/.modulerc,
  testsuite/modulefiles/spreadrc/dir2/1.0,
  testsuite/modulefiles/spreadrc/dir3/.modulerc,
  testsuite/modulefiles/spreadrc/dir3/1.0,
  testsuite/modulefiles/spreadrc/dir4/.modulerc,
  testsuite/modulefiles/spreadrc/dir4/1.0,
  testsuite/modulefiles/spreadrc/dir5/.modulerc,
  testsuite/modulefiles/spreadrc/dir5/1.0,
  testsuite/modulefiles/spreadrc/dir6/.modulerc,
  testsuite/modulefiles/spreadrc/dir6/1.0,
  testsuite/modulefiles/spreadrc/dir7/.modulerc,
  testsuite/modulefiles/spreadrc/dir7/1.0,
  testsuite/modulefiles/spreadrc/dir8/.modulerc,
  testsuite/modulefiles/spreadrc/dir8/1.0: Correctly handle list var when
  reset interp  When restoring an initial interpreter variable which was a
  list, issue occured as the 'slave eval set' was given more than one value
  argument. Passing values enclosed in a 'list' fixes the issue.  Improve
  non-regression tests to ensure expected handling will persist over times.
  Closes #145

2018-01-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/030-options.exp: testsuite: check modulecmd on
  compat only if inst.

  * NEWS.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: desc
  MODULES_CMD var and modulecmd wrapper

  * testsuite/install.00-init/030-options.exp: testsuite: check modulecmd in
  install suite

  * .gitignore, Makefile, contrib/rpm/environment-modules.spec.in,
  contrib/scripts/modulecmd.in: install: introduce modulecmd wrapper script
  Which execute the module command bin corresponding to active flavor.

2018-01-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/bash.in, init/cmake.in, init/csh.in, init/ksh.in, init/perl.pm.in,
  init/python.py.in, init/ruby.rb.in, init/sh.in, init/zsh.in,
  modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Expose
  current modulecmd with MODULES_CMD env var

2018-01-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst, init/cmake.in, modulecmd.tcl.in,
  testsuite/modules.70-maint/120-autoinit.exp: Fix removal of tmp
  moduleinit.cmake.XXXXXXXXXXXX

  * NEWS.rst: doc: dsc versioning, Tcl {} and .modspath parse in NEWS

  * testsuite/modules.00-init/100-pager.exp: testsuite: esc install path for
  pager regexp tests

2017-12-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/modulefiles/version.in: install: reinit module code in version
  modfile  Adapt version modulefile, which is deployed in versioning
  installation mode, to re-initialize module command during its unload, to
  restore the command of the previously loaded version.  Goes through a full
  re-initialization to overcome incompatible definition of the module command
  between version 3 and 4.  This full re-initialization cannot be attempted on
  scripting shells, like Perl or Python, as function re-definition is not a
  common practice on these languages.

2017-12-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/diff_v3_v4.rst: doc: update diff_v3_v4 with 4.1 changes so far

  * NEWS.rst, doc/source/module.rst: doc: desc. variable ref support in
  MODULEPATH

  * testsuite/install.00-init/060-quar.exp,
  testsuite/modules.50-cmds/122-prereq-fullpath.exp,
  testsuite/modules.50-cmds/132-conflict-fullpath.exp,
  testsuite/modules.50-cmds/151-module-onlytop.exp,
  testsuite/modules.50-cmds/330-source.exp: testsuite: fix regexp-tests not
  escaping modfile paths

  * site.exp.in, testsuite/install.00-init/005-init_ts.exp,
  testsuite/install.00-init/030-options.exp: testsuite: check
  versioning-specific modfile install

  * testsuite/bin/install_test_cmake: testsuite: support 3-arg cmd on cmake
  test script

2017-12-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile, Makefile.inc.in, configure, init/Makefile, site.exp.in: install:
  add @VERSION@ pattern  Introduce the '@VERSION@' pattern, combination of
  Modules release and build information, for building files to install.  Still
  rely on @MODULES_RELEASE@ and @MODULES_BUILD@ when these information are
  needed prior to ./configure call (dist-related stuff) or are expected to
  change after ./configure call (modulecmd.tcl in dev environment).

  * .travis.yml: travis: enable versioning install on some test cases

  * Makefile, testsuite/example/.modulespath.in,
  testsuite/example/modulerc.in, testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.70-maint/120-autoinit.exp: testsuite/travis: adapt modpath
  in ex cfg if versioning  Adapt defined modulepaths in example testsuite
  configuration file (modulerc and .modulespath) depending if versioning
  installation mode is enabled or not.

2017-12-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .travis.yml, Makefile, testsuite/example/.modulespath-empty:
  testsuite/travis: add an empty .modulespath example  Check behavior when
  .modulespath exists but does not hold any path to add to MODULEPATH.

  * modulecmd.tcl.in: Correct parsing of init/.modulespath lines w/o comment

  * modulecmd.tcl.in: Fix MODULEPATH init when init/.modulespath empty

  * init/ksh.in: init: change 'string contains' tests for ksh  Adapt the
  'string contains' tests in ksh init script (used to setup FPATH, PATH and
  MANPATH without duplicates) to correctly handle paths containing '+'
  character, which is detected as a pattern-specific character on the '=~'
  test condition previously used.

  * INSTALL.rst, configure, init/Makefile, site.exp.in,
  testsuite/install.00-init/030-options.exp: install: adapt default modpath if
  versioning set  If --enable-versioning configure option is set, default
  modulepath option is changed  from '$prefix/modulefiles' to
  '$baseprefix/$MODULE_VERSION/modulefiles'.  Adapt installation process to
  handle modulepath containing special '$' character. Adapt also install
  testsuite to correctly check these modulepaths containing variable
  references.

2017-12-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.00-init/006-procs.exp: Set env var on
  Tcl with val enclosed in {}  Produce environment variable set code for Tcl
  shell with value enclosed in curly braces {} rather double-quote "". Curly
  braces are more effective to protect value from interpretation, like if it
  contains a dollar character.

2017-12-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .gitignore, INSTALL.rst, Makefile, Makefile.inc.in, configure,
  contrib/modulefiles/modules.in, contrib/modulefiles/version.in,
  init/Makefile, modulecmd.tcl.in, site.exp.in,
  testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.70-maint/120-autoinit.exp: install: deploy MODULE_VERSION
  and version modfile  When --enable-versioning is set at configure time,
  deploy the setup of the MODULE_VERSION and MODULE_VERSION_STACK environment
  variables in modulecmd.tcl and in a version-specific modulefile.  This
  version-specific modulefile is deployed in a @baseprefix@/versions
  modulepath directory, which is also created specifically for versioning
  installation mode.  MODULE_VERSION and MODULE_VERSION_STACK environment
  variables setup in modulecmd.tcl is commented if versioning installation
  mode is not enabled rather deleted to guaranty consistency across code
  coverage tests (same code line numbering whatever the installation options
  set).  version-specific modulefile is a bit different than the one used
  before <4.0 as now module version is initialized when loading this module by
  calling the autoinit action on the modulecmd.tcl script.  These
  version-specific modulefiles enable to switch from one module version to
  another but there is an incompatibility of initialization between Modules
  3.2 and Modules >=4. Switching from Modules 3.2 to Modules >4 will be
  possible, but not going back from >4 to version 3.2.

2017-12-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.95-version/040-xgetenv.exp: Solve env
  var reference in MODULEPATH  Restore the ability of C-version to resolve
  environment variable reference put in MODULEPATH elements. Path element is
  registered in MODULEPATH variable with its variable references. When path
  entry is used, variable references are solved to get real path.  Add a
  'resolvStringWithEnv' procedure to handle resolution of environment variable
  references set in string.  Re-enable non-regression tests of 95-version
  suite.

2017-12-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.rst, configure: install: add --enable-versioning  Add
  '--enable-versioning' configure option to append Modules version to the
  chosen installation prefix.

  * init/Makefile: testsuite/travis: fix testconfig removal of etcdir

2017-12-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc. siteconfig.tcl in NEWS

  * .travis.yml, Makefile, init/Makefile, testsuite/example/siteconfig.tcl:
  testsuite/travis: add an example siteconfig.tcl  Add
  'install-testsiteconfig' make target to setup a dummy siteconfig.tcl file in
  install_etcdir. Link that to some of the travis checks to run testsuite with
  an existing siteconfig.tcl

  * modulecmd.tcl.in, testsuite/modules.00-init/100-pager.exp: Transparently
  bufferize err report before pager init  Define a global g_init_errreport
  flag to know within report or reportErrorAndExit procedure if error
  reporting has been initialized or not. If not yet initialized, call to
  output message is saved in a buffer list.  A 'initErrorReport' procedure is
  added to switch 'g_init_errreport' flag and output every messages saved in
  buffer list.  With this change, it is possible to use reportDebug,
  reportWarning, reportErrorAndExit, etc procedures transparently without
  having to know if error reporting has been enabled or not. The report
  procedures can then be used in siteconfig.tcl extension without messing
  paging output.  Regarding reportDebug, g_init_errreport enables to know if
  call has to be saved since if error report is not initialized, debug mode
  status is not yet known.

2017-12-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.rst, Makefile, Makefile.inc.in, configure, doc/Makefile,
  doc/source/conf.py, doc/source/module.rst, init/Makefile, modulecmd.tcl.in,
  site.exp.in: Introduce @etcdir@/siteconfig.tcl script  Add the possibility
  to setup a site-specific configuration Tcl script which will be sourced at
  the start of modulecmd.tcl. This site-specific Tcl script enables to
  supersede global variable and procedure definition made in modulecmd.tcl.
  This way local adaptations can be made without editing the modulecmd.tcl
  script.  '--etcdir' configure option is added to specify the location of the
  site-specific configuration script.

  * NEWS.rst: doc: desc work on *-path commands in NEWS

2017-12-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Improve getReferenceCountArray proc debug message

  * modulecmd.tcl.in, testsuite/modules.50-cmds/055-prepend-undo.exp,
  testsuite/modules.50-cmds/060-remove.exp,
  testsuite/modules.70-maint/152-remove-path.exp: Always set/unset var when
  removing path in it  Even if no change on variable value, always set (or
  unset) this variable as its relative counter reference variable is always
  set (or unset).

2017-12-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst, doc/source/modulefile.rst, init/bash_completion.in,
  init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in,
  testsuite/modulefiles/append/4.1, testsuite/modulefiles/remove/4.0,
  testsuite/modulefiles/remove/4.1, testsuite/modulefiles/remove/4.2,
  testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.50-cmds/060-remove.exp,
  testsuite/modules.70-maint/150-append-path.exp,
  testsuite/modules.70-maint/152-remove-path.exp,
  testsuite/modules.90-avail/070-full.exp: Add --index opt to remove-path
  Remove path entry in environment variable by passing an index rather a
  string. String at specified index in content list is removed if coherent
  with relative reference counter.

2017-12-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst, doc/source/modulefile.rst, init/bash_completion.in,
  init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in,
  testsuite/modulefiles/append/4.0, testsuite/modulefiles/remove/3.0,
  testsuite/modulefiles/remove/3.1, testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.50-cmds/060-remove.exp,
  testsuite/modules.70-maint/150-append-path.exp,
  testsuite/modules.70-maint/151-prepend-path.exp,
  testsuite/modules.70-maint/152-remove-path.exp,
  testsuite/modules.90-avail/070-full.exp: Introduce --duplicates opt to
  {append,prepend}-path  Let the possibility to append or prepend path element
  entry to a variable even if this entry is already registered into the
  variable which introduces duplicates element within the variable value.
  Entries are added with eventual duplication by the use of the --duplicate
  option on append-path and prepend-path commands. These additions increment
  the reference counter as usual.  Removal of duplicated path entry depends on
  the reference counter value. Entries are not removed unless reference
  counter value is lesser than the number of duplicated entries.

2017-12-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst, doc/source/modulefile.rst, modulecmd.tcl.in,
  testsuite/modulefiles/append/1.7, testsuite/modulefiles/append/2.4,
  testsuite/modulefiles/prepend/1.9, testsuite/modulefiles/prepend/2.4,
  testsuite/modulefiles/remove/1.7, testsuite/modulefiles/remove/2.4,
  testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.50-cmds/042-append-delim.exp,
  testsuite/modules.50-cmds/045-append-undo.exp,
  testsuite/modules.50-cmds/047-app-del-undo.exp,
  testsuite/modules.50-cmds/050-prepend.exp,
  testsuite/modules.50-cmds/052-prepend-delim.exp,
  testsuite/modules.50-cmds/055-prepend-undo.exp,
  testsuite/modules.50-cmds/057-pre-del-undo.exp,
  testsuite/modules.50-cmds/060-remove.exp,
  testsuite/modules.50-cmds/062-remove-delim.exp,
  testsuite/modules.50-cmds/065-remove-undo.exp,
  testsuite/modules.70-maint/150-append-path.exp,
  testsuite/modules.70-maint/151-prepend-path.exp,
  testsuite/modules.70-maint/152-remove-path.exp,
  testsuite/modules.90-avail/070-full.exp: Pass multi paths in multi strs on
  {append,prepend,remove}-path  Enable append-path, prepend-path and
  remove-path to receive multiple path value arguments.  Add some
  non-regression tests for modulefile or sub-command cases.  Update
  modulefile.4 and module.1 docs.  Closes #141

  * doc/source/modulefile.rst, modulecmd.tcl.in,
  testsuite/modulefiles/append/1.6, testsuite/modulefiles/append/2.3,
  testsuite/modulefiles/prepend/1.8, testsuite/modulefiles/prepend/2.3,
  testsuite/modulefiles/remove/1.6, testsuite/modulefiles/remove/2.3,
  testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.50-cmds/042-append-delim.exp,
  testsuite/modules.50-cmds/045-append-undo.exp,
  testsuite/modules.50-cmds/047-app-del-undo.exp,
  testsuite/modules.50-cmds/050-prepend.exp,
  testsuite/modules.50-cmds/052-prepend-delim.exp,
  testsuite/modules.50-cmds/055-prepend-undo.exp,
  testsuite/modules.50-cmds/057-pre-del-undo.exp,
  testsuite/modules.50-cmds/060-remove.exp,
  testsuite/modules.50-cmds/062-remove-delim.exp,
  testsuite/modules.50-cmds/065-remove-undo.exp,
  testsuite/modules.70-maint/150-append-path.exp,
  testsuite/modules.70-maint/151-prepend-path.exp,
  testsuite/modules.70-maint/152-remove-path.exp,
  testsuite/modules.90-avail/070-full.exp: Pass multiple paths in 1 str on
  {append,prepend,remove}-path  Detect if path string passed to append-path,
  prepend-path or remove-path commands is composed of multiple path entries
  (separated by specified or default delimiter string). In this situation
  add/remove each path separately to correctly update relative reference
  counter.  Add some non-regression tests for modulefile or sub-command cases.
  Update modulefile.4 doc.  Closes #142

2017-12-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Simplify check of add-path pos arg (prepend/append)  If
  not 'prepend' then it is 'append', no third choice.

  * modulecmd.tcl.in: Rely on add-path rather append-path internally  Do not
  use append-path, prepend-path, remove-path in internal procedures not to
  depend on current mode (load or unload).

  * modulecmd.tcl.in: Improve readability of cmdModuleUse proc

  * modulecmd.tcl.in, testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.50-cmds/042-append-delim.exp,
  testsuite/modules.50-cmds/045-append-undo.exp,
  testsuite/modules.50-cmds/047-app-del-undo.exp,
  testsuite/modules.50-cmds/050-prepend.exp,
  testsuite/modules.50-cmds/052-prepend-delim.exp,
  testsuite/modules.50-cmds/055-prepend-undo.exp,
  testsuite/modules.50-cmds/057-pre-del-undo.exp,
  testsuite/modules.50-cmds/060-remove.exp,
  testsuite/modules.50-cmds/062-remove-delim.exp,
  testsuite/modules.50-cmds/065-remove-undo.exp,
  testsuite/modules.70-maint/150-append-path.exp,
  testsuite/modules.70-maint/151-prepend-path.exp,
  testsuite/modules.70-maint/152-remove-path.exp: Move path cmd arg parse in
  {add,unload}-path  Move path commands (append-path, prepend-path and
  remove-path) argument check and parse in internal unload-path and add-path
  procedures. So it can benefit for both external and internal calls and
  gather all checks in parsePathCommandArgs.  Update all 'unload-path' and
  'add-path' calls for new argument order. In addition it is not needed
  anymore to pass a separator character to these 2 procedures as it set to the
  default value through parsePathCommandArgs.  Adapt non-regression tests.

  * modulecmd.tcl.in, testsuite/modules.50-cmds/050-prepend.exp: Distinguish
  cleared var from bare empty path entry  Sometimes a variable is cleared by
  defining it empty instead of unsetting it. This is perticulary the case with
  LOADEDMODULES which is often set empty in init script to say nothing loaded.
  So this situation need to be distinguished from a path variable set to an
  empty path entry.  To distinguish both situations, relative reference
  counter variable is used to check if an empty path entry is registered.

  * modulecmd.tcl.in, testsuite/modulefiles/prepend/3.0,
  testsuite/modulefiles/prepend/3.1,
  testsuite/modules.50-cmds/050-prepend.exp,
  testsuite/modules.50-cmds/055-prepend-undo.exp,
  testsuite/modules.90-avail/070-full.exp: Fix reference counter handling of
  empty path entry

2017-12-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modulefiles/prepend/1.1,
  testsuite/modulefiles/prepend/1.6, testsuite/modulefiles/prepend/1.7,
  testsuite/modules.50-cmds/052-prepend-delim.exp,
  testsuite/modules.50-cmds/057-pre-del-undo.exp,
  testsuite/modules.70-maint/150-append-path.exp,
  testsuite/modules.70-maint/151-prepend-path.exp,
  testsuite/modules.70-maint/152-remove-path.exp,
  testsuite/modules.90-avail/070-full.exp: Add support for --delim=C arg
  syntax on *-path cmds  Closes #140

  * modulecmd.tcl.in, testsuite/modulefiles/append/0.5,
  testsuite/modulefiles/append/1.5, testsuite/modulefiles/prepend/0.5,
  testsuite/modulefiles/prepend/1.5, testsuite/modulefiles/remove/0.5,
  testsuite/modulefiles/remove/1.5, testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.50-cmds/042-append-delim.exp,
  testsuite/modules.50-cmds/045-append-undo.exp,
  testsuite/modules.50-cmds/047-app-del-undo.exp,
  testsuite/modules.50-cmds/050-prepend.exp,
  testsuite/modules.50-cmds/052-prepend-delim.exp,
  testsuite/modules.50-cmds/055-prepend-undo.exp,
  testsuite/modules.50-cmds/057-pre-del-undo.exp,
  testsuite/modules.50-cmds/060-remove.exp,
  testsuite/modules.50-cmds/062-remove-delim.exp,
  testsuite/modules.50-cmds/065-remove-undo.exp,
  testsuite/modules.70-maint/150-append-path.exp,
  testsuite/modules.70-maint/151-prepend-path.exp,
  testsuite/modules.70-maint/152-remove-path.exp,
  testsuite/modules.90-avail/070-full.exp: Check env var name not empty for
  *-path commands

  * modulecmd.tcl.in: Catch/report error in cmdModuleResurface and return
  false

2017-12-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modulefiles/append/0.3,
  testsuite/modulefiles/append/0.4, testsuite/modulefiles/append/1.3,
  testsuite/modulefiles/append/1.4, testsuite/modulefiles/prepend/0.3,
  testsuite/modulefiles/prepend/0.4, testsuite/modulefiles/prepend/1.3,
  testsuite/modulefiles/prepend/1.4, testsuite/modulefiles/remove/0.3,
  testsuite/modulefiles/remove/0.4, testsuite/modulefiles/remove/1.3,
  testsuite/modulefiles/remove/1.4, testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.50-cmds/042-append-delim.exp,
  testsuite/modules.50-cmds/045-append-undo.exp,
  testsuite/modules.50-cmds/047-app-del-undo.exp,
  testsuite/modules.50-cmds/050-prepend.exp,
  testsuite/modules.50-cmds/052-prepend-delim.exp,
  testsuite/modules.50-cmds/055-prepend-undo.exp,
  testsuite/modules.50-cmds/057-pre-del-undo.exp,
  testsuite/modules.50-cmds/060-remove.exp,
  testsuite/modules.50-cmds/062-remove-delim.exp,
  testsuite/modules.50-cmds/065-remove-undo.exp,
  testsuite/modules.70-maint/150-append-path.exp,
  testsuite/modules.70-maint/151-prepend-path.exp,
  testsuite/modules.70-maint/152-remove-path.exp,
  testsuite/modules.90-avail/070-full.exp: Improve
  {append,prepend,remove}-path arg check  Detect missing environment variable
  name or value when calling append-path, prepend-path or remove-path
  procedures. Raise error in this situation.  Introduce a
  'parsePathCommandArgs' to check args for the 3 *-path commands.  Add
  non-regression tests in 050-cmds and 070-maint suites to check bad argument
  situations.  Closes #139

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/070-command.exp,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.00-init/090-switches.exp,
  testsuite/modules.70-maint/020-update.exp: testsuite: set type help message
  as global var

2017-12-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc coll. pinning and @prefix@/etc/rc in NEWS

  * .travis.yml, Makefile, init/Makefile, modulecmd.tcl.in,
  testsuite/modules.20-locate/060-rc.exp,
  testsuite/modules.20-locate/065-rcerrs.exp,
  testsuite/modules.20-locate/081-access-rc.exp: @prefix@/etc/rc does not
  depend on MODULESHOME anymore  Avoid dependency to the MODULESHOME
  environment variable when looking for the etc/rc global RC file. To define
  an environment dynamic global RC file the MODULERCFILE variable may be used.
  By not relying on an environment variable we ensure this etc/rc will always
  be read, if it exists, whatever the current environment state.  Location of
  this etc/rc is based on @prefix@ defined at configure time which is also the
  basis for the MODULESHOME value, so this change should not have an impact if
  MODULESHOME variable were not manipulated afterward.  This change is useful
  when using module through commands resetting the environment like 'sudo'
  (see RH#1443124, RH#1139165 [1])  module.1 man page is already mentionning
  @prefix@/etc/rc, no change needed there.  Adapt testsuite to provide a way
  to test the use of a @prefix@/etc/rc file for the whole 'make test'
  duration, with 'make install-testetcrc'.  [1]
  https://bugzilla.redhat.com/show_bug.cgi?id=1139165

2017-12-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/home/.module/default, testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/060-saveshow.exp,
  testsuite/modules.61-coll/999-cleanup.exp: testsuite: check
  MODULES_COLLECTION_PIN_VERSION

2017-12-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst, modulecmd.tcl.in: Introduce
  MODULES_COLLECTION_PIN_VERSION  Add the ability to always record module name
  + version even if this version corresponds to the default one.  By default,
  version number is omitted if it corresponds to the implicit or explicitly
  set default version. If MODULES_COLLECTION_PIN_VERSION environment variable
  is set to 1, version number is always recorded.  When restoring a
  collection, we do not know for sure if it was saved with pinned versions or
  not, so module load and unload movements are determined on both simplified
  or raw module list. Results with less module to load or unload (means with
  more matches between module lists) are kept.  Acknowledgment: this
  development has been made and funded within the framework of the PRACE Fifth
  Implementation Phase (PRACE-5IP) project (http://www.prace-ri.eu/).
  PRACE-5IP receives funding from the EU's Horizon 2020 research and
  innovation programme (2014-2020) under grant agreement no. 730913.  Closes
  #89

2017-12-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * configure: install: change git repo clone detection threshold  Relative to
  travis git clone depth increase

  * .travis.yml: travis: increase git clone depth to catch last tag

  * NEWS.rst: doc: desc work on full path name modfile in NEWS

  * testsuite/modules.50-cmds/310-puts.exp: testsuite: fix puts 3-arg bad case
  test for Tcl<8.6

  * testsuite/modulefiles/puts/7, testsuite/modules.50-cmds/310-puts.exp,
  testsuite/modules.90-avail/070-full.exp: testsuite: add 3-arg bad case test
  for putsModfileCmd

2017-12-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Full to short name cmp in getLoadedWithClosestName

  * testsuite/modules.50-cmds/170-swap.exp: testsuite: one name swap with full
  path modfile

2017-12-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles/conflict/fullpath,
  .../modules.50-cmds/132-conflict-fullpath.exp,
  testsuite/modules.90-avail/070-full.exp: testsuite: test conflict will full
  path modulefile

  * NEWS.rst: doc: desc unload mode 'module source' in NEWS

  * testsuite/modulefiles/prereq/fullpath,
  testsuite/modules.50-cmds/122-prereq-fullpath.exp: testsuite: test prereq
  will full path modulefile

2017-12-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/030-shells.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/180-unload.exp,
  testsuite/modules.50-cmds/190-load.exp,
  testsuite/modules.70-maint/153-is-loaded.exp,
  testsuite/modules.80-deep/021-unload.exp: Correlate mod to already loaded
  full path mod  Check if a passed modulefile correspond to an already loaded
  full path module (passed as full path name when it was loaded) thank to set
  modulepath. This is done to detect this modulefile is-loaded, should not be
  loaded a second time (with a different name) or should be unloaded.  Add a
  'findModuleNameFromModulefile' procedure to get corresponding modulefile
  name from a full path name based on currently enabled modulepaths.  Adapt
  'getLoadedWithClosestName' and 'getLoadedMatchingName' procedures to make
  use of 'findModuleNameFromModulefile' when a loaded module is detected to be
  full path.  Make cmdModuleLoad use 'getLoadedMatchingName' after
  'getPathToModule' to check whether returned module is already loaded or not
  (checking short or full path name combinations)  Add tests on load, unload,
  swap and is-loaded actions.

  * doc/source/module.rst: doc: fix info-loaded section layout in module.1

2017-12-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/180-unload.exp,
  testsuite/modules.50-cmds/190-load.exp,
  testsuite/modules.70-maint/153-is-loaded.exp: Correlate full path mod to
  already loaded mod  Check if a passed full path modulefile correspond to an
  already loaded module (passed as short name when it was loaded). To detect
  this full path modulefile is-loaded, should not be loaded a second time
  (with a different name), should be unloaded.  Add tests on load, unload,
  swap and is-loaded actions.

2017-12-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/180-unload.exp,
  testsuite/modules.50-cmds/190-load.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/080-help.exp,
  testsuite/modules.70-maint/085-test.exp: testsuite: new tests to check full
  path mod support

  * modulecmd.tcl.in, testsuite/modules.00-init/050-modpath.exp,
  testsuite/modules.50-cmds/180-unload.exp,
  testsuite/modules.50-cmds/190-load.exp: Modulefile starting with '(.|..)/'
  are full path  Consider modulefile passed with name starting by './' or
  '../' a full path name modulefile, like those starting by '/'.  Convert them
  to an absolute path after detection to always register full path modulefiles
  with their absolute path name.  Adapt existing full path load and unload
  tests.  Complements #132

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.20-locate/075-symlink.exp,
  testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.50-cmds/170-swap.exp: testsuite: def 'err_file' for 'no
  such file...' msg

2017-12-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: putsModfileCmd call 'report' to send stderr content  To
  better handle content sent to stderr, which should sometimes go through a
  pager process, pass it to the 'report' procedure rather calling the real
  'puts' command in putsModfileCmd procedure (which acts as the puts command
  in a modulefile context)

  * testsuite/bin/install_test_tcl: testsuite: fix install_test_tcl for Tcl8.5
  compat

  * testsuite/modulefiles/source/0.9, testsuite/modulefiles/source/1.0,
  testsuite/modules.50-cmds/330-source.exp,
  testsuite/modules.90-avail/070-full.exp: testsuite: check 'module source'
  when called from modfile

  * modulecmd.tcl.in: Ensure false is rendered only once  If a false statement
  has already been rendered, do not render it again even if renderFalse
  procedure is called a second time.  Useful in case within a modulefile
  interpretation a command ends up with a reportErrorAndExit statement, then
  renderSettings is called.

  * modulecmd.tcl.in: Handle 'source' command in unload and display mode
  Report command call in display mode and change source in unsource on unload
  mode. Also reverse order of script to interpret on unload.  Closes #137

2017-12-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/050-modpath.exp,
  testsuite/modules.10-use/070-unuse.exp,
  testsuite/modules.20-locate/040-alias.exp,
  testsuite/modules.20-locate/045-symvers.exp,
  testsuite/modules.20-locate/046-getsym.exp,
  testsuite/modules.20-locate/047-symerrs.exp,
  testsuite/modules.20-locate/069-cross.exp,
  testsuite/modules.50-cmds/010-init_ts.exp,
  testsuite/modules.50-cmds/015-use.exp,
  testsuite/modules.50-cmds/017-use-undo.exp,
  testsuite/modules.50-cmds/020-setenv.exp,
  testsuite/modules.50-cmds/022-setenv-eschars.exp,
  testsuite/modules.50-cmds/025-setenv-undo.exp,
  testsuite/modules.50-cmds/028-setenv-refcount.exp,
  testsuite/modules.50-cmds/030-unsetenv.exp,
  testsuite/modules.50-cmds/035-unsetenv-undo.exp,
  testsuite/modules.50-cmds/036-unsetenv-x.exp,
  .../modules.50-cmds/038-unsetenv-refcount.exp,
  testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.50-cmds/042-append-delim.exp,
  testsuite/modules.50-cmds/045-append-undo.exp,
  testsuite/modules.50-cmds/047-app-del-undo.exp,
  testsuite/modules.50-cmds/050-prepend.exp,
  testsuite/modules.50-cmds/052-prepend-delim.exp,
  testsuite/modules.50-cmds/055-prepend-undo.exp,
  testsuite/modules.50-cmds/057-pre-del-undo.exp,
  testsuite/modules.50-cmds/060-remove.exp,
  testsuite/modules.50-cmds/062-remove-delim.exp,
  testsuite/modules.50-cmds/065-remove-undo.exp,
  testsuite/modules.50-cmds/075-alias.exp,
  testsuite/modules.50-cmds/076-alias-sub.exp,
  testsuite/modules.50-cmds/077-alias-undo.exp,
  testsuite/modules.50-cmds/078-refresh.exp,
  testsuite/modules.50-cmds/080-info-name.exp,
  testsuite/modules.50-cmds/081-info-user.exp,
  testsuite/modules.50-cmds/082-info-user-exp.exp,
  testsuite/modules.50-cmds/086-info-shells.exp,
  testsuite/modules.50-cmds/087-info-shells-exp.exp,
  testsuite/modules.50-cmds/088-info-isloaded.exp,
  testsuite/modules.50-cmds/089-info-type.exp,
  testsuite/modules.50-cmds/095-uname.exp,
  testsuite/modules.50-cmds/100-loglevel.exp,
  testsuite/modules.50-cmds/101-badfac.exp,
  testsuite/modules.50-cmds/105-trace.exp,
  testsuite/modules.50-cmds/110-verbose.exp,
  testsuite/modules.50-cmds/115-verbose-msg.exp,
  testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/121-prereq-module.exp,
  testsuite/modules.50-cmds/130-conflict-full.exp,
  testsuite/modules.50-cmds/131-conflict-module.exp,
  testsuite/modules.50-cmds/140-system.exp,
  testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/172-swap-app-delim.exp,
  testsuite/modules.50-cmds/173-swap-app-delim.exp,
  testsuite/modules.50-cmds/175-swap2.exp,
  testsuite/modules.50-cmds/177-swap-prep-delim.exp,
  testsuite/modules.50-cmds/178-swap-prep-delim.exp,
  testsuite/modules.50-cmds/180-unload.exp,
  testsuite/modules.50-cmds/190-load.exp,
  testsuite/modules.50-cmds/195-load-recurs.exp,
  testsuite/modules.50-cmds/197-load-lots.exp,
  testsuite/modules.50-cmds/200-break.exp,
  testsuite/modules.50-cmds/220-continue.exp,
  testsuite/modules.50-cmds/230-loop.exp,
  testsuite/modules.50-cmds/240-chdir.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/080-access.exp,
  testsuite/modules.70-maint/020-update.exp,
  testsuite/modules.70-maint/030-purge.exp,
  testsuite/modules.70-maint/040-list.exp,
  testsuite/modules.70-maint/050-whatis-load.exp,
  testsuite/modules.70-maint/100-path.exp,
  testsuite/modules.70-maint/110-paths.exp,
  testsuite/modules.70-maint/130-aliases.exp,
  testsuite/modules.80-deep/010-init_ts.exp,
  testsuite/modules.80-deep/021-unload.exp,
  testsuite/modules.91-sort/010-init_ts.exp,
  testsuite/modules.95-version/010-init_ts.exp,
  testsuite/modules.95-version/020-load.exp,
  testsuite/modules.95-version/020-unload.exp,
  testsuite/modules.95-version/022-load2.exp,
  testsuite/modules.95-version/022-unload2.exp,
  testsuite/modules.95-version/040-xgetenv.exp,
  testsuite/modules.95-version/999-cleanup.exp: testsuite: use 'modpath'
  rather 'env(MODULEPATH)'

  * NEWS.rst: doc: desc path/info-loaded/no-arg-case in NEW

  * doc/source/module.rst, doc/source/modulefile.rst, modulecmd.tcl.in,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.50-cmds/321-is-used.exp,
  testsuite/modules.70-maint/155-is-used.exp: Handle no argument case on
  'is-used'  Returns true when no argument is passed to 'is-used' if any
  directory is used, whatever it is.  Adapt docs and test cases to this new
  behavior.  Acknowledgment: this development has been made and funded within
  the framework of the PRACE Fifth Implementation Phase (PRACE-5IP) project
  (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's Horizon
  2020 research and innovation programme (2014-2020) under grant agreement no.
  730913.  Closes #144

  * doc/source/module.rst, doc/source/modulefile.rst, modulecmd.tcl.in,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.50-cmds/320-is-saved.exp,
  testsuite/modules.70-maint/154-is-saved.exp: Handle no argument case on
  'is-saved'  Returns true when no argument is passed to 'is-saved' if any
  collection matching currently set collection target exists whatever this
  collection is.  Adapt docs and test cases to this new behavior.
  Acknowledgment: this development has been made and funded within the
  framework of the PRACE Fifth Implementation Phase (PRACE-5IP) project
  (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's Horizon
  2020 research and innovation programme (2014-2020) under grant agreement no.
  730913.

  * modulecmd.tcl.in: Extract findCollections proc from cmdModuleSavelist  Add
  an independent procedure to find all collections saved corresponding to
  enabled collection target.

  * doc/source/module.rst, doc/source/modulefile.rst, modulecmd.tcl.in,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.50-cmds/088-info-isloaded.exp,
  testsuite/modules.70-maint/153-is-loaded.exp: Handle no argument case on
  'is-loaded'  Returns true when no argument is passed to 'is-loaded' if any
  modulefile is loaded, whatever it is.  Adapt docs and test cases to this new
  behavior.  Acknowledgment: this development has been made and funded within
  the framework of the PRACE Fifth Implementation Phase (PRACE-5IP) project
  (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's Horizon
  2020 research and innovation programme (2014-2020) under grant agreement no.
  730913.

  * testsuite/modules.70-maint/153-is-loaded.exp: testsuite: improve coverage
  for is-loaded sub-cmds

  * modulecmd.tcl.in: Fix 'is-loaded' to handle list of mods as arg  Align
  behavior on other is-* commands and man-page: return 1 if at least one arg
  matches, return 0 elsewhere.

  * modulecmd.tcl.in: Make 'is-loaded' relies on 'getLoadedMatchingName'  Add
  a 'returnfirst' return type to the getLoadedMatchingName procedure then make
  is-loaded use getLoadedMatchingName rather than redoing it.

  * testsuite/modulefiles/info/isloaded,
  testsuite/modules.50-cmds/088-info-isloaded.exp: testsuite: improve coverage
  of 'is-loaded' tests

2017-11-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/bin/install_test_cmake, testsuite/bin/install_test_perl,
  testsuite/bin/install_test_python, testsuite/bin/install_test_r,
  testsuite/bin/install_test_ruby, testsuite/bin/install_test_tcl,
  testsuite/install.00-init/020-module.exp: testsuite: check info-loaded on
  install suite  Adapt install test scripts to output obtained result text.

  * modulecmd.tcl.in, testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.20-locate/031-defvers2.exp,
  testsuite/modules.20-locate/060-rc.exp,
  testsuite/modules.20-locate/067-hidden.exp,
  testsuite/modules.20-locate/068-transitive.exp,
  testsuite/modules.20-locate/075-symlink.exp,
  testsuite/modules.70-maint/100-path.exp,
  testsuite/modules.70-maint/110-paths.exp: Returning text sub-cmds always
  returns text  In case of error, message is displayed on stderr but commands
  will still return text, an empty string. If no result are found, an empty
  string is also set as returning value.  Text is returned as result if
  'g_return_text' global variable is defined. It has the priority over
  error/false/true returns.  This way text can always be expected as the
  returned value of a module sub-command returning text in normal cases.
  Adapt non-regression test cases for 'path' and 'paths'.

  * doc/source/module.rst, init/bash_completion.in, init/fish_completion,
  init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in,
  testsuite/modulefiles/modbad/info-loaded,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.50-cmds/151-module-onlytop.exp,
  testsuite/modules.70-maint/157-info-loaded.exp,
  testsuite/modules.90-avail/070-full.exp: Introduce 'info-loaded' as module
  sub-command  Like for 'is-loaded', register 'module-info loaded' modulefile
  Tcl command as a module sub-command to make it reachable from the command
  line. Sub-command is named 'info-loaded' for sake of efficiency (not
  'module-info-loaded').  Add the new command to the existing shell completion
  scripts (bash, tcsh fish, zsh).  Document new command in the module.1 man
  page.  Check 'info-loaded' command argument error in 071-args tests of
  00-init suite. Test 'module info-loaded' cannot be called from a modulefile
  with 151-module-onlytop in 50-cmds suite. Add 156-info-loaded tests in
  70-maint suite to validate new sub-command.  Acknowledgment: this
  development has been made and funded within the framework of the PRACE Fifth
  Implementation Phase (PRACE-5IP) project (http://www.prace-ri.eu/).
  PRACE-5IP receives funding from the EU's Horizon 2020 research and
  innovation programme (2014-2020) under grant agreement no. 730913.  Closes
  #3

  * doc/source/modulefile.rst, modulecmd.tcl.in,
  testsuite/modulefiles/info/loaded,
  testsuite/modules.50-cmds/285-info-loaded.exp,
  testsuite/modules.90-avail/070-full.exp: Introduce 'module-info loaded'
  modulefile command  Add 'loaded' sub-command to the 'module-info' modulefile
  Tcl command. This new sub-command returns name of the modules currently
  loaded corresponding to the name passed as argument. May return multiple
  modules if passed name matches more than one loaded modules.  Document new
  command in modulefile.4 and test it with a 285-info-loaded tests in 50-cmds
  suite.  Acknowledgment: this development has been made and funded within the
  framework of the PRACE Fifth Implementation Phase (PRACE-5IP) project
  (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's Horizon
  2020 research and innovation programme (2014-2020) under grant agreement no.
  730913.

  * testsuite/modules.00-init/006-procs.exp: testsuite: remove shell_echo
  helper proc  Not used anymore as tests using shell_echo moved to shell_text.

  * modulecmd.tcl.in, testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.20-locate/031-defvers2.exp,
  testsuite/modules.20-locate/038-defcontext.exp,
  testsuite/modules.20-locate/050-locrc.exp,
  testsuite/modules.20-locate/060-rc.exp,
  testsuite/modules.20-locate/067-hidden.exp,
  testsuite/modules.20-locate/068-transitive.exp,
  testsuite/modules.20-locate/069-cross.exp,
  testsuite/modules.20-locate/075-symlink.exp,
  testsuite/modules.70-maint/110-paths.exp,
  testsuite/modules.80-deep/068-transitive.exp: Paths sub-commands now returns
  text  Adapt 'paths' module sub-commands to return text result like 'path'
  sub-command, rather printing text result.  'paths' may return multiple
  values as a result, so these values are returned as words in a space
  separated string. Exception made to real shells where each words is
  returned(printed as it is real shells) separately, like previously done.  As
  a side effect also, if an error occur a 'false' boolean will be returned
  rather resulting text.  Adapt non-regression tests to align 'paths' test on
  shell_text procedure rather shell_echo.

2017-11-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modulefiles/modbad/path,
  testsuite/modulefiles/modbad/paths,
  testsuite/modules.50-cmds/151-module-onlytop.exp,
  testsuite/modules.90-avail/070-full.exp: 'path' and 'paths' are only avail
  from command line

  * modulecmd.tcl.in, testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.20-locate/038-defcontext.exp,
  testsuite/modules.20-locate/067-hidden.exp,
  testsuite/modules.20-locate/069-cross.exp,
  testsuite/modules.70-maint/100-path.exp: Make sub-commands return text
  rather printing text  Introduce renderText procedure to return a text string
  rather a true/false boolean. On regular shells, it still echoes text, but on
  scripting languages a string text value is returned.  Apply this new
  mechanism to the 'path' sub-command. Adapt non-regression tests with the new
  return code for this sub-command.

  * modulecmd.tcl.in: Change test to detect something has been sent to stdout
  Test something has been rendered by looking at the settings arrays or lists
  rather checking stdout channel. (which does not seem to work, as it returns
  -1.

2017-11-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc is-{saved,used,avail} in NEWS

  * testsuite/install.00-init/005-init_ts.exp: testsuite: fix sh_family
  specific install tests  Was broken if one sh shell was not installed.

  * doc/source/module.rst, init/bash_completion.in, init/fish_completion,
  init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in,
  testsuite/modulefiles/modbad/is-avail,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.50-cmds/151-module-onlytop.exp,
  testsuite/modules.70-maint/156-is-avail.exp,
  testsuite/modules.90-avail/070-full.exp: Introduce 'is-avail' as module
  sub-command  Like for 'append-path', register 'is-avail' modulefile Tcl
  command as a module sub-command to make it reachable from the command line.
  Add the new command to the existing shell completion scripts (bash, tcsh
  fish, zsh).  Document new command in the module.1 man page.  Check
  'is-avail' command argument error in 071-args tests of 00-init suite. Test
  'module is-avail' cannot be called from a modulefile with 151-module-onlytop
  in 50-cmds suite. Add 155-is-avail tests in 70-maint suite to validate new
  sub-command.  Acknowledgment: this development has been made and funded
  within the framework of the PRACE Fifth Implementation Phase (PRACE-5IP)
  project (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's
  Horizon 2020 research and innovation programme (2014-2020) under grant
  agreement no. 730913.

  * doc/source/modulefile.rst, modulecmd.tcl.in,
  testsuite/modulefiles/info/isavail,
  testsuite/modules.50-cmds/322-is-avail.exp: Add 'is-avail' modulefile
  command  Introduce 'is-avail' modulefile command to check, following the
  same spirit than 'is-loaded', if any of the passed modulefiles exists in
  enabled in MODULEPATH.  Document new command in modulefile.4 and test it
  with a 322-is-avail tests in 50-cmds suite.  Acknowledgment: this
  development has been made and funded within the framework of the PRACE Fifth
  Implementation Phase (PRACE-5IP) project (http://www.prace-ri.eu/).
  PRACE-5IP receives funding from the EU's Horizon 2020 research and
  innovation programme (2014-2020) under grant agreement no. 730913.

  * doc/source/module.rst, init/bash_completion.in, init/fish_completion,
  init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in,
  testsuite/modulefiles/modbad/is-used,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.50-cmds/151-module-onlytop.exp,
  testsuite/modules.70-maint/155-is-used.exp,
  testsuite/modules.90-avail/070-full.exp: Introduce 'is-used' as module
  sub-command  Like for 'append-path', register 'is-used' modulefile Tcl
  command as a module sub-command to make it reachable from the command line.
  Add the new command to the existing shell completion scripts (bash, tcsh
  fish, zsh).  Document new command in the module.1 man page.  Check 'is-used'
  command argument error in 071-args tests of 00-init suite. Test 'module
  is-used' cannot be called from a modulefile with 151-module-onlytop in
  50-cmds suite. Add 154-is-used tests in 70-maint suite to validate new
  sub-command.  Acknowledgment: this development has been made and funded
  within the framework of the PRACE Fifth Implementation Phase (PRACE-5IP)
  project (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's
  Horizon 2020 research and innovation programme (2014-2020) under grant
  agreement no. 730913.

  * doc/source/modulefile.rst, modulecmd.tcl.in,
  testsuite/modulefiles/info/isused,
  testsuite/modules.50-cmds/321-is-used.exp: Add 'is-used' modulefile command
  Introduce 'is-used' modulefile command to check, following the same spirit
  than 'is-loaded', if any of the passed directories has been enabled in
  MODULEPATH.  Document new command in modulefile.4 and test it with a
  321-is-used tests in 50-cmds suite.  Acknowledgment: this development has
  been made and funded within the framework of the PRACE Fifth Implementation
  Phase (PRACE-5IP) project (http://www.prace-ri.eu/). PRACE-5IP receives
  funding from the EU's Horizon 2020 research and innovation programme
  (2014-2020) under grant agreement no. 730913.

2017-11-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst, init/bash_completion.in, init/fish_completion,
  init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in,
  testsuite/modulefiles/modbad/is-saved,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.50-cmds/151-module-onlytop.exp,
  testsuite/modules.70-maint/154-is-saved.exp,
  testsuite/modules.90-avail/070-full.exp: Introduce 'is-saved' as module
  sub-command  Like for 'append-path', register 'is-saved' modulefile Tcl
  command as a module sub-command to make it reachable from the command line.
  Add the new command to the existing shell completion scripts (bash, tcsh
  fish, zsh).  Document new command in the module.1 man page.  Check
  'is-saved' command argument error in 071-args tests of 00-init suite. Test
  'module is-saved' cannot be called from a modulefile with 151-module-onlytop
  in 50-cmds suite. Add 154-is-saved tests in 70-maint suite to validate new
  sub-command.  Acknowledgment: this development has been made and funded
  within the framework of the PRACE Fifth Implementation Phase (PRACE-5IP)
  project (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's
  Horizon 2020 research and innovation programme (2014-2020) under grant
  agreement no. 730913.

  * doc/source/modulefile.rst, modulecmd.tcl.in,
  testsuite/modulefiles/info/issaved,
  testsuite/modules.50-cmds/320-is-saved.exp,
  testsuite/modules.90-avail/070-full.exp: Add 'is-saved' modulefile command
  Introduce 'is-saved' modulefile command to check, following the same spirit
  than 'is-loaded', if any of the passed collections exists.  Document new
  command in modulefile.4 and test it with a 320-is-saved tests in 50-cmds
  suite.  Acknowledgment: this development has been made and funded within the
  framework of the PRACE Fifth Implementation Phase (PRACE-5IP) project
  (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's Horizon
  2020 research and innovation programme (2014-2020) under grant agreement no.
  730913.

2017-11-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/020-module.exp: testsuite: use unk mod to ensure
  !is-loaded test

  * NEWS.rst: doc: desc *-path and is-loaded cmds in NEWS

  * testsuite/bin/install_test_tcl, testsuite/install.00-init/020-module.exp:
  testsuite: test a command return false in install suite  Add tests in
  install testsuite to check commands returning true or false as result. Use
  new sub-command 'is-loaded' for test.

  * doc/source/module.rst, init/bash_completion.in, init/fish_completion,
  init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in,
  testsuite/modulefiles/modbad/is-loaded,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.50-cmds/151-module-onlytop.exp,
  testsuite/modules.70-maint/153-is-loaded.exp,
  testsuite/modules.90-avail/070-full.exp: Introduce 'is-loaded' as module
  sub-command  Like for 'append-path', register 'is-loaded' modulefile Tcl
  command as a module sub-command to make it reachable from the command line.
  Improve 'cmdModuleResurface' procedure to set a global 'g_return_false' flag
  when 'is-loaded' command returns 0. If 'g_return_false' flag is set shell
  code rendering will end with a false value returned.  Add the new command to
  the existing shell completion scripts (bash, tcsh fish, zsh).  Document new
  command in the module.1 man page.  Check 'is-loaded' command argument error
  in 071-args tests of 00-init suite. Test 'module is-loaded' cannot be called
  from a modulefile with 151-module-onlytop in 50-cmds suite. Add
  153-is-loaded tests in 70-maint suite to validate new sub-command.
  Acknowledgment: this development has been made and funded within the
  framework of the PRACE Fifth Implementation Phase (PRACE-5IP) project
  (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's Horizon
  2020 research and innovation programme (2014-2020) under grant agreement no.
  730913.  Closes #116

  * testsuite/modules.00-init/071-args.exp: testsuite: tests bad arg number
  for *-path cmds

  * testsuite/modules.70-maint/150-append-path.exp,
  testsuite/modules.70-maint/151-prepend-path.exp,
  testsuite/modules.70-maint/152-remove-path.exp: testsuite: add *-path tests
  in 70-maint  Add 150-append-path, 151-prepend-path and 152-remove-path tests
  to the 70-maint suite to check these new module sub-command.

2017-11-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles/modbad/append-path,
  testsuite/modulefiles/modbad/autoinit, testsuite/modulefiles/modbad/foo,
  testsuite/modulefiles/modbad/help,
  testsuite/modulefiles/modbad/prepend-path,
  testsuite/modulefiles/modbad/remove-path,
  testsuite/modules.50-cmds/151-module-onlytop.exp,
  testsuite/modules.90-avail/070-full.exp: testsuite: add 151-module-onlytop
  in 50-cmds suite  Check module sub-commands that cannot be called within
  modulefile.

  * doc/source/module.rst, init/bash_completion.in, init/fish_completion,
  init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in:
  Improve new {append,prepend,remove}-path commands  Refactor code to call
  from the module command line modulefile-specific commands. These commands
  can only be called from the command line, not when calling 'module'
  procedure from a modulefile, to avoid any ambiguity.  When parsing command
  line arguments, check context to know if '-d' means '--default' (avail
  command) or '--delim' (*-path commands).  Add the new commands to the
  existing shell completion scripts (bash, tcsh, fish, zsh).  Document new
  commands in the module.1 man page.  Acknowledgment: this development has
  been made and funded within the framework of the PRACE Fifth Implementation
  Phase (PRACE-5IP) project (http://www.prace-ri.eu/). PRACE-5IP receives
  funding from the EU's Horizon 2020 research and innovation programme
  (2014-2020) under grant agreement no. 730913.

2017-03-02  Bert Wesarg <bert.wesarg@googlemail.com>

  * modulecmd.tcl.in: New subcommands to run (prepend|append|remove)-path
  directly from the command line.

2017-11-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: desc module function return and stdout spool

  * modulecmd.tcl.in, testsuite/modulefiles/puts/1,
  testsuite/modulefiles/puts/2, testsuite/modulefiles/puts/3,
  testsuite/modulefiles/puts/4, testsuite/modulefiles/puts/5,
  testsuite/modulefiles/puts/6, testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.50-cmds/083-info-mode.exp,
  testsuite/modules.50-cmds/084-info-mode-exp.exp,
  testsuite/modules.50-cmds/085-info-flags.exp,
  testsuite/modules.50-cmds/310-puts.exp,
  testsuite/modules.70-maint/080-help.exp,
  testsuite/modules.90-avail/070-full.exp: Spool puts stdout command to render
  after env changes  Supersede 'puts' command to catch content sent to stdout
  within modulefile in order to postpone content channel send after rendering
  on stdout the relative environment changes required by the modulefile.  By
  doing so, environment variable set within modulefile will be available when
  outputing directly command to the stdout channel.  A 'putsModfileCmd'
  procedure is added to catch all 'puts' call in a modulefile interpretation.
  This procedure analyzes if the puts command targets the stdout channel. If
  so, command argument is saved in a 'g_stdoutPuts' global list to be then
  processed during renderSettings. If no, the real puts is called (for stderr
  send for instance).  Add 50-cmds/310-puts non-regression tests to garanty
  all kind of puts command are well processed.  Closes #113

2017-11-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/cmake.in, init/perl.pm.in, init/python.py.in, init/ruby.rb.in: Return
  dummy true on compat module function  Make compatibility module function to
  always return a value to be able to check function result either new main
  version or compat version is called.  Adapt cmake, perl, python and ruby
  compat module function to return a true value. Always true is returned as
  compat version does not handle returning error exit code.

  * modulecmd.tcl.in, testsuite/install.00-init/020-module.exp,
  testsuite/modules.00-init/006-procs.exp: Protect sensitive unsetenv on Tcl
  shell  When rendering an unsetenv modulefile command, protect the
  corresponding "unset env(VAR)" with a 'catch' Tcl command as unset will
  raise an error if env(VAR) does not exist prior to unset it.

  * modulecmd.tcl.in, testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.20-locate/050-locrc.exp: Render 'true' only if something
  output already  Optimize content sent to stdout by only sending 'true'
  statement if something else was sent before that. Nothing written on stdout
  means everything is fine and the module function defined for all shells
  already take that into account, as assigned result status is set to true
  before calling for modulecmd.tcl.  With this change, stdout channel is left
  empty for sub-commands not outputing shell code like avail, help, ...

  * modulecmd.tcl.in, testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.20-locate/050-locrc.exp,
  testsuite/modules.20-locate/060-rc.exp,
  testsuite/modules.50-cmds/083-info-mode.exp,
  testsuite/modules.50-cmds/084-info-mode-exp.exp,
  testsuite/modules.50-cmds/085-info-flags.exp: Align 'true' rendering of
  sh/csh/fish with other shells  When calling for a 'true' statement at the
  end of shell code rendering, also express a true statement for sh/csh/fish
  as it is the case for other shells.  True statement will also be produced
  even if something has already been sent to stdout channel. To ensure in all
  cases that shell code will finish on a true statement if code is correctly
  generated.

2017-11-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.70-maint/120-autoinit.exp: Render true/false with a
  variable assignment  Set a local variable on shells to return true or false
  status, like already done on cmake and python. This way shells treat the
  return status in the same way.  For other shells that cmake and python, it
  does not change behavior as the variable assignement returns the value
  assigned, so it still returns a boolean as last rendered operation.  'real'
  shells are not touched as they already return in all cases a boolean status
  without any specific assignment.  Prior to modulecmd.tcl execution, the
  variable used for returned status assignement is initialized to 'true'. This
  way we are sure the variable will always be set and with a default 'true'
  value we may optimize rendering as no rendering means true.

2017-11-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.70-maint/070-display.exp: Rename
  renderError/Ok in renderFalse/True

  * modulecmd.tcl.in, testsuite/modules.00-init/030-shells.exp,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.00-init/090-switches.exp,
  testsuite/modules.10-use/080-access.exp,
  testsuite/modules.10-use/090-bad.exp,
  testsuite/modules.20-locate/031-defvers2.exp,
  testsuite/modules.20-locate/035-defname.exp,
  testsuite/modules.20-locate/038-defcontext.exp,
  testsuite/modules.20-locate/060-rc.exp,
  testsuite/modules.20-locate/067-hidden.exp,
  testsuite/modules.20-locate/068-transitive.exp,
  testsuite/modules.20-locate/080-access.exp,
  testsuite/modules.50-cmds/281-info-modulerc.exp,
  testsuite/modules.50-cmds/282-info-command.exp,
  testsuite/modules.50-cmds/283-info-command-exp.exp,
  testsuite/modules.50-cmds/300-interp.exp,
  testsuite/modules.50-cmds/301-interp-command.exp,
  testsuite/modules.50-cmds/302-interp-cascaded.exp,
  testsuite/modules.60-initx/010-list.exp,
  testsuite/modules.60-initx/020-add.exp,
  testsuite/modules.60-initx/030-switch.exp,
  testsuite/modules.60-initx/040-prepend.exp,
  testsuite/modules.60-initx/050-rm.exp,
  testsuite/modules.60-initx/060-2nd.exp,
  testsuite/modules.60-initx/080-access.exp,
  testsuite/modules.61-coll/020-savelist.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/050-saverm.exp,
  testsuite/modules.61-coll/060-saveshow.exp,
  testsuite/modules.61-coll/080-access.exp,
  testsuite/modules.70-maint/040-list.exp,
  testsuite/modules.70-maint/043-listno.exp,
  testsuite/modules.70-maint/045-listlong.exp,
  testsuite/modules.70-maint/048-listlongno.exp,
  testsuite/modules.70-maint/056-whatis-nullpath.exp,
  testsuite/modules.70-maint/060-apropos.exp,
  testsuite/modules.70-maint/120-autoinit.exp,
  testsuite/modules.70-maint/130-aliases.exp,
  testsuite/modules.80-deep/068-transitive.exp,
  testsuite/modules.80-deep/080-access.exp,
  testsuite/modules.90-avail/020-single.exp,
  testsuite/modules.90-avail/030-multiple.exp,
  testsuite/modules.90-avail/040-wild.exp,
  testsuite/modules.90-avail/050-long.exp,
  testsuite/modules.90-avail/060-empty.exp,
  testsuite/modules.90-avail/070-full.exp,
  testsuite/modules.91-sort/020-avail.exp: Render 'true' or 'false' at end of
  all sub-commands  Until now some module sub-commands did not finish their
  run with an ok statement when everything goes well. It was the case for
  avail, aliases, list, apropos/search/keyword, save*, init* and help (without
  arg). However when some errors occurred on these commands, they were
  returning an error statement.  To apply same behavior to all commands
  whatever the result is (error occurred or not) a call to renderSettings is
  made after all commands which will produce a true or false statement sent to
  stdout.  As a consequence the return value of all module sub-command call
  can be checked against a true/false value.  Even if modulecmd.tcl should now
  return a true/false statement, keep checks on the intermediate variable
  required on python and cmake shells to guaranty a false boolean return in
  case very bad stuff happened within modulecmd.tcl not producing the
  intermediate variable statement.  Adapt all non-reg tests to get correct
  return code (OK or ERR).  Note that when apropos/search/keyword hit a
  modulefile error when interpreting, it will return a 'false' statement even
  if result output seem correct (as these kind of error are not hidden to
  better read obtained result).

2017-11-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.70-maint/120-autoinit.exp: Rename _mlret var to _mlstatus
  in autoinit  To better distinguish this internal variable from the _mlre
  variable used for quarantine mechanism.

  * testsuite/bin/install_test_cmake, testsuite/bin/install_test_perl,
  testsuite/bin/install_test_python, testsuite/bin/install_test_r,
  testsuite/bin/install_test_ruby, testsuite/bin/install_test_tcl: testsuite:
  adapt install scripts to check ret value  Adapt tcl, perl, python, ruby,
  cmake and R install test scripts to check module command result based on new
  boolean return value system.

  * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Adapt
  perl/python/cmake/r autoinit to return status  Change module function
  defined for perl, python, cmake and R, to return the status (true or false)
  obtained at rendering end.  Also drop on perl the carp error handling, to
  get same error handling for all shells.

  * modulecmd.tcl.in, testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.70-maint/070-display.exp: Make shells return 'false'
  rather raising exception  Use an expression for each supported shell to say
  'false' when error occurred during modulecmd.tcl process. This was already
  the behavior for the sh/csh/fish shells but a change is made to the other
  lang shells where previously an exception was raised in case of error.
  Moving from a raised exception to a boolean return seem to be more
  appropriate for the calling scripts, which will not explode anymore each
  time a modulefile is not found for instance.  Boolean return opens the path
  to a return value check on all supported shells (was only possible on
  sh/csh/fish before that).  Now all shells are aligned with a 'true' value
  returned in case of success rendering and a 'false' value returned in case
  of error.

  * modulecmd.tcl.in, testsuite/modules.00-init/006-procs.exp: Make shells
  return 'true' when rendering ok  Add an expression for each supported shell
  to say 'true' when code rendering is perfomed and things are ok. A
  'renderOk' procedure is added following same principle than 'renderError'.
  These code additions keep the ability for the rendering to be called from
  the shell module function or from a direct execution. To achieve that
  instead of using a 'return true' statement, which would had no meaning
  outside of a module function, a true statement is expressed. Most of the
  shells will return the result from the last evaluated statement.  For shells
  not returning result from the last evaluated statement (python, cmake), a
  variable is set to true. This variable will be used in module function to
  return the status value.  For the sh/csh/fish shells, no code is rendered if
  something has already been sent to stdout, as in this case the last lines
  will return 'true' by itself.

2017-11-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/030-shells.exp,
  testsuite/modules.00-init/080-begenv.exp,
  testsuite/modules.00-init/090-switches.exp,
  testsuite/modules.10-use/030-use.exp,
  testsuite/modules.10-use/031-append.exp,
  testsuite/modules.10-use/032-prepend.exp,
  testsuite/modules.10-use/070-unuse.exp,
  testsuite/modules.20-locate/020-fqual.exp,
  testsuite/modules.20-locate/030-defvers.exp,
  testsuite/modules.20-locate/035-defname.exp,
  testsuite/modules.20-locate/048-symexec.exp,
  testsuite/modules.20-locate/050-locrc.exp,
  testsuite/modules.20-locate/055-locrcerrs.exp,
  testsuite/modules.20-locate/060-rc.exp,
  testsuite/modules.20-locate/065-rcerrs.exp,
  testsuite/modules.20-locate/070-homerc.exp,
  testsuite/modules.20-locate/075-symlink.exp,
  testsuite/modules.50-cmds/083-info-mode.exp,
  testsuite/modules.50-cmds/084-info-mode-exp.exp,
  testsuite/modules.50-cmds/085-info-flags.exp,
  testsuite/modules.50-cmds/210-exit.exp,
  testsuite/modules.50-cmds/260-getenv.exp,
  testsuite/modules.50-cmds/280-info-specified.exp,
  testsuite/modules.50-cmds/281-info-modulerc.exp,
  testsuite/modules.50-cmds/282-info-command.exp,
  testsuite/modules.50-cmds/283-info-command-exp.exp,
  testsuite/modules.50-cmds/284-info-others.exp,
  testsuite/modules.50-cmds/300-interp.exp,
  testsuite/modules.50-cmds/301-interp-command.exp,
  testsuite/modules.50-cmds/302-interp-cascaded.exp,
  testsuite/modules.60-initx/010-list.exp,
  testsuite/modules.60-initx/020-add.exp,
  testsuite/modules.60-initx/030-switch.exp,
  testsuite/modules.60-initx/040-prepend.exp,
  testsuite/modules.60-initx/050-rm.exp,
  testsuite/modules.60-initx/060-2nd.exp,
  testsuite/modules.60-initx/080-access.exp,
  testsuite/modules.61-coll/020-savelist.exp,
  testsuite/modules.70-maint/020-update.exp,
  testsuite/modules.70-maint/040-list.exp,
  testsuite/modules.70-maint/043-listno.exp,
  testsuite/modules.70-maint/045-listlong.exp,
  testsuite/modules.70-maint/048-listlongno.exp,
  testsuite/modules.70-maint/055-whatis.exp,
  testsuite/modules.70-maint/056-whatis-nullpath.exp,
  testsuite/modules.70-maint/060-apropos.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/080-help.exp,
  testsuite/modules.90-avail/020-single.exp,
  testsuite/modules.90-avail/030-multiple.exp,
  testsuite/modules.90-avail/040-wild.exp,
  testsuite/modules.90-avail/050-long.exp,
  testsuite/modules.90-avail/060-empty.exp,
  testsuite/modules.90-avail/070-full.exp,
  testsuite/modules.91-sort/020-avail.exp,
  testsuite/modules.91-sort/030-whatis.exp: testsuite: check out and err
  channels for all tests  Always use testouterr* procedures to check both
  stdout and stderr channels output.

  * modulecmd.tcl.in: Move autoinit code in a renderAutoinit proc  Move it out
  of renderSettings to improve overall readability.

  * modulecmd.tcl.in: No render struct change during display mode setenv

2017-11-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.70-maint/120-autoinit.exp: Interpret Tcl rendered code in
  proc context  When using module interface in a Tcl script, previous code was
  upleveling generated modules code to render environment changes. Now that
  env array is declared withing proc, eval can be used rather uplevel to
  render.  By the way, if things are ok, do not exec true. Does not have sense
  in a Tcl script context.

2017-11-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.00-init/006-procs.exp: Express true or
  false on sh/csh/fish with test  Use the buildins 'test' function to express
  true or false value on sh-kind, csh-kind or fish shells rather making a call
  to an external command (/bin/true and /bin/false).

  * NEWS.rst, doc/source/module.rst: doc: desc MODULES_SILENT_SHELL_DEBUG in
  module.1 and NEWS

  * INSTALL.rst: doc: add --with-quarantine-vars in INSTALL

  * testsuite/install.00-init/005-init_ts.exp,
  testsuite/install.00-init/030-options.exp: testsuite: check
  MODULES_SILENT_SHELL_DEBUG  Simple tests to verify
  MODULES_SILENT_SHELL_DEBUG environment variable does not break module
  command.

2017-11-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/005-init_ts.exp,
  testsuite/install.00-init/010-environ.exp,
  testsuite/install.00-init/060-quar.exp, testsuite/modulefiles.other/quar,
  testsuite/modules.00-init/110-quar.exp: testsuite: shield quar tests against
  cur env

  * init/bash.in, init/ksh.in, init/sh.in, init/zsh.in, modulecmd.tcl.in,
  testsuite/modules.70-maint/120-autoinit.exp: Silent sh-shells debug if
  MODULES_SILENT_SHELL_DEBUG  Introduce MODULES_SILENT_SHELL_DEBUG environment
  variable to silent the xtrace and verbose output on sh-kind shells.  When
  set (means MODULES_SILENT_SHELL_DEBUG=1), current xtrace and verbose flags
  are saved then these shell properties are disabled. Once execution is
  finished, saved setup is restored.  This mechanism is defined on
  initialization scripts, at the beginning to silent, at the end to restore
  defined behavior. It is also defined within the module function following
  exact same principle.  By default, xtrace and verbose shell properties are
  applied to module function and initialization script if enabled in calling
  shell script or interactive session. These properties are disabled in module
  context only if MODULES_SILENT_SHELL_DEBUG is set to '1'.  Notice that if
  xtrace/verbose properties are set, shell code that leads to disable them
  when MODULES_SILENT_SHELL_DEBUG is set will be outputed as debugging is set
  during these operations.  The mechanism only applies to the SH-shell family.
  Closes #121

  * NEWS.rst: doc: describe quarantine mechanism in NEWS

2017-11-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst: doc: reorder env var in module.1

  * doc/source/module.rst: doc: describe quar-related variables in module.1

2017-11-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .travis.yml: travis: revert array handling of CONFIGURE_OPTS  Array set is
  not understood on travis env setup. Revert to single-quote string set. Just
  check a simpler quarantine configuration for the moment.

  * .travis.yml: travis: handle CONFIGURE_OPTS as shell array

  * .travis.yml: travis: check quarantine configuration in some builds

  * testsuite/install.00-init/060-quar.exp: testsuite: adapt install suite for
  quar config  Add a specific test in 060-quar in case quarantine has been
  configured at build time, to check chosen configuration is correctly applied
  in shells. This test replaces all other quarantine tests, as init script is
  set with quarantine-related variables and the regular tests cannot supersede
  that.

  * contrib/rpm/environment-modules.spec.in: rpm: define LD_LIBRARY_PATH as
  quarantine var

  * Makefile.inc.in, configure, init/Makefile, init/bash.in, init/cmake.in,
  init/fish.in, init/ksh.in, init/perl.pm.in, init/python.py.in, init/r.R.in,
  init/ruby.rb.in, init/sh.in, init/tcl.in, init/zsh.in, site.exp.in: install:
  add --with-quarantine-vars  Add --with-quarantine-vars configure option to
  define quarantine mechanism configuration at build time.  Value passed to
  the configure option will be used by Makefile to initialize in the various
  initialization scripts the MODULES_RUN_QUARANTINE variable and eventual
  MODULES_RUNENV_<VAR>.

  * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Use
  _ml-prefixed var name to return code on sh shells

2017-11-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/bash.in, init/ksh.in, init/sh.in, init/zsh.in, modulecmd.tcl.in,
  testsuite/modules.70-maint/120-autoinit.exp: Handle IFS in a sh-compatible
  way  On sh shell like dash, IFS cannot be local var. Also when setting IFS
  with the "IFS=$' ';" syntax $ character is also added to the IFS value.

  * testsuite/install.00-init/060-quar.exp,
  testsuite/modules.00-init/110-quar.exp: testsuite: check quar mech with ' '
  and '"' val  Adapt quarantine mechanism tests to check variable values
  containing space and double-quote.  Single quote currently leads to issue.
  Should not be an immediate problem due to the kind of variables and relative
  values this mechanism will handle (LD_LIBRARY_PATH, LD_PRELOAD, etc).

  * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Put
  autoinit code in braces as much as possible  Use braces for the different
  shell autoinit code to avoid special character espacing as much as we can in
  these complex piece of shell code.  In some cases, braces cannot be used:
  when variable value should be replaced and when a beginning brace does not
  match a close brace in the same string).

  * testsuite/install.00-init/060-quar.exp: testsuite: test bad libpath setup
  in install/060-quar  Check fake LD_LIBRARY_PATH setup is taken into account
  in 060-quar test of install testsuite before running test. Skip test if
  tclsh does not rise to the bait.

2017-11-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/bash.in, init/ksh.in, init/sh.in, init/zsh.in, modulecmd.tcl.in,
  testsuite/install.00-init/060-quar.exp,
  testsuite/modules.70-maint/120-autoinit.exp: Ensure correct IFS on sh-kind
  script or func  With quarantine mechanism sh-kind init scripts or module
  function are sensitive to IFS value. If space character is not part of IFS,
  eval command will not be able to understand command-line string.  This
  commit add code in init scripts and module function to guaranty correct
  value for IFS.

  * testsuite/install.00-init/060-quar.exp: testsuite: check runenv in
  install.00-init/060-quar  Add test in 060-quar of install suite to check
  runtime environment value for quarantine variable are effectively set. Test
  is made by providing a bad LD_LIBRARY_PATH that will crash all execs.

2017-11-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/r.R.in, modulecmd.tcl.in, testsuite/install.00-init/060-quar.exp,
  testsuite/modules.70-maint/120-autoinit.exp: Add quarantine mechanism
  support to r

  * init/cmake.in, modulecmd.tcl.in,
  testsuite/modules.70-maint/120-autoinit.exp: Add quarantine mechanism
  support to cmake

  * init/ruby.rb.in, modulecmd.tcl.in,
  testsuite/modules.70-maint/120-autoinit.exp: Add quarantine mechanism
  support to ruby

2017-11-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/python.py.in, modulecmd.tcl.in,
  testsuite/modules.70-maint/120-autoinit.exp: Add quarantine mechanism
  support to python

  * init/perl.pm.in, modulecmd.tcl.in,
  testsuite/modules.70-maint/120-autoinit.exp: Add quarantine mechanism
  support to perl

  * init/tcl.in, modulecmd.tcl.in, testsuite/install.00-init/060-quar.exp,
  testsuite/modules.70-maint/120-autoinit.exp: Add quarantine mechanism
  support to tcl

2017-11-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/fish.in, modulecmd.tcl.in,
  testsuite/modules.70-maint/120-autoinit.exp: Add quarantine mechanism
  support to fish

  * modulecmd.tcl.in, testsuite/install.00-init/060-quar.exp,
  testsuite/modules.00-init/110-quar.exp: No quarantine mechanism support on
  CSH-kind shells  Tried to make it fit within the 'module' alias, with no
  success. 'foreach' and nested 'if' do not cope with csh alias.  Tests have
  been adapted to skip csh/tcsh shells. Also MODULES_RUN_QUARANTINE variable
  is purely ignored if detected shell is from CSH family.

2017-11-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Improve
  generation of csh autoinit code

2017-11-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/bash.in, init/ksh.in, init/sh.in, init/zsh.in, modulecmd.tcl.in,
  testsuite/install.00-init/060-quar.exp,
  testsuite/modules.00-init/110-quar.exp,
  testsuite/modules.70-maint/120-autoinit.exp: Improve variable name check in
  MODULES_RUN_QUARANTINE  A variable name cannot start with a [0-9] character.

  * testsuite/modules.70-maint/120-autoinit.exp: testsuite: fix autoinit test
  in coverage mode

  * init/bash.in, init/ksh.in, init/sh.in, init/zsh.in, modulecmd.tcl.in,
  testsuite/install.00-init/060-quar.exp,
  testsuite/modules.00-init/110-quar.exp,
  testsuite/modules.70-maint/120-autoinit.exp: Validate variable names set in
  MODULES_RUN_QUARANTINE  Test that the names of the environment variable
  defined in MODULES_RUN_QUARANTINE are valid names.  Add test in quarantine
  setup code within init scripts (silent check) and also test in
  modulecmd.tcl. The latter reports a warning if a bad name is detected.  Add
  a non-regression test in modules.00-init and install.00-init test suites.

2017-11-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/010-environ.exp,
  testsuite/install.00-init/050-crossshell.exp,
  testsuite/install.00-init/060-quar.exp: testsuite: add 060-quar to
  install.00-init suite  Check real operation of the quarantine mechanism at
  the initialization stage and during call of module commands.  Setup a fake
  libtcl .so library to verify quarantine is correctly protecting tclsh at
  runtime.

  * init/bash.in, init/ksh.in, init/sh.in, init/zsh.in: init: setup quarantine
  before autoinit for SH shells  As now a call to modulecmd.tcl defines the
  module function and surrounding initial environment, this execution should
  also be shield against bad environment with quarantine mechanism.

2017-11-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.other/quar,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.00-init/110-quar.exp,
  testsuite/modules.70-maint/120-autoinit.exp: testsuite: add 110-quar tests
  in 00-init suite  Check handling of environment variables related to the
  quarantine runtime feature  Adapt tests in 70-maint/120-autoinit to new
  module function code.

  * modulecmd.tcl.in: Introduce quarantine runtime (sh shells only)  Introduce
  a mechanism set within module function definition to modify modulecmd.tcl
  runtime environment in order to protect it from side-effect coming from the
  current user environment definition.  For instance, if modulecmd.tcl is
  installed to work with a tclsh version 8.4 but current environment has
  enabled a libtcl8.6.so in LD_LIBRARY_PATH, this environment will not be able
  to run modulecmd.tcl anymore. Quarantine runtime mechanism helps to define a
  sane LD_LIBRARY_PATH value which will be set for modulecmd.tcl to guaranty
  correct operations.  The mechanism is piloted by environment variables.
  First of all MODULES_RUN_QUARANTINE, a space-separated list of environment
  variable names. Every variable found in MODULES_RUN_QUARANTINE will be set
  in quarantine during the modulecmd.tcl runtime. Their value will be set
  empty or set to the value of the corresponding MODULES_RUNENV_<VAR>
  environment variable if defined. The initial value these variables have will
  be passed to modulecmd.tcl via the '<VAR>_modquar' variable. Then once
  modulecmd.tcl is started it restores <VAR> to the content found in
  <VAR>_modquar (its original value).  This commit adds the feature for the
  SH-kind shells only (sh, bash, ksh and zsh). Some complex shell code was
  required to distinguish an unset variable from a variable set empty: `eval
  'echo ${'$var'+x}'`.  Code is also slightly different for sh shell than
  other sh-kind shells due to a different supported syntax to define local
  variable. No 'typeset' builtin is found on a pure sh shell, like dash. 'ksh'
  on its side does not understand 'local' builtin. So code for 'sh' shell uses
  'local' builtin and other sh-kind shells use 'typeset'.  Zsh code has a
  difference compared to the other sh shells, as word splitting need to be
  explicitly enabled with a '${=var}' syntax.  Space is used as variable name
  separator in MODULES_RUN_QUARANTINE variable, as it is the most convenient
  separator to work with in SH-kind shells (no need to adapt IFS).

  * site.exp.in, testsuite/modules.70-maint/120-autoinit.exp: testsuite: add
  'install_tclsh' var in site.exp

2017-11-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/Makefile: install: fix use of ifeq/wildcard in Makefile  Prefer
  'rmdir --ignore-fail-on-non-empty' which is evaluated at runtime. ifeq is
  evaluated at Makefile read.

  * doc/source/conf.py: Fix no branch name for version release on RTD builds

  * Makefile, doc/source/conf.py: Correct version release tag in Makefile and
  Sphinx

  * INSTALL.rst, NEWS.rst: doc: describe pager support in NEWS

  * .travis.yml: travis: test various pager configure setup

  * modulecmd.tcl.in: A 'cat' pager value set in script means disabling

  * modulecmd.tcl.in: --paginate enables paging only not disabled from script

  * modulecmd.tcl.in: Detect use of less/cat pager even if set as full path

2017-10-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.rst, Makefile, Makefile.inc.in, configure,
  contrib/rpm/environment-modules.spec.in, modulecmd.tcl.in, site.exp.in,
  testsuite/modules.00-init/100-pager.exp: install: add --with-pager and
  --with-pager-opts  Add --with-pager and --with-pager-opts configure options
  to choose at build time pager setup.

  * modulecmd.tcl.in: Remove g_use_pager, redundant with g_pager  Set g_pager
  to the empty value to disable message output paging by default.

2017-10-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/010-environ.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.00-init/100-pager.exp: testsuite: add 100-pager tests in
  00-init suite  Check handling of options related to pager feature.

2017-10-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Add '-K' option to less pager  Quit less pager on
  interupt (^C typed) instead of trapping it. As module is set as a shell
  function, SIGINT signal is first send to this function and its underlying
  children (modulecmd + less pager). If less trap this interput it will remain
  alone after end of module function and modulecmd process, but not in direct
  interaction with terminal. So it seems preferable to end pager at the same
  time its parent process vanish.  Without option '-K', less continues until
  reading all its remaining stdin buffer.  An alternative would be to trap
  signal within modulecmd, but it implies using the TclX extension to get
  access to the 'signal' procedure. Moreover, after effect will quite be the
  same, as shell function is terminated and remaining processed are not in
  direct interaction with terminal.  For the record, trapping signal in
  modulecmd makes this process able to finish right after the pager command.
  Procedure designated to trap signal will be run once currently blocking IO
  is processed. Then close of pipe descriptor will finished once pager finish
  in turns to process it remaining stdin buffer.  Instead of using TclX,
  Expect extension may be used to trap signal but with exact same handling
  behavior than TclX.  Another lead would be to trap/untrap signal within
  shell function, but signal is then completely ignored.

  * modulecmd.tcl.in: Increase pager fd buffer size to 64k  More aligned with
  the buffer size 'less' is setting-up. Should be sufficent to handle most
  kind of output content in one pass.

  * modulecmd.tcl.in: Handle case when pager is ended (killed or quit)  Catch
  cases when pager is ended before all messages are reported to it ('q'
  pressed or process killed).  Error raised from 'puts' call are ignored with
  'catch'. As we handle here informational messages, do not end the full
  modulecmd process when message channel is dead.  Also protect pager fd
  operations in cleanupAndExit, in case pipe is not operational anymore.

2017-10-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Fetch tty cols only if needed via getTtyColumns proc

  * modulecmd.tcl.in: Report release nb & info via reportVersion proc

  * modulecmd.tcl.in: Report usage message in a single output call

  * modulecmd.tcl.in: Enable pager during first report call  Instead of always
  setting-up pager if enabled, configure and start it only if reporting
  message. This way, module commands not reporting anything will not got the
  overhead of the pager setup.

2017-10-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.rst, modulecmd.tcl.in: Introduce pager support  Paginate
  stderr output into paging command, using 'less' by default, following the
  same fashion and behavior than 'git' command.  Pager is enabled by default
  in modulecmd script. New global variables 'g_use_pager', 'g_pager' and
  'g_pager_opts' control default behavior of module command.  Pager is enabled
  only if stderr stream is attached to a terminal.  Pager setup can then be
  superseeded by environment variables. If LESS variable is set and paging
  command is set to 'less', default pager options are cleared to use those
  defined in LESS variable.  If MODULES_PAGER variable is defined, its value
  superseeds paging activation, command and options. If this variable is
  empty, paging is disabled.  If PAGER variable is defined and MODULES_PAGER
  is unset, PAGER value superseeds paging activation, command and options. If
  this variable is empty, paging is disabled.  Default behavior and
  MODULES_PAGER or PAGER environment variables can be superseeded by
  command-line options: --paginate to enable paging and --no-pager to disable
  it.  When pager is enabled, a pipe file descripted is ignited to the paging
  command and option for stderr stream. Once set, this file descriptor is used
  by all report procedures to output message content, rather using stderr.
  modulecmd command-line parse has been revised not to output message during
  argument treatment. Debug, warning and error messages are saved to then be
  displayed once pager setup is achieved.  An 'initPager' procedure is
  introduced to configure then start paging. A 'cleanupAndExit' is added to
  close pager before exiting if pager has been started.

2017-10-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS.rst: doc: describe work around autoinit command in NEWS

  * .gitignore, .travis.yml, Makefile, init/Makefile,
  .../example/{.modulespath => .modulespath.in}, testsuite/example/{modulerc
  => modulerc.in}, testsuite/modules.70-maint/120-autoinit.exp:
  testsuite/travis: rework tests with ex. init config  Use make for test
  config setup rather direct commands in travis configuration.

2017-10-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .travis.yml: travis: fix install/cmake/R issues

  * testsuite/install.00-init/010-environ.exp: testsuite: fix bash func
  cleaning in install suite

  * modulecmd.tcl.in, testsuite/install.00-init/020-module.exp,
  testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.70-maint/120-autoinit.exp: Same kind of error raise code
  for Tcl than other langs  In case of error, an error exit code will be
  returned (1 instead of 0).

  * .travis.yml: travis: add other lang pkgs for testinstall

2017-10-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Remove
  extra newline on Perl autoinit code

  * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Messages
  should go to stderr on Tcl autoinit code

2017-10-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/bin/install_test_cmake, testsuite/bin/install_test_perl,
  testsuite/bin/install_test_python, testsuite/bin/install_test_r,
  testsuite/bin/install_test_ruby, testsuite/bin/install_test_tcl,
  testsuite/config/unix.exp, testsuite/install.00-init/005-init_ts.exp,
  testsuite/install.00-init/020-module.exp,
  testsuite/install.00-init/022-module-compat.exp,
  testsuite/install.00-init/030-options.exp: testsuite: check all langs in
  install testsuite

  * init/Makefile: install: skip initdir rmdir if not empty on uninstall

2017-10-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .travis.yml, testsuite/example/.modulespath, testsuite/example/modulerc,
  testsuite/modules.70-maint/120-autoinit.exp: testsuite: check various
  autoinit setup  Add example modulerc and .modulespath configuration and test
  autoinit behavior when these examples are installed in init directory.

  * modulecmd.tcl.in: Deprecated @prefix@/modulerc in autoinit  Keep behavior
  of init script where only one modulerc file is sourced if it exists (in
  @initdir@).

2017-10-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/bash.in, init/cmake.in, init/csh.in, init/fish.in, init/ksh.in,
  init/perl.pm.in, init/python.py.in, init/r.R.in, init/ruby.rb.in,
  init/sh.in, init/tcl.in, init/zsh.in: init: shell scripts now rely on
  autoinit command  Make use of autoinit module command to initialize module
  command and its initial surrounding environment (default value for
  MODULESHOME, MODULEPATH, LOADEDMODULES and parse of init/.modulespath).
  Then if compatibility version is currently activated redefined the module
  command to point to the compat binary. But the compat version will benefit
  from the surrounding environment initialization made by autoinit.  With this
  change, activated compatibility version will also get its environment
  initialized by the init/modulerc file whereas before this change only the
  main version was affected by this setup file.

  * modulecmd.tcl.in, site.exp.in,
  testsuite/modules.70-maint/120-autoinit.exp: Use configure tags to set dir
  locations in autoinit  Define in autoinit command the value of MODULESHOME
  based on @prefix@ configure tag and initialization directory based on
  @initdir@ rather guessing them from modulecmd.tcl location.  Same location
  approach that initialization scripts this way.

2017-10-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile, modulecmd.tcl.in: Parse init/.modulespath in autoinit  Parse
  init/.modulespath like done in initialization script. Call cmdModuleUse for
  each path entry. This way, relative paths are solved before being registered
  in MODULEPATH variable. Now reference counter for MODULESPATH is also set
  when enabling the configured paths.

  * modulecmd.tcl.in: Define empty MODULEPATH/LOADEDMODULES in autoinit  If
  not previously defined, set an empty MODULEPATH and LOADEDMODULES like done
  in init script. Do not source modulerc scripts if MODULEPATH or
  LOADEDMODULES are non-empty.

  * modulecmd.tcl.in: Define autoinit surrounding env vars in
  cmdModuleAutoinit  Rather in renderSettings where only the module command is
  defined depending of current shell. Enables to make use of 'setenv' to
  define surrounding variables like MODULESHOME and call to 'module source'
  before the rendering stage.

  * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Make
  autoinit shell code fit init script definitions  Use contribution from
  Thomas Zeiser for CSH autoinit code (Thomas Zeiser).

2017-10-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Produce
  redirect function code on autoinit for sh/fish  Integrate the generation of
  the _moduleraw function on sh-kind and fish shells when calling 'autoinit'
  command.  As for initialization scripts, stderr output redirection is set
  when a terminal is attached to stderr channel. A 'isATty' procedure is
  introduced to detect terminal attachement.

2017-10-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/bash.in, init/fish.in, init/ksh.in, init/sh.in, init/zsh.in: init:
  redirect stderr msg on stdout if terminal  Change from previous behavior
  where redirection were set if shell was interactive. With this change, a 'sh
  script' command launched from a terminal session will setup module stderr
  redirection whereas previously it was not the case as script was not ran in
  interactive mode.  Shell interactive mode is useful to know that interaction
  will occur on stdin (interesting for completion setup). Knowing session is
  attached to a terminal seems to be the good pivot to adapt stdout or stderr
  functioning (help to determine if PAGER mode can be enabled or not on 'git')

2017-10-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile, NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of
  version 4.0.0

2017-10-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/index.rst: doc: add intro and refine toc of index page

  * configure: travis: fix full git repo detection in configure

  * .travis.yml: travis: increase git clone depth to catch last tag

  * contrib/rpm/environment-modules.spec.in: rpm: add 'modules-tcl' provides
  for auto-upgrade  When a previous 'modules-tcl' package is installed, the
  new 'environment-modules' package will automatically be found as an upgrade
  candidate.

  * NEWS.rst: doc: reference last additions for v4.0 to NEWS

  * INSTALL.rst: doc: describe compat version requirements in INSTALL

  * README.md: doc: add 'Transition from v3.2' section in README

  * INSTALL.rst, README.md: doc: describe sphinx requirement at install time

2017-10-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile, contrib/doc2www, www/.htaccess, www/Makefile,
  www/c/INSTALL.html, www/c/NEWS.html, www/c/README.html, www/c/module.html,
  www/c/modulefile.html, www/index.html, www/modules.css: www: remove website
  content  Website content is simplified now docs are built with sphinx and
  hosted on Read The Docs. Remaining website content is moved from master
  branch to gh-pages branch.

  * .travis.yml: travis: fix manpath install on centos6 container

  * INSTALL.rst, MIGRATING.rst, NEWS.rst: doc: fix typo and layout in
  INSTALL/MIGRATING/NEWS

  * .gitattributes, .gitignore, Makefile, NEWS, NEWS.rst,
  contrib/rpm/environment-modules.spec.in, doc/Makefile, doc/source/NEWS.rst,
  doc/source/index.rst: doc: migrate NEWS doc from TXT to RST

  * .gitattributes, .gitignore, INSTALL.rst, INSTALL.txt, Makefile,
  doc/Makefile, doc/source/INSTALL.rst, doc/source/index.rst: doc: migrate
  INSTALL doc from TXT to RST

2017-10-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .gitattributes, .gitignore, MIGRATING.md => MIGRATING.rst, Makefile,
  contrib/rpm/environment-modules.spec.in, doc/Makefile,
  doc/source/MIGRATING.rst, doc/source/index.rst: doc: migrate MIGRATING doc
  from MD to RST  To integrate it into sphinx process and make it available on
  the Web.

  * doc/source/conf.py: doc: define sphinx required minimal version in conf

2017-10-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * www/index.html: www: reshape index for new project structure  Put
  download, docs and community information right after introduction section.
  Simplify content and link to Read The Docs for documentation material.

2017-10-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/install.00-init/030-options.exp: testsuite: fix utilities
  install test on csh shells

  * doc/source/module.rst, doc/source/modulefile.rst: doc: detail path
  variable elt counter in man-pages

  * MIGRATING.md, doc/source/diff_v3_v4.rst: doc: mention output redirection
  in migrate and diff

2017-10-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * site.exp.in, testsuite/install.00-init/022-module-compat.exp,
  testsuite/install.00-init/030-options.exp: testsuite: test compat version
  installation

  * .travis.yml: travis: add 'make srpm' test on centos

  * doc/Makefile: install: use rm rather sphinx to clean built docs

2017-10-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/rpm/environment-modules.spec.in: rpm: fix diff doc location in
  spec

  * testsuite/install.00-init/005-init_ts.exp,
  testsuite/install.00-init/030-options.exp,
  testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.00-init/050-modpath.exp,
  testsuite/modules.00-init/090-switches.exp,
  testsuite/modules.10-use/030-use.exp,
  testsuite/modules.10-use/031-append.exp,
  testsuite/modules.10-use/032-prepend.exp,
  testsuite/modules.20-locate/010-init_ts.exp,
  testsuite/modules.20-locate/020-fqual.exp,
  testsuite/modules.20-locate/030-defvers.exp,
  testsuite/modules.20-locate/031-defvers2.exp,
  testsuite/modules.20-locate/035-defname.exp,
  testsuite/modules.20-locate/038-defcontext.exp,
  testsuite/modules.20-locate/048-symexec.exp,
  testsuite/modules.20-locate/050-locrc.exp,
  testsuite/modules.20-locate/055-locrcerrs.exp,
  testsuite/modules.20-locate/060-rc.exp,
  testsuite/modules.20-locate/067-hidden.exp,
  testsuite/modules.20-locate/068-transitive.exp,
  testsuite/modules.20-locate/069-cross.exp,
  testsuite/modules.20-locate/070-homerc.exp,
  testsuite/modules.20-locate/075-symlink.exp,
  testsuite/modules.20-locate/080-access.exp,
  testsuite/modules.20-locate/095-cleanup.exp,
  testsuite/modules.50-cmds/083-info-mode.exp,
  testsuite/modules.50-cmds/084-info-mode-exp.exp,
  testsuite/modules.50-cmds/085-info-flags.exp,
  testsuite/modules.50-cmds/210-exit.exp,
  testsuite/modules.50-cmds/250-x-resource.exp,
  testsuite/modules.50-cmds/260-getenv.exp,
  testsuite/modules.50-cmds/280-info-specified.exp,
  testsuite/modules.50-cmds/281-info-modulerc.exp,
  testsuite/modules.50-cmds/282-info-command.exp,
  testsuite/modules.50-cmds/283-info-command-exp.exp,
  testsuite/modules.50-cmds/284-info-others.exp,
  testsuite/modules.50-cmds/300-interp.exp,
  testsuite/modules.50-cmds/301-interp-command.exp,
  testsuite/modules.50-cmds/302-interp-cascaded.exp,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/060-saveshow.exp,
  testsuite/modules.61-coll/080-access.exp,
  testsuite/modules.61-coll/999-cleanup.exp,
  testsuite/modules.70-maint/045-listlong.exp,
  testsuite/modules.70-maint/055-whatis.exp,
  testsuite/modules.70-maint/060-apropos.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/080-help.exp,
  testsuite/modules.70-maint/085-test.exp,
  testsuite/modules.70-maint/120-autoinit.exp,
  testsuite/modules.70-maint/130-aliases.exp,
  testsuite/modules.70-maint/140-multiargs.exp,
  testsuite/modules.80-deep/010-init_ts.exp,
  testsuite/modules.80-deep/030-display.exp,
  testsuite/modules.80-deep/050-whatis.exp,
  testsuite/modules.80-deep/068-transitive.exp,
  testsuite/modules.80-deep/080-access.exp,
  testsuite/modules.80-deep/999-cleanup.exp,
  testsuite/modules.90-avail/020-single.exp,
  testsuite/modules.90-avail/030-multiple.exp,
  testsuite/modules.90-avail/040-wild.exp,
  testsuite/modules.90-avail/050-long.exp,
  testsuite/modules.90-avail/070-full.exp,
  testsuite/modules.91-sort/010-init_ts.exp,
  testsuite/modules.91-sort/020-avail.exp,
  testsuite/modules.91-sort/030-whatis.exp,
  testsuite/modules.91-sort/999-cleanup.exp: testsuite: re modpath string if
  regexp test  Transform modulepath for regexp enabled tests (escape
  characters having a meaning in regexp like '+')

  * testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.20-locate/031-defvers2.exp,
  testsuite/modules.20-locate/067-hidden.exp,
  testsuite/modules.20-locate/068-transitive.exp,
  testsuite/modules.20-locate/075-symlink.exp,
  testsuite/modules.50-cmds/121-prereq-module.exp,
  testsuite/modules.50-cmds/190-load.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/080-help.exp,
  testsuite/modules.70-maint/085-test.exp,
  testsuite/modules.80-deep/022-switch.exp: testsuite: pass err number on
  shell_err  Migrate some ERR test cases to a non '_re' test if they do not
  require regexp.

  * testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.20-locate/031-defvers2.exp,
  testsuite/modules.20-locate/040-alias.exp,
  testsuite/modules.20-locate/045-symvers.exp,
  testsuite/modules.20-locate/046-getsym.exp,
  testsuite/modules.20-locate/047-symerrs.exp,
  testsuite/modules.20-locate/050-locrc.exp,
  testsuite/modules.20-locate/060-rc.exp,
  testsuite/modules.20-locate/065-rcerrs.exp,
  testsuite/modules.20-locate/067-hidden.exp,
  testsuite/modules.20-locate/068-transitive.exp,
  testsuite/modules.20-locate/070-homerc.exp,
  testsuite/modules.20-locate/075-symlink.exp,
  testsuite/modules.50-cmds/017-use-undo.exp,
  testsuite/modules.50-cmds/020-setenv.exp,
  testsuite/modules.50-cmds/030-unsetenv.exp,
  testsuite/modules.50-cmds/036-unsetenv-x.exp,
  testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.50-cmds/045-append-undo.exp,
  testsuite/modules.50-cmds/050-prepend.exp,
  testsuite/modules.50-cmds/055-prepend-undo.exp,
  testsuite/modules.50-cmds/075-alias.exp,
  testsuite/modules.50-cmds/086-info-shells.exp,
  testsuite/modules.50-cmds/087-info-shells-exp.exp,
  testsuite/modules.50-cmds/089-info-type.exp,
  testsuite/modules.50-cmds/101-badfac.exp,
  testsuite/modules.50-cmds/131-conflict-module.exp,
  testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/180-unload.exp,
  testsuite/modules.50-cmds/190-load.exp,
  testsuite/modules.50-cmds/230-loop.exp,
  testsuite/modules.50-cmds/284-info-others.exp,
  testsuite/modules.80-deep/021-unload.exp,
  testsuite/modules.80-deep/068-transitive.exp,
  testsuite/modules.91-sort/040-load.exp,
  testsuite/modules.95-version/040-xgetenv.exp: testsuite: no _re tests if
  regexp not needed

  * .gitattributes, .gitignore, Makefile, ...nt-modules.spec =>
  environment-modules.spec.in}: install: genereate RPM spec to ajust source0
  and release

2017-10-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/FAQ.rst, doc/source/index.rst: doc: add FAQ imported from SF
  wiki

  * www/.htaccess: www: add .htaccess file to redirect some docs to RTD

  * INSTALL.txt, Makefile, configure, contrib/rpm/environment-modules.spec,
  doc/Makefile, init/Makefile: install: use sed rather perl for substitutions
  Use sed instead of perl in configure and Makefile scripts as perl is not
  required anymore to build documentation. sed is a lighter requirement to
  build and install software.

  * README.md: doc: mention RTD in README

  * Makefile, doc/source/conf.py: install: no mention of master git branch in
  vers num

  * Makefile, doc/Makefile: install: broader usage of makefile
  translate-in-script

  * doc/Makefile: install: rm doc BUILD_DIR if exists only

2017-10-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .gitignore, .travis.yml, INSTALL.txt, Makefile, Makefile.inc.in,
  README.md, configure, contrib/rpm/environment-modules.spec, doc/Makefile,
  doc/html/common.css, doc/source/version.py.in: install: adapt doc build
  process to sphinx  Change makefile to build doc with sphinx rather pod. Docs
  are now pregenerated in dist-tarball, to avoid requiring documentation build
  tool when installing from these dist-tarball.  Adapt travis conf & RPM spec
  file to the new documentation build process.

2017-10-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/conf.py, doc/source/index.rst: doc: introduce sphinx
  configuration  To build existing manpages and diff_v3_v4 document.

2017-10-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/diff_v3_v4.pod, doc/source/diff_v3_v4.rst,
  doc/source/module.pod.in, doc/source/module.rst, doc/source/modulefile.pod,
  doc/source/modulefile.rst: doc: migrate from pod to rst  Transform source
  documents from POD format to reStructuredText to then benefit from Sphinx
  documentation framework and Read The Docs publishing capabilities.

2017-09-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/Makefile: install: set manpage date to modules build date

  * modulecmd.tcl.in: Remove license information on help/usage message

  * doc/Makefile: install: make doc only install man and txt  No install of
  HTML files, so no need to build them at make install.

  * .gitattributes, .gitignore, Makefile, doc/Makefile, init/Makefile,
  modulecmd.tcl.in, version.inc.in: install: handle version number through git
  tags  Introduce a version.inc file sourced by Makefiles, that holds release
  number and build information. Makefiles use these information to set correct
  version number in manpages and modulecmd.tcl script.  version.inc is present
  in dist tarball. This file is generated from version.inc.in file by main
  Makefile when working in git repository.  Release information are retrieved
  from the tags of the git repository. Release number corresponds to last git
  tag set. Build number is the result of the 'git describe' command: this
  information helps to know from what git branch and commit the current build
  is made of.

2017-09-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/rpm/environment-modules.spec: rpm: add version to modules-tcl
  Obsoletes statement  Comply with: https://fedoraproject.org/wiki/Packaging:G
  uidelines#Renaming.2FReplacing_Existing_Packages  Thanks to Aurelien
  Degremont for spotting this.  Fixes #133

  * doc/source/module.pod.in: doc: add EXIT STATUS section in module.1

  * MIGRATING.md, doc/source/diff_v3_v4.pod: doc: describe modulefiles hiding
  feature  In MIGRATING guide and diff reference doc.

  * testsuite/modules.50-cmds/180-unload.exp: testsuite: test unload of full
  pathname modulefile  Add test in 180-unload of 50-cmds suite to check a
  loaded module specified as full pathname correctly unloads.

2017-09-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.70-maint/040-list.exp,
  testsuite/modules.70-maint/045-listlong.exp: Fix 'list' when full path mod
  is loaded  When a modulefile has been loaded using its full file path name,
  not its name relative to a modulepath, skip property search on 'list'
  command. Previously the property search applied to full path module were
  checking the whole current path tree to find modulefiles.  Introduces a
  isModuleFullPath procedure to help determine a given module name is
  specified as a full pathname or not.  Add tests to 70-maint suite to check
  'module list' behavior with full path name loaded modules.  Fixes #132

  * MIGRATING.md: doc: link to v4.0 closed issues in MIGRATING

2017-09-28  ebagrenrut <ebagrenrut@gmail.com>

  * contrib/rpm/environment-modules.spec:
  contrib/rpm/environment-modules.spec: Now Obsoletes: modules-tcl. Results in
  modules-tcl being removed by yum when environment-modules is installed.

2017-09-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles/prereq/orlist,
  testsuite/modules.50-cmds/121-prereq-module.exp,
  testsuite/modules.90-avail/070-full.exp: testsuite: add OR-list test for
  prereq  Ensure correct error message report in case of OR-list of prereq.
  Clarifies #79 and #123.

2017-09-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles.path1/fodcross/2.7.13/sub-13,
  testsuite/modulefiles.path2/fodcross/2.7.13,
  testsuite/modules.20-locate/069-cross.exp: testsuite: mod corresp. to file
  or dir in diff modpath  Add location test for modulefiles spread in
  different modulepath directories where modulefile name corresponds to a file
  in one modulepath and corresponds to a directory in another modulepath.
  Ensure correct support for #63.

  * doc/source/diff_v3_v4.pod, doc/source/module.pod.in: doc:
  avail/apropos/whatis support glob patterns

  * MIGRATING.md, doc/source/diff_v3_v4.pod: doc: clarify submod unload during
  switch command

2017-09-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .gitignore, Makefile: install: add dist-tar, dist-gzip and dist-bzip2
  targets  Add dist tarball variants to provide dist-bzip2 file required by
  RPM spec file. Source RPM can now be built with either:  $ make srpm  or  $
  make dist-bzip2 $ rpmbuild -ts modules-*.tar.bz2  Fixes #129

  * contrib/rpm/environment-modules.spec, contrib/scripts/createmodule.py,
  contrib/scripts/createmodule.sh: contrib: import createmodule.{sh,py}
  scripts  These scripts developed by Orion E. Poplawski are referenced by the
  environment-modules.spec file. Include them in repository to be able to
  generate RPM from the tarball.  Fixes #130

2017-09-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile, contrib/rpm/environment-modules.spec, doc/Makefile,
  init/Makefile, modulecmd.tcl.in, testsuite/install.00-init/020-module.exp,
  testsuite/install.00-init/025-autoinit.exp,
  testsuite/install.00-init/040-subshell.exp,
  testsuite/install.00-init/050-crossshell.exp,
  testsuite/modules.00-init/015-version.exp: Release of version 4.0.0-beta
  Adapt testsuite to take new release name in account.

2017-09-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .gitignore, NEWS, contrib/rpm/environment-modules.spec, doc/Makefile,
  doc/source/{diff_with_c-version.pod => diff_v3_v4.pod}: doc: rename
  diff_with_c-version to diff_v3_v4

  * .gitignore, MIGRATING.md, Makefile, contrib/rpm/environment-modules.spec:
  doc: add MIGRATING guide

2017-09-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/diff_with_c-version.pod: doc: improve diff doc with more
  changes between 3.2 & 4

2017-09-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/diff_with_c-version.pod: doc: rephrase diff to talk about
  Modules 3.2 and 4

  * doc/source/module.pod.in: doc: describe MODULES_USE_COMPAT_VERSION in
  module.1

  * init/bash.in, init/bash_completion.in, init/cmake.in, init/csh.in,
  init/ksh.in, init/perl.pm.in, init/profile-compat.csh.in,
  init/profile-compat.sh.in, init/python.py.in, init/ruby.rb.in, init/sh.in,
  init/zsh.in: init: rename use compat var in MODULES_USE_COMPAT_VERSION  Use
  a distinguishable prefix for environment variables relative to the Modules
  software: 'MODULES_'.

2017-09-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS: Add release notes for 4.0.0 in NEWS

2017-09-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/Makefile, init/fish_completion, init/fish_completion.in: init: fix
  and normalize fish_completion  * remove incorrect references to apt-get *
  use space instead of tabs * normalize description messages reusing short
  sentences already made for zsh completion * fix function to filter module
  command output and only return modulefile list not mixed with files *
  simplify install process by removing need for a '.in' file (and fix
  bash_completion install on the way)

2017-09-21  BEFH <fultonh1@gmail.com>

  * init/Makefile, init/fish_completion.in: fish_completion  Created an
  initial fish_completion script and added to Makefile.

2017-09-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/rpm/environment-modules.spec, ...cros.modules-tcl =>
  macros.environment-modules},
  ...les-tcl-1.923-fix-uname-nodename-when-dns.patch,
  .../modules-tcl-1.923-fix-uname-release-test.patch,
  ...ules-tcl-1.923-fix-uname-release-with-lsb.patch,
  .../modules-tcl-1.923-no-etc-rc-as-rc-file.patch,
  ...dules-tcl-1.923-skip-access-tests-if-root.patch,
  ...dules-tcl-1.923-unneeded-manpath-q-option.patch,
  contrib/rpm/modules-tcl.spec: rpm: adapt spec for 4.0.0-beta  Base new
  environment-modules.spec on Fedora specfile made by Orion Poplawski. Adapt
  content to build on either Fedora and EL systems.

  * contrib/scripts/add.modules.in, contrib/scripts/mkroot: contrib: add
  proper header for add.modules and mkroot

  * .gitignore, Makefile, contrib/scripts/add.modules.in,
  contrib/scripts/{mkroot.in => mkroot}: install: add add.modules and mkroot
  to bindir

  * contrib/scripts/add.modules.in, contrib/scripts/mkroot.in: contrib: import
  add.modules and mkroot from c branch  These scripts are usually part of a
  regular environment-modules installation

  * init/profile.sh.in: init: use . instead of source in sh-kind profile
  script

2017-09-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * www/index.html: www: update bug tracker url

2017-09-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/doc2www, www/c/INSTALL.html, www/c/NEWS.html, www/c/README.html,
  www/c/module.html, www/c/modulefile.html, www/index.html: www: update
  repository url  And be more forge neutral in footer disclaimer of all pages.

  * testsuite/install.00-init/030-options.exp: testsuite: fix test relative to
  installed contrib mods

  * .gitignore, contrib/modulefiles/module-info,
  contrib/modulefiles/modules.in, init/Makefile: install: add 'modules'
  modfile to example modfiles

  * .gitignore, .travis.yml, INSTALL-win.txt, INSTALL.txt, Makefile, NEWS,
  configure, contrib/modulefiles/module-git, doc/Makefile: Rename Modules-Tcl
  > Modules in docs and install scripts

2017-09-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * README.md: doc: speak about Modules rather Modules-Tcl in README

2017-09-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile: install: add ChangeLog-compat and NEWS-compat  Build and install
  ChangeLog and NEWS files relative to compatibility version in %docdir.

  * configure: install: fetch compat git branch in configure  If install is
  attempted from a git repository, try to get compat branch is not already
  available in local repository. Handle various cases like truncated
  repository.

  * .travis.yml: travis: fix build requirements for compat version

  * .travis.yml: travis: exclude compat branches from ci

2017-09-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/.gitignore, init/Makefile, init/profile-compat.csh.in,
  init/profile-compat.sh.in: init: add profile scripts enabling compat vers by
  default

2017-09-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile: install: add compat src to dist tarball

2017-09-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .gitignore, init/.gitignore: git: fix location of ignored files

  * init/Makefile: install: remove any preexisting ksh-functions switchml  In
  case we reinstall with this time C version installation disabled.

  * init/perl.pm.in: init: normalize perl.pm hash key syntax

  * init/.gitignore, init/Makefile, init/bash.in, init/{bash_completion =>
  bash_completion.in}, init/cmake.in, init/csh.in, init/fish.in, init/ksh.in,
  init/perl.pm.in, init/python.py.in, init/ruby.rb.in, init/sh.in,
  init/zsh.in: init: adapt scripts to --enable-compat-version build  Introduce
  MODULE_USE_COMPAT_VERSION environment variable to control the activation of
  the compatibility version rather main version in case of
  --enable-compat-version installation.  The initialization script of the
  shells supporting compatibility version are adapted to define the 'module'
  command based on the modulecmd-compat binary if MODULE_USE_COMPAT_VERSION is
  set to 1. Elsewhere module is based on modulecmd.tcl.  'switchml' function
  of alias is reintroduced to switch between main and compatibility version
  based on the state of the MODULE_USE_COMPAT_VERSION environment variable.
  Acknowledgment: this development has been made and funded within the
  framework of the PRACE Fifth Implementation Phase (PRACE-5IP) project
  (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's Horizon
  2020 research and innovation programme (2014-2020) under grant agreement no.
  730913.

2017-09-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .gitignore, .travis.yml, INSTALL.txt, Makefile, Makefile.inc.in,
  configure, doc/Makefile, init/Makefile, site.exp.in,
  testsuite/install.00-init/030-options.exp: install: --enable-compat-version
  to build compat vers  Introduce '--enable-compat-version' configure argument
  to configure and build compatibility (C) version in addition to main
  version.  This compatibility version is located in the 'compat' directory,
  which is automatically populated with 'c-master' git branch if we work in
  the git repository.  'configure' script is adapted to run the compatibility
  version relative configure script. Unknown command-line arguments are passed
  down to this script, which raise error if these arguments are not known
  there either. Some compatibility version configure script argument are also
  incompatible in this dual installation mode, so an error is raised
  (--enable-versioning for instance).  Build process will generate and install
  modulecmd-compat, module-compat.1 and modulefile-compat.4 from this
  compatibility version. 'compat' suffix enables clear distinction with main
  version files.  Acknowledgment: this development has been made and funded
  within the framework of the PRACE Fifth Implementation Phase (PRACE-5IP)
  project (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's
  Horizon 2020 research and innovation programme (2014-2020) under grant
  agreement no. 730913.

2017-09-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.txt, Makefile.inc.in, configure, contrib/rpm/modules-tcl.spec,
  init/Makefile, init/bash.in, init/csh.in, init/ksh.in, init/sh.in,
  init/zsh.in: install: remove features linking to external C version  Remove
  the --enable-set-switchml, --enable-use-cver-dotmodulespath,
  --with-cver-initdir, --with-cver-bindir and --with-cver-mandir configure
  option that previously enabled to link Modules-Tcl installation to an
  external Modules-C installation.  This change is an initial step toward a
  bundled installation of Tcl/C versions, so the external linking support will
  transform into a dual flavor installation.

2017-09-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/bash.in, init/csh.in, init/fish.in, init/ksh.in, init/sh.in,
  init/zsh.in: init: module source @initdir@/modulerc rather shell source
  Like for other lang init scripts.

2017-09-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.80-deep/022-switch.exp: No swap-on if swap-off failed
  During a 'switch' command, if the unloading part fails the loading part will
  not be tried.  Unloading part fails if module to unload does not exist or
  its unload interpretation raise error. If module to unload exist and is not
  loaded, unload is considered successful.

  * modulecmd.tcl.in: Debug on 'nothing to do' cond of load/unload  Add a
  debug message when load command has nothing because module to load is
  already loaded. Add a debug message when unload command has nothing to do
  because module unload exists but is not loaded.

2017-09-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modulefiles/module/bad,
  testsuite/modulefiles/module/err, testsuite/modulefiles/module/lbad,
  testsuite/modulefiles/module/lerr, testsuite/modulefiles/module/lunk,
  testsuite/modulefiles/module/unk, testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.70-maint/140-multiargs.exp,
  testsuite/modules.90-avail/070-full.exp: Failed load/unload if submod
  load/unload fails  When a modulefile loads or unloads another modulefile,
  load or unload issue did not previously led to upper module load or unload
  failure. As a result, the upper modulefile appeared loaded or unloaded
  whereas its dependent sub-modulefile were not loaded or respectively still
  loaded.  This commit makes cmdModuleLoad and cmdModuleUnload procedure
  return an exit code to let know if load or unload action performed
  correctly. In case of a 'module load' or 'module unload' call within a
  modulefile, the module procedure will raise an error with the dummy message
  'SUB_FAILED'. This message is caught at the result of the modulefile
  interpretation to return an error code, without raising error count or
  message as it has already been handled at the root of the issue.

  * modulecmd.tcl.in: Fix popSettings stack handling  popSettings were
  cleaning 2 levels of stack instead of 1, resulting in bad environment
  restore when issue occurred in a nested modulefile interpretation.

  * testsuite/modules.50-cmds/180-unload.exp,
  testsuite/modules.70-maint/080-help.exp,
  testsuite/modules.70-maint/085-test.exp,
  testsuite/modules.70-maint/090-source.exp: testsuite: add tests for unknown
  or broken mod  Add tests to check behavior for commands performing
  modulefile interpretation when modulefile is unknown or has broken Tcl code
  inside.

2017-09-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.20-locate/048-symexec.exp,
  testsuite/modules.50-cmds/210-exit.exp,
  testsuite/modules.50-cmds/300-interp.exp,
  testsuite/modules.50-cmds/301-interp-command.exp,
  testsuite/modules.50-cmds/302-interp-cascaded.exp: Only one sep line between
  2 mods on display/help/test  Print only one separator line (---) between the
  interpretation of 2 modules on the display, help and test commands to
  improve readability of the results displayed.  To do so, cmdModuleDisplay
  and cmdModuleTest procedures have been adapted to receive the full list of
  modules to work on, like it was already done on cmdModuleHelp.  Adapt
  non-regression tests output to this change.

  * modulecmd.tcl.in, testsuite/modulefiles/bad2/body,
  testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.50-cmds/180-unload.exp,
  testsuite/modules.50-cmds/190-load.exp,
  testsuite/modules.50-cmds/284-info-others.exp,
  testsuite/modules.70-maint/060-apropos.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/080-help.exp,
  testsuite/modules.70-maint/085-test.exp,
  testsuite/modules.70-maint/140-multiargs.exp,
  testsuite/modules.80-deep/021-unload.exp,
  testsuite/modules.90-avail/030-multiple.exp,
  testsuite/modules.90-avail/070-full.exp: Do not exit if internal error
  occurs in interp mod  Previously an internal error occurring during the
  interpretation of a modulefile (like broken Tcl code) was leading to an
  immediate exit of the whole module execution. So the end of the ongoing
  command was skipped (like printing separator line '---' on display command
  or interpreting next modulefile passed argument on load command).  With this
  change, an internal error occurring during the interpretation of a
  modulefile will be treated as any other error raised by modulefile Tcl
  commands (like prereq, conflict, append-path, etc). Interpretation will be
  considered as failed but ongoing command will get this failed status and
  will continue.  As a result, when this kind of error occurs now display,
  help, load, unload, whatis and source commands will end treatment of the
  failed modulefile and then proceed with the following modulefiles passed as
  arguments.  Add 140-multiargs non-regression tests in 70-maint suite to
  check behavior of module commands running with multiple modulefiles passed
  as argument.

2017-08-31  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.10-use/080-access.exp,
  testsuite/modules.10-use/090-bad.exp,
  testsuite/modules.20-locate/010-init_ts.exp,
  testsuite/modules.20-locate/031-defvers2.exp,
  testsuite/modules.20-locate/060-rc.exp,
  testsuite/modules.20-locate/065-rcerrs.exp,
  testsuite/modules.20-locate/067-hidden.exp,
  testsuite/modules.20-locate/068-transitive.exp,
  testsuite/modules.20-locate/080-access.exp,
  testsuite/modules.20-locate/081-access-rc.exp,
  testsuite/modules.20-locate/095-cleanup.exp,
  testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.50-cmds/045-append-undo.exp,
  testsuite/modules.50-cmds/050-prepend.exp,
  testsuite/modules.50-cmds/055-prepend-undo.exp,
  testsuite/modules.50-cmds/180-unload.exp,
  testsuite/modules.50-cmds/190-load.exp,
  testsuite/modules.50-cmds/284-info-others.exp,
  testsuite/modules.70-maint/055-whatis.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/080-help.exp,
  testsuite/modules.70-maint/085-test.exp,
  testsuite/modules.70-maint/100-path.exp,
  testsuite/modules.80-deep/021-unload.exp,
  testsuite/modules.80-deep/022-switch.exp,
  testsuite/modules.80-deep/080-access.exp: Print more readable messages on
  reportInternalBug  Improve readability of error messages encountered during
  modulefile execution by putting Tcl error message first after the 'Module
  ERROR' prefix.  To achieve this improvement, modulefile is passed to
  reportInternalBug procedure as a separate argument. Procedures getting and
  manipulating error information have been adapted to add modulefile as an
  element of the error information to be able to transmit it to
  reportInternalBug.  In addition, this commit change error reporting kind
  when facing access error on readModuleContent. Previously access issues were
  reported with reportInternalBug whereas these issues were not relative to
  modulefile content. reportError is now used to report access issue as when
  this kind of error is encountered when checking file is valid modulefile.
  Adapt relative non-regression tests and take opportunity to centralize
  common error messages at start of the testsuite.

2017-08-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile, doc/Makefile, init/Makefile: install: avoid make to rebuild
  Makefile.inc

2017-08-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Add getModuleNameFromModulepath helper proc

  * modulecmd.tcl.in: Add getModulepathFromModuleName helper proc

  * modulecmd.tcl.in, testsuite/modules.70-maint/130-aliases.exp: Add blank
  line between displayed list of elements  When reporting results per category
  or modulepaths like during an 'avail' or 'whatis' command, add a blank line
  between categories or modulepaths to get a clearer separation between them.
  With this change, behavior is align with C-version and standard tools like
  'ls'.

  * modulecmd.tcl.in, testsuite/modules.20-locate/031-defvers2.exp,
  testsuite/modules.20-locate/067-hidden.exp,
  testsuite/modules.20-locate/068-transitive.exp,
  testsuite/modules.90-avail/060-empty.exp: No table header display if no
  avail result  Do not print the table header line in --long mode on an
  'avail' command if no result are returned.  Take opportunity of this change
  to introduce the displayTableHeader procedure in order to get an homogeneous
  code to produce such kind of header in the various command procedures
  requiring it.

2017-08-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/modulefile.pod, modulecmd.tcl.in,
  testsuite/modulefiles/.hidden/1.0, testsuite/modulefiles/loc_rc8/.2.0,
  testsuite/modulefiles/loc_rc8/.modulerc,
  testsuite/modulefiles/loc_rc8/.subdir/4.0,
  testsuite/modulefiles/loc_rc8/1.0, testsuite/modulefiles/loc_rc9/.1.0,
  testsuite/modules.20-locate/067-hidden.exp,
  testsuite/modules.70-maint/130-aliases.exp,
  testsuite/modules.90-avail/070-full.exp: Add support for hidden 'dot'
  modulefiles  Modulefiles with part of their name starting with a '.' dot
  character are considered as hidden modulefiles, like dot files on Unix-kind
  filesystems. After introduction of the getModules/findModules procedures
  hidden modulefiles where automatically discarded. So this commit
  re-introduce the support to locate these dot modulefiles.  Add a
  'fetch_hidden' argument to the findModules procedure to enable an extra
  lookup on walked directories to gather the dot modulefiles. The getModules
  procedures now looks at the passed mod and if named module correspond to a
  dot modulefile findModules 'fetch_hidden' argument is turned on. Since
  getPathToModule call to getModules for broad search (with just passed mod
  root name), this procedure also makes the 'is hidden module' test to order
  getModules to do the hidden search.  A hidden modulefile does not appear in
  case of wild search, it is only returned when search is about its exact
  name. When a symbolic version targets a hidden modulefile, this modulefile
  will also be returned in case search is about symbol exact name. A module
  alias targeting a hidden modulefile is returned as any other aliases.  Add
  067-hidden non-regression tests in 20-locate suite.

2017-08-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Look for alias/sym tgt in all path on cmdModuleSearch
  Introduce a second search round in cmdModuleSearch to solve module alias or
  symbolic version that were not solved by looking at modules in the
  modulepath where they have been defined.  During initial search round across
  modulepaths, these aliases or symbols which return an 'Unable to locate'
  issue from getPathToModule are stored in an extra_search array which gathers
  all elements to look at during the extra search round.  Extra search round
  will attempt to solve these aliases or symbol in all defined modulepaths,
  except the path already looked at.  Due to this second search round, results
  are not processed immediately for each modulepath but once when all location
  searches are finished. So user will get one full output rather progressive
  results modulepath after modulepath. This behavior change in outputing
  results is required as an alias or symbol solved globally may alter the
  result list of a modulepath already processed. So when these kind of alias
  or symbol are searched, their target modulefile will be appended to the list
  of files to interpret of the modulepath they are coming from.  To optimize
  alias/symbol resolution process the 'full_list' array is introduced to store
  all the module names added to each modulepath arrays, so before asking
  getPathToModule for resoltution, look if defined target has not already been
  found and saved in 'full_list'.

2017-08-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Look for alias/sym tgt in all path on cmdModulePaths
  Resolve alias or symbolic version by looking in all modulepaths, rather just
  current modulepath, in order to match alias or symbol targeting a module in
  a different modulepath.  Resolution is made first in current modulepath
  directory, if not solved there the other modulepaths will be looked at
  following their precedence order.  Previously only alias and symbolic
  version targeting module in same modulepath were found.

  * doc/source/modulefile.pod, modulecmd.tcl.in: Handle alias/sym pt. to
  another path in getPathToModule  When searching for a module in a given
  modulepath directory, if a module alias or a symbolic version matches
  searched module but the target of this alias or symbol is not found in
  current modulepath directory, search for this target restarting search from
  the first modulepath in list to ensure modulepath priority.  Previously this
  kind of alias or symbol targeting a module in a different modulepath were
  only found if this path was set after the modulepath where the alias or
  symbol is defined.  Clarify alias and symbolic version modulepath resolution
  steps in modulefile man page.

2017-08-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/etc/modulerc.cross, testsuite/modulefiles.path1/cross/.modulerc,
  testsuite/modulefiles.path1/cross/3.0,
  testsuite/modulefiles.path1/cross/4.0,
  testsuite/modulefiles.path1/dcross/.modulerc,
  testsuite/modulefiles.path1/dcross/4.0,
  testsuite/modulefiles.path1/dcross/dir1/1.0,
  testsuite/modulefiles.path1/lcross/1, testsuite/modulefiles.path1/lcross/10,
  testsuite/modulefiles.path1/lcross/6,
  testsuite/modulefiles.path1/othcross/.modulerc,
  testsuite/modulefiles.path1/othcross/1.0,
  testsuite/modulefiles.path2/cross/.modulerc,
  testsuite/modulefiles.path2/cross/1.0,
  testsuite/modulefiles.path2/cross/6.0,
  testsuite/modulefiles.path2/dcross/dir1/.modulerc,
  testsuite/modulefiles.path2/dcross/dir1/2.0,
  testsuite/modulefiles.path2/dcross/dir2/1.0,
  testsuite/modulefiles.path2/lcross/11, testsuite/modulefiles.path2/lcross/2,
  testsuite/modulefiles.path2/lcross/4, testsuite/modulefiles.path2/lcross/5,
  testsuite/modulefiles.path2/lcross/7,
  testsuite/modulefiles.path3/cross/.modulerc,
  testsuite/modulefiles.path3/cross/2.0,
  testsuite/modulefiles.path3/cross/5.0,
  testsuite/modulefiles.path3/dcross/.modulerc,
  testsuite/modulefiles.path3/dcross/5.0,
  testsuite/modulefiles.path3/dcross/dir1/3.0,
  testsuite/modulefiles.path3/dcross/dir3/1.0,
  testsuite/modulefiles.path3/lcross/12, testsuite/modulefiles.path3/lcross/3,
  testsuite/modulefiles.path3/lcross/8,
  testsuite/modulefiles.path3/othcross/.modulerc,
  testsuite/modulefiles.path3/othcross/2.0,
  testsuite/modules.20-locate/069-cross.exp: testsuite: add tests for mods
  spread across paths  Add location tests for module, aliases and symbolic
  versions whose definition are spread across multiple modulepaths.

  * testsuite/modules.20-locate/068-transitive.exp,
  testsuite/modules.80-deep/068-transitive.exp: testsuite: add unload tests
  mentioning sym or alias

2017-08-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/install.00-init/030-options.exp,
  testsuite/modules.20-locate/031-defvers2.exp,
  testsuite/modules.20-locate/035-defname.exp,
  testsuite/modules.20-locate/038-defcontext.exp,
  testsuite/modules.20-locate/068-transitive.exp,
  testsuite/modules.20-locate/080-access.exp,
  testsuite/modules.50-cmds/300-interp.exp,
  testsuite/modules.80-deep/068-transitive.exp,
  testsuite/modules.80-deep/080-access.exp,
  testsuite/modules.90-avail/040-wild.exp,
  testsuite/modules.90-avail/050-long.exp,
  testsuite/modules.91-sort/020-avail.exp: Parsable modulepath header when
  -l/-t enabled  Do not ship modulepath header in a separator line in terse or
  long output on module avail command. With this change, behavior is aligned
  with C-version.

  * modulecmd.tcl.in, testsuite/modules.61-coll/020-savelist.exp,
  testsuite/modules.70-maint/040-list.exp,
  testsuite/modules.70-maint/045-listlong.exp,
  testsuite/modules.90-avail/040-wild.exp,
  testsuite/modules.90-avail/050-long.exp: Make -l/-t switches mutually
  exclusive  Last switch mentionned on command-line is honored

  * modulecmd.tcl.in: Remove useless g_loadedModulesGeneric structure
  Registering the loaded module name in the g_loadedModulesGeneric global
  array to look for loaded module information is now useless following the
  addition of the getLoadedWithClosestName and getLoadedMatchingName
  mechanisms.

  * modulecmd.tcl.in, testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.80-deep/022-switch.exp: Enable getPathToModule to return
  closest loaded mod  If 'look_loaded' argument of getPathToModule procedure
  is set to 'match' look at matching loaded modules to get result (unload
  behavior). Enable to return the closest loaded modules (not module expressed
  in mod but sharing at least the same root name) by setting look_loaded
  argument to 'close'.  With this change, cmdModuleUnload is adapted to call
  getPathToModule in 'match' look_loaded mode most of the time, but in case of
  'module switch' with a single argument, cmdModuleUnload will call
  getPathToModule in 'close' look_loaded mode.  As a consequence,
  cmdModuleSwitch does not need anymore to work on module resolution and rely
  entirely on cmdModuleLoad and cmdModuleUnload which in turn rely on
  getPathToModule.  Add complementary tests in 50-cmds/170-swap and
  80-deep/022-switch to ensure closest loaded module is not returned in case
  of 'switch old new' command (not 'switch new').

  * modulecmd.tcl.in, testsuite/modules.50-cmds/180-unload.exp,
  testsuite/modules.80-deep/021-unload.exp: Unload deep mod with just root
  name passed as arg  Enable to unload 'mod/dir/subdir/vers' when unload of
  'mod' or 'mod/dir' asked. Was previously working only if deep module to
  unload was also the default version for these root names.  Introduce
  getLoadedMatchingName procedure to check passed name is equal to or is a
  subpart of a loaded module. This new procedure is then used in
  getPathToModule when look_loaded is enabled (so when unloading module).  Add
  021-unload tests in 80-deep suite to check unload of deep modules using sub
  names. Add also new tests in 180-unload of 50-cmds suite to check behavior
  when multiple loaded modules match searched name.

  * modulecmd.tcl.in, testsuite/modulefiles.deep/plain/dir1/1.0,
  testsuite/modulefiles.deep/plain/dir1/2.0,
  testsuite/modulefiles.deep/plain/dir2/1.0,
  testsuite/modulefiles.deep/plain/dir2/2.0,
  testsuite/modules.80-deep/022-switch.exp,
  testsuite/modules.80-deep/030-display.exp,
  testsuite/modules.80-deep/080-access.exp: Fix getLoadedWithClosestName
  search  Algorithm were matching middle or end part of module even if no
  match on root element.  Add 022-switch tests in 80-deep to test
  getLoadedWithClosestName on deep module names.

2017-08-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modules.50-cmds/180-unload.exp: Remove dummy
  code on cmdModuleUnload  Clean code in cmdModuleUnload procedure that were
  used as fallback treatment in case a module loaded were not found by
  getPathToModule (relative modulepath unconfigured?).  Nowadays
  getPathToModule procedure also look at the loaded module information and
  return in case of an 'unload' action registered loaded modulefile, whatever
  configured modulepath.  Take this opportunity to add 180-unload tests in
  50-cmds suite to check unload behavior with different name condition and
  when the modulepath relative to the loaded module to unload is not set
  anymore.

  * modulecmd.tcl.in, testsuite/modulefiles/loc_dv1/1.0,
  testsuite/modulefiles/loc_dv1/2.0, testsuite/modulefiles/loc_dv2/2.0,
  testsuite/modules.20-locate/030-defvers.exp,
  testsuite/modules.20-locate/038-defcontext.exp: Locate module using loaded
  context only on 'unload'  When searching for a modulefile corresponding to a
  given name, the getPathToModule procedure was previously looking by default
  at the list of loaded modulefiles to find a match. This behavior lead to
  different result depending on the loaded environment context for all module
  commands relying on modulefile location.  For instance, if 'mod' had 2
  versions '1' and '2', the latter being default version, if 'mod/1' were
  loaded it was this version that were answered when asking for 'mod'.  This
  commit restore a predictable and idempotent behavior where the loaded
  modules context is only use when working on this loaded context. Same
  behavior than C-version is now encountered.  As a result, only the 'unload'
  command now looks at loaded modules to find location of modules passed as
  argument. Load, display and help commands do not look anymore at loaded
  modules to locate their module arguments.  Non-regression tests
  038-defcontext in 20-locate have been introduced to ensure correct behavior
  will persist over time.

2017-08-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modulefiles/loc_sym/version23,
  testsuite/modules.20-locate/045-symvers.exp,
  testsuite/modules.90-avail/070-full.exp: Do not alter resolution path when
  spreading sym  When spreading symbol along resolution path, do not update
  this resolution path. Exception made when overwriting a pre-existing symbol
  (used for instance in case default version set in .version file superseeds a
  default an already set via .modulerc file)  Protected resolution path helps
  to spread symbol all along the path without missing intermediate resolution.

  * testsuite/modulefiles.deep/modtr/.modulerc,
  testsuite/modulefiles.deep/trmod/.modulerc,
  testsuite/modulefiles/loc_sym/version22,
  testsuite/modulefiles/loc_tr/.modulerc,
  testsuite/modulefiles/tr2_loc/.modulerc,
  testsuite/modulefiles/tr_loc/.modulerc,
  testsuite/modules.20-locate/045-symvers.exp,
  testsuite/modules.20-locate/068-transitive.exp,
  testsuite/modules.70-maint/130-aliases.exp,
  testsuite/modules.80-deep/068-transitive.exp,
  testsuite/modules.90-avail/070-full.exp: testsuite: check 'default' symbol
  spread  Add non-regression tests in 20-locate/045-symvers,
  20-locate/068-transitive and 80-deep/068-transitive to ensure that 'default'
  symbol has same spreading properties than other symbols.

  * modulecmd.tcl.in, testsuite/modulefiles/loc_sym/version21,
  testsuite/modules.20-locate/045-symvers.exp,
  testsuite/modules.70-maint/130-aliases.exp,
  testsuite/modules.90-avail/070-full.exp: Fix symbol spread when set on alias
  before their def  Propagate symbols set on aliases before the definition of
  these aliases. Previously, a symbol set on a not-yet-defined alias were lost
  and not applied to the alias target once set.  With this change setting a
  symbol on an alias gives same result either this symbol is set before or
  after the alias definition.

2017-08-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Remove 'default_is_special' from getModuleNameVersion
  New "default" treatment in setModuleResolution procedure permits to remove
  the 'default_is_special' hack from getModuleNameVersion procedure. One
  exception still needed for the 'module-info symbols' command, which may be
  called for 'modname/default' with no default symbol necessary registered but
  symbols set on bare module name.

  * modulecmd.tcl.in, testsuite/modulefiles/loc_sym/version17,
  testsuite/modulefiles/loc_sym/version18,
  testsuite/modulefiles/loc_sym/version19,
  testsuite/modulefiles/loc_sym/version20,
  testsuite/modules.20-locate/045-symvers.exp,
  testsuite/modules.20-locate/068-transitive.exp,
  testsuite/modules.80-deep/068-transitive.exp,
  testsuite/modules.90-avail/070-full.exp: Register step-by-step resolution
  path  Register a step-by-step resolution path with help of g_resolvedPath
  array in order to be able propagating symbols all along this resolution
  path. Previously intermediate steps were skipped during symbol spread
  leading to different results depending on module-version statement order.
  Add tests in 045-symvers of 20-locate suite to check new behavior. Also
  correct tests in 068-transitive of 20-locate and 80-deep suites.

2017-08-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in, testsuite/modulefiles/loc_dv2/1.0,
  testsuite/modulefiles/loc_dv7/2.0/1.0, testsuite/modulefiles/loc_dv9/1.0,
  testsuite/modulefiles/loc_sym/alias7,
  testsuite/modulefiles/loc_sym/version15,
  testsuite/modulefiles/loc_sym/version16,
  testsuite/modules.20-locate/030-defvers.exp,
  testsuite/modules.20-locate/031-defvers2.exp,
  testsuite/modules.20-locate/040-alias.exp,
  testsuite/modules.20-locate/045-symvers.exp: Resolve 'mod/default' when
  'default' symbol set  Resolve the 'default' symbolic version as any other
  symbolic version when passed as module name on commands performing module
  resolution like load, display, help and test.  Previously 'default' symbolic
  version used in module name was only found on search-like commands like
  avail, whatis and paths.  With this change same behavior than C-version is
  achieve.  setModuleResolution procedure has been reworked to register
  resolution and symbols on 'modulename/default' in addition to just
  'modulename'. So resolution or symbol querying now find a match on
  'modulename/default'.  Introduce 031-defvers2 non-regression tests in
  20-locate suite to test usage of 'default' symbol in module name passed on
  command-line. Also add tests in 040-alias and 045-symvers of 20-locate suite
  to check module-alias and module-version behavior when targeting default
  module.

2017-08-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl.in: Avoid empty-string on unload when running Tcl8.4

  * .gitignore, Makefile, contrib/nglfar2ccov, doc/Makefile, modulecmd.tcl =>
  modulecmd.tcl.in: More standard shebang for modulecmd.tcl  Make use of
  './configure' information to set a precise tclsh shebang on modulecmd.tcl
  script. This change requires to move modulecmd.tcl to modulecmd.tcl.in
  within repository.  Shebang is set to '@TCLSHDIR@/tclsh' rather just
  '@TCLSH@' in modulecmd.tcl.in to help forge code determines that this file
  is a Tcl script.

  * testsuite/modules.20-locate/080-access.exp: testsuite: check access on
  symlink module  Add non-regression tests in 080-access of 20-locate suite to
  control behavior of filesystem symlink module when symlink target directory
  or its content has a restricted accessed.

  * modulecmd.tcl: Skip module-version registration if invalid modname

2017-08-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modulefiles.deep/modtr/.modulerc,
  testsuite/modulefiles.deep/modtr/dir4/.modulerc,
  testsuite/modulefiles.deep/tr2mod/.modulerc,
  testsuite/modulefiles.deep/tr2mod/dir3/.modulerc,
  testsuite/modulefiles.deep/trmod/.modulerc,
  testsuite/modulefiles.deep/trmod/dir3/.modulerc,
  testsuite/modulefiles/tr2_loc/.modulerc,
  testsuite/modulefiles/tr_loc/.modulerc,
  testsuite/modules.20-locate/060-rc.exp,
  testsuite/modules.20-locate/068-transitive.exp,
  testsuite/modules.70-maint/130-aliases.exp,
  testsuite/modules.80-deep/068-transitive.exp,
  testsuite/modules.90-avail/070-full.exp: Include all kind of symvers target
  in getModules res  When parsing symbolic version targets in getModules
  procedures, these targets were previously included in search result only if
  they were found on the filesystem (file or directory). But sometimes, these
  targets may be module alias and not a consistent file or directory.  This
  situation happens when a module-version is set on an alias which in turns
  targets a modulefile in a different directory. When you query the symbolic
  version in the end-point modulefile directory, you get the modulefile as a
  result, but if you query the symbol in the alias directory, this alias will
  be returned.  Adapt non-regression tests in 060-rc of 20-locate suite and in
  068-transitive of 80-deep suite. Improve especially the 068-transitive tests
  with aliases and symbols set from different module.

  * .gitignore: git: ignore vim swap files

2017-08-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modulefiles.deep/modtr/.modulerc,
  testsuite/modulefiles.deep/modtr/3.0,
  testsuite/modulefiles.deep/modtr/dir1/1.0,
  testsuite/modulefiles.deep/modtr/dir2/2.0,
  testsuite/modulefiles.deep/modtr/dir3/.modulerc,
  testsuite/modulefiles.deep/modtr/dir4/.modulerc,
  testsuite/modulefiles.deep/modtr/dir4/mod4.0,
  .../modulefiles.deep/modtr/dir5/subdir/mod5.0,
  testsuite/modulefiles/loc_tr/.modulerc, testsuite/modulefiles/loc_tr/1.0,
  testsuite/modulefiles/loc_tr/2.0, testsuite/modulefiles/loc_tr/3.0,
  testsuite/modules.20-locate/060-rc.exp,
  testsuite/modules.20-locate/068-transitive.exp,
  testsuite/modules.70-maint/130-aliases.exp,
  testsuite/modules.80-deep/068-transitive.exp,
  testsuite/modules.90-avail/070-full.exp: Let setModuleResolution handle
  g_moduleVersion  Register all symbolic module version in g_moduleVersion
  array by letting setModuleResolution procedure handle this array. So now
  module-version procedure deleguates g_moduleVersion handling to
  setModuleResolution.  With this change all symbols are now registered in
  g_moduleVersion which enables to search on these names during an 'avail'
  command. It was previously possible to match these symbols only if they were
  explicitely defined on a 'module-version' statement and were not about the
  'default' symbol. Symbols inherited by transitivity are now also registered
  in g_moduleVersion and resolution structure by recursive call to
  setModuleResolution procedure.  setModuleResolution procedure has also been
  adapted to withdraw its 'override_default' argument. When called,
  setModuleResolution will now always override an already defined symbolic
  version, but 'module-version' procedure will refrain from calling
  setModuleResolution if this symbol is already set in g_moduleVersion.
  Introduce non-regression tests 068-transitive in 20-locate and 80-deep
  suites and add new tests in 060-rc in 20-locate suite to check transitive
  definitions in various conditions.

2017-08-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles/symlink, testsuite/modulefiles/symlink2,
  testsuite/modulefiles/symlink3, testsuite/modules.20-locate/075-symlink.exp,
  testsuite/modules.70-maint/130-aliases.exp,
  testsuite/modules.90-avail/040-wild.exp,
  testsuite/modules.90-avail/070-full.exp: testsuite: check behavior with fs
  symlink  Add 075-symlink non-regression tests in 20-locate suite to validate
  behavior when module is a filesystem symlink.  Adapt tests in
  70-maint/130-aliases, 90-avail/040-wild and 90-avail/070-full for the
  addition of the 'symlink*' modules.

  * testsuite/modules.50-cmds/050-prepend.exp,
  testsuite/modules.50-cmds/055-prepend-undo.exp: testsuite: add prepend tests
  for leading colon case  Add a load test in 050-prepend and an unload test in
  055-prepend-undo of 50-cmds suite to validate behavior when a PATH-like
  variable is initially set when a prefixing colon. Load should treat it as an
  empty path element. Unload restore this prefixing colon.

2017-08-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .gitignore, Makefile.in => Makefile, Makefile.inc.in, configure,
  doc/{Makefile.in => Makefile}, init/.gitignore, init/{Makefile.in =>
  Makefile}: install: fix Makefile generation flaws  Generate a shared
  'Makefile.inc' file rather all 'Makefile's at configure time. Avoid
  init/Makefile being rebuilt by initscript '%.in' rules.  Correct 'all' rule
  typo in doc/Makefile.  Enforce '.modulespath' symlink creation when
  usecverdotmodulespath is enabled.

  * doc/source/diff_with_c-version.pod, doc/source/module.pod.in,
  doc/source/modulefile.pod, init/.gitignore, init/Makefile.in, init/r.R.in,
  modulecmd.tcl, testsuite/modulefiles/info/shellsexp,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.70-maint/120-autoinit.exp: Support for R "shell"  And
  adapt documentation, installation and testsuite.

2015-11-21  Roy Storey <roy.storey@plantandfood.co.nz>

  * init/r.R.in: init: script for R support

2017-08-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/rpm/modules-tcl.spec, doc/source/diff_with_c-version.pod,
  doc/source/module.pod.in, doc/source/modulefile.pod, init/.gitignore,
  init/Makefile.in, init/ruby.rb.in, modulecmd.tcl,
  testsuite/modulefiles/info/shellsexp,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.70-maint/120-autoinit.exp: Support for Ruby "shell"  And
  adapt documentation, installation and testsuite.

2011-10-17  Tammo Tjarks <tammo@tammo-tjarks.de>

  * init/ruby.rb.in: init: script for Ruby support

2017-08-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.pod.in, init/.gitignore, init/Makefile.in, init/{perl.in
  => perl.pm.in}, init/{python.in => python.py.in}: Use file extension for
  perl/python init script  Rename 'perl' in 'perl.pm' and 'python' into
  'python.py' to get same init script filename than C-version.

  * modulecmd.tcl, testsuite/modules.00-init/006-procs.exp: Properly set
  preliminary code for x-res stuff

2017-08-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modules.20-locate/030-defvers.exp: Ignore extra
  '/' on module name for loc

  * doc/source/diff_with_c-version.pod, doc/source/module.pod.in,
  doc/source/modulefile.pod, init/.gitignore, init/Makefile.in, init/cmake.in,
  modulecmd.tcl, testsuite/modulefiles/info/shellsexp,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.70-maint/120-autoinit.exp: Support for CMake "shell"  And
  adapt documentation, installation and testsuite.

  * modulecmd.tcl, testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.50-cmds/090-uname-proc.exp,
  testsuite/modules.50-cmds/095-uname.exp,
  testsuite/modules.50-cmds/099-uname-cleanup.exp,
  testsuite/modules.50-cmds/250-x-resource.exp: Improve check and run of
  external command  Add 'getCommandPath' procedure to find path of command and
  cache this location using 'auto_execok' Tcl command.  Add 'runCommand'
  procedure to get command location from getCommandPath then execute command
  if found. An error is raised if not found.  Plug 'uname' and 'x-resource'
  procedures on these new mechanisms to handle their external command run.
  Especially 'x-resource' now checks if X11 environment is editable by running
  'xrdb -query'. If this command produces error, then X11 resources cannot be
  edited and x-resource procedure will raise an error.  Adapt non-regression
  tests 09x-uname and 250-x-resource of 50-cmds suite consequently.

2017-08-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/rpm/modules-tcl.spec: rpm: adapt environment-modules provides to
  distrib

2017-08-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .travis.yml: travis: add test variants for openSUSE

  * .travis.yml, testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.50-cmds/250-x-resource.exp: testsuite: fix xres orders
  production  Use same mechanism than in modulecmd.tcl to get exact same
  ordering of x-resource directives to test results.  Enable use of a virtual
  display server on CentOS test environment with Xvfb to test behavior of
  x-resource on this distribution.  Thanks to Gabe Turner for reporting the
  issues on the x-resource test that were due to the rewrite of the
  non-regression testsuite.

  * ...ules-tcl-1.923-fix-uname-release-with-lsb.patch,
  contrib/rpm/modules-tcl.spec: rpm: fix %license use on el6 and bad patch4
  %license macro does not exist on el6 environment and cannot be set as
  attempted as we need a %files-macro. So use %doc instead of %license on el6
  and below.  Also fix patch #4 were testsuite update was previously missing
  to fix the uname/release issue when an /etc/lsb-release file exists.  Thanks
  to Gabe Turner for reporting this issue

2017-08-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile.in, modulecmd.tcl: Add 'testsyntax' makefile rule  Adapt by the
  way some code lines that were too long (>78).

  * modulecmd.tcl: Always mention channelid on 'puts' statement

  * modulecmd.tcl: Harmonize and optimize write of 'switch' statement

  * modulecmd.tcl, testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.70-maint/120-autoinit.exp: Fix some typos on shell code
  rendering

  * modulecmd.tcl, testsuite/modules.50-cmds/045-append-undo.exp,
  testsuite/modules.50-cmds/055-prepend-undo.exp: Raise and render error once
  on unload  During an 'unload' action, an error occuring on a loaded module
  will not affect the unload of the other modules passed on the command line.
  This commit remove the additional error message that were displayed in this
  situation: only the message raised from the modulefile interpretation is
  useful. Also only render error once, so 'renderError' procedure will do
  nothing if it has already been called.

2017-08-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/015-version.exp,
  testsuite/modules.20-locate/080-access.exp,
  testsuite/modules.50-cmds/282-info-command.exp,
  testsuite/modules.50-cmds/283-info-command-exp.exp,
  testsuite/modules.91-sort/030-whatis.exp: testsuite: harden tests using '.*'
  regexp

  * testsuite/modulefiles/dirmodalias/1.0,
  testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.00-init/015-version.exp,
  testsuite/modules.00-init/090-switches.exp,
  testsuite/modules.10-use/030-use.exp,
  testsuite/modules.10-use/031-append.exp,
  testsuite/modules.10-use/032-prepend.exp,
  testsuite/modules.10-use/070-unuse.exp,
  testsuite/modules.20-locate/020-fqual.exp,
  testsuite/modules.20-locate/030-defvers.exp,
  testsuite/modules.20-locate/035-defname.exp,
  testsuite/modules.20-locate/047-symerrs.exp,
  testsuite/modules.20-locate/048-symexec.exp,
  testsuite/modules.20-locate/050-locrc.exp,
  testsuite/modules.20-locate/055-locrcerrs.exp,
  testsuite/modules.20-locate/060-rc.exp,
  testsuite/modules.20-locate/070-homerc.exp,
  testsuite/modules.20-locate/080-access.exp,
  testsuite/modules.50-cmds/015-use.exp,
  testsuite/modules.50-cmds/017-use-undo.exp,
  testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.50-cmds/050-prepend.exp,
  testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/121-prereq-module.exp,
  testsuite/modules.50-cmds/130-conflict-full.exp,
  testsuite/modules.50-cmds/131-conflict-module.exp,
  testsuite/modules.50-cmds/190-load.exp,
  testsuite/modules.50-cmds/210-exit.exp,
  testsuite/modules.50-cmds/260-getenv.exp,
  testsuite/modules.50-cmds/281-info-modulerc.exp,
  testsuite/modules.50-cmds/282-info-command.exp,
  testsuite/modules.50-cmds/283-info-command-exp.exp,
  testsuite/modules.50-cmds/284-info-others.exp,
  testsuite/modules.50-cmds/300-interp.exp,
  testsuite/modules.50-cmds/301-interp-command.exp,
  testsuite/modules.50-cmds/302-interp-cascaded.exp,
  testsuite/modules.61-coll/020-savelist.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/080-access.exp,
  testsuite/modules.70-maint/055-whatis.exp,
  testsuite/modules.70-maint/060-apropos.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/080-help.exp,
  testsuite/modules.70-maint/085-test.exp,
  testsuite/modules.70-maint/120-autoinit.exp,
  testsuite/modules.70-maint/130-aliases.exp,
  testsuite/modules.80-deep/030-display.exp,
  testsuite/modules.80-deep/050-whatis.exp,
  testsuite/modules.80-deep/080-access.exp,
  testsuite/modules.90-avail/020-single.exp,
  testsuite/modules.90-avail/030-multiple.exp,
  testsuite/modules.90-avail/040-wild.exp,
  testsuite/modules.90-avail/050-long.exp,
  testsuite/modules.90-avail/060-empty.exp,
  testsuite/modules.91-sort/020-avail.exp,
  testsuite/modules.91-sort/030-whatis.exp: testsuite: imply ^$ for match str
  on re-enabled tests  Automatically prefix matching string with '^' and
  suffix it with '$' in case of regexp-enabled non-regression tests.  Adapt
  all regexp-enabled tests requiring it for this change.

  * .../modules-tcl-1.923-fix-uname-nodename-when-dns.patch,
  contrib/rpm/modules-tcl.spec, modulecmd.tcl: Use 'uname -n' for 'uname
  nodename'  To avoid involment of DNS resolution base the result of the
  'uname nodename' modulefile command on 'uname -n' system command rather on
  '[info hostname]'.  With this fix same behavior than C-version is achieved
  for 'uname nodename'.

2017-08-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.00-init/080-begenv.exp,
  testsuite/modules.10-use/030-use.exp,
  testsuite/modules.10-use/031-append.exp,
  testsuite/modules.10-use/032-prepend.exp,
  testsuite/modules.10-use/040-load.exp,
  testsuite/modules.10-use/070-unuse.exp,
  testsuite/modules.10-use/080-access.exp,
  testsuite/modules.10-use/090-bad.exp,
  testsuite/modules.20-locate/010-init_ts.exp,
  testsuite/modules.20-locate/035-defname.exp,
  testsuite/modules.20-locate/040-alias.exp,
  testsuite/modules.20-locate/045-symvers.exp,
  testsuite/modules.20-locate/046-getsym.exp,
  testsuite/modules.20-locate/047-symerrs.exp,
  testsuite/modules.20-locate/048-symexec.exp,
  testsuite/modules.20-locate/050-locrc.exp,
  testsuite/modules.20-locate/060-rc.exp,
  testsuite/modules.20-locate/070-homerc.exp,
  testsuite/modules.20-locate/080-access.exp,
  testsuite/modules.20-locate/095-cleanup.exp,
  testsuite/modules.50-cmds/015-use.exp,
  testsuite/modules.50-cmds/017-use-undo.exp,
  testsuite/modules.50-cmds/020-setenv.exp,
  testsuite/modules.50-cmds/022-setenv-eschars.exp,
  testsuite/modules.50-cmds/025-setenv-undo.exp,
  testsuite/modules.50-cmds/028-setenv-refcount.exp,
  testsuite/modules.50-cmds/030-unsetenv.exp,
  testsuite/modules.50-cmds/035-unsetenv-undo.exp,
  testsuite/modules.50-cmds/036-unsetenv-x.exp,
  .../modules.50-cmds/038-unsetenv-refcount.exp,
  testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.50-cmds/042-append-delim.exp,
  testsuite/modules.50-cmds/045-append-undo.exp,
  testsuite/modules.50-cmds/047-app-del-undo.exp,
  testsuite/modules.50-cmds/050-prepend.exp,
  testsuite/modules.50-cmds/052-prepend-delim.exp,
  testsuite/modules.50-cmds/055-prepend-undo.exp,
  testsuite/modules.50-cmds/057-pre-del-undo.exp,
  testsuite/modules.50-cmds/060-remove.exp,
  testsuite/modules.50-cmds/062-remove-delim.exp,
  testsuite/modules.50-cmds/065-remove-undo.exp,
  testsuite/modules.50-cmds/075-alias.exp,
  testsuite/modules.50-cmds/076-alias-sub.exp,
  testsuite/modules.50-cmds/077-alias-undo.exp,
  testsuite/modules.50-cmds/078-refresh.exp,
  testsuite/modules.50-cmds/080-info-name.exp,
  testsuite/modules.50-cmds/081-info-user.exp,
  testsuite/modules.50-cmds/082-info-user-exp.exp,
  testsuite/modules.50-cmds/083-info-mode.exp,
  testsuite/modules.50-cmds/084-info-mode-exp.exp,
  testsuite/modules.50-cmds/085-info-flags.exp,
  testsuite/modules.50-cmds/086-info-shells.exp,
  testsuite/modules.50-cmds/087-info-shells-exp.exp,
  testsuite/modules.50-cmds/088-info-isloaded.exp,
  testsuite/modules.50-cmds/089-info-type.exp,
  testsuite/modules.50-cmds/095-uname.exp,
  testsuite/modules.50-cmds/100-loglevel.exp,
  testsuite/modules.50-cmds/101-badfac.exp,
  testsuite/modules.50-cmds/105-trace.exp,
  testsuite/modules.50-cmds/110-verbose.exp,
  testsuite/modules.50-cmds/115-verbose-msg.exp,
  testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/121-prereq-module.exp,
  testsuite/modules.50-cmds/130-conflict-full.exp,
  testsuite/modules.50-cmds/131-conflict-module.exp,
  testsuite/modules.50-cmds/140-system.exp,
  testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/172-swap-app-delim.exp,
  testsuite/modules.50-cmds/173-swap-app-delim.exp,
  testsuite/modules.50-cmds/175-swap2.exp,
  testsuite/modules.50-cmds/177-swap-prep-delim.exp,
  testsuite/modules.50-cmds/178-swap-prep-delim.exp,
  testsuite/modules.50-cmds/190-load.exp,
  testsuite/modules.50-cmds/195-load-recurs.exp,
  testsuite/modules.50-cmds/197-load-lots.exp,
  testsuite/modules.50-cmds/200-break.exp,
  testsuite/modules.50-cmds/210-exit.exp,
  testsuite/modules.50-cmds/220-continue.exp,
  testsuite/modules.50-cmds/230-loop.exp,
  testsuite/modules.50-cmds/240-chdir.exp,
  testsuite/modules.50-cmds/250-x-resource.exp,
  testsuite/modules.50-cmds/260-getenv.exp,
  testsuite/modules.50-cmds/280-info-specified.exp,
  testsuite/modules.50-cmds/281-info-modulerc.exp,
  testsuite/modules.50-cmds/300-interp.exp,
  testsuite/modules.50-cmds/301-interp-command.exp,
  testsuite/modules.50-cmds/302-interp-cascaded.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/080-access.exp,
  testsuite/modules.70-maint/020-update.exp,
  testsuite/modules.70-maint/030-purge.exp,
  testsuite/modules.70-maint/050-whatis-load.exp,
  testsuite/modules.70-maint/090-source.exp,
  testsuite/modules.70-maint/100-path.exp,
  testsuite/modules.70-maint/110-paths.exp,
  testsuite/modules.80-deep/020-load.exp,
  testsuite/modules.80-deep/080-access.exp,
  testsuite/modules.91-sort/040-load.exp,
  testsuite/modules.95-version/020-load.exp,
  testsuite/modules.95-version/020-unload.exp,
  testsuite/modules.95-version/022-load2.exp,
  testsuite/modules.95-version/022-unload2.exp,
  testsuite/modules.95-version/040-xgetenv.exp: testsuite: refactor tests with
  code output  Adapt test*out* procedures to call for 'shell_out' procedure if
  passed code output is a code order list rather than an output string.
  'shell_out' procedure in turn calls for specific procedure to parse shell
  commands and transform them in the appropriate shell code. This way shell
  code is handled in a central location and tests do not need anymore to
  handle the particularity of each supported shells.

2017-07-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/030-shells.exp,
  testsuite/modules.20-locate/050-locrc.exp,
  testsuite/modules.20-locate/060-rc.exp,
  testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.50-cmds/045-append-undo.exp,
  testsuite/modules.50-cmds/050-prepend.exp,
  testsuite/modules.50-cmds/055-prepend-undo.exp,
  testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/121-prereq-module.exp,
  testsuite/modules.50-cmds/130-conflict-full.exp,
  testsuite/modules.50-cmds/131-conflict-module.exp,
  testsuite/modules.50-cmds/190-load.exp,
  testsuite/modules.50-cmds/210-exit.exp,
  testsuite/modules.50-cmds/281-info-modulerc.exp,
  testsuite/modules.50-cmds/282-info-command.exp,
  testsuite/modules.50-cmds/283-info-command-exp.exp,
  testsuite/modules.50-cmds/284-info-others.exp,
  testsuite/modules.50-cmds/300-interp.exp,
  testsuite/modules.50-cmds/301-interp-command.exp,
  testsuite/modules.61-coll/020-savelist.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/050-saverm.exp,
  testsuite/modules.61-coll/060-saveshow.exp,
  testsuite/modules.61-coll/080-access.exp,
  testsuite/modules.70-maint/045-listlong.exp,
  testsuite/modules.70-maint/055-whatis.exp,
  testsuite/modules.70-maint/060-apropos.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/080-help.exp,
  testsuite/modules.70-maint/085-test.exp,
  testsuite/modules.70-maint/130-aliases.exp,
  testsuite/modules.80-deep/050-whatis.exp,
  testsuite/modules.90-avail/020-single.exp,
  testsuite/modules.90-avail/030-multiple.exp,
  testsuite/modules.90-avail/040-wild.exp,
  testsuite/modules.90-avail/050-long.exp,
  testsuite/modules.90-avail/060-empty.exp,
  testsuite/modules.91-sort/020-avail.exp,
  testsuite/modules.91-sort/030-whatis.exp: testsuite: rely more on global
  definitions

  * testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.00-init/030-shells.exp,
  testsuite/modules.00-init/070-command.exp,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.00-init/090-switches.exp,
  testsuite/modules.10-use/030-use.exp,
  testsuite/modules.10-use/031-append.exp,
  testsuite/modules.10-use/032-prepend.exp,
  testsuite/modules.10-use/070-unuse.exp,
  testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.50-cmds/045-append-undo.exp,
  testsuite/modules.50-cmds/050-prepend.exp,
  testsuite/modules.50-cmds/055-prepend-undo.exp,
  testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/121-prereq-module.exp,
  testsuite/modules.50-cmds/190-load.exp,
  testsuite/modules.50-cmds/250-x-resource.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/050-saverm.exp,
  testsuite/modules.61-coll/060-saveshow.exp,
  testsuite/modules.70-maint/100-path.exp,
  testsuite/modules.70-maint/110-paths.exp: testsuite: refactor ALL shell
  tests  Adapt test* procedure to call test for each supported shell when
  test_shell argument is set to 'ALL'.  Transform all tests set for all shells
  with a common output to use this new 'ALL' test_shell argument.

2017-07-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Rework python and perl shell code for error or nop  No
  output of 'import os' for Python shell when there is only an error message
  to render.  No double output of '1;' for Perl shell for a no-operation
  situation.

  * testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.00-init/070-command.exp,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.00-init/090-switches.exp,
  testsuite/modules.10-use/030-use.exp,
  testsuite/modules.10-use/070-unuse.exp,
  testsuite/modules.10-use/080-access.exp,
  testsuite/modules.10-use/090-bad.exp,
  testsuite/modules.20-locate/060-rc.exp,
  testsuite/modules.20-locate/080-access.exp,
  testsuite/modules.20-locate/081-access-rc.exp,
  testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/121-prereq-module.exp,
  testsuite/modules.50-cmds/190-load.exp,
  testsuite/modules.50-cmds/250-x-resource.exp,
  testsuite/modules.50-cmds/284-info-others.exp,
  testsuite/modules.60-initx/005-init.exp,
  testsuite/modules.60-initx/020-add.exp,
  testsuite/modules.60-initx/030-switch.exp,
  testsuite/modules.60-initx/040-prepend.exp,
  testsuite/modules.60-initx/050-rm.exp,
  testsuite/modules.60-initx/060-2nd.exp,
  testsuite/modules.60-initx/080-access.exp,
  testsuite/modules.60-initx/095-cleanup.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/050-saverm.exp,
  testsuite/modules.61-coll/060-saveshow.exp,
  testsuite/modules.61-coll/080-access.exp,
  testsuite/modules.70-maint/055-whatis.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/080-help.exp,
  testsuite/modules.70-maint/085-test.exp,
  testsuite/modules.70-maint/090-source.exp,
  testsuite/modules.70-maint/100-path.exp,
  testsuite/modules.70-maint/110-paths.exp,
  testsuite/modules.80-deep/080-access.exp: testsuite: refactor shell OK and
  ERR code  Pass 'OK' or 'ERR' string to test procedure, then these procedures
  will use the new internal 'shell_ok' and 'shell_err' procedures to translate
  these bare OK/ERR strings in the appropriate code for the given shell.

2017-08-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * ...dules-tcl-1.923-fix-uname-release-with-lsb.patch,
  contrib/rpm/modules-tcl.spec, modulecmd.tcl,
  testsuite/modules.50-cmds/090-uname-proc.exp: Always use
  tcl_platform(osVersion) as 'uname release'  When querying 'uname release'
  always use value of the 'osVersion' field of 'tcl_platform' array to get the
  real 'uname --kernel-release' value.  Remove specific behavior when
  /etc/lsb-release file is found as it was too specific and led to different
  behavior depending of the Linux distribution.

2017-07-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .../modules-tcl-1.923-fix-uname-release-test.patch,
  .../modules-tcl-1.923-no-etc-rc-as-rc-file.patch,
  ...dules-tcl-1.923-skip-access-tests-if-root.patch,
  ...dules-tcl-1.923-unneeded-manpath-q-option.patch,
  contrib/rpm/modules-tcl.spec: rpm: fix spec and patches for 1.923-2 build

  * .travis.yml: travis: add test variants for CentOS

  * modulecmd.tcl: Never take /etc/rc as a module rc file

  * init/csh.in: init: remove unneeded manpath '-q' option for csh

  * testsuite/modules.10-use/080-access.exp,
  testsuite/modules.20-locate/080-access.exp,
  testsuite/modules.20-locate/081-access-rc.exp,
  testsuite/modules.60-initx/080-access.exp,
  testsuite/modules.61-coll/080-access.exp,
  testsuite/modules.80-deep/080-access.exp: testsuite: skip access tests if
  run by root

2017-07-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/diff_with_c-version.pod, doc/source/modulefile.pod,
  testsuite/modules.50-cmds/076-alias-sub.exp: doc: clarify 'set-alias'
  command

  * modulecmd.tcl, testsuite/modules.50-cmds/075-alias.exp,
  testsuite/modules.50-cmds/076-alias-sub.exp,
  testsuite/modules.50-cmds/077-alias-undo.exp: No alias handling for 'tcl'
  shell  Remove code that were handling aliases for the 'tcl' shell. Aliases
  are only effective for 'real' shells not script programming language shells.

2017-07-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/diff_with_c-version.pod, modulecmd.tcl,
  testsuite/modules.60-initx/050-rm.exp,
  testsuite/modules.60-initx/060-2nd.exp: Keep 'module load' lines after
  init{rm,clear}  Instead of removing the whole line when no more module
  specified on it during an 'initrm' command or during an 'initclear', keep
  the line with 'module load' to be able to reuse this line on next 'initadd'
  command.  Adapt non-regression tests in 050-rm and 060-2nd of 60-initx suite
  and diff doc.

  * doc/source/diff_with_c-version.pod, modulecmd.tcl,
  testsuite/modules.00-init/090-switches.exp,
  testsuite/modules.70-maint/060-apropos.exp: Warning rather error on
  C-version specific switches  Report an 'unsupported option' warning message
  when C-version specific command-line switches are passed rather than
  producing an 'invalid option' error.  Adapt non-regression tests of
  00-init/090-switches and 70-maint/060-apropos and diff doc.

2017-07-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/diff_with_c-version.pod, modulecmd.tcl,
  testsuite/modules.70-maint/040-list.exp,
  testsuite/modules.70-maint/043-listno.exp,
  testsuite/modules.70-maint/045-listlong.exp,
  testsuite/modules.70-maint/048-listlongno.exp,
  testsuite/modules.70-maint/050-whatis-load.exp,
  testsuite/modules.70-maint/055-whatis.exp,
  testsuite/modules.70-maint/080-help.exp: Relax constraint on cmd line args
  position  Look the full argument list to find options or command switches,
  so options may be passed after the command name and command switches may be
  found before the command name. With this behavior commad-line argument
  position constraint is aligned with C-version.  Adapt non-regression tests
  in 70-maint suite and diff doc.

2017-07-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/rpm/modules-tcl.spec, testsuite/modules.50-cmds/095-uname.exp:
  testsuite: fix uname release test in 50-cmds suite  Update RPM spec file by
  the way to fix Koji build under 'armhfp' architecture.

2017-07-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * www/Makefile: www: fix README.html build in Makefile

  * NEWS, contrib/rpm/modules-tcl.spec, doc/source/diff_with_c-version.pod,
  modulecmd.tcl, www/index.html: Release of version 1.923

  * testsuite/modules.61-coll/020-savelist.exp,
  testsuite/modules.90-avail/070-full.exp: testsuite: skip term width tests if
  cannot query term

  * testsuite/modules.50-cmds/300-interp.exp,
  testsuite/modules.50-cmds/301-interp-command.exp: testsuite: fix cmp string
  in 50-cmds suite  When converting an array to a string list, the order of
  its element cannot be determined.

2017-07-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modules.70-maint/130-aliases.exp: Call for
  getModules in any cases in cmdModuleAliases  Previously getModules was only
  called when g_moduleAlias and g_moduleVersion global arrays were both empty,
  but in case of a global or user RC file that set an alias or a symbolic
  version, no more alias and version are looked for in module paths. To fix
  that, getModules is called for all defined module paths in any cases as it
  is done for cmdModuleAvail.  Add relative non-regression test in 130-aliases
  of 70-maint suite.

  * testsuite/modules.00-init/010-environ.exp: testsuite: clean MODULESHOME
  env var before start

2017-07-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Rework error handling in cmdModuleSearch  Take benefit of
  changes made on getPathToModule to return error information through the
  result list to avoid extra call to getPathToModule in cmdModuleSearch if
  nothing was found.  Now through the parsing of getModules results and
  getPathToModule alias resolution results, all the error information are
  gathered and registered if element name matches search string. At the end of
  the cmdModuleSearch procedure, all the registered errors are printed.  Add a
  'reportIssue' procedure to help reporting error messages depending of their
  kind, useful for getPathToModule and cmdModuleSearch procedures.

2017-07-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Return error info as result from getPathToModule  Rework
  getPathToModule procedure to return error information through the result
  structure.

2017-07-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Rework registering of access/invalid file error  Integrate
  modulefile or directory access issue or invalidity directly in the result
  array produced by findModules/getModules procedures. By doing so access to
  the error information is straigthforward for getPathToModule procedure.  To
  achieve this integration, the checkValidModule procedure has been revised to
  return any error message in addition to the check status.

2017-07-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modules.20-locate/060-rc.exp: Same res for
  version than alias on getPath/search/paths  Take symbolic version into
  accounts like done for alias when attempting to find out the modulefile
  targeted by a given module name. Symbolic versions were until now left away
  from this resolution treatment as their modulefile target were automatically
  part of the mod_list result returned by getModules procedure. But in some
  cases, a symbolic version may be hold on an alias, so the target modulefile
  of this symbol does not hold the same module name than this symbolic module
  and thus is not part of the result list.  This change is useful for
  resolution procedures like getPathToModule, cmdModuleSearch and
  cmdModulePaths. It also helps to localize the element in error, if any, as
  the availability of the symbolic version information will help to determine
  if the error concerns the search made by the user or not.  Add relative
  non-regression tests in 060-rc of 20-locate suite.

  * modulecmd.tcl, testsuite/modules.20-locate/060-rc.exp: Include global/user
  rc defs in search/whatis/paths  Ask getModules procedure to include global
  or user RC definitions when called in cmdModuleSearch and cmdModulePaths. By
  doing so aliases or symbolic versions defined in these global or user RC
  will be found and solved if specified as module to search on these commands.
  To do so, make 'search' argument of getModules procedure a list rather a
  string to be able to precise multiple search keywords like done by
  cmdModuleSearch.  Add non-regression tests in 060-rc of 20-locate suite.

  * modulecmd.tcl, testsuite/modules.20-locate/050-locrc.exp: Look at loaded
  mods in getPathToModule if asked only  Add 'look_loaded' argument to
  getPathToModule procedure in order to look at the loaded modules to get path
  for specified 'mod' only if this new argument is enabled. 'look_loaded'
  argument is enabled by default.  Disable this behavior when getPathToModule
  recursively call itself to solve aliases or when cmdModuleSearch or
  cmdModulePaths also attempt to solve alias in the middle of their own
  search.  Add non-regression tests in 050-locrc of 20-locate suite.

  * modulecmd.tcl: Constraint module resolution to specific dir if set  If
  'indir' argument is set for getPathToModule procedure, look to find
  modulefile corresponding to 'mod' argument only in modulepath directory
  specified.  Rely on this feature in cmdModuleSearch and cmdModulePaths for
  alias resolution, where result has to belong to the current modulepath
  directory being searched.

2017-07-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Rework getPathToModule to fully rely on getModules

  * modulecmd.tcl: Rework handling of global/user rc defs in getModules
  Introduce a 'g_rcVersion' array to handle symbolic versions set from a
  global or a user RC the same way than aliases with the 'g_rcAlias' array.
  Then in getModules procedure treat these definitions from global or user RC
  with a 'add_rc_defs' flag. If set and if aliases or symbolic versions match
  passed mod, these aliases or versions from global or user RC are added to
  the result array.  If search in getModules is set to 'rc_defs_included', the
  aliases and symbolic versions set from global or user RC added to the result
  array in addition to the search result from the passed directory.

2017-07-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modules.91-sort/020-avail.exp: Register in
  getModules dir default even if broken  Register a default set for a given
  module in the corresponding 'directory' entry in the result consolidated by
  the getModules procedure, even if this default does not correspond to a
  valid entry. This way it is up to the procedure treating the result provided
  by getModules to handle the verification of the default correctness and
  display any error.  As a consequence, a bad default will lead to no result
  displayed for the corresponding module in case of 'onlydefault' avail
  display.  Add tests in 020-avail of 91-sort suite to check behavior.

  * modulecmd.tcl: Register sym versions in getModules result array  Add
  tracking of the source file that defined a given symbolic module version in
  order to add in getModules these symbloc versions to the 'mod_list' result
  array if they match searched modulepath directory and module.  Symbolic
  versions are added to 'mod_list' array as 'version' entries so they can be
  ignored by treatment not requiring them (like display procedures that get
  symbols not independently but through the relative modulefile).

2017-07-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Take benefit of new dir handling in getPathToModule  Rework
  code in getPathToModule procedure to use the information that is now stored
  in the mod_list structure (result of the getModules procedure call). With
  this information it is now easier to get directory default element. Also
  empty directories are not part of mod_list result, so less tests are
  required in getPathToModule.

2017-07-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, .../emptydeepdir/emptydir/.ignored,
  testsuite/modulefiles.deep/modalias/dir3/.ignored,
  testsuite/modulefiles/emptydir/.ignored,
  testsuite/modules.91-sort/020-avail.exp: Handle empty dir in getModules dir
  consolidation  When consolidating directory content information in
  getModules procedure, handle empty directories so they are removed from the
  result array. When an empty directory is removed and its parent directory
  becomes empty after child removal, remove also this directory and so on.
  Moreover when an empty directory is removed and if it was the default
  version of this parent directory, default is changed to last element in
  parent directory.  Add and adapt tests in 020-avail of 91-sort suite.

2017-07-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modulefiles/dirmodalias/.modulerc,
  testsuite/modulefiles/dirmodalias/1.0,
  testsuite/modules.70-maint/130-aliases.exp,
  testsuite/modules.90-avail/070-full.exp,
  testsuite/modules.91-sort/020-avail.exp: Fix default/latest avail when alias
  override dir  When an alias is set and overrides name of existing directory,
  take this alias in account for default and latest choice and ignore
  directory content.  Add and adapt tests in 020-avail of 91-sort suite.

2017-07-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modules.91-sort/020-avail.exp: Rework
  default/latest avail version search  Improve getModules procedure to
  register for each directory the default element in this dir (implicitly or
  explicitly set) and the list of all elements dictionarily sorted.  Then base
  the code in listModules procedure that look for default or latest versions
  only on the information stored in getModules array result rather than
  comparing every result names between each other.  As a side effect, default
  or latest available version printing does not confuse output anymore when at
  a given level a sub-directory element is last element in directory among
  modulefiles. Previously sub-directory was printed but last file among
  modulefiles was also printed (2 latests version at the same level).  Also to
  simplify behavior, and understand a directory tagged "default" does not
  appear anymore in default listing result as its content (the default version
  found in that dir) will be displayed.  Remove stringDictionaryCompare
  procedure that is not used anymore due to the code rework.  Add and adapt
  tests in 020-avail of 91-suite.

  * modulecmd.tcl, testsuite/modules.90-avail/030-multiple.exp: Correct
  inclusion of aliases in getModules res  Fix inclusion of aliases in
  getModules procedure results not to include these aliases if they are not
  part of the exact same path than path of the search. Previously if alias
  source path and search path were similar, aliases were wrongly included in
  results.  Add test in 030-multiple of 90-avail to check correct behavior.

2017-07-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Rework way getCollectionFilename proc pass descr  Return
  collection filename and description as a list result in
  getCollectionFilename procedure rather passing a variable name altered in
  procedure with 'upvar' call.

  * modulecmd.tcl, testsuite/modules.61-coll/080-access.exp: Distinguish
  collection found from read test  Previsously cmdModuleRestore and
  cmdModuleSaveshow procedures were directly calling for 'file readable' so
  existence and readability were tested in a single call. To be able to
  distinguish an exist issue from a read issue these two procedures now only
  test existence and readability is tested by the readCollectionContent
  procedure.  As a result, if a collection exists but is not readable a
  different message will now appear.

2017-07-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.60-initx/080-access.exp: testsuite: add 080-access tests
  in 60-initx suite  Test behaviors when shell init script cannot be accessed
  or written with 080-access tests added to 60-initx suite.

  * modulecmd.tcl: Change init* cmds write behavior  Previously initadd,
  initprepend, initswitch, initrm and initclear commands were altering shell
  initialization file by writing a new file then copying this new file to
  replace the existing init file.  This commit tries to simplify init file
  re-write by first consolidating new file content in a list variable, then
  when shell init file read is finished and new content is established, the
  shell init file is opened in write mode and its content is replaced with the
  new content.  In addition new behavior only re-writes shell init file if its
  content need to be altered.  Take this opportunity to also change name of
  some local variables to make them shorter.

  * modulecmd.tcl, testsuite/home/.modules.savenull,
  testsuite/modules.60-initx/005-init.exp,
  testsuite/modules.60-initx/010-list.exp,
  testsuite/modules.60-initx/020-add.exp,
  testsuite/modules.60-initx/030-switch.exp,
  testsuite/modules.60-initx/040-prepend.exp,
  testsuite/modules.60-initx/050-rm.exp,
  testsuite/modules.60-initx/060-2nd.exp,
  testsuite/modules.60-initx/095-cleanup.exp: Raise error on init* cmds when
  no 'module load' found  When no 'module load' line has been found in shell
  init file raise an error on initadd, initprepend, initswitch, initrm and
  initclear commands as action requested was not performed.

2017-06-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.20-locate/081-access-rc.exp: testsuite: add
  081-access-rc tests in 20-loc suite  Check behavior when global RC files
  cannot be read.

  * testsuite/etc/rc, testsuite/modules.20-locate/060-rc.exp,
  testsuite/modules.20-locate/065-rcerrs.exp: testsuite: more tests for global
  RC in 20-loc suite  Test behaviors when global RC is not set at all, or is
  set at $MODULESHOME/etc/rc or is both set at $MODULESHOME/etc/rc and
  $MODULERCFILE.

2017-06-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.61-coll/040-restore.exp: testsuite: add tests restoring
  bad coll in 61-coll

  * modulecmd.tcl, testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/050-saverm.exp,
  testsuite/modules.61-coll/060-saveshow.exp,
  testsuite/modules.61-coll/080-access.exp: Normalize collection access issue
  error message  Test behaviors when collection cannot be accessed with
  080-access tests added to 61-coll suite.  Normalize error messages for the
  various collection-related commands when collection cannot be accessed.
  Catch also error when trying to access the collection directory but access
  rights on this directory does not allow for listing its content.

2017-06-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modulefiles/setenv/0.8,
  testsuite/modulefiles/unsetenv/0.8,
  testsuite/modules.50-cmds/028-setenv-refcount.exp,
  .../modules.50-cmds/038-unsetenv-refcount.exp,
  testsuite/modules.90-avail/020-single.exp,
  testsuite/modules.90-avail/040-wild.exp,
  testsuite/modules.90-avail/050-long.exp,
  testsuite/modules.90-avail/070-full.exp: Clean any previous ref count array
  on setenv/unsetenv  When manpulating path list with
  append-path/prepend-path/etc commands a _modshare variable is set to keep
  track of how many times each reference has been loaded. But if after these
  commands a setenv/unsetenv command is used, the _modshare variable is left
  alone whereas the path list variable is entirely replaced by a new value or
  destroyed.  To sanitize this kind of situation, any existing _modshare
  variable is cleaned-up when the associated variable is targeted by a setenv
  or an unsetenv command.  Non-regression tests 028-setenv-refcount and
  038-unsetenv-refcount in 50-cmds suite have been added to check new
  behavior.

2017-03-24  Bert Wesarg <bert.wesarg@googlemail.com>

  * init/bash.in, init/fish.in, init/ksh.in, init/sh.in, init/zsh.in,
  testsuite/install.00-init/010-environ.exp: init: Do not pollute
  tab-completion with `moduleraw` command.

2017-06-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modulefiles/spread/5.0,
  testsuite/modulefiles/spread/6.0, testsuite/modulefiles/spread/7.0,
  testsuite/modulefiles/spread/8.0,
  testsuite/modulefiles/spreadrc/dir5/.modulerc,
  testsuite/modulefiles/spreadrc/dir5/1.0,
  testsuite/modulefiles/spreadrc/dir6/.modulerc,
  testsuite/modulefiles/spreadrc/dir6/1.0,
  testsuite/modulefiles/spreadrc/dir7/.modulerc,
  testsuite/modulefiles/spreadrc/dir7/1.0,
  testsuite/modulefiles/spreadrc/dir8/.modulerc,
  testsuite/modulefiles/spreadrc/dir8/1.0,
  testsuite/modules.50-cmds/300-interp.exp,
  testsuite/modules.50-cmds/302-interp-cascaded.exp,
  testsuite/modules.90-avail/070-full.exp: Dedicate an interp per
  interpretation level  Have a separate interpreter per level of
  interpretation in case of nested interpretations. By doing so a module
  loaded by another does not influence the interpretation of the module
  loading it.  Non-regression tests 302-interp-cascaded have been added to
  50-cmds suite.

2017-06-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modulefiles/spread/3.0,
  testsuite/modulefiles/spread/4.0,
  testsuite/modulefiles/spreadrc/dir3/.modulerc,
  testsuite/modulefiles/spreadrc/dir3/1.0,
  testsuite/modulefiles/spreadrc/dir4/.modulerc,
  testsuite/modulefiles/spreadrc/dir4/1.0,
  testsuite/modules.50-cmds/300-interp.exp,
  testsuite/modules.50-cmds/301-interp-command.exp,
  testsuite/modules.90-avail/070-full.exp: Renew interp when command list is
  altered  Delete/recreate the interpreter when a native Tcl command is
  altered by a previous modulerc or modulefile interpretation. When a Tcl
  native command is overriden it appears in the defined procedure list. This
  procedure not part of the initial list is unset at the reset time which
  makes also disappear the Tcl command.  List of Tcl commands is dumped at
  initial interpreter creation time and compared after each procedure reset.
  If command lists differ, interpreter is deleted then recreated to ensure
  proper functioning.  Non-regression tests 301-interp-command have been added
  to 50-cmds suite.

2017-06-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modulefiles/spread/1.0,
  testsuite/modulefiles/spread/2.0, testsuite/modulefiles/spreadrc/.modulerc,
  testsuite/modulefiles/spreadrc/dir1/.modulerc,
  testsuite/modulefiles/spreadrc/dir1/1.0,
  testsuite/modulefiles/spreadrc/dir2/.modulerc,
  testsuite/modulefiles/spreadrc/dir2/1.0,
  testsuite/modules.50-cmds/300-interp.exp,
  testsuite/modules.90-avail/070-full.exp: Reset interp state from one interp
  to another  When creating interpreter, dump its variable and procedure
  content so before each usage of this interpreter for another modulerc or
  modulefile the initial variable and procedure state is restored to avoid
  spread of definitions from one interpretation to another.  Variables are
  removed if they are not part of the initial state or restored if their value
  has changed. Procedures are removed if they are not part of the initial
  state. Nothing is done if procedures part of the initial state have been
  changed during an interpretation as there is no vital procedure in this
  list. Interpreter aliases are redefined before each interpretation to clear
  any potential override of these aliased procedures.  dumpInterpState and
  resetInterpState procedures are introduced to handle the dump/reset
  mechanism of the interpreter.  Non regression tests 300-interp in 50-cmds
  suite have been added to test the correct behavior of interpreters when
  running a list of modulerc and modulefiles.

2017-06-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Reuse interp rather creating new one each time  Make use of
  the same Tcl interp for each modulefile interpreation and use another one
  for each modulerc (but the same for each modulerc). By doing so we proceed
  like on C-version where same interpreter is used across modulefile or
  modulerc interpretation. Huge performance improvement is achievied with this
  change on commands making intensive use of interp like 'avail'.  Change code
  to use a static name for those interpreter: '__modulefile' for the interp
  dedicated to modulefile interpretation and '__modulerc' for the interp
  dedicated to the RC interpretation.

2017-06-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Workaround 'glob -nocomplain' for perms issue on Tcl8.4  On
  Tcl 8.4, 'glob -nocomplain' also silent permission errors. So to handle
  access issue to directory in findModules we workaround that by not using the
  '-nocomplain' option of glob but handling case where glob raise an error
  when directory is empty.

2017-06-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/diff_with_c-version.pod, modulecmd.tcl,
  testsuite/modules.20-locate/047-symerrs.exp: Revise alias and symbolic
  version internal registering  Register alias and symbolic version deep
  resolution at definition time through a new 'setModuleResolution' procedure
  called by 'module-version' and 'module-alias' procedures. Make use of new
  global array 'g_moduleResolved' and its reverse structure 'g_resolvedHash'
  to keep registered resolution at hand. Also introduce 'g_symbolHash' global
  array to register and easily get the list of all symbols for a given module.
  As resolution is now computed at definition time, the 'getVersAliasList' and
  'resolveModuleVersionOrAlias' procedures can be greatly simplified and just
  need to return the value of the 'g_symbolHash' or 'g_moduleResolved' arrays
  for the module name passed as argument. This change saves lot of time
  especially on commands heavily relying on these procedures like 'avail'.
  The global arrays 'g_versionHash', 'g_moduleDefault' and 'g_aliasHash'
  become useless with this change so they have been removed.  As a side effect
  of resolving alias and symbolic version at definition time, resolution loop
  are not registered anymore and produce an error message when spotted.

2017-05-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Try/catch rather test/try in findModules  When reading the
  content of a modulefile directory, try access then catch any issue rather
  testing access before trying. By doing so we reduce the number of 'access'
  system call. Getting an access error at the 'open' time is a bit more costly
  than at 'stat' time but most modulefile directories should not raise access
  issue, only some.  If any issue occur, register it in the g_access_mod_info
  global array as done in checkValidModule procedure. A unified procedure
  called registerAccessIssue has been setup for both checkValidModule and
  findModules procedures to share same code.

2017-06-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modules.00-init/071-args.exp: No error raise on
  empty arg list for load  To cope with initadd behavior that require at least
  an empty 'module load' line in startup files. (fix SF bug#88)

  * modulecmd.tcl, testsuite/home/.modules.saveempty,
  testsuite/modules.60-initx/020-add.exp: Fix initadd to handle load line w/o
  trailing space  Was previously expecting load directive to be written
  'module load ' to get a match. With fix, 'module load' line will also be
  matched.  Add test in 020-add of 60-initx suite to check that.

2017-06-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modulefiles/break/5.0,
  testsuite/modulefiles/break/6.0, testsuite/modulefiles/continue/5.0,
  testsuite/modulefiles/continue/6.0, testsuite/modulefiles/exit/4.0,
  testsuite/modules.50-cmds/200-break.exp,
  testsuite/modules.50-cmds/210-exit.exp,
  testsuite/modules.50-cmds/220-continue.exp,
  testsuite/modules.50-cmds/230-loop.exp,
  testsuite/modules.90-avail/070-full.exp: Fix use of break/exit/continue
  outside of a loop  Like C-version catch raised error when break or continue
  are called from outside of a loop to handle them as when they are called
  from modulefile main body.  Add non-regression tests in 200-break, 210-exit,
  220-continue and 230-loop of 50-cmds to check behavior when break, exit and
  continue are called from within a procedure.

2017-05-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.10-use/090-bad.exp: testsuite: add 090-bad tests in
  10-use suite

  * modulecmd.tcl, testsuite/modulefiles/use/4.0,
  testsuite/modules.10-use/030-use.exp,
  testsuite/modules.10-use/031-append.exp,
  testsuite/modules.10-use/032-prepend.exp,
  testsuite/modules.10-use/070-unuse.exp,
  testsuite/modules.50-cmds/015-use.exp,
  testsuite/modules.50-cmds/017-use-undo.exp,
  testsuite/modules.90-avail/070-full.exp: Add tests for use/unuse of empty
  path name  Adapt cmdModuleUse to handle empty path name "" as any other path
  string, so an error is returned when file type is cheked.  Add tests in
  10-use and 50-cmds suites to check behavior of use and unuse commands with
  an empty path passed as argument.  Add by the way tests that were missing
  for bash shell in 10-use suite.

  * testsuite/modulefiles/use/3.0, testsuite/modulefiles/use/3.1,
  testsuite/modulefiles/use/3.2, testsuite/modules.10-use/032-prepend.exp,
  testsuite/modules.50-cmds/015-use.exp,
  testsuite/modules.50-cmds/017-use-undo.exp,
  testsuite/modules.90-avail/070-full.exp: testsuite: add test for use
  --prepend  Introduce new tests for 'use --prepend' command in 10-use and
  50-cmds suites.

  * testsuite/modulefiles/RCS/1.0: testsuite: add modulefile part of ignored
  list

  * modulecmd.tcl: No modpath dir checks in cmdModule{Avail,Aliases}  Rely on
  checks already made in findModules procedures which trap bad directories
  (type, access rights, etc) by calling glob under the catch umbrella.  Make
  cmdModuleAliases use getModules procedure by the way rather listModules to
  trigger aliases and versions search.

  * testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.10-use/080-access.exp,
  testsuite/modules.20-locate/080-access.exp,
  testsuite/modules.80-deep/080-access.exp: testsuite: add 080-access tests in
  10-use suite  Test behaviors when modulepath cannot be accessed. Centralize
  by the way the change_file_perms and restore_file_perms procedures that are
  now used in different parts of the testsuite.

2017-05-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles/loc_dv9/.version, testsuite/modulefiles/loc_dv9/1.0,
  testsuite/modulefiles/loc_dv9/2.0,
  testsuite/modules.20-locate/030-defvers.exp,
  testsuite/modules.90-avail/070-full.exp: testsuite: test module-version use
  in .version file  Add test to 030-defvers in 20-locate suite to check that
  default version is correctly resolved when it is declared with
  module-version command in a .version rc file.

2017-05-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles/remove/1.0,
  testsuite/modules.50-cmds/062-remove-delim.exp,
  testsuite/modules.90-avail/070-full.exp: testsuite: add 062-remove-delim
  tests in 50-cmds suite

  * testsuite/modules.70-maint/130-aliases.exp: testsuite: add 130-aliases
  tests in 70-maint suite

2017-05-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles/module/.ignored,
  testsuite/modulefiles/module/ignored~: testsuite: add test modfiles that
  should be hidden  Ensure modulefiles starting with a dot or finishing with a
  tilde are not reported in global 'module avail' results.

  * testsuite/modules.61-coll/020-savelist.exp: testsuite: test all 'savelist'
  display options

2017-05-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Fix loop in lreverse proc provided for Tcl<8.5

  * modulecmd.tcl: Workaround min and max funcs not avail in Tcl<8.5

  * .travis.yml: travis: use version specific-tclsh on the diff. builds

  * INSTALL.txt, Makefile.in, configure, testsuite/config/unix.exp,
  testsuite/modules.70-maint/120-autoinit.exp: install: add --with-tclsh
  config opt package  Add the ability to choose the Tcl interpreter shell to
  setup in initialization scripts and to use when running the testsuite.

2017-05-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles/help/2.0, testsuite/modulefiles/trace/all_on,
  testsuite/modules.50-cmds/105-trace.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/080-help.exp: Add tests for deprecated
  'module-trace' cmd

  * testsuite/modulefiles/info/others,
  testsuite/modules.50-cmds/284-info-others.exp,
  testsuite/modules.90-avail/070-full.exp: Add tests for bad or deprecated
  'module-info' cmds

  * modulecmd.tcl, testsuite/modulefiles/bad2/proc,
  testsuite/modules.50-cmds/210-exit.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/080-help.exp,
  testsuite/modules.70-maint/085-test.exp,
  testsuite/modules.90-avail/030-multiple.exp,
  testsuite/modules.90-avail/070-full.exp: Put call to
  Modules{Display,Help,Test} procs under catch  Put the ModulesDisplay,
  ModulesHelp and ModulesTest procedures call under the same catch than used
  for the evaludation of the modulefile content. Doing so an error found
  within these procedures will be handled the same way than if the error is
  triggered from the main body of the modulefile.  As a consequence, the
  ModulesDisplay, ModulesHelp and ModulesTest procedures are not anymore
  called when an error has been raised during the modulefile main evaluation,
  since the same catch is shared.  Some existing test results have been
  adapted for this change and new tests have been added to check this specific
  behavior in 070-display, 080-help and 085-test in 70-maint suite.

2017-05-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modules.70-maint/060-apropos.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/080-help.exp: Harmonize and test '--debug' option

2017-05-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modules.00-init/071-args.exp: Remove 'debug'
  module command  This hidden command produces output that is hard to process.
  So as it does not seem to be useful and as it is not tested, I prefer to
  remove it. If a need raise again on this 'debug' topic, a new command will
  be introduced.

2017-05-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/diff_with_c-version.pod, doc/source/module.pod.in, site.exp.in,
  testsuite/bin/install_test_csh, testsuite/bin/install_test_fish,
  testsuite/bin/install_test_sh, testsuite/config/unix.exp,
  testsuite/install.00-init/005-init_ts.exp,
  testsuite/install.00-init/006-procs.exp,
  testsuite/install.00-init/025-autoinit.exp,
  testsuite/modules.70-maint/120-autoinit.exp: Test and document 'autoinit'
  module command

2017-05-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/diff_with_c-version.pod, doc/source/module.pod.in,
  modulecmd.tcl, testsuite/modules.70-maint/110-paths.exp: Fix, test and
  document 'paths' module command

  * doc/source/diff_with_c-version.pod, doc/source/module.pod.in,
  modulecmd.tcl, testsuite/modules.70-maint/100-path.exp, .../{095-cleanup.exp
  => 999-cleanup.exp}: Test and document 'path' module command

2017-05-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.10-use/030-use.exp,
  testsuite/modules.10-use/070-unuse.exp: testsuite: cover use/unuse with no
  args  Add non-regression tests in 10-use suite for the 'use' and 'unuse'
  commands when no arg are passed to them (print list of enabled module
  paths).

  * testsuite/modules.90-avail/070-full.exp: testsuite: add 070-full test to
  90-avail suite  Validate output of all modules from a test modulepath with a
  specific terminal width setup.

  * .travis.yml: travis: coverage on each Tcl rel + x-server init  For a more
  complete coverage, run it on each Tcl releases, also enable a x-server on a
  test case to validate x-resource modulefile command.  To optimize builds,
  when MAKE_TESTCOVERAGE is enabled run 'testcoverage' instead of 'test'.

  * modulecmd.tcl, testsuite/modules.50-cmds/250-x-resource.exp: Correct use
  of xrdb tool when not in default path

2017-05-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/diff_with_c-version.pod, modulecmd.tcl,
  testsuite/modules.00-init/071-args.exp,
  testsuite/modules.60-initx/005-init.exp,
  testsuite/modules.60-initx/010-list.exp,
  testsuite/modules.60-initx/020-add.exp,
  testsuite/modules.60-initx/030-switch.exp,
  testsuite/modules.60-initx/040-prepend.exp,
  testsuite/modules.60-initx/050-rm.exp,
  testsuite/modules.60-initx/060-2nd.exp,
  testsuite/modules.60-initx/095-cleanup.exp: Fix 'init*' commands to behave
  more like C-version  Adapt tests from 60-initx to match results produced by
  this module flavor. Clarify differences with C-version on these module
  commands in diff_with_c-version documentation.

2006-01-12  R.K. Owen <rk@owen.sj.ca.us>

  * testsuite/home/.modules, testsuite/modules.60-initx/005-init.exp,
  testsuite/modules.60-initx/010-list.exp,
  testsuite/modules.60-initx/020-add.exp,
  testsuite/modules.60-initx/030-switch.exp,
  testsuite/modules.60-initx/040-prepend.exp,
  testsuite/modules.60-initx/050-rm.exp,
  testsuite/modules.60-initx/060-2nd.exp,
  testsuite/modules.60-initx/095-cleanup.exp: testsuite: added suite for the
  "module init*" cmds

2017-05-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .travis.yml: travis: test 'make uninstall'

  * .gitattributes, .gitignore, Makefile.in, README.txt => README.md: Move to
  README.md to embed build and coverage status

  * .gitignore, .travis.yml, Makefile.in, contrib/nglfar2ccov: Integrate to
  codecov.io code coverage service  Add nglfar2ccov contrib script to
  translate Nagelfar coverage result for Codecov report. Append publication of
  coverage report to codecov.io service.

2017-05-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .gitignore, Makefile.in, testsuite/config/unix.exp: Add makefile rules to
  produce code coverage  Instrument modulecmd.tcl, then run testsuite and
  produce a coverage report based on code coverage analysis of Nagelfar
  toolkit [1].  Include retrieval and installation of Nagelfar within
  Makefile.  [1] http://nagelfar.sourceforge.net/codecoverage.html

2017-05-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.txt, configure: install: clarify that 'configure' is a bash script

  * init/sh.in: init: make sh init script closer to POSIX spec  Provide
  support for /bin/sh flavors different than bash or zsh (dash for instance).

2017-05-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/bin/install_test_sh, testsuite/install.00-init/005-init_ts.exp,
  testsuite/install.00-init/030-options.exp,
  testsuite/install.00-init/040-subshell.exp,
  testsuite/install.00-init/050-crossshell.exp: testsuite: adapt 'install'
  suite for dash sh-shell

2017-05-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .travis.yml: Introduce travis-ci configuration file

2017-05-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.50-cmds/090-uname-proc.exp: testsuite: adapt 'uname
  release' test for Ubuntu

  * modulecmd.tcl: Adapt sep and col display for very short width term  When
  terminal width is found too short to handle one a single line separator
  title or one column of content, set a minimal number of '-' for separator
  line and set column number to 1.

2017-05-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .gitignore, INSTALL.txt, Makefile.in, README.txt, configure, site.exp.in,
  testsuite/bin/install_test_csh, testsuite/bin/install_test_fish,
  testsuite/bin/install_test_sh, testsuite/config/unix.exp,
  testsuite/install.00-init/005-init_ts.exp,
  testsuite/install.00-init/006-procs.exp,
  testsuite/install.00-init/010-environ.exp,
  testsuite/install.00-init/020-module.exp,
  testsuite/install.00-init/030-options.exp,
  testsuite/install.00-init/040-subshell.exp,
  testsuite/install.00-init/050-crossshell.exp: Introduce 'install'
  non-regression testsuite  This new non-regression testsuite is triggered by
  the 'make testinstall' command and checks modules-tcl installation is
  operational.

2017-05-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.txt: doc: fix reference to 'make test' in INSTALL

2017-05-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/fish.in: init: fix modulerc load test on 'fish' init script

2017-05-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/sh.in: init: fix interactive shell test on 'sh' init script

2017-05-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile.in: install: add notice at end of install for next steps

  * INSTALL.txt, Makefile.in, configure, contrib/rpm/modules-tcl.spec,
  init/Makefile.in: install: add --enable-example-modulefiles config opt
  Install by default some modulefiles provided as example in the system
  modulefiles directory.

  * Makefile.in, init/Makefile.in: install: skip modulefilesdir removal if not
  empty

  * contrib/modulefiles/dot, contrib/modulefiles/module-git,
  contrib/modulefiles/module-info, contrib/modulefiles/null,
  contrib/modulefiles/use.own: contrib: import and adapt example modulefiles
  Get and adapt regular set of example modulefiles provided with
  environment-modules.

2017-05-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/Makefile.in, init/zsh-functions/_module, init/zsh.in: Add completion
  script for Zsh

2017-04-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/diff_with_c-version.pod, doc/source/module.pod.in,
  doc/source/modulefile.pod, init/bash_completion, init/tcsh_completion.in,
  modulecmd.tcl, testsuite/modulefiles/info/command,
  testsuite/modulefiles/info/commandexp, testsuite/modulefiles/info/mode1,
  testsuite/modulefiles/info/mode2, testsuite/modulefiles/info/mode3,
  testsuite/modulefiles/info/mode4, testsuite/modulefiles/info/mode5,
  testsuite/modulefiles/info/mode6, testsuite/modulefiles/info/specified,
  testsuite/modulefiles/inforc/1.0, testsuite/modulefiles/inforc/2.0,
  testsuite/modulefiles/test/1.0, testsuite/modulefiles/test/1.2,
  testsuite/modulefiles/test/2.0, testsuite/modules.00-init/071-args.exp,
  testsuite/modules.50-cmds/083-info-mode.exp,
  testsuite/modules.50-cmds/084-info-mode-exp.exp,
  testsuite/modules.50-cmds/085-info-flags.exp,
  testsuite/modules.50-cmds/210-exit.exp,
  testsuite/modules.50-cmds/280-info-specified.exp,
  testsuite/modules.50-cmds/281-info-modulerc.exp,
  testsuite/modules.50-cmds/282-info-command.exp,
  testsuite/modules.50-cmds/283-info-command-exp.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/085-test.exp: Introduce 'test' command and mode
  Add 'module test' command to trigger when called execution of a ModulesTest
  procedure in target modulefile following same kind of mechanism than 'module
  help'.  If ModulesTest procedure is missing from modulefile, a 'Unable to
  find ModulesTest proc' message is displayed but no error code is set. If
  ModulesTest procedure returns 1 (true), test is considered successful and
  message 'Test result: PASS' is displayed. If ModulesTest returns no or any
  other value, test is considered failed and message 'Test result: FAIL' is
  displayed. In this case, module command exit in error.  Adapt bash and tcsh
  completion scripts for the new command. Describe new command and new mode in
  docs.  Adapt existing non-regression tests and relative test modulefiles for
  new command and new mode in 00-init, 50-cmds and 70-maint suites. Add
  085-test tests in 70-maint to check coherent behavior of new command.

2017-04-29  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS, contrib/rpm/modules-tcl.spec, doc/source/diff_with_c-version.pod,
  modulecmd.tcl, www/index.html: Release of version 1.832

2017-04-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modulefiles/getenv/1.0,
  testsuite/modules.50-cmds/260-getenv.exp: Fix getenv proc to correctly
  return env variable  Add 260-getenv non-regression test in 50-cmds suite.
  Thanks to Roberto Beccherle for reporting this issue.

  * contrib/rpm/modules-tcl.spec: rpm: make use of alternatives for man pages
  on Fedora

  * contrib/rpm/modules-tcl.spec: rpm: use rpm macro file provided in source
  tarball

2017-04-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * INSTALL.txt, Makefile.in, configure, contrib/rpm/modules-tcl.spec,
  doc/Makefile.in: install: add --enable-doc-install config opt feature  With
  this doc install can be disabled for package manager like rpm that handles
  by itself this kind of doc.

  * Makefile.in: install: add a 'srpm' make target

  * doc/source/diff_with_c-version.pod, doc/source/modulefile.pod: doc:
  clarify mgmt of file access issue

  * doc/source/diff_with_c-version.pod: doc: load in modfile unload in reserve
  order

2017-04-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/diff_with_c-version.pod, doc/source/module.pod.in,
  doc/source/modulefile.pod: doc: clarify version/alias handling in avail and
  loc

2017-04-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Reset got mod list between each dir in getPathToModule

  * testsuite/modulefiles.deep/moddef/dir2/.modulerc,
  testsuite/modulefiles.deep/moddef/dir2/1.0,
  testsuite/modulefiles.deep/moddef/dir2/2.0,
  testsuite/modules.80-deep/080-access.exp: Add access issue non-reg tests in
  80-deep suite  Add non-regression tests in 080-access of 80-deep suite to
  guaranty correct behavior when some access issues happen on modulefile or
  modulerc or directory in case of deep modulefiles.

  * modulecmd.tcl: Mention not found alias target in cmdModuleSearch  For a
  given mod search, if an alias corresponds to this search but the associated
  modulefile cannot be located, report locate error on this not found target.

  * modulecmd.tcl: Stop mod dir resolution as soon as we get an issue  When
  looking to a directory content in order to resolve a modulefile in the
  getPathToModule procedure, stop this resolution as soon as we get an issue
  on a mod to return (invalid or access issue).

2017-04-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Adapt cmdModuleSearch to raise access error message  If
  searching for a given mod and no modulefile to interpret found, call for a
  resolution of this mod after re-enabling error report. If there are some
  access issues, they will be echoed via this call to getPathToModule.

  * modulecmd.tcl: Add indir arg to getPathToModule proc  Be able to
  optionally precise in what module directory to search for mod instead of
  looking for mod in every directory set in MODULEPATH. If 'indir' arg is set,
  do not raise the 'cannot locate mod' error.  Also build return list with
  module found status when a modulefile cannot be returned. Modulefile is then
  empty string and instead of module name boolean is set depending if a module
  has been found for search or not.

  * modulecmd.tcl, testsuite/modules.70-maint/060-apropos.exp: Display all
  whatis line when search matches one  Instead of displaying only the whatis
  line matching the apropos search, all whatis line are now displayed to get
  the full description of the module.  Add non-regression test in 060-apropos
  of 70-maint suite to check this specific behavior.

2017-04-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modules.20-locate/050-locrc.exp,
  testsuite/modules.20-locate/080-access.exp,
  testsuite/modules.80-deep/050-whatis.exp,
  testsuite/modules.91-sort/030-whatis.exp: Match alias but report modulefile
  on whatis/apropos cmds  As whatis/apropos commands make interpretation of
  modulefiles like load/unload, always report the module under their
  modulefile name not their alias name. Of course, alias and symbolic version
  may still be used to query whatis content, but displayed result will mention
  the relative modulefile targetted by this alias or symbol.  Adapt existing
  non-regression tests in 20-locate, 80-deep and 91-sort suites.

2017-04-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Plug cmdModuleSearch on getModules rather listModules
  Change cmdModuleSearch procedure to make use of getModules rather calling
  for listModules then running getPathToModule on each result return.  With
  getModules, getPathToModule only need to be called on alias result, not on
  modulefile, which saves a lot of time.

  * modulecmd.tcl, testsuite/modules.50-cmds/190-load.exp: Rely more on
  checkValidModule for full pathname module  Rather checking existence and
  readability within getPathToModule procedure, better rely on the
  checkValidModule procedure then analyse global arrays for error information.

2017-04-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Register then display modulefile access issue  When
  checking validity of a modulefile in checkValidModule procedure, register
  any access issue within a new global array g_access_mod_info.  Then when
  looking for a specific module, if an access issue occured during its check,
  display returned error code message.

  * modulecmd.tcl: Check found vers valid before using in getPathToModule
  Last element in a directory may be an alias whose target modulefile may be
  not be readable, so we need to check this target is available on our list of
  valid modulefiles before using it.

  * modulecmd.tcl: Check last elt in dir before use in getPathToModule  Handle
  cases where directory is empty or none of its elements can be accessed.

  * testsuite/modulefiles/loc_rc6/0.9,
  testsuite/modules.20-locate/080-access.exp,
  testsuite/modules.90-avail/030-multiple.exp,
  testsuite/modules.90-avail/050-long.exp: Add access issue non-reg tests in
  20-locate suite  Add non-regression tests in 080-access of 20-locate suite
  to guaranty correct behavior when some access issues happen on modulefile or
  modulerc or directory.  As a loc_rc6/0.9 module is added for the purpose of
  the new tests, adapt non-regression tests working with loc_rc6 in 90-avail
  suite.

2017-04-15  Jason Travis <jtravis@tgen.org>

  * doc/example.txt: doc: fix typo

2017-04-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modulefiles/module/meta,
  testsuite/modules.50-cmds/150-module.exp: Reverse load command mod list on
  unload mode  When mode is set to unload, 'module load' commands in
  modulefile are interpreted as 'module unload' commands. To guaranty correct
  behavior regarding requirements, the module list passed to the load command
  is reversed to get and unload of the modulefiles in the reverse order than
  load.  This is the same behavior than applied on purge or restore commands,
  where loaded module list is reversed to be unloaded.  Add non-regression
  tests in 150-module of 50-cmds suite to check load and unload of meta-module
  works correctly over time.

  * init/modulerc.in, modulecmd.tcl, testsuite/home/rcnomagic,
  testsuite/home/rctosource, testsuite/modules.70-maint/090-source.exp: Relax
  magic cookie constraint on source command  As files sourced by a 'module
  source' command may be managed outside of the modulefile environment, relax
  the constraint of having a specific magic cookie at the start of the file to
  get required clearance before evaluation. This is typicaly helpful for the
  initialization modulerc file that may loose its magic cookie after some
  manual edits.  Add non-regression tests in 090-source of 70-maint suite.

  * INSTALL-win.txt, doc/howto/using_on_windows.pdf, doc/readme.txt,
  windows/module-tcl-win.chm: doc: Transform windows how-to from CHM to PDF
  Change "Using modules-tcl on Windows" how-to document from a CHM format to a
  PDF format, as CHM is a proprietary format that does not cope well with
  open-source project.  Document has been moved to 'doc' directory, a new
  'howto' sub-directory has been created to host this file.

  * .gitattributes, contrib/template/.gconf/apps/%gconf.xml,
  contrib/template/.gconf/apps/evolution/%gconf.xml,
  .../.gconf/apps/evolution/calendar/%gconf.xml,
  .../apps/evolution/calendar/notify/%gconf.xml,
  .../template/.gconf/apps/gconf-editor/%gconf.xml,
  contrib/template/.gconf/apps/gedit-2/%gconf.xml,
  .../.gconf/apps/gedit-2/plugins/%gconf.xml,
  .../apps/gedit-2/plugins/filebrowser/%gconf.xml,
  .../gedit-2/plugins/filebrowser/on_load/%gconf.xml,
  .../.gconf/apps/gedit-2/preferences/%gconf.xml,
  .../.gconf/apps/gedit-2/preferences/ui/%gconf.xml,
  .../gedit-2/preferences/ui/statusbar/%gconf.xml,
  .../.gconf/apps/gnome-power-manager/%gconf.xml,
  .../apps/gnome-power-manager/buttons/%gconf.xml,
  .../.gconf/apps/gnome-screensaver/%gconf.xml,
  .../template/.gconf/apps/gnome-settings/%gconf.xml,
  .../apps/gnome-settings/gnome-panel/%gconf.xml,
  .../template/.gconf/apps/gnome-terminal/%gconf.xml,
  .../.gconf/apps/gnome-terminal/profiles/%gconf.xml,
  .../gnome-terminal/profiles/Default/%gconf.xml,
  .../.gconf/apps/nautilus-open-terminal/%gconf.xml,
  contrib/template/.gconf/apps/panel/%gconf.xml,
  .../template/.gconf/apps/panel/applets/%gconf.xml,
  .../apps/panel/applets/clock_screen0/%gconf.xml,
  .../panel/applets/clock_screen0/prefs/%gconf.xml,
  .../applets/indicator_applet_screen0/%gconf.xml,
  .../apps/panel/applets/mixer_screen0/%gconf.xml,
  .../applets/notification_area_screen0/%gconf.xml,
  .../applets/show_desktop_button_screen0/%gconf.xml,
  .../panel/applets/trashapplet_screen0/%gconf.xml,
  .../panel/applets/window_list_screen0/%gconf.xml,
  .../applets/window_list_screen0/prefs/%gconf.xml,
  .../applets/workspace_switcher_screen0/%gconf.xml,
  .../workspace_switcher_screen0/prefs/%gconf.xml,
  .../template/.gconf/apps/panel/general/%gconf.xml,
  .../template/.gconf/apps/panel/objects/%gconf.xml,
  .../objects/browser_launcher_screen0/%gconf.xml,
  .../objects/clock_separator_screen0/%gconf.xml,
  .../apps/panel/objects/menu_bar_screen0/%gconf.xml,
  .../.gconf/apps/panel/objects/object_0/%gconf.xml,
  .../.gconf/apps/panel/objects/object_1/%gconf.xml,
  .../.gconf/apps/panel/objects/object_2/%gconf.xml,
  .../panel/objects/yelp_launcher_screen0/%gconf.xml,
  .../.gconf/apps/panel/toplevels/%gconf.xml,
  .../toplevels/bottom_panel_screen0/%gconf.xml,
  .../bottom_panel_screen0/background/%gconf.xml,
  .../panel/toplevels/top_panel_screen0/%gconf.xml,
  .../top_panel_screen0/background/%gconf.xml,
  contrib/template/.gconf/desktop/%gconf.xml,
  contrib/template/.gconf/desktop/gnome/%gconf.xml,
  .../.gconf/desktop/gnome/accessibility/%gconf.xml,
  .../gnome/accessibility/keyboard/%gconf.xml,
  .../.gconf/desktop/gnome/applications/%gconf.xml,
  .../gnome/applications/window_manager/%gconf.xml,
  .../.gconf/desktop/gnome/lockdown/%gconf.xml,
  contrib/template/.vim/colors/herald.vim,
  contrib/template/.vim/colors/moria.vim,
  contrib/template/.vim/colors/xoria256.vim,
  contrib/template/.vim/perl-support.zip,
  .../template/.vim/perlsupport/README.perlsupport,
  .../.vim/perlsupport/autoload/perlsupportgui.vim,
  .../perlsupport/autoload/perlsupportprofiling.vim,
  .../.vim/perlsupport/autoload/perlsupportregex.vim,
  .../template/.vim/perlsupport/doc/perlsupport.txt,
  .../template/.vim/perlsupport/ftplugin/perl.vim,
  .../codesnippets/SmallProf-variables.pl,
  .../perl-support/codesnippets/dot.SmallProf,
  .../codesnippets/free-software-comment,
  .../perl-support/codesnippets/module-interface.pl,
  .../perlsupport/perl-support/codesnippets/new.pl,
  .../codesnippets/pod-template-application.pl,
  .../codesnippets/pod-template-module.pl,
  .../print-data-structure-with-Dumper.pl,
  .../perl-support/codesnippets/print-hash-sorted.pl,
  .../perl-support/codesnippets/print-hash.pl,
  ...process-all-files-in-a-directory-recursively.pl,
  .../perl-support/codesnippets/slurp-file.pl,
  .../.vim/perlsupport/perl-support/doc/ChangeLog,
  .../perlsupport/perl-support/doc/perl-hot-keys.pdf,
  .../perlsupport/perl-support/doc/perl-hot-keys.tex,
  .../.vim/perlsupport/perl-support/doc/pmdesc3.text,
  .../perl-support/modules/perl-modules.list,
  .../perl-support/rc/customization.ctags,
  .../perl-support/rc/customization.gvimrc,
  .../perl-support/rc/customization.perltidyrc,
  .../perl-support/rc/customization.smallprof,
  .../perl-support/rc/customization.vimrc,
  .../perlsupport/perl-support/scripts/csv2err.pl,
  .../perlsupport/perl-support/scripts/efm_perl.pl,
  .../perlsupport/perl-support/scripts/pmdesc3.pl,
  .../perlsupport/perl-support/scripts/wrapper.sh,
  .../perlsupport/perl-support/templates/Templates,
  .../perl-support/templates/comments.template,
  .../perl-support/templates/idioms.template,
  .../perl-support/templates/pod.template,
  .../perl-support/templates/statements.template,
  .../perlsupport/perl-support/wordlists/perl.list,
  .../.vim/perlsupport/plugin/perl-support.vim,
  contrib/template/.vim/plugin/matrix.vim,
  contrib/template/.vim/syntax/fluxkeys.vim,
  contrib/template/.vim/syntax/perl.vim: Remove .gconf/.vim dirs from profile
  template example  These two directories were big with very site-specific
  content. With this removal profile template example can now be integrated
  into distribution tarball releases.

  * modulecmd.tcl, testsuite/modules.20-locate/020-fqual.exp,
  testsuite/modules.20-locate/030-defvers.exp,
  testsuite/modules.20-locate/035-defname.exp,
  testsuite/modules.20-locate/048-symexec.exp,
  testsuite/modules.20-locate/050-locrc.exp,
  testsuite/modules.20-locate/055-locrcerrs.exp,
  testsuite/modules.20-locate/060-rc.exp,
  testsuite/modules.20-locate/070-homerc.exp,
  testsuite/modules.80-deep/030-display.exp: Disable modulerc command report
  on display-mode  Introduce a g_inhibit_dispreport global variable to be able
  to inhibit the report of command set within a modulerc file when mode is set
  to 'display'.  This way a 'display' of a modulefile only outputs stuff from
  this modulefile and not from the various .modulerc on the path toward this
  modulefile.  Adapt most display-related non-regression tests to correctly
  check returned output from start to end.

2017-04-16  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/bash_completion, init/tcsh_completion.in: Eliminates sym from avail
  res in completion scripts  Previously only '(default)' symbol was wiped from
  avail result in bash and tcsh completion scripts. Adapt sed rules to clean
  up every potential symbols.

  * testsuite/modulefiles/loc_rc1/1.0, testsuite/modulefiles/loc_rc1/2.0,
  testsuite/modulefiles/loc_rc2/1.0, testsuite/modulefiles/loc_rc2/2.0,
  testsuite/modulefiles/loc_rc3/1.0, testsuite/modulefiles/loc_rc3/2.0,
  testsuite/modulefiles/loc_rc3/3.0, testsuite/modulefiles/loc_rc4/1.0,
  testsuite/modulefiles/loc_rc4/2.0, testsuite/modulefiles/loc_rc4/3.0,
  testsuite/modulefiles/loc_rc5/1.0, testsuite/modulefiles/loc_rc5/2.0,
  testsuite/modulefiles/loc_rc6/1.2, testsuite/modulefiles/loc_rc7/0.9,
  testsuite/modulefiles/loc_rc7/1.2,
  testsuite/modules.20-locate/050-locrc.exp,
  testsuite/modules.20-locate/055-locrcerrs.exp,
  testsuite/modules.20-locate/060-rc.exp,
  testsuite/modules.80-deep/050-whatis.exp: Add non-reg tests for whatis cmd
  on alias or sym  Add bunch of tests in 050-locrc of 20-locate suite and
  050-whatis of 80-deep suite to guaranty over time correct behavior of whatis
  command on module aliases or symbolic module version.

  * testsuite/modulefiles.deep/modsym/.modulerc,
  testsuite/modulefiles.deep/modsym/dir1/1.0,
  testsuite/modulefiles.deep/modsym/dir2/.modulerc,
  testsuite/modulefiles.deep/modsym/dir2/2.0,
  testsuite/modules.80-deep/010-init_ts.exp,
  testsuite/modules.80-deep/020-load.exp,
  testsuite/modules.80-deep/030-display.exp,
  testsuite/modules.80-deep/999-cleanup.exp: Non-reg tests for symbol on deep
  modules  Add non-regression tests in 80-deep suite to ensure correct
  behavior of module-version symbols on deep modulefiles.

  * testsuite/modules.20-locate/050-locrc.exp,
  testsuite/modules.91-sort/020-avail.exp: Symbols are avoided when looking
  for implicit default  Add non-regression tests in 050-locrc of 20-locate
  suite and in 020-avail of 91-sort suite to clarify that symbolic versions do
  not take part of the choice made when looking for an implicit version or a
  latest version (only aliases and modulefiles can be returned).

  * modulecmd.tcl, testsuite/modules.90-avail/020-single.exp,
  testsuite/modules.90-avail/040-wild.exp,
  testsuite/modules.90-avail/050-long.exp: Add symbolic version target to res
  list on getModules  When looking for modules, after looking at paths
  contents and module aliases set within the current dir, look at symbolic
  versions set with module-version to see if some match searched mod. If so,
  add the modulefile target of these symbolic version to the result list if
  found in path previously but not yet added to the result list.  With this
  new behavior a 'module avail mod/sym' will display the relative 'mod/vers'.
  Previously nothing was returned.  Add non-regression tests in 020-single,
  040-wild and 050-long of 90-avail suite to check this new behavior persist
  over time.

  * modulecmd.tcl, testsuite/modulefiles.deep/modalias/.modulerc,
  testsuite/modulefiles.deep/modalias/3.0,
  testsuite/modulefiles.deep/modalias/dir1/.modulerc,
  testsuite/modulefiles.deep/modalias/dir1/1.0,
  testsuite/modulefiles.deep/modalias/dir2/.modulerc,
  testsuite/modulefiles.deep/modalias/dir2/2.0,
  testsuite/modules.80-deep/010-init_ts.exp,
  testsuite/modules.80-deep/020-load.exp,
  testsuite/modules.80-deep/030-display.exp,
  testsuite/modules.80-deep/999-cleanup.exp: Optimize getPathToModule when
  solved alias is upper-mod  Improve getPathToModule procedure to be able to
  solve any-kind of module aliases within a single call rather than restarting
  new searches when solved aliases are on the upper part (elt1/) of a current
  search (elt1/elt2/) sharing same module root.  Add isSameModuleRoot
  procedure on the way to be able to check two modules share the same base
  name.  Add non-regression tests in 020-load and 030-display of 80-deep suite
  to guaranty that sub or upper aliases are correctly found.

  * modulecmd.tcl: Change default search value of listModules to 'wild'
  Previously set default value for 'search' argument was deprecated so change
  it to 'wild' which will result when passed to getModules in the addition of
  a wildcard to look at modules. This way the wildcard is only added in
  conjunction of listModules searches as getPathToModule searches should
  search for exact things.

  * modulecmd.tcl: Move deep mod lookup logic from findModules to getModules
  When a deep module is asked for searched to getModules (elt1/elt2/vers) call
  findModules to search on upper element (elt1) in order to return every
  modulerc or modulefiles related to this module.  Then getModules parses the
  array returned by findModules to build its results with only the
  directories, modulefiles and aliases that correspond to the asked search.
  By doing so, some modulerc search logic can be eliminated from findModules,
  as we will now always look at the whole deep module content.

2017-04-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modules.50-cmds/190-load.exp: Rework handling of
  error raised by checkValidModule  In checkValidModule procedure, register an
  entry in a g_invalid_mod_info global array when a modulefile does not
  correctly set the magic cookie. By doing so we are able to state during a
  modulefile search in getPathToModule procedure that the modulefile was found
  but it was not correctly defined.  This mechanism may be extended to other
  kind of modulefile error (like access issues).  Add new non-regression tests
  to 190-load in 50-cmds suite for modulefile specified as full path as new
  error handling better detect issues on this use-case.

2017-04-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Optimize getPathToModule when solved alias is sub-mod  In
  case an alias resolution leads to a subsequent modulefile (modulefile part
  of the current searched tree), go further in that searched tree rather
  restarting search with a new getPathToModule call.

2017-04-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modulefiles/loc_rc7/.modulerc,
  testsuite/modulefiles/loc_rc7/0.9, testsuite/modulefiles/loc_rc7/1.2,
  testsuite/modules.20-locate/050-locrc.exp,
  testsuite/modules.91-sort/020-avail.exp: Add aliases to dir list of elements
  in getModules  When looking for an implicit default in a directory, now
  aliases are part of the directory items so it can be returned as the last
  element in it (highest numerically sorted version).  Add tests in 050-locrc
  of 20-locate suite to guaranty this behavior on load command and tests in
  020-avail of 91-sort suite to guaranty this behavior on avail command.

2017-04-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modules.70-maint/045-listlong.exp: Consider upper
  dir .version file in findModules  If searched mod is found next to a
  .version file (in same directory), add this rc file to the list of those to
  interpret (like any modulerc files found on the path between the modulepath
  dir and the dir of the search mod).  With this fix 'module list' will
  correctly display the 'default' tag along loaded modules when set via a
  .version file.  Adapt 045-listlong test in 70-maint suite to check this.

  * modulecmd.tcl, testsuite/modules.70-maint/045-listlong.exp: Plug
  cmdModuleList on getModules rather getPathToModule  Call for getPathToModule
  for each loaded modules to retrieve their tag list and modulefile
  modification time in case of long output.  Also fix long output to display
  tag list if any. Add a non-reg test in 045-listlong of 70-maint suite to
  check that.

  * modulecmd.tcl, testsuite/modules.50-cmds/281-info-modulerc.exp,
  testsuite/modules.90-avail/020-single.exp: Plug getPathToModule on
  findModules/getModules  Make getPathToModule procedure relying on
  findModules and getModules procedures for module search and rc file
  interpretation, as listModules now does. findModules and getModules have
  been adapted to also handle getPathToModule use-cases.  Code to look for
  modules is now merged in a common set of procedures which will help both
  search sides (getPathToModule/listModules) to get immediate benefit from
  enhancement made on this code area.  As a side effect a 'module avail' on a
  module name which is an alias will now correctly return this alias module. A
  test has been added in 020-single of 90-avail suite to check that.

  * modulecmd.tcl: Introduce getLoadedModuleFileList proc  Add a
  getLoadedModuleFileList procedure to return a list corresponding to the
  content of the _LMFILES_ environment variable (like getLoadedModuleList for
  LOADEDMODULES).  Take this opportunity to register modulefile path in
  g_loadedModules global array, to be able to easily determine what file
  correspond to what loaded module.

2017-04-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modules.91-sort/020-avail.exp: Separate file
  search from display treatment in listModules  Introduce findModules and
  getModules procedures to handle file search for modulefiles and rc files
  interpretation. findModules is in charge of searching paths for
  module-related files. getModules calls findModules to get file list, then
  interprets any rc files found to consolidate a list of modules to return.
  listModules procedure now calls for getModules to get an array of modules
  corresponding to the directory passed as argument. So focus of listModules
  is now to prepare results for display.  This new methodolidy also corrects
  way directory where handled in case of '--default' and '--latest' listing.
  On a '--default' listing, a modulefile does not appear anymore if a dir is
  set default at the same level. On a '--latest' listing: a dir does not
  appear anymore if set default but not the latest.  Non-regression tests have
  been added in 020-avail of 91-sort suite to ensure a correct behavior will
  be maintained over time.

2017-03-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Protect read/close under catch in checkValidModule  Improve
  code of checkValidModule procedure to put read and close calls under catch
  protection. Also, only read 8 characters at the beginning of file to check
  header is valid.

  * modulecmd.tcl: Read then eval rather source module content  Replace source
  of modulefile and modulerc content by a file read then an evaluation of its
  content to optimize open/read/close operations of a 'module avail' command.
  By doing so, a modulerc is only read once during avail rather twice (once
  for validity check, then for sourcing content). Now validity check is
  performed at the same time the content is read to be passed for evaluation.
  In terms of Tcl C code, read+eval is equivalent to source. Only 'info
  script' has to be adapted with read file name in order to get same behavior
  during module code evaluation.

2017-03-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Call report only once per list to display

  * modulecmd.tcl: Optimize grid size computation in displayElementList
  Change algorithm strategy to compute the optimized number of column that can
  be used to display in column-fashion a list of elements. Previous algorithm
  was starting with a number of column equals to the number of element in
  list. New algorithm starts closer to the solution with a number of column
  equals to the basic solution where each column width is the same (equals to
  the length of biggest element in list). This approach reduces the number of
  iteration needed to reach best solution.  Also when a column width is
  changed currently computed row widths is adapted only for this column and
  not entirely reset.  All these optimizations drastically improve grid size
  computation time. New algorithm is approximatelly 12 time faster than the
  previous one. There is no more an overhead for this display mode.

2017-03-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modulefiles.deep/dir2/.modulerc,
  testsuite/modulefiles.deep/dir2/1.0, testsuite/modulefiles.deep/dir2/3.0,
  testsuite/modulefiles.deep/modload/dir2/.modulerc,
  testsuite/modulefiles.deep/modload/dir2/1.0,
  testsuite/modulefiles.deep/modload/dir2/3.0,
  testsuite/modules.80-deep/010-init_ts.exp,
  testsuite/modules.80-deep/020-load.exp,
  testsuite/modules.80-deep/030-display.exp,
  testsuite/modules.80-deep/999-cleanup.exp: Fix getModuleNameVersion to
  translate mod name on demand only  Translate module name to currently
  interpreted module name when name correspond to the last part this
  interpreted module only if translation is enabled (was previously done in
  all cases). Translation is enabled when usage of symbolic modulefile names
  are allowed, which means it is enabled from 'module-version', 'module-alias'
  and 'module-info version' and 'module-info symbols'.  Add non-reg tests in
  020-load and 030-display of 80-deep suite to check that.

2017-03-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Add license and copyright header to modulecmd.tcl  Take
  also this opportunity to correct the version number which should be equal to
  the number of commits but which was commit number+1

  * contrib/doc2www, www/c/INSTALL.html, www/c/NEWS.html, www/c/README.html,
  www/c/module.html, www/c/modulefile.html, www/index.html: Append myself to
  the copyright list

2017-03-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/rpm/macros.modules-tcl, contrib/rpm/modules-tcl.spec: install: add
  initial RPM specfile

  * init/Makefile.in, init/bash.in, init/csh.in, init/ksh.in, init/sh.in,
  init/zsh.in: install: fix reset of regular path in switchml  Avoid resetting
  regular path (/usr/bin) or manpath (/usr/share/man) when switching from Tcl
  to C version in switchml utility.

2017-03-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modules.50-cmds/250-x-resource.exp: Raise error
  on x-resource if DISPLAY not set  X11 resource changes cannot occur if
  DISPLAY environment variable is not set. So raise an error in x-resource
  procedure if we detect that DISPLAY is not defined.  Adapt 250-x-resource
  tests in 50-cmds to change expected results in case testsuite is ran with no
  DISPLAY set (like during rpm build).

2017-03-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile.in: testsuite: remove runtest verbose mode  Remove testsuite
  verbose mode as it is now sucessfull. No need to always get full details of
  the test run.  Replace it by the RUNTESTFLAGS make variable to be able to
  set verbository on demand from the command-line.

  * INSTALL.txt, Makefile.in, configure, doc/Makefile.in: install: do not
  build html doc as not installed  HTML documentation is not included in the
  install process so do not build it and remove strong requirement of
  pod2html.

2017-03-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/lisp.in: init: fix lisp script for env-change actions

2017-03-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * NEWS, modulecmd.tcl: Release of version 1.775

  * modulecmd.tcl: Fix MODULESHOME setup in autoinit for libexec install

  * contrib/doc2www, www/Makefile, www/c/INSTALL.html, www/c/NEWS.html,
  www/c/README.html, www/c/module.html, www/c/modulefile.html, www/index.html:
  www: add README and INSTALL files for Tcl and C

2017-03-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Remove use of untested var in runModulerc

  * testsuite/modules.50-cmds/088-info-isloaded.exp,
  testsuite/modules.50-cmds/150-module.exp: testsuite: be resilient to
  _modshare fluctuation  '_modshare' variables are get and set as an array so
  order of elements is not guaranteed. Multiple elements set in a _modshare
  variable may be ordered differently depending of the current system or the
  path they represents.  150-module and 088-info-isloaded tests from 50-cmds
  have been adapted to be resilient to _modshare variable fluctuation.

2017-03-03  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/LICENSE.GPL => COPYING.GPLv2, INSTALL-win.txt, INSTALL.txt,
  Makefile.in, README.txt, doc/Makefile.in, doc/example.txt, doc/install.txt,
  doc/installwin.txt, doc/readme.txt, init/README.txt, readme.txt: doc: Adapt
  and harmonize INSTALL and README files  Change documents markup to improve
  readability and extend content to fit the new installation process.
  INSTALL*, README and LICENSE documents have been moved/renamed in order to
  be found at the root directory to conform with open-source project standards
  and let people easily find these files once they retrieve either a
  distribution tarball or a clone of git repository.  README.txt in init dir
  has been deleted as INSTALL.txt in root directory now integrates its
  content.  INSTALL.txt and example.txt are now installed in 'docdir' at 'make
  install' time.

2017-03-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/diff_with_c-version.pod: doc: add tcl specific stuff to
  diff_with_c-version  Improve diff_with_c-version document to describe the
  features of the Tcl-version that are not supported on the C-version.  Also
  state that the diff takes C version 3.2.10 against Tcl version 1.729 as a
  basis. Differences appearing past these versions will be flagged with the
  release number of appearance.

  * configure, init/Makefile.in, init/bash.in, init/csh.in, init/fish.in,
  init/ksh.in, init/perl.in, init/python.in, init/sh.in, init/tcl.in,
  init/zsh.in: init: do not load modulerc config is env already set  If
  MODULEPATH or LOADEDMODULES is already set, do not source the modulerc
  configuration file in init scripts.  As a consequence, if .modulespath sets
  a module path, then modulerc will be ignored which clarifies how default
  configuration is loaded: if both .modulespath and modulerc are defined,
  .modulespath takes precedence over modulerc.  So if .modulespath sets a
  module path, all loaded modules defined in the modulerc file will be
  ignored.

2017-02-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Introduce release date to display next to version

2017-02-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile.in, doc/Makefile.in, init/Makefile.in: install: add 'DESTDIR'
  support

  * .gitignore, Makefile, Makefile.in, configure, doc/{Makefile =>
  Makefile.in}, init/.gitignore, init/{Makefile => Makefile.in}: install:
  introduce a 'configure' step  Add a 'configure' shell script to generate
  Makefiles, rather than choosing installtion directories or enabled features
  a the 'make' step. By doing so, installation process is clearer and closer
  to build conventions.  Use a custom 'configure' shell script rather than
  using autoconf and automake tool suites in order to keep good readability of
  Makefiles. Moreover our build use case is relatively small since nothing is
  complied so there is no real benefit of using autoconf/automake.  Adapt
  Makefiles to this 'configure' change and add 'distclean' target.

2017-02-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile, init/Makefile: init: add make option to bind on C ver
  .modulespath  Add the 'usecverdotmodulespath' make argument to generate
  init/.modulespath config file as a symlink on C version installed
  .modulespath configuration (by doing so both C and Tcl versions installed on
  the same environment can share the same MODULEPATH initialization setup).
  'cverinitdir' must be known for 'usecverdotmodulespath' to be taken in
  account.

  * Makefile, init/Makefile, init/bash.in, init/csh.in, init/fish.in,
  init/ksh.in, init/sh.in, init/zsh.in: init: define switchml tool in shell
  init scripts  Introduce 'switchml' tool, a shell function (or alias for csh
  or tcsh shells) that swap currently enabled Modules version (C or Tcl) by
  the other version (C or Tcl).  In case a swapped version was defining
  specific PATH or MANPATH entries, these specific entries are removed when
  switching to the other version to avoid still relying on the binaries and
  man pages of the swapped-out version.

2017-02-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .gitattributes, .gitignore, Makefile, doc/Makefile: install: add a 'dist'
  make target  Build a distribution tarball from the git repository content
  with the 'dist' make target.  Add gitattributes to exclude git-specific and
  website-specific content in distribution tarball. Also exclude user home
  directory template from dist tarball as its content has a very large size
  and may not apply to everybody.  Adapt parts of Makefiles to behave
  correctly when ran from a distribution tarball, not from the git repository.

2017-02-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile, doc/Makefile, init/Makefile: install: add an 'uninstall' make
  target

  * Makefile, init/.modulespath.in, init/Makefile, init/modulerc.examp,
  init/modulerc.in: init: generate modulerc and .modulespath configs  Add
  makefile rules to generate the modulerc and .modulespath configuration
  files. modulerc is generated in any case. By default it hosts the MODULEPATH
  and LOADEDMODULES definition passed to the Makefile with the 'modulepath'
  and 'loadedmodules' argument.  The 'setdotmodulespath' Makefile argument is
  also introduced. When set to 'y', the .modulespath is generated and hosts
  the MODULEPATH definition. In this case, modulerc config file only gets the
  LOADEDMODULES definition or is set empty if no value is passed to the
  'loadedmodules' argument.

2017-02-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile, doc/Makefile, doc/source/module.pod.in, init/Makefile: install:
  add modulefilesdir configuration option  @modulefilesdir@ enables to set the
  default system-wide modulefiles directory as described in module.1 man page.

  * Makefile, init/Makefile, init/bash.in, init/csh.in, init/fish.in,
  init/ksh.in, init/sh.in, init/zsh.in: init: set PATH and MANPATH in shell
  init scripts  Add the possibility to set PATH and MANPATH in shell init
  scripts (sh-like, csh-like and fish scripts) if specific option are enabled
  in makefile (enabled by default). With this, bin directory and man directory
  of the modules-tcl installation are prepended to the MANPATH and PATH
  environment variables.  Prepending is required for PATH as manpath utility
  in its default Linux setup will automatically set MANPATH from PATH change,
  so if we want MANPATH to be prepended, PATH has to be prepended.

2017-02-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .gitignore, Makefile, doc/Makefile, doc/source/{module.pod =>
  module.pod.in}: doc: adapt module doc to path used for install  Use same
  process than init scripts to translate module documentation from
  configure-like pattern (@prefix@, @initdir@, etc) to the path name chosen
  for installation.

  * .gitignore, doc/Makefile: doc: make a txt version of diff_with_c-version
  doc  And include this txt version in the documentation directory made for
  installation.

  * .gitignore, Makefile, doc/Makefile, init/.gitignore, init/Makefile,
  init/bash.in, init/csh.in, init/fish.in, init/ksh.in, init/lisp.in,
  init/perl.in, init/profile.csh.in, init/profile.sh.in, init/python.in,
  init/sh.in, init/tcl.in, init/tcsh_completion.in, init/zsh.in: Introduce an
  installation process  Introduce an 'install' target in makefiles to provide
  an installation process for modules-tcl.  Defines installation paths with
  Makefile variables in order to avoid having a ./configure step. Install
  paths are set during the 'make' step by passing 'prefix', 'libexecdir',
  'mandir', etc arguments to the make command. If no path definitions are
  passed to the 'make' command, installation will be made in
  '/usr/local/modules-tcl' by default.  Installation paths provided (or set
  from the default value found in Makefile) are saved at the 'make' step in a
  .makeinstallpath file. Then at the 'make install' step, this
  .makeinstallpath file is read and make knows where to install modules-tcl.
  These paths definitions are also used to translate *.in init script to their
  installed version.  modulecmd.tcl script is by default set to be installed
  in the libexec directory to follow FHS specification (as this script is an
  executable but not directly accessed by users).

  * init/csh.in: init: throw module exit code on csh-like script  Also takes
  this opportunity to refactor code of this init script.

2017-02-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/.gitignore, init/Makefile, init/profile.csh.in, init/profile.sh.in:
  init: add /etc/profile.d scripts

  * init/.gitignore, init/Makefile, init/bash.in, init/csh.in, init/fish.in,
  init/ksh.in, init/sh.in, init/zsh.in: init: ensure module definition in
  sh-like sub-shells  Adapt shell init scripts (sh-like, csh-like and fish) to
  get module defined in sh-like sub-shells. The method to define the module
  function in interactive or non-interactive sh-like sub-shells vary according
  to the shell flavor.  The below table is an attempt to summarize the method
  to use to get 'module' function defined in sub-shell depending of the
  SH-shell kind and if the sub-shell is in interactive mode or not.
  +-----+----------+-----------+-------+ | ENV | BASH_ENV | export -f | FPATH
  | +-------------+-------------------+-----+----------+-----------+-------+ |
  |inter sub-shell    |     |          |     X     |       | |BASH
  +-------------------+-----+----------+-----------+-------+ |
  |non-inter sub-shell|     |    X     |     X     |       |
  +-------------+-------------------+-----+----------+-----------+-------+ |
  |inter sub-shell    |  X  |          |     X     |       | |SH
  +-------------------+-----+----------+-----------+-------+
  |(BASH-compat)|non-inter sub-shell|     |          |     X     |       |
  +-------------+-------------------+-----+----------+-----------+-------+ |
  |inter sub-shell    |  X  |          |           |   X(*)| |SH
  +-------------------+-----+----------+-----------+-------+ |(ZSH-compat)
  |non-inter sub-shell|  X  |          |           |   X(*)|
  +-------------+-------------------+-----+----------+-----------+-------+ |
  |inter sub-shell    |  X  |          |           |   X   | |KSH
  +-------------------+-----+----------+-----------+-------+ |
  |non-inter sub-shell|     |          |           |   X   |
  +-------------+-------------------+-----+----------+-----------+-------+ |
  |inter sub-shell    |  X  |          |           |   X(*)| |KSH
  +-------------------+-----+----------+-----------+-------+ |(ZSH-compat)
  |non-inter sub-shell|  X  |          |           |   X(*)|
  +-------------+-------------------+-----+----------+-----------+-------+ |
  |inter sub-shell    |     |          |           |   X(*)| |ZSH
  +-------------------+-----+----------+-----------+-------+ |
  |non-inter sub-shell|     |          |           |   X(*)|
  +-------------+-------------------+-----+----------+-----------+-------+ (*)
  autoload required  Shell init scripts have been adapted to implement these
  different method to cover most of the initialization cases.  Note that 'zsh'
  requires to declare with autoload the functions put in FPATH directory so
  there is no gain to configure FPATH for 'zsh' compare to a bare source of
  the 'zsh' init script.

  * init/.gitignore, init/bash.in, init/csh.in, init/fish.in, init/ksh.in,
  init/perl.in, init/python.in, init/sh.in, init/tcl.in, init/zsh.in: init:
  set MODULEPATH if not defined  Initialize MODULEPATH variable if not
  defined, with an empty string or with the content of the init/.modulespath
  file if it exists and it is readable. This file contains a list of module
  paths, one per line or many per line separated by colon character.  This way
  of initializing MODULEPATH has been retrieved from C version init scripts in
  order for sysadmins to keep a familiar concept to set default MODULEPATH.

  * init/bash.in, init/csh.in, init/fish.in, init/ksh.in, init/perl.in,
  init/python.in, init/sh.in, init/tcl.in, init/zsh.in: init: set empty
  LOADEDMODULES if not defined

2017-02-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/Makefile, init/bash.in, init/csh.in, init/tcsh.in: init: introduce
  SHELLNAME var to replace in script  With SHELLNAME replacement variable,
  tcsh init script is derivated from csh init script.

  * init/bash.in, init/csh.in, init/fish.in, init/ksh.in, init/perl.in,
  init/python.in, init/sh.in, init/tcl.in, init/tcsh.in, init/zsh.in: init: do
  not source init/modulerc if not readable

  * doc/source/module.pod: doc: fix python init example for python3 compat

  * init/.gitignore, init/Makefile, init/{tcsh_completion =>
  tcsh_completion.in}: init: replace tclsh and MODULESHOME in tcsh_completion

  * init/Makefile, init/bash.in, init/csh.in, init/fish.in, init/ksh.in,
  init/lisp.in, init/perl.in, init/python.in, init/sh.in, init/tcl.in,
  init/tcsh.in, init/zsh.in: init: get and set TCLSH in init scripts  As for
  MODULESHOME, get 'tclsh' location from Makefile then replace '@TCLSH@'
  pattern in shell init scripts with found location rather than guessing it in
  the init scripts.  By doing so, same 'tclsh' location search is applied to
  all init scripts. Search is performed with 'command' to look at a predefined
  list of PATHs in order to be resilient to the current PATH content.

  * init/Makefile, init/bash.in, init/csh.in, init/fish.in, init/ksh.in,
  init/lisp.in, init/perl.in, init/python.in, init/sh.in, init/tcl.in,
  init/tcsh.in, init/zsh.in: init: normalize use and replacement of
  MODULESHOME  Simplify guess of MODULESHOME location by more relying on
  'make' capabilities than 'perl'.  Adapt init scripts for the different
  shells to use the MODULESHOME variable that is replaced during the 'make'
  process rather than ${MODULESHOME}, $env(MODULESHOME), etc.  By the way, use
  a replacement pattern closer to what 'configure' is using with
  '@MODULESHOME@' rather than '$MODULESHOME' which was confusing in shell
  scripts.

  * init/zsh.debug: init: remove unused zsh.debug

2017-02-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Fix MODULESHOME setup in autoinit  Set modulecmd.tcl script
  directory absolute then guess MODULESHOME from it. Adapt this setup if
  modulecmd.tcl is located in a 'bin' directory as in this case MODULESHOME is
  set to the upper directory (as 'init' directory will be located at the same
  level than the 'bin' dir not inside the 'bin' dir).  By the way, fix perl
  autoinit code to simply use 'argv0' rather than 'MODULESHOME' in order to
  set the module function as for the other languages.

2017-03-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modulefiles/loc_rc6/.modulerc,
  testsuite/modulefiles/loc_rc6/1.2,
  testsuite/modules.90-avail/030-multiple.exp,
  testsuite/modules.90-avail/040-wild.exp,
  testsuite/modules.90-avail/050-long.exp: Correct alias/version resolution on
  avail command  List of version symbols was erroneous on an avail command in
  case a modulefile held symbols like default and was targeted by aliases.
  Avail output was showing the aliases holding the symbols instead of the
  modulefile.  getVersAliasList procedure was fixed to perform the alias
  resolution attempt in a second phase of the procedure, to let chance to
  retrieve symbols for the initial module name passed to the procedure.
  030-multiple, 040-wild and 050-long tests of the 90-avail suite has been
  enhanced with new tests to check this behavior. loc_rc6 modulefile has been
  added to the testsuite modulefiles to reproduce this use case.  Thanks to
  Bert Wesarg and Levi Morrison for reporting this issue.

2017-02-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/doc2www, www/Makefile, www/c/NEWS.html, www/{man =>
  c}/module.html, www/{man => c}/modulefile.html, www/index.html: www: include
  NEWS files on website  Include the NEWS file of C and Tcl versions to the
  documentation portal of Environment Modules.  Move C documentation to a 'c'
  directory to better distinguish from the Tcl documentation that is stored in
  the 'tcl' directory. Hard links are maintained on the Website not to break
  URL to man/module.html and man/modulefile.html pages.

  * NEWS: Add NEWS file to desc changes in modules-tcl rel

2017-02-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/doc2www, www/index.html, www/man/module.html,
  www/man/modulefile.html: www: add Mark Lakata to the copyright list

  * .gitignore, Makefile, contrib/gitlog2changelog.py: Add gitlog2changelog.py
  contrib script  Import gitlog2changelog.py GPL script to generate a
  ChangeLog file based on the commits of the git repository.  Add a
  'ChangeLog' rule to the Makefile.

  * contrib/doc2www, www/index.html, www/man/module.html,
  www/man/modulefile.html: www: update lic/copyright and version order  Adapt
  pages as suggested by R.K. and Kent: * update copyright for the recent years
  * add reference to LGPL as C version has some parts using this lic * reword
  C and Tcl version presentation * put C version first

2017-02-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .gitignore, Makefile, contrib/doc2www, www/Makefile: www: Include Tcl
  version docs and papers/talk to website  Introduce 'doc2www' script to
  convert Tcl version documents to the website format, with usage of the
  'bootstrap' web toolkit.  Makefiles have been adapted to be able to generate
  these www documents from the source pod files and to copy existing txt and
  pdf files in the website tree.

  * www/index.html, www/man/module.html, www/man/modulefile.html,
  www/modules.css: www: Change website look and feel with Bootstrap  Adapt web
  pages to make use of the Bootstrap toolkit in order to get a modern and easy
  to maintain web style and content. Bootstrap also helps to get a responsive
  design so the website will adapt to the terminal used to read it.  Thanks to
  Aurelien Degremont for pointing me to the right tool for this task.

  * www/man/module.html, www/man/modulefile.html: www: Import and adapt last
  version of C manpages

2017-02-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * www/index.html, www/maillist.html: www: Refresh content all on single page

2017-02-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/paper/MC2_whitney_paper.pdf, doc/paper/Modules-Paper.pdf,
  doc/paper/absmod.pdf, doc/paper/user-setup.pdf,
  doc/talk/CSE-IT_modules_talk.pdf: doc: Import papers and talk avail on www

2017-02-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * www/index.html, www/maillist.html, www/man/module.html,
  www/man/modulefile.html, www/modules.css: www: Import current website

2017-02-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Fix use of pwd in renderSettings proc  renderSettings was
  using the 'pwd' binary instead of the 'pwd' Tcl call, which cause issue when
  PATH is empty. Code has been adapted to reuse the value of the 'cwd' global
  variable or set its value by calling the 'pwd' Tcl function.

  * doc/source/module.pod: doc: Describe collection stuff

2017-01-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/Makefile, doc/source/diff_with_c-version.pod: doc: Introduce
  diff_with_c-version.pod document

  * doc/source/module.pod, doc/source/modulefile.pod: doc: use itemized-list
  for ENV and FILES sections  Adapt module.pod and modulefile.pod to use
  itemized-list rather than head2 for the content of their ENVIRONMENT and
  FILES sections. HTML rendering is clearer with a list than h2.

  * .gitignore, doc/Makefile, doc/html/common.css: doc: add a minimal css file
  to render html docs

2017-01-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Improve shebang to only search tclsh once if in PATH

2017-01-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/modulefile.pod, modulecmd.tcl,
  testsuite/modulefiles/info/mode3,
  testsuite/modules.50-cmds/084-info-mode-exp.exp,
  testsuite/modules.95-version/020-unload.exp,
  testsuite/modules.95-version/022-unload2.exp: Add module-info mode check
  against 'remove' and switch' value  For compatibility with C-version, enable
  to check current 'module-info mode' against the 'remove' and 'switch' value.
  To achieve this change 'remove' is considered an alias of the 'unload'
  value. 'switch' is checked against the current 'module-info command'.
  084-info-mode-exp tests of 50-cmds suite have been adapted. In addition
  020-unload and 022-unload2 tests of 95-version suite have also been adapted
  as the modulefiles they check are using a 'module-info mode remove' test.

2017-01-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Handle sep line on avail/help/display with a proc

  * doc/source/modulefile.pod, modulecmd.tcl, testsuite/home/.module/infocmd,
  testsuite/home/.module/infocmdexp, testsuite/modulefiles/info/command,
  testsuite/modulefiles/info/commandexp,
  testsuite/modulefiles/inforc/.modulerc,
  testsuite/modules.50-cmds/281-info-modulerc.exp,
  testsuite/modules.50-cmds/282-info-command.exp,
  testsuite/modules.50-cmds/283-info-command-exp.exp,
  testsuite/modules.61-coll/020-savelist.exp: Introduce 'module-info command'
  Introduce g_commandNameStack variable, currentCommandName, pushCommandName
  and popCommandName procedures to implement a 'module-info command' that
  returns the name of the currently running module command.  This new
  mechanism enables to distinguish complex 'load' or 'unload' commands that
  cannot be determined with 'module-info mode' alone. For instance a
  modulefile can now be aware that a 'switch', a 'restore' or a 'purge'
  command is currently being run.  Add description of this new command to the
  modulefile documentation.  Add 282-info-command and 283-info-command-exp
  tests in 50-cmds and adapt 281-info-modulerc in 50-cmds and 020-savelist in
  61-coll.

  * doc/source/module.pod: doc: add missing 'aliases' and 'source'
  sub-commands

2017-01-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modulefiles/inforc/.modulerc,
  testsuite/modulefiles/inforc/1.0, testsuite/modulefiles/inforc/2.0,
  testsuite/modules.50-cmds/281-info-modulerc.exp: Enable use of 'module-info'
  from modulerc  Give access to the 'module-info' procedure in slave interp
  when executing .modulerc or .version file.  Adapt push/pop mode calls to
  surround procedure calls that can execute a modulerc file to get there a
  coherent 'module-info mode' value.  Add 281-info-modulerc tests to the
  50-cmds suite.

2017-01-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modulefiles/info/.modulerc,
  testsuite/modulefiles/info/specified,
  testsuite/modules.50-cmds/280-info-specified.exp: Fix 'module-info
  specified'  Introduce g_specifiedNameStack variable, currentSpecifiedName,
  pushSpecifiedName and popSpecifiedName procedures to implement a
  'module-info specified' that returns the modulefile name as specified on the
  command-line.  Add 280-info-specified tests to the 50-cmds suite.

  * modulecmd.tcl: Simplify code of cur/push/pop mode and modname procs

  * doc/source/module.pod: doc: add missing 'search' module sub-command

2017-01-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Display system command with no extra space if no arg

  * modulecmd.tcl: Display unsetenv command with 1 tab sep instead of 2  To
  get result aligned with the other commands.

  * modulecmd.tcl, testsuite/modules.70-maint/055-whatis.exp,
  testsuite/modules.70-maint/060-apropos.exp,
  testsuite/modules.90-avail/030-multiple.exp: No exit raise on modfile error
  for avail/whatis cmds  Do not exit on an error raised by one modulerc or one
  modulefile for global commands avail, whatis or search that parse the
  content of all modulefile/modulerc found in the defined module paths.  By
  doing so results from these global commands will not be harmed if error
  exists in a few modulefiles. The content of these modulefiles will be
  ignored after the erroneous line. So in a whatis/search case if the
  module-whatis definition is set before the erroneous line, the modulefile
  will be taken into account. If the module-whatis definition is set after the
  erroneous line, the modulefile will be ignored.  To achieve this goal a
  'exit_on_error' argument has been added to the 'execute-modulerc' and
  'execute-modulefile' procedures. By default this argument is enabled but
  calls made from 'listModules' and 'cmdModuleSearch' disable it.  Add
  non-regression test to 055-whatis and 060-apropos in 70-maint suite and to
  030-multiple in 90-avail suite.

  * modulecmd.tcl, testsuite/modulefiles/bad/.modulerc,
  testsuite/modulefiles/bad/after, testsuite/modulefiles/bad/before,
  testsuite/modules.50-cmds/190-load.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/080-help.exp: Non-zero exit code when exiting
  from execute-mod procs  When a critical error is encountered when
  interpreting a modulefile or a modulerc from execute-modulefile or
  execute-modulerc procedures, exit as done elsewhere. Means call for error
  code rendering and raise error to top level, where exit command is called.
  A new procedure called 'exitOnError' is added and it is called by
  execute-modulefile and execute-modulerc procedures. Top level error
  management code now does not always print an error message as in this
  situation error message has already been displayed when the
  reportInternalBug procedure was called.  Add non-regression tests to
  190-load in 50-cmds suite and to 070-display and 080-help in 70-maint suite.

  * modulecmd.tcl: Refactor exit and ModulesVersion set of execute-modulerc
  Refactor the execute-modulerc procedure to handle exit in case of critical
  error as it is done on execute-modulefile procedure with the slave interp
  evaluation returning an errorVal. Then this errorVal is treated to check if
  a critical error as been encountered (errorVal=2).  To achieve this goal the
  way the ModulesVersion variable is set need to be changed as the slave
  interp now returns errorVal not ModulesVersion. A setModulesVersion
  procedure is added to enable the slave interp to pass the value of the
  ModulesVersion variable in the master interp context.

2017-01-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Retrieve help mode from module-info on execute-modulefile
  Remove the 'help' argument on the execute-modulefile procedure that was used
  to know the execution is made on a 'help' mode. Now that 'help' mode is
  pushed to the 'mode' stack, 'help' mode can be retrieved from 'module-info
  mode'.

2017-01-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Inhibit non-critical error report on avail/whatis
  Introduce the g_inhibit_errreport variable to inhibit the stderr display of
  non-critical error aka error reported through the reportWarning, reportError
  or reportInternalBug procedures.  inhibitErrorReport and reenableErrorReport
  procedures are added to enable or disable g_inhibit_errreport.  This new
  mechanism has been deployed on the 'avail', 'aliases' and 'whatis/search'
  commands, in order to avoid error flood when parsing all modulefiles or
  modulercs. This way, results from these commands will appear clearly to the
  user.

2017-01-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modules.50-cmds/210-exit.exp: Handle multiple
  lines of module-whatis for same modfile  Treat g_whatis as a list where each
  module-whatis text-line is appended to the previous lines.  In case of
  search, these lines are displayed only if they match the search pattern (to
  get same behavior as on C-version)  As a side effect, if no 'module-whatis'
  directive are found in a modulefile, this modulefile is never displayed on a
  'module whatis' call (same behavior as on C-version).  Adapt 210-exit whatis
  test in 50-cmds suite.

  * modulecmd.tcl: Handle multiple args passed to module-whatis cmd  When
  multiple arguments are provided to the module-whatis module command, join
  them with " " to get a line of text.

  * modulecmd.tcl: Return error on whatis if searched modfile not found  If
  'module whatis' command gets modulefiles as argument, if this or these
  modulefiles do not match any existing modulefile in the defined module path,
  then raise error as done on 'module load'.

2017-01-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles/coll/a, testsuite/modulefiles/coll/b,
  testsuite/modulefiles/coll/c, testsuite/modulefiles/coll/d,
  testsuite/modulefiles/help/2.0, testsuite/modules.70-maint/010-init_ts.exp,
  testsuite/modules.70-maint/020-update.exp,
  testsuite/modules.70-maint/030-purge.exp,
  testsuite/modules.70-maint/040-list.exp,
  testsuite/modules.70-maint/043-listno.exp,
  testsuite/modules.70-maint/045-listlong.exp,
  testsuite/modules.70-maint/048-listlongno.exp,
  testsuite/modules.70-maint/050-whatis-load.exp,
  testsuite/modules.70-maint/055-whatis.exp,
  testsuite/modules.70-maint/056-whatis-nullpath.exp,
  testsuite/modules.70-maint/060-apropos.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/080-help.exp,
  testsuite/modules.70-maint/095-cleanup.exp: testsuite: import and adapt
  70-maint suite  Also adapt 'coll' modulefiles to better cope with
  whatis/search commands.

2017-01-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Set a ref count of 1 for path without ref count  When a
  path is used in a variable but does not own a reference count assume this
  count is 1 rather than 999999999 to be able to unload it afterward which
  would not be possible if this path is referred 999999999 times.

2015-06-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * contrib/envml: Introducing envml utility  Add a 'envml' script tool which
  act as an application launcher where module commands are instancied to setup
  environment before launching the given application.

2017-01-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/010-environ.exp: testsuite: clean _modshare env
  vars before start  Unset any *_modshare environment variable before test
  start to get independent from the current environment situation.

  * Makefile: Ask for pwd physical resolution in Makefile  Use physical
  resolution (pwd -P) rather than logical resolution to be able to match
  result returned by the 'pwd' Tcl command.

2017-01-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modules.10-use/030-use.exp,
  testsuite/modules.10-use/070-unuse.exp,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/999-cleanup.exp: Always register paths as absolute
  paths  Convert paths provided to be part of MODULEPATH environment variable
  in order to always register the corresponding absolute path. This way these
  paths become independent from the current working directory, which can be
  modified afterward by the user.  Use 'file join [pwd]' method rather than
  'file normalize' to get aboslute paths in order to preserve potential
  symlink used in the relative path hierarchy. Convertion also strips any
  extra '/' character and resolive "." and ".." components.
  readCollectionContent and cmdModuleUnuse procedures have also been adapted
  to keep compatibility with previous behavior where relative paths were able
  to be registered in MODULEPATH.  Adapt 61-coll suite and improve 030-use and
  070-unuse tests of 10-use suite.

2017-01-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modules.50-cmds/210-exit.exp: Inhibit next
  modfiles interp with 'exit' only if mode is load  Do not impact with 'exit'
  calls the remaining modulefiles to interpret in case of global non-load
  action like whatis, display or help.  Some tests have been added to 210-exit
  in order to check this behavior.

  * doc/source/modulefile.pod, modulecmd.tcl,
  testsuite/modules.50-cmds/087-info-shells-exp.exp: Add arg to test current
  {shell,shelltype}' in module-info  Add the possibility to pass a string to
  'module-info shell' and 'module-info shelltype' to get a boolean test on
  currently used shell or shelltype. This kind of behavior is already
  available on 'module-info mode' to test module current mode.  These features
  are supported by C-version even if not documented.  modulefile documentation
  and 087-info-shells-exp tests in 50-cmds suite have been adapted
  accordingly.

2017-01-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/modulefile.pod: doc: clarify 'module-info {symbols,version}'
  commands

2017-01-10  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modulefiles/loc_def/default,
  testsuite/modulefiles/loc_def/truedef,
  testsuite/modules.20-locate/035-defname.exp: Do not always treat 'default'
  version-name as a symbol  Do not always treat 'default' version-name as a
  symbol where 'module/default' is equal to 'module'. Sometimes
  'module/default' can be a real modulefile thus it should be treated like
  that.  To do so a 'default_is_special' argument has been added to the
  'getModuleNameVersion' procedure in order to treat 'default' as a special
  version-name only when working with 'module-version', 'module-info version'
  and 'module-info symbols' commands.  Add 035-defname tests to 50-cmds suite
  to check this behavior.

2017-01-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modules.50-cmds/042-append-delim.exp,
  testsuite/modules.50-cmds/047-app-del-undo.exp,
  testsuite/modules.50-cmds/052-prepend-delim.exp,
  testsuite/modules.50-cmds/057-pre-del-undo.exp: Escape ':' in modshare var
  when used as path element in var  Some list variable may contain element
  with ':' in it, like for URL, separated by a character different than ':'.
  However corresponding modshare variable always use colon character as
  separator so we need to escape colon used as variable content in modshare
  variable to avoid issue.  To achieve that psplit and pjoin procedures are
  introduced as well as a charUnescaped procedure, which is the reverse of the
  already existing charEscaped procedure. With these new procedures path-like
  variable escape or unescape $g_def_separator character used in element of
  the variable when splitting or joining the whole variable.  Adapt
  042-append-delim, 047-app-del-undo, 052-prepend-delim and 057-pre-del-undo
  tests in 50-cmds suite to check colon character is correctly escaped in
  modshare variable.

  * modulecmd.tcl: Introduce charEscaped proc to escape char passed as arg
  Replace multiEscaped, doubleQuoteEscaped and singleQuoteEscaped procs by a
  single procedure that can escape any set of characters passed as argument.

2017-01-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/modulefile.pod: doc: adapt descrition of 'x-resource'

  * doc/source/modulefile.pod: doc: adapt calls used by 'system' and 'uname'

  * doc/source/modulefile.pod: doc: adapt list of mode returned by
  'module-info mode'

  * doc/source/module.pod: doc: add refresh alias on reload sub-command

2017-01-05  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.pod: doc: case when MODULERCFILE points to a directory

  * doc/source/module.pod, doc/source/modulefile.pod: doc: add --default and
  --latest avail switches

  * doc/source/module.pod: doc: add --help, --version and --debug switches

  * doc/source/module.pod: doc: switch command accepts only one argument

  * doc/source/module.pod: doc: reference newly supported shells (fish, tcl,
  lisp)

  * init/python.in: init: fix TCLSH typo in python script

2016-12-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/source/module.pod, doc/source/modulefile.pod: doc: improve docs
  readability  Adopt and apply writing conventions found especially in
  man-manpages(7) to improve documents readability:  * always refer to
  'modulefile' or 'modulefiles' with I<> pod code * refer to other manpages
  with B<> pod code * refer to filename or pathname with F<> pod code * refer
  to environment variable with B<> pod code * no '$' before environment
  variable except if its value is referred * no escaping '{}' of environment
  variable * use item list to describe ordered list * use item list to
  describe all command-line switches, all module sub-commands and all
  modules-specific Tcl commands * refer to command-line switches, module
  sub-commands, modules-specific Tcl commands, Modules variables and Modules
  subroutines with B<> pod code * use normal font for arguments on item list *
  refer to arguments of current command-line switch, module sub-command or
  modules-specific Tcl command with I<> pod code * express 1+ arguments with a
  'arg...' syntax * format pod source with 'fmt' to set maximum line witdh to
  78 chars * fix double spaces '  ' or end of line extra space found in
  paragraphs

  * doc/source/module.pod, doc/source/modulefile.pod: doc: remove stuff
  specific to C-version  Changes made on module.pl: * remove text related to
  the 'modulesbeginenv' feature * remove 'clear' sub-command * change 'update'
  sub-command into 'reload and adapt description  Changes made on
  modulefile.pl: * remove 'module-info flags' modules-specific Tcl command *
  remove 'module-trace' modules-specific Tcl command * remove 'module-user'
  modules-specific Tcl command * remove 'module-log' modules-specific Tcl
  command * remove 'module-verbosity' modules-specific Tcl command

  * doc/source/module.pod, doc/source/modulefile.pod: doc: syntax fixes and
  import recent changes on C doc

2017-01-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * doc/Makefile, doc/source/{module.pl => module.pod},
  doc/source/{modulefile.pl => modulefile.pod}: doc: use .pod extension for
  POD documents  This way these files are automatically recognized as POD
  files and the appropriate syntax highlight mode is automatically set.

2017-01-02  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * Makefile, doc/Makefile: Create a doc-specific Makefile  Separate
  documentation generation in a dedicated Makefile put in the doc directory.
  Generate documentation in a more 'Makefile' fashion, with a target per
  document file.

2017-01-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .gitignore, doc/html/module.html, doc/html/modulefile.html,
  doc/man/man1/module.1, doc/man/man4/modulefile.4: Remove generated documents
  from git repository  Clear HTML and MAN pages from the repository as they
  are generated content from POD files. This way git commits on documentation
  are clearer as they only contain changes on POD files.  Add rules to
  .gitignore to stop tracking generated HTML and MAN documents in repository.

2016-12-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, notdone/modules.50-cmds/170-swap.exp,
  notdone/modules.50-cmds/175-swap2.exp, testsuite/modulefiles/append/1.1,
  testsuite/modulefiles/prepend/1.1, testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/172-swap-app-delim.exp,
  testsuite/modules.50-cmds/173-swap-app-delim.exp,
  testsuite/modules.50-cmds/175-swap2.exp,
  testsuite/modules.50-cmds/177-swap-prep-delim.exp,
  testsuite/modules.50-cmds/178-swap-prep-delim.exp: Make 'switch' command
  handle a single argument  On a 'module switch [mod1] mod2', If 'mod1' is not
  specified, then it is assumed to be the currently loaded module with the
  same root name as 'mod2'.  Introduce a 'getLoadedWithClosestName' procedure
  to look at currently loaded modules and return the one with the closest name
  to the name passed as argument.  Import and adapt 170-swap,
  172-swap-app-delim, 173-swap-app-delim, 175-swap2, 177-swap-prep-delim and
  178-swap-prep-delim tests to the 50-cmds suite.

2016-12-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Make 'switch' command consistent  Switch command were
  previsouly setting 'new' as 'old' and 'old' as 'new' when 'new' is detected
  loaded. This behavior led to inconsistency especially when the same 'module
  switch old new' command is called twice. First time 'old' is loaded and
  'new' is unloaded. Then for the second call 'old' is unloaded and 'new' is
  loaded, and so on. In this case, the result of the switch command depends on
  the current situation which confuses most persons using it.  This commit
  makes the switch command idempotent by always ending up with 'old' unloaded
  and 'new' loaded, whatever the starting situation is.

2016-12-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, notdone/modules.50-cmds/210-exit.exp,
  testsuite/modules.50-cmds/210-exit.exp: Add support for 'exit' command in
  modulefile  Add support for use of 'exit' command within modulefile as
  described in modulefile(4) man page. This command will cause the immediate
  cessation of this module and any additional ones on the command line. This
  module and the subsequent modules will not be listed as loaded. No
  environment commands will be performed in the current module.  To achieve
  that a 'exitModfileCmd' procedure is added to superseed the 'exit' command
  during modulefile interpretation. When called this procedure sets a flag
  that inhibit further modulefile interpretation.  Import and adapt 210-exit
  tests in 50-cmds suite.

  * init/bash_completion, init/tcsh_completion, modulecmd.tcl,
  notdone/modules.50-cmds/078-refresh.exp,
  testsuite/modules.50-cmds/078-refresh.exp: Add 'refresh' command as alias on
  'reload' command  Add a 'refresh' command as available on C-version but
  instead of reloading the volatile components (ie. shell aliases) only, here
  we unload then reload all the currently loaded modules. This behavior is
  different than on C-version but it ends with same results : shell aliases
  are refreshed in sub-shells.  Import and adapt 07-refresh tests in 50-cmds
  suite.

2016-12-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, .../modules.50-cmds/100-loglevel.exp,
  .../modules.50-cmds/101-badfac.exp, .../modules.50-cmds/110-verbose.exp,
  .../modules.50-cmds/115-verbose-msg.exp: Add dummy
  module-{log,trace,user,verbosity} procs  Add dummy procedures for the
  module-log, module-trace, module-user and module-verbosity commands
  available on C-version. These commands do not seem relevant to be
  implemented on Tcl-version of module, but having dummy procedure for them
  enable support for modulefiles using these commands. Without dummy
  procedures these modulefiles raise error as the commands are not known.  The
  4 dummy procedures report a warning message to let the user know that even
  if the modulefile has been loaded/unloaded/etc, the module-log,
  module-trace, module-user or module-verbosity calls were not interpreted.
  Import and adapt 100-loglevel, 101-badfac, 110-verbose and 115-verbose-msg
  tests in 50-cmds suite.

2016-12-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modules.50-cmds/140-system.exp: Adapt 'system' to
  behave like described on manpage  Previously the 'system' modulefile command
  was adding the specified string to the list of things to interpret on
  stdout. This commit aligns the behavior of the 'system' command on the one
  implemented on Modules C-version which is documented on modulefile(4) man
  page.  Now 'system' passes string to the 'exec' Tcl procedure with stdout
  redirected to stderr since stdout would be parsed by the evaluating shell.
  The exit status of the executed command is returned.  Adapt '140-system'
  test in 50-cmds suite accordingly.

2016-12-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * notdone/modules.50-cmds/120-prereq-full.exp,
  notdone/modules.50-cmds/130-conflict-full.exp,
  notdone/modules.50-cmds/131-conflict-module.exp,
  testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/121-prereq-module.exp,
  testsuite/modules.50-cmds/130-conflict-full.exp,
  testsuite/modules.50-cmds/131-conflict-module.exp: testsuite: import
  'conflict' and 'prereq' tests in 50-cmds suite

  * modulecmd.tcl, notdone/modules.50-cmds/190-load.exp,
  .../modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/190-load.exp:
  Fix 'module list' when module loaded with full path  On Tcl-version,
  modulefile loaded by giving its full path has its name equal to its full
  path since module name and version cannot be distinguished from the path. On
  C-version, module name equals to the tail of the full path.  Also import and
  adapt 'module' and 'load' tests in 50-cmds suite.

2016-12-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Disable g_force to avoid loading already loaded mod  In
  order to get closer to C-version, disable g_force by default to avoid
  loading a modulefile already loaded. This behavior also avoid path element
  reference counting to get increased when the same module is asked twice for
  load.  Thus with cleaner path element reference count, automatic modulefile
  dependency management is made possible.

2016-12-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * notdone/modules.50-cmds/080-info-name.exp,
  notdone/modules.50-cmds/088-info-isloaded.exp,
  testsuite/modules.50-cmds/080-info-name.exp,
  testsuite/modules.50-cmds/088-info-isloaded.exp: testsuite: import
  module-info name/isloaded in 50-cmds suite

  * modulecmd.tcl, testsuite/modulefiles/info/mode1,
  testsuite/modulefiles/info/mode3, .../modules.50-cmds/083-info-mode.exp,
  .../modules.50-cmds/084-info-mode-exp.exp: Clarify module-info 'mode' option
  Fix mode setup during a 'help' command and import info-mode relative tests
  in 50-cmds suite.  module-info non-regression tests have been adapted to
  match behavior of Tcl-version: * during a 'help' command, stdout output of
  ModulesHelp procedure is not redirected to stderr as done on C-version * on
  an 'unload' command, module-info mode is equal to 'unload' and not 'remove'
  * on a 'switch' command, module-info mode is equal to 'unload' then 'load'
  and not 'switch1', 'switch2' and 'switch3' * on a 'switch' command,
  module-info mode never equals to 'switch'

2016-12-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modulefiles/info/mode5,
  .../modules.50-cmds/081-info-user.exp,
  .../modules.50-cmds/082-info-user-exp.exp,
  .../modules.50-cmds/085-info-flags.exp: Clarify module-info 'flags' and
  'user' options  'flags' and 'user' are C-version specific options and they
  are not relevant for Tcl-version. So they are present on Tcl-version to
  avoid breaking modulefile using them but always return false or an empty
  string to reflect the fact that these options are unmanaged here.  Import
  and adapt info-user and info-flags non-regression tests in 50-cmds suite.

2016-12-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, notdone/modules.50-cmds/042-append-delim.exp,
  notdone/modules.50-cmds/045-append-undo.exp,
  notdone/modules.50-cmds/047-app-del-undo.exp,
  notdone/modules.50-cmds/050-prepend.exp,
  notdone/modules.50-cmds/052-prepend-delim.exp,
  notdone/modules.50-cmds/055-prepend-undo.exp,
  notdone/modules.50-cmds/057-pre-del-undo.exp,
  notdone/modules.50-cmds/060-remove.exp,
  notdone/modules.50-cmds/065-remove-undo.exp,
  testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.50-cmds/042-append-delim.exp,
  testsuite/modules.50-cmds/045-append-undo.exp,
  testsuite/modules.50-cmds/047-app-del-undo.exp,
  testsuite/modules.50-cmds/050-prepend.exp,
  testsuite/modules.50-cmds/052-prepend-delim.exp,
  testsuite/modules.50-cmds/055-prepend-undo.exp,
  testsuite/modules.50-cmds/057-pre-del-undo.exp,
  testsuite/modules.50-cmds/060-remove.exp,
  testsuite/modules.50-cmds/065-remove-undo.exp: Handle empty or separator
  path on add-path/unload-path  Improve add-path and unload-path to handle
  empty path {}, that can be added or removed from a path list like on
  C-version.  Also if provided path is equal to the separator string, like
  ":", an error is raised as this kind of path cannot be handled in path list
  variables. This behavior here is different than on C-version where path
  equals to ":" can be added or removed to path list variables.  Import or
  adapt add-path and unload-path relative tests (04*-append, 05*-prepend and
  06*-remove) in 50-cmds suite.

2016-12-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, notdone/modules.50-cmds/025-setenv-undo.exp,
  notdone/modules.50-cmds/035-unsetenv-undo.exp,
  notdone/modules.50-cmds/036-unsetenv-x.exp,
  testsuite/modules.50-cmds/025-setenv-undo.exp,
  testsuite/modules.50-cmds/035-unsetenv-undo.exp,
  testsuite/modules.50-cmds/036-unsetenv-x.exp: Improve unsetenv for unload
  and display modes  On unload mode, delete environment variable targeted by
  an unsetenv directive if no value has been provided along.  On display mode,
  print environment variable value if any has been passed to unsetenv
  directive.  Import 025-setenv-undo, 035-unsetenv-undo and 036-unsetenv-x
  tests in 50-cmds suite.

2016-12-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modules.10-use/030-use.exp,
  testsuite/modules.10-use/031-append.exp,
  testsuite/modules.10-use/040-load.exp,
  testsuite/modules.10-use/070-unuse.exp,
  testsuite/modules.50-cmds/015-use.exp,
  testsuite/modules.50-cmds/017-use-undo.exp,
  testsuite/modules.50-cmds/020-setenv.exp,
  testsuite/modules.50-cmds/022-setenv-eschars.exp,
  testsuite/modules.50-cmds/030-unsetenv.exp,
  testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.50-cmds/075-alias.exp,
  testsuite/modules.50-cmds/076-alias-sub.exp,
  testsuite/modules.50-cmds/086-info-shells.exp,
  testsuite/modules.50-cmds/089-info-type.exp,
  testsuite/modules.50-cmds/195-load-recurs.exp,
  testsuite/modules.50-cmds/197-load-lots.exp,
  testsuite/modules.50-cmds/200-break.exp,
  testsuite/modules.50-cmds/220-continue.exp,
  testsuite/modules.50-cmds/230-loop.exp,
  testsuite/modules.50-cmds/240-chdir.exp,
  testsuite/modules.50-cmds/250-x-resource.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.91-sort/040-load.exp,
  testsuite/modules.95-version/020-load.exp,
  testsuite/modules.95-version/020-unload.exp,
  testsuite/modules.95-version/022-load2.exp,
  testsuite/modules.95-version/022-unload2.exp,
  testsuite/modules.95-version/040-xgetenv.exp: Enclose tcl variable set
  within double quotes  When modules is used within Tcl code, value to set to
  a variable were previously "double quote escaped" but not enclosed by double
  quotes at set time.  By enclosing values with double quotes, complex values
  can be managed like for instance those including whitespaces.  Fix all
  Tcl-relative non-regression tests in testsuite.

  * modulecmd.tcl, notdone/modules.50-cmds/022-setenv-eschars.exp,
  testsuite/modules.50-cmds/022-setenv-eschars.exp: Fix perl quoting style for
  variable set  Import 'setenv-eschars' test in 50-cmds suite and by the way
  fix quoting style for perl when setting variable. Single quotes are used to
  set variable, so single quotes should be escaped rather than double quote.

2016-12-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, notdone/modules.50-cmds/017-use-undo.exp,
  testsuite/modules.50-cmds/017-use-undo.exp: Call unuse instead of use on
  module unload  When modulefiles define 'module use' calls, 'module unuse' is
  called when current mode is 'unload'. No change made to 'module unuse'
  calls, 'module unuse' is also called when mode is 'unload' (same behavior as
  'module unload').  On 'display' mode, 'module use' and 'module unuse' calls
  are now reported (displayed).  Import 'use-undo' tests in 50-cmds suite.

  * notdone/modules.50-cmds/070-alias-proc.exp,
  notdone/modules.50-cmds/075-alias.exp,
  notdone/modules.50-cmds/076-alias-sub.exp,
  notdone/modules.50-cmds/077-alias-undo.exp,
  notdone/modules.50-cmds/140-system.exp,
  testsuite/modules.50-cmds/075-alias.exp,
  testsuite/modules.50-cmds/076-alias-sub.exp,
  testsuite/modules.50-cmds/077-alias-undo.exp: testsuite: import 'alias'
  tests in 50-cmds suite

2016-12-04  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * notdone/modules.50-cmds/090-uname-proc.exp,
  testsuite/modules.50-cmds/090-uname-proc.exp,
  .../modules.50-cmds/095-uname.exp,
  .../modules.50-cmds/099-uname-cleanup.exp: testsuite: import 'uname' tests
  in 50-cmds suite

2016-11-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, notdone/modules.50-cmds/220-continue.exp,
  notdone/modules.50-cmds/230-loop.exp,
  testsuite/modules.50-cmds/220-continue.exp,
  testsuite/modules.50-cmds/230-loop.exp: Fix use of 'continue' command in
  modulefile  This commit also add continue-specific non-regression tests in
  modules.50-cmds suite.

  * modulecmd.tcl, notdone/modules.50-cmds/240-chdir.exp,
  testsuite/modules.50-cmds/240-chdir.exp: Add support for 'chdir' command in
  modulefile  This commit also add chdir-specific non-regression tests in
  modules.50-cmds suite.

  * modulecmd.tcl, notdone/modules.50-cmds/200-break.exp,
  testsuite/modules.50-cmds/200-break.exp: Fix use of 'break' command in
  modulefile  This commit also add break-specific non-regression tests in
  modules.50-cmds suite.

2016-11-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modulefiles/averssort/.modulerc,
  testsuite/modules.90-avail/030-multiple.exp,
  testsuite/modules.90-avail/040-wild.exp,
  testsuite/modules.90-avail/050-long.exp,
  testsuite/modules.90-avail/060-empty.exp,
  testsuite/modules.91-sort/010-init_ts.exp,
  testsuite/modules.91-sort/020-avail.exp,
  testsuite/modules.91-sort/030-whatis.exp,
  testsuite/modules.91-sort/999-cleanup.exp: testsuite: improve 90-avail and
  91-sort for alias/version  Add tests to 90-avail and 91-sort suites to check
  correct display of aliases and versions on module avail command.

2016-11-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: No display of modulepath header if no module found in it
  On module avail, search and aliases commands the header for modulepath where
  no module has been found (because there is no module, alias or version in
  them or nothing matches current search expression) is not displayed anymore.

2016-10-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Remove call to cmdModuleAliases when asked for avail
  Module aliases are now displayed along regular modulefiles when
  cmdModuleAvail is processed. Thus call to cmdModuleAliases is now useless
  when avail action is asked.

2016-10-26  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Display aliases set in global/user modulerc on avail  Fill
  a g_rcAlias array with all aliases defined from the global or user modulerc.
  Then adapt listModules procedure to be able to display only the aliases
  defined from the global or user modulerc (no directory lookup) when search
  argument is set to "rc_alias_only".  cmdModuleAvail now starts by displaying
  aliases set in the global or user-specific modulerc in a dedicated
  "global/user modulerc" list.  By doing so all aliases defined are now
  displayed on module avail output (even those defined in the global or user
  modulerc).

2016-10-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modules.90-avail/050-long.exp: Include aliases as
  part of listModules results  Adapt listModules procedure to include to the
  results returned all the module aliases defined through the analyzed
  directory. By doing so a module avail or search commands automatically
  return all the aliases defined in addition to regular modulefiles to get a
  complete view of what is available.  In module-alias procedure the full path
  name of the file that declared an alias is registered in a g_sourceAlias
  array. In listModules this array is looked at to distinguish the aliases
  coming from the currently analyzed directory.  Aliases are displayed from
  the module path where they are defined. A "@" symbol is appended to the
  alias name, in the same way module-version are displayed, in order to be
  able to distinguish an alias from a regular modulefile. "@" has been
  retained as symbol to qualify module aliases as this symbol is used by "ls"
  command to qualify symbolic links.  When --long display format is asked, the
  target of the alias is printed after the alias name. No last modification
  time is displayed as it has no meaning for a module alias.

2016-10-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Fix default module test based on '(default)' tag  As
  default tag may not be the only one tag applying to a module (other versions
  may also be part of the tag list), default version tests, that were only
  comparing the '(default)' string, have been adapted to correctly handle
  cases where multiple tags apply to a default module.  On
  resolveModuleVersionOrAlias procedure, test on '(default)' string has simply
  been removed since name passed to the procedure does not contain anymore
  tags in any situation.  On getSimplifiedLoadedModuleList procedure, call to
  listModules procedure has been revised to only ask for default versions,
  this way there is no need to test a '(default)' string since all results
  returned are default versions.

2016-10-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modules.90-avail/050-long.exp: Handle
  show_modtimes directly in listModules  Adapt cmdModuleAvail and listModules
  procedures to handle show_modtimes treatment directly within listModules
  rather than in cmdModuleAvail. This way there is no need to loop over
  listModules results and call getPathToModule on each of them. File location
  is already known by listModules, so file modification time query is easy to
  make there.  As a consequence avail long output is directly managed by
  listModules. This output structure has been improved to let more space to
  display module tag list. Moreover when terse mode is used, tag list is no
  more separated by a space from module name (same behavior as C-version).
  Align list and savelist long output the improved output structure applied to
  avail long output.

2016-10-12  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Make listModules show_flags even when filter set  Previous
  listModules code was not complying with the show_flags directives when a
  filter were set like "onlydefaults" or "onlylastest". This commit improves
  this by centralizing the code handling the show_flags directives.

2016-10-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Merge listModules proc flag_default_* args  Simplify
  management of flag_default_dir and flag_default_mf arguments of listModules
  procedure by merging both args in a show_flags argument and set local value
  for reporting flags of directories or modulefiles based on the value of this
  show_flags argument and global variables flag_default_dir and
  flag_default_mf.

  * modulecmd.tcl: Remove listModules proc full_path argument  Simplify
  listModules procedure by removing the full_path argument that was in all
  cases disabled.

2016-10-08  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Render error on display/help command  Add error rendering
  directive when calling display or help commands as they can hit a magic
  cookie or a not found errors when processing name passed as argument.

2016-09-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Fix module-info symbols resolution  Return all symbols
  defined by calling the getVersAliasList procedure.  This procedure has been
  enhanced to first attempt an alias resolution on the name passed to it. Then
  each time a version or a default is found a recursive call is made on this
  new name to get all versions or default linked to the initial name.
  getVersAliasList has also been enhanced to pass and get a list of already
  resolved symbols for the current resolution in order to detect infinite
  resolution loop.  Results returned by getVersAliasList are now sorted using
  the dictionnary-style sort as already performed by listModules.  All these
  improvements made to the getVersAliasList will benefit to the listModules
  procedure so "avail" command will return more accurate versions and default
  information.

2016-09-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Improve .modulerc/.version handling in getPathToModule
  Adapt getPathToModule to parse .modulerc file at each level of the specified
  module in order to be able to resolve any alias that may be defined within
  the module directories. Means if module name "mod/sub1/sub2" is passed to
  getPathToModule, the procedure will parse any .modulerc file in "mod",
  "mod/sub1" and "mod/sub1/sub2" directories (if these dirs exist) then it
  will attempt to resolve module name with aliases and version found.  To
  behave like Modules-C, if both a .modulerc and a .version file exist for the
  module name passed to getPathToModule, .modulerc is parsed then .version. In
  this situation a default value set from .version will win over a default
  value set in .modulerc. Same kind of change has been applied to the
  listModules procedure.  A new argument named "search" has been added to the
  listModules procedure to be able when called by getPathToModule with a
  "no_depth" value to only get the content of a directory and not its sub
  elements as sub-directory resolution, .modulerc and .version are handled
  within getPathToModule.

2016-09-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Fix module-info version resolution  Call for
  resolveModuleVersionOrAlias procedure to deeply resolve name provided by
  recursively looking at alias or version structures.  Also improve
  module-version procedure to raise a warning message in case of duplicate
  version symbol is found.

2016-09-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Fix module-info alias resolution  Call for
  resolveModuleVersionOrAlias procedure to deeply resolve name provided by
  recursively looking at alias structures.  Improvement is made here to the
  resolveModuleVersionOrAlias procedure in order to be able to only look for
  alias (and not alias and version) when attempting resolution.  A g_aliasHash
  array is introduced here to be able to reversely look at alias definition as
  Modules-C does. module-alias procedure has been adapted to fill this new
  structure and resolveModuleVersionOrAlias makes use of it if alias is
  searched and not found in g_moduleAlias array.

2016-09-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Register alias and version by the short module name  Store
  aliases and versions by the short module name rather than full module path
  to get closer to the Modules-C behavior on alias and version management. As
  a consequence an alias defined in a module path can apply to a module stored
  in another module path. But this behavior is required to make alias defined
  in global modulerc functional.  A getModuleNameVersion procedure is
  introduced to determine with a name provided as argument the corresponding
  module name, version and name/version. Module name is guessed from current
  module name when shorthand version notation is used. Both name and version
  are guessed from current module if name provided is empty.

2016-09-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Improve resolveModuleVersionOrAlias proc to detect loop
  Adapt resolveModuleVersionOrAlias procedure to resolve only one name at a
  time and pass a list of already resolved symbols for the current resolution
  in order to detect infinite resolution loop.  When infinite resolution loop
  is detected error message is raised and returned value is set to "*undef*"
  to behave like Modules C-version.

2016-09-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Remove useless alias/version resolution in module proc
  Aliases and versions are solved when getPathToModule proc is called and
  getPathToModule is called by all command proc that need to resolve an alias
  or a version.  So alias and version resolution is not required at the
  beginning of the module procedure. Resolving any argument to the module
  procedure as alias or version was also potentially erroneous.

2016-09-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Source $MODULERCFILE/modulerc when $MODULERCFILE is dir  In
  order to behave like C-version, if the $MODULERCFILE variable is set and
  points to a directory, source the "modulerc" file in it instead of trying to
  source the directory (which led to error).

2016-09-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * .../modules.20-locate/010-init_ts.exp,
  .../modules.20-locate/020-fqual.exp, .../modules.20-locate/030-defvers.exp,
  .../modules.20-locate/040-alias.exp, .../modules.20-locate/045-symvers.exp,
  .../modules.20-locate/046-getsym.exp, .../modules.20-locate/047-symerrs.exp,
  .../modules.20-locate/048-symexec.exp, .../modules.20-locate/050-locrc.exp,
  .../modules.20-locate/055-locrcerrs.exp, .../modules.20-locate/060-rc.exp,
  .../modules.20-locate/065-rcerrs.exp, .../modules.20-locate/070-homerc.exp,
  .../modules.20-locate/095-cleanup.exp: testsuite: import and adapt 20-locate
  tests  Import the 20-locate test directory in use in Modules-C testsuite,
  that was previously put aside for Modules-TCL. Adapt syntax of tests and
  results to fit the output of Modules-TCL which sometimes slightly differ
  from the C version.  At this stage, most of the tests from this 20-locate
  directory are failling as aliases and versions support in Modules-TCL is not
  as complete as it is in C version. Next commits will close the gap between
  the two Modules flavors.

2016-09-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.80-deep/020-load.exp,
  testsuite/modules.90-avail/030-multiple.exp,
  testsuite/modules.90-avail/040-wild.exp: testsuite: fixing deep/020,
  avail/030 and avail/040  * Fix typo error on 80-deep/020-load test
  (incorrect result were expected) * Adapt 90-avail/030-multiple result syntax
  not to conflict with regular expression special character like '(' * Adapt
  90-avail/040-wild to use terse mode to not be dependent of local terminal
  size

2016-11-11  Kent Mein <mein@cs.umn.edu>

  * modulecmd.tcl, testsuite/modules.90-avail/030-multiple.exp,
  testsuite/modules.90-avail/040-wild.exp: Make it so you can do module avail
  un  Also fixed a couple of test cases.

2016-11-03  Kent Mein <mein@cs.umn.edu>

  * init/.gitignore, init/Makefile, modulecmd.tcl, testsuite/not_installed:
  Added missing fish shell to init Makefile  In the process saw a typo in
  not_installed fixed that as well. Also updated the .gitignore file.  This
  bug was found by Michael Gooch.

2016-08-27  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Compare strings with 'eq' instead of '==' in
  execute-modulefile  '==' operator is meant for numerical comparison so it is
  more correct and faster to use 'eq' operator when comparing strings.

  * modulecmd.tcl, testsuite/modules.00-init/071-args.exp: Check each command
  receives the correct number of arg  Improve module procedure to check for
  each module command that the correct number of argument are provided. If an
  unexpected number of argument is provided an error is raised as when an
  invalid command name is specified. This way module exit with an error code
  and an error is rendered in order to be checked from the shell.

2016-08-21  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modules.90-avail/020-single.exp: Improve
  column-mode in displayElementList  Change way to compute rows*cols display
  grid in order to maximize the number of column to display per line. To do so
  a width is computed for each column instead of having each column width
  based on the largest one.  The new code takes a bit more time to proceed (as
  there is more stuff to compute) but the additionnal time taken is not really
  discernable from the user perspective: on a 'module avail' containing ~10
  paths and ~400 modulefiles, there is less than 0.1 second extra time.  As
  display is now denser, two spaces are now used instead of one to separate
  elements.  Thanks to Aurelien Degremont for crafting the right algorithm for
  this.

  * modulecmd.tcl, testsuite/modules.91-sort/030-whatis.exp: Merge list
  printing codes under displayElementList  Set a common procedure to manage
  the display of list of elements: displayElementList. Lists can be displayed
  in a column fashion or with only one element per line. Elements displayed
  may be prefixed by their number. Also a header can be printed on top of the
  list.  Adapt cmdModuleList, cmdModuleSavelist, cmdModuleSearch,
  cmdModuleAvail and cmdModuleAliases to use this new procedure.  With a
  single set of code to manage this aspect it will be easier to improve it and
  all commands calling it will automatically benefit from these improvements.

2016-08-20  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modules.00-init/015-version.exp,
  testsuite/modules.00-init/090-switches.exp: Put all command-line parsing
  under catch protection  Make command-line option parsing benefit from the
  catch (+reportError +exit 1) applied to command parsing and running. This
  way it produces same kind of error behavior when an invalid option is typed
  as when an invalid command is typed.  Also put shell name parsing first in
  order to be able to renderError appropriately when an invalid option is
  typed. Elsewhere the puts of /bin/false on stdout was not made as no shell
  were set.  An invalid option containing only one '-' as first character will
  now also produces an error. Before that only invalid options starting with
  '--' were treated as error.  Improve testsuite on option treatment. Test
  long and short versions of these options and test the returned output.

2016-08-19  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modules.00-init/070-command.exp,
  testsuite/modules.00-init/090-switches.exp: Merge main command handling in
  module proc  Make module command handling appear in a single location, the
  module procedure, rather than having a duplication of code in the main
  section.  This modification simplifies the addition of new commands or the
  adaptation of existing commands as everything has to be done only once.  Now
  calling module from a modulefile or a modulerc benefits from the same
  command shortcuts than when it is called from the command line.  Moreover do
  not print anymore the module usage message when an invalid command is typed,
  as this large message often hide the error printed on the first line. An
  advice to type "module --help" is printed instead.

  * modulecmd.tcl: Simplify parsing of command switch arguments

  * modulecmd.tcl: Harmonize usage of exit when error occurs  When error
  occurs and exit is called, always quit with the same error code: 1.  Add a
  call to "exit 1" when error is caught in main section when processing module
  command.  Remove use of exit in cmdModuleInit procedure, replaced by call to
  reportErrorAndExit, which will be caught at top level and go through the
  "exit 1" added above.  End main section with an "exit 0" to explicit
  everything went well.

  * modulecmd.tcl: Harmonize reportErrorAndExit messages  As done for the
  other report* procedures, here we harmonize some reportErrorAndExit messages
  to something simpler and clearer.  There is no need to make
  reportErrorAndExit call to reportError instead of using "error" build-in
  proc since error proc raise a message which is caught and output by
  reportError in the end.

2016-08-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Standardize reportInternalBug procedure  Adapt
  reportInternalBug procedure to make it call "report" rather than
  re-implementing a "puts stderr" procedure. This way all messages printed to
  stderr pass through the "report" procedure.  Take also this opportunity to
  standardize some messages to something simpler and clearer.

  * modulecmd.tcl, testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.10-use/030-use.exp,
  testsuite/modules.10-use/031-append.exp: Standardize reportError procedure
  Add an "ERROR: " prefix to all messages put through reportError to make
  these error messages look similar.  Take also this opportunity to
  standardize all error messages to this new single prefix, moving away from
  the inherited "+(0):ERROR:0: " prefix to something simpler and clearer.

  * modulecmd.tcl: Standardize reportWarning procedure  Adapt reportWarning
  procedure to make it call "report" rather than re-implementing a "puts
  stderr" procedure. Also add a "WARNING: " prefix to all messages put through
  reportWarning to make this procedure different from the report procedure.
  Take also this opportunity to standardize some warning messages and to
  change some 'reportError "WARNING' calls into reportWarning calls where it
  was not necessary to raise the error counter (as it is warnings not errors).

  * modulecmd.tcl: Remove setup of global variables not accessed in procs

  * modulecmd.tcl: Add short option -d for --delim on prepend-path

2016-08-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modules.00-init/030-shells.exp: Introduce
  getModulePathList proc  Defines a getModulePathList procedure that returns a
  list of the module paths by parsing the MODULEPATH environment variable.
  This new procedure enables to gather in a single location the code to parse
  MODULEPATH, thus it removes the need for many procedures to know about "env"
  and "g_def_separator" global variables.  getModulePathList procedure also
  enables with its "behavior" parameter to directly exit on error when
  MODULEPATH is not set. By default, it returns an empty list. The
  "exiterronundef" behavior allows to closely match previous behavior, when
  $env(MODULEPATH) were accessed without being defined.

  * modulecmd.tcl: Introduce getLoadedModuleList proc  Defines a
  getLoadedModuleList procedure that returns a list of the loaded modules by
  parsing the LOADEDMODULES environment variable.  This new procedure enables
  to gather in a single location the code to parse LOADEDMODULES, thus it
  removes the need for many procedures to know about "env" and
  "g_def_separator" global variables.

  * modulecmd.tcl: Remove separator optional parameter where useless  An
  optional parameter named "separator" was specified on many procedures but
  calls to these procedures never set this parameter. This commit removes
  these unused "separator" parameters to improve code clarity and it will help
  to provide in further commits generic procedures to access environment
  state.

2016-08-16  Romain Fihue <romain.fihue@cea.fr>

  * modulecmd.tcl, testsuite/home/.module/{coll4 => coll4.target},
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/020-savelist.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/050-saverm.exp,
  testsuite/modules.61-coll/060-saveshow.exp,
  testsuite/modules.61-coll/999-cleanup.exp: Introduce collection target
  concept  Collection directory may sometimes be shared on multiple machines
  which may use different modules setup. For instance modules users may access
  with the same HOME directory multiple systems using different OS versions.
  When it happens a collection made on machine 1 may be erroneous on machine
  2.  To handle this use case, we introduce here the concept of target for
  module collections. By setting the MODULES_COLLECTION_TARGET environment
  variable to something that can make a distinction between machines that are
  incompatible with each other, only collections matching this target will be
  valid on it.  When a target is set, only the collections made for that
  target will be available to restore, list, show, rm, and saving will
  register the target footprint (collection filename will be suffixed with
  ".$env(MODULES_COLLECTION_TARGET)". Collection target is not involved when
  collection is specified as file path on show, restore and save commands.
  For example, the MODULES_COLLECTION_TARGET variable may be set with results
  from commands like lsb_release, hostname, dnsdomainname, etc.

2016-08-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/bash_completion, init/tcsh_completion, modulecmd.tcl,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/060-saveshow.exp,
  testsuite/modules.61-coll/999-cleanup.exp: Introduce saveshow command  Gives
  the ability to display the content of a given collection.  61-coll testsuite
  is adapted to test this new command.

2016-08-10  Romain Fihue <romain.fihue@cea.fr>

  * modulecmd.tcl, testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/050-saverm.exp,
  testsuite/modules.61-coll/999-cleanup.exp: Save and restore collection
  specified as file path  Until now, it was only possible to save and restore
  a collection located in default collection directory (under $HOME/.module).
  With this commit, a file path can be specified to the save and restore
  commands.  On the contrary, saverm command has been enforced to use a name
  to target the collection to remove in order to avoid this command to be able
  to delete any file.  61-coll testsuite is adapted to test this new use case.

2016-08-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/bash_completion, init/tcsh_completion, modulecmd.tcl,
  testsuite/modules.61-coll/050-saverm.exp: Introduce saverm command  Gives
  the ability to remove a given collection (it deletes corresponding file)
  61-coll testsuite is adapted to test this new command.

2016-08-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Refactor collection code a little bit  Introduce a
  getCollectionFilename procedure to query collection filename and simplify
  error management code in cmdModuleSave and cmdModuleRestore to improve code
  readability.  Also set separate procedures to generate the content of a
  collection (formatCollectionContent procedure) and to read a collection file
  (readCollectionContent procedure) in order to prepare further enhancements
  on module collections.

2016-08-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Make use of lassign build-in proc  lassign build-in
  procedure has been introduced in Tcl8.5 and provides an easier way to manage
  list results like those returned by getPathToModule and
  getMovementBetweenList.  For compatibility with Tcl8.4 and earlier, a
  lassign procedure is provided here (set if not defined). See [1] for an
  overview of lassign implementations and performances.  [1]
  http://wiki.tcl.tk/1530

2016-08-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/home/.module/coll2: Restore collection with
  multiple mods specified on single line  Sometimes people manually edit their
  collection and may be tempted to specify multiple modules to load or
  multiple paths to use on a single line, for instance:  module use --append
  path1 path2 module load mod1 mod2 mod3  This commit makes this use case
  possible by splitting content read from collection file.  61-coll testsuite
  has been adapted to test this use case (collection "coll2" has been changed
  to use this kind of syntax).

2016-08-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/home/.module/coll4,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/020-savelist.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/999-cleanup.exp: Fix restore when there is no
  module to load in collection  Some uninitialized variable was causing issue
  when trying to restore a collection not defining any module to load.
  modules.61-coll testsuite has been adapted accordingly by introducing a
  "coll4" collection that only set paths to use, no module to load.  Thanks to
  Nicolas Wiart for pointing this out.

2016-08-07  Aurelien Cedeyn <aurelien.cedeyn@cea.fr>

  * modulecmd.tcl, testsuite/home/.module/coll3,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/020-savelist.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/999-cleanup.exp: Fix restore when collection fully
  rewind module paths  When restoring a collection which requires to unuse all
  currently set module paths before adding new ones, it previously raised
  error trying to access the empty env(MODULEPATH) variable.  Fix that and
  work-around getSimplifiedLoadedModuleList procedure with helper list
  provided as argument to be able to compute simplified version of loaded
  modules even if there is no MODULEPATH set to look at all existing versions
  for a module.  modules.61-coll testsuite has been adapted accordingly by
  introducing a "coll3" collection that requires to unuse all previously
  loaded paths when restoring.

2016-08-07  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/home/.module/coll1, testsuite/home/.module/coll2,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/999-cleanup.exp: Correctly restore multiple paths
  with order preservation  cmdModuleUse prepends paths by default so
  cmdModuleRestore command was previously prepending new paths instead of
  appending them. To guaranty path order cmdModuleRestore now calls
  cmdModuleUse with --append flag by default.  To keep the ability to directly
  source a collection file from a shell, now cmdModuleSave adds --append flag
  to the 'module use' lines it records. cmdModuleRestore treats this flag if
  present, but adds --append if no flag found to keep compatibility with
  previously generated collections.  modules.61-coll testsuite is adapted
  accordingly to test collections containing more than one module path and to
  test previous and new style of 'module use' recorded lines.

2016-08-06  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modules.61-coll/030-save.exp: Raise error if try
  to save an empty environment

  * testsuite/home/.module/coll1, testsuite/home/.module/coll2,
  testsuite/home/.module/default, testsuite/modulefiles/coll/a,
  testsuite/modulefiles/coll/b, testsuite/modulefiles/coll/c,
  testsuite/modulefiles/coll/d, testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.61-coll/010-init_ts.exp,
  testsuite/modules.61-coll/020-savelist.exp,
  testsuite/modules.61-coll/030-save.exp,
  testsuite/modules.61-coll/040-restore.exp,
  testsuite/modules.61-coll/999-cleanup.exp: testsuite: add tests for
  collection management  Introduce modules.61-coll testsuite to guaranty that
  savelist, save and restore commands behave appropriately.  Add
  testoutfile_cmd procedure to 00-init/006-procs to get the ability to check
  module command output and specified file content. This new procedure enables
  to check content of collection generated by a 'save' command.

2016-07-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modulefiles/info/shellsexp,
  testsuite/modules.00-init/030-shells.exp,
  testsuite/modules.00-init/080-begenv.exp,
  testsuite/modules.10-use/030-use.exp,
  testsuite/modules.10-use/031-append.exp,
  testsuite/modules.10-use/040-load.exp,
  testsuite/modules.10-use/070-unuse.exp,
  testsuite/modules.50-cmds/015-use.exp,
  testsuite/modules.50-cmds/020-setenv.exp,
  testsuite/modules.50-cmds/030-unsetenv.exp,
  testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.50-cmds/086-info-shells.exp,
  testsuite/modules.50-cmds/087-info-shells-exp.exp,
  testsuite/modules.50-cmds/089-info-type.exp,
  testsuite/modules.50-cmds/195-load-recurs.exp,
  testsuite/modules.50-cmds/197-load-lots.exp,
  testsuite/modules.50-cmds/250-x-resource.exp,
  testsuite/modules.91-sort/040-load.exp,
  testsuite/modules.95-version/020-load.exp,
  testsuite/modules.95-version/020-unload.exp,
  testsuite/modules.95-version/022-load2.exp,
  testsuite/modules.95-version/022-unload2.exp,
  testsuite/modules.95-version/040-xgetenv.exp: testsuite: add tests for fish
  shell

  * init/fish.in, modulecmd.tcl: Support for fish shell

2016-07-28  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/030-shells.exp,
  testsuite/modules.00-init/080-begenv.exp,
  testsuite/modules.10-use/040-load.exp,
  testsuite/modules.10-use/070-unuse.exp,
  testsuite/modules.50-cmds/015-use.exp,
  testsuite/modules.50-cmds/020-setenv.exp,
  testsuite/modules.50-cmds/030-unsetenv.exp,
  testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.91-sort/040-load.exp,
  testsuite/modules.95-version/020-load.exp,
  testsuite/modules.95-version/020-unload.exp,
  testsuite/modules.95-version/022-load2.exp,
  testsuite/modules.95-version/022-unload2.exp,
  testsuite/modules.95-version/040-xgetenv.exp: testsuite: add tests for
  tcl/python/lisp where perl is tested

2016-07-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * notdone/modules.50-cmds/086-info-shells.exp,
  notdone/modules.50-cmds/087-info-shells-exp.exp,
  testsuite/modulefiles/info/shellsexp,
  testsuite/modules.50-cmds/086-info-shells.exp,
  testsuite/modules.50-cmds/087-info-shells-exp.exp,
  .../modules.50-cmds/121-prereq-module.exp: testsuite: adapt
  50-cmds/info-shells and 50-cmds/121-prereq tests

  * testsuite/modulefiles/info/type, testsuite/modulefiles/load/.version,
  testsuite/modulefiles/load/00, testsuite/modulefiles/load/10,
  testsuite/modulefiles/load/11, testsuite/modulefiles/load/12,
  testsuite/modulefiles/load/13, testsuite/modulefiles/load/14,
  testsuite/modulefiles/load/15, testsuite/modulefiles/load/16,
  testsuite/modulefiles/load/17, testsuite/modulefiles/load/18,
  testsuite/modulefiles/load/19, testsuite/modulefiles/load/20,
  testsuite/modulefiles/load/21, testsuite/modulefiles/load/22,
  testsuite/modulefiles/load/23, testsuite/modulefiles/load/24,
  testsuite/modulefiles/load/25, testsuite/modulefiles/load/26,
  testsuite/modulefiles/load/27, testsuite/modulefiles/load/28,
  testsuite/modulefiles/load/29, testsuite/modulefiles/load/30,
  testsuite/modulefiles/load/all, testsuite/modulefiles/recurs/modA,
  testsuite/modulefiles/recurs/modB, testsuite/modules.10-use/030-use.exp,
  testsuite/modules.10-use/031-append.exp,
  testsuite/modules.50-cmds/089-info-type.exp,
  testsuite/modules.50-cmds/195-load-recurs.exp,
  testsuite/modules.50-cmds/197-load-lots.exp: testsuite: import tests
  recently added to C-version

  * modulecmd.tcl: Add short option -d for --delim on append-path/remove-path

2016-07-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/home/.Xresources, testsuite/modulefiles/x-resource/1,
  testsuite/modules.50-cmds/250-x-resource.exp: testsuite: add tests and
  relative configs for x-resource  Add 250-x-resource tests in 50-cmds serie
  to check x-resource commands in modulefile are correctly interpreted at load
  and unload times for the various shells.  A x-resource/1 modulefile and a
  .Xresources config files are added to test various setting conditions
  (single resource string, complex string content, resource file to load).

  * modulecmd.tcl: Implement unload of x-resources and fix load  Implement
  unload action of x-resources defined for all shells. Unload of x-resources
  is done by clearing string resource values with "xrdb -merge" since there is
  no xrdb command that can clear one property (xrdb -remove clears
  everything). For resources loaded from file, file content is parsed with
  "xrdb -load" and each property it defines is also cleared.  This commit also
  corrects the way x-resource value is parsed. Sometimes x-resource value may
  be provided within resource name as the "x-resource {Ileaf.popup.saveUnder:
  True}" example provided in manpage. So if no value is provided, resource
  name is looked at to check if a value is provided within string (space or
  colon are looked at).  Load of x-resources is also fixed by this commit for
  sh, csh and tcl to handle resource name and value containing wildcard
  characters and fixed for sh and csh to output well-behaving code to execute
  ("echo | xrdb -merge" instead of "xrdb -merge <<EOF")

2016-07-22  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/python.in, modulecmd.tcl: Fix Python autoinit, error and x-resource
  rendering  Python code used to define the module command (autoinit action)
  was broken (syntax errors) and not Python3-compatible. Error rendering is
  also fixed here for Python3 compliance. Code used to process x-resource is
  adapted to comply with Python recommendation [1] (subprocess.Popen should be
  used instead of os.popen).  Python init script is also modified by this
  commit to use same code as the one generated by autoinit action with call to
  subprocess.Popen rather than os.popen.  [1]
  https://docs.python.org/2/library/os.html#os.popen

2016-07-18  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Replace reverseList proc by lreverse build-in proc
  lreverse build-in procedure has been introduced in Tcl8.5 and provides best
  performances. For compatibility with Tcl8.4 and earlier, a lreverse
  procedure is provided here (set if not defined). See [1] for an overview of
  lreverse implementations and performances.  [1] http://wiki.tcl.tk/17188

  * modulecmd.tcl: Fix dollar sign usage on XRDBPIPE variable

  * .gitignore: Ignore runtest result files in git repository

2016-07-17  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Use 'eq'/'ne' in place of '=='/'!=' to compare strings
  '==' and '!=' operators are meant for numerical comparison so it is more
  correct and faster to use 'eq' or 'ne' operators when comparing strings.
  This was found using the 'ttclcheck' utility [1] over the modulecmd.tcl
  complete code.  [1] http://www.xdobry.de/ttclcheck

2016-07-15  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Remove code regarding undefined g_aliasHash array  Some
  code where present in module-alias proc regarding a g_aliasHash global
  array. But this array variable is not defined nor used anywhere else in
  script.

  * modulecmd.tcl: Remove unused spaceEscaped proc

2016-07-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Introduce reportDebug proc  Add a reportDebug procedure to
  simplify and harmonize debug report management. With this new procedure, the
  way to test if debug is enabled or not is found only in one place (and
  g_debug variable does not have to be known in every procedures).

  * testsuite/modules.50-cmds/140-system.exp,
  testsuite/modules.95-version/040-xgetenv.exp: testsuite: comment
  cmds/140-system and version/040-xgetenv  Skip both cmds/140-system and
  version/040-xgetenv tests since pure-Tcl version of module does not behave
  like C version for "system" procedure and "live" resolution of variables set
  within paths.

2016-07-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Add hints for vim to correctly set tabs when developping

  * Makefile, testsuite/config/unix.exp: testsuite: fix MODULECMD
  initialization  Update way MODULECMD is defined to let a chance for
  modulecmd.tcl to be found before looking at PATH for modulecmd binary. This
  way on systems where modulecmd is installed in default paths, tests can
  still be run on modulecmd.tcl.  Remove MODULECMD env variable setup in
  Makefile for "make test" since environment variables are not looked at to
  initialize MODULECMD tcl variable when tests are configured.

2016-01-30  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl, testsuite/modulefiles/verssort/1,
  testsuite/modulefiles/verssort/1.10, testsuite/modulefiles/verssort/1.2.1,
  testsuite/modulefiles/verssort/1.2.4,
  testsuite/modulefiles/verssort/1.8-2015-12-01,
  testsuite/modulefiles/verssort/1.8-2016-02-01,
  testsuite/modules.91-sort/010-init_ts.exp,
  testsuite/modules.91-sort/020-avail.exp,
  testsuite/modules.91-sort/030-whatis.exp,
  testsuite/modules.91-sort/040-load.exp,
  testsuite/modules.91-sort/999-cleanup.exp: Always dictionary-sort list of
  modules or collections  Dictionary sort of Tcl enables to determine that a
  version 1.10 is greater that a version 1.8, for instance. This useful kind
  of sort was in use in modules-tcl previously but not for every sort. For
  instance load command was correctly able to find the greatest version of a
  module whereas avail and whatis commands did not sort existing versions
  accordingly.  This patch applies the dictionary sort everywhere to ensure
  the exact same sort is applied everywhere. Dictionary sort appears to be the
  most appropriate kind of sort to work with software versions. So the
  sort_order argument of listModules procedure is removed to always get the
  same sort applied. Also a stringDictionaryCompare procedure is added in
  order to compare two strings with dictionary-sort (useful to know what
  string is greater than the other).  In addition, modules.91-sort testsuite
  is introduced to guaranty that avail, whatis and load commands behave
  appropriately regarding sort.

2016-02-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * testsuite/modules.00-init/030-shells.exp,
  testsuite/modules.50-cmds/040-append.exp: testsuite: fixing init/030-shells
  and cmds/040-append  * Adapt error message when MODULEPATH is empty (message
  differ on this module implementation) on 00-init/030-shells testsuite *
  Adapt 50-cmds/040-append testsuite since adding a bare colon to a path does
  not produce a path change on this module implementation

2015-04-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/bash_completion: Fixing bash completion to be posix compliant  Bash
  Process Substitution is not known by posix sh so _module_not_yet_loaded
  function has been adapted to behave correctly when bash is launched in
  --posix mode.

2016-03-25  Kent Mein <mein@cs.umn.edu>

  * init/python.in: Make things work with python3.

2016-02-05  Kent Mein <mein@cs.umn.edu>

  * modulecmd.tcl: Remove unneeded code that was causing an issue.  Thanks to
  Andy Barber for pointing this out.

2014-12-24  Kent Mein <mein@cs.umn.edu>

  * modulecmd.tcl: Small tweak for OSX.  Uname is in a different location.

  * Makefile, doc/html/module.html, doc/html/modulefile.html,
  doc/man/man1/module.1, doc/man/man4/modulefile.4, doc/source/module.pl,
  doc/source/modulefile.pl: More doc work.

2014-11-12  Kent Mein <mein@cs.umn.edu>

  * doc/html/module.html, doc/html/modulefile.html, doc/man/man1/module.1,
  doc/man/man4/modulefile.4, doc/source/module.pl, doc/source/modulefile.pl:
  Fix some warnings in the documentation from podchecker.

2014-07-16  Kent Mein <mein@cs.umn.edu>

  * doc/html/module.html, doc/man/man1/module.1, doc/source/module.pl: Some
  work on documentation.

  * init/sh.in: Fix the check for interactive vs non interactive mode for some
  shells.

2014-06-05  Kent Mein <mein@cs.umn.edu>

  * doc/LICENSE.LGPL, doc/readme.txt: I talked to R.K. Owen and he cleared up
  why we had the LGPL there.  It turns out specific files in the C version of
  modules are under the LGPL, since those files are not in the tcl only
  version of modules I'm removing the LGPL just to clean things up.  Kent

2014-06-03  Kent Mein <mein@cs.umn.edu>

  * Makefile, doc/html/module.html, doc/html/modulefile.html,
  doc/man/man1/module.1, doc/man/man4/modulefile.4, doc/readme.txt,
  doc/source/module.pl, doc/source/modulefile.pl, man/man1/module.1,
  man/man4/modulefile.4: Create source docs for man pages.  This is still a
  work in progress, but I've converted the current man pages over to pod (perl
  documentation format) The idea being that it's easier to edit and can be
  converted to various formats.  The manpages are very out of date, but this
  at least will encourage me to keep them upto date and make it much easier to
  work with.

2014-05-21  Kent Mein <mein@cs.umn.edu>

  * modulecmd.tcl: Rename some vars used for a named pipe  This affects both
  tcl and perl, and picks a more standard name between the two.

  * testsuite/modules.00-init/090-switches.exp: Update the test for the --help
  option since things have changed.

2014-05-20  Kent Mein <mein@cs.umn.edu>

  * init/.gitignore, init/Makefile, init/tcl.in, modulecmd.tcl: Patch from
  Yao-Ting Chiu  This adds the tcl shell as an option.

2014-05-01  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Clarify prereq error message when multiple modules are
  specified

2014-04-25  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Managing settings to save as a stack with push/pop
  procedures  Manage settings to save as a stack to have a separate set of
  settings for each module loaded or unloaded in order to be able to restore
  the correct set in case of failure.

2014-04-24  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Fixing restoreSettings to clear current arrays  Clear
  current arrays before restoring saved values to remove potential new
  variables set before the issue occurs which lead to restoreSettings
  procedure call.

2014-03-14  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Improving save/restore command when saving module default
  version  Save the modulename minus the module version if loaded version to
  save is module default version.

2014-03-13  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Fixing saveSettings to clear pre-existing saved arrays
  Clear pre-existing saved arrays in saveSettings to guaranty that multiple
  load/unload sequence will restore correct settings when a failure occurs.

2014-03-11  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: Improving restore command behavior  Move from a
  Purge+Unuse+Source approach to a smoother way with Unload+Unuse+Use+Load of
  just the modules and modulepaths needed to migrate from currently loaded
  environment to collection with preservation of the load order.

  * modulecmd.tcl: Reorganizing help page with groups of command and short
  descriptions

2014-03-07  Kent Mein <mein@cs.umn.edu>

  * modulecmd.tcl: Updating the version # wasn't done in the last commit.

2014-02-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * init/bash_completion, init/tcsh_completion, modulecmd.tcl: Introduction of
  save/restore/savelist commands for collection management  Add module
  collection management to enable dump and reload of multiple module
  environment states.

2014-02-14  Kent Mein <mein@cs.umn.edu>

  * contrib/pre-commit, modulecmd.tcl: Added a hook script to automatically
  bump the version #  Of modules to the next commit # so that next time we
  commit changes it will be updated.  This is a little bit tricky because of
  the way pre-commit's work.  (It's making the change for the next commit not
  the current one).

2014-02-12  Kent Mein <mein@cs.umn.edu>

  * contrib/modulefiles/HOME, contrib/modulefiles/dot,
  contrib/modulefiles/module-info, contrib/modulefiles/null,
  init/modulerc.examp: Added in a couple of the default modules I removed
  before.  Also modified the comments in the example modulerc file a little.

  * doc/install.txt, doc/installwin.txt, init/Makefile, init/modulerc.examp,
  modulefiles/.gitignore, modulefiles/HOME, modulefiles/dot,
  modulefiles/module-cvs, modulefiles/module-info, modulefiles/modules,
  modulefiles/notavail, modulefiles/null, modulefiles/use.own,
  modulefiles/version: Change make so it does not create a default modulerc
  And update the documentation so things flow a little better.

2014-02-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: modify list command show_modtimes behavior to match
  behavior of avail command  same specific header and module reporting format.
  gives show_modtimes more priority over show_oneperline.

2014-01-23  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: fix help usage message to correctly align switches

2014-02-09  Xavier Delaruelle <xavier.delaruelle@cea.fr>

  * modulecmd.tcl: fix show_modtimes to correctly display day number

2014-01-16  Kent Mein <mein@cs.umn.edu>

  * modulecmd.tcl: Small patch by Trey Greer  Fixes it so LOADEDMODULES env
  var is initalized correctly when it's set to "".

  * modulecmd.tcl: Fixed a typo.  I introduced a typo in the last commit this
  fixes it.

  * modulecmd.tcl: Fix up the formating a little.

  * init/bash_completion: Another patch from Xavier Delaruelle,  Tweak to the
  bash completion so it works around some extra spacing.

  * init/csh.in, init/tcsh.in, init/tcsh_completion: Another patch by Xavier
  Delaruelle,  This one reworks the patch from Joshua Randall to define tcsh
  completion for the c version so it works with this one.

  * init/bash_completion, modulecmd.tcl: More patches from Xavier Delaruelle,
  Added -D option (short form of --debug) Added -d or --default to only show
  default modules when doing module avail Added -L or --latest to only show
  latest version of modules when doing avail

  * init/bash.in, init/ksh.in, init/sh.in, init/zsh.in: Patch from Xavier
  Delaruelle,  Now only redirect module from stderr to stdout in interactive
  mode to avoid breaking non interactive sessions (scp, sftp, etc).

  * init/bash_completion, modulecmd.tcl: 3 patches from Xavier Delaruelle  Add
  --long and --terse options to help. Fix ModulesDisplay so it works. Fix
  ModulesAlias function so it works as well.

2013-11-06  Kent Mein <mein@cs.umn.edu>

  * contrib/readme.txt, doc/{install => install.txt}, doc/installwin.txt,
  readme.txt: Updated the documentation a bit.

2013-11-04  Kent Mein <mein@cs.umn.edu>

  * init/bash.in, init/ksh.in, init/sh.in, init/zsh.in: Added redirect stderr
  to stdout for shells that support it.

  * init/tcsh.in: Fix a site specific bit that snuck in awhile back.  This
  shouldn't have been here, now it is fixed though.

  * init/bash.in: source the bash_completion script by default.  This is for
  the tcl native version of modules and it just starts using the
  bash_completion script that has been supplied so that it's actually used.

2013-10-19  Kent Mein <mein@cs.umn.edu>

  * doc/example.txt: Some small tweaks to example setup documentation.

2013-08-01  Kent Mein <mein@cs.umn.edu>

  * testsuite/modules.50-cmds/040-append.exp: Fix one of the tests.

  * modulecmd.tcl: Simplify the csh autoinit code.  If this is a problem we
  can add it back in but I'm guessing no one will even notice.

2013-06-06  Kent Mein <mein@cs.umn.edu>

  * modulecmd.tcl: A few patches from Xavier Delaruel to adjust exit codes
  when an error appears.

2013-03-25  Kent Mein <mein@cs.umn.edu>

  * modulecmd.tcl: Introduce MODULECONTACT var, Patch from Xavier Delaruelle
  So you can set the contact info with an environement variable instead of
  altering the modulecmd.tcl file directly.

2013-03-21  Kent Mein <mein@cs.umn.edu>

  * modulecmd.tcl: Clean up some dead code and a little reformating.

  * init/bash_completion: Patch by Xavier Delaruelle to add bash completion.
  You need to source the file in addition to the init/bash file to get it to
  work.

  * modulecmd.tcl: Fixing module help.  Thanks to Xavier Delaruelle for the
  fix.

2013-03-13  Kent Mein <mein@cs.umn.edu>

  * notdone/modules.20-locate/010-init_ts.exp,
  notdone/modules.20-locate/020-fqual.exp,
  notdone/modules.20-locate/030-defvers.exp,
  notdone/modules.20-locate/040-alias.exp,
  notdone/modules.20-locate/045-symvers.exp,
  notdone/modules.20-locate/046-getsym.exp,
  notdone/modules.20-locate/047-symerrs.exp,
  notdone/modules.20-locate/048-symexec.exp,
  notdone/modules.20-locate/050-locrc.exp,
  notdone/modules.20-locate/055-locrcerrs.exp,
  notdone/modules.20-locate/060-rc.exp,
  notdone/modules.20-locate/065-rcerrs.exp,
  notdone/modules.20-locate/070-homerc.exp,
  notdone/modules.20-locate/095-cleanup.exp,
  notdone/modules.50-cmds/017-use-undo.exp,
  notdone/modules.50-cmds/022-setenv-eschars.exp,
  notdone/modules.50-cmds/025-setenv-undo.exp,
  notdone/modules.50-cmds/035-unsetenv-undo.exp,
  notdone/modules.50-cmds/036-unsetenv-x.exp,
  notdone/modules.50-cmds/042-append-delim.exp,
  notdone/modules.50-cmds/045-append-undo.exp,
  notdone/modules.50-cmds/047-app-del-undo.exp,
  notdone/modules.50-cmds/050-prepend.exp,
  notdone/modules.50-cmds/052-prepend-delim.exp,
  notdone/modules.50-cmds/055-prepend-undo.exp,
  notdone/modules.50-cmds/057-pre-del-undo.exp,
  notdone/modules.50-cmds/060-remove.exp,
  notdone/modules.50-cmds/065-remove-undo.exp,
  notdone/modules.50-cmds/070-alias-proc.exp,
  notdone/modules.50-cmds/075-alias.exp,
  notdone/modules.50-cmds/076-alias-sub.exp,
  notdone/modules.50-cmds/077-alias-undo.exp,
  notdone/modules.50-cmds/078-refresh.exp,
  notdone/modules.50-cmds/080-info-name.exp,
  notdone/modules.50-cmds/081-info-user.exp,
  notdone/modules.50-cmds/082-info-user-exp.exp,
  notdone/modules.50-cmds/083-info-mode.exp,
  notdone/modules.50-cmds/084-info-mode-exp.exp,
  notdone/modules.50-cmds/085-info-flags.exp,
  notdone/modules.50-cmds/086-info-shells.exp,
  notdone/modules.50-cmds/087-info-shells-exp.exp,
  notdone/modules.50-cmds/088-info-isloaded.exp,
  notdone/modules.50-cmds/090-uname-proc.exp,
  notdone/modules.50-cmds/095-uname.exp,
  notdone/modules.50-cmds/099-uname-cleanup.exp,
  notdone/modules.50-cmds/100-loglevel.exp,
  notdone/modules.50-cmds/101-badfac.exp,
  notdone/modules.50-cmds/110-verbose.exp,
  notdone/modules.50-cmds/115-verbose-msg.exp,
  notdone/modules.50-cmds/120-prereq-full.exp,
  notdone/modules.50-cmds/121-prereq-module.exp,
  notdone/modules.50-cmds/130-conflict-full.exp,
  notdone/modules.50-cmds/131-conflict-module.exp,
  notdone/modules.50-cmds/140-system.exp,
  notdone/modules.50-cmds/150-module.exp,
  notdone/modules.50-cmds/170-swap.exp, notdone/modules.50-cmds/175-swap2.exp,
  notdone/modules.50-cmds/190-load.exp, notdone/modules.50-cmds/200-break.exp,
  notdone/modules.50-cmds/210-exit.exp,
  notdone/modules.50-cmds/220-continue.exp,
  notdone/modules.50-cmds/230-loop.exp, notdone/modules.50-cmds/240-chdir.exp:
  Added a bunch of test cases that are not put in yet that probably should be.

  * contrib/scripts/createmodule.sh: Add a contributed script to help creating
  inital modules.

2013-03-04  Kent Mein <mein@cs.umn.edu>

  * init/.gitignore: Add modulerc to .gitignore.

  * init/modulerc: Remove the modulerc file because it's built by make and its
  location dependant.

  * doc/example.txt: More work on the example document.

  * modulecmd.tcl: Added module-info type   so it returns "Tcl"

  * modulecmd.tcl: Fix a small problem pointed out by Sergiy Khan  Bug #49 in
  the tracker.

  * doc/example.txt, readme.txt: Small tweaks to the readme and added the
  example document.

  * contrib/modulefiles/compilers/.version,
  contrib/modulefiles/compilers/compilers, contrib/modulefiles/dot,
  contrib/modulefiles/gnu, contrib/modulefiles/java/.version,
  contrib/modulefiles/java/6/.version, contrib/modulefiles/java/6/35,
  contrib/modulefiles/java/6/38, contrib/modulefiles/java/7/.version,
  contrib/modulefiles/java/7/07, contrib/modulefiles/java/7/11,
  contrib/modulefiles/local, contrib/modulefiles/math/mathematica/.version,
  contrib/modulefiles/math/mathematica/7.0.1,
  contrib/modulefiles/math/mathematica/8.0.1, contrib/modulefiles/null,
  contrib/modulefiles/openwin, contrib/modulefiles/perl/.version,
  contrib/modulefiles/perl/5.14.1, contrib/modulefiles/perl/5.8.7,
  contrib/modulefiles/scheme/.version,
  contrib/modulefiles/scheme/drscheme/.version,
  contrib/modulefiles/scheme/drscheme/410,
  contrib/modulefiles/scheme/drscheme/425, contrib/modulefiles/scheme/mit,
  contrib/modulefiles/scheme/racket/.version,
  contrib/modulefiles/scheme/racket/5.0.2,
  contrib/modulefiles/scheme/racket/5.1.1,
  contrib/modulefiles/soft/gcc/.version, contrib/modulefiles/soft/gcc/4.5.2,
  contrib/modulefiles/soft/gcc/4.7.2, contrib/modulefiles/system,
  contrib/modulefiles/user, contrib/scripts/resetenv,
  contrib/scripts/resetgnome, contrib/template/.aliases,
  contrib/template/.bash_profile, contrib/template/.bashrc,
  contrib/template/.cshrc, contrib/template/.fvwm2rc,
  contrib/template/.gconf/apps/%gconf.xml,
  contrib/template/.gconf/apps/evolution/%gconf.xml,
  .../.gconf/apps/evolution/calendar/%gconf.xml,
  .../apps/evolution/calendar/notify/%gconf.xml,
  .../template/.gconf/apps/gconf-editor/%gconf.xml,
  contrib/template/.gconf/apps/gedit-2/%gconf.xml,
  .../.gconf/apps/gedit-2/plugins/%gconf.xml,
  .../apps/gedit-2/plugins/filebrowser/%gconf.xml,
  .../gedit-2/plugins/filebrowser/on_load/%gconf.xml,
  .../.gconf/apps/gedit-2/preferences/%gconf.xml,
  .../.gconf/apps/gedit-2/preferences/ui/%gconf.xml,
  .../gedit-2/preferences/ui/statusbar/%gconf.xml,
  .../.gconf/apps/gnome-power-manager/%gconf.xml,
  .../apps/gnome-power-manager/buttons/%gconf.xml,
  .../.gconf/apps/gnome-screensaver/%gconf.xml,
  .../template/.gconf/apps/gnome-settings/%gconf.xml,
  .../apps/gnome-settings/gnome-panel/%gconf.xml,
  .../template/.gconf/apps/gnome-terminal/%gconf.xml,
  .../.gconf/apps/gnome-terminal/profiles/%gconf.xml,
  .../gnome-terminal/profiles/Default/%gconf.xml,
  .../.gconf/apps/nautilus-open-terminal/%gconf.xml,
  contrib/template/.gconf/apps/panel/%gconf.xml,
  .../template/.gconf/apps/panel/applets/%gconf.xml,
  .../apps/panel/applets/clock_screen0/%gconf.xml,
  .../panel/applets/clock_screen0/prefs/%gconf.xml,
  .../applets/indicator_applet_screen0/%gconf.xml,
  .../apps/panel/applets/mixer_screen0/%gconf.xml,
  .../applets/notification_area_screen0/%gconf.xml,
  .../applets/show_desktop_button_screen0/%gconf.xml,
  .../panel/applets/trashapplet_screen0/%gconf.xml,
  .../panel/applets/window_list_screen0/%gconf.xml,
  .../applets/window_list_screen0/prefs/%gconf.xml,
  .../applets/workspace_switcher_screen0/%gconf.xml,
  .../workspace_switcher_screen0/prefs/%gconf.xml,
  .../template/.gconf/apps/panel/general/%gconf.xml,
  .../template/.gconf/apps/panel/objects/%gconf.xml,
  .../objects/browser_launcher_screen0/%gconf.xml,
  .../objects/clock_separator_screen0/%gconf.xml,
  .../apps/panel/objects/menu_bar_screen0/%gconf.xml,
  .../.gconf/apps/panel/objects/object_0/%gconf.xml,
  .../.gconf/apps/panel/objects/object_1/%gconf.xml,
  .../.gconf/apps/panel/objects/object_2/%gconf.xml,
  .../panel/objects/yelp_launcher_screen0/%gconf.xml,
  .../.gconf/apps/panel/toplevels/%gconf.xml,
  .../toplevels/bottom_panel_screen0/%gconf.xml,
  .../bottom_panel_screen0/background/%gconf.xml,
  .../panel/toplevels/top_panel_screen0/%gconf.xml,
  .../top_panel_screen0/background/%gconf.xml,
  contrib/template/.gconf/desktop/%gconf.xml,
  contrib/template/.gconf/desktop/gnome/%gconf.xml,
  .../.gconf/desktop/gnome/accessibility/%gconf.xml,
  .../gnome/accessibility/keyboard/%gconf.xml,
  .../.gconf/desktop/gnome/applications/%gconf.xml,
  .../gnome/applications/window_manager/%gconf.xml,
  .../.gconf/desktop/gnome/lockdown/%gconf.xml, contrib/template/.login,
  contrib/template/.logout, contrib/template/.mailcap,
  contrib/template/.mime.types, contrib/template/.vim/colors/herald.vim,
  contrib/template/.vim/colors/moria.vim,
  contrib/template/.vim/colors/xoria256.vim,
  contrib/template/.vim/perl-support.zip,
  .../template/.vim/perlsupport/README.perlsupport,
  .../.vim/perlsupport/autoload/perlsupportgui.vim,
  .../perlsupport/autoload/perlsupportprofiling.vim,
  .../.vim/perlsupport/autoload/perlsupportregex.vim,
  .../template/.vim/perlsupport/doc/perlsupport.txt,
  .../template/.vim/perlsupport/ftplugin/perl.vim,
  .../codesnippets/SmallProf-variables.pl,
  .../perl-support/codesnippets/dot.SmallProf,
  .../codesnippets/free-software-comment,
  .../perl-support/codesnippets/module-interface.pl,
  .../perlsupport/perl-support/codesnippets/new.pl,
  .../codesnippets/pod-template-application.pl,
  .../codesnippets/pod-template-module.pl,
  .../print-data-structure-with-Dumper.pl,
  .../perl-support/codesnippets/print-hash-sorted.pl,
  .../perl-support/codesnippets/print-hash.pl,
  ...process-all-files-in-a-directory-recursively.pl,
  .../perl-support/codesnippets/slurp-file.pl,
  .../.vim/perlsupport/perl-support/doc/ChangeLog,
  .../perlsupport/perl-support/doc/perl-hot-keys.pdf,
  .../perlsupport/perl-support/doc/perl-hot-keys.tex,
  .../.vim/perlsupport/perl-support/doc/pmdesc3.text,
  .../perl-support/modules/perl-modules.list,
  .../perl-support/rc/customization.ctags,
  .../perl-support/rc/customization.gvimrc,
  .../perl-support/rc/customization.perltidyrc,
  .../perl-support/rc/customization.smallprof,
  .../perl-support/rc/customization.vimrc,
  .../perlsupport/perl-support/scripts/csv2err.pl,
  .../perlsupport/perl-support/scripts/efm_perl.pl,
  .../perlsupport/perl-support/scripts/pmdesc3.pl,
  .../perlsupport/perl-support/scripts/wrapper.sh,
  .../perlsupport/perl-support/templates/Templates,
  .../perl-support/templates/comments.template,
  .../perl-support/templates/idioms.template,
  .../perl-support/templates/pod.template,
  .../perl-support/templates/statements.template,
  .../perlsupport/perl-support/wordlists/perl.list,
  .../.vim/perlsupport/plugin/perl-support.vim,
  contrib/template/.vim/plugin/matrix.vim,
  contrib/template/.vim/syntax/fluxkeys.vim,
  contrib/template/.vim/syntax/perl.vim, contrib/template/README.dotfiles,
  contrib/template/resetenv.conf, man/man1/module.1, man/man4/modulefile.4:
  Added really old man pages, and a bunch of example things. Still need to
  write some documentation for the contrib stuff and update the man pages.

  * LICENSE.GPL => doc/LICENSE.GPL, LICENSE.LGPL => doc/LICENSE.LGPL,
  README-EMACS.txt => doc/emacs.txt, README.txt => doc/install,
  doc/installwin.txt, readme.txt: Setup some more complicated documentation
  and move existing docs to new dir.

2013-01-22  Kent Mein <mein@cs.umn.edu>

  * modulefiles/{HOME.in => HOME}, modulefiles/Makefile.am,
  modulefiles/{dot.in => dot}, modulefiles/lang/.gitignore,
  modulefiles/lang/.mklang, modulefiles/{module-cvs.in => module-cvs},
  modulefiles/{module-info.in => module-info}, modulefiles/{modules.in =>
  modules}, modulefiles/{notavail.in => notavail}, modulefiles/{null.in =>
  null}, modulefiles/{use.own.in => use.own}, modulefiles/{version.in =>
  version}: Clean up the default modulefiles a bit.  Kent

  * .gitattributes, doc/.gitignore, doc/Makefile.am, doc/Modules-Paper.doc,
  doc/Modules-Paper.pdf, doc/module.1.in, doc/modulefile.4.in: Removed the
  documentation, no need to have it twice. Maybe will work on a way to add it
  back in later...  Kent

  * xref/ModuleCmd_Avail.c.html, xref/ModuleCmd_Avail.c.src.html,
  xref/ModuleCmd_Clear.c.html, xref/ModuleCmd_Clear.c.src.html,
  xref/ModuleCmd_Display.c.html, xref/ModuleCmd_Display.c.src.html,
  xref/ModuleCmd_Help.c.html, xref/ModuleCmd_Help.c.src.html,
  xref/ModuleCmd_Init.c.html, xref/ModuleCmd_Init.c.src.html,
  xref/ModuleCmd_List.c.html, xref/ModuleCmd_List.c.src.html,
  xref/ModuleCmd_Load.c.html, xref/ModuleCmd_Load.c.src.html,
  xref/ModuleCmd_Purge.c.html, xref/ModuleCmd_Purge.c.src.html,
  xref/ModuleCmd_Refresh.c.html, xref/ModuleCmd_Refresh.c.src.html,
  xref/ModuleCmd_Switch.c.html, xref/ModuleCmd_Switch.c.src.html,
  xref/ModuleCmd_Update.c.html, xref/ModuleCmd_Update.c.src.html,
  xref/ModuleCmd_Use.c.html, xref/ModuleCmd_Use.c.src.html,
  xref/ModuleCmd_Whatis.c.html, xref/ModuleCmd_Whatis.c.src.html,
  xref/cmdAlias.c.html, xref/cmdAlias.c.src.html, xref/cmdChdir.c.html,
  xref/cmdChdir.c.src.html, xref/cmdConflict.c.html,
  xref/cmdConflict.c.src.html, xref/cmdInfo.c.html, xref/cmdInfo.c.src.html,
  xref/cmdIsLoaded.c.html, xref/cmdIsLoaded.c.src.html, xref/cmdLog.c.html,
  xref/cmdLog.c.src.html, xref/cmdMisc.c.html, xref/cmdMisc.c.src.html,
  xref/cmdModule.c.html, xref/cmdModule.c.src.html, xref/cmdPath.c.html,
  xref/cmdPath.c.src.html, xref/cmdSetenv.c.html, xref/cmdSetenv.c.src.html,
  xref/cmdUlvl.c.html, xref/cmdUlvl.c.src.html, xref/cmdUname.c.html,
  xref/cmdUname.c.src.html, xref/cmdVerbose.c.html,
  xref/cmdVerbose.c.src.html, xref/cmdVersion.c.html,
  xref/cmdVersion.c.src.html, xref/cmdWhatis.c.html,
  xref/cmdWhatis.c.src.html, xref/cmdXResource.c.html,
  xref/cmdXResource.c.src.html, xref/config.h.html, xref/config.h.src.html,
  xref/cxref.apdx.html, xref/cxref.css, xref/cxref.function, xref/cxref.html,
  xref/cxref.include, xref/cxref.typedef, xref/cxref.variable,
  xref/error.c.html, xref/error.c.src.html, xref/getopt.c.html,
  xref/getopt.c.src.html, xref/getopt.h.html, xref/getopt.h.src.html,
  xref/index.html, xref/init.c.html, xref/init.c.src.html,
  xref/locate_module.c.html, xref/locate_module.c.src.html, xref/main.c.html,
  xref/main.c.src.html, xref/modules_def.h.html, xref/modules_def.h.src.html,
  xref/utility.c.html, xref/utility.c.src.html, xref/utilmem.c.html,
  xref/utilmem.c.src.html, xref/utilobj.c.html, xref/utilobj.c.src.html,
  xref/uvec.c.html, xref/uvec.c.src.html, xref/version.c.html,
  xref/version.c.src.html: Removing more stuff that was c version specific.
  Kent

2013-01-10  Kent Mein <mein@cs.umn.edu>

  * tcl/Makefile => Makefile, tcl/README-EMACS.txt => README-EMACS.txt,
  tcl/README.txt => README.txt, {tcl/init => init}/.gitignore, {tcl/init =>
  init}/Makefile, {tcl/init => init}/README.txt, {tcl/init => init}/bash.in,
  {tcl/init => init}/csh.in, {tcl/init => init}/ksh.in, {tcl/init =>
  init}/lisp.in, {tcl/init => init}/modulerc, {tcl/init => init}/perl.in,
  {tcl/init => init}/python.in, {tcl/init => init}/sh.in, {tcl/init =>
  init}/tcsh.in, {tcl/init => init}/zsh.debug, {tcl/init => init}/zsh.in,
  tcl/modulecmd.tcl => modulecmd.tcl, {tcl/testsuite =>
  testsuite}/config/unix.exp, {tcl/testsuite => testsuite}/etc/bad,
  {tcl/testsuite => testsuite}/etc/empty, {tcl/testsuite =>
  testsuite}/etc/modulerc, {tcl/testsuite => testsuite}/home/.modulerc,
  {tcl/testsuite => testsuite}/home/.modules, {tcl/testsuite =>
  testsuite}/home/.modules.save, .../modulefiles.deep/modulerc/.modulerc,
  .../modulefiles.deep/modulerc/dir1/.modulerc,
  .../modulefiles.deep/modulerc/dir1/1.0,
  .../modulefiles.deep/modulerc/dir1/2.0,
  .../modulefiles.deep/modulerc/dir2/.modulerc,
  .../modulefiles.deep/modulerc/dir2/1.0/.modulerc,
  .../modulefiles.deep/modulerc/dir2/1.0/rc1,
  .../modulefiles.deep/modulerc/dir2/1.0/rc2,
  .../modulefiles.deep/modulerc/dir2/2.0,
  .../modulefiles.deep/modulerc/dir2/3.0, .../testsuite =>
  testsuite}/modulefiles.deep/plain/dir1/1.0, .../testsuite =>
  testsuite}/modulefiles.deep/plain/dir1/2.0, .../testsuite =>
  testsuite}/modulefiles.deep/plain/dir2/1.0, .../testsuite =>
  testsuite}/modulefiles.deep/plain/dir2/2.0,
  .../modulefiles.deep/version/.version,
  .../modulefiles.deep/version/dir1/.version,
  .../modulefiles.deep/version/dir1/1.0,
  .../modulefiles.deep/version/dir1/2.0,
  .../modulefiles.deep/version/dir2/.version,
  .../modulefiles.deep/version/dir2/1.0,
  .../modulefiles.deep/version/dir2/2.0/.version,
  .../modulefiles.deep/version/dir2/2.0/rc1,
  .../modulefiles.deep/version/dir2/2.0/rc2,
  .../modulefiles.deep/version/dir2/3.0, {tcl/testsuite =>
  testsuite}/modulefiles.other/1.1/version, {tcl/testsuite =>
  testsuite}/modulefiles.other/1.2/version, {tcl/testsuite =>
  testsuite}/modulefiles.other/1.3/version, {tcl/testsuite =>
  testsuite}/modulefiles.other/README, {tcl/testsuite =>
  testsuite}/modulefiles/README, {tcl/testsuite =>
  testsuite}/modulefiles/alias/1.0, {tcl/testsuite =>
  testsuite}/modulefiles/alias/2.0, {tcl/testsuite =>
  testsuite}/modulefiles/append/0.1, {tcl/testsuite =>
  testsuite}/modulefiles/append/0.2, {tcl/testsuite =>
  testsuite}/modulefiles/append/1.0, {tcl/testsuite =>
  testsuite}/modulefiles/append/2.0, {tcl/testsuite =>
  testsuite}/modulefiles/append/2.1, {tcl/testsuite =>
  testsuite}/modulefiles/append/2.2, {tcl/testsuite =>
  testsuite}/modulefiles/break/1.0, {tcl/testsuite =>
  testsuite}/modulefiles/break/2.0, {tcl/testsuite =>
  testsuite}/modulefiles/break/3.0, {tcl/testsuite =>
  testsuite}/modulefiles/break/4.0, {tcl/testsuite =>
  testsuite}/modulefiles/chdir/1.0, {tcl/testsuite =>
  testsuite}/modulefiles/chdir/2.0, {tcl/testsuite =>
  testsuite}/modulefiles/chdir/3.0, {tcl/testsuite =>
  testsuite}/modulefiles/chdir/4.0, {tcl/testsuite =>
  testsuite}/modulefiles/conflict/full, {tcl/testsuite =>
  testsuite}/modulefiles/conflict/module, {tcl/testsuite =>
  testsuite}/modulefiles/continue/1.0, {tcl/testsuite =>
  testsuite}/modulefiles/continue/2.0, {tcl/testsuite =>
  testsuite}/modulefiles/continue/3.0, {tcl/testsuite =>
  testsuite}/modulefiles/continue/4.0, {tcl/testsuite =>
  testsuite}/modulefiles/empty/1.0, {tcl/testsuite =>
  testsuite}/modulefiles/eschars/1.0, {tcl/testsuite =>
  testsuite}/modulefiles/exit/1.0, {tcl/testsuite =>
  testsuite}/modulefiles/exit/2.0, {tcl/testsuite =>
  testsuite}/modulefiles/exit/3.0, {tcl/testsuite =>
  testsuite}/modulefiles/help/2.0, {tcl/testsuite =>
  testsuite}/modulefiles/info/isloaded, {tcl/testsuite =>
  testsuite}/modulefiles/info/mode1, {tcl/testsuite =>
  testsuite}/modulefiles/info/mode2, {tcl/testsuite =>
  testsuite}/modulefiles/info/mode3, {tcl/testsuite =>
  testsuite}/modulefiles/info/mode4, {tcl/testsuite =>
  testsuite}/modulefiles/info/mode5, {tcl/testsuite =>
  testsuite}/modulefiles/info/mode6, {tcl/testsuite =>
  testsuite}/modulefiles/info/name, {tcl/testsuite =>
  testsuite}/modulefiles/info/shells, {tcl/testsuite =>
  testsuite}/modulefiles/info/shellsexp, {tcl/testsuite =>
  testsuite}/modulefiles/info/user, {tcl/testsuite =>
  testsuite}/modulefiles/info/userexp, {tcl/testsuite =>
  testsuite}/modulefiles/loc_dv1/1.0, {tcl/testsuite =>
  testsuite}/modulefiles/loc_dv1/2.0, {tcl/testsuite =>
  testsuite}/modulefiles/loc_dv1/3.0, {tcl/testsuite =>
  testsuite}/modulefiles/loc_dv2/.version, {tcl/testsuite =>
  testsuite}/modulefiles/loc_dv2/1.0, {tcl/testsuite =>
  testsuite}/modulefiles/loc_dv2/2.0, {tcl/testsuite =>
  testsuite}/modulefiles/loc_dv3/.version, {tcl/testsuite =>
  testsuite}/modulefiles/loc_dv3/1.0, {tcl/testsuite =>
  testsuite}/modulefiles/loc_dv3/2.0, {tcl/testsuite =>
  testsuite}/modulefiles/loc_dv4/.version, {tcl/testsuite =>
  testsuite}/modulefiles/loc_dv4/1.0, {tcl/testsuite =>
  testsuite}/modulefiles/loc_dv4/2.0, {tcl/testsuite =>
  testsuite}/modulefiles/loc_dv6/1.0, {tcl/testsuite =>
  testsuite}/modulefiles/loc_dv6/2.0/1.0, {tcl/testsuite =>
  testsuite}/modulefiles/loc_dv7/.version, {tcl/testsuite =>
  testsuite}/modulefiles/loc_dv7/1.0, {tcl/testsuite =>
  testsuite}/modulefiles/loc_dv7/2.0/1.0, {tcl/testsuite =>
  testsuite}/modulefiles/loc_dv7/3.0, {tcl/testsuite =>
  testsuite}/modulefiles/loc_dv8/.version, {tcl/testsuite =>
  testsuite}/modulefiles/loc_dv8/1.0, {tcl/testsuite =>
  testsuite}/modulefiles/loc_dv8/2.0, {tcl/testsuite =>
  testsuite}/modulefiles/loc_fq/1.0, {tcl/testsuite =>
  testsuite}/modulefiles/loc_fq/2.0, {tcl/testsuite =>
  testsuite}/modulefiles/loc_rc1/.modulerc, {tcl/testsuite =>
  testsuite}/modulefiles/loc_rc1/1.0, {tcl/testsuite =>
  testsuite}/modulefiles/loc_rc1/2.0, {tcl/testsuite =>
  testsuite}/modulefiles/loc_rc2/.modulerc, {tcl/testsuite =>
  testsuite}/modulefiles/loc_rc2/1.0, {tcl/testsuite =>
  testsuite}/modulefiles/loc_rc2/2.0, {tcl/testsuite =>
  testsuite}/modulefiles/loc_rc3/.modulerc, {tcl/testsuite =>
  testsuite}/modulefiles/loc_rc3/1.0, {tcl/testsuite =>
  testsuite}/modulefiles/loc_rc3/2.0, {tcl/testsuite =>
  testsuite}/modulefiles/loc_rc3/3.0, {tcl/testsuite =>
  testsuite}/modulefiles/loc_rc4/.modulerc, {tcl/testsuite =>
  testsuite}/modulefiles/loc_rc4/.version, {tcl/testsuite =>
  testsuite}/modulefiles/loc_rc4/1.0, {tcl/testsuite =>
  testsuite}/modulefiles/loc_rc4/2.0, {tcl/testsuite =>
  testsuite}/modulefiles/loc_rc4/3.0, {tcl/testsuite =>
  testsuite}/modulefiles/loc_rc5/.modulerc, {tcl/testsuite =>
  testsuite}/modulefiles/loc_rc5/1.0, {tcl/testsuite =>
  testsuite}/modulefiles/loc_rc5/2.0, {tcl/testsuite =>
  testsuite}/modulefiles/loc_sym/1.0, {tcl/testsuite =>
  testsuite}/modulefiles/loc_sym/alias1, {tcl/testsuite =>
  testsuite}/modulefiles/loc_sym/alias2, {tcl/testsuite =>
  testsuite}/modulefiles/loc_sym/alias3, {tcl/testsuite =>
  testsuite}/modulefiles/loc_sym/alias4, {tcl/testsuite =>
  testsuite}/modulefiles/loc_sym/alias5, {tcl/testsuite =>
  testsuite}/modulefiles/loc_sym/alias6, {tcl/testsuite =>
  testsuite}/modulefiles/loc_sym/exec1, {tcl/testsuite =>
  testsuite}/modulefiles/loc_sym/exec2, {tcl/testsuite =>
  testsuite}/modulefiles/loc_sym/getvers1, {tcl/testsuite =>
  testsuite}/modulefiles/loc_sym/getvers2, {tcl/testsuite =>
  testsuite}/modulefiles/loc_sym/getvers3, {tcl/testsuite =>
  testsuite}/modulefiles/loc_sym/getvers4, {tcl/testsuite =>
  testsuite}/modulefiles/loc_sym/getvers5, {tcl/testsuite =>
  testsuite}/modulefiles/loc_sym/getvers6, {tcl/testsuite =>
  testsuite}/modulefiles/loc_sym/getvers7, {tcl/testsuite =>
  testsuite}/modulefiles/loc_sym/getvers8, {tcl/testsuite =>
  testsuite}/modulefiles/loc_sym/versinf1, {tcl/testsuite =>
  testsuite}/modulefiles/loc_sym/versinf2, {tcl/testsuite =>
  testsuite}/modulefiles/loc_sym/versinf3, {tcl/testsuite =>
  testsuite}/modulefiles/loc_sym/versinf4, {tcl/testsuite =>
  testsuite}/modulefiles/loc_sym/versinf5, {tcl/testsuite =>
  testsuite}/modulefiles/loc_sym/versinf6, {tcl/testsuite =>
  testsuite}/modulefiles/loc_sym/versinf7, {tcl/testsuite =>
  testsuite}/modulefiles/loc_sym/version1, {tcl/testsuite =>
  testsuite}/modulefiles/loc_sym/version10, {tcl/testsuite =>
  testsuite}/modulefiles/loc_sym/version11, {tcl/testsuite =>
  testsuite}/modulefiles/loc_sym/version12, {tcl/testsuite =>
  testsuite}/modulefiles/loc_sym/version13, {tcl/testsuite =>
  testsuite}/modulefiles/loc_sym/version14, {tcl/testsuite =>
  testsuite}/modulefiles/loc_sym/version2, {tcl/testsuite =>
  testsuite}/modulefiles/loc_sym/version3, {tcl/testsuite =>
  testsuite}/modulefiles/loc_sym/version4, {tcl/testsuite =>
  testsuite}/modulefiles/loc_sym/version5, {tcl/testsuite =>
  testsuite}/modulefiles/loc_sym/version6, {tcl/testsuite =>
  testsuite}/modulefiles/loc_sym/version7, {tcl/testsuite =>
  testsuite}/modulefiles/loc_sym/version8, {tcl/testsuite =>
  testsuite}/modulefiles/loc_sym/version9, {tcl/testsuite =>
  testsuite}/modulefiles/log/badfac, {tcl/testsuite =>
  testsuite}/modulefiles/log/err_both_1, {tcl/testsuite =>
  testsuite}/modulefiles/log/err_both_2, {tcl/testsuite =>
  testsuite}/modulefiles/log/err_file, {tcl/testsuite =>
  testsuite}/modulefiles/log/err_syslog, {tcl/testsuite =>
  testsuite}/modulefiles/module/2.0, {tcl/testsuite =>
  testsuite}/modulefiles/prepend/0.1, {tcl/testsuite =>
  testsuite}/modulefiles/prepend/0.2, {tcl/testsuite =>
  testsuite}/modulefiles/prepend/1.0, {tcl/testsuite =>
  testsuite}/modulefiles/prepend/2.0, {tcl/testsuite =>
  testsuite}/modulefiles/prepend/2.1, {tcl/testsuite =>
  testsuite}/modulefiles/prepend/2.2, {tcl/testsuite =>
  testsuite}/modulefiles/prereq/full, {tcl/testsuite =>
  testsuite}/modulefiles/prereq/module, {tcl/testsuite =>
  testsuite}/modulefiles/remove/2.0, {tcl/testsuite =>
  testsuite}/modulefiles/setenv/1.0, {tcl/testsuite =>
  testsuite}/modulefiles/system/2.0, {tcl/testsuite =>
  testsuite}/modulefiles/trace/all_off, {tcl/testsuite =>
  testsuite}/modulefiles/trace/all_on, {tcl/testsuite =>
  testsuite}/modulefiles/uname/domain, {tcl/testsuite =>
  testsuite}/modulefiles/uname/machine, {tcl/testsuite =>
  testsuite}/modulefiles/uname/nodename, {tcl/testsuite =>
  testsuite}/modulefiles/uname/release, {tcl/testsuite =>
  testsuite}/modulefiles/uname/sysname, {tcl/testsuite =>
  testsuite}/modulefiles/uname/version, {tcl/testsuite =>
  testsuite}/modulefiles/unsetenv/0.9, {tcl/testsuite =>
  testsuite}/modulefiles/unsetenv/1.0, {tcl/testsuite =>
  testsuite}/modulefiles/use/.version, {tcl/testsuite =>
  testsuite}/modulefiles/use/1.0, {tcl/testsuite =>
  testsuite}/modulefiles/use/2.0, {tcl/testsuite =>
  testsuite}/modulefiles/use/2.1, {tcl/testsuite =>
  testsuite}/modulefiles/use/2.2, {tcl/testsuite =>
  testsuite}/modulefiles/user/adv, {tcl/testsuite =>
  testsuite}/modulefiles/user/advanced, {tcl/testsuite =>
  testsuite}/modulefiles/user/exp, {tcl/testsuite =>
  testsuite}/modulefiles/user/expert, {tcl/testsuite =>
  testsuite}/modulefiles/user/nov, {tcl/testsuite =>
  testsuite}/modulefiles/user/novice, {tcl/testsuite =>
  testsuite}/modulefiles/user/undef, {tcl/testsuite =>
  testsuite}/modulefiles/verbose/msg, {tcl/testsuite =>
  testsuite}/modulefiles/verbose/off, {tcl/testsuite =>
  testsuite}/modulefiles/verbose/on, {tcl/testsuite =>
  testsuite}/modulefiles/verbose/undef, {tcl/testsuite =>
  testsuite}/modulefiles/versions/1.1, {tcl/testsuite =>
  testsuite}/modulefiles/versions/1.2, {tcl/testsuite =>
  testsuite}/modulefiles/versions/1.3, {tcl/testsuite =>
  testsuite}/modulefiles/whatis/lines, {tcl/testsuite =>
  testsuite}/modulefiles/whatis/multiple, {tcl/testsuite =>
  testsuite}/modulefiles/whatis/none, {tcl/testsuite =>
  testsuite}/modulefiles/whatis/single, {tcl/testsuite =>
  testsuite}/modulefiles/whatis/string, .../testsuite =>
  testsuite}/modules.00-init/005-init_ts.exp, {tcl/testsuite =>
  testsuite}/modules.00-init/006-procs.exp, .../testsuite =>
  testsuite}/modules.00-init/010-environ.exp, .../testsuite =>
  testsuite}/modules.00-init/015-version.exp, {tcl/testsuite =>
  testsuite}/modules.00-init/030-shells.exp, .../testsuite =>
  testsuite}/modules.00-init/050-modpath.exp, {tcl/testsuite =>
  testsuite}/modules.00-init/080-begenv.exp,
  .../modules.00-init/090-switches.exp, {tcl/testsuite =>
  testsuite}/modules.10-use/010-init_ts.exp, {tcl/testsuite =>
  testsuite}/modules.10-use/030-use.exp, {tcl/testsuite =>
  testsuite}/modules.10-use/031-append.exp, {tcl/testsuite =>
  testsuite}/modules.10-use/040-load.exp, {tcl/testsuite =>
  testsuite}/modules.10-use/070-unuse.exp, .../testsuite =>
  testsuite}/modules.50-cmds/010-init_ts.exp, {tcl/testsuite =>
  testsuite}/modules.50-cmds/015-use.exp, {tcl/testsuite =>
  testsuite}/modules.50-cmds/020-setenv.exp,
  .../modules.50-cmds/030-unsetenv.exp, {tcl/testsuite =>
  testsuite}/modules.50-cmds/040-append.exp, {tcl/testsuite =>
  testsuite}/modules.50-cmds/140-system.exp, .../testsuite =>
  testsuite}/modules.50-cmds/999-cleanup.exp, .../testsuite =>
  testsuite}/modules.80-deep/010-init_ts.exp, {tcl/testsuite =>
  testsuite}/modules.80-deep/020-load.exp, .../testsuite =>
  testsuite}/modules.80-deep/030-display.exp, {tcl/testsuite =>
  testsuite}/modules.80-deep/040-list.exp, .../testsuite =>
  testsuite}/modules.80-deep/999-cleanup.exp,
  .../modules.90-avail/010-init_ts.exp, .../testsuite =>
  testsuite}/modules.90-avail/020-single.exp,
  .../modules.90-avail/030-multiple.exp, {tcl/testsuite =>
  testsuite}/modules.90-avail/040-wild.exp, {tcl/testsuite =>
  testsuite}/modules.90-avail/050-long.exp, {tcl/testsuite =>
  testsuite}/modules.90-avail/060-empty.exp,
  .../modules.95-version/010-init_ts.exp, .../testsuite =>
  testsuite}/modules.95-version/020-load.exp,
  .../modules.95-version/020-unload.exp, .../modules.95-version/022-load2.exp,
  .../modules.95-version/022-unload2.exp,
  .../modules.95-version/040-xgetenv.exp,
  .../modules.95-version/999-cleanup.exp, {tcl/testsuite =>
  testsuite}/not_installed, {tcl/testsuite => testsuite}/systest, {tcl/windows
  => windows}/module-tcl-win.chm, {tcl/windows => windows}/module.cmd,
  {tcl/windows => windows}/moduleinit.cmd: Moved things out of the tcl
  directory.  Kent

  * .cxref, .ftp, .gitignore, .indent.pro, .spec.in, ChangeLog, INSTALL,
  INSTALL.RH7x, MACHINES, Makefile.am, ModuleCmd_Avail.c, ModuleCmd_Clear.c,
  ModuleCmd_Display.c, ModuleCmd_Help.c, ModuleCmd_Init.c, ModuleCmd_List.c,
  ModuleCmd_Load.c, ModuleCmd_Purge.c, ModuleCmd_Refresh.c,
  ModuleCmd_Switch.c, ModuleCmd_Update.c, ModuleCmd_Use.c, ModuleCmd_Whatis.c,
  NEWS, PROBLEMS, README, README.perl, TODO, acinclude.m4, cmdAlias.c,
  cmdChdir.c, cmdConflict.c, cmdInfo.c, cmdIsLoaded.c, cmdLog.c, cmdMisc.c,
  cmdModule.c, cmdPath.c, cmdSetenv.c, cmdUlvl.c, cmdUname.c, cmdVerbose.c,
  cmdVersion.c, cmdWhatis.c, cmdXResource.c, config/.gitignore,
  config/emtcl.m4, config/tcl.m4, configure.ac, contrib/modules.ebuild,
  cvs2cl.pl, error.c, etc/.gitignore, etc/Makefile.am, etc/README,
  etc/add.modules.in, etc/global/.gitignore, etc/global/bashrc.in,
  etc/global/csh.cshrc.in, etc/global/csh.login.in, etc/global/csh.modules.in,
  etc/global/profile.in, etc/global/profile.modules.in, etc/mkroot.in,
  etc/skel/.cshrc.in, etc/skel/.gitignore, etc/skel/.kshenv.in,
  etc/skel/.login.in, etc/skel/.profile.in, ext/.gitignore, ext/Makefile.am,
  ext/README, ext/add.ext.in, ext/common/.cshrc.in, ext/common/.gitignore,
  ext/common/.kshenv.in, ext/common/.login.in, ext/common/.profile.in,
  ext/mkroot.in, ext/skel/.cshrc.ext, ext/skel/.kshenv.ext,
  ext/skel/.login.ext, ext/skel/.modules, ext/skel/.profile.ext, getopt.c,
  getopt.h, init.c, init/.gitignore, init/.modulespath.in, init/Makefile.am,
  init/bash.in, init/bash_completion.in, init/cmake.in, init/csh.in,
  init/ksh.in, init/perl.pm.in, init/python.py.in, init/ruby.rb.in,
  init/sh.in, init/zsh.in, locate_module.c, main.c, modules.lsm.in,
  modules_def.h, ovec.c, ovec.h, po/.cvsignore, po/ChangeLog, po/LINGUAS,
  po/Makevars, po/POTFILES.in, testsuite/.gitignore,
  testsuite/config/unix.exp, testsuite/etc/.gitignore, testsuite/etc/bad,
  testsuite/etc/empty, testsuite/etc/modulerc, testsuite/home/.gitignore,
  testsuite/home/.modulerc, testsuite/home/.modules.save,
  testsuite/modulefiles.deep/modulerc/.modulerc,
  testsuite/modulefiles.deep/modulerc/dir1/.modulerc,
  testsuite/modulefiles.deep/modulerc/dir1/1.0,
  testsuite/modulefiles.deep/modulerc/dir1/2.0,
  testsuite/modulefiles.deep/modulerc/dir2/.modulerc,
  .../modulefiles.deep/modulerc/dir2/1.0/.modulerc,
  testsuite/modulefiles.deep/modulerc/dir2/1.0/rc1,
  testsuite/modulefiles.deep/modulerc/dir2/1.0/rc2,
  testsuite/modulefiles.deep/modulerc/dir2/2.0,
  testsuite/modulefiles.deep/modulerc/dir2/3.0,
  testsuite/modulefiles.deep/plain/dir1/1.0,
  testsuite/modulefiles.deep/plain/dir1/2.0,
  testsuite/modulefiles.deep/plain/dir2/1.0,
  testsuite/modulefiles.deep/plain/dir2/2.0,
  testsuite/modulefiles.deep/version/.version,
  testsuite/modulefiles.deep/version/dir1/.version,
  testsuite/modulefiles.deep/version/dir1/1.0,
  testsuite/modulefiles.deep/version/dir1/2.0,
  testsuite/modulefiles.deep/version/dir2/.version,
  testsuite/modulefiles.deep/version/dir2/1.0,
  .../modulefiles.deep/version/dir2/2.0/.version,
  testsuite/modulefiles.deep/version/dir2/2.0/rc1,
  testsuite/modulefiles.deep/version/dir2/2.0/rc2,
  testsuite/modulefiles.deep/version/dir2/3.0,
  testsuite/modulefiles.other/1.1/version,
  testsuite/modulefiles.other/1.2/version,
  testsuite/modulefiles.other/1.3/version, testsuite/modulefiles.other/README,
  testsuite/modulefiles/README, testsuite/modulefiles/alias/1.0,
  testsuite/modulefiles/alias/2.0, testsuite/modulefiles/append/0.1,
  testsuite/modulefiles/append/0.2, testsuite/modulefiles/append/1.0,
  testsuite/modulefiles/append/1.1, testsuite/modulefiles/append/2.0,
  testsuite/modulefiles/append/2.1, testsuite/modulefiles/append/2.2,
  testsuite/modulefiles/break/1.0, testsuite/modulefiles/break/2.0,
  testsuite/modulefiles/break/3.0, testsuite/modulefiles/break/4.0,
  testsuite/modulefiles/chdir/1.0, testsuite/modulefiles/chdir/2.0,
  testsuite/modulefiles/chdir/3.0, testsuite/modulefiles/chdir/4.0,
  testsuite/modulefiles/conflict/full, testsuite/modulefiles/conflict/module,
  testsuite/modulefiles/continue/1.0, testsuite/modulefiles/continue/2.0,
  testsuite/modulefiles/continue/3.0, testsuite/modulefiles/continue/4.0,
  testsuite/modulefiles/empty/1.0, testsuite/modulefiles/eschars/1.0,
  testsuite/modulefiles/exit/1.0, testsuite/modulefiles/exit/2.0,
  testsuite/modulefiles/exit/3.0, testsuite/modulefiles/help/2.0,
  testsuite/modulefiles/info/isloaded, testsuite/modulefiles/info/mode1,
  testsuite/modulefiles/info/mode2, testsuite/modulefiles/info/mode3,
  testsuite/modulefiles/info/mode4, testsuite/modulefiles/info/mode5,
  testsuite/modulefiles/info/mode6, testsuite/modulefiles/info/name,
  testsuite/modulefiles/info/shells, testsuite/modulefiles/info/shellsexp,
  testsuite/modulefiles/info/user, testsuite/modulefiles/info/userexp,
  testsuite/modulefiles/loc_dv1/1.0, testsuite/modulefiles/loc_dv1/2.0,
  testsuite/modulefiles/loc_dv1/3.0, testsuite/modulefiles/loc_dv2/.version,
  testsuite/modulefiles/loc_dv2/1.0, testsuite/modulefiles/loc_dv2/2.0,
  testsuite/modulefiles/loc_dv3/.version, testsuite/modulefiles/loc_dv3/1.0,
  testsuite/modulefiles/loc_dv3/2.0, testsuite/modulefiles/loc_dv4/.version,
  testsuite/modulefiles/loc_dv4/1.0, testsuite/modulefiles/loc_dv4/2.0,
  testsuite/modulefiles/loc_dv6/1.0, testsuite/modulefiles/loc_dv6/2.0/1.0,
  testsuite/modulefiles/loc_dv7/.version, testsuite/modulefiles/loc_dv7/1.0,
  testsuite/modulefiles/loc_dv7/2.0/1.0, testsuite/modulefiles/loc_dv7/3.0,
  testsuite/modulefiles/loc_dv8/.version, testsuite/modulefiles/loc_dv8/1.0,
  testsuite/modulefiles/loc_dv8/2.0, testsuite/modulefiles/loc_fq/1.0,
  testsuite/modulefiles/loc_fq/2.0, testsuite/modulefiles/loc_rc1/.modulerc,
  testsuite/modulefiles/loc_rc1/1.0, testsuite/modulefiles/loc_rc1/2.0,
  testsuite/modulefiles/loc_rc2/.modulerc, testsuite/modulefiles/loc_rc2/1.0,
  testsuite/modulefiles/loc_rc2/2.0, testsuite/modulefiles/loc_rc3/.modulerc,
  testsuite/modulefiles/loc_rc3/1.0, testsuite/modulefiles/loc_rc3/2.0,
  testsuite/modulefiles/loc_rc3/3.0, testsuite/modulefiles/loc_rc4/.modulerc,
  testsuite/modulefiles/loc_rc4/.version, testsuite/modulefiles/loc_rc4/1.0,
  testsuite/modulefiles/loc_rc4/2.0, testsuite/modulefiles/loc_rc4/3.0,
  testsuite/modulefiles/loc_rc5/.modulerc, testsuite/modulefiles/loc_rc5/1.0,
  testsuite/modulefiles/loc_rc5/2.0, testsuite/modulefiles/loc_sym/1.0,
  testsuite/modulefiles/loc_sym/alias1, testsuite/modulefiles/loc_sym/alias2,
  testsuite/modulefiles/loc_sym/alias3, testsuite/modulefiles/loc_sym/alias4,
  testsuite/modulefiles/loc_sym/alias5, testsuite/modulefiles/loc_sym/alias6,
  testsuite/modulefiles/loc_sym/exec1, testsuite/modulefiles/loc_sym/exec2,
  testsuite/modulefiles/loc_sym/getvers1,
  testsuite/modulefiles/loc_sym/getvers2,
  testsuite/modulefiles/loc_sym/getvers3,
  testsuite/modulefiles/loc_sym/getvers4,
  testsuite/modulefiles/loc_sym/getvers5,
  testsuite/modulefiles/loc_sym/getvers6,
  testsuite/modulefiles/loc_sym/getvers7,
  testsuite/modulefiles/loc_sym/getvers8,
  testsuite/modulefiles/loc_sym/versinf1,
  testsuite/modulefiles/loc_sym/versinf2,
  testsuite/modulefiles/loc_sym/versinf3,
  testsuite/modulefiles/loc_sym/versinf4,
  testsuite/modulefiles/loc_sym/versinf5,
  testsuite/modulefiles/loc_sym/versinf6,
  testsuite/modulefiles/loc_sym/versinf7,
  testsuite/modulefiles/loc_sym/version1,
  testsuite/modulefiles/loc_sym/version10,
  testsuite/modulefiles/loc_sym/version11,
  testsuite/modulefiles/loc_sym/version12,
  testsuite/modulefiles/loc_sym/version13,
  testsuite/modulefiles/loc_sym/version14,
  testsuite/modulefiles/loc_sym/version2,
  testsuite/modulefiles/loc_sym/version3,
  testsuite/modulefiles/loc_sym/version4,
  testsuite/modulefiles/loc_sym/version5,
  testsuite/modulefiles/loc_sym/version6,
  testsuite/modulefiles/loc_sym/version7,
  testsuite/modulefiles/loc_sym/version8,
  testsuite/modulefiles/loc_sym/version9, testsuite/modulefiles/log/badfac,
  testsuite/modulefiles/log/err_both_1, testsuite/modulefiles/log/err_both_2,
  testsuite/modulefiles/log/err_file, testsuite/modulefiles/log/err_syslog,
  testsuite/modulefiles/module/2.0, testsuite/modulefiles/prepend/0.1,
  testsuite/modulefiles/prepend/0.2, testsuite/modulefiles/prepend/1.0,
  testsuite/modulefiles/prepend/1.1, testsuite/modulefiles/prepend/2.0,
  testsuite/modulefiles/prepend/2.1, testsuite/modulefiles/prepend/2.2,
  testsuite/modulefiles/prereq/full, testsuite/modulefiles/prereq/module,
  testsuite/modulefiles/recurs/modA, testsuite/modulefiles/recurs/modB,
  testsuite/modulefiles/remove/2.0, testsuite/modulefiles/setenv/1.0,
  testsuite/modulefiles/system/2.0, testsuite/modulefiles/trace/all_off,
  testsuite/modulefiles/trace/all_on, testsuite/modulefiles/uname/domain,
  testsuite/modulefiles/uname/machine, testsuite/modulefiles/uname/nodename,
  testsuite/modulefiles/uname/release, testsuite/modulefiles/uname/sysname,
  testsuite/modulefiles/uname/version, testsuite/modulefiles/unsetenv/0.9,
  testsuite/modulefiles/unsetenv/1.0, testsuite/modulefiles/use/.version,
  testsuite/modulefiles/use/1.0, testsuite/modulefiles/use/2.0,
  testsuite/modulefiles/use/2.1, testsuite/modulefiles/use/2.2,
  testsuite/modulefiles/user/adv, testsuite/modulefiles/user/advanced,
  testsuite/modulefiles/user/exp, testsuite/modulefiles/user/expert,
  testsuite/modulefiles/user/nov, testsuite/modulefiles/user/novice,
  testsuite/modulefiles/user/undef, testsuite/modulefiles/verbose/msg,
  testsuite/modulefiles/verbose/off, testsuite/modulefiles/verbose/on,
  testsuite/modulefiles/verbose/undef, testsuite/modulefiles/versions/1.1,
  testsuite/modulefiles/versions/1.2, testsuite/modulefiles/versions/1.3,
  testsuite/modulefiles/whatis/lines, testsuite/modulefiles/whatis/multiple,
  testsuite/modulefiles/whatis/none, testsuite/modulefiles/whatis/single,
  testsuite/modulefiles/whatis/string,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.00-init/015-version.exp,
  testsuite/modules.00-init/030-shells.exp,
  testsuite/modules.00-init/050-modpath.exp,
  testsuite/modules.00-init/080-begenv.exp,
  testsuite/modules.00-init/090-switches.exp,
  testsuite/modules.10-use/010-init_ts.exp,
  testsuite/modules.10-use/030-use.exp,
  testsuite/modules.10-use/031-append.exp,
  testsuite/modules.10-use/040-load.exp,
  testsuite/modules.10-use/070-unuse.exp,
  testsuite/modules.20-locate/010-init_ts.exp,
  testsuite/modules.20-locate/020-fqual.exp,
  testsuite/modules.20-locate/030-defvers.exp,
  testsuite/modules.20-locate/040-alias.exp,
  testsuite/modules.20-locate/045-symvers.exp,
  testsuite/modules.20-locate/046-getsym.exp,
  testsuite/modules.20-locate/047-symerrs.exp,
  testsuite/modules.20-locate/048-symexec.exp,
  testsuite/modules.20-locate/050-locrc.exp,
  testsuite/modules.20-locate/055-locrcerrs.exp,
  testsuite/modules.20-locate/060-rc.exp,
  testsuite/modules.20-locate/065-rcerrs.exp,
  testsuite/modules.20-locate/070-homerc.exp,
  testsuite/modules.20-locate/095-cleanup.exp,
  testsuite/modules.30-userlvl/010-init_ts.exp,
  testsuite/modules.30-userlvl/030-novice.exp,
  testsuite/modules.30-userlvl/035-nov.exp,
  testsuite/modules.30-userlvl/040-advanced.exp,
  testsuite/modules.30-userlvl/045-adv.exp,
  testsuite/modules.30-userlvl/050-expert.exp,
  testsuite/modules.30-userlvl/055-exp.exp,
  testsuite/modules.30-userlvl/090-undef.exp,
  testsuite/modules.50-cmds/010-init_ts.exp,
  testsuite/modules.50-cmds/015-use.exp,
  testsuite/modules.50-cmds/017-use-undo.exp,
  testsuite/modules.50-cmds/020-setenv.exp,
  testsuite/modules.50-cmds/022-setenv-eschars.exp,
  testsuite/modules.50-cmds/025-setenv-undo.exp,
  testsuite/modules.50-cmds/030-unsetenv.exp,
  testsuite/modules.50-cmds/035-unsetenv-undo.exp,
  testsuite/modules.50-cmds/036-unsetenv-x.exp,
  testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.50-cmds/042-append-delim.exp,
  testsuite/modules.50-cmds/045-append-undo.exp,
  testsuite/modules.50-cmds/047-app-del-undo.exp,
  testsuite/modules.50-cmds/050-prepend.exp,
  testsuite/modules.50-cmds/052-prepend-delim.exp,
  testsuite/modules.50-cmds/055-prepend-undo.exp,
  testsuite/modules.50-cmds/057-pre-del-undo.exp,
  testsuite/modules.50-cmds/060-remove.exp,
  testsuite/modules.50-cmds/065-remove-undo.exp,
  testsuite/modules.50-cmds/070-alias-proc.exp,
  testsuite/modules.50-cmds/075-alias.exp,
  testsuite/modules.50-cmds/076-alias-sub.exp,
  testsuite/modules.50-cmds/077-alias-undo.exp,
  testsuite/modules.50-cmds/078-refresh.exp,
  testsuite/modules.50-cmds/080-info-name.exp,
  testsuite/modules.50-cmds/081-info-user.exp,
  testsuite/modules.50-cmds/082-info-user-exp.exp,
  testsuite/modules.50-cmds/083-info-mode.exp,
  testsuite/modules.50-cmds/084-info-mode-exp.exp,
  testsuite/modules.50-cmds/085-info-flags.exp,
  testsuite/modules.50-cmds/086-info-shells.exp,
  testsuite/modules.50-cmds/087-info-shells-exp.exp,
  testsuite/modules.50-cmds/088-info-isloaded.exp,
  testsuite/modules.50-cmds/090-uname-proc.exp,
  testsuite/modules.50-cmds/095-uname.exp,
  testsuite/modules.50-cmds/099-uname-cleanup.exp,
  testsuite/modules.50-cmds/100-loglevel.exp,
  testsuite/modules.50-cmds/101-badfac.exp,
  testsuite/modules.50-cmds/110-verbose.exp,
  testsuite/modules.50-cmds/115-verbose-msg.exp,
  testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/121-prereq-module.exp,
  testsuite/modules.50-cmds/130-conflict-full.exp,
  testsuite/modules.50-cmds/131-conflict-module.exp,
  testsuite/modules.50-cmds/140-system.exp,
  testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/172-swap-app-delim.exp,
  testsuite/modules.50-cmds/173-swap-app-delim.exp,
  testsuite/modules.50-cmds/175-swap2.exp,
  testsuite/modules.50-cmds/177-swap-prep-delim.exp,
  testsuite/modules.50-cmds/178-swap-prep-delim.exp,
  testsuite/modules.50-cmds/190-load.exp,
  testsuite/modules.50-cmds/195-load-recurs.exp,
  testsuite/modules.50-cmds/200-break.exp,
  testsuite/modules.50-cmds/210-exit.exp,
  testsuite/modules.50-cmds/220-continue.exp,
  testsuite/modules.50-cmds/230-loop.exp,
  testsuite/modules.50-cmds/240-chdir.exp,
  testsuite/modules.50-cmds/999-cleanup.exp,
  testsuite/modules.60-initx/005-init.exp,
  testsuite/modules.60-initx/010-list.exp,
  testsuite/modules.60-initx/020-add.exp,
  testsuite/modules.60-initx/030-switch.exp,
  testsuite/modules.60-initx/040-prepend.exp,
  testsuite/modules.60-initx/050-rm.exp,
  testsuite/modules.60-initx/060-2nd.exp,
  testsuite/modules.60-initx/095-cleanup.exp,
  testsuite/modules.70-maint/010-init_ts.exp,
  testsuite/modules.70-maint/020-update.exp,
  testsuite/modules.70-maint/030-purge.exp,
  testsuite/modules.70-maint/040-list.exp,
  testsuite/modules.70-maint/043-listno.exp,
  testsuite/modules.70-maint/045-listlong.exp,
  testsuite/modules.70-maint/048-listlongno.exp,
  testsuite/modules.70-maint/050-whatis-load.exp,
  testsuite/modules.70-maint/055-whatis.exp,
  testsuite/modules.70-maint/060-apropos.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/080-help.exp,
  testsuite/modules.70-maint/095-cleanup.exp,
  testsuite/modules.80-deep/010-init_ts.exp,
  testsuite/modules.80-deep/020-load.exp,
  testsuite/modules.80-deep/030-display.exp,
  testsuite/modules.80-deep/040-list.exp,
  testsuite/modules.80-deep/999-cleanup.exp,
  testsuite/modules.90-avail/010-init_ts.exp,
  testsuite/modules.90-avail/020-single.exp,
  testsuite/modules.90-avail/030-multiple.exp,
  testsuite/modules.90-avail/040-wild.exp,
  testsuite/modules.90-avail/050-long.exp,
  testsuite/modules.90-avail/060-empty.exp,
  testsuite/modules.95-version/010-init_ts.exp,
  testsuite/modules.95-version/020-load.exp,
  testsuite/modules.95-version/020-unload.exp,
  testsuite/modules.95-version/022-load2.exp,
  testsuite/modules.95-version/022-unload2.exp,
  testsuite/modules.95-version/040-xgetenv.exp,
  testsuite/modules.95-version/999-cleanup.exp, testsuite/not_installed,
  testsuite/systest, utility.c, utilmem.c, utilobj.c, uvec.c, uvec.h,
  version.c: Removed all of the non tcl version stuff.  Or most of it anyway.
  Kent

2012-11-30  Kent Mein <mein@cs.umn.edu>

  * tcl/init/Makefile: Remove some unneeded complication to the Makefile since
  were not using cvs anymore.  Kent

2012-11-19  R.K. Owen <rk@owen.sj.ca.us>

  * LICENSE.GPL, LICENSE.LGPL, NEWS: Rolled in the recent LICENSE.GPL address
  change, and the same to the the LICENSE.LGPL.

2012-11-12  R.K. Owen <rk@owen.sj.ca.us>

  * ModuleCmd_Init.c, NEWS, cmdXResource.c, utility.c: Rolled in the following
  patch * Fixed the segfault problem with Tcl_RegExpCompile() (Kenneth Hoste,
  Tyson Whitehead)

2012-11-08  R.K. Owen <rk@owen.sj.ca.us>

  * ModuleCmd_Avail.c, NEWS, configure.ac, doc/module.1.in,
  doc/modulefile.4.in: Rolled in the increased Update buffer and using the
  locale for Avail.

2012-11-05  R.K. Owen <rk@owen.sj.ca.us>

  * ModuleCmd_Update.c, NEWS: * Increased the "update" buffer (Leon Kos)
  rolled into main branch.

2012-11-01  R.K. Owen <rk@owen.sj.ca.us>

  * ovec.h, uvec.h: Remove the $Id$ lines from the header files.

  * .gitattributes, Makefile.am, ModuleCmd_Avail.c, ModuleCmd_Clear.c,
  ModuleCmd_Display.c, ModuleCmd_Help.c, ModuleCmd_Init.c, ModuleCmd_List.c,
  ModuleCmd_Load.c, ModuleCmd_Purge.c, ModuleCmd_Refresh.c,
  ModuleCmd_Switch.c, ModuleCmd_Update.c, ModuleCmd_Use.c, ModuleCmd_Whatis.c,
  cmdAlias.c, cmdChdir.c, cmdConflict.c, cmdInfo.c, cmdIsLoaded.c, cmdLog.c,
  cmdMisc.c, cmdModule.c, cmdPath.c, cmdSetenv.c, cmdUlvl.c, cmdUname.c,
  cmdVerbose.c, cmdVersion.c, cmdWhatis.c, cmdXResource.c, configure.ac,
  error.c, etc/Makefile.am, etc/add.modules.in, ext/Makefile.am,
  ext/add.ext.in, getopt.c, init.c, init/.modulespath.in, init/Makefile.am,
  locate_module.c, main.c, modulefiles/Makefile.am, ovec.c, utility.c,
  utilmem.c, utilobj.c, uvec.c: Changing to the git $Id$

2012-10-30  R.K. Owen <rk@owen.sj.ca.us>

  * .cvsignore => .gitignore, NEWS, TODO, cmdPath.c, config/{.cvsignore =>
  .gitignore}, doc/{.cvsignore => .gitignore}, etc/{.cvsignore => .gitignore},
  etc/global/{.cvsignore => .gitignore}, etc/skel/{.cvsignore => .gitignore},
  ext/{.cvsignore => .gitignore}, ext/common/{.cvsignore => .gitignore},
  init/{.cvsignore => .gitignore}, modulefiles/{.cvsignore => .gitignore},
  modulefiles/lang/{.cvsignore => .gitignore}, tcl/init/{.cvsignore =>
  .gitignore}, testsuite/{.cvsignore => .gitignore}, testsuite/etc/{.cvsignore
  => .gitignore}, testsuite/home/{.cvsignore => .gitignore},
  testsuite/modulefiles/append/1.1, testsuite/modulefiles/prepend/1.1,
  testsuite/modulefiles/recurs/modA, testsuite/modulefiles/recurs/modB,
  testsuite/modules.50-cmds/085-info-flags.exp,
  testsuite/modules.50-cmds/172-swap-app-delim.exp,
  testsuite/modules.50-cmds/173-swap-app-delim.exp,
  testsuite/modules.50-cmds/177-swap-prep-delim.exp,
  testsuite/modules.50-cmds/178-swap-prep-delim.exp,
  testsuite/modules.50-cmds/195-load-recurs.exp: Rolled in the fix by Tyson
  Whitehead for the "module swap" with the --delim option

2012-10-29  R.K. Owen <rk@owen.sj.ca.us>

  * testsuite/modules.50-cmds/172-seap-app-delim.exp: Bad file name.

  * .gitignore, NEWS, cmdPath.c, testsuite/modulefiles/append/1.1,
  testsuite/modulefiles/prepend/1.1,
  testsuite/modules.50-cmds/172-seap-app-delim.exp,
  testsuite/modules.50-cmds/172-swap-app-delim.exp,
  testsuite/modules.50-cmds/173-swap-app-delim.exp,
  testsuite/modules.50-cmds/177-swap-prep-delim.exp,
  testsuite/modules.50-cmds/178-swap-prep-delim.exp: * Fix the module swap
  with the --delim option (Tyson Whitehead)

2012-10-25  R.K. Owen <rk@owen.sj.ca.us>

  * .cvsignore => .gitignore, config/{.cvsignore => .gitignore},
  doc/{.cvsignore => .gitignore}, etc/{.cvsignore => .gitignore},
  etc/global/{.cvsignore => .gitignore}, etc/skel/{.cvsignore => .gitignore},
  ext/{.cvsignore => .gitignore}, ext/common/{.cvsignore => .gitignore},
  init/{.cvsignore => .gitignore}, modulefiles/{.cvsignore => .gitignore},
  tcl/init/{.cvsignore => .gitignore}, testsuite/{.cvsignore => .gitignore},
  testsuite/etc/{.cvsignore => .gitignore}, testsuite/home/{.cvsignore =>
  .gitignore}: Moved the .cvsignore files to .gitignore

  * version.c: Check whether the bash shell is interactive or not Fixed a typo
  in the perl init script Trivial change to the version variable.

  * version.c: Trivial change to the version variable.

2012-09-10  sirdude <sirdude>

  * tcl/modulecmd.tcl: A couple of small patches by Thomas Zeiser
  thomas.zeiser@rrze.uni-erlangen.de  The first one adds some checks to make
  sure a directory is readable before trying to read it.  The second reverses
  the order of perging modules so that they are removed last to first, which
  maybe seems more intuitive?  Kent

2012-05-17  rkowen <rkowen>

  * ModuleCmd_Load.c, NEWS, modules_def.h, testsuite/modulefiles/recurs/modA,
  testsuite/modulefiles/recurs/modB,
  testsuite/modules.50-cmds/085-info-flags.exp,
  testsuite/modules.50-cmds/195-load-recurs.exp: * Fix the flags with regards
  to recursive load/unload

2012-04-11  rkowen <rkowen>

  * configure.ac: Fixed syntax error.

2012-03-20  sirdude <sirdude>

  * tcl/modulecmd.tcl: Modify getenv so it returns _UNDEFINED_ instead of
  erroring if the environment variable is not defined.  Also changed the
  display option so it returns $varname instead of [getenv $varname]  Kent

2012-03-19  sirdude <sirdude>

  * tcl/init/.cvsignore, tcl/modulecmd.tcl: Added a getenv function on the
  suggestion of a few people on the mailing list.  Thanks go to: Mark Lakata,
  Paul FM and Roberto Beccer  Let me know if there are any problems with it. I
  also snuck in a ignore line for .gitignore so I can use git locally, and
  fixed some minor whitespace issues.  Kent Mein

2011-12-13  rkowen <rkowen>

  * ModuleCmd_Update.c, testsuite/modules.70-maint/020-update.exp: Fixed the
  update test, and cleaned up the update code a bit.

2011-12-01  rkowen <rkowen>

  * main.c, utility.c: Fixed some memory issues.

  * ModuleCmd_Purge.c, ModuleCmd_Update.c, ModuleCmd_Use.c, cmdPath.c,
  cmdSetenv.c, configure.ac, testsuite/modules.00-init/080-begenv.exp,
  utility.c: Rolled in the recent 3-2-9 changes with regard to checks of the
  EMGetEnv resulting pointers.

2011-11-29  rkowen <rkowen>

  * ModuleCmd_Whatis.c: Fixed a memory error in the whatis part.

2011-11-28  rkowen <rkowen>

  * utility.c: Make sure a char *ptr is initialized to NULL.

  * ModuleCmd_Purge.c, ModuleCmd_Update.c, ModuleCmd_Use.c, NEWS, cmdPath.c,
  cmdSetenv.c, testsuite/modules.00-init/080-begenv.exp, utility.c, version.c:
  Test ptrs yielded by EMGetEnv.

2011-11-22  rkowen <rkowen>

  * testsuite/modules.00-init/010-environ.exp, utility.c: Found why the
  --with-split-size option was producing extra "unsetenv _LMFILES_000".

2011-11-21  rkowen <rkowen>

  * testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.10-use/040-load.exp,
  testsuite/modules.20-locate/040-alias.exp,
  testsuite/modules.20-locate/045-symvers.exp,
  testsuite/modules.20-locate/046-getsym.exp,
  testsuite/modules.20-locate/047-symerrs.exp,
  testsuite/modules.20-locate/048-symexec.exp,
  testsuite/modules.20-locate/050-locrc.exp,
  testsuite/modules.20-locate/060-rc.exp,
  testsuite/modules.20-locate/070-homerc.exp,
  testsuite/modules.30-userlvl/040-advanced.exp,
  testsuite/modules.30-userlvl/045-adv.exp,
  testsuite/modules.30-userlvl/050-expert.exp,
  testsuite/modules.30-userlvl/055-exp.exp,
  testsuite/modules.50-cmds/015-use.exp,
  testsuite/modules.50-cmds/020-setenv.exp,
  testsuite/modules.50-cmds/022-setenv-eschars.exp,
  testsuite/modules.50-cmds/030-unsetenv.exp,
  testsuite/modules.50-cmds/036-unsetenv-x.exp,
  testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.50-cmds/042-append-delim.exp,
  testsuite/modules.50-cmds/050-prepend.exp,
  testsuite/modules.50-cmds/052-prepend-delim.exp,
  testsuite/modules.50-cmds/060-remove.exp,
  testsuite/modules.50-cmds/075-alias.exp,
  testsuite/modules.50-cmds/076-alias-sub.exp,
  testsuite/modules.50-cmds/080-info-name.exp,
  testsuite/modules.50-cmds/086-info-shells.exp,
  testsuite/modules.50-cmds/087-info-shells-exp.exp,
  testsuite/modules.50-cmds/088-info-isloaded.exp,
  testsuite/modules.50-cmds/095-uname.exp,
  testsuite/modules.50-cmds/110-verbose.exp,
  testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/121-prereq-module.exp,
  testsuite/modules.50-cmds/130-conflict-full.exp,
  testsuite/modules.50-cmds/131-conflict-module.exp,
  testsuite/modules.50-cmds/140-system.exp,
  testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/175-swap2.exp,
  testsuite/modules.50-cmds/190-load.exp,
  testsuite/modules.50-cmds/200-break.exp,
  testsuite/modules.50-cmds/210-exit.exp,
  testsuite/modules.50-cmds/220-continue.exp,
  testsuite/modules.50-cmds/230-loop.exp,
  testsuite/modules.50-cmds/240-chdir.exp,
  testsuite/modules.70-maint/050-whatis-load.exp,
  testsuite/modules.80-deep/020-load.exp,
  testsuite/modules.95-version/020-load.exp,
  testsuite/modules.95-version/020-unload.exp,
  testsuite/modules.95-version/022-load2.exp,
  testsuite/modules.95-version/022-unload2.exp,
  testsuite/modules.95-version/040-xgetenv.exp,
  testsuite/modules.95-version/999-cleanup.exp: Have the testsuite handle when
  configured with --with-split-size, but it's assumed large enough to not
  split _LMFILES_ in the tests.

  * utility.c: Further checks for empty environment variables from EMGetEnv()
  for _LMFILES_%d

2011-11-15  rkowen <rkowen>

  * utility.c: Fixed --with-split-size problem with _LMFILES_NNN.

2011-11-11  rkowen <rkowen>

  * ChangeLog: Updated

  * ModuleCmd_List.c, ModuleCmd_Purge.c, ModuleCmd_Refresh.c,
  ModuleCmd_Update.c, ModuleCmd_Use.c, NEWS, cmdPath.c, cmdSetenv.c, init.c,
  modules_def.h, utility.c: Merged in the TclGetEnv/TclSetEnv fix from 3.2.9.

  * version.c: Reset version to 3.2.9 not 3.2.9a.

  * ChangeLog: Updated.

  * ModuleCmd_Purge.c, ModuleCmd_Update.c, ModuleCmd_Use.c, NEWS, cmdPath.c,
  cmdSetenv.c, init.c, modules_def.h, utility.c, version.c: Crucial bug fix
  ... TclGetEnv/TclSetEnv are Tcl routines, so renamed these to
  EMGetEnv/EMSetEnv.  Fix due to Orion Poplawski.

2011-11-10  rkowen <rkowen>

  * ChangeLog, NEWS: Updated with current 3.2.9 info.

  * ChangeLog: Update for distribution.

  * ChangeLog, NEWS, version.c: Preparation for distribution.

2011-10-24  rkowen <rkowen>

  * NEWS, cmdPath.c: * Removed the RegExp code from cmdPath.c (Poor Yorick)

2011-10-17  rkowen <rkowen>

  * Makefile.am, NEWS, init.c, init/Makefile.am, init/ruby.rb.in, utility.c:
  Rolled in the ruby addition from  Tammo Tjarks.

  * Makefile.am, NEWS, init.c, init/Makefile.am, init/ruby.rb.in, utility.c: *
  Added support for Ruby (Tammo Tjarks)

2011-10-13  rkowen <rkowen>

  * ModuleCmd_List.c, ModuleCmd_Load.c, ModuleCmd_Refresh.c,
  ModuleCmd_Switch.c, NEWS, cmdConflict.c, cmdIsLoaded.c, cmdSetenv.c, init.c,
  modulefiles/module-info.in, modules_def.h, utility.c: * Fixed unload & load
  of same module problem (Bug 3211669).

2011-10-13  sirdude <sirdude>

  * tcl/testsuite/modules.10-use/030-use.exp,
  tcl/testsuite/modules.10-use/031-append.exp,
  tcl/testsuite/modules.10-use/040-load.exp,
  tcl/testsuite/modules.10-use/070-unuse.exp,
  tcl/testsuite/modules.50-cmds/015-use.exp,
  tcl/testsuite/modules.50-cmds/020-setenv.exp,
  tcl/testsuite/modules.50-cmds/030-unsetenv.exp,
  tcl/testsuite/modules.50-cmds/040-append.exp,
  tcl/testsuite/modules.50-cmds/140-system.exp,
  tcl/testsuite/modules.80-deep/020-load.exp,
  tcl/testsuite/modules.80-deep/030-display.exp,
  tcl/testsuite/modules.90-avail/020-single.exp,
  tcl/testsuite/modules.90-avail/030-multiple.exp,
  tcl/testsuite/modules.90-avail/040-wild.exp,
  tcl/testsuite/modules.90-avail/050-long.exp,
  tcl/testsuite/modules.90-avail/060-empty.exp,
  tcl/testsuite/modules.95-version/020-load.exp,
  tcl/testsuite/modules.95-version/020-unload.exp,
  tcl/testsuite/modules.95-version/022-load2.exp,
  tcl/testsuite/modules.95-version/022-unload2.exp,
  tcl/testsuite/modules.95-version/040-xgetenv.exp: Added a couple of other
  tests Also added terminators to the end of the regex tests...  Kent

2011-10-11  sirdude <sirdude>

  * tcl/modulecmd.tcl: Remove outer loop for aliases in csh/sh type shells and
  fix it so sh shells us unalias  Kent

2011-10-10  rkowen <rkowen>

  * cmdInfo.c: Even though "trace" is no longer used ... should still have
  module-info still respond with "*undef*", so older modulefiles can still be
  processed without a Tcl error.

2011-10-07  sirdude <sirdude>

  * tcl/testsuite/modules.50-cmds/020-setenv.exp,
  tcl/testsuite/modules.50-cmds/030-unsetenv.exp: Added some additional tests
  that I have converted. Still a lot of tests to add...  Kent

  * tcl/testsuite/modules.90-avail/050-long.exp: Fix this test for the tcl
  version.  Kent

  * tcl/modulecmd.tcl: This is a patch provided by Wilson Snyder to fix up the
  regsub statements  I also silenced a few warnings produced by nagelfar(a
  syntax checker for tcl) Basically it simplified a couple of the if
  statements by using a temp variable.  Kent

2011-10-06  rkowen <rkowen>

  * cmdConflict.c: Fixed bug-3300132 prereq error format problem.

  * cmdConflict.c: Fixed bug-3300132 prereq error format problem.

  * ModuleCmd_Display.c, ModuleCmd_Help.c, ModuleCmd_Load.c,
  ModuleCmd_Purge.c, ModuleCmd_Refresh.c, ModuleCmd_Update.c, ModuleCmd_Use.c,
  ModuleCmd_Whatis.c, NEWS, cmdPath.c, cmdSetenv.c, init.c, modules_def.h,
  utility.c, utilmem.c: * Fixed the "module purge" memory corruption (Poor
  Yorick). * Isolated calls to the new interpreter and get & set env.vars.

  * NEWS, cmdPath.c, utility.c: * Fixed the module purge corruption (Poor
  Yorick)

  * NEWS: Updated with module purge fix

2011-10-03  rkowen <rkowen>

  * cmdPath.c, utility.c: Rolled in Poor Yorick's changes to Remove_Path()
  which fixes the memory corruption of "module purge".

  * ModuleCmd_Avail.c, ModuleCmd_Update.c, NEWS, cmdLog.c, cmdVersion.c,
  cmdWhatis.c, error.c, locate_module.c, modules_def.h, utility.c: *
  Optionally use Tcl memory check routines for malloc/realloc.

  * ModuleCmd_Display.c, ModuleCmd_Help.c, ModuleCmd_Load.c,
  ModuleCmd_Purge.c, ModuleCmd_Refresh.c, ModuleCmd_Update.c, ModuleCmd_Use.c,
  ModuleCmd_Whatis.c, NEWS, cmdPath.c, cmdSetenv.c, init.c, modules_def.h,
  utility.c: * Isolated calls to the new interpreter and get & set env.vars.

2011-09-29  rkowen <rkowen>

  * testsuite/config/unix.exp: Simplified the comp_output procedure ... due to
  Poor Yorick.

  * cmdPath.c: Change the strcpy to memmove because of possible memory
  overlap.

2011-09-19  rkowen <rkowen>

  * configure.ac: Removed the explicit call to AM_PO_SUBDIRS, which is already
  invoked by the AM_GNU_GETTEXT.  Patch thanks to "Poor Yorick".

2011-09-13  sirdude <sirdude>

  * tcl/modulecmd.tcl: Patch from Andy Wettstein so that aliases work again
  with bash and other sh like shells.  Kent

2011-08-12  sirdude <sirdude>

  * tcl/modulecmd.tcl: Fix provided by Thomas Zeiser. ( A missing ; )  Kent

2011-06-17  sirdude <sirdude>

  * tcl/modulecmd.tcl: Patch by Larry Baker to bring the tcl version more
  inline with the c version.  Kent

2011-05-13  sirdude <sirdude>

  * tcl/modulecmd.tcl: Patch by Larry Baker to add a 'module aliases'
  command.  Kent

2011-05-10  sirdude <sirdude>

  * tcl/Makefile, tcl/README.txt, tcl/init/Makefile,
  tcl/windows/module-tcl-win.chm, tcl/windows/module.cmd,
  tcl/windows/moduleinit.cmd: This commit is for the tcl version of modules,
  it does some additional work on windows It updates the README file which was
  pretty sparse  It also redoes the Makefiles so that it will build a default
  modulerc file if it doesn't exist.  Kent

  * tcl/modulecmd.tcl: This should fix bug# 3097451  I haven't tested it to
  make sure and the code needs more work but it's a start.  Kent

2011-04-27  sirdude <sirdude>

  * tcl/modulecmd.tcl: Patch from Kwee Heong Tan  This provides better support
  under windows. There is still more work to do here.  Kent

2011-04-06  sirdude <sirdude>

  * tcl/testsuite/modules.10-use/040-load.exp,
  tcl/testsuite/modules.50-cmds/010-init_ts.exp,
  tcl/testsuite/modules.50-cmds/015-use.exp,
  tcl/testsuite/modules.50-cmds/999-cleanup.exp,
  tcl/testsuite/modules.95-version/010-init_ts.exp,
  tcl/testsuite/modules.95-version/020-load.exp,
  tcl/testsuite/modules.95-version/020-unload.exp,
  tcl/testsuite/modules.95-version/022-load2.exp,
  tcl/testsuite/modules.95-version/022-unload2.exp,
  tcl/testsuite/modules.95-version/040-xgetenv.exp,
  tcl/testsuite/modules.95-version/999-cleanup.exp: More test files for tcl
  version of modules.  Kent

2011-03-22  sirdude <sirdude>

  * tcl/modulecmd.tcl: Small patch from Wilson Snyder to improve python
  support.  Kent

2011-03-15  sirdude <sirdude>

  * tcl/init/csh.in, tcl/init/tcsh.in: Fix up the calls to the command so its
  not doing variable substitution all of the time.  Kent

  * tcl/Makefile, tcl/testsuite/config/unix.exp, tcl/testsuite/etc/bad,
  tcl/testsuite/etc/empty, tcl/testsuite/etc/modulerc,
  tcl/testsuite/home/.modulerc, tcl/testsuite/home/.modules,
  tcl/testsuite/home/.modules.save,
  tcl/testsuite/modulefiles.deep/modulerc/.modulerc,
  .../modulefiles.deep/modulerc/dir1/.modulerc,
  tcl/testsuite/modulefiles.deep/modulerc/dir1/1.0,
  tcl/testsuite/modulefiles.deep/modulerc/dir1/2.0,
  .../modulefiles.deep/modulerc/dir2/.modulerc,
  .../modulefiles.deep/modulerc/dir2/1.0/.modulerc,
  .../modulefiles.deep/modulerc/dir2/1.0/rc1,
  .../modulefiles.deep/modulerc/dir2/1.0/rc2,
  tcl/testsuite/modulefiles.deep/modulerc/dir2/2.0,
  tcl/testsuite/modulefiles.deep/modulerc/dir2/3.0,
  tcl/testsuite/modulefiles.deep/plain/dir1/1.0,
  tcl/testsuite/modulefiles.deep/plain/dir1/2.0,
  tcl/testsuite/modulefiles.deep/plain/dir2/1.0,
  tcl/testsuite/modulefiles.deep/plain/dir2/2.0,
  tcl/testsuite/modulefiles.deep/version/.version,
  .../modulefiles.deep/version/dir1/.version,
  tcl/testsuite/modulefiles.deep/version/dir1/1.0,
  tcl/testsuite/modulefiles.deep/version/dir1/2.0,
  .../modulefiles.deep/version/dir2/.version,
  tcl/testsuite/modulefiles.deep/version/dir2/1.0,
  .../modulefiles.deep/version/dir2/2.0/.version,
  .../modulefiles.deep/version/dir2/2.0/rc1,
  .../modulefiles.deep/version/dir2/2.0/rc2,
  tcl/testsuite/modulefiles.deep/version/dir2/3.0,
  tcl/testsuite/modulefiles.other/1.1/version,
  tcl/testsuite/modulefiles.other/1.2/version,
  tcl/testsuite/modulefiles.other/1.3/version,
  tcl/testsuite/modulefiles.other/README, tcl/testsuite/modulefiles/README,
  tcl/testsuite/modulefiles/alias/1.0, tcl/testsuite/modulefiles/alias/2.0,
  tcl/testsuite/modulefiles/append/0.1, tcl/testsuite/modulefiles/append/0.2,
  tcl/testsuite/modulefiles/append/1.0, tcl/testsuite/modulefiles/append/2.0,
  tcl/testsuite/modulefiles/append/2.1, tcl/testsuite/modulefiles/append/2.2,
  tcl/testsuite/modulefiles/break/1.0, tcl/testsuite/modulefiles/break/2.0,
  tcl/testsuite/modulefiles/break/3.0, tcl/testsuite/modulefiles/break/4.0,
  tcl/testsuite/modulefiles/chdir/1.0, tcl/testsuite/modulefiles/chdir/2.0,
  tcl/testsuite/modulefiles/chdir/3.0, tcl/testsuite/modulefiles/chdir/4.0,
  tcl/testsuite/modulefiles/conflict/full,
  tcl/testsuite/modulefiles/conflict/module,
  tcl/testsuite/modulefiles/continue/1.0,
  tcl/testsuite/modulefiles/continue/2.0,
  tcl/testsuite/modulefiles/continue/3.0,
  tcl/testsuite/modulefiles/continue/4.0, tcl/testsuite/modulefiles/empty/1.0,
  tcl/testsuite/modulefiles/eschars/1.0, tcl/testsuite/modulefiles/exit/1.0,
  tcl/testsuite/modulefiles/exit/2.0, tcl/testsuite/modulefiles/exit/3.0,
  tcl/testsuite/modulefiles/help/2.0, tcl/testsuite/modulefiles/info/isloaded,
  tcl/testsuite/modulefiles/info/mode1, tcl/testsuite/modulefiles/info/mode2,
  tcl/testsuite/modulefiles/info/mode3, tcl/testsuite/modulefiles/info/mode4,
  tcl/testsuite/modulefiles/info/mode5, tcl/testsuite/modulefiles/info/mode6,
  tcl/testsuite/modulefiles/info/name, tcl/testsuite/modulefiles/info/shells,
  tcl/testsuite/modulefiles/info/shellsexp,
  tcl/testsuite/modulefiles/info/user, tcl/testsuite/modulefiles/info/userexp,
  tcl/testsuite/modulefiles/loc_dv1/1.0,
  tcl/testsuite/modulefiles/loc_dv1/2.0,
  tcl/testsuite/modulefiles/loc_dv1/3.0,
  tcl/testsuite/modulefiles/loc_dv2/.version,
  tcl/testsuite/modulefiles/loc_dv2/1.0,
  tcl/testsuite/modulefiles/loc_dv2/2.0,
  tcl/testsuite/modulefiles/loc_dv3/.version,
  tcl/testsuite/modulefiles/loc_dv3/1.0,
  tcl/testsuite/modulefiles/loc_dv3/2.0,
  tcl/testsuite/modulefiles/loc_dv4/.version,
  tcl/testsuite/modulefiles/loc_dv4/1.0,
  tcl/testsuite/modulefiles/loc_dv4/2.0,
  tcl/testsuite/modulefiles/loc_dv6/1.0,
  tcl/testsuite/modulefiles/loc_dv6/2.0/1.0,
  tcl/testsuite/modulefiles/loc_dv7/.version,
  tcl/testsuite/modulefiles/loc_dv7/1.0,
  tcl/testsuite/modulefiles/loc_dv7/2.0/1.0,
  tcl/testsuite/modulefiles/loc_dv7/3.0,
  tcl/testsuite/modulefiles/loc_dv8/.version,
  tcl/testsuite/modulefiles/loc_dv8/1.0,
  tcl/testsuite/modulefiles/loc_dv8/2.0, tcl/testsuite/modulefiles/loc_fq/1.0,
  tcl/testsuite/modulefiles/loc_fq/2.0,
  tcl/testsuite/modulefiles/loc_rc1/.modulerc,
  tcl/testsuite/modulefiles/loc_rc1/1.0,
  tcl/testsuite/modulefiles/loc_rc1/2.0,
  tcl/testsuite/modulefiles/loc_rc2/.modulerc,
  tcl/testsuite/modulefiles/loc_rc2/1.0,
  tcl/testsuite/modulefiles/loc_rc2/2.0,
  tcl/testsuite/modulefiles/loc_rc3/.modulerc,
  tcl/testsuite/modulefiles/loc_rc3/1.0,
  tcl/testsuite/modulefiles/loc_rc3/2.0,
  tcl/testsuite/modulefiles/loc_rc3/3.0,
  tcl/testsuite/modulefiles/loc_rc4/.modulerc,
  tcl/testsuite/modulefiles/loc_rc4/.version,
  tcl/testsuite/modulefiles/loc_rc4/1.0,
  tcl/testsuite/modulefiles/loc_rc4/2.0,
  tcl/testsuite/modulefiles/loc_rc4/3.0,
  tcl/testsuite/modulefiles/loc_rc5/.modulerc,
  tcl/testsuite/modulefiles/loc_rc5/1.0,
  tcl/testsuite/modulefiles/loc_rc5/2.0,
  tcl/testsuite/modulefiles/loc_sym/1.0,
  tcl/testsuite/modulefiles/loc_sym/alias1,
  tcl/testsuite/modulefiles/loc_sym/alias2,
  tcl/testsuite/modulefiles/loc_sym/alias3,
  tcl/testsuite/modulefiles/loc_sym/alias4,
  tcl/testsuite/modulefiles/loc_sym/alias5,
  tcl/testsuite/modulefiles/loc_sym/alias6,
  tcl/testsuite/modulefiles/loc_sym/exec1,
  tcl/testsuite/modulefiles/loc_sym/exec2,
  tcl/testsuite/modulefiles/loc_sym/getvers1,
  tcl/testsuite/modulefiles/loc_sym/getvers2,
  tcl/testsuite/modulefiles/loc_sym/getvers3,
  tcl/testsuite/modulefiles/loc_sym/getvers4,
  tcl/testsuite/modulefiles/loc_sym/getvers5,
  tcl/testsuite/modulefiles/loc_sym/getvers6,
  tcl/testsuite/modulefiles/loc_sym/getvers7,
  tcl/testsuite/modulefiles/loc_sym/getvers8,
  tcl/testsuite/modulefiles/loc_sym/versinf1,
  tcl/testsuite/modulefiles/loc_sym/versinf2,
  tcl/testsuite/modulefiles/loc_sym/versinf3,
  tcl/testsuite/modulefiles/loc_sym/versinf4,
  tcl/testsuite/modulefiles/loc_sym/versinf5,
  tcl/testsuite/modulefiles/loc_sym/versinf6,
  tcl/testsuite/modulefiles/loc_sym/versinf7,
  tcl/testsuite/modulefiles/loc_sym/version1,
  tcl/testsuite/modulefiles/loc_sym/version10,
  tcl/testsuite/modulefiles/loc_sym/version11,
  tcl/testsuite/modulefiles/loc_sym/version12,
  tcl/testsuite/modulefiles/loc_sym/version13,
  tcl/testsuite/modulefiles/loc_sym/version14,
  tcl/testsuite/modulefiles/loc_sym/version2,
  tcl/testsuite/modulefiles/loc_sym/version3,
  tcl/testsuite/modulefiles/loc_sym/version4,
  tcl/testsuite/modulefiles/loc_sym/version5,
  tcl/testsuite/modulefiles/loc_sym/version6,
  tcl/testsuite/modulefiles/loc_sym/version7,
  tcl/testsuite/modulefiles/loc_sym/version8,
  tcl/testsuite/modulefiles/loc_sym/version9,
  tcl/testsuite/modulefiles/log/badfac,
  tcl/testsuite/modulefiles/log/err_both_1,
  tcl/testsuite/modulefiles/log/err_both_2,
  tcl/testsuite/modulefiles/log/err_file,
  tcl/testsuite/modulefiles/log/err_syslog,
  tcl/testsuite/modulefiles/module/2.0, tcl/testsuite/modulefiles/prepend/0.1,
  tcl/testsuite/modulefiles/prepend/0.2,
  tcl/testsuite/modulefiles/prepend/1.0,
  tcl/testsuite/modulefiles/prepend/2.0,
  tcl/testsuite/modulefiles/prepend/2.1,
  tcl/testsuite/modulefiles/prepend/2.2,
  tcl/testsuite/modulefiles/prereq/full,
  tcl/testsuite/modulefiles/prereq/module,
  tcl/testsuite/modulefiles/remove/2.0, tcl/testsuite/modulefiles/setenv/1.0,
  tcl/testsuite/modulefiles/system/2.0,
  tcl/testsuite/modulefiles/trace/all_off,
  tcl/testsuite/modulefiles/trace/all_on,
  tcl/testsuite/modulefiles/uname/domain,
  tcl/testsuite/modulefiles/uname/machine,
  tcl/testsuite/modulefiles/uname/nodename,
  tcl/testsuite/modulefiles/uname/release,
  tcl/testsuite/modulefiles/uname/sysname,
  tcl/testsuite/modulefiles/uname/version,
  tcl/testsuite/modulefiles/unsetenv/0.9,
  tcl/testsuite/modulefiles/unsetenv/1.0,
  tcl/testsuite/modulefiles/use/.version, tcl/testsuite/modulefiles/use/1.0,
  tcl/testsuite/modulefiles/use/2.0, tcl/testsuite/modulefiles/use/2.1,
  tcl/testsuite/modulefiles/use/2.2, tcl/testsuite/modulefiles/user/adv,
  tcl/testsuite/modulefiles/user/advanced, tcl/testsuite/modulefiles/user/exp,
  tcl/testsuite/modulefiles/user/expert, tcl/testsuite/modulefiles/user/nov,
  tcl/testsuite/modulefiles/user/novice, tcl/testsuite/modulefiles/user/undef,
  tcl/testsuite/modulefiles/verbose/msg,
  tcl/testsuite/modulefiles/verbose/off, tcl/testsuite/modulefiles/verbose/on,
  tcl/testsuite/modulefiles/verbose/undef,
  tcl/testsuite/modulefiles/versions/1.1,
  tcl/testsuite/modulefiles/versions/1.2,
  tcl/testsuite/modulefiles/versions/1.3,
  tcl/testsuite/modulefiles/whatis/lines,
  tcl/testsuite/modulefiles/whatis/multiple,
  tcl/testsuite/modulefiles/whatis/none,
  tcl/testsuite/modulefiles/whatis/single,
  tcl/testsuite/modulefiles/whatis/string,
  tcl/testsuite/modules.00-init/005-init_ts.exp,
  tcl/testsuite/modules.00-init/006-procs.exp,
  tcl/testsuite/modules.00-init/010-environ.exp,
  tcl/testsuite/modules.00-init/015-version.exp,
  tcl/testsuite/modules.00-init/030-shells.exp,
  tcl/testsuite/modules.00-init/050-modpath.exp,
  tcl/testsuite/modules.00-init/080-begenv.exp,
  tcl/testsuite/modules.00-init/090-switches.exp,
  tcl/testsuite/modules.10-use/010-init_ts.exp,
  tcl/testsuite/modules.10-use/030-use.exp,
  tcl/testsuite/modules.10-use/031-append.exp,
  tcl/testsuite/modules.10-use/040-load.exp,
  tcl/testsuite/modules.10-use/070-unuse.exp,
  tcl/testsuite/modules.80-deep/010-init_ts.exp,
  tcl/testsuite/modules.80-deep/020-load.exp,
  tcl/testsuite/modules.80-deep/030-display.exp,
  tcl/testsuite/modules.80-deep/040-list.exp,
  tcl/testsuite/modules.80-deep/999-cleanup.exp,
  tcl/testsuite/modules.90-avail/010-init_ts.exp,
  tcl/testsuite/modules.90-avail/020-single.exp,
  tcl/testsuite/modules.90-avail/030-multiple.exp,
  tcl/testsuite/modules.90-avail/040-wild.exp,
  tcl/testsuite/modules.90-avail/050-long.exp,
  tcl/testsuite/modules.90-avail/060-empty.exp, tcl/testsuite/not_installed,
  tcl/testsuite/systest: Finally got testfiles working with the tcl version of
  modules. There is still lots of work to be done but there are a good number
  of tests that are working. Currently 80 of 90 are passing. At this point I
  want to commit before fixing issues which involve modifying the main
  application.  Kent

  * tcl/modulecmd.tcl: This commit does a couple of things. Bring back the
  auto determine shell to call(needed for the next commit testsuite) It also
  removes the need for using a temp file This commit also has a couple of
  small fixes to make it more like the standard version of modules as far as
  output to the screen goes.  Kent

2011-02-28  sirdude <sirdude>

  * tcl/modulecmd.tcl: This commit does a few things to modulecmd.tcl  It
  cleans up some unused global vars Fixes some spacing in some report
  statements as well as fixes some debugging statements adds a ubuntu specific
  bit of code to uname so uname release returns the codename of an ubuntu
  install  Finally in getPathToModule I commented out the Check for aliases
  bit of code This is already done at the top level so no need to do it again.
  (If someone finds a case where this is needed let me know and I'll add it
  back in)  Kent

2010-11-12  rkowen <rkowen>

  * doc/module.1.in: Updated the man page with regards to the package
  modulefile directories.

  * NEWS, doc/module.1.in, doc/modulefile.4.in, init/bash.in, init/cmake.in,
  init/csh.in, init/ksh.in, init/perl.pm.in, init/python.py.in, init/sh.in,
  init/zsh.in, main.c, modulefiles/modules.in, modules_def.h: * Removed the
  $MODULESHOME env.var. which is not used at all.

  * ChangeLog, Makefile.am, NEWS, configure.ac, doc/module.1.in,
  init/.modulespath.in, init/Makefile.am, init/bash.in,
  init/bash_completion.in, init/cmake.in, init/csh.in, init/ksh.in,
  init/perl.pm.in, init/python.py.in, init/sh.in, init/zsh.in, main.c,
  modulefiles/Makefile.am: * Reworked configuration and Makefile for
  fine-grain control of certain paths and config files.

2010-11-11  rkowen <rkowen>

  * ModuleCmd_Load.c, NEWS: Rolled in the Modules 3.2.9 version. * Fix the
  coexistence of load/remove flags (Martin Siegert)

  * ModuleCmd_Load.c, NEWS: * Fix the coexistence of load/remove flags (due to
  Martin Siegert)

  * ChangeLog, Makefile.am, ModuleCmd_Avail.c, ModuleCmd_Clear.c,
  ModuleCmd_Display.c, ModuleCmd_Help.c, ModuleCmd_Init.c, ModuleCmd_List.c,
  ModuleCmd_Load.c, ModuleCmd_Purge.c, ModuleCmd_Refresh.c,
  ModuleCmd_Switch.c, ModuleCmd_Update.c, ModuleCmd_Use.c, ModuleCmd_Whatis.c,
  NEWS, TODO, cmdAlias.c, cmdConflict.c, cmdInfo.c, cmdIsLoaded.c, cmdLog.c,
  cmdMisc.c, cmdModule.c, cmdPath.c, cmdSetenv.c, cmdTrace.c, cmdUlvl.c,
  cmdUname.c, cmdVerbose.c, cmdVersion.c, cmdWhatis.c, cmdXResource.c,
  config/emtcl.m4, config/tcl.m4, configure.ac, doc/.cvsignore,
  doc/module.1.in, doc/modulefile.4.in, error.c, etc/add.modules.in,
  etc/global/bashrc.in, etc/global/csh.modules.in,
  etc/global/profile.modules.in, etc/mkroot.in, ext/add.ext.in, ext/mkroot.in,
  init.c, init/.modulespath.in, init/Makefile.am, init/bash.in, init/cmake.in,
  init/csh.in, init/ksh.in, init/perl.pm.in, init/python.py.in, init/sh.in,
  init/zsh.in, locate_module.c, main.c, modulefiles/Makefile.am,
  modulefiles/dot.in, modulefiles/module-cvs.in, modulefiles/module-info.in,
  modulefiles/modules.in, modulefiles/null.in, modulefiles/use.own.in,
  modulefiles/version.in, modules.lsm.in, modules_def.h,
  testsuite/config/unix.exp, testsuite/modulefiles.deep/modulerc/.modulerc,
  testsuite/modulefiles.deep/modulerc/dir1/.modulerc,
  testsuite/modulefiles.deep/modulerc/dir1/1.0,
  testsuite/modulefiles.deep/modulerc/dir1/2.0,
  testsuite/modulefiles.deep/modulerc/dir2/.modulerc,
  .../modulefiles.deep/modulerc/dir2/1.0/.modulerc,
  testsuite/modulefiles.deep/modulerc/dir2/1.0/rc1,
  testsuite/modulefiles.deep/modulerc/dir2/1.0/rc2,
  testsuite/modulefiles.deep/modulerc/dir2/2.0,
  testsuite/modulefiles.deep/modulerc/dir2/3.0,
  testsuite/modulefiles.deep/plain/dir1/1.0,
  testsuite/modulefiles.deep/plain/dir1/2.0,
  testsuite/modulefiles.deep/plain/dir2/1.0,
  testsuite/modulefiles.deep/plain/dir2/2.0,
  testsuite/modulefiles.deep/version/.version,
  testsuite/modulefiles.deep/version/dir1/.version,
  testsuite/modulefiles.deep/version/dir1/1.0,
  testsuite/modulefiles.deep/version/dir1/2.0,
  testsuite/modulefiles.deep/version/dir2/.version,
  testsuite/modulefiles.deep/version/dir2/1.0,
  .../modulefiles.deep/version/dir2/2.0/.version,
  testsuite/modulefiles.deep/version/dir2/2.0/rc1,
  testsuite/modulefiles.deep/version/dir2/2.0/rc2,
  testsuite/modulefiles.deep/version/dir2/3.0,
  testsuite/modulefiles/break/2.0, testsuite/modulefiles/info/shellsexp,
  testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.00-init/030-shells.exp,
  testsuite/modules.00-init/080-begenv.exp,
  testsuite/modules.10-use/030-use.exp,
  testsuite/modules.10-use/031-append.exp,
  testsuite/modules.10-use/070-unuse.exp,
  testsuite/modules.20-locate/050-locrc.exp,
  testsuite/modules.35-trace/010-init_ts.exp,
  testsuite/modules.50-cmds/015-use.exp,
  testsuite/modules.50-cmds/017-use-undo.exp,
  testsuite/modules.50-cmds/020-setenv.exp,
  testsuite/modules.50-cmds/022-setenv-eschars.exp,
  testsuite/modules.50-cmds/025-setenv-undo.exp,
  testsuite/modules.50-cmds/030-unsetenv.exp,
  testsuite/modules.50-cmds/035-unsetenv-undo.exp,
  testsuite/modules.50-cmds/036-unsetenv-x.exp,
  testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.50-cmds/042-append-delim.exp,
  testsuite/modules.50-cmds/045-append-undo.exp,
  testsuite/modules.50-cmds/047-app-del-undo.exp,
  testsuite/modules.50-cmds/050-prepend.exp,
  testsuite/modules.50-cmds/052-prepend-delim.exp,
  testsuite/modules.50-cmds/055-prepend-undo.exp,
  testsuite/modules.50-cmds/057-pre-del-undo.exp,
  testsuite/modules.50-cmds/060-remove.exp,
  testsuite/modules.50-cmds/065-remove-undo.exp,
  testsuite/modules.50-cmds/075-alias.exp,
  testsuite/modules.50-cmds/077-alias-undo.exp,
  testsuite/modules.50-cmds/078-refresh.exp,
  testsuite/modules.50-cmds/080-info-name.exp,
  testsuite/modules.50-cmds/086-info-shells.exp,
  testsuite/modules.50-cmds/087-info-shells-exp.exp,
  testsuite/modules.50-cmds/088-info-isloaded.exp,
  testsuite/modules.50-cmds/095-uname.exp,
  testsuite/modules.50-cmds/100-loglevel.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/175-swap2.exp,
  testsuite/modules.50-cmds/190-load.exp,
  testsuite/modules.50-cmds/200-break.exp,
  testsuite/modules.50-cmds/210-exit.exp,
  testsuite/modules.50-cmds/220-continue.exp,
  testsuite/modules.50-cmds/230-loop.exp,
  testsuite/modules.70-maint/045-listlong.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.80-deep/010-init_ts.exp,
  testsuite/modules.80-deep/020-load.exp,
  testsuite/modules.80-deep/030-display.exp,
  testsuite/modules.80-deep/040-list.exp,
  testsuite/modules.80-deep/999-cleanup.exp,
  testsuite/modules.90-avail/030-multiple.exp,
  testsuite/modules.90-avail/050-long.exp,
  testsuite/modules.95-version/020-load.exp,
  testsuite/modules.95-version/020-unload.exp,
  testsuite/modules.95-version/022-load2.exp,
  testsuite/modules.95-version/022-unload2.exp,
  testsuite/modules.95-version/040-xgetenv.exp, utility.c, version.c,
  xref/ModuleCmd_Avail.c.html, xref/ModuleCmd_Avail.c.src.html,
  xref/ModuleCmd_Clear.c.html, xref/ModuleCmd_Clear.c.src.html,
  xref/ModuleCmd_Display.c.html, xref/ModuleCmd_Display.c.src.html,
  xref/ModuleCmd_Help.c.html, xref/ModuleCmd_Help.c.src.html,
  xref/ModuleCmd_Init.c.html, xref/ModuleCmd_Init.c.src.html,
  xref/ModuleCmd_List.c.html, xref/ModuleCmd_List.c.src.html,
  xref/ModuleCmd_Load.c.html, xref/ModuleCmd_Load.c.src.html,
  xref/ModuleCmd_Purge.c.html, xref/ModuleCmd_Purge.c.src.html,
  xref/ModuleCmd_Refresh.c.html, xref/ModuleCmd_Refresh.c.src.html,
  xref/ModuleCmd_Switch.c.html, xref/ModuleCmd_Switch.c.src.html,
  xref/ModuleCmd_Update.c.html, xref/ModuleCmd_Update.c.src.html,
  xref/ModuleCmd_Use.c.html, xref/ModuleCmd_Use.c.src.html,
  xref/ModuleCmd_Whatis.c.html, xref/ModuleCmd_Whatis.c.src.html,
  xref/cmdAlias.c.html, xref/cmdAlias.c.src.html, xref/cmdChdir.c.html,
  xref/cmdChdir.c.src.html, xref/cmdConflict.c.html,
  xref/cmdConflict.c.src.html, xref/cmdInfo.c.html, xref/cmdInfo.c.src.html,
  xref/cmdIsLoaded.c.html, xref/cmdIsLoaded.c.src.html, xref/cmdLog.c.html,
  xref/cmdLog.c.src.html, xref/cmdMisc.c.html, xref/cmdMisc.c.src.html,
  xref/cmdModule.c.html, xref/cmdModule.c.src.html, xref/cmdPath.c.html,
  xref/cmdPath.c.src.html, xref/cmdSetenv.c.html, xref/cmdSetenv.c.src.html,
  xref/cmdTrace.c.html, xref/cmdTrace.c.src.html, xref/cmdUlvl.c.html,
  xref/cmdUlvl.c.src.html, xref/cmdUname.c.html, xref/cmdUname.c.src.html,
  xref/cmdVerbose.c.html, xref/cmdVerbose.c.src.html, xref/cmdVersion.c.html,
  xref/cmdVersion.c.src.html, xref/cmdWhatis.c.html,
  xref/cmdWhatis.c.src.html, xref/cmdXResource.c.html,
  xref/cmdXResource.c.src.html, xref/cxref.apdx.html, xref/cxref.function,
  xref/cxref.html, xref/cxref.include, xref/cxref.typedef,
  xref/cxref.variable, xref/error.c.html, xref/error.c.src.html,
  xref/getopt.c.html, xref/getopt.c.src.html, xref/init.c.html,
  xref/init.c.src.html, xref/locate_module.c.html,
  xref/locate_module.c.src.html, xref/main.c.html, xref/main.c.src.html,
  xref/utility.c.html, xref/utility.c.src.html, xref/version.c.html,
  xref/version.c.src.html: Setting up the modules-3-2-9 branch.

2010-11-04  rkowen <rkowen>

  * locate_module.c: Using a const char * to remove a compiler warning
  message.

2010-10-18  rkowen <rkowen>

  * NEWS, cmdVersion.c, doc/modulefile.4.in,
  testsuite/modulefiles.deep/modulerc/.modulerc,
  testsuite/modulefiles.deep/modulerc/dir1/.modulerc,
  .../modulefiles.deep/modulerc/dir2/1.0/.modulerc,
  testsuite/modulefiles/loc_rc3/.modulerc,
  testsuite/modulefiles/loc_rc4/.modulerc: * Let the "module-version" command
  use a "name" of '.' for "this" module directory ... useful for deep
  modulefile directories.

2010-10-18  sirdude <sirdude>

  * tcl/modulecmd.tcl: small fixes to module-info  Kent

2010-10-14  rkowen <rkowen>

  * ModuleCmd_Avail.c, configure.ac, init.c, locate_module.c, main.c,
  modules_def.h: Added in a skipdirs object with the name of source code
  management directories to skip, unless the directory has a module dot file
  (.version or .modulerc). Fixed problem with the po/Makefile.*

2010-10-11  rkowen <rkowen>

  * cmdVersion.c, locate_module.c, modules_def.h: Rolled in some changes from
  the mfiles branch.

2010-10-08  rkowen <rkowen>

  * ModuleCmd_Avail.c, ModuleCmd_Init.c, ModuleCmd_Load.c, ModuleCmd_Purge.c,
  ModuleCmd_Switch.c, ModuleCmd_Update.c, ModuleCmd_Whatis.c, cmdConflict.c,
  cmdInfo.c, cmdIsLoaded.c, cmdModule.c, cmdPath.c, cmdUname.c, cmdVersion.c,
  cmdWhatis.c, cmdXResource.c, init.c, locate_module.c, main.c, utility.c,
  utilmem.c: Simplified the conditional tests for NULL.

  * ModuleCmd_Use.c, ModuleCmd_Whatis.c, cmdChdir.c, cmdConflict.c,
  locate_module.c, modules_def.h, utility.c: Hid most of the stat() calls
  behind is_(), an internal function.

2010-10-07  rkowen <rkowen>

  * cmdVersion.c, doc/modulefile.4.in, locate_module.c,
  testsuite/modulefiles.deep/modulerc/.modulerc,
  testsuite/modulefiles.deep/modulerc/dir1/.modulerc,
  testsuite/modulefiles.deep/modulerc/dir1/1.0,
  testsuite/modulefiles.deep/modulerc/dir1/2.0,
  testsuite/modulefiles.deep/modulerc/dir2/.modulerc,
  .../modulefiles.deep/modulerc/dir2/1.0/.modulerc,
  testsuite/modulefiles.deep/modulerc/dir2/1.0/rc1,
  testsuite/modulefiles.deep/modulerc/dir2/1.0/rc2,
  testsuite/modulefiles.deep/modulerc/dir2/2.0,
  testsuite/modulefiles.deep/modulerc/dir2/3.0,
  testsuite/modulefiles.deep/plain/dir1/1.0,
  testsuite/modulefiles.deep/plain/dir1/2.0,
  testsuite/modulefiles.deep/plain/dir2/1.0,
  testsuite/modulefiles.deep/plain/dir2/2.0,
  testsuite/modulefiles.deep/version/.version,
  testsuite/modulefiles.deep/version/dir1/.version,
  testsuite/modulefiles.deep/version/dir1/1.0,
  testsuite/modulefiles.deep/version/dir1/2.0,
  testsuite/modulefiles.deep/version/dir2/.version,
  testsuite/modulefiles.deep/version/dir2/1.0,
  .../modulefiles.deep/version/dir2/2.0/.version,
  testsuite/modulefiles.deep/version/dir2/2.0/rc1,
  testsuite/modulefiles.deep/version/dir2/2.0/rc2,
  testsuite/modulefiles.deep/version/dir2/3.0,
  testsuite/modules.20-locate/050-locrc.exp,
  testsuite/modules.80-deep/010-init_ts.exp,
  testsuite/modules.80-deep/020-load.exp,
  testsuite/modules.80-deep/030-display.exp,
  testsuite/modules.80-deep/040-list.exp,
  testsuite/modules.80-deep/999-cleanup.exp: Rolled in the deep modulefile
  changes from version 3.2.8.

  * modulefiles/module-cvs.in, modulefiles/modules.in: Rolled in the
  modulefile changes from version 3.2.8.

  * ChangeLog, Makefile.am: Rolled in the Makefile.am / library order fix from
  version 3.2.8.

2010-10-05  rkowen <rkowen>

  * doc/module.1.in: Updated with sections on initializing modules for perl
  and python from version 3.2.8.

  * ModuleCmd_Purge.c: Merged the fix for multiple module purge from version
  3.2.8.

  * ChangeLog, NEWS, config/emtcl.m4, config/tcl.m4, configure.ac,
  testsuite/modules.70-maint/070-display.exp: Rolled in from version 3.2.8 the
  configure --with-man-path option and the fixed emtcl.m4 which corrects the
  --with-tcl and related options, and the --without-x test variance.

2010-10-04  rkowen <rkowen>

  * cmdConflict.c, doc/module.1.in, init.c, init/Makefile.am, init/cmake.in,
  init/{perl.in => perl.pm.in}, init/python.in, init/python.py.in,
  testsuite/modulefiles/info/shellsexp,
  testsuite/modules.00-init/030-shells.exp,
  testsuite/modules.00-init/080-begenv.exp,
  testsuite/modules.10-use/030-use.exp,
  testsuite/modules.10-use/031-append.exp,
  testsuite/modules.10-use/070-unuse.exp,
  testsuite/modules.50-cmds/015-use.exp,
  testsuite/modules.50-cmds/017-use-undo.exp,
  testsuite/modules.50-cmds/020-setenv.exp,
  testsuite/modules.50-cmds/022-setenv-eschars.exp,
  testsuite/modules.50-cmds/025-setenv-undo.exp,
  testsuite/modules.50-cmds/030-unsetenv.exp,
  testsuite/modules.50-cmds/035-unsetenv-undo.exp,
  testsuite/modules.50-cmds/036-unsetenv-x.exp,
  testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.50-cmds/042-append-delim.exp,
  testsuite/modules.50-cmds/045-append-undo.exp,
  testsuite/modules.50-cmds/047-app-del-undo.exp,
  testsuite/modules.50-cmds/050-prepend.exp,
  testsuite/modules.50-cmds/052-prepend-delim.exp,
  testsuite/modules.50-cmds/055-prepend-undo.exp,
  testsuite/modules.50-cmds/057-pre-del-undo.exp,
  testsuite/modules.50-cmds/060-remove.exp,
  testsuite/modules.50-cmds/065-remove-undo.exp,
  testsuite/modules.50-cmds/077-alias-undo.exp,
  testsuite/modules.50-cmds/080-info-name.exp,
  testsuite/modules.50-cmds/086-info-shells.exp,
  testsuite/modules.50-cmds/087-info-shells-exp.exp,
  testsuite/modules.50-cmds/088-info-isloaded.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/175-swap2.exp,
  testsuite/modules.50-cmds/190-load.exp,
  testsuite/modules.50-cmds/200-break.exp,
  testsuite/modules.50-cmds/210-exit.exp,
  testsuite/modules.50-cmds/220-continue.exp,
  testsuite/modules.50-cmds/230-loop.exp,
  testsuite/modules.90-avail/030-multiple.exp,
  testsuite/modules.95-version/020-load.exp,
  testsuite/modules.95-version/020-unload.exp,
  testsuite/modules.95-version/022-load2.exp,
  testsuite/modules.95-version/022-unload2.exp,
  testsuite/modules.95-version/040-xgetenv.exp, utility.c: Rolled in the cmake
  addition from version 3.2.8, and the new perl.pm & python.py init files.

2010-10-01  sirdude <sirdude>

  * tcl/modulecmd.tcl: Patches from John Tseng,  Fixes an issue with perl
  autoinit by adding tclsh to the call  Updates to module-version.  Kent

2010-07-27  rkowen <rkowen>

  * cmdChdir.c, init/bash_completion.in, testsuite/modulefiles/alias/1.0,
  testsuite/modulefiles/append/0.1, testsuite/modulefiles/append/0.2,
  testsuite/modulefiles/append/1.0, testsuite/modulefiles/append/2.1,
  testsuite/modulefiles/append/2.2, testsuite/modulefiles/break/4.0,
  testsuite/modulefiles/continue/1.0, testsuite/modulefiles/continue/2.0,
  testsuite/modulefiles/continue/3.0, testsuite/modulefiles/continue/4.0,
  testsuite/modulefiles/exit/1.0, testsuite/modulefiles/exit/2.0,
  testsuite/modulefiles/exit/3.0, testsuite/modulefiles/prepend/0.1,
  testsuite/modulefiles/prepend/0.2, testsuite/modulefiles/prepend/1.0,
  testsuite/modulefiles/prepend/2.1, testsuite/modulefiles/prepend/2.2,
  testsuite/modules.50-cmds/042-append-delim.exp,
  testsuite/modules.50-cmds/047-app-del-undo.exp,
  testsuite/modules.50-cmds/052-prepend-delim.exp,
  testsuite/modules.50-cmds/057-pre-del-undo.exp,
  testsuite/modules.50-cmds/076-alias-sub.exp,
  testsuite/modules.50-cmds/175-swap2.exp,
  testsuite/modules.50-cmds/210-exit.exp,
  testsuite/modules.50-cmds/220-continue.exp,
  testsuite/modules.50-cmds/230-loop.exp,
  testsuite/modules.50-cmds/999-cleanup.exp: Base version is 3-2-0, then
  merged to 3-2-7.

2010-05-28  sirdude <sirdude>

  * tcl/modulecmd.tcl: Last patch from Gerrit Renker  This one makes it so
  module switch tries to swap the order if the user messed it up. If you type:
  module switch new old instead of: module switch old new it will attempt to
  correct it.  Kent

  * tcl/modulecmd.tcl: Another patch by Gerrit Renker This one makes module
  display/show more similar to the c version of modules.  Kent

  * tcl/modulecmd.tcl: Two more patches by Gerrit Renker These two clean up
  the "version" info and makes the startup files more compatable with the c
  version of modules.  Kent

  * tcl/modulecmd.tcl: This is patch #6 from Gerrit Renker This patch
  increased the CSH_LIMIT to the same as linux's default. (This seams
  reasonable, if people have older machines that have issues they can always
  drop it back down to a lower value)  Kent

  * tcl/modulecmd.tcl: This is patch #5 from Gerrit Renker This one improves
  escaping of special symbols  Kent

  * tcl/modulecmd.tcl: Patch #4 from Gerrit Renker This one cleans up dynamic
  columns and makes it autodetect  Kent

2010-05-27  sirdude <sirdude>

  * tcl/modulecmd.tcl: small typo in last patch was missing a $  Kent

  * tcl/modulecmd.tcl: Patch #3 submitted by Gerrit Renker This one fixes a
  heck of a lot of typo's. (Spelling isn't my strong suit) :)  Kent

  * tcl/modulecmd.tcl: Two patches by Gerrit Renker  The first one fixes an
  issue with sourcing a .versin/.modulerc over and over the second one fixes
  up listModules so that it behaves better. (Gerrit has submitted a number of
  patches, this is just two of them)  Kent

2010-05-24  sirdude <sirdude>

  * tcl/modulecmd.tcl: This is a patch by Gerrit Renker to fix an issue with
  _LMFILES_ not having correct data when nesting module load/unload commands
  inside of other modules.  Kent

2009-10-15  rkowen <rkowen>

  * modulefiles/.cvsignore: Ignore the generated notavail modulefile

  * NEWS, configure.ac, modulefiles/Makefile.am, modulefiles/notavail.in: *
  Added the "notavail" modulefile (as shown in man page)

  * init.c, locate_module.c, main.c: Resolved some minor warnings.

  * Makefile.am, ModuleCmd_Avail.c, ModuleCmd_Init.c, ModuleCmd_List.c,
  ModuleCmd_Load.c, ModuleCmd_Refresh.c, ModuleCmd_Switch.c,
  ModuleCmd_Whatis.c, NEWS, PROBLEMS, cmdConflict.c, cmdInfo.c, cmdIsLoaded.c,
  cmdLog.c, cmdVersion.c, configure.ac, error.c, init.c, locate_module.c,
  main.c, modules_def.h, ovec.c, ovec.h, testsuite/etc/{rc => modulerc},
  testsuite/modules.20-locate/060-rc.exp, utility.c, utilobj.c, uvec.c: Allow
  loading and unloading the .modulerc & .version files Removed the Tcl
  intrepretor from many of the locate_modulefile utility routines. Simplified
  the error code with uvec. Added "tag" to MHash object for existence testing.
  Passes all tests but 2 generate "duplicate version symbol ... found". Merged
  in from the mfiles branch.

2009-10-12  rkowen <rkowen>

  * ChangeLog: Updated with 'mpath' merge.

  * ModuleCmd_Avail.c, ModuleCmd_Use.c, ModuleCmd_Whatis.c, NEWS,
  cmdConflict.c, cmdIsLoaded.c, locate_module.c, main.c, modules_def.h,
  testsuite/modules.10-use/040-load.exp, utility.c: Merged in the 'mpath'
  branch changes.

2009-09-22  rkowen <rkowen>

  * init/.modulespath.in, init/Makefile.am, init/bash.in, init/csh.in,
  init/ksh.in, init/python.in, init/sh.in, init/zsh.in: Merged in the final of
  the 3.2.7b changes to the init/ files.

  * Makefile.am: Added init/bash_completion.in into the distribution list.

  * init/bash.in, init/csh.in, init/ksh.in, init/python.in, init/sh.in,
  init/zsh.in: Changed the sed '\t' to a tab char so it would work on Solaris.

2009-09-02  rkowen <rkowen>

  * ChangeLog, cmdConflict.c, cmdLog.c, error.c,
  testsuite/modules.50-cmds/100-loglevel.exp, utility.c,
  xref/ModuleCmd_Avail.c.html, xref/ModuleCmd_Avail.c.src.html,
  xref/ModuleCmd_Clear.c.html, xref/ModuleCmd_Clear.c.src.html,
  xref/ModuleCmd_Display.c.html, xref/ModuleCmd_Display.c.src.html,
  xref/ModuleCmd_Help.c.html, xref/ModuleCmd_Help.c.src.html,
  xref/ModuleCmd_Init.c.html, xref/ModuleCmd_Init.c.src.html,
  xref/ModuleCmd_List.c.html, xref/ModuleCmd_List.c.src.html,
  xref/ModuleCmd_Load.c.html, xref/ModuleCmd_Load.c.src.html,
  xref/ModuleCmd_Purge.c.html, xref/ModuleCmd_Purge.c.src.html,
  xref/ModuleCmd_Refresh.c.html, xref/ModuleCmd_Refresh.c.src.html,
  xref/ModuleCmd_Switch.c.html, xref/ModuleCmd_Switch.c.src.html,
  xref/ModuleCmd_Update.c.html, xref/ModuleCmd_Update.c.src.html,
  xref/ModuleCmd_Use.c.html, xref/ModuleCmd_Use.c.src.html,
  xref/ModuleCmd_Whatis.c.html, xref/ModuleCmd_Whatis.c.src.html,
  xref/cmdAlias.c.html, xref/cmdAlias.c.src.html, xref/cmdChdir.c.html,
  xref/cmdChdir.c.src.html, xref/cmdConflict.c.html,
  xref/cmdConflict.c.src.html, xref/cmdInfo.c.html, xref/cmdInfo.c.src.html,
  xref/cmdIsLoaded.c.html, xref/cmdIsLoaded.c.src.html, xref/cmdLog.c.html,
  xref/cmdLog.c.src.html, xref/cmdMisc.c.html, xref/cmdMisc.c.src.html,
  xref/cmdModule.c.html, xref/cmdModule.c.src.html, xref/cmdPath.c.html,
  xref/cmdPath.c.src.html, xref/cmdSetenv.c.html, xref/cmdSetenv.c.src.html,
  xref/cmdUlvl.c.html, xref/cmdUlvl.c.src.html, xref/cmdUname.c.html,
  xref/cmdUname.c.src.html, xref/cmdVerbose.c.html,
  xref/cmdVerbose.c.src.html, xref/cmdVersion.c.html,
  xref/cmdVersion.c.src.html, xref/cmdWhatis.c.html,
  xref/cmdWhatis.c.src.html, xref/cmdXResource.c.html,
  xref/cmdXResource.c.src.html, xref/config.h.html, xref/config.h.src.html,
  xref/cxref.apdx.html, xref/cxref.function, xref/cxref.html,
  xref/cxref.include, xref/cxref.typedef, xref/cxref.variable,
  xref/error.c.html, xref/error.c.src.html, xref/getopt.c.html,
  xref/getopt.c.src.html, xref/init.c.html, xref/init.c.src.html,
  xref/locate_module.c.html, xref/locate_module.c.src.html, xref/main.c.html,
  xref/main.c.src.html, xref/modules_def.h.html, xref/modules_def.h.src.html,
  xref/utility.c.html, xref/utility.c.src.html, xref/version.c.html: Merged in
  the mlist code clean up changes.

2009-09-01  rkowen <rkowen>

  * ChangeLog, xref/ModuleCmd_Avail.c.html, xref/ModuleCmd_Avail.c.src.html,
  xref/ModuleCmd_Clear.c.html, xref/ModuleCmd_Clear.c.src.html,
  xref/ModuleCmd_Display.c.html, xref/ModuleCmd_Display.c.src.html,
  xref/ModuleCmd_Help.c.html, xref/ModuleCmd_Help.c.src.html,
  xref/ModuleCmd_Init.c.html, xref/ModuleCmd_Init.c.src.html,
  xref/ModuleCmd_List.c.html, xref/ModuleCmd_List.c.src.html,
  xref/ModuleCmd_Load.c.html, xref/ModuleCmd_Load.c.src.html,
  xref/ModuleCmd_Purge.c.html, xref/ModuleCmd_Purge.c.src.html,
  xref/ModuleCmd_Refresh.c.html, xref/ModuleCmd_Refresh.c.src.html,
  xref/ModuleCmd_Switch.c.html, xref/ModuleCmd_Switch.c.src.html,
  xref/ModuleCmd_Update.c.html, xref/ModuleCmd_Update.c.src.html,
  xref/ModuleCmd_Use.c.html, xref/ModuleCmd_Use.c.src.html,
  xref/ModuleCmd_Whatis.c.html, xref/ModuleCmd_Whatis.c.src.html,
  xref/cmdAlias.c.html, xref/cmdAlias.c.src.html, xref/cmdChdir.c.html,
  xref/cmdChdir.c.src.html, xref/cmdConflict.c.html,
  xref/cmdConflict.c.src.html, xref/cmdInfo.c.html, xref/cmdInfo.c.src.html,
  xref/cmdIsLoaded.c.html, xref/cmdIsLoaded.c.src.html, xref/cmdLog.c.html,
  xref/cmdLog.c.src.html, xref/cmdMisc.c.html, xref/cmdMisc.c.src.html,
  xref/cmdModule.c.html, xref/cmdModule.c.src.html, xref/cmdPath.c.html,
  xref/cmdPath.c.src.html, xref/cmdSetenv.c.html, xref/cmdSetenv.c.src.html,
  xref/cmdTrace.c.html, xref/cmdTrace.c.src.html, xref/cmdUlvl.c.html,
  xref/cmdUlvl.c.src.html, xref/cmdUname.c.html, xref/cmdUname.c.src.html,
  xref/cmdVerbose.c.html, xref/cmdVerbose.c.src.html, xref/cmdVersion.c.html,
  xref/cmdVersion.c.src.html, xref/cmdWhatis.c.html,
  xref/cmdWhatis.c.src.html, xref/cmdXResource.c.html,
  xref/cmdXResource.c.src.html, xref/config.h.html, xref/config.h.src.html,
  xref/cxref.apdx.html, xref/cxref.function, xref/cxref.html,
  xref/cxref.include, xref/cxref.typedef, xref/cxref.variable,
  xref/error.c.html, xref/error.c.src.html, xref/getopt.c.html,
  xref/getopt.c.src.html, xref/init.c.html, xref/init.c.src.html,
  xref/locate_module.c.html, xref/locate_module.c.src.html, xref/main.c.html,
  xref/main.c.src.html, xref/modules_def.h.html, xref/modules_def.h.src.html,
  xref/utility.c.html, xref/utility.c.src.html, xref/utilmem.c.html,
  xref/utilmem.c.src.html, xref/utilobj.c.html, xref/utilobj.c.src.html,
  xref/uvec.c.html, xref/uvec.c.src.html, xref/version.c.html: Updated the
  cxref pages.

  * LICENSE.LGPL, Makefile.am, ModuleCmd_Avail.c, ModuleCmd_Clear.c,
  ModuleCmd_Init.c, ModuleCmd_List.c, ModuleCmd_Load.c, ModuleCmd_Use.c,
  ModuleCmd_Whatis.c, NEWS, cmdAlias.c, cmdChdir.c, cmdConflict.c, cmdInfo.c,
  cmdIsLoaded.c, cmdLog.c, cmdModule.c, cmdPath.c, cmdSetenv.c, cmdUlvl.c,
  cmdUname.c, cmdVerbose.c, cmdVersion.c, cmdWhatis.c, cmdXResource.c,
  configure.ac, error.c, init.c, locate_module.c, main.c,
  modulefiles/.cvsignore, modulefiles/HOME.in, modulefiles/Makefile.am,
  modules_def.h, utility.c, utilmem.c, utilobj.c, uvec.c, uvec.h: Merging in
  the changes from the mlist branch.

2009-08-24  rkowen <rkowen>

  * cmdConflict.c: Lost value of notloaded_flag in conversion to objv.

2009-08-23  rkowen <rkowen>

  * ChangeLog: Updated.

  * ModuleCmd_Avail.c, ModuleCmd_Clear.c, ModuleCmd_Display.c,
  ModuleCmd_Help.c, ModuleCmd_Init.c, ModuleCmd_List.c, ModuleCmd_Load.c,
  ModuleCmd_Purge.c, ModuleCmd_Refresh.c, ModuleCmd_Switch.c,
  ModuleCmd_Update.c, ModuleCmd_Use.c, ModuleCmd_Whatis.c, NEWS, cmdAlias.c,
  cmdChdir.c, cmdConflict.c, cmdInfo.c, cmdIsLoaded.c, cmdLog.c, cmdMisc.c,
  cmdModule.c, cmdPath.c, cmdSetenv.c, cmdUlvl.c, cmdUname.c, cmdVerbose.c,
  cmdVersion.c, cmdWhatis.c, cmdXResource.c, configure.ac, error.c, getopt.c,
  init.c, locate_module.c, main.c, modules_def.h, utility.c, utilobj.c: Merged
  the nodeb branch into the main trunk.

  * ChangeLog: Updated.

  * .indent.pro, ChangeLog, Makefile.am, ModuleCmd_Avail.c, ModuleCmd_Clear.c,
  ModuleCmd_Display.c, ModuleCmd_Help.c, ModuleCmd_Load.c,
  ModuleCmd_Refresh.c, ModuleCmd_Update.c, ModuleCmd_Use.c,
  ModuleCmd_Whatis.c, NEWS, cmdAlias.c, cmdChdir.c, cmdConflict.c, cmdInfo.c,
  cmdIsLoaded.c, cmdLog.c, cmdMisc.c, cmdModule.c, cmdPath.c, cmdSetenv.c,
  cmdUlvl.c, cmdUname.c, cmdVerbose.c, cmdVersion.c, cmdWhatis.c,
  cmdXResource.c, error.c, init.c, locate_module.c, main.c, modules_def.h,
  testsuite/modulefiles/chdir/1.0, testsuite/modulefiles/chdir/2.0,
  testsuite/modulefiles/chdir/3.0, testsuite/modulefiles/chdir/4.0,
  testsuite/modules.50-cmds/240-chdir.exp, utility.c, utilobj.c: Merged in the
  btclobj1 branch changes to the main trunk - converted the module commands to
  Tcl dual-ported objects.

2009-08-18  rkowen <rkowen>

  * xref/cmdChdir.c.html, xref/cmdChdir.c.src.html: cmdChdir is now part of
  the xref mix.

2009-08-14  rkowen <rkowen>

  * Makefile.am, xref/ModuleCmd_Avail.c.html, xref/ModuleCmd_Avail.c.src.html,
  xref/ModuleCmd_Clear.c.html, xref/ModuleCmd_Clear.c.src.html,
  xref/ModuleCmd_Display.c.html, xref/ModuleCmd_Display.c.src.html,
  xref/ModuleCmd_Help.c.html, xref/ModuleCmd_Help.c.src.html,
  xref/ModuleCmd_Init.c.html, xref/ModuleCmd_Init.c.src.html,
  xref/ModuleCmd_List.c.html, xref/ModuleCmd_List.c.src.html,
  xref/ModuleCmd_Load.c.html, xref/ModuleCmd_Load.c.src.html,
  xref/ModuleCmd_Purge.c.html, xref/ModuleCmd_Purge.c.src.html,
  xref/ModuleCmd_Refresh.c.html, xref/ModuleCmd_Refresh.c.src.html,
  xref/ModuleCmd_Switch.c.html, xref/ModuleCmd_Switch.c.src.html,
  xref/ModuleCmd_Update.c.html, xref/ModuleCmd_Update.c.src.html,
  xref/ModuleCmd_Use.c.html, xref/ModuleCmd_Use.c.src.html,
  xref/ModuleCmd_Whatis.c.html, xref/ModuleCmd_Whatis.c.src.html,
  xref/cmdAlias.c.html, xref/cmdAlias.c.src.html, xref/cmdConflict.c.html,
  xref/cmdConflict.c.src.html, xref/cmdInfo.c.html, xref/cmdInfo.c.src.html,
  xref/cmdIsLoaded.c.html, xref/cmdIsLoaded.c.src.html, xref/cmdLog.c.html,
  xref/cmdLog.c.src.html, xref/cmdMisc.c.html, xref/cmdMisc.c.src.html,
  xref/cmdModule.c.html, xref/cmdModule.c.src.html, xref/cmdPath.c.html,
  xref/cmdPath.c.src.html, xref/cmdSetenv.c.html, xref/cmdSetenv.c.src.html,
  xref/cmdUlvl.c.html, xref/cmdUlvl.c.src.html, xref/cmdUname.c.html,
  xref/cmdUname.c.src.html, xref/cmdVerbose.c.html,
  xref/cmdVerbose.c.src.html, xref/cmdVersion.c.html,
  xref/cmdVersion.c.src.html, xref/cmdWhatis.c.html,
  xref/cmdWhatis.c.src.html, xref/cmdXResource.c.html,
  xref/cmdXResource.c.src.html, xref/config.h.html, xref/config.h.src.html,
  xref/cxref.apdx.html, xref/cxref.function, xref/cxref.html,
  xref/cxref.include, xref/cxref.typedef, xref/cxref.variable,
  xref/error.c.html, xref/error.c.src.html, xref/getopt.c.html,
  xref/getopt.c.src.html, xref/getopt.h.html, xref/getopt.h.src.html,
  xref/init.c.html, xref/init.c.src.html, xref/locate_module.c.html,
  xref/locate_module.c.src.html, xref/main.c.html, xref/main.c.src.html,
  xref/modules_def.h.html, xref/modules_def.h.src.html, xref/utility.c.html,
  xref/utility.c.src.html, xref/version.c.html, xref/version.c.src.html: Got
  cxref running and regenerated the cross references.

  * locate_module.c: Cleaned up a memory error and redundant code.

2009-08-13  rkowen <rkowen>

  * ChangeLog, ModuleCmd_Avail.c, ModuleCmd_Init.c, ModuleCmd_Purge.c,
  ModuleCmd_Refresh.c, ModuleCmd_Update.c, NEWS, cmdChdir.c, cmdModule.c,
  cmdVersion.c, cmdWhatis.c, cmdXResource.c, configure.ac, locate_module.c,
  main.c, modules_def.h, utility.c: * All string allocation is performed by a
  common internal routine * --disable-beginenv is now the configuration
  default

2009-08-11  rkowen <rkowen>

  * ModuleCmd_Avail.c, ModuleCmd_Clear.c, ModuleCmd_Display.c,
  ModuleCmd_Help.c, ModuleCmd_Init.c, ModuleCmd_List.c, ModuleCmd_Load.c,
  ModuleCmd_Purge.c, ModuleCmd_Refresh.c, ModuleCmd_Switch.c,
  ModuleCmd_Update.c, ModuleCmd_Use.c, ModuleCmd_Whatis.c, NEWS, README, TODO,
  cmdAlias.c, cmdChdir.c, cmdConflict.c, cmdInfo.c, cmdIsLoaded.c, cmdLog.c,
  cmdMisc.c, cmdModule.c, cmdPath.c, cmdSetenv.c, cmdUlvl.c, cmdUname.c,
  cmdVerbose.c, cmdVersion.c, cmdWhatis.c, cmdXResource.c, configure.ac,
  doc/module.1.in, error.c, getopt.c, init.c, locate_module.c, main.c,
  modules_def.h, testsuite/modulefiles/.moduleavailcache,
  testsuite/modulefiles/.moduleavailcache.202,
  testsuite/modulefiles/.moduleavailcachedir,
  testsuite/modulefiles/.moduleavailcachedir.202,
  testsuite/modules.00-init/090-switches.exp,
  testsuite/modules.70-maint/060-apropos.exp, utility.c: Merged in the
  bnocache branch to the main source tree.

2009-08-10  rkowen <rkowen>

  * ChangeLog: Updated.

  * ModuleCmd_Display.c, NEWS, cmdLog.c, configure.ac, error.c, modules_def.h:
  Merged the syslogging changes from the bsyslog branch.

2009-08-03  rkowen <rkowen>

  * ChangeLog: Updated.

  * Makefile.am, NEWS, cmdInfo.c, cmdLog.c, cmdModule.c, cmdTrace.c,
  configure.ac, doc/modulefile.4.in, init.c, modulefiles/module-info.in,
  modules_def.h, testsuite/modulefiles/help/2.0,
  testsuite/modulefiles/trace/all_off, testsuite/modulefiles/trace/all_on,
  testsuite/modulefiles/trace/colon, testsuite/modulefiles/trace/dilo_onoff,
  testsuite/modulefiles/trace/disp_onoff,
  testsuite/modulefiles/trace/disptrac, testsuite/modulefiles/trace/load_all1,
  testsuite/modulefiles/trace/load_all2, testsuite/modulefiles/trace/load_on,
  testsuite/modulefiles/trace/load_onoff,
  testsuite/modulefiles/trace/load_ovr,
  testsuite/modules.35-trace/010-init_ts.exp,
  testsuite/modules.35-trace/020-default.exp,
  testsuite/modules.35-trace/030-all-on.exp,
  testsuite/modules.35-trace/031-all-off.exp,
  testsuite/modules.35-trace/040-load-all.exp,
  testsuite/modules.35-trace/041-load-all.exp,
  testsuite/modules.35-trace/042-load-on.exp,
  testsuite/modules.35-trace/043-load-onoff.exp,
  testsuite/modules.35-trace/044-load-ovr.exp,
  testsuite/modules.35-trace/050-disp-onoff.exp,
  testsuite/modules.35-trace/060-dilo-onoff.exp,
  testsuite/modules.35-trace/070-colon.exp,
  testsuite/modules.35-trace/095-cleanup.exp,
  testsuite/modules.50-cmds/121-prereq-module.exp,
  testsuite/modules.70-maint/070-display.exp: Merged in the bnotrace branch
  changes ... essentially removing the module-trace command.

  * init/bash_completion.in: Added bash_completion init

  * ChangeLog: Updated.

  * Makefile.am, ModuleCmd_Avail.c, ModuleCmd_Clear.c, ModuleCmd_Display.c,
  ModuleCmd_Help.c, ModuleCmd_Init.c, ModuleCmd_List.c, ModuleCmd_Purge.c,
  ModuleCmd_Refresh.c, ModuleCmd_Switch.c, ModuleCmd_Update.c,
  ModuleCmd_Use.c, ModuleCmd_Whatis.c, cmdAlias.c, cmdChdir.c, cmdConflict.c,
  cmdInfo.c, cmdIsLoaded.c, cmdLog.c, cmdMisc.c, cmdModule.c, cmdPath.c,
  cmdSetenv.c, cmdTrace.c, cmdUlvl.c, cmdUname.c, cmdVerbose.c, cmdVersion.c,
  cmdWhatis.c, cmdXResource.c, configure.ac, doc/module.1.in,
  doc/modulefile.4.in, error.c, etc/global/bashrc.in,
  etc/global/csh.modules.in, etc/global/profile.modules.in, init.c,
  init/.modulespath.in, init/Makefile.am, init/bash.in, init/csh.in,
  init/filter, init/ksh.in, init/perl.in, init/python.in, init/sh.in,
  init/zsh.in, locate_module.c, modulefiles/Makefile.am, modules_def.h,
  utility.c, version.c: Rolled in the remaining 3.2.7 changes to the main
  branch.

2009-07-31  rkowen <rkowen>

  * ChangeLog: Updated main branch with 3.2.7 changes.

  * NEWS: Updated 3.2.7 changes.

2009-04-09  sirdude <sirdude>

  * tcl/modulecmd.tcl: This is a patch by John Tseng,  It adds the ability to
  support Dynamic columns using stty you just setenv DYNAMIC_COLUMNS 1 and it
  will start using them.  Kent

  * tcl/modulecmd.tcl: Fleshed out the debugging statements so most functions
  have them now.  Kent

2009-02-24  sirdude <sirdude>

  * tcl/modulecmd.tcl: Some more cruft removal.  Kent

  * tcl/Makefile, tcl/init/modulerc, tcl/modulecmd.tcl: added synonym of
  search for apropos/keyword Partialy contributed by Hunter Matthews.  There
  is still an issue with it though.  If you have a malformed module it will
  die.  Probably there are other commands that die as well.  Need to look at
  it more.  Kent

  * tcl/modulecmd.tcl: Cleaned up some stuff that wasn't used and also fixed
  some minor formating issues.  Kent

  * tcl/modulecmd.tcl: Updated the help dialog so its a bit more organized an
  easier to read.  Kent

  * tcl/modulecmd.tcl: Patch by Hunter Matthews to clean up the output of
  module avail a little bit.  Kent

  * tcl/modulecmd.tcl: Some patches submitted by Hunter Matthews  adds --help
  as a commandline option. fixes issues with modulerc file getting sourced
  twice in sh and tcsh shells.  Kent

2008-09-17  sirdude <sirdude>

  * tcl/modulecmd.tcl: Small patch for differences in glob on various
  platforms. Contributed by Thomas Zeiser  Kent

2008-02-20  rkowen <rkowen>

  * NEWS, cmdPath.c, configure.ac, init/bash.in,
  testsuite/modulefiles/append/2.1, testsuite/modulefiles/append/2.2,
  testsuite/modulefiles/prepend/2.1, testsuite/modulefiles/prepend/2.2,
  testsuite/modules.50-cmds/060-remove.exp,
  testsuite/modules.50-cmds/175-swap2.exp: Rolled in the 3.2.7 changes so far.

2007-10-29  rkowen <rkowen>

  * ModuleCmd_Avail.c, NEWS: Rolled in the skip .git version control dirs in
  modulefile dirs.

2007-10-23  sirdude <sirdude>

  * tcl/modulecmd.tcl: updated ignored directories to include .svn and .git
  Thanks to John Tseng.  Kent

2007-09-05  sirdude <sirdude>

  * tcl/modulecmd.tcl: Made it so that module use and module unuse work the
  same way, I also added a little debugging info for both of them.  Kent

2007-05-16  sirdude <sirdude>

  * tcl/modulecmd.tcl: update to replaceFromList  patch from Olly. adds a fix
  for when item2 is empty.  Kent

  * tcl/modulecmd.tcl: Another great little patch by Olly Stephens,  This one
  makes it so that if a module has an error message in it module help
  (modulefile) will still attempt to call the help function for that module.
  Kent

  * tcl/modulecmd.tcl: Another patch by Olly,  This one extends some of the
  shortcuts accepted. example module lo blah   now works just like module load
  blah Its not perfect but again better than what is there currently.  Kent

  * tcl/modulecmd.tcl: Another patch by Olly,  This one makes it so that help
  is displayed if a user types an invalid module command (Example: module
  blah)  or if a user just types module with no args.  Kent

  * tcl/modulecmd.tcl: Patch by Olly,  Forces 0600 mode on the tmpfile when
  opening it. Really we need to figure out how to remove the need for a
  tmpfile, until then though this is still better than it was.  Kent

2007-02-22  rkowen <rkowen>

  * NEWS, locate_module.c: Rolled in 3.2.6 realloc() fix.

2007-02-14  rkowen <rkowen>

  * NEWS, testsuite/modules.50-cmds/095-uname.exp: Rolled in 3.2.5 changes to
  the uname test

  * ModuleCmd_Avail.c, ModuleCmd_Update.c, ModuleCmd_Whatis.c, cmdConflict.c,
  cmdLog.c, cmdModule.c, cmdTrace.c, cmdVersion.c, cmdWhatis.c,
  cmdXResource.c, error.c, init.c, locate_module.c, modules_def.h, utility.c:
  Rolled in the 3.2.5 module_malloc() wrapper.

2007-02-09  rkowen <rkowen>

  * contrib/modules.ebuild: Gentoo ebuild script for modules, contributed by
  Peter Fischer <peter.fischer@terrasel.de>

2006-12-19  sirdude <sirdude>

  * tcl/modulecmd.tcl: updated module list so it skips modules with no name
  for -l and -t (it now handles them like module list without options)  Kent

2006-12-13  sirdude <sirdude>

  * tcl/modulecmd.tcl: Fix provied by Eric Mastromarc reference counting was
  not working for unload-path now it is again.  Kent

2006-12-12  sirdude <sirdude>

  * tcl/modulecmd.tcl: Modified prereq so its a logical OR for multiple
  modulefies on one command line.  example: prereq foo bar If you want it foo
  AND bar do: prereq foo prereq bar  Patch done by Chris Pruett  Kent

2006-12-07  sirdude <sirdude>

  * tcl/modulecmd.tcl: Patch provided by  Thomas Zeiser,  better fix for
  reverting header to find dynamically what version of tclsh to use.  It also
  now sorts output of module avail.  Kent

  * tcl/modulecmd.tcl: reverting commit 1.75 where I removed the header
  section that finds tclsh.  Kent

2006-09-13  sirdude <sirdude>

  * tcl/modulecmd.tcl: Changed (VAR)_modshare back to use g_def_seperator
  instead of user defined variable.  Currently there is an issue with doing
  something like append-path -delem " " PATH /usr/bin append-path -delem " "
  PATH /usr/local/bin append-path -delem ":" PATH /usr/sbin  then loading that
  module and unloading it... Because of the mixed delimiters the unload does
  not work properly. It at least works for the basic case now though.  Kent

2006-09-07  sirdude <sirdude>

  * tcl/modulecmd.tcl: changed syntax of specifying a delimitor to match c
  version of modules and also made sure you can use " " and { } as a
  delimitor.  Thanks go to Dr Reinhold Bader for this fix....  Kent

2006-08-23  sirdude <sirdude>

  * tcl/modulecmd.tcl: "module use"   (without args) was broken, now its fixed
  again.  Kent

  * tcl/modulecmd.tcl: fixed revision variable stuff.  Kent

  * tcl/modulecmd.tcl: Added in cvs revision variables so that module help
  prints out what version of cvs file was checked out.  Kent

2006-08-16  sirdude <sirdude>

  * tcl/modulecmd.tcl: this is a pathetic commit ;)  Modified the comment for
  g_user so that it says the right thing.  Kent

2006-08-15  sirdude <sirdude>

  * tcl/modulecmd.tcl: This commit removes the remaining warnings generated by
  nagelfar redid a couple of calls to interp eval recoded the replaceFromList
  function so it uses lreplace removed the removeFromList function and made it
  call replaceFromList instead...  I also added _LMFILES_ environment variable
  haven't done anything with it yet though.  (intent is to use it in unloading
  a module)  Kent

  * tcl/modulecmd.tcl: removed all of the hardcoded default path seperators
  ":" and replaced with a variable.  Kent

2006-08-14  sirdude <sirdude>

  * tcl/init/.cvsignore: added scripts that get created so that they don't
  show up in cvs update...  Kent

  * tcl/modulecmd.tcl: fixed a few calls to catch and made sure they called it
  in a similar manor... (there are two more left that are slightly different
  but I didn't take the time to figure them out)  one of the fixes was posted
  by Chris Pruett, and I just applied it where it needed it... :)  Kent

  * tcl/modulecmd.tcl: added an else statement that I dropped by accident when
  merging module command and module command help slave functions...  Also
  reran frink so it looks pretty again...  Kent

2006-08-13  sirdude <sirdude>

  * tcl/modulecmd.tcl: more work on seperator specification. (removing
  hardcoded ":"'s  Kent

  * tcl/modulecmd.tcl: combined a couple of duplicate statements in a switch.
  Kent

  * tcl/modulecmd.tcl: Start of allowing a spwcified seperator for commands.
  Still needs a lot of work...  Kent

  * tcl/modulecmd.tcl: made module switch behave like it use to... (Sorry it
  took so long to switch it back)  now it does not recursively unload and
  reload modules... This way seems more flexable and more intunitive to users.
  Kent

2006-08-12  sirdude <sirdude>

  * tcl/modulecmd.tcl: by accident shut off showing default module files....
  Turning it back on.  Kent

  * tcl/modulecmd.tcl: module avail with flag_default_dir was broken This
  fixes it.  Kent

  * tcl/modulecmd.tcl: Null module was causing problems with module avail -l
  There were some odd settings for null which I just changed to "" everything
  seems to work better this way so going to commit it.  Kent

  * tcl/modulecmd.tcl: Updated the help section so its more like the binary
  module command...  Kent

  * tcl/init/bash.in, tcl/init/ksh.in, tcl/init/zsh.in: fix up bash's friends
  so they work properly...  Kent

  * tcl/modulecmd.tcl: updated module-info so that it works with the
  module-info module for the most part.  There is still some work here.  Patch
  submitted by Mark Moraes  Kent

2006-08-11  sirdude <sirdude>

  * tcl/Makefile, tcl/modulecmd.tcl, testsuite/config/unix.exp: updated Make
  test so it "works" again... combined functions for looking at .version and
  modulerc files...  Kent

  * tcl/modulecmd.tcl: This one has been on my todo list for awhile now.
  Reduced redundant code and made the slave for module help and executing a
  module one function.  Kent

  * tcl/modulecmd.tcl: removed the following functions: module-log
  module-verbosity module-user module-trace  they were empty, if anyone ever
  decides to do them they can add them back in. just trying to make this thing
  a little leaner ;)  Kent

  * tcl/modulecmd.tcl: ran frink -e to make things look pretty again ;)  Kent

  * tcl/modulecmd.tcl: I used nagelfar.tcl (http://nagelfar.berlios.de/) a tcl
  syntax checker and cleaned up most warnings from it. found a couple of typos
  as well because of it....  Kent

  * tcl/modulecmd.tcl: another typo.  (was missing a $ for a variable)  Kent

  * tcl/modulecmd.tcl: Removed the code to find tclsh since its in the init
  scripts no reason to duplicate it and probably will speed things up a bit
  keeping it in the init files.  Kent

  * tcl/modulecmd.tcl: On irix with an older version of tclsh I was getting
  errors with reportWarning and reportInternalBug  not being defined when
  there was a malformed module...  made it so they were copied over to the
  slave where needed.  Kent

  * tcl/modulecmd.tcl: missed some prints to stderr and I also fixed some
  typos...  Kent

  * tcl/modulecmd.tcl: made $contact = emailaddress and modified
  reportInternalError so it prints out the contact email address.  Kent

  * tcl/modulecmd.tcl: moved all puts stderr's to one of the report functions.
  This could still use some cleaning up.  (not really sure we need 3 report
  functions) but its at least a little nicer. (Was thinking about changing it
  to echo "$msg" instead of sending it to stderr... that way you could do
  things like module avail | more and it would work...  Need to do some more
  testing on it though :)  Kent

  * tcl/init/csh.in, tcl/init/tcsh.in: removed extra quotes that didn't need
  to be there.  Kent

2006-06-15  rkowen <rkowen>

  * locate_module.c: Rolled in 3.2.4 graceful handling of empty MODULEPATH
  dirs.

2006-06-02  rkowen <rkowen>

  * ChangeLog: update main.

2006-06-01  rkowen <rkowen>

  * NEWS, doc/module.1.in, doc/modulefile.4.in, etc/add.modules.in,
  etc/mkroot.in, ext/add.ext.in, ext/mkroot.in, init/.modulespath.in,
  init/Makefile.am, init/bash.in, init/ksh.in, init/sh.in, init/zsh.in,
  modulefiles/dot.in, modulefiles/module-cvs.in, modulefiles/module-info.in,
  modulefiles/modules.in, modulefiles/null.in, modulefiles/use.own.in,
  modulefiles/version.in: Rolled in the 3.2.3 top_builddir and
  @configure_input\@ changes.

  * NEWS, cmdPath.c, doc/modulefile.4.in, locate_module.c, modules_def.h,
  testsuite/modulefiles/append/1.0, testsuite/modulefiles/prepend/1.0,
  testsuite/modules.50-cmds/042-append-delim.exp,
  testsuite/modules.50-cmds/047-app-del-undo.exp,
  testsuite/modules.50-cmds/052-prepend-delim.exp,
  testsuite/modules.50-cmds/057-pre-del-undo.exp: Rolled in the 3.2.3
  prepend-path/append-path --delim changes.

  * ModuleCmd_Init.c, cmdConflict.c, cmdIsLoaded.c, cmdPath.c,
  locate_module.c, main.c, modules_def.h: Rolled in the pre-changes for
  handling arbitrary delimiters for lists (instead of ':').

2006-05-31  sirdude <sirdude>

  * tcl/modulecmd.tcl: * minor typos in error output fixed * support for
  modules which are known to have no dependencies. Presently a  module switch
  foo/4 foo/5  will reload all modules which have been loaded after foo. But
  sometimes this may be a nuisance, especially if module files implement their
  own reloading mechanism. Hence the modules entered as a ":" separated list
  into the environment variable MODULE_NORELOAD will not be reloaded during a
  module switch. The "module reload" command however still reloads the complet
  e module set. This is upward compatible since the original functionality is
  re tained if MODULE_RELOAD is left empty.  patch provided by Dr. Reinhold
  Bader  Kent

2006-05-25  rkowen <rkowen>

  * ChangeLog, modules.lsm.in: Merged in the working LSM from 3.2.2

  * ChangeLog, NEWS, testsuite/modulefiles/alias/1.0,
  testsuite/modules.50-cmds/075-alias.exp,
  testsuite/modules.50-cmds/076-alias-sub.exp,
  testsuite/modules.50-cmds/078-refresh.exp, utility.c: Rolled in the 3.2.3
  changes * the set-alias command will for Bourne shell derivatives substitute
  the safe ${1+"$@"} for $*.

2006-05-19  rkowen <rkowen>

  * Makefile.am, NEWS, init.c: Rolled in the TclX changes from 3-2-2.

2006-05-15  rkowen <rkowen>

  * NEWS, error.c, main.c, testsuite/modules.35-trace/010-init_ts.exp,
  testsuite/modules.50-cmds/100-loglevel.exp: Rolled in the syslog related
  changes from 3.2.3

2006-05-12  rkowen <rkowen>

  * NEWS: Added a section for 3.3.x

  * NEWS, cmdVersion.c: Folded in dgoldendias patch.

  * ChangeLog, modules.lsm.in: Added the Title line, which must have gotten
  lost in previous edits.

2006-05-04  rkowen <rkowen>

  * ChangeLog, NEWS, config/emtcl.m4, config/tcl.m4, configure.ac, main.c:
  Rolled in the 3.2.2 configure changes to the main development trunk.

2006-05-01  rkowen <rkowen>

  * ModuleCmd_List.c, ModuleCmd_Refresh.c, ModuleCmd_Update.c,
  ModuleCmd_Whatis.c, cmdLog.c, configure.ac, error.c, locate_module.c,
  modules_def.h, testsuite/modulefiles/append/0.1,
  testsuite/modulefiles/append/0.2, testsuite/modulefiles/prepend/0.1,
  testsuite/modulefiles/prepend/0.2, testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.50-cmds/045-append-undo.exp,
  testsuite/modules.50-cmds/050-prepend.exp,
  testsuite/modules.50-cmds/055-prepend-undo.exp, utility.c: Rolled in the
  xstrtok changes and tests from modules-3-2-2.

2006-04-10  rkowen <rkowen>

  * ChangeLog, init/Makefile.am: Change from using . & .. to $(srcdir) and
  $(top_srcdir) respectively. (Thanks to suggestion from Boris Boesler
  <boesler.AT.ifn.et.tu-dresden.de>)

2006-03-23  rkowen <rkowen>

  * init/csh.in: Rolled in init csh fix from 3.2.1

  * ChangeLog: update.

  * init/csh.in, testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.70-maint/045-listlong.exp,
  testsuite/modules.90-avail/050-long.exp, version.c: Merged in the 3.2.1
  changes.

2006-03-07  rkowen <rkowen>

  * ModuleCmd_Load.c, NEWS, cmdModule.c, doc/modulefile.4.in, main.c,
  modules_def.h, testsuite/config/unix.exp, testsuite/modulefiles/break/2.0,
  testsuite/modulefiles/break/4.0, testsuite/modulefiles/continue/1.0,
  testsuite/modulefiles/continue/2.0, testsuite/modulefiles/continue/3.0,
  testsuite/modulefiles/continue/4.0, testsuite/modulefiles/exit/1.0,
  testsuite/modulefiles/exit/2.0, testsuite/modulefiles/exit/3.0,
  testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.50-cmds/210-exit.exp,
  testsuite/modules.50-cmds/220-continue.exp,
  testsuite/modules.50-cmds/230-loop.exp,
  testsuite/modules.50-cmds/999-cleanup.exp, utility.c: Rolled in the 3.2.0
  exit changes.

2006-02-09  rkowen <rkowen>

  * init/Makefile.am: Fixed the tcsh target.

2006-02-06  rkowen <rkowen>

  * cmdModule.c, cmdPath.c, init.c, modules_def.h: Rolled in the
  Tcl_GetStringResult() changes from 3.2.0

  * modulefiles/lang/.mklang: Fine-tuned the logic of dealing with $LANG and
  $LANG_STACK. Added some target language verbage.

  * .cvsignore, ChangeLog, Makefile.am, modulefiles/Makefile.am,
  modulefiles/lang/.cvsignore, modulefiles/lang/.mklang, po/.cvsignore,
  po/ChangeLog, po/LINGUAS, po/Makevars, po/POTFILES.in: Added the lang
  modulefiles and upgraded the Makefile.am-s to create a working distribution
  tar ball.

2006-02-05  rkowen <rkowen>

  * Makefile.am: After 'gettextize'.

  * configure.ac: The changes of 'gettextize', note that autopoint is not too
  smart with AC_CONFIG_AUX_DIR ... it appends on any text after macro to the
  directory name.  So do not add 'dnl' for comments or to escape the \n.

2006-02-04  rkowen <rkowen>

  * ChangeLog: Updated.

  * version.c: The current version for the i18n mods is 3.3 alpha

  * main.c: Alert translators to the "common" strings.

  * error.c: Fixed grammar error.

  * utility.c: [ 730293 ] remove-path won't remove paths with a $ in it. Made
  the change and the tests ran fine.  I'm not sure what cleanse_path() is
  supposed to do.

  * init.c: [ 672612 ] Tcl command execution failed and modules use pointed
  out the use of the deprecated Tcl fn Tcl_VarEval(). Replaced this with
  Tcl_Eval() and added some Tcl logic to handle when $auto_path is not set.

  * init/perl.in: Fixed where it needs to reference $ENV{...} [ 705033 ] Bug
  in init/perl

  * init/perl.in: Added 1 at end so perl/init can be used by the perl require.

  * cmdConflict.c: Removed i18n from the debugging statements ... not
  necessary.

  * Makefile.am, utility.c: Rolled in the changes from 3-2-0 patch1

2006-01-31  rkowen <rkowen>

  * ModuleCmd_Avail.c, ModuleCmd_Help.c, ModuleCmd_Init.c, ModuleCmd_List.c,
  ModuleCmd_Update.c, ModuleCmd_Use.c, ModuleCmd_Whatis.c, cmdConflict.c,
  cmdModule.c, cmdUname.c, cmdVersion.c, cmdXResource.c, configure.ac,
  error.c, getopt.c, init.c, locate_module.c, main.c, modules_def.h,
  utility.c: First pass through tagging all the translateable text with
  _(...), etc. for easy extraction by xgettext.  Passes all tests.

2006-01-26  rkowen <rkowen>

  * Makefile.am, configure.ac, main.c, modules_def.h: Setting up autoconf for
  handling i18n & l10n.

  * configure.ac: The AC_AIX check needs to be before any compiler tests.
  Added the AM_GNU_GETTEXT macro for i18n & l10n.

2006-01-23  rkowen <rkowen>

  * Makefile.am, modules.lsm.in: Updated for LSM version 4

2006-01-19  rkowen <rkowen>

  * ChangeLog, Makefile.am, modules.lsm.in: Changed from sunsite to ibiblio
  (same thing though).

  * modules.lsm.in: Can't ftp into the SourceForge.net site.

2006-01-18  rkowen <rkowen>

  * version.c: Ready for the 3.2.0 release

  * ChangeLog, xref/config.h.html, xref/config.h.src.html: Updated.

  * xref/cmdModule.c.html, xref/cmdModule.c.src.html, xref/cmdPath.c.html,
  xref/cmdXResource.c.html, xref/cmdXResource.c.src.html,
  xref/cxref.apdx.html, xref/cxref.function, xref/modules_def.h.src.html,
  xref/utility.c.html, xref/utility.c.src.html: Updated.

  * MACHINES, NEWS: News about eliminating --with-force-path.

2006-01-17  rkowen <rkowen>

  * ChangeLog, README, cmdModule.c, configure.ac, modules_def.h, utility.c:
  Removed the --with-force-path option ... which basically makes sure that
  PATH and LD_LIBRARY_PATH have some minimum values, given by a couple of
  MODULE_*_SACRED env.vars.  If you need something like this, then you've
  probably written your modulefiles wrong!

  * cmdXResource.c: Eliminated the C++ style commented lines.

  * config/emtcl.m4: Shortened option to --with-tcl-ver and fixed some minor
  problems with it.

  * configure.ac: Fixed what happens when no /bin/csh and the split_size is
  not set.

  * utility.c: Add some casts to eliminate warning messages.

2006-01-12  rkowen <rkowen>

  * ChangeLog: Updated

  * cvs2cl.pl: Don't need to track xref/ changes.

  * ChangeLog: Updated.

  * xref/cxref.variable, xref/main.c.html, xref/main.c.src.html,
  xref/modules_def.h.html, xref/modules_def.h.src.html, xref/version.c.html,
  xref/version.c.src.html: Updated the cxref docs

  * ChangeLog: Updated.

  * ChangeLog, version.c: Updated version date.

  * main.c, modules_def.h: Have --version list out the version date also.

  * testsuite/home/.cvsignore: Ignore the test generated file.

  * testsuite/home/.modules: This gets made when a test is performed.

  * xref/ModuleCmd_Avail.c.html, xref/ModuleCmd_Avail.c.src.html,
  xref/ModuleCmd_Clear.c.html, xref/ModuleCmd_Clear.c.src.html,
  xref/ModuleCmd_Display.c.html, xref/ModuleCmd_Display.c.src.html,
  xref/ModuleCmd_Help.c.html, xref/ModuleCmd_Help.c.src.html,
  xref/ModuleCmd_Init.c.html, xref/ModuleCmd_Init.c.src.html,
  xref/ModuleCmd_List.c.html, xref/ModuleCmd_List.c.src.html,
  xref/ModuleCmd_Load.c.html, xref/ModuleCmd_Load.c.src.html,
  xref/ModuleCmd_Purge.c.html, xref/ModuleCmd_Purge.c.src.html,
  xref/ModuleCmd_Refresh.c.src.html, xref/ModuleCmd_Switch.c.html,
  xref/ModuleCmd_Switch.c.src.html, xref/ModuleCmd_Update.c.src.html,
  xref/ModuleCmd_Use.c.html, xref/ModuleCmd_Use.c.src.html,
  xref/ModuleCmd_Whatis.c.html, xref/ModuleCmd_Whatis.c.src.html,
  xref/cmdAlias.c.html, xref/cmdAlias.c.src.html, xref/cmdConflict.c.html,
  xref/cmdConflict.c.src.html, xref/cmdInfo.c.html, xref/cmdInfo.c.src.html,
  xref/cmdIsLoaded.c.html, xref/cmdIsLoaded.c.src.html, xref/cmdLog.c.html,
  xref/cmdLog.c.src.html, xref/cmdMisc.c.html, xref/cmdMisc.c.src.html,
  xref/cmdModule.c.html, xref/cmdModule.c.src.html, xref/cmdPath.c.html,
  xref/cmdPath.c.src.html, xref/cmdSetenv.c.html, xref/cmdSetenv.c.src.html,
  xref/cmdTrace.c.html, xref/cmdTrace.c.src.html, xref/cmdUlvl.c.html,
  xref/cmdUlvl.c.src.html, xref/cmdUname.c.html, xref/cmdUname.c.src.html,
  xref/cmdVerbose.c.html, xref/cmdVerbose.c.src.html, xref/cmdVersion.c.html,
  xref/cmdVersion.c.src.html, xref/cmdWhatis.c.html,
  xref/cmdWhatis.c.src.html, xref/cmdXResource.c.html,
  xref/cmdXResource.c.src.html, xref/config.h.html, xref/config.h.src.html,
  xref/error.c.html, xref/error.c.src.html, xref/getopt.c.html,
  xref/getopt.c.src.html, xref/init.c.html, xref/init.c.src.html,
  xref/locate_module.c.html, xref/locate_module.c.src.html, xref/main.c.html,
  xref/main.c.src.html, xref/modules_def.h.html, xref/modules_def.h.src.html,
  xref/utility.c.html, xref/utility.c.src.html, xref/version.c.src.html:
  Updated the cxref docs to 3.2.0rc4

  * .cvsignore, doc/.cvsignore, etc/.cvsignore, init/.cvsignore: More things
  to ignore.

  * ModuleCmd_Init.c, NEWS, version.c: Reworked the "module init*" subcommand
  to handle dot files with multiple "module load" lines.

  * INSTALL: Added the documentation related to --with-tcl-*.

  * config/emtcl.m4, config/tcl.m4, configure.ac: Reintroduced (or added) the
  configure options --with-tcl-{versions|lib|include} to allow the user to
  specify any values which may be missing from the tclConfig.sh script.

  * testsuite/home/.modules, testsuite/home/.modules.save,
  testsuite/modules.60-initx/005-init.exp,
  testsuite/modules.60-initx/010-list.exp,
  testsuite/modules.60-initx/020-add.exp,
  testsuite/modules.60-initx/030-switch.exp,
  testsuite/modules.60-initx/040-prepend.exp,
  testsuite/modules.60-initx/050-rm.exp,
  testsuite/modules.60-initx/060-2nd.exp,
  testsuite/modules.60-initx/095-cleanup.exp: Added a test suite for the
  "module init*" subcommands.

  * testsuite/modules.50-cmds/070-alias-proc.exp: Use the "native" Tcl file
  remove command.

  * utility.c: Minor formatting changes.

  * modules_def.h: Minor reformatting.

  * Makefile.am: Added INSTALL.RH7x to the distribution pkg.

2005-12-15  rkowen <rkowen>

  * ChangeLog: Update ChangeLog

  * ChangeLog, INSTALL: Updating the INSTALL doc for 3.2.0

  * version.c: Time for the 3.2.0 release

2005-12-14  sirdude <sirdude>

  * tcl/modulecmd.tcl: Added the system command.  Kent

2005-12-13  sirdude <sirdude>

  * tcl/modulecmd.tcl: Fix by Marcus Wagner.  Makes it so module unload works
  the same way module load does. Specifically for the break command.  Kent

2005-12-12  sirdude <sirdude>

  * tcl/modulecmd.tcl: Fix provided by Mark Moraes.  Prevents modulefilename
  collisions by prepending slaves with __ before commit if you had a module
  file named: module-info and tried to do a module show module-info you would
  get: bad option "mode": must be alias, aliases, eval, expose, hide, hidden,
  issafe, invokehidden, or marktrusted invoked from within "module-info mode
  whatis " Now it works.  Kent

  * tcl/modulecmd.tcl: removed unused variable junk from 3 places in the code.
  (was just setting it to "" in all 3 places)  Kent

2005-12-06  rkowen <rkowen>

  * ChangeLog: Updated.

2005-12-05  rkowen <rkowen>

  * ChangeLog, cvs2cl.pl: Changed the ChangeLog script to not record changes
  about itself to itself.

  * testsuite/modules.50-cmds/170-swap.exp: Added more single argument "swap"
  tests.

  * ChangeLog, Makefile.am, NEWS, cvs2cl.pl, stripmkf, version.c: Added the
  cvs2cl.pl perl script for generating the ChangeLog semi-automatically.
  Removed stripmkf - an artifact from older releases.

  * ChangeLog, etc/Makefile.am, ext/Makefile.am: Put the add.modules/add.ext &
  mkroot scripts under the --prefix bin directory since those scripts are
  platform independent, and the modules modulefile will point to these
  scripts.

2005-12-02  rkowen <rkowen>

  * ChangeLog, configure.ac, init/Makefile.am, modulefiles/Makefile.am: Put
  the init/ scripts under the --exec-prefix directory, because they point to
  the platform specific modulecmd.

2005-11-30  rkowen <rkowen>

  * ChangeLog, cmdSetenv.c, configure.ac, init/.modulespath.in,
  modulefiles/Makefile.am, modules_def.h, utility.c, version.c: * Eliminated
  any warnings caused by using Tcl 8.4 * Fixed any mixed size differences when
  using ints and pointers. (Only an issue with 64 bit machines.)

2005-11-29  rkowen <rkowen>

  * ModuleCmd_Avail.c, ModuleCmd_Clear.c, ModuleCmd_Display.c,
  ModuleCmd_Help.c, ModuleCmd_List.c, ModuleCmd_Load.c, ModuleCmd_Switch.c,
  ModuleCmd_Whatis.c, cmdAlias.c, cmdConflict.c, cmdInfo.c, cmdIsLoaded.c,
  cmdLog.c, cmdMisc.c, cmdTrace.c, cmdUlvl.c, cmdUname.c, cmdVerbose.c,
  cmdVersion.c, cmdWhatis.c, error.c, getopt.c, init.c, locate_module.c,
  main.c, utility.c: Made all the 'First Edition' years to be 4 digits.

  * ModuleCmd_Clear.c, ModuleCmd_Init.c, ModuleCmd_Purge.c,
  ModuleCmd_Refresh.c, ModuleCmd_Update.c, ModuleCmd_Use.c, cmdAlias.c,
  cmdConflict.c, cmdInfo.c, cmdIsLoaded.c, cmdLog.c, cmdMisc.c, cmdModule.c,
  cmdPath.c, cmdSetenv.c, cmdTrace.c, cmdUlvl.c, cmdUname.c, cmdVerbose.c,
  cmdVersion.c, cmdWhatis.c, cmdXResource.c, init.c, locate_module.c, main.c,
  modules_def.h, utility.c, version.c: Added the CONST84 qualifier to
  eliminate compiler warnings, and the side effects.

2005-11-27  rkowen <rkowen>

  * config/tcl.m4: It's not an error (exit) if it can't find tclxConfig.sh!

2005-11-26  rkowen <rkowen>

  * Makefile.am: Should read the sf.net file-release-system notes before
  changing the ftp-sourceforge target.

  * Makefile.am, configure.ac, modules.lsm.in: Updated the LSM and the
  creation and handling of distribution tarballs.

  * Makefile.am, modulefiles/Makefile.am: Rolled in the Make versioning
  install fragment from the predeep branch.

2005-11-25  rkowen <rkowen>

  * xref/ModuleCmd_Avail.c.html, xref/ModuleCmd_Display.c.html,
  xref/ModuleCmd_Refresh.c.html, xref/ModuleCmd_Refresh.c.src.html,
  xref/ModuleCmd_Update.c.html, xref/ModuleCmd_Update.c.src.html,
  xref/cmdConflict.c.html, xref/cmdConflict.c.src.html,
  xref/cmdInfo.c.src.html, xref/cmdModule.c.html, xref/cmdModule.c.src.html,
  xref/cmdPath.c.html, xref/cmdPath.c.src.html, xref/cmdSetenv.c.html,
  xref/cmdSetenv.c.src.html, xref/cmdTrace.c.html, xref/cmdTrace.c.src.html,
  xref/cmdUlvl.c.html, xref/cmdUlvl.c.src.html, xref/cmdWhatis.c.html,
  xref/config.h.html, xref/config.h.src.html, xref/cxref.apdx.html,
  xref/cxref.css, xref/cxref.function, xref/cxref.html, xref/cxref.include,
  xref/cxref.variable, xref/error.c.html, xref/init.c.html, xref/main.c.html,
  xref/main.c.src.html, xref/modules_def.h.html, xref/modules_def.h.src.html,
  xref/utility.c.html, xref/version.c.html, xref/version.c.src.html: Updated
  the cxref docs with the "refresh" changes.

  * Makefile.am: Need to include ./docs in SUBDIRS

  * configure.ac, testsuite/modules.50-cmds/070-alias-proc.exp,
  testsuite/modules.50-cmds/075-alias.exp,
  testsuite/modules.50-cmds/078-refresh.exp: Finished the alias/refresh tests
  for sourcing a tmpfile, and also the special case for the Bourne shell where
  funcs and no aliases.

2005-11-22  rkowen <rkowen>

  * ModuleCmd_Refresh.c, ModuleCmd_Update.c, main.c,
  testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.50-cmds/070-alias-proc.exp,
  testsuite/modules.50-cmds/075-alias.exp,
  testsuite/modules.50-cmds/077-alias-undo.exp,
  testsuite/modules.50-cmds/078-refresh.exp: Cleaned up the test proc code,
  and normalized the "refresh" code to the existing standard.

2005-11-21  rkowen <rkowen>

  * ChangeLog, Makefile.am, ModuleCmd_Refresh.c, cmdConflict.c, cmdInfo.c,
  cmdModule.c, cmdPath.c, cmdSetenv.c, cmdTrace.c, cmdUlvl.c, doc/module.1.in,
  main.c, modules_def.h: * ModuleCmd_Refresh.c: Like "update" but refreshes
  only the non-persistent attributes of the currently loaded modules,
  regardless of the state of the loaded modules (i.e. refresh aliases). (still
  needs some test code)

  * ChangeLog, cmdConflict.c, version.c: * cmdConflict.c: Fixed memory
  allocation bug in cmdPrereq(). When there is more than 1 argument to the
  prereq command, both savedlens and savedlists were indexed past what the
  initial malloc allowed.

2005-11-15  sirdude <sirdude>

  * tcl/modulecmd.tcl: Updated alias function so that it also works on ksh. I
  tested it on a couple of different sh shells and everything seems to work
  this way, and it wasn't working on some of them before.  Kent

2005-11-15  rkowen <rkowen>

  * .cxref, Makefile.am, xref/ModuleCmd_Avail.c.html,
  xref/ModuleCmd_Avail.c.src.html, xref/ModuleCmd_Clear.c.html,
  xref/ModuleCmd_Clear.c.src.html, xref/ModuleCmd_Display.c.html,
  xref/ModuleCmd_Display.c.src.html, xref/ModuleCmd_Help.c.html,
  xref/ModuleCmd_Help.c.src.html, xref/ModuleCmd_Init.c.html,
  xref/ModuleCmd_Init.c.src.html, xref/ModuleCmd_List.c.html,
  xref/ModuleCmd_List.c.src.html, xref/ModuleCmd_Load.c.html,
  xref/ModuleCmd_Load.c.src.html, xref/ModuleCmd_Purge.c.html,
  xref/ModuleCmd_Purge.c.src.html, xref/ModuleCmd_Switch.c.html,
  xref/ModuleCmd_Switch.c.src.html, xref/ModuleCmd_Update.c.html,
  xref/ModuleCmd_Update.c.src.html, xref/ModuleCmd_Use.c.html,
  xref/ModuleCmd_Use.c.src.html, xref/ModuleCmd_Whatis.c.html,
  xref/ModuleCmd_Whatis.c.src.html, xref/cmdAlias.c.html,
  xref/cmdAlias.c.src.html, xref/cmdConflict.c.html,
  xref/cmdConflict.c.src.html, xref/cmdInfo.c.html, xref/cmdInfo.c.src.html,
  xref/cmdIsLoaded.c.html, xref/cmdIsLoaded.c.src.html, xref/cmdLog.c.html,
  xref/cmdLog.c.src.html, xref/cmdMisc.c.html, xref/cmdMisc.c.src.html,
  xref/cmdModule.c.html, xref/cmdModule.c.src.html, xref/cmdPath.c.html,
  xref/cmdPath.c.src.html, xref/cmdSetenv.c.html, xref/cmdSetenv.c.src.html,
  xref/cmdTrace.c.html, xref/cmdTrace.c.src.html, xref/cmdUlvl.c.html,
  xref/cmdUlvl.c.src.html, xref/cmdUname.c.html, xref/cmdUname.c.src.html,
  xref/cmdVerbose.c.html, xref/cmdVerbose.c.src.html, xref/cmdVersion.c.html,
  xref/cmdVersion.c.src.html, xref/cmdWhatis.c.html,
  xref/cmdWhatis.c.src.html, xref/cmdXResource.c.html,
  xref/cmdXResource.c.src.html, xref/config.h.html, xref/config.h.src.html,
  xref/cxref.apdx.html, xref/cxref.function, xref/cxref.html,
  xref/cxref.include, xref/cxref.typedef, xref/cxref.variable,
  xref/error.c.html, xref/error.c.src.html, xref/getopt.c.html,
  xref/getopt.c.src.html, xref/getopt.h.html, xref/getopt.h.src.html,
  xref/index.html, xref/init.c.html, xref/init.c.src.html,
  xref/locate_module.c.html, xref/locate_module.c.src.html, xref/main.c.html,
  xref/main.c.src.html, xref/modules_def.h.html, xref/modules_def.h.src.html,
  xref/utility.c.html, xref/utility.c.src.html, xref/version.c.html,
  xref/version.c.src.html: Updated the cxref docs

2005-11-14  rkowen <rkowen>

  * ChangeLog, Makefile.am, ModuleCmd_Avail.c, ModuleCmd_Bootstrap.c,
  ModuleCmd_Init.c, ModuleCmd_List.c, ModuleCmd_Update.c, ModuleCmd_Use.c,
  README, acinclude.m4, cmdConflict.c, cmdInfo.c, cmdIsLoaded.c, cmdModule.c,
  cmdPath.c, cmdTrace.c, cmdUlvl.c, cmdVersion.c, config/tcl.m4, configure.ac,
  doc/module.1.in, error.c, init.c, lib/.cvsignore, lib/Makefile.am,
  lib/avec.h, lib/avec.man, lib/avec/.cvsignore, lib/avec/avec_.c,
  lib/avec/avec_.h, lib/avec/avec_accessor.c, lib/avec/avec_alloc.c,
  lib/avec/avec_close.c, lib/avec/avec_ctor.c, lib/avec/avec_dealloc.c,
  lib/avec/avec_decrease.c, lib/avec/avec_delete.c, lib/avec/avec_dtor.c,
  lib/avec/avec_increase.c, lib/avec/avec_init.c, lib/avec/avec_insert.c,
  lib/avec/avec_keys.c, lib/avec/avec_lookup.c, lib/avec/avec_remove.c,
  lib/avec/avec_resize.c, lib/avec/avec_resize_percentage.c,
  lib/avec/avec_set_fns.c, lib/avec/avec_values.c, lib/avec/avec_walk.c,
  lib/avec/avec_walk_r.c, lib/configure.ac, lib/iprime.h, lib/iprime.man,
  lib/iprime/.cvsignore, lib/iprime/chprime.c, lib/iprime/hprime.c,
  lib/iprime/iprime.c, lib/iprime/iprime_.h, lib/iprime/iprime_lut.c,
  lib/iprime/lprime.c, lib/iprime/scprime.c, lib/iprime/ucprime.c,
  lib/iprime/uhprime.c, lib/iprime/uiprime.c, lib/iprime/ulprime.c,
  lib/isqrt.h, lib/isqrt.man, lib/isqrt/.cvsignore, lib/isqrt/chsqrt.c,
  lib/isqrt/hsqrt.c, lib/isqrt/isqrt.c, lib/isqrt/isqrt_.h,
  lib/isqrt/isqrt_lut.c, lib/isqrt/lsqrt.c, lib/isqrt/scsqrt.c,
  lib/isqrt/ucsrt.c, lib/isqrt/uhsqrt.c, lib/isqrt/uisqrt.c,
  lib/isqrt/ulsqrt.c, lib/list.h, lib/list.man, lib/list/.cvsignore,
  lib/list/list_.c, lib/list/list_.h, lib/list/list_append.c,
  lib/list/list_ctor.c, lib/list/list_delete.c, lib/list/list_dtor.c,
  lib/list/list_exists.c, lib/list/list_first.c, lib/list/list_insert.c,
  lib/list/list_last.c, lib/list/list_number.c, lib/list/list_pop.c,
  lib/list/list_push.c, lib/list/list_qsort.c, lib/list/list_shift.c,
  lib/list/list_sizeof.c, lib/list/list_swap.c, lib/list/list_unshift.c,
  lib/memdebug.c, lib/memdebug.h, lib/memdebug.man, lib/strmalloc.c,
  lib/strmalloc.h, lib/strmalloc.man, lib/tests/.cvsignore,
  lib/tests/Makefile.am, lib/tests/tavec.c, lib/tests/tiprime.c,
  lib/tests/tisqrt.c, lib/tests/tstrmalloc.c, lib/tests/tuvec.c, lib/uvec.h,
  lib/uvec.man, lib/uvec/.cvsignore, lib/uvec/str2uvec.c, lib/uvec/uvec2str.c,
  lib/uvec/uvec2uvec.c, lib/uvec/uvec_accessor.c, lib/uvec/uvec_add.c,
  lib/uvec/uvec_alloc.c, lib/uvec/uvec_close.c, lib/uvec/uvec_copy.c,
  lib/uvec/uvec_copy_str.c, lib/uvec/uvec_copy_vec.c,
  lib/uvec/uvec_count_tok.c, lib/uvec/uvec_ctor.c, lib/uvec/uvec_dealloc.c,
  lib/uvec/uvec_dtor.c, lib/uvec/uvec_init.c, lib/uvec/uvec_insert.c,
  lib/uvec/uvec_push.c, lib/uvec/uvec_randomize.c, lib/uvec/uvec_reverse.c,
  lib/uvec/uvec_shift.c, lib/uvec/uvec_sort.c, lib/uvec/uvec_strfns.c,
  lib/uvec/uvec_strfree.c, lib/uvec/vec2uvec.c, locate_module.c, main.c,
  modulefiles/module-cvs.in, modules_def.h, testsuite/.cvsignore,
  testsuite/config/unix.exp, testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.00-init/015-version.exp,
  testsuite/modules.00-init/030-shells.exp,
  testsuite/modules.00-init/050-modpath.exp,
  testsuite/modules.00-init/080-begenv.exp,
  testsuite/modules.20-locate/040-alias.exp,
  testsuite/modules.20-locate/045-symvers.exp,
  testsuite/modules.20-locate/046-getsym.exp,
  testsuite/modules.20-locate/047-symerrs.exp,
  testsuite/modules.20-locate/048-symexec.exp,
  testsuite/modules.20-locate/050-locrc.exp,
  testsuite/modules.20-locate/060-rc.exp,
  testsuite/modules.20-locate/070-homerc.exp,
  testsuite/modules.30-userlvl/040-advanced.exp,
  testsuite/modules.30-userlvl/045-adv.exp,
  testsuite/modules.30-userlvl/050-expert.exp,
  testsuite/modules.30-userlvl/055-exp.exp,
  testsuite/modules.35-trace/010-init_ts.exp,
  testsuite/modules.35-trace/020-default.exp,
  testsuite/modules.35-trace/030-all-on.exp,
  testsuite/modules.35-trace/031-all-off.exp,
  testsuite/modules.35-trace/040-load-all.exp,
  testsuite/modules.35-trace/041-load-all.exp,
  testsuite/modules.35-trace/042-load-on.exp,
  testsuite/modules.35-trace/043-load-onoff.exp,
  testsuite/modules.35-trace/044-load-ovr.exp,
  testsuite/modules.35-trace/050-disp-onoff.exp,
  testsuite/modules.35-trace/060-dilo-onoff.exp,
  testsuite/modules.35-trace/070-colon.exp,
  testsuite/modules.35-trace/095-cleanup.exp,
  testsuite/modules.50-cmds/015-use.exp,
  testsuite/modules.50-cmds/017-use-undo.exp,
  testsuite/modules.50-cmds/020-setenv.exp,
  testsuite/modules.50-cmds/022-setenv-eschars.exp,
  testsuite/modules.50-cmds/025-setenv-undo.exp,
  testsuite/modules.50-cmds/030-unsetenv.exp,
  testsuite/modules.50-cmds/035-unsetenv-undo.exp,
  testsuite/modules.50-cmds/036-unsetenv-x.exp,
  testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.50-cmds/045-append-undo.exp,
  testsuite/modules.50-cmds/050-prepend.exp,
  testsuite/modules.50-cmds/055-prepend-undo.exp,
  testsuite/modules.50-cmds/060-remove.exp,
  testsuite/modules.50-cmds/065-remove-undo.exp,
  testsuite/modules.50-cmds/070-alias-proc.exp,
  testsuite/modules.50-cmds/075-alias.exp,
  testsuite/modules.50-cmds/077-alias-undo.exp,
  testsuite/modules.50-cmds/080-info-name.exp,
  testsuite/modules.50-cmds/081-info-user.exp,
  testsuite/modules.50-cmds/082-info-user-exp.exp,
  testsuite/modules.50-cmds/083-info-mode.exp,
  testsuite/modules.50-cmds/084-info-mode-exp.exp,
  testsuite/modules.50-cmds/085-info-flags.exp,
  testsuite/modules.50-cmds/086-info-shells.exp,
  testsuite/modules.50-cmds/087-info-shells-exp.exp,
  testsuite/modules.50-cmds/088-info-isloaded.exp,
  testsuite/modules.50-cmds/095-uname.exp,
  testsuite/modules.50-cmds/101-badfac.exp,
  testsuite/modules.50-cmds/110-verbose.exp,
  testsuite/modules.50-cmds/115-verbose-msg.exp,
  testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/121-prereq-module.exp,
  testsuite/modules.50-cmds/130-conflict-full.exp,
  testsuite/modules.50-cmds/131-conflict-module.exp,
  testsuite/modules.50-cmds/140-system.exp,
  testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/190-load.exp,
  testsuite/modules.50-cmds/200-break.exp,
  testsuite/modules.70-maint/020-update.exp,
  testsuite/modules.70-maint/030-purge.exp,
  testsuite/modules.70-maint/050-whatis-load.exp,
  testsuite/modules.70-maint/060-apropos.exp,
  testsuite/modules.70-maint/095-cleanup.exp,
  testsuite/modules.95-version/020-load.exp,
  testsuite/modules.95-version/020-unload.exp,
  testsuite/modules.95-version/022-load2.exp,
  testsuite/modules.95-version/022-unload2.exp,
  testsuite/modules.95-version/040-xgetenv.exp,
  testsuite/modules.95-version/999-cleanup.exp, utility.c, version.c: Merged
  in the modules_3_2_predeep_branch branch to the main trunk. Removed the hash
  library.

2005-07-21  sirdude <sirdude>

  * tcl/modulecmd.tcl: Made it so g_debug is passed to the module files.

2005-05-09  sirdude <sirdude>

  * tcl/modulecmd.tcl: Removed error message that shouldn't be print there. It
  was printing an error complaining it couldn't find a module even though it
  could.

2005-05-05  sirdude <sirdude>

  * tcl/modulecmd.tcl: Added a space between columns in module list command.
  Kent

2005-04-27  sirdude <sirdude>

  * tcl/modulecmd.tcl: Fix so module swap perl perl works the same as module
  swap perl  (before was different if you had a different version than the
  default loaded)  Kent

  * tcl/modulecmd.tcl: Ran modulecmd.tcl through frink since no one complained
  about doing it.  Kent

  * tcl/modulecmd.tcl: added lazy find for module switch  Example: Say you
  have the following modules   perl/5.6 perl/5.8(default) and you have
  perl/5.6 loaded currently. Now you can do module switch perl perl and it
  will unload perl/5.6 and load perl/5.8 before it would error saying the perl
  module is not loaded.  Kent

2005-04-19  sirdude <sirdude>

  * tcl/modulecmd.tcl: I added -l and -t options for module list and module
  avail also fixed resolveModuleVersionOrAlias up a bit so it deals with
  module(default)  Kent

2005-04-15  sirdude <sirdude>

  * tcl/modulecmd.tcl: fix (default) display on modules that are "deep"
  soft/xemacs/21.4   etc....  Kent

  * tcl/modulecmd.tcl: made reload unload all modules then load them all in
  the proper order. Similar to module swap.  Kent

2005-04-14  sirdude <sirdude>

  * tcl/modulecmd.tcl: Modified module switch so it unloaded last module first
  down to the module its swapping out and then reloaded everything in order.
  Before it was unloading them starting at the module to be swapped out to the
  end and then loading them in the same order.  Probably not a big deal but
  code is actually shorter now and is probably more correct.  I also added -a
  and -append as alternatives to --append and --prepend for module use.
  (There were comments saying it would be nice to have that)  Kent

  * tcl/modulecmd.tcl: fixes module whatis problem with (default) before it
  wasn't able to find modules that had a .version file.  Kent

  * tcl/modulecmd.tcl: Added two more globals DEF_COLUMNS and
  MODULES_CURRENT_VERSION and removed hardcoded bits relating to them.  Also
  removed some misc code that was commented out and no longer used.  Kent

2005-04-08  sirdude <sirdude>

  * tcl/modulecmd.tcl: Fix module swap so that it unloads old module and
  everything after it then loads new and everything that was after old.  Kent

  * tcl/modulecmd.tcl: Fix up module init(cmds) I made them behave like the c
  versions example before the initadd added a module to every module load line
  now it just does the first.  I have a ~/.modules directory and before this
  caused the init(cmds) to fail.  Also made it so it only changes one file not
  all . files it goes through.  Kent

2005-04-07  sirdude <sirdude>

  * tcl/modulecmd.tcl: Moved some global variables up to the top of the file.
  Kent

2005-04-06  sirdude <sirdude>

  * tcl/modulecmd.tcl: Modified patch for prereq's I also fixed a small
  problem in the module show  for prereq's  Kent

  * tcl/modulecmd.tcl: Rodney Mach's unalias fix  Kent

2004-11-18  lakata <lakata>

  * tcl/README-EMACS.txt, tcl/init/.cvsignore, tcl/init/lisp.in: submitted by
  tbennett@nvidia.com

  * tcl/init/Makefile, tcl/modulecmd.tcl: patch for Emacs from
  tbennett@nvidia.com

2004-11-05  lakata <lakata>

  * tcl/modulecmd.tcl: added more error checking to init/modulerc. probably
  should change this yet again to standardize the naming convention

  * tcl/modulecmd.tcl: changed hardcoded path to /home/Mark etc to
  $MODULESHOME

2004-10-22  lakata <lakata>

  * tcl/init/README.txt: added instructions on using the new autoinit feature

  * tcl/modulecmd.tcl: added autoinit feature. not documented until we get
  some feedback

2004-10-22  harlan <harlan>

  * locate_module.c: cleanup/refactor

  * configure.ac: cleanup

  * ModuleCmd_Avail.c: USE_COLCOMP -> DEF_COLLATE_BY_NUMBER

  * Makefile.am: Alphabetize...

2004-10-15  lakata <lakata>

  * tcl/modulecmd.tcl: * made compatibility changes with tcl < 8.1.  string
  equal changed to string match and changes to regular expressions.  There is
  now a caveat: module init* commands won't work if there are tabs in your
  startup file around the module commands if tcl < 8.1. * Fixed display so
  that setenv values don't give an error if used later in the module during
  display  * Fixed bug with Perl.  rendersetting output now ends with "1;" for
  perl so that the require command works correctly  * Changed noexistent path
  error to warning in cmdModuleUse. Otherwise, if you gave more than one path,
  some of the other legal paths may not get added.  This is a revert back to
  how modulecmd was originally and probably breaks compatability with the C
  version in this regard

2004-10-13  lakata <lakata>

  * tcl/modulecmd.tcl: * Fixed ModulesHelp so that it doesn't error out when
  not present * Added module-verision,module-alias, module-trace, module-user,
  module-verbosity, and module-log  to module file execution. All but
  module-version and module-alias give a warning that it is not implemented *
  Added module-trace, module-user, module-verbosity, and module-log to
  modulerc execution.  All give warnings that the funcionatlity is not
  implemented * Added #%Module checking on .version and .modulerc files *
  execute-version will now add version defaults to the global defaults array
  like .modulerc files do * .version files are no longer executed if a
  .modulerc is executed in the same directory * module-info symbols command
  implemented (could use more testing) * module-info version command
  implemented (could use more testing) * moduule-info alias command
  implemented * module-version - fixed problem of adding duplicate version
  aliases to global hash * module-alias updated to keep track of aliases by
  module name in global hash * Fix unload-path so that setenv-path followed by
  prepend-path works during unload * fixed bug in is-loaded.  It took a list
  of modules as an argument but would return true if only one of the arguments
  was loaded.  Now all arguments have to be loaded to return true. * Added
  getVersAliasList function.  Returns list of default and version aliases
  given a modulename/version * Added default and version alias information to
  avail and list output * Added a few more "----" to the module list output

  * tcl/modulecmd.tcl: modulecmd.tcl

2004-10-07  lakata <lakata>

  * tcl/modulecmd.tcl: (1) Andrew Barbers changes to fix some bugs. (2) Mark
  Lakatas change to sym links under cygwin. removed check for MODULEPATH,
  since you can use "module use ..." to set it

2004-10-05  lakata <lakata>

  * tcl/modulecmd.tcl: from Andrew Barber: Here is another update.  This one
  has some tricky changes.  Most of it was done to try and get the testsuite
  to pass.  I added a few more features too. The biggest changes were in:
  getPathToModule - now it can resolve aliases found in .modulerc and .version
  files , runModulerc - now this is responsible for finding and executing the
  global .modulerc files (new feature for tcl version)

  * tcl/modulecmd.tcl: patch from Tony Bennett.  need for gentoo system

2004-10-01  lakata <lakata>

  * tcl/modulecmd.tcl: Andrew Barbers changes: * added module-verision and
  module-alias commands, * added automatic of execution .modulerc files found
  in module directories, * added switch processing and -debug switch for debug
  messages

2004-09-30  lakata <lakata>

  * tcl/modulecmd.tcl: (1) added more commands to the internal "module"
  command (2) added all of the init* commands, like initadd (3) changed the
  help message slightly

2004-09-23  sirdude <sirdude>

  * tcl/modulecmd.tcl: David Mores patch so that first module in module list
  is shown again.  Sorry about that I should have caught that before...  Kent

  * tcl/modulecmd.tcl: Mark Moe's patch to prevent infinate loop when you have
  module a loading module b where module b has a .version that points to
  unavailable version of module b  Kent

2004-09-21  sirdude <sirdude>

  * tcl/modulecmd.tcl: David Mores,  patches to the COLUMNS stuff.  Kent

  * tcl/modulecmd.tcl: Mark Moe's patch for skipping 0 length modules in
  module list and adding the printing of: "Currently Loaded Modulesfiles:"
  Kent

2004-09-16  sirdude <sirdude>

  * tcl/modulecmd.tcl: Harlan Stenn's Patch from Phong Nguyen,  It basically
  wraps the openning of a tmpfile in a catch command  I also updated the error
  message after it to use the tmpfile var instead of hardcoding it...   Kent

2004-05-25  sirdude <sirdude>

  * tcl/init/bash.in, tcl/init/csh.in, tcl/init/ksh.in, tcl/init/perl.in,
  tcl/init/python.in, tcl/init/sh.in, tcl/init/tcsh.in, tcl/init/zsh.in: tcl
  version of modules now looks at environment var TCLSH if it exits and uses
  that first.  Suggested by David Astrom.  Kent

  * tcl/modulecmd.tcl: Use  env(COLUMNS) if its defined instead of a hard
  coded number. submitted by David Astrom through Mark Lakata.  Kent

2004-04-21  sirdude <sirdude>

  * tcl/modulecmd.tcl: David Mores patch to prevent tcl version from hanging
  with a .version file that does not set the ModulesVersion correctly.  Kent

2004-01-16  sirdude <sirdude>

  * tcl/Makefile: removed clean and test from the default make.  Kent

  * tcl/Makefile, testsuite/config/unix.exp: Made it so that the testsuite
  works with the tcl version of modules. Current stats for the tcl version
  are: # of expected passes            146 # of unexpected failures        376
  Not too shabby, I'm guessing it will be fairly straight forward to increase
  this by quite a bit.  Kent

2004-01-15  sirdude <sirdude>

  * tcl/init/bash.in, tcl/init/csh.in, tcl/init/ksh.in, tcl/init/perl.in,
  tcl/init/python.in, tcl/init/sh.in, tcl/init/tcsh.in, tcl/init/zsh.in:
  Modified the tcl init files so that they try to find tclsh, this should make
  them quite a bit faster assuming they find it. (This way it locates the
  shell just once instead of for every single command.)  Kent

  * tcl/modulecmd.tcl: Improved module help functionatlity for the tcl version
  of modules. now you can type module help (module)  also commiting the patch
  someone submitted to the board that allows for .version files in directorys
  other than the top level. (for tcl version only)  Kent Mein

2003-10-30  harlan <harlan>

  * tcl/modulecmd.tcl: bash requires a space after the { on function
  definitions.

  * tcl/modulecmd.tcl: Remove the /tmp file early.  Use the "function" keyword
  when creating sh functions; otherwise if the function already exists the
  name gets expanded on some shells.

2003-10-28  lakata <lakata>

  * tcl/modulecmd.tcl: prevent "break" from generating an error message

2003-10-27  lakata <lakata>

  * tcl/modulecmd.tcl: 1) module-info shell and shelltype would generate an
  TCL error when used (FIXED) 2) remove-path had two typos in it (FIXED) 3)
  Added detection of full path in getPathToModule procedure

2003-10-20  lakata <lakata>

  * tcl/modulecmd.tcl: 1) Add support for the other shells that the C version
  includes 2) Add support for prereq command 3) Replace the "/bin/uname" calls
  to use the tcl_platform variable and "info hostname" command  Enclosed are
  my latest modulecmd.tcl updates. I have added most of the features that I
  thought it needed and implemented the slave interpreter to execute
  modulefile in. I have tested it to some degree but not very seriously.
  Richard.M.Born@seagate.com

2003-10-15  lakata <lakata>

  * tcl/modulecmd.tcl: fixed two bugs in the display command

2003-10-07  lakata <lakata>

  * tcl/modulecmd.tcl: cleaned up the mode and modulename settings that used
  to be access via the upvar. also changed the calling convention for
  getPathToModule, which now does not throw an exception for minor warnings

  * tcl/modulecmd.tcl: fixed a bug where the result of the catch is either an
  error or the last command

2003-10-06  lakata <lakata>

  * tcl/modulecmd.tcl: fixed a bug in the popMode command and made it backward
  compatible with tcl 8.0

  * tcl/modulecmd.tcl: 1. pulled all references to puts stderr to
  report/reportWarnings/reportInternalBug. 2. changed the way the g_mode
  variable is handled. Instead of relying on the call stack, it now uses an
  explicit stack, which should solve any problems with using other namespaces
  3. removed a bunch of debugging statements. 4. fixed the way errors are
  handled, giving more meaningful responses. 5. if an error is caught in load,
  the env/alias settings are NOT updated and restored to a previous state. for
  instance, in a conflict this is important.

  * tcl/modulecmd.tcl: fixed bug in listModules that was failing on cygwin

2003-10-03  lakata <lakata>

  * tcl/modulecmd.tcl: Proxy check in for Richard.M.Born@seagate.com. He
  wrote:  1) It didn't handle modulefiles in the main directory for commands
  like module avail 2) It didn't define the ModulesCurrentModulefile variable
  3) It didn't ignore certain temp files (*~, #*#) 4) It didn't look for the
  Modulefile MagicCookie to filter out non-modulefiles  I have updated
  modulecmd.tcl to address these issues. I have removed lsHack and replaced it
  with listModules procedure. I am not familiar with the glob issue that you
  noted for Cygwin so you may want to run a few test cases to see if the new
  function still works for you. I also updated the module paths command to
  what I think you were intending.

2003-08-08  harlan <harlan>

  * tcl/modulecmd.tcl: Changes to lsHack for cmdModulePath and friends.

2003-08-07  harlan <harlan>

  * tcl/modulecmd.tcl: Typo

  * tcl/modulecmd.tcl: Add $Revision$ to the version

  * tcl/modulecmd.tcl: Initial support for "module path".

2003-08-02  harlan <harlan>

  * tcl/modulecmd.tcl: /bin/sh has no shell functions.  Avoid an extra call to
  getPathToModule

2003-08-01  harlan <harlan>

  * tcl/modulecmd.tcl: whitespace cleanup, lose cruft.

2003-07-30  lakata <lakata>

  * tcl/README.txt, tcl/modulecmd.tcl: version 0.98: fixed a bug in the
  error_count (missing closing brace). also implemented check to abort the
  tempfile sourcing if the tempfile is empty. this is to be more blackboxish,
  avoiding relying on the shell to do a clean up. one of our users is not
  using the module command correctly, and it is created a whole bunch of empty
  /tmp/modulescript files in the /tmp dir.

2003-07-15  harlan <harlan>

  * tcl/modulecmd.tcl: Begin to handle errors.

2003-07-10  harlan <harlan>

  * ChangeLog, tcl/modulecmd.tcl: * tcl/modulecmd.tcl: If g_force is set,
  ignore *_modshare.  When we produce a shell function, preface the definition
  with "function" in case it's already defined.  Default g_force to 1 now.

2003-06-26  harlan <harlan>

  * tcl/modulecmd.tcl: ModuleTcl: 0.97 Aliases: add/load, rm/inload,
  nodename/node We need to eval more "cmdModule{Unl,L}oad $arg" lines to:
  Implement --append (and --prepend) for cmdModuleUse Use -dictionary lsorts
  to provide an easy substitute for colcomp(). Added SCCS and RCS to the
  ignoreDir list. Moved ignoreDir processing to lsHack to fix a problem. Make
  sure an empty modulefile direcoty doesn't cause an error.

2003-06-02  harlan <harlan>

  * tcl/init/README.txt: Reformat some long lines.

2003-05-30  lakata <lakata>

  * tcl/init/README.txt, tcl/init/bash.in, tcl/init/csh.in, tcl/init/ksh.in,
  tcl/init/modulerc, tcl/init/perl.in, tcl/init/sh.in, tcl/init/tcsh.in,
  tcl/init/zsh.in: changed the way MODULEPATH is set up. since this is another
  environment variable like all the others, it is now set using the module
  command itself. pretty sneaky, huh?

  * tcl/modulecmd.tcl: 1. added the "source" command (experimental) 2. added
  sanity checking to verify that something external did not muck with path and
  path_modshare variables. 3. fixed a bug if you use tcsh and your paths get
  longer than 1024 characters. Previously, it was truncating the path, but
  this can get you into trouble if important things like /usr/bin or
  /usr/local/bin are truncated. The real solution is to STOP USING TCSH... use
  zsh instead.

2003-03-28  lakata <lakata>

  * tcl/README.txt, tcl/modulecmd.tcl: changes for cygwin. files should not
  have cr/lf (DOS) endings.

  * tcl/init/Makefile, tcl/init/README.txt, tcl/init/bash, tcl/init/bash.in,
  tcl/init/{csh => csh.in}, tcl/init/ksh, tcl/init/ksh.in, tcl/init/{perl =>
  perl.in}, tcl/init/{python => python.in}, tcl/init/sh, tcl/init/sh.in,
  tcl/init/{tcsh => tcsh.in}, tcl/init/zsh, tcl/init/zsh.in: made init files
  more general

2003-01-22  lakata <lakata>

  * tcl/init/perl: error checking if something goes wrong in perl

  * tcl/modulecmd.tcl: fixed bugs with corrupted env vars, improved the
  reliability of _modshare variables

2002-11-29  lakata <lakata>

  * tcl/modulecmd.tcl: changed help message

  * tcl/README.txt, tcl/init/bash, tcl/init/csh, tcl/init/ksh, tcl/init/perl,
  tcl/init/python, tcl/init/sh, tcl/init/tcsh, tcl/init/zsh,
  tcl/init/zsh.debug, tcl/modulecmd.tcl: first check in

2002-09-18  harlan <harlan>

  * ChangeLog, Makefile.am, lib/.cvsignore, lib/Makefile.am,
  lib/tests/Makefile.am: * Makefile.am (modulecmd_CFLAGS): Use X_CFLAGS and
  TCL_INCLUDES.  * lib/tests/Makefile.am (EXTRA_PROGRAMS): Renamed from
  noinst_PROGRAMS.  Lose the .x suffixes.  * lib/Makefile.am
  (ACLOCAL_AMFLAGS): Look in ../config/ .

2002-09-16  rkowen <rkowen>

  * ChangeLog, Makefile.am, ModuleCmd_List.c, TODO, colcomp.c, configure.ac,
  lib/uvec.man, locate_module.c, main.c, modules_def.h, utility.c: 2002-09-16
  R.K. Owen   <rk@owen.sj.ca.us> * colcomp.c: removed * utility.c: added
  colcomp.c contents * Makefile.am: removed colcomp.c * main.c: Added
  DEF_COLLATE_BY_NUMBER output for --version * configure.ac: changed
  USE_COLCOMP to DEF_COLLATE_BY_NUMBER, and added memdebug * locate_module.c:
  changed USE_COLCOMP and GetModuleName for deep dirs. * modules_def.h: check
  for HAVE_CONFIG_H, and added memdebug * ModuleCmd_List.c: Simplified using
  uvec objects

2002-09-13  rkowen <rkowen>

  * ChangeLog, config/.cvsignore, init/.cvsignore: 2002-09-12  R.K. Owen
  <rk@owen.sj.ca.us> * config/.cvsignore: New File: Ignore autogenerated
  files. * init/.cvsignore: Ignore autogenerated files.

  * .cvsignore, ChangeLog, doc/.cvsignore, etc/.cvsignore, ext/.cvsignore,
  lib/.cvsignore, lib/tests/.cvsignore, lib/tests/Makefile.am,
  modulefiles/.cvsignore: 2002-09-12  R.K. Owen   <rk@owen.sj.ca.us> *
  .cvsignore: Ignore autogenerated files. * doc/.cvsignore: Ignore
  autogenerated files. * etc/.cvsignore: Ignore autogenerated files. *
  ext/.cvsignore: Ignore autogenerated files. * lib/.cvsignore: Ignore
  autogenerated files. * lib/tests/.cvsignore: Ignore autogenerated files. *
  modulefiles/.cvsignore: Ignore autogenerated files. * lib/tests/Makefile.am:
  Tweeked for autoreconf

  * ChangeLog, README, lib/Makefile.am, lib/aclocal.m4, lib/configure.ac,
  lib/tests/tuvec.c, lib/uvec.h, lib/uvec/uvec_copy_str.c,
  lib/uvec/uvec_strfree.c: 2002-09-12  R.K. Owen   <rk@owen.sj.ca.us> *
  README: Updated the anonymous CVS invocation. * lib/aclocal.m4: Deleted
  auto* generated file. * lib/configure.ac: Tweeked to autoreconf *
  lib/Makefile.am: Tweeked to autoreconf * lib/uvec.h: Added uvec_strfree *
  lib/uvec/uvec_copy_str.c: Uses uvec string fns * lib/uvec/uvec_copy_vec.c:
  Uses uvec string fns * lib/uvec/uvec_strfree.c: New file: to dealloc
  uvec2str() generated strings * lib/tests/tuvec.c: Updated for uvec changes

2002-09-12  harlan <harlan>

  * doc/Makefile.am, lib/config.h.in, lib/configure: * doc/Makefile.am: Added
  file.  * lib/configure: Remove auto*-generated file. * lib/config.h.in:
  Ditto.

  * ChangeLog, Makefile.in, README, aclocal.m4, config.h.in, config/compile,
  config/depcomp, config/install-sh, config/missing, config/mkinstalldirs,
  configure, doc/Makefile.in, etc/Makefile.in, ext/Makefile.in,
  init/Makefile.in, lib/Makefile.in, lib/tests/Makefile.in,
  modulefiles/Makefile.in: * README: Update the instructions for using the CVS
  version of modules.  * modulefiles/Makefile.in: Deleted auto* generated
  file. * lib/tests/Makefile.in: Ditto. * lib/Makefile.in: Ditto. *
  init/Makefile.in: Ditto. * ext/Makefile.in: Ditto. * etc/Makefile.in: Ditto.
  * doc/Makefile.in: Ditto. * config/mkinstalldirs: Ditto. * config/missing:
  Ditto. * config/install-sh: Ditto. * config/depcomp: Ditto. *
  config/compile: Ditto. * configure: Ditto. * config.h.in: Ditto. *
  aclocal.m4: Ditto. * Makefile.in: Ditto.

  * ChangeLog: Renamed ChangeLog to NEWS, started a new ChangeLog.

  * Makefile.am, ModuleCmd_Avail.c, NEWS, colcomp.c, configure.ac,
  lib/Makefile, locate_module.c: * colcomp.c: New file.  Alternative collating
  algorithm that sorts numeric substrings numerically (mostly).  *
  lib/Makefile: Remove auto*-generated file.  * locate_module.c
  (SortedDirList): Ignore SCCS/ subdirs, too.  * configure.ac: Disable our
  "look" for RUNTEST; it drives auto* crazy.  Added the
  --with-file-collate={string,number} test, which provides a way to enable
  USE_COLCOMP.  * ModuleCmd_Avail.c (fi_ent_cmp): USE_COLCOMP when told to do
  so. * locate_module.c (filename_compare): Ditto.  * Makefile.am
  (modulecmd_LDFLAGS): lib is in the builddir, not the srcdir.
  (modulecmd_SOURCES): Added colcomp.c .

  * ChangeLog => NEWS: Rename ChangeLog to NEWS.

2002-08-27  rkowen <rkowen>

  * lib/Makefile, lib/Makefile.am, lib/Makefile.in, lib/memdebug.c,
  lib/memdebug.h, lib/memdebug.man, lib/tests/Makefile.in: Added the memdebug
  headerfile and sources.

2002-08-22  rkowen <rkowen>

  * cmdVersion.c, locate_module.c, modules_def.h: Fixed up GetDefault to
  handle .modulerc and .version files, where the latter will read the env.var.
  defined in .version and do a module-version so that the modlist data can be
  updated. These mods handle deep dirs on "module load" ... now need to fix up
  the rest! There's also now an amazing amount of cruft to weed out.

2002-08-14  lakata <lakata>

  * README: updated docs to reflect new configure (TCL paths)

  * locate_module.c, modules_def.h: removed compiler warnings about const
  char*

  * configure, configure.ac: added hack for linux that cant do -lX11 with
  -L/usr/X11R6/lib

  * cmdInfo.c, cmdVersion.c: removed compiler warnings

  * Makefile.in: fixed LDFLAGS build problem when not building in orig dist.
  directory

2002-08-02  rkowen <rkowen>

  * Makefile.am, Makefile.in, ModuleCmd_Avail.c, ModuleCmd_Display.c,
  ModuleCmd_Init.c, ModuleCmd_Load.c, ModuleCmd_Switch.c, aclocal.m4,
  cmdConflict.c, cmdInfo.c, cmdIsLoaded.c, cmdPath.c, cmdVersion.c, configure,
  configure.ac, error.c, etc/Makefile.in, ext/Makefile.in, init/Makefile.in,
  locate_module.c, main.c, modulefiles/Makefile.in, modules_def.h,
  testsuite/modules.00-init/080-begenv.exp, utility.c: A whole slew of changes
  progressing to deap modulefile directories. The current is not usuable, but
  will eventually be. These changes are checked in for safe keeping while
  R.K.Owen is on vacation.

  * xref/ModuleCmd_Avail.c.html, xref/ModuleCmd_Clear.c.html,
  xref/ModuleCmd_Display.c.html, xref/ModuleCmd_Help.c.html,
  xref/ModuleCmd_Init.c.html, xref/ModuleCmd_List.c.html,
  xref/ModuleCmd_Load.c.html, xref/ModuleCmd_Purge.c.html,
  xref/ModuleCmd_Switch.c.html, xref/ModuleCmd_Update.c.html,
  xref/ModuleCmd_Use.c.html, xref/ModuleCmd_Whatis.c.html,
  xref/cmdAlias.c.html, xref/cmdConflict.c.html, xref/cmdInfo.c.html,
  xref/cmdIsLoaded.c.html, xref/cmdLog.c.html, xref/cmdMisc.c.html,
  xref/cmdModule.c.html, xref/cmdPath.c.html, xref/cmdSetenv.c.html,
  xref/cmdTrace.c.html, xref/cmdUlvl.c.html, xref/cmdUname.c.html,
  xref/cmdVerbose.c.html, xref/cmdVersion.c.html, xref/cmdWhatis.c.html,
  xref/cxref.apdx.html, xref/cxref.function, xref/cxref.html,
  xref/cxref.include, xref/cxref.typedef, xref/cxref.variable,
  xref/error.c.html, xref/getopt.c.html, xref/init.c.html,
  xref/locate_module.c.html, xref/main.c.html, xref/utility.c.html,
  xref/version.c.html: Updated the xref html, but not current.

  * lib/Makefile, lib/Makefile.in, lib/uvec.h, lib/uvec.man,
  lib/uvec/uvec_copy_str.c, lib/uvec/uvec_copy_vec.c, lib/uvec/uvec_strfns.c:
  Changed how uvec sets/gets the uvec_strfns.

2002-07-29  rkowen <rkowen>

  * lib/Makefile.am, lib/list.h, lib/list.man, lib/list/.cvsignore,
  lib/list/list_.c, lib/list/list_.h, lib/list/list_append.c,
  lib/list/list_ctor.c, lib/list/list_delete.c, lib/list/list_dtor.c,
  lib/list/list_exists.c, lib/list/list_first.c, lib/list/list_insert.c,
  lib/list/list_last.c, lib/list/list_number.c, lib/list/list_pop.c,
  lib/list/list_push.c, lib/list/list_qsort.c, lib/list/list_shift.c,
  lib/list/list_sizeof.c, lib/list/list_swap.c, lib/list/list_unshift.c: Added
  the list object for doubly linked lists.

2002-07-18  rkowen <rkowen>

  * lib/config.h.in: Need this also.

  * lib/Makefile.in: Forgot this one.

  * lib/Makefile, lib/Makefile.am, lib/aclocal.m4, lib/configure,
  lib/configure.ac, lib/tests/.cvsignore, lib/tests/Makefile.am,
  lib/tests/Makefile.in: Adding in the automake/autoconf files for the modules
  library.

  * lib/strmalloc.c, lib/strmalloc.h, lib/strmalloc.man,
  lib/tests/tstrmalloc.c: Added the strmalloc code to the modules library,
  this will be useful for creating new strings with aliases expanded.

  * lib/.cvsignore, lib/tests/tuvec.c, lib/uvec.h, lib/uvec.man,
  lib/uvec/.cvsignore, lib/uvec/str2uvec.c, lib/uvec/uvec2str.c,
  lib/uvec/uvec2uvec.c, lib/uvec/uvec_accessor.c, lib/uvec/uvec_add.c,
  lib/uvec/uvec_alloc.c, lib/uvec/uvec_close.c, lib/uvec/uvec_copy.c,
  lib/uvec/uvec_copy_str.c, lib/uvec/uvec_copy_vec.c,
  lib/uvec/uvec_count_tok.c, lib/uvec/uvec_ctor.c, lib/uvec/uvec_dealloc.c,
  lib/uvec/uvec_dtor.c, lib/uvec/uvec_init.c, lib/uvec/uvec_insert.c,
  lib/uvec/uvec_push.c, lib/uvec/uvec_randomize.c, lib/uvec/uvec_reverse.c,
  lib/uvec/uvec_shift.c, lib/uvec/uvec_sort.c, lib/uvec/uvec_strfns.c,
  lib/uvec/vec2uvec.c: Added the uvec code, which provides basic unix vector
  capabilities. A unix vector is a NULL terminated array of char * strings. An
  example of this is *argv[] or *environ[].

  * lib/isqrt.h, lib/isqrt.man, lib/isqrt/.cvsignore, lib/isqrt/chsqrt.c,
  lib/isqrt/hsqrt.c, lib/isqrt/isqrt.c, lib/isqrt/isqrt_.h,
  lib/isqrt/isqrt_lut.c, lib/isqrt/lsqrt.c, lib/isqrt/scsqrt.c,
  lib/isqrt/ucsrt.c, lib/isqrt/uhsqrt.c, lib/isqrt/uisqrt.c,
  lib/isqrt/ulsqrt.c, lib/tests/tisqrt.c: Adding in the isqrt code to the
  modules library, this is needed by iprime (which is needed by avec).

  * lib/iprime.h, lib/iprime.man, lib/iprime/.cvsignore, lib/iprime/chprime.c,
  lib/iprime/hprime.c, lib/iprime/iprime.c, lib/iprime/iprime_.h,
  lib/iprime/iprime_lut.c, lib/iprime/lprime.c, lib/iprime/scprime.c,
  lib/iprime/ucprime.c, lib/iprime/uhprime.c, lib/iprime/uiprime.c,
  lib/iprime/ulprime.c, lib/tests/tiprime.c: Added the iprime code to the
  modules library.  This is needed by avec to compute the optimal hash size.

  * lib/avec.h, lib/avec.man, lib/avec/.cvsignore, lib/avec/avec_.c,
  lib/avec/avec_.h, lib/avec/avec_accessor.c, lib/avec/avec_alloc.c,
  lib/avec/avec_close.c, lib/avec/avec_ctor.c, lib/avec/avec_dealloc.c,
  lib/avec/avec_decrease.c, lib/avec/avec_delete.c, lib/avec/avec_dtor.c,
  lib/avec/avec_increase.c, lib/avec/avec_init.c, lib/avec/avec_insert.c,
  lib/avec/avec_keys.c, lib/avec/avec_lookup.c, lib/avec/avec_remove.c,
  lib/avec/avec_resize.c, lib/avec/avec_resize_percentage.c,
  lib/avec/avec_set_fns.c, lib/avec/avec_values.c, lib/avec/avec_walk.c,
  lib/avec/avec_walk_r.c, lib/tests/tavec.c: Added an associative vector
  object to the modules library.

2002-06-17  rkowen <rkowen>

  * RKOConfigure, locate_module.c: Minor changes in preparation for big ones.

  * ChangeLog, ModuleCmd_Avail.c, ModuleCmd_Update.c, ModuleCmd_Use.c,
  config.h.in, configure, configure.ac, doc/module.1.in, error.c, init.c,
  main.c, modules_def.h, testsuite/config/unix.exp,
  testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.00-init/080-begenv.exp,
  testsuite/modules.70-maint/020-update.exp: * Made the .modulesbeginenv
  facility optional (default is not to have it) * default for cache is now
  "no" * Added version_test() to testsuite to make some of the tests
  conditional on the values generated by --version. - the configure options
  help is formatted with AC_HELP_STRING

2002-06-14  rkowen <rkowen>

  * .cvsignore, ChangeLog, Makefile.am, Makefile.in, config.h.in,
  config/compile, configure, configure.ac, doc/Makefile.in, etc/.cvsignore,
  etc/Makefile.am, etc/Makefile.in, ext/.cvsignore, ext/Makefile.am,
  ext/Makefile.in, init/Makefile.am, init/Makefile.in, init/filter,
  init/zsh.in, modulefiles/Makefile.am, modulefiles/Makefile.in,
  testsuite/etc/.cvsignore: * Reworked every configure-based file - uses
  automake to generate most of the Makefile.in - renamed configure.in to
  configure.ac per autoconf - Versioning is optional now with a configure
  option - reworked the init scripts for versioning or not - eliminated
  acconfig.h and put templates in configure.ac - make install now honors the
  DESTDIR variable for package builds - honors bindir for modulecmd location
  (but the init scripts are only correct if no versioning) * Collected the
  usage info and now it can be displayed with the --help or -H option (same as
  help) * --version now gives most of the optional configure parameters for
  easy debugging of problems * Fixed bootstrap to just source the appropriate
  init script

  * Makefile.am, Makefile.in, acconfig.h, config.h.in, configure,
  configure.ac, etc/Makefile.am, etc/Makefile.in, etc/add.modules.in,
  etc/global/bashrc.in, etc/global/csh.cshrc.in, etc/skel/.cshrc.in,
  etc/skel/.kshenv.in, ext/Makefile.am, ext/Makefile.in, ext/add.ext.in,
  ext/common/.cshrc.in, ext/common/.kshenv.in, init/.modulespath.in,
  init/bash.in, init/csh.in, init/ksh.in, init/perl.in, init/python.in,
  init/sh.in, init/zsh.in: Removed the acconfig.h file since it's essentially
  in the configure.ac now. Reworked all the init,skel,add.* files to handle
  versioning or no. Added Makefile.am to ./etc/ and ./ext/ for cleaner
  installs.

2002-06-13  rkowen <rkowen>

  * Makefile.am, Makefile.in, ModuleCmd_Help.c, acconfig.h, config.h.in,
  doc/module.1.in, main.c, modules_def.h,
  testsuite/modules.00-init/015-version.exp: The version info displays some of
  the configuration options. Moved the usage info into module_usage() that can
  be displayed with the --help or -H switch.

  * Makefile.am, Makefile.in, ModuleCmd_Whatis.c, acconfig.h, config.h.in,
  configure, configure.ac, main.c: Renamed INSTPATH to PREFIX and is no longer
  passed as a compiler -D argument, but is now entered directly into the
  config.h header.

2002-06-12  rkowen <rkowen>

  * Makefile.am, Makefile.in, ModuleCmd_Bootstrap.c, init.c, main.c,
  modules_def.h, utility.c: Converted the configure scripts over to
  automake,autoconf generation. Modified "module bootstrap" to source the init
  files. Put the shell properties and moved set_derelict and renamed it
  set_shell_properties into init.c . Created a matrix of shell properties {
  name, derelict, init, cmd separator }.

  * testsuite/etc/apropos.cache, testsuite/modules.50-cmds/095-uname.exp:
  Fixed test syntax - it didn't like "dangling" ('s and )'s in regexp string.
  Just escaped them. Removed apropos.cache - it gets regenerated with each
  test.

  * ModuleCmd_Switch.c, testsuite/modules.50-cmds/170-swap.exp: Fixed up
  "module switch" one argument form (use stringer alloc) and added more tests
  (one for each of the major shells).

2002-06-11  rkowen <rkowen>

  * acconfig.h, config.h.in, configure, configure.ac: Added MODULES_INIT_DIR
  to the configure files.

2002-06-10  rkowen <rkowen>

  * Makefile.am, Makefile.in, ModuleCmd_Bootstrap.c, acconfig.h, acinclude.m4,
  aclocal.m4, config.h.in, configure, configure.ac: Upgraded the
  auto-configuration to use automake/1.6 and autoconf/2.53 to auto-generate
  some of the files.

  * init/bash.in, init/csh.in, init/ksh.in, init/perl.in, init/sh.in,
  init/zsh.in: Re-introduced the init files with versioning.

  * config/depcomp, config/install-sh, config/install.sh, config/missing,
  config/mkinstalldirs: Upgraded install scripts to automake/1.6 autoconf/2.53
  standards.

2002-06-06  rkowen <rkowen>

  * configure.in => configure.ac: configure.ac is actually the continuation of
  configure.in. do "cvs log configure.in" for a history.
  ---------------------------- revision 1.11 (of configure.in) date:
  2002/04/29 21:16:48;  author: rkowen;  state: Exp;  lines: +145 -116 *
  Upgraded configure.in to autoconf 2.52.  * Changed  the configure to search
  for libTcl.sh to acquire all it's necessary Tcl env.vars from it.

2002-05-06  rkowen <rkowen>

  * .cvsignore, doc/.cvsignore, etc/.cvsignore, etc/global/.cvsignore,
  etc/skel/.cvsignore, ext/.cvsignore, ext/common/.cvsignore, init/.cvsignore,
  modulefiles/.cvsignore, testsuite/.cvsignore: Added a bunch of .cvsignore
  files to avoid CVS in listing the known (but made) files.

2002-05-03  rkowen <rkowen>

  * testsuite/modulefiles/eschars/1.0,
  testsuite/modules.35-trace/010-init_ts.exp,
  testsuite/modules.35-trace/030-all-on.exp,
  testsuite/modules.35-trace/031-all-off.exp,
  testsuite/modules.35-trace/040-load-all.exp,
  testsuite/modules.35-trace/041-load-all.exp,
  testsuite/modules.35-trace/042-load-on.exp,
  testsuite/modules.35-trace/043-load-onoff.exp,
  testsuite/modules.35-trace/044-load-ovr.exp,
  testsuite/modules.35-trace/050-disp-onoff.exp,
  testsuite/modules.35-trace/060-dilo-onoff.exp,
  testsuite/modules.35-trace/070-colon.exp,
  testsuite/modules.50-cmds/022-setenv-eschars.exp,
  testsuite/modules.50-cmds/095-uname.exp,
  testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/121-prereq-module.exp, utility.c: Added
  EscapePerlString to utility.c, added '*' to list of csh special chars. Fixed
  up tests to reflect these changes. Added
  testsuite/modules.50-cmds/022-setenv-eschars.exp to test out escaping
  special chars.

2002-04-30  rkowen <rkowen>

  * install.sh, version.c: Moved install.sh to config/ and updated the version
  to 3.2.0a .

2002-04-30  lakata <lakata>

  * ModuleCmd_Bootstrap.c: fixed getexecname() problem.

2002-04-29  rkowen <rkowen>

  * RKOConfigure: Eliminated a lot of the extraneous options now that
  configure/tclConfig.sh .

  * ChangeLog, Makefile.in, ModuleCmd_Avail.c, ModuleCmd_Init.c,
  ModuleCmd_Load.c, ModuleCmd_Purge.c, ModuleCmd_Switch.c, ModuleCmd_Update.c,
  ModuleCmd_Whatis.c, aclocal.m4, cmdConflict.c, cmdLog.c, cmdModule.c,
  cmdPath.c, cmdTrace.c, cmdVersion.c, cmdXResource.c, config/install.sh,
  config/tcl.m4, configure, configure.in, error.c, init.c, locate_module.c,
  main.c, modules_def.h, utility.c: * Upgraded configure.in to autoconf 2.52.
  * Changed  the configure to search for libTcl.sh to acquire all it's
  necessary Tcl env.vars from it.  * created a utility function stringer() to
  handle most of the strcpy/strcat operations and to automatically allocate
  string memory.  * Mostly changed the memory malloc/free to use
  stringer/null_free.  * rewrote some of the code logic to have a single point
  of exit with unwinding of memory allocations.

2002-04-29  lakata <lakata>

  * ModuleCmd_Bootstrap.c: fixed bug with binary_name without an absolute path

  * ModuleCmd_Help.c: fixed help for swap|switch, to reflect optional first
  modulefile1

  * ModuleCmd_Bootstrap.c, config.h.in, configure, configure.in: added PREFIX
  to config.h and propagated to bootstrap code as MODULESHOME

  * doc/module.1.in: updated docs regarding "switch" and MODULESHOME

  * ChangeLog: "module switch foo/1.3" change log

  * ModuleCmd_Bootstrap.c, ModuleCmd_Switch.c, error.c, modules_def.h: added
  support for 1-arg form of "swap/switch" command

  * ModuleCmd_List.c: sanity check added in case _LMFILES_ and LOADEDMODULES
  env vars get corrupted externally

  * testsuite/modules.50-cmds/170-swap.exp: added test for one-argument form
  of swap/switch command

2002-04-27  lakata <lakata>

  * ChangeLog, Makefile.in, ModuleCmd_Bootstrap.c, cmdModule.c, cmdTrace.c,
  config.h.in, doc/module.1.in, init/bash.in, init/csh.in, init/ksh.in,
  init/perl.in, init/sh.in, init/zsh.in, main.c, modules_def.h, utility.c:
  added the bootstrap command

2002-04-24  lakata <lakata>

  * ChangeLog: more stuff

  * init/tcsh.in: tcsh is now generated from csh, not tcsh.in

  * init/Makefile.in: tcsh script is copy of csh script

  * init/csh.in: fixed csh init script to deal with funny shell chars like *
  and {}

  * utility.c: (1) removed unset -f for zsh unaliasing  (2) removed single
  quotes for quoting env vars. This breaks if the env var itself has single
  quotes. The more robust method is to individually escape all the dangerous
  characters.  Old method: setenv foo 'bar bar'  New method: setenv foo bar\
  bar  (3) removed tmpnam and tempname stuff, replacing with safer
  tmpfile_mod()

  * config.h.in, configure, configure.in: added TMP_DIR define

  * cmdXResource.c: suppress warning if DISPLAY is not set

  * cmdModule.c: fixed help message

  * aclocal.m4: fixed problem with finding tcl lib using glob

  * testsuite/modules.00-init/080-begenv.exp,
  testsuite/modules.10-use/030-use.exp,
  testsuite/modules.10-use/031-append.exp,
  testsuite/modules.10-use/070-unuse.exp,
  testsuite/modules.20-locate/040-alias.exp,
  testsuite/modules.20-locate/045-symvers.exp,
  testsuite/modules.20-locate/046-getsym.exp,
  testsuite/modules.20-locate/047-symerrs.exp,
  testsuite/modules.20-locate/048-symexec.exp,
  testsuite/modules.20-locate/050-locrc.exp,
  testsuite/modules.20-locate/060-rc.exp,
  testsuite/modules.20-locate/070-homerc.exp,
  testsuite/modules.30-userlvl/040-advanced.exp,
  testsuite/modules.30-userlvl/045-adv.exp,
  testsuite/modules.30-userlvl/050-expert.exp,
  testsuite/modules.30-userlvl/055-exp.exp,
  testsuite/modules.35-trace/010-init_ts.exp,
  testsuite/modules.35-trace/020-default.exp,
  testsuite/modules.35-trace/030-all-on.exp,
  testsuite/modules.35-trace/031-all-off.exp,
  testsuite/modules.35-trace/040-load-all.exp,
  testsuite/modules.35-trace/041-load-all.exp,
  testsuite/modules.35-trace/042-load-on.exp,
  testsuite/modules.35-trace/043-load-onoff.exp,
  testsuite/modules.35-trace/044-load-ovr.exp,
  testsuite/modules.35-trace/050-disp-onoff.exp,
  testsuite/modules.35-trace/060-dilo-onoff.exp,
  testsuite/modules.35-trace/070-colon.exp,
  testsuite/modules.35-trace/095-cleanup.exp,
  testsuite/modules.50-cmds/015-use.exp,
  testsuite/modules.50-cmds/017-use-undo.exp,
  testsuite/modules.50-cmds/020-setenv.exp,
  testsuite/modules.50-cmds/030-unsetenv.exp,
  testsuite/modules.50-cmds/035-unsetenv-undo.exp,
  testsuite/modules.50-cmds/036-unsetenv-x.exp,
  testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.50-cmds/045-append-undo.exp,
  testsuite/modules.50-cmds/050-prepend.exp,
  testsuite/modules.50-cmds/055-prepend-undo.exp,
  testsuite/modules.50-cmds/060-remove.exp,
  testsuite/modules.50-cmds/065-remove-undo.exp,
  testsuite/modules.50-cmds/075-alias.exp,
  testsuite/modules.50-cmds/077-alias-undo.exp,
  testsuite/modules.50-cmds/080-info-name.exp,
  testsuite/modules.50-cmds/081-info-user.exp,
  testsuite/modules.50-cmds/082-info-user-exp.exp,
  testsuite/modules.50-cmds/083-info-mode.exp,
  testsuite/modules.50-cmds/084-info-mode-exp.exp,
  testsuite/modules.50-cmds/085-info-flags.exp,
  testsuite/modules.50-cmds/086-info-shells.exp,
  testsuite/modules.50-cmds/087-info-shells-exp.exp,
  testsuite/modules.50-cmds/088-info-isloaded.exp,
  testsuite/modules.50-cmds/095-uname.exp,
  testsuite/modules.50-cmds/101-badfac.exp,
  testsuite/modules.50-cmds/110-verbose.exp,
  testsuite/modules.50-cmds/115-verbose-msg.exp,
  testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/121-prereq-module.exp,
  testsuite/modules.50-cmds/130-conflict-full.exp,
  testsuite/modules.50-cmds/131-conflict-module.exp,
  testsuite/modules.50-cmds/140-system.exp,
  testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.50-cmds/170-swap.exp,
  testsuite/modules.50-cmds/190-load.exp,
  testsuite/modules.50-cmds/200-break.exp,
  testsuite/modules.70-maint/020-update.exp,
  testsuite/modules.70-maint/050-whatis-load.exp,
  testsuite/modules.95-version/020-load.exp,
  testsuite/modules.95-version/020-unload.exp,
  testsuite/modules.95-version/022-load2.exp,
  testsuite/modules.95-version/022-unload2.exp,
  testsuite/modules.95-version/040-xgetenv.exp: changed tests to match new
  syntax for setting env vars. rather than quoting, special characters are
  escaped

2002-04-09  lakata <lakata>

  * Makefile.in: simplified installation of deep directories

2002-03-18  rkowen <rkowen>

  * Makefile.in: Un-escaped the --srcdir $$TESTSUITEDIR, because it caused
  problems on Linux dejagnu 1.4.1 .  The variable is being interpolated before
  the runtest command is executed.

2002-03-11  lakata <lakata>

  * aclocal.m4, configure, configure.in: more TCL smarts, if tclsh does not
  exist on path

  * INSTALL: added hints on how to recognize a bad TCL install

  * ChangeLog: updates for release 3.1.6++

  * testsuite/modules.00-init/015-version.exp.in,
  testsuite/modules.50-cmds/100-loglevel.exp.in: removed *.in versions
  (configure processed)

  * testsuite/modules.00-init/015-version.exp,
  testsuite/modules.50-cmds/100-loglevel.exp: renamed from *.in versions
  (configure processed)

  * testsuite/config/unix.exp, testsuite/modulefiles/system/2.0,
  testsuite/modulefiles/use/{1.0.in => 1.0}, testsuite/modulefiles/use/{2.0.in
  => 2.0}, testsuite/modulefiles/use/{2.1.in => 2.1},
  testsuite/modulefiles/use/{2.2.in => 2.2},
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.00-init/015-version.exp.in,
  testsuite/modules.00-init/050-modpath.exp,
  testsuite/modules.00-init/080-begenv.exp,
  testsuite/modules.10-use/030-use.exp,
  testsuite/modules.10-use/031-append.exp,
  testsuite/modules.10-use/070-unuse.exp,
  testsuite/modules.20-locate/060-rc.exp,
  testsuite/modules.20-locate/065-rcerrs.exp,
  testsuite/modules.20-locate/070-homerc.exp,
  testsuite/modules.50-cmds/015-use.exp,
  testsuite/modules.50-cmds/017-use-undo.exp,
  testsuite/modules.70-maint/010-init_ts.exp,
  testsuite/modules.70-maint/020-update.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.95-version/010-init_ts.exp: (a) updated testsuite by
  centering source on TESTSUITEDIR, rather than rely on "pwd" or relative
  paths, which prohibit running the testsuite from a different dir (b) removed
  autoconf/configure processing of testsuite

  * INSTALL: Added more information about configuring TCL and a few other
  prerequisites.

  * configure: reran autoconf. see configure.in log

  * probetcl: probetcl functionality is now in aclocal.m4

  * configure.in: (a) reordered configuration, so that critical things are
  done first (aids in debugging to get the hardstuff done first). (b) removed
  some of the testsuite configuration (c) added -with-tcl-library
  configuration (d) changed the help messages

  * config.h.in: removed redundant lines

  * cmdXResource.c: (a) fixed regular expression for XRDB parsing (b) fixed
  spelling of "resource" (i think it was using the French spelling before)

  * Makefile.in: (a) change the way testsuite is configured, so "clean" was
  updated (b) changed -I include path to point to cwd instead ..

  * aclocal.m4: fixed the way TCL was configured

2002-03-10  rkowen <rkowen>

  * init/csh.in: Fixed bug in init/csh script, which only affected those that
  changed their history character.  Found by Barb Mauzy of Cray Inc.

  * Makefile.in: Updated the dist tarball upload targets.

  * modulefiles/module-cvs.in: Fixed up module-ftp alias to reflect the
  current SourceForge.Net ftp situation.

  * version.c: Preparing the version move to 3.1.7

  * .ftp: Made the tarball ftp uploading script more generic.

  * modules.lsm.in: Changed the primary & alternate ftp site to the current
  SourceForge.Net set up.

2002-03-09  lakata <lakata>

  * ModuleCmd_Avail.c: Fixed bug in mkdirnm. There was a check to see if the
  dir eq ".", but was done using a char comparison, not string comparison.
  Caused severe problems if dir was "..", since only first character was used.

2002-03-08  lakata <lakata>

  * INSTALL: Simplified docs by removing details of RKOConfigure and
  describing a typical install on a standard unix box

2002-01-04  rkowen <rkowen>

  * version.c: Minor change to date.

  * ChangeLog, ModuleCmd_Load.c, PROBLEMS, RKOConfigure, doc/modulefile.4.in,
  init.c, testsuite/modulefiles/break/1.0, testsuite/modulefiles/break/2.0,
  testsuite/modulefiles/break/3.0, testsuite/modules.50-cmds/200-break.exp: *
  A 'break' in a modulefile will cause the modulefile to not be added to
  $LOADEDMODULES, but will be considered a successful execution to not affect
  other modulefiles being loaded concurrently (Patch due to Scott Gaskins). *
  Tests and docs added for the above.

2001-12-20  rkowen <rkowen>

  * TODO: Added Harlan Stenn's suggestions, and cleaned it up a bit.

2001-11-05  rkowen <rkowen>

  * ChangeLog, Makefile.in, PROBLEMS, RKOConfigure, configure, configure.in,
  doc/Modules-Paper.pdf, locate_module.c, probetcl,
  testsuite/modules.50-cmds/190-load.exp, version.c: * Fixed problem with
  module load when the full path is given (patch due to Scott Gaskins). *
  Added tests for the above problem. * Added the Modules-Paper in PDF format
  (thanks to Philip Kearns and Leo Butler for raising the issue). * Modified
  probetcl to avoid using the -c option (patch due to Philip Kearns). *
  Modified probetcl to use tclsh first then tcl * Added TCL_VERSION to
  configure and use it in the Makefile to use the -ltcl@TCL_VERSION@ library.

2001-08-18  rkowen <rkowen>

  * ChangeLog, version.c: Release 3.1.5

2001-08-17  rkowen <rkowen>

  * ChangeLog, ModuleCmd_Load.c, cmdPath.c, version.c: * Fixed up cmdPath to
  remove individual items from a path (patch due to Eric Stanley).

2001-08-03  rkowen <rkowen>

  * .ftp, Makefile.in, version.c: Minor fixes for distribution uploading.

  * Makefile.in: Fixed the ftp-local bz2 patch target.

  * .spec.in, ChangeLog, Makefile.in, version.c: * Added bz2 files to
  distribution mix.

2001-07-26  rkowen <rkowen>

  * ChangeLog, cmdPath.c, testsuite/modulefiles/info/isloaded,
  testsuite/modulefiles/loc_dv1/1.0, testsuite/modulefiles/loc_dv1/2.0,
  testsuite/modules.50-cmds/088-info-isloaded.exp,
  testsuite/modules.50-cmds/170-swap.exp, version.c: * Fixed "module swap" to
  put the substituted module in the same path location as the old.  Also added
  a number of tests for this feature. (Bug was pointed out by Leo Butler
  <lbutler@brocade.com>) * Added tests for the "is-loaded" modulefile command
  introduced back in 3.0.8-rko.

2001-07-16  rkowen <rkowen>

  * version.c: Testing to see if a really minor update could be done.

  * INSTALL.RH7x, etc/global/bashrc.in, etc/global/profile.in: Fixed some
  embarrassing typos and editting mistakes.

2001-07-11  rkowen <rkowen>

  * testsuite/modulefiles/versions/1.1, testsuite/modulefiles/versions/1.2,
  testsuite/modulefiles/versions/1.3: More test stragglers for 3.1.3

  * testsuite/modulefiles.other/1.1/version,
  testsuite/modulefiles.other/1.2/version,
  testsuite/modulefiles.other/1.3/version, testsuite/modulefiles/unsetenv/0.9:
  Forgot some straggler test files for 3.1.3

  * ChangeLog, README.perl, configure, configure.in, modulefiles/Makefile.in,
  modulefiles/module-cvs.in, modulefiles/modules.in, modulefiles/use.own.in,
  testsuite/modules.50-cmds/017-use-undo.exp, version.c,
  xref/ModuleCmd_Use.c.html, xref/cxref.function: * Added module-cvs
  modulefile for easy CVS/ftp access to the modules CVS repository. * Added
  README.perl describing Ron Isaacson's Env::Modulecmd perl module
  (Ron.Isaacson@morganstanley.com). * Added further tests for modulefile
  "module use dir_path" * Fixed bug of unloading a modulefile with a "module
  use dir_path"

  * cmdModule.c: Was forcing a "use" even when the "use" was embedded in
  modulefile, which was being unloaded.

  * version.c: Changed the version to 3.1.3a to note that this is not a
  release.

2001-07-09  rkowen <rkowen>

  * ChangeLog, INSTALL, INSTALL.RH7x, ModuleCmd_Use.c, cmdPath.c, cmdSetenv.c,
  configure, configure.in, doc/modulefile.4.in, etc/Makefile.in,
  etc/global/bashrc.in, etc/global/csh.cshrc.in, etc/global/csh.login.in,
  etc/global/csh.modules.in, etc/global/profile.in,
  etc/global/profile.modules.in, etc/skel/.kshenv.in, etc/skel/.profile.in,
  modulefiles/use.own.in, modulefiles/version.in,
  testsuite/modulefiles/use/.version, testsuite/modulefiles/use/1.0.in,
  testsuite/modulefiles/use/2.0.in, testsuite/modulefiles/use/2.1.in,
  testsuite/modulefiles/use/2.2.in, testsuite/modules.00-init/080-begenv.exp,
  testsuite/modules.10-use/030-use.exp,
  testsuite/modules.10-use/031-append.exp,
  testsuite/modules.10-use/070-unuse.exp,
  testsuite/modules.20-locate/040-alias.exp,
  testsuite/modules.20-locate/045-symvers.exp,
  testsuite/modules.20-locate/046-getsym.exp,
  testsuite/modules.20-locate/047-symerrs.exp,
  testsuite/modules.20-locate/048-symexec.exp,
  testsuite/modules.20-locate/050-locrc.exp,
  testsuite/modules.20-locate/060-rc.exp,
  testsuite/modules.20-locate/070-homerc.exp,
  testsuite/modules.30-userlvl/030-novice.exp,
  testsuite/modules.30-userlvl/035-nov.exp,
  testsuite/modules.30-userlvl/040-advanced.exp,
  testsuite/modules.30-userlvl/045-adv.exp,
  testsuite/modules.30-userlvl/050-expert.exp,
  testsuite/modules.30-userlvl/055-exp.exp,
  testsuite/modules.30-userlvl/090-undef.exp,
  testsuite/modules.35-trace/020-default.exp,
  testsuite/modules.35-trace/030-all-on.exp,
  testsuite/modules.35-trace/031-all-off.exp,
  testsuite/modules.35-trace/040-load-all.exp,
  testsuite/modules.35-trace/041-load-all.exp,
  testsuite/modules.35-trace/042-load-on.exp,
  testsuite/modules.35-trace/043-load-onoff.exp,
  testsuite/modules.35-trace/044-load-ovr.exp,
  testsuite/modules.35-trace/050-disp-onoff.exp,
  testsuite/modules.35-trace/060-dilo-onoff.exp,
  testsuite/modules.35-trace/070-colon.exp,
  testsuite/modules.50-cmds/010-init_ts.exp,
  testsuite/modules.50-cmds/015-use.exp,
  testsuite/modules.50-cmds/020-setenv.exp,
  testsuite/modules.50-cmds/025-setenv-undo.exp,
  testsuite/modules.50-cmds/030-unsetenv.exp,
  testsuite/modules.50-cmds/035-unsetenv-undo.exp,
  testsuite/modules.50-cmds/036-unsetenv-x.exp,
  testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.50-cmds/045-append-undo.exp,
  testsuite/modules.50-cmds/050-prepend.exp,
  testsuite/modules.50-cmds/055-prepend-undo.exp,
  testsuite/modules.50-cmds/060-remove.exp,
  testsuite/modules.50-cmds/065-remove-undo.exp,
  testsuite/modules.50-cmds/075-alias.exp,
  testsuite/modules.50-cmds/080-info-name.exp,
  testsuite/modules.50-cmds/081-info-user.exp,
  testsuite/modules.50-cmds/082-info-user-exp.exp,
  testsuite/modules.50-cmds/083-info-mode.exp,
  testsuite/modules.50-cmds/084-info-mode-exp.exp,
  testsuite/modules.50-cmds/085-info-flags.exp,
  testsuite/modules.50-cmds/086-info-shells.exp,
  testsuite/modules.50-cmds/087-info-shells-exp.exp,
  testsuite/modules.50-cmds/095-uname.exp,
  testsuite/modules.50-cmds/101-badfac.exp,
  testsuite/modules.50-cmds/110-verbose.exp,
  testsuite/modules.50-cmds/115-verbose-msg.exp,
  testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/121-prereq-module.exp,
  testsuite/modules.50-cmds/130-conflict-full.exp,
  testsuite/modules.50-cmds/131-conflict-module.exp,
  testsuite/modules.50-cmds/140-system.exp,
  testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.70-maint/020-update.exp,
  testsuite/modules.70-maint/050-whatis-load.exp,
  testsuite/modules.90-avail/040-wild.exp,
  testsuite/modules.95-version/010-init_ts.exp,
  testsuite/modules.95-version/020-load.exp,
  testsuite/modules.95-version/020-unload.exp,
  testsuite/modules.95-version/022-load2.exp,
  testsuite/modules.95-version/022-unload2.exp,
  testsuite/modules.95-version/040-xgetenv.exp,
  testsuite/modules.95-version/999-cleanup.exp, utility.c, version.c: * Added
  document file INSTALL.RH7x which explains how to set up an modules
  environment for all users through the system shell files.  Is specific to
  Linux/RedHat 7.x, but is of general applicability. * Added further tests for
  modulefile "module use dir_path" (found an unload bug that will be fixed
  before release) * Environment variable contents are now quoted to preserve
  any embedded environment variables. (Needed for versioning) * Added over 50
  tests specific to module versioning, and testing xgetenv. * Fixed the
  unsetenv on unload function, the feature added in 3.0.6-rko was supposed to
  set the env.var. to the optional third argument. This was to allow old
  env.var. values to be recovered by unraveling a stack set in an other
  env.var.  Added tests for this feature. This is used by the version
  modulefile. * Fixed and updated the version modulefile to allow stacked
  versions to be removed the stack. * Removed an annoying spurious stderr
  newline.

2001-06-22  rkowen <rkowen>

  * ModuleCmd_Help.c: Spurious fprintf(stderr,...) was adding anomalous blank
  lines to the tests.

2001-06-10  rkowen <rkowen>

  * Makefile.in, testsuite/modulefiles.other/README: Fixed the way a
  distribution tar ball is made.  It makes only one CVS connection instead of
  one per file.

2001-06-09  rkowen <rkowen>

  * Makefile.in: Added targets to aid sending the tarball to the ftp sites.

  * ChangeLog, Makefile.in, ModuleCmd_Avail.c, ModuleCmd_Display.c,
  ModuleCmd_Help.c, ModuleCmd_Init.c, ModuleCmd_Load.c, ModuleCmd_Switch.c,
  ModuleCmd_Use.c, ModuleCmd_Whatis.c, cmdAlias.c, cmdConflict.c, cmdInfo.c,
  cmdIsLoaded.c, cmdLog.c, cmdMisc.c, cmdModule.c, cmdPath.c, cmdSetenv.c,
  cmdTrace.c, cmdUlvl.c, cmdVerbose.c, cmdVersion.c, cmdWhatis.c,
  cmdXResource.c, doc/module.1.in, error.c, getopt.c, locate_module.c, main.c,
  modules.lsm.in, modules_def.h, testsuite/modules.10-use/030-use.exp,
  testsuite/modules.10-use/031-append.exp,
  testsuite/modules.10-use/070-unuse.exp, utility.c, version.c,
  xref/ModuleCmd_Avail.c.html, xref/ModuleCmd_Display.c.html,
  xref/ModuleCmd_Help.c.html, xref/ModuleCmd_Init.c.html,
  xref/ModuleCmd_Load.c.html, xref/ModuleCmd_Switch.c.html,
  xref/ModuleCmd_Use.c.html, xref/ModuleCmd_Whatis.c.html,
  xref/cmdAlias.c.html, xref/cmdConflict.c.html, xref/cmdInfo.c.html,
  xref/cmdIsLoaded.c.html, xref/cmdLog.c.html, xref/cmdMisc.c.html,
  xref/cmdModule.c.html, xref/cmdPath.c.html, xref/cmdSetenv.c.html,
  xref/cmdTrace.c.html, xref/cmdUlvl.c.html, xref/cmdVerbose.c.html,
  xref/cmdVersion.c.html, xref/cmdWhatis.c.html, xref/cmdXResource.c.html,
  xref/cxref.apdx.html, xref/cxref.function, xref/cxref.variable,
  xref/error.c.html, xref/init.c.html, xref/locate_module.c.html,
  xref/main.c.html, xref/utility.c.html: * Fixed the "module use --append"
  feature, and fixed the tests for "module use", "module use --append", and
  "module unuse". * Changed the global variable names (flags,current_module)
  to (g_flags, g_current_module) to identify their ubiquity in the module
  source.

2001-03-22  rminsk <rminsk>

  * init/python.in: Was not setting the environment variable MODULESHOME

  * ChangeLog: Comment added about mel support

  * configure: Added python

2001-02-15  rminsk <rminsk>

  * version.c: Retracted new version

  * version.c: Bumped version for mel addition

  * utility.c: Added mel (Maya Extension Language) support

2001-02-01  rminsk <rminsk>

  * Makefile.in: Removed other references to "-rko" in version numbers.

  * Makefile.in: Fixed tag rule to use the cvs module "module" instead of
  "module-3.1rko"

  * ChangeLog: Updated for 3.1.1 release.

  * configure.in: Added init/python

  * Makefile.in: Updated version number of 3.0 to 3.1.

  * version.c: Bumped up version number for new release

2001-01-16  rminsk <rminsk>

  * init/python.in: Removing blank lines

  * init/Makefile.in, init/python.in: Fixing typeo's

  * init/Makefile.in, init/python.in: Adding python init files.

  * utility.c: Fixing bug the the _LMFILES_ environment variable.  As the
  _LMFILES_ shrink in size the extra _LMFILES%03d_ were not being unset.  Made
  sure extra _LMFILES%03d_ are removed each time _LMFILES_ is set.  Added
  initial support for scheme (scm, guile).  Made output of ksh (bash, zsh)
  aliases recognize the escape charater ("\"). This was important to be able
  to escape "$".  Anytime an alias had a "$" in it a function was always
  output.  Fixed a bug in search of the LOADEDMODULES environment variable.
  Would not correctly find a module if only a partial module name was given.
  For example "maya/3.0" would be found but "maya" would not.  In the process
  of fixing this bug a possible memory corruption was also fixed.

  * init/csh.in: Removed variable histchar.  It was not being used.  Modified
  to store the current prompt and unset prompt while modules is running.  A
  bug in csh will cause and eval of an eval (eval `eval ...`) to output a
  prompt.  This cause the first eval to try to execute the prompt.

  * init.c: Fixing bug the the _LMFILES_ environment variable.  If the user is
  using csh and _LMFILES_ is large than LMSPLIT_SIZE it gets split into
  _LMFILES.%03d_. For modules to work correctly the split _LMFILES.%03d_ must
  be joined to make _LMFILES_.

2000-11-03  rk <rk>

  * xref/cmdModule.c.html: * Fixed the changed *interpter->result return value
  with Tcl8.3+ (patch due to Jens Hamisch). And some document changes.

  * ChangeLog, INSTALL, cmdModule.c: * Fixed the changed *interpter->result
  return value with Tcl8.3+ (patch due to Jens Hamisch). And some document
  changes.

2000-06-28  rk <rk>

  * ChangeLog, Makefile.in, ModuleCmd_Load.c, README, ccc.h.in,
  xref/ModuleCmd_Avail.c.html, xref/ModuleCmd_Clear.c.html,
  xref/ModuleCmd_Display.c.html, xref/ModuleCmd_Help.c.html,
  xref/ModuleCmd_Init.c.html, xref/ModuleCmd_List.c.html,
  xref/ModuleCmd_Load.c.html, xref/ModuleCmd_Purge.c.html,
  xref/ModuleCmd_Switch.c.html, xref/ModuleCmd_Update.c.html,
  xref/ModuleCmd_Use.c.html, xref/ModuleCmd_Whatis.c.html,
  xref/cmdAlias.c.html, xref/cmdConflict.c.html, xref/cmdInfo.c.html,
  xref/cmdIsLoaded.c.html, xref/cmdLog.c.html, xref/cmdMisc.c.html,
  xref/cmdModule.c.html, xref/cmdPath.c.html, xref/cmdSetenv.c.html,
  xref/cmdTrace.c.html, xref/cmdUlvl.c.html, xref/cmdUname.c.html,
  xref/cmdVerbose.c.html, xref/cmdVersion.c.html, xref/cmdWhatis.c.html,
  xref/cmdXResource.c.html, xref/error.c.html, xref/init.c.html,
  xref/locate_module.c.html, xref/main.c.html, xref/utility.c.html: * Removed
  warning message for unloading a module that's not loaded. * Added source
  code cross-referencing via cxref-1.5b(patched)

  * .cxref, Makefile.in, xref/ModuleCmd_Avail.c.html,
  xref/ModuleCmd_Clear.c.html, xref/ModuleCmd_Display.c.html,
  xref/ModuleCmd_Help.c.html, xref/ModuleCmd_Init.c.html,
  xref/ModuleCmd_List.c.html, xref/ModuleCmd_Load.c.html,
  xref/ModuleCmd_Purge.c.html, xref/ModuleCmd_Switch.c.html,
  xref/ModuleCmd_Update.c.html, xref/ModuleCmd_Use.c.html,
  xref/ModuleCmd_Whatis.c.html, xref/cmdAlias.c.html, xref/cmdConflict.c.html,
  xref/cmdInfo.c.html, xref/cmdIsLoaded.c.html, xref/cmdLog.c.html,
  xref/cmdMisc.c.html, xref/cmdModule.c.html, xref/cmdPath.c.html,
  xref/cmdSetenv.c.html, xref/cmdTrace.c.html, xref/cmdUlvl.c.html,
  xref/cmdUname.c.html, xref/cmdVerbose.c.html, xref/cmdVersion.c.html,
  xref/cmdWhatis.c.html, xref/cmdXResource.c.html, xref/cxref.apdx.html,
  xref/cxref.function, xref/cxref.html, xref/cxref.include,
  xref/cxref.typedef, xref/cxref.variable, xref/error.c.html,
  xref/getopt.c.html, xref/index.html, xref/init.c.html,
  xref/locate_module.c.html, xref/main.c.html, xref/utility.c.html,
  xref/version.c.html: Added cxref-1.5b(patched) generated HTML files showing
  the source code cross-referencing relations.

  * Makefile.in, configure, configure.in, version.c: Minor updates.

  * .cxref, .ftp, .spec.in, ChangeLog, INSTALL, LICENSE.GPL, MACHINES,
  Makefile.in, ModuleCmd_Avail.c, ModuleCmd_Clear.c, ModuleCmd_Display.c,
  ModuleCmd_Help.c, ModuleCmd_Init.c, ModuleCmd_List.c, ModuleCmd_Load.c,
  ModuleCmd_Purge.c, ModuleCmd_Switch.c, ModuleCmd_Update.c, ModuleCmd_Use.c,
  ModuleCmd_Whatis.c, PROBLEMS, README, RKOConfigure, TODO, acconfig.h,
  aclocal.m4, ccc.h.in, cmdAlias.c, cmdConflict.c, cmdInfo.c, cmdIsLoaded.c,
  cmdLog.c, cmdMisc.c, cmdModule.c, cmdPath.c, cmdSetenv.c, cmdTrace.c,
  cmdUlvl.c, cmdUname.c, cmdVerbose.c, cmdVersion.c, cmdWhatis.c,
  cmdXResource.c, config.h.in, configure, configure.in, doc/Makefile.in,
  doc/Modules-Paper.doc, doc/module.1.in, doc/modulefile.4.in, error.c,
  etc/Makefile.in, etc/README, etc/add.modules.in, etc/global/csh.login.in,
  etc/global/csh.modules.in, etc/global/profile.in,
  etc/global/profile.modules.in, etc/mkroot.in, etc/skel/.cshrc.in,
  etc/skel/.kshenv.in, etc/skel/.login.in, etc/skel/.profile.in,
  ext/Makefile.in, ext/README, ext/add.ext.in, ext/common/.cshrc.in,
  ext/common/.kshenv.in, ext/common/.login.in, ext/common/.profile.in,
  ext/mkroot.in, ext/skel/.cshrc.ext, ext/skel/.kshenv.ext,
  ext/skel/.login.ext, ext/skel/.modules, ext/skel/.profile.ext, getopt.c,
  getopt.h, init.c, init/.modulespath.in, init/Makefile.in, init/bash.in,
  init/csh.in, init/ksh.in, init/perl.in, init/sh.in, init/tcsh.in,
  init/zsh.in, install.sh, locate_module.c, main.c, modulefiles/Makefile.in,
  modulefiles/dot.in, modulefiles/module-info.in, modulefiles/modules.in,
  modulefiles/null.in, modulefiles/use.own.in, modulefiles/version.in,
  modules.lsm.in, modules_def.h, probetcl, stripmkf,
  testsuite/config/unix.exp, testsuite/etc/apropos.cache, testsuite/etc/bad,
  testsuite/etc/empty, testsuite/etc/rc, testsuite/home/.modulerc,
  testsuite/modulefiles/.moduleavailcache,
  testsuite/modulefiles/.moduleavailcache.202,
  testsuite/modulefiles/.moduleavailcachedir,
  testsuite/modulefiles/.moduleavailcachedir.202,
  testsuite/modulefiles/README, testsuite/modulefiles/alias/2.0,
  testsuite/modulefiles/append/2.0, testsuite/modulefiles/conflict/full,
  testsuite/modulefiles/conflict/module, testsuite/modulefiles/empty/1.0,
  testsuite/modulefiles/help/2.0, testsuite/modulefiles/info/mode1,
  testsuite/modulefiles/info/mode2, testsuite/modulefiles/info/mode3,
  testsuite/modulefiles/info/mode4, testsuite/modulefiles/info/mode5,
  testsuite/modulefiles/info/mode6, testsuite/modulefiles/info/name,
  testsuite/modulefiles/info/shells, testsuite/modulefiles/info/shellsexp,
  testsuite/modulefiles/info/user, testsuite/modulefiles/info/userexp,
  testsuite/modulefiles/loc_dv1/1.0, testsuite/modulefiles/loc_dv1/2.0,
  testsuite/modulefiles/loc_dv1/3.0, testsuite/modulefiles/loc_dv2/.version,
  testsuite/modulefiles/loc_dv2/1.0, testsuite/modulefiles/loc_dv2/2.0,
  testsuite/modulefiles/loc_dv3/.version, testsuite/modulefiles/loc_dv3/1.0,
  testsuite/modulefiles/loc_dv3/2.0, testsuite/modulefiles/loc_dv4/.version,
  testsuite/modulefiles/loc_dv4/1.0, testsuite/modulefiles/loc_dv4/2.0,
  testsuite/modulefiles/loc_dv6/1.0, testsuite/modulefiles/loc_dv6/2.0/1.0,
  testsuite/modulefiles/loc_dv7/.version, testsuite/modulefiles/loc_dv7/1.0,
  testsuite/modulefiles/loc_dv7/2.0/1.0, testsuite/modulefiles/loc_dv7/3.0,
  testsuite/modulefiles/loc_dv8/.version, testsuite/modulefiles/loc_dv8/1.0,
  testsuite/modulefiles/loc_dv8/2.0, testsuite/modulefiles/loc_fq/1.0,
  testsuite/modulefiles/loc_fq/2.0, testsuite/modulefiles/loc_rc1/.modulerc,
  testsuite/modulefiles/loc_rc1/1.0, testsuite/modulefiles/loc_rc1/2.0,
  testsuite/modulefiles/loc_rc2/.modulerc, testsuite/modulefiles/loc_rc2/1.0,
  testsuite/modulefiles/loc_rc2/2.0, testsuite/modulefiles/loc_rc3/.modulerc,
  testsuite/modulefiles/loc_rc3/1.0, testsuite/modulefiles/loc_rc3/2.0,
  testsuite/modulefiles/loc_rc3/3.0, testsuite/modulefiles/loc_rc4/.modulerc,
  testsuite/modulefiles/loc_rc4/.version, testsuite/modulefiles/loc_rc4/1.0,
  testsuite/modulefiles/loc_rc4/2.0, testsuite/modulefiles/loc_rc4/3.0,
  testsuite/modulefiles/loc_rc5/.modulerc, testsuite/modulefiles/loc_rc5/1.0,
  testsuite/modulefiles/loc_rc5/2.0, testsuite/modulefiles/loc_sym/1.0,
  testsuite/modulefiles/loc_sym/alias1, testsuite/modulefiles/loc_sym/alias2,
  testsuite/modulefiles/loc_sym/alias3, testsuite/modulefiles/loc_sym/alias4,
  testsuite/modulefiles/loc_sym/alias5, testsuite/modulefiles/loc_sym/alias6,
  testsuite/modulefiles/loc_sym/exec1, testsuite/modulefiles/loc_sym/exec2,
  testsuite/modulefiles/loc_sym/getvers1,
  testsuite/modulefiles/loc_sym/getvers2,
  testsuite/modulefiles/loc_sym/getvers3,
  testsuite/modulefiles/loc_sym/getvers4,
  testsuite/modulefiles/loc_sym/getvers5,
  testsuite/modulefiles/loc_sym/getvers6,
  testsuite/modulefiles/loc_sym/getvers7,
  testsuite/modulefiles/loc_sym/getvers8,
  testsuite/modulefiles/loc_sym/versinf1,
  testsuite/modulefiles/loc_sym/versinf2,
  testsuite/modulefiles/loc_sym/versinf3,
  testsuite/modulefiles/loc_sym/versinf4,
  testsuite/modulefiles/loc_sym/versinf5,
  testsuite/modulefiles/loc_sym/versinf6,
  testsuite/modulefiles/loc_sym/versinf7,
  testsuite/modulefiles/loc_sym/version1,
  testsuite/modulefiles/loc_sym/version10,
  testsuite/modulefiles/loc_sym/version11,
  testsuite/modulefiles/loc_sym/version12,
  testsuite/modulefiles/loc_sym/version13,
  testsuite/modulefiles/loc_sym/version14,
  testsuite/modulefiles/loc_sym/version2,
  testsuite/modulefiles/loc_sym/version3,
  testsuite/modulefiles/loc_sym/version4,
  testsuite/modulefiles/loc_sym/version5,
  testsuite/modulefiles/loc_sym/version6,
  testsuite/modulefiles/loc_sym/version7,
  testsuite/modulefiles/loc_sym/version8,
  testsuite/modulefiles/loc_sym/version9, testsuite/modulefiles/log/badfac,
  testsuite/modulefiles/log/err_both_1, testsuite/modulefiles/log/err_both_2,
  testsuite/modulefiles/log/err_file, testsuite/modulefiles/log/err_syslog,
  testsuite/modulefiles/module/2.0, testsuite/modulefiles/prepend/2.0,
  testsuite/modulefiles/prereq/full, testsuite/modulefiles/prereq/module,
  testsuite/modulefiles/remove/2.0, testsuite/modulefiles/system/2.0,
  testsuite/modulefiles/trace/all_off, testsuite/modulefiles/trace/all_on,
  testsuite/modulefiles/trace/colon, testsuite/modulefiles/trace/dilo_onoff,
  testsuite/modulefiles/trace/disp_onoff,
  testsuite/modulefiles/trace/disptrac, testsuite/modulefiles/trace/load_all1,
  testsuite/modulefiles/trace/load_all2, testsuite/modulefiles/trace/load_on,
  testsuite/modulefiles/trace/load_onoff,
  testsuite/modulefiles/trace/load_ovr, testsuite/modulefiles/uname/domain,
  testsuite/modulefiles/uname/machine, testsuite/modulefiles/uname/nodename,
  testsuite/modulefiles/uname/release, testsuite/modulefiles/uname/sysname,
  testsuite/modulefiles/uname/version, testsuite/modulefiles/unsetenv/1.0,
  testsuite/modulefiles/user/adv, testsuite/modulefiles/user/advanced,
  testsuite/modulefiles/user/exp, testsuite/modulefiles/user/expert,
  testsuite/modulefiles/user/nov, testsuite/modulefiles/user/novice,
  testsuite/modulefiles/user/undef, testsuite/modulefiles/verbose/msg,
  testsuite/modulefiles/verbose/off, testsuite/modulefiles/verbose/on,
  testsuite/modulefiles/verbose/undef, testsuite/modulefiles/whatis/lines,
  testsuite/modulefiles/whatis/multiple, testsuite/modulefiles/whatis/none,
  testsuite/modulefiles/whatis/single, testsuite/modulefiles/whatis/string,
  testsuite/modules.00-init/005-init_ts.exp,
  testsuite/modules.00-init/006-procs.exp,
  testsuite/modules.00-init/010-environ.exp,
  testsuite/modules.00-init/015-version.exp.in,
  testsuite/modules.00-init/030-shells.exp,
  testsuite/modules.00-init/050-modpath.exp,
  testsuite/modules.00-init/080-begenv.exp,
  testsuite/modules.00-init/090-switches.exp,
  testsuite/modules.10-use/010-init_ts.exp,
  testsuite/modules.10-use/030-use.exp,
  testsuite/modules.10-use/031-append.exp,
  testsuite/modules.10-use/070-unuse.exp,
  testsuite/modules.20-locate/010-init_ts.exp,
  testsuite/modules.20-locate/020-fqual.exp,
  testsuite/modules.20-locate/030-defvers.exp,
  testsuite/modules.20-locate/040-alias.exp,
  testsuite/modules.20-locate/045-symvers.exp,
  testsuite/modules.20-locate/046-getsym.exp,
  testsuite/modules.20-locate/047-symerrs.exp,
  testsuite/modules.20-locate/048-symexec.exp,
  testsuite/modules.20-locate/050-locrc.exp,
  testsuite/modules.20-locate/055-locrcerrs.exp,
  testsuite/modules.20-locate/060-rc.exp,
  testsuite/modules.20-locate/065-rcerrs.exp,
  testsuite/modules.20-locate/070-homerc.exp,
  testsuite/modules.20-locate/095-cleanup.exp,
  testsuite/modules.30-userlvl/010-init_ts.exp,
  testsuite/modules.30-userlvl/030-novice.exp,
  testsuite/modules.30-userlvl/035-nov.exp,
  testsuite/modules.30-userlvl/040-advanced.exp,
  testsuite/modules.30-userlvl/045-adv.exp,
  testsuite/modules.30-userlvl/050-expert.exp,
  testsuite/modules.30-userlvl/055-exp.exp,
  testsuite/modules.30-userlvl/090-undef.exp,
  testsuite/modules.35-trace/010-init_ts.exp,
  testsuite/modules.35-trace/020-default.exp,
  testsuite/modules.35-trace/030-all-on.exp,
  testsuite/modules.35-trace/031-all-off.exp,
  testsuite/modules.35-trace/040-load-all.exp,
  testsuite/modules.35-trace/041-load-all.exp,
  testsuite/modules.35-trace/042-load-on.exp,
  testsuite/modules.35-trace/043-load-onoff.exp,
  testsuite/modules.35-trace/044-load-ovr.exp,
  testsuite/modules.35-trace/050-disp-onoff.exp,
  testsuite/modules.35-trace/060-dilo-onoff.exp,
  testsuite/modules.35-trace/070-colon.exp,
  testsuite/modules.35-trace/095-cleanup.exp,
  testsuite/modules.50-cmds/010-init_ts.exp,
  testsuite/modules.50-cmds/020-setenv.exp,
  testsuite/modules.50-cmds/025-setenv-undo.exp,
  testsuite/modules.50-cmds/030-unsetenv.exp,
  testsuite/modules.50-cmds/035-unsetenv-undo.exp,
  testsuite/modules.50-cmds/040-append.exp,
  testsuite/modules.50-cmds/045-append-undo.exp,
  testsuite/modules.50-cmds/050-prepend.exp,
  testsuite/modules.50-cmds/055-prepend-undo.exp,
  testsuite/modules.50-cmds/060-remove.exp,
  testsuite/modules.50-cmds/065-remove-undo.exp,
  testsuite/modules.50-cmds/070-alias-proc.exp,
  testsuite/modules.50-cmds/075-alias.exp,
  testsuite/modules.50-cmds/077-alias-undo.exp,
  testsuite/modules.50-cmds/080-info-name.exp,
  testsuite/modules.50-cmds/081-info-user.exp,
  testsuite/modules.50-cmds/082-info-user-exp.exp,
  testsuite/modules.50-cmds/083-info-mode.exp,
  testsuite/modules.50-cmds/084-info-mode-exp.exp,
  testsuite/modules.50-cmds/085-info-flags.exp,
  testsuite/modules.50-cmds/086-info-shells.exp,
  testsuite/modules.50-cmds/087-info-shells-exp.exp,
  testsuite/modules.50-cmds/090-uname-proc.exp,
  testsuite/modules.50-cmds/095-uname.exp,
  testsuite/modules.50-cmds/099-uname-cleanup.exp,
  testsuite/modules.50-cmds/100-loglevel.exp.in,
  testsuite/modules.50-cmds/101-badfac.exp,
  testsuite/modules.50-cmds/110-verbose.exp,
  testsuite/modules.50-cmds/115-verbose-msg.exp,
  testsuite/modules.50-cmds/120-prereq-full.exp,
  testsuite/modules.50-cmds/121-prereq-module.exp,
  testsuite/modules.50-cmds/130-conflict-full.exp,
  testsuite/modules.50-cmds/131-conflict-module.exp,
  testsuite/modules.50-cmds/140-system.exp,
  testsuite/modules.50-cmds/150-module.exp,
  testsuite/modules.70-maint/010-init_ts.exp,
  testsuite/modules.70-maint/020-update.exp,
  testsuite/modules.70-maint/030-purge.exp,
  testsuite/modules.70-maint/040-list.exp,
  testsuite/modules.70-maint/043-listno.exp,
  testsuite/modules.70-maint/045-listlong.exp,
  testsuite/modules.70-maint/048-listlongno.exp,
  testsuite/modules.70-maint/050-whatis-load.exp,
  testsuite/modules.70-maint/055-whatis.exp,
  testsuite/modules.70-maint/060-apropos.exp,
  testsuite/modules.70-maint/070-display.exp,
  testsuite/modules.70-maint/080-help.exp,
  testsuite/modules.70-maint/095-cleanup.exp,
  testsuite/modules.90-avail/010-init_ts.exp,
  testsuite/modules.90-avail/020-single.exp,
  testsuite/modules.90-avail/030-multiple.exp,
  testsuite/modules.90-avail/040-wild.exp,
  testsuite/modules.90-avail/050-long.exp,
  testsuite/modules.90-avail/060-empty.exp, testsuite/not_installed,
  testsuite/systest, utility.c, version.c: modules is a shell tool for
  setting-up the user environment on the fly, as it were.  It's a powerful
  mechanism for dynamically changing environment variables, aliases, X11
  resources, etc. It uses an embedded Tcl intrepretor, with a few extensions.
  Therefore, it has a well defined language syntax. Version 3.1 is GPL, and
  includes many improvements over the 3.0beta.

1998-12-11  rk <rk>

  * testsuite/modulefiles/setenv/1.0: modules is a shell tool for setting-up
  the user environment on the fly, as it were.  It's a powerful mechanism for
  dynamically changing environment variables, aliases, X11 resources, etc. It
  uses an embedded Tcl intrepretor, with a few extensions.  Therefore, it has
  a well defined language syntax. Version 3.1 is GPL, and includes many
  improvements over the 3.0beta.

