Lmod 8.7+
   (8.7.1)  * Updates on 5/3 presentation.
   (8.7.2)  * Print message when unloading an unknown module (but not in a purge or dependent module)
   (8.7.3)  * Report warning when an MODULEPATH directory has too many non-modulefiles
            * A .version or .modulerc that has non-zero file length and doesn't start
              with "#%Module" is ignored.
	    * Report an Infinite loop error if loading the same modulefile 500 times.
	    * Add note to 095_tcl2lua.tcl about the whole TCL modulefile being evaluated by TCL.
	      Note also that this is not a SOURCE-to-SOURCE translation from TCL to Lua.
	    * Cannot use local with KSH
	    * Only add to mpathMapT when mpath_old ~= mpath_new in l_processNewModulePath(path).
   (8.7.4)  * Issue #578: Dynamic Spider Cache supported. 
            * Change Regular files counter to ignore files that start with "." when counting non-modulefiles in
              src/DirTree.lua
   (8.7.5)  * Issue #583: Using userName instead of sn when refreshing.
            * Issue #580: Add check for valid env. names for family(), setenv() etc.
            * Issue #580: Add check for valid alias and shell function names.
   (8.7.6)  * Change the way GIT_VERSION is found when installing Lmod
	    * Issue #584: Modify tcl2lua.tcl to reset the changes made to the environment when using
	      setenv and pushenv.
	    * Issue #587: Fix bug created with #580 namely that env vars can start with "_"
	    * Recalculate LMOD_SHELL_PGRM in bash.in to make sure that the Lmod shell matches the current
	      shell
   (8.7.7)  * Add option --miniConfig to report configuration differences from default.
            * Setting LMOD_SYSTEM_DEFAULT_MODULES to __NO_SYSTEM_DEFAULT_MODULES__ will allow
	      module reset to purge and reset $MODULEPATH to the system one.
	    * Make LMOD_SYSTEM_DEFAULT_MODULES a cosmic variable.
   (8.7.8)  * Add mcp:mustLoad() in cmdfuncs.lua: Unload(...).  Must catch case where
              reloading a replacement module depend on a module which is not there
              (See comments in test rt/depends_on/depends_on.tdesc about oneapi and impi)
            * Issue #593: In DirTree.lua l_versionFile(), Now only evaluate the highest priority
              entry in defaultA, instead of all.  This avoids the issue where there is a .modulerc.lua
              which works and a .modulerc or .version file which has syntax errors.
   (8.7.9)  * Correctly generate Version.lua file when installing from a tar ball.
   (8.7.10) * Issue #585: Add support for --with-mode=MODE
   (8.7.11) * Fix bug found in 8.7.10 about --with-mode=MODE
   (8.7.12) * Switch mode=user_default conversion to build time not configure time.
            * Taking Kenneth's suggestion to add where configuration variables are set.
              This is shown with --miniConfig or --config.
            * Unsetting FPATH inside configure.ac to avoid bad interaction with possible
              K-shell support.
            * ml now understands "--" to mean stop processing options.
            * LMOD_FAST_TCL_INTERP is set to true by default.  Make fixes to rt/commmon_funcs.sh to turn
              it off for tests.  Except that the end2end test needs it true.
            * Move cache file location from ~/.lmod.d/.cache/* to ~/.cache/lmod/*
            * Set FPATH in bash.in so that it works correctly with both Zsh and Ksh.
            * Issue #594: change cp -p to cp and mv to mv -f in update_lmod_system_spider_cache.in.
            * Now use UID_MIN from /etc/logins.def otherwise default to UID_MIN to 500 in proj_mgmt/convert_mode.sh
   (8.7.13) * Transitional support for using ~/.config/lmod for collections. Currently collectionw are
              are written to both ~/.lmod.d/ and ~/.config/lmod.  Site can switch to writting only to
              ~/.config/lmod by configuring with --with-useDotConfigOnly=yes. Lmod will continue read
               from both directories to find a collection.
            * Issue #601: Now save to the env. when doing "setenv" from a show.
   (8.7.14) * Issue #607: When using extended_default convert userName to fullName.
            * Rename MasterControl to MainControl
            * Rename Master        to Hub
            * Rename masterTbl     to optionTbl.  Note that the masterTbl() is equal to optionTbl()
              therefore SitePackage and /etc/lmod/lmod_config.lua files can continue to use masterTbl
	    * PR #600: merging in 600_category to support "module category"
            * Issue #604: Fixed bug where ref_count was not passed to swapped modules.
   (8.7.15) * Issue #613: setenv and pushenv change local environment when runniing spider (and avail)
   (8.7.16) * Issue #619: Do not source lmod_bash_aliases when $POSIXLY_CORRECT is set (by bash --posix)
            * Issue #620: Dynamically set shell name inside Lmod instead of init/bash.in
	    * Added debugging stmts to track down issue when adding loop in MODULEPATH when doing a spider.
            * Zsh now gets /path/to/ksh_scripts if KSH_SUPPORT is yes.	    
   (8.7.17) * Issue #620: Honor shell name on command line.  Use "shell" when Lmod gets to decide.
            * Fix bug in keyword terse output: Add newline on final entry (Created in Lmod 8.4.18)
            * Allow ksh93, mksh and pdksh report shellname (myShellName()) as ksh.
   (8.7.18) * Fix bug where repeating the same directory in the $MODULEPATH would cause a loopback
              and therefore a stack overflow when building the spider cache.
   (8.7.19) * Issue #622: Change MainControl:reportMissingDepModules() to report missing dep. modules through
              LmodWarning()
   (8.7.20) * Issue #626: http -> https update
            * Issue #629: Do not print Global Aliases header when no aliases would be printed.
            * Issue #630: Must take barebasename of results from ps -p $PPID -ocomm= in dynamic_shell in src/utils.lua
                          Also fix s_shellTbl entry for zsh.
                          Also handle the case where posix.readlink is not working
            * Issue #635: Do not ignore error when building man_pages
	                  Wrap pcall when trying to require("tcl2lua")
   (8.7.21) * Undo fixes in end2end.tdesc and rt/common_funcs.sh to unset LMOD_FAST_TCL_INTERP
            * Switch to use gsha1sum instead of sha1sum on Darwin.  (It works better on M1 macs)
	    * Created LMOD_USING_FAST_TCL_INTERP cosmic var to report if fast tcl interp is active.
	    * Issue #627: Allow both pushenv("FOO","") and pushenv("FOO",false) to work.
	    * Report SitePackage.lua location if different from "standard"
	    * Report the existance of lmod_config.lua and its location
	    * Add module-hide and module-forbid to RC2lua.tcl. They are currently no-ops.
	    * Add support for module --brief list to list only direct user loaded modules (stackDepth == 0)
	    * Issue 638: fix Lmod location to /main/ in README.md
	    * Add env variable LMOD_DEBUG as another way to turn on Lmod debugging.
   (8.7.22) * Label for 8.7.21 did not work. Going to 8.7.22
   (8.7.23) * Issue #635: Fix the generation of the manpage to be portable by setting LUA_PATH, LUA_CPATH
              to have the system paths and the installed Lmod paths.  This fixes missing posix and lfs
            * Change default location of SitePackage.lua to be called <srctree> so that rt/configDir test
              passes portably.
   (8.7.24) * Issue #648: Allow site to use /etc/lmod/.modulespath or $MODULEPATH_INIT to set file location of
              .modulespath
            * Switch tcsh/csh module alias to use tcsh/csh instead of shell.  The dynamic_shell routine does not
              work under MacOS for tcsh/csh correctly.
   (8.7.25) * Issue #648: Change $MODULEPATH_INIT to $LMOD_MODULEPATH_INIT
            * Issue #649: Abort configure step if bc is not found
            * Allow users to do "ml -f purge" which is translated to "module --force purge"
   (8.7.26) * Issue #650: Make isFile return true for all file types except dir.
            * Issue #617: Now print alias and de-refed module in module list and module -t list.
            * Issue #651: Allow -f and --force to be the same option for the lmod command (module)
            * Issue #654: Do not use install to copy symbolic links
   (8.7.27) * PR #644: Created hook colorize_fullName to allow for sites to control how "module list" and "module av"
              prints to the terminal.
   (8.7.28) * Issue #653: "module show" now prints the contents of inheritted modules.
            * Issue #657: Added support for "purge()" function in modules to unload all other modules on load.
   (8.7.29) * Must delete old tcl2lua.so* files before installing new ones
            * Issue #659: wrap double quotes around any newlines found in env var value in bash like shells
            * Unknown TCL module command now produce an error instead of being ignored
            * Update zsh and bash tab completion files
            * Issue #657: Added support for "module purge" in a TCL modulefile to unload all other modules on load.
   (8.7.30) * Issue #662: Fix bug where the version is very long (like git commit tags)
   (8.7.31) * Issue #665: Added support for getenv function in TCL modules
   (8.7.32) * Better handling of zsh shell functions in source_sh(). Must match "\n}\n" to find end of function.
            * Better name for extension title, remove trailing \n
            * Testing github actions
   (8.7.33) * Issue #678: Change isFile(fn) to return nil if fn is a broken symlink.
            * Issue #678: Change abspath() to l_abspath() in tools/fileOps.lua
            * Issue #678: Create realpath() to use posix.realpath() if it exists otherwise use l_abspath()
	    * User request that the Active RC file(s) be realpath()
            * Issue #681: Internally rename complete name to be "complete<name>" and unwrap when necessary.
            * TACC issue: Change the current version of zsh with the string ${ZSH_VERSION} when builting
              the init/zsh file.
            * Lmod Warnings nolonger set error status.
   (8.7.34) * TACC issue: (Again) Cannot use the string ${ZSH_VERSION} in $FPATH.  Instead change orig zsh version to current one.
   (8.7.35) * Issue #687: Let is-loaded and is-avail set  non-zero exit status.  This is different from warnings.
            * Issue #684: must pass in mpathA to isVisible when trying to find hidden modules in buildDbT
            * Issue #688: Do not produce a Lua error on a non-existant collection
            * Issue #689: Now use "m_Module_Msgs_close" instead of border so that sites can override.
            * Add LMOD_ADMIN_FILE to config report
            * Call build_i18n before calling warnings, errors or messages
            * PR #696: Allow for multiple hooks.  Note that last one in list sets the result value on return
            * Allow io.popen() to be called from a modulefile.
	    * Created buildVersion_src to build src/Version.lua when installing Lmod.
   (8.7.36) * a clean version of 8.7.35
   (8.7.37) * Issue #698: Use the correct mname from Framestack when unregistering a "break" module	    
            * Ignore backup files (*~ .*.swp etc) files in a modulerc.d directory.
            * Issue #699: Fixed buildVersion_src to deal with (HEAD detached at x.y.z)
   (8.7.38) * Issue #697: Add warning if doing "module use --help"
            * Make LMOD_IGNORE_CACHE use "yes/no" env var setting system.
            * Make module --terse show <module> do the same as module --loc show <module>.
              Namely print the location of the module.
            * Support for "module --terse spider phdf5/1.12.2" that just prints the module in the hierarchy.
            * Move almost almost all cosmic:value() calls to inside function not at routine top-level.
            * PR #702: Report build time in UTC when $SOURCE_DATE_EPOCH is set
            * PR #679: support for downstream conflicts added
            * PR #679: support for dynamic LMOD_MODULERC
   (8.7.39) * Fix busted test for ModuleA.
   (8.7.40) * Bug fix for prepend/append path when trying to add an empty string.
            * Bug fix for serializeTbl: handle empty or single blank string as key
   (8.7.41) * Issue #680: Adding new function depends_on_any()
            * Issue #680: If $MODULES_AUTO_HANDLING is set then prereq() -> depends_on(); prereq_any() -> depends_on_any()
            * Issue #686: Generate a perl pod format for manpage for module.1'
            * ModuleTable modification: Changes to $MODULEPATH are stored in an entry.
   (8.7.42) * Fix setting of $FPATH when running bash or ksh shell and executing zsh -l.
   (8.7.43) * Support for ksh flag not needed anymore
   (8.7.44) * Issue #710: path2pathA() keep double delims, Reduce triple delims to double
   (8.7.45) * Issue #713: Changing MName.src: l_find_highest_by_key() to loop over all fileA entries.
              Now stoping at first one found rather than just looking at fileA[1].
            * Issue #714: Adding "=encoding UTF-8" to pod generation
   (8.7.46) * Issue #716: Must only add KSH_SUPPORT to zsh when both $orig_zsh_version and $zsh_fpath have non-null values
   (8.7.47) * Issue #716: Use correct shell foo
   (8.7.48) * Issue #717: Keep previous varT when restoring a collection.  Otherwise the previous modules env vars.
              are lost and therefore not purged.
            * Issue #718: use __build_FPATH_for_zsh_ksh to build FPATH for both shells
            * Issue #667: support for terse avail extensions
            * Collect configure error to end of configure.            
   (8.7.49) * Add support for zsh to handle a non-exported FPATH in init/bash.in
            * Change MF_Base:processVars to use oldT to know which paths from newA to prepend or append
            * Add support for LMOD_FILE_IGNORE_PATTERNS in src/DirTree.lua.
              This is to ignore files like .version.1.3 or .modulerc-1.3.lua etc
   (8.7.50) * PR #724: Emacs lisp integration updated.
            * Issue #718: use command -v instead of checking status $?
            * Issue #690: change --hidden_load to --hidden-loaded for TCL
                          change hidden_load to hidden_loaded in Lua.
            * Report dofile() usage as an error.
            * Updated FPATH support: bash, ksh just add path (init/ksh_funcs) to FPATH
              zsh: if autoload && compinit fail then set __zsh_fpath with sub-shell
            * improve addto to not include duplicates in path like variables (PATH, FPATH. ,,. )
            * Add support for --dumpname in lmod and ml; Update tab completions files            
            * PR #727: Do not reset BASH_ENV if already set for cshrc.in
            * Do not reset BASH_ENV if already set for profile.in
	    * Issue #690: Support for the functions hide{} and forbid{}
   (8.7.51) * Fix bug in load test.
   (8.7.52) * Add MName:isVisible() so that load hooks can figure out if a loaded module is is visible or not.
   (8.7.53) * updating docs to include link to 165_debugging_lmod.rst
   (8.7.54) * Remove all v.file tests in dealing with ModuleA
            * using self.__mpathT[mpath].hiddenT and self.__hiddenT instead of merged table for hidden status
            * Added mrc:set_display_mode() before commands.
            * Build reverse maps for mod2versionT and full2aliasesT dynamically
            * Added MRC:pairsForMRC_aliases iterator
            * Removed MRC:__marged_hiddenT, MRC:__marged_forbiddenT and MRC:__mergedAlias2modT
            * Issue #731: Support for env. var. LMOD_SHOW_HIDDEN
	    * Issue #739: Make tcl files have "spider" as mode matching when Lmod is in spider mode.
   (8.7.55) * Patch #737: A better test for spaces in front of # for admin.list
   (8.7.56) * Issue #742: Switch Makefile.in to use dump-downed sed instead of Gnu Sed
            * PR    #743: Allow TCL modulefile to test shell type
            * Trailing blanks removed.
            * Fixed LMOD_FILE_IGNORE_PATTERNS so that it can be an env. var and converted to a Lua array table.
            * Documented LMOD_FILE_IGNORE_PATTERNS
            * Issue #740: Rewrite ModuleA l_find_vA so that it checks partial version strings.
	    * Issue #745: posix.setenv("var", false, true) must change to posix.setenv("var", nil, true).
            * Issue #728: Disallow fast TCL interp with TCL 9+.  This will hopely fixed in the future (;->)
   (8.7.57) * Issue #750: Adding support for new function export_shell_function()
                          Modified convertSh2MF.lua support converting export -f func to export_shell_function("func")
                          Make "export -f funcName" appear last in bash/zsh/sh shell output
            * PR    #752: Ensure m_Module_Msgs_close has an ending newline
            * Issue #743: "module show noSuchModule" return an LmodError instead of 
                          LmodWarning except when $LMOD_QUIET is set
            * Issue #749: set display mode when executing "module update"
   (8.7.58) * PR    #754: move set_display_mode up in cmdfuncs.lua in function UnUse
            * Support for Irreversible functions added.  Documentation needs to be expanded.
   (8.7.59) * PR    #738: Add new hook: decorate_module
   (8.7.60) * PR    #755: Merged in spelling corrections to docs'
            * Issue #367: Fix pushenv so that it only pushes either false or 
                          the current value on hidden stack variable
            * Using mcpStack to hold mcp instead of mcp_old in each routine (recursion ugh!)
            * Issue #728: Now allow FAST_TCL_INTERP with tcl 9
            * PR    #757: Merge in changes to irreversible docs
            * Support for TCL Irreversible commands added.
   (8.7.61) * Issue #762: Fixed int len to be Tcl_Size len in tcl2lua.c
                          Make TCL_Size be int when tcl version is < 9
            * Issue #763: Added msgHook to overview.  Handle empty msgHook function for spider.
            * Issue #767: Only add ksh functions to bash/zsh user accounts when /path/to/lmod/init/ksh_funcs
                          has the correct user access.
            * Issue #764: Lmod's capture routine only changes LD_LIBRARY_PATH and LD_PRELOAD when
                          LMOD_LD_LIBRARY_PATH and LMOD_LD_PRELOAD have an initial value.  In other words,
                          don't change LD_LIBRARY_PATH if you don't have to.
            * Issue #766: Produce warning instead of error when .modulerc* files are unreadable.
            * Issue #759: Using :escape to deal w/ special chars like '-'
            * Issue #765: Only call decorate_module hook if a module is found.
            * Issue #761: Check permissions for file and directories in src/DirTree.lua
            * Issue #771: Wrap l_readCacheFile() in a pcall.  Report warning for bad cache file but keep going.
   (8.7.62) * Modify MT to record dependencis and check them
            * PR #772: Fix contrib/tracking_module_usage/gen_2/createDB.py to use mysql.connector
            * Change tools/serializeTbl.lua to correctly handle internal double quotes in string.
   (8.7.63) * Issue #774: Adding comment to explain why Lmod sets and then unset env vars in Python
	    * Issue #775: Update tools/serializeTbl.lua to backslash the backslashes for 
                          strings w/o newlines or double quotes
   (8.7.64) * Issue #776: Special handling when strings have brackets when serializing
            * Lmod internal docs and overview added.
            * Updated docs and contrib/TACC/SitePackage.lua to use posix.syslog interface when available 
              instead of the logger command.
            * Changed MName:l_find_highest_by_key() and MName:find_between.  They now sort blockA 
              then pick the first one that is visible.
            * Changed BaseShell:expand() to use self table instead of big if-elseif-else block to 
              expand varT key-value pairs.
