PHP 7.4.33
Preview: ChangeLog Size: 1.09 MB
/home/godevadmin/www/upload_images/home/000~ROOT~000/usr/share/doc/environment-modules/ChangeLog

2020-07-30  Xavier Delaruelle <[email protected]>

  * NEWS.rst, contrib/rpm/environment-modules.spec.in, version.inc.in: 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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-06-06  Xavier Delaruelle <[email protected]>

  * script/mpub, script/mrel: script: fix distclean err to ignore in mrel/mpub

  * script/mrel: script: add cleaning of prev built rpm in 'mrel'

2020-06-02  Xavier Delaruelle <[email protected]>

  * doc/source/modulefile.rst: doc: reorder module-info sub-cmd desc. in
  modulefile(4)

2020-07-07  Xavier Delaruelle <[email protected]>

  * testsuite/install.00-init/060-quar.exp: ts: fix install quar test when
  LD_PRELOAD is set

2020-07-06  Xavier Delaruelle <[email protected]>

  * .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-05-11  Xavier Delaruelle <[email protected]>

  * modulecmd.tcl.in: Fix double err counter increase when mod eval breaks

2020-04-19  Xavier Delaruelle <[email protected]>

  * 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/fish_completion: init: fix list/source sub-cmd in fish completion
  list and source sub-commands do not need available modulefiles as argument.

2020-06-01  Xavier Delaruelle <[email protected]>

  * NEWS.rst, contrib/rpm/environment-modules.spec.in, version.inc.in: Release
  of version 4.5.1

2020-05-27  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * .travis.yml: travis: update one OSX case to use latest img version

2020-05-10  Xavier Delaruelle <[email protected]>

  * Makefile: install: improve test deps dl retry mechanism

2020-05-09  Xavier Delaruelle <[email protected]>

  * .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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * .gitattributes: install: remove project-specific tools from git export

2020-04-12  Xavier Delaruelle <[email protected]>

  * .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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * .../design/default-latest-version-specifiers.rst: doc: refine
  default/latest vers spec design

2020-03-31  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * init/bash_completion.in: bash_completion: fix ml no space between -modules

2020-03-29  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * doc/source/design/default-latest-version-specifiers.rst: doc: update
  deflatest design for default/latest modfile

2020-03-21  Xavier Delaruelle <[email protected]>

  * NEWS.rst: doc: desc. ml bash comp/fish stderr fix/space fixes in NEWS

2020-03-19  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * init/bash_completion.in: init: define ml completion only if ml command
  defined

2020-03-12  Adrien Cotte <[email protected]>

  * init/bash_completion.in: init: add 'ml' command support in bash completion

2020-03-11  Xavier Delaruelle <[email protected]>

  * NEWS.rst: doc: desc. recent changes in NEWS

2020-03-10  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * .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 <[email protected]>

  * testsuite/modules.70-maint/120-autoinit.exp: ts: tclsh is reported
  tclshX.Y on FreeBSD

2020-03-05  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * NEWS.rst: doc: clarify next version if not released yet

2020-03-04  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * .../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 <[email protected]>

  * .../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 <[email protected]>

  * .../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 <[email protected]>

  * .../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 <[email protected]>

  * script/createmodule.sh: script: fix path deduplication in createmodule.sh
  Fixes #316

2020-02-17  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * script/createmodule.py.in: script: fix createmodule.py for python3  Fixes
  #315

2020-02-17  Xavier Delaruelle <[email protected]>

  * .gitignore: git: ignore dir used for local tests

2020-02-15  Xavier Delaruelle <[email protected]>

  * testsuite/install.00-init/040-subshell.exp: ts: adapt err msg for fish 3.1

2020-02-11  Xavier Delaruelle <[email protected]>

  * configure: install: pass --with-python option to compat configure

2020-02-10  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * .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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * .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 <[email protected]>

  * script/add.modules.in: Fix typo in add.modules.in

2020-02-03  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * NEWS.rst: doc: desc. git archive build and createmodule script fixes in
  NEWS

2020-02-01  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * INSTALL.rst: doc: need more tools to install from a git archive export

2020-01-29  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * .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 <[email protected]>

  * MIGRATING.rst, NEWS.rst: doc: desc. Improved Windows support in
  NEWS/MIGRATING

2020-01-25  Xavier Delaruelle <[email protected]>

  * README.md: doc: add ref to ml(1) man page in README

2020-01-20  Xavier Delaruelle <[email protected]>

  * .appveyor.yml: appveyor: add native windows installation test case

2020-01-24  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * doc/source/FAQ.rst, doc/source/index.rst: doc: reorganize documentation
  index

2020-01-17  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * .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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * modulecmd.tcl.in: Enable JSON output only on supported sub-cmd

2019-12-13  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * MIGRATING.rst, NEWS.rst: doc: desc ml in NEWS/MIGRATING

2019-12-01  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * modulecmd.tcl.in: Add ml procedure

2019-11-27  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * .../design/default-latest-version-specifiers.rst: doc: add
  default-latest-version-specifiers design notes

2020-01-09  Xavier Delaruelle <[email protected]>

  * NEWS.rst: doc: desc. doc improvements in NEWS

2020-01-08  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * doc/source/module.rst: doc: desc. cmd line switches version addition in
  module.1

2020-01-08  Colin Marquardt <[email protected]>

  * doc/source/module.rst, doc/source/modulefile.rst: doc: markup code with
  double backticks in man pages

2020-01-07  Xavier Delaruelle <[email protected]>

  * doc/source/module.rst, doc/source/modulefile.rst: doc: fix missing ref
  link in or between man pages

2020-01-07  Colin Marquardt <[email protected]>

  * 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 <[email protected]>

  * doc/source/conf.py: doc: add sphinx directives/roles for sub-cmd and
  modulefile cmd

2020-01-06  Xavier Delaruelle <[email protected]>

  * doc/source/conf.py, doc/source/module.rst: doc: markup autogen files with
  :file: in man pages

2020-01-06  Colin Marquardt <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * .cirrus.yml: cirrus: update python requirement on FreeBSD test env

2020-01-03  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * .travis.yml: travis: no more need for md5sha1sum pkg on OSX  md5sum is now
  provided by coreutils

2019-12-17  Xavier Delaruelle <[email protected]>

  * .../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 <[email protected]>

  * 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 <[email protected]>

  * .travis.yml: travis: explicitly install wget on osx to fix libssl dep
  issue

2019-11-27  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * .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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version
  4.4.0

2019-11-16  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * MIGRATING.rst: doc: desc. advanced_version_spec in MIGRATING

2019-11-13  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * .../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 <[email protected]>

  * 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 <[email protected]>

  * .../272-adv_version_spec-range.exp: ts: vers range spec select one mod ctx
  tests

2019-11-09  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * testsuite/modulefiles.2/ICASE3/1.1, testsuite/modulefiles.2/ICASE3/VERS.1,
  testsuite/modulefiles.2/ICASE3/vers.1, testsuite/modulefiles.2/[email protected],
  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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * testsuite/modulefiles.2/advvers/deep/1/1.2,
  testsuite/modulefiles.2/[email protected], 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * .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 <[email protected]>

  * .../design/advanced-module-version-specifiers.rst: doc: add
  advanced-module-version-specifiers design spec

2019-11-14  Xavier Delaruelle <[email protected]>

  * MIGRATING.rst, NEWS.rst: doc: desc extended_default in NEWS/MIGRATING

2019-11-13  Xavier Delaruelle <[email protected]>

  * NEWS.rst: doc: mention module-info-name-return-basename recipe add in NEWS

2019-09-29  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * modulecmd.tcl.in: Apply extended_default to compatibility check context

2019-09-27  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * doc/source/design/extended-default.rst: doc: refine extended_default
  design

2019-09-23  Xavier Delaruelle <[email protected]>

  * modulecmd.tcl.in: Apply extended_default to single module selection
  context

2019-09-22  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * NEWS.rst: doc: add in NEWS issue ref and contrib. name for icase feature

2019-09-22  Xavier Delaruelle <[email protected]>

  * testsuite/modules.70-maint/250-nan.exp: ts: ensure icase is disabled for
  70/250 tests

2019-09-11  Xavier Delaruelle <[email protected]>

  * doc/source/design/insensitive-case.rst: doc: desc corner cases in icase
  design

2019-09-10  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * MIGRATING.rst, NEWS.rst: doc: desc icase in NEWS/MIGRATING

2019-05-22  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * MIGRATING.rst, NEWS.rst: doc: desc. conf opt internal rework in
  NEWS/MIGRATING

2019-08-04  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * modulecmd.tcl.in: Migrate 'wa_277' cfg option retrieval to getConf

2019-08-03  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * .../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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * .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 <[email protected]>

  * 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 <[email protected]>

  * .../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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * doc/source/modulefile.rst: doc: attempt to clarify eval mode in modulefile
  man  Fixes #289

2019-08-17  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * lib/envmodules.c: lib: directly return res of Envmodules_Init last op

2019-08-05  Felix Neumärker <[email protected]>

  * lib/Makefile.in: install: fix typo on CFLAGS definition in lib/Makefile
  Fixes #287.

2019-08-05  Xavier Delaruelle <[email protected]>

  * .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 <[email protected]>

  * 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 <[email protected]>

  * .gitignore, Makefile, contrib/mb.in: contrib: add 'mb' script to bench
  modules versions

2019-07-26  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * testsuite/modules.70-maint/230-verbosity.exp: ts: add tests for verbosity
  cfg

2019-07-22  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * .travis.yml: travis: fix opensuse/leap docker container install

2019-07-06  Xavier Delaruelle <[email protected]>

  * .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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * .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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * .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 <[email protected]>

  * 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 <[email protected]>

  * MIGRATING.rst, NEWS.rst: doc: desc implicit_default in NEWS/MIGRATING

2019-06-01  Xavier Delaruelle <[email protected]>

  * .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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * .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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * NEWS.rst: doc: desc fix for #270 in NEWS

2019-05-22  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * MIGRATING.rst, NEWS.rst: doc: desc config cmd in NEWS/MIGRATING

2019-05-19  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * doc/source/module.rst: doc: desc config cmd in man module.1

2019-05-20  Xavier Delaruelle <[email protected]>

  * modulecmd.tcl.in: Reword configuration 'key' into configuration 'option'

2019-05-18  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * .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 <[email protected]>

  * 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 <[email protected]>

  * modulecmd.tcl.in, testsuite/modules.00-init/140-color.exp: Fix block
  report line split when output color

2019-01-06  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * .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 <[email protected]>

  * .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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * doc/source/diff_v3_v4.rst: doc: desc color mode in diff_v3_v4

2019-01-08  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * .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 <[email protected]>

  * doc/source/diff_v3_v4.rst: doc: desc avail in depth mode in diff_v3_v4

2018-12-26  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * .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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * modulecmd.tcl.in: Make all findModules proc args mandatory

  * modulecmd.tcl.in: Make all listModules proc args mandatory

2018-12-10  Xavier Delaruelle <[email protected]>

  * MIGRATING.rst, NEWS.rst, doc/source/modulefile.rst: doc: desc Modulepath
  rc file in man/NEWS/MIGRATING

2018-12-09  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * INSTALL.rst: doc: refer to Modules Tcl extension lib in INSTALL

2018-12-04  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * .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 <[email protected]>

  * Makefile: install: improve Makefile install/test target prereqs spec

2018-11-29  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * contrib/rpm/environment-modules.spec.in: rpm: install modulefile vim
  syntax addons

2019-04-29  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * modulecmd.tcl.in: Refactor cmdModule{Load,Unload} error catch code

2019-04-04  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * testsuite/modules.70-maint/040-list.exp: ts: add specific term width tests
  for list subcommand

2019-04-15  Jesper Dahlberg <[email protected]>

  * 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 <[email protected]>

  * .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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * .gitattributes, .gitignore, Makefile, doc/Makefile: install: fix
  CONTRIBUTING guide build and install

2019-03-21  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * Makefile: install: fix md5sum passed argument  To perform correctly on OS
  X.

2019-03-18  Xavier Delaruelle <[email protected]>

  * .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 <[email protected]>

  * .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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * CONTRIBUTING.rst: Adding emacs settings useful for adhering to coding
  conventions  Fixes #233

2019-03-07  Xavier Delaruelle <[email protected]>

  * .cirrus.yml: cirrus: fix custom clone script for pull request

2019-03-02  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * doc/example/modulefiles-in-git/modulefiles/localmodules: doc: mention
  author of modulefiles-in-git examples

2019-02-24  Scott Johnson <[email protected]>

  * .../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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * testsuite/modules.50-cmds/375-order.exp: ts: clear unneeded comment in
  50/375-order

2019-02-17  Xavier Delaruelle <[email protected]>

  * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version
  4.2.2

2019-02-08  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * .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 <[email protected]>

  * MIGRATING.rst: doc: up MIGRATING for 'eval then check if conflict'

2019-01-18  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * README.md: doc: add repology packaging status badge in README

2019-01-12  Xavier Delaruelle <[email protected]>

  * doc/source/conf.py, modulecmd.tcl.in: New year (2019) copyright mention
  update

2019-01-11  Xavier Delaruelle <[email protected]>

  * .travis.yml: travis: fix OSX brew install  Ensure homebrew is up-to-date
  to avoid consistency issue

2018-12-24  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * CONTRIBUTING.rst, doc/source/CONTRIBUTING.rst, doc/source/index.rst: doc:
  add CONTRIBUTING guide

2018-11-19  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version
  4.2.1

2018-11-10  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * contrib/mt: contrib: select between files at same ts num in 'mt'

2018-11-01  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * .../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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * .../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 <[email protected]>

  * MIGRATING.rst: doc: desc. module load/unload consistency in MIGRATING

2018-09-22  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * .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 <[email protected]>

  * .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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * README.md: doc: fix cea-hpc/modules appveyor weblink

2018-08-21  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * .../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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * .appveyor.yml: Introduce AppVeyor config file for Windows CI

  * configure: install: look for 'make' on MSYS2

2018-08-02  Xavier Delaruelle <[email protected]>

  * .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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * testsuite/modulefiles.deps/mv, testsuite/modules.50-cmds/375-deps6.exp:
  ts: warning when --force used in modulefile

2018-07-31  Colin Marquardt <[email protected]>

  * modulecmd.tcl.in: Ignore dirs .SYNC/ (DesignSync) and .sos/ (SOS).

2018-07-28  Colin Marquardt <[email protected]>

  * doc/source/FAQ.rst: Fix small typo.

2018-07-20  Xavier Delaruelle <[email protected]>

  * MIGRATING.rst: doc: desc. conflict& prereq consistency/auto/force in
  MIGRATING

2018-07-19  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * doc/source/module.rst, doc/source/modulefile.rst: doc: desc. --force in
  module.1

2018-07-17  Xavier Delaruelle <[email protected]>

  * doc/source/module.rst, doc/source/modulefile.rst: doc: desc.
  --auto/--no-auto/MODULES_AUTO_HANDLING in module.1

2018-07-16  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * testsuite/modules.61-coll/030-save.exp: ts: check saving collection when
  constraint not satisfied

2018-07-11  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * doc/source/module.rst: doc: desc. MODULES_LM{CONFLICT,NOTUASKED,PREREQ} in
  module.1

2018-06-25  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * doc/source/modulefile.rst: doc: state in modulefile(4) getenv should be
  pref. over ::env

2018-06-30  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version
  4.1.3

2018-06-17  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * doc/source/diff_v3_v4.rst: doc: env var definition during a whatis mode
  eval

2018-05-24  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * modulecmd.tcl.in, testsuite/modules.70-maint/080-help.exp: Automatically
  prefix debug msgs by calling proc name

2018-03-28  Xavier Delaruelle <[email protected]>

  * modulecmd.tcl.in: Harmonize/reduce execute-module{rc,file} debug msg

2018-04-17  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * modulecmd.tcl.in: Fix module func parameter expansion on R  To correctly
  handle parameter containing whitespace character.

2018-03-20  Xavier Delaruelle <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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 <[email protected]>

  * 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" suf
Showing 512.00 KB of 1.09 MB. Use Edit/Download for full content.

Directory Contents

Dirs: 0 × Files: 7

Name Size Perms Modified Actions
1.09 MB lrw-r--r-- 2020-07-30 12:16:08
Edit Download
4.35 KB lrw-r--r-- 2023-10-14 18:46:13
Edit Download
24.83 KB lrw-r--r-- 2020-07-30 12:16:18
Edit Download
7.40 KB lrw-r--r-- 2020-07-30 12:13:34
Edit Download
62.61 KB lrw-r--r-- 2020-07-30 12:16:16
Edit Download
98.58 KB lrw-r--r-- 2020-07-30 12:16:16
Edit Download
5.13 KB lrw-r--r-- 2023-10-14 18:46:12
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).