Şuanki Dizin: /proc/self/root/usr/share/doc/environment-modules/ |
Şuanki Dosya : //proc/self/root/usr/share/doc/environment-modules/ChangeLog |
2023-05-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst, contrib/rpm/environment-modules.spec.in, doc/source/conf.py, testsuite/modules.51-scan/020-avail_output-variant.exp, version.inc.in: Release of version 5.3.0 * MIGRATING.rst: doc: desc +/- value prefix for opts/configs in MIGRATING * NEWS.rst, tcl/subcmd.tcl.in, testsuite/modulefiles.3/bar/2.0, testsuite/modules.50-cmds/460-sticky.exp, testsuite/modules.50-cmds/461-super-sticky.exp: No sticky mod unload if switched-on mod does not exist Fix switch sub-command not to unload sticky or super-sticky module when switched-on module does not exist. Fixes #492 2023-05-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * configure: install: fix SC20{04,28,86} warnings in configure * doc/source/module.rst: doc: desc +/- value prefix for opts/configs in man 2023-05-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, doc/source/changes.rst: doc: desc +/- value prefix for opts/configs in NEWS/CHANGES 2023-05-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/360-avail_output.exp, testsuite/modules.70-maint/361-list_output.exp: ts: test -o/--output value append/subtract in 70/36{0,1} 2023-05-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/init.tcl.in, tcl/main.tcl.in: Allow append/subtract value with --output option Allow to append or subtract value on avail_*output and list_*output configuration options through --output command line switch. If value associated to --output/-o switch starts with '+' or '-', this new value is respectively appended or subtracted from existing configuration value. * tcl/main.tcl.in: Fix duplicate space character in option parsing code 2023-05-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/220-config.exp: ts: test append/subtract config option value in 70/220 * tcl/main.tcl.in, testsuite/modules.70-maint/220-config.exp: Allow to pass value starting with '-' on config subcmd Allow to pass configuration option value starting with minus sign (-) on config sub-command. Was previously mistaken with command-line switches. This change allows to subtract a value to a configuration option already set. * tcl/subcmd.tcl.in: Config option value append or subtract for list option Allow to update colon-separated list configuration option with config sub-command. If new value starts with '+' or '-', this new value is respectively appended or subtracted from existing configuration value. * doc/source/design/add-new-config-option.rst, tcl/init.tcl.in, tcl/main.tcl.in, tcl/subcmd.tcl.in, testsuite/example/siteconfig.tcl-1: Add value kind attribute in config option definition array Update configuration option definition array (g_config_defs) to add value kind attribute as 4th entry in definition list. This attribute has following possible values: 'i' for integer, 's' for string, 'b' for boolean, 'l' for colon-separated list, 'o' for other. 2023-05-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/report.tcl.in: Mention 'variant' as --output example value in usage msg * doc/source/changes.rst: doc: desc. avail/paths/whatis/list search query changes * .aspell.en.pws, MIGRATING.rst, NEWS.rst: doc: desc. variantifspec in NEWS/MIGRATING 2023-05-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.70-maint/370-variant.exp: ts: adapt and add variantifspec tests in 70/370 * testsuite/modules.70-maint/220-config.exp, testsuite/modules.70-maint/360-avail_output.exp: ts: adapt tests for variantifspec val in avail_*output cfgs in 70/{220,360} * INSTALL.rst, configure, doc/source/changes.rst, doc/source/module.rst: install/doc: desc. variantifspec addition to avail_{,terse_}output variantifspec new value is also added to the default list of value for these configuration options. * doc/source/design/output-configuration.rst, doc/source/design/variants.rst: doc: desc. variantifspec report on avail in design notes * .aspell.en.pws, tcl/init.tcl.in, tcl/report.tcl.in: Add variantifspec value to avail_{,terse_}output config Report defined variants on avail regular or terse output if some variant is specified in search query. 2023-05-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.20-locate/070-homerc.exp: ts: add ignore_user_rc/--ignore-user-rc tests in 20/070 * doc/source/module.rst: doc: desc ignore_user_rc/--ignore-user-rc in man * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.70-maint/220-config.exp: ts: test ignore_user_rc config option * INSTALL.rst, NEWS.rst: doc: desc ignore_user_rc/--ignore-user-rc in NEWS/INSTALL * doc/source/changes.rst: doc: desc --ignore-user-rc/ignore_user_rc in changes * init/Makefile, init/fish_completion, init/zsh-functions/_module.in: init: add ignore_user_rc/--ignore-user-rc to comp script * tcl/modfind.tcl.in: Ignore user rc when ignore_user_rc enabled Do not evaluate user-specific module rc file when ignore_user_rc configuration is enabled. Fixes #479 * tcl/init.tcl.in, tcl/main.tcl.in, tcl/report.tcl.in: Add ignore_user_rc configuration option Add ignore_user_rc configuration option that controls whether or not the $HOME/.modulerc file should be ignored. Disabled by default. When configuration is modified it sets the MODULES_IGNORE_USER_RC environment variable. --ignore-user-rc command line switch can be used to enable ignore_user_rc for current execution. * NEWS.rst, doc/source/changes.rst, doc/source/module.rst, tcl/mfinterp.tcl.in, testsuite/modulefiles.3/refresh/1.0, testsuite/modulefiles.3/refresh/2.0, testsuite/modules.50-cmds/078-refresh.exp, testsuite/modules.50-cmds/083-info-mode.exp, testsuite/modules.50-cmds/084-info-mode-exp.exp, testsuite/modules.50-cmds/085-info-flags.exp, testsuite/modules.50-cmds/310-puts.exp, testsuite/modules.50-cmds/311-puts-prestdout.exp, testsuite/modules.70-maint/230-verbosity.exp: Refresh modules that put content to stdout/prestdout Mark modulefile qualified for refresh evaluation when puts command is used to send content to stdout or prestdout channels. Such loaded modules where wrongly skipped during refresh unless if they declared another volatile environment change. Choice is made to also refresh modules that put content to stdout/prestdout to keep the behavior of Modules 3.2 Fixes #488 2023-05-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, doc/source/module.rst: doc: desc. extra specifier in man 2023-05-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst: doc: desc. extra specifier work in MIGRATING * NEWS.rst: doc: desc. extra specifier work in NEWS 2023-04-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.4/extra/1.0, .../modules.51-scan/042-extra_spec-conflict.exp, .../modules.51-scan/043-extra_spec-require.exp: ts: add module switch extra spec tests in 51/04{2,3} * testsuite/modulefiles.4/extra/1.0, testsuite/modules.51-scan/042-extra_spec-conflict.exp: ts: add conflict extra spec tests in 51/042 * testsuite/modulefiles.4/extra/1.0, testsuite/modules.51-scan/042-extra_spec-conflict.exp: ts: add module unload extra spec tests in 51/042 2023-04-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.4/extra/1.0, testsuite/modules.51-scan/043-extra_spec-require.exp: ts: add module load-any extra spec tests in 51/043 * testsuite/modulefiles.4/extra/1.0, testsuite/modules.51-scan/043-extra_spec-require.exp: ts: add module try-load extra spec tests in 51/043 * testsuite/modulefiles.4/extra/1.0, .../modules.51-scan/043-extra_spec-require.exp: ts: add module erroneous extra spec tests in 51/043 * testsuite/modulefiles.4/extra/1.0, .../modules.51-scan/043-extra_spec-require.exp: ts: add module load extra spec tests in 51/043 * testsuite/modulefiles.4/extra/1.0, testsuite/modules.51-scan/043-extra_spec-require.exp: ts: add always-load extra spec tests in 51/043 2023-04-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .aspell.en.pws, doc/source/design/extra-match-search.rst: doc: desc. mod spec filtering in EMS spec 2023-04-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.4/extra/1.0, testsuite/modules.51-scan/043-extra_spec-require.exp: ts: add prereq-all/depends-on extra spec tests in 51/043 2023-04-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.4/.modulerc, testsuite/modulefiles.4/extra/.modulerc, testsuite/modulefiles.4/extra/1.0, testsuite/modulefiles.4/xtbar/1.0, testsuite/modulefiles.4/xtbar/2.0, testsuite/modulefiles.4/xtfoo/1.0, .../modules.51-scan/043-extra_spec-require.exp: ts: add prereq/prereq-any extra specifier tests in 51/043 2023-04-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/modscan.tcl, tcl/modspec.tcl: Parse mod spec in extra specifier value with getavails on For some extra specifier, a module specification is expected as value. For them parse this module specification with resolution of all matching available modules. During extra match search process, test match of specification against all matching available modules recorded when parsing spec. modEq procedures have been updated to fetch available module names recorded in module version spec structure as alternative names for spec when ismodlo argument is set to 5. modVariantCmp procedure has been updated to let a missing variant definition of mod be considered as a match. As compared pattern and mod are switched on extra specifier context (pattern is definition found in modulefile and mod is also a pattern used for extra specifier definition on command line). Note that this methodology is not yet perfect as aliases, symbolic versions and modules that do not exist are not part of the list of available modules returned. 2023-04-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .aspell.en.pws, tcl/coll.tcl.in, tcl/main.tcl.in, tcl/mfinterp.tcl.in, tcl/modeval.tcl, tcl/modfind.tcl.in, tcl/modscan.tcl, tcl/modspec.tcl, tcl/subcmd.tcl.in, testsuite/example/siteconfig.tcl-1: Record avail mods matching mod spec when parsing it Update module specification parsing mechanism to add a getavails argument. It indicates that available modules matching spec should be searched in enabled modulepaths to record them in module version specification structure. When searching for available matching modules, disable extra match search to avoid an infinite resolution loop. 2023-04-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/modspec.tcl: Parse extra specifier prior variant Give more priority to extra specifier (name:value) than variant specification (name=value) as extra specifier accepting a module specification as value may contain a variant specification. For instance: "prereq:mod@1.0 foo=value". * tcl/modspec.tcl: Skip arg split when parsing modspec if extra spec detected Update module specification parsing to skip argument split when an extra specifier is detected. Value for extra specifier may be a module specification, thus argument split on version specifier or variant shortcut should be skipped to keep extra specifier value as one string. 2023-04-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.51-scan/030-scan_eval-avail.exp, testsuite/modules.51-scan/031-scan_eval-whatis.exp, testsuite/modules.51-scan/032-scan_eval-paths.exp: ts: adapt existing tests to extra specifier changes * tcl/envmngt.tcl.in, tcl/mfinterp.tcl.in, tcl/modfind.tcl.in, tcl/modspec.tcl, tcl/report.tcl.in, tcl/util.tcl: Refer to string index with M+N notation As M+N notation is now a valid syntax to refer to a string index (starting Tcl 8.5), change code to use this syntax rather using expr to compute an index value. 2023-04-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/mfinterp.tcl.in, tcl/modscan.tcl, tcl/modspec.tcl: Record conflict during scan eval conflict command is an extra specifier. incompat is an alias of it. * tcl/modscan.tcl, tcl/modspec.tcl: Record module switch during scan eval switch sub-command name is an extra specifier. Switched-on module specification also matches switch-on and require extra specifier aliases. With two-arg form module switch, switched-off module specification also matches switch-off and incompat extra specifier aliases. 2023-04-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/modscan.tcl, tcl/modspec.tcl: Record module unload during scan eval unload sub-command name is an extra specifier. incompat is an alias of it. * tcl/mfinterp.tcl.in, tcl/modscan.tcl, tcl/modspec.tcl: Record module load/load-any/try-load during scan eval load, try-load and load-any sub-command names are an extra specifier. require is an alias of them. 2023-04-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/mfinterp.tcl.in, tcl/modscan.tcl, tcl/modspec.tcl: Record always-load definitions during scan eval require is an alias of always-load extra specifier. * tcl/mfinterp.tcl.in, tcl/modscan.tcl, tcl/modspec.tcl: Record prereq-all/depends-on definitions during scan eval require, prereq-all and depends-on are aliases of prereq-all and depends-on extra specifiers. 2023-03-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/modscan.tcl: Match module designation for some extra specifiers Update extra specifier query test for those whose value is a module specification. Currently prereq, require and prereq-any extra specifiers accept a module specification as value. This module specification is matched against the specification passe to the corresponding modulefile Tcl command. Match is done with modEq procedure. LIMITATION: not all module specification currently works as modEq is made to compare a module specification against a qualified module name and version. Using module generic name or advanced version specifiers on extra specifier value will not currently work. 2023-03-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/mfinterp.tcl.in, tcl/modscan.tcl, tcl/modspec.tcl: Record prereq/prereq-any definitions during scan eval require and prereq-any are aliases of prereq and prereq-any extra specifiers. 2023-03-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.51-scan/040-extra_spec.exp: ts: test extra spec on non-search cmds in 51/040 * tcl/coll.tcl.in, tcl/main.tcl.in, tcl/mfinterp.tcl.in, tcl/modeval.tcl, tcl/modfind.tcl.in, tcl/modspec.tcl, tcl/subcmd.tcl.in, testsuite/example/siteconfig.tcl-1: Raise error when extra spec on non-search cmds Extra specification in module search query is only allowed on search sub-commands (avail, paths, whatis). An error is raised when parsing a module specification if it contains an extra specification on a non-search context. xtspec argument is added to parseModuleSpecification procedure to know if extra specification is allowed or not. 2023-03-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .aspell.en.pws, doc/source/design/extra-match-search.rst: doc: desc. extra specifier in EMS design 2023-03-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/modspec.tcl, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.51-scan/040-extra_spec.exp, testsuite/modules.51-scan/041-extra_spec-env.exp: Raise error when unknown extra specifier used * testsuite/modulefiles.4/extra/1.0, .../modules.51-scan/042-extra_spec-conflict.exp: ts: add family extra specifier tests in 51/042 * tcl/mfinterp.tcl.in, tcl/modscan.tcl: Record family definitions during scan eval 2023-03-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.4/extra/1.0, testsuite/modules.51-scan/041-extra_spec-env.exp: ts: add setenv duplicate definition test in 51/041 * tcl/modscan.tcl: Rework extra specifier filtering Update extra match search process to filter results with extra specifiers only one after all modulefile scan evaluations. As g_scanModuleElt global structure consolidates all modules matching a given extra specifier criteria (element > name = list of matching modules), with one test per extra specifier criteria result can be obtain. Instead of testing each module against the criteria independently. doesModExtraMatch procedure is removed and replaced by getModMatchingExtraSpec to achieve this single global criteria match test. * tcl/util.tcl: Add getIntersectBetweenList helper procedure Compute intersection of multiple lists with getIntersectBetweenList procedure. 2023-03-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.51-scan/040-extra_spec.exp: ts: test unknown extra specifier and special char in 50/040 * testsuite/modulefiles.4/extra/1.0, testsuite/modules.51-scan/041-extra_spec-env.exp: ts: add extra specifier tests with source-sh in 51/041 * testsuite/modulefiles.4/extra/1.0, testsuite/modules.51-scan/041-extra_spec-env.exp: ts: add erroneous env extra specifier tests in 51/041 * testsuite/modulefiles.4/extra/1.0, testsuite/modules.51-scan/041-extra_spec-env.exp: ts: add other env extra specifier tests in 51/041 * tcl/mfinterp.tcl.in, tcl/modscan.tcl: Record chdir definitions during scan eval * tcl/mfinterp.tcl.in, tcl/modscan.tcl: Record unset-function definitions during scan eval * tcl/mfinterp.tcl.in, tcl/modscan.tcl: Record set-function definitions during scan eval 2023-03-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/mfinterp.tcl.in, tcl/modscan.tcl: Record unset-alias definitions during scan eval * tcl/mfinterp.tcl.in, tcl/modscan.tcl: Record set-alias definitions during scan eval * tcl/mfinterp.tcl.in, tcl/modscan.tcl: Record uncomplete definitions during scan eval * tcl/mfinterp.tcl.in, tcl/modscan.tcl: Record complete definitions during scan eval 2023-03-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.4/extra/1.0, testsuite/modulefiles.4/extra/2.0, testsuite/modules.51-scan/041-extra_spec-env.exp: ts: add envvar extra specifier tests in 51/041 * testsuite/modulefiles.4/extra/1.0, testsuite/modulefiles.4/extra/2.0, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.51-scan/040-extra_spec.exp: ts: initial tests for extra specifiers in 51/040 * tcl/mfinterp.tcl.in, tcl/modscan.tcl: Record unsetenv definitions during scan eval * tcl/mfinterp.tcl.in, tcl/modscan.tcl: Record pushenv definitions during scan eval 2023-03-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/mfinterp.tcl.in, tcl/modscan.tcl: Record *-path definitions during scan eval 2023-03-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/mfinterp.tcl.in, tcl/modscan.tcl: Record setenv definition during scan eval * tcl/modscan.tcl: Record variant name in scanned mod element When evaluating a variant command in scan mode, record that this module defines a variant with its name. This information is saved in g_scanModuleElt global structure (Tcl dict). This structure is then used to test if extra specifiers of search query match definition of available modules. Fixes #408 * tcl/modscan.tcl: Filter avail module based on extra specifier Update extra match search process to allow specification of extra specifiers in addition to module name, version and variants. Filter results through extra match search to only return modules matching extra specifiers (where specified element and name is defined by module). * tcl/modscan.tcl: EMS required if mod spec contains extra specifier During avail, paths or whatis sub-commands * tcl/modspec.tcl: Parse extra specifiers in module specification When parsing module specification, take into account extra specifiers (elt:name) and record them in g_moduleVersSpec structure. Add getExtraListFromVersSpec utility procedure to get the extra specifiers of the specification. 2023-04-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, doc/source/_static/terminal_output.css, doc/source/conf.py: doc: desc. Querying available module variants in MIGRATING 2023-04-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .github/workflows/windows_tests.yaml: gh: install new tcl-devel package on MSYS2 2023-03-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/extra-match-search.rst, tcl/modfind.tcl.in, testsuite/modulefiles.4/scan/.modulerc, testsuite/modulefiles.4/scan/1.0, testsuite/modules.51-scan/030-scan_eval-avail.exp: Fix EMS filter against alias overriding dir Directory information override alias in result structure if extra match search is required. 2023-03-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/modscan.tcl, testsuite/modules.51-scan/030-scan_eval-avail.exp: Fix EMS filter against not matching dot hidden symbol 2023-03-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .aspell.en.pws, doc/source/design/extra-match-search.rst: doc: desc extra match search query grammar in design 2023-02-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, doc/source/module.rst: doc: desc extra match search process in man * doc/source/module.rst: doc: use pattern terminology on whatis/paths desc. * NEWS.rst: doc: desc. search variant name/value highlight in NEWS 2023-02-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/extra-match-search.rst, doc/source/design/source-shell-script-in-modulefile.rst, tcl/mfinterp.tcl.in: Interpret source-sh cmd on scan mode as on load mode * doc/source/design/extra-match-search.rst: doc: update extra match search spec for error entries 2023-02-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.4/scan/1.0, testsuite/modulefiles.4/scan/2.0, testsuite/modules.51-scan/030-scan_eval-avail.exp, testsuite/modules.51-scan/031-scan_eval-whatis.exp, testsuite/modules.51-scan/032-scan_eval-paths.exp: ts: access issue and EMS on avail/whatis/paths * testsuite/modulefiles.4/scan/1.0, testsuite/modulefiles.4/scan/2.0, testsuite/modules.51-scan/030-scan_eval-avail.exp, testsuite/modules.51-scan/031-scan_eval-whatis.exp, testsuite/modules.51-scan/032-scan_eval-paths.exp: ts: special chars and EMS on avail/whatis/paths * testsuite/modulefiles.4/scan/1.0, testsuite/modulefiles.4/scan/2.0, testsuite/modules.51-scan/030-scan_eval-avail.exp: ts: add no-indepth avail EMS tests in 51/030 * doc/source/design/extra-match-search.rst, tcl/modfind.tcl.in: Fetch all files if no-indepth mode and EMS asked In case no-indepth mode is asked and extra match search should be performed, traditional file lookup (by ``findModules``) is made to return all existing files. Not only those matching depth level. As extra match filtering process may eliminate some entries, all of them should be tested to obtain accurate result. 2023-02-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.4/scan/.modulerc, testsuite/modulefiles.4/scan/1.0, testsuite/modulefiles.4/scan/2.0, testsuite/modules.51-scan/030-scan_eval-avail.exp, testsuite/modules.51-scan/031-scan_eval-whatis.exp, testsuite/modules.51-scan/032-scan_eval-paths.exp: ts: auto symbols and EMS on avail/whatis/paths 2023-02-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.4/scan/.modulerc, testsuite/modulefiles.4/scan/1.0, testsuite/modulefiles.4/scan/2.0, testsuite/modules.51-scan/030-scan_eval-avail.exp, testsuite/modules.51-scan/031-scan_eval-whatis.exp, testsuite/modules.51-scan/032-scan_eval-paths.exp: ts: default symbol and EMS on avail/whatis/paths * testsuite/modules.51-scan/030-scan_eval-avail.exp, testsuite/modules.51-scan/031-scan_eval-whatis.exp, testsuite/modules.51-scan/032-scan_eval-paths.exp: ts: adapt wild variant avail/whatis/paths tests in 51/03{0,1,2} * tcl/modfind.tcl.in, tcl/modspec.tcl: Disable auto symbols on wild search with variant Do not compute auto symbols if search query does not contain a module name and version but contain variant specification. Add isSpecWildWithVariant procedure to determine if search query is wild with variant specification. Disabling auto symbols is especially useful for sub-commands like 'paths' that take getModules result and try to resolve each entry. In this situation it is important not to have any auto symbol that indirectly targets an element withdrawn from extra match filter. * doc/source/design/extra-match-search.rst, tcl/modfind.tcl.in: Correctly handle auto symbols during EMS Move extra match search in getModules from phase 3 to phase 4 to proceed after auto symbols computation. Add auto symbols defined in versmod_list structure so extra match search filtering can unset these elements if their target is filtered out. 2023-02-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.51-scan/032-scan_eval-paths.exp: ts: test alias/sym filtering during EMS on paths * testsuite/modulefiles.4/scan/1.0, testsuite/modulefiles.4/scan/2.0, testsuite/modules.51-scan/031-scan_eval-whatis.exp: ts: test alias/sym filtering during EMS on whatis 2023-02-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/extra-match-search.rst: doc: update extra match search spec for alias/sym * testsuite/etc/modulerc.scan, testsuite/modulefiles.4/scan/.modulerc, testsuite/modulefiles.4/scan/1.0, testsuite/modules.51-scan/030-scan_eval-avail.exp: ts: test alias filtering during extra match search in 51/030 2023-02-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/etc/modulerc.scan, testsuite/modulefiles.4/foo/.modulerc, testsuite/modulefiles.4/foo/1.0, testsuite/modulefiles.4/scan/.modulerc, testsuite/modulefiles.4/scan/1.0, testsuite/modules.51-scan/030-scan_eval-avail.exp: ts: test symbol filtering during extra match search in 51/030 2023-02-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/modfind.tcl.in, tcl/modscan.tcl: Filter sym ver if target unset during extra match Unset the symbolic version elements targeting an element removed during the extra match search. * testsuite/modules.70-maint/370-variant.exp: ts: no mod name/vers but vr spec on avail/paths in 70/370 * testsuite/modules.70-maint/375-variant-whatis.exp: ts: no mod name/vers but vr spec on whatis in 70/375 2023-02-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../021-avail_output-variant-sgr.exp: ts: no mod name/vers but vr spec on colored avail in 51/021 * testsuite/modules.70-maint/370-variant.exp: ts: test variant spec only on module list in 70/370 2023-02-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/370-variant.exp: ts: test variant spec highlight on module list in 70/370 * testsuite/modulefiles.3/variant/6.0, testsuite/modules.70-maint/370-variant.exp, testsuite/modules.70-maint/375-variant-whatis.exp: ts: test free value variant spec on av/is-avail/wh/paths 2023-02-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/variant/1.0, .../021-avail_output-variant-sgr.exp: ts: test to color selected variant name and value in 51/021 2023-02-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../021-avail_output-variant-sgr.exp, testsuite/modules.70-maint/370-variant.exp, testsuite/modules.70-maint/371-variant-msg.exp, .../modules.70-maint/377-variant-shortcut.exp: ts: adapt existing sgr variant tests Take into account sgr output code change due to variant sgr highlight feature. 2023-02-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/modfind.tcl.in, tcl/report.tcl.in: Highlight searched variant name and value in output 2023-02-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/mfinterp.tcl.in: No error count raise during scan evaluation If the evaluation of a modulefile aborts (due to a break or exit error), do not increase error count if evaluation mode is scan. As scan is a global operation, like an avail search, an error on one modulefile should not impact the overall result of the scan. 2023-02-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/030-options.exp: ts: fix version module avail resolution in install 00/030 * testsuite/modules.70-maint/376-variant-tag.exp: ts: add hide/forbid tag tests applying to variant in 70/376 2023-02-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/modscan.tcl: Inhibit error report during scan mode evaluations Disable error reporting to avoid modulefile errors to pollute output. This is particularly useful when dealing with modulefile that does not cope with scan mode evaluation. 2023-01-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/variant/6.0, testsuite/modules.70-maint/370-variant.exp, testsuite/modules.70-maint/375-variant-whatis.exp, testsuite/modules.70-maint/376-variant-tag.exp: ts: test variant spec on avail/whatis/paths Adapt existing avail, whatis, is-avail, path and paths tests that demonstrate whether sub-command takes variant specification into account or not. Add boolean variant, shortcut variant tests. Add also more tests of scan evaluation for avail/whatis/paths when module is forbidden. 2023-01-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc variant spec on avail/list/paths/whatis in NEWS 2023-01-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .aspell.en.pws, doc/source/design/module-selection-contexts.rst, doc/source/design/variants.rst: doc: desc extra match search in variant/selection notes 2023-01-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/coll.tcl.in, tcl/main.tcl.in, tcl/mfinterp.tcl.in, tcl/modeval.tcl, tcl/modfind.tcl.in, tcl/modspec.tcl, tcl/subcmd.tcl.in, testsuite/example/siteconfig.tcl-1: Allow module spec without name on several subcmds Allow module specification with variant definition and no module name version for avail, list, paths and whatis sub-commands. 2023-01-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/modscan.tcl: Filter avail module based on variant specification Update extra match search process to allow specification of module variants in addition to module name and version. Filter results through extra match search to only return modules matching variant specification (where specified variant name and value is defined for module). 2023-01-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/modulefiles/module-info: contrib: fix module-info example modulefile for scan mode * tcl/modscan.tcl: Extra match search required if mod spec contains variant During avail, paths or whatis sub-commands 2023-01-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.4/scan/.modulerc, testsuite/modulefiles.4/scan/1.0, testsuite/modulefiles.4/scan/2.0, testsuite/modules.51-scan/030-scan_eval-avail.exp: ts: add diverse scan mode eval tests in 51/030 2023-01-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.4/variant1/.modulerc, testsuite/modulefiles.4/variant1/1.0, testsuite/modulefiles.4/variant1/2.0, .../modules.51-scan/020-avail_output-variant.exp: ts: test scan evaluation and output with variants in 51/020 2023-01-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/variant/1.0, .../021-avail_output-variant-sgr.exp: ts: add avail report sgr tests for free-value variant in 51/021 * tcl/modfind.tcl.in: Adapt report for free-value variant When reporting value list of free-value variant, mention '*' to indicate all kind of values are accepted. If a default value is defined or if module is loaded report these values among variant value list. 2023-01-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/variant/1.0, testsuite/modules.51-scan/010-init_ts.exp, .../021-avail_output-variant-sgr.exp, testsuite/modules.51-scan/999-cleanup.exp: ts: test avail output with rendition of default/loaded variant 2023-01-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/370-variant.exp, .../modules.70-maint/377-variant-shortcut.exp: ts: test list output with rendition of default variant 2023-01-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc. default/loaded variant value SGR in NEWS * tcl/modfind.tcl.in, tcl/report.tcl.in: Adapt loaded variant report to loaded kind To highlight loaded variant value use the sgr key associated to the loaded kind (loaded or auto-loaded). Resolve abbreviation used for these module tag to apply the correct SGR key. * tcl/modfind.tcl.in: Fix boolean variant key report issue on avail output 2023-01-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/modfind.tcl.in, tcl/report.tcl.in: Adapt variant report to highlight loaded variant value Update variant report mechanism to highlight variant value if it is the loaded one (if this module is currently loaded). Use 'L' sgr code highlight loaded variant value, like done for loaded module name and version. * tcl/modfind.tcl.in, tcl/modscan.tcl, tcl/report.tcl.in: Adapt variant report to highlight default variant value Update variant report mechanism to highlight variant value if it is the default one. Use 'de' sgr code highlight default variant value, like done for default version. Both avail and list output reports benefit from this highlight enhancement. * tcl/modfind.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Adapt multiple-value variant report to highlight comma Update variant report mechanism to highlight comma separator when all available values of a variant is reported. Use 'se' sgr code to highlight comma, like done for '{' and '}'. The link to 'name=value' key entry is this way reinforced. Introduce report mechanism #7 in getVariantList procedure to achieve this. getVariantList will need refactoring. 2022-12-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.4/info/mode7, testsuite/modulefiles.4/info/mode8, testsuite/modules.50-cmds/083-info-mode.exp, testsuite/modules.50-cmds/084-info-mode-exp.exp: ts: test scan mode on module-info in 50/{083,084} * doc/source/modulefile.rst: doc: desc. scan string returned by module-info mode * testsuite/modules.70-maint/220-config.exp, testsuite/modules.70-maint/360-avail_output.exp: ts: adapt tests for variant val in avail_*output cfgs in 70/{220,360} * NEWS.rst: doc: desc. extra-match-search and variant report in NEWS * INSTALL.rst, configure, doc/source/changes.rst, doc/source/module.rst: install/doc: desc. variant addition to avail_{,terse_}output * doc/source/design/output-configuration.rst, doc/source/design/variants.rst: doc: desc. variant report on avail in design notes * tcl/init.tcl.in, tcl/modfind.tcl.in, tcl/report.tcl.in: Add variant value to avail_{,terse_}output config Add the ability to report defined variants on avail regular or terse output. Variant report is updated to output all possible values in the name=value1,value2,... form. This form also applies to boolean variant with on,off as possible values. Fixes #407 2022-12-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .aspell.en.pws, tcl/mfinterp.tcl.in, tcl/modeval.tcl, tcl/modscan.tcl: Configure scan evaluation mode for modulefile Add scan evaluation mode for modulefile. It will analyzes modulefile content for extra match search process. To define environment variable in modulefile context during evaluation, use whatis-variant of environment variable edition modulefile commands. Setup first specific scan-variant of a modulefile command with variant-sc procedure. Reuse code from whatis-variant to initialize variant value in environment when evaluating modulefile. Also gather variant definition for modules in a global array structure. * tcl/modfind.tcl.in, tcl/modscan.tcl: Add extra match search process Update getModules procedure to insert extra match search at phase 3. filterExtraMatchSearch procedure codes the extra match search process. As a start, all modules in result are evaluated in scan mode. * tcl/modscan.tcl: Add isExtraMatchSearchRequired proc Add isExtraMatchSearchRequired procedure that determine if current module search requires an extra match search. Extra match search is required currently if variant should be reported in resulting output. * .aspell.en.pws, Makefile, tcl/modscan.tcl: Add modscan.tcl code file Add modscan.tcl code file that will host Tcl procedures for the scan modulefile evaluation mode and the extra match search process. * .aspell.en.pws, doc/source/design/extra-match-search.rst, doc/source/design/module-cache.rst: doc: add initial version of extra-match-search design 2023-04-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, contrib/rpm/environment-modules.spec.in: install: migrate to SPDX licence format in RPM spec file * NEWS.rst, init/bash_completion.in: init: fix nospace activation in bash completion script Fix bash shell completion script to be able to complete full name of available modules. Fixes #490. 2023-04-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst: doc: clarify python initialization example Update Python initialization example to precise that the init script should be exec-ed in the global scope. This is important when init script is executed from a function. This change helps to clarify a question asked on #483. 2023-03-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, script/gitlog2changelog.py.in: install: fix expected log format in gitlog2changelog.py Update gitlog2changelog.py script to ensure git log format is not influenced by user git configuration. Fixes #487. 2023-03-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .codespellrc, .github/workflows/windows_tests.yaml: codespell: ignore additional generated content 2023-03-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, NEWS.rst: install: allow to build from short-depth git repo Fix Makefile to allow building Modules from a git repository with short commit depth. Fixes #486 2023-02-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/config/base-config.exp: ts: escape shell text output for regexp enabled tests * .cirrus.yml: cirrus: tcl-tk homebrew pkg now use default location 2023-02-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/400-source-sh.exp, testsuite/modules.70-maint/410-timer.exp: ts: fix tests when run with Tcl 9.0 * testsuite/config/base-config.exp: ts: update procedure to allow tests to fail Provide a way to track tests that are expected to fail. Add failcmd argument on all test procedure to indicate the fail command to use to report test failure. Use fail command by default. When using xfail command, it indicates that test is expected to fail. 2023-02-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .github/workflows/linux_tests.yaml: gh: add new Linux test case for Tcl 9.0 * .github/workflows/linux_tests.yaml: gh: add new Linux test case for Tcl 8.7 * testsuite/modules.70-maint/451-stashpop.exp, testsuite/modules.70-maint/452-stashrm.exp, testsuite/modules.70-maint/453-stashshow.exp: ts: fix tests when run with Tcl 8.7 2023-01-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .aspell.en.pws, .cirrus.yml: cirrus: fix Codecov run on MacOS M1 environment Codecov tool is not available on arm64 platform. Use arch utility to run x86_64 codecov binary on MacOS M1 virtual machine. * NEWS.rst, tcl/mfinterp.tcl.in: Fix shell alias translation with fish shell 3.6 A '$argv' string is added in fish 3.6 at the end of shell alias definition when reported with functions command. 2023-01-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/210-clear.exp: ts: adapt 70/210 test result for MSYS platform * NEWS.rst, tcl/subcmd.tcl.in, testsuite/example/siteconfig.tcl-1, testsuite/modules.61-coll/030-save.exp: Catch collection dir error and report correct msg Fixes #482 2023-01-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .aspell.en.pws, .cirrus.yml: cirrus: use new macOS images for M1 instead of Intel * NEWS.rst, tcl/mfinterp.tcl.in, testsuite/modulefiles.3/foo/1.0, testsuite/modulefiles.3/tag/.modulerc, testsuite/modulefiles.3/tag/8.0, testsuite/modules.50-cmds/465-tag-opt.exp: Correctly apply extra tag when variant not set Correctly apply extra tag set when loading a module whose variant has no specific value set (default value used). Fixes #484 2022-12-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, doc/source/cookbook/reduce-io-load.rst: doc: update reduce-io-load recipe with module cache * MIGRATING.rst: doc: desc. Module cache in MIGRATING 2022-12-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, doc/source/module.rst, doc/source/modulefile.rst: doc: desc. limited-access & cache in NEWS/man 2022-12-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp, .../045-cache-use-misc-inconsistent.exp: ts: add more cache not in sync tests in 30/045 2022-12-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/module-cache.rst: doc: desc. in design notes when cache is not in sync * .../044-cache-use-limited-access-inconsistent.exp: ts: add tests for inconsistent limited accesses in 30/044 2022-12-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.20-locate/057-mcookie.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.20-locate/081-access-rc.exp, testsuite/modules.20-locate/090-memcache.exp, testsuite/modules.20-locate/113-hide-all-opt.exp, .../modules.20-locate/130-mcookie_check_eval.exp, testsuite/modules.70-maint/240-icase.exp, testsuite/modules.70-maint/260-extended_default.exp, testsuite/modules.70-maint/290-json.exp, testsuite/modules.70-maint/330-large-file.exp, testsuite/modules.70-maint/420-lint.exp, testsuite/modules.80-deep/080-access-deep.exp: ts: ignore pre-built cache for tests changing file access * testsuite/modules.70-maint/120-autoinit.exp: ts: fix shell completion script file tests in 70/120 * .cirrus.yml, .github/workflows/linux_tests.yaml, script/mt, testsuite/modules.00-init/010-environ.exp, testsuite/modules.00-init/060-build_cache.exp, .../modules.30-cache/051-cache-buffer-bytes.exp, testsuite/modules.70-maint/220-config.exp, testsuite/modules.99-finish/999-cleanup.exp: ts: optionally build cache files to run tests When TESTSUITE_ENABLE_MODULECACHE environment variable is set, cache file is built for all modulepaths of the testsuite. Tests are run using the cache files to resolve available modules. 2022-12-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/module-cache.rst: doc: additional notes on module cache design * testsuite/modules.30-cache/010-init_ts.exp, .../modules.30-cache/043-cache-use-limited-access.exp: ts: add limited-access hidden module tests in 30/043 2022-12-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.30-cache/010-init_ts.exp, testsuite/modules.30-cache/031-cachebuild-full.exp, .../032-cachebuild-limited-access.exp, testsuite/modules.30-cache/040-cache-use.exp, .../043-cache-use-limited-access.exp: ts: add ignored files and dirs in cache test structure * .../043-cache-use-limited-access.exp: ts: add tests for limited-access cache elt resolution in 30/043 2022-12-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.30-cache/040-cache-use.exp: ts: adapt existing tests for limited-access resolution * .aspell.en.pws, tcl/cache.tcl.in, tcl/modfind.tcl.in: Resolve limited access files/dirs when using cache When searching modules through cache files resolve files and directories marked as limited access. First check such entries match the search query, then test if these files and directories can be accessed by current user. The access test relies on the findModulesFromDirsAndFiles procedure, as if module search was not performed with cache file, but just for the limited-access entries. 2022-12-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/modfind.tcl.in: Create findModulesFromDirsAndFiles from findModules Split code from findModules procedure that walk through a list of files and directories to find modules. Create a new procedure named findModulesFromDirsAndFiles for that purpose. This new procedure will be helpful to resolve limited access files and directories spotted in cache file. 2022-12-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/cache.tcl.in, tcl/mfinterp.tcl.in: Add limited-access-directory cachefile command Add limited-access-directory cachefile command to record all directories with limited access in modulepath. * tcl/cache.tcl.in, tcl/mfinterp.tcl.in: Add limited-access-file cachefile command Add limited-access-file cachefile command to record all files with limited access in modulepath. 2022-12-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.30-cache/010-init_ts.exp, .../032-cachebuild-limited-access.exp: ts: add limited-access cachebuild tests in 30/032 2022-12-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/module-cache.rst: doc: elaborate limited access in module cache design * testsuite/modules.30-cache/031-cachebuild-full.exp: ts: adapt existing tests now limited access are recorded * tcl/cache.tcl.in: Register files/dir with limited access in cache When building cache, check all files and directory within modulepath that have limited access. Limited access is when user building cache or others cannot read file or cannot either read or search directory. Limited access file or directory are recorded in cache file with respectively limited-access-file and limited-access-directory cachefile commands. Limited access commands replace modulefile/modulerc definitions in the cache if files or their parent directory has limited access. 2022-12-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../modules.30-cache/052-cache-expiry-secs.exp: ts: add cache_expiry_secs tests in 30/051 * doc/source/module.rst: doc: desc cache_expiry_secs in man * INSTALL.rst, NEWS.rst: doc: desc cache_expiry_secs in NEWS/INSTALL * doc/source/changes.rst, doc/source/design/module-cache.rst: doc: desc cache_expiry_secs in design/changes * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.30-cache/040-cache-use.exp, testsuite/modules.70-maint/220-config.exp: ts: test cache_expiry_secs config option * init/Makefile, init/fish_completion, init/zsh-functions/_module.in: init: add cache_expiry_secs config to completion script * tcl/cache.tcl.in, tcl/init.tcl.in: Introduce cache_expiry_secs configuration option Add cache_expiry_secs configuration option to control after how many seconds (after last modification) to consider cache file expired and ignore it. Set to 0 by default which means cache file never expires. Value can vary from 0 to 31536000 which corresponds to the number of seconds during one year. When configuration option is set, it defies the MODULES_CACHE_EXPIRY_SECS environment variable. * .../modules.30-cache/051-cache-buffer-bytes.exp: ts: add cache_buffer_bytes tests in 30/051 2022-12-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.70-maint/220-config.exp: ts: test cache_buffer_bytes config option * doc/source/module.rst: doc: desc cache_buffer_bytes in man * INSTALL.rst, NEWS.rst: doc: desc cache_buffer_bytes in NEWS/INSTALL * doc/source/changes.rst, doc/source/design/module-cache.rst: doc: desc cache_buffer_bytes in design/changes * init/Makefile, init/fish_completion, init/zsh-functions/_module.in: init: add cache_buffer_bytes config to completion script * tcl/cache.tcl.in, tcl/init.tcl.in, tcl/subcmd.tcl.in: Introduce cache_buffer_bytes configuration option Add cache_buffer_bytes configuration option to control the buffer size used when reading or writing cache files. A 32 kbytes buffer is set by default. It can vary from 4 kbytes to 1 MB. It is useful to have a large buffer when reading or writing large files to reduce the number or read or write system calls. When configuration option is set, it defies the MODULES_CACHE_BUFFER_BYTES environment variable. 2022-12-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.30-cache/040-cache-use.exp, testsuite/modules.30-cache/041-cache-interp.exp: ts: adapt tests to specific cache read code 2022-12-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/cache.tcl.in: Add specific proc to read cache file Introduce readCacheContent procedure to specifically read cache file rather using read procedure for modulefile. Avoid cache file to be cached in memory. Produce more specific error message. 2022-12-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.30-cache/050-ignore-cache.exp: ts: add ignore_cache/--ignore-cache tests in 30/050 * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.70-maint/220-config.exp: ts: test ignore_cache config option * doc/source/module.rst: doc: desc ignore_cache/--ignore-cache in man * INSTALL.rst, NEWS.rst: doc: desc ignore_cache/--ignore-cache in NEWS/INSTALL * doc/source/changes.rst, doc/source/design/module-cache.rst: doc: desc --ignore-cache/ignore_cache in design/changes * init/Makefile, init/fish_completion, init/zsh-functions/_module.in: init: add ignore_cache/--ignore-cache to comp script * tcl/cache.tcl.in, tcl/subcmd.tcl.in: Ignore cache file when ignore_cache enabled Do not check or evaluate cache file if ignore_cache option is enabled. Use this new option in cachebuild sub-command to ignore cache when building cache files. * tcl/init.tcl.in, tcl/main.tcl.in, tcl/report.tcl.in: Add ignore_cache configuration option Add ignore_cache configuration option that controls whether or not module cache file should be considered if available. Disabled by default. When configuration is modified it sets the MODULES_IGNORE_CACHE environment variable. --ignore-cache command line switch can be used to enable ignore_cache for the current execution. --ignore_cache is also supported for compatibility with Lmod. 2022-11-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst, doc/source/modulefile.rst: doc: desc cache in man pages * NEWS.rst: doc: desc. cache usage work in NEWS 2022-11-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/module-cache.rst, testsuite/modules.30-cache/031-cachebuild-full.exp, testsuite/modules.30-cache/040-cache-use.exp: doc/ts: cache build & use with module header options * tcl/subcmd.tcl.in: Enable mcookie_check/mcookie_version_check on cachebuild Enable both mcookie_check and mcookie_version_check configuration options when recording cache. These two options are not honored when building or using cache. 2022-11-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.30-cache/042-cache-error.exp: ts: test erroneous cache file in 30/042 * tcl/cache.tcl.in: Revert optimization filter tries for findModulesInCacheFile As the improvement obtained by either of these optimization methods was not perceptible, they are withdrawn to keep filtering code simpler. Gain was also not perceptible since the additional cost taken by cache was not perceptible in the first place. * tcl/cache.tcl.in: Second optimization filter try for findModulesInCacheFile As first try is not 100% accurate since it does not compare element root names. This second attempt first compute the list of element root names to compare, same lsearch -glob mechanism for comparison. Then unset elements whose root name has been returned by comparison. 2022-11-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/cache.tcl.in: Optimize module filtering in findModulesInCacheFile Increase filtering performance in findModulesInCacheFile: instead of testing for match each module in cache through modEqStatic, gets all module to exclude from result at once with lsearch command. * script/mb, testsuite/modules.30-cache/040-cache-use.exp: script: skip v5.2 from bench/profile in mb Ignore Modules v5.2 when benching or profiling releases not to get too much results on output. * script/mb: script: add benchmark tests for cache in mb Add cache version of avail, whatis and load benchmark tests in mb tool. * testsuite/modules.30-cache/041-cache-interp.exp: ts: test cache file interp taint protection 2022-11-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.30-cache/040-cache-use.exp: ts: add cache usage tests in 30/040 2022-11-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/cache.tcl.in, tcl/modfind.tcl.in: Distinguish empty cache result from no cache result Update structure of result returned by findModulesInCacheFile to indicate if cache load was successful or not. It is possible this way to distinguish between a *there is no cache* result and a *no match in cache* or *empty cache* results. * tcl/cache.tcl.in: Cache content filer in findModulesInCacheFile Add code in findModulesInCacheFile to filter fetched cache content to tailor it to the search query. Proceed following what is done in findModules procedure but in a reverse order (we remove elements from a full structure, rather we add elements to an empty structure). * tcl/report.tcl.in: Set time string as separate arg on reportTimer Avoid evaluating full message string to replace time pattern by execution time value. Message could contain string that could be misinterpreted by format command as time pattern. 2022-11-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/cache.tcl.in: Add modulefile-invalid cachefile command Add modulefile-invalid cachefile command used to record a invalid modulefile in modulepath. * tcl/cache.tcl.in: Add modulerc-content cachefile command Add modulerc-content cachefile command used to record a modulerc available in modulepath. Record modulerc information in memory cache variables: g_modfileContent. * tcl/cache.tcl.in: Add modulefile-content cachefile command Add modulefile-content cachefile command used to record a modulefile available in modulepath. Record modulefile information in memory cache variables: g_modfileContent and g_fileMtime. * .aspell.en.pws, tcl/cache.tcl.in, tcl/mfinterp.tcl.in, tcl/report.tcl.in: Core code for execute-cachefile Add core code for execute-cachefile procedure. Initialize an interpreter to evaluate the cache file. Reuse the same mechanisms than for modulefile or modulerc evaluation. * .aspell.en.pws, tcl/cache.tcl.in, tcl/modfind.tcl.in: Add initial code structure to evaluate cache file Add call to findModulesInCacheFile procedure in findModules to retrieve available modulefile and modulerc information from modulepath cache file. findModulesInCacheFile tests a cache file is available and evaluate it if not yet done with execute-cachefile procedure. Cache file information will then be parsed to return the information matching the search query. Initial code structure is inserted with this commit. Code for cache file evaluation and cache information tailoring will come next. 2022-11-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.30-cache/010-init_ts.exp, testsuite/modules.30-cache/030-cachebuild.exp, testsuite/modules.30-cache/031-cachebuild-full.exp, testsuite/modules.30-cache/999-cleanup.exp: ts: add/update cachebuild tests with real cache file 2022-11-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitignore, Makefile, tcl/{cache.tcl => cache.tcl.in}: Add major.minor version number in cache files Append major.minor version number to the #%Module header prefix of generated cache files. Cache file can be used only if generated for the current release of Modules used. Change cache.tcl into cache.tcl.in to get Modules release number resolved at build time. 2022-11-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/cache.tcl, tcl/modfind.tcl.in, tcl/subcmd.tcl.in: Core code for formatModuleCacheContent Implement formatModuleCacheContent procedure. findModules procedure is first called to get all files from designated modulepath directory. A cache entry is made for each result obtained from findModules with cache file commands: modulefile-content, modulerc-content and modulefile-invalid. Goal is to record all information produced by findModules to be able to replace findModules processing by cache file evaluation. Thus modulefile modification time and validity check issues are recorded in cache file. Modulerc and modulefile content is read and recorded as-is in cache file. Error occurring during file read is raised and ends cache file creation. 2022-11-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.30-cache/030-cachebuild.exp: ts: add initial cachebuild sub-cmd tests * .aspell.en.pws, tcl/cache.tcl, tcl/report.tcl.in, tcl/subcmd.tcl.in: Core code for cmdModuleCachebuild Implement cachebuild sub-command. For each modulepath enabled or passed as argument, if modulepath is writable for user build cache content for this modulepath and record it in cache file. Report message block is used to report file creation. Reports are output in normal verbosity level or higher. A warning message is emitted if modulepath is not writable for user, or if cache content to create is empty. Provide empty skeleton for formatModuleCacheContent procedure. * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.30-cache/010-init_ts.exp, testsuite/modules.30-cache/020-cacheclear.exp, testsuite/modules.30-cache/999-cleanup.exp: ts: add cacheclear sub-cmd tests 2022-11-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, tcl/cache.tcl, tcl/report.tcl.in, tcl/subcmd.tcl.in: Core code for cmdModuleCacheclear Implement cacheclear sub-command. For each modulepath enabled, check module cache file exists. If yes and if modulepath is writable for user, try to delete the cache file. Report message block is used to report file deletion. Reports are output in normal verbosity level or higher. A warning message is emitted if modulepath is not writable for user. Add tcl/cache.tcl source file to store procedure related to cache mechanism. Update Makefile to properly generate modulecmd.tcl with this new tcl file. * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc. cacheclear subcmd in NEWS/man/changes * testsuite/modulefiles.3/modbad/cacheclear, testsuite/modules.00-init/071-args.exp, testsuite/modules.50-cmds/151-module-onlytop.exp: ts: adapt existing testfiles for cacheclear sub-command * init/Makefile, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module.in: init: add cacheclear subcmd to completion scripts * .aspell.en.pws, tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Add 'cacheclear' sub-command Introduce cacheclear sub-command to delete cache file under modulepaths. This sub-command cannot be called from a modulefile evaluation context. Add sub-command empty skeleton: cmdModuleCacheclear. Sub-command accepts no option nor argument. Cache files are deleted in every enabled modulepaths. * .aspell.en.pws, NEWS.rst, doc/source/design/module-cache.rst: doc: add module-cache design doc * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc. cachebuild subcmd in NEWS/man/changes * testsuite/modulefiles.3/modbad/cachebuild, testsuite/modules.50-cmds/151-module-onlytop.exp: ts: adapt existing testfiles for cachebuild sub-command * init/Makefile, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module.in: init: add cachebuild subcmd to completion scripts * .aspell.en.pws, tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Add 'cachebuild' sub-command Introduce cachebuild sub-command to create cache file under modulepaths. This sub-command cannot be called from a modulefile evaluation context. Add sub-command empty skeleton: cmdModuleCachebuild. Sub-command accepts no option. It may take optional arguments: list of modulepath directory where to build cache. When no argument is specified, cache is built for all enabled modulepaths. 2022-11-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst, contrib/rpm/environment-modules.spec.in, doc/source/conf.py, version.inc.in: Release of version 5.2.0 2022-11-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .aspell.en.pws, NEWS.rst, doc/source/module.rst: doc: extend Collections desc in module man 2022-11-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * CONTRIBUTING.rst, INSTALL-win.rst, INSTALL.rst, contrib/vim/syntax/modulefile.vim, doc/source/cookbook/log-module-commands.rst: doc/vim: update tcl.tk links into tcl-lang.org * doc/source/module.rst: doc: desc hooks made with rename in module man 2022-11-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .aspell.en.pws, MIGRATING.rst: doc: desc. siteconfig hook var in MIGRATING * MIGRATING.rst: doc: fix path issue in sticky module examples 2022-10-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .aspell.en.pws, NEWS.rst, doc/source/module.rst, siteconfig.tcl: doc: add Site-specific configuration section in man 2022-10-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/siteconfig.tcl-1, testsuite/modulefiles.3/.modulerc, testsuite/modulefiles.3/interp/.modulerc, testsuite/modulefiles.3/interp/0, testsuite/modulefiles.3/interp/1, testsuite/modulefiles.3/interp/2, .../modules.50-cmds/560-siteconfig-interp.exp: ts: test specific vars/cmds hooks in 50/560 2022-10-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .aspell.en.pws, NEWS.rst, doc/source/conf.py: doc: desc. cmds/vars hooks in NEWS * siteconfig.tcl, tcl/mfinterp.tcl.in: Add hooks for specific vars/cmds in modulerc interp ctx Introduce hooks to define specific variables and commands for modulerc interpreter context. It relies on variables defined in siteconfig.tcl configuration file: * modulerc_extra_vars is a list of variable name and value pairs * modulerc_extra_cmds is a list of command name and procedure pairs Fixes #286 * siteconfig.tcl, tcl/mfinterp.tcl.in: Add hooks for specific vars/cmds in modulefile interp ctx Introduce hooks to define specific variables and commands for modulefile interpreter context. It relies on variables defined in siteconfig.tcl configuration file: * modulefile_extra_vars is a list of variable name and value pairs * modulefile_extra_cmds is a list of command name and procedure pairs Fixes #286 2022-10-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/modfind.tcl.in: Remove modvr default value on setLoadedModule proc 2022-10-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/025-autoinit.exp, .../modules.20-locate/130-mcookie_check_eval.exp, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/076-alias-sub.exp, testsuite/modules.50-cmds/077-alias-undo.exp, testsuite/modules.50-cmds/078-refresh.exp, testsuite/modules.50-cmds/083-info-mode.exp, testsuite/modules.50-cmds/084-info-mode-exp.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/360-restoreenv.exp, testsuite/modules.50-cmds/390-function.exp, testsuite/modules.50-cmds/391-function-undo.exp, testsuite/modules.50-cmds/400-source-sh.exp, testsuite/modules.50-cmds/540-complete.exp, testsuite/modules.50-cmds/541-uncomplete.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/210-clear.exp: ts: adapt existing tests to __MODULES_LMREFRESH * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc. refresh only modules requiring it * .aspell.en.pws, NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc. __MODULES_LMREFRESH in NEWS/man/changes * tcl/subcmd.tcl.in: Only refresh loaded modules requiring it Use the qualified refresh property to only evaluate in refresh mode the loaded modules marked with this property. Fixes #477 * tcl/mfinterp.tcl.in, tcl/modeval.tcl, tcl/modfind.tcl.in, tcl/subcmd.tcl.in: Track loaded modules qualified for refresh eval Track loaded modules that are qualified for a refresh evaluation. Refresh evaluation is only useful if module defines volatile environment changes: shell completion, alias or function. An internal state, named refresh_qualified, marks loading modules defining such volatile environment changes. Such modules are then added to the __MODULES_LMREFRESH environment variable to track this property once module is loaded. Code is also added to remove module from __MODULES_LMREFRESH when it is unloaded. * .github/workflows/differential_shellcheck.yml, .github/workflows/lint_tests.yaml, .github/workflows/linux_tests.yaml, .github/workflows/windows_tests.yaml, CONTRIBUTING.rst, Makefile, NEWS.rst, README.md, configure, doc/source/conf.py, doc/source/cookbook/modulefiles-in-git.rst, script/mpub, script/mrel: Use main as new name for default git branch 2022-10-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .github/workflows/windows_tests.yaml: gh: use cygwin-install-action rather builtin chocolatey Chocolatey version 1.2.0 shipped with latest windows 2022 image does not seem to correctly install packages from Cygwin source. So move to cygwin/cygwin-install-action to install Cygwin packages. * Makefile: install: use newer version of nagelfar (1.3.3) 2022-10-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp, .../modules.20-locate/112-hide-user-group.exp, .../modules.20-locate/117-forbid-user-group.exp, testsuite/modules.20-locate/119-hide-cascading.exp, testsuite/modules.50-cmds/287-info-usergroups.exp, testsuite/modules.50-cmds/440-module-tag.exp, testsuite/modules.70-maint/220-config.exp, testsuite/modules.70-maint/390-state.exp: ts: fix testsuite run when id cmd cannot resolve group Update testsuite to cope with user group whose name cannot be resolved. Fixes #476. 2022-10-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, NEWS.rst, init/Makefile, init/zsh.in, tcl/subcmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Revert "init: setup zsh FPATH through autoinit command" This reverts commit 59ac24e2431df012d8b22872a0e8fd1e86a20e9f. FPATH variable cannot be handled within autoinit process as this is not an environment variable. Thus when modulecmd.tcl is executed, it does not know the current value of FPATH. So if it sets FPATH during autoinit, previous value of this variable is lost. As a result FPATH must stay defined in initialization script. 2022-10-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .aspell.en.pws, NEWS.rst, doc/example/log-module-commands/siteconfig.tcl, doc/source/cookbook/log-module-commands.rst: doc: fix logging sys on log-module-command recipe Update log-module-command recipe to ensure the logging system is not broken by the current user environment. Fixes #475. 2022-10-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/005-init_ts.exp: ts: skip basheu tests on bash 5.2 bash -eu test of install testsuite are skipped on new version of bash (5.2) as internal messages currently appear when using module function with -eu options on this version. A bug as been submitted to the bash developers: https://lists.gnu.org/archive/html/bug-bash/2022-10/msg00073.html 2022-10-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .github/workflows/linux_tests.yaml: gh: update to codecov-action v3 * .github/workflows/lint_tests.yaml, .github/workflows/linux_tests.yaml, .github/workflows/windows_tests.yaml: gh: update actions/upload-artifact to v3 * .github/workflows/lint_tests.yaml, .github/workflows/linux_tests.yaml, .github/workflows/windows_tests.yaml: gh: update actions/checkout to v3 * .github/workflows/windows_tests.yaml: gh: move windows tests to windows-2022 image 2022-10-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/210-clear.exp: ts: fix env of clear subcmd test case * Makefile: install: correct arg order for date cmd on FreeBSD 2022-10-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst: doc: desc. stash env in MIGRATING 2022-10-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst: doc: desc stash in collection section of man page * testsuite/modules.70-maint/457-stash-savelist.exp: ts: test savelist subcmd with stash collections 2022-10-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, doc/source/design/stash-environment.rst, doc/source/module.rst: doc: desc. savelist stash filter in design/NEWS/man doc * tcl/subcmd.tcl.in: Filter stash collection on savelist Update savelist sub-command to filter out stash collections unless --all option is set. * testsuite/modules.70-maint/456-stash-restore.exp: ts: test restore subcmd with stash collections 2022-10-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module.in: init: update completion with stashlist output Update stashpop, stashrm and stashshow completion definition to use stashlist output. 2022-10-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp: ts: clear MODULES_QUARANTINE_SUPPORT prior tests * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.70-maint/455-stashlist.exp: ts: add stashlist sub-cmd tests * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.61-coll/020-savelist.exp, testsuite/modules.61-coll/021-savelist-search.exp, testsuite/modules.61-coll/080-access-coll.exp, testsuite/modules.70-maint/190-emptyarg.exp, testsuite/modules.70-maint/350-term_width.exp: ts: add helper procs for collection list header msgs 2022-10-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/subcmd.tcl.in: Core code for cmdModuleStashlist Implement 'stashlist' sub-command. Rely on cmdModuleSavelist but adapt this procedure to make several behavior changes when called by cmdModuleStashlist: * elements are sorted in reverse order * element index starts at 0 * when no collection target set, only return collection without a target set 2022-10-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/report.tcl.in, tcl/subcmd.tcl.in, tcl/util.tcl: Add getCallingProcName util proc Return name of calling procedure with getCallingProcName. * tcl/report.tcl.in, tcl/subcmd.tcl.in, testsuite/example/siteconfig.tcl-1: Add start_idx argument on displayElementList Add start_idx argument on displayElementList procedure to define what is the starting index for the elements to report. 2022-09-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc. stashlist subcmd in NEWS/man/changes * testsuite/modulefiles.3/modbad/stashlist, testsuite/modules.00-init/071-args.exp, testsuite/modules.50-cmds/151-module-onlytop.exp: ts: adapt existing testfiles for stashlist sub-command * init/Makefile, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module.in: init: add stashlist subcmd to completion scripts 2022-09-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .aspell.en.pws, tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Add 'stashlist' sub-command Introduce stashlist sub-command to list stash collection file. This sub-command cannot be called from a modulefile evaluation context. Add sub-command empty skeleton: cmdModuleStashlist. Sub-command accepts no argument. It accepts --terse, --long and --json options. * .aspell.en.pws, doc/source/design/stash-environment.rst: doc: desc. stashlist in stash-environment design doc 2022-09-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/config/base-config.exp, testsuite/modules.70-maint/454-stashclear.exp: ts: add stashclear sub-cmd tests * tcl/subcmd.tcl.in: Core code for cmdModuleStashclear Implement 'stashclear' sub-command. Fetch all existing stash collection for current collection target. Then call 'saverm' sub-command over all of these collection obtained. 2022-09-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/modbad/stashclear, testsuite/modules.00-init/071-args.exp, testsuite/modules.50-cmds/151-module-onlytop.exp: ts: adapt existing testfiles for stashclear subcmd * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc. stashclear subcmd in NEWS/man/changes 2022-09-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/Makefile, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module.in: init: add stashclear subcmd to completion scripts * .aspell.en.pws, tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Add 'stashclear' sub-command Introduce stashclear sub-command to delete all stash collection file. This sub-command cannot be called from a modulefile evaluation context. Add sub-command empty skeleton: cmdModuleStashclear. Sub-command accepts no argument nor option. * .aspell.en.pws, doc/source/design/stash-environment.rst: doc: desc. stashclear in stash-environment design doc * testsuite/modules.00-init/005-init_ts.exp: ts: accept version name with '/' char * testsuite/modules.70-maint/453-stashshow.exp: ts: add stashshow sub-cmd tests * tcl/subcmd.tcl.in: Core code for cmdModuleStashshow Implement 'stashshow' sub-command. Parse stash argument to get corresponding collection, then call saveshow over this collection name. * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc. stashshow subcmd in NEWS/man/changes * testsuite/modulefiles.3/modbad/stashshow, testsuite/modules.00-init/071-args.exp, testsuite/modules.50-cmds/151-module-onlytop.exp: ts: adapt existing testfiles for stashshow sub-command * init/Makefile, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module.in: init: add stashshow subcmd to completion scripts * .aspell.en.pws, tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Add 'stashshow' sub-command Introduce stashshow sub-command to display stash collection file. This sub-command cannot be called from a modulefile evaluation context. Add sub-command empty skeleton: cmdModuleStashshow. Sub-command accepts no option. It may take an optional argument: the index of the stash collection to display or the name of the stash collection. If no argument is provided, stash collection 0 is assumed. * .aspell.en.pws, doc/source/design/stash-environment.rst: doc: desc. stashshow in stash-environment design doc * testsuite/config/base-config.exp, testsuite/modules.70-maint/452-stashrm.exp: ts: add stashrm sub-cmd tests 2022-09-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/subcmd.tcl.in: Core code for cmdModuleStashrm Implement 'stashrm' sub-command. Parse stash argument to get corresponding collection, then call saverm over this collection name. * tcl/coll.tcl.in, tcl/subcmd.tcl.in: Move collection resolution from stash in dedicated proc Move collection name resolution from stash name from cmdModuleStashpop into getCollectionFromStash procedure. * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc. stashrm subcmd in NEWS/man/changes * testsuite/modulefiles.3/modbad/stashrm, testsuite/modules.00-init/071-args.exp, testsuite/modules.50-cmds/151-module-onlytop.exp: ts: adapt existing testfiles for stashrm sub-command * init/Makefile, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module.in: init: add stashrm subcmd to completion scripts * .aspell.en.pws, tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Add 'stashrm' sub-command Introduce stashrm sub-command to delete stash collection file. This sub-command cannot be called from a modulefile evaluation context. Add sub-command empty skeleton: cmdModuleStashrm. Sub-command accepts no option. It may take an optional argument: the index of the stash collection to delete or the name of the stash collection. If no argument is provided, stash collection 0 is assumed. * .aspell.en.pws, doc/source/design/stash-environment.rst: doc: desc. stashrm in stash-environment design doc 2022-09-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.70-maint/451-stashpop.exp: ts: add stashpop sub-cmd tests * tcl/subcmd.tcl.in: Core code for cmdModuleStashpop Implement 'stashpop' sub-command. First parse stash argument to determine corresponding stash collection name or raise an error if stash value is invalid. Then restore stash collection. Afterward delete stash collection. 2022-09-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/coll.tcl.in: Add no_other_target option to findCollections Add no_other_target option to findCollections procedure to filter when glob searching the result from other target. Especially useful when collections for specific targets exist but no target is currently set in user environment. This no_other_target is disabled by default. savelist sub-command currently returns other targets when no target is set. But the option will be enabled for stashpop, to ensure that the popped collection is from the current target or from the *no target* if none set. 2022-09-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc. stashpop subcmd in NEWS/man/changes * testsuite/modulefiles.3/modbad/stashpop, testsuite/modules.00-init/071-args.exp, testsuite/modules.50-cmds/151-module-onlytop.exp: ts: adapt existing testfiles for stashpop sub-command * doc/source/modulefile.rst, testsuite/modulefiles/info/commandexp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp: ts/doc: add stashpop test/doc on 'module-info command' * doc/source/design/stash-environment.rst: doc: desc. stashpop in stash-environment design doc * init/Makefile, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module.in: init: add stashpop subcmd to completion scripts * .aspell.en.pws, tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Add 'stashpop' sub-command Introduce stashpop sub-command to restore a stash collection then delete it. This sub-command cannot be called from a modulefile evaluation context. Add sub-command empty skeleton: cmdModuleStashpop. Sub-command accepts no option. It may take an optional argument: the index of the stash collection to restore or the name of the stash collection. If no argument is provided, stash collection 0 is assumed. 2022-09-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/config/base-config.exp, testsuite/modulefiles.3/foo/.modulerc, testsuite/modulefiles.3/tag/.modulerc, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.70-maint/450-stash.exp: ts: add stash sub-cmd tests 2022-09-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.61-coll/030-save.exp: ts: move unsatisfied constraint msg to init section * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.61-coll/030-save.exp: ts: move nothing to save err msg in init section 2022-09-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/060-saveshow.exp: ts: put coll not valid msg in a proc * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/050-saverm.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.61-coll/080-access-coll.exp, testsuite/modules.70-maint/240-icase.exp, testsuite/modules.70-maint/440-reset.exp: ts: put coll not found msg in a proc 2022-09-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/modfind.tcl.in: Fix init property unserialization Update getLoadedModulePropertyList to apply unserialization translation map also for property not requiring sub-element split, like init. 2022-09-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/subcmd.tcl.in: Core code for cmdModuleStash Implement stash sub-command. First check that a difference exists between current environment and initial one. If so, save current environment in a collection, then reset to initial environment. 2022-09-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/coll.tcl.in, tcl/subcmd.tcl.in: Reword findCollections to swap default coll by __init__ Update findCollections procedure to add swap_by_init argument, disabled by default. When enabled if specified collection is not found, change it to __init__. Helps to remove duplicate code from cmdModuleSaveshow and cmdModuleRestore. 2022-09-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/coll.tcl.in, tcl/subcmd.tcl.in: Return is_tags_diff from getDiffBetweenCurEnvAndColl Update getDiffBetweenCurEnvAndColl to also return is_tags_diff information. is_tags_diff indicates if loaded modules that matches modules in collection have different tags set. * tcl/util.tcl: Add unordered_lists_compared arg on getDiffBetweenArray Update getDiffBetweenArray procedure to add unordered_lists_compared argument (disabled by default). When enabled, array elements are considered unordered list, so value comparison is adapted to check differences between two lists. * tcl/util.tcl, testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: Add notset_equals_empty arg to getDiffBetweenArray Update getDiffBetweenArray procedure to add notset_equals_empty argument (disabled by default). When enabled not-set element in array is equivalent to element set to an empty value. 2022-09-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/coll.tcl.in, tcl/subcmd.tcl.in: Create getDiffBetweenCurEnvAndColl from cmdModuleRestore Create getDiffBetweenCurEnvAndColl procedure from code of cmdModuleRestore to analyze a collection content and produce differences compared to current environment. 2022-09-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc. stash subcmd in NEWS/man/changes * testsuite/modulefiles.3/modbad/stash, testsuite/modules.00-init/071-args.exp, testsuite/modules.50-cmds/151-module-onlytop.exp: ts: adapt existing testfiles for stash sub-command * doc/source/modulefile.rst, testsuite/modulefiles/info/commandexp, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.61-coll/030-save.exp: ts/doc: add stash test/doc on 'module-info command' * init/Makefile, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module.in: init: add stash subcmd to completion scripts * .aspell.en.pws, tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Add 'stash' sub-command Introduce stash sub-command to save current environment and restore initial one. This sub-command cannot be called from a modulefile evaluation context. Add sub-command empty skeleton: cmdModuleStash. Sub-command accepts no argument nor option. * .aspell.en.pws, doc/source/design/initial-environment.rst, doc/source/design/stash-environment.rst: doc: add stash-environment design doc 2022-09-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .cirrus.yml: cirrus: test FreeBSD 13.1 instead of eol 13.0 2022-09-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/lint.00-init/005-init_ts.exp: ts: do not lint lib/config.guess generated file * .aspell.en.pws, NEWS.rst, testsuite/lint.00-init/005-init_ts.exp: ts: temporarily ignore remaining shellcheck reports Make 'mt lint' pass with remaining shellcheck reports on sh, bash and ksh scripts. Waiting for another contribution to fix the remaining warnings and notices. Related: #470 * NEWS.rst, init/profile.sh.in: init: only source sh or bash init if BASH var is set Update profile script for sh-like shells to only source sh or bash initialization script when BASH environment variable is found set. Fixes #473 2022-09-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * CONTRIBUTING.rst, NEWS.rst: doc: desc. script/mb in CONTRIBUTING 2022-09-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * CONTRIBUTING.rst: doc: desc lint testsuite in CONTRIBUTING * .aspell.en.pws, CONTRIBUTING.rst: doc: desc. script/mt utility in CONTRIBUTING * CONTRIBUTING.rst: doc: desc. quick testsuite mode in CONTRIBUTING 2022-09-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/envmngt.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Update autoinit sh code to fix SC2166/SC2086 Apply on auto-generated autoinit code for sh-kind shells the same changes than initialization scripts to fix the SC2166 and SC2086 issues reported by ShellCheck linter. Autoinit generated code is thus kept in line with initialization script code. 2022-08-31 Lukáš Zaoral <lzaoral@redhat.com> * configure: lint(ShellCheck): fix SC2163 warning According to ShellCheck's documentation: export takes a variable name, but ShellCheck has noticed that you give it an expanded variable instead. Remove $/${} for that, or use ${var?} to quiet. Related: https://www.shellcheck.net/wiki/SC2163 Related: #470 * init/profile.sh.in, script/add.modules.in, script/mkroot: lint(ShellCheck): fix SC2046 warning According to ShellCheck's documentation: When command expansions are unquoted, word splitting and globbing will occur. This often manifests itself by breaking when filenames contain spaces. Related: https://www.shellcheck.net/wiki/SC2046 Related: #470 * configure, .../example-sessions/bar-defaults.sh, .../example-sessions/bar-loads.sh, .../example-sessions/bar-switch.sh, .../example-sessions/foo-avail1.sh, .../example-sessions/foo-avail2.sh, .../example-sessions/foo-defaults.sh, .../example-sessions/foo-loads.sh, .../example-sessions/foo-switch.sh, .../example-sessions/modavail.sh, .../example-sessions/modversion.sh, .../example-sessions/ompi-defaults.sh, .../example-sessions/ompi-loads1.sh, .../example-sessions/ompi-switch.sh, .../example-sessions/ompi-switch.sh.m431, init/bash.in, init/bash_completion.in, init/ksh.in, init/sh.in, script/add.modules.in, script/commit-msg, script/envml, script/mkroot, script/mt, script/pre-commit, testsuite/bin/install_test_sh, testsuite/systest: lint(ShellCheck): fix SC2086 info diagnostic Some variables, that were unquoted intentionally were converted to arrays. According to ShellCheck's documentation: Quoting variables prevents word splitting and glob expansion, and prevents the script from breaking when input contains spaces, line feeds, glob characters and such. Related: https://www.shellcheck.net/wiki/SC2086 Related: #470 * configure, doc/example/source-script-in-modulefile/bar-2.1/bar-setup.sh, doc/example/source-script-in-modulefile/foo-1.2/foo-setup.sh: lint(ShellCheck): fix SC2155 warning According to ShellCheck's documentation: In the original code, the return value of mycmd in $(mycmd) is ignored, and export will instead always return true. This may prevent conditionals, set -e and traps from working correctly. Related: https://www.shellcheck.net/wiki/SC2155 Related: #470 2022-08-26 Lukáš Zaoral <lzaoral@redhat.com> * doc/example/source-script-in-modulefile/bar-2.1/bar-setup.sh, doc/example/source-script-in-modulefile/foo-1.2/foo-setup.sh: lint(ShellCheck): fix SC2128 warning These occurrences do not cause any problems described below but it's better to be verbose that we indeed want to access the first array element. According to ShellCheck's documentation: When referencing arrays, $myarray is equivalent to ${myarray[0]} -- it results in only the first of multiple elements. Related: https://www.shellcheck.net/wiki/SC2128 Related: #470 * script/envml, testsuite/cmd.exe: lint(ShellCheck): fix SC2048 warning According to ShellCheck's documentation: Use "$@" (with quotes) to prevent whitespace problems. $* and ${array[*]}, unquoted, is subject to word splitting and globbing. Related: https://www.shellcheck.net/wiki/SC2048 Related: #470 * init/bash_completion.in: lint(ShellCheck): fix SC2178 warning These occurrences do not seem to cause any problems described below but let's still fix it for the sake of consistency within this script. According to ShellCheck's documentation: ShellCheck noticed that you have used a variable as an array, but then assign it a string. array=foo is equivalent to array[0]=foo, and leaves the rest of the elements unaffected. Related: https://www.shellcheck.net/wiki/SC2178 Related: #470 2022-08-25 Lukáš Zaoral <lzaoral@redhat.com> * configure, init/bash.in, init/bash_completion.in, init/ksh.in, init/sh.in, script/envml, testsuite/bin/install_test_sh: lint(ShellCheck): fix SC2166 warning According to ShellCheck's documentation: -a and -o in [ .. ] test expressions are not well defined, and can cause incorrect results when arguments start with dashes or contain !. Related: https://www.shellcheck.net/wiki/SC2166 Related: #470 * init/bash_completion.in: lint(ShellCheck): fix SC1035 error According to ShellCheck's documentation: Bourne shells are very whitespace sensitive. Adding or removing spaces can drastically alter the meaning of a script. Related: https://www.shellcheck.net/wiki/SC1035 Related: #470 * script/envml, script/mt: lint(ShellCheck): fix SC2068 error According to ShellCheck's documentation: Double quotes around $@ and ${array[@]}) prevent globbing and word splitting of individual elements, while still expanding to multiple separate arguments. Related: https://www.shellcheck.net/wiki/SC2068 Related: #470 * doc/example/compiler-etc-dependencies/example-sessions/common_code.sh, init/bash.in, init/bash_completion.in, init/ksh.in, init/profile.sh.in, init/sh.in: lint(ShellCheck): fix SC2148 error According to ShellCheck's documentation: Different shells support different features. To give effective advice, ShellCheck needs to know which shell your script is going to run on. Related: https://www.shellcheck.net/wiki/SC2148 Related: #470 * init/bash.in, init/ksh.in, init/sh.in: init: add vim modeline to {,b,k}sh scripts ... to enable correct syntax highlighting. 2022-08-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .aspell.en.pws, NEWS.rst: doc: desc. usage and --help work for scripts in NEWS * script/mtreview: script: add usage msg and --help option on mtreview * script/mlprof: script: add usage msg and --help option on mlprof * script/mt: script: add usage msg and --help option on mt 2022-08-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp: ts: accept version name with '_' char * script/mb: script: keep old releases among benched versions in mb Update mb script to skip several releases and be able to run bench or profiling on old and recent releases. Versions 4.1, 4.3, 4.5, 4.7 and 5.1 are retained for bench mode. 4.5, 4.7 and 5.1 are retained for profile mode. * script/mb: script: add usage msg and --help option on mb * script/mrel: script: add usage msg and --help option on mrel * script/mpub: script: add usage msg and --help option on mpub 2022-08-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, tcl/envmngt.tcl.in, tcl/init.tcl.in, tcl/main.tcl.in, tcl/mfinterp.tcl.in, tcl/modeval.tcl, tcl/modfind.tcl.in, tcl/modspec.tcl, tcl/report.tcl.in, tcl/subcmd.tcl.in, testsuite/lint.00-init/005-init_ts.exp: Fix notices reported by linter on tcl source files All linter reports are now fixed. Remove specific linter rule for modulecmd.tcl in lint testsuite. * .aspell.en.pws, .github/workflows/linux_tests.yaml: gh: migrate linux tests to ubuntu-20.04 ubuntu-18.04 is being deprecated and will be removed in a few weeks. For Tcl 8.5 jobs, the Tcl version has to be deployed manually. * tcl/envmngt.tcl.in, tcl/init.tcl.in, tcl/main.tcl.in, tcl/mfinterp.tcl.in, tcl/modfind.tcl.in, tcl/modspec.tcl, tcl/report.tcl.in, tcl/subcmd.tcl.in: Fix too long line issues on Tcl source files * .github/workflows/lint_tests.yaml: gh: add lint-tests workflow * tcl/envmngt.tcl.in, tcl/init.tcl.in, tcl/main.tcl.in, tcl/mfinterp.tcl.in, tcl/modfind.tcl.in, tcl/modspec.tcl, tcl/report.tcl.in, tcl/subcmd.tcl.in: Fix warnings reported by linter on tcl source files 2022-08-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/coll.tcl.in, tcl/main.tcl.in, tcl/mfinterp.tcl.in, tcl/modspec.tcl, tcl/report.tcl.in, tcl/subcmd.tcl.in, tcl/util.tcl: Fix errors reported by linter on tcl source files Use Nagelfar comments to help linter to correctly understand dynamic aspects of the code. * init/tcl.in: init: fix too long line issues in tcl * script/mb, script/mrel, script/nglfar2ccov: script: fix too long line issues in mb/mrel/nglfar2ccov * script/mlprof, script/mrel, script/mtreview: script: fix lint issues on mrel/mlprof/mtreview * testsuite/lint.00-init/030-tcl.exp: ts: add tcl script lint tests * Makefile: Remove testsyntax Makefile target testsyntax Makefile target is removed. testlint testsuite has to be used instead. * testsuite/lint.00-init/022-ksh.exp: ts: add ksh script lint tests * testsuite/lint.00-init/021-bash.exp: ts: add bash script lint tests * testsuite/lint.00-init/020-sh.exp: ts: add sh script lint tests * .aspell.en.pws, .gitignore, Makefile, NEWS.rst, script/mt, testsuite/config/unix.exp, testsuite/lint.00-init/005-init_ts.exp, testsuite/lint.00-init/006-procs.exp, testsuite/lint.00-init/011-save_test_env.exp: ts: add lint testsuite 2022-08-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/readme.txt, contrib/scripts/resetenv, contrib/scripts/resetgnome, contrib/template/.aliases, contrib/template/.bash_profile, contrib/template/.bashrc, contrib/template/.cshrc, contrib/template/.fvwm2rc, contrib/template/.login, contrib/template/.logout, contrib/template/.mailcap, contrib/template/.mime.types, contrib/template/README.dotfiles, contrib/template/resetenv.conf: contrib: remove unmaintained template/script content Remove the contrib template and scripts files as they are not maintained since a long time in this repository and seem to be deprecated. 2022-08-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst: doc: desc initial environment in MIGRATING 2022-08-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/changes.rst: doc: fix changed/new features dispatch in changes doc 2022-08-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/initial-environment.rst, doc/source/design/module-tags.rst, doc/source/design/sticky-modules.rst: doc: desc. sticky unload on restore in design notes * doc/source/changes.rst: doc: use bullet list for concise desc. in change doc * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc. sticky unload on restore in NEWS/man/changes 2022-08-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/460-sticky.exp, testsuite/modules.50-cmds/462-sticky-corner.exp, testsuite/modules.70-maint/440-reset.exp: ts: adapt existing tests for sticky unload on restore * tcl/mfinterp.tcl.in, tcl/subcmd.tcl.in: Allow unload of sticky modules on restore sub-cmd Allow the unload of sticky modules when restoring collection. Goal is to be able to restore designated collection as it was saved, thus without the loaded sticky modules. If such collections were saved without the sticky modules in it, it means that these sticky modules can safely be unloaded when moving to the collection state. As a result, using the --force option is of no use for restore sub-command. This change does not impact super-sticky modules. Such modules cannot be unloaded during a restore, even if forced. With this change, behavior of restore sub-command with sticky modules is aligned with Lmod. 2022-08-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, doc/source/design/initial-environment.rst: doc: add initial-environment design notes 2022-08-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/440-reset.exp: ts: add reset_target_state tests in 70/440 * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc. reset_target_state in NEWS/man/changes 2022-08-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.70-maint/220-config.exp: ts: test reset_target_state config option * init/Makefile, init/fish_completion, init/zsh-functions/_module.in: init: add reset_target_state config to completion script * tcl/init.tcl.in, tcl/subcmd.tcl.in: Add reset_target_state configuration option Add reset_target_state configuration option that defines the environment state restored by the reset sub-command. Equals __init__ by default, which means reset restore the initial environment by default. Other valid values are __purge__, which means target state is purged environment, and any existing collection name. 2022-08-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, doc/source/changes.rst, doc/source/module.rst, testsuite/modules.61-coll/060-saveshow.exp: doc: desc module saveshow when no default in NEWS/man/changes * testsuite/modules.61-coll/060-saveshow.exp: ts: update/add tests for 'module saveshow' behavior * tcl/subcmd.tcl.in: Show initial env when no default collection exists Update saveshow sub-command to display initial environment when no specific collection is asked and default collection does not exist. * testsuite/example/initrc.in, testsuite/modules.70-maint/120-autoinit.exp: ts: test 'module restore' without arg in initrc * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc module restore when no default in NEWS/man/changes * testsuite/modules.61-coll/040-restore.exp: ts: update/add tests for 'module restore' behavior * tcl/subcmd.tcl.in: Restore initial env when no default collection exists Update restore sub-command to restore initial environment when no specific collection is asked and default collection does not exist. * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc. module restore __init__ in NEWS/man/changes * testsuite/modules.70-maint/310-sh-to-mod.exp: ts: fix binpath add detection in 70/310 * tcl/main.tcl.in, tcl/report.tcl.in: Same special treatment for reset than restore subcmd Reports loads/unloads like restore sub-command. No auto unload of modules if auto_handling is disabled. * testsuite/modulefiles.3/reset/1, testsuite/modulefiles.3/reset/2, testsuite/modules.70-maint/440-reset.exp: ts: add auto unload test during reset sub-cmd in 70/440 2022-08-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/440-reset.exp: ts: add restore __init__ tests in 70/440 * testsuite/example/initrc.in, testsuite/modulefiles.3/foo/.modulerc, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/440-reset.exp: ts: add reset sub-cmd tests 2022-08-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/initrc.in, testsuite/modulefiles.3/variant/1.0, testsuite/modules.70-maint/120-autoinit.exp: ts: add autoinit tests for __MODULES_LMINIT * testsuite/modules.70-maint/210-clear.exp: ts: add clear tests for __MODULES_LMINIT * .github/workflows/linux_tests.yaml: gh: add missing xrdb tool to test x-resource on bionic * testsuite/modules.00-init/005-init_ts.exp: ts: add X11 setup state info to test log 2022-08-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.70-maint/120-autoinit.exp: ts: adapt autoinit tests for __MODULES_LMINIT Fix several issues in 70/120 test case on the way. * .aspell.en.pws, tcl/coll.tcl.in, tcl/modfind.tcl.in, tcl/subcmd.tcl.in: Core code for cmdModuleReset Implement reset sub-command as a 'module restore __init__'. Where __init__ designates the virtual init collection made of the initial environment state described in __MODULES_LMINIT. readCollectionContent has been split to create parseCollectionContent procedure which analyzes collection content passed as argument. When __init__ collection is designated, cmdModuleRestore do not check collection files but parseCollectionContent based on value fetched from __MODULES_LMINIT environment variable. * testsuite/modulefiles.3/modbad/reset, testsuite/modules.00-init/071-args.exp, testsuite/modules.50-cmds/151-module-onlytop.exp: ts: add tests for mod-to-sh sub-command * doc/source/modulefile.rst, testsuite/modulefiles/info/commandexp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp: ts/doc: add reset test/doc on 'module-info command' * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc. reset subcmd in NEWS/man/changes * .aspell.en.pws, tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Add 'reset' sub-command Introduce reset sub-command to restore initial environment state. This sub-command cannot be called from a modulefile evaluation context. Add sub-command empty skeleton: cmdModuleReset. Sub-command accepts no argument nor option. 2022-08-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/Makefile, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module.in: init: add reset subcmd to completion scripts * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc. __MODULES_LMINIT in NEWS/man/changes * .aspell.en.pws, tcl/modfind.tcl.in, tcl/subcmd.tcl.in: Record init state in __MODULES_LMINIT During the autoinit sub-command, record the initial loaded state (state obtained after evaluating modulespath and initrc initialization files) in the __MODULES_LMINIT environment variable. The initial loaded state is formed as a collection content, describing the enabled modulepaths and the loaded modules with the tags applied to these modules. __MODULES_LMINIT is a colon-separated list. Each entry corresponding to a 'module use' or 'module load' collection line. 2022-08-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/coll.tcl.in, tcl/main.tcl.in, tcl/mfinterp.tcl.in, tcl/modeval.tcl, tcl/modfind.tcl.in, tcl/subcmd.tcl.in, testsuite/modules.00-init/120-siteconfig.exp: Fetch loaded mod props with getLoadedModulePropertyList Create the getLoadedModulePropertyList procedure to fetch the different loaded module properties. getLoadedModulePropertyList replaces the specific procedure used for each property kind. 2022-08-24 Jan Macku <jamacku@redhat.com> * .github/workflows/differential_shellcheck.yml: ci(lint): add shell linter - Differential ShellCheck It performs differential ShellCheck scans and report results directly in pull request. documentation: https://github.com/redhat-plumbers-in-action/differential-shellcheck 2022-08-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, doc/source/modulefile.rst: doc: add shell support section in modulefile man 2022-08-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * README.md, doc/source/changes.rst, doc/source/index.rst, doc/source/module.rst, doc/source/modulefile.rst: doc: fix missing ref to cmd shell support 2022-08-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst: doc: desc changes on --all/--force options in man * doc/source/module.rst: doc: reword --auto/--no-auto option desc. in man --auto and --no-auto options are global to all sub-commands evaluating modulefile in load or unload mode. Rewrite the description of these option in module(1) man not to update them each time a new load or unload sub-command is introduced (as --auto and --no-auto are not changed). * testsuite/modules.61-coll/021-savelist-search.exp: ts: add savelist --all tests 2022-08-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc. --all option on savelist in NEWS/man/changes * tcl/coll.tcl.in, tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: List coll from any target with --all opt on savelist Add support for --all command-line option for savelist sub-command. When set, all collections are reported and not only those for currently defined collection target. 2022-08-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, tcl/subcmd.tcl.in, testsuite/modules.00-init/140-color.exp: Highlight all savelist subcmd search patterns Refactor on the way a little bit cmdModuleSavelist. * NEWS.rst, tcl/report.tcl.in, tcl/subcmd.tcl.in, testsuite/modules.00-init/140-color.exp: Highlight all list subcmd search patterns * testsuite/modules.61-coll/021-savelist-search.exp, testsuite/modules.70-maint/290-json.exp: ts: test pattern search on savelist sub-cmd 2022-08-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc. savelist filtering in NEWS/changes/man * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/071-args.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.61-coll/020-savelist.exp, testsuite/modules.61-coll/080-access-coll.exp, testsuite/modules.70-maint/190-emptyarg.exp, testsuite/modules.70-maint/350-term_width.exp: ts: adapt existing tests now savelist accepts args * tcl/init.tcl.in, tcl/subcmd.tcl.in: Add search capabilities to savelist subcmd When one or multiple strings are passed to the savelist sub-command, only output the collections that match at least one of this string (OR operation). Sub-command header message is adapted when strings are passed to the sub-command. However same header message is reported if there is no saved collection to report from the start. Search capabilities rely on the modEq comparison procedure, so it takes into account the search_match mode (starts-with/contains) and the insensitive case search mode. Icase mode is set to search by default for savelist sub-command. * tcl/subcmd.tcl.in: Use coll name/file array rather list in cmdModuleSavelist 2022-08-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Allow search match option on savelist subcmd Allow to pass the search match options (-S/-C) to the savelist sub-command. * tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Allow collection name as argument to savelist subcmd Allow the savelist sub-command to receive collection name as argument. 2022-08-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/modspec.tcl, tcl/subcmd.tcl.in: Unset mod spec on source subcmd if file exists In case module specification corresponds to a full path name file, unset parsed module specification on source sub-command. It is done not to confuse specific character in file path name (like '+') with module variant specification. 2022-07-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, doc/source/modulefile.rst: doc: clarify set-alias only define shell alias * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/170-cwd.exp, testsuite/modules.70-maint/090-source.exp: ts: add avail modfile source tests in 70/090 * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc. arg update on source subcmd in changes/man/news * tcl/main.tcl.in, tcl/subcmd.tcl.in: Allow module to be specified on source subcmd Update source sub-command to accept module specification as argument. File path stay the main specification kind. Which means if a file foo/1.0 exists, this file is sourced and not the modulefile foo/1.0 in enabled modulepath. Fixes #424. 2022-08-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/modspec.tcl: Record raw arg with parsed module spec Update module specification parsing to record the raw argument translated by specification analysis. Add getRawArgumentFromVersSpec procedure to fetch this raw spec from recorded analyzed module specification. 2022-07-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/envmngt.tcl.in, tcl/init.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Check state is defined before unset in unsetState * testsuite/config/base-config.exp, testsuite/modulefiles.3/mod-to-sh/1.0, testsuite/modulefiles.3/mod-to-sh/1.1, testsuite/modulefiles.3/mod-to-sh/2.0, testsuite/modulefiles.3/modbad/mod-to-sh, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/071-args.exp, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.70-maint/430-mod-to-sh.exp: ts: add tests for mod-to-sh sub-command 2022-07-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst: doc: desc mod-to-sh in NEWS/MIGRATING 2022-07-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst: doc: desc. mod-to-sh subcmd in module man * NEWS.rst, doc/source/module.rst: doc: fix subcmd list using --auto/--no-auto/--force opts * doc/source/design/add-new-config-option.rst, doc/source/design/add-new-sub-command.rst, .../design/advanced-module-version-specifiers.rst, doc/source/design/control-mode-behaviors.rst, .../design/default-latest-version-specifiers.rst, doc/source/design/extended-default.rst, doc/source/design/hide-or-forbid-modulefile.rst, doc/source/design/insensitive-case.rst, doc/source/design/lmod-tcl-modulefile-compat.rst, doc/source/design/module-selection-contexts.rst, doc/source/design/module-tags.rst, doc/source/design/output-configuration.rst, .../design/source-shell-script-in-modulefile.rst, doc/source/design/sticky-modules.rst, doc/source/design/variants.rst: doc: fix indent in design documents * doc/source/design/add-new-config-option.rst, doc/source/design/add-new-sub-command.rst, doc/source/design/advanced-module-version-specifiers.rst, doc/source/design/control-mode-behaviors.rst, doc/source/design/default-latest-version-specifiers.rst, doc/source/design/extended-default.rst, doc/source/design/hide-or-forbid-modulefile.rst, doc/source/design/insensitive-case.rst, doc/source/design/lint-sub-command.rst, doc/source/design/lmod-tcl-modulefile-compat.rst, doc/source/design/magic-cookie-check.rst, doc/source/design/module-selection-contexts.rst, doc/source/design/module-tags.rst, doc/source/design/output-configuration.rst, doc/source/design/shell-completion.rst, doc/source/design/source-shell-script-in-modulefile.rst, doc/source/design/sticky-modules.rst, doc/source/design/variants.rst: doc: add vim settings at end of design documents * .aspell.en.pws, doc/source/cookbook/compiler-etc-dependencies.rst, doc/source/cookbook/ensure-user-qualify-modules.rst, doc/source/cookbook/expose-procs-vars-to-modulefiles.rst, doc/source/cookbook/hide-and-forbid-modules.rst, doc/source/cookbook/inhibit-report-info.rst, doc/source/cookbook/log-module-commands.rst, doc/source/cookbook/module-info-name-return-basename.rst, doc/source/cookbook/modulefiles-in-git.rst, doc/source/cookbook/modulepaths-persist-over-sudo.rst, doc/source/cookbook/new-features-without-breaking-old-module.rst, doc/source/cookbook/reduce-io-load.rst, doc/source/cookbook/source-script-in-modulefile.rst, doc/source/cookbook/sticky-modules.rst, doc/source/cookbook/test-modulefiles.rst, doc/source/cookbook/tips-for-code-reuse.rst, doc/source/cookbook/top-priority-values.rst, doc/source/cookbook/unload-firstly-loaded.rst: doc: add vim settings at end of cookbook documents * doc/source/cookbook/tips-for-code-reuse.rst: doc: fix trailing wspace & list ident in tips-for-code-reuse 2022-07-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, doc/source/design/mod-to-sh-sub-command.rst: doc: add mod-to-sh subcmd design notes * NEWS.rst: doc: desc. lint-sub-command design notes in NEWS 2022-07-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/210-clear.exp, testsuite/modules.70-maint/280-ml.exp: ts: update clear subcmd tests as only set vars are unset * testsuite/modules.00-init/100-pager.exp, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/150-access-init.exp, testsuite/modules.70-maint/070-display.exp: ts: adapt existing tests to new shelltype state setup * tcl/subcmd.tcl.in: Silence message report on mod-to-sh subcmd When performing a mod-to-sh sub-command make message report silent not to mix these messages with the produced shell code that will be output on the message channel. If a debugging verbosity is defined (trace mode or above), message report is left as is. * tcl/envmngt.tcl.in: Filter Modules-specific env var from mod-to-sh result When running modulefile evaluation for mod-to-sh sub-command, removes all Modules-specific environment variable from result to only report the environment changes done by modulefile, not the Modules load context. 2022-07-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/envmngt.tcl.in, tcl/subcmd.tcl.in: Get list of Modules-specific env var in glob form Add getModulesEnvVarGlobList procedure to get all Modules-specific environment variable in glob form. Update clear and state sub-command to rely on this procedure. With this change clear sub-command only unset Modules-specific environment variables that are set. * NEWS.rst, tcl/subcmd.tcl.in: Clear pushenv stacks on clear subcmd * tcl/envmngt.tcl.in, tcl/subcmd.tcl.in: Core code for cmdModuleModToSh Add code for mod-to-sh sub-command. Introduce modtosh_real_shell shell to save evaluation shell set for modulecmd.tcl. Then shell set for mod-to-sh is set as target shell for shell code production. Modulefiles specified are loaded through cmdModuleLoad. Generated shell code is then sent to the report message channel (stderr) by renderSettings. Shell code is then cleared and modulecmd.tcl evaluation shell is restored to get final evaluation status on regular shell code output channel (stdout). * tcl/envmngt.tcl.in, tcl/main.tcl.in: Rename cleanupAndExit into flushAndExit * tcl/envmngt.tcl.in, tcl/init.tcl.in, tcl/main.tcl.in: Deduce shelltype state value from shell state Add initStateShellType procedure to set shelltype state when first retrieving its value (with getState). shelltype is set based on value set for shell state. 2022-07-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/main.tcl.in, tcl/report.tcl.in: Move report msg flush in dedicated proc Create reportFlush, procedure that output the final report messages, flush the message channel and close it. Make cleanupAndExit procedure call reportFlush rather implementing these actions locally. * tcl/envmngt.tcl.in, tcl/main.tcl.in, tcl/mfinterp.tcl.in: Output produced shell code in one puts call Instead of outputting shell code to sdtout for each line, collect all produced shell code in a list variable (g_shcode_out) and output all the code in a single puts call at the end of module command execution. Create a specific renderFlush procedure to make the puts to stdout as output could occur after renderSettings but also after reportErrorAndExit and the exit catch branch in the main procedure. renderFlush is called in cleanupAndExit procedure, as it is always run in the end of the execution whatever if everything goes well or if error occurs. Code of the putsModfileCmd procedure is also adapted to build list of message to output to stdout with a flag to know if end-of-line should be added at end of message. Previously this procedure was listing arguments to directly pass to puts calls. 2022-07-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/modulefile.rst, testsuite/modulefiles/info/command, testsuite/modulefiles/info/commandexp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp: ts/doc: add mod-to-sh test/doc on 'module-info command' 2022-07-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/add-new-sub-command.rst, doc/source/modulefile.rst: doc: desc. subcmd in modulefile(4) if avail from this ctx * doc/source/changes.rst: doc: desc. mod-to-sh in changes * doc/source/design/add-new-sub-command.rst: doc: add subcmd to linter db if callable from modfile * init/Makefile, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module.in: init: add mod-to-sh subcmd to completion scripts * tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Add 'mod-to-sh' sub-command Introduce mod-to-sh sub-command to output shell code corresponding to the environment changes of designated modulefiles. This sub-command cannot be called from a modulefile evaluation context. Add sub-command empty skeleton: cmdModuleModToSh. Sub-command accepts --icase, --auto/--no-auto and --force options. Fixes #447. * CONTRIBUTING.rst: doc: fix misplaced anchor in CONTRIBUTING 2022-07-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .aspell.en.pws, Makefile, NEWS.rst, doc/Makefile, init/Makefile: install: use install rather mkdir or cp Use install command rather mkdir or cp to apply regular file mode when installing Modules. A specific umask configuration set in the current environment will not impact modes set on installed files. Follow same approach than Makefiles generated by autotools, with an INSTALL Makefile variable. 2022-07-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .aspell.en.pws, MIGRATING.rst: doc: desc. lint subcmd and options in MIGRATING Closes #451. 2022-07-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc. lint subcmd and options in NEWS * Makefile, tcl/subcmd.tcl.in: Disable nagelfar syntaxdb/plugin usage if addons disabled * .aspell.en.pws, doc/source/design/lint-sub-command.rst: doc: desc. lint subcmd in design 2022-07-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/rpm/environment-modules.spec.in: rpm: recommends nagelfar installation Now nagelfar is available on Fedora and EPEL, recommends its installation to be able to lint modulefiles. 2022-07-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/add-new-sub-command.rst: doc: update linter scripts when adding new subcmd 2022-07-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/changes.rst, doc/source/module.rst: doc: desc lint subcmd in man/changes 2022-07-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/030-options.exp, testsuite/modules.70-maint/420-lint.exp: ts: add module lint install test 2022-07-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile: install: add rules to deploy global rc linter plugin * contrib/nagelfar/plugin_globalrc.tcl, tcl/subcmd.tcl.in: Lint global rc file specifically Global rc file are evaluated as modulefile but it is not recommended to use commands that change user environment in such file. When linting global rc file, the modulefile syntax database is used but a specific plugin is set to warn against non-recommended usages. 2022-07-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/main.tcl.in, tcl/modfind.tcl.in, tcl/subcmd.tcl.in: Lint global RC files When no argument is provided to lint sub-command, also lint all existing and readable global RC files. When arguments are provided to lint, test if resolved files are global RC files. If so, lint them as modulerc files instead of modulefile. The getGlobalRcFileList procedure has been created from code present in runModulerc procedure. The new procedure return the list of existing and readable global RC files. 2022-07-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/subcmd.tcl.in: Detect whether file to lint is modulefile or modulerc When a file path is provided as argument, detect if it is a modulerc or a modulefile to accurately lint this file. * .aspell.en.pws, INSTALL.rst: doc: desc. --nagelfardatadir/--enable-nagelfar-addons * contrib/rpm/environment-modules.spec.in: rpm: install Modules-specific Nagelfar linter addons * Makefile, Makefile.inc.in, configure, tcl/subcmd.tcl.in: install: add --nagelfardatadir/--enable-nagelfar-addons Add --nagelfardatadir and --enable-nagelfar-addons installation option to control whether or not Modules-specific Nagelfar files need to be installed and in what location. 2022-06-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/lint/.modulerc, testsuite/modulefiles.3/lint/1.0, testsuite/modulefiles.3/lint/1.1, testsuite/modulefiles.3/lint/1.2, testsuite/modulefiles.3/lint/1.3, testsuite/modulefiles.3/lint/1.4, testsuite/modulefiles.3/lint/2.0, testsuite/modulefiles.3/modbad/lint, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.70-maint/420-lint.exp: ts: add tests for lint sub-command 2022-07-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/subcmd.tcl.in: Use specific-plugin when linting with Nagelfar Use the specific plugin to lint modulefile or the one to lint modulerc when Tcl linter is Nagelfar. * contrib/nagelfar/plugin_modulefile.tcl, contrib/nagelfar/plugin_modulerc.tcl: nagelfar: add plugins to lint modulefile/modulerc Create a Nagelfar plugin to lint modulefile and another one to lint modulerc. These plugins help to report usage of deprecated, not implemented or not recommended commands or variables. Also help to handle --option=value argument form. 2022-06-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/modulefiles/module-git, contrib/modulefiles/use.own: contrib: fix lint warning on example modulefiles * tcl/subcmd.tcl.in: Use Nagelfar syntax db located in contrib directory * contrib/nagelfar/syntaxdb_modulefile.tcl, contrib/nagelfar/syntaxdb_modulerc.tcl: Add specific syntaxdb for modulefile and modulerc Add Nagelfar syntax databases to lint modulefile and another one to lint modulerc. 2022-06-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/subcmd.tcl.in: Lint modulerc files when no arg provided In addition to the modulefiles available from enabled modulepaths, also lint the modulerc files from these modulepaths. Set specific command for linting modulerc files, with a different syntax db file when Nagelfar is used. * tcl/subcmd.tcl.in: Use syntax database when linting with Nagelfar When Tcl linter is Nagelfar, use a specific syntax database to lint modulefiles. * .aspell.en.pws, tcl/subcmd.tcl.in: Lint all avail modfile when no arg provided When no argument is provided to the lint sub-command, resolve all modulefiles that current user has access to and lint all these files. Update cmdModuleLint to first gather the list of all files to lint, then lint these files. 2022-06-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .github/workflows/linux_tests.yaml: gh: add --with-tcl-linter on a test case 2022-06-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/report.tcl.in, tcl/subcmd.tcl.in: Move linter output report in dedicated proc Create displayLinterOutput procedure to handle the parsing and output of each linter messages. Current code handles specific output from Nagelfar linter and generic error report for other programs set as linter. * configure: install: warning if tcllinter program not found * INSTALL.rst, doc/source/module.rst: doc: desc --with-tcl-linter-opts in INSTALL/man * testsuite/modules.70-maint/220-config.exp: ts: adapt tcl_linter tests for --with-tcl-linter-opts * Makefile, Makefile.inc.in, configure, site.exp.in, tcl/init.tcl.in: install: add --with-tcl-linter-opts configure option Introduce the --with-tcl-linter-opts configure option to choose at installation time the options to pass to the tcl linter program. Default option is ''. 2022-06-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.70-maint/220-config.exp: ts: test tcl_linter config option * doc/source/changes.rst, doc/source/module.rst: doc: desc. MODULES_TCL_LINTER in man/changes * INSTALL.rst: doc: desc --with-tcl-linter in INSTALL * INSTALL.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc. tcl_linter config in man/changes * init/Makefile, init/fish_completion, init/zsh-functions/_module.in: init: add tcl_linter config to completion script * Makefile, Makefile.inc.in, configure, site.exp.in, tcl/init.tcl.in: install: add --with-tcl-linter configure option Introduce the --with-tcl-linter configure option to choose at installation time the default program command to use to lint modulefiles. Default Tcl linter is 'nagelfar.tcl'. * tcl/init.tcl.in, tcl/subcmd.tcl.in: Introduce tcl_linter configuration option Add tcl_linter option to configure the program to use by lint sub-command to lint modulefiles. When configuration is modified it sets the MODULES_TCL_LINTER environment variable. 2022-06-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .aspell.en.pws, tcl/subcmd.tcl.in: Parse and format linter output Output linter output under a *Linting* message block. Parse each output line to produce NOTICE, WARNING or ERROR report messages. 2022-06-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .aspell.en.pws, tcl/subcmd.tcl.in: Lint every modulefile passed as argument Update cmdModuleLint to resolve each argument and find corresponding modulefile. Pass these modulefile to Nagelfar to lint them. In this initial code, Nagelfar is expected to be found at nagelfar/nagelfar.tcl and its execution output is sent to the terminal. 2022-06-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/Makefile, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module.in: init: add lint subcmd to completion scripts * .aspell.en.pws, tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Introduce 'lint' sub-command Add the lint sub-command to check syntax of modulefiles. Initial commit which adds empty cmdModuleLint procedure and add code to reach it through module procedure. General sub-command properties: * shortcut name: none * accepted options: --all, --icase * expected number of argument: 0 to N * accept boolean variant specification: no * parse module version specification: yes * fully read modulefile when checking validity: no * only called from top level: yes 2022-07-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc protected_envvars in NEWS Fixes #429. 2022-07-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .github/workflows/windows_tests.yaml: gh: fix missing liblapack0 dep for R pkg on Cygwin * .cirrus.yml: cirrus: update to python39 on FreeBSD-13 2022-06-08 Adrien Cotte <adrien@cotte.com> * testsuite/modulefiles.3/protect/1.0, testsuite/modulefiles.3/protect/2.0, .../modules.70-maint/410-protected_envvars.exp: ts: add 70/410 protected_envvars 2022-03-04 Adrien Cotte <adrien@cotte.com> * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.70-maint/220-config.exp: ts: test protected_envvars config option 2022-02-21 Adrien Cotte <adrien@cotte.com> * init/zsh-functions/_module.in: Zsh completion support for protected_envvars config * init/fish_completion: Fish completion support for protected_envvars config * init/Makefile: Bash completion support for protected_envvars config * .aspell.en.pws, INSTALL.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc. protected_envvars configuration * tcl/envmngt.tcl.in, tcl/init.tcl.in: Add protected_envvars configuration option Add the protected_envvars configuration option that prevents choosen environment variables to be set or unset by Module commands. 2022-06-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .aspell.en.pws, NEWS.rst, tcl/mfinterp.tcl.in: Fix source-sh/sh-to-mod when fish regex-easyesc is on Fix source-sh modulefile command and sh-to-mod sub-command when used with a fish shell script when the regex-easyesc fish option is enabled. This option has been introduced in fish 3.1 and is turned on by default starting fish 3.5. Fixes #463. * NEWS.rst: doc: desc. enclose install paths work in NEWS 2022-06-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/Makefile: install: create etcdir from init Makefile if used 2022-06-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/_static/literal_block.css, doc/source/_static/rtd_literal_block.css, doc/source/conf.py: doc: fix css config for sphinx >= 3.5 Use html_css_files configuration option introduced in Sphinx 1.8 to setup CSS in a more conventional way. Also fix pre.literal-block specific styling as the 'section' div is not used anymore in newer Sphinx versions. 2022-06-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .cirrus.yml: cirrus: test install path containing space char Transform the second FreeBSD test case into a Ubuntu testcase, running on last LTS release. For this test case, installation is made over a path containing a whitespace character. No specific quarantine setup with this test case, as it is not compatible with installation in path containing a whitespace character. 2022-06-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/bin/install_test_csh, testsuite/bin/install_test_fish, testsuite/bin/install_test_sh, testsuite/bin/install_test_tcl, testsuite/config/unix.exp, testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/030-options.exp, testsuite/install.00-init/060-quar.exp, testsuite/install.00-init/080-args.exp: ts: fix install tests if space char in install path 2022-06-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/envmngt.tcl.in: Update autoinit produced code to enclose install path Update code generated by the autoinit sub-command to enclose all references to installation path to cope with an installation done in a path containing whitespace character. Enclosing modulecmd.tcl installation path this way is not effective with the quarantine mechanism that implies a double shell code evaluation. So it is advised not to install Modules in a path containing a whitespace character if the quarantine mechanism is needed. 2022-06-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/config/unix.exp, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/140-color.exp, testsuite/modules.50-cmds/400-source-sh.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/310-sh-to-mod.exp: ts: fix tests if space char in install location path * Makefile, doc/Makefile, init/Makefile: install: enclose install path refs in Makefiles * init/bash.in, init/cmake.in, init/csh.in, init/fish.in, init/ksh.in, init/perl.pm.in, init/profile.csh.in, init/profile.sh.in, init/r.R.in, init/ruby.rb.in, init/sh.in, init/tcl.in, init/tcsh_completion.in, init/zsh.in: init: enclose installation path references Update initialization, profile and completion scripts to enclose all references to the installation paths. Enclosing modulecmd.tcl installation path this way is not effective with the quarantine mechanism that implies a double shell code evaluation. So it is advised not to install Modules in a path containing a whitespace character if the quarantine mechanism is needed. * contrib/modulefiles/modules.in, contrib/modulefiles/version.in, script/add.modules.in: contrib,script: enclose installation path references Update add.modules script and example modulefiles to enclose all references to the installation paths. * tcl/init.tcl.in, tcl/main.tcl.in, tcl/subcmd.tcl.in: Enclose all installation path references Fix modulecmd.tcl to enclose all references to an installation path. These references are thus robust in case a space character is part of the installation location. * NEWS.rst: doc: desc. init scripts > autoinit migration work * .github/workflows/linux_tests.yaml: gh: update test case with disabled bin/manpath config 2022-06-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/120-autoinit.exp: ts: test source of shell completion during autoinit * testsuite/modules.70-maint/120-autoinit.exp: ts: add autoinit MANPATH setup tests 2022-06-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .cirrus.yml: cirrus: use leap 15.3 to get python-Sphinx 2022-06-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * site.exp.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/400-source-sh.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/310-sh-to-mod.exp: ts: update tests now autoinit sets PATH/MANPATH/etc * Makefile, init/Makefile, init/zsh.in, tcl/subcmd.tcl.in: init: setup zsh FPATH through autoinit command Add zsh FPATH setup in autoinit command instead of zsh shell initialization script. This way all the shell setup is gathered in the autoinit process. What is left in initialization script is the code to properly call the autoinit process. Fixes #462. * Makefile, init/Makefile, init/bash.in, init/csh.in, init/fish.in, tcl/subcmd.tcl.in: init: setup shell completion through autoinit command Add shell completion setup in autoinit command instead of shell initialization scripts. Use this way one modulecmd.tcl internal code instead of shell code for every shell having some completion to source (bash, tcsh, fish). Fixes #462. 2022-06-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, init/Makefile, init/bash.in, init/csh.in, init/fish.in, init/ksh.in, init/sh.in, init/zsh.in, tcl/subcmd.tcl.in: init: setup MANPATH through autoinit command Add MANPATH setup in autoinit command instead of shell initialization scripts. Use this way one modulecmd.tcl internal code instead of shell code for every shell requiring to setup MANPATH with Modules binaries location (sh, bash, ksh, zsh, csh, tcsh, fish). Fixes #462. 2022-06-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, init/Makefile, init/bash.in, init/csh.in, init/fish.in, init/ksh.in, init/sh.in, init/zsh.in, tcl/subcmd.tcl.in: init: setup PATH through autoinit command Add PATH setup in autoinit command instead of shell initialization scripts. Use this way one modulecmd.tcl internal code instead of shell code for every shell requiring to setup PATH with Modules binaries location (sh, bash, ksh, zsh, csh, tcsh, fish). Fixes #462. * init/bash.in, tcl/envmngt.tcl.in: Export module bash functions directly through autoinit Export the module, _module_raw and ml bash shell functions directly through the autoinit sub-command process rather within the bash shell initialization script. Cannot apply the same change to the sh shell when it is bash launched as sh, since we cannot tell in the modulecmd.tcl execution that the current sh shell is bash (as BASH environment variable is not exported to sub-shells). Fixes #462. 2022-05-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.70-maint/410-timer.exp: ts: add --timer tests in 70/410 * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc. --timer option in NEWS/changes/man * testsuite/modules.00-init/100-pager.exp, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/150-access-init.exp: ts: adapt existing tests for timer state introduction 2022-05-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/mfinterp.tcl.in, tcl/modspec.tcl, tcl/report.tcl.in: Report duration of each proc in timer debug mode When --timer option is enabled and verbosity level is higher or equal to verbose, report trace of each procedure executed with their duration. All regular debug messages are replaced by these timer trace messages. 2022-05-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .aspell.en.pws, tcl/init.tcl.in, tcl/main.tcl.in, tcl/report.tcl.in: Introduce --timer option Add --timer global option to report execution time in milliseconds at the end. Set start time in timer_start global variable when --timer is set. Also enable timer state, to know later on that timer mode has been asked. Timer report is produced at the and, in last run procedure: cleanupAndExit. Report is shown at any verbosity level. Timer reports are kind of debug information, thus they also use the 'db' sgr key to get graphically enhanced. No need for a dummy reportTimer procedure like for reportDebug, to use to gather all messages prior error report initialization, as reportTimer is always called after error report being initialized. 2022-05-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst: doc: describe Optional requirements in MIGRATING * testsuite/modulefiles.3/optional/1.0, testsuite/modules.50-cmds/465-tag-opt.exp, testsuite/modules.50-cmds/550-optional-opt.exp, testsuite/modules.70-maint/240-icase.exp: ts: test misplaced/invalid prereq option in 50/550 * NEWS.rst, tcl/mfinterp.tcl.in: Error on misplaced/invalid options on prereq commands Update prereq command parsing to raise error in case of an invalid option or a misplaced one. * testsuite/modules.50-cmds/550-optional-opt.exp: ts: adapt optional tests as eval failure are not reported * tcl/main.tcl.in, tcl/mfinterp.tcl.in, tcl/modeval.tcl: No report of eval error of optional requirement Do not report the evaluation error of optional requirements. Proceed like on a prereq-any command, when some evaluation fails but one succeed. Update the loadRequirementModuleList procedure by adding an argument named 'optional' to know if current load attempt is mandatory or not. 2022-05-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/mfinterp.tcl.in: Disable auto loading on always-load in DepRe context Disable auto-loading on always-load sub-command when evaluated in a Dependency Reload context. 2022-05-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/foo/1.0, testsuite/modulefiles.3/optional/1.0, testsuite/modulefiles.3/optional/2.0, testsuite/modules.50-cmds/550-optional-opt.exp: ts: add --optional option tests in 50/550 2022-05-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc. --optional and try-load changes in NEWS * doc/source/changes.rst, doc/source/design/lmod-tcl-modulefile-compat.rst, doc/source/modulefile.rst: doc: desc --optional option in man/changes/design 2022-05-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/tryload/2.0, testsuite/modules.50-cmds/490-try-load.exp, testsuite/modules.50-cmds/518-load-any.exp: ts: add depre tests for try-load/load-any mfcmd 2022-05-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/main.tcl.in, tcl/mfinterp.tcl.in, tcl/modeval.tcl, tcl/subcmd.tcl.in: Change try_modulefile state into a cmdModuleLoad arg Replace the try_modulefile state by the tryload argument on the cmdModuleLoad procedure. Update prereqAnyModfileCmd, prereqAllModfileCmd and loadRequirementModuleList procedure to pass this tryload argument all along toward cmdModuleLoad. This is needed when evaluating module try-load and module load-any commands in modulefile. * tcl/mfinterp.tcl.in: Allow to pass multiple pre-args on interp cmd alias Update initialization of the command aliases on modulefile interpreter to allow to pre defined more than one argument to transmit. 2022-05-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .aspell.en.pws, tcl/main.tcl.in: Inhibit autoload in depre ctx for all kind of load cmd Inhibit the auto loading mechanism when module is currently evaluated in a Dependency Reload (DepRe) context for load, try-load and load-any sub-commands. This way it avoids to auto reload the optional dependency module currently targeted by the main unload order from user. * testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/465-tag-opt.exp, testsuite/modules.50-cmds/490-try-load.exp, testsuite/modules.61-coll/040-restore.exp: ts: adapt existing tests to try-load prereq record change 2022-05-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/main.tcl.in: Use optional prereq to record try-load requirements When try-load is used in a modulefile, record implied requirement as optional instead of only recording those that are loaded. This way the modulefile will get reloaded if requirement is loaded afterward. Cannot fully rely on prereqAllModfileCmd procedure as try-load does not fully correspond to a prereq-all --optional: an requirement evaluation error will lead to an error of the module try-load command that will abort the modulefile evaluation. * tcl/main.tcl.in: Refactor module load/try-load/load-any modulefile code * testsuite/modules.70-maint/080-help.exp: ts: adapt existing tests for prereq cmds refactoring * .aspell.en.pws, tcl/main.tcl.in, tcl/mfinterp.tcl.in: Merge prereq-all/prereq-allAH into prereqAllModfileCmd Merge the prereq-all and prereq-allAH procedure into a single prereqAllModfileCmd procedure taking current auto_handling option value as first arg to know whether to automatically load requirements or not. * .aspell.en.pws, tcl/main.tcl.in, tcl/mfinterp.tcl.in, tcl/subcmd.tcl.in: Merge prereq/prereqAH into prereqAnyModfileCmd proc Merge the prereq and prereqAH procedure into a single prereqAnyModfileCmd procedure taking current auto_handling option value as first arg to know whether to automatically load requirements or not. 2022-05-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/465-tag-opt.exp, testsuite/modules.50-cmds/513-prereq-any.exp, testsuite/modules.50-cmds/515-depends-on.exp, testsuite/modules.50-cmds/516-prereq-all.exp, testsuite/modules.50-cmds/517-always-load.exp: ts: adapt existing tests to --optional addition * tcl/mfinterp.tcl.in: Add --optional option to prereq commands Introduce the --optional option on prereq commands (prereq, prereq-all, always-load, prereq-any and depends-on) to indicate that the prereq list is fully optional: if none of these prereqs are loaded, no error occurs. When recording these prereq list in persistency information (__MODULES_LMPREREQ variable), the current module name is added as first module in prereq list to get this rule always satisfied even if no module from the prereq list is loaded. 2022-05-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/main.tcl.in, tcl/modeval.tcl, tcl/subcmd.tcl.in: Change any_modulefile state into a cmdModuleLoad arg Replace any_modulefile state by the anyload argument on cmdModuleLoad procedure. any_modulefile branch were already not in use for 'module load-any' commands used in modulefiles. * tcl/mfinterp.tcl.in: Make always-load proc directly use prereq-all Update always-load procedure to make it use directly the auto_handling version of prereq-all command. * testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.70-maint/080-help.exp: ts: adapt existing tests for prereq interp refactoring * tcl/subcmd.tcl.in: No need to disable auto_handling to call prereq Update cmdModuleSwitch procedure as it is not anymore needed to disable auto_handling option to call a prereq command that does not automatically load requirements. * tcl/main.tcl.in: Make module load rely on prereq/prereq-all cmds Update module procedure to directly use, when 'module load' is called within a modulefile, the prereq/prereq-all commands in their auto_handling or non-auto_handling versions. * .aspell.en.pws, tcl/mfinterp.tcl.in: Create auto_handling and not version of prereq procs Split prereq and prereq-all procedures into a auto_handling version, that attempts to automatically load requirements, and a non auto_handling version that raise an error directly if requirement is not already loaded. Adapt Tcl sub-interpreter initialization to make it dependent of the auto_handling option enablement. When auto_handling is enabled, the auto_handling versions of the prereqs procedure are configured. With this change other parts of the code will be able to call either prereq or prereqAH directly whether they need a load attempt or not, whatever the current status of the auto_handling option. 2022-05-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, contrib/rpm/environment-modules.spec.in, doc/source/conf.py, version.inc.in: Release of version 5.1.1 * testsuite/is_module_defined, testsuite/modules.00-init/005-init_ts.exp: ts: fix is_modules_defined test Add bash script to test whether module function is defined * Makefile, NEWS.rst: install: call git cmds in Makefile only if needed Update Makefile to call git command only if the version.inc file needs to get rebuilt (if it does not exist or if the git repository has been updated after version.inc built). Include version.inc file in main Makefile only if its variables have not been just generated within Makefile flow. 2022-05-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .aspell.en.pws, Makefile, NEWS.rst, lib/.gitignore, lib/Makefile.in: install: include generated config.{guess,sub} in dist Include the lib/config.guess and lib/config.sub scripts in distribution tarball if generated by autoreconf * Makefile, init/Makefile: install: no dependency to version.inc in init/Makefile The Makefile script in the init directory does not depend on the definitions stored in the version.inc file. So remove inclusion and requirement definition to this version.inc file in init/Makefile. * script/mrel: install: locate rpmlint rc file with -r in mrel Update mrel script to locate rpmlint rc file with the -r command-line switch as -f is not recognized anymore on rpmlint v2. * contrib/rpm/environment-modules.rpmlintrc: install: update rpmlint rc config for fc36 Update rpmlint rc file to match the new rpmlint version and configuration provided in Fedora 36. 2022-05-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/lcompat/1.7, testsuite/modules.50-cmds/517-always-load.exp: ts: add depre tests for always-load command in 50/517 * NEWS.rst, tcl/subcmd.tcl.in, testsuite/modules.50-cmds/465-tag-opt.exp: Update mod designation with tags set by DepRe modules Update module designation with the tags set by reloading dependent module. Closes #460. 2022-05-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, doc/source/design/module-tags.rst, tcl/mfinterp.tcl.in, tcl/modeval.tcl, testsuite/modulefiles.3/tag/8.0, testsuite/modules.50-cmds/465-tag-opt.exp: Update tags set with prereq on all loaded mods Update tags set through prereq command on all already loaded requirements. Closes #459. 2022-05-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/170-cwd.exp: ts: test module over a removed current working dir * NEWS.rst, tcl/util.tcl: Report known error when cwd cannot be retrieved Closes #457. 2022-05-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/mfinterp.tcl.in, tcl/report.tcl.in: Migration conflict error report in dedicated proc Add reportPresentConflictError procedure to report error when a conflict is detected. * tcl/mfinterp.tcl.in, tcl/report.tcl.in: Migrate prereq error report in dedicated proc Add the reportMissingPrereqError procedure to report error when prereq is not satisfied. * tcl/mfinterp.tcl.in: Add getCurrentModfileInterpName proc Add getCurrentModfileInterpName procedure to return identifier name of current Tcl modulefile interpreter. 2022-05-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/main.tcl.in, tcl/modeval.tcl: Return if prereq has been loaded on loadRequirementModuleList Update loadRequirementModuleList procedure to also return if one of the requirement from list has been loaded. 2022-05-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/subcmd.tcl.in: Remove dependency to try_modulefile of cmdModuleUnload The try_modulefile state does not impact the cmdModuleUnload procedure as the only kind of error reported here is when an empty module name is specified. Such error should be reported whatever the try_modulefile state. * tcl/main.tcl.in: Clarify {try,any}_modulefile state in ml proc Clarify that the try_modulefile and any_modulefile states cannot be enabled when set through the ml procedure: ml shortcut syntax leads to regular load and not load-any or try-load. 2022-05-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/main.tcl.in, tcl/subcmd.tcl.in: Move load-any no load error into cmdModuleLoad Refactor module procedure to move the error raise when no error and no module loaded in case of a load-any sub-command. This code is moved directly at the end of cmdModuleLoad. 2022-05-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/modfind.tcl.in: Refactor setModuleTag call in setLoadedModule As setModuleTag now ensures no duplicate tag are set, no need to check if auto-loaded tag is already set. Simplify also the if/else branch as same commands are applied whether the loaded or auto-loaded tag need to be set. 2022-05-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/main.tcl.in, tcl/modeval.tcl, testsuite/modules.50-cmds/517-always-load.exp: Refactor 'module load' to use loadRequirementModuleList Update module procedure to use loadRequirementModuleList procedure when loading modules in load evaluation mode when auto_handling is disabled. Update the loadRequirementModuleList to return 0 is everything went well or 1 if an issue occurred. * testsuite/modules.70-maint/310-sh-to-mod.exp: ts: fix 70/310 tests when module is defined in env * tcl/main.tcl.in: Refactor use of --tag option within module load * testsuite/modules.70-maint/350-term_width.exp: ts: add tests to improve --width option coverage * testsuite/modules.50-cmds/520-pushenv.exp: ts: add pushenv test to improve coverage * testsuite/modules.50-cmds/400-source-sh.exp: ts: test loaded completion not defined in source-sh script * testsuite/example/sh-to-mod.csh, testsuite/example/sh-to-mod.fish, testsuite/example/sh-to-mod.sh, testsuite/example/siteconfig.tcl-1, testsuite/modules.50-cmds/400-source-sh.exp: ts: test removal of alias/func/comp from source-sh script 2022-05-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, tcl/subcmd.tcl.in, testsuite/modules.50-cmds/465-tag-opt.exp, testsuite/modules.70-maint/322-tag-sgr.exp: No already loaded msg if new tag applied Remove the *already loaded* message displayed when verbosity level is higher or equal to 'verbose2', if new tags are applied to the loaded module. Closes #456 2022-05-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/465-tag-opt.exp, testsuite/modules.70-maint/321-tag_abbrev.exp, testsuite/modules.70-maint/322-tag-sgr.exp: ts: test module designation with tags when loading * NEWS.rst, tcl/report.tcl.in: Fix module designation rendering when no 'hi' color key Fix rendering of loading or unloading module designation when configured color palette does not set the 'hi' color key. Closes #455 2022-05-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/045-listlong.exp, testsuite/modules.70-maint/290-json.exp, testsuite/modules.70-maint/322-tag-sgr.exp: ts: test space in module name on list/avail outputs 2022-05-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: ts: add readCollectionContent coverage test 2022-05-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .cirrus.yml: cirrus: test FreeBSD 13.0 instead of eol 11.4 * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: ts: add unsetModuleTag/unsetModuleExtraTag coverage test * testsuite/modules.00-init/120-siteconfig.exp: ts: no tcl ext lib err call tests if test libs not there * NEWS.rst, contrib/rpm/environment-modules.spec.in: rpm: install lib in specific directory Move libtclenvmodules in an environment-modules directory under libdir, as it is a private library. * NEWS.rst, configure: install: fix libdir64/32 guess in configure script Update configure script to better guess the libdir64 and libdir32 directory locations based on specified libdir. Correctly guess these directories when libdir does not end with '64' but contains '64' like in '/usr/lib64/environment-modules'. * .aspell.en.pws, NEWS.rst, contrib/rpm/environment-modules.rpmlintrc, script/mrel: install: add rpmlint rc config file Add rpmlint rc configuration file to filter false positive warning messages when checking RPM spec file and built packages. Update 'mrel' script to use this rc configuration file when linting RPM spec file. * contrib/rpm/environment-modules.spec.in: rpm: remove useless environment-modules provides Remove useless environment-modules Provides statement since this package is already named environment-modules. 2022-05-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/sh-to-mod.sh, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/400-source-sh.exp: ts: fix 50/400 tests when module was defined but uninstalled Correct source-sh tests in 50/400 to succeed when tests are run in an environment where module is defined but has been uninstalled. It corresponds to the environment created for 'mrel' script execution. 2022-05-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../modules.20-locate/130-mcookie_check_eval.exp: ts: fix 20/130 tests when run from path containing + char * script/mpub, script/mrel: script: no line number dependency for expected errors Update mpub and mrel scripts not to depend on the line number expressed in error message when comparing them to expected error message. * NEWS.rst: doc: fix rst typo in 5.1 NEWS 2022-04-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst, contrib/rpm/environment-modules.spec.in, doc/source/conf.py, lib/configure.ac, tcl/subcmd.tcl.in, testsuite/home/coll40, testsuite/home/coll41, testsuite/home/coll42, testsuite/home/coll43, testsuite/home/coll45, testsuite/home/coll46, testsuite/home/coll49, testsuite/home/coll49-tosource, testsuite/modules.61-coll/010-init_ts.exp, version.inc.in: Release of version 5.1.0 2022-04-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/home/coll49-tosource, testsuite/modules.50-cmds/465-tag-opt.exp, testsuite/modules.61-coll/040-restore.exp: ts: tests tagging messages on verbose/verbose2 modes 2022-04-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/hide-or-forbid-modulefile.rst, tcl/main.tcl.in, tcl/mfinterp.tcl.in, tcl/modeval.tcl, tcl/subcmd.tcl.in: No Tagging msg block if hidden and nuasked Do not output Tagging message block if module is set hidden-loaded and evaluation has not been directly asked by user. Add uasked argument to cmdModuleTag procedure to know if the evaluation of module has been asked or not by user. * .aspell.en.pws, MIGRATING.rst, doc/source/_static/terminal_output.css, doc/source/conf.py: doc: add examples in more tagging section in MIGRATING * NEWS.rst, doc/source/design/module-tags.rst, doc/source/module.rst: doc: desc. tagging evaluation message * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.61-coll/040-restore.exp: ts: adapt existing restore tests to the Tagging msg * tcl/subcmd.tcl.in: Add Tagging message block When just tagging a module already loaded, report a *Tagging* message with module denomination. Like for *Loading* message, it is only seen during a restore/source sub-commands or in verbose mode. * .aspell.en.pws, NEWS.rst, doc/example/log-module-commands/siteconfig.tcl, doc/source/cookbook/log-module-commands.rst: doc: fix log-module-command recipe siteconfig.tcl Fix the siteconfig.tcl file of the log-module-command cookbook recipe not to break when a file is sourced through cmdModuleSource. Limit the addition of the 'auto' log field only if load evaluation comes from cmdModuleLoad procedure. Fixes #453 * NEWS.rst, doc/source/design/module-tags.rst, doc/source/module.rst: doc: desc. tag report on load/unload/refresh msg block 2022-04-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/020-module.exp, testsuite/install.00-init/024-ml.exp, testsuite/modules.00-init/130-auto_handling.exp, testsuite/modules.20-locate/100-wspace.exp, testsuite/modules.20-locate/115-forbid.exp, testsuite/modules.20-locate/118-hidden-loaded.exp, testsuite/modules.20-locate/119-hide-cascading.exp, testsuite/modules.50-cmds/078-refresh.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/288-info-tags.exp, testsuite/modules.50-cmds/370-deps-bis.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/375-deps6.exp, testsuite/modules.50-cmds/375-order.exp, testsuite/modules.50-cmds/376-deps7.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-cyclic.exp, testsuite/modules.50-cmds/377-error.exp, testsuite/modules.50-cmds/377-opposite.exp, testsuite/modules.50-cmds/378-sametarget.exp, testsuite/modules.50-cmds/379-module-unload.exp, testsuite/modules.50-cmds/380-altname.exp, testsuite/modules.50-cmds/430-implicit-req.exp, testsuite/modules.50-cmds/431-not-req.exp, testsuite/modules.50-cmds/450-hidden-loaded.exp, testsuite/modules.50-cmds/460-sticky.exp, testsuite/modules.50-cmds/461-super-sticky.exp, testsuite/modules.50-cmds/462-sticky-corner.exp, testsuite/modules.50-cmds/465-tag-opt.exp, testsuite/modules.50-cmds/473-variant-prereq.exp, testsuite/modules.50-cmds/474-variant-conflict.exp, testsuite/modules.50-cmds/475-variant-tag.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/230-verbosity.exp, .../modules.70-maint/270-adv_version_spec.exp, .../modules.70-maint/271-adv_version_spec-in.exp, .../272-adv_version_spec-range.exp, .../273-adv_version_spec-space.exp, .../274-adv_version_spec-autosym.exp, testsuite/modules.70-maint/320-tags.exp, .../modules.70-maint/377-variant-shortcut.exp: ts: update tests with tags reported in msg block * tcl/report.tcl.in: Report module tags in header message block Update Loading/Unloading/Refreshing header message block to render the tags applying on the currently analyzed module over or along this module name, as done when reporting loaded modules with list sub-command. * tcl/report.tcl.in: Make getModuleDesignation rely on formatListEltToDisplay Use formatListEltToDisplay in getModuleDesignation to render module designation. 2022-04-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.20-locate/090-memcache.exp, testsuite/modules.20-locate/100-wspace.exp, testsuite/modules.70-maint/240-icase.exp, .../272-adv_version_spec-range.exp, testsuite/modules.70-maint/376-variant-tag.exp, testsuite/modules.90-avail/080-noindepth.exp: ts: update avail/list tests when space in module name * NEWS.rst, tcl/report.tcl.in: Quote name if it contains space when listing modules Update formatListEltToDisplay and formatListEltToLongDisplay to enclose element name in single quote if it contains a space character. As a result list and avail output will now report enclosed module names if space character if found in them, like it is done when reporting module designation as loading/unloading header. Only enclose element name and not suffix, to follow the same output approach than 'ls' command. * tcl/report.tcl.in, tcl/subcmd.tcl.in: Register tag list in module designation Update registerModuleDesignation procedure to also register the list of tags applied along module name and variants. * MIGRATING.rst, NEWS.rst: doc: desc. tags improvement in NEWS/MIGRATING * doc/source/design/module-tags.rst: doc: list mfcmd where --tag opt is available in design * NEWS.rst, doc/source/changes.rst, doc/source/design/module-tags.rst: doc: link to --tag option section 2022-04-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .github/workflows/windows_tests.yaml: gh: configure safe.directory git opt on Cygwin & win native * doc/source/module.rst: doc: mention --tag in Module tags section * doc/source/module.rst, doc/source/modulefile.rst: doc: --tag update tag list if mod is loaded already * doc/source/module.rst: doc: add an option section for --tag in module(1) * testsuite/modules.50-cmds/465-tag-opt.exp: ts: test tag set with full path module spec 2022-04-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/home/coll49, testsuite/modulefiles.3/foo/.modulerc, testsuite/modulefiles.3/keep/1.0, testsuite/modulefiles.3/tag/8.0, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/999-cleanup.exp: ts: add restore tests with tags set or not * tcl/subcmd.tcl.in: Clear auto-loaded tag on cmdModuleTag When the unset_extra flag is enabled, also remove the auto-loaded tag on module if it is not part of the target tag_list. * tcl/subcmd.tcl.in: Clear auto-loaded/keep-loaded tags when unloading Remove from the in-memory knowledge the auto-loaded and keep-loaded tags set on unloading modules. These tags are then forgotten and will not be reapplied if module is currently reloading. 2022-04-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/modeval.tcl, tcl/subcmd.tcl.in, testsuite/modules.50-cmds/377-error.exp, testsuite/modules.50-cmds/450-hidden-loaded.exp, testsuite/modules.50-cmds/465-tag-opt.exp: Save/restore extra tags when reloading modules Update reloadModuleListUnloadPhase and reloadModuleListLoadPhase procedures to save extra tags of unloaded modules to re-inject them when reloading these modules. * testsuite/modules.61-coll/040-restore.exp: ts: update restore tests now extra tags are cleared * tcl/subcmd.tcl.in: Clear extra tags when unloading module Remove from the in-memory knowledge the extra tags set on unloading modules. These extra tags are then forgotten and will not be reapplied if module is currently reloading. * tcl/subcmd.tcl.in: Clear extra tags when restoring collection When restoring a collection, unset the extra tags on loaded modules that are not defined in collection. * tcl/main.tcl.in, tcl/mfinterp.tcl.in, tcl/modeval.tcl, tcl/modfind.tcl.in, tcl/subcmd.tcl.in: Unset extra tags on cmdModuleTag Add unset_extra argument to the cmdModuleTag procedure to remove, when enabled, the extra tags currently set on designated modules that are not part of the transmitted tag list. Update every cmdModuleTag calls to take into account this new unset_extra argument. 2022-04-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/module-tags.rst: doc: desc. updating tags on loaded mods in design doc 2022-04-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/foo/1.0, testsuite/modulefiles.3/tag/8.0, testsuite/modules.50-cmds/465-tag-opt.exp, testsuite/modules.50-cmds/517-always-load.exp: ts: add tests where tags are updated on loaded mods 2022-04-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/465-tag-opt.exp: ts: fix existing tests to set tags on already loaded mod * tcl/main.tcl.in, tcl/mfinterp.tcl.in, tcl/modeval.tcl: Apply new tags set on loaded requirement Update the loadRequirementModuleList procedure to apply tags defined on the first requirement found loaded. 2022-04-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/subcmd.tcl.in: Apply new tags set on loaded module When a module load attempt is made on an already loaded module with additional tag set, update the tag list set on this loaded module: add the new tags not already set on the loaded module. 2022-04-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .cirrus.yml: cirrus: test over newer FreeBSD 12 release * NEWS.rst, doc/source/modulefile.rst: doc: desc avail module subcmds in modulefile interp ctx 2022-04-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, doc/source/modulefile.rst: doc: add mfile/rc interp diff table in modulefile man 2022-04-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst, doc/source/module.rst: doc: mention rc files are not for module config 2022-04-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/modulefile.rst: doc: mention use/unuse in module modulefile man section * NEWS.rst: doc: desc. coll file signature change in NEWS 2022-04-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/home/.module/coll48, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/020-savelist.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/050-saverm.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.61-coll/999-cleanup.exp, testsuite/modules.70-maint/154-is-saved.exp: ts: verify coll compat on all coll subcmds 2022-04-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.61-coll/080-access-coll.exp: ts: adapt existing tests now coll compat is verified 2022-04-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitignore, Makefile, tcl/{coll.tcl => coll.tcl.in}: install: tcl/coll.tcl should be built Need to build tcl/coll.tcl as this part of the code need to use the @MODULES_VERSION@ pattern. 2022-04-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/coll.tcl, tcl/subcmd.tcl.in: Check collections are valid when searching them Update findCollections procedure to rely on a checkValidColl procedure that verifies given collections can be read and are compatible with current Modules version if they express a minimum version requirement. As a side effect, when listing available collections with savelist sub-command, now the collections that cannot be read are withdrawn from result list. 2022-04-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/coll.tcl, tcl/mfinterp.tcl.in, tcl/subcmd.tcl.in: Merge getCollectionFilename into findCollections Update findCollections procedure to merge behavior of getCollectionFilename in it. If search argument is set to 'exact' an exact collection search match is performed. If search argument is set to 'name', only the name of the collection file is computed. 2022-04-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/home/coll40, testsuite/home/coll41, testsuite/home/coll42, testsuite/home/coll43, testsuite/home/coll45, testsuite/home/coll46, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/999-cleanup.exp: ts: update tag saved in collection tests Set temporarily file signature to 5.0 version. Will move to 5.1 version with the release commit of 5.1.0. * tcl/coll.tcl, tcl/subcmd.tcl.in: Add Module header when saving coll with tags Record Modules magic cookie at the beginning of a collection when tags are found set on the module to save. The #%Module file signature is followed by the version number of Modules introducing the tag support. This version number is temporarily set to 5.0 for test purpose. It will be moved to 5.1, on the release commit of 5.1.0. If collection starts with a Modules file signature, this header will not be reported on saveshow output. * tcl/coll.tcl, tcl/modfind.tcl.in: No empty entry in tag array for build coll Update getSimplifiedLoadedModuleList and getLoadedModuleWithVariantSaveTagArrayList procedure to fill the tag array only with entries for modules with tags applied to them. This way it is possible to know if collection define tags by checking number if this array is empty. 2022-04-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/tag/.modulerc, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/999-cleanup.exp: ts: test saving nearly-forbidden tag in collection * testsuite/home/coll45, testsuite/home/coll46, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/999-cleanup.exp: ts: test restore colls with invalid tags saved 2022-03-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc. __MODULES_LMEXTRATAG/collection_pin_tag in NEWS 2022-03-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/tag/8.0, testsuite/modules.50-cmds/465-tag-opt.exp: ts: test reload with extra tags in 50/465 * doc/source/design/module-tags.rst: doc: desc. collection_pin_tag in design doc * testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/999-cleanup.exp: ts: test save/restore with collection_pin_tag enabled 2022-03-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/modfind.tcl.in: Save all tags if collection_pin_tag is enabled Update the getSaveTagList procedure to return all defined tags for given module when the collection_pin_tag configuration option is enabled. An exception is made for nearly-forbidden tag which is not saved due to its temporal meaning. * testsuite/modules.00-init/010-environ.exp, testsuite/modules.70-maint/220-config.exp: ts: test collection_pin_tag config option * doc/source/changes.rst, doc/source/module.rst: doc: desc. MODULES_COLLECTION_PIN_TAG in man/changes * INSTALL.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc. collection_pin_tag config in man/changes/INSTALL * init/Makefile, init/fish_completion, init/zsh-functions/_module.in: init: add collection_pin_tag config to completion scripts * tcl/init.tcl.in: Add collection_pin_tag configuration option Add collection_pin_tag configuration option that controls whether all tags should be recorded in collection or just the tags specifically set with --tag option or describing loaded module state (like auto-loaded or keep-loaded tags). Disabled by default. When configuration is modified it sets the MODULES_COLLECTION_PIN_TAG environment variable. * testsuite/modulefiles.3/tag/.modulerc, testsuite/modulefiles.3/tag/8.0, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/999-cleanup.exp: ts: add collection tests for extra tag record 2022-03-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .aspell.en.pws, tcl/coll.tcl, tcl/modfind.tcl.in, tcl/subcmd.tcl.in: Only record extra tags in collection Update way collection is saved to only record in it the extra tags set through --tag option and tags describing the load state of a module like auto-loaded and keep-loaded. The getSaveTagList procedure is introduce to return the list of tag to save for each loaded module. * testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/999-cleanup.exp: ts: adapt --tag option collection tests * testsuite/modules.50-cmds/465-tag-opt.exp: ts: adapt --tag option tests 2022-03-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/210-clear.exp, testsuite/modules.70-maint/280-ml.exp: ts: adapt clear subcmd tests for __MODULES_LMEXTRATAG * tcl/modfind.tcl.in, tcl/subcmd.tcl.in: Record extra tags in __MODULES_LMEXTRATAG Introduce __MODULES_LMEXTRATAG environment variable to record the extra tags that have been set on loaded modules through the --tag option. Exclude from this variable the auto-loaded and keep-loaded tags that may be in some situation set through --tag option. * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp: ts: clear __MODULES_LMEXTRATAG prior tests * .aspell.en.pws, doc/source/changes.rst, doc/source/design/module-tags.rst, doc/source/module.rst: doc: desc. __MODULES_LMEXTRATAG in man/changes/design 2022-03-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .aspell.en.pws, NEWS.rst: doc: desc. sysconf error handling in ext lib * Makefile, lib/.gitignore, lib/Makefile.in, lib/testutil-sysconf.c, testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/120-siteconfig.exp: ts/lib: test tcl ext lib against a failed sysconf call Add an utility library that supersedes the sysconf function from libc. The sysconf function from this added library always returns an error (-1). It is used for coverage test of the sysconf call made within the Envmodules_InitStateUsergroupsObjCmd function of the Tcl extension library. 2022-03-30 Lukáš Zaoral <lzaoral@redhat.com> * lib/envmodules.c: lib: handle sysconf failure in InitStateUsergroupsObjCmd sysconf may fail to obtain the value of the NGROUPS_MAX variable. In such case, it returns -1 and sets errno to indicate the error. Let's handle this situation as the size argument of ckalloc is an unsigned int so the size of the allocated memory would be UINT_MAX instead. Subsequently, getgroups would fail with EINVAL as maxgroupsize is non-zero but less than the number of GIDs that would have been returned. Note that if sysconf returns -1 and leaves errno intact, the given variable has no limit. However, that does not seem to be the case on any reasonable operating system [1]. Found by Coverity. Resolves: modules-5.0.1/lib/envmodules.c:355: negative_return_fn: Function "sysconf(_SC_NGROUPS_MAX)" returns a negative number. modules-5.0.1/lib/envmodules.c:355: assign: Assigning: "maxgroups" = "sysconf(_SC_NGROUPS_MAX)". modules-5.0.1/lib/envmodules.c:368: negative_returns: "maxgroups" is passed to a parameter that cannot be negative. 366| 367| #if defined (HAVE_GETGROUPS) 368|-> if ((ngroups = getgroups(maxgroups, groups)) == -1) { 369| Tcl_SetErrno(errno); 370| Tcl_SetObjResult(interp, [1] https://www.j3e.de/ngroups.html 2022-03-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/python.py.in: init: explicitly send err output to sys.stderr in python Update python initialization script to explicitly send error output to the sys.stderr channel (instead of parent process stderr channel) to be able to catch this content. 2022-03-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/120-autoinit.exp: ts: update autoinit tests to new python code * .aspell.en.pws, NEWS.rst, tcl/envmngt.tcl.in: Update module() python func to send output to sys.stderr Update definition of the module() python function to explicitly send output to sys.stderr to get the ability to catch this content. * MIGRATING.rst: doc: fix missing word in Lmod Tcl mfile support desc. * MIGRATING.rst: doc: desc. Lmod Tcl mfile support in MIGRATING 2022-03-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, doc/source/modulefile.rst: doc: add Lmod Tcl mfile support section in modulefile(4) 2022-03-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .aspell.en.pws, doc/source/design/lmod-tcl-modulefile-compat.rst: doc: desc. pushenv in design notes 2022-03-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc. pushenv in NEWS * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp: ts: clean family envvar prior tests * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp: ts: clean pushenv stack envvar prior tests 2022-03-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/flatlcompat, testsuite/modulefiles.3/lcompat/.modulerc, testsuite/modulefiles.3/lcompat/1.10, testsuite/modulefiles.3/lcompat/1.11, testsuite/modules.50-cmds/511-remove-property.exp, testsuite/modules.50-cmds/520-pushenv.exp: ts: test pushenv mfcmd in 50/520 2022-03-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/envmngt.tcl.in, tcl/mfinterp.tcl.in: Ensure pushenv stack var is cleared by other cmds Like for the reference counter array, ensure the push stack environment variable is cleared when targeted variable is handled by append-path, prepend-path, remove-path, setenv and unsetenv modulefile commands. 2022-03-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/envmngt.tcl.in, tcl/mfinterp.tcl.in: Add pushenv modulefile command Introduce the pushenv modulefile command that sets an environment variable with a value specified as argument but saves the previous value set to restore it when modulefile is unloaded. Use a __MODULES_PUSHENV_<VAR> environment variable as a stack to record the previous values of environment variable <VAR>. Each element in this Modules-specific variable is the combination of the currently evaluating modulename and pushed value. When unloading, the value set by this module is removed not the value on top of the list. When saving value set before any module, an empty module name is used to push to the stack. When restoring this initial value, initial entry in stack is also cleared (as no other module unload will unset it). Follow same implementation principle that setenv, with a dedicated procedure for the unload and whatis modes. 2022-03-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/changes.rst, doc/source/module.rst: doc: desc. __MODULES_PUSHENV_<VAR> in changes/man * doc/source/changes.rst, doc/source/modulefile.rst: doc: desc. pushenv in changes/man 2022-03-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/vim/syntax/modulefile.vim: vim: add syntax highlight for pushenv mfcmd * INSTALL.rst, doc/source/_static/rtd_theme_overrides.css: doc: fix config opt table layout in INSTALL Update CSS and content of table to make default value words correctly wrap and be able to see the 4th and 5th cols on small screens. 2022-03-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .aspell.en.pws, INSTALL.rst, NEWS.rst, doc/source/design/add-new-config-option.rst: doc: add Configuration options section in INSTALL 2022-03-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst: doc: reorder silent_shell_debug config opt in module(1) * doc/source/module.rst: doc: see linked envvar for details on configs 2022-03-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst: doc: fix wrong default value for some install opts * CONTRIBUTING.rst: doc: use plural for Commit hook section in CONTRIBUTING 2022-03-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .aspell.en.pws, NEWS.rst, doc/source/conf.py, doc/source/module.rst: doc: clarify instopt & default value of config opts 2022-03-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst: doc: MODULES_ML has to get set prior Modules init * INSTALL.rst, NEWS.rst: doc: clarify config opt linked to install opt * NEWS.rst, doc/source/module.rst: doc: clarify env vars to set prior Modules initialization * doc/source/module.rst: doc: clarify module-generated env vars in module(1) 2022-03-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, doc/source/module.rst: doc: clarify config opt linked to env var Update the ENVIRONMENT section in module(1) man page to provide for each Modules environment variable the name of the configuration option that could be used to set the variable through the config sub-command. 2022-03-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst, MIGRATING.rst, NEWS.rst, doc/source/changes.rst, doc/source/cookbook/reduce-io-load.rst, doc/source/module.rst, doc/source/modulefile.rst: doc: magic cookie means file signature Update documentation to clarify that the Modules magic cookie corresponds to a file signature. 2022-03-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitattributes: install: exclude git hook stuff from git export * CONTRIBUTING.rst, INSTALL.rst, NEWS.rst, script/commit-msg: script: add commit-msg hook script to check commit msg * .aspell.en.pws, .codespellrc, .gitignore, CONTRIBUTING.rst, NEWS.rst, script/pre-commit: script: update pre-commit to spell check docs with Aspell 2022-03-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * script/pre-commit: script: pre-commit warn if codespell not installed * NEWS.rst, doc/source/modulefile.rst: doc: desc. Dependencies between modulefiles Fixes #431. Fixes #433. 2022-03-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * CONTRIBUTING.rst, MIGRATING.rst, NEWS.rst, README.md, doc/source/FAQ.rst, doc/source/changes.rst, doc/source/cookbook/compiler-etc-dependencies.rst, doc/source/design/hide-or-forbid-modulefile.rst, doc/source/design/output-configuration.rst, .../design/source-shell-script-in-modulefile.rst, doc/source/design/variants.rst, doc/source/index.rst: doc: fix typos found with Aspell 2022-03-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * CONTRIBUTING.rst, NEWS.rst, script/pre-commit: script: add pre-commit script to verify commits * NEWS.rst, tcl/mfinterp.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.70-maint/310-sh-to-mod.exp: Handle empty fish shell function in sh-to-mod/source-sh Update the sh-to-mod and source-sh mechanism to handle fish shell function with an empty body. * NEWS.rst: doc: desc. recent sh-to-mod/source-sh fixes in NEWS * tcl/mfinterp.tcl.in, testsuite/install.00-init/091-source-sh.exp, testsuite/modules.70-maint/310-sh-to-mod.exp: Include private functions in fish sh-to-mod analysis Update the environment analysis made for sh-to-mod sub-command and source-sh modulefile command for fish shell to include the private functions. Catch this way all definition that may be used to set shell completion. 2022-02-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/091-source-sh.exp: ts: test unload of source-sh mods in install ts 2022-02-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .github/workflows/windows_tests.yaml: gh: upgrade to python 3.9 on Cygwin Seem a new python37-sphinx release on Cygwin has broken dependencies, so upgrate Cygwin test cases to python 3.9 which is the recommanded version. * .codespellrc: codespell: ignore spack/miniconda3/OpenFOAM-dev content * .cirrus.yml, .gitignore, Makefile, testsuite/install.00-init/091-source-sh.exp, testsuite/modulefiles.3/source-sh/openfoam: install/ts: test source-sh over OpenFOAM scripts 2022-02-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/091-source-sh.exp: ts: test source-sh over Conda script on ksh/zsh/tcsh/fish * tcl/mfinterp.tcl.in: Fix csh alias detection on source-sh Alias definition may sometimes be enclosed in parenthesis on csh shell. Fix alias parsing regexp to support such definition. Useful for Conda initialization script for csh shell: conda shell alias definition is presented by csh shell enclosed in parenthesis. Fixes #434. * .cirrus.yml, .gitignore, Makefile: install/ts: fetch/install Conda/Spack for source-sh tests Add directives into Makefile to fetch and install Spack and Conda in order to test source-sh feature against their profile scripts. * testsuite/example/sh-to-mod.fish: ts: test fish complete def without -c when fish>=3.2 Test fish shell completion definition without -c/--complete option when fish is >=3.2 instead of >=3.0. * .cirrus.yml, testsuite/install.00-init/091-source-sh.exp, testsuite/modulefiles.3/source-sh/conda: ts: test source-sh over Conda scripts in install ts * .cirrus.yml: cirrus: upgrade linux test env to ubuntu 20.04 2022-02-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/120-autoinit.exp: ts: fix autoinit tests after modulecmd.tcl output quoting * testsuite/install.00-init/020-module.exp, testsuite/install.00-init/090-sh-to-mod.exp, testsuite/modulefiles.3/noglobeval/1.0: ts: update install tests after modulecmd.tcl output quoting * .github/workflows/linux_tests.yaml, INSTALL.rst, Makefile, Makefile.inc.in, NEWS.rst, configure, doc/source/changes.rst, doc/source/module.rst, init/Makefile, init/fish_completion, init/zsh-functions/_module.in, site.exp.in, tcl/envmngt.tcl.in, tcl/init.tcl.in, testsuite/example/initrc.in, testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/220-config.exp: Revert work on noglob_eval_shells config option Remove entirely the work on the noglob_eval_shells option as enclosing in quotes the generated output of modulecmd.tcl to pass it to the eval command is equivalent to disable the pathname expansion mechanism of sh-kind shells. * init/bash.in, init/ksh.in, init/sh.in, init/zsh.in: init: translate `` into $() for sh-kind shells * doc/source/FAQ.rst, doc/source/module.rst: doc: translate `` into $() for sh-kind shells 2022-02-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/envmngt.tcl.in: Translate `` into $() for sh-kind shells As the module shell function code is currently updated for sh-kind shells, take this opportunity to translate the `cmd` execution syntax into the more modern $(cmd) syntax. 2022-02-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/091-source-sh.exp: ts: test ksh/zsh over Spack scripts in install ts * tcl/envmngt.tcl.in: Enclose modulecmd.tcl output in quotes on sh-kind shells Update the module shell function definition for sh-kind shell to enclose the output generated by modulecmd.tcl in quotes in order to pass it to the eval command. Quoting code to pass it to eval brings correctness to the definition of shell functions without harming already well functionning definition. Regular shell function definition could now be correctly defined in user environment: no more need to get each command line in these function ending with a ';' character. Same mechanism was applied in initialization script to evaluate the code produced by the autoinit sub-command. Multiple function-definition issues spotted when using source-sh across environment setting script shell are fixed with this change. Moreover, all the noglob_eval_shells work is made useless with this change as no globbing is applyed to the code produced by modulecmd.tcl as it is now enclosed in quotes. 2022-02-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/sh-to-mod.fish, testsuite/example/sh-to-mod.sh, testsuite/install.00-init/090-sh-to-mod.exp, testsuite/modules.50-cmds/078-refresh.exp, testsuite/modules.50-cmds/400-source-sh.exp, testsuite/modules.70-maint/310-sh-to-mod.exp: ts: test wildcard char in func on sh-to-mod tests 2022-02-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/bin/install_test_csh, testsuite/example/sh-to-mod.csh, testsuite/example/sh-to-mod.fish, testsuite/example/sh-to-mod.sh, testsuite/install.00-init/090-sh-to-mod.exp, testsuite/modules.50-cmds/400-source-sh.exp, testsuite/modules.70-maint/310-sh-to-mod.exp: ts: test wildcard char in envvar on sh-to-mod tests 2022-02-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .cirrus.yml, testsuite/install.00-init/091-source-sh.exp, testsuite/modulefiles.3/source-sh/spack: ts: test source-sh over Spack scripts in install ts * doc/source/changes.rst: doc: desc. MODULES_NOGLOB_EVAL_SHELLS in changes * testsuite/example/sh-to-mod.fish, testsuite/modules.70-maint/310-sh-to-mod.exp: ts: test sh-to-mod against fish nested func/_ in name 2022-02-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/mfinterp.tcl.in: Correctly escape [ and | in builtin fish funcs Update execShAndGetEnv to correctly escape the '[' and '|' characters in fish shell code to filter builtin commands. These character were not correctly escaped previously (replaced by '$1'). * tcl/mfinterp.tcl.in: Remove dup ';' in execShAndGetEnv getfunc fish code * NEWS.rst, tcl/mfinterp.tcl.in: Fix fish builtin func withdrawal on sh-to-mod/source-sh Fix the fish code to withdraw builtin functions to compare functions defined before and after fish script shell execution in execShAndGetEnv procedure. Previous regexp was not matching the full string, so every function whose name contained a substring equal to the name of a builtin function (like '_') where filtered. * NEWS.rst, doc/source/design/source-shell-script-in-modulefile.rst, tcl/mfinterp.tcl.in: Support fish nested function on sh-to-mod/source-sh On fish shell, function definition can be embedded inside function definition. Update the execShAndGetEnv procedure to add a string separated after each function definition (%ModulesSubShToMod%) to clearly delimitate the shell function to analyse and report and skip the definition of nested functions. 2022-02-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .cirrus.yml, .github/workflows/linux_tests.yaml: cirrus/gh: remove broken snapd fish config Remove snapd file that breaks fish shell on bionic (see https://bugs.launchpad.net/ubuntu/+source/snapd/+bug/1961365). * testsuite/install.00-init/020-module.exp, testsuite/modulefiles.3/noglobeval/1.0: ts: add install tests for noglob_eval_shells * .github/workflows/linux_tests.yaml, testsuite/example/initrc.in, testsuite/modules.70-maint/120-autoinit.exp: ts: test noglob_eval_shells over autoinit subcmd 2022-02-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.70-maint/220-config.exp: ts: test noglob_eval_shells config option 2022-02-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc. noglob_eval_shells in man/changes/NEWS 2022-02-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst: doc: desc. --with-noglob-eval-shells option in INSTALL * tcl/envmngt.tcl.in: Disable pathname expansion prior shell eval Add code in module shell function (for shells listed in noglob_eval_shells) to disable pathname expansion for the time of produced shell code evaluation. 2022-02-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/Makefile, init/fish_completion, init/zsh-functions/_module.in: init: add noglob_eval_shells config to completion scripts * Makefile, Makefile.inc.in, configure, site.exp.in, tcl/init.tcl.in: install: add --with-noglob-eval-shells configure opt Introduce the --with-noglob-eval-shells configure option to choose at installation time if the pathname expansion should be disabled or not in the module function to evaluate shell code produced by modulecmd.tcl, for the shells listed in option value. * tcl/init.tcl.in: Add noglob_eval_shells configuration option Add noglob_eval_shells configuration option that controls whether or not the module shell function should disable pathname expansion to evaluate shell code produced by modulecmd.tcl script. Enabled by default for sh, bash ans ksh shells. Support also zsh shell. When configuration option is modified it sets the MODULES_NOGLOB_EVAL_SHELLS environment variable. Pathname expansion is primarily an issue of bash and ksh93 shells when evaluating shell function body code. It also impacts bash-flavored sh shells. So the option is provided to support any shell from the sh family, but disabled by default for shells not having the globbing issue (zsh). 2022-02-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .codespellrc: Add codespell configuration for the project * contrib/modulefiles/openwin, testsuite/modules.50-cmds/190-load.exp: ts: fix some other typos in tests * MIGRATING.rst, NEWS.rst, doc/source/cookbook/sticky-modules.rst, doc/source/design/sticky-modules.rst, doc/source/design/variants.rst, doc/source/module.rst, tcl/modeval.tcl, tcl/subcmd.tcl.in, testsuite/modules.50-cmds/460-sticky.exp, testsuite/modules.50-cmds/461-super-sticky.exp, testsuite/modules.50-cmds/462-sticky-corner.exp, testsuite/modules.50-cmds/475-variant-tag.exp, testsuite/modules.61-coll/040-restore.exp: Fix stickiness typos Fixes #442. 2022-02-17 Dimitri Papadopoulos <3234522+DimitriPapadopoulos@users.noreply.github.com> * INSTALL.rst, contrib/modulefiles/scheme/racket/5.0.2, doc/source/cookbook/new-features-without-breaking-old-module.rst, doc/source/design/extended-default.rst, doc/source/design/hide-or-forbid-modulefile.rst, doc/source/design/insensitive-case.rst, doc/source/design/sticky-modules.rst: Fix typos not found by codespell * contrib/modulefiles/gnu, contrib/modulefiles/openwin: contrib: fix additional typos 2022-02-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/modulefiles/java/6/35, contrib/modulefiles/java/6/38, contrib/modulefiles/java/7/07, contrib/modulefiles/java/7/11, contrib/modulefiles/openwin, contrib/readme.txt, contrib/rpm/environment-modules.spec.in: contrib: fix typos found in several files * NEWS.rst: doc: fix typos in NEWS * testsuite/modulefiles/module/unk, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.70-maint/055-whatis.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp: ts: fix NonExistent typo in several tests Fixes #439 2022-02-16 Dimitri Papadopoulos <3234522+DimitriPapadopoulos@users.noreply.github.com> * init/bash.in, init/cmake.in, init/fish.in, init/ksh.in, init/perl.pm.in, init/python.py.in, init/r.R.in, init/ruby.rb.in, init/sh.in, init/tcl.in, init/zsh.in: init: fix typo in comment 2022-02-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/140-color.exp: ts: fix 00/{120,140} tests after typos fix * NEWS.rst: doc: desc. typos fix in NEWS 2022-02-13 Dimitri Papadopoulos <3234522+DimitriPapadopoulos@users.noreply.github.com> * .github/ISSUE_TEMPLATE/bug_report.md, Makefile.inc.in, README.md, configure, .../guide/get_started/08-guide_modulefile_search-alias.sh, doc/example/compiler-etc-dependencies/homebrewed/bar/common, doc/example/expose-procs-vars-to-modulefiles/siteconfig.tcl, doc/example/inhibit-report-info/siteconfig.tcl, doc/example/unload-firstly-loaded/siteconfig.tcl, doc/source/FAQ.rst, doc/source/changes.rst, doc/source/cookbook/compiler-etc-dependencies.rst, doc/source/cookbook/modulefiles-in-git.rst, .../cookbook/new-features-without-breaking-old-module.rst, doc/source/design/default-latest-version-specifiers.rst, doc/source/design/hide-or-forbid-modulefile.rst, doc/source/design/lmod-tcl-modulefile-compat.rst, doc/source/design/sticky-modules.rst, doc/source/design/variants.rst, doc/source/module.rst, script/mlprof, script/mpub, tcl/coll.tcl, tcl/init.tcl.in, tcl/modfind.tcl.in, testsuite/config/base-config.exp, testsuite/example/siteconfig.tcl-1, testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/070-stderrtty.exp, testsuite/modulefiles/append/1.7, testsuite/modulefiles/append/2.4, testsuite/modulefiles/help/2.0, testsuite/modulefiles/info/mode3, testsuite/modulefiles/info/mode4, testsuite/modulefiles/info/userexp, testsuite/modulefiles/loc_dv1/1.0, testsuite/modulefiles/loc_dv1/2.0, testsuite/modulefiles/loc_dv1/3.0, testsuite/modulefiles/loc_dv2/1.0, testsuite/modulefiles/loc_dv2/2.0, testsuite/modulefiles/loc_dv3/1.0, testsuite/modulefiles/loc_dv3/2.0, testsuite/modulefiles/loc_dv4/1.0, testsuite/modulefiles/loc_dv4/2.0, testsuite/modulefiles/loc_dv6/1.0, testsuite/modulefiles/loc_dv7/1.0, testsuite/modulefiles/loc_dv7/3.0, testsuite/modulefiles/loc_dv8/1.0, testsuite/modulefiles/loc_dv8/2.0, testsuite/modulefiles/loc_dv9/.version, testsuite/modulefiles/loc_dv9/1.0, testsuite/modulefiles/loc_dv9/2.0, testsuite/modulefiles/loc_dvv1/.common, testsuite/modulefiles/loc_dvv1/.modulerc, testsuite/modulefiles/loc_dvv1/.version, testsuite/modulefiles/loc_fq/1.0, testsuite/modulefiles/loc_fq/2.0, testsuite/modulefiles/loc_rc5/1.0, testsuite/modulefiles/loc_rc5/2.0, testsuite/modulefiles/loc_sym/alias3, testsuite/modulefiles/loc_sym/alias5, testsuite/modulefiles/loc_sym/alias8, testsuite/modulefiles/loc_sym/getvers10, testsuite/modulefiles/loc_sym/getvers5, testsuite/modulefiles/loc_sym/getvers6, testsuite/modulefiles/loc_sym/getvers7, testsuite/modulefiles/loc_sym/versinf3, testsuite/modulefiles/loc_sym/versinf4, testsuite/modulefiles/loc_sym/versinf5, testsuite/modulefiles/loc_sym/version11, testsuite/modulefiles/loc_sym/version12, testsuite/modulefiles/loc_sym/version13, testsuite/modulefiles/loc_sym/version14, testsuite/modulefiles/loc_sym/version2, testsuite/modulefiles/loc_sym/version3, testsuite/modulefiles/loc_sym/version4, testsuite/modulefiles/loc_sym/version6, testsuite/modulefiles/loc_sym/version7, testsuite/modulefiles/loc_sym/version8, testsuite/modulefiles/loc_sym/version9, testsuite/modulefiles/spread/1.0, testsuite/modulefiles/spread/2.0, testsuite/modulefiles/spread/3.0, testsuite/modulefiles/spread/4.0, testsuite/modulefiles/spread/5.0, testsuite/modulefiles/spread/6.0, testsuite/modulefiles/spread/7.0, testsuite/modulefiles/spread/8.0, testsuite/modulefiles/spreadrc/dir1/1.0, testsuite/modulefiles/spreadrc/dir2/1.0, testsuite/modulefiles/spreadrc/dir3/1.0, testsuite/modulefiles/spreadrc/dir4/1.0, testsuite/modulefiles/spreadrc/dir5/1.0, testsuite/modulefiles/spreadrc/dir6/1.0, testsuite/modulefiles/spreadrc/dir7/1.0, testsuite/modulefiles/spreadrc/dir8/1.0, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/100-pager.exp, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/130-auto_handling.exp, testsuite/modules.00-init/140-color.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.20-locate/030-defvers.exp, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/038-defcontext.exp, testsuite/modules.20-locate/065-rcerrs.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.20-locate/110-hide.exp, testsuite/modules.20-locate/111-hide-hard.exp, testsuite/modules.20-locate/115-forbid.exp, testsuite/modules.20-locate/118-hidden-loaded.exp, testsuite/modules.20-locate/119-hide-cascading.exp, testsuite/modules.50-cmds/035-unsetenv-undo.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/076-alias-sub.exp, testsuite/modules.50-cmds/084-info-mode-exp.exp, testsuite/modules.50-cmds/085-info-flags.exp, testsuite/modules.50-cmds/100-loglevel.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/371-deps2.exp, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/375-deps6.exp, testsuite/modules.50-cmds/376-deps7.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-deps8.exp, testsuite/modules.50-cmds/378-sametarget.exp, testsuite/modules.50-cmds/380-altname.exp, testsuite/modules.50-cmds/450-hidden-loaded.exp, testsuite/modules.61-coll/020-savelist.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.70-maint/030-purge.exp, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/048-listlongno.exp, testsuite/modules.70-maint/056-whatis-nullpath.exp, testsuite/modules.70-maint/060-apropos.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/200-errdisp.exp, testsuite/modules.70-maint/271-adv_version_spec-in.exp, testsuite/modules.70-maint/272-adv_version_spec-range.exp, testsuite/modules.70-maint/273-adv_version_spec-space.exp, testsuite/modules.70-maint/310-sh-to-mod.exp, testsuite/modules.70-maint/320-tags.exp, testsuite/modules.70-maint/350-term_width.exp, testsuite/modules.70-maint/360-avail_output.exp, testsuite/modules.70-maint/999-cleanup.exp, testsuite/modules.90-avail/020-single.exp, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/050-long.exp, testsuite/modules.90-avail/060-empty.exp, testsuite/modules.90-avail/070-full.exp, testsuite/modules.91-sort/020-avail.exp: Fix typos found by codespell 2022-02-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .cirrus.yml: cirrus: move from centos8 to rockylinux8 2022-02-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst: doc: desc. shell completion features in MIGRATING 2022-02-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/400-source-sh.exp: ts: add refresh tests on source-sh in 50/400 * doc/source/design/shell-completion.rst, .../design/source-shell-script-in-modulefile.rst, testsuite/modules.50-cmds/400-source-sh.exp, testsuite/modules.50-cmds/540-complete.exp: doc/ts: completion is first cleared before set on fish * tcl/envmngt.tcl.in, tcl/mfinterp.tcl.in: Ensure pre-existing fish completion is cleared When defining completion for a given command on fish shell, start by clearing any potential previous completion definition. Modulefile should this way provide the full completion definition for command and cannot rely on partial definition coming from other sides. 2022-02-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc. completion support on source-sh/sh-to-mod in NEWS * .../design/source-shell-script-in-modulefile.rst: doc: desc. shell completion support on source-sh in design * doc/source/changes.rst: doc: desc. completion support on sh-to-mod/source-sh in changes * doc/source/module.rst, doc/source/modulefile.rst: doc: desc. completion support on sh-to-mod/source-sh man 2022-02-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/sh-to-mod.fish, testsuite/modulefiles.2/source-sh/7.2, testsuite/modules.50-cmds/400-source-sh.exp, testsuite/modules.70-maint/310-sh-to-mod.exp: ts: test fish complete on sh-to-mod/source-sh 2022-02-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/sh-to-mod.sh, testsuite/modulefiles.2/source-sh/7.1, testsuite/modules.50-cmds/400-source-sh.exp, testsuite/modules.70-maint/310-sh-to-mod.exp: ts: test bash complete on sh-to-mod/source-sh 2022-02-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/sh-to-mod.csh, testsuite/modulefiles.2/source-sh/7.0, testsuite/modulefiles.2/source-sh/8.0, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/400-source-sh.exp, testsuite/modules.70-maint/310-sh-to-mod.exp: ts: test tcsh complete on sh-to-mod/source-sh 2022-02-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/mfinterp.tcl.in: Tcsh support for complete/uncomplete changes on sh-to-mod Update execShAndGetEnv procedure to add support for complete and uncomplete changes on sh-to-mod for tcsh shell. * tcl/mfinterp.tcl.in: Fish support for complete/uncomplete changes on sh-to-mod Update execShAndGetEnv procedure to add support for complete and uncomplete changes on sh-to-mod for fish shell. * tcl/mfinterp.tcl.in: Bash support for complete/uncomplete changes on sh-to-mod Update execShAndGetEnv procedure to add support for complete and uncomplete changes on sh-to-mod for bash shell. * tcl/mfinterp.tcl.in, tcl/modfind.tcl.in: Support for complete/uncomplete changes on sh-to-mod Update the sh-to-mod and execShAndGetEnv procedures to analyze complete and uncomplete changes on sourced shell script and render the corresponding modulefile commands. Add basic code for shells that do no support complete/uncomplete environment changes. 2022-02-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/020-module.exp, testsuite/modulefiles.3/complete/1.0, testsuite/modulefiles.3/complete/1.1: ts: add complete test in install ts 2022-02-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/complete/.modulerc, testsuite/modulefiles.3/complete/1.1, testsuite/modulefiles.3/complete/1.2, testsuite/modules.50-cmds/541-uncomplete.exp: ts: add tests for uncomplete mfcmd in 50/541 2022-01-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/complete/.modulerc, testsuite/modulefiles.3/complete/1.0, testsuite/modulefiles.3/complete/1.2, testsuite/modulefiles.3/complete/2.0, testsuite/modules.50-cmds/540-complete.exp: ts: add tests for complete mfcmd in 50/540 2022-01-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/vim/syntax/modulefile.vim: vim: add syntax highlight for complete/uncomplete * doc/source/modulefile.rst: doc: desc. complete/uncomplete in man * NEWS.rst, doc/source/changes.rst: doc: desc. complete/uncomplete in NEWS/changes * tcl/envmngt.tcl.in, tcl/mfinterp.tcl.in, tcl/modeval.tcl: Add complete/uncomplete modulefile commands Introduce the complete and uncomplete modulefile commands to define completion mechanism on running shell. It supports only shell with completion capabilities that could be defined with shell commands: bash, tcsh and fish. complete command takes a shell name as first argument to apply completion specification only if currently running shell corresponds to this shell name set as argument. This is done as completion implementation is really different from one shell to another. Also the arguments passed after command name are specific of the shell and are not checked by module command. When unloading module, complete becomes uncomplete. uncomplete can also be set as an independent modulefile command and only acts on load evaluation module. complete is also evaluated in refresh evaluation mode to push completion definition in sub-shells for instance. Multiple completion definition for the same command may be defined and will be applied to shell. Some shell, like fish, needs multiple complete commands to fully define all parameters for the completion of a single command. * NEWS.rst, doc/source/design/shell-completion.rst: doc: add shell-completion design notes 2022-01-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/230-verbosity.exp: ts: check trace of dynamically defined procs 2022-01-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/list/1.0, testsuite/modulefiles.3/list/2.0, testsuite/modulefiles.3/variant/6.0, testsuite/modules.00-init/140-color.exp, testsuite/modules.50-cmds/530-module-list.exp, testsuite/modules.70-maint/290-json.exp, testsuite/modules.70-maint/361-list_output.exp, testsuite/modules.70-maint/400-list-search.exp: ts: test pattern search on list sub-cmd 2022-01-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst: doc: improve pattern search desc. on avail subcmd 2022-01-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, doc/source/changes.rst, doc/source/module.rst: doc: desc. list filtering in NEWS/changes/man 2022-01-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/071-args.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.70-maint/190-emptyarg.exp: ts: adapt existing tests now list accepts args 2022-01-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/init.tcl.in, tcl/subcmd.tcl.in: Add search capabilities to list subcmd When module specification is passed to the list sub-command, only output the loaded modules that matches at least one of these specification (OR operation). Sub-command header message is adapted when module specifications are passed to the sub-command. However same header message is reported if there is no loaded module to report from the start. Search capabilities rely on the modEq comparison procedure, so it takes into account the search_match mode (starts-with/contains), the alternative names set over loaded modules and the variant defined. Only the first specified search pattern is set for SGR highlight due to the current limitation of reportModules procedure (which only accepts one mod argument). 2022-01-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/modspec.tcl, testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: Restore psuf arg on modEq proc Pattern suffix is useful again on modEq comparison procedure due to the introduction of search capabilities on the list sub-command. 2022-01-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Allow search match option on list subcmd Allow to pass the search match options (-S/-C) to the list sub-command. * tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Allow mod spec as argument to list subcmd Allow the list sub-command to receive module specifications as argument. * tcl/modspec.tcl: Trace dynamically defined procs in debug2 mode When verbosity is set to debug2 or an higher mode, also add trace to the procedure that are dynamically generated during the modulecmd.tcl run. 2022-01-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/main.tcl.in, testsuite/modules.00-init/090-switches.exp: Add --initial_load cmd-line option Add dummy support for the --initial_load command-line option for compatiblity with script written for Lmod. Goal here is just to avoid error when this option is used. * tcl/main.tcl.in, testsuite/modules.00-init/090-switches.exp: Add --no_redirect cmd-line option Add dummy support for the --no_redirect command-line option for compatiblity with script written for Lmod. Goal here is to avoid error when this option is used. Support not added within module shell function. 2022-01-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst: doc: add ref to reduce-io-load recipe in MIGRATING * MIGRATING.rst, doc/source/changes.rst, doc/source/cookbook/reduce-io-load.rst: doc: fix typos in MIGRATING/changes/reduce-io-load 2022-01-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, doc/source/_static/terminal_output.css, doc/source/conf.py, doc/source/cookbook/reduce-io-load.rst: doc: add reduce-io-load cookbook recipe 2022-01-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/flatlcompat, testsuite/modulefiles.3/lcompat/.modulerc, testsuite/modulefiles.3/lcompat/1.8, testsuite/modulefiles.3/lcompat/1.9/1.9, testsuite/modulefiles.3/lcompat/1.9/2.0, testsuite/modules.50-cmds/519-family.exp: ts: test family mfcmd in 50/519 2022-01-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/lmod-tcl-modulefile-compat.rst: doc: desc. family in design doc * NEWS.rst: doc: desc. family/MODULES_FAMILY_<NAME> in NEWS * contrib/vim/syntax/modulefile.vim: vim: add syntax highlight for family mfcmd * doc/source/changes.rst, doc/source/module.rst: doc: desc. MODULES_FAMILY_<NAME> in man/changes * doc/source/changes.rst, doc/source/modulefile.rst: doc: desc. family in man/changes 2022-01-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/mfinterp.tcl.in: Add family modulefile command Introduce the family modulefile command that indicates currently loading module provides name passed as argument and this name could only be provided by one loaded module. family is implemented with the combined definition of a conflict and a module alias. An environment variable is set to indicate what module currently provides for the family within the loaded environment. 2022-01-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/puts/prestdout, testsuite/modules.50-cmds/311-puts-prestdout.exp: ts: test prestdout channel on puts command in 50/311 * NEWS.rst, doc/source/changes.rst, doc/source/modulefile.rst: doc: desc. prestdout channel in man/changes/NEWS * tcl/envmngt.tcl.in, tcl/mfinterp.tcl.in, tcl/modeval.tcl: Add prestdout channel to puts command Introduce the prestdout channel for the modified puts command to be able to set specific content prior any other content sent to stdout after the environment changes generated by modulefile evaluation. Fixes #432 * NEWS.rst, doc/source/modulefile.rst: doc: desc. puts mfcmd in man 2022-01-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/modulefile.rst: doc: desc auto_handling on prereq in man 2022-01-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/modfind.tcl.in: Clean useless code in setLoadedAltname 2022-01-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst: doc: desc. mcookie_check in MIGRATING 2022-01-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/modfind.tcl.in: Protect 'file mtime' call when do not know what we check Catch error of file mtime when targeted file has not been checked previously (when mcookie_check is set to 'eval'). 2022-01-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc. mcookie_check in NEWS 2021-12-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles/loc_dv1/3.0, testsuite/modulefiles/loc_dv4/1.0, testsuite/modulefiles/loc_dv4/2.0, testsuite/modulefiles/loc_rc1/.modulerc, testsuite/modulefiles/loc_virt2/.modulerc, testsuite/modulefiles/mcookie/1, testsuite/modules.00-init/005-init_ts.exp, .../modules.20-locate/130-mcookie_check_eval.exp, testsuite/modules.61-coll/040-restore.exp: ts: test mcookie_check set to eval in 20/130 2021-12-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, doc/source/design/magic-cookie-check.rst: doc: add magic-cookie-check design notes 2021-12-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.70-maint/220-config.exp: ts: test mcookie_check config option * tcl/modfind.tcl.in: No mcookie check when searching module Update checkValidModule to skip Module magic cookie check in file if mcookie_check configuration option is not set to 'always'. When mcookie_check is set to 'eval', files are not read when searching modulefiles. Which means any file located within a modulepath directory is considered a modulefile. An error will be obtained if an attempt is made to evaluate a non-modulefile located in a modulepath directory. Also if a modulefile is specified fullpath, Modules magic cookie will also not be checked if mcookie_check is set to 'eval', and if this file is not a modulefile an error will be obtained if an attempt is made to evaluate this file. 2021-12-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/changes.rst, doc/source/module.rst, doc/source/modulefile.rst: doc: desc mcookie_check in changes/man * doc/source/changes.rst, doc/source/module.rst: doc: desc MODULES_MCOOKIE_CHECK in changes/man * init/Makefile, init/fish_completion, init/zsh-functions/_module.in: init: add mcookie_check config to completion script * tcl/init.tcl.in: Add mcookie_check configuration option Add the mcookie_check configuration option that controls whether or not the magic cookie at the start of modulefile (`#%Module`) need to get checked. 2022-01-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * configure, doc/source/conf.py, tcl/coll.tcl, tcl/envmngt.tcl.in, tcl/init.tcl.in, tcl/main.tcl.in, tcl/mfinterp.tcl.in, tcl/modeval.tcl, tcl/modfind.tcl.in, tcl/modspec.tcl, tcl/report.tcl.in, tcl/subcmd.tcl.in, tcl/util.tcl: New year (2022) copyright mention update 2021-12-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .github/workflows/windows_tests.yaml: gh: precise python-sphinx deps on Cygwin Need to precise all sphinxcontrib packages required as dependency specification of python37-sphinx Cygwin package is regularly broken. 2021-12-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/notreq/loadany, testsuite/modulefiles.3/notreq/loadanymul, testsuite/modulefiles.3/notreq/tryload, testsuite/modulefiles.3/notreq/tryloadmul, testsuite/modules.50-cmds/431-not-req.exp: ts: test --not-req with module try-load/load-any in 50/431 * tcl/main.tcl.in: Add support for --not-req on module try-load/load-any * NEWS.rst, doc/source/changes.rst, doc/source/modulefile.rst: doc: desc. --not-req support on module try-load/load-any * NEWS.rst, doc/source/changes.rst, doc/source/module.rst, doc/source/modulefile.rst: doc: desc. load-any in NEWS/changes/man * NEWS.rst, doc/source/changes.rst, doc/source/design/module-tags.rst, doc/source/modulefile.rst: doc: desc. --tag opt on load-any in NEWS/changes/man/design * doc/source/design/add-new-sub-command.rst: doc: desc. module-info command in add new subcmd guide * testsuite/modulefiles.3/tag/8.0, testsuite/modules.50-cmds/465-tag-opt.exp: ts: add --tag tests for load-any subcmd in 50/465 2021-12-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/loadany/.modulerc, testsuite/modulefiles.3/loadany/1.0, testsuite/modulefiles.3/loadany/2.0, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/518-load-any.exp: ts: test load-any subcmd in 50/518 2021-12-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/modulefile.rst, testsuite/modulefiles/info/commandexp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp: ts/doc: add load-any test/doc on 'module-info command' * testsuite/modulefiles.2/modemptyarg/load-any, testsuite/modules.00-init/071-args.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp: ts: adapt existing tests for try-load subcmd * init/Makefile, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module.in: init: add load-any sub-cmd to completion scripts * tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Introduce load-any sub-command Add the load-any module sub-command that loads first valid module in specified list. Errors for unknown modulefile are silenced like for try-load sub-command. add-any is an alias over load-any sub-command. The any_modulefile state is introduced to indicate cmdModuleLoad to stop after first loaded modulefile in list. When used from a modulefile evaluation context, load-any first checks if a module from its specified list is already loaded. If this is the case, no additional requirement load is performed as constraint is considered satisfied. 2021-12-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/mfinterp.tcl.in, tcl/modeval.tcl: Move requirement load code of prereq in dedicated proc Create the dedicated loadRequirementModuleList procedure to attempt to load a list of module requirement in an OR operation. This procedure is called by prereq modulefile command when auto_handling mode is enabled. 2021-12-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/lmod-tcl-modulefile-compat.rst: doc: desc module load-any in design doc * doc/source/design/lmod-tcl-modulefile-compat.rst: doc: desc. always-load in design doc 2021-12-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/modfind.tcl.in, testsuite/modules.50-cmds/465-tag-opt.exp, testsuite/modules.50-cmds/467-keep-loaded.exp, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/040-restore.exp: Ensure no duplicate in tags set to module Update setModuleTag procedure to avoid adding a tag to module which is already set to avoid duplicate entries. Adapt existing tests. 2021-12-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, doc/source/changes.rst, doc/source/modulefile.rst: doc: desc. always-load in NEWS/changes/man * testsuite/modules.50-cmds/465-tag-opt.exp: ts: fix tests in 50/465 for Tcl 8.5 2021-12-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/keep/1.0, testsuite/modulefiles.3/lcompat/.modulerc, testsuite/modulefiles.3/lcompat/1.7, testsuite/modulefiles.3/tag/8.0, testsuite/modules.50-cmds/465-tag-opt.exp, testsuite/modules.50-cmds/467-keep-loaded.exp, testsuite/modules.50-cmds/517-always-load.exp: ts: test always-load mfcmd in 50/{465,467,517} * tcl/mfinterp.tcl.in: Add always-load modulefile command Introduce always-load modulefile command that loads all modulefile specified (AND operation) and applies to them the keep-loaded module tag in order to avoid these modules to get automatically unloaded. 2021-12-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/mfinterp.tcl.in, testsuite/modules.50-cmds/465-tag-opt.exp, testsuite/modules.50-cmds/515-depends-on.exp, testsuite/modules.50-cmds/516-prereq-all.exp: Pass mfcmd name to parsePrereqCommandArgs proc * contrib/vim/syntax/modulefile.vim: vim: add syntax highlight for always-load mfcmd 2021-12-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/vim/syntax/modulefile.vim: vim: add prereq-{all,any}/require-filename/depends-on mfcmds * testsuite/modulefiles.3/keep/1.0, testsuite/modulefiles.3/keep/2.0, testsuite/modules.50-cmds/467-keep-loaded.exp: ts: test keep-loaded module tag in 50/467 * doc/source/module.rst, doc/source/modulefile.rst: doc: fix missing only html directive in mans * NEWS.rst: doc: desc keep-loaded tag in NEWS * doc/source/changes.rst: doc: fix missing tag_abbrev mconfig in changes 2021-12-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst, doc/source/design/module-tags.rst, doc/source/module.rst, doc/source/modulefile.rst: doc: desc keep-loaded tag in INSTALL/design/mans * configure: install: add default abbrev/sgr for keep-loaded tag * tcl/modeval.tcl: Add keep-loaded module tag Introduce the keep-loaded module tag that avoids an auto-loaded module to get automatically unloaded when all its dependent modules are unloaded. 2021-12-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst: doc: reorg option desc for load/switch/try-load in man * doc/source/module.rst: doc: fix sort of try-add subcmd in man * NEWS.rst, doc/source/changes.rst, doc/source/module.rst, doc/source/modulefile.rst: doc: desc --tag option in changes/NEWS/mans * testsuite/home/coll39, testsuite/home/coll40, testsuite/home/coll41, testsuite/home/coll42, testsuite/home/coll43, testsuite/modulefiles.3/tag/.modulerc, testsuite/modulefiles.3/tag/8.0, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.61-coll/999-cleanup.exp: ts: add collection tests for --tag option 2021-12-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.20-locate/118-hidden-loaded.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/040-restore.exp: ts: adapt existing collection tests for --tag record * tcl/coll.tcl, tcl/modfind.tcl.in, tcl/subcmd.tcl.in: Create getExportTagList from getTagList Create getExportTagList procedure to get list of tags applying to module that can be exported (not loaded or hidden). Use getExportTagList when building persistency variable so serializing code is only useful in this procedure and not anymore in getTagList. * testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/999-cleanup.exp: ts: fix auto-loaded module restore tests in 61/040 2021-12-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/coll.tcl, tcl/modfind.tcl.in, tcl/subcmd.tcl.in: Save tags set on loaded modules in collection Adapt collection mechanism to dump the tags set on loaded module when saving a collection and setting them back when collection is restored. Tags are recorded in collection with the --tag= option set on module load lines. Previously used --notuasked option is still processed if found in collection but when saving new ones the auto-loaded tag is dumped instead 'module load --tag=auto-loaded foo/1.0' for instance. With this current patch savec tags are restored if module is not yet loaded at the correct position in expected loaded module list. 2021-12-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/513-prereq-any.exp, testsuite/modules.50-cmds/515-depends-on.exp, testsuite/modules.50-cmds/516-prereq-all.exp: ts: adapt existing prereq tests for --tag opt 2021-12-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/tag/.modulerc, testsuite/modulefiles.3/tag/8.0, testsuite/modulefiles.3/tag/9.0, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/465-tag-opt.exp: ts: add test for --tag option in 50/465 2021-12-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/main.tcl.in, tcl/mfinterp.tcl.in: Add --tag option to prereq modulefile command Add the --tag option for the prereq modulefile command to be albe to precise tags to apply to loading module when auto handling mode is enabled. This way tags could be specified whatever the dependency mechanism used. Also apply on prereq-any, prereq-all and depends-on modulefile commands. 2021-12-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/module-tags.rst: doc: update module tag design for --tag opt 2021-12-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/main.tcl.in, tcl/mfinterp.tcl.in, tcl/modeval.tcl, tcl/subcmd.tcl.in: Pass and apply tag_list in cmdModuleLoad Transmit the tag list specified on module load, try-load or switch to the cmdModuleLoad procedure to apply these tags to the module to load. Need to refine later on tag list transmission on collection management (cmdModuleRestore) and environment reload (reloadModuleListLoadPhase). An already loaded module will not be reloaded if a different tag list is specified. Loaded tags for this module are not changed either. * init/Makefile, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module.in: init: add --tag= opt to completion scripts 2021-12-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/main.tcl.in, tcl/report.tcl.in: Add parsing of --tag opt for load/switch/try-load subcmds Adapt parseModuleCommandArgs and reportUsage procedures to handle the --tag option for the load, switch and try-load sub-comands. '--tag=LIST' is the syntax for the command-line whereas '--tag LIST' is the main syntax for use within modulefiles. LIST is composed of tag names separated by colon character. Allow --tag for unload sub-command to avoid errors on mixed unload/load ml command. 2021-12-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/lcompat/.modulerc, testsuite/modulefiles.3/lcompat/1.6, testsuite/modules.50-cmds/516-prereq-all.exp: ts: add tests for prereq-all in 50/516 2021-12-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, doc/source/changes.rst, doc/source/modulefile.rst: doc: desc prereq-all in NEWS/changes/man * tcl/mfinterp.tcl.in: Add prereq-all modulefile command Rename depends-on into prereq-all modulefile command and make depends-on an alias on it. * testsuite/modulefiles.3/lcompat/.modulerc, testsuite/modulefiles.3/lcompat/1.5, testsuite/modules.50-cmds/515-depends-on.exp: ts: add tests for depends-on in 50/515 * doc/source/modulefile.rst: doc: split prereq/conflict man description * tcl/mfinterp.tcl.in: Add depends-on modulefile command Introduce the depends-on modulefile command which defines module requirements for currently loading modulefile. This command is an alias over prereq command with all modulefile arguments treated as a Boolean AND operation: all specified modulefiles are required. * NEWS.rst, doc/source/changes.rst, doc/source/design/lmod-tcl-modulefile-compat.rst, doc/source/modulefile.rst: doc: desc depends-on in NEWS/changes/man/design 2021-11-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/lcompat/.modulerc, testsuite/modulefiles.3/lcompat/1.4, testsuite/modulefiles.3/lcompatdep/1.4, testsuite/modulefiles.3/lcompatdep/2.0, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/514-require-fullname.exp: ts: add tests for require-fullname in 50/514 * tcl/mfinterp.tcl.in, tcl/modfind.tcl.in, tcl/modspec.tcl: Add require-fullname modulefile command Introduce the require-fullname modulefile command that raises an error if loading module is not fully qualified. Alias and symbols are considered fully qualified versions expect for the default symbol. Add the filter_default argument on getAllModuleResolvedName procedure to exclude module parent name and default symbol version from alternative name list. Update modEq procedures to call for getAllModuleResolvedName with filter_default mode enabled when ismodlo argument is set to 4. 2021-11-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, doc/source/changes.rst, doc/source/modulefile.rst: doc: desc. require-fullname in man/changes/NEWS * NEWS.rst, doc/source/design/lmod-tcl-modulefile-compat.rst: doc: add lmod-tcl-modulefile-compat initial version * NEWS.rst, doc/source/changes.rst, doc/source/modulefile.rst: doc: desc reportError and reportWarning in man/changes/NEWS 2021-11-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/lcompat/.version, testsuite/modules.20-locate/120-moduleversion.exp: ts: test ModuleVersion in 20/120 * NEWS.rst, doc/source/changes.rst, tcl/mfinterp.tcl.in: Set ModuleVersion as an alias over ModulesVersion Set ModuleVersion as an alias over ModulesVersion modulefile variable for compatibility with Lmod Tcl modulefiles. * NEWS.rst, doc/source/modulefile.rst: doc: desc ModulesVersion mfvar in man * NEWS.rst, tcl/mfinterp.tcl.in, testsuite/modules.50-cmds/513-prereq-any.exp: Clear msg when no arg is passed to prereq Produce a clear error message when wrong number of argument is received by prereq command. * testsuite/modulefiles.3/lcompat/.modulerc, testsuite/modulefiles.3/lcompat/1.3, testsuite/modules.50-cmds/513-prereq-any.exp: ts: add tests for prereq-any in 50/513 * NEWS.rst, doc/source/changes.rst, doc/source/modulefile.rst: doc: desc prereq-any in man/NEWS/changes * tcl/mfinterp.tcl.in: Add prereq-any modulefile command Introduce the prereq-any modulefile command which is a bare alias for the prereq command. * NEWS.rst, doc/source/modulefile.rst: doc: desc {add,remove}-property/extensions in man/NEWS 2021-11-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/lcompat/.modulerc, testsuite/modulefiles.3/lcompat/1.2, testsuite/modules.50-cmds/512-extensions.exp: ts: add test for extensions in 50/512 * testsuite/modulefiles.3/lcompat/.modulerc, testsuite/modulefiles.3/lcompat/1.1, testsuite/modules.50-cmds/511-remove-property.exp: ts: add tests for remove-property in 50/511 * testsuite/modulefiles.3/lcompat/.modulerc, testsuite/modulefiles.3/lcompat/1.0, testsuite/modulefiles.3/lcompat/2.0, testsuite/modules.50-cmds/510-add-property.exp: ts: add tests for add-property in 50/510 * doc/source/changes.rst: doc: desc. add-property/remove-property/extensions in changes * tcl/mfinterp.tcl.in: Add add-property/extensions/remove-property cmds Introduce the add-property, extensions and remove-property modulefile commands. Implemented as a no-operation command for modulefile evaluation context. 2021-11-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .cirrus.yml: ts: update CI config to test completiondir install opt 2021-11-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst, NEWS.rst: doc: desc completiondir install opts in NEWS/INSTALL 2021-11-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/rpm/environment-modules.spec.in: rpm: use shell-specific completion dir * Makefile.inc.in, configure, init/Makefile, init/fish.in, site.exp.in: install: add --with-fishcompletiondir configure opt Add the --with-fishcompletiondir option to the configure installation script to define a particular installation directory for the fish completion script. If option is not defined, fish completion script is installed by default in initdir and it is sourced in fish init script. If option is set, completion script is installed in designated directory and fish init script does not source it. * Makefile.inc.in, configure, init/Makefile, init/bash.in, site.exp.in: install: add --with-bashcompletiondir configure opt Add the --with-bashcompletiondir option to the configure installation script to define a particular installation directory for the bash completion script. If option is not defined, bash completion script is installed by default in initdir and it is sourced in bash init script. If option is set, completion script is installed in designated directory and bash init script does not source it. 2021-11-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile.inc.in, configure, init/Makefile, init/zsh.in, site.exp.in: install: add --with-zshcompletiondir configure opt Add the --with-zshcompletiondir option to the configure installation script to define a particular installation directory for the zsh completion script. If option is not defined, zsh completion script is installed by default in initdir and the FPATH environment variable is set in zsh init script. If option is set, completion script is installed in designated directory and zsh init script does not set the FPATH environment variable. Fixes #428 * MIGRATING.rst: doc: desc. modfile command behavior opts in MIGRATING 2021-11-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/path-cmd-opt/1.5, testsuite/modules.50-cmds/505-set-if-undef.exp: ts: test setenv --set-if-undef on modfile cmds * doc/example/top-priority-values/siteconfig.tcl, doc/source/cookbook/top-priority-values.rst: doc: update setenv in top-priority-values recipe config 2021-11-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.50-cmds/400-source-sh.exp, testsuite/modules.50-cmds/504-unset-on-unload.exp, testsuite/modules.70-maint/300-err_stack.exp: ts: fix existing setenv tests for --set-if-undef * NEWS.rst, doc/source/changes.rst, doc/source/modulefile.rst: doc: desc. setenv --set-if-undef in man/changes/NEWS * tcl/mfinterp.tcl.in: Add --set-if-undef option on setenv Add the --set-if-undef option on the setenv modulefile command. When set, the environment variable is set when modulefile is loaded only if currently unset. Fixes #425 2021-11-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/mfinterp.tcl.in: Parse setenv args with parseUnsetenvCommandArgs Add the parseUnsetenvCommandArgs procedure to parse arguments set on setenv modulefile command. Split procedure for setenv and unsetenv commands in whatis evaluation mode, as both commands now have different set of options that should also be parsed in whatis mode to extract targeted environment variable name. * testsuite/modulefiles.3/path-cmd-opt/1.4, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/504-unset-on-unload.exp: ts: test unsetenv --unset-on-unload on modfile cmds * NEWS.rst, doc/source/changes.rst, doc/source/modulefile.rst: doc: desc. unsetenv --unset-on-unload in man/changes/NEWS * testsuite/modules.50-cmds/030-unsetenv.exp, testsuite/modules.50-cmds/035-unsetenv-undo.exp: ts: fix existing unsetenv tests for --unset-on-unload * tcl/mfinterp.tcl.in: Add --unset-on-unload option on unsetenv Add the --unset-on-unload option on the unsetenv modulefile command. When set, the environment variable is unset when modulefile is unloaded, like it does when modulefile is loaded. 2021-11-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/path-cmd-opt/1.3, testsuite/modules.50-cmds/503-noop-on-unload.exp: ts: test unsetenv --noop-on-unload on modfile cmds * NEWS.rst, doc/source/changes.rst, doc/source/modulefile.rst: doc: desc. unsetenv --noop-on-unload in man/changes/NEWS * testsuite/modules.50-cmds/030-unsetenv.exp, testsuite/modules.50-cmds/035-unsetenv-undo.exp: ts: fix existing unsetenv tests for --noop-on-unload * tcl/mfinterp.tcl.in: Add --noop-on-unload option on unsetenv Add the --noop-on-unload option to the unsetenv modulefile command. Corresponds to the actual default behavior, which is enforced even if a value to restore on unload mode is specified. * tcl/mfinterp.tcl.in: Parse unsetenv args with parseUnsetenvCommandArgs Add the parseUnsetenvCommandArgs procedure to parse the arguments set on an unsetenv moduefile command. 2021-11-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/path-cmd-opt/1.3, testsuite/modules.50-cmds/503-noop-on-unload.exp: ts: test --noop-on-unload option on modfile cmds 2021-11-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, doc/source/changes.rst, doc/source/modulefile.rst: doc: desc. --noop-on-unload in man/changes/NEWS * testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.70-maint/150-append-path.exp, testsuite/modules.70-maint/151-prepend-path.exp, testsuite/modules.70-maint/152-remove-path.exp: ts: test --noop-on-unload option on subcmds * tcl/envmngt.tcl.in, tcl/mfinterp.tcl.in, tcl/subcmd.tcl.in: Add --noop-on-unload on remove-path/module unuse Add the --noop-on-unload option to the remove-path and module unuse sub-command to perform no operation when commands are evaluated in unload mode. 2021-11-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/path-cmd-opt/1.2, .../modules.50-cmds/502-prepend-on-unload.exp: ts: test --prepend-on-unload option on modfile cmds * testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.70-maint/150-append-path.exp, testsuite/modules.70-maint/151-prepend-path.exp, testsuite/modules.70-maint/152-remove-path.exp: ts: test --prepend-on-unload option on subcmds * tcl/envmngt.tcl.in, tcl/subcmd.tcl.in: Add --prepend-on-unload on remove-path/module unuse Add the --prepend-on-unload option to the remove-path and module unuse sub-command to append specified paths when commands are evaluated in unload mode. If option is set prior path list specification, this path list which is unsets when modulefile loads is appended back when modulefile unloads. If a different path list is passed after option specification, this list is appended on unload mode instead of the list removed at load time. --prepend-on-unload option cannot be mixed with --index option. * tcl/envmngt.tcl.in, tcl/mfinterp.tcl.in, tcl/subcmd.tcl.in: Pass precise behavior to apply to add-path Instead of barely setting 'add' as default behavior to apply on add-path procedure, precise this behavior with 'append' and 'prepend' value. * NEWS.rst, doc/source/changes.rst, doc/source/modulefile.rst: doc: desc. --prepend-on-unload in man/changes/NEWS * NEWS.rst, doc/source/changes.rst, doc/source/modulefile.rst: doc: desc. --append-on-unload in man/changes/NEWS * doc/source/design/control-mode-behaviors.rst: doc: add noop-on-unload + details in ctrl mode bhv design 2021-11-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/example/top-priority-values/siteconfig.tcl: doc: update top-priority-values recipe config Update the siteconfig.tcl configuration of top-priority-values cookbook recipe after the add-path/unload-path changes. 2021-11-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/path-cmd-opt/1.0, testsuite/modulefiles.3/path-cmd-opt/1.1, testsuite/modules.50-cmds/500-remove-on-load.exp, testsuite/modules.50-cmds/501-append-on-unload.exp: ts: additional --remove-on-unload/--append-on-unload tests * tcl/subcmd.tcl.in, testsuite/modules.50-cmds/500-remove-on-load.exp, testsuite/modules.50-cmds/501-append-on-unload.exp: Allow use of --remove-on-unload on module unuse Even if it corresponds to the default behavior, allow the use of the --remove-on-unload option on the module unuse modulefile command. Adapt existing tests. * tcl/envmngt.tcl.in, testsuite/modules.50-cmds/500-remove-on-load.exp, testsuite/modules.50-cmds/501-append-on-unload.exp: Allow --remove-on-unload to get set after variable name Adapt parsePathCommandArgs procedure to allow the --remove-on-unload option to get set after the variable name, like for --append-on-unload. Adapt existing tests. * testsuite/modules.50-cmds/501-append-on-unload.exp: ts: fix append-on-unload tests for reuse of load path list * tcl/envmngt.tcl.in, tcl/subcmd.tcl.in: Reuse more path list defined for load in parsePathCommandArgs In case the --append-on-unload argument is set after environment variable name but prior path list definition, the path list to use for load evaluation will also be used on the append behavior during unload evaluation. In addition, if no path list is defined after --append-on-unload argument, the list used for load evaluation is reused on the append behavior of unload evaluation. Applies to remove-path and module unuse modulefile commands. * tcl/report.tcl.in: Filter internal cmd starting from $ sign from stack trace Update the formatErrStackTrace procedure to filter from error stack trace the internal calls made through the use of a variable to designate the command to call (like done in runModuleUse). * tcl/subcmd.tcl.in: No error catch in runModuleUse Remove the error catch set in runModuleUse when calling for add-path or unload-path. Errors are this way rendered like any other: internal module bug if called during a modulefile evaluation or top error with report link advice. 2021-11-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/path-cmd-opt/1.1, testsuite/modules.50-cmds/501-append-on-unload.exp: ts: test --append-on-unload option on modfile cmds * tcl/subcmd.tcl.in: Make runModuleUse rely on add-path/unload-path Make the runModuleUse procedure rely on the add-path and unload-path procedures rather {append,prepend,remove}-path to be able to precise the current evaluation mode. * tcl/envmngt.tcl.in, tcl/mfinterp.tcl.in: Align add-path args with unload-path Adopt same argument list for add-path procedure as unload-path to make it easy to dynamically call one or the other. * tcl/main.tcl.in, tcl/subcmd.tcl.in: Pass down eval mode to runModuleUse Add argument mode to the runModuleUse procedure to get knowledge of current evaluation mode in order to distinguish a module unuse in load or unload evaluation mode. Update the module, cmdModuleUse and cmdModuleUnuse procedures to pass down the mode information. 2021-11-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.70-maint/150-append-path.exp, testsuite/modules.70-maint/151-prepend-path.exp, testsuite/modules.70-maint/152-remove-path.exp: ts: test --append-on-unload option on subcmds * tcl/envmngt.tcl.in, tcl/subcmd.tcl.in: Add --append-on-unload on remove-path/module unuse Add the --append-on-unload option to the remove-path and module unuse sub-command to append specified paths when commands are evaluated in unload mode. If option is set prior path list specification, this path list which is unsets when modulefile loads is appended back when modulefile unloads. If a different path list is passed after option specification, this list is appended on unload mode instead of the list removed at load time. --append-on-unload option cannot be mixed with --index option. Fixes #114 2021-11-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/envmngt.tcl.in, tcl/mfinterp.tcl.in: Add mode arg to unload-path/parsePathCommandArgs Update the unload-path and parsePathCommandArgs procedure to add a mode argument to get knowledge of the current evaluation mode when checking passed arguments. 2021-11-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/032-prepend.exp, testsuite/modules.10-use/070-unuse.exp: ts: add use/unuse tests with var ref in modpath * testsuite/modules.10-use/030-use.exp, testsuite/modules.50-cmds/040-append.exp: ts: fix comments on work to be done in a future release * testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.20-locate/090-memcache.exp, testsuite/modules.50-cmds/310-puts.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/230-verbosity.exp: ts: adapt existing debug msg tests * NEWS.rst: doc: desc. debug msg rework in NEWS * tcl/main.tcl.in: Add debug report at end of parseModuleCommandName * tcl/mfinterp.tcl.in: Move arg debug report of getenv/getvariant in parse proc * tcl/envmngt.tcl.in, tcl/main.tcl.in, tcl/mfinterp.tcl.in, tcl/modeval.tcl, tcl/modfind.tcl.in, tcl/subcmd.tcl.in: Remove obvious debug reports Remove the debug reports of argument passed to the procedure as they are already generated when debug2 verbosity mode is enabled and for the debug verbosity mode the procedures bound to a modulefile command are traced to emit a debug report of their call. * tcl/mfinterp.tcl.in: Trace mfcmd calls to report them in debug verbosity mode Add trace over each modulefile/modulerc commands to report when they are called and with what paramaters. These traces are set only if the verbosity equals to debug. When verbosity is higher than debug, traces are set on all modulecmd.tcl procedures. 2021-11-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, doc/source/changes.rst: doc: error when unk opt for use/unuse in changes/NEWS 2021-11-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, doc/source/changes.rst, doc/source/modulefile.rst: doc: desc. --remove-on-unload in man/changes/NEWS * testsuite/modulefiles.3/path-cmd-opt/1.0, testsuite/modulefiles.3/path-cmd-opt/2.0, testsuite/modules.50-cmds/500-remove-on-load.exp: ts: test --remove-on-unload option on modfile cmds * tcl/subcmd.tcl.in: Raise error when unknown argument passed to use/unuse Raise an error when an unknown option is passed to module use or module unuse modulefile command. * tcl/main.tcl.in, tcl/subcmd.tcl.in: Add runModuleUse procedure for both use/unuse subcmd Introduce the runModuleUse procedure that is called by cmdModuleUse and cmdModuleUnuse to share execution code between both sub-commands. runModuleUse takes a position argument (append, prepend, remove) and a command (use or unuse) to know what arguments are allowed and what kind of path change to apply. Aplying module use in unload mode now calls for cmdModuleUse with position argument set to remove. To allow same set of arguments for the module use command whatever the evaluation mode set. 2021-11-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/subcmd.tcl.in: Push eval mode if none on use/unuse Push a load evaluation mode when processing module use or module unuse command only if no evaluation mode already set. 2021-11-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.70-maint/150-append-path.exp, testsuite/modules.70-maint/151-prepend-path.exp, testsuite/modules.70-maint/152-remove-path.exp: ts: test --remove-on-unload option on subcmds * tcl/envmngt.tcl.in: Add --remove-on-unload option to remove-path Add the --remove-on-unload option on remove-path modulefile command to also remove the path elements specified when modulefile is evaluated in unload mode. * tcl/envmngt.tcl.in, tcl/mfinterp.tcl.in: Update unload-path for nop and return bhv & var Update the unload-path procedure to return immediately when the behavior to apply is 'nop' (no-operation). Also always make this procedure return a list with behavior applied and variable name. Make remove-path-un procedure (remove-path when called within an unload mode modulefile interpreter) rely on unload-path after this change, instead of directly calling parsePathCommandArgs. * tcl/envmngt.tcl.in, tcl/mfinterp.tcl.in: Precise default behavior to apply by parsePathCommandArgs Pass down the default behavior to apply on parsePathCommandArgs procedure to prepare ground for upcoming new arguments to change path command behavior. 2021-10-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.70-maint/140-multiargs.exp, testsuite/modules.70-maint/150-append-path.exp, testsuite/modules.70-maint/151-prepend-path.exp, testsuite/modules.70-maint/152-remove-path.exp, testsuite/modules.70-maint/190-emptyarg.exp: ts: update unload-path/add-path error msgs * tcl/envmngt.tcl.in, tcl/mfinterp.tcl.in: Pass effective mfcmd name to parsePathCommandArgs Update the procedure chain from append-path, prepend-path and remove-path modulefile commands to parsePathCommandArgs, to pass command name down the way. So add-path and unload-path are changed to get modulefile command name as first argument and pass it down to parsePathCommandArgs. As a consequence error message raised from parsePathCommandArgs now use the accurate modulefile command name. 2021-10-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/mfinterp.tcl.in, tcl/subcmd.tcl.in: Revert "Pass calling name as first arg of remove-path" This reverts commit 2970dcc2fa10725548325c7a2adf702969fc6850. * tcl/mfinterp.tcl.in: Use specific proc for {append,prepend}-path on unload When modulefile interpreter is set for unload mode, use specific procedures for the append-path and prepend-path suffixed -un rather reusing remove-path proc. This way it is possible to distinguish a real remove-path call. 2021-10-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/subcmd.tcl.in: Use append-path instead of add-path in subcmd procs Update sub-command procedures to make use of append-path rather directly add-path. * tcl/subcmd.tcl.in: Use remove-path instead of unload-path in subcmd procs Update sub-command procedures to make use of remove-path rather directly unload-path. * tcl/mfinterp.tcl.in, tcl/subcmd.tcl.in: Pass calling name as first arg of remove-path Update way to call remove-path procedure to pass as first argument the alias name used to call it. Will enable to distinguish a true remove-path call from an append-path call in unload mode. 2021-11-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .cirrus.yml: cirrus: update OSX image version 2021-11-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * CONTRIBUTING.rst: doc: add design notes section in CONTRIBUTING 2021-11-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, doc/source/design/add-new-sub-command.rst: doc: add add-new-sub-command design doc * doc/source/design/add-new-config-option.rst: doc: fix typo in add-new-config-option design doc 2021-11-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/add-new-config-option.rst: doc: use ghcommit role in add-new-config-option doc * doc/source/conf.py: doc: add new 'ghcommit' sphinx role * CODE_OF_CONDUCT.md, Makefile, NEWS.rst, README.md: Set a Code of conduct for Modules Set a Code of conduct for the Modules project and its community. This Code of conduct is based on the Contribution Covenant, version 2.1. * doc/source/design/control-mode-behaviors.rst: doc: refine {restore,set}-on-unload in ctrl mode bhvs 2021-10-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, doc/source/design/add-new-config-option.rst: doc: add add-new-config-option design doc 2021-10-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, doc/source/design/control-mode-behaviors.rst: doc: add control-mode-behaviors design doc 2021-10-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst, doc/source/modulefile.rst: doc: fix missing only-html tag in man pages 2021-10-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/400-source-sh.exp: ts: module usage in script run through source-sh 2021-10-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc. env filtering for sh-to-mod/source-sh in NEWS 2021-10-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst, doc/source/modulefile.rst: doc: desc var filtering on source-sh/sh-to-mod man * doc/source/design/source-shell-script-in-modulefile.rst: doc: desc private env var filter on sh-to-mod design * tcl/mfinterp.tcl.in: ignore Modules private variables on sh-to-mod processing Filter out the variables intended for Modules private usage when processing the environment changes made by a script evaluated by sh-to-mod sub-command or source-sh modulefile command. _LMFILES_, LOADEDMODULES and any variable prefixed by __MODULES_ are withdrawn this way. Closes #427. * testsuite/example/sh-to-mod.csh, testsuite/example/sh-to-mod.fish, testsuite/example/sh-to-mod.sh, testsuite/modules.70-maint/310-sh-to-mod.exp: ts: module usage in script run through sh-to-mod 2021-10-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/source-shell-script-in-modulefile.rst: doc: note to extend source-sh/sh-to-mod for other tools 2021-10-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc state/supported_shells in NEWS * testsuite/modulefiles.3/modbad/state, testsuite/modules.00-init/071-args.exp, testsuite/modules.00-init/100-pager.exp, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/150-access-init.exp, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.70-maint/220-config.exp, testsuite/modules.70-maint/390-state.exp: ts: add tests for state subcmd 2021-10-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/Makefile, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module.in: init: add state subcmd to completion scripts * tcl/main.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Introduce 'state' sub-command Add the state sub-command to get all states or one state specified as argument. Code that was previously reporting state for config sub-command has been moved to a dedicated cmdModuleState procedure. state sub-command can only be called from top level and accepts 0 or 1 argument. Closes #426 2021-10-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/changes.rst, doc/source/module.rst, doc/source/modulefile.rst: doc: desc. state subcmd in man/changes * tcl/main.tcl.in: Add supported_shells state Add the supported_shells state to list the shells Modules is able to produce output for. 2021-10-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/260-getenv.exp, testsuite/modules.50-cmds/472-getvariant.exp: ts: fix --return-value tests for Tcl8.5 in 50/{260,472} 2021-10-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/variant/5.1, testsuite/modules.50-cmds/472-getvariant.exp: ts: add getvariant --return-value tests in 50/472 2021-10-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles/getenv/1.0, testsuite/modules.50-cmds/260-getenv.exp: ts: add getenv --return-value tests in 50/260 * NEWS.rst: doc: desc. --return-value option in NEWS * doc/source/changes.rst, doc/source/modulefile.rst: doc: desc. getvariant --return-value option in man/changes * tcl/mfinterp.tcl.in: Add --return-value option to getvariant modulefile command Add the --return-value option to the getvariant modulefile command to force to return the value of designated variant when modulefile is evaluated in display mode. * doc/source/changes.rst, doc/source/modulefile.rst: doc: desc. getenv --return-value option in man/changes * tcl/mfinterp.tcl.in: Add --return-value option to getenv modulefile command Add the --return-value option to the getenv modulefile command to force to return the value of designated environment variable when modulefile is evaluated in display mode. Closes #422. 2021-10-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst: doc: desc. redirect_output in NEWS/MIGRATING 2021-10-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/070-stderrtty.exp: ts: add install tests to check redirect_output 2021-10-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/120-autoinit.exp: ts: adapt autoinit test for output redirection code * tcl/envmngt.tcl.in: Add output redirection handling on fish module function Update the definition of the module function for fish shell family to support the output redirection. Now both _module_raw and module shell functions are always defined. Default redirection behavior depends on the interactiveness of the shell when the autoinit command is run. Then shell code is set in module function definition to adapt behavior depending on MODULES_REDIRECT_OUTPUT environment variable value or --redirect/--no-redirect command-line switches. 2021-10-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash.in, init/sh.in, tcl/envmngt.tcl.in: Add output redirection handling on sh module function Update the definition of the module function for sh shell family (sh, bash, ksh and zsh) to support the output redirection. Now both _module_raw and module shell functions are always defined. Default redirection behavior depends on the interactiveness of the shell when the autoinit command is run. Then shell code is set in module function definition to adapt behavior depending on MODULES_REDIRECT_OUTPUT environment variable value or --redirect/--no-redirect command-line switches. 2021-10-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst, tcl/main.tcl.in, tcl/report.tcl.in, testsuite/modules.00-init/090-switches.exp: Warn if --redirect is used on unsupported shells --redirect is only supported on sh, bash, ksh, zsh and fish shells. Emit a warning message when used on another shells. 2021-10-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/changes.rst, doc/source/module.rst: doc: desc. --redirect/--no-redirect in man/changes * testsuite/modules.00-init/090-switches.exp, testsuite/modules.70-maint/220-config.exp: ts: basic tests for --redirect/--no-redirect switches * tcl/main.tcl.in, tcl/report.tcl.in: Add --redirect/--no-redirect cmdline switches Add the --redirect and --no-redirect command line switches to control where the output of the module command should be sent. When redirected it is sent to stdout otherwise not redirected means it is left on stderr. These command line switches have no effect within modulecmd.tcl code. They are treated directly in module shell function to adapt output redirection. Closes #410. 2021-10-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/changes.rst, doc/source/module.rst: doc: desc. MODULES_REDIRECT_OUTPUT in man/changes * doc/source/changes.rst, doc/source/module.rst: doc: desc. redirect_output config in man/changes * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.70-maint/220-config.exp: ts: test redirect_output config option * init/Makefile, init/fish_completion, init/zsh-functions/_module.in: init: add redirect_output config to completion script 2021-10-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/init.tcl.in: Add redirect_output configuration option Add redirect_output configuration option that controls whether or not the output of module command should be redirected from stderr to stdout. Enabled by default. When configuration is modified it sets the MODULES_REDIRECT_OUTPUT environment variable. 2021-09-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, doc/source/changes.rst: doc: desc open value variant in NEWS/changes * testsuite/modulefiles.3/variant/1.0, testsuite/modulefiles.3/vrreq1/1.0, testsuite/modulefiles.3/vrreq2/1.0, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/470-variant.exp, testsuite/modules.50-cmds/471-variant-unload.exp, testsuite/modules.50-cmds/473-variant-prereq.exp, testsuite/modules.50-cmds/479-variant-boolean.exp: ts: add new variant tests to check open value variant 2021-09-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/470-variant.exp, testsuite/modules.70-maint/375-variant-whatis.exp: ts: adapt existing tests for open value variant * tcl/mfinterp.tcl.in: Allow variant with no accepted value list Allow to declare variant with no list of accepted value. Such variant accepts any value specified. Closes #405. * doc/source/module.rst, doc/source/modulefile.rst: doc: desc optional variant value list in man pages * doc/source/design/variants.rst: doc: allow variant definition with no accepted value list 2021-10-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, contrib/rpm/environment-modules.spec.in, doc/source/conf.py, version.inc.in: Release of version 5.0.1 2021-10-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile: install: use newer version of icdiff (2.0.4) * Makefile: install: use newer version of nagelfar (1.3.2) * .cirrus.yml, .github/workflows/linux_tests.yaml: codecov: migrate to new uploader see https://about.codecov.io/blog/introducing-codecovs-new-uploader/. gcov needs to be run manually with new uploader. * doc/source/modulefile.rst: doc: fix default value returned on getenv in man Fix documentation of getenv modulefile command to describe that an empty string is now returned when designated environment variable is not defined and no default value to return is specified. * init/initrc.in: init: set min version required to run default initrc Set in the module magic cookie of the initrc configuration file installed by default the version of Modules required to evaluate this file. Set version to 5.0 as current configuration file mention the quarantine_support configuration option. 2021-10-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/modulefile.rst: doc: clarify module subcmd allowed in modulefile Clarify the module sub-commands that are allowed to be used within a modulefile. Fixes #423 2021-10-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/envmngt.tcl.in: No warning on {preprend,append}-path --duplicates unload Remove warning message when unloading a prepend-path or append-path modulefile command with --duplicates option set. Fixes #421 * testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/060-remove.exp: ts: highlight --duplicates issue when unloading 2021-09-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/changes.rst, doc/source/module.rst: doc: desc. __MODULES_AUTOINIT_INPROGRESS in man/changes * testsuite/example/initrc.in, testsuite/modulefiles.3/refresh/5.0, testsuite/modulefiles.3/refresh/6.0, testsuite/modules.70-maint/120-autoinit.exp, testsuite/systest2: ts: check autoinit loop safeguard mechanism in 70/120 * tcl/subcmd.tcl.in: Ensure no autoinit loop when set_shell_startup set Set the __MODULES_AUTOINIT_INPROGRESS environment variable when running the `autoinit` sub-command and quit autoinit process if this variable is found defined and equal to 1 when starting it. Ensure this way that an autoinit process will not be triggered indefinitely by itself when the set_shell_startup option is enabled and some module loaded at initialization time relies on the execution of a bash script. Fixes #414. 2021-09-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/010-environ.exp: ts: ensure shell startup is not set when running tests 2021-09-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/modfind.tcl.in, testsuite/modules.50-cmds/078-refresh.exp: Set tag on modvr desig of loaded mod Correctly detect tags set on loaded modules when refreshing them. Update the cacheCurrentModules procedure to record the tags of loaded modules also on the module name version and variant list designation. So when the `module-info tags` command is called from a modulefile loaded with variant set, it correctly retrieves the tags defined on this module if currently loaded. Add the report mode '6' on getVariantList procedure to proceed like mode '1' but without updating the key map reference. 2021-09-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/variants.rst: doc: fix missing space between list entries in variant doc 2021-09-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/example/log-module-commands/siteconfig.tcl, doc/source/cookbook/log-module-commands.rst: doc: extend *Log module commands* cookbook Improve the *Log module commands* cookbook to rely on the `trace` Tcl command to track every modulefile evaluation and module/ml procedure calls. Fixes #412. 2021-09-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * tcl/modspec.tcl, testsuite/modules.70-maint/276-adv_version_spec-rangein.exp: Fix version res when icase on & extdfl off Fix the advanced version specifier resolution when the extended_default option is off and icase option is on when resolving version list specification. Fixes #411. 2021-09-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/FAQ.rst: doc: desc module reload on screen session in FAQ 2021-09-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, contrib/rpm/environment-modules.spec.in, doc/source/conf.py, version.inc.in: Release of version 5.0.0 * MIGRATING.rst: doc: desc. Upgraded dfl conf in MIGRATING for Modules 5 2021-09-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, doc/source/changes.rst: doc: describe first MIGRATING items for Modules 5.0 2021-09-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/changes.rst: doc: desc. new special chars for module name in change doc * doc/source/index.rst: doc: add ref to changes doc on index * README.md: doc: add ref to changes doc in README 2021-09-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/changes.rst: doc: desc. Modules 5 diffs in changes document * NEWS.rst: doc: fix rst markup in NEWS 2021-09-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/changes.rst: doc: add config option section in changes doc * NEWS.rst, doc/source/changes.rst: doc: reorg changes document * MIGRATING.rst, Makefile, NEWS.rst, configure, contrib/rpm/environment-modules.spec.in, doc/Makefile, doc/source/{diff_v3_v4.rst => changes.rst}, doc/source/index.rst: doc/install: rename 'diff_v3_v4' doc into 'changes' * NEWS.rst, contrib/rpm/environment-modules.spec.in: rpm: add INSTALL.txt Include INSTALL guide to the rpm package. * contrib/rpm/environment-modules.spec.in, doc/Makefile, doc/example.txt, doc/readme.txt: doc/install: remove deprecated example.txt guide example.txt was providing hints applying to old version of Modules. Now the new commands and configuration mechanism simplify such tasks. Should rely on INSTALL guide instead. 2021-09-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst, NEWS.rst, .../cookbook/ensure-user-qualify-modules.rst: doc: apply file rst markup for initrc/modulespath * NEWS.rst, doc/source/conf.py, doc/source/module.rst: doc: document initrc/modulespath files in module(1) * INSTALL.rst, NEWS.rst, doc/source/module.rst: doc: fix some rst markup in INSTALL/NEWS/module(1) 2021-09-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst, NEWS.rst, doc/source/module.rst, doc/source/modulefile.rst: doc: improve config steps explanation in INSTALL 2021-09-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, README.md: doc: add doc ref and links in README * README.md, doc/source/index.rst: doc: update gcc example in README/index * doc/source/index.rst: doc: add 'Get started with Modules' section in index * doc/source/index.rst: doc: fix envvar/command markup in index 2021-09-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst: doc: clarify TOC and title of MIGRATING * NEWS.rst: doc: desc. silent_shell_debug changes in NEWS * doc/source/module.rst: doc: update MODULES_SILENT_SHELL_DEBUG in module(1) * testsuite/example/initrc.in, testsuite/modules.70-maint/120-autoinit.exp: ts: add silent_shell_debug autoinit test * testsuite/modules.70-maint/220-config.exp: ts: update silent_shell_debug config tests * .cirrus.yml, .github/workflows/linux_tests.yaml: ts: update CI configs as silent sh dbg is disabled by dfl 2021-08-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/initrc.in: init: example to enable silent_shell_debug in dfl initrc * INSTALL.rst: doc: update --enable-silent-shell-debug-support desc in INSTALL * configure: install: disable silent_shell_debug by default Change installation option --enable-silent-shell-debug-support to disable it by default. Now the silent_shell_debug configuration option enables to locally enable this feature from the initrc configuration file. * Makefile, tcl/envmngt.tcl.in, tcl/init.tcl.in: Set silent_shell_debug code if option enabled on autoinit Generate the silent_shell_debug code in module shell function during the autoinit processing if the silent_shell_debug configuration option is enabled. Choice made at installation time may now be updated later on with the silent_shell_debug configuration option. If enabled prior calling autoinit (or enabled within initrc configuration file), the silent shell debug code will be included in module shell function. * init/Makefile, init/bash.in, init/ksh.in, init/sh.in, init/zsh.in: init: always set code for silent_shell_debug code Update initialization scripts to make the code for the silent_shell_debug mechanism always defined there. * NEWS.rst: doc: desc. quarantine mechanism changes in NEWS 2021-08-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst: doc: desc. MODULES_QUARANTINE_SUPPORT in module(1) * doc/source/module.rst: doc: desc. __MODULES_QUARANTINE_SET in module(1) * INSTALL.rst: doc: update --enable-quarantine-support desc in INSTALL * testsuite/example/initrc.in, testsuite/modules.00-init/110-quar.exp, testsuite/modules.70-maint/120-autoinit.exp: ts: add some quarantine tests 2021-08-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .cirrus.yml, .github/workflows/linux_tests.yaml: ts: update CI configs as quarantine is disabled by dfl 2021-08-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/initrc.in: init: example to enable quarantine_support in dfl initrc * configure: install: disable quarantine_support by default Change installation option --enable-quarantine-support to disable it by default. Now the quarantine_support configuration option enables to locally enable this feature from the initrc configuration file. * testsuite/modules.70-maint/220-config.exp: ts: test quarantine_support config option * init/Makefile, init/fish_completion, init/zsh-functions/_module.in: init: add quarantine_support config to completion script * Makefile, init/Makefile, tcl/envmngt.tcl.in, tcl/init.tcl.in: Add quarantine_support configuration option Convert the --enable-quarantine-support installation option in a quarantine_support configuration option. When this option is enabled the autoinit sub-command produces the module shell code with quarantine mecahnism support. When disabled, code is generated without quarantine support. This way decision to have or not the quarantine mechanism code can also be made in initrc configuration file. As a result --enable-quarantine-support installation option new controls the default behavior to generate or not the quarantine code, but this could now be superseded in initrc configuration file. Different setup cases are foreseen: 1. quarantine code has been included in module shell function, then quarantine_support config is disabled > config disablement is not effective as shell code is already set 2. quarantine code has not been included in module shell function, then quarantine_support config is enabled > config enablement is not effective as shell code is already set 3. during module initialization, quarantine_support config is enabled in initrc > shell code generated with quarantine code 4. during module initialization, quarantine_support config is disabled in initrc > shell code generated without quarantine code 5. during module initialization, quarantine_support config is enabled by default or via env > shell code generated with quarantine code 6. during module initialization, quarantine_support config is disabled by default or via env > shell code generated with quarantine code 2021-08-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/110-quar.exp, testsuite/modules.70-maint/120-autoinit.exp: ts: update module function def/quarantine tests * tcl/main.tcl.in: Always enable quarantine restore mecanishm code Always set in modulecmd.tcl script the code to restore the user environment set in quarantine by module shell function of shell initialization script. Do not depend on the quarantinesupport installation option to enable of disable this code in the main procedure of the modulecmd.tcl script. Thanks to the __MODULES_QUARANTINE_SET environment variable, we know when to branch to execute the quarantine unhold code. * init/bash.in, init/cmake.in, init/fish.in, init/ksh.in, init/perl.pm.in, init/python.py.in, init/r.R.in, init/ruby.rb.in, init/sh.in, init/tcl.in, init/zsh.in, tcl/envmngt.tcl.in, tcl/main.tcl.in: Restore quarantine if __MODULES_QUARANTINE_SET defined Introduce the __MODULES_QUARANTINE_SET environment variable to put back when starting modulecmd.tcl run the environment set on hold by initialization script (for autoinit calls) or by module shell function (for regular calls). This new environment variable is tested to apply quarantine unhold mechanism instead of checking if the run_quarantine configuration option is set and shell accurately supports the mecanishm. With this change it is possible to enable or disable the quarantine support at module initialization time (through initrc configuration file) instead of freezing this configuration when building the modulecmd.tcl script. 2021-08-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash.in, init/cmake.in, init/fish.in, init/ksh.in, init/perl.pm.in, init/python.py.in, init/r.R.in, init/ruby.rb.in, init/sh.in, init/tcl.in, init/zsh.in: init: quarantine mech always set for autoinit call Update initialization scripts to make the quarantine mechanism always defined for the module autoinit call. 2021-08-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitignore, .globalrc, Makefile: install: add Makefile rules to build Gtags indexes * INSTALL.rst, NEWS.rst: doc: alphabetically sort installation option in INSTALL * doc/source/design/sticky-modules.rst: doc: clarify unload sticky errors in design doc 2021-08-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/conf.py: doc: same index template for mfcmd/mfvar than others 2021-08-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/home.3/.modulerc, testsuite/home.4/.modulerc, testsuite/home/coll-hide-once-loaded, testsuite/modules.20-locate/057-mcookie.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.70-maint/090-source.exp, testsuite/modules.70-maint/120-autoinit.exp: ts: test magic cookie on init/global/user rc files * NEWS.rst, doc/source/module.rst, tcl/mfinterp.tcl.in, tcl/modfind.tcl.in, tcl/subcmd.tcl.in: Enforce magic cookie in source and init/user/global rc Enforce use of the module magic cookie (i.e., `#%Module`) at the start of global or user rc files, `initrc` configuration file or any scriptfile passed for evaluation to the `source` sub-command. These files are not evaluated and an error is produced if the magic cookie is missing or if the optional version number placed after the cookie string is higher than the version of the `modulecmd.tcl` script in use. Note that version 3.2 of Modules was already enforcing the magic cookie for the user/global rc files. This enforced back globally to ensure people understand, especially for the source sub-command, that the script is made for module and it is not a shell script. It will also help to protect module from automatically evaluating files with expected file name but unrelated content. This commit among things reverts 3fe71c0d. * init/initrc.in: init: remove useless '1.0' in initrc magic cookie Remove the '1.0' in the #%Module magic cookie header of the generated initrc configuration file. Users may define a more appropriate magic cookie compatibility version. * testsuite/install.00-init/006-procs.exp, testsuite/install.00-init/030-options.exp, testsuite/install.00-init/060-quar.exp: ts: fix install tests when dfl loadedmodules are set When the loadedmodules installation option is set and if the module initialization is triggered then the default module to load will emit a message on stderr. Adapt the testsuite code, especially the _test_sub procedure to automatically take this situation into account (no need to set these load message in each expected stderr answer). * tcl/mfinterp.tcl.in, testsuite/modulefiles.3/unsetenv/2.0, testsuite/modules.50-cmds/030-unsetenv.exp, testsuite/modules.50-cmds/035-unsetenv-undo.exp: Error if bad arg number on unsetenv Raise error if more than 2 arguments are set on the unsetenv modulefile command. Specific code need to be set here as we now use args for the unsetenv procedure (to distinguish between no value to restore and an empty string value to restore) * tcl/subcmd.tcl.in: rc_running state is useless for initrc eval The rc_running state used to distinguish top evaluation from the rest is useless for the initrc evaluation as the isTopEvaluation procedure already recognized it as top evaluation as in this situation depth of modulename state is 1 and above command name is source. 2021-08-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, tcl/report.tcl.in, tcl/subcmd.tcl.in, testsuite/modules.50-cmds/430-implicit-req.exp, testsuite/modules.50-cmds/431-not-req.exp, testsuite/modules.50-cmds/490-try-load.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.70-maint/120-autoinit.exp: Fix module load/unload msg of restore/source subcmds Report the modules loading and unloading during the `module` command initialization (i.e., during the evaluation of the `initrc` configuration file). These report messages are disabled when the `verbosity` configuration option is set to `concise` or `silent`. During a module `restore` or `source`, only report the module load and unload directly triggered by these sub-commands. Load and unload triggered by other modules are reported through the automated module handling messages of the main modules. Register the cmdModuleSource call made by cmdModuleAutoinit as a `source` command call to benefit from the message report mechanism. Do not apply the same for the cmdModuleSource call made by runModulerc as those calls will be changed to execute-modulerc in the future. * .../modemptyarg => modulefiles.3/modbad}/source, testsuite/modulefiles.allin/allin/1, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/330-source.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.70-maint/090-source.exp: ts: adapt 'module source' tests Do not remove now useless source/* modulefiles not to break 'module avail' bench comparison with previous versions. * NEWS.rst, tcl/main.tcl.in, tcl/subcmd.tcl.in: Forbid use of source subcmd in modulefile Forbid use of `module source` command in modulefile or in an initialization rc file, the `source` Tcl command should be used instead. `source` module sub-command should only be called from the command-line. Using 'module source' in a modulefile was a non-sense as it does not provide any benefit than using the regular 'source' Tcl command. It also implied to reverse the subcommand to the unsource one when unloading the module. * doc/source/modulefile.rst: doc: desc when --not-req option has been added * NEWS.rst, tcl/init.tcl.in, tcl/mfinterp.tcl.in, testsuite/modules.70-maint/220-config.exp: Remove useless tcl_version_lt85 internal state Remove internal state tcl_version_lt85 as Tcl 8.5+ is now a requirement. 2021-08-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, tcl/mfinterp.tcl.in, testsuite/modulefiles/info/.modulerc, testsuite/modules.50-cmds/321-is-used.exp: Enable is-used mfcmd in modulerc Make is-used modulefile command available from a modulerc evaluation context. * NEWS.rst, tcl/mfinterp.tcl.in, testsuite/modulefiles/system/.modulerc, testsuite/modules.50-cmds/140-system.exp: Enable system mfcmd in modulerc Fully enable the system modulefile command in modulerc, whatever the underlying module evaluation mode (unload, display, whatis, etc). 2021-08-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, doc/source/modulefile.rst: doc: update desc. of unsetenv on unload in NEWS/man * testsuite/modules.50-cmds/035-unsetenv-undo.exp, testsuite/modules.50-cmds/039-unsetenv-env.exp, testsuite/modules.50-cmds/269-getenv-env.exp, testsuite/modules.50-cmds/360-restoreenv.exp: ts: update tests of unsetenv value to restore mechanism * tcl/mfinterp.tcl.in: Distinguish empty str from no value to restore on unsetenv Distinguish if the unsetenv command is called without a value to restore on unload or with an empty string value to restore. * tcl/mfinterp.tcl.in: No var unset if unsetenv is run on unload mode Do not unset environment variable when running the unsetenv modulefile command during an unload evaluation with no value to restore provided. With this change, the unsetenv command acts like the remove-path command on unload mode. * NEWS.rst: doc: fix few markup issues in NEWS 2021-08-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, doc/source/design/variants.rst, doc/source/modulefile.rst, tcl/mfinterp.tcl.in, testsuite/modulefiles.3/variant/4.0, testsuite/modules.70-maint/372-variant-display.exp: No error if variant unspecified on display mode No error is raised when evaluating in `display` mode a modulefile without a value specified for the variant it defines. This change helps to learn all the variant a modulefile defines. As a result, the unspecified variant is not instantiated in the ModuleVariant array variable. Fixes #406. * NEWS.rst, init/Makefile, init/initrc.in: init: set modulepaths only in modulespath if installed When the installation option `--enable-modulespath` is set, the list of modulepath to enable by default is now only defined in the `modulespath` configuration file and not anymore in the `initrc` configuration file. 2021-08-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/Makefile: install: use bash shell to translate init scripts Set init Makefile to use bash as shell to correctly expand the $'' syntax used in translate-in-script. 2021-08-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/120-autoinit.exp: ts: modulespath and initrc are both use if deployed 2021-08-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/025-autoinit.exp, testsuite/modulefiles.3/refresh/4.0, testsuite/modules.70-maint/120-autoinit.exp: ts: test refresh mechanism during autoinit * NEWS.rst, tcl/subcmd.tcl.in: Eval both modulespath and initrc when initializing When initializing Modules, evaluate the initrc configuration file in addition to the the modulespath configuration file and not instead of this file. initrc is evaluated after modulespath file. Both configuration files are only evaluated if the current environment if found unset, in other words when the MODULEPATH and LOADEDMODULES environment variables are both found unset or empty. As initrc is evaluated after modulespath, it has the ability to undo what was done by modulespath, especially if it restores a module collection. * NEWS.rst, init/initrc.in: init: add example code to load init env in initrc Add example code in default initrc, the initialization script of Modules, to either restore user's default collection if it exists or load a predefined module list when initializating Modules. * NEWS.rst, tcl/subcmd.tcl.in: Refresh loaded modules when initializing When initializing Modules, refresh the loaded modules in case some user environment is already configured. This is especially useful when starting a sub-shell session as it ensures that the loaded environment in parent shell will be correctly inherited, as the `refresh` sub-command re-applies the non-persistent environment configuration (i.e., shell alias and function that are not exported to the sub-shell). If a refresh has to be attempted, loaded environment is parsed. In case this environment is inconsistent, an error code is returned but this error is trapped and initialization evaluation continues without launching the refresh process. No error message is reported to avoid noise on the full shell session initialization. The user will get the error message as soon as he will launch the next module command that parse the loaded environment. Fixes #86. 2021-08-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/refresh/1.0, testsuite/modulefiles.3/refresh/2.0, testsuite/modules.50-cmds/078-refresh.exp: ts: test break/exit/continue/unkcmd err on refresh subcmd * tcl/mfinterp.tcl.in, tcl/subcmd.tcl.in: Handle break/exit/continue err in refresh subcmd 2021-08-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/078-refresh.exp: ts: test refresh subcmd in verbose mode * tcl/subcmd.tcl.in: Apply msg record mech to refresh subcmd * NEWS.rst, tcl/mfinterp.tcl.in: Run resulting source-sh mfcmd through modfile interp Evaluate the modulefile commands resulting from the `source-sh` evaluation through the current modulefile Tcl interpreter. This way the modulefile commands are evaluated according to the current modulefile evaluation mode. * NEWS.rst: doc: desc. refresh subcmd change in NEWS * testsuite/example/initrc.in, testsuite/modulefiles.3/modbad/refresh, testsuite/modulefiles.3/refresh/.modulerc, testsuite/modulefiles.3/refresh/1.0, testsuite/modulefiles.3/refresh/2.0, testsuite/modulefiles.3/refresh/3.0, testsuite/modulefiles/info/commandexp, testsuite/modulefiles/info/mode3, testsuite/modules.00-init/071-args.exp, testsuite/modules.50-cmds/078-refresh.exp, testsuite/modules.50-cmds/083-info-mode.exp, testsuite/modules.50-cmds/084-info-mode-exp.exp, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/180-reload.exp: ts: add tests for 'refresh' subcmd * testsuite/config/base-config.exp: ts: allow expected result with only OK code To produce the accurate "return true" code for tested shell. * doc/source/modulefile.rst, testsuite/modulefiles/info/commandexp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp: ts/doc: add try-load test/doc on 'module-info command' * doc/source/modulefile.rst: doc: desc. new mode/cmd on 'module-info {mode,command}' * tcl/mfinterp.tcl.in: Set 'nonpersist' as an alias of 'refresh' eval mode For compatibility with Modules 3.2, module-info mode returns true if tested against the `nonpersist` string and currently in `refresh` evaluation mode. * init/fish_completion, init/zsh-functions/_module.in: init: update refresh subcmd desc in completion scripts * doc/source/module.rst: doc: desc. refresh subcmd in module(1) * tcl/main.tcl.in, tcl/mfinterp.tcl.in, tcl/report.tcl.in, tcl/subcmd.tcl.in: Revive the refresh subcmd Restore the refresh sub-command as it worked in version 3.2: not anymore an alias on the reload sub-command but an evaluation of each loaded module (in their loaded order) in 'refresh' mode. `refresh` evaluation mode only execute the modulefile commands generating volatile environment changes like set-alias and set-function. variant and source-sh commands should also be enabled to ensure a modulefile evaluation that regenerates the expected volatile environment changes. `refresh` evaluation mode does not require that the modulefile commands triggering environment variable changes (setenv, unsetenv, append-path, etc) to operate as the targetted variables should already be set as the refreshed modules are loaded. Same goes for the x-resource and system modulefile commands. Configuring these commands as 'no operation' for this refresh mode should not disrupt the modulefile evaluation. refresh sub-command does not accept any argument and cannot be called within modulefile or sourced or initilization module script (initrc). When the evaluation of a refreshed modulefile fails, the environment changes prior this evaluation is restored. Then refresh evaluation continue on the remaining loaded modules. 2021-08-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, doc/source/module.rst, doc/source/modulefile.rst: doc: clarify already defined path on use/{append,prepend}-path Fixes #60. * NEWS.rst: doc: update next release target in NEWS * testsuite/modules.10-use/070-unuse.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/350-allin.exp: ts: fix unuse when multiple paths are set as one str * NEWS.rst, doc/source/module.rst, tcl/subcmd.tcl.in: Fix unuse when multiple paths are passed as single arg Fix unuse sub-command when sereval modulepaths are specified as a single argument (i.e., `/path/to/dir1:/path/to/dir2`). Enabled modulepaths were not correctly detected when specified this way. * NEWS.rst: doc: desc. ignore ref count on subcmds in NEWS 2021-08-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/initrc.in, testsuite/modulefiles/use/2.0, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/151-prepend-path.exp, testsuite/modules.70-maint/152-remove-path.exp: ts: add new ref count tests on *use/*-path subcmds * testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/032-prepend.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.20-locate/118-hidden-loaded.exp, testsuite/modules.70-maint/150-append-path.exp, testsuite/modules.70-maint/151-prepend-path.exp, testsuite/modules.70-maint/152-remove-path.exp: ts: ignore ref count from *use/*-path subcmds * doc/source/module.rst: doc: ignore ref count from *use/*-path subcmds * tcl/subcmd.tcl.in: Ignore ref count on append/prepend/remove-path subcmds The append-path, prepend-path and remove-path sub-commands are always called from a top level context. The reference counter associated with each entry in targeted environment variable is now ignored so: - a "module prepend/append-path" will not increase the reference counter of a path entry already defined unless if the duplication mode is enabled - a "module remove-path" will remove specified paths whatever their reference counter value. * tcl/subcmd.tcl.in: Ignore ref count on use/unuse subcmds When the use and unuse sub-commands are called from a top level context, ignore the reference counter associated to each entry in the MODULEPATH environment variable. This way a "module use" called from top context will not increase the reference counter of a path entry already defined and a "module unuse" called from top context will remove specified paths whatever their reference counter value. * tcl/envmngt.tcl.in, tcl/mfinterp.tcl.in: Add --ignore-refcount opt to add-path/unload-path proc Add the '--ignore-refcount' option to the add-path and unload-path procedures (parsed by parsePathCommandArgs procedure). When set this option makes the reference counter value ignored. Which means on add-path that the reference counter of each path element passed is not increased unless if the duplication mode is enabled. On unload-path it means that the reference counter is not take into account and each path element is removed (even if the reference counter is greater than 1). * tcl/subcmd.tcl.in: Pass all paths at once to {add,unload}-path in use/unuse Update cmdModuleUse and cmdModuleUnuse to pass all the paths specified respectively for addition or removal to the underlying environment management procedure (respectively add-path and unload-path). * tcl/main.tcl.in: Add isTopEvaluation proc Gather in a dedicated procedure named isTopEvaluation the test to know if current evaluation is made at top level. "Top level" is either: (1) at the modulecmd level (module command written by user in terminal or script) or (2) during the evaluation of rc or modulefile by a source or autoinit sub-command triggered from modulecmd level or (3) during the evaluation of global rc file. (2) and (3) are considered "extended" top evaluation contexts. 2021-08-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/040-append.exp, testsuite/modules.70-maint/151-prepend-path.exp: ts: unset ref cnt var if found set but no cnt to record * tcl/envmngt.tcl.in: Unset ref cnt var if found set but no cnt to record Unset the reference counter variable if it is found defined whereas there is no counter to record for the associated path-like variable. * testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.70-maint/151-prepend-path.exp, testsuite/modules.70-maint/152-remove-path.exp: ts: add new reference counter tests * tcl/envmngt.tcl.in: Ignore reference count lower than 1 If a reference count for an element in a path-like variable is lower than 1, this value is ignored which means element is considered added only once. 2021-08-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/config/base-config.exp, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/032-prepend.exp, testsuite/modules.10-use/040-load-use.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.10-use/080-access-use.exp, testsuite/modules.10-use/090-bad.exp, testsuite/modules.20-locate/100-wspace.exp, testsuite/modules.20-locate/118-hidden-loaded.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/028-setenv-refcount.exp, .../modules.50-cmds/038-unsetenv-refcount.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/049-append-env.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/059-prepend-env.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.50-cmds/069-remove-env.exp, testsuite/modules.50-cmds/172-swap-app-delim.exp, testsuite/modules.50-cmds/173-swap-app-delim.exp, testsuite/modules.50-cmds/175-swap2.exp, testsuite/modules.50-cmds/177-swap-prep-delim.exp, testsuite/modules.50-cmds/178-swap-prep-delim.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/321-is-used.exp, testsuite/modules.50-cmds/330-source.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/359-allin-env.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/400-source-sh.exp, testsuite/modules.50-cmds/431-not-req.exp, testsuite/modules.50-cmds/471-variant-unload.exp, testsuite/modules.50-cmds/472-getvariant.exp, testsuite/modules.50-cmds/479-variant-boolean.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/080-access-coll.exp, testsuite/modules.70-maint/020-update.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/140-multiargs.exp, testsuite/modules.70-maint/150-append-path.exp, testsuite/modules.70-maint/151-prepend-path.exp, testsuite/modules.70-maint/152-remove-path.exp, testsuite/modules.70-maint/210-clear.exp, testsuite/modules.70-maint/280-ml.exp, testsuite/modules.95-version/020-load-version.exp, testsuite/modules.95-version/020-unload.exp, testsuite/modules.95-version/022-load2.exp, testsuite/modules.95-version/022-unload2.exp, testsuite/modules.95-version/050-fullpathentry.exp: ts: update tests for ref cnt change for elt added once * NEWS.rst, doc/source/module.rst, doc/source/modulefile.rst: doc: desc removal from ref count var of elts added once * tcl/envmngt.tcl.in: Update ref count var when element is added several times When an element is added to a path-like variable through the append-path or prepend-path modulefile commands, add this element to the associated reference counter variable only when this element is added multiple times to the path-like variable. When an element is removed from a path-like variable, this element is removed from the reference counter variable when its counter is equal to 1. Exception is made when element is an empty string: in this case element is added to the reference counter variable even if only added once to the path-like variable in order to distinguish between an empty path-like variable and a path-like variable containing an empty string as single element. * NEWS.rst: doc: desc. __MODULES_SHARE_* renaming in NEWS * testsuite/install.00-init/005-init_ts.exp, testsuite/modules.00-init/005-init_ts.exp: ts: remove lassign/lreverse proc setup for Tcl8.4 Since Tcl8.5 or later is now required. 2021-08-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_v3_v4.rst, doc/source/module.rst, doc/source/modulefile.rst: doc: update reference to renamed __MODULES_SHARE_* vars * script/mb: script: update modshare var name in mb * testsuite/config/base-config.exp, testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/032-prepend.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.10-use/080-access-use.exp, testsuite/modules.50-cmds/028-setenv-refcount.exp, .../modules.50-cmds/038-unsetenv-refcount.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/359-allin-env.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/400-source-sh.exp, testsuite/modules.50-cmds/471-variant-unload.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/140-multiargs.exp, testsuite/modules.70-maint/150-append-path.exp, testsuite/modules.70-maint/151-prepend-path.exp, testsuite/modules.70-maint/152-remove-path.exp, testsuite/modules.70-maint/210-clear.exp, testsuite/modules.70-maint/220-config.exp, testsuite/modules.70-maint/280-ml.exp: ts: update reference to renamed __MODULES_SHARE_* vars * tcl/envmngt.tcl.in, tcl/subcmd.tcl.in: Use '__MODULES_SHARE_' prefix on ref count env var Rename the environment variables used to record the reference count of each element in path-like environment variables. A `__MODULES_SHARE_` prefix is applied to the name of these variables instead of the `_modshare` suffix to indicate they are intended for Modules internal use of only. It also helps with DYLD_* environment variables where using a suffixed-variable led to warning messages on OS X. * NEWS.rst: doc: desc no more ref count for mod-specific vars in NEWS * testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/380-altname.exp, testsuite/modules.70-maint/180-reload.exp, testsuite/modules.70-maint/320-tags.exp: ts: empty elts are now cleared from variable Adapt tests with element elements injected in Modules environment variables like LOADEDMODULES: since there is no more reference counter variable (like LOADEDMODULES_modshare) the empty entries added on such variable are cleared when a new entry is added to the variable. Such empty entries are non-sense for these Modules variables so having them cleaned when the variable is updated is a positive side effect. 2021-08-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/377-deps8.exp, testsuite/modules.50-cmds/450-hidden-loaded.exp, testsuite/modules.50-cmds/473-variant-prereq.exp, testsuite/modules.50-cmds/474-variant-conflict.exp, testsuite/modules.70-maint/280-ml.exp: ts: correct erroneous env of some tests 2021-08-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/config/base-config.exp, testsuite/modulefiles/spread/3.0, testsuite/modulefiles/spread/7.0, testsuite/modulefiles/spreadrc/dir3/.modulerc, testsuite/modulefiles/spreadrc/dir3/1.0, testsuite/modulefiles/spreadrc/dir4/.modulerc, testsuite/modulefiles/spreadrc/dir7/.modulerc, testsuite/modulefiles/spreadrc/dir7/1.0, testsuite/modulefiles/spreadrc/dir8/.modulerc, testsuite/modules.00-init/071-args.exp, testsuite/modules.00-init/100-pager.exp, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/130-auto_handling.exp, testsuite/modules.00-init/140-color.exp, testsuite/modules.10-use/040-load-use.exp, testsuite/modules.10-use/080-access-use.exp, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/035-defname.exp, testsuite/modules.20-locate/038-defcontext.exp, testsuite/modules.20-locate/040-alias.exp, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.20-locate/046-getsym.exp, testsuite/modules.20-locate/047-symerrs.exp, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/057-mcookie.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/066-modulepath-rc.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.20-locate/075-symlink.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.20-locate/081-access-rc.exp, testsuite/modules.20-locate/100-wspace.exp, testsuite/modules.20-locate/110-hide.exp, testsuite/modules.20-locate/111-hide-hard.exp, testsuite/modules.20-locate/111-hide-soft.exp, .../modules.20-locate/112-hide-user-group.exp, testsuite/modules.20-locate/113-hide-all-opt.exp, .../modules.20-locate/114-hide-before-after.exp, testsuite/modules.20-locate/115-forbid.exp, .../modules.20-locate/116-forbid-before-after.exp, .../modules.20-locate/117-forbid-user-group.exp, testsuite/modules.20-locate/118-hidden-loaded.exp, testsuite/modules.20-locate/119-hide-cascading.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/020-setenv.exp, testsuite/modules.50-cmds/022-setenv-eschars.exp, testsuite/modules.50-cmds/025-setenv-undo.exp, testsuite/modules.50-cmds/028-setenv-refcount.exp, testsuite/modules.50-cmds/029-setenv-env.exp, testsuite/modules.50-cmds/030-unsetenv.exp, testsuite/modules.50-cmds/035-unsetenv-undo.exp, testsuite/modules.50-cmds/036-unsetenv-x.exp, .../modules.50-cmds/038-unsetenv-refcount.exp, testsuite/modules.50-cmds/039-unsetenv-env.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/049-append-env.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/059-prepend-env.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/069-remove-env.exp, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/076-alias-sub.exp, testsuite/modules.50-cmds/077-alias-undo.exp, testsuite/modules.50-cmds/078-refresh.exp, testsuite/modules.50-cmds/080-info-name.exp, testsuite/modules.50-cmds/081-info-user.exp, testsuite/modules.50-cmds/082-info-user-exp.exp, testsuite/modules.50-cmds/083-info-mode.exp, testsuite/modules.50-cmds/084-info-mode-exp.exp, testsuite/modules.50-cmds/085-info-flags.exp, testsuite/modules.50-cmds/086-info-shells.exp, testsuite/modules.50-cmds/087-info-shells-exp.exp, testsuite/modules.50-cmds/088-info-isloaded.exp, testsuite/modules.50-cmds/089-info-type.exp, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/100-loglevel.exp, testsuite/modules.50-cmds/101-badfac.exp, testsuite/modules.50-cmds/105-trace.exp, testsuite/modules.50-cmds/110-verbose.exp, testsuite/modules.50-cmds/115-verbose-msg.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp, .../modules.50-cmds/132-conflict-fullpath.exp, testsuite/modules.50-cmds/140-system.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/172-swap-app-delim.exp, testsuite/modules.50-cmds/173-swap-app-delim.exp, testsuite/modules.50-cmds/175-swap2.exp, testsuite/modules.50-cmds/177-swap-prep-delim.exp, testsuite/modules.50-cmds/178-swap-prep-delim.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/195-load-recurs.exp, testsuite/modules.50-cmds/197-load-lots.exp, testsuite/modules.50-cmds/200-break.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/220-continue.exp, testsuite/modules.50-cmds/230-loop.exp, testsuite/modules.50-cmds/240-chdir.exp, testsuite/modules.50-cmds/250-x-resource.exp, testsuite/modules.50-cmds/260-getenv.exp, testsuite/modules.50-cmds/269-getenv-env.exp, testsuite/modules.50-cmds/280-info-specified.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.50-cmds/285-info-loaded.exp, testsuite/modules.50-cmds/286-info-username.exp, testsuite/modules.50-cmds/287-info-usergroups.exp, testsuite/modules.50-cmds/288-info-tags.exp, testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.50-cmds/301-interp-command.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.50-cmds/310-puts.exp, testsuite/modules.50-cmds/320-is-saved.exp, testsuite/modules.50-cmds/321-is-used.exp, testsuite/modules.50-cmds/322-is-avail.exp, testsuite/modules.50-cmds/330-source.exp, testsuite/modules.50-cmds/340-modvar.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/359-allin-env.exp, testsuite/modules.50-cmds/360-restoreenv.exp, testsuite/modules.50-cmds/370-deps-bis.exp, testsuite/modules.50-cmds/370-deps-fullpath.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/371-deps2.exp, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/375-deps6.exp, testsuite/modules.50-cmds/375-order.exp, testsuite/modules.50-cmds/376-deps7.exp, .../modules.50-cmds/376-switch-change-vers.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-cyclic.exp, testsuite/modules.50-cmds/377-deps8.exp, testsuite/modules.50-cmds/377-error.exp, testsuite/modules.50-cmds/377-opposite.exp, testsuite/modules.50-cmds/378-sametarget.exp, testsuite/modules.50-cmds/379-module-unload.exp, testsuite/modules.50-cmds/380-altname.exp, testsuite/modules.50-cmds/390-function.exp, testsuite/modules.50-cmds/391-function-undo.exp, testsuite/modules.50-cmds/400-source-sh.exp, testsuite/modules.50-cmds/410-modvar.exp, testsuite/modules.50-cmds/420-versioncmp.exp, testsuite/modules.50-cmds/430-implicit-req.exp, testsuite/modules.50-cmds/431-not-req.exp, testsuite/modules.50-cmds/440-module-tag.exp, testsuite/modules.50-cmds/450-hidden-loaded.exp, testsuite/modules.50-cmds/460-sticky.exp, testsuite/modules.50-cmds/461-super-sticky.exp, testsuite/modules.50-cmds/462-sticky-corner.exp, testsuite/modules.50-cmds/470-variant.exp, testsuite/modules.50-cmds/471-variant-unload.exp, testsuite/modules.50-cmds/472-getvariant.exp, testsuite/modules.50-cmds/473-variant-prereq.exp, testsuite/modules.50-cmds/474-variant-conflict.exp, testsuite/modules.50-cmds/475-variant-tag.exp, testsuite/modules.50-cmds/476-variant-aliassym.exp, testsuite/modules.50-cmds/477-variant-info.exp, testsuite/modules.50-cmds/479-variant-boolean.exp, testsuite/modules.50-cmds/490-try-load.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.61-coll/080-access-coll.exp, testsuite/modules.70-maint/020-update.exp, testsuite/modules.70-maint/030-purge.exp, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/045-listlong.exp, testsuite/modules.70-maint/050-whatis-load.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/140-multiargs.exp, testsuite/modules.70-maint/180-reload.exp, testsuite/modules.70-maint/190-emptyarg.exp, testsuite/modules.70-maint/210-clear.exp, testsuite/modules.70-maint/220-config.exp, testsuite/modules.70-maint/230-verbosity.exp, testsuite/modules.70-maint/231-verbose2.exp, testsuite/modules.70-maint/240-icase.exp, testsuite/modules.70-maint/250-nan.exp, .../modules.70-maint/260-extended_default.exp, .../modules.70-maint/270-adv_version_spec.exp, .../modules.70-maint/271-adv_version_spec-in.exp, .../272-adv_version_spec-range.exp, .../273-adv_version_spec-space.exp, .../274-adv_version_spec-autosym.exp, .../275-adv_version_spec-loaded.exp, .../276-adv_version_spec-rangein.exp, testsuite/modules.70-maint/280-ml.exp, testsuite/modules.70-maint/290-json.exp, testsuite/modules.70-maint/300-err_stack.exp, testsuite/modules.70-maint/320-tags.exp, testsuite/modules.70-maint/321-tag_abbrev.exp, testsuite/modules.70-maint/322-tag-sgr.exp, testsuite/modules.70-maint/330-large-file.exp, testsuite/modules.70-maint/340-output-key.exp, testsuite/modules.70-maint/350-term_width.exp, testsuite/modules.70-maint/360-avail_output.exp, testsuite/modules.70-maint/361-list_output.exp, testsuite/modules.70-maint/370-variant.exp, testsuite/modules.70-maint/371-variant-msg.exp, testsuite/modules.70-maint/372-variant-display.exp, testsuite/modules.70-maint/373-variant-help.exp, testsuite/modules.70-maint/374-variant-test.exp, testsuite/modules.70-maint/375-variant-whatis.exp, testsuite/modules.70-maint/376-variant-tag.exp, .../modules.70-maint/377-variant-shortcut.exp, testsuite/modules.80-deep/020-load-deep.exp, testsuite/modules.80-deep/021-unload.exp, testsuite/modules.80-deep/022-switch.exp, testsuite/modules.80-deep/068-transitive-deep.exp, testsuite/modules.80-deep/080-access-deep.exp, testsuite/modules.80-deep/090-deepvirt.exp, testsuite/modules.90-avail/080-noindepth.exp, testsuite/modules.90-avail/100-tags.exp, testsuite/modules.91-sort/040-load-sort.exp, testsuite/modules.95-version/020-load-version.exp, testsuite/modules.95-version/020-unload.exp, testsuite/modules.95-version/022-load2.exp, testsuite/modules.95-version/022-unload2.exp, testsuite/modules.95-version/040-xgetenv.exp, testsuite/modules.95-version/050-fullpathentry.exp: ts: no ref count on most Modules-specific env var * tcl/envmngt.tcl.in: No ref count for Modules-specific path variables Exclude the Modules-specific variables (like LOADEDMODULES) from the reference counting mechanism. As a result no <VAR>_modshare variable is set in user environment for these variables. Exception is made for MODULEPATH environment variable that still benefit from the mechanism. This change is made as the reference counting mechanism is useless for all Modules-specific variables except for MODULEPATH. Either the entries are unique (same module cannot be loaded twice in LOADEDMODULES) or duplicate elements are allowed (same modulefile could be used twice by virtual modules in _LMFILES_). Also each entry in the __MODULES_LM* variables uses as prefix the loaded module name the entry is associated to. 2021-08-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitignore, Makefile: install: add Makefile rule to build Ctags index 2021-08-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/config/base-config.exp, testsuite/install.00-init/010-environ.exp, testsuite/modulefiles/spread/3.0, testsuite/modulefiles/spread/7.0, testsuite/modulefiles/spreadrc/dir3/.modulerc, testsuite/modulefiles/spreadrc/dir3/1.0, testsuite/modulefiles/spreadrc/dir4/.modulerc, testsuite/modulefiles/spreadrc/dir7/.modulerc, testsuite/modulefiles/spreadrc/dir7/1.0, testsuite/modulefiles/spreadrc/dir8/.modulerc, testsuite/modules.00-init/010-environ.exp, testsuite/modules.00-init/130-auto_handling.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.20-locate/100-wspace.exp, testsuite/modules.20-locate/110-hide.exp, testsuite/modules.20-locate/111-hide-hard.exp, testsuite/modules.20-locate/111-hide-soft.exp, testsuite/modules.20-locate/115-forbid.exp, testsuite/modules.20-locate/118-hidden-loaded.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/195-load-recurs.exp, testsuite/modules.50-cmds/197-load-lots.exp, testsuite/modules.50-cmds/288-info-tags.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.50-cmds/310-puts.exp, testsuite/modules.50-cmds/340-modvar.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/370-deps-bis.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/371-deps2.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/375-deps6.exp, testsuite/modules.50-cmds/375-order.exp, testsuite/modules.50-cmds/376-deps7.exp, .../modules.50-cmds/376-switch-change-vers.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-cyclic.exp, testsuite/modules.50-cmds/377-deps8.exp, testsuite/modules.50-cmds/377-error.exp, testsuite/modules.50-cmds/377-opposite.exp, testsuite/modules.50-cmds/378-sametarget.exp, testsuite/modules.50-cmds/379-module-unload.exp, testsuite/modules.50-cmds/380-altname.exp, testsuite/modules.50-cmds/410-modvar.exp, testsuite/modules.50-cmds/430-implicit-req.exp, testsuite/modules.50-cmds/431-not-req.exp, testsuite/modules.50-cmds/450-hidden-loaded.exp, testsuite/modules.50-cmds/460-sticky.exp, testsuite/modules.50-cmds/461-super-sticky.exp, testsuite/modules.50-cmds/473-variant-prereq.exp, testsuite/modules.50-cmds/474-variant-conflict.exp, testsuite/modules.50-cmds/475-variant-tag.exp, testsuite/modules.50-cmds/479-variant-boolean.exp, testsuite/modules.50-cmds/490-try-load.exp, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/210-clear.exp, testsuite/modules.70-maint/230-verbosity.exp, testsuite/modules.70-maint/240-icase.exp, testsuite/modules.70-maint/250-nan.exp, .../modules.70-maint/260-extended_default.exp, .../modules.70-maint/270-adv_version_spec.exp, .../modules.70-maint/271-adv_version_spec-in.exp, .../272-adv_version_spec-range.exp, .../273-adv_version_spec-space.exp, .../274-adv_version_spec-autosym.exp, .../276-adv_version_spec-rangein.exp, testsuite/modules.70-maint/280-ml.exp, testsuite/modules.70-maint/320-tags.exp, testsuite/modules.70-maint/321-tag_abbrev.exp, testsuite/modules.70-maint/322-tag-sgr.exp, .../modules.70-maint/377-variant-shortcut.exp, testsuite/modules.80-deep/020-load-deep.exp: ts: adapt tests for __MODULES_LMNOTUASKED removal * tcl/modfind.tcl.in, tcl/subcmd.tcl.in: Record loaded/auto-loaded tag on mod name with variants Also set loaded or auto-loaded tag on the module designation including variants, as tags to export in __MODULES_LMTAG variable are those set on the variant designation. 2021-08-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc auto-loaded tag record change in NEWS * doc/source/design/module-tags.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: remove ref of __MODULES_LMNOTUASKED env var * tcl/coll.tcl, tcl/modeval.tcl, tcl/modfind.tcl.in, tcl/subcmd.tcl.in: Check loaded/auto-loaded tag rather specific struct/proc Remove the isModuleUserAsked procedure and g_loadedModuleUasked array. Check if the 'loaded' or 'auto-loaded' tag is set instead. * tcl/modfind.tcl.in, tcl/subcmd.tcl.in: Record auto-loaded tag rather use specific env variable Record the 'auto-loaded' tag for loaded modules that have been loaded automatically, rather recording this state in a specific environment variable __MODULES_LMNOTUASKED. * lib/.gitignore, lib/Makefile.in: install: split lib build in two steps for coverage To ensure the coverage files are correctly named after the .c source file name, first build the object file then process it with linker to build the shared library. * NEWS.rst: doc: desc. source code split in NEWS * CONTRIBUTING.rst: doc: desc. coverage build changes in CONTRIBUTING 2021-07-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * script/mb: script: exclude alpha/beta and old releases in mb Exclude from bench or profiling tests releases older than 4.3 (or 4.6 in profiling mode). Also exclude from these tests the alpha and beta releases. 2021-07-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .cirrus.yml, .github/workflows/linux_tests.yaml, script/nglfar2ccov: script: call nglfar2ccov over each tcl split scripts * testsuite/modules.00-init/005-init_ts.exp: ts: more precise extension library filename guess * .gitignore, Makefile: ts: check coverage of split tcl files Update makefile rules to check coverage of split tcl source files rather built modulecmd.tcl script. 2021-07-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitignore, Makefile: install: add rules to build modulecmd.tcl from split files modulecmd.tcl has been split in the repository in several tcl files located in the tcl/ directory. This change has been done to make code editing easier. modulecmd.tcl is still shipped as a single executable script to ensure best performances. This single script is made by joining all the tcl files from tcl/ directory. An alternative approach has been tested where modulecmd.tcl auto loads the procedure located in external tcl files. But a performance overhead was observed. So it has been decided to split code to edit sources but still build and ship a standalone modulecmd.tcl script. 2021-07-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * script/mt, modulecmd.tcl.in => tcl/main.tcl.in: Split main procs and code in dedicated file * modulecmd.tcl.in, tcl/report.tcl.in: Split report procs in dedicated file * modulecmd.tcl.in, tcl/envmngt.tcl.in: Split env management procs in dedicated file * modulecmd.tcl.in, tcl/util.tcl: Split utility procs in dedicated file * modulecmd.tcl.in, tcl/init.tcl.in: Split config and state handling procs in dedicated file * modulecmd.tcl.in, tcl/subcmd.tcl.in: Make dedicated procs for usage msg report Extract the usage message report from cmdModuleHelp and cmdMlHelp procedures and create standalone procedures respectively reportUsage and reportMlUsage. When usage message has to be printed, the appropriate procedure can be fetched from the report side and not from the sub-command side. * script/mb: script: limit output header length in mb 2021-07-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, tcl/subcmd.tcl.in: Split module sub-command procs in dedicated file * modulecmd.tcl.in, tcl/coll.tcl: Split collection mngt procs in dedicated file * modulecmd.tcl.in, tcl/modspec.tcl: Split module specification procs in dedicated file * modulecmd.tcl.in, tcl/modeval.tcl: Split module evaluation procs in dedicated file * modulecmd.tcl.in, tcl/modfind.tcl.in: Split avail/loaded module find procs in dedicated file * modulecmd.tcl.in, tcl/mfinterp.tcl.in: Split modulefile interpretation procs in dedicated file * modulecmd.tcl.in: Regroup avail/loaded module find procs * modulecmd.tcl.in: Regroup module evaluation procs * modulecmd.tcl.in: Regroup module specification procs * modulecmd.tcl.in: Regroup collection management procs * modulecmd.tcl.in: Regroup module sub-commands procs * modulecmd.tcl.in: Regroup utilities procs * modulecmd.tcl.in: Regroup modulefile interpretation procs * modulecmd.tcl.in: Regroup main procs and core code * modulecmd.tcl.in: Regroup report procedures * modulecmd.tcl.in: Regroup environment management procs * modulecmd.tcl.in: Regroup config and state handling procs 2021-07-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, contrib/rpm/environment-modules.spec.in, doc/source/conf.py, version.inc.in: Release of version 5.0.0-alpha * script/mpub, script/mrel: script: consider alpha/beta valid release name in mrel/mpub * modulecmd.tcl.in: Make use of 'list' or 'lappend' instead of 'concat' Joining two lists should be achieved with 'list' or 'lappend' commands in conjunction with '{*}' rather using the 'concat' command. * testsuite/modules.50-cmds/286-info-username.exp, testsuite/modules.50-cmds/287-info-usergroups.exp, testsuite/modules.70-maint/120-autoinit.exp: ts: update tests changed by use of '{*}' * modulecmd.tcl.in: Also use '{*}' for module proc def on Tcl Use '{*}' instead of 'eval' in the definition of the 'module' procedure for Tcl shell. * modulecmd.tcl.in: Use '{*}' to unfold list in place Update 'modulecmd.tcl' code to use '{*}' rather than 'eval' to unfold list in place. * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.20-locate/110-hide.exp, .../modules.20-locate/114-hide-before-after.exp, testsuite/modules.20-locate/115-forbid.exp, .../modules.20-locate/116-forbid-before-after.exp, testsuite/modules.20-locate/119-hide-cascading.exp, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/284-info-others.exp, testsuite/modules.50-cmds/286-info-username.exp, testsuite/modules.50-cmds/287-info-usergroups.exp, testsuite/modules.50-cmds/288-info-tags.exp, testsuite/modules.50-cmds/330-source.exp, testsuite/modules.50-cmds/400-source-sh.exp, testsuite/modules.50-cmds/440-module-tag.exp, testsuite/modules.50-cmds/475-variant-tag.exp, testsuite/modules.50-cmds/476-variant-aliassym.exp, testsuite/modules.50-cmds/478-variant-version.exp, testsuite/modules.50-cmds/479-variant-boolean.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/170-contact.exp, testsuite/modules.70-maint/300-err_stack.exp, testsuite/modules.70-maint/320-tags.exp: ts: update/clean tests with specific answer for Tcl 8.4 2021-07-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Use 'in' list containment test available starting Tcl 8.5 Update 'modulecmd.tcl' code to use the 'in' list containment test from 'expr' rather the home-made isInList procedure. * modulecmd.tcl.in: Use 'ni' list containment test available starting Tcl 8.5 Update 'modulecmd.tcl' code to use the 'ni' list containment test from 'expr' rather the home-made notInList procedure. * modulecmd.tcl.in: Rely on 'glob -nocomplain' to raise permission error On Tcl 8.4, the -nocomplain option of glob command was also catching file permission error in addition to empty result error. Starting Tcl 8.5, the -nocompain option let the permission error be thrown upward. * modulecmd.tcl.in: Use min/max procedures available starting Tcl 8.5. Update 'modulecmd.tcl' code to use the tcl::mathfunc::min and tcl::mathfunc::max procedures that are available starting Tcl version 8.5. * modulecmd.tcl.in: Remove lreverse/lassign procs provided for Tcl8.4 Remove the lreverse and lassign procedures defined when 'modulecmd.tcl' script were running with Tcl 8.4. These two procedures are natively available on Tcl 8.5. * .github/workflows/linux_tests.yaml: gh: migrate Tcl 8.4 test cases to Tcl 8.5 * lib/configure.ac, lib/envmodules.c: lib: Tcl requirement moved to version 8.5+ Update Tcl Envmodules library to clean specific code required to raise error on Tcl 8.4. Bump version of Tcl Envmodules library to 1.4.0. * CONTRIBUTING.rst, INSTALL-win.rst, INSTALL.rst, NEWS.rst, README.md: doc: Tcl requirement moved to version 8.5+ Update Tcl requirement to version 8.5 as Tcl 8.4 is deprecated since a long time and this version is not available anymore on recent OS distributions. Update internal code of :file:`modulecmd.tcl` to take benefit from the features brought by Tcl 8.5. 2021-07-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/010-environ.exp, testsuite/modulefiles.2/quar, testsuite/modules.00-init/010-environ.exp, testsuite/modules.00-init/110-quar.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/220-config.exp: ts: update reference to renamed __MODULES_QUAR_* vars * doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: update reference to renamed __MODULES_QUAR_* vars * NEWS.rst, init/bash.in, init/cmake.in, init/fish.in, init/ksh.in, init/perl.pm.in, init/python.py.in, init/r.R.in, init/ruby.rb.in, init/sh.in, init/tcl.in, init/zsh.in, modulecmd.tcl.in: Use '__MODULES_QUAR_' prefix on env var set in quarantine Rename the environment variables used to indirectly pass to `modulecmd.tcl` the value of variables set in quarantine (variables whose name finishes with `_modquar`). A `__MODULES_QUAR_` prefix is applied to the name of these variables instead of the `_modquar` suffix to indicate they are intended for Modules internal use of only. * testsuite/modules.10-use/080-access-use.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, .../modules.50-cmds/132-conflict-fullpath.exp, testsuite/modules.50-cmds/197-load-lots.exp, testsuite/modules.50-cmds/280-info-specified.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/400-source-sh.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/210-clear.exp, testsuite/modules.70-maint/220-config.exp, testsuite/modules.70-maint/280-ml.exp, testsuite/modules.80-deep/020-load-deep.exp: ts: update tests after LM env var renaming * testsuite/config/base-config.exp, testsuite/install.00-init/010-environ.exp, testsuite/modulefiles/spread/3.0, testsuite/modulefiles/spread/7.0, testsuite/modulefiles/spreadrc/dir3/.modulerc, testsuite/modulefiles/spreadrc/dir3/1.0, testsuite/modulefiles/spreadrc/dir4/.modulerc, testsuite/modulefiles/spreadrc/dir7/.modulerc, testsuite/modulefiles/spreadrc/dir7/1.0, testsuite/modulefiles/spreadrc/dir8/.modulerc, testsuite/modules.00-init/010-environ.exp, testsuite/modules.00-init/071-args.exp, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/130-auto_handling.exp, testsuite/modules.00-init/140-color.exp, testsuite/modules.10-use/040-load-use.exp, testsuite/modules.10-use/080-access-use.exp, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/035-defname.exp, testsuite/modules.20-locate/038-defcontext.exp, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/066-modulepath-rc.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.20-locate/075-symlink.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.20-locate/100-wspace.exp, testsuite/modules.20-locate/110-hide.exp, testsuite/modules.20-locate/111-hide-hard.exp, testsuite/modules.20-locate/111-hide-soft.exp, .../modules.20-locate/112-hide-user-group.exp, testsuite/modules.20-locate/113-hide-all-opt.exp, .../modules.20-locate/114-hide-before-after.exp, testsuite/modules.20-locate/115-forbid.exp, .../modules.20-locate/116-forbid-before-after.exp, .../modules.20-locate/117-forbid-user-group.exp, testsuite/modules.20-locate/118-hidden-loaded.exp, testsuite/modules.20-locate/119-hide-cascading.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp, .../modules.50-cmds/132-conflict-fullpath.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/195-load-recurs.exp, testsuite/modules.50-cmds/197-load-lots.exp, testsuite/modules.50-cmds/280-info-specified.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/288-info-tags.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.50-cmds/310-puts.exp, testsuite/modules.50-cmds/340-modvar.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/370-deps-bis.exp, testsuite/modules.50-cmds/370-deps-fullpath.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/371-deps2.exp, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/375-deps6.exp, testsuite/modules.50-cmds/375-order.exp, testsuite/modules.50-cmds/376-deps7.exp, .../modules.50-cmds/376-switch-change-vers.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-cyclic.exp, testsuite/modules.50-cmds/377-deps8.exp, testsuite/modules.50-cmds/377-error.exp, testsuite/modules.50-cmds/377-opposite.exp, testsuite/modules.50-cmds/378-sametarget.exp, testsuite/modules.50-cmds/379-module-unload.exp, testsuite/modules.50-cmds/380-altname.exp, testsuite/modules.50-cmds/400-source-sh.exp, testsuite/modules.50-cmds/410-modvar.exp, testsuite/modules.50-cmds/430-implicit-req.exp, testsuite/modules.50-cmds/431-not-req.exp, testsuite/modules.50-cmds/440-module-tag.exp, testsuite/modules.50-cmds/450-hidden-loaded.exp, testsuite/modules.50-cmds/460-sticky.exp, testsuite/modules.50-cmds/461-super-sticky.exp, testsuite/modules.50-cmds/462-sticky-corner.exp, testsuite/modules.50-cmds/470-variant.exp, testsuite/modules.50-cmds/471-variant-unload.exp, testsuite/modules.50-cmds/472-getvariant.exp, testsuite/modules.50-cmds/473-variant-prereq.exp, testsuite/modules.50-cmds/474-variant-conflict.exp, testsuite/modules.50-cmds/475-variant-tag.exp, testsuite/modules.50-cmds/476-variant-aliassym.exp, testsuite/modules.50-cmds/477-variant-info.exp, testsuite/modules.50-cmds/479-variant-boolean.exp, testsuite/modules.50-cmds/490-try-load.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/080-access-coll.exp, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/045-listlong.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/210-clear.exp, testsuite/modules.70-maint/220-config.exp, testsuite/modules.70-maint/230-verbosity.exp, testsuite/modules.70-maint/231-verbose2.exp, testsuite/modules.70-maint/240-icase.exp, testsuite/modules.70-maint/250-nan.exp, .../modules.70-maint/260-extended_default.exp, .../modules.70-maint/270-adv_version_spec.exp, .../modules.70-maint/271-adv_version_spec-in.exp, .../272-adv_version_spec-range.exp, .../273-adv_version_spec-space.exp, .../274-adv_version_spec-autosym.exp, .../275-adv_version_spec-loaded.exp, .../276-adv_version_spec-rangein.exp, testsuite/modules.70-maint/280-ml.exp, testsuite/modules.70-maint/290-json.exp, testsuite/modules.70-maint/300-err_stack.exp, testsuite/modules.70-maint/320-tags.exp, testsuite/modules.70-maint/321-tag_abbrev.exp, testsuite/modules.70-maint/322-tag-sgr.exp, testsuite/modules.70-maint/340-output-key.exp, testsuite/modules.70-maint/350-term_width.exp, testsuite/modules.70-maint/361-list_output.exp, testsuite/modules.70-maint/370-variant.exp, testsuite/modules.70-maint/371-variant-msg.exp, testsuite/modules.70-maint/372-variant-display.exp, testsuite/modules.70-maint/373-variant-help.exp, testsuite/modules.70-maint/374-variant-test.exp, testsuite/modules.70-maint/375-variant-whatis.exp, testsuite/modules.70-maint/376-variant-tag.exp, .../modules.70-maint/377-variant-shortcut.exp, testsuite/modules.80-deep/020-load-deep.exp, testsuite/modules.80-deep/021-unload.exp, testsuite/modules.80-deep/022-switch.exp, testsuite/modules.80-deep/068-transitive-deep.exp, testsuite/modules.80-deep/080-access-deep.exp, testsuite/modules.80-deep/090-deepvirt.exp, testsuite/modules.90-avail/100-tags.exp, testsuite/modules.91-sort/040-load-sort.exp, testsuite/modules.95-version/022-load2.exp: ts: update reference to renamed __MODULES_LM* vars * NEWS.rst, .../design/advanced-module-version-specifiers.rst, .../design/default-latest-version-specifiers.rst, doc/source/design/hide-or-forbid-modulefile.rst, doc/source/design/module-tags.rst, .../design/source-shell-script-in-modulefile.rst, doc/source/design/variants.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst, doc/source/modulefile.rst: doc: update reference to renamed __MODULES_LM* vars * NEWS.rst, modulecmd.tcl.in, script/mb: Add '__' prefix to name of loaded env tracking env variable Rename the environment variables that are used by Modules to track loaded environment state (variables whose name starts with `MODULES_LM`). A `__` prefix is added to the name of these variables to indicate that they are intended for internal use only. * testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/020-setenv.exp, testsuite/modules.50-cmds/022-setenv-eschars.exp, testsuite/modules.50-cmds/025-setenv-undo.exp, testsuite/modules.50-cmds/028-setenv-refcount.exp, testsuite/modules.50-cmds/029-setenv-env.exp, testsuite/modules.50-cmds/035-unsetenv-undo.exp, testsuite/modules.50-cmds/036-unsetenv-x.exp, testsuite/modules.50-cmds/038-unsetenv-refcount.exp, testsuite/modules.50-cmds/039-unsetenv-env.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/049-append-env.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/059-prepend-env.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/069-remove-env.exp, testsuite/modules.50-cmds/076-alias-sub.exp, testsuite/modules.50-cmds/081-info-user.exp, testsuite/modules.50-cmds/082-info-user-exp.exp, testsuite/modules.50-cmds/084-info-mode-exp.exp, testsuite/modules.50-cmds/085-info-flags.exp, testsuite/modules.50-cmds/087-info-shells-exp.exp, testsuite/modules.50-cmds/088-info-isloaded.exp, testsuite/modules.50-cmds/089-info-type.exp, testsuite/modules.50-cmds/090-uname-proc.exp, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/100-loglevel.exp, testsuite/modules.50-cmds/101-badfac.exp, testsuite/modules.50-cmds/105-trace.exp, testsuite/modules.50-cmds/110-verbose.exp, testsuite/modules.50-cmds/115-verbose-msg.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp, testsuite/modules.50-cmds/132-conflict-fullpath.exp, testsuite/modules.50-cmds/140-system.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/172-swap-app-delim.exp, testsuite/modules.50-cmds/173-swap-app-delim.exp, testsuite/modules.50-cmds/175-swap2.exp, testsuite/modules.50-cmds/177-swap-prep-delim.exp, testsuite/modules.50-cmds/178-swap-prep-delim.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/195-load-recurs.exp, testsuite/modules.50-cmds/197-load-lots.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/220-continue.exp, testsuite/modules.50-cmds/230-loop.exp, testsuite/modules.50-cmds/240-chdir.exp, testsuite/modules.50-cmds/250-x-resource.exp, testsuite/modules.50-cmds/260-getenv.exp, testsuite/modules.50-cmds/269-getenv-env.exp, testsuite/modules.50-cmds/280-info-specified.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.50-cmds/284-info-others.exp, testsuite/modules.50-cmds/285-info-loaded.exp, testsuite/modules.50-cmds/286-info-username.exp, testsuite/modules.50-cmds/287-info-usergroups.exp, testsuite/modules.50-cmds/288-info-tags.exp, testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.50-cmds/301-interp-command.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.50-cmds/310-puts.exp, testsuite/modules.50-cmds/320-is-saved.exp, testsuite/modules.50-cmds/321-is-used.exp, testsuite/modules.50-cmds/330-source.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/359-allin-env.exp, testsuite/modules.50-cmds/360-restoreenv.exp, testsuite/modules.50-cmds/370-deps-bis.exp, testsuite/modules.50-cmds/370-deps-fullpath.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/371-deps2.exp, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/375-deps6.exp, testsuite/modules.50-cmds/375-order.exp, testsuite/modules.50-cmds/376-deps7.exp, testsuite/modules.50-cmds/376-switch-change-vers.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-cyclic.exp, testsuite/modules.50-cmds/377-deps8.exp, testsuite/modules.50-cmds/377-error.exp, testsuite/modules.50-cmds/377-opposite.exp, testsuite/modules.50-cmds/378-sametarget.exp, testsuite/modules.50-cmds/379-module-unload.exp, testsuite/modules.50-cmds/380-altname.exp, testsuite/modules.50-cmds/390-function.exp, testsuite/modules.50-cmds/400-source-sh.exp, testsuite/modules.50-cmds/410-modvar.exp, testsuite/modules.50-cmds/430-implicit-req.exp, testsuite/modules.50-cmds/431-not-req.exp, testsuite/modules.50-cmds/440-module-tag.exp, testsuite/modules.50-cmds/450-hidden-loaded.exp, testsuite/modules.50-cmds/460-sticky.exp, testsuite/modules.50-cmds/461-super-sticky.exp, testsuite/modules.50-cmds/462-sticky-corner.exp, testsuite/modules.50-cmds/470-variant.exp, testsuite/modules.50-cmds/471-variant-unload.exp, testsuite/modules.50-cmds/472-getvariant.exp, testsuite/modules.50-cmds/473-variant-prereq.exp, testsuite/modules.50-cmds/474-variant-conflict.exp, testsuite/modules.50-cmds/475-variant-tag.exp, testsuite/modules.50-cmds/476-variant-aliassym.exp, testsuite/modules.50-cmds/477-variant-info.exp, testsuite/modules.50-cmds/478-variant-version.exp, testsuite/modules.50-cmds/479-variant-boolean.exp, testsuite/modules.50-cmds/490-try-load.exp: ts: add skip_if_quick_mode in 50 suite 2021-07-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/030-purge.exp, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/045-listlong.exp, testsuite/modules.70-maint/050-whatis-load.exp, testsuite/modules.70-maint/055-whatis.exp, testsuite/modules.70-maint/056-whatis-nullpath.exp, testsuite/modules.70-maint/060-apropos.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.70-maint/090-source.exp, testsuite/modules.70-maint/100-path.exp, testsuite/modules.70-maint/110-paths.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.70-maint/140-multiargs.exp, testsuite/modules.70-maint/150-append-path.exp, testsuite/modules.70-maint/151-prepend-path.exp, testsuite/modules.70-maint/152-remove-path.exp, testsuite/modules.70-maint/153-is-loaded.exp, testsuite/modules.70-maint/154-is-saved.exp, testsuite/modules.70-maint/155-is-used.exp, testsuite/modules.70-maint/157-info-loaded.exp, testsuite/modules.70-maint/170-contact.exp, testsuite/modules.70-maint/180-reload.exp, testsuite/modules.70-maint/190-emptyarg.exp, testsuite/modules.70-maint/200-errdisp.exp, testsuite/modules.70-maint/210-clear.exp, testsuite/modules.70-maint/220-config.exp, testsuite/modules.70-maint/230-verbosity.exp, testsuite/modules.70-maint/231-verbose2.exp, testsuite/modules.70-maint/240-icase.exp, testsuite/modules.70-maint/250-nan.exp, .../modules.70-maint/260-extended_default.exp, .../modules.70-maint/270-adv_version_spec.exp, .../modules.70-maint/271-adv_version_spec-in.exp, .../272-adv_version_spec-range.exp, .../273-adv_version_spec-space.exp, .../274-adv_version_spec-autosym.exp, .../275-adv_version_spec-loaded.exp, .../276-adv_version_spec-rangein.exp, testsuite/modules.70-maint/280-ml.exp, testsuite/modules.70-maint/290-json.exp, testsuite/modules.70-maint/300-err_stack.exp, testsuite/modules.70-maint/310-sh-to-mod.exp, testsuite/modules.70-maint/320-tags.exp, testsuite/modules.70-maint/321-tag_abbrev.exp, testsuite/modules.70-maint/322-tag-sgr.exp, testsuite/modules.70-maint/330-large-file.exp, testsuite/modules.70-maint/340-output-key.exp, testsuite/modules.70-maint/350-term_width.exp, testsuite/modules.70-maint/360-avail_output.exp, testsuite/modules.70-maint/361-list_output.exp, testsuite/modules.70-maint/370-variant.exp, testsuite/modules.70-maint/371-variant-msg.exp, testsuite/modules.70-maint/372-variant-display.exp, testsuite/modules.70-maint/373-variant-help.exp, testsuite/modules.70-maint/374-variant-test.exp, testsuite/modules.70-maint/375-variant-whatis.exp, testsuite/modules.70-maint/376-variant-tag.exp, .../modules.70-maint/377-variant-shortcut.exp, testsuite/modules.70-maint/380-edit.exp: ts: add skip_if_quick_mode in 70 suite * testsuite/modules.90-avail/020-single.exp, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/050-long.exp, testsuite/modules.90-avail/060-empty.exp, testsuite/modules.90-avail/070-full.exp, testsuite/modules.90-avail/080-noindepth.exp, testsuite/modules.90-avail/100-tags.exp, testsuite/modules.91-sort/020-avail.exp, testsuite/modules.95-version/020-unload.exp, testsuite/modules.95-version/022-load2.exp, testsuite/modules.95-version/022-unload2.exp, testsuite/modules.95-version/050-fullpathentry.exp, testsuite/modules.95-version/090-dup-modpath-version.exp: ts: add skip_if_quick_mode in 90/91/95 suites * testsuite/modules.60-initx/015-list.exp, testsuite/modules.60-initx/020-add.exp, testsuite/modules.60-initx/030-switch.exp, testsuite/modules.60-initx/040-prepend.exp, testsuite/modules.60-initx/050-rm.exp, testsuite/modules.60-initx/060-2nd.exp, testsuite/modules.60-initx/080-access-initx.exp, testsuite/modules.61-coll/020-savelist.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/050-saverm.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.61-coll/080-access-coll.exp, testsuite/modules.80-deep/020-load-deep.exp, testsuite/modules.80-deep/021-unload.exp, testsuite/modules.80-deep/022-switch.exp, testsuite/modules.80-deep/030-display.exp, testsuite/modules.80-deep/050-whatis.exp, testsuite/modules.80-deep/068-transitive-deep.exp, testsuite/modules.80-deep/080-access-deep.exp, testsuite/modules.80-deep/090-deepvirt.exp: ts: add skip_if_quick_mode in 60/61/80 suites * testsuite/modules.00-init/100-pager.exp, testsuite/modules.00-init/110-quar.exp, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/130-auto_handling.exp, testsuite/modules.00-init/140-color.exp, testsuite/modules.00-init/150-access-init.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/032-prepend.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.10-use/080-access-use.exp, testsuite/modules.10-use/090-bad.exp, testsuite/modules.20-locate/030-defvers.exp, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/035-defname.exp, testsuite/modules.20-locate/038-defcontext.exp, testsuite/modules.20-locate/040-alias.exp, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/057-mcookie.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/066-modulepath-rc.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.20-locate/075-symlink.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.20-locate/081-access-rc.exp, testsuite/modules.20-locate/090-memcache.exp, testsuite/modules.20-locate/100-wspace.exp, testsuite/modules.20-locate/110-hide.exp, testsuite/modules.20-locate/111-hide-hard.exp, testsuite/modules.20-locate/111-hide-soft.exp, testsuite/modules.20-locate/112-hide-user-group.exp, testsuite/modules.20-locate/113-hide-all-opt.exp, testsuite/modules.20-locate/114-hide-before-after.exp, testsuite/modules.20-locate/115-forbid.exp, testsuite/modules.20-locate/116-forbid-before-after.exp, testsuite/modules.20-locate/117-forbid-user-group.exp, testsuite/modules.20-locate/118-hidden-loaded.exp, testsuite/modules.20-locate/119-hide-cascading.exp: ts: add skip_if_quick_mode in 00/10/20 suites * NEWS.rst, contrib/rpm/environment-modules.spec.in: rpm: run tests in quick mode * NEWS.rst, script/mt, testsuite/config/base-config.exp: ts: introduce quick test mode Introduce the non-regression quick test mode. When the `QUICKTEST` environment variable is set to 1, only the main tests from the non-regression testsuite are run. When first argument of the `mt` script is `quick`, tests are run in quick mode. Goal is to complete the quick tests in a minute, rather the 10+ minutes required by the full testsuite. 2021-07-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/rpm/environment-modules.spec.in: rpm: remove compat specific subpackage Remove the code that was specific to the generation of the compat subpackage. Make environment-modules-compat subpackage obsolete by the environment-module package, following Fedora guidelines [1] [1] https:/ /docs.fedoraproject.org/en-US/packaging-guidelines/#renaming-or-replacing-ex isting-packages * script/mb, script/mt: script: remove compat version-related code in mt/mb * script/mpub, script/mrel: script: remove compat version-related code in mrel/mpub * NEWS.rst, doc/source/module.rst, script/modulecmd.in: Remove MODULES_USE_COMPAT_VERSION env variable * init/.gitignore, init/bash.in, init/bash_completion.in, init/cmake.in, init/csh.in, init/fish.in, init/ksh.in, init/perl.pm.in, init/profile-compat.csh.in, init/profile-compat.sh.in, init/python.py.in, init/ruby.rb.in, init/sh.in, init/zsh.in: init: remove compat version-related code * README.md: doc: remove compat version transition section from README * .gitignore, Makefile, Makefile.inc.in, doc/Makefile, init/Makefile: install: remove compat version-related rules * Makefile.inc.in, configure: install: remove useless gitworktree install config var * Makefile.inc.in, configure: install: remove useless EXEEXT install config var 2021-07-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .cirrus.yml, .github/workflows/linux_tests.yaml, .github/workflows/windows_tests.yaml: cirrus/gh: no more test case with compat version build * site.exp.in, testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/022-module-compat.exp, testsuite/install.00-init/030-options.exp: ts: remove install tests of compat version * INSTALL.rst, NEWS.rst, configure: install: remove --enable-compat-version install option Remove installation option '--enable-compat-version'. Compatiblity version co-installation is discontinued. * init/.gitignore, init/Makefile, init/{modulerc.in => initrc.in}, init/{.modulespath.in => modulespath.in}: init: name default config files initrc/modulespath Rename the configuration template files following the new default naming scheme for these files: modulerc becomes initrc and .modulespath becomes modulespath. * .github/workflows/linux_tests.yaml, .gitignore, Makefile, testsuite/example/{modulerc-1.in => initrc-1.in}, .../example/{.modulespath-empty => modulespath-empty}, .../{.modulespath-wild.in => modulespath-wild.in}, testsuite/modules.70-maint/120-autoinit.exp: ts: use default conf names in example for tests * testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/020-module.exp, testsuite/install.00-init/024-ml.exp, testsuite/modules.00-init/050-modpath.exp, testsuite/modules.50-cmds/029-setenv-env.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/321-is-used.exp, testsuite/modules.50-cmds/370-deps-fullpath.exp, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp: ts: adapt full path tests when + sign is found in modpath Plus sign in full path modulefile designation is understood as a variant specification when advanced_version_spec config option is enabled. So disable the option for the full path tests. 2021-07-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/005-init_ts.exp: ts: report env properties when starting install tests * .cirrus.yml, .github/workflows/linux_tests.yaml, testsuite/modules.70-maint/120-autoinit.exp: cirrus/gh: adapt setup following default config changes * testsuite/modules.10-use/080-access-use.exp, testsuite/modules.20-locate/110-hide.exp, testsuite/modules.50-cmds/472-getvariant.exp, testsuite/modules.70-maint/220-config.exp, testsuite/modules.70-maint/260-extended_default.exp, testsuite/modules.70-maint/270-adv_version_spec.exp, testsuite/modules.70-maint/271-adv_version_spec-in.exp, .../modules.70-maint/272-adv_version_spec-range.exp, .../modules.70-maint/276-adv_version_spec-rangein.exp, testsuite/modules.80-deep/090-deepvirt.exp, testsuite/modules.91-sort/040-load-sort.exp: ts: adapt tests setup following default config changes Now some features are enabled by default, some test files have to be corrected to ensure the appropriate setup is made prior running these tests. 2021-07-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/030-options.exp, testsuite/install.00-init/050-crossshell.exp: ts: fix subshell tests when sh kind is bash sh is transmitting exported function definition to a bash subshell if sh is the bash one. * .github/workflows/linux_tests.yaml, INSTALL.rst, Makefile.inc.in, configure, contrib/rpm/environment-modules.spec.in, init/Makefile: install: swap --enable-dotmodulespath/--enable-modulespath Make --enable-modulespath the primary option name and --enable-dotmodulespath the secondary option name as .modulespath is not anymore the primary name of this configuration file. * Makefile, NEWS.rst, modulecmd.tcl.in, testsuite/install.00-init/005-init_ts.exp: Look at conf files in etcdir or initdir not both Only look at configuration files found in the location designated by the '--etcdir' or '--initdir' option (depending on the value of '--with-initconf-in' option). Configuration files were previously searched in both locations. * INSTALL.rst, NEWS.rst, configure, contrib/rpm/environment-modules.spec.in: install: set --with-initconf-in to etcdir by default Installation option '--with-initconf-in' is set to 'etdir' by default to locate configuration files in the directory designated by the '--etcdir' option. Therefore the initialization configuration file is named `initrc` in this directory, and the modulepath-specific configuration file is named `modulespath`. Configuration files are thus located in a traditional etcdir rather being part of the init dir among scripts that should stay read only. 2021-07-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst, configure: missing/doc: missing inst opt default value mention * INSTALL.rst, NEWS.rst, configure, contrib/rpm/environment-modules.spec.in, init/modulerc.in: install: set --enable-set-shell-startup off by default Installation option '--enable-set-shell-startup' is set off by default but could be enabled once installed through the `initrc` configuration file. It seems better to let people choose to enable this option than being surprised to find Modules initialization script run automatically each time a sub-shell is spawn. * INSTALL.rst, NEWS.rst, configure: install: reset --enable-new-features Installation option '--enable-new-features' has been reset following major version change as all the options it implied are now enabled by default. * INSTALL.rst, NEWS.rst, configure: install: set --with-icase on by default Installation option '--with-icase' is set to `search` by default to activate case insensitive match on search contexts. * INSTALL.rst, NEWS.rst, configure: install: set --enable-color on by default Installation option '--enable-color' is set on by default which enables the `auto` output color mode. * INSTALL.rst: doc: mention variant on --enable-advanced-version-spec * INSTALL.rst, NEWS.rst, configure: install: set --enable-advanced-version-spec on by default Installation option '--enable-advanced-version-spec' is set on by default which activates the Advanced module version specifiers. * INSTALL.rst, NEWS.rst, configure: install: set --enable-extended-default on by default Installation option '--enable-extended-default' is set on by default which allows partial module version specification. * INSTALL.rst, NEWS.rst, configure: install: set --enable-auto-handling on by default Installation option '--enable-auto-handling' is set on by default which enables the automated module handling mode. * configure: install: remove debug statement in configure 2021-07-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/032-prepend.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.70-maint/230-verbosity.exp: ts: update non-existent dir add on use subcmd * NEWS.rst, doc/source/module.rst, modulecmd.tcl.in: Accept non-existent modulepath on use subcmd Allow non-existent directory to be specified to use sub-command so directory that does not exist yet could be added to MODULEPATH prior being created. Also it may allow a shared module configuration to define all existing paths across the network but only some of these paths are enabled on a given host. * modulecmd.tcl.in: Gather invalid empty name err msg in a proc Add getEmptyNameMsg procedure to gather all error message strings when a module, directory or collection name is an empty string. * testsuite/install.00-init/080-args.exp, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/015-use.exp: ts: update invalid directory name err msg * NEWS.rst, modulecmd.tcl.in: Update empty dir err msg on use/unuse subcmd Align empty directory name error message obtained on use and unuse sub-commands with message obtained when module or collection name is empty. * testsuite/modules.50-cmds/260-getenv.exp, testsuite/modules.50-cmds/269-getenv-env.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/359-allin-env.exp: ts: update getenv default return value tests * NEWS.rst, modulecmd.tcl.in: Return empty string on getenv if var not defined Return by default an empty string rather `_UNDEFINED` on `getenv` modulefile command if passed environment variable is not defined. Behavior is this way aligned with `getvariant` procedure. It is also the most common behavior for this kind of fetch procedure. * NEWS.rst, modulecmd.tcl.in: Remove nop cmds from modulerc interp Do not declare anymore the chdir, module, module-trace, module-verbosity, module-user and module-log commands in modulerc Tcl interpreter. A clear error message will be obtained if an attempt to use these commands is made instead of a silent no-operation treatment. * NEWS.rst, modulecmd.tcl.in: Remove mention of init* subcmd in usage msg * MIGRATING.rst, doc/source/FAQ.rst: doc: advertise sh-to-mod/source-sh in FAQ * testsuite/install.00-init/030-options.exp: ts: remove createmodule.py install test * contrib/rpm/environment-modules.spec.in: rpm: remove specific installation of createmodule.sh * .gitignore, Makefile, NEWS.rst, script/createmodule.py.in, script/createmodule.sh: script: remove createmodule.sh and createmodule.py createmodule.sh and createmodule.py scripts are superseded by the `sh-to-mod` sub-command that supports conversion from more shell languages (ksh, zsh, fish, csh) and handles more environment changes (alias, shell function). 2021-07-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, contrib/rpm/environment-modules.spec.in, doc/source/conf.py, version.inc.in: Release of version 4.8.0 * MIGRATING.rst: doc: desc. 'Variant shortcuts' in MIGRATING 2021-07-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst: doc: desc. 'Module variants' in MIGRATING * .cirrus.yml: cirrus: update to python38 on FreeBSD test cases py37-sphinx is not available anymore on freebsd-12-2 and freebsd-11-4. * NEWS.rst, init/zsh.in, modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Inhibit rcexpandparam Zsh option when initializing Protect quarantine mechanism code from 'rcexpandparam' Zsh option when initializing the module command on this shell. Fixes #403 2021-07-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/modulefile.rst: doc: desc. variant mfcmd in modulefile(4) 2021-07-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst: doc: add 'Module variants' section in module(1) * doc/source/module.rst, doc/source/modulefile.rst: doc: desc. variant specification in module(1)/modulefile(4) * doc/source/module.rst: doc: fix syntax of edit subcmd desc. in module(1) 2021-07-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc. variant work in NEWS * doc/source/modulefile.rst: doc: add variant info to module-info in modulefile(4) 2021-07-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst: doc: desc. MODULES_VARIANT_SHORTCUT in module(1) * doc/source/module.rst: doc: desc. MODULES_LMVARIANT in module(1) 2021-07-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .cirrus.yml: cirrus: start darwin test by updating homebrew Fix inconsistent issue with deprecated homebrew setup. * doc/source/modulefile.rst: doc: desc. no implicit req if module not found by try-load * doc/source/modulefile.rst: doc: desc. getenv on display eval mode in modulefile(4) * doc/source/modulefile.rst: doc: desc. ModuleVariant in modulefile(4) * doc/source/diff_v3_v4.rst, doc/source/modulefile.rst: doc: mention getenv introduction release * doc/source/modulefile.rst: doc: desc. getvariant in modulefile(4) 2021-07-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst: doc: desc. try-load addition in MIGRATING 2021-07-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc. try-load addition in NEWS * init/fish.in: init: update stderr redirection in fish init script Use of '^' character to redirect stderr has been deprecated starting Fish version 3.1. It now produces an error. Stderr should be redirected with '2>' like on SH shells. Hopefully '2>' redirection is also supported on old Fish versions (all version 2 support it). This update was performed on modulecmd.tcl with 711c901 commit, but fish initialization script was forgotten at that time. * doc/source/diff_v3_v4.rst: doc: use catch to get v3 module load behavior in modfile Add description to the diff doc to get the behavior of Modules v3 back when using `module load` command in modulefile. To pursue evaluation even when the `module load` fails, enclose it within a `catch` Tcl command. Fixes #197. * doc/source/module.rst: doc: fix options on subcmd aliases in module(1) * doc/source/module.rst: doc: desc try-load in module(1) man * testsuite/example/initrc.in, testsuite/modules.70-maint/120-autoinit.exp: ts: test try-load in rc file * testsuite/modulefiles.3/tryload/.modulerc, testsuite/modulefiles.3/tryload/1.0, testsuite/modulefiles.3/tryload/2.0, testsuite/modules.50-cmds/490-try-load.exp: ts: add specific tests for try-load subcmd in 50/490 * testsuite/modulefiles.2/modemptyarg/try-load, testsuite/modules.00-init/071-args.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp: ts: adapt existing tests for try-load subcmd 2021-07-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: No requirement record when try-load fails Do not record the prereq requirement on the try-loaded module, if this load temptative fails. 2021-07-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add 'try-load' sub-command Introduce the `try-load` sub-command that could also be aliased `try-add`. try-load attempts to load modulefile(s) but does not raise error (message or code) if module(s) cannot be found (does not exist or forbidden). Error is still raised if an evaluation error occurs. The `try_modulefile` internal state is added to transmit the information that the load (or unload when load is proccessed during an unload evaluation) is performed in *try* mode or not. Fixes #392 2021-06-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_v3_v4.rst: doc: desc. try-load in diff doc * init/Makefile, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module.in: init: add try-load sub-cmd to completion scripts * init/Makefile, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module.in: init: add edit sub-cmd to completion scripts 2021-06-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Dead code cleanup in parseModuleSpecificationProcAdvVersSpec Remove code branches in the parseModuleSpecificationProcAdvVersSpec procedure that are never reached due to the code refactoring done for boolean variant and variant shortcut. 2021-06-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/210-clear.exp, testsuite/modules.70-maint/280-ml.exp: ts: unset MODULES_LMVARIANT on clear subcmd tests * modulecmd.tcl.in: Unset MODULES_LMVARIANT env var on clear subcmd * doc/source/design/variants.rst: doc: refine desc of variant_shortcut in design * testsuite/modulefiles.3/variant/1.0, .../modules.70-maint/377-variant-shortcut.exp: ts: test specific mod desig. with variant_shortcut in 70/377 * testsuite/modulefiles.3/variant/1.0, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.61-coll/999-cleanup.exp: ts: test collection with variant_shortcut in 61 * modulecmd.tcl.in: Ignore shortcut when reporting variant set for collection When saving collection, do not use variant shortcut to produce the module designation to save in collection files, as shortcuts are a configuration that could evolve over time. Add the '5' report mode in getVariantList procedure to avoid defined shortcuts when producing module designation. 2021-06-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/variant/1.0, testsuite/modulefiles.3/variant/7.0, .../modules.70-maint/377-variant-shortcut.exp: ts: test variant_shortcut use in modfile in 70/377 * testsuite/modulefiles.3/variant/.modulerc, .../modules.70-maint/377-variant-shortcut.exp: ts: test module tag with variant_shortcut in 70/377 * .../modules.70-maint/377-variant-shortcut.exp: ts: test unload subcmd with variant_shortcut in 70/377 * .../modules.70-maint/377-variant-shortcut.exp: ts: test load subcmd with variant_shortcut in 70/377 2021-06-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../modules.70-maint/377-variant-shortcut.exp: ts: test list subcmd with variant_shortcut in 70/377 * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp: ts: add variant to default MODULES_LIST_OUTPUT value * testsuite/example/siteconfig.tcl-1, .../modules.70-maint/377-variant-shortcut.exp: ts: variant_shortcut specific config tests in 70/377 * testsuite/modules.70-maint/370-variant.exp: ts: update variant explanation in display key in 70/370 * modulecmd.tcl.in: Explain each variant shortcut in display key For each variant shortcut reported, add an entry in the display key to expose the variant name associated with the shortcut. 2021-06-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Rework display key for variant Use a single global array '::g_used_va' to track usage of the different variant report form (var=val, +var, ...). Use the {variant=value} syntax to explain enabled or disabled boolean variant in display key: {+variant}={variant=on}. As a consequence of last point, '{variant=value}' is added to display key to explain the {variant=on} or {variant=off} part of boolean variant key entry. * modulecmd.tcl.in: Use defined shortcut to report variant Like boolean variants are reported '+name' or '-name', variant with a defined shortcut are reported using this shortcut, for instance '%value'. 2021-06-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Parse variant shortcut in module specification Adapt the parseModuleSpecification process to also resolve the variant shortcut defined when analyzing module specifications. * init/Makefile, init/fish_completion, init/zsh-functions/_module.in: init: add variant_shortcut config to completion script 2021-06-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/220-config.exp: ts: adapt existing config tests for variant_shortcut 2021-06-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp: ts: clean any variant_shortcut config 2021-06-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst: doc: desc --with-variant-shortcut in INSTALL * Makefile, Makefile.inc.in, configure, site.exp.in: install: add --with-variant-shortcut configure option 2021-06-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add 'variant_shortcut' config option * doc/source/design/variants.rst: doc: update boolean variant specs 2021-06-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/071-args.exp: ts: fix tests with -* arg and advverspec enabled in 00/071 2021-06-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/siteconfig.tcl-1: ts: update tests using '+' in mod name in 00/120 * testsuite/modulefiles.3/variant/1.0, testsuite/modulefiles.3/variant/6.0, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/999-cleanup.exp: ts: bool variant and collection in 61/{030,040} * testsuite/modulefiles.3/variant/7.0, testsuite/modules.50-cmds/479-variant-boolean.exp: ts: bool variant and requirement in 50/479 2021-06-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/479-variant-boolean.exp: ts: bool variant specified multiple times in 50/479 * testsuite/modulefiles.3/variant/1.0, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/470-variant.exp, testsuite/modules.50-cmds/479-variant-boolean.exp: ts: bad boolean variant specification in 50/479 * modulecmd.tcl.in: Raise error if variant specification contains several '=' 2021-06-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/variant/1.0, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/479-variant-boolean.exp: ts: non-boolean variant with boolean-like value in 50/479 * modulecmd.tcl.in: Translate var=val boolean value in canonical boolean When variant is specified with the variant=value form, translate any boolean value in boolean canonical form (0 or 1). Specifications are parsed prior knowing if variant is defined as a boolean or not. Thus boolean value are forbidden on non-boolean variant (see previous commit). * modulecmd.tcl.in: Raise error when bool val set on non-bool variant Raise an error when a non-boolean variant defines a boolean value in its accepted value list. Integers which also are boolean (0 and 1) are yet accepted on non-boolean variant. As boolean value are translated in canonical form (0 or 1) when the module specification is parsed, boolean value cannot be defined as accepted value of non-boolean variant since it would never get matched. 2021-06-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/479-variant-boolean.exp: ts: bool variant and @loaded version specifier * testsuite/modules.50-cmds/479-variant-boolean.exp: ts: bool variant and is-loaded/unload/switch * testsuite/modulefiles.3/variant/4.0, testsuite/modules.70-maint/372-variant-display.exp, testsuite/modules.70-maint/373-variant-help.exp, testsuite/modules.70-maint/374-variant-test.exp: ts: bool variant and display/help/test * testsuite/modules.70-maint/370-variant.exp, testsuite/modules.70-maint/375-variant-whatis.exp: ts: bool variant and is-avail/avail/path/paths/whatis 2021-06-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/370-variant.exp: ts: test boolean variant with list sub-cmd in 70/370 * testsuite/modulefiles.3/variant/1.0, testsuite/modulefiles.3/variant/5.0, testsuite/modules.50-cmds/479-variant-boolean.exp: ts: test boolean variant specification in 50/479 * modulecmd.tcl.in: Render boolean variant value as boolean json value When reporting variant set in the JSON output mode, render the value of boolean variant as boolean JSON value (true/false, no quote). Update the getVariantList to provide variant with value and is-boolean flag when report mode is set to 4. * testsuite/modulefiles.2/{e+t.fl => e.t.fl}/1.3.1, testsuite/modulefiles.2/{e+t.fl => e.t.fl}/1.3.7, testsuite/modulefiles.2/{e+t.fl => e.t.fl}/1.4.5, testsuite/modules.70-maint/260-extended_default.exp, testsuite/modules.70-maint/270-adv_version_spec.exp, testsuite/modules.70-maint/271-adv_version_spec-in.exp, testsuite/modules.70-maint/272-adv_version_spec-range.exp: ts: rename 'e+t.fl' test mod into 'e.t.fl' As '+' followed by alpha characters is now a boolean variant specification, change the test module 'e+t.fl' name into 'e.t.fl'. (cannot use '*' or '?' in file name on Windows) * modulecmd.tcl.in: Accept + char at end of module name Accept any number of plus (+) character at the end of module name to be part of this module name instead of being parsed as a boolean variant character. '+' character should not be followed by alpha character otherwise it will be treated as part of boolean variant specification. Thus 'name+' or 'name++' are accepted module names but 'name+name' are taken as module name and enabled boolean variant. 2021-06-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Explain var=val/+var/-var on display key Improve display key to also explain the +variant and -variant elements. Track the elements to report from getVariantList procedure, rather when the 'va' SGR key is used in order to be able to distinguish the different variant kind. * modulecmd.tcl.in: Avoid variant collect when not reporting them Adapt reportModules procedure to avoid collecting variant for each module to report in case these variant information should not be reported. * modulecmd.tcl.in: Allow -* arg on cmdline for bool variant Accept any minus argument (-*) set after the sub-command name when the advanced_version_spec configuration is enabled and if sub-command accepts advanced module specification. Boolean variant may be set to false this way. 2021-06-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/variant/1.0, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/479-variant-boolean.exp: ts: test boolean variant definition in 50/479 2021-06-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.20-locate/113-hide-all-opt.exp, testsuite/modules.50-cmds/470-variant.exp, testsuite/modules.50-cmds/471-variant-unload.exp, testsuite/modules.50-cmds/472-getvariant.exp, testsuite/modules.50-cmds/473-variant-prereq.exp, testsuite/modules.50-cmds/474-variant-conflict.exp, testsuite/modules.50-cmds/475-variant-tag.exp, testsuite/modules.50-cmds/476-variant-aliassym.exp, testsuite/modules.50-cmds/477-variant-info.exp, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.70-maint/370-variant.exp, testsuite/modules.70-maint/371-variant-msg.exp, testsuite/modules.70-maint/372-variant-display.exp, testsuite/modules.70-maint/373-variant-help.exp, testsuite/modules.70-maint/374-variant-test.exp, testsuite/modules.70-maint/375-variant-whatis.exp, testsuite/modules.70-maint/376-variant-tag.exp: ts: add isbool flag to persistency in existing vr tests * modulecmd.tcl.in: Record is-boolean state of variant in internal/env struct Record the is-boolean property of each variant either in the internal structure or in the persistency information recorded in user environment. Use this recorded property to adapt reporting of boolean variant (use the +name or -name to report them instead of name=1 or name=0). 2021-06-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add --boolean option to variant mfcmd Add the --boolean option to the variant modulefile command to define a boolean variant. When set, no list of accepted value should be defined the variant and any default value set should be a boolean value. When boolean variant is evaluated it is checked against any value accepted as boolean by Tcl as described in Tcl manual: "If string is any of 0, false, no, or off, then Tcl_GetBoolean stores a zero value at *boolPtr. If string is any of 1, true, yes, or on, then 1 is stored at *boolPtr. Any of these values may be abbreviated, and upper-case spellings are also acceptable." 2021-06-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Parse boolean variant shortcut Add support for boolean variant in module specification: +variant, ~variant and -variant. The -variant syntax is not supported on ml command, as the minus sign already means to unload specified module. ~variant and +variant could also be defined appended to another specification word, whereas -variant must be the start of a new specification word. * testsuite/example/siteconfig.tcl-1, testsuite/modules.70-maint/271-adv_version_spec-in.exp, testsuite/modules.70-maint/280-ml.exp: ts: adapt err msg after parseModuleSpecification update 2021-06-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Refactor parseModuleSpecificationProcAdvVersSpec Rework code of parseModuleSpecificationProcAdvVersSpec procedure to prepare for parsing boolean variant and variant shortcut. * modulecmd.tcl.in: Split parseModuleSpecification in 2 procs Define parseModuleSpecification on the fly depending on the advanced_version_spec configuration. Two flavor of the procedure are defined, separately to improve code readability. 2021-06-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/variant/.modulerc, testsuite/modulefiles.3/variant/2.1/2/1, testsuite/modules.50-cmds/470-variant.exp: ts: test vr transmit. with hidden mod resolution in 50/470 2021-06-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: No vr array check needed on reloadModuleListLoadPhase The vr array is the result of the reloadModuleListUnloadPhase procedure which fills it with an entry for every module to reload. So there is no need to check if vr contains an entry for each module to reload in reloadModuleListLoadPhase. * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: ts: test getModuleDesignation when sgr=0 in 00/120 * testsuite/modulefiles.3/variant/1.0, testsuite/modules.50-cmds/470-variant.exp, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/999-cleanup.exp: ts: variant redefinition with default value in 61/030 & 50/470 * modulecmd.tcl.in: No need to define modEq in getModuleTag modEq procedure is already defined whatever the context it is called from. * testsuite/modulefiles.3/variant/1.0, testsuite/modules.50-cmds/470-variant.exp: ts: test variant without name, values and option in 50/470 2021-06-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/.modulerc, testsuite/modulefiles.3/variant/7.0, testsuite/modules.50-cmds/473-variant-prereq.exp: ts: icase/ext_dfl & versrange & altname & variant tests 2021-06-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: No altname check when modEq is called in eqspec mode Do not check alternative names of the passed module specification when modEq procedure is called with the eqspec test mode. As in this mode, alternative names are currently checked independently from the module they target. * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.70-maint/371-variant-msg.exp: Normalize other variant is already loaded msg Use the same variant representation than anywhere else when reporting an *other variant is already loaded* error message. Use SGR codes to improve readability of such message. * testsuite/modulefiles.3/.modulerc, testsuite/modulefiles.3/variant/7.0, testsuite/modules.50-cmds/473-variant-prereq.exp: ts: icase/ext_dfl & altname & variant tests 2021-05-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.61-coll/040-restore.exp: ts: add icase/ext_dfl & variant tests on restore * modulecmd.tcl.in, testsuite/modules.50-cmds/470-variant.exp: Raise error with modnvspec from getEqArrayKeyProc When the implicit default mechanism is disabled, raise error with the module name and version but without the eventually specified variants. * testsuite/modulefiles.3/variant/7.0, testsuite/modulefiles.3/vrreq1/1.0, testsuite/modules.50-cmds/470-variant.exp, testsuite/modules.50-cmds/473-variant-prereq.exp: ts: add icase/extended_default & variant tests 2021-05-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Handle break within switch on OS X On OS X platform, when a break command is issued within a switch block the return value is TCL_BREAK but there is no specific errorMsg set. Also :errorCode variable is not set. Add support for this case to catch module evaluation abort. * testsuite/modules.50-cmds/286-info-username.exp, testsuite/modules.50-cmds/287-info-usergroups.exp: ts: fix module-info error stack test in 50/{286,287} 2021-05-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/variants.rst: doc: desc. is-dfl-specifically-asked in variant design * modulecmd.tcl.in: Preserve variant auto set dfl state when reloading When running `reload` sub-command, ensure the automatically set default value state of variant is preserved to end with the exact same loaded module properties once reloading is finished. getVariantList procedure is adapted to pass the '2' value to the excl_dflval argument, which means that we want to exclude the default value that have been automatically set (so when reloading they will be this time also automatically set). 2021-05-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/variants.rst: doc: desc. forbidden version variant in design doc * testsuite/modulefiles.3/variant/6.0, testsuite/modules.50-cmds/478-variant-version.exp: ts: test version variant in 50/478 * modulecmd.tcl.in: Forbid use of 'version' variant name Raise an error if variant name 'version' is used in order to avoid use of this variant name prior implementation of the specific behaviors of this variant. * testsuite/modules.50-cmds/470-variant.exp, testsuite/modules.50-cmds/471-variant-unload.exp, testsuite/modules.50-cmds/472-getvariant.exp, testsuite/modules.50-cmds/473-variant-prereq.exp, testsuite/modules.50-cmds/474-variant-conflict.exp, testsuite/modules.50-cmds/475-variant-tag.exp, testsuite/modules.50-cmds/476-variant-aliassym.exp, testsuite/modules.50-cmds/477-variant-info.exp, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/040-restore.exp: ts: adapt tests with auto set variants 2021-05-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Record if variant has been asked by user Adapt is-default variant hint to also record if the default value was asked or if it was automatically set. is-default hint is set to 1 if asked or to 2 if default value was automatically set. * doc/source/design/variants.rst: doc: desc variant in requirement spec in design doc * doc/source/design/variants.rst: doc: desc module-info {name,specified} & variant in design doc * testsuite/modulefiles.3/variant/6.0, testsuite/modules.50-cmds/477-variant-info.exp: ts: module-info name & variant tests in 50/477 * testsuite/modulefiles.3/variant/6.0, testsuite/modules.50-cmds/477-variant-info.exp: ts: module-info specified & variant tests in 50/477 2021-05-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/variants.rst: doc: module-info tags/loaded & variant in design doc * doc/source/design/variants.rst: doc: fix module-info specified desc. when unloading variant * testsuite/modulefiles.3/variant/.modulerc, testsuite/modulefiles.3/variant/6.0, testsuite/modules.50-cmds/477-variant-info.exp: ts: module-info tags & variant tests in 50/477 * modulecmd.tcl.in: collect tags over variant on module-info tags When module-info tags is called, collect the tags recorded against the module name version and variants designation to get all tags applying to currently evaluating module. * testsuite/modulefiles.3/variant/6.0, testsuite/modules.50-cmds/477-variant-info.exp: ts: is-avail & variant tests in 50/477 * testsuite/modulefiles.3/variant/6.0, testsuite/modules.50-cmds/477-variant-info.exp: ts: module-info loaded & variant tests in 50/477 * testsuite/modulefiles.3/variant/6.0, testsuite/modules.50-cmds/477-variant-info.exp: ts: is-loaded & variant tests in 50/477 2021-05-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/variants.rst, testsuite/modulefiles.3/.modulerc, testsuite/modulefiles.3/variant/6.0, testsuite/modules.50-cmds/476-variant-aliassym.exp: doc/ts: no variant on module-info {alias,symbols,version} 2021-05-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/variants.rst, testsuite/modulefiles.3/.modulerc, testsuite/modulefiles.3/variant/6.0, testsuite/modules.50-cmds/476-variant-aliassym.exp: doc/ts: no variant on module-{alias,virtual,version} * testsuite/modulefiles.3/.modulerc, testsuite/modulefiles.3/variant/6.0, testsuite/modules.50-cmds/476-variant-aliassym.exp: ts: simple alias/sym resolution tests with variant * doc/source/design/variants.rst, testsuite/modulefiles.3/variant/7.0, testsuite/modulefiles.3/vrreq1/2.0, testsuite/modulefiles.3/vrreq2/2.0, testsuite/modules.50-cmds/473-variant-prereq.exp: doc/ts: depre mod relying on default variant When an optional requirement is loaded by not specifying its variant value to rely on default, the Dependent Reload mechanism will miss to detect the dependent module to reload, as variant is not specified on command line thus it does not match the requirement specification prior load. 2021-05-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/var=val, testsuite/modules.70-maint/370-variant.exp, testsuite/modules.70-maint/375-variant-whatis.exp: ts: variant specified on search context * doc/source/design/variants.rst: doc: desc. use of variant on search contexts 2021-05-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/variant/4.0, testsuite/modulefiles.3/variant/6.0, testsuite/modules.50-cmds/471-variant-unload.exp: ts: check variant impact over modStartNb proc 2021-05-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/variants.rst: doc: desc sticky/hide/tag in variant design 2021-05-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Fix several typos in modulecmd.tcl's comments/debug msgs * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/460-sticky.exp, testsuite/modules.50-cmds/461-super-sticky.exp, testsuite/modules.50-cmds/462-sticky-corner.exp, testsuite/modules.50-cmds/475-variant-tag.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.70-maint/231-verbose2.exp: ts: adapt sticky unload error/warn messages * modulecmd.tcl.in: No ref to mod in sticky unload msg Remove reference to module name in the sticky module unload message as this kind of message is always produced under the "Unloading" message block that already provides the module designation. 2021-05-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/home/coll32, testsuite/home/coll33, testsuite/modulefiles.3/variant/.modulerc, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/999-cleanup.exp: ts: check stickyness and variants when restoring coll * modulecmd.tcl.in: Use modvr to test stickyness reload on cmdModuleRestore 2021-05-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Remove useless cmp arg on isModuleTagged * testsuite/modulefiles.3/variant/.modulerc, testsuite/modules.50-cmds/475-variant-tag.exp, testsuite/modules.70-maint/376-variant-tag.exp: ts: test module-tag & variant in 50/475 and 70/376 * modulecmd.tcl.in: Add variant support to stickyness handling Adapt stickyness handling to support variant as, like any other tags, stickyness may be applied to module specification including variants. When testing if stickyness is reloading pass the currently module name version with defined variants included. Update isStickynessReloading procedure to handle module specification with variants. Improve by the way the test to determine if tag applies to module name and version and then if the expected designation is reloading or not. * modulecmd.tcl.in: Add return_rule arg to getModuleTag Add the return_rule argument to the getModuleTag procedure to return the module specification that matches passed mod rather the corresponding tag and its properties. 2021-05-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: No need to fetch tags or update modnamevr when unloading There is no need to fetch the tags or update the module name version and variants designation of an unloading module, as this information were found complete in the persistent environment. 2021-05-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/variant/.modulerc, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/475-variant-tag.exp, testsuite/modules.70-maint/376-variant-tag.exp: ts: test module-forbid & variant in 50/475 and 70/376 * doc/source/design/variants.rst: doc: variant ignored on avail/whatis * modulecmd.tcl.in: Check nearly-forbidden tag against modnamevr Check if the nearly-forbidden tag applies to a module by using its full name version and variant designation. Also test if this tag applies right after modulefile evaluation in case the update designation, with default variant set, now matches a module-forbid rule. * modulecmd.tcl.in: Check if forbidden tag applies right after mod eval Right after the modulefile evaluation, the full variant designation of this module is updated. Check is here added to verify that this new designation does not match any module-forbid statement. If this is the case, raise an error to undo evaluation. * testsuite/modules.50-cmds/440-module-tag.exp: ts: fix module-tag eval within modulefile in 50/{440,462} * modulecmd.tcl.in: Check mod with variants against forbidden tag in getPathToModule Update the getPathToModule procedure to check module against the forbidden tag with its full designation (module name version and variants). 2021-05-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/variants.rst: doc: tags on variant do not appear on avail * modulecmd.tcl.in: Update modnamevr after mod eval in execute-modulefile Update the module name version with variant designation once modulefile has been evaluated in the execute-modulefile procedure. After evaluation, the variants with default value are set, so the designation is then complete. Tags are then collected for this new designation has it can change the tag list applying to loading module. The up_namevr argument is added to the execute-modulefile procedure. When set, it means the modnamevrvar argument is a variable name from the calling context to bound to. Otherwise modnamevrvar contains the module name version and variant string. As the tags are fetched again after modulefile evaluation, the tags that have been defined within modulefile are now collected and exported in persistency variable. * testsuite/modulefiles.3/variant/.modulerc, testsuite/modulefiles.3/variant/.w s, testsuite/modulefiles.3/variant/7.0, testsuite/modulefiles.3/variant/8.0, testsuite/modules.50-cmds/475-variant-tag.exp, testsuite/modules.70-maint/376-variant-tag.exp: ts: test module-hide & variant in 50/475 and 70/376 * modulecmd.tcl.in: Update tag collect/query mechanisms to support variants * modulecmd.tcl.in: Fetch variants from spec if mod not load{ed,ing} on modEq Update modEq procedure to fetch the variants set on mod argument from the specification of this argument if mod is not loaded or loading (ismodlo argument set to 0). 2021-05-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Check mod name with variant to know if hidden-loaded When loading a module, check if it is tagged hidden-loaded by comparing its full designation (module name, version and variant). When this module is unloading, no need to check against variant as tags are recorded in the environment over the module name and version. * modulecmd.tcl.in: Check variant set on hidden module spec When checking if module is hidden, compare the variant set on the hidden specifications. As a result, hiding specification containing variant specification should not hide any module since hiding is checked against available module name and version, not their variants. * modulecmd.tcl.in: Add vrcmp option to modEq proc Add the vrcmp option to the modEq procedure to indicate whether or not variant should be compared, instead of relying on values of the ismodlo option. 2021-05-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/variants.rst: doc: desc already loaded mod in variant design 2021-05-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/variants.rst: doc: desc variant cmp when restoring coll in variant design * modulecmd.tcl.in: Unset variant in collection means default value set In a collection when a variant is not specified (no value set) on the module load line it means this variant is set at the default value for variant. Code is adapted here in getVariantList and modEq to transmit the is-default hint for each variant set on the loaded module against which the module specification defined in collection is compared to. The *missmeandfl* option is added to the modVariantCmp procedure to add a specific comparison when enabled: if the variant set on loaded module is not the default version but this variant is not set on the collection definition, it means module specification in collection and loaded module differ. * modulecmd.tcl.in: Too soon to rely on autosym on getLoadedAltAndSimplifiedName Autosymbols are not yet ready be used to fetch simplified default names when saving/restoring collection. Currently a module gets loaded with the default auto-symbol even if there is an explicit default set for this module in another enabled modulepath. Also some environment gets loaded and then after user enables the implicit_default and advanced_version_spec options, the autosymbols will not be set but modulecmd will expect them when saving/restoring collection. 2021-05-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Use computed alt and simplified names when saving coll Adapt getSimplifiedLoadedModuleList procedure, which is now only called when saving a collection, to rely on the getLoadedAltAndSimplifiedName procedure to fetch alternative and simplified names of loaded modules. * testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/999-cleanup.exp: ts: correct env when saving coll with autosym in 61/040 * modulecmd.tcl.in: Make restore process rely on regular modEq cmp Adapt getMovementBetweenList procedure to compare element in provided lists with the modEq procedure when lists are composed of module specifications. Call modEq with a comparison of alternative and simplified names of loaded modules. The module restore process in cmdModuleRestore procedure only need one call to getMovementBetweenList to get the list of module to unload, then another call to get the list of module to load, in order to restore the collection. Whether collection is version-pinned or not the modEq call made during collection and loaded module comparison will also check collection module name against loaded module simplified names. * modulecmd.tcl.in: Compute list of alt and simplified names for loaded mods Add the getLoadedAltAndSimplifiedName procedure that compute for designated loaded module passed as argument the list of its alternative names and simplified names (in case this module name version is the implicit default). This information is only fetched from the alternative names in case the automated symbols are generated: simplified names are part of the alternative names in this case. Otherwise the parent module name is resolve against currently set modulepath to determine if parent module resolves to currently loaded module version. Add the ability on modEq procedure to compare a module pattern against these alternative and simplified names of a loaded module: ismodlo argument should be set to '3'. 2021-05-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/home/coll30, testsuite/home/coll31, testsuite/modulefiles.3/.modulerc, testsuite/modulefiles.3/variant/1.0, testsuite/modulefiles.3/variant/6.0, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/999-cleanup.exp: ts: restore coll when different variant loaded 2021-05-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Identify already reported conflict with evalid * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.20-locate/110-hide.exp, testsuite/modules.20-locate/111-hide-hard.exp, testsuite/modules.20-locate/115-forbid.exp, testsuite/modules.50-cmds/473-variant-prereq.exp, testsuite/modules.50-cmds/474-variant-conflict.exp, .../modules.70-maint/270-adv_version_spec.exp, .../modules.70-maint/271-adv_version_spec-in.exp, .../272-adv_version_spec-range.exp: ts: adapt mod designation when express as spec 2021-05-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add formatted mod designation from spec on err/warn msgs Adapt error and warning messages relative to requirement or conflict issue to report the module specification with the new standard module designation. * testsuite/modules.50-cmds/470-variant.exp, testsuite/modules.50-cmds/471-variant-unload.exp, testsuite/modules.50-cmds/473-variant-prereq.exp, testsuite/modules.50-cmds/474-variant-conflict.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.70-maint/231-verbose2.exp, testsuite/modules.70-maint/371-variant-msg.exp: ts: adapt mod designation string * modulecmd.tcl.in: If evalid not found use mod arg as spec in getModuleDesignation If the specified evaluation id passed to getModuleDesignation procedure is not found, use the mod argument as a module specification to compute the module designation, instead of using it as the resulting designation. Designation of switched-on module that fails to load is this way formatted with the regular module designation syntax. * modulecmd.tcl.in: Remove variant and separator with SGR in err/warn/info msgs Graphically enhance variants and separators from module designation in every error, warning or informational messages. Diminish variant graphically impact with the se SGR code unless if it should be hightlighted (when used in message block title). * modulecmd.tcl.in: Improve mod designation with variant readability Remove space between module name version and variant list and between variants in that list. Use the separator sgr color (se) to reduce the visual impact of {, } and : separator characters. Message reports now use same module designation syntax than 'module list' report. 2021-05-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/471-variant-unload.exp, testsuite/modules.50-cmds/473-variant-prereq.exp, testsuite/modules.50-cmds/474-variant-conflict.exp, .../modules.70-maint/270-adv_version_spec.exp, .../modules.70-maint/271-adv_version_spec-in.exp, .../272-adv_version_spec-range.exp, testsuite/modules.70-maint/371-variant-msg.exp: ts: adapt prereq/conflict err/warn msgs * modulecmd.tcl.in: Add complete mod designation from spec on err/warn msgs Use getModuleDesignation procedure over module specification to report the full module name version and variants. * modulecmd.tcl.in: Fetch info from mod spec in getModuleDesignation Add the ability to fetch module information from module specification on getModuleDesignation procedure. If from argument equals 'spec', mod argument is taken as a module specification and module name version and variants are retrieved from the parsed properties of this module specification. * modulecmd.tcl.in: Add complete loaded mod designation on err/warn mesgs Use getModuleDesignation procedure over loaded modules to report the full module name version and variants. * modulecmd.tcl.in: Fetch info from loaded context in getModuleDesignation Add the ability to fetch module information from loaded context on getModuleDesignation procedure. If from argument equals 'loaded', mod argument is taken as the module name and version designation, then specified variants are fetched from loaded context. * modulecmd.tcl.in: Process module designation in getModuleDesignation Rather recording generated designation in registerModuleDesignation procedure, only record module name and version and specified variant list in this procedure. Then process the module designation from the getModuleDesignation procedure. * modulecmd.tcl.in: Adapt getModuleDesignation arguments Reorder and rename arguments of the getModuleDesignation procedure to prepare it being called from multiple contexts. * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/130-auto_handling.exp, testsuite/modules.00-init/140-color.exp, testsuite/modules.20-locate/100-wspace.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/130-conflict-full.exp, .../modules.50-cmds/132-conflict-fullpath.exp, testsuite/modules.50-cmds/370-deps-bis.exp, testsuite/modules.50-cmds/370-deps-fullpath.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/375-deps6.exp, testsuite/modules.50-cmds/375-order.exp, testsuite/modules.50-cmds/376-deps7.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-cyclic.exp, testsuite/modules.50-cmds/377-deps8.exp, testsuite/modules.50-cmds/377-opposite.exp, testsuite/modules.50-cmds/378-sametarget.exp, testsuite/modules.50-cmds/379-module-unload.exp, testsuite/modules.50-cmds/380-altname.exp, testsuite/modules.50-cmds/450-hidden-loaded.exp, testsuite/modules.50-cmds/473-variant-prereq.exp, testsuite/modules.50-cmds/474-variant-conflict.exp, testsuite/modules.70-maint/240-icase.exp, .../modules.70-maint/260-extended_default.exp, .../modules.70-maint/270-adv_version_spec.exp, .../modules.70-maint/271-adv_version_spec-in.exp, .../272-adv_version_spec-range.exp, .../273-adv_version_spec-space.exp, .../274-adv_version_spec-autosym.exp: ts: adapt conflict/prereq default err mesg * modulecmd.tcl.in: Simplify conflict/prereq default error message Do not recall current module designation on the default conflict and prereq error message, as they are produced under the Loading/Unload message block which already report current module designation. 2021-04-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/470-variant.exp: ts: forced load when another variant is loaded in 50/470 * testsuite/modulefiles.3/variant/7.0, testsuite/modulefiles.3/vrreq1/1.0, testsuite/modulefiles.3/vrreq1/2.0, testsuite/modulefiles.3/vrreq2/1.0, testsuite/modulefiles.3/vrreq2/2.0, testsuite/modulefiles.3/vrreq3/1.0, testsuite/modulefiles.3/vrreq3/2.0, testsuite/modules.50-cmds/473-variant-prereq.exp: ts: variant special requirement spec tests in 50/473 2021-04-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/variant/7.0, testsuite/modulefiles.3/variant/7.1, testsuite/modulefiles.3/vrreq1/1.0, testsuite/modulefiles.3/vrreq1/2.0, testsuite/modulefiles.3/vrreq2/1.0, testsuite/modulefiles.3/vrreq2/2.0, testsuite/modulefiles.3/vrreq3/1.0, testsuite/modulefiles.3/vrreq3/2.0, testsuite/modules.50-cmds/473-variant-prereq.exp, testsuite/modules.50-cmds/474-variant-conflict.exp: ts: add auto_handling switch tests in 50/{473,474} 2021-04-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/variant/7.0, testsuite/modulefiles.3/vrreq1/.modulerc, testsuite/modulefiles.3/vrreq1/1.0, testsuite/modulefiles.3/vrreq1/2.0, testsuite/modulefiles.3/vrreq2/1.0, testsuite/modulefiles.3/vrreq2/2.0, testsuite/modulefiles.3/vrreq3/1.0, testsuite/modulefiles.3/vrreq3/2.0, testsuite/modulefiles.3/vrreq4/1.0, testsuite/modulefiles.3/vrreq4/2.0, testsuite/modules.50-cmds/474-variant-conflict.exp: ts: test variant with conflict auto_handling mechanism 2021-04-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/.modulerc, testsuite/modulefiles.3/variant/7.0, testsuite/modulefiles.3/vrreq1/.modulerc, testsuite/modulefiles.3/vrreq1/1.0, testsuite/modulefiles.3/vrreq1/2.0, testsuite/modulefiles.3/vrreq1/w s, testsuite/modulefiles.3/vrreq2/1.0, testsuite/modulefiles.3/vrreq2/2.0, testsuite/modulefiles.3/vrreq2/w s, testsuite/modulefiles.3/vrreq3/1.0, testsuite/modulefiles.3/vrreq3/2.0, testsuite/modulefiles.3/vrreq4/1.0, testsuite/modulefiles.3/vrreq4/2.0, testsuite/modules.50-cmds/473-variant-prereq.exp: ts: test variant with prereq auto_handling mechanism * modulecmd.tcl.in: Pass down variant when recursively calling getPathToModule * modulecmd.tcl.in: Pass modnamevr to getUnmetDependentLoadedModuleList Pass the module name and variants set as argument to the getUnmetDependentLoadedModuleList procedure to make it use the variants specified to determine the dependent modules. This information has to be passed to the modEq procedure as no modulefile evaluation occurred yet when getUnmetDependentLoadedModuleList is called, so variants have to be transmitted as argument to modEq. 2021-04-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Preserve variants set when reloading DepRe mods 2021-04-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Update mod name and variants using already loaded mod * modulecmd.tcl.in: Transmit mod name and variants for switch report sum * testsuite/modules.20-locate/100-wspace.exp, .../273-adv_version_spec-space.exp: ts: eval mods are reported enclosed if contains space * modulecmd.tcl.in: Use mod name with variants to define a unique msgrecid * modulecmd.tcl.in: Record msgrecid in mod evaluation struct Use the message recording id (msgrecid) to register the module evaluation instead of the module name. Call for the module designation based on this recording id when reporting evaluated modules. Update the registerModuleEval and registerModuleEvalHidden procedures to use msgrecid rather module name. In case of evaluation failure, pass the module name with its specified variant to record for the isModuleEvalFailed query. When evaluated modules are reported, they use the full denomination syntax with specified variants and space enclosed in single quotes. * modulecmd.tcl.in: Record both regular and sgr version of mod designation When recording evaluated module designation, record it in both regular and SGR versions, and add the ability to fetch one or the other. * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/470-variant.exp, testsuite/modules.70-maint/371-variant-msg.exp: ts: adapt error when another variant of mod is loaded 2021-04-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Error if module is already loaded with diff. variant set Break process of cmdModuleLoad if the same module is detected as already loaded but with a different variant set than the one specified on this module load. 2021-04-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Record modulenamevr in evaluation attempt struct When recording module evaluation attempt use module name with variant as identifier. Update all calls to isModuleEvaluated and registerModuleEvalAttempt procedures. * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.20-locate/100-wspace.exp, .../273-adv_version_spec-space.exp: ts: correctly enclose mod name on eval msg block * testsuite/modules.50-cmds/471-variant-unload.exp: ts: fix specifiedname test in 50/471 * modulecmd.tcl.in: Add modnamevr arg to execute-modulefile procedure Add the modnamevr argument to the execute-modulefile procedure and save this information into the modulenamevr state to make it available during evaluation context. Use that new modulenamevr state to pass variant list to the variant procedure when module is unloading. This way the specifiedname on unload mode is the specification set by user on command line or in modulefile code, like on any other evaluation modes. * modulecmd.tcl.in: Fetch modnamevr from getPathToModule calls 2021-04-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Return modnamevr on getPathToModule Update the getPathToModule procedure to return an additional string as result which corresponds to the module name plus specified variants. When no variant are specified, modnamevr equals to modname. * modulecmd.tcl.in: Compare with variant set in isModuleEvaluated * modulecmd.tcl.in: Add modvrlist option to modEq proc Add the modvrlist option to the modEq procedure in order to specify the list of variant of mod to compare pattern to. Useful when comparing against a mod that is not loaded or loading. * modulecmd.tcl.in: Add g_loadedModuleVariant to push/pop/restore settings 2021-04-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/471-variant-unload.exp: ts: update unload tests in 50/471 now variants are compared * modulecmd.tcl.in: Add variant comparison ability to modEq Adapt the modEq procedures to compare the variant specified for pattern to the variant set for designated loaded or loading module. Only perform such comparison if module name and version comparison is successful. Variant comparison relies on the modVariantCmp procedure. Every variant set for pattern should be found defined and with an identical value on loaded/loading module. Otherwise there is no match. 2021-04-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/variants.rst: doc: desc. variant cmp in design doc 2021-04-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Remove unused icase var in isModuleEvaluated * modulecmd.tcl.in: Update isModuleEvaluated to rely on new modEq Update the isModuleEvaluated procedure to indicate to also test alternative names of evaluated modules through new modEq procedure. 2021-04-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/module-selection-contexts.rst: doc: remove ref to does*ModuleMatchesName ref in doc * modulecmd.tcl.in: Make conflict report detection rely on new modEq modEq procedure now also test alternative names of loaded modules if ismodlo argument is set to 2. Update conflict report detection code to take into account this new ability of modEq when checking against loaded modules. * modulecmd.tcl.in: Remove useless doesLoadingModuleMatchesName proc * modulecmd.tcl.in: Remove useless doesModuleMatchesName proc Since modEq procedure treats alternative names of loaded modules, the doesModuleMatchesName procedure is now useless and replaced by a direct call to modEq with its ismodlo option set to 1. * modulecmd.tcl.in: Retrieve variant list specified in pattern on modEq procs * modulecmd.tcl.in: No variant comparison on modEqStatic proc As specified variant is currently only useful for module specification comparison with loaded or loading module, the modEqStatic procedure does not need to handle the variant specified for `modspec` as this procedure is only called on non-loaded modules contexts * modulecmd.tcl.in: Treat alt names of load{ed,ing} mods on modEq Add the `ismodlo` argument to the modEq procedure to determine is passed `mod` is a non-loaded module (0), a loaded module (1) or a loading module (2). If `mod` is loaded or loading comparison against `pattern` is also performed over the alternative names of mod. This with one call to modEq, all module name and its alternatives are tested against pattern: pattern properties are fetched and comparison is prepared only once instead of calling modEq procedure over each alternative name of module. 2021-04-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/_static/terminal_output.css, doc/source/conf.py: doc: define sphinx roles/css to colorize variant 2021-04-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/470-variant.exp: ts: adapt result if implicit_default is disabled on 50/470 2021-04-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/470-variant.exp: ts: fix stack trace err msgs for Tcl<8.6 in 50/470 2021-04-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp: ts: clear test-related env var prior tests start * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp: ts: clear MODULES_LMVARIANT prior test start 2021-03-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/470-variant.exp, testsuite/modules.50-cmds/471-variant-unload.exp, testsuite/modules.70-maint/372-variant-display.exp, testsuite/modules.70-maint/373-variant-help.exp, testsuite/modules.70-maint/374-variant-test.exp, testsuite/modules.70-maint/375-variant-whatis.exp: ts: test @loaded spec with variant * modulecmd.tcl.in: Add defined variant when translating @loaded When translating the @loaded version specifier, also retrieve the variant specified for corresponding loaded module. 2021-03-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/variant/6.0, testsuite/modules.50-cmds/472-getvariant.exp, testsuite/modules.70-maint/375-variant-whatis.exp: ts: test getvariant/variant on whatis eval mode in 70/375 * modulecmd.tcl.in: Update variant procs to pass Tcl itrp as first arg Update the variant, variant-wh and getvariant procedures to pass them the reference to the current Tcl modulefile interpreter, instead of guessing this reference within the procedures. * modulecmd.tcl.in: Set an optimized version of variant cmd for whatis eval Add an optimized version of the variant modulefile command for the whatis evaluation mode, not to specifically raise specification error for this mode and barely set the variant to an empty string value in the modulefile context. This way, operations on variant are lighter on this global evaluation mode. Variant definition errors still produce error which stops modulefile evaluation but they are not reported unless if verbosity is set to debug mode like any other errors during a whatis global evaluation. * modulecmd.tcl.in: Parse variant cmd args in parseVariantCommandArgs proc Add the parseVariantCommandArgs procedure to specifically parse arguments set on variant modulefile command. 2021-03-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/variant/5.0, testsuite/modules.50-cmds/472-getvariant.exp: ts: test getvariant on help/test eval mode in 50/472 * testsuite/modulefiles.3/variant/4.0, testsuite/modules.70-maint/374-variant-test.exp: ts: test variant on test evalulation mode in 70/374 * testsuite/modulefiles.3/variant/4.0, testsuite/modules.70-maint/373-variant-help.exp: ts: test variant on help evalulation mode in 70/373 * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.70-maint/372-variant-display.exp: ts: test variant on display evalulation mode in 70/372 * testsuite/modulefiles.3/variant/5.0, testsuite/modules.50-cmds/472-getvariant.exp: ts: test getvariant in 50/472 * doc/source/design/variants.rst: doc: desc. getvariant in variant design doc 2021-03-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/vim/syntax/modulefile.vim: vim: add variant-related modulefile cmds & var * modulecmd.tcl.in: Add 'getvariant' modulefile command Introduce the getvariant modulefile command to query the current value of a given variant name. If variant is not defined, an empty string is return or the specific value passed as argument. During a display evaluation, getvariant output the variant name enclosed in curly braces. * modulecmd.tcl.in: Use msgrecid to identify registerd mod designation Update the registerModuleDesignation and getModuleDesignation procedures to identify the module designation with the message record id, which is also the evaluation id. Identification is this way improve as the same module name and version could be evaluated multiple times with different variant set during the same modulecmd.tcl run. 2021-03-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/variant/4.0, testsuite/modules.50-cmds/470-variant.exp, testsuite/modules.50-cmds/471-variant-unload.exp: ts: test variant evaluation on unload mode in 50/471 2021-03-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Record variant for persistency unless if unloading * modulecmd.tcl.in: Return updated module specification on getPathToModule When getPathToModule is called to find a module specification from the loaded module list, return an updated version of this module specification fully matching the designation of found loaded module (name, version and variants). When unloading module, set this updated designation as the module specified to unload. Which means querying the [module-info specified] during an unload evaluation will return the loaded module specification not the module specification set by user. * modulecmd.tcl.in: Enclose modname when setting it in switch upper ctx 2021-03-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/variant/1.0, testsuite/modulefiles.3/variant/w s, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/040-restore.exp: ts: update collections tests with --default variant opt * testsuite/modulefiles.3/variant/1.0, testsuite/modules.50-cmds/470-variant.exp: ts: add --default tests in 50/470 * modulecmd.tcl.in: Add --default option to variant modfile cmd * testsuite/modulefiles.3/variant/1.0, testsuite/modulefiles.3/variant/2.0, testsuite/modules.50-cmds/470-variant.exp: ts: test variant defined without allowed value list in 50/470 2021-03-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Raise error when no allowed val list defined for variant * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/470-variant.exp, testsuite/modules.61-coll/040-restore.exp: ts: add err_unkvar helper proc * testsuite/modulefiles.3/variant/1.0, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/470-variant.exp, testsuite/modules.61-coll/040-restore.exp: ts: update variant tests for unspecified variant global err * modulecmd.tcl.in: Raise global error if no val specified for variant 2021-03-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/variants.rst: doc: remove --multivalued opt from variant cmd Ability to specify multiple values for a variant does not seem to be needed in the first version of the mechanism. * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/470-variant.exp: ts: invalid value for variant is global error 2021-03-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Invalid variant value specified is a global error Raise a global error rather a modulefile error when value specified for variant is not part of the allowed variant list. 2021-03-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/231-verbose2.exp: ts: test not loaded mod name vers spec returned by getPathToModule * modulecmd.tcl.in: Return on getPathToModule mod name vers spec if not loaded When looking at a loaded module with getPathToModule procedure, if this module designation is not found loaded, return as module name the module name and version specification (module specification without the variant eventually specified) * modulecmd.tcl.in: Record module name and version spec when parsing specification Add to the g_moduleVersSpec structure the module name and version specified on the command-line or in modulefile (which is equivalent to the module specification minus the variant specified in this specification). Add the getModuleNameAndVersFromVersSpec procedure to retrieve this module name and version specification from full module specification string. * modulecmd.tcl.in: Return empty modname when mod is empty on getPathToModule * modulecmd.tcl.in: Update mod desis. for switch ctx when unload is skipped When the unload phase of a switch action is skipped, because for instance module is not loaded, update the switched-off module designation for the switch context prior ending the unload phase. 2021-03-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/variant/1.0, testsuite/modulefiles.3/variant/w s, testsuite/modules.70-maint/371-variant-msg.exp: ts: add specific report msg tests for variant in 70/371 * testsuite/modules.50-cmds/470-variant.exp, testsuite/modules.61-coll/040-restore.exp: ts: update mod designation in variant tests 2021-03-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/020-module.exp, testsuite/modules.20-locate/100-wspace.exp, .../273-adv_version_spec-space.exp: ts: mod desig. with space is now enclosed in '' * doc/source/design/variants.rst: doc: desc variant report on info msgs in design doc * modulecmd.tcl.in: Record module designation prior its evaluation Record module designation (module name and version + variants specified on load/unload sub-command arguments) prior its load or unload evaluation to report an accurate designation on top of the error message obtained. Update getVariantList procedure to get the variant specified list for given module from module specification instead of getting it from the loaded environment. 2021-03-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Record/use module designation including variant spec Add the registerModuleDesignation and getModuleDesignation procedures to report specified variants in addition to module name and version when reporting load, unload or switch of modules. Module name or variant specifications are enclosed between single quotes if they contain a space character. Module name and variant specifications are highlighted if configured when registered to produce a graphically enhanced report message. Variant specification is enclosed between {} to distinguish it from module name and version. 2021-03-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Work with mod+variant designations on restore sub-cmd Adapt cmdModuleRestore to work with the full module name, version and variant specification to compare currently loaded environment against environment specified in saved collection. * testsuite/modules.70-maint/290-json.exp, testsuite/modules.70-maint/320-tags.exp, testsuite/modules.70-maint/340-output-key.exp, testsuite/modules.70-maint/361-list_output.exp: ts: adapt list sub-cmd json tests for variant * testsuite/modules.61-coll/040-restore.exp: ts: test variant on restore sub-cmd in 61/040 2021-03-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/home/coll27, testsuite/home/coll28, testsuite/home/coll29, testsuite/modulefiles.3/variant/1.0, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.61-coll/999-cleanup.exp: ts: test variant on saveshow sub-cmd in 61/060 * testsuite/home/coll26, testsuite/modulefiles.3/variant/1.0, testsuite/modulefiles.3/variant/3.0, testsuite/modulefiles.3/variant/w s, testsuite/modules.50-cmds/470-variant.exp, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/999-cleanup.exp: ts: test variant on save sub-cmd in 61/030 * testsuite/config/base-config.exp, testsuite/modules.00-init/005-init_ts.exp: ts: add '*' to the list of escaped chars on regexp tests 2021-03-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/variants.rst: doc: desc. recording collection in variant design 2021-03-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Record variant specification in saved collection When modules have been loaded with variants specified, record the variants specification along module name and version when saving the loaded environment as a collection. In case the collection_pin_version configuration option is disabled, only record in collection the variants whose value is not the default one. This way the same behavior is obtained not to pin version or variant if their default value is the one saved. 2021-03-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/470-variant.exp, testsuite/modules.70-maint/370-variant.exp: ts: adapt and add tests for is-default variant val persistency * modulecmd.tcl.in: Record if variant value is default in persistency var * doc/source/design/variants.rst: doc: desc is-default-set persistency in variant design * testsuite/modules.70-maint/220-config.exp, testsuite/modules.70-maint/361-list_output.exp: ts: adapt tests for variant val in list_*output cfgs in 70/{220,361} * modulecmd.tcl.in: Add default return val if output elt not known on isEltInReport * testsuite/modules.70-maint/370-variant.exp: ts: test variant report on list sub-cmd in 70/370 2021-03-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/output-configuration.rst, doc/source/design/variants.rst: doc: desc. variant reporting in design docs * modulecmd.tcl.in: Describe variant in list sub-cmd report key * modulecmd.tcl.in: Sort variants and remove duplicate defs when reporting * modulecmd.tcl.in: Output variants as object in json mode Adapt formatListEltToJsonDisplay to call for formatObjectValToJson to output elements passed as argument as a JSON object. Also add an argument for each element to control whether it should be reported or not, in order not to output the variants field on avail output. 2021-03-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Report variant on module list Report the variant set for loaded modules on module list output if variant are defined in output list configuration. Adapt formatListEltToDisplay and formatListEltToJsonDisplay procedures to render the variant set for loaded modules. Update displayKey procedure to describe how variant are reported. 2021-03-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Render colon sep only if multiple elt to report 2021-03-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst, configure, doc/source/module.rst: install/doc: add `va` color key Add the `va` color key in default light and dark color palettes to graphically enhance the report of variant value. * INSTALL.rst, configure, doc/source/module.rst, modulecmd.tcl.in: install/doc: add variant element on list_*output configs Add the element `variant` in the allow list of the list_output and list_terse_output configuration options. Set this new element in the default value list of the list_output configuration option. 2021-03-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/470-variant.exp: ts: adapt variant tests for persistency in 50/470 * modulecmd.tcl.in: Set specified variant values persistent Record in user loaded environment the values specified for the variants defined in the evaluated modulefile. Use MODULES_LMVARIANT environment variable to record such information. * testsuite/modulefiles/spread/3.0, testsuite/modulefiles/spread/7.0, testsuite/modulefiles/spreadrc/dir3/.modulerc, testsuite/modulefiles/spreadrc/dir3/1.0, testsuite/modulefiles/spreadrc/dir4/.modulerc, testsuite/modulefiles/spreadrc/dir7/.modulerc, testsuite/modulefiles/spreadrc/dir7/1.0, testsuite/modulefiles/spreadrc/dir8/.modulerc: ts: adapt existing interp tests now variant are checked 2021-03-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/470-variant.exp: ts: test mixing variant and version spec in 50/470 2021-03-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/470-variant.exp: ts: test specification of unknown variant in 50/470 * modulecmd.tcl.in: Raise error is specified variant is unknown 2021-03-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/var=val, testsuite/modulefiles.3/variant/1.0, testsuite/modulefiles.3/variant/2.0, testsuite/modulefiles.3/variant/3.0, testsuite/modules.50-cmds/470-variant.exp: ts: add initial variant tests in 50/470 2021-03-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add variant modulefile command Add initial version of the variant modulefile command taking as argument a variant name then the list of allowed values. Variant value specified is retrieved with getVariantListFromVersSpec procedure. Then variant name is instanciated in ModuleVariant array with specified value in modulefile interpretation context. 2021-03-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Parse valued-variant specified Update parseModuleSpecification procedure to parse valued-variant (name=value) set in module specification. * modulecmd.tcl.in: Add variantlist field to module name version spec struct Update setModuleVersSpec procedure to add as 7th entry in struct list the list of variant specified for modarg. Introduce the getVariantListFromVersSpec procedure to retrieve just this variant list from module name version specification. 2021-03-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_v3_v4.rst: doc: desc. variant changes in diff doc 2021-06-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/390-function.exp, testsuite/modules.50-cmds/400-source-sh.exp: ts: update set-function export mech. in 50/{390,400} * NEWS.rst, modulecmd.tcl.in: Export defined shell function only on Bash When defining a shell function with the set-function modulefile command, only export this function when using the Bash shell (using the export -f shell command) to make it available in sub-shell contexts. Shell function export is not supported on other kind of sh shell (sh, ksh and zsh). Fixes #401. * .cirrus.yml: cirrus: force libarchive update on el8.3 2021-06-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_v3_v4.rst: doc: desc. setenv diff between Modules 3.2 and 4+ Describe the difference between Modules 3.2 and 4+ when it comes to the arguments passed to the setenv modulefile command. Fixes #402. 2021-05-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, .../bar-2.1/bar-setup.csh, .../bar-2.1/bar-setup.sh, .../source-script-in-modulefile/bar-2.1/bin/barbin, .../modulefiles/bar/2.1, .../modulefiles/foo/1.2, .../cookbook/source-script-in-modulefile.rst: doc: desc setup with shell-specific scripts in cookbook Update the *Source script in modulefile* cookbook recipe to add it a *Usage with shell-specific scripts* section that demonstrate how to use modulefiles with `source-sh` commands when software provide a specific initialization script for each shell it supports. Take this opportunity to improve the readability of this recipe by coloring/highlighting shell session examples. Fixes #399. 2021-05-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/siteconfig.tcl-1: ts: fix modVersCmp redefinition test in 00/120 2021-05-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .github/workflows/linux_tests.yaml: gh: exit run on error if executed through script 2021-05-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, NEWS.rst, configure: install: allow building from submodule repository Fix installation scripts to allow building Modules when its repository is set as a git submodule. Closes #398. * MIGRATING.rst, NEWS.rst: doc: desc range in list on NEWS/MIGRATING * doc/source/module.rst: doc: desc. when new concepts were added in module(1) * doc/source/module.rst, doc/source/modulefile.rst: doc: desc use of version range in version list in manpages * doc/source/design/advanced-module-version-specifiers.rst: doc: update design doc now vers range allowed in list * testsuite/modulefiles.3/advvers2/.modulerc, testsuite/modulefiles.3/advvers2/1.0, testsuite/modulefiles.3/advvers2/1.1, testsuite/modulefiles.3/advvers2/2.0, testsuite/modulefiles.3/advvers2/2.10, testsuite/modulefiles.3/advvers2/2.2, testsuite/modulefiles.3/advvers2/2.8, testsuite/modulefiles.3/advvers2/3.7, testsuite/modulefiles.3/advvers2/4.2, testsuite/modulefiles.3/advvers2/foo, .../276-adv_version_spec-rangein.exp: ts: test use of version ranges in version lists 2021-05-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Allow version range in version list Improve the advanced version specifier to support use of version ranges within version list. The syntax `@:2,4:5,7:` enables to exclude versions. Closes #397. 2021-03-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Split version specifier parsing in dedicated proc Add parseModuleVersionSpecifier procedure, called from parseModuleSpecification to analyze the version specifier part in full module specification. * modulecmd.tcl.in, testsuite/example/siteconfig.tcl-1: Rename parseModuleVersionSpecifier into parseModuleSpecification Rename the parseModuleVersionSpecifier procedure into parseModuleSpecification, as it will now on take in charge more than just the version specifier parsing (specified variants will be parsed too). 2021-02-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/variants.rst: doc: add *Variants* design document 2021-05-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/config/base-config.exp: ts: never reset exit_status var between tests * doc/example/log-module-commands/siteconfig.tcl, doc/example/top-priority-values/siteconfig.tcl: doc: fix modulecmd state check in recipe code Code to handle the internal states of modulecmd have been reworked on Modules v4.6. As a consequence several siteconfig.tcl extension scripts described on documentation recipes have to be adapted. Closes #396 2021-04-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst: doc: desc. edit/MODULES_EDITOR in NEWS/MIGRATING * testsuite/modules.70-maint/380-edit.exp: ts: add 'edit' sub-command specific tests in 70/380 2021-04-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles/modbad/edit, testsuite/modules.00-init/071-args.exp, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.70-maint/220-config.exp, testsuite/modules.90-avail/070-full.exp: ts: update existing tests to check 'edit' * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp: ts: clean any editor config * doc/source/module.rst: doc: desc. edit/MODULES_EDITOR in module(1) * INSTALL.rst: doc: desc --with-editor in INSTALL * modulecmd.tcl.in: Throw any error from editor as external error * Makefile, Makefile.inc.in, configure, modulecmd.tcl.in, site.exp.in: install: add --with-editor configure option Introduce the --with-editor configure option to choose at installation time the default editor command to use to interactively edit modulefiles. Default editor is 'vi'. * doc/source/diff_v3_v4.rst: doc: desc. edit/editor in diff doc * init/Makefile, init/fish_completion, init/zsh-functions/_module.in: init: add editor config to completion script 2021-04-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add the 'editor' configuration option Add the editor module configuration option to define the editor command to use to interactively edit modulefiles. When specifically set, the MODULES_EDITOR environment variable is defined. If not set, environment variable VISUAL or EDITOR can be used to define the value of this configuration (in this order). Follow the same configuration scheme than Git with GIT_EDITOR, VISUAL and EDITOR environment variables. * modulecmd.tcl.in: Add 'edit' sub-command Introduce the edit sub-command to interactively edit existing modulefiles. * testsuite/modules.00-init/005-init_ts.exp: ts: attempt to set term size if failing to detect it 2021-04-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, contrib/rpm/environment-modules.spec.in, doc/source/conf.py, version.inc.in: Release of version 4.7.1 2021-04-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../sticky-modules/modulefiles/compiler/.modulerc, .../sticky-modules/modulefiles/compiler/compA/1.0, .../sticky-modules/modulefiles/compiler/compA/1.2, .../sticky-modules/modulefiles/compiler/compB/1.3, .../sticky-modules/modulefiles/compiler/compB/2.1, .../sticky-modules/modulefiles/core/.modulerc, doc/example/sticky-modules/modulefiles/core/1.0, doc/example/sticky-modules/modulefiles/core/2.0, doc/source/conf.py, doc/source/cookbook/sticky-modules.rst: doc: add *sticky modules* cookbook recipe * doc/source/conf.py: doc: update default etcdir exposed * doc/source/cookbook/hide-and-forbid-modules.rst: doc: fix hide-and-forbid-modules document ref * INSTALL.rst: doc: fix --with-tag-abbrev default value in INSTALL Correct the default value of the --with-tag-abbrev installation option in INSTALL document. * INSTALL.rst, doc/source/module.rst: doc: desc. changes on MODULES_COLORS/--with-*-background-colors Add description of changes that occurred on version 4.6 and 4.7 for the --with-dark-background-colors and --with-light-background-colors installation options and for the MODULES_COLORS environment variable. * INSTALL.rst: doc: fix desc. --with-{dark,light}-background-colors in INSTALL Update the description and default value of the --with-dark-background-colors and --with-light-background-colors installation options in INSTALL document. 2021-04-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/vim/syntax/modulefile.vim: vim: add modfile vars Module{Tool,ToolVersion,sCurrentModulefile} 2021-04-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/040-subshell.exp, testsuite/install.00-init/050-crossshell.exp: ts: exit code on fish>=3.2 saturates at 255 Update fish install tests following change introduced on fish 3.2, where the exit code now saturates to 255 for all builtins commands rather overflowing. (see https://github.com/fish-shell/fish-shell/pull/7702) * modulecmd.tcl.in: Fix sh-to-mod to support fish 3.2 Update the sh-to-mod mechanism to support version 3.2 of the fish shell. This new version introduces the `.` builtin command that should be regexp-escaped when determining the shell functions or aliases defined by the script analyzed by sh-to-mod. An extra space character is also added by fish 3.2 at the end of shell alias or function definition. Update parsing of these elements to ignore such extra space. 2021-03-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .github/ISSUE_TEMPLATE/question.md: github: add question issue template 2021-03-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * configure: install: re-license configure script from GPLv3+ to GPLv2+ Change license of the configure installation script from GPLv3+ to GPLv2+. Align this way all files from the Modules project under the GPLv2+ license. Consent has been obtained from the copyright holders (I, @xdch47 and @jraphanel) to perform such move. Consent from Jacques Raphanel and Felix Neumärker were collected by email. Revert contribution from R.K. Owen (cc4d3194), from whom consent is not yet obtained. Contribution will be restored as soon as consent will be obrained. Related to #389 * script/envml, script/envml.cmd: script: re-license envml scripts from GPLv3+ to GPLv2+ Change license of envml and envml.cmd scripts from GPLv3+ to GPLv2+. Align this way all files from the Modules project under the GPLv2+ license. Consent has been obtained from the copyright holders (I and @jraphanel) to perform such move. Consent from Jacques Raphanel was collected by email. Related to #389 2021-02-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst, doc/source/modulefile.rst: doc: fixes few typos in module.1 and modulefile.4 * Makefile, README.md: doc: add link to @EnvModules Twitter page in README * lib/envmodules.c, lib/envmodules.h: lib: re-license envmodules lib from GPLv3+ to GPLv2+ Change license of the Modules Tcl extension library from GPLv3+ to GPLv2+. Align this way all files from the Modules project under the GPLv2+ license. Consent has been obtained from copyright holder to perform such move (I hold the full copyright for this library). Related to #389 * lib/testutil-0getgroups.c, lib/testutil-closedir.c, lib/testutil-dupgetgroups.c, lib/testutil-getgrgid.c, lib/testutil-getgroups.c, lib/testutil-getpwuid.c, lib/testutil-mktime.c, lib/testutil-time.c: ts: re-license test libraries from GPLv3+ to GPLv2+ Change license of all testutil-* libraries, used to test Modules Tcl extension library, from GPLv3+ to GPLv2+. Align this way all files from the Modules project under the GPLv2+ license. Consent has been obtained from copyright holder to perform such move (I hold the full copyright for these librairies). Related to #389 * testsuite/bin/install_test_cmake, testsuite/bin/install_test_csh, testsuite/bin/install_test_fish, testsuite/bin/install_test_perl, testsuite/bin/install_test_python, testsuite/bin/install_test_r, testsuite/bin/install_test_ruby, testsuite/bin/install_test_sh, testsuite/bin/install_test_tcl: ts: re-license install test scripts from GPLv3+ to GPLv2+ Change license of all install_test_* scripts, used to test Modules installation, from GPLv3+ to GPLv2+. Align this way all files from the Modules project under the GPLv2+ license. Consent has been obtained from copyright holder to perform such move (I hold the full copyright for these script files). Related to #389 * script/mb, script/mlprof, script/modulecmd.in, script/mpub, script/mrel, script/mt, script/mtreview, script/nglfar2ccov, script/playdemo: script: re-license script from GPLv3+ to GPLv2+ Change license of mb, mlprof, modulecmd, mpub, mrel, mt, mtreview, nglfar2ccov and playdemo scripts from GPLv3+ to GPLv2+. Align this way all files from the Modules project under the GPLv2+ license. Consent has been obtained from copyright holder to perform such move (I hold the full copyright for these script files). Related to #389 2021-02-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * README.md, doc/source/index.rst: doc: clarify license terms (GPLv2+) Related to #389 2021-02-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst, contrib/rpm/environment-modules.spec.in, doc/source/conf.py, version.inc.in: Release of version 4.7.0 * .gitattributes: install: exclude codecov.yml from git export 2021-02-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst, NEWS.rst, doc/source/conf.py: doc: add *Get Modules* section in INSTALL * INSTALL.rst: doc: use term output-style for examples in INSTALL 2021-02-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc. term_width/--width/-w in NEWS * doc/source/diff_v3_v4.rst: doc: desc. term_width in diff doc 2021-02-15 Anais GAERTNER <anais.gaertner@cea.fr> * doc/source/module.rst: doc: desc. term_width/--witdh/-w in module(1) man 2021-02-12 Anais GAERTNER <anais.gaertner@cea.fr> * init/Makefile, init/fish_completion, init/zsh-functions/_module.in: init: add -w/--width options to completion scripts 2021-02-09 Anais GAERTNER <anais.gaertner@cea.fr> * init/Makefile, init/fish_completion, init/zsh-functions/_module.in: init: add term_width config to completion script * modulecmd.tcl.in: Add a range of acceptable values for term_width config Add a range of acceptable values for the options -w and --width using configuration option kind 'intbe'. The value should be an integer comprised between 0 and 1000. An error message is sent when a value is out of this range. 2021-02-08 Anais GAERTNER <anais.gaertner@cea.fr> * testsuite/modules.70-maint/220-config.exp: ts: adapt existing tests for term_width config in 70/220 2021-01-25 Anais GAERTNER <anais.gaertner@cea.fr> * testsuite/modules.70-maint/350-term_width.exp: ts: add test for term_width config in 70/350 2021-01-07 Anais GAERTNER <anais.gaertner@cea.fr> * modulecmd.tcl.in: Add term_width configuration By default, term_width is equal to 0, but can be overridden by the environment variable, which can be also overriden by the command-line options -w or --width=. When term_width is equal to 0, the output width is the full terminal width, automatically detected by the module command. If term_width is different from 0, this sets a specific number of columns for the display of the output. Closes #359 2021-02-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst: doc: desc. {avail,list}_*output in MIGRATING * NEWS.rst: doc: desc. silent make and recent inst/mpub/rpm work in NEWS * NEWS.rst: doc: desc. {avail,list}_*output in NEWS 2021-02-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/module-tags.rst: doc: fix mfcmd ref in module-tags design doc * testsuite/example/siteconfig.tcl-1, testsuite/modules.90-avail/070-full.exp: ts: update tests relying on avail_report_{dir,mfile}_sym cfg * doc/source/module.rst: doc: desc. --output/-o cmd line switches * doc/source/module.rst: doc: desc {avail,list}_*output configs with related envar * doc/source/module.rst: doc: remove avail_report_{dir,mfile}_sym configs * contrib/rpm/environment-modules.spec.in: rpm: align spec syntax with Fedora spec file Add on the way a missing build dependency on 'make' package. Also remove obsolete 'Group' tag (see https://fedoraproject.org/wiki/Changes/Remove_Group_Tag) 2021-02-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * script/mpub: script: correctly detect previous version tag on mpub In case last bugfix release was made from a branch not parent of the current branch from which the next release will be rolled out. List all tags and get previous version name from the second to last position. * Makefile: install: correctly clear git remote in build ref tag * testsuite/modules.20-locate/043-virtual.exp: ts: illegal dir error now obtained on FreeBSD 12.2 * .cirrus.yml: cirrus: test over newer FreeBSD 11 & 12 releases * Makefile, doc/Makefile, init/Makefile: install: silently include version.inc in Makefiles Silently include version.inc in main, doc and init Makefiles to avoid 'Makefile:349: version.inc: No such file or directory' warning message when version.inc needs to be rebuilt prior being loaded. 2021-02-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/Makefile: install: doc cannot be built in parallel * configure: install: add -i opt to lib autoreconf Ensure missing auxiliary file are copied when running autoreconf for Modules Tcl extension library. * lib/tcl.m4: install: import new version of lib/tcl.m4 Import new version of tcl.m4 for compatibility with autoconf >=2.69. File is imported from https://github.com/tcltk/tclconfig. * lib/configure.ac: install: fix lib/configure.ac syntax for autoconf>=2.69 * Makefile, doc/Makefile: install: silent compat version make build * Makefile, doc/Makefile, init/Makefile: install: no include of version.inc for 'clean' make goals * doc/Makefile: install: put 'all' rule first in doc Makefile * doc/Makefile, init/Makefile: install: build ../version.inc from init/doc Makefiles Add makefile rule to build ../version.inc file if missing from the init and doc Makefiles. 2021-02-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/modulefile.rst: doc: fix link to module-info in modulefile(4) man 2021-02-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, doc/Makefile: install: no print directory change for build make targets Pass the --no-print-directory option to the make commands which are silenced by default. 2021-02-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, doc/Makefile, init/Makefile, lib/Makefile.in: install: pretty print on makefile build targets Print generated file names rather commands executed to generate these files on makefile build targets. Output when making Modules is this way simplified. When option `V=1` is passed to make verbose mode is enabled and executed commands are shown. Simplified make output does not apply to the install, uninstall, test, clean, distclean targets and their relatives. 2021-02-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/Makefile: install: improve doc-related makefile rules 2021-02-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .github/workflows/linux_tests.yaml: gh: emulate tty on linux tests with specific siteconfig * init/Makefile, init/zsh-functions/_module.in: init: add completion of -a/--all opt on list sub-cmd 2021-02-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/Makefile, init/fish_completion, init/zsh-functions/_module.in: init: add -o/--output options to completion scripts * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module.in: init: use -o option instead of sed in completion scripts Update shell completion scripts to make use of the module option -o to control the element to find in output rather using sed command to discard the unwanted elements. * testsuite/modulefiles.3/foo/.modulerc, testsuite/modulefiles.3/foo/0.2, testsuite/modules.70-maint/360-avail_output.exp: ts: test modulepath elt output on avail sub-cmd 2021-02-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Make cmdModuleList rely on reportModules Use reportModules to output the loaded modules and their properties. Add the mod_list_order argument to the reportModules procedure to precise the order to report the results. * modulecmd.tcl.in: Add show_idx and excluded_tag args to reportModules * modulecmd.tcl.in: Transform listModules into reportModules Rename the listModules procedure into reportModules and handle result output from there by directly calling displayElementList rather returning the list of elements to output. * modulecmd.tcl.in: Report modulepath on avail sub-cmd if included in output If modulepath is not included in output, available modules collected from global/user rc and enabled modulepaths are aggregated and reported all together. Firstly defined module wins. * modulecmd.tcl.in: Externalize getModules call outside of listModules * modulecmd.tcl.in: Consolidate search filters in cmdModuleAvail 2021-02-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/modulerc-1.in, testsuite/install.00-init/050-crossshell.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/220-config.exp: ts: update tests of shells_with_ksh_fpath config Now configuration value expect a specific list of shell names separated by colon character. * NEWS.rst, doc/source/module.rst, modulecmd.tcl.in: Validate elements in shells_with_ksh_fpath value list The shells_with_ksh_fpath configuration option and its relative environment variable MODULES_SHELLS_WITH_KSH_FPATH accept a list of shell each of them separated by colon character. Accepted shell names are sh, bash, csh, tcsh and fish. 2021-02-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, configure: install: split configure err msg over an extra line * NEWS.rst, configure: install: color ERROR/WARNING msg header in configure Color the *ERROR* and *WARNING* message headers produced by configure script if output is sent to a terminal. * INSTALL.rst: doc: desc. expected value for --with-nearly-forbidden-days * NEWS.rst, configure: install: check --with-nearly-forbidden-days int value Check the value set for the --with-nearly-forbidden-days option is an integer comprised between 0 and 365. * testsuite/modules.20-locate/115-forbid.exp: ts: test bad val in MODULES_NEARLY_FORBIDDEN_DAYS in 20/115 2021-02-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .cirrus.yml: cirrus: increase git clone depth * testsuite/modules.70-maint/220-config.exp: ts: update nearly_forbidden_days config tests in 70/220 * NEWS.rst, doc/source/module.rst, modulecmd.tcl.in: Restrict accepted values for nearly_forbidden_days config Restrict the value accepted by nearly_forbidden_days configuration option to integer comprised between 0 and 365. * modulecmd.tcl.in: Add configuration option kind 'intbe' Add configuration option kind 'intbe' which stands for *integer between* where value must be an integer comprised between a lower and an upper bound. These bounds are described as a list of two elements in configuration value value list. Adapt getConf and cmdModuleConfig procedures to check such configuration option kind. 2021-01-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/360-avail_output.exp: ts: test dirwsym elt output on avail sub-cmd * modulecmd.tcl.in: Report dirwsym on avail sub-cmd if included in output * testsuite/modules.70-maint/360-avail_output.exp: ts: test alias elt output on avail sub-cmd * modulecmd.tcl.in: Report alias on avail sub-cmd if included in output * testsuite/modulefiles.3/foo/.modulerc, testsuite/modules.70-maint/360-avail_output.exp, testsuite/modules.70-maint/361-list_output.exp: ts: test tag elt output on avail/list sub-cmd * modulecmd.tcl.in: Report tag on avail/list sub-cmd if included in output * testsuite/modules.00-init/100-pager.exp, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/150-access-init.exp: ts: update test after report_format default val change * testsuite/modules.70-maint/220-config.exp: ts: remove avail_report_{mfile,dir}_sym config tests * testsuite/modules.70-maint/360-avail_output.exp, testsuite/modules.70-maint/361-list_output.exp: ts: test sym elt output on avail/list sub-cmd * modulecmd.tcl.in: Report sym on avail/list sub-cmd if included in output Update avail and list sub-command output mechanism to report symbolic versions only if `sym` keyword is part of current output configuration. This change makes both avail_report_dir_sym and avail_report_mfile_sym configuration options useless. Thus these 2 options are removed as it was not possible to configure them for users without updating the modulecmd.tcl script. * testsuite/modules.70-maint/361-list_output.exp: ts: test idx elt output on list sub-cmd 2021-01-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Report idx on list sub-cmd if included in output * testsuite/modules.70-maint/360-avail_output.exp, testsuite/modules.70-maint/361-list_output.exp: ts: test key elt output on avail/list sub-cmd * testsuite/modules.70-maint/361-list_output.exp: ts: test header elt output on list sub-cmd * modulecmd.tcl.in: Report key on avail/list sub-cmd if included in output * modulecmd.tcl.in: Report header on list sub-cmd if included in output * modulecmd.tcl.in: Add isEltInReport procedure Introduce the isEltInReport procedure to check if a given element should be part of the content to report. This procedure checks for the list of element to report relative to the currently running module sub-command and currently defined output mode. 2021-01-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/360-avail_output.exp, testsuite/modules.70-maint/361-list_output.exp: ts: initial MODULES_*OUTPUT env var tests in 70/{360,361} 2021-01-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/output/1.0, testsuite/modules.70-maint/360-avail_output.exp, testsuite/modules.70-maint/361-list_output.exp: ts: invalid value set on -o/--output opt in 70/{360,361} 2021-01-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/220-config.exp: ts: adapt existing tests for {avail,list}_*output in 70/220 2021-01-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/360-avail_output.exp, testsuite/modules.70-maint/361-list_output.exp: ts: adapt 70/{360,361} tests for tcl<8.6 2021-01-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Validate {avail,list}_*output config values Validate the value list set for the output content configuration based on selected module sub-command. Error is raised as soon as an element in value list is not defined in the allowed value list. Add isDiffBetweenList procedure to check if an element in a list is not part of a second list passed as argument. Update getConf, cmdModuleConfig and parseModuleCommandArgs procedures to correctly check the value passed to the output content configuration options. 2021-01-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/output/1.0, testsuite/modules.70-maint/360-avail_output.exp, testsuite/modules.70-maint/361-list_output.exp: ts: mix -o/--output with -t/-l/-j in 70/{360,361} * modulecmd.tcl.in: Raise error if -o/--output used on long/json modes 2021-01-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Update report_format state with terse/long mode Change the report_format state to also hold the terse and long value in case the --terse or --long mode is enabled. Change default value of report_format state to regular. This way the state now indicates the output mode which is expected with long and terse modes standing for a specific plain output format. 2021-01-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/431-not-req.exp: Raise error if --not-req not used in correct context Raise an error to terminate evaluation instead of printing a warning message when the --not-req option is used for an unsupported sub-command. 2021-01-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/foo/.modulerc, testsuite/modulefiles.3/output/1.0, testsuite/modules.70-maint/360-avail_output.exp, testsuite/modules.70-maint/361-list_output.exp: ts: initial -o/--output tests in 70/{360,361} 2021-01-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add -o/--output command-line switches Add the -o/--output command-line switches to supersedes the default output configuration for avail and list sub-commands. -o requires a value set as next argument whereas --output requires its value to be joined to it after '=' character. Adapt parseModuleCommandArgs, to be able to tell it to ignore errors on first call pass performed on 'ml' command (as at the start module sub-command is not known). Then a second call is made to raise the errors for options not appropriate to the selected sub-command. When the -o/--output options are used on an unsupported module sub-command, or if these options are wrongly specified an error is raised. 2021-01-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp: ts: ensure expected default output for tests * doc/source/diff_v3_v4.rst: doc: desc new avail/list output configs in diff doc * INSTALL.rst: doc: desc --with-{avail,list}-*output opts in INSTALL 2021-01-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/Makefile, init/fish_completion, init/zsh-functions/_module.in: init: add {avail,list}_*output configs to completion scripts * Makefile, Makefile.inc.in, configure, modulecmd.tcl.in, site.exp.in: Add {avail,list}_{terse_,}output configurations * doc/source/design/module-tags.rst, doc/source/design/output-configuration.rst: doc: add *Output configuration* design document Describe customization of the output in a dedicated document. Move all reference on that topic from *Module tags* document to this new document. 2021-02-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp: ts: filter out volatile OS X sharepoint user group * codecov.yml: codecov: no notification before receiving the 5 builds * NEWS.rst: doc: desc. configure & make docs latest changes in NEWS 2021-02-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * configure: install: correctly detect pre-built doc environment Do not set docs as pre-built if configure script is ran another time after building doc. * doc/Makefile: install: no html doc build if docs are pre-built Disable the Makefile rules to build the HTML documentation in case if the documentation is found pre-built in the dist archive. 2021-02-05 R.K. Owen <rk@owen.sj.ca.us> * configure: install: fix configure script when called from PATH Have configure assume the '.' dot directory when invoked without the prepended ./ 2021-02-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, modulecmd.tcl.in, testsuite/home.2/.modulerc, testsuite/modules.20-locate/070-homerc.exp: Consider user/global rc eval like top level eval Introduce rc_running state to flag when the init rc or user/global rc files are evaluated. Consider the module load, unload and switch performed in user/global rc like top level load, unload or switch evaluation. Closes #372. 2021-02-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, modulecmd.tcl.in, testsuite/modules.10-use/030-use.exp, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.61-coll/999-cleanup.exp: Modulepath starting with env var ref is considered absolute Consider modulepath starting with a reference to an environment variable as absolute. Closes #376. 2021-02-03 Colin Marquardt <cmarqu42@gmail.com> * NEWS.rst, init/Makefile, init/bash_completion.in, init/tcsh_completion.in: init: replace completion helper vars with their content This is done for tcsh and bash where those variables clutter the environment. Closes #382 2021-01-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, modulecmd.tcl.in: Fix msg output on very small term width (6<12) Closes #381. 2021-01-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst: doc: desc. MODULES_MCOOKIE_VERSION_CHECK in config section * NEWS.rst, modulecmd.tcl.in, testsuite/modules.70-maint/220-config.exp: Fix config sub-cmd to set nearly_forbidden_days Correct the config sub-command to accurately check values passed to set the nearly_forbidden_days config and accept valid integer values. Closes #380. * NEWS.rst, modulecmd.tcl.in: Fix msg output on very small term width (<6) The max_idx variable set in reportMsgRecord got a value lower than one character when terminal width is very small. In addition empty lines were produced for messages starting with a serie of whitespace (for instance when reporting error stack trace). Closes #379. 2021-01-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.70-maint/220-config.exp: ts: adapt existing tests for mcookie_version_check * testsuite/modules.20-locate/057-mcookie.exp: ts: MODULES_MCOOKIE_VERSION_CHECK disabled test in 20/057 * NEWS.rst: doc: desc. mcookie_version_check in NEWS * doc/source/module.rst, doc/source/modulefile.rst: doc: desc. mcookie_version_check in module(1)/modulefile(4) * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module.in: init: add mcookie_version_check config to completion scripts * INSTALL.rst, doc/source/diff_v3_v4.rst: doc: desc. mcookie_version_check in INSTALL/diff * Makefile, Makefile.inc.in, configure, modulecmd.tcl.in, site.exp.in: Add mcookie_version_check config Add mcookie_version_check configuration to disable the version check on the Modules magic cookie used in modulefiles. Option, enabled by default, is linked to the MODULES_MCOOKIE_VERSION_CHECK environment variable. Closes #377. * .github/workflows/windows_tests.yaml: gh: no more need to create python link on Cygwin env * NEWS.rst, modulecmd.tcl.in: Fix output on very small term width (<3) The cur_cols variable set in displayElementList got a negative value in case terminal width is lower or equal to 3. In this situation, set cur_cols to 0. Closes #378. 2021-01-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst: doc: desc. key section in module(1) man * MIGRATING.rst, NEWS.rst: doc: desc. added key section in NEWS/MIGRATING * modulecmd.tcl.in, testsuite/modules.70-maint/220-config.exp: Fix config cmd to also report dynamic states Update config sub-command to also report when --dump-state option is set the value of the states that are dynamically set (states with no definition in ::g_state_defs array) * testsuite/modulefiles.3/key/.modulerc, testsuite/modulefiles.3/key/1.0, testsuite/modulefiles.3/key/2.0, testsuite/modulefiles.3/key/4.0, testsuite/modulefiles.3/key/5.0, testsuite/modules.70-maint/340-output-key.exp: ts: test key output on avail/list in 70/340 2021-01-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/100-wspace.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/440-module-tag.exp, testsuite/modules.70-maint/040-list.exp, .../274-adv_version_spec-autosym.exp, testsuite/modules.70-maint/280-ml.exp, testsuite/modules.70-maint/320-tags.exp, testsuite/modules.70-maint/321-tag_abbrev.exp, testsuite/modules.70-maint/322-tag-sgr.exp, testsuite/modules.90-avail/020-single.exp, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/070-full.exp, testsuite/modules.90-avail/100-tags.exp: ts: adapt existing test to output key addition 2021-01-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add a key at end of avail/list sub-cmd output In case the output result of the avail or list sub-command makes use of graphical rendering or tag abbreviation, add a key at the end of the output to help understanding what these colors or acronyms stand for. 2021-01-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Track if some alias are reported Set g_used_alias_nocolor global variable if alias are reported in parentheses (no color to graphically render it). * modulecmd.tcl.in: Track if some sym are reported Set g_used_sym_nocolor global variable if symbols are reported in parentheses, excluding alias abbreviation '@'. 2021-01-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/module-tags.rst: doc: update 'key' description in module tag design doc 2021-01-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add isSgrkeyColored to check if an sgr key is colored Test if color mode is enabled and passed sgr key exists. Useful to test if some graphical rendering can be applied without making use of it. 2021-01-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Track tag name or abbrev that have been used Collect all tag name or abbreviation that are used to graphically render output in a global array named g_used_tags. Will help to know what to put in output key. 2021-01-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Track color keys that have been used Collect all color keys are that used to graphically render output in a global array named g_used_colors. Will help to know what to put in output key. * modulecmd.tcl.in: Build g_abbrevTag array in initConfTagAbbrev In addition to build the g_tagAbbrev array in initConfTagAbbrev procedure that associate each tag with their corresponding abbreviation, the g_abbrevTag is now also built to associate each abbreviation with their corresponding tag. Some tags are known to share the same abbreviation, like hidden-loaded and hidden tags, but these tags are used in different contexts. So when building g_abbrevTag array skip tags not relevant to the current command context 2021-01-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst, NEWS.rst: doc: desc inst opt --enable-new-features in INSTALL/NEWS * configure: install: add --enable-new-features configure option Introduce --enable-new-features configure option to enable all at once all the new features disabled by default due to the behavior change they introduced on Modules 4. --enable-new-features option is equivalent to --enable-auto-handling, --enable-color, --with-icase=search, --enable-extended-default, --enable-advanced-version-spec. 2021-01-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, doc/source/_static/terminal_output.css: doc: desc. module tags in MIGRATING 2021-01-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc. modulefile read cancellation in NEWS * testsuite/modules.70-maint/330-large-file.exp: ts: test large modulfile read in 70/330 * codecov.yml: ts: add codecov configuration file Fix CodeCov behavior to raise error if CI tests failed or if coverage result is decreasing. * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: ts: update readFile bad call tests in 00/120 * lib/configure.ac, lib/envmodules.c, lib/envmodules.h: lib: add must_have_cookie arg to readFile proc Update C-version of the readFile procedure to add it the `must_have_cookie` argument that tells if the Modules magic cookie (#%Module) has to be checked when reading file to abort reading as soon as possible if read file must be a modulefile. Bump version of Tcl Envmodules library to 1.3.0. Fixes #375. * modulecmd.tcl.in: Add must_have_cookie arg to readFile proc Update pure-Tcl version of the readFile procedure to add it the `must_have_cookie` argument that tells if the Modules magic cookie (#%Module) has to be checked when reading file to abort reading as soon as possible if read file must be a modulefile. Fixes #375. * testsuite/modules.00-init/120-siteconfig.exp: ts: fix 00/120 tests now testouterr_cmd auto append nl * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp: ts: no cleanup of TESTSUITE_ENABLE_SITECONFIG when starting ts 2021-01-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst: doc: colorize term output example in MIGRATING * doc/source/_static/literal_block.css, doc/source/_static/rtd_literal_block.css, doc/source/_static/terminal_output.css, doc/source/conf.py: doc: define sphinx roles/css to colorize parsed-literal 2021-01-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc. recent doc improvements in NEWS * MIGRATING.rst: doc: fix typo on sticky mod desc in MIGRATING 2021-01-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../cookbook/ensure-user-qualify-modules.rst, doc/source/cookbook/inhibit-report-info.rst, .../cookbook/module-info-name-return-basename.rst, doc/source/cookbook/modulefiles-in-git.rst, .../cookbook/modulepaths-persist-over-sudo.rst, .../new-features-without-breaking-old-module.rst, doc/source/cookbook/top-priority-values.rst, doc/source/cookbook/unload-firstly-loaded.rst, .../design/advanced-module-version-specifiers.rst, .../design/default-latest-version-specifiers.rst, doc/source/design/extended-default.rst, doc/source/design/hide-or-forbid-modulefile.rst, doc/source/design/insensitive-case.rst, doc/source/design/module-tags.rst, .../design/source-shell-script-in-modulefile.rst: doc: markup config/subcmd/mfcmd in cookbook/design * doc/source/module.rst, doc/source/modulefile.rst: doc: desc. when opt were added to sub-cmd and mf cmd * doc/source/module.rst: doc: desc. -a option on list subcmd in module(1) 2021-01-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/index.rst: doc: reorg index table of content * INSTALL.rst, MIGRATING.rst, NEWS.rst, doc/source/module.rst, doc/source/modulefile.rst: doc: markup mconfig refs * MIGRATING.rst: doc: desc. sticky modules in MIGRATING * MIGRATING.rst: doc: desc. hidden-loaded in MIGRATING 2021-01-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst: doc: desc. when config opts were introduced in module(1) * doc/source/conf.py, doc/source/module.rst: doc: desc. module config. option with :mconfig: directive * INSTALL.rst: doc: desc. when inst. opt. were introduced in INSTALL * NEWS.rst: doc: fix typo on --enable-append-manpath in NEWS 2021-01-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst: doc: markup subcmd/mfcmd/command refs in INSTALL * INSTALL.rst, MIGRATING.rst, NEWS.rst: doc: mark refs to installation option with :instopt: * INSTALL.rst, doc/source/conf.py: doc: desc. inst. option with :instopt: directive Add the :instopt: sphinx directive to describe installation option. * doc/source/_static/rtd_theme_overrides.css, doc/source/conf.py: doc: override wide tables in RTD theme * doc/source/module.rst: doc: desc. -f option on purge subcmd in module(1) man * NEWS.rst: doc: desc. sticky/super-sticky in NEWS * doc/source/modulefile.rst: doc: desc. hidden-loaded in 'Hiding modulefiles' section * doc/source/conf.py, modulecmd.tcl.in: New year (2021) copyright mention update 2020-12-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc. hidden-loaded and verbose2 in NEWS 2020-12-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Fix fish function check in sh-to-mod env change Correctly get all shell functions defined in fish shell prior sh-to-mod/source-sh script evaluation as some functions may be autoloading after the initial function definition check. So function check should be done twice to ensure to get all function defined on the second pass. * doc/source/module.rst, doc/source/modulefile.rst: doc: add 'Sticky modules' section in module(1) And add reference to this new section everytime the sticky module concept is mentionned in module(1) and modulefile(4). 2020-12-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst, doc/source/modulefile.rst: doc: add 'Module tags' section in module(1) And add reference to this new section everytime the module tag concept is mentionned in module(1) and modulefile(4). * NEWS.rst: doc: desc. module tag graphical rendering in NEWS * NEWS.rst: doc: desc. module tag abbreviations in NEWS * NEWS.rst: doc: update module tag desc. with new special tags in NEWS * doc/source/modulefile.rst: doc: desc. special module tags in modulefile(4) man 2020-12-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/377-error.exp, testsuite/modules.50-cmds/460-sticky.exp, testsuite/modules.50-cmds/461-super-sticky.exp: ts: test purge -f on sticky/broken mod with dep in 50/{377,460,461} * doc/source/design/sticky-modules.rst, modulecmd.tcl.in: Unload dependent module on purge if forced When performing a `purge` sub-command with the `--force` option set, unload modules that are depended by other modules that cannot unload. This way `purge --force` behaves like `unload --force`. * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp: ts: clear all TESTSUITE_* vars prior running tests 2020-12-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/sticky/.modulerc, testsuite/modulefiles.3/stickysub/.modulerc, testsuite/modules.50-cmds/462-sticky-corner.exp: ts: test corner cases for stickyness swap in 50/462 2020-12-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/home/coll-sticky-4, testsuite/home/coll-sticky-5, testsuite/home/coll-sticky-6, testsuite/modulefiles.3/sticky/.modulerc, testsuite/modulefiles.3/stickysub/.modulerc, testsuite/modulefiles.3/stickysub/dir1/1.0, testsuite/modulefiles.3/stickysub/dir1/2.0, testsuite/modulefiles.3/stickysub/dir2/3.0, testsuite/modulefiles.3/stickysub/dir2/4.0, testsuite/modules.50-cmds/460-sticky.exp, testsuite/modules.50-cmds/461-super-sticky.exp: ts: test stickyness swap in 50/{460,461} * doc/source/design/module-tags.rst, doc/source/design/sticky-modules.rst: doc: add *Sticky modules* design notes 2020-12-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Split reloading_mod state Split reloading_mod state in reloading_sticky and reloading_supersticky states to get the accurate information to report in case a module is both sticky and super-sticky and one of these stickyness declaration is not honored during a reload attempt. 2020-12-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Swap sticky module if stickyness definition is preserved Allow a sticky or super-sticky module to be swapped by another modulefile version as soon as stickyness definition is still satisfied. For instance, if a sticky tag is applied over *foo* module, *foo/1.0* can be swapped by *foo/2.0* as *foo* stickyness is preserved. If the sticky tag applies to *foo/1.0*, this module cannot be replaced by another version of *foo* module. Such swap may occur when processing a `restore` or a `switch` sub-command. 2020-12-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Pass module string cmp method to getModuleTag/isModuleTagged Add `cmp` option to the getModuleTag and isModuleTagged procedures to specify the module designation comparison method. 2020-12-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.70-maint/231-verbose2.exp: ts: test new verbose2 msgs on load/unload in 70/231 * doc/source/module.rst, modulecmd.tcl.in: Report already loaded/unloaded mod if verbosity>=verbose2 Report when trying to load a module which is already loaded or when trying to unload a module which is not loaded in case the verbosity level currently set is equal to or higher than *verbose2*. Closes #187 2020-12-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/sticky/.modulerc, testsuite/modulefiles.3/sticky/2.0, testsuite/modulefiles.3/sticky/3.0, testsuite/modules.50-cmds/462-sticky-corner.exp: ts: add some corner case tests in 50/462 * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/461-super-sticky.exp: ts: test super-sticky modules in 50/461 * testsuite/home/coll-sticky-0, testsuite/home/coll-sticky-1, testsuite/home/coll-sticky-2, testsuite/home/coll-sticky-3, testsuite/modulefiles.3/bar/2.0, testsuite/modulefiles.3/sticky/.modulerc, testsuite/modulefiles.3/sticky/1.0, testsuite/modulefiles.3/sticky/4.0, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/460-sticky.exp: ts: test sticky modules in 50/460 2020-12-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/module-tags.rst: doc: update sticky module desc. in tag design * modulecmd.tcl.in: Super-sticky mod cannot be unloaded unless reloading Raise an error on an attempt to unload a module tagged *super-sticky*, unless if this module is reloading. *super-sticky* modules cannot be unloaded even if unload is forced Closes #269 * configure: install: add default color/abbrev for super-sticky tag * modulecmd.tcl.in: Allow unload of sticky module if reloading When reloading a module, during a `reload` or `restore` sub-command or the processing of the *Dependency Reload* mechanism, allow the unload of modules that are tagged sticky, as we know they will be reloaded. Add `reloading_mod` state to record the name of modules that are unloaded but that will be reloaded right after. With this new state, unload of sticky modules can be allowed. * modulecmd.tcl.in: Remove useless args arg from lpopState proc 2020-12-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Module tagged 'sticky' cannot be unloaded unless forced Raise error on an unload attempt of a module that is tagged *sticky*. If this unload attempt is forced, raise a warning and proceed. Closes #269 * configure: install: add default color/abbrev to sticky tag * doc/source/diff_v3_v4.rst: doc: use tables to desc. new cmds/switches in diff doc 2020-12-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.20-locate/118-hidden-loaded.exp, testsuite/modules.50-cmds/450-hidden-loaded.exp, testsuite/modules.70-maint/220-config.exp, testsuite/modules.70-maint/230-verbosity.exp: ts: test verbose2 verbosity in 20/118 70/{220,230} 50/410 * INSTALL.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: desc. verbose2 verbosity level in man/INSTALL/diff * doc/source/module.rst: doc: precise debug2/-DD were added in v4.6 in module(1) man * configure, modulecmd.tcl.in: Introduce verbose2 verbosity level verbose2 verbosity level is introduced as a higher level than verbose and lower than trace level. This new verbosity level currently enables to view the loading and unloading notification of *hidden-loaded* modules. 2020-12-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst, doc/source/modulefile.rst: doc: desc hidden-loaded in module/modulefile man pages * .../hide-and-forbid-modules/modulefiles/.modulerc, doc/source/cookbook/hide-and-forbid-modules.rst: doc: add hidden-loaded example on hide/forbid recipe 2020-12-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/tag/.modulerc, testsuite/modules.70-maint/320-tags.exp, testsuite/modules.70-maint/322-tag-sgr.exp, testsuite/modules.90-avail/100-tags.exp: ts: test hidden-loaded tag on 70/{320,322} and 90/100 * modulecmd.tcl.in: No report of hidden-loaded tag on avail context * testsuite/modules.20-locate/038-defcontext.exp, testsuite/modules.20-locate/110-hide.exp, testsuite/modules.20-locate/113-hide-all-opt.exp, testsuite/modules.20-locate/115-forbid.exp, testsuite/modules.20-locate/117-forbid-user-group.exp, testsuite/modules.20-locate/119-hide-cascading.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.70-maint/270-adv_version_spec.exp, testsuite/modules.70-maint/271-adv_version_spec-in.exp, testsuite/modules.70-maint/275-adv_version_spec-loaded.exp, testsuite/modules.70-maint/320-tags.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/080-noindepth.exp, testsuite/modules.90-avail/100-tags.exp: ts: update existing tests with hidden-loaded tag abbrev * modulecmd.tcl.in, testsuite/modulefiles.3/tag/.modulerc, testsuite/modules.50-cmds/440-module-tag.exp: Raise error when hidden-loaded tag is manually set 2020-07-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/etc/modulerc.hide, testsuite/modulefiles.2/hide1/.modulerc, testsuite/modules.20-locate/119-hide-cascading.exp: ts: add module-hide --hidden-loaded casc tests in 20/119 2020-07-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/etc/modulerc.hide-deps, testsuite/home/coll-hide-once-loaded-nuasked, testsuite/modulefiles.2/hidereq/4.2, testsuite/modulefiles.2/hidereq/4.3, testsuite/modulefiles.2/hidereq/4.4, testsuite/modulefiles.deps/h1, testsuite/modulefiles.deps/h10, testsuite/modulefiles.deps/h2, testsuite/modulefiles.deps/h20, testsuite/modulefiles.deps/h21, testsuite/modulefiles.deps/h22, testsuite/modulefiles.deps/h3, testsuite/modulefiles.deps/h30, testsuite/modulefiles.deps/h31, testsuite/modulefiles.deps/h32, testsuite/modulefiles.deps/h33, testsuite/modulefiles.deps/h4, testsuite/modulefiles.deps/ra, testsuite/modulefiles.deps/rae, testsuite/modulefiles.deps/raf, testsuite/modulefiles.deps/rag, testsuite/modulefiles.deps/rah, testsuite/modulefiles.deps/swa, testsuite/modulefiles.deps/swb, testsuite/modulefiles.deps/swc, testsuite/modulefiles.deps/swj, testsuite/modules.20-locate/118-hidden-loaded.exp, testsuite/modules.50-cmds/450-hidden-loaded.exp: ts: check hidden loaded mods visibility on eval report msgs 2020-12-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * configure: install: add abbrev for hidden-loaded tag hidden-loaded tag will use same abbreviation than hidden tag (*H*), as hidden tag is reported only on avail context and hidden-loaded on list context. So the sgr code defined for H abbreviation will also applies to hidden-loaded tag. 2020-07-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/home/coll-hide-once-loaded, testsuite/modulefiles.2/hide3/.modulerc, testsuite/modulefiles.2/hidereq/4.1, testsuite/modulefiles.2/hidereq/4.2, testsuite/modules.20-locate/110-hide.exp, testsuite/modules.20-locate/113-hide-all-opt.exp, testsuite/modules.20-locate/118-hidden-loaded.exp: ts: test --hidden-loaded opt of module-hide cmd 2020-07-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/hide-or-forbid-modulefile.rst, doc/source/design/module-tags.rst: doc: update hidden once loaded module design 2020-07-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Exclude hidden loaded mods from auto handling reports Do not report hidden loaded modules in the informational messages of the auto handling mechanisms unless these hidden modules have been specifically loaded or unloaded by user, verbosity level is set to debug or an higher level or any messages are recorded for the hidden module evaluation. The g_moduleHiddenEval array is introduced to record whether module evaluation is hidden (hidden once loaded + automated evaluation of module) or not. * modulecmd.tcl.in: No eval msg report of hidden auto-loaded mod Do not report load, unload or switch of modules set hidden once loaded if these modules have been loaded, unloaded or switched automatically. Unless verbosity mode is set to debug or higher or if any messages are recorded for this module evaluation. 2020-07-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Do not report hidden loaded mods on list sub-cmd Unless -a/--all option is set, do not report loaded modules that have been declared *hidden once loaded* through *hidden-loaded* module tag. 2020-12-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add --hidden-loaded opt to module-hide cmd Add the --hidden-loaded option to the module-hide modulefile command that indicates module should be hidden once loaded. When set, the *hidden-loaded* module tag applies to module specification set on module-hide command A hidden-loaded tag set is retained even if it is not held by the module-hide command with highest hiding level. 2020-12-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * configure: Set color for basic tag abbrev Provide in the default light and dark background color set a graphical rendition code for the basic module tags (loaded, auto-loaded, hidden, forbidden, nearly-forbidden). * testsuite/modules.70-maint/322-tag-sgr.exp: ts: add test for tag_color_name config in 70/322 * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.70-maint/220-config.exp: ts: adapt tests for tag_color_name config 2020-12-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst: doc: desc. MODULES_TAG_COLOR_NAME in module(1) man * modulecmd.tcl.in: Rename getSgrkeysFromList proc in getTagSgrForModname Clarify procedure name since it only applies to tag graphical rendering. * modulecmd.tcl.in: Color tag by their own name For tags set in tag_color_name configuration, apply graphical rendering over their name rather than over the name of the module they are attached to. If an abbreviation is defined for tag, this abbreviation name should be placed in tag_color_name configuration value to make it stand by itself and not disappear over module name rendition. * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module.in: init: add tag_color_name config to completion scripts * doc/source/diff_v3_v4.rst: doc: desc. MODULES_TAG_COLOR_NAME in diff doc * INSTALL.rst, Makefile, Makefile.inc.in, configure, modulecmd.tcl.in, site.exp.in: Add tag_color_name configuration 2020-12-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/tag/.modulerc, testsuite/modules.70-maint/322-tag-sgr.exp: ts: test more tags than chars in name in 70/322 * modulecmd.tcl.in: Render tags separately if more sgr tags than char in name In case there are more tags that should be rendered with a SGR code than character in the module name to display, apply rendering of additionnal tags other these tag names in the side tag list. 2020-11-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/tag/.modulerc, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.70-maint/322-tag-sgr.exp: ts: test graphical rendering of tags in 70/322 2020-11-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/module-tags.rst: doc: desc. SGR mechanism for tags in design doc * testsuite/modules.00-init/140-color.exp: ts: test cumulative sgr codes in 00/140 * modulecmd.tcl.in: Render multiple tags and hightlight matching substr Update sgr procedure to render multiple other keys applying to the string, by applying each of these keys to a sub part of string, yet mixing with matching sub string highlight. 2020-11-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Apply tag sgr keys to element When tags apply to a module to display, apply to this module name the sgr keys that are defined to represent the tags. Each module tag matching a sgr code is then graphically represented over module name and not reported by its tag name or abbreviated name. If an abbreviation exists for tag name, sgr key is matched against this abbreviated string. If no abbreviation exists for a tag, sgr key is matched against tag full name. Currently only graphically render single tag. 2020-11-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Handle matching substring hightlight in sgr proc * modulecmd.tcl.in: Render default sym through single sgr elt processing 2020-11-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add the ability to apply multiple sgr keys * modulecmd.tcl.in: Remove useless tagsgr arg on formatListEltToDisplay 2020-11-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst: doc: desc. MODULES_TAG_ABBREV in module(1) man 2020-11-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/siteconfig.tcl-1, testsuite/modules.70-maint/321-tag_abbrev.exp: ts: check tag abbrev in 70/321 * doc/source/design/module-tags.rst: doc: desc. tag abbrev in module tags design 2020-11-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/030-options.exp, testsuite/modules.20-locate/038-defcontext.exp, testsuite/modules.20-locate/110-hide.exp, testsuite/modules.20-locate/113-hide-all-opt.exp, testsuite/modules.20-locate/115-forbid.exp, .../modules.20-locate/117-forbid-user-group.exp, testsuite/modules.20-locate/119-hide-cascading.exp, testsuite/modules.50-cmds/350-allin.exp, .../modules.70-maint/270-adv_version_spec.exp, .../modules.70-maint/271-adv_version_spec-in.exp, .../275-adv_version_spec-loaded.exp, testsuite/modules.70-maint/320-tags.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/080-noindepth.exp, testsuite/modules.90-avail/100-tags.exp: ts: adapt existing tests for tag abbrev * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.70-maint/220-config.exp: ts: adapt tests for tag_abbrev config * modulecmd.tcl.in: Abbreviate tags when reporting them on avail/list Use abbreviation defined for each tag if any to report them over the avail and list sub-command output result. * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module.in: init: add tag_abbrev config to completion scripts * doc/source/diff_v3_v4.rst: doc: desc. MODULES_TAG_ABBREV in diff doc * INSTALL.rst, Makefile, Makefile.inc.in, configure, modulecmd.tcl.in, site.exp.in: Add tag_abbrev configuration 2020-11-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.20-locate/115-forbid.exp, testsuite/modules.50-cmds/440-module-tag.exp, testsuite/modules.70-maint/320-tags.exp, testsuite/modules.90-avail/100-tags.exp: Separate tags with ':' instead of ',' When reporting module tags on avail and list sub-commands, use ':' character to separate multiple tags applying to the same module. * doc/source/design/module-tags.rst, modulecmd.tcl.in, testsuite/modulefiles.3/tag/.modulerc, testsuite/modules.50-cmds/440-module-tag.exp: Raise error when reserved tag name is set Raise an error when a reserved tag name is defined with module-tag. Reserved names are currently: loaded, auto-loaded, forbidden, nearly-forbidden and hidden. * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp: ts: clear MODULES_LMTAG prior test start 2020-11-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, configure: install: clear git remote in build ref tag 2020-11-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/modulefile.rst: doc: desc. inherited tag from module-{hide,forbid} * modulecmd.tcl.in, testsuite/modules.50-cmds/288-info-tags.exp: Update isModuleTagged to fetch info from collected tags Add the collected argument to the isModuleTagged procedure to get the ability to query tag information for designed modulefile from collected tags data for module rather raw tag definition applying to module specification. Enable this query mode to determine if module is nearly-forbidden in execute-modulefile procedure (as tags for evaluated modules are fetched right before this test). Disable 'nearly-forbidden' tag check when performing an unload evaluation. * NEWS.rst: doc: desc. initial module tag work in NEWS * doc/source/modulefile.rst: doc: desc. module-tag in modulefile(4) 2020-11-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/286-info-username.exp, testsuite/modules.50-cmds/287-info-usergroups.exp: ts: adapt existing tests for 'module-info tags' change * doc/source/module.rst: doc: desc MODULES_LMTAG in module(1) man * testsuite/etc/modulerc.tag, testsuite/modulefiles.3/info/.modulerc, testsuite/modulefiles.3/tag/.modulerc, testsuite/modulefiles.3/tag/6.0, testsuite/modulefiles.3/tag/7.0, testsuite/modulefiles.3/tag/8.0, testsuite/modules.50-cmds/288-info-tags.exp, testsuite/modules.50-cmds/440-module-tag.exp: ts: add tests for module-tag in 50/{288,440} * testsuite/modulefiles.3/info/.modulerc, testsuite/modulefiles.3/info/tags2, testsuite/modules.50-cmds/288-info-tags.exp, testsuite/modules.70-maint/070-display.exp: ts: test module-info tags on all eval contexts 2020-10-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_v3_v4.rst: doc: desc. MODULES_TAG on diff doc * doc/source/diff_v3_v4.rst: doc: desc. module-tag in diff doc * contrib/vim/syntax/modulefile.vim: vim: add new modulefile command 'module-tag' * modulecmd.tcl.in: Fetch tags before starting modulefile eval Collect all tags applying to the modulefile that need to be evaluated right before the start of its evaluation. It enables to get the accurate tag information during modulefile evaluation whatever the kind of evaluation (load, unload, display, help, ...). Disable mechanism for source and unsource evaluation contexts. In case current user environment state is inconsistent, do not break the whole modulefile evaluation. * modulecmd.tcl.in: Introduce 'module-tag' modulefile command Introduce the `module-tag` modulefile command to enable users to associate their own tag to modulefiles. These tags are reported on `avail` and `list` sub-command outputs. This new command is intended to be used in modulerc evaluation context. It is also recorded for modulefile evaluation context as it corresponds to the evaluation context of the global and user RCs. * modulecmd.tcl.in: Make --{after,before} optional in parseApplicationCriteriaArgs Add the `aftbef` argument to the parseApplicationCriteriaArgs procedure to optionally support the --after and --before command-line switches. If support disabled (aftbef set to 0) an argument equal to --after or --before is treated as regular content. 2020-10-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/modulefile.rst: doc: desc module-info tags in modulefile(4) man * doc/source/diff_v3_v4.rst: doc: desc. module-info tags in diff doc * testsuite/modulefiles.3/info/.modulerc, testsuite/modulefiles.3/info/tags, testsuite/modules.50-cmds/288-info-tags.exp: ts: test 'module-info tags' in 50/288 2020-10-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add tags sub-command to module-info modulefile command Introduce the `tags` sub-command to the module-info modulefile command to return the list of tags applying to currently evaluated module or tell if tag specified as argument applyes to this module. 2020-10-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.20-locate/110-hide.exp, testsuite/modules.20-locate/113-hide-all-opt.exp, testsuite/modules.20-locate/115-forbid.exp, testsuite/modules.20-locate/119-hide-cascading.exp, .../modules.70-maint/270-adv_version_spec.exp, .../modules.70-maint/271-adv_version_spec-in.exp, testsuite/modules.70-maint/320-tags.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/070-full.exp, testsuite/modules.90-avail/080-noindepth.exp: ts: adapt existing tests to 'hidden' tag * modulecmd.tcl.in: Apply 'hidden' tag to module defined hidden Set a `hidden` tag for each module targetted by a hidden definition coming whether from a module-hide statement or by module name or version starting with a dot character. The `hidden` tag is not exported in MODULES_LMTAG for loading module as the hidden state concerns the `avail` report only. 2020-10-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/320-tags.exp: ts: test loaded/auto-loaded tags in 70/320 * testsuite/modules.70-maint/320-tags.exp: ts: test tags output on list sub-cmd in 70/320 2020-10-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Output tags along module on list subcmd Output the tags of the modules returned by the list sub-command. Adapt module list regular and json output styles to include these tags (enclosed in <> like for avail sub-command). No output of tags on terse output mode as nothing other than module name is displayed on this mode currently. * testsuite/modulefiles.3/tag/.modulerc, testsuite/modulefiles.3/tag/4.0, testsuite/modulefiles.3/tag/5.0, testsuite/modules.70-maint/320-tags.exp: ts: test MODULES_LMTAG in 70/320 2020-10-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.20-locate/115-forbid.exp, testsuite/modules.20-locate/119-hide-cascading.exp, testsuite/modules.70-maint/210-clear.exp, testsuite/modules.70-maint/280-ml.exp: ts: adapt existing tests for MODULES_LMTAG * modulecmd.tcl.in: Record tags of loaded mods in MODULES_LMTAG env var Record in user environment the tags applying to loaded modules. Making this information persist in environment via MODULES_LMTAG variable helps to report them on `list` sub-command and to remember these tags when the module will be unloaded. * testsuite/modulefiles.3/tag/.modulerc, testsuite/modulefiles.3/tag/1.0, testsuite/modules.90-avail/100-tags.exp: ts: test tags output on avail sub-cmd in 90/100 * modulecmd.tcl.in: Apply getModules phase 5 only for avail subcmd Consolidate tags set for the modules returned by getModules procedure only if called from an avail sub-command, as these informations are only useful for this context (list sub-command does not rely on getModules). * testsuite/install.00-init/030-options.exp, testsuite/modules.20-locate/038-defcontext.exp, testsuite/modules.20-locate/115-forbid.exp, .../modules.20-locate/117-forbid-user-group.exp, testsuite/modules.20-locate/119-hide-cascading.exp, testsuite/modules.50-cmds/350-allin.exp, .../275-adv_version_spec-loaded.exp, testsuite/modules.70-maint/290-json.exp, testsuite/modules.90-avail/070-full.exp: ts: adapt existing tests for tag output on avail * modulecmd.tcl.in: Record loaded/auto-loaded tags for loaded modules When parsing loaded environment, record a loaded tag for each loaded module or an auto-loaded tag if this module has been automatically loaded by another module. Load these tags information at phase #5 of getModules prior fetching the tags found from getModules search. If current user environment state is inconsistent do not stop the whole avail process on this error. 2020-10-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Allow to recover from cacheCurrentModules error In case the current user environment is stated inconsistent, allow to only report this error and not terminate execution. An exitonerr argument is added to cacheCurrentModules procedure to just call reportError procedure instead of reportErrorAndExit. 2020-10-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add global/user rc def to module symbol list in any cases When building the module symbol list in phase #1 of getModules procedure, also add the definitions coming from global or user rc files even if rc definitions should not be part of the result. As these symbolic names may match query and make their targetted module from the currently searched directory included in result. 2020-10-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Output tags along module on avail subcmd Output the tags of the modules returned by the avail sub-command. Adapt module listing regular, terse and json output styles to include these tags. These tags are enclosed in <> to distinguish them from symbolic versions. Tags are sorted when printed. No tag report for long output style not to exceed 80 columns. * modulecmd.tcl.in: Collect tags for each elt returned by getModules Add a fifth stage for getModules to gather all the tags applying to resulting modules. These tags are stored in a g_tagHash global array to be used to output these tags along the module they belong to. * modulecmd.tcl.in: Refactor eltsuffix mngt on formatListEltToDisplay * modulecmd.tcl.in: Rename tag_list var into sym_list for clarity * modulecmd.tcl.in: Remove useless tag_list var in findModules 2020-10-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/module-tags.rst: doc: add initial module-tag design notes 2020-12-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .github/workflows/windows_tests.yaml: gh: use python installed by cygwin to build win dist 2020-12-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * README.md: doc: fix *slight* typo in README Thanks @mirkov for spotting this. Fixes #373. 2020-12-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .cirrus.yml: cirrus: fix centos8 repo config 2020-12-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.95-version/020-load-version.exp, testsuite/modules.95-version/020-unload.exp, testsuite/modules.95-version/022-load2.exp, testsuite/modules.95-version/022-unload2.exp, testsuite/modules.95-version/040-xgetenv.exp, testsuite/modules.95-version/050-fullpathentry.exp, testsuite/modules.95-version/090-dup-modpath-version.exp: ts: use reset_test_env at end of 95-version ts * testsuite/modules.91-sort/020-avail.exp, testsuite/modules.91-sort/030-whatis.exp, testsuite/modules.91-sort/040-load-sort.exp: ts: use reset_test_env at end of 91-sort ts * testsuite/modules.90-avail/020-single.exp, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/050-long.exp, testsuite/modules.90-avail/060-empty.exp, testsuite/modules.90-avail/070-full.exp, testsuite/modules.90-avail/080-noindepth.exp, testsuite/modules.90-avail/090-dup-modpath.exp: ts: use reset_test_env at end of 90-avail ts * testsuite/modules.80-deep/020-load-deep.exp, testsuite/modules.80-deep/021-unload.exp, testsuite/modules.80-deep/022-switch.exp, testsuite/modules.80-deep/030-display.exp, testsuite/modules.80-deep/050-whatis.exp, testsuite/modules.80-deep/068-transitive-deep.exp, testsuite/modules.80-deep/080-access-deep.exp, testsuite/modules.80-deep/090-deepvirt.exp: ts: use reset_test_env at end of 80-deep ts * testsuite/modules.70-maint/020-update.exp, testsuite/modules.70-maint/030-purge.exp, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/045-listlong.exp, testsuite/modules.70-maint/048-listlongno.exp, testsuite/modules.70-maint/050-whatis-load.exp, testsuite/modules.70-maint/055-whatis.exp, testsuite/modules.70-maint/056-whatis-nullpath.exp, testsuite/modules.70-maint/060-apropos.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.70-maint/090-source.exp, testsuite/modules.70-maint/100-path.exp, testsuite/modules.70-maint/110-paths.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.70-maint/140-multiargs.exp, testsuite/modules.70-maint/150-append-path.exp, testsuite/modules.70-maint/151-prepend-path.exp, testsuite/modules.70-maint/152-remove-path.exp, testsuite/modules.70-maint/153-is-loaded.exp, testsuite/modules.70-maint/154-is-saved.exp, testsuite/modules.70-maint/155-is-used.exp, testsuite/modules.70-maint/156-is-avail.exp, testsuite/modules.70-maint/157-info-loaded.exp, testsuite/modules.70-maint/170-contact.exp, testsuite/modules.70-maint/180-reload.exp, testsuite/modules.70-maint/190-emptyarg.exp, testsuite/modules.70-maint/200-errdisp.exp, testsuite/modules.70-maint/210-clear.exp, testsuite/modules.70-maint/220-config.exp, testsuite/modules.70-maint/230-verbosity.exp, testsuite/modules.70-maint/240-icase.exp, testsuite/modules.70-maint/250-nan.exp, .../modules.70-maint/260-extended_default.exp, .../modules.70-maint/270-adv_version_spec.exp, .../modules.70-maint/271-adv_version_spec-in.exp, .../272-adv_version_spec-range.exp, .../273-adv_version_spec-space.exp, .../274-adv_version_spec-autosym.exp, .../275-adv_version_spec-loaded.exp, testsuite/modules.70-maint/280-ml.exp, testsuite/modules.70-maint/290-json.exp, testsuite/modules.70-maint/300-err_stack.exp, testsuite/modules.70-maint/310-sh-to-mod.exp: ts: use reset_test_env at end of 70-maint ts * testsuite/modules.61-coll/020-savelist.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/050-saverm.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.61-coll/080-access-coll.exp: ts: use reset_test_env at end of 61-coll ts * testsuite/modules.60-initx/015-list.exp, testsuite/modules.60-initx/080-access-initx.exp: ts: use reset_test_env at end of 60-initx ts * testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/020-setenv.exp, testsuite/modules.50-cmds/022-setenv-eschars.exp, testsuite/modules.50-cmds/025-setenv-undo.exp, testsuite/modules.50-cmds/028-setenv-refcount.exp, testsuite/modules.50-cmds/029-setenv-env.exp, testsuite/modules.50-cmds/030-unsetenv.exp, testsuite/modules.50-cmds/035-unsetenv-undo.exp, testsuite/modules.50-cmds/036-unsetenv-x.exp, .../modules.50-cmds/038-unsetenv-refcount.exp, testsuite/modules.50-cmds/039-unsetenv-env.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/049-append-env.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/059-prepend-env.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/069-remove-env.exp, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/076-alias-sub.exp, testsuite/modules.50-cmds/077-alias-undo.exp, testsuite/modules.50-cmds/078-refresh.exp, testsuite/modules.50-cmds/080-info-name.exp, testsuite/modules.50-cmds/081-info-user.exp, testsuite/modules.50-cmds/082-info-user-exp.exp, testsuite/modules.50-cmds/083-info-mode.exp, testsuite/modules.50-cmds/084-info-mode-exp.exp, testsuite/modules.50-cmds/085-info-flags.exp, testsuite/modules.50-cmds/086-info-shells.exp, testsuite/modules.50-cmds/087-info-shells-exp.exp, testsuite/modules.50-cmds/088-info-isloaded.exp, testsuite/modules.50-cmds/089-info-type.exp, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/099-uname-cleanup.exp, testsuite/modules.50-cmds/100-loglevel.exp, testsuite/modules.50-cmds/101-badfac.exp, testsuite/modules.50-cmds/105-trace.exp, testsuite/modules.50-cmds/110-verbose.exp, testsuite/modules.50-cmds/115-verbose-msg.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp, .../modules.50-cmds/132-conflict-fullpath.exp, testsuite/modules.50-cmds/140-system.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/172-swap-app-delim.exp, testsuite/modules.50-cmds/173-swap-app-delim.exp, testsuite/modules.50-cmds/175-swap2.exp, testsuite/modules.50-cmds/177-swap-prep-delim.exp, testsuite/modules.50-cmds/178-swap-prep-delim.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/195-load-recurs.exp, testsuite/modules.50-cmds/197-load-lots.exp, testsuite/modules.50-cmds/200-break.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/220-continue.exp, testsuite/modules.50-cmds/230-loop.exp, testsuite/modules.50-cmds/240-chdir.exp, testsuite/modules.50-cmds/250-x-resource.exp, testsuite/modules.50-cmds/260-getenv.exp, testsuite/modules.50-cmds/269-getenv-env.exp, testsuite/modules.50-cmds/280-info-specified.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.50-cmds/284-info-others.exp, testsuite/modules.50-cmds/285-info-loaded.exp, testsuite/modules.50-cmds/286-info-username.exp, testsuite/modules.50-cmds/287-info-usergroups.exp, testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.50-cmds/301-interp-command.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.50-cmds/310-puts.exp, testsuite/modules.50-cmds/320-is-saved.exp, testsuite/modules.50-cmds/321-is-used.exp, testsuite/modules.50-cmds/322-is-avail.exp, testsuite/modules.50-cmds/330-source.exp, testsuite/modules.50-cmds/340-modvar.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/359-allin-env.exp, testsuite/modules.50-cmds/360-restoreenv.exp, testsuite/modules.50-cmds/370-deps-bis.exp, testsuite/modules.50-cmds/370-deps-fullpath.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/371-deps2.exp, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/375-deps6.exp, testsuite/modules.50-cmds/375-order.exp, testsuite/modules.50-cmds/376-deps7.exp, .../modules.50-cmds/376-switch-change-vers.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-cyclic.exp, testsuite/modules.50-cmds/377-deps8.exp, testsuite/modules.50-cmds/377-error.exp, testsuite/modules.50-cmds/377-opposite.exp, testsuite/modules.50-cmds/378-sametarget.exp, testsuite/modules.50-cmds/379-module-unload.exp, testsuite/modules.50-cmds/380-altname.exp, testsuite/modules.50-cmds/390-function.exp, testsuite/modules.50-cmds/391-function-undo.exp, testsuite/modules.50-cmds/400-source-sh.exp, testsuite/modules.50-cmds/410-modvar.exp, testsuite/modules.50-cmds/420-versioncmp.exp, testsuite/modules.50-cmds/430-implicit-req.exp, testsuite/modules.50-cmds/431-not-req.exp: ts: use reset_test_env at end of 50-cmds ts * testsuite/modules.20-locate/030-defvers.exp, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/035-defname.exp, testsuite/modules.20-locate/038-defcontext.exp, testsuite/modules.20-locate/040-alias.exp, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.20-locate/046-getsym.exp, testsuite/modules.20-locate/047-symerrs.exp, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/055-locrcerrs.exp, testsuite/modules.20-locate/057-mcookie.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/065-rcerrs.exp, testsuite/modules.20-locate/066-modulepath-rc.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.20-locate/075-symlink.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.20-locate/081-access-rc.exp, testsuite/modules.20-locate/090-memcache.exp, testsuite/modules.20-locate/100-wspace.exp, testsuite/modules.20-locate/110-hide.exp, testsuite/modules.20-locate/111-hide-hard.exp, testsuite/modules.20-locate/111-hide-soft.exp, .../modules.20-locate/112-hide-user-group.exp, testsuite/modules.20-locate/113-hide-all-opt.exp, .../modules.20-locate/114-hide-before-after.exp, testsuite/modules.20-locate/115-forbid.exp, .../modules.20-locate/116-forbid-before-after.exp, .../modules.20-locate/117-forbid-user-group.exp, testsuite/modules.20-locate/119-hide-cascading.exp: ts: use reset_test_env at end of 20-locate ts * testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/032-prepend.exp, testsuite/modules.10-use/040-load-use.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.10-use/080-access-use.exp, testsuite/modules.10-use/090-bad.exp: ts: use reset_test_env at end of 10-use ts * testsuite/modules.00-init/015-version.exp, testsuite/modules.00-init/090-switches.exp, testsuite/modules.00-init/100-pager.exp, testsuite/modules.00-init/110-quar.exp, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/130-auto_handling.exp, testsuite/modules.00-init/140-color.exp, testsuite/modules.00-init/150-access-init.exp, testsuite/modules.00-init/160-multilib.exp: ts: use reset_test_env at end of 00-init ts * testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/020-module.exp, testsuite/install.00-init/022-module-compat.exp, testsuite/install.00-init/024-ml.exp, testsuite/install.00-init/025-autoinit.exp, testsuite/install.00-init/030-options.exp, testsuite/install.00-init/040-subshell.exp, testsuite/install.00-init/050-crossshell.exp, testsuite/install.00-init/060-quar.exp, testsuite/install.00-init/070-stderrtty.exp, testsuite/install.00-init/080-args.exp, testsuite/install.00-init/090-sh-to-mod.exp: ts: use reset_test_env at end of install ts * script/mt, testsuite/config/base-config.exp, testsuite/install.00-init/011-save_test_env.exp, testsuite/modules.00-init/085-save_test_env.exp, testsuite/modules.60-initx/010-init_ts.exp, testsuite/modules.60-initx/999-cleanup.exp, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/999-cleanup.exp, testsuite/modules.70-maint/010-init_ts.exp, testsuite/modules.70-maint/999-cleanup.exp, testsuite/modules.80-deep/010-init_ts.exp, testsuite/modules.80-deep/999-cleanup.exp, testsuite/modules.91-sort/010-init_ts.exp, testsuite/modules.91-sort/999-cleanup.exp, testsuite/modules.95-version/010-init_ts.exp, testsuite/modules.95-version/999-cleanup.exp: ts: add test env save/restore mechanism Add the save_test_env and reset_test_env procedure to record original test environment (global and environment variables) and restore it once a test set has been done. * testsuite/modules.00-init/010-environ.exp, testsuite/modules.50-cmds/010-init_ts.exp, testsuite/modules.50-cmds/999-cleanup.exp: ts: clear testsuite env var prior starting tests * testsuite/modules.00-init/010-environ.exp, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/250-x-resource.exp, testsuite/modules.50-cmds/286-info-username.exp, testsuite/modules.50-cmds/287-info-usergroups.exp, testsuite/modules.70-maint/220-config.exp, testsuite/modules.70-maint/310-sh-to-mod.exp: ts: save orig PATH value in a global ORIG_PATH var * testsuite/modules.00-init/010-environ.exp, testsuite/modules.00-init/150-access-init.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/065-rcerrs.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.20-locate/081-access-rc.exp, testsuite/modules.20-locate/110-hide.exp, testsuite/modules.20-locate/111-hide-hard.exp, testsuite/modules.20-locate/111-hide-soft.exp, testsuite/modules.20-locate/112-hide-user-group.exp, testsuite/modules.20-locate/113-hide-all-opt.exp, testsuite/modules.20-locate/114-hide-before-after.exp, testsuite/modules.20-locate/115-forbid.exp, testsuite/modules.20-locate/116-forbid-before-after.exp, testsuite/modules.20-locate/117-forbid-user-group.exp, testsuite/modules.20-locate/119-hide-cascading.exp, testsuite/modules.50-cmds/375-deps6.exp, testsuite/modules.50-cmds/377-deps8.exp, testsuite/modules.50-cmds/377-opposite.exp, testsuite/modules.50-cmds/380-altname.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.70-maint/220-config.exp, testsuite/modules.70-maint/290-json.exp, testsuite/modules.80-deep/090-deepvirt.exp, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/050-long.exp, testsuite/modules.90-avail/060-empty.exp: ts: save orig MODULERCFILE value in a global var * testsuite/modules.00-init/080-begenv.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.20-locate/081-access-rc.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.50-cmds/320-is-saved.exp, testsuite/modules.60-initx/010-init_ts.exp, testsuite/modules.60-initx/999-cleanup.exp, testsuite/modules.61-coll/020-savelist.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/050-saverm.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.61-coll/080-access-coll.exp, testsuite/modules.70-maint/154-is-saved.exp, testsuite/modules.70-maint/240-icase.exp: ts: save orig HOME value in a global ORIG_HOME var * testsuite/modules.61-coll/999-cleanup.exp, testsuite/modules.95-version/999-cleanup.exp: ts: clear temp vars used in 61-coll/95-version tests 2020-12-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .cirrus.yml: cirrus: test with R on OSX instance * testsuite/config/base-config.exp, testsuite/install.00-init/006-procs.exp, testsuite/modules.00-init/006-procs.exp: ts: share base code between testsuites Use dejagnu 'base-config' file to share code between the two testsuites. * testsuite/config/unix.exp: ts: collect install test output through pipes Alternative method to collect stdout and stderr from command execution (on Tcl>=8.6): use channel pipe instead of saving these outputs in file. * testsuite/config/unix.exp, testsuite/install.00-init/006-procs.exp, testsuite/install.00-init/020-module.exp, testsuite/install.00-init/024-ml.exp, testsuite/install.00-init/030-options.exp, testsuite/install.00-init/070-stderrtty.exp, testsuite/install.00-init/080-args.exp: ts: do not ignore newline returned at install result end Update install tests not to ignore the newline returned at the end of stdout and stderr output. 2020-12-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/020-module.exp, testsuite/install.00-init/022-module-compat.exp, testsuite/install.00-init/024-ml.exp, testsuite/install.00-init/025-autoinit.exp, testsuite/install.00-init/030-options.exp, testsuite/install.00-init/040-subshell.exp, testsuite/install.00-init/050-crossshell.exp, testsuite/install.00-init/070-stderrtty.exp: ts: fix expected regexp on install test now full str is matched * testsuite/install.00-init/006-procs.exp, testsuite/install.00-init/010-environ.exp, testsuite/install.00-init/020-module.exp, testsuite/install.00-init/024-ml.exp, testsuite/install.00-init/040-subshell.exp, testsuite/install.00-init/050-crossshell.exp, testsuite/install.00-init/060-quar.exp, testsuite/install.00-init/070-stderrtty.exp, testsuite/install.00-init/080-args.exp: ts: install ts now checks for full string match 2020-12-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .appveyor.yml, .gitattributes: appveyor: remove config, tests are migrated to GH Actions * CONTRIBUTING.rst, README.md, script/mtreview: doc/script: windows CI tests are now on GitHub Actions * testsuite/modules.20-locate/100-wspace.exp, testsuite/modules.90-avail/080-noindepth.exp: ts: skip symlink tests if cannot create it on 20/100 & 90/080 2020-11-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .github/workflows/windows_tests.yaml: gh: port Windows tests from AppVeyor to GH Actions 2020-11-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/config/unix.exp: ts: remove need to use thread to collect test outputs 2020-11-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/config/unix.exp: ts: collect tests output through pipes and thread Alternative method to collect stdout and stderr from command execution (on Tcl>=8.6 and if Thread package is available): use channel pipe and threads instead of saving these outputs in file. * testsuite/config/unix.exp, testsuite/modules.00-init/006-procs.exp, testsuite/modules.00-init/160-multilib.exp, testsuite/modules.20-locate/113-hide-all-opt.exp, testsuite/modules.20-locate/115-forbid.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.61-coll/080-access-coll.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/150-append-path.exp, testsuite/modules.70-maint/152-remove-path.exp, testsuite/modules.70-maint/190-emptyarg.exp: ts: do not ignore newline returned at result end Update tests not to ignore the newline returned at the end of stdout and stderr output. 2020-11-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitattributes, .travis.yml: travis: remove config, tests are migrated to GH Actions 2020-11-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * script/mtreview: script: add diff config for GHA in 'mtreview' * CONTRIBUTING.rst, README.md: doc: linux CI tests are now on GitHub Actions * doc/source/cookbook/hide-and-forbid-modules.rst: doc: fix code-block syntax issue in hide-and-forbid-modules An argument value was missing for a code-block in the hide-and-forbid-modules cookbook recipe. Set value to none, as this block cannot be highlighted as Tcl code. * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/120-siteconfig.exp: ts: skip tests relying on a stdin attached to tty In case stdin is not attached to a tty * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.20-locate/110-hide.exp, testsuite/modules.20-locate/115-forbid.exp, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/284-info-others.exp, testsuite/modules.50-cmds/286-info-username.exp, testsuite/modules.50-cmds/287-info-usergroups.exp, testsuite/modules.50-cmds/330-source.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/170-contact.exp, testsuite/modules.70-maint/300-err_stack.exp: ts: fix ans escaping to cope with block content output 2020-11-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/config/unix.exp, testsuite/install.00-init/005-init_ts.exp: ts: ignore ruby insecure dir msg * script/mt: script: remove --base64-failed-log opt from mt script Remove the --base64-failed-log option from the mt script as there is no more need to output full test output serialized since the CI systems now used can upload the test log files as artifact. 2020-11-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .github/workflows/linux_tests.yaml: gh: port Linux tests from Travis to GH Actions 2020-11-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/cookbook/test-modulefiles.rst: doc: fix missing space in test-modulefiles rcp Thanks to Aurélien Degrémont for spotting this issue. 2020-11-16 Colin Marquardt <cmarqu42@gmail.com> * doc/source/cookbook/test-modulefiles.rst: doc: add proper ReST references in test-modulefiles rcp * .../test-modulefiles/modulefiles/test_dir_and_file: doc: use versioned cookie+getenv in test-modulefiles rcp Use versioned magic cookie and getenv over $env 2020-11-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst: doc: desc. 'loaded' sym in NEWS/MIGRATING * doc/source/module.rst: doc: desc. 'loaded' sym in module(1) man * testsuite/modulefiles.3/advvers/1.0, testsuite/modules.00-init/005-init_ts.exp, .../275-adv_version_spec-loaded.exp: ts: test 'loaded' auto sym in 70/275 2020-11-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add 'loaded' auto sym to designated loaded version Add the `loaded` symbolic version among the advanced version specifier to designate the currently loaded version of designated module. An error is returned if no matching module is currently loaded. Fixes #366 2020-10-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc. state changes in NEWS 2020-10-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.50-cmds/286-info-username.exp, testsuite/modules.50-cmds/287-info-usergroups.exp, testsuite/modules.70-maint/220-config.exp, testsuite/modules.70-maint/230-verbosity.exp: ts: update tests for runtime state handling changes * modulecmd.tcl.in: Exclude new state helper procs from debug2 Do not pollute debug2 output with the numerous calls to the new runtime state helper procedures (lpopState currentState depthState). * modulecmd.tcl.in: No definition record for basic states Remove the need to record the definition of runtime states in the g_state_defs global array for states with no specific properties. * modulecmd.tcl.in: Use directly depthState on reportholdid rather isReportHeld Remove isReportHeld procedure and rebase calls directly on depthState with reportholdid state. * modulecmd.tcl.in: Rebase llength+getState calls on depthState Use depthState specific procedure rather calling llength on getState result. * modulecmd.tcl.in: Use depthState rather getEvalModuleStackDepth Remove getEvalModuleStackDepth procedure and use depthState procedure over modulename state instead * modulecmd.tcl.in: Add depthState proc Add the depthState helper procedure that returns the number of elements in the list of values for specified state. * modulecmd.tcl.in: Migrate evalid to state struct * modulecmd.tcl.in: Migrate msgrecordid to state struct * modulecmd.tcl.in: Add topState proc Add the topState helper procedure that returns the first element from the list of values for specified state. * modulecmd.tcl.in: Migrate debug_msg_prefix to state struct * modulecmd.tcl.in: Migrate reportholdid to state struct * modulecmd.tcl.in: Migrate commandname to state struct * modulecmd.tcl.in: Migrate specifiedname to state struct * modulecmd.tcl.in: Drop ::ModulesCurrentModulefile outside of eval context Rely on modulefile current state value rather use a distinct global variable named ::ModulesCurrentModulefile outside of modulefile or modulerc evaluation context. 2020-10-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Migrate modulefile to state struct * modulecmd.tcl.in: Migrate modulename to state struct * modulecmd.tcl.in: Migrate mode to state struct * modulecmd.tcl.in: Migrate always_read_full_file to state struct 2020-10-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Remove dup appending val with lappendState only if -nodup set Update the lappendState procedure to clear duplicate entries to append only if the `-nodup` option is set as first argument. 2020-10-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc. lpopState/currentState in NEWS * NEWS.rst: doc: desc. implicit_requirement/--not-req in NEWS * .travis.yml: travis: add --disable-implicit-requirement to a test case * doc/source/modulefile.rst: doc: desc. --not-req in modulefile(4) man * doc/source/module.rst: doc: desc. implicit_requirement in module(1) man 2020-10-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/notreq/load, testsuite/modulefiles.3/notreq/loaderr, testsuite/modulefiles.3/notreq/loadmul, testsuite/modulefiles.3/notreq/loadsubm, testsuite/modulefiles.3/notreq/loadsubp, testsuite/modulefiles.3/notreq/loadunk, testsuite/modulefiles.3/notreq/mix, testsuite/modulefiles.3/notreq/prereq, testsuite/modulefiles.3/notreq/switch1, testsuite/modulefiles.3/notreq/switch1err, testsuite/modulefiles.3/notreq/switch1unk, testsuite/modulefiles.3/notreq/switch2, testsuite/modulefiles.3/notreq/switchsubm, testsuite/modulefiles.3/notreq/switchsubp, testsuite/modulefiles.3/notreq/unload, testsuite/modulefiles.3/notreq/unloaderr, testsuite/modulefiles.3/notreq/unloadmul, testsuite/modulefiles.3/notreq/use, testsuite/modules.50-cmds/431-not-req.exp: ts: test --not-req option in 50/431 * modulecmd.tcl.in: Do not rely on auto_handling if implicit req disabled Do not rely on the auto_handling code to solve dependency implied by 'module unload' or 'module switch' commands during an unload evaluation if implicit requirement feature is disabled as no requirement were recorded for these commands on load phase. 2020-10-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.3/bar/1.0, testsuite/modulefiles.3/bar/2.0, testsuite/modulefiles.3/baz/1.0, testsuite/modulefiles.3/baz/2.0, testsuite/modulefiles.3/foo/0.err, testsuite/modulefiles.3/foo/0.load, testsuite/modulefiles.3/foo/0.prereq, testsuite/modulefiles.3/foo/1.0, testsuite/modulefiles.3/foo/2.0, testsuite/modulefiles.3/impreq/load, testsuite/modulefiles.3/impreq/loaderr, testsuite/modulefiles.3/impreq/loadmul, testsuite/modulefiles.3/impreq/loadsubm, testsuite/modulefiles.3/impreq/loadsubp, testsuite/modulefiles.3/impreq/loadunk, testsuite/modulefiles.3/impreq/mix, testsuite/modulefiles.3/impreq/prereq, testsuite/modulefiles.3/impreq/switch1, testsuite/modulefiles.3/impreq/switch1err, testsuite/modulefiles.3/impreq/switch1unk, testsuite/modulefiles.3/impreq/switch2, testsuite/modulefiles.3/impreq/switchsubm, testsuite/modulefiles.3/impreq/switchsubp, testsuite/modulefiles.3/impreq/unload, testsuite/modulefiles.3/impreq/unloaderr, testsuite/modulefiles.3/impreq/unloadmul, testsuite/modules.50-cmds/430-implicit-req.exp: ts: test disabled implicit_requirement conf in 50/430 2020-10-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Extend req recording inhibition to switch subcontext * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.70-maint/220-config.exp: ts: ensure implicit requirement is enabled for tests * doc/source/diff_v3_v4.rst: doc: desc. --not-req in diff doc 2020-10-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Inhibit requirement record Inhibit prereq or conflict requirement record on module load, module unload or module switch if implicit_requirement option is disabled or --not-user option is set. Add an inhibit_req_record state to track whether requirement should be recorded or not. Fixes #260 * testsuite/modules.70-maint/220-config.exp: ts: adapt existing test for implicit_requirement conf * modulecmd.tcl.in: Add lpopState/currentState procs Add the lpopState and currentState helper procedures that respectively remove last element or return last element from list value of specified state. * modulecmd.tcl.in: Add --not-req opt to module {load,unload,switch} in modfile Add the --not-req option for the module load, module unload and module switch commands when used in modulefile. When set, specified modules to load, unload of part of a switch are not recorded as requirement for currently evaluating modulefile. * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module.in: init: add implicit_requirement config to completion scripts * doc/source/diff_v3_v4.rst: doc: desc. MODULES_IMPLICIT_REQUIREMENT in diff * INSTALL.rst: doc: desc. --enable-implicit-requirement in INSTALL * Makefile, Makefile.inc.in, configure, modulecmd.tcl.in, site.exp.in: Add implicit_requirement config Introduce the implicit_requirement configuration option to control whether a prereq or conflict requirement should be implicitly set toward modules respectively specified on module load or module unload commands in modulefile. Default value for option could be set at configure time with the --enable-implicit-requirement option (enabled by default). This value could be superseded by setup of implicit_requirement option with config sub-command. Which set the MODULES_IMPLICIT_REQUIREMENT environment variable. 2020-10-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/050-crossshell.exp: ts: add cross shell tests with shells_with_ksh_fpath * NEWS.rst: doc: desc. shells_with_ksh_fpath in NEWS * doc/source/module.rst: doc: desc. shells_with_ksh_fpath in module(1) 2020-10-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/modulerc-1.in, testsuite/modules.70-maint/120-autoinit.exp: ts: test shells_with_ksh_fpath in 70/120 * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.70-maint/220-config.exp: ts: adapt existing tests for shells_with_ksh_fpath * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module.in: init: add shells_with_ksh_fpath config to completion scripts 2020-10-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_v3_v4.rst: doc: desc. MODULES_SHELLS_WITH_KSH_FPATH in diff doc * modulecmd.tcl.in: Add shells_with_ksh_fpath config Introduce `shells_with_ksh_fpath` configuration to define shells where the FPATH environment has to be defined to target ksh function directory. Value for this configuration can be set through the MODULES_SHELLS_WITH_KSH_FPATH environment variable. Fixes #364 * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: ts: adapt test to FPATH setup change for ksh * init/ksh.in, modulecmd.tcl.in: Define FPATH during autoinit for ksh shell When initializing module on ksh shell with the autoinit sub-command, add to the FPATH environment variable the directory where module function is defined. Which helps to get module function defined in ksh interactive and non-interactive sub-shells. This FPATH setup for ksh shell was previously done in ksh initialization script. * NEWS.rst: doc: desc. MODULES_LMALTNAME/list changes in NEWS * doc/source/module.rst: doc: MODULES_LMALTNAME used on list to report syms * testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/045-listlong.exp: ts: new list report tests with syms 2020-10-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/140-color.exp, testsuite/modules.20-locate/100-wspace.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.70-maint/045-listlong.exp, testsuite/modules.70-maint/280-ml.exp: ts: adapt tests for loaded mod sym fetch change * modulecmd.tcl.in: Report sym recorded in env on list sub-command Use symbolic versions recorded in environment, with MODULES_LMALTNAME variable, to report symbols applying to loaded modules on list sub-command. This change removes the need to evalute modulercs to fetch symbolic versions for loaded modules, which leads to significant performance improvement for the list sub-command. * modulecmd.tcl.in: Simplify mtime fetch in cmdModuleList Fetch file modification time only if required by module list display format. 2020-10-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.10-use/080-access-use.exp, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/066-modulepath-rc.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.20-locate/075-symlink.exp, testsuite/modules.20-locate/100-wspace.exp, testsuite/modules.20-locate/110-hide.exp, testsuite/modules.20-locate/111-hide-hard.exp, testsuite/modules.20-locate/111-hide-soft.exp, testsuite/modules.20-locate/115-forbid.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/375-deps6.exp, testsuite/modules.50-cmds/377-deps8.exp, testsuite/modules.50-cmds/377-opposite.exp, testsuite/modules.50-cmds/380-altname.exp, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.70-maint/230-verbosity.exp, testsuite/modules.70-maint/240-icase.exp, .../modules.70-maint/270-adv_version_spec.exp, .../modules.70-maint/271-adv_version_spec-in.exp, .../272-adv_version_spec-range.exp, .../273-adv_version_spec-space.exp, .../274-adv_version_spec-autosym.exp, testsuite/modules.80-deep/010-init_ts.exp, testsuite/modules.80-deep/068-transitive-deep.exp: ts: update MODULES_LMALTNAME for new alias prefix * doc/source/module.rst: doc: desc alt name prefixes used in MODULES_LMALTNAME * modulecmd.tcl.in: Flag alias in MODULES_LMALTNAME Distinguish aliases from symbolic versions in MODULES_LMALTNAME environment variable. Prefix these alias entries with the `al|` string. 2020-10-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../modulefiles/bar/.common, .../modulefiles/bar/.modulerc, .../new-features-without-breaking-old-module.rst: doc: update new-features-without-breaking-old-module recipe Describe use of new ModuleTool and ModuleToolVersion Tcl variables as well as versioncmp modulefile command. * MIGRATING.rst: doc: mention Lmod support for ModuleTool&co in MIGRATING 2020-10-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .cirrus.yml, Makefile, testsuite/example/.modulespath-wild.in: ts: test wildcard char in modulespath conf * NEWS.rst, modulecmd.tcl.in: Use of wildcard char to designate dirs in modulespath Enable the use of wildcard character to designate multiple directories at once in modulespath configuration file. Fixes #125 * testsuite/modulefiles.3/versioncmp/.modulerc, testsuite/modulefiles.3/versioncmp/1.0, testsuite/modules.50-cmds/420-versioncmp.exp: ts: test versioncmp in 50/420 * configure, site.exp.in, testsuite/modulefiles.3/mfvar/.modulerc, testsuite/modulefiles.3/mfvar/1.0, testsuite/modulefiles.3/mfvar/2.0, testsuite/modules.50-cmds/410-modvar.exp: ts: test ModuleTool/ModuleToolVersion in 50/410 2020-10-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc. versioncmp in NEWS * MIGRATING.rst: doc: desc versioncmp in MIGRATING * MIGRATING.rst: doc: simplify TOC of MIGRATING document * doc/source/modulefile.rst: doc: desc. new versioncmp command in modulefile(4) * doc/source/conf.py, doc/source/modulefile.rst: doc: desc. ModuleTool and ModuleToolVersion in modulefile(4) * doc/source/conf.py, doc/source/modulefile.rst: doc: add new 'mfvar' sphinx directive/role * doc/source/diff_v3_v4.rst: doc: desc. versioncmp new elements in diff doc 2020-10-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Introduce 'versioncmp' modulefile command Compare two version strings and return -1, 0 or 1 respectively if first version string is lower, equal or higher than second version string specified. * modulecmd.tcl.in: Record module tool properties on eval interp For each modulefile or modulerc Tcl interpreter created, initialize the global variables ModuleTool and ModuleToolVersion with the information relative to the module tool in use. Which help to know how modulefiles or modulerc should be written, what features can be used or not. 2020-11-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, contrib/rpm/environment-modules.spec.in, version.inc.in: Release of version 4.6.1 * testsuite/modulefiles.2/hide1/.modulerc, .../modules.20-locate/114-hide-before-after.exp, .../modules.20-locate/116-forbid-before-after.exp: ts: fix tested future date for tests on 32bit sys 2020-11-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../hide-and-forbid-modules/modulefiles/.modulerc, .../hide-and-forbid-modules/modulefiles/appA/1.0, .../hide-and-forbid-modules/modulefiles/appA/2.0, .../hide-and-forbid-modules/modulefiles/appB/1.0, .../hide-and-forbid-modules/modulefiles/appB/2.0, .../modulefiles/bioappA/1.0, .../modulefiles/bioappA/2.0, .../modulefiles/bioappB/1.0, .../modulefiles/bioappB/2.0, .../modulefiles/chemappA/1.0, .../modulefiles/chemappA/2.0, .../modulefiles/chemappB/1.0, .../modulefiles/chemappB/2.0, .../modulefiles/deplibA/1.0, .../modulefiles/deplibA/2.0, .../modulefiles/deplibB/1.0, .../modulefiles/deplibB/2.0, doc/source/cookbook/hide-and-forbid-modules.rst: doc: add 'hide-and-forbid-modules' cookbook recipe 2020-11-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/377-error.exp: Skip unload of depended mods on purge When a module fails to unload during a `purge` sub-command, preserve loaded the modules it requires to keep environment consistent. Fixes #370 2020-11-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.20-locate/110-hide.exp, testsuite/modules.20-locate/111-hide-hard.exp: ts: fix hide tests for sym resolution update 2020-11-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Drop result cache in isModuleHidden Recheck module hiddenness each time isModuleHidden procedure is called. Drop cache result of this procedure to ensure hiddenness is checked against up-to-date module-hide definitions. Fix module hiddenness resolution for symbolic versions defined in a global RC file when module-hide statements are set in the modulepath where the modulefiles targeted by these symbols are located. Fixes #369 2020-10-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add global/user rc def to module symbol list in any cases When building the module symbol list in phase #1 of getModules procedure, also add the definitions coming from global or user rc files even if rc definitions should not be part of the result. As these symbolic names may match query and make their targetted module from the currently searched directory included in result. Fixes #368 2020-11-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.70-maint/210-clear.exp, testsuite/modules.70-maint/280-ml.exp: Unset MODULES_LMSOURCESH with clear sub-cmd Fix `clear` sub-command to unset the MODULES_LMSOURCESH environment variable. Fixes #367 * .cirrus.yml: cirrus: adapt make command name to build env * .cirrus.yml: cirrus: use template for build/install/uninstall scripts 2020-11-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/modulefile.rst: doc: remove duplicate envvar desc. section * .appveyor.yml: appveyor: use latest Win image to get msys2 ok * CONTRIBUTING.rst, README.md: doc: update desc. related to CI systems used * .cirrus.yml: cirrus: use template for tests and split test phases * .cirrus.yml: cirrus: make a dedicated template for git clone script * .travis.yml: travis: factorize linux test cases 2020-11-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .cirrus.yml: cirrus: expose test log files as artifacts * .travis.yml: travis: cleanup useless code now some tests are migrated * .cirrus.yml, .travis.yml: travis/cirrus: migrate first Ubuntu test case to Cirrus CI 2020-11-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .cirrus.yml, .travis.yml: travis/cirrus: migrate OpenSUSE test cases to Cirrus CI * .cirrus.yml: cirrus: FreeBSD test cases just need 1 cpu * testsuite/install.00-init/005-init_ts.exp: ts: ignore ruby warning when tests are run from /tmp * .cirrus.yml, .travis.yml: travis/cirrus: migrate CentOS test cases to Cirrus CI * .travis.yml: travis: remove non-essential CentOS tests * testsuite/modules.70-maint/150-append-path.exp, testsuite/modules.70-maint/152-remove-path.exp: ts: adapt DYLD warning msg on new OSX test env 2020-11-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .cirrus.yml, .travis.yml: travis/cirrus: migrate OSX test case to Cirrus CI 2020-10-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_v3_v4.rst: doc: desc. shell special chars escaping in diff doc Shell special characters like backticks are escaped when used in values starting Modules 4. Fixes #365 * doc/source/diff_v3_v4.rst: doc: fix typo on 4.5 and 4.6 envvar desc. 2020-10-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/modulefile.rst: doc: rework module-{hide,forbid} option description 2020-10-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: add anchor for each feature release in NEWS * NEWS.rst: doc: fix typo on 4.6.0 title in NEWS * doc/source/diff_v3_v4.rst: doc: fix typos in diff doc for 4.6 new mf cmds 2020-10-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../modulefiles/.modulerc, .../modulefiles/foo/1.1, .../modulefiles/foo/1.2, .../new-features-without-breaking-old-module.rst: doc: add 'new-features-without-breaking-old-module' recipe 2020-09-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/hide-or-forbid-modulefile.rst: doc: clarify hide-forbid design regarding retained rule 2020-09-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.20-locate/115-forbid.exp: Optimize module tag search Optimize internal recording of module tag specification inherited from module-forbid commands found when parsing modulerc files. Thus time taken to fetch a given tag applying to a module is reduced. Record module tag specification in an array where key is module root name and each tag has its own list of module specification/associated properties couplet applying to it. When looking if a given module matches a given tag, the associated properties to the tag from first matching module specification is returned. 2020-09-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * script/mb: script: add ability to select test to perform on 'mb' * modulecmd.tcl.in: Filter entries in phase 2 of getModules for simple searches Apply an early filter to remove entries not matching search query module root in phase 2 of getModules procedure. Doing so improve performances of whatis and search sub-commands. Only proceed with this early filtering for basic searches (non wild, non contains and no wildcard character in searched module root name). 2020-09-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Optimize hidden property search Optimize internal recording of hidden module specification when parsing modulerc files in order to reduce the time taken to test if a given module is hidden or not. Record hidden module specification in an array where key is module root name. So it can be easy to check if there is some hidden specification to test for a given module (based on root name). Within each array entry hidden module specifications are sorted by hidden level to be able to search these specifications from strongest to weakest hidding level. * modulecmd.tcl.in: Save/get module root name from module name and vers spec When parsing module version specifiers compute the module root name and record it in module version spec structure. Add the getModuleRootFromVersSpec procedure to fetch module root name from a module version spec. 2020-09-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml, Makefile, testsuite/modules.00-init/100-pager.exp, testsuite/modules.00-init/160-multilib.exp: ts/travis: test multilib support with use of alt lib 2020-09-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.70-maint/270-adv_version_spec.exp: Raise error if mod spec is equal to '@' When full module specification is equal to `@`, raise an error as no module name is provided. Fixes #362 2020-09-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/sh-to-mod.csh, testsuite/example/sh-to-mod.fish, testsuite/example/sh-to-mod.sh, testsuite/modules.70-maint/310-sh-to-mod.exp: ts: improve coverage of sh-to-mod proc 2020-09-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * script/mb: script: drop profiling of <4.4 releases in mb * lib/configure.ac: lib: bump version to 1.2.0 * lib/configure.ac, lib/envmodules.c: lib: include missing stdio.h/_ISOC99_SOURCE for snprintf * testsuite/modules.50-cmds/400-source-sh.exp: ts: display loaded mod with MODULES_LMSOURCESH cleared 2020-09-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/272-adv_version_spec-range.exp: ts: improve coverage of modVersCmpProcIcaseExtdfl proc * testsuite/modules.00-init/140-color.exp: ts: test --color opt set to an unknown value * testsuite/modules.00-init/071-args.exp: ts: improve coverage of parseModuleCommandArgs proc * modulecmd.tcl.in: findModules proc is always called on mod root Clean up code relative to call over deep module name, which are not made anymore. * modulecmd.tcl.in: No need to test if 'ml' was called within modulefile As 'ml' is not defined as a valid command for modulefile or modulerc interpreters. * modulecmd.tcl.in: Remove nextargisign from parseApplicationCriteriaArgs proc nextargisign variable defined in parseApplicationCriteriaArgs is useless as it was only set after an error raise. So it was never reached. * testsuite/modules.20-locate/110-hide.exp: ts: improve coverage of eqspec mode of modEq proc * modulecmd.tcl.in, testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: Remove useless psuf arg on modEq proc Pattern suffix is not used anymore in modEq comparison procedure (it is only useful for modEqStatic procedure). So remove this useless argument. 2020-09-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: ts: check parseDateTimeArg lib func against bad date * .appveyor.yml: appveyor: need to set TZ for date time tests on MSYS 2020-09-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, lib/.gitignore, lib/Makefile.in, lib/testutil-mktime.c, testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/120-siteconfig.exp: ts/lib: test tcl ext lib against a failed mktime call Add an utility library that supersedes the mktime function from libc. The mktime function from this added library always returns an error (-1). It is used for coverage test of the mktime call made within the Envmodules_ParseDateTimeArgObjCmd function of the Tcl extension library. * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: ts: test parseDateTimeArg proc with no arg in 00/120 2020-09-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * script/mb: script: fix min version condition bench test * lib/envmodules.c, lib/envmodules.h, modulecmd.tcl.in: lib: implement parseDateTimeArg Add function in libtclenvmodules to implement 'parseDateTimeArg' as a Tcl command, which provides a more efficient way to convert a datetime string into an Epoch time. 2020-09-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, lib/.gitignore, lib/Makefile.in, lib/testutil-time.c, testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/120-siteconfig.exp: ts/lib: test tcl ext lib against a failed time call Add an utility library that supersedes the time function from libc. The time function from this added library always returns an error (-1). It is used for coverage test of the time call made within the Envmodules_InitStateClockSecondsObjCmd function of the Tcl extension library. * lib/configure.ac, lib/envmodules.c, lib/envmodules.h, modulecmd.tcl.in: lib: implement initStateClockSeconds Add function in libtclenvmodules to implement 'initStateClockSeconds' as a Tcl command, which provides a more efficient way to retrieve current Epoch time. * MIGRATING.rst, NEWS.rst, contrib/rpm/environment-modules.spec.in, version.inc.in: Release of version 4.6.0 * script/mrel: script: build src with compat vers enabled on mrel 2020-09-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc. blank value set on win platform in NEWS 2020-09-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.20-locate/090-memcache.exp: Simplify arg setup to call findModules For the record, findModules need to get all root module-related elements to correctly compute auto symbols to know if they apply to searched modules. 2020-09-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Use get-env to manipulate env var in cmdModuleAutoinit As LOADEDMODULES and MODULEPATH are defined empty in cmdModuleAutoinit procedure, use the get-env procedure to manipulate these variables to avoid accessing undefined variable on Windows platform (as setting these variables to an empty string means to unset these variables on this platform). * modulecmd.tcl.in: unset env var when setting it to empty val on Win When an empty string is set to an environment variable on Windows platform, this variable is unset yet still seen defined by 'info exists' command on Tcl, which leads to errors when trying to access variable content. So when trying to set an empty string to an environment variable on Windows platform, call for variable unset instead to reflect underlying OS behavior. 2020-09-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml: travis: disable git clone depth 2020-09-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .appveyor.yml: appveyor: use BAWT Tcl installer for native Win test 2020-09-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst: doc: fix some typos in MIGRATING 2020-09-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst: doc: desc. module-forbid in MIGRATING 2020-09-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst: doc: desc. trace verbosity mode in MIGRATING 2020-09-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/140-color.exp, testsuite/modules.70-maint/230-verbosity.exp: ts: test trace verbosity in 00/140 and 70/230 * NEWS.rst: doc: desc. trace verbosity in NEWS 2020-09-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst, doc/source/module.rst: doc: desc. trace in INSTALL/module(1) 2020-09-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * configure, modulecmd.tcl.in: Add 'tr' sgr color key for trace messages 2020-09-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.20-locate/090-memcache.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/220-config.exp: ts: adapt existing tests for new trace verbosity * NEWS.rst, configure, testsuite/install.00-init/005-init_ts.exp: install: add support for MinGW platform Look for `make` rather `gmake` on MinGW and build library with a `.dll` extension on this platform. 2020-09-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst: doc: finalize module-hide desc. in MIGRATING 2020-09-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * configure, modulecmd.tcl.in: Rework trace verbosity level Report module resolution/search/selection/evaluation to trace big steps of modulecmd.tcl activity. 2020-09-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/220-config.exp, testsuite/modules.70-maint/230-verbosity.exp: ts: test debug2 verbosity in 70/{220,230} * INSTALL.rst, NEWS.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: desc. debug2 verbosity mode in diff/man/NEWS/INSTALL * configure, modulecmd.tcl.in: Rework current trace verbose mode into debug2 mode Report procedure call in addition to other debug messages through the `debug2` verbosity level rather the `trace` level (that is preserved for another task). When -D/--debug option is set multiple times, `debug2` mode is set. * modulecmd.tcl.in: Add caller argument to reportDebug proc Introduce the `caller` argument to the reportDebug procedure to get the ability to define the calling procedure name to report. This argument is especially used by the initial reportDebug procedure set prior report initialization, to send toward final reportDebug procedure the actual caller name. 2020-09-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * script/mb, testsuite/etc/modulerc.bench3: script: add avail3/whatis3 tests to mb Bench new hide/forbid features mixed with advanced version specifiers syntax. These new tests only apply to newer versions. 2020-08-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: merge release of version 4.5.3 * modulecmd.tcl.in: Make --before matches if strictly below Instead of matching past or current time, make value of `--before` option only match if specified time is over. * testsuite/modules.20-locate/115-forbid.exp: ts: help old dejagnu version to load `msgcat` cmd 2020-08-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.2/hide1/.modulerc, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.20-locate/115-forbid.exp, testsuite/modules.20-locate/119-hide-cascading.exp: ts: test when nealy-forbidden tag applies 2020-08-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/hide-or-forbid-modulefile.rst: doc: desc. nearly-forbidden feature and opts in design notes * NEWS.rst: doc: desc. nearly-forbidden feature and opts in NEWS * doc/source/modulefile.rst: doc: desc. --nearly-message option in modulefile(4) man * modulecmd.tcl.in: Add --nearly-message option to module-forbid command Add the --nearly-message option on module-forbid command to enable set of specific additionnal error message when an attempt to evaluate a *nearly forbidden* module is made. When defined, record message as a property of the nearly-forbidden tag. * modulecmd.tcl.in: Warn when evaluate a nearly-forbidden module Produce a warning message when a module with *nearly-forbidden* is evaluated. Message produced indicate the date time starting when module will effectively be forbidden. * modulecmd.tcl.in: Set nearly-forbidden tag if in range Update parseApplicationCriteriaArgs procedure to get a *near range in seconds* as first argument, then determine in this procedure if the *after* criteria is near. Add this information and the *after* criteria value to the list of returned values. With these new informations, the *nearly-forbidden* tag is set in module-forbid for module specification that are close to reach the *after* limit defined. 2020-08-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.70-maint/220-config.exp: ts: adapt tests for nearly_forbidden_days config * doc/source/diff_v3_v4.rst, doc/source/module.rst, doc/source/modulefile.rst: doc: desc. nearly_forbidden_days config in man/diff docs * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module.in: init: add nearly_forbidden_days config in completion scripts * modulecmd.tcl.in: Add nearly_forbidden_days configuration Introduce the `nearly_forbidden_days` configuration to determine the number of days a module should be considered *nearly forbidden* prior reaching its expiry date set by `module-forbid` modulefile command. Default value for this option is obtained from --with-nearly-forbidden-days configure option, which is set to 14 days by default. Configuration value can be superseded by use of MODULES_NEARLY_FORBIDDEN_DAYS environment variable. * modulecmd.tcl.in: Validate config value against class Add the ability to validate a configuration value against a value class (integer, string, ...) rather a list of accepted values. See list of accepted class names on Tcl `string is` command. * INSTALL.rst, Makefile, Makefile.inc.in, configure, site.exp.in: install: add --with-nearly-forbidden-days configure opt Introduce the --with-nearly-forbidden-days ./configure script option to define the number of days a module is considered nearly forbidden prior reaching its expiry date limit set by module-forbid command. 2020-08-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml: travis: increase mt run timeout for macos coverage build * doc/source/design/hide-or-forbid-modulefile.rst: doc: desc. --message in module-forbid design notes 2020-08-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.2/hide1/.modulerc, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.20-locate/115-forbid.exp: ts: test --message option in 20/115 * modulecmd.tcl.in: Add --message option to module-forbid command Add the --message option on module-forbid command to enable set of specific additionnal error message when an attempt to evaluate a forbidden module is made. When defined, record message as a property of the forbidden tag. * modulecmd.tcl.in: Record properties along tag Adapt setModspecTag/getModuleTag/isModuleTagged procedure to give the ability to set a list of properties for a tag. Add getModuleTagProp procedure to retrieve the properties associated to recorded tag. * NEWS.rst, doc/source/modulefile.rst: doc: desc --message module-forbid option in NEWS/modulefile(4) * modulecmd.tcl.in: Define forbidden err msg from getForbiddenMsg proc Add getForbiddenMsg procedure to generate error message obtained when trying to evaluate a forbidden module. 2020-08-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/etc/modulerc.hide, testsuite/modulefiles.2/hide2/.modulerc, testsuite/modulefiles.2/hide3/.modulerc, testsuite/modules.20-locate/115-forbid.exp: ts: add module-forbid tests Tests over different kind of elements and coupled with different kind of module-hide commands 2020-08-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/etc/modulerc.hide, testsuite/modulefiles.2/hide1/.modulerc, testsuite/modulefiles.2/hide2/.modulerc, testsuite/modulefiles.2/hide3/.modulerc, testsuite/modules.20-locate/113-hide-all-opt.exp, .../modules.20-locate/114-hide-before-after.exp, testsuite/modules.20-locate/115-forbid.exp, .../modules.20-locate/116-forbid-before-after.exp, .../modules.20-locate/117-forbid-user-group.exp, testsuite/modules.20-locate/118-forbid-all-opt.exp, testsuite/modules.20-locate/119-hide-cascading.exp: ts: reduce/adapt number of module-forbid tests To avoid duplication with module-hide --hard tests 2020-08-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/hide-or-forbid-modulefile.rst: doc: update desc. of module-forbid in design notes * modulecmd.tcl.in: Disallow evaluation of forbidden modules When a module has been tagged forbidden, disallow its evaluation by transforming modulefile path location result in an `accesserror` entry. As evaluation is concerned, it only has an impact on modulefile or virtual modules. Directories, alias or symbolic version are not impacted thus still used to resolve path to modulefile and virtual module even if tagged forbidden. 2020-08-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst, doc/source/modulefile.rst: doc: update desc. of module-forbid in man pages. * NEWS.rst: doc: update desc. of module-forbid in NEWS 2020-08-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/etc/modulerc.hide, testsuite/modulefiles.2/hide1/.modulerc, testsuite/modulefiles.2/hide2/.modulerc, testsuite/modulefiles.2/hide3/.modulerc, .../modules.20-locate/114-hide-before-after.exp, testsuite/modules.20-locate/115-forbid.exp, .../modules.20-locate/116-forbid-before-after.exp, .../modules.20-locate/117-forbid-user-group.exp: ts: transform 20/115 tests in module-hide --hard + module-forbid * modulecmd.tcl.in: Uncouple module hiding from module-forbid command Do not imply hiding specified module on `module-forbid` command. Just record module specification is said *forbidden* which will be checked to disallow module load. Doing so, hiding module is now only done through `module-hide` command and the previous behavior of `module-forbid` command can now be achieved with `module-hide --hard` + `module-forbid`. This change also enables to forbid use of modules that are visible. Hard-hiding level is lowered to *2*, as this spot was left empty through this change. * modulecmd.tcl.in: Add internal helper procs to define tags over modules Add the setModspecTag procedure to record defined tag over a module specification. getModuleTag procedure enables to retrieve all the tags applying to a module passed as argument. isModuleTagged procedure returns whether or not given module has given tag set on it. * modulecmd.tcl.in: Reword doesModuleHaveTag proc in doesModuleHaveSym To avoid confusion with upcoming tag feature. * doc/source/design/hide-or-forbid-modulefile.rst: doc: desc. --hard in hide-or-forbid design doc * MIGRATING.rst: doc: desc. module-hide --hard in MIGRATING * testsuite/etc/modulerc.hide, testsuite/modulefiles.2/hide1/.modulerc, testsuite/modules.20-locate/119-hide-cascading.exp: ts: add cascading tests for --hard in 20/119 * doc/source/modulefile.rst: doc: desc auto sym hidden properties in modulefile(4) * testsuite/modules.20-locate/110-hide.exp, testsuite/modules.20-locate/115-forbid.exp, testsuite/modules.20-locate/119-hide-cascading.exp: ts: fix 20/11* tests as auto-syms cannot be set hidden * modulecmd.tcl.in: Get default version from sym target in getModules Rework getModules procedure to get the defined default version from the fetched symbolic version target available in found_list structure rather querying g_resolvedPath global structure. Doing so, hidden default are automatically dropped. 2020-08-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/hide-or-forbid-modulefile.rst, modulecmd.tcl.in: Auto-symbols cannot be set hidden Hidden statements can only target declared symbolic versions and not those automatically defined (@default and @latest). Thus when a declared `default` or `latest` symbol is set hidden, an auto-symbol is automatically defnied instead (targeting highest module version available). * NEWS.rst, doc/source/module.rst, doc/source/modulefile.rst: doc: desc --hard option in NEWS/MIGRATING/man * testsuite/etc/modulerc.hide, testsuite/modulefiles.2/hide1/.modulerc, testsuite/modulefiles.2/hide2/.modulerc, testsuite/modulefiles.2/hide3/.modulerc, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.20-locate/111-hide-hard.exp: ts: test --hard option in 20/111-hide-hard 2020-08-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add --hard option to module-hide command Add `--hard` option to module-hide modulefile command. When set, modules specified are hidden with highest stealth level. They are never disclosed, even if precisely targetted by search or selection query. * modulecmd.tcl.in: Rework isModuleHidden procedure Rework isModuleHidden procedure to split test per hiding level and category. Transform retlvl option into retdetails that now returns a list of values: is module hidden, what is module hiding level and is module considered matching search query depending on its hiding level. 2020-08-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.2/hide1/.modulerc, testsuite/modules.20-locate/119-hide-cascading.exp: ts: combinated use of module-hide/module-forbid opts in 20/119 * testsuite/modulefiles.2/hide1/.modulerc, .../modules.20-locate/116-forbid-before-after.exp: ts: test --before/--after on module-forbid in 20/116 * testsuite/modulefiles.2/hide1/.modulerc, .../modules.20-locate/114-hide-before-after.exp: ts: test --before/--after on module-hide in 20/114 * doc/source/design/hide-or-forbid-modulefile.rst: doc: specify date time format in hide/forbid design notes * doc/source/design/hide-or-forbid-modulefile.rst, modulecmd.tcl.in, .../modules.20-locate/112-hide-user-group.exp, .../modules.20-locate/117-forbid-user-group.exp: Raise error rather warn when --not-{user,group} used on Win Raise an error rather report a warning when the --not-user or --not-group options to the module-hide or module-forbid commands are used on Windows platform. Issue is clearly localized this way when trying to load impacted modules. Also as such error leads to skip remaining part of modulerc, staff will fix it right away. * doc/source/modulefile.rst: doc: desc. --before/--after in modulefile(4) man * NEWS.rst: doc: desc. --before/--after in NEWS * modulecmd.tcl.in: Factorize --not-group/--not-user switch cases * modulecmd.tcl.in: Add --before/--after options to module-{hide,forbid} cmds Introduce the `--before` and `--after` options to `module-hide` and `module-forbid` to make these commands apply only before a specific date and/or after a specific date. Procedure parseDateTimeArg is added to evaluate date time value specified on the 2 new options and translate it into an epoch time for comparison against current epoch time, saved in `clock_seconds` state. Accepted datetime format are `YYYY-MM-DD` or `YYYY-MM-DDTHH:MM`. Both options are ignored on Tcl<8.5 as -format option of clock scan command is not available, which does not permit to work with selected date time format. 2020-08-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add clock_seconds and tcl_version_lt85 states * doc/source/module.rst, doc/source/modulefile.rst: doc: desc module-forbid in module(1)/modulefile(4) * NEWS.rst: doc: desc. module-forbid in NEWS * testsuite/etc/modulerc.hide, testsuite/modules.20-locate/118-forbid-all-opt.exp, testsuite/modules.20-locate/119-hide-cascading.exp: ts: test dot mod targetted by module-forbid in 20/{118,119} * testsuite/etc/modulerc.hide, testsuite/modulefiles.2/hide1/.modulerc, testsuite/modules.20-locate/115-forbid.exp, .../modules.20-locate/117-forbid-user-group.exp, testsuite/modules.20-locate/119-hide-cascading.exp: ts: add cascading tests with module-forbid in 20/119 * testsuite/modules.20-locate/118-forbid-all-opt.exp: ts: test --all option over forbidden mods in 20/118 * testsuite/modulefiles.2/hide1/.modulerc, .../modules.20-locate/117-forbid-user-group.exp: ts: add module-forbid --not-{user,group} tests in 20/117 * doc/source/design/hide-or-forbid-modulefile.rst: doc: clarify mod@1.0,2.0 load selection in forbid context 2020-08-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/hide-or-forbid-modulefile.rst, modulecmd.tcl.in, testsuite/modules.20-locate/112-hide-user-group.exp: Ignore --not-user/--not-group options on Windows platform Ignore any `--not-user` or `--not-group` option set on `module-hide` or `module-forbid` commands on Windows platform. Emit a warning message to indicate these options are not supported. * modulecmd.tcl.in: Ignore forbidden default symbol In case a `default` symbolic version is defined forbidden, ignore this default resolution. * testsuite/etc/modulerc.hide, testsuite/modulefiles.2/hide1/.modulerc, testsuite/modulefiles.2/hide2/.modulerc, testsuite/modulefiles.2/hide3/.modulerc, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.20-locate/115-forbid.exp: ts: add 20/115 to test 'module-forbid' 2020-08-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Unset forbidden or set them as error elts in getModules res Adapt `isModuleHidden` procedure and phase #2 of `getModules` procedure to transform module entries set as forbidden in error entries shipped with a *Access denied* message if these entries are specified in search query or unset the forbidden entries not specified in search query (like for hidden entries). When search query matches forbidden modules, the error entry is processed by procedure like `getPathToModule` to report the error message to the user. * contrib/vim/syntax/modulefile.vim: vim: add new modulefile command 'module-forbid' 2020-08-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Introduce 'module-forbid' modulefile command Create initial 'module-forbid' procedure and record it in modulefile and modulerc evaluation context. Procedure follows the same approach than 'module-hide' except than hiding level is *2* here. 2020-08-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.20-locate/110-hide.exp, testsuite/modules.70-maint/270-adv_version_spec.exp, testsuite/modules.70-maint/271-adv_version_spec-in.exp, testsuite/modules.70-maint/272-adv_version_spec-range.exp: Correctly report failed eval attempt of adv_vers_spec prereq Correctly report failed attempts to load module requirements expressed with advanced version specifiers. Fixes #356 2020-08-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .appveyor.yml: appveyor: temporarily stop testing CMake in Cygwin platform On Cygwin platform, CMake installation seems currently broken under the AppVeyor CI environment (see https://github.com/appveyor/ci/issues/3508). So for the time being, remove CMake installation to avoid failing test results. 2020-08-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles.2/hide1/.modulerc, testsuite/modules.20-locate/110-hide.exp, .../modules.20-locate/112-hide-user-group.exp: Raise error when invalid opt set on module-hide Raise an error when an invalid option is passed to `module-hide` command. * modulecmd.tcl.in: Record mod spec hiding level with setModspecHidingLevel proc Add `setModspecHidingLevel` procedure to record hiding level of a given module specification. * modulecmd.tcl.in: Parse and eval application criteria args in specific proc Add `parseApplicationCriteriaArgs` procedure to deleguate from `module-hide` procedure the parsing and evaluation of application criteria arguments (--not-user, --not-group). This new procedure returns if command applies and the other arguments to parse in command procedure. * NEWS.rst: doc: desc. module switch conflict skip in NEWS 2020-08-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deps/swaa/1.0, testsuite/modulefiles.deps/swaa/1.1, testsuite/modulefiles.deps/swaa/1.2, testsuite/modulefiles.deps/swaa/1.4, testsuite/modulefiles.deps/swaa/2/0, testsuite/modulefiles.deps/swaa/2/2, testsuite/modulefiles.deps/swaa/2/8, testsuite/modulefiles.deps/swaa/3.0, testsuite/modulefiles.deps/swaa/3.2, testsuite/modulefiles.deps/swaa/3.8, testsuite/modulefiles.deps/swab, .../modules.50-cmds/376-switch-change-vers.exp: ts: test 'switch to change module version' usecase in 50/376 * modulecmd.tcl.in: Skip module switch conflict set if old matches new `module switch` command used in modulefile is sometimes used to ensure a given version of a module is loaded. Currently loaded version of this module is unloaded to replace it by the designated specific version. This use case does not cope with the conflict declaration that is set over switched-off module specification. To support this use case, conflict definition is skipped if swapped-off module specification matches (includes) swapped-on module specification. Fixes #355 * MIGRATING.rst, NEWS.rst, doc/source/design/hide-or-forbid-modulefile.rst, doc/source/modulefile.rst, modulecmd.tcl.in, testsuite/etc/modulerc.hide, testsuite/modulefiles.2/hide1/.modulerc, .../modules.20-locate/112-hide-user-group.exp, testsuite/modules.20-locate/119-hide-cascading.exp: Reword '--allow-group' option into '--not-group' Reword module-hide option `--allow-group' into `--not-group` to get a generic term to designate that command does not apply to specified groups. Such generic term could be reused on other future modulefile commands, making this concept easier to understand as it applies with the same meaning on several commands. * MIGRATING.rst, NEWS.rst, doc/source/design/hide-or-forbid-modulefile.rst, doc/source/modulefile.rst, modulecmd.tcl.in, testsuite/etc/modulerc.hide, testsuite/modulefiles.2/hide1/.modulerc, .../modules.20-locate/112-hide-user-group.exp, testsuite/modules.20-locate/119-hide-cascading.exp: Reword '--allow-user' option into '--not-user' Reword module-hide option `--allow-user' into `--not-user` to get a generic term to designate that command does not apply to specified users. Such generic term could be reused on other future modulefile commands, making this concept easier to understand as it applies with the same meaning on several commands. 2020-08-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst: doc: update module-hide ex with --allow-* opts in MIGRATING 2020-08-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/etc/modulerc.hide, testsuite/modulefiles.2/hide1/.modulerc, testsuite/modules.20-locate/119-hide-cascading.exp: ts: cascading tests with --allow-{user,group} in 20/119 * testsuite/modulefiles.2/hide1/.modulerc, .../modules.20-locate/112-hide-user-group.exp: ts: test --allow-{user,group} options in 20/112 2020-08-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst: doc: use console code-block for 4.6 examples in MIGRATING * NEWS.rst, doc/source/modulefile.rst: doc: desc. --allow-group in modulefile(4) man and NEWS * modulecmd.tcl.in: Add '--allow-group' option to module-hide mf cmd * NEWS.rst, doc/source/modulefile.rst: doc: desc. --allow-user opt in modulefile(4) man and NEWS * modulecmd.tcl.in: Add '--allow-user' option to module-hide mf cmd * MIGRATING.rst: doc: desc. module-hide in MIGRATING 2020-08-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/modulefile.rst: doc: desc. module-hide in modulefile(4) man * doc/source/module.rst: doc: desc. --all/-a option in module(1) man 2020-07-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc. module-hide & related changes in NEWS 2020-07-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/etc/modulerc.hide, testsuite/modulefiles.2/hide4/.1.0, testsuite/modules.20-locate/113-hide-all-opt.exp, testsuite/modules.20-locate/119-hide-cascading.exp: ts: test module-hide statements of dot named mod in 20/119 * contrib/vim/syntax/modulefile.vim: vim: add new modulefile command 'module-hide' 2020-07-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Highest hiding level defined wins In case multiple module-hide commands target the same module set, the highest hiding level among those commands wins and is retained, which means most restrictive command wins. * testsuite/etc/modulerc.hide, testsuite/modulefiles.2/hide1/.modulerc, testsuite/modules.20-locate/119-hide-cascading.exp: ts: add 20/119, module-hide cascading tests * modulecmd.tcl.in: Clean trailing space character * script/createmodule.py.in, script/createmodule.sh, script/envml, script/mkroot, script/mrel, script/mtreview: script: clean trailing space character 2020-07-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/hide-or-forbid-modulefile.rst, modulecmd.tcl.in, testsuite/modules.20-locate/113-hide-all-opt.exp: Remove -a/--all option for is-avail sub-cmd As it seems more consistent that any `is-avail mod` command returning true should lead to a ``load mod`` command effectively loading a module, -a/--all option does not apply to is-avail sub-command. * modulecmd.tcl.in: Refactor add path pos opt pass toward cmdModuleUse Parse --append/--prepend and derivatives options for cmdModuleUse procedure in the general module command parsing procedure: parseModuleCommandArgs. By doing so, it is possible to distinguish if -a option is the --append option of use sub-command or --all option of searching/listing sub-command. 2020-07-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.20-locate/113-hide-all-opt.exp, testsuite/modules.90-avail/070-full.exp: ts: test --all option in 20/113 2020-07-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/etc/modulerc.hide, testsuite/modulefiles.2/hide1/.modulerc, testsuite/modulefiles.2/hide2/.modulerc, testsuite/modulefiles.2/hide3/.modulerc, testsuite/modules.20-locate/111-hide-soft.exp: ts: add 'module-hide --soft' tests in 20/111 2020-07-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_v3_v4.rst: doc: desc. module-hide/module-forbid/--all in diff doc * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module.in: init: add -a/--all option to completion scripts * modulecmd.tcl.in: Add -a/--all opt for av/al/wh/search/is-avail sub-cmd Introduce the -a/--all option to include hidden modules in avail, aliases, whatis, search and is-avail search sub-commands. When set, -a/--all option increase hiding_threshold to 2, which means dot name modules or modules declared hidden with module-hide are visible. * modulecmd.tcl.in: Add 'hiding_threshold' state Introduce the 'hiding_threshold' state that determine the threshold value starting from a module is considered hidden. * modulecmd.tcl.in: Introduce '--soft' option to module-hide modfile cmd Soften level of camouflage with new option --soft of module-hide Tcl modulefile command. Modules targeted by such hide directive are made visible as soon as their root name is part of search query. A '0' hiding level is applied to soft hide. * modulecmd.tcl.in: Cache isModuleHidden test result * modulecmd.tcl.in: Record a hiding level of module Rather querying if module has been declared hidden or not with isModuleDeclHidden procedure, query the hiding level of module with getModuleHidingLevel procedure. -1 means module is not hidden. any value above -1 means module is hidden. 2020-07-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Test search query match directly in isModuleHidden Move test that determine if a dot-named module or a declared hidden module is matching search query, which renders it visible, into the isModuleHidden procedure. Thus this procedure directly tells if module is effectively hidden based on search query. * testsuite/etc/modulerc.hide, testsuite/modulefiles.2/hide3/.modulerc: ts: test cascading module-hide defs in 20/110 * testsuite/modules.20-locate/110-hide.exp: ts: add tests over loaded env in 20/110 * testsuite/modulefiles.2/hidereq/4.0, testsuite/modulefiles.2/hidereq/{3.1 => 4.1}, testsuite/modules.20-locate/110-hide.exp: ts: add is-avail test in 20/110 * modulecmd.tcl.in: Fix use of adv vers spec arg on is-avail in modulefile Fix use of the advanced version specifiers in arguments to the is-avail Tcl modulefile command. 2020-07-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/etc/modulerc.hide, testsuite/modulefiles.2/hide2/.modulerc, testsuite/modulefiles.2/hide3/.modulerc, testsuite/modulefiles.2/hide3/1.0, testsuite/modulefiles.2/hide3/sub1/2.0, testsuite/modulefiles.2/hide3/sub1/3.0, testsuite/modulefiles.2/hide3/sub2/.modulerc, testsuite/modulefiles.2/hide3/sub2/4.0, testsuite/modulefiles.2/hide3/sub2/5.0, testsuite/modules.20-locate/110-hide.exp: ts: add module-hide tests over deep mods * modulecmd.tcl.in, testsuite/modules.80-deep/010-init_ts.exp: Record resolution of transitive symbols In case a symbolic version is transitively applied toward a modulefile, like for instance when this symbol is first set onto a directory, record resolution of each transitively applied symbol. By doing so, a module load tentative using the transitively applied symbolic version will now correctly resolve to the modulefile targeted by symbol. 2020-06-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/etc/modulerc.hide, testsuite/modulefiles.2/hide1/.modulerc, testsuite/modulefiles.2/hide1/1.0, testsuite/modulefiles.2/hide1/2.0, testsuite/modulefiles.2/hide1/2.1, testsuite/modulefiles.2/hide1/2.2, testsuite/modulefiles.2/hide1/3.0, testsuite/modulefiles.2/hide1/3.1, testsuite/modulefiles.2/hide1/3.2, testsuite/modulefiles.2/hide1/4.0, testsuite/modulefiles.2/hide1/5.0, testsuite/modulefiles.2/hide2/.modulerc, testsuite/modulefiles.2/hide2/1.0, testsuite/modulefiles.2/hidereq/1.0, testsuite/modulefiles.2/hidereq/1.1, testsuite/modulefiles.2/hidereq/1.2, testsuite/modulefiles.2/hidereq/1.3, testsuite/modulefiles.2/hidereq/1.4, testsuite/modulefiles.2/hidereq/1.5, testsuite/modulefiles.2/hidereq/2.0, testsuite/modulefiles.2/hidereq/2.1, testsuite/modulefiles.2/hidereq/2.2, testsuite/modulefiles.2/hidereq/2.3, testsuite/modulefiles.2/hidereq/2.4, testsuite/modulefiles.2/hidereq/2.5, testsuite/modulefiles.2/hidereq/2.6, testsuite/modulefiles.2/hidereq/3.0, testsuite/modulefiles.2/hidereq/3.1, testsuite/modules.20-locate/110-hide.exp: ts: add initial module-hide tests in 20/110 2020-07-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Relocate defineModEqStaticProc call in getModules 2020-07-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Define autosym only for dir matching query Define the default and latest auto symbols only if module name matches search query to ensure all module entries have been processed prior setting these symbols. If some alias are defined in global or user modulerc, their relative module name will automatically be part of names analyzed for auto symbol definition. However if available module searched does not match this alias, auto symbol were previously defined without all the module entries evaluated to know if these symbols should be defined and how. * modulecmd.tcl.in: Unhide default symbol on res ctx matching bare mod name On a resolution context, like a load sub-command, unhide any default symbolic version if search query matches bare module name. * modulecmd.tcl.in: Hide mod root name from alt names if default sym hidden When loading module, if it matches default version but this symbolic version is set hidden, also remove module parent name from the list of alternative names to record in environment. * modulecmd.tcl.in: Unhide 'default' symbol on 'avail -d' When the *only defaults* filter of avail sub-command is enabled, unhide all the default symbolic version or module targeted by this symbol. 2020-07-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.90-avail/070-full.exp: Do not report hidden symbol on avail On avail sub-command, remove hidden symbolic version from list to display along modulefile or directory they target, unless these symbols are specifically referred in search query. As side effect, symbol prefixed by a dot character are also made hidden from avail sub-command with this change. * modulecmd.tcl.in, testsuite/modules.20-locate/067-hidden.exp: No record of hidden alt names When loading module has alternative names declared hidden (alias or symbolic version), withdraw these names from the alternative names to record in environment (in MODULES_LMALTNAME) unless they precisely match search query used to load module. Applies to both module declared hidden or whose name starts with a dot character. 2020-07-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Simplify ternary operators rendering boolean result * modulecmd.tcl.in: Keep hidden tgt of default sym in resolve context When getModules procedure is called in a resolution context (when it is called by getPathToModule proceudre), keep the hidden target of the default symbol if search query is equivalent to module name. As during a resolution context 'mod' query is equivalent to 'mod/default' query. 2020-07-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.20-locate/067-hidden.exp: No specific res for sym ver target in cmdModuleSearch Modulefile targeted by symbolic version should be included in getModules result along with symbolic version entry. So there is no need to specifically resolve by default symbolic version target in cmdModuleSearch procedure. If symbol's target is found in error, record it if search query matches symbol. And if symbol's target has not been found in directory where symbol is defined, add this symbol target to the list of element to resolve in other modulepath directories later on cmdModuleSearch procedure. * modulecmd.tcl.in: Resolve icase symver target in getModules When looking for symbolic version target to add them to getModules result in case symbolic versions targeting them match search query. Resolves symbolic version target in an icase way when icase mode is enabled. 2020-07-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Refactor hversmod_list in getModules Rather testing if symbol target is hidden in phase #1 of getModules procedure when building list of symbolic versions, build at this first stage the list of symbols for each module having at least one symbol targeting it. Use this array list, named versmod_list, at stage #2 when withdrawing hidden modules unless if they are directly targeted by search query or the symbolic versions targeting them. * modulecmd.tcl.in: Exclude declared hidden mods from getModules res Adapt phase #2 of getModules procedure to withdraw all modules declared hidden unless if they match search query. Hidden elements should exactly match search query to be retained. * modulecmd.tcl.in: Add 'eqspec' test on modEq proc Add the `eqspec` test on modEq procedure to check equality against precise version specification, even when extended_default configuration is enabled, and precisely match versions specified in list or as range boundaries. 2020-07-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Check for hidden mod spec in isModuleHidden Transform existing isModuleHidden procedure in isModuleDotHidden procedure, checking hidden state against dot name aspect only. Introduce isModuleDeclHidden procedure to check hidden state against hidden module specifications. Make isModuleHidden procedure to check against dot name hidden and declared hidden modules by calling isModuleDotHidden and isModuleDeclHidden procedure. * modulecmd.tcl.in: One global statement for all req vars in getModules 2020-06-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Introduce 'module-hide' modulefile command Create initial `module-hide` procedure and record it in modulefile and modulerc evaluation context. Throw an error if no module is specified as argument. Every module specification is recorded in a global array named g_moduleHide are being parsed like any other module version specification. Fixes #202. 2020-06-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/hide-or-forbid-modulefile.rst: doc: add hide-or-forbid-modulefile design doc 2020-07-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, lib/configure.ac, lib/envmodules.c, modulecmd.tcl.in, testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: Remove fetch_hidden arg on getFilesInDirectory proc Always return hidden directory entries. Update both pure-Tcl and C version of getFilesInDirectory procedure * modulecmd.tcl.in: Remove fetch_hidden arg on findModules proc Always fetch hidden elements, getModules query is then used to filter and only return accurate entries. * modulecmd.tcl.in: Remove fetch_hidden arg on getModules proc Now hidden entries are automatically searched if specified on query. Remove isModuleSpecHidden procedure which is now useless. 2020-06-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.20-locate/067-hidden.exp: Auto return hidden elt if matching query on getModules Automatically determine if hidden elements have to be returned on getModules procedure, rather explicitly setting a fetch_hidden flag. These hidden elements need to be returned if they exactly match search query. 2020-06-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/120-siteconfig.exp: Fix modStartNb to return nb of matching parts 0 means no match, 1+ the number of element in names that are matching. 2020-06-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * script/mb: script: add single module avail/whatis test on mb * modulecmd.tcl.in: Limit search to specified query in getPathToModule Call getModules procedure with query specified to getPathToModule rather on module root name. As a consequence getPathToModule recalls itself more often when resolution hit a module alias or a symbolic version, as those elements are less likely to be part of initial getModules result. Delete the isSameModuleRoot procedure which is not used anymore. * modulecmd.tcl.in, testsuite/modules.70-maint/290-json.exp: Fix modEq/modEqStatic for mod with trailing /s When specified module has several trailing slash characters, adapt modEq and modEqStatic procedure to clear the extra slashes (mod// gives mod/) and adapt suffix appending, when this suffix also starts by a slash character (mod/ + /* gives mod/* not mod//*). * modulecmd.tcl.in: Trim all trailing / from querydir in getModules string range operation was only removing the last one, but did not cover cases where mod is specified 'mod//'. 2020-06-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Return parent dir of matching elements in getModules When performing a non-wild search in getModules (for instance when it is called by getPathToModule procedure), returns the parent directory element equal to query module name in order to retrieve the default and latest entry information in calling procedure. 2020-08-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc. configure updates and multilib support in NEWS 2020-08-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml: travis: del 'make srpm' test on non-compat el7 cases * Makefile, lib/.gitignore, lib/Makefile.in, lib/testutil-dupgetgroups.c, testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/120-siteconfig.exp: ts/lib: test tcl ext lib against a dup ent res getgroups call Add an utility library that supersedes the getgroups function from libc. The getgroups function from this added library always returns a list with 3 elements that all correspond to user's primary group. It is used for coverage test of the getgroups call made within the Envmodules_InitStateUsergroupsObjCmd function of the Tcl extension library. * lib/configure.ac, lib/envmodules.c: lib: remove dup from getgroups result `getgroups` system call may return a group list with duplicate entries, so these duplicates need to be removed from result list. Use a *sort then skip consecutive identical entries* strategy for this cleanup task. Sort is performed with `qsort` system call therefore a `+__Envmodules_IntCmp` function is introduced for it. 2020-08-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/100-pager.exp, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/150-access-init.exp: ts: adapt existing tests for multilib support * Makefile: install: raise error when making srpm/rpm if no compat Raise an error when trying to build SRPM or RPM packages if compatibility version sources are missing. * contrib/rpm/environment-modules.spec.in: rpm: build with multilib support enabled * .travis.yml: travis: update ubuntu version to xenial * INSTALL.rst, Makefile, Makefile.inc.in, configure, modulecmd.tcl.in, site.exp.in: Add support for multilib systems Introduce the `--enable-multilib-support` configure option to add mechanism in `modulecmd.tcl` to look at an alternative location to find the Modules Tcl extension library in case this library cannot be found at its main location. It adds the ability on specific architecture (e.g., x86_64) to use the library build for another architecture compatible with current machine (e.g., i686). When this option is enabled, modulecmd.tcl is produced in a way that make it identical whether built from 32bit or 64bit systems. This way no conflict happen on EL/Fedora systems when installing both 64bit and 32bit RPM packages. 2020-08-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp: ts: report current sys info at beginning of tests * .travis.yml: travis: test set of dummy configure args * contrib/rpm/environment-modules.spec.in: rpm: use make macros to build and install Apply requested change for F33: https://fedoraproject.org/wiki/Changes/UseMakeBuildInstallMacro * contrib/rpm/environment-modules.spec.in: rpm: fix modulecmd pre-alternatives check Was wrongly checking %{buildroot} content rather targeted system. * configure: install: pass --{build,target,host} opt to lib configure Also pass the --build, --target and --host options down to the `configure` script of Modules Tcl extension library. * configure: install: add support for env var and system type set on configure Add support to define environment variable and build system type as `configure` script arguments to better match GNU configuration specification. 2020-08-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * configure: install: ign not supported --enable-*/--with-* opts Ignore not supported `--enable-*` and `--with-*` options on `configure` script rather raise an error to comply with GNU configuration specification. * configure: install: ignore configure script standard option To cope with default build macro, like `%configure` in RPM spec, ignore `configure` script standard options like `--program-prefix` rather raise an *unsupported option* error. 2020-08-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * configure, contrib/rpm/environment-modules.spec.in: install: accept new compat-specific opts on ./configure Take into account the `--build`, `--host`, `--target`, `--enable-dependency-tracking` and `--disable-dependency-tracking` configure options to transmit them to Modules compatibility version ./configure script. Such options are implied when using `%configure` macro in RPM spec file. Fixes #354 2020-07-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * script/mrel: script: add support of koji 'free' task state in mrel * NEWS.rst: doc: merge release of version 4.5.2 * testsuite/modules.50-cmds/370-deps-fullpath.exp: ts: fix 50/370 tests on short term size * script/mpub, script/mrel: script: enable mrel/mpub to release from a vZ.Y.x branch Adapt the `mrel` and `mpub` release to produce new Modules release from a 'vZ.Y.x' branch rather from 'master' branch. 2020-07-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/370-deps-fullpath.exp: Fix reflexive conflict issue when mod is loaded full path Adapt conflict detection tests to ensure a module loaded by its full pathname will not detect itself as a conflict when declaring a reflexive conflict. Fixes #352. 2020-07-28 Rob Hurt <rchurt@users.noreply.github.com> * doc/source/index.rst: doc: clarify about lang-specific modules in index I think it would be worth adding a clarification about Perl (and other language) modules vs. the environment modules described here, because the use of the term "modules" for both can be confusing to new users. Also fixed some typos and formatting. 2020-07-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Separate quar var def from tclshbin in _module_raw Clearly separate quarantine variable definition from tclsh binary on modulecmd.tcl evaluated command call in _module_raw function for sh, bash, ksh and zsh shells. When _module_raw is evaluted in zsh completion process, the command call was not correctly generated and location of tclsh binary was the value set to all quarantine variable declared. Which in case of LD_PRELOAD, led to error messages. Fixes #350. 2020-07-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc. inclusivity/versioned magic cookie in NEWS * MIGRATING.rst, doc/source/cookbook/source-script-in-modulefile.rst: doc: use versioned magic cookie in recent examples Fixes #349. 2020-06-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * CONTRIBUTING.rst: doc: state code must comply with Tcl8.4+ in CONTRIBUTING * MIGRATING.rst: doc: desc. module-info user{name,groups} in MIGRATING 2020-06-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, lib/.gitignore, lib/Makefile.in, lib/testutil-0getgroups.c, testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/120-siteconfig.exp: ts/lib: test tcl ext lib against a zero res getgroups call Add an utility library that supersedes the getgroups function from libc. The getgroups function from this added library always returns an empty result (0). It is used for coverage test of the getgroups call made within the Envmodules_InitStateUsergroupsObjCmd function of the Tcl extension library. * .appveyor.yml, .cirrus.yml, .travis.yml: travis/appveyor/cirrus: use --base64-failed-log mt opt * script/mt: script: add option --base64-failed-log to mt Add option ``--base64-failed-log`` to the ``mt`` script to output test log on failure in a base64 serialized format. 2020-06-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, lib/.gitignore, lib/Makefile.in, lib/testutil-getgrgid.c, testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/120-siteconfig.exp: ts/lib: test tcl ext lib against a failed getgrgid call Add an utility library that supersedes the getgrgid function from libc. The getgrgid function from this added library always returns an error (NULL). It is used for coverage test of the getgrgid call made within the Envmodules_InitStateUsergroupsObjCmd function of the Tcl extension library. * Makefile, lib/.gitignore, lib/Makefile.in, lib/testutil-getgroups.c, testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/120-siteconfig.exp: ts/lib: test tcl ext lib against a failed getgroups call Add an utility library that supersedes the getgroups function from libc. The getgroups function from this added library always returns an error (-1). It is used for coverage test of the getgroups call made within the Envmodules_InitStateUsergroupsObjCmd function of the Tcl extension library. * Makefile, lib/.gitignore, lib/Makefile.in, lib/testutil-getpwuid.c, testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/120-siteconfig.exp: ts/lib: test tcl ext lib against a failed getpwuid call Add an utility library that supersedes the getpwuid function from libc. The getpwuid function from this added library always returns an error (NULL). It is used for coverage test of the getpwuid call made within the Envmodules_InitStateUsernameObjCmd function of the Tcl extension library. * MIGRATING.rst, NEWS.rst: doc: mark subcmd/mfcmd/command in NEWS/MIGRATING Improve markup of NEWS and MIGRATING documents starting from this 4.6 version to enable references to module sub-commands, command line switches, environment variables and modulefile Tcl commands. * NEWS.rst: doc: desc. module-info usergroups/username in NEWS * script/mpub, script/mrel: script: fix distclean err to ignore in mrel/mpub * script/mrel: script: add cleaning of prev built rpm in 'mrel' * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/286-info-username.exp, testsuite/modules.50-cmds/287-info-usergroups.exp: ts: adapt stack trace msgs to tcl vers in 50/{286,287} 2020-06-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/286-info-username.exp, testsuite/modules.50-cmds/287-info-usergroups.exp: ts: test module-info user{name,groups} on win platform * testsuite/modulefiles.2/info/.modulerc, testsuite/modulefiles.2/info/usergroups, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/287-info-usergroups.exp: ts: test 'module-info usergroups' in 50/287 * testsuite/modulefiles.2/info/.modulerc, testsuite/modulefiles.2/info/username, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/286-info-username.exp, testsuite/modules.70-maint/220-config.exp: ts: test 'module-info username' in 50/286 * lib/configure.ac, lib/envmodules.c, lib/envmodules.h: lib: implement initStateUsergroups Add function in libtclenvmodules to implement `initStateUsergroups` as a Tcl command, which provides a more efficient way to retrieve current groups of running process, rather forking to execute `id` external binary. Note that if current system does not support the `getgroups` system call, only the primary group name of current user will be returned. 2020-06-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * lib/configure.ac, lib/envmodules.c, lib/envmodules.h: lib: Implement initStateUsername Add function in libtclenvmodules to implement `initStateUsername` as a Tcl command, which provides a more efficient way to retrieve current username, rather forking to execute `id` external binary. * modulecmd.tcl.in: Raise error if module-info usergroups/username called from win * doc/source/modulefile.rst: doc: desc. module-info usergroups/username in modulefile(4) * doc/source/modulefile.rst: doc: reorder module-info sub-cmd desc. in modulefile(4) * doc/source/diff_v3_v4.rst: doc: desc. module-info username/usergroups in diff doc * modulecmd.tcl.in: Add 'usergroups' sub-cmd to module-info command Be able to fetch groups of current user through `module-info` modulefile command. With no extra argument, all group names are returned. If a name is provided as argument, true is returned if this name matches one entry in the group list, false is returned otherwise. * modulecmd.tcl.in: Add 'usergroups' state Create `usergroups` state to collect all the groups the user running modulecmd.tcl process is member of. Add an initStateUsergroups procedure to initialize this state, which calls `id -G -n` to fetch these group names. This external command is available on every Unices and its `-G -n` arguments operate the same way. An error will be obtained on Windows platform as `id` command is not known there. initStateUsergroups procedure is recorded in modulecmd.tcl as __initStateUsergroups and renamed if initStateUsergroups procedure is not found from Modules Tcl extension library. A more efficient version of initStateUsergroups will be provided in the library later on (not to depend on an external command call). * modulecmd.tcl.in: Add 'username' sub-cmd to module-info command Be able to fetch current username through `module-info` modulefile command. With no extra argument, username is returned. If a name is provided as argument, true is returned if this name matches current username, false is returned otherwise. * modulecmd.tcl.in: Add 'username' state Create `username` state to collect the name of the user running modulecmd.tcl process. Add an initStateUsername procedure to initialize this state, which calls `id -u -n` to fetch username. This external command is available on every Unices and its `-u -n` arguments operate the same way. An error will be obtained on Windows platform as `id` command is not known there. initStateUsername procedure is recorded in modulecmd.tcl as __initStateUsername and renamed if initStateUsername procedure is not found from Modules Tcl extension library. A more efficient version of initStateUsername will be provided in the library later on (not to depend on an external command call). 2020-07-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst, configure, doc/example/modulefiles-in-git/modulefiles/localmodules, doc/source/cookbook/modulefiles-in-git.rst, doc/source/module.rst, modulecmd.tcl.in: Apply inclusive terminology in code and docs Use inclusive terminology [1] to eliminate 'master' and 'slave' terms as much as possible from code and documentation. 'master' has been changed into 'main' and 'slave' into 'subordinate' or 'sub'. After this change, some references to the 'master' and 'slave' word can still be found in repository: * `slaves` sub-command of `interp` Tcl command * `--slave` option of `update-alternatives tool in RPM spec file * `master_doc` attribute of Sphinx `conf.py` file * git 'master' branch need to be renamed and tools referring it need to be updated accordingly (configure, script/mpub, script/mrel) [1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/l inux.git/commit/?id=49decddd39e5f6132ccd7d9fdc3d7c470b0061bb 2020-07-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc. recent doc and configure script updates in NEWS * testsuite/install.00-init/060-quar.exp: ts: fix install quar test when LD_PRELOAD is set 2020-07-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .appveyor.yml, .cirrus.yml, .travis.yml, INSTALL.rst, configure, contrib/rpm/environment-modules.spec.in: install: disable compat version build by default Version 4 of Modules is available since almost 3 years. Many improvements have been made to integrate features of version 3.2 still needed in module command. So it is now time to disable the build of version 3.2 which was triggered by default since 4.0. * .travis.yml: travis: use '--arg val' configure syntax on 2 test cases * configure: install: set dir arg with '--arg val' form in configure Enable the definition of the installation directory argument of the ./configure script with the `--arg val` syntax form in addition to the `--arg=val` syntax. Fixes #348 * .travis.yml: travis: fix --with-quarantine-vars arg bad definition * configure: install: show lib/compat configure args on configure * configure: install: raise error on unknown configure argument Fixes #348 * configure: install: limit compat args to those supported in configure Only pass to compatibility version ./configure script arguments that make sense to it. Do not transmit anymore arguments that are unknown to this compatibility version ./configure script. Compatibility version ./configure script argument listed in project's main configure script are only a subset of supported arguments. Main configure script can only be used to run compatibility configure script with the argument list here. 2020-06-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/img/modules_red.svg: doc: use brighter variation of red svg logo Built from CMYK EPS file. 2020-06-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, README.md: doc: include logo on README * doc/source/conf.py: doc: fix html theme on RTD To avoid RTD to override html_theme_options when html_theme is set to 'default'. * doc/img/favicon.ico, doc/img/modules_red.svg, doc/img/modules_white.svg, doc/source/conf.py: doc: include logo in doc portal 2020-05-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../source-script-in-modulefile/foo-1.2/bin/foobin, .../foo-1.2/foo-setup.sh, .../modulefiles/foo/1.2, .../cookbook/source-script-in-modulefile.rst: doc: add source-script-in-modulefile recipe 2020-05-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst: doc: desc. source-sh in MIGRATING/NEWS * doc/source/diff_v3_v4.rst, doc/source/module.rst, doc/source/modulefile.rst: doc: desc. source-sh/MODULES_LMSOURCESH in man/diff 2020-05-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../design/source-shell-script-in-modulefile.rst: doc: desc. env recording in source-sh design doc 2020-05-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.2/source-sh/3, testsuite/modulefiles.2/source-sh/5.0, testsuite/modules.50-cmds/400-source-sh.exp: ts: fix result order on 50/400 tests * testsuite/modules.50-cmds/400-source-sh.exp: ts: adapt 50/400 err stack trace msg to Tcl version used * testsuite/modulefiles.2/source-sh/6.0, testsuite/modules.50-cmds/400-source-sh.exp: ts: test var relying on source-sh script defined var * testsuite/modules.50-cmds/400-source-sh.exp: ts: add 'display' mode test for source-sh cmd 2020-05-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Implement 'source-sh' for display mode When modulefile is displayed, report modulefile commands resulting from source-sh script evaluation rather source-sh modulefile command. As for unload modulefile evaluation, display mode relies on MODULES_LMSOURCESH if modulefile is currently loaded. However it will requery script to fetch the definition of shell aliases and functions. 2020-05-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Split sh-to-mod code in 2 procs Separate script evaluation and output extraction in a dedicated procedure called execShAndGetEnv. 2020-05-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/mini-sh-to-mod.sh, testsuite/modulefiles.2/source-sh/1, testsuite/modulefiles.2/source-sh/2, testsuite/modulefiles.2/source-sh/3, testsuite/modulefiles.2/source-sh/4.0, testsuite/modulefiles.2/source-sh/4.1, testsuite/modulefiles.2/source-sh/4.2, testsuite/modulefiles.2/source-sh/4.3, testsuite/modulefiles.2/source-sh/5.0, testsuite/modulefiles.2/source-sh/5.1, testsuite/modules.00-init/006-procs.exp, testsuite/modules.50-cmds/400-source-sh.exp: ts: test 'source-sh' modulefile command 2020-05-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Transform sep char used in MODULES_LMSOURCESH value Transform character used as separator to structure MODULES_LMSOURCESH environment variable value (:, & and |), when these characters are used among values set by source-sh scripts. Respectively transform these characters into `<EnvModEscPS>`, `<EnvModEscS1>` and `<EnvModEscS2>`. 2020-05-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Implement 'source-sh' for unload mode Rely on information saved in MODULES_LMSOURCESH environment variable to know what to undo when modulefile is evaluated in unload mode. Evaluate source-sh resulting modulefile commands through unload Tcl interpreter to get those command reversed. 2020-05-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Record cmds from source-sh in MODULES_LMSOURCESH env var Record in user environment the modulefile commands resulting from source-sh evaluations. Making this information persist in environment via MODULES_LMSOURCESH variable helps to determine what to undo when unloading modulefiles making use of the source-sh command. 2020-05-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Implement 'source-sh' command for load mode 2020-05-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/vim/syntax/modulefile.vim: vim: add new modulefile command 'source-sh' * modulecmd.tcl.in: Add skeleton for new modulefile command 'source-sh' Add an undo procedure to apply on unload modulefile evaluation mode. Print command call on display mode. And no operation for other modes. 2020-05-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc. -T/--trace option in NEWS * testsuite/modules.70-maint/220-config.exp, testsuite/modules.70-maint/230-verbosity.exp: ts: add tests for 'trace' verbosity level * INSTALL.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: desc. -T/--trace in man/diff/INSTALL docs * modulecmd.tcl.in: Fix double err counter increase when mod eval breaks 2020-05-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module.in: init: add -T/--trace options to completion scripts 2020-05-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * configure, modulecmd.tcl.in: Introduce 'trace' verbosity level 2020-05-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst: doc: desc. sh-to-mod in NEWS/MIGRATING 2020-05-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: desc. sh-to-mod in module(1) and diff docs * .../design/source-shell-script-in-modulefile.rst: doc: add source-shell-script-in-modulefile design doc 2020-05-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/sh-to-mod.csh, testsuite/example/sh-to-mod.fish, testsuite/example/sh-to-mod.sh, testsuite/modules.70-maint/310-sh-to-mod.exp: ts: add test for path-like variable in 70/310 2020-05-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Dedup path entries found after sh-to-mod script source For path-like variable set by sourced script, the newly added path entries are analyzed to remove duplicates among the same portion to avoid a path to be prepended multiple times or appended multiple times. Deduplication does not apply between prepended portion and appended portion. Path entries found set prior script sourced are also excluded from deduplication process. 2020-05-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Exclude PS1 variable from sh-to-mod environment change Sourced scripts may detect the need to update PS1, but this decision is taken over a specific environment where initialization scripts have not been evaluated for the shells. 2020-05-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/090-sh-to-mod.exp, testsuite/modules.70-maint/310-sh-to-mod.exp: No support of BSD sh shell on sh-to-mod currently sh shell on BSD platform outputs alias definition with different character escaping than regular sh or dash on Linux platform. Disable test for this shell on this platform currently. Will see later on if a need to support this shell is needed. * testsuite/example/sh-to-mod.sh, testsuite/modules.70-maint/310-sh-to-mod.exp: ts: rework FOOSHELL var test in 70/310 Prefer BASH environment variable to SHELL to check bash binary location used for current shell session. 2020-05-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Run shell without loading its config to proceed sh-to-mod eval * modulecmd.tcl.in, testsuite/bin/install_test_csh, testsuite/example/sh-to-mod.csh, testsuite/install.00-init/090-sh-to-mod.exp, testsuite/modules.70-maint/310-sh-to-mod.exp: Add support for csh/tcsh shells on sh-to-mod sub-cmd 2020-05-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/090-sh-to-mod.exp, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.70-maint/310-sh-to-mod.exp: ts: mksh not supported on sh-to-mod currently * testsuite/install.00-init/090-sh-to-mod.exp: ts: fix install 00/090 when quarantine is disabled With quarantine mechanism disabled, no specific IFS is set when modulecmd.tcl output is evaluated with zsh and ksh shells, sh-to-mod does not output ';' character at end of each function line, thus when evaluated with default IFS the multiple lines are treated as a single command line. 2020-04-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitignore, modulecmd.tcl.in, testsuite/example/sh-to-mod.fish, testsuite/install.00-init/090-sh-to-mod.exp, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.70-maint/310-sh-to-mod.exp: Add support for fish shell on sh-to-mod sub-cmd 2020-04-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/310-sh-to-mod.exp: ts: prepare 70/310 for non-sh shells 2020-04-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/install.00-init/090-sh-to-mod.exp, testsuite/modules.70-maint/310-sh-to-mod.exp: Add support for ksh93 shell on sh-to-mod sub-cmd * modulecmd.tcl.in, testsuite/install.00-init/090-sh-to-mod.exp, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.70-maint/310-sh-to-mod.exp: Add support for dash shell on sh-to-mod sub-cmd dash has some limitations for this task: - there is no mechanism to report shell functions set, so no shell function will be defined or unset with this shell through sh-to-mod - arguments cannot be passed to a sourced script 2020-04-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/install.00-init/090-sh-to-mod.exp, testsuite/modules.70-maint/310-sh-to-mod.exp: Add support for sh shell on sh-to-mod sub-cmd 2020-04-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/090-sh-to-mod.exp: ts: add install tests for sh-to-mod sub-cmd 2020-04-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.70-maint/310-sh-to-mod.exp: Add support for ksh shell on sh-to-mod sub-cmd Specific code is required to retrieve defined functions in environment as `typeset -f` may output function definition with no clear separation between each other. * modulecmd.tcl.in, testsuite/modules.70-maint/310-sh-to-mod.exp: Add support for zsh shell on sh-to-mod sub-cmd 2020-04-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/sh-to-mod.sh, testsuite/modules.70-maint/310-sh-to-mod.exp: ts: add tests for 'sh-to-mod' sub-command * modulecmd.tcl.in: Handle error occuring when sourcing script in sh-to-mod Redirect stderr onto stdout when sourcing script in sh-to-mod sub-command in order to avoid a warning message put on stderr by script were taken as an error by Tcl exec command. Also mix stdout and stderr messages of script to be able to provide all of them to user in case an error occurs during script source by shell (exit code found different than 0). An error returned by shell execution is reported and ends sh-to-mod processing. * modulecmd.tcl.in: Format string and list for output Add the strTo and listTo procedures to format a string or a list of string making it compliant with the destination language. Add support for Tcl and shell output, enclosing strings if they are empty or if they contain a space character respectively with curly braces or single quotes. And escaping those character if used in strings. Use the new procedures in sh-to-mod to enclose/escape script name and its argument to source in shell command. Also use listTo in reportCmd, which was previously doing the same enclosing work. Make use of reportCmd to output result of sh-to-mod sub-command, in order to get the same formatted output than when doing a module display (with tabs and colors if enabled). Add a -nativeargrep argument to reportCmd procedure to use (when called for sh-to-mod result) Tcl native string representation of list, which automatically enclose string if needed and escape special characters if present. Do not make this behavior a default as output made for module display should not automatically enclose strings using variable value reference (eg. $VAR). 2020-04-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add 'sh-to-mod' procedure Add the `sh-to-mod' procedure that executes script with args through shell and converts environment changes the script performs into corresponding modulefile commands. Environment changes made by script are found by making shell first outputing environment state, then sourcing script and after that outputing resulting environment state. Shell full output is after this execution parsed and analyzed, comparing environment state prior script source with state after script source. Add support for Bash shell and track changes over environment variables, shell functions, shell aliases and current working directory. Result is returned as a list of modulefile commands. Procedure is called by cmdModuleShToMod which outputs the modulefile commands with modulefile header '#%Module'. 2020-04-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash_completion.in: init: fix dup apropos/keyword/search in bash comp apropos, keyword and search sub-commands now accept arguments so they need to be removed from empty-or-wide-argument-command list * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module.in: init: add 'sh-to-mod' sub-cmd to shell comp scripts * init/fish_completion: init: fix list/source sub-cmd in fish completion list and source sub-commands do not need available modulefiles as argument. * testsuite/modulefiles/modbad/sh-to-mod, testsuite/modules.00-init/071-args.exp, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.90-avail/070-full.exp: ts: update existing tests to check 'sh-to-mod' * modulecmd.tcl.in: Add skeleton for new 'sh-to-mod' sub-command 2020-04-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.70-maint/220-config.exp: Optionally catch error when initializing a state Ensure, when dumping all states that an error occuring during a state initialiaztion will not break the whole report. 2020-04-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc. state handling rework in NEWS * testsuite/modules.00-init/100-pager.exp, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/140-color.exp, testsuite/modules.00-init/150-access-init.exp, testsuite/modules.70-maint/060-apropos.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/220-config.exp: ts: adapt tests to new state mngt 2020-04-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Refactor 'reportfd' state initialization Transform the startPager procedure into initStateReportfd to have it automatically called first time value of 'reportfd' state is queried (so first time a message has to be outputed). initStateReportfd procedure embeds the output of document start in case of structured output mode. This output is done there to avoid an infinite loop of reportfd state initialization. Initialization of the 'reportfd' state is triggered in initErrorReport if debug mode is enabled to have its reportDebug calls processed in buffer mode to get processed in correct order (otherwise reportfd initialization will appear first, before debug messages stored in buffer). 'already_report' state is removed as it is now useless. * modulecmd.tcl.in: Refactor 'paginate' state initialization Transform initPager procedure into initStatePaginate and set this procedure as the initialization one for the 'paginate' state. Keep a specific call to 'paginate' state to get it set prior pager initialization. 'pager_started' state is removed as it is now useless. * modulecmd.tcl.in: Migrate 'report_sep_next' to state struct * modulecmd.tcl.in: Migrate 'init_error_report' to state struct * CONTRIBUTING.rst, modulecmd.tcl.in: Migrating 'already_report' to state struct * modulecmd.tcl.in: Migrate 'false_rendered' to state struct * modulecmd.tcl.in: Migrate 'lm_info_cached' to state struct * modulecmd.tcl.in: Migrate all uname props to state struct Instead of using a specific struct to cache uname properties value, use global state structure. As a consequence, domainname, kernelversion, nodename and osversion states are introduced. os state is changed just to store OS name and not OS name and version: OS version has its own state now. * modulecmd.tcl.in: Migrate 'sub2_separator' to state struct * modulecmd.tcl.in: Migrate 'sub1_separator' to state struct * modulecmd.tcl.in: Migrate 'cwd' to state struct * modulecmd.tcl.in: Migrate 'error_count' to state struct * modulecmd.tcl.in: Migrate 'return_false' to state struct * modulecmd.tcl.in: Migrate 'autoinit' to state struct * modulecmd.tcl.in: Migrate 'inhibit_interp' to state struct * modulecmd.tcl.in: Migrate 'inhibit_errreport' to state struct 2020-04-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Migrate CSH_LIMIT to 'csh_limit' cfg option * modulecmd.tcl.in: Migrate 'reportfd' to state struct * modulecmd.tcl.in: Migrate 'report_format' to state struct * modulecmd.tcl.in: Migrate 'cmdline' state retrieval to getState * modulecmd.tcl.in: Migrate 'extra_siteconfig_loaded' state retrieval to getState * modulecmd.tcl.in: Migrate 'force' state retrieval to getState * modulecmd.tcl.in, testsuite/example/siteconfig.tcl-1, testsuite/install.00-init/005-init_ts.exp, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/140-color.exp: Migrate 'is_stderr_tty' state retrieval to getState * modulecmd.tcl.in: Migrate 'is_win' state retrieval to getState * modulecmd.tcl.in: Migrate 'machine' state retrieval to getState * modulecmd.tcl.in: Migrate 'os' state retrieval to getState * modulecmd.tcl.in: Migrate 'pager_started' state retrieval to getState 2020-04-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Migrate 'paginate' state retrieval to getState * modulecmd.tcl.in: Migrate 'path_separator' state retrieval to getState 2020-04-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Migrate 'rc_loaded' state retrieval to getState * modulecmd.tcl.in: Migrate 'siteconfig_loaded' state retrieval to getState * modulecmd.tcl.in: Migrate 'shell' state retrieval to getState * modulecmd.tcl.in: Migrate 'shelltype' state retrieval to getState * modulecmd.tcl.in: Migrate 'subcmd' state retrieval to getState * modulecmd.tcl.in: Migrate 'subcmd_args' state retrieval to getState * modulecmd.tcl.in: Migrate 'tcl_ext_lib_loaded' state retrieval to getState * modulecmd.tcl.in: Migrate 'tcl_version' state retrieval to getState * modulecmd.tcl.in, testsuite/example/siteconfig.tcl-1: Migrate 'term_columns' state retrieval to getState * modulecmd.tcl.in: Create structs/procs to store/get states in common array 2020-06-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, contrib/rpm/environment-modules.spec.in, version.inc.in: Release of version 4.5.1 2020-05-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Fix format of err stack trace start Fix formatting of error stack trace not to look for internal commands to withdraw if startup stack pattern cannot be matched. 2020-05-14 Roy Storey <kiwiroy@users.noreply.github.com> * modulecmd.tcl.in, testsuite/modules.00-init/150-access-init.exp: Use absolute path to load tcl_ext_lib Fixes #344 2020-05-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml: travis: update one OSX case to use latest img version 2020-05-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile: install: improve test deps dl retry mechanism 2020-05-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml, Makefile: travis: retry test deps setup as their dl regularly fail Add a 'test-deps' make target to specifically build all dependencies for tests, like Nagelfar and Tcl8.3 download. Call this specific target in Travis CI through the `travis_retry` utility to retry dependency download if they fail. * modulecmd.tcl.in, testsuite/modulefiles.2/setenv/0.1, testsuite/modulefiles/spread/3.0, testsuite/modulefiles/spread/7.0, testsuite/modulefiles/spreadrc/dir3/.modulerc, testsuite/modulefiles/spreadrc/dir3/1.0, testsuite/modulefiles/spreadrc/dir4/.modulerc, testsuite/modulefiles/spreadrc/dir7/.modulerc, testsuite/modulefiles/spreadrc/dir7/1.0, testsuite/modulefiles/spreadrc/dir8/.modulerc, testsuite/modules.50-cmds/029-setenv-env.exp: Sync env var changes across Tcl sub-interpreters Ensure environment variable change at the Tcl interpreter level is propagated to every sub-interpreters used to evaluate modulefiles or modulercs. Tcl by default maintain the `::env` array in sync across all started interpreters. But in some cases, it appears a change occuring in master interpreter is not correctly propagated when the variable is later on updated in sub-interpreter. Fixes #342 2020-05-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles.allin/restoreenv/0.1, testsuite/modulefiles.allin/restoreenv/0.2, testsuite/modules.50-cmds/360-restoreenv.exp: Keep link with env vars when restoring settings after breakage In case a modulefile evaluation fails, environment context prior this failed evaluation is restored. Fix environment variable restoration mechanism to keep the link that monitors and updates environment variable array `env` in every Tcl sub-interpreters. Unsetting the whole `env` array makes Tcl stop monitoring env accesses and stop updating environment variables. Environment context restoration is now done by updating the `env` array (unsetting keys in the array and setting value for new or existing keys). Fixes #340 2020-05-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.70-maint/280-ml.exp: Disable pager when clear sub-cmd called with ml cmd To ensure a proper prompt message output on clear sub-command, no pager is started. This commit also turns off pager when clear sub-command is called through the ml shortcut command. Fixes #338 2020-04-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitattributes: install: remove project-specific tools from git export 2020-04-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitattributes, script/mpub: script: add 'mpub' to publish new release Add the `mpub` script, that automates Modules new release publishing over git repositories and websites. * .gitattributes, script/mrel: script: add 'mrel' to build/test release files Introduce the `mrel` script, that automates build of the Modules release files and performs tests over these distribution files to guaranty their correctness. * Makefile: install: consistenly output Makefile warning msgs on stderr 2020-04-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, contrib/rpm/environment-modules.spec.in, version.inc.in: Release of version 4.5.0 * .gitattributes: install: exclude .github dir from dist tarballs * .cirrus.yml: cirrus: use updated FreeBSD images Remove openmp package, not available in these new images. (was required on previous images to get an operational R setup) * testsuite/modulefiles.2/autosym1/.modulerc, testsuite/modulefiles.2/autosym1/1, testsuite/modulefiles.2/autosym1/2, testsuite/modulefiles.2/autosym2/.modulerc, testsuite/modulefiles.2/autosym2/1, testsuite/modulefiles.2/autosym2/2, testsuite/modulefiles.2/autosym3/.modulerc, testsuite/modulefiles.2/autosym3/1, testsuite/modulefiles.2/autosym3/2, testsuite/modulefiles.2/autosym4/.modulerc, testsuite/modulefiles.2/autosym4/1, testsuite/modulefiles.2/autosym4/2, testsuite/modulefiles.2/autosym5/.modulerc, testsuite/modulefiles.2/autosym5/1, testsuite/modulefiles.2/autosym5/2, testsuite/modulefiles.2/autosym5/default, testsuite/modulefiles.2/autosym6/.modulerc, testsuite/modulefiles.2/autosym6/1, testsuite/modulefiles.2/autosym6/2, testsuite/modulefiles.2/autosym7/dir1/1, testsuite/modulefiles.2/autosym7/dir1/2, testsuite/modulefiles.2/autosym7/dir2/1, testsuite/modulefiles.2/autosym7/dir2/2, testsuite/modulefiles.2/autosym8/.modulerc, testsuite/modulefiles.2/autosym8/1, testsuite/modulefiles.2/autosym8/2, testsuite/modulefiles.2/autosym9/1, .../274-adv_version_spec-autosym.exp: ts: add 70/274 tests to validate auto symbols 2020-04-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, modulecmd.tcl.in, .../modules.70-maint/271-adv_version_spec-in.exp: Honor default when version list is composed of symvers When an advanced version specifier list contains symbolic version references, fix resolving to honor default version if part of the specified list. Fixes #334. 2020-04-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc. getModules improvements in NEWS * MIGRATING.rst: doc: desc. auto default/latest symbols in MIGRATING * doc/source/module.rst, doc/source/modulefile.rst: doc: desc. default/latest auto symbols in man pages 2020-04-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/130-auto_handling.exp, testsuite/modules.10-use/040-load-use.exp, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/035-defname.exp, testsuite/modules.20-locate/038-defcontext.exp, testsuite/modules.20-locate/040-alias.exp, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/057-mcookie.exp, testsuite/modules.20-locate/066-modulepath-rc.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.20-locate/075-symlink.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.20-locate/090-memcache.exp, testsuite/modules.20-locate/100-wspace.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/020-setenv.exp, testsuite/modules.50-cmds/022-setenv-eschars.exp, testsuite/modules.50-cmds/030-unsetenv.exp, testsuite/modules.50-cmds/076-alias-sub.exp, testsuite/modules.50-cmds/081-info-user.exp, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/100-loglevel.exp, testsuite/modules.50-cmds/105-trace.exp, testsuite/modules.50-cmds/110-verbose.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp, .../modules.50-cmds/132-conflict-fullpath.exp, testsuite/modules.50-cmds/140-system.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/195-load-recurs.exp, testsuite/modules.50-cmds/197-load-lots.exp, testsuite/modules.50-cmds/230-loop.exp, testsuite/modules.50-cmds/240-chdir.exp, testsuite/modules.50-cmds/250-x-resource.exp, testsuite/modules.50-cmds/260-getenv.exp, testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.50-cmds/301-interp-command.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.50-cmds/310-puts.exp, testsuite/modules.50-cmds/340-modvar.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/359-allin-env.exp, testsuite/modules.50-cmds/360-restoreenv.exp, testsuite/modules.50-cmds/375-deps6.exp, testsuite/modules.50-cmds/375-order.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/378-sametarget.exp, testsuite/modules.50-cmds/380-altname.exp, testsuite/modules.50-cmds/390-function.exp, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.70-maint/050-whatis-load.exp, testsuite/modules.70-maint/180-reload.exp, testsuite/modules.70-maint/230-verbosity.exp, testsuite/modules.70-maint/240-icase.exp, testsuite/modules.70-maint/250-nan.exp, .../modules.70-maint/260-extended_default.exp, .../modules.70-maint/270-adv_version_spec.exp, .../modules.70-maint/271-adv_version_spec-in.exp, .../272-adv_version_spec-range.exp, .../273-adv_version_spec-space.exp, testsuite/modules.70-maint/280-ml.exp, testsuite/modules.70-maint/290-json.exp, testsuite/modules.70-maint/300-err_stack.exp, testsuite/modules.80-deep/020-load-deep.exp, testsuite/modules.80-deep/022-switch.exp, testsuite/modules.80-deep/068-transitive-deep.exp, testsuite/modules.80-deep/080-access-deep.exp, testsuite/modules.80-deep/090-deepvirt.exp, testsuite/modules.91-sort/040-load-sort.exp, testsuite/modules.95-version/022-load2.exp: ts: adapt existing tests for auto symbols 2020-04-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Record auto symbol in loaded environment Once a module, which benefits from automatically defined symbolic versions, is loaded, the associated auto symbols are recorded in loaded environment among all the alternative names applying to the loaded module (in `MODULES_LMALTNAME` environment variable). Auto symbols are distinguished from regular symbols by the `as|` prefix which is applied to them. 2020-03-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Auto define default/latest symbol when adv_vers_spec enabled When `advanced_version_spec` is enabled, automatically define a `default` and `latest` symbolic version for each module (at each module depth for deep modules) if those symbols or alias or regular modules with these names are not defined. In case `implicit_default` configuration is disabled, these automatic symbolic versions are not defined. Design principles are described in *Default and latest version specifiers* document. Fixes #210. 2020-04-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Fix version target inclusion loop in getModules Change loop variable name, as direlt is already used to control what entry to record in parent directory. 2020-04-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../design/default-latest-version-specifiers.rst: doc: refine default/latest vers spec design 2020-03-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.20-locate/090-memcache.exp, .../modules.70-maint/260-extended_default.exp: Perform noplaindir filter within getModules Rather applying a filter that removes the directory entries with no tag attached to them, except if search is performed in a no-indepth manner, perform this filter directly withing getModules procedure. * modulecmd.tcl.in, .../modules.70-maint/260-extended_default.exp, .../modules.70-maint/270-adv_version_spec.exp, testsuite/modules.90-avail/080-noindepth.exp: Perform onlydefaults/onlylatest filter within getModules Rather re-filtering result from getModules procedure within listModules procedure, perform the onlydefaults/onlylatest (-d/-L) avail filters directly within getModules. 2020-03-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Ensure dir struct definition when only contains not-searched default In case a directory has set for default element an hidden entry not searched in this getModules processing, still record this directory in dir_list with the default target referred in it (even if not part of found_list result. Doing so ensure that starting phase 3 of getModules processing, all directories with a default defined will have an entry in found_list. * testsuite/modules.70-maint/220-config.exp: ts: fix 70/220 when MODULES_ICASE is externally set 2020-03-31 Adrien Cotte <adrien.cotte@eolen.com> * init/bash_completion.in: bash_completion: fix ml no space between -modules 2020-03-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Remove uneeded test when removing dir from getModules res * .travis.yml, contrib/rpm/environment-modules.spec.in: rpm: define LD_PRELOAD as quarantine var along with LD_LIBRARY_PATH To ensure a sane quarantine effect in case LD_PRELOAD libs depend on libraries found with LD_LIBRARY_PATH. See https://sourceforge.net/p/modules/mailman/message/36959212/ * modulecmd.tcl.in, testsuite/modulefiles/loc_rc010/.modulerc, testsuite/modulefiles/loc_rc010/dir/.4.0, testsuite/modulefiles/loc_rc010/dir/sub1/notamod, testsuite/modulefiles/loc_rc010/dir/sub2/incompat, testsuite/modulefiles/loc_rc010/wrong, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.70-maint/130-aliases.exp: Rework version target inclusion in getModules result Rework loop walking the symbolic version target to include all elements recursively contained in directory targeted by symbolic version. Now using dir_list structure to walk path rather querying the whole found_list with modEq test procedure. * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.80-deep/068-transitive-deep.exp: ts: fix indepth-dependent test in 80/068 For 3 tests, result depends on indepth option, not implicit_default option. 2020-03-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/modulefile.rst: doc: clarify hidden module location in modulefile.4 * modulecmd.tcl.in, testsuite/modulefiles/loc_rc010/subdir/.hidsub/3.0, testsuite/modulefiles/loc_rc010/subdir/.modulerc, testsuite/modulefiles/loc_rc010/subdir/.subdir/3.0, testsuite/modules.20-locate/067-hidden.exp: Add ref in res to version target not in res but not searched Enable resolution of default module in module sub-directory when this default symbol targets an hidden directory (whose name starts with a dot character). Adapt getModules procedure to add reference, in the directory description returned as result, for symbolic version targets that are hidden, not included in returned result but excluded from search made. Fixes #331 * modulecmd.tcl.in, testsuite/modules.70-maint/130-aliases.exp: Filter hidden sym/alias/module from aliases output Filter-out from the output of the `aliases` sub-command all hidden aliases, symbolic versions or hidden modules targeted by a non-hidden symbolic version. Fixes #330 2020-03-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles/loc_rc010/.modulerc, testsuite/modulefiles/loc_rcv1/.modulerc, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.90-avail/070-full.exp: ts: test alias/symver/virtual hidden modules in 20/067 2020-03-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Consider alias/symver/virtual hidden if name starts with . Hide special modules (aliases, symbolic versions and virtual modules) whose version name starts with a dot character (.) from avail, whatis and paths searches if their query does not fully match special module name. Hidden symbolic version will still be reported if the modulefile it targets is part of search result. Fixes #329 2020-03-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/etc/modulerc.deepvirt, testsuite/modulefiles.2/.modulerc, testsuite/modulefiles.2/deepvirt1/.modulerc, testsuite/modulefiles.2/quux/1, testsuite/modules.80-deep/090-deepvirt.exp: ts: add 80/090 deep alias and virtual module tests * testsuite/modules.00-init/006-procs.exp, testsuite/modules.70-maint/290-json.exp, testsuite/modules.90-avail/070-full.exp: ts: compare sorted json output As json output is not sorted by modulecmd.tcl it may happens that test output found on some configurations or platforms is not the one expected although it is correct. To avoid these errors a new test procedure is added to compare stderr output in a sorted manner, so error will be obtained if something is missing in the result but not if the result is outputed in a different order. 2020-03-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.20-locate/090-memcache.exp, testsuite/modules.70-maint/290-json.exp, testsuite/modules.90-avail/070-full.exp: Exclude directory from findModules result There is no need to record found directory in findModules result as these elements will be computed in getModules. * modulecmd.tcl.in: No record of dir content in res returned by findModules No need to record the content of each directory in the result returned by the findModules procedure as full directory content (with virtual elements) is computed in getModules. * modulecmd.tcl.in: Remove useless modMatchAtDepth procedure Following getModules code refactoring, the generated procedure modMatchAtDepth has become useless. Only doesModMatchAtDepth is now used. 2020-03-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/190-emptyarg.exp, testsuite/modules.70-maint/240-icase.exp, testsuite/modules.70-maint/290-json.exp, testsuite/modules.80-deep/068-transitive-deep.exp, testsuite/modules.90-avail/070-full.exp: ts: adapt tests to getModules refactoring Available modules search process is not changed but the refactoring of the getModules procedure fixed some hidden issues like in 80/068: symbol targeting a directory which contains aliases where not correctly analyzed previously (aliases where skipped from result) Module avail result order also change when JSON format output is enabled due to this code refactoring (as JSON output is not sorted). It also fix non-wild searches (performed during whatis or paths sub-commands) that previously matched partial alias, symbolic version or virtual module names. Fully matching names for these kind of modules are not only retained for these non-wild searches. Test results in 70/190, 70/240 and 70/290 have been adapted. 2020-03-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Refactor getModules procedure Rework the full getModules procedure to simplify its processing and apply the same match tests to every kind of modules (regular modulefile, symbolic, version, alias or virtual module). getModules procedure acts now in 4 phases. First every kind of modules are gathered. Then a second phase is set to filter-out modules dynamically hidden or forbidden (this filter will be deployed later on). Third phase is the elaboration of each directory content to determine especially their default and latest versions. At last the fourth phase process all gathered results to only keep those matching search query. As the procedure now applies the same mechanisms for all kind of modules, this code refactoring has solved several issues: * An `avail` search over a symbolic version targeting a directory now correctly returns the special modules (alias and virtual module) lying in this directory. * `whatis` and `paths` searches only return special modules (symbolic version, alias and virtual modules) that fully match search query not those that partially match it. * alias and virtual module whose name mention a directory that does not exists are correctly handled. Fixes #168, #327 and #328 2020-03-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/default-latest-version-specifiers.rst: doc: update deflatest design for default/latest modfile 2020-03-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc. ml bash comp/fish stderr fix/space fixes in NEWS 2020-03-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.20-locate/100-wspace.exp: Fix path cmd result if it contains space char * testsuite/install.00-init/080-args.exp, testsuite/modules.20-locate/100-wspace.exp, .../273-adv_version_spec-space.exp: ts: adapt tests after enclosed mod names in adv_vers_spec disabled mode 2020-02-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Enclose names incl. space even if adv_vers_spec is disabled Enclose module name and versions if it contains a space character even if the advanced versio specifier mechanism is disabled. Rework the advanced version specifier parsing done in parseModuleVersionSpecifier procedure to also check argument passed if advanced_version_spec mechanism is disabled and enclose them in curly braces if a space character is found in them. 2020-03-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/home/coll15, testsuite/home/coll16, testsuite/modulefiles.2/space ye/1.8, testsuite/modulefiles.2/space ye/1.9, testsuite/modulefiles.2/space ye/2.8, testsuite/modulefiles.2/space ye/2.9, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.20-locate/100-wspace.exp, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/999-cleanup.exp, .../273-adv_version_spec-space.exp, testsuite/modules.90-avail/080-noindepth.exp: ts: tests module path/name/version finishing by a space char 2020-03-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.2/sp.ce y+/0 2, testsuite/modulefiles.2/space ye/1.0, testsuite/modulefiles.2/space ye/1.1, testsuite/modulefiles.2/space ye/1.2, testsuite/modulefiles.2/space ye/1.3, testsuite/modulefiles.2/space ye/1.4, testsuite/modulefiles.2/space ye/1.5, testsuite/modulefiles.2/space ye/1.6, testsuite/modulefiles.2/space ye/1.7, testsuite/modulefiles.2/space ye/2.0, testsuite/modulefiles.2/space ye/2.1, testsuite/modulefiles.2/space ye/2.2, testsuite/modulefiles.2/space ye/2.3, testsuite/modulefiles.2/space ye/2.4, testsuite/modulefiles.2/space ye/2.5, testsuite/modulefiles.2/space ye/2.6, testsuite/modulefiles.2/space ye/2.7, testsuite/modules.00-init/005-init_ts.exp, .../272-adv_version_spec-range.exp, .../273-adv_version_spec-space.exp: ts: add tests mixing adv vers spec and deps 2020-02-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.20-locate/100-wspace.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.70-maint/240-icase.exp, testsuite/modules.70-maint/260-extended_default.exp, testsuite/modules.70-maint/270-adv_version_spec.exp, testsuite/modules.70-maint/272-adv_version_spec-range.exp: ts: skip wspace tests if symlinks not supported on fs 2020-02-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Correctly enclose mod name when defining cmp proc * modulecmd.tcl.in: Keep mod vers spec enclosed if containing space when parsed 2020-02-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.2/sp.ce y+/1.2, testsuite/modulefiles.2/sp.ce y+/2.10, testsuite/modulefiles.2/sp.ce y+/2.4, testsuite/modulefiles.2/sp.ce y+/2.6, testsuite/modulefiles.2/sp.ce y+/2.7, testsuite/modulefiles.2/space yd/2.1, testsuite/modulefiles.2/space yd/2.10, testsuite/modulefiles.2/space yd/2.2, testsuite/modulefiles.2/space yd/3.0, testsuite/modulefiles.2/space yd/4.1, testsuite/modulefiles.2/space yd/5.0, testsuite/modules.70-maint/240-icase.exp, .../modules.70-maint/260-extended_default.exp, .../modules.70-maint/270-adv_version_spec.exp, .../272-adv_version_spec-range.exp: ts: test space in names with icase/extdfl/adv_vers_spec 2020-02-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/initrc.in, testsuite/modules.70-maint/120-autoinit.exp: ts: add names with space in test example initrc * testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/020-module.exp: ts: test name containing space on install ts * .appveyor.yml: appveyor: use default inst dir for win native test * site.exp.in, testsuite/install.00-init/030-options.exp: ts: check availability of createmodule.py in install ts * testsuite/modules.20-locate/100-wspace.exp, testsuite/modules.90-avail/080-noindepth.exp: ts: test space in name against no-indepth and no implicit_default * modulecmd.tcl.in: Enclose mod and modpath names if space in them when saving coll * modulecmd.tcl.in: Fix collection parsing to handle enclosed names Correctly read modulepath and module names if enclosed in double-quotes or curly-braces to escape space characters used in these names. * testsuite/home/coll15, testsuite/home/coll16, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.61-coll/999-cleanup.exp: ts: test colls with space in modulepath and module names * testsuite/modules.20-locate/100-wspace.exp: ts: test space in module name against ml command 2020-02-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.2/space yc/2, testsuite/modulefiles.2/space yc/3, testsuite/modulefiles.2/space yc/4, testsuite/modulefiles.2/space yc/5, testsuite/modulefiles.2/spacenc/2, testsuite/modulefiles.2/spacenc/3, testsuite/modulefiles.2/spacenc/4, testsuite/modules.20-locate/100-wspace.exp: ts: tests using space in module dependencies * modulecmd.tcl.in: Fix handling of mod containing space when set as deps Fix dependency analysis mechanisms to correctly handle modulefiles contaning space in their name. 2020-02-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/config/unix.exp, testsuite/modulefiles wspace, testsuite/modulefiles.2/space ya/.modulerc, testsuite/modulefiles.2/space ya/1, testsuite/modulefiles.2/space ya/2, testsuite/modulefiles.2/space yb/.modulerc, testsuite/modulefiles.2/space yb/1, testsuite/modulefiles.2/spacen/.modulerc, testsuite/modulefiles.2/spacen/1, testsuite/modulefiles.2/spacen/2 s, testsuite/modulefiles.2/spacenb/.modulerc, testsuite/modulefiles.2/spacenb/1, testsuite/modules.20-locate/100-wspace.exp: ts: tests using space in module or modulepath names 2020-02-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Protect mod or modpath names containing space from eval Correctly handle modulefiles and modulepaths containing a space character in their name. Protect module and modulepath names which contain a space from being splitted in two words. 2020-03-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/fish_completion, modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Update stderr redirection for new Fish shell versions Use of '^' character to redirect stderr has been deprecated starting Fish version 3.1. It now produces an error. Stderr should be redirected with '2>' like on SH shells. Hopefully '2>' redirection is also supported on old Fish versions (all version 2 support it). Fixes #325 2020-03-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash_completion.in: init: define ml completion only if ml command defined 2020-03-12 Adrien Cotte <adrien@cotte.com> * init/bash_completion.in: init: add 'ml' command support in bash completion 2020-03-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc. recent changes in NEWS 2020-03-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst, MIGRATING.rst, Makefile, NEWS.rst, script/TESTINSTALL.bat, testsuite/install.00-init/030-options.exp: install/ts/doc: install and test envml.cmd along other *.cmd * script/envml.cmd: script: apply same module enablement check in all *.cmd 2020-02-29 Jacques Raphanel <Jacques.Raphanel@esi-group.com> * script/envml, script/envml.cmd: script: introduce envml.cmd for windows Provide a dedicated batch file to provide similar behavior of envml bash script but for CMD Windows shell. Update existing envml bash script to provide same behavior for cmd and sh file (split argument over ';' character, in addition to '&' character). 2020-03-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_v3_v4.rst: doc: add ref to 4.0 closed issues in diff doc * MIGRATING.rst: doc: desc. error stack trace in MIGRATING 2020-03-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .github/ISSUE_TEMPLATE/bug_report.md, .github/ISSUE_TEMPLATE/feature_request.md: github: add issue templates * testsuite/example/siteconfig.tcl-1, testsuite/modulefiles.2/bad3/bodyfor, testsuite/modulefiles.2/bad3/bodyif, testsuite/modulefiles.2/bad3/bodywhile, testsuite/modulefiles.2/bad3/proc2, testsuite/modulefiles.2/bad3/proc3, testsuite/modulefiles.2/badrc3/.modulerc, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.70-maint/300-err_stack.exp: ts: add more error stack tests 2020-03-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/120-autoinit.exp: ts: tclsh is reported tclshX.Y on FreeBSD 2020-03-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/140-color.exp: ts: adapt err stack output for siteconfig failed eval * modulecmd.tcl.in: Rework error stack filtering for siteconfig eval issue When a error occurs during the evaluation of the siteconfig specific file, only remove from error stack the elements relative to the modulecmd.tcl code that evaluates the file. * .cirrus.yml: cirrus: add tclsh to FreeBSD test env * script/mt: script: mt exits in err if ts ok but review failed * testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/284-info-others.exp, testsuite/modules.50-cmds/330-source.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/170-contact.exp, testsuite/modules.70-maint/300-err_stack.exp: ts: fix expected err stack result for Tcl8.4 ran with coverage Do not match error stack output exactly as extended code block reported on Tcl8.4 differ whether tests are run with coverage enabled or disabled. 2020-03-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.20-locate/066-modulepath-rc.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/330-source.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.70-maint/090-source.exp, testsuite/modules.70-maint/140-multiargs.exp, testsuite/modules.70-maint/150-append-path.exp, testsuite/modules.70-maint/151-prepend-path.exp, testsuite/modules.70-maint/152-remove-path.exp, testsuite/modules.70-maint/170-contact.exp, testsuite/modules.70-maint/190-emptyarg.exp, testsuite/modules.70-maint/230-verbosity.exp, .../modules.70-maint/270-adv_version_spec.exp, .../modules.70-maint/271-adv_version_spec-in.exp, .../272-adv_version_spec-range.exp, testsuite/modules.70-maint/280-ml.exp, testsuite/modules.70-maint/290-json.exp, testsuite/modules.70-maint/300-err_stack.exp: ts: refactor common modulefile error msg * testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/284-info-others.exp, testsuite/modules.50-cmds/330-source.exp: ts: new err stack format expose switch block on Tcl8.4 2020-03-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Rework error stack filtering Improve error stack output format to only filter elements of the stack describing modulecmd.tcl internals. This is now achieved by comparing procedure name in the stack or its caller procedure name against interpreter known Tcl commands and procedures. If procedure or caller name in the stack is only known by modulecmd.tcl Tcl interpreter (and not modulefile or modulerc Tcl interpreter) then this element in the error stack is discarded. 2020-03-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Also report modulerc err stack trace for known error * testsuite/modules.20-locate/066-modulepath-rc.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/284-info-others.exp, testsuite/modules.50-cmds/310-puts.exp, testsuite/modules.50-cmds/330-source.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.70-maint/140-multiargs.exp, .../modules.70-maint/270-adv_version_spec.exp, .../modules.70-maint/271-adv_version_spec-in.exp, .../272-adv_version_spec-range.exp: ts: adapt module err output to display err stack * modulecmd.tcl.in: Also report modulefile err stack trace for known error When an error occurs during the evaluation of a modulefile, report associated error stack trace filtered to only output useful information for users. Errors thrown by a modulecmd.tcl procedure, only the second to last element in error stack has to be kept to hide modulecmd.tcl internals. * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.20-locate/066-modulepath-rc.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.70-maint/170-contact.exp, testsuite/modules.70-maint/300-err_stack.exp: ts: adapt err stack output for old tcl version 2020-02-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.2/bad3/.bodycommon, testsuite/modulefiles.2/bad3/.proccommon, testsuite/modulefiles.2/bad3/bodyproc, testsuite/modulefiles.2/bad3/bodysource, testsuite/modulefiles.2/bad3/procproc, testsuite/modulefiles.2/bad3/procsource, testsuite/modulefiles.2/badrc3/.modulerc, testsuite/modulefiles.2/badrc3/1, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.70-maint/300-err_stack.exp: ts: test err stack trace output in 70/300 * testsuite/modules.20-locate/066-modulepath-rc.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp: ts: adapt modulerc err output to display err stack * modulecmd.tcl.in: Report modulerc err stack trace if error is unknown When an error occurs during the evaluation of a modulerc, report associated error stack trace filtered to only output useful information for users. 2020-02-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.70-maint/090-source.exp, testsuite/modules.70-maint/140-multiargs.exp, testsuite/modules.70-maint/170-contact.exp, testsuite/modules.70-maint/200-errdisp.exp, testsuite/modules.70-maint/230-verbosity.exp, testsuite/modules.70-maint/280-ml.exp: ts: adapt module err output to display err stack * modulecmd.tcl.in: Return error thrown by puts with a specific code As `puts` procedure is specifically handled in modulefile evaluation context, also consider the errors it thrown as specific not to disclose the specific stack trace. 2020-02-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Report modulefile err stack trace if error is unknown When an error occurs during the evaluation of a modulefile, report associated error stack trace filtered to only output useful information for users. 2020-02-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: ts: test unknown issue throw in 00/120 * modulecmd.tcl.in: Encourage unknown issue report to GitHub project * modulecmd.tcl.in: Catch modulefile known errors with error codes Use specific error code (MODULES_ERR_SUBFAILED, MODULES_ERR_GLOBALTOP and MODULES_ERR_GLOBAL) rather prepending error message with a specific string to throw known errors occurring during modulefile evaluation. * modulecmd.tcl.in, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/140-color.exp: Report err stack trace for siteconfig eval errors Add to the error message the error stack trace for errors occuring during site-specific configuration evaluation. Error stack is expunged from the modulecmd.tcl internals to only report information relevant to site-specific configuration file. Introduce the `formatErrStackTrace` procedure to tailor error stack trace to filter and only keep informations that are relevant to users to understand what code is broken. * modulecmd.tcl.in: Report err stack trace if error is unknown Add to the error message the error stack trace on a global error when this error is unknown. 2020-02-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Throw known error with a specific error code Use `MODULES_ERR_KNOWN` error code to throw errors that are known to the module system. `knerror` procedure is introduced to throw error with this new specific error code set. * modulecmd.tcl.in: Render error in main's catch Define `MODULES_ERR_RENDERED` error code, used in `reportErrorAndExit` procedure to express that generated error has been rendered (error count increased and false value returned on stdout). If an error is caught in main procedure catch, render its error if not done yet (if obtained errorCode is not `MODULES_ERR_RENDERED`). So there is no more need to catch error around main call to `module` or `ml` procedure has it will be now correctly handled by main catch. Thus in this situation error will only be rendered once. 2020-02-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/005-init_ts.exp, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/140-color.exp, testsuite/modules.60-initx/080-access-initx.exp, testsuite/modules.61-coll/080-access-coll.exp, testsuite/modules.70-maint/290-json.exp: ts: adapt err msg for multi-line msg harmonization * modulecmd.tcl.in: Harmonize multi-line error message report When an error message is composed of multiple lines, render it in the same way whether it is part of a block message or not: lines after the first one are prepended with a 2-space padding. As a result error messages appear clearly separated from each other. 2020-03-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: clarify next version if not released yet 2020-03-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * script/createmodule.sh: script: handle variable value change in createmodule.sh When analyzing environment variable changes applied by shell script passed as argument, produce a `setenv` modulefile statement for any variable found set prior script evaluation and for which value is completely changed after script evaluation. Fixes #320 2020-02-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * script/nglfar2ccov: script: adapt nglfar2ccov to nagelfar new format output Analyzed script name is now reported with its path name. 2020-02-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst, modulecmd.tcl.in, testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.00-init/140-color.exp: Add support for NO_COLOR env variable Add support for the NO_COLOR environment variable (https://no-color.org/) which when set (regardess of its value) prevents the addition of ANSI color. When set, NO_COLOR prevails over CLICOLOR and CLICOLOR_FORCE environment variables. MODULES_COLOR overrides these tree variables. Fixes #310 2020-02-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile: install: rm README on 'make clean' * Makefile.inc.in, configure, init/.gitignore, init/Makefile, init/bash_completion.in, init/zsh-functions/{_module => _module.in}: init: use 'sed -r' if 'sed -E' not supported `-E` option is a *relatively* recent option of GNU sed (v4.2), yet mandatory for OS portability (as detailled in b68e44e). Adapt configure step to detect if sed option `-E` is supported and fallback to `-r` otherwise. Fixes #317 * init/bash_completion.in: init: fix bash completion script for Bash <4.0 `compopt` Bash builtin has been introduced in Bash 4.0, so using it on Bash <4.0 prints error messages. To fix this, `comptopt` availability is checked prior usage. If not available, the no-space-append behavior will not be obtained which will not be an optimal situation if the `no-indepth` mode is set for the `avail` sub-command. Fixes #318 2020-02-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/cookbook/compiler-etc-dependencies.rst: doc: clarify some statements in compiler-etc-depend recipe * doc/source/cookbook/compiler-etc-dependencies.rst: doc: add refs between sections in compiler-etc-depend recipe * .../{modules3.2.10 => modules3}/bar-defaults.out, .../{modules3.2.10 => modules3}/bar-loads.out, .../{modules3.2.10 => modules3}/bar-switch.out, .../{modules3.2.10 => modules3}/foo-avail1.out, .../{modules3.2.10 => modules3}/foo-avail2.out, .../{modules3.2.10 => modules3}/foo-defaults.out, .../{modules3.2.10 => modules3}/foo-loads.out, .../{modules3.2.10 => modules3}/foo-switch.out, .../{modules3.2.10 => modules3}/modavail.out, .../{modules3.2.10 => modules3}/modversion.out, .../{modules3.2.10 => modules3}/ompi-defaults.out, .../{modules3.2.10 => modules3}/ompi-loads1.out, .../{modules3.2.10 => modules3}/ompi-switch.out, .../{modules4.3.1 => modules4}/bar-defaults.out, .../{modules4.3.1 => modules4}/bar-loads.out, .../{modules4.3.1 => modules4}/bar-switch.out, .../{modules4.3.1 => modules4}/foo-avail1.out, .../{modules4.3.1 => modules4}/foo-avail2.out, .../{modules4.3.1 => modules4}/foo-defaults.out, .../{modules4.3.1 => modules4}/foo-loads.out, .../{modules4.3.1 => modules4}/foo-switch.out, .../{modules4.3.1 => modules4}/modavail.out, .../{modules4.3.1 => modules4}/modversion.out, .../{modules4.3.1 => modules4}/ompi-defaults.out, .../{modules4.3.1 => modules4}/ompi-loads1.out, .../{modules4.3.1 => modules4}/ompi-switch.out, .../{modules3.2.10 => modules3}/bar-defaults.out, .../{modules3.2.10 => modules3}/bar-loads.out, .../{modules3.2.10 => modules3}/bar-switch.out, .../{modules3.2.10 => modules3}/foo-avail1.out, .../{modules3.2.10 => modules3}/foo-avail2.out, .../{modules3.2.10 => modules3}/foo-defaults.out, .../{modules3.2.10 => modules3}/foo-loads.out, .../{modules3.2.10 => modules3}/foo-switch.out, .../{modules3.2.10 => modules3}/modavail.out, .../{modules3.2.10 => modules3}/modversion.out, .../{modules3.2.10 => modules3}/ompi-defaults.out, .../{modules3.2.10 => modules3}/ompi-loads1.out, .../{modules3.2.10 => modules3}/ompi-switch.out, .../{modules4.3.1 => modules4}/bar-defaults.out, .../{modules4.3.1 => modules4}/bar-loads.out, .../{modules4.3.1 => modules4}/bar-switch.out, .../{modules4.3.1 => modules4}/foo-avail1.out, .../{modules4.3.1 => modules4}/foo-avail2.out, .../{modules4.3.1 => modules4}/foo-defaults.out, .../{modules4.3.1 => modules4}/foo-loads.out, .../{modules4.3.1 => modules4}/foo-switch.out, .../{modules4.3.1 => modules4}/modavail.out, .../{modules4.3.1 => modules4}/modversion.out, .../{modules4.3.1 => modules4}/ompi-defaults.out, .../{modules4.3.1 => modules4}/ompi-loads1.out, .../{modules4.3.1 => modules4}/ompi-switch.out, .../{modules3.2.10 => modules3}/bar-defaults.out, .../{modules3.2.10 => modules3}/bar-loads.out, .../{modules3.2.10 => modules3}/bar-switch.out, .../{modules3.2.10 => modules3}/foo-avail1.out, .../{modules3.2.10 => modules3}/foo-avail2.out, .../{modules3.2.10 => modules3}/foo-defaults.out, .../{modules3.2.10 => modules3}/foo-loads.out, .../{modules3.2.10 => modules3}/foo-switch.out, .../{modules3.2.10 => modules3}/modavail.out, .../{modules3.2.10 => modules3}/modversion.out, .../{modules3.2.10 => modules3}/ompi-defaults.out, .../{modules3.2.10 => modules3}/ompi-loads1.out, .../{modules3.2.10 => modules3}/ompi-switch.out, .../{modules4.3.1 => modules4}/bar-defaults.out, .../{modules4.3.1 => modules4}/bar-loads.out, .../{modules4.3.1 => modules4}/bar-switch.out, .../{modules4.3.1 => modules4}/foo-avail1.out, .../{modules4.3.1 => modules4}/foo-avail2.out, .../{modules4.3.1 => modules4}/foo-defaults.out, .../{modules4.3.1 => modules4}/foo-loads.out, .../{modules4.3.1 => modules4}/foo-switch.out, .../{modules4.3.1 => modules4}/modavail.out, .../{modules4.3.1 => modules4}/modversion.out, .../{modules4.3.1 => modules4}/ompi-defaults.out, .../{modules4.3.1 => modules4}/ompi-loads1.out, .../{modules4.3.1 => modules4}/ompi-switch.out, .../{modules3.2.10 => modules3}/bar-defaults.out, .../{modules3.2.10 => modules3}/bar-loads.out, .../{modules3.2.10 => modules3}/bar-switch.out, .../{modules3.2.10 => modules3}/foo-avail1.out, .../{modules3.2.10 => modules3}/foo-avail2.out, .../{modules3.2.10 => modules3}/foo-defaults.out, .../{modules3.2.10 => modules3}/foo-loads.out, .../{modules3.2.10 => modules3}/foo-switch.out, .../{modules3.2.10 => modules3}/modavail.out, .../{modules3.2.10 => modules3}/modversion.out, .../{modules3.2.10 => modules3}/ompi-defaults.out, .../{modules3.2.10 => modules3}/ompi-loads1.out, .../{modules3.2.10 => modules3}/ompi-switch.out, .../{modules4.3.1 => modules4}/bar-defaults.out, .../{modules4.3.1 => modules4}/bar-loads.out, .../{modules4.3.1 => modules4}/bar-switch.out, .../{modules4.3.1 => modules4}/foo-avail1.out, .../{modules4.3.1 => modules4}/foo-avail2.out, .../{modules4.3.1 => modules4}/foo-defaults.out, .../{modules4.3.1 => modules4}/foo-loads.out, .../{modules4.3.1 => modules4}/foo-switch.out, .../{modules4.3.1 => modules4}/modavail.out, .../{modules4.3.1 => modules4}/modversion.out, .../{modules4.3.1 => modules4}/ompi-defaults.out, .../{modules4.3.1 => modules4}/ompi-loads1.out, .../{modules4.3.1 => modules4}/ompi-switch.out, doc/source/cookbook/compiler-etc-dependencies.rst: doc: refer to more generic vers name in compiler-etc-depend recipe * doc/source/cookbook/compiler-etc-dependencies.rst: doc: simplify reading of compiler-etc-depend recipe (code) 2020-02-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../example-sessions/common_code.sh, .../flavours/modules3.2.10/bar-defaults.out, .../flavours/modules3.2.10/bar-loads.out, .../flavours/modules3.2.10/bar-switch.out, .../flavours/modules3.2.10/foo-avail1.out, .../flavours/modules3.2.10/foo-avail2.out, .../flavours/modules3.2.10/foo-defaults.out, .../flavours/modules3.2.10/foo-loads.out, .../flavours/modules3.2.10/foo-switch.out, .../flavours/modules3.2.10/modavail.out, .../flavours/modules3.2.10/modversion.out, .../flavours/modules3.2.10/ompi-defaults.out, .../flavours/modules3.2.10/ompi-loads1.out, .../flavours/modules3.2.10/ompi-switch.out, .../flavours/modules4.3.1/bar-defaults.out, .../flavours/modules4.3.1/bar-loads.out, .../flavours/modules4.3.1/bar-switch.out, .../flavours/modules4.3.1/foo-avail1.out, .../flavours/modules4.3.1/foo-avail2.out, .../flavours/modules4.3.1/foo-defaults.out, .../flavours/modules4.3.1/foo-loads.out, .../flavours/modules4.3.1/foo-switch.out, .../flavours/modules4.3.1/modavail.out, .../flavours/modules4.3.1/modversion.out, .../flavours/modules4.3.1/ompi-defaults.out, .../flavours/modules4.3.1/ompi-loads1.out, .../flavours/modules4.3.1/ompi-switch.out, .../homebrewed/modules3.2.10/bar-defaults.out, .../homebrewed/modules3.2.10/bar-loads.out, .../homebrewed/modules3.2.10/bar-switch.out, .../homebrewed/modules3.2.10/foo-avail1.out, .../homebrewed/modules3.2.10/foo-avail2.out, .../homebrewed/modules3.2.10/foo-defaults.out, .../homebrewed/modules3.2.10/foo-loads.out, .../homebrewed/modules3.2.10/foo-switch.out, .../homebrewed/modules3.2.10/modavail.out, .../homebrewed/modules3.2.10/modversion.out, .../homebrewed/modules3.2.10/ompi-defaults.out, .../homebrewed/modules3.2.10/ompi-loads1.out, .../homebrewed/modules3.2.10/ompi-switch.out, .../homebrewed/modules4.3.1/bar-defaults.out, .../homebrewed/modules4.3.1/bar-loads.out, .../homebrewed/modules4.3.1/bar-switch.out, .../homebrewed/modules4.3.1/foo-avail1.out, .../homebrewed/modules4.3.1/foo-avail2.out, .../homebrewed/modules4.3.1/foo-defaults.out, .../homebrewed/modules4.3.1/foo-loads.out, .../homebrewed/modules4.3.1/foo-switch.out, .../homebrewed/modules4.3.1/modavail.out, .../homebrewed/modules4.3.1/modversion.out, .../homebrewed/modules4.3.1/ompi-defaults.out, .../homebrewed/modules4.3.1/ompi-loads1.out, .../homebrewed/modules4.3.1/ompi-switch.out, .../modulepath/modules3.2.10/bar-defaults.out, .../modulepath/modules3.2.10/bar-loads.out, .../modulepath/modules3.2.10/bar-switch.out, .../modulepath/modules3.2.10/foo-avail1.out, .../modulepath/modules3.2.10/foo-avail2.out, .../modulepath/modules3.2.10/foo-defaults.out, .../modulepath/modules3.2.10/foo-loads.out, .../modulepath/modules3.2.10/foo-switch.out, .../modulepath/modules3.2.10/modavail.out, .../modulepath/modules3.2.10/modversion.out, .../modulepath/modules3.2.10/ompi-defaults.out, .../modulepath/modules3.2.10/ompi-loads1.out, .../modulepath/modules3.2.10/ompi-switch.out, .../modulepath/modules4.3.1/bar-defaults.out, .../modulepath/modules4.3.1/bar-loads.out, .../modulepath/modules4.3.1/bar-switch.out, .../modulepath/modules4.3.1/foo-avail1.out, .../modulepath/modules4.3.1/foo-avail2.out, .../modulepath/modules4.3.1/foo-defaults.out, .../modulepath/modules4.3.1/foo-loads.out, .../modulepath/modules4.3.1/foo-switch.out, .../modulepath/modules4.3.1/modavail.out, .../modulepath/modules4.3.1/modversion.out, .../modulepath/modules4.3.1/ompi-defaults.out, .../modulepath/modules4.3.1/ompi-loads1.out, .../modulepath/modules4.3.1/ompi-switch.out, .../modulerc/modules3.2.10/bar-defaults.out, .../modulerc/modules3.2.10/bar-loads.out, .../modulerc/modules3.2.10/bar-switch.out, .../modulerc/modules3.2.10/foo-avail1.out, .../modulerc/modules3.2.10/foo-avail2.out, .../modulerc/modules3.2.10/foo-defaults.out, .../modulerc/modules3.2.10/foo-loads.out, .../modulerc/modules3.2.10/foo-switch.out, .../modulerc/modules3.2.10/modavail.out, .../modulerc/modules3.2.10/modversion.out, .../modulerc/modules3.2.10/ompi-defaults.out, .../modulerc/modules3.2.10/ompi-loads1.out, .../modulerc/modules3.2.10/ompi-switch.out, .../modulerc/modules4.3.1/bar-defaults.out, .../modulerc/modules4.3.1/bar-loads.out, .../modulerc/modules4.3.1/bar-switch.out, .../modulerc/modules4.3.1/foo-avail1.out, .../modulerc/modules4.3.1/foo-avail2.out, .../modulerc/modules4.3.1/foo-defaults.out, .../modulerc/modules4.3.1/foo-loads.out, .../modulerc/modules4.3.1/foo-switch.out, .../modulerc/modules4.3.1/modavail.out, .../modulerc/modules4.3.1/modversion.out, .../modulerc/modules4.3.1/ompi-defaults.out, .../modulerc/modules4.3.1/ompi-loads1.out, .../modulerc/modules4.3.1/ompi-switch.out, .../tcllib/LoadedCompMatches.tcl, .../tcllib/LoadedMpiMatches.tcl, .../tcllib/WarningUtils.tcl, doc/source/cookbook/compiler-etc-dependencies.rst: doc: improve console output reading of compiler-etc-depend recipe * doc/source/cookbook/compiler-etc-dependencies.rst: doc: adopt neutral tone compiler-etc-depend recipe * doc/source/cookbook/compiler-etc-dependencies.rst: doc: add ref to ext tools mentionned in compiler-etc-depend recipe * doc/source/cookbook/compiler-etc-dependencies.rst: doc: normalize rst section/link syntax in compiler-etc-depend recipe * doc/source/cookbook/compiler-etc-dependencies.rst: doc: fix typos in compiler-etc-depend recipe * .../compiler-etc-dependencies/flavours/bar/4.7, .../compiler-etc-dependencies/flavours/bar/5.4, .../compiler-etc-dependencies/flavours/bar/common, .../compiler-etc-dependencies/flavours/foo/1.1, .../compiler-etc-dependencies/flavours/foo/2.4, .../compiler-etc-dependencies/flavours/foo/common, .../compiler-etc-dependencies/flavours/gnu/8.2.0, .../compiler-etc-dependencies/flavours/gnu/9.1.0, .../compiler-etc-dependencies/flavours/gnu/common, .../compiler-etc-dependencies/flavours/intel/2018, .../compiler-etc-dependencies/flavours/intel/2019, .../flavours/intel/common, .../flavours/intelmpi/default, .../compiler-etc-dependencies/flavours/mvapich/2.1, .../flavours/mvapich/2.3.1, .../flavours/mvapich/common, .../compiler-etc-dependencies/flavours/openmpi/3.1, .../compiler-etc-dependencies/flavours/openmpi/4.0, .../flavours/openmpi/common, .../compiler-etc-dependencies/flavours/pgi/18.4, .../compiler-etc-dependencies/flavours/pgi/19.4, .../compiler-etc-dependencies/flavours/pgi/common, .../compiler-etc-dependencies/flavours/simd/avx, .../compiler-etc-dependencies/flavours/simd/avx2, .../compiler-etc-dependencies/flavours/simd/common, .../compiler-etc-dependencies/flavours/simd/sse4.1, .../compiler-etc-dependencies/homebrewed/bar/4.7, .../compiler-etc-dependencies/homebrewed/bar/5.4, .../homebrewed/bar/common, .../compiler-etc-dependencies/homebrewed/foo/1.1, .../compiler-etc-dependencies/homebrewed/foo/2.4, .../homebrewed/foo/common, .../compiler-etc-dependencies/homebrewed/gcc/8.2.0, .../compiler-etc-dependencies/homebrewed/gcc/9.1.0, .../homebrewed/gcc/common, .../homebrewed/intel/2018, .../homebrewed/intel/2019, .../homebrewed/intel/common, .../homebrewed/intelmpi/default, .../homebrewed/mvapich/2.1, .../homebrewed/mvapich/2.3.1, .../homebrewed/mvapich/common, .../homebrewed/openmpi/3.1, .../homebrewed/openmpi/4.0, .../homebrewed/openmpi/common, .../compiler-etc-dependencies/homebrewed/pgi/18.4, .../compiler-etc-dependencies/homebrewed/pgi/19.4, .../homebrewed/pgi/common, .../compiler-etc-dependencies/homebrewed/simd/avx, .../compiler-etc-dependencies/homebrewed/simd/avx2, .../homebrewed/simd/common, .../homebrewed/simd/sse4.1, .../modrc_common/modulerc.default_lowest_simd, .../modrc_common/modulerc.select_compiler_family, .../modrc_common/modulerc.select_compiler_version, .../modrc_common/modulerc.select_mpi_family, .../modrc_common/modulerc.select_mpi_version, .../modulepath/Compiler/gcc/8.2.0/bar/4.7/avx, .../modulepath/Compiler/gcc/8.2.0/bar/4.7/sse4.1, .../modulepath/Compiler/gcc/8.2.0/foo/1.1, .../modulepath/Compiler/gcc/8.2.0/mvapich/2.1, .../modulepath/Compiler/gcc/8.2.0/openmpi/3.1, .../modulepath/Compiler/gcc/9.1.0/bar/5.4/avx, .../modulepath/Compiler/gcc/9.1.0/bar/5.4/avx2, .../modulepath/Compiler/gcc/9.1.0/foo/2.4, .../modulepath/Compiler/gcc/9.1.0/mvapich/2.1, .../modulepath/Compiler/gcc/9.1.0/mvapich/2.3.1, .../modulepath/Compiler/gcc/9.1.0/openmpi/3.1, .../modulepath/Compiler/gcc/9.1.0/openmpi/4.0, .../modulepath/Compiler/intel/2018/foo/1.1, .../Compiler/intel/2018/intelmpi/default, .../modulepath/Compiler/intel/2018/mvapich/2.1, .../modulepath/Compiler/intel/2018/openmpi/3.1, .../modulepath/Compiler/intel/2019/foo/2.4, .../Compiler/intel/2019/intelmpi/default, .../modulepath/Compiler/intel/2019/mvapich/2.1, .../modulepath/Compiler/intel/2019/mvapich/2.3.1, .../modulepath/Compiler/intel/2019/openmpi/3.1, .../modulepath/Compiler/intel/2019/openmpi/4.0, .../modulepath/Compiler/pgi/18.4/foo/1.1, .../modulepath/Compiler/pgi/18.4/mvapich/2.1, .../modulepath/Compiler/pgi/18.4/openmpi/3.1, .../modulepath/Compiler/pgi/19.4/foo/2.4, .../modulepath/Compiler/pgi/19.4/mvapich/2.1, .../modulepath/Compiler/pgi/19.4/mvapich/2.3.1, .../modulepath/Compiler/pgi/19.4/openmpi/3.1, .../modulepath/Compiler/pgi/19.4/openmpi/4.0, .../CompilerMPI/gcc/8.2.0/mvapich/2.1/foo/1.1, .../CompilerMPI/gcc/8.2.0/openmpi/3.1/foo/1.1, .../CompilerMPI/gcc/9.1.0/mvapich/2.3.1/foo/2.4, .../CompilerMPI/gcc/9.1.0/openmpi/4.0/foo/2.4, .../intel/2018/intelmpi/default/foo/1.1, .../CompilerMPI/intel/2018/mvapich/2.1/foo/1.1, .../CompilerMPI/intel/2018/openmpi/3.1/foo/1.1, .../intel/2019/intelmpi/default/foo/2.4, .../CompilerMPI/intel/2019/mvapich/2.3.1/foo/2.4, .../CompilerMPI/intel/2019/openmpi/4.0/foo/2.4, .../CompilerMPI/pgi/18.4/mvapich/2.1/foo/1.1, .../CompilerMPI/pgi/18.4/openmpi/3.1/foo/1.1, .../CompilerMPI/pgi/19.4/openmpi/3.1/foo/2.4, .../19.4/openmpi/4.0/{REAMDE.txt => README.txt}, .../modulepath/Core/gcc/8.2.0, .../modulepath/Core/gcc/9.1.0, .../modulepath/Core/gcc/common, .../modulepath/Core/intel/2018, .../modulepath/Core/intel/2019, .../modulepath/Core/intel/common, .../modulepath/Core/pgi/18.4, .../modulepath/Core/pgi/19.4, .../modulepath/Core/pgi/common, .../modulepath/common/bar/common, .../modulepath/common/foo/common, .../modulepath/common/intelmpi/common, .../modulepath/common/mvapich/common, .../modulepath/common/openmpi/common, .../compiler-etc-dependencies/modulerc3/bar/common, .../compiler-etc-dependencies/modulerc3/foo/common, .../modulerc3/mvapich/common, .../modulerc3/openmpi/common, .../modulerc4/bar/4.7/gcc/8.2.0/avx, .../modulerc4/bar/4.7/gcc/8.2.0/sse4.1, .../modulerc4/bar/5.4/gcc/9.1.0/avx, .../modulerc4/bar/5.4/gcc/9.1.0/avx2, .../compiler-etc-dependencies/modulerc4/bar/common, .../modulerc4/foo/1.1/gcc/8.2.0/mvapich/2.1, .../modulerc4/foo/1.1/gcc/8.2.0/nompi, .../modulerc4/foo/1.1/gcc/8.2.0/openmpi/3.1, .../modulerc4/foo/1.1/intel/2018/intelmpi, .../modulerc4/foo/1.1/intel/2018/mvapich/2.1, .../modulerc4/foo/1.1/intel/2018/nompi, .../modulerc4/foo/1.1/intel/2018/openmpi/3.1, .../modulerc4/foo/1.1/pgi/18.4/mvapich/2.1, .../modulerc4/foo/1.1/pgi/18.4/nompi, .../modulerc4/foo/1.1/pgi/18.4/openmpi/3.1, .../modulerc4/foo/2.4/gcc/9.1.0/mvapich/2.3.1, .../modulerc4/foo/2.4/gcc/9.1.0/nompi, .../modulerc4/foo/2.4/gcc/9.1.0/openmpi/4.0, .../modulerc4/foo/2.4/intel/2019/intelmpi, .../modulerc4/foo/2.4/intel/2019/mvapich/2.3.1, .../modulerc4/foo/2.4/intel/2019/nompi, .../modulerc4/foo/2.4/intel/2019/openmpi/4.0, .../modulerc4/foo/2.4/pgi/19.4/nompi, .../modulerc4/foo/2.4/pgi/19.4/openmpi/3.1, .../compiler-etc-dependencies/modulerc4/foo/common, .../compiler-etc-dependencies/modulerc4/gcc/8.2.0, .../compiler-etc-dependencies/modulerc4/gcc/9.1.0, .../compiler-etc-dependencies/modulerc4/gcc/common, .../compiler-etc-dependencies/modulerc4/intel/2018, .../compiler-etc-dependencies/modulerc4/intel/2019, .../modulerc4/intel/common, .../modulerc4/mvapich/2.1/gcc/8.2.0, .../modulerc4/mvapich/2.1/gcc/9.1.0, .../modulerc4/mvapich/2.1/intel/2018, .../modulerc4/mvapich/2.1/intel/2019, .../modulerc4/mvapich/2.1/pgi/18.4, .../modulerc4/mvapich/2.1/pgi/19.4, .../modulerc4/mvapich/2.3.1/gcc/9.1.0, .../modulerc4/mvapich/2.3.1/intel/2019, .../modulerc4/mvapich/2.3.1/pgi/19.4, .../modulerc4/mvapich/common, .../modulerc4/openmpi/3.1/gcc/8.2.0, .../modulerc4/openmpi/3.1/gcc/9.1.0, .../modulerc4/openmpi/3.1/intel/2018, .../modulerc4/openmpi/3.1/intel/2019, .../modulerc4/openmpi/3.1/pgi/18.4, .../modulerc4/openmpi/3.1/pgi/19.4, .../modulerc4/openmpi/4.0/gcc/9.1.0, .../modulerc4/openmpi/4.0/intel/2019, .../modulerc4/openmpi/4.0/pgi/19.4, .../modulerc4/openmpi/common, .../compiler-etc-dependencies/modulerc4/pgi/18.4, .../compiler-etc-dependencies/modulerc4/pgi/19.4, .../compiler-etc-dependencies/modulerc4/pgi/common, doc/source/cookbook/compiler-etc-dependencies.rst: doc: normalize code of modulefile of compiler-etc-depend recipe And include these modulefile examples as Tcl code in recipe document to get their content highlighted. 2020-02-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../tcllib/ChildModules.tcl, .../tcllib/CompilerFromPath.tcl, .../tcllib/CompilerUtils.tcl, .../compiler-etc-dependencies/tcllib/GetFamVer.tcl, .../tcllib/LoadedCompMatches.tcl, .../tcllib/LoadedModules.tcl, .../tcllib/LoadedMpiMatches.tcl, .../compiler-etc-dependencies/tcllib/MpiUtils.tcl, .../tcllib/WarningUtils.tcl, .../tcllib/common_utilities.tcl, .../compiler-etc-dependencies/tcllib/temp.tcl, doc/source/cookbook/compiler-etc-dependencies.rst: doc: normalize code of Tcl lib of compiler-etc-depend recipe Add authorship information, same header and comment structure for all Tcl files to include these files in cookbook recipe document with Tcl syntax highlight. * doc/source/cookbook/compiler-etc-dependencies.rst: doc: fix broken refs in compiler-etc-depend recipe 2020-02-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../flavours/modules3.2.10/foo-avail1.out, .../flavours/modules3.2.10/foo-avail2.out, .../flavours/modules3.2.10/modavail.out, .../flavours/modules4.3.1/bar-loads.out, .../flavours/modules4.3.1/bar-switch.out, .../flavours/modules4.3.1/foo-avail1.out, .../flavours/modules4.3.1/foo-avail2.out, .../flavours/modules4.3.1/foo-defaults.out, .../flavours/modules4.3.1/foo-loads.out, .../flavours/modules4.3.1/foo-switch.out, .../flavours/modules4.3.1/modavail.out, .../flavours/modules4.3.1/ompi-defaults.out, .../flavours/modules4.3.1/ompi-loads1.out, .../flavours/modules4.3.1/ompi-switch.out, .../example-sessions/foo-loads.sh, .../homebrewed/modules3.2.10/foo-avail1.out, .../homebrewed/modules3.2.10/foo-avail2.out, .../homebrewed/modules3.2.10/modavail.out, .../homebrewed/modules4.3.1/bar-defaults.out, .../homebrewed/modules4.3.1/bar-loads.out, .../homebrewed/modules4.3.1/bar-switch.out, .../homebrewed/modules4.3.1/foo-avail1.out, .../homebrewed/modules4.3.1/foo-avail2.out, .../homebrewed/modules4.3.1/foo-defaults.out, .../homebrewed/modules4.3.1/foo-loads.out, .../homebrewed/modules4.3.1/foo-switch.out, .../homebrewed/modules4.3.1/modavail.out, .../homebrewed/modules4.3.1/ompi-defaults.out, .../homebrewed/modules4.3.1/ompi-loads1.out, .../homebrewed/modules4.3.1/ompi-switch.out, .../modulepath/modules3.2.10/foo-avail1.out, .../modulepath/modules3.2.10/modavail.out, .../modulepath/modules4.3.1/bar-defaults.out, .../modulepath/modules4.3.1/bar-loads.out, .../modulepath/modules4.3.1/bar-switch.out, .../modulepath/modules4.3.1/foo-avail1.out, .../modulepath/modules4.3.1/foo-defaults.out, .../modulepath/modules4.3.1/foo-loads.out, .../modulepath/modules4.3.1/foo-switch.out, .../modulepath/modules4.3.1/modavail.out, .../modulepath/modules4.3.1/ompi-defaults.out, .../modulepath/modules4.3.1/ompi-loads1.out, .../modulepath/modules4.3.1/ompi-switch.out, .../modulerc/modules3.2.10/foo-avail1.out, .../modulerc/modules3.2.10/foo-avail2.out, .../modulerc/modules3.2.10/modavail.out, .../modulerc/modules4.3.1/bar-defaults.out, .../modulerc/modules4.3.1/bar-loads.out, .../modulerc/modules4.3.1/bar-switch.out, .../modulerc/modules4.3.1/foo-avail1.out, .../modulerc/modules4.3.1/foo-avail2.out, .../modulerc/modules4.3.1/foo-defaults.out, .../modulerc/modules4.3.1/foo-loads.out, .../modulerc/modules4.3.1/foo-switch.out, .../modulerc/modules4.3.1/modavail.out, .../modulerc/modules4.3.1/ompi-defaults.out, .../modulerc/modules4.3.1/ompi-loads1.out, .../modulerc/modules4.3.1/ompi-switch.out, .../example-sessions/ompi-switch.sh, .../compiler-etc-dependencies/flavours/gnu/common, .../flavours/intel/common, .../flavours/openmpi/common, .../compiler-etc-dependencies/flavours/pgi/common, .../homebrewed/foo/common, .../homebrewed/gcc/common, .../homebrewed/intel/common, .../homebrewed/pgi/common, .../homebrewed/simd/common, .../modrc_common/modulerc.default_lowest_simd, .../modrc_common/modulerc.select_compiler_family, .../modrc_common/modulerc.select_compiler_version, .../modrc_common/modulerc.select_mpi_family, .../modrc_common/modulerc.select_mpi_version, .../CompilerMPI/pgi/19.4/openmpi/4.0/REAMDE.txt, .../modulepath/Core/gcc/common, .../modulepath/Core/intel/common, .../modulepath/Core/pgi/common, .../modulepath/common/intelmpi/common, .../modulepath/common/mvapich/common, .../modulepath/common/openmpi/common, .../modulerc3/mvapich/common, .../modulerc3/openmpi/common, .../compiler-etc-dependencies/modulerc4/gcc/common, .../modulerc4/intel/common, .../modulerc4/mvapich/common, .../modulerc4/openmpi/common, .../compiler-etc-dependencies/modulerc4/pgi/common, .../tcllib/ChildModules.tcl, .../tcllib/CompilerFromPath.tcl, .../tcllib/CompilerUtils.tcl, .../compiler-etc-dependencies/tcllib/GetFamVer.tcl, .../tcllib/LoadedCompMatches.tcl, .../tcllib/LoadedMpiMatches.tcl, .../compiler-etc-dependencies/tcllib/MpiUtils.tcl, .../tcllib/WarningUtils.tcl, .../tcllib/common_utilities.tcl, .../compiler-etc-dependencies/tcllib/temp.tcl: doc: simplify reading of compiler-etc-depend recipe (trailing space) * .../flavours/modules3.2.10/bar-loads.out, .../flavours/modules3.2.10/bar-switch.out, .../flavours/modules3.2.10/foo-loads.out, .../flavours/modules3.2.10/foo-switch.out, .../flavours/modules3.2.10/ompi-loads1.out, .../flavours/modules3.2.10/ompi-switch.out, .../flavours/modules4.3.1/bar-loads.out, .../flavours/modules4.3.1/bar-switch.out, .../flavours/modules4.3.1/foo-loads.out, .../flavours/modules4.3.1/foo-switch.out, .../flavours/modules4.3.1/ompi-loads1.out, .../flavours/modules4.3.1/ompi-switch.out, .../homebrewed/modules3.2.10/bar-loads.out, .../homebrewed/modules3.2.10/bar-switch.out, .../homebrewed/modules3.2.10/foo-loads.out, .../homebrewed/modules3.2.10/foo-switch.out, .../homebrewed/modules3.2.10/ompi-loads1.out, .../homebrewed/modules3.2.10/ompi-switch.out, .../homebrewed/modules4.3.1/bar-defaults.out, .../homebrewed/modules4.3.1/bar-loads.out, .../homebrewed/modules4.3.1/bar-switch.out, .../homebrewed/modules4.3.1/foo-defaults.out, .../homebrewed/modules4.3.1/foo-loads.out, .../homebrewed/modules4.3.1/foo-switch.out, .../homebrewed/modules4.3.1/ompi-defaults.out, .../homebrewed/modules4.3.1/ompi-loads1.out, .../homebrewed/modules4.3.1/ompi-switch.out, .../modulepath/modules3.2.10/bar-defaults.out, .../modulepath/modules3.2.10/bar-loads.out, .../modulepath/modules3.2.10/bar-switch.out, .../modulepath/modules3.2.10/foo-defaults.out, .../modulepath/modules3.2.10/foo-loads.out, .../modulepath/modules3.2.10/foo-switch.out, .../modulepath/modules3.2.10/ompi-defaults.out, .../modulepath/modules3.2.10/ompi-loads1.out, .../modulepath/modules3.2.10/ompi-switch.out, .../modulepath/modules4.3.1/bar-defaults.out, .../modulepath/modules4.3.1/bar-loads.out, .../modulepath/modules4.3.1/bar-switch.out, .../modulepath/modules4.3.1/foo-defaults.out, .../modulepath/modules4.3.1/foo-loads.out, .../modulepath/modules4.3.1/foo-switch.out, .../modulepath/modules4.3.1/ompi-defaults.out, .../modulepath/modules4.3.1/ompi-loads1.out, .../modulepath/modules4.3.1/ompi-switch.out, .../modulerc/modules3.2.10/bar-defaults.out, .../modulerc/modules3.2.10/bar-loads.out, .../modulerc/modules3.2.10/bar-switch.out, .../modulerc/modules3.2.10/foo-defaults.out, .../modulerc/modules3.2.10/foo-loads.out, .../modulerc/modules3.2.10/foo-switch.out, .../modulerc/modules3.2.10/ompi-defaults.out, .../modulerc/modules3.2.10/ompi-loads1.out, .../modulerc/modules3.2.10/ompi-switch.out, .../modulerc/modules4.3.1/bar-defaults.out, .../modulerc/modules4.3.1/bar-loads.out, .../modulerc/modules4.3.1/bar-switch.out, .../modulerc/modules4.3.1/foo-defaults.out, .../modulerc/modules4.3.1/foo-loads.out, .../modulerc/modules4.3.1/foo-switch.out, .../modulerc/modules4.3.1/ompi-defaults.out, .../modulerc/modules4.3.1/ompi-loads1.out, .../modulerc/modules4.3.1/ompi-switch.out, .../fake-sw-root/bar/4.7/gcc/8.2.0/avx/bin/bar, .../fake-sw-root/bar/4.7/gcc/8.2.0/sse4.1/bin/bar, .../fake-sw-root/bar/5.4/gcc/9.1.0/avx/bin/bar, .../fake-sw-root/bar/5.4/gcc/9.1.0/avx2/bin/bar, .../fake-sw-root/foo/1.1/gcc/8.2.0/mvapich/2.1/bin/foo, .../fake-sw-root/foo/1.1/gcc/8.2.0/nompi/bin/foo, .../fake-sw-root/foo/1.1/gcc/8.2.0/openmpi/3.1/bin/foo, .../fake-sw-root/foo/1.1/intel/2018/intelmpi/bin/foo, .../foo/1.1/intel/2018/mvapich/2.1/bin/foo, .../fake-sw-root/foo/1.1/intel/2018/nompi/bin/foo, .../foo/1.1/intel/2018/openmpi/3.1/bin/foo, .../fake-sw-root/foo/1.1/pgi/18.4/mvapich/2.1/bin/foo, .../fake-sw-root/foo/1.1/pgi/18.4/nompi/bin/foo, .../fake-sw-root/foo/1.1/pgi/18.4/openmpi/3.1/bin/foo, .../foo/2.4/gcc/9.1.0/mvapich/2.3.1/bin/foo, .../fake-sw-root/foo/2.4/gcc/9.1.0/nompi/bin/foo, .../fake-sw-root/foo/2.4/gcc/9.1.0/openmpi/4.0/bin/foo, .../fake-sw-root/foo/2.4/intel/2019/intelmpi/bin/foo, .../foo/2.4/intel/2019/mvapich/2.3.1/bin/foo, .../fake-sw-root/foo/2.4/intel/2019/nompi/bin/foo, .../foo/2.4/intel/2019/openmpi/4.0/bin/foo, .../fake-sw-root/foo/2.4/pgi/19.4/nompi/bin/foo, .../fake-sw-root/foo/2.4/pgi/19.4/openmpi/3.1/bin/foo, .../fake-sw-root/gcc/8.2.0/bin/gcc, .../fake-sw-root/gcc/9.1.0/bin/gcc, .../fake-sw-root/intel/2018/bin/icc, .../fake-sw-root/intel/2019/bin/icc, .../fake-sw-root/mvapich/2.1/gcc/8.2.0/bin/mpirun, .../fake-sw-root/mvapich/2.1/gcc/9.1.0/bin/mpirun, .../fake-sw-root/mvapich/2.1/intel/2018/bin/mpirun, .../fake-sw-root/mvapich/2.1/intel/2019/bin/mpirun, .../fake-sw-root/mvapich/2.1/pgi/18.4/bin/mpirun, .../fake-sw-root/mvapich/2.1/pgi/19.4/bin/mpirun, .../fake-sw-root/mvapich/2.3.1/gcc/9.1.0/bin/mpirun, .../fake-sw-root/mvapich/2.3.1/intel/2019/bin/mpirun, .../fake-sw-root/mvapich/2.3.1/pgi/19.4/bin/mpirun, .../fake-sw-root/openmpi/3.1/gcc/8.2.0/bin/mpirun, .../fake-sw-root/openmpi/3.1/gcc/9.1.0/bin/mpirun, .../fake-sw-root/openmpi/3.1/intel/2018/bin/mpirun, .../fake-sw-root/openmpi/3.1/intel/2019/bin/mpirun, .../fake-sw-root/openmpi/3.1/pgi/18.4/bin/mpirun, .../fake-sw-root/openmpi/3.1/pgi/19.4/bin/mpirun, .../fake-sw-root/openmpi/4.0/gcc/9.1.0/bin/mpirun, .../fake-sw-root/openmpi/4.0/intel/2019/bin/mpirun, .../fake-sw-root/openmpi/4.0/pgi/19.4/bin/mpirun, .../fake-sw-root/pgi/18.4/bin/pgcc, .../fake-sw-root/pgi/19.4/bin/pgcc, doc/example/compiler-etc-dependencies/flavours/bar/4.7, doc/example/compiler-etc-dependencies/flavours/bar/5.4, .../compiler-etc-dependencies/flavours/bar/common, doc/example/compiler-etc-dependencies/flavours/foo/1.1, doc/example/compiler-etc-dependencies/flavours/foo/2.4, .../compiler-etc-dependencies/flavours/foo/common, .../compiler-etc-dependencies/flavours/gnu/8.2.0, .../compiler-etc-dependencies/flavours/gnu/9.1.0, .../compiler-etc-dependencies/flavours/gnu/common, .../compiler-etc-dependencies/flavours/intel/2018, .../compiler-etc-dependencies/flavours/intel/2019, .../compiler-etc-dependencies/flavours/intel/common, .../compiler-etc-dependencies/flavours/mvapich/2.1, .../compiler-etc-dependencies/flavours/mvapich/2.3.1, .../compiler-etc-dependencies/flavours/mvapich/common, .../compiler-etc-dependencies/flavours/openmpi/3.1, .../compiler-etc-dependencies/flavours/openmpi/4.0, .../compiler-etc-dependencies/flavours/openmpi/common, .../compiler-etc-dependencies/flavours/pgi/18.4, .../compiler-etc-dependencies/flavours/pgi/19.4, .../compiler-etc-dependencies/flavours/pgi/common, .../compiler-etc-dependencies/homebrewed/bar/4.7, .../compiler-etc-dependencies/homebrewed/bar/5.4, .../compiler-etc-dependencies/homebrewed/bar/common, .../compiler-etc-dependencies/homebrewed/foo/1.1, .../compiler-etc-dependencies/homebrewed/foo/2.4, .../compiler-etc-dependencies/homebrewed/foo/common, .../compiler-etc-dependencies/homebrewed/gcc/8.2.0, .../compiler-etc-dependencies/homebrewed/gcc/9.1.0, .../compiler-etc-dependencies/homebrewed/gcc/common, .../compiler-etc-dependencies/homebrewed/intel/2018, .../compiler-etc-dependencies/homebrewed/intel/2019, .../compiler-etc-dependencies/homebrewed/intel/common, .../compiler-etc-dependencies/homebrewed/mvapich/2.1, .../compiler-etc-dependencies/homebrewed/mvapich/2.3.1, .../homebrewed/mvapich/common, .../compiler-etc-dependencies/homebrewed/openmpi/3.1, .../compiler-etc-dependencies/homebrewed/openmpi/4.0, .../homebrewed/openmpi/common, .../compiler-etc-dependencies/homebrewed/pgi/18.4, .../compiler-etc-dependencies/homebrewed/pgi/19.4, .../compiler-etc-dependencies/homebrewed/pgi/common, .../modulepath/Compiler/gcc/8.2.0/bar/4.7/avx, .../modulepath/Compiler/gcc/8.2.0/bar/4.7/sse4.1, .../modulepath/Compiler/gcc/8.2.0/foo/1.1, .../modulepath/Compiler/gcc/8.2.0/mvapich/2.1, .../modulepath/Compiler/gcc/8.2.0/openmpi/3.1, .../modulepath/Compiler/gcc/9.1.0/bar/5.4/avx, .../modulepath/Compiler/gcc/9.1.0/bar/5.4/avx2, .../modulepath/Compiler/gcc/9.1.0/foo/2.4, .../modulepath/Compiler/gcc/9.1.0/mvapich/2.1, .../modulepath/Compiler/gcc/9.1.0/mvapich/2.3.1, .../modulepath/Compiler/gcc/9.1.0/openmpi/3.1, .../modulepath/Compiler/gcc/9.1.0/openmpi/4.0, .../modulepath/Compiler/intel/2018/foo/1.1, .../modulepath/Compiler/intel/2018/intelmpi/default, .../modulepath/Compiler/intel/2018/mvapich/2.1, .../modulepath/Compiler/intel/2018/openmpi/3.1, .../modulepath/Compiler/intel/2019/foo/2.4, .../modulepath/Compiler/intel/2019/intelmpi/default, .../modulepath/Compiler/intel/2019/mvapich/2.1, .../modulepath/Compiler/intel/2019/mvapich/2.3.1, .../modulepath/Compiler/intel/2019/openmpi/3.1, .../modulepath/Compiler/intel/2019/openmpi/4.0, .../modulepath/Compiler/pgi/18.4/foo/1.1, .../modulepath/Compiler/pgi/18.4/mvapich/2.1, .../modulepath/Compiler/pgi/18.4/openmpi/3.1, .../modulepath/Compiler/pgi/19.4/foo/2.4, .../modulepath/Compiler/pgi/19.4/mvapich/2.1, .../modulepath/Compiler/pgi/19.4/mvapich/2.3.1, .../modulepath/Compiler/pgi/19.4/openmpi/3.1, .../modulepath/Compiler/pgi/19.4/openmpi/4.0, .../CompilerMPI/gcc/8.2.0/mvapich/2.1/foo/1.1, .../CompilerMPI/gcc/8.2.0/openmpi/3.1/foo/1.1, .../CompilerMPI/gcc/9.1.0/mvapich/2.3.1/foo/2.4, .../CompilerMPI/gcc/9.1.0/openmpi/4.0/foo/2.4, .../CompilerMPI/intel/2018/intelmpi/default/foo/1.1, .../CompilerMPI/intel/2018/mvapich/2.1/foo/1.1, .../CompilerMPI/intel/2018/openmpi/3.1/foo/1.1, .../CompilerMPI/intel/2019/intelmpi/default/foo/2.4, .../CompilerMPI/intel/2019/mvapich/2.3.1/foo/2.4, .../CompilerMPI/intel/2019/openmpi/4.0/foo/2.4, .../CompilerMPI/pgi/18.4/mvapich/2.1/foo/1.1, .../CompilerMPI/pgi/18.4/openmpi/3.1/foo/1.1, .../CompilerMPI/pgi/19.4/openmpi/3.1/foo/2.4, .../modulepath/Core/gcc/8.2.0, .../modulepath/Core/gcc/9.1.0, .../modulepath/Core/gcc/common, .../modulepath/Core/intel/2018, .../modulepath/Core/intel/2019, .../modulepath/Core/intel/common, .../compiler-etc-dependencies/modulepath/Core/pgi/18.4, .../compiler-etc-dependencies/modulepath/Core/pgi/19.4, .../modulepath/Core/pgi/common, .../modulepath/common/bar/common, .../modulepath/common/foo/common, .../modulepath/common/mvapich/common, .../modulepath/common/openmpi/common, .../compiler-etc-dependencies/modulerc3/bar/common, .../compiler-etc-dependencies/modulerc3/foo/common, .../compiler-etc-dependencies/modulerc3/mvapich/common, .../compiler-etc-dependencies/modulerc3/openmpi/common, .../modulerc4/bar/4.7/gcc/8.2.0/avx, .../modulerc4/bar/4.7/gcc/8.2.0/sse4.1, .../modulerc4/bar/5.4/gcc/9.1.0/avx, .../modulerc4/bar/5.4/gcc/9.1.0/avx2, .../compiler-etc-dependencies/modulerc4/bar/common, .../modulerc4/foo/1.1/gcc/8.2.0/mvapich/2.1, .../modulerc4/foo/1.1/gcc/8.2.0/nompi, .../modulerc4/foo/1.1/gcc/8.2.0/openmpi/3.1, .../modulerc4/foo/1.1/intel/2018/intelmpi, .../modulerc4/foo/1.1/intel/2018/mvapich/2.1, .../modulerc4/foo/1.1/intel/2018/nompi, .../modulerc4/foo/1.1/intel/2018/openmpi/3.1, .../modulerc4/foo/1.1/pgi/18.4/mvapich/2.1, .../modulerc4/foo/1.1/pgi/18.4/nompi, .../modulerc4/foo/1.1/pgi/18.4/openmpi/3.1, .../modulerc4/foo/2.4/gcc/9.1.0/mvapich/2.3.1, .../modulerc4/foo/2.4/gcc/9.1.0/nompi, .../modulerc4/foo/2.4/gcc/9.1.0/openmpi/4.0, .../modulerc4/foo/2.4/intel/2019/intelmpi, .../modulerc4/foo/2.4/intel/2019/mvapich/2.3.1, .../modulerc4/foo/2.4/intel/2019/nompi, .../modulerc4/foo/2.4/intel/2019/openmpi/4.0, .../modulerc4/foo/2.4/pgi/19.4/nompi, .../modulerc4/foo/2.4/pgi/19.4/openmpi/3.1, .../compiler-etc-dependencies/modulerc4/foo/common, .../compiler-etc-dependencies/modulerc4/gcc/8.2.0, .../compiler-etc-dependencies/modulerc4/gcc/9.1.0, .../compiler-etc-dependencies/modulerc4/gcc/common, .../compiler-etc-dependencies/modulerc4/intel/2018, .../compiler-etc-dependencies/modulerc4/intel/2019, .../compiler-etc-dependencies/modulerc4/intel/common, .../modulerc4/mvapich/2.1/gcc/8.2.0, .../modulerc4/mvapich/2.1/gcc/9.1.0, .../modulerc4/mvapich/2.1/intel/2018, .../modulerc4/mvapich/2.1/intel/2019, .../modulerc4/mvapich/2.1/pgi/18.4, .../modulerc4/mvapich/2.1/pgi/19.4, .../modulerc4/mvapich/2.3.1/gcc/9.1.0, .../modulerc4/mvapich/2.3.1/intel/2019, .../modulerc4/mvapich/2.3.1/pgi/19.4, .../compiler-etc-dependencies/modulerc4/mvapich/common, .../modulerc4/openmpi/3.1/gcc/8.2.0, .../modulerc4/openmpi/3.1/gcc/9.1.0, .../modulerc4/openmpi/3.1/intel/2018, .../modulerc4/openmpi/3.1/intel/2019, .../modulerc4/openmpi/3.1/pgi/18.4, .../modulerc4/openmpi/3.1/pgi/19.4, .../modulerc4/openmpi/4.0/gcc/9.1.0, .../modulerc4/openmpi/4.0/intel/2019, .../modulerc4/openmpi/4.0/pgi/19.4, .../compiler-etc-dependencies/modulerc4/openmpi/common, .../compiler-etc-dependencies/modulerc4/pgi/18.4, .../compiler-etc-dependencies/modulerc4/pgi/19.4, .../compiler-etc-dependencies/modulerc4/pgi/common, doc/source/cookbook/compiler-etc-dependencies.rst: doc: simplify reading of compiler-etc-depend recipe (dummy) 2019-12-20 Tom Payerle <payerle@umd.edu> * .../example-sessions/bar-defaults.sh, .../example-sessions/bar-loads.sh, .../example-sessions/bar-switch.sh, .../example-sessions/common_code.sh, .../flavours/modules3.2.10/bar-defaults.out, .../flavours/modules3.2.10/bar-loads.out, .../flavours/modules3.2.10/bar-switch.out, .../flavours/modules3.2.10/foo-avail1.out, .../flavours/modules3.2.10/foo-avail2.out, .../flavours/modules3.2.10/foo-defaults.out, .../flavours/modules3.2.10/foo-loads.out, .../flavours/modules3.2.10/foo-switch.out, .../flavours/modules3.2.10/modavail.out, .../flavours/modules3.2.10/modversion.out, .../flavours/modules3.2.10/ompi-defaults.out, .../flavours/modules3.2.10/ompi-loads1.out, .../flavours/modules3.2.10/ompi-switch.out, .../flavours/modules4.3.1/bar-defaults.out, .../flavours/modules4.3.1/bar-loads.out, .../flavours/modules4.3.1/bar-switch.out, .../flavours/modules4.3.1/foo-avail1.out, .../flavours/modules4.3.1/foo-avail2.out, .../flavours/modules4.3.1/foo-defaults.out, .../flavours/modules4.3.1/foo-loads.out, .../flavours/modules4.3.1/foo-switch.out, .../flavours/modules4.3.1/modavail.out, .../flavours/modules4.3.1/modversion.out, .../flavours/modules4.3.1/ompi-defaults.out, .../flavours/modules4.3.1/ompi-loads1.out, .../flavours/modules4.3.1/ompi-switch.out, .../example-sessions/foo-avail1.sh, .../example-sessions/foo-avail2.sh, .../example-sessions/foo-defaults.sh, .../example-sessions/foo-loads.sh, .../example-sessions/foo-switch.sh, .../homebrewed/modules3.2.10/bar-defaults.out, .../homebrewed/modules3.2.10/bar-loads.out, .../homebrewed/modules3.2.10/bar-switch.out, .../homebrewed/modules3.2.10/foo-avail1.out, .../homebrewed/modules3.2.10/foo-avail2.out, .../homebrewed/modules3.2.10/foo-defaults.out, .../homebrewed/modules3.2.10/foo-loads.out, .../homebrewed/modules3.2.10/foo-switch.out, .../homebrewed/modules3.2.10/modavail.out, .../homebrewed/modules3.2.10/modversion.out, .../homebrewed/modules3.2.10/ompi-defaults.out, .../homebrewed/modules3.2.10/ompi-loads1.out, .../homebrewed/modules3.2.10/ompi-switch.out, .../homebrewed/modules4.3.1/bar-defaults.out, .../homebrewed/modules4.3.1/bar-loads.out, .../homebrewed/modules4.3.1/bar-switch.out, .../homebrewed/modules4.3.1/foo-avail1.out, .../homebrewed/modules4.3.1/foo-avail2.out, .../homebrewed/modules4.3.1/foo-defaults.out, .../homebrewed/modules4.3.1/foo-loads.out, .../homebrewed/modules4.3.1/foo-switch.out, .../homebrewed/modules4.3.1/modavail.out, .../homebrewed/modules4.3.1/modversion.out, .../homebrewed/modules4.3.1/ompi-defaults.out, .../homebrewed/modules4.3.1/ompi-loads1.out, .../homebrewed/modules4.3.1/ompi-switch.out, .../example-sessions/modavail.sh, .../modulepath/modules3.2.10/bar-defaults.out, .../modulepath/modules3.2.10/bar-loads.out, .../modulepath/modules3.2.10/bar-switch.out, .../modulepath/modules3.2.10/foo-avail1.out, .../modulepath/modules3.2.10/foo-avail2.out, .../modulepath/modules3.2.10/foo-defaults.out, .../modulepath/modules3.2.10/foo-loads.out, .../modulepath/modules3.2.10/foo-switch.out, .../modulepath/modules3.2.10/modavail.out, .../modulepath/modules3.2.10/modversion.out, .../modulepath/modules3.2.10/ompi-defaults.out, .../modulepath/modules3.2.10/ompi-loads1.out, .../modulepath/modules3.2.10/ompi-switch.out, .../modulepath/modules4.3.1/bar-defaults.out, .../modulepath/modules4.3.1/bar-loads.out, .../modulepath/modules4.3.1/bar-switch.out, .../modulepath/modules4.3.1/foo-avail1.out, .../modulepath/modules4.3.1/foo-avail2.out, .../modulepath/modules4.3.1/foo-defaults.out, .../modulepath/modules4.3.1/foo-loads.out, .../modulepath/modules4.3.1/foo-switch.out, .../modulepath/modules4.3.1/modavail.out, .../modulepath/modules4.3.1/modversion.out, .../modulepath/modules4.3.1/ompi-defaults.out, .../modulepath/modules4.3.1/ompi-loads1.out, .../modulepath/modules4.3.1/ompi-switch.out, .../modulerc/modules3.2.10/bar-defaults.out, .../modulerc/modules3.2.10/bar-loads.out, .../modulerc/modules3.2.10/bar-switch.out, .../modulerc/modules3.2.10/foo-avail1.out, .../modulerc/modules3.2.10/foo-avail2.out, .../modulerc/modules3.2.10/foo-defaults.out, .../modulerc/modules3.2.10/foo-loads.out, .../modulerc/modules3.2.10/foo-switch.out, .../modulerc/modules3.2.10/modavail.out, .../modulerc/modules3.2.10/modversion.out, .../modulerc/modules3.2.10/ompi-defaults.out, .../modulerc/modules3.2.10/ompi-loads1.out, .../modulerc/modules3.2.10/ompi-switch.out, .../modulerc/modules4.3.1/bar-defaults.out, .../modulerc/modules4.3.1/bar-loads.out, .../modulerc/modules4.3.1/bar-switch.out, .../modulerc/modules4.3.1/foo-avail1.out, .../modulerc/modules4.3.1/foo-avail2.out, .../modulerc/modules4.3.1/foo-defaults.out, .../modulerc/modules4.3.1/foo-loads.out, .../modulerc/modules4.3.1/foo-switch.out, .../modulerc/modules4.3.1/modavail.out, .../modulerc/modules4.3.1/modversion.out, .../modulerc/modules4.3.1/ompi-defaults.out, .../modulerc/modules4.3.1/ompi-loads1.out, .../modulerc/modules4.3.1/ompi-switch.out, .../example-sessions/modversion.sh, .../example-sessions/ompi-defaults.sh, .../example-sessions/ompi-loads1.sh, .../example-sessions/ompi-switch.sh, .../example-sessions/ompi-switch.sh.m431, .../fake-sw-root/bar/4.7/1/README.txt, .../fake-sw-root/bar/4.7/1/gnu-8.2.0-simd-avx, .../fake-sw-root/bar/4.7/1/gnu-8.2.0-simd-sse4.1, .../fake-sw-root/bar/4.7/gcc/8.2.0/avx/bin/bar, .../fake-sw-root/bar/4.7/gcc/8.2.0/sse4.1/bin/bar, .../fake-sw-root/bar/5.4/1/README.txt, .../fake-sw-root/bar/5.4/1/gnu-9.1.0-simd-avx, .../fake-sw-root/bar/5.4/1/gnu-9.1.0-simd-avx2, .../fake-sw-root/bar/5.4/gcc/9.1.0/avx/bin/bar, .../fake-sw-root/bar/5.4/gcc/9.1.0/avx2/bin/bar, .../fake-sw-root/foo/1.1/1/README.txt, .../fake-sw-root/foo/1.1/1/gnu-8.2.0, .../fake-sw-root/foo/1.1/1/gnu-8.2.0-mvapich-2.1, .../fake-sw-root/foo/1.1/1/gnu-8.2.0-openmpi-3.1, .../fake-sw-root/foo/1.1/1/intel-2018, .../foo/1.1/1/intel-2018-intelmpi-default, .../fake-sw-root/foo/1.1/1/intel-2018-mvapich-2.1, .../fake-sw-root/foo/1.1/1/intel-2018-openmpi-3.1, .../fake-sw-root/foo/1.1/1/pgi-18.4, .../fake-sw-root/foo/1.1/1/pgi-18.4-mvapich-2.1, .../fake-sw-root/foo/1.1/1/pgi-18.4-openmpi-3.1, .../foo/1.1/gcc/8.2.0/mvapich/2.1/bin/foo, .../fake-sw-root/foo/1.1/gcc/8.2.0/nompi/bin/foo, .../foo/1.1/gcc/8.2.0/openmpi/3.1/bin/foo, .../foo/1.1/intel/2018/intelmpi/bin/foo, .../foo/1.1/intel/2018/mvapich/2.1/bin/foo, .../fake-sw-root/foo/1.1/intel/2018/nompi/bin/foo, .../foo/1.1/intel/2018/openmpi/3.1/bin/foo, .../foo/1.1/pgi/18.4/mvapich/2.1/bin/foo, .../fake-sw-root/foo/1.1/pgi/18.4/nompi/bin/foo, .../foo/1.1/pgi/18.4/openmpi/3.1/bin/foo, .../fake-sw-root/foo/2.4/1/README.txt, .../fake-sw-root/foo/2.4/1/gnu-9.1.0, .../fake-sw-root/foo/2.4/1/gnu-9.1.0-mvapich-2.3.1, .../fake-sw-root/foo/2.4/1/gnu-9.1.0-openmpi-4.0, .../fake-sw-root/foo/2.4/1/intel-2019, .../foo/2.4/1/intel-2019-intelmpi-default, .../foo/2.4/1/intel-2019-mvapich-2.3.1, .../fake-sw-root/foo/2.4/1/intel-2019-openmpi-4.0, .../fake-sw-root/foo/2.4/1/pgi-19.4, .../fake-sw-root/foo/2.4/1/pgi-19.4-openmpi-3.1, .../foo/2.4/gcc/9.1.0/mvapich/2.3.1/bin/foo, .../fake-sw-root/foo/2.4/gcc/9.1.0/nompi/bin/foo, .../foo/2.4/gcc/9.1.0/openmpi/4.0/bin/foo, .../foo/2.4/intel/2019/intelmpi/bin/foo, .../foo/2.4/intel/2019/mvapich/2.3.1/bin/foo, .../fake-sw-root/foo/2.4/intel/2019/nompi/bin/foo, .../foo/2.4/intel/2019/openmpi/4.0/bin/foo, .../fake-sw-root/foo/2.4/pgi/19.4/nompi/bin/foo, .../foo/2.4/pgi/19.4/openmpi/3.1/bin/foo, .../fake-sw-root/gcc/8.2.0/bin/gcc, .../fake-sw-root/gcc/9.1.0/bin/gcc, .../fake-sw-root/intel/2018/bin/icc, .../fake-sw-root/intel/2019/bin/icc, .../fake-sw-root/mvapich/2.1/1/README.txt, .../fake-sw-root/mvapich/2.1/1/gnu-8.2.0, .../fake-sw-root/mvapich/2.1/1/gnu-9.1.0, .../fake-sw-root/mvapich/2.1/1/intel-2018, .../fake-sw-root/mvapich/2.1/1/intel-2019, .../fake-sw-root/mvapich/2.1/1/pgi-18.4, .../fake-sw-root/mvapich/2.1/1/pgi-19.4, .../fake-sw-root/mvapich/2.1/gcc/8.2.0/bin/mpirun, .../fake-sw-root/mvapich/2.1/gcc/9.1.0/bin/mpirun, .../fake-sw-root/mvapich/2.1/intel/2018/bin/mpirun, .../fake-sw-root/mvapich/2.1/intel/2019/bin/mpirun, .../fake-sw-root/mvapich/2.1/pgi/18.4/bin/mpirun, .../fake-sw-root/mvapich/2.1/pgi/19.4/bin/mpirun, .../fake-sw-root/mvapich/2.3.1/1/README.txt, .../fake-sw-root/mvapich/2.3.1/1/gnu-9.1.0, .../fake-sw-root/mvapich/2.3.1/1/intel-2019, .../fake-sw-root/mvapich/2.3.1/1/pgi-19.4, .../mvapich/2.3.1/gcc/9.1.0/bin/mpirun, .../mvapich/2.3.1/intel/2019/bin/mpirun, .../fake-sw-root/mvapich/2.3.1/pgi/19.4/bin/mpirun, .../fake-sw-root/openmpi/3.1/1/README.txt, .../fake-sw-root/openmpi/3.1/1/gnu-8.2.0, .../fake-sw-root/openmpi/3.1/1/gnu-9.1.0, .../fake-sw-root/openmpi/3.1/1/intel-2018, .../fake-sw-root/openmpi/3.1/1/intel-2019, .../fake-sw-root/openmpi/3.1/1/pgi-18.4, .../fake-sw-root/openmpi/3.1/1/pgi-19.4, .../fake-sw-root/openmpi/3.1/gcc/8.2.0/bin/mpirun, .../fake-sw-root/openmpi/3.1/gcc/9.1.0/bin/mpirun, .../fake-sw-root/openmpi/3.1/intel/2018/bin/mpirun, .../fake-sw-root/openmpi/3.1/intel/2019/bin/mpirun, .../fake-sw-root/openmpi/3.1/pgi/18.4/bin/mpirun, .../fake-sw-root/openmpi/3.1/pgi/19.4/bin/mpirun, .../fake-sw-root/openmpi/4.0/1/README.txt, .../fake-sw-root/openmpi/4.0/1/gnu-9.1.0, .../fake-sw-root/openmpi/4.0/1/intel-2019, .../fake-sw-root/openmpi/4.0/1/pgi-19.4, .../fake-sw-root/openmpi/4.0/gcc/9.1.0/bin/mpirun, .../fake-sw-root/openmpi/4.0/intel/2019/bin/mpirun, .../fake-sw-root/openmpi/4.0/pgi/19.4/bin/mpirun, .../fake-sw-root/pgi/18.4/bin/pgcc, .../fake-sw-root/pgi/19.4/bin/pgcc, .../compiler-etc-dependencies/flavours/bar/4.7, .../compiler-etc-dependencies/flavours/bar/5.4, .../compiler-etc-dependencies/flavours/bar/common, .../compiler-etc-dependencies/flavours/foo/1.1, .../compiler-etc-dependencies/flavours/foo/2.4, .../compiler-etc-dependencies/flavours/foo/common, .../compiler-etc-dependencies/flavours/gnu/8.2.0, .../compiler-etc-dependencies/flavours/gnu/9.1.0, .../compiler-etc-dependencies/flavours/gnu/common, .../compiler-etc-dependencies/flavours/intel/2018, .../compiler-etc-dependencies/flavours/intel/2019, .../flavours/intel/common, .../flavours/intelmpi/default, .../compiler-etc-dependencies/flavours/mvapich/2.1, .../flavours/mvapich/2.3.1, .../flavours/mvapich/common, .../compiler-etc-dependencies/flavours/openmpi/3.1, .../compiler-etc-dependencies/flavours/openmpi/4.0, .../flavours/openmpi/common, .../compiler-etc-dependencies/flavours/pgi/18.4, .../compiler-etc-dependencies/flavours/pgi/19.4, .../compiler-etc-dependencies/flavours/pgi/common, .../compiler-etc-dependencies/flavours/simd/avx, .../compiler-etc-dependencies/flavours/simd/avx2, .../compiler-etc-dependencies/flavours/simd/common, .../compiler-etc-dependencies/flavours/simd/sse4.1, .../compiler-etc-dependencies/homebrewed/bar/4.7, .../compiler-etc-dependencies/homebrewed/bar/5.4, .../homebrewed/bar/common, .../compiler-etc-dependencies/homebrewed/foo/1.1, .../compiler-etc-dependencies/homebrewed/foo/2.4, .../homebrewed/foo/common, .../compiler-etc-dependencies/homebrewed/gcc/8.2.0, .../compiler-etc-dependencies/homebrewed/gcc/9.1.0, .../homebrewed/gcc/common, .../homebrewed/intel/2018, .../homebrewed/intel/2019, .../homebrewed/intel/common, .../homebrewed/intelmpi/default, .../homebrewed/mvapich/2.1, .../homebrewed/mvapich/2.3.1, .../homebrewed/mvapich/common, .../homebrewed/openmpi/3.1, .../homebrewed/openmpi/4.0, .../homebrewed/openmpi/common, .../compiler-etc-dependencies/homebrewed/pgi/18.4, .../compiler-etc-dependencies/homebrewed/pgi/19.4, .../homebrewed/pgi/common, .../compiler-etc-dependencies/homebrewed/simd/avx, .../compiler-etc-dependencies/homebrewed/simd/avx2, .../homebrewed/simd/common, .../homebrewed/simd/sse4.1, .../modrc_common/modulerc.default_lowest_simd, .../modrc_common/modulerc.select_compiler_family, .../modrc_common/modulerc.select_compiler_version, .../modrc_common/modulerc.select_mpi_family, .../modrc_common/modulerc.select_mpi_version, .../Compiler/gcc/8.2.0/bar/4.7/.modulerc, .../modulepath/Compiler/gcc/8.2.0/bar/4.7/avx, .../modulepath/Compiler/gcc/8.2.0/bar/4.7/sse4.1, .../modulepath/Compiler/gcc/8.2.0/bar/common, .../modulepath/Compiler/gcc/8.2.0/foo/1.1, .../modulepath/Compiler/gcc/8.2.0/foo/common, .../modulepath/Compiler/gcc/8.2.0/mvapich/2.1, .../modulepath/Compiler/gcc/8.2.0/mvapich/common, .../modulepath/Compiler/gcc/8.2.0/openmpi/3.1, .../modulepath/Compiler/gcc/8.2.0/openmpi/common, .../Compiler/gcc/9.1.0/bar/5.4/.modulerc, .../modulepath/Compiler/gcc/9.1.0/bar/5.4/avx, .../modulepath/Compiler/gcc/9.1.0/bar/5.4/avx2, .../modulepath/Compiler/gcc/9.1.0/bar/common, .../modulepath/Compiler/gcc/9.1.0/foo/2.4, .../modulepath/Compiler/gcc/9.1.0/foo/common, .../modulepath/Compiler/gcc/9.1.0/mvapich/2.1, .../modulepath/Compiler/gcc/9.1.0/mvapich/2.3.1, .../modulepath/Compiler/gcc/9.1.0/mvapich/common, .../modulepath/Compiler/gcc/9.1.0/openmpi/3.1, .../modulepath/Compiler/gcc/9.1.0/openmpi/4.0, .../modulepath/Compiler/gcc/9.1.0/openmpi/common, .../modulepath/Compiler/intel/2018/foo/1.1, .../modulepath/Compiler/intel/2018/foo/common, .../modulepath/Compiler/intel/2018/intelmpi/common, .../Compiler/intel/2018/intelmpi/default, .../modulepath/Compiler/intel/2018/mvapich/2.1, .../modulepath/Compiler/intel/2018/mvapich/common, .../modulepath/Compiler/intel/2018/openmpi/3.1, .../modulepath/Compiler/intel/2018/openmpi/common, .../modulepath/Compiler/intel/2019/foo/2.4, .../modulepath/Compiler/intel/2019/foo/common, .../modulepath/Compiler/intel/2019/intelmpi/common, .../Compiler/intel/2019/intelmpi/default, .../modulepath/Compiler/intel/2019/mvapich/2.1, .../modulepath/Compiler/intel/2019/mvapich/2.3.1, .../modulepath/Compiler/intel/2019/mvapich/common, .../modulepath/Compiler/intel/2019/openmpi/3.1, .../modulepath/Compiler/intel/2019/openmpi/4.0, .../modulepath/Compiler/intel/2019/openmpi/common, .../modulepath/Compiler/pgi/18.4/foo/1.1, .../modulepath/Compiler/pgi/18.4/foo/common, .../modulepath/Compiler/pgi/18.4/mvapich/2.1, .../modulepath/Compiler/pgi/18.4/mvapich/common, .../modulepath/Compiler/pgi/18.4/openmpi/3.1, .../modulepath/Compiler/pgi/18.4/openmpi/common, .../modulepath/Compiler/pgi/19.4/foo/2.4, .../modulepath/Compiler/pgi/19.4/foo/common, .../modulepath/Compiler/pgi/19.4/mvapich/2.1, .../modulepath/Compiler/pgi/19.4/mvapich/2.3.1, .../modulepath/Compiler/pgi/19.4/mvapich/common, .../modulepath/Compiler/pgi/19.4/openmpi/3.1, .../modulepath/Compiler/pgi/19.4/openmpi/4.0, .../modulepath/Compiler/pgi/19.4/openmpi/common, .../CompilerMPI/gcc/8.2.0/mvapich/2.1/foo/1.1, .../CompilerMPI/gcc/8.2.0/mvapich/2.1/foo/common, .../CompilerMPI/gcc/8.2.0/openmpi/3.1/foo/1.1, .../CompilerMPI/gcc/8.2.0/openmpi/3.1/foo/common, .../CompilerMPI/gcc/9.1.0/mvapich/2.3.1/foo/2.4, .../CompilerMPI/gcc/9.1.0/mvapich/2.3.1/foo/common, .../CompilerMPI/gcc/9.1.0/openmpi/4.0/foo/2.4, .../CompilerMPI/gcc/9.1.0/openmpi/4.0/foo/common, .../intel/2018/intelmpi/default/foo/1.1, .../intel/2018/intelmpi/default/foo/common, .../CompilerMPI/intel/2018/mvapich/2.1/foo/1.1, .../CompilerMPI/intel/2018/mvapich/2.1/foo/common, .../CompilerMPI/intel/2018/openmpi/3.1/foo/1.1, .../CompilerMPI/intel/2018/openmpi/3.1/foo/common, .../intel/2019/intelmpi/default/foo/2.4, .../intel/2019/intelmpi/default/foo/common, .../CompilerMPI/intel/2019/mvapich/2.3.1/foo/2.4, .../intel/2019/mvapich/2.3.1/foo/common, .../CompilerMPI/intel/2019/openmpi/4.0/foo/2.4, .../CompilerMPI/intel/2019/openmpi/4.0/foo/common, .../CompilerMPI/pgi/18.4/mvapich/2.1/foo/1.1, .../CompilerMPI/pgi/18.4/mvapich/2.1/foo/common, .../CompilerMPI/pgi/18.4/openmpi/3.1/foo/1.1, .../CompilerMPI/pgi/18.4/openmpi/3.1/foo/common, .../CompilerMPI/pgi/19.4/openmpi/3.1/foo/2.4, .../CompilerMPI/pgi/19.4/openmpi/3.1/foo/common, .../CompilerMPI/pgi/19.4/openmpi/4.0/REAMDE.txt, .../modulepath/Core/gcc/8.2.0, .../modulepath/Core/gcc/9.1.0, .../modulepath/Core/gcc/common, .../modulepath/Core/intel/2018, .../modulepath/Core/intel/2019, .../modulepath/Core/intel/common, .../modulepath/Core/pgi/18.4, .../modulepath/Core/pgi/19.4, .../modulepath/Core/pgi/common, .../modulepath/common/bar/common, .../modulepath/common/foo/common, .../modulepath/common/intelmpi/common, .../modulepath/common/mvapich/common, .../modulepath/common/openmpi/common, .../modulerc3/bar/.modulerc, .../modulerc3/bar/4.7/.modulerc, .../modulerc3/bar/4.7/gcc/.modulerc, .../modulerc3/bar/4.7/gcc/8.2.0/.modulerc, .../modulerc3/bar/4.7/gcc/8.2.0/avx, .../modulerc3/bar/4.7/gcc/8.2.0/sse4.1, .../modulerc3/bar/5.4/.modulerc, .../modulerc3/bar/5.4/gcc/.modulerc, .../modulerc3/bar/5.4/gcc/9.1.0/avx, .../modulerc3/bar/5.4/gcc/9.1.0/avx2, .../modulerc3/bar/avx/.modulerc, .../modulerc3/bar/avx/gcc/.modulerc, .../modulerc3/bar/avx/gcc/8.2.0/4.7, .../modulerc3/bar/avx/gcc/9.1.0/5.4, .../modulerc3/bar/avx2/.modulerc, .../modulerc3/bar/avx2/gcc/.modulerc, .../modulerc3/bar/avx2/gcc/9.1.0/5.4, .../compiler-etc-dependencies/modulerc3/bar/common, .../modulerc3/bar/gcc/.modulerc, .../modulerc3/bar/gcc/8.2.0/.modulerc, .../modulerc3/bar/gcc/8.2.0/avx/4.7, .../modulerc3/bar/gcc/8.2.0/sse4.1/4.7, .../modulerc3/bar/gcc/9.1.0/.modulerc, .../modulerc3/bar/gcc/9.1.0/avx/5.4, .../modulerc3/bar/gcc/9.1.0/avx2/5.4, .../modulerc3/bar/sse4.1/.modulerc, .../modulerc3/bar/sse4.1/gcc/.modulerc, .../modulerc3/bar/sse4.1/gcc/8.2.0/4.7, .../modulerc3/foo/.modulerc, .../modulerc3/foo/1.1/.modulerc, .../modulerc3/foo/1.1/gcc/.modulerc, .../modulerc3/foo/1.1/gcc/8.2.0/.modulerc, .../modulerc3/foo/1.1/gcc/8.2.0/mvapich/.modulerc, .../modulerc3/foo/1.1/gcc/8.2.0/mvapich/2.1, .../modulerc3/foo/1.1/gcc/8.2.0/nompi, .../modulerc3/foo/1.1/gcc/8.2.0/openmpi/.modulerc, .../modulerc3/foo/1.1/gcc/8.2.0/openmpi/3.1, .../modulerc3/foo/1.1/intel/.modulerc, .../modulerc3/foo/1.1/intel/2018/.modulerc, .../modulerc3/foo/1.1/intel/2018/intelmpi, .../modulerc3/foo/1.1/intel/2018/mvapich/.modulerc, .../modulerc3/foo/1.1/intel/2018/mvapich/2.1, .../modulerc3/foo/1.1/intel/2018/nompi, .../modulerc3/foo/1.1/intel/2018/openmpi/.modulerc, .../modulerc3/foo/1.1/intel/2018/openmpi/3.1, .../modulerc3/foo/1.1/pgi/.modulerc, .../modulerc3/foo/1.1/pgi/18.4/.modulerc, .../modulerc3/foo/1.1/pgi/18.4/mvapich/.modulerc, .../modulerc3/foo/1.1/pgi/18.4/mvapich/2.1, .../modulerc3/foo/1.1/pgi/18.4/nompi, .../modulerc3/foo/1.1/pgi/18.4/openmpi/.modulerc, .../modulerc3/foo/1.1/pgi/18.4/openmpi/3.1, .../modulerc3/foo/2.4/.modulerc, .../modulerc3/foo/2.4/gcc/.modulerc, .../modulerc3/foo/2.4/gcc/9.1.0/.modulerc, .../modulerc3/foo/2.4/gcc/9.1.0/mvapich/.modulerc, .../modulerc3/foo/2.4/gcc/9.1.0/mvapich/2.3.1, .../modulerc3/foo/2.4/gcc/9.1.0/nompi, .../modulerc3/foo/2.4/gcc/9.1.0/openmpi/.modulerc, .../modulerc3/foo/2.4/gcc/9.1.0/openmpi/4.0, .../modulerc3/foo/2.4/intel/.modulerc, .../modulerc3/foo/2.4/intel/2019/.modulerc, .../modulerc3/foo/2.4/intel/2019/intelmpi, .../modulerc3/foo/2.4/intel/2019/mvapich/.modulerc, .../modulerc3/foo/2.4/intel/2019/mvapich/2.3.1, .../modulerc3/foo/2.4/intel/2019/nompi, .../modulerc3/foo/2.4/intel/2019/openmpi/.modulerc, .../modulerc3/foo/2.4/intel/2019/openmpi/4.0, .../modulerc3/foo/2.4/pgi/.modulerc, .../modulerc3/foo/2.4/pgi/19.4/.modulerc, .../modulerc3/foo/2.4/pgi/19.4/nompi, .../modulerc3/foo/2.4/pgi/19.4/openmpi/.modulerc, .../modulerc3/foo/2.4/pgi/19.4/openmpi/3.1, .../compiler-etc-dependencies/modulerc3/foo/common, .../modulerc3/foo/gcc/.modulerc, .../modulerc3/foo/gcc/8.2.0/.modulerc, .../modulerc3/foo/gcc/8.2.0/mvapich/.modulerc, .../modulerc3/foo/gcc/8.2.0/mvapich/2.1/1.1, .../modulerc3/foo/gcc/8.2.0/nompi/1.1, .../modulerc3/foo/gcc/8.2.0/openmpi/.modulerc, .../modulerc3/foo/gcc/8.2.0/openmpi/3.1/1.1, .../modulerc3/foo/gcc/9.1.0/.modulerc, .../modulerc3/foo/gcc/9.1.0/mvapich/.modulerc, .../modulerc3/foo/gcc/9.1.0/mvapich/2.3.1/2.4, .../modulerc3/foo/gcc/9.1.0/nompi/2.4, .../modulerc3/foo/gcc/9.1.0/openmpi/.modulerc, .../modulerc3/foo/gcc/9.1.0/openmpi/4.0/2.4, .../modulerc3/foo/intel/.modulerc, .../modulerc3/foo/intel/2018/.modulerc, .../modulerc3/foo/intel/2018/intelmpi/1.1, .../modulerc3/foo/intel/2018/mvapich/.modulerc, .../modulerc3/foo/intel/2018/mvapich/2.1/1.1, .../modulerc3/foo/intel/2018/nompi/1.1, .../modulerc3/foo/intel/2018/openmpi/.modulerc, .../modulerc3/foo/intel/2018/openmpi/3.1/1.1, .../modulerc3/foo/intel/2019/.modulerc, .../modulerc3/foo/intel/2019/intelmpi/2.4, .../modulerc3/foo/intel/2019/mvapich/.modulerc, .../modulerc3/foo/intel/2019/mvapich/2.3.1/2.4, .../modulerc3/foo/intel/2019/nompi/2.4, .../modulerc3/foo/intel/2019/openmpi/.modulerc, .../modulerc3/foo/intel/2019/openmpi/4.0/2.4, .../modulerc3/foo/pgi/.modulerc, .../modulerc3/foo/pgi/18.4/.modulerc, .../modulerc3/foo/pgi/18.4/mvapich/.modulerc, .../modulerc3/foo/pgi/18.4/mvapich/2.1/1.1, .../modulerc3/foo/pgi/18.4/nompi/1.1, .../modulerc3/foo/pgi/18.4/openmpi/.modulerc, .../modulerc3/foo/pgi/18.4/openmpi/3.1/1.1, .../modulerc3/foo/pgi/19.4/.modulerc, .../modulerc3/foo/pgi/19.4/nompi/2.4, .../modulerc3/foo/pgi/19.4/openmpi/.modulerc, .../modulerc3/foo/pgi/19.4/openmpi/3.1/2.4, .../compiler-etc-dependencies/modulerc3/gcc/8.2.0, .../compiler-etc-dependencies/modulerc3/gcc/9.1.0, .../compiler-etc-dependencies/modulerc3/gcc/common, .../compiler-etc-dependencies/modulerc3/intel/2018, .../compiler-etc-dependencies/modulerc3/intel/2019, .../modulerc3/intel/common, .../modulerc3/mvapich/.modulerc, .../modulerc3/mvapich/2.1/.modulerc, .../modulerc3/mvapich/2.1/gcc/.modulerc, .../modulerc3/mvapich/2.1/gcc/8.2.0, .../modulerc3/mvapich/2.1/gcc/9.1.0, .../modulerc3/mvapich/2.1/intel/.modulerc, .../modulerc3/mvapich/2.1/intel/2018, .../modulerc3/mvapich/2.1/intel/2019, .../modulerc3/mvapich/2.1/pgi/.modulerc, .../modulerc3/mvapich/2.1/pgi/18.4, .../modulerc3/mvapich/2.1/pgi/19.4, .../modulerc3/mvapich/2.3.1/.modulerc, .../modulerc3/mvapich/2.3.1/gcc/.modulerc, .../modulerc3/mvapich/2.3.1/gcc/9.1.0, .../modulerc3/mvapich/2.3.1/intel/.modulerc, .../modulerc3/mvapich/2.3.1/intel/2019, .../modulerc3/mvapich/2.3.1/pgi/.modulerc, .../modulerc3/mvapich/2.3.1/pgi/19.4, .../modulerc3/mvapich/common, .../modulerc3/mvapich/gcc/.modulerc, .../modulerc3/mvapich/gcc/8.2.0/2.1, .../modulerc3/mvapich/gcc/9.1.0/2.1, .../modulerc3/mvapich/gcc/9.1.0/2.3.1, .../modulerc3/mvapich/intel/.modulerc, .../modulerc3/mvapich/intel/2018/2.1, .../modulerc3/mvapich/intel/2019/2.1, .../modulerc3/mvapich/intel/2019/2.3.1, .../modulerc3/mvapich/pgi/.modulerc, .../modulerc3/mvapich/pgi/18.4/2.1, .../modulerc3/mvapich/pgi/19.4/2.1, .../modulerc3/mvapich/pgi/19.4/2.3.1, .../modulerc3/openmpi/.modulerc, .../modulerc3/openmpi/3.1/.modulerc, .../modulerc3/openmpi/3.1/gcc/.modulerc, .../modulerc3/openmpi/3.1/gcc/8.2.0, .../modulerc3/openmpi/3.1/gcc/9.1.0, .../modulerc3/openmpi/3.1/intel/.modulerc, .../modulerc3/openmpi/3.1/intel/2018, .../modulerc3/openmpi/3.1/intel/2019, .../modulerc3/openmpi/3.1/pgi/.modulerc, .../modulerc3/openmpi/3.1/pgi/18.4, .../modulerc3/openmpi/3.1/pgi/19.4, .../modulerc3/openmpi/4.0/.modulerc, .../modulerc3/openmpi/4.0/gcc/.modulerc, .../modulerc3/openmpi/4.0/gcc/9.1.0, .../modulerc3/openmpi/4.0/intel/.modulerc, .../modulerc3/openmpi/4.0/intel/2019, .../modulerc3/openmpi/4.0/pgi/.modulerc, .../modulerc3/openmpi/4.0/pgi/19.4, .../modulerc3/openmpi/common, .../modulerc3/openmpi/gcc/.modulerc, .../modulerc3/openmpi/gcc/8.2.0/3.1, .../modulerc3/openmpi/gcc/9.1.0/3.1, .../modulerc3/openmpi/gcc/9.1.0/4.0, .../modulerc3/openmpi/intel/.modulerc, .../modulerc3/openmpi/intel/2018/3.1, .../modulerc3/openmpi/intel/2019/3.1, .../modulerc3/openmpi/intel/2019/4.0, .../modulerc3/openmpi/pgi/.modulerc, .../modulerc3/openmpi/pgi/18.4/3.1, .../modulerc3/openmpi/pgi/19.4/3.1, .../modulerc3/openmpi/pgi/19.4/4.0, .../compiler-etc-dependencies/modulerc3/pgi/18.4, .../compiler-etc-dependencies/modulerc3/pgi/19.4, .../compiler-etc-dependencies/modulerc3/pgi/common, .../modulerc4/bar/.modulerc, .../modulerc4/bar/4.7/.modulerc, .../modulerc4/bar/4.7/gcc/.modulerc, .../modulerc4/bar/4.7/gcc/8.2.0/.modulerc, .../modulerc4/bar/4.7/gcc/8.2.0/avx, .../modulerc4/bar/4.7/gcc/8.2.0/sse4.1, .../modulerc4/bar/5.4/.modulerc, .../modulerc4/bar/5.4/gcc/.modulerc, .../modulerc4/bar/5.4/gcc/9.1.0/avx, .../modulerc4/bar/5.4/gcc/9.1.0/avx2, .../modulerc4/bar/avx/.modulerc, .../modulerc4/bar/avx/gcc/.modulerc, .../modulerc4/bar/avx/gcc/8.2.0/4.7, .../modulerc4/bar/avx/gcc/9.1.0/5.4, .../modulerc4/bar/avx2/.modulerc, .../modulerc4/bar/avx2/gcc/.modulerc, .../modulerc4/bar/avx2/gcc/9.1.0/5.4, .../compiler-etc-dependencies/modulerc4/bar/common, .../modulerc4/bar/gcc/.modulerc, .../modulerc4/bar/gcc/8.2.0/.modulerc, .../modulerc4/bar/gcc/8.2.0/avx/4.7, .../modulerc4/bar/gcc/8.2.0/sse4.1/4.7, .../modulerc4/bar/gcc/9.1.0/.modulerc, .../modulerc4/bar/gcc/9.1.0/avx/5.4, .../modulerc4/bar/gcc/9.1.0/avx2/5.4, .../modulerc4/bar/sse4.1/.modulerc, .../modulerc4/bar/sse4.1/gcc/.modulerc, .../modulerc4/bar/sse4.1/gcc/8.2.0/4.7, .../modulerc4/foo/.modulerc, .../modulerc4/foo/1.1/.modulerc, .../modulerc4/foo/1.1/gcc/.modulerc, .../modulerc4/foo/1.1/gcc/8.2.0/.modulerc, .../modulerc4/foo/1.1/gcc/8.2.0/mvapich/.modulerc, .../modulerc4/foo/1.1/gcc/8.2.0/mvapich/2.1, .../modulerc4/foo/1.1/gcc/8.2.0/nompi, .../modulerc4/foo/1.1/gcc/8.2.0/openmpi/.modulerc, .../modulerc4/foo/1.1/gcc/8.2.0/openmpi/3.1, .../modulerc4/foo/1.1/intel/.modulerc, .../modulerc4/foo/1.1/intel/2018/.modulerc, .../modulerc4/foo/1.1/intel/2018/intelmpi, .../modulerc4/foo/1.1/intel/2018/mvapich/.modulerc, .../modulerc4/foo/1.1/intel/2018/mvapich/2.1, .../modulerc4/foo/1.1/intel/2018/nompi, .../modulerc4/foo/1.1/intel/2018/openmpi/.modulerc, .../modulerc4/foo/1.1/intel/2018/openmpi/3.1, .../modulerc4/foo/1.1/pgi/.modulerc, .../modulerc4/foo/1.1/pgi/18.4/.modulerc, .../modulerc4/foo/1.1/pgi/18.4/mvapich/.modulerc, .../modulerc4/foo/1.1/pgi/18.4/mvapich/2.1, .../modulerc4/foo/1.1/pgi/18.4/nompi, .../modulerc4/foo/1.1/pgi/18.4/openmpi/.modulerc, .../modulerc4/foo/1.1/pgi/18.4/openmpi/3.1, .../modulerc4/foo/2.4/.modulerc, .../modulerc4/foo/2.4/gcc/.modulerc, .../modulerc4/foo/2.4/gcc/9.1.0/.modulerc, .../modulerc4/foo/2.4/gcc/9.1.0/mvapich/.modulerc, .../modulerc4/foo/2.4/gcc/9.1.0/mvapich/2.3.1, .../modulerc4/foo/2.4/gcc/9.1.0/nompi, .../modulerc4/foo/2.4/gcc/9.1.0/openmpi/.modulerc, .../modulerc4/foo/2.4/gcc/9.1.0/openmpi/4.0, .../modulerc4/foo/2.4/intel/.modulerc, .../modulerc4/foo/2.4/intel/2019/.modulerc, .../modulerc4/foo/2.4/intel/2019/intelmpi, .../modulerc4/foo/2.4/intel/2019/mvapich/.modulerc, .../modulerc4/foo/2.4/intel/2019/mvapich/2.3.1, .../modulerc4/foo/2.4/intel/2019/nompi, .../modulerc4/foo/2.4/intel/2019/openmpi/.modulerc, .../modulerc4/foo/2.4/intel/2019/openmpi/4.0, .../modulerc4/foo/2.4/pgi/.modulerc, .../modulerc4/foo/2.4/pgi/19.4/.modulerc, .../modulerc4/foo/2.4/pgi/19.4/nompi, .../modulerc4/foo/2.4/pgi/19.4/openmpi/.modulerc, .../modulerc4/foo/2.4/pgi/19.4/openmpi/3.1, .../compiler-etc-dependencies/modulerc4/foo/common, .../modulerc4/foo/gcc/.modulerc, .../modulerc4/foo/gcc/8.2.0/.modulerc, .../modulerc4/foo/gcc/8.2.0/mvapich/.modulerc, .../modulerc4/foo/gcc/8.2.0/mvapich/2.1/1.1, .../modulerc4/foo/gcc/8.2.0/nompi/1.1, .../modulerc4/foo/gcc/8.2.0/openmpi/.modulerc, .../modulerc4/foo/gcc/8.2.0/openmpi/3.1/1.1, .../modulerc4/foo/gcc/9.1.0/.modulerc, .../modulerc4/foo/gcc/9.1.0/mvapich/.modulerc, .../modulerc4/foo/gcc/9.1.0/mvapich/2.3.1/2.4, .../modulerc4/foo/gcc/9.1.0/nompi/2.4, .../modulerc4/foo/gcc/9.1.0/openmpi/.modulerc, .../modulerc4/foo/gcc/9.1.0/openmpi/4.0/2.4, .../modulerc4/foo/intel/.modulerc, .../modulerc4/foo/intel/2018/.modulerc, .../modulerc4/foo/intel/2018/intelmpi/1.1, .../modulerc4/foo/intel/2018/mvapich/.modulerc, .../modulerc4/foo/intel/2018/mvapich/2.1/1.1, .../modulerc4/foo/intel/2018/nompi/1.1, .../modulerc4/foo/intel/2018/openmpi/.modulerc, .../modulerc4/foo/intel/2018/openmpi/3.1/1.1, .../modulerc4/foo/intel/2019/.modulerc, .../modulerc4/foo/intel/2019/intelmpi/2.4, .../modulerc4/foo/intel/2019/mvapich/.modulerc, .../modulerc4/foo/intel/2019/mvapich/2.3.1/2.4, .../modulerc4/foo/intel/2019/nompi/2.4, .../modulerc4/foo/intel/2019/openmpi/.modulerc, .../modulerc4/foo/intel/2019/openmpi/4.0/2.4, .../modulerc4/foo/pgi/.modulerc, .../modulerc4/foo/pgi/18.4/.modulerc, .../modulerc4/foo/pgi/18.4/mvapich/.modulerc, .../modulerc4/foo/pgi/18.4/mvapich/2.1/1.1, .../modulerc4/foo/pgi/18.4/nompi/1.1, .../modulerc4/foo/pgi/18.4/openmpi/.modulerc, .../modulerc4/foo/pgi/18.4/openmpi/3.1/1.1, .../modulerc4/foo/pgi/19.4/.modulerc, .../modulerc4/foo/pgi/19.4/nompi/2.4, .../modulerc4/foo/pgi/19.4/openmpi/.modulerc, .../modulerc4/foo/pgi/19.4/openmpi/3.1/2.4, .../compiler-etc-dependencies/modulerc4/gcc/8.2.0, .../compiler-etc-dependencies/modulerc4/gcc/9.1.0, .../compiler-etc-dependencies/modulerc4/gcc/common, .../compiler-etc-dependencies/modulerc4/intel/2018, .../compiler-etc-dependencies/modulerc4/intel/2019, .../modulerc4/intel/common, .../modulerc4/mvapich/.modulerc, .../modulerc4/mvapich/2.1/.modulerc, .../modulerc4/mvapich/2.1/gcc/.modulerc, .../modulerc4/mvapich/2.1/gcc/8.2.0, .../modulerc4/mvapich/2.1/gcc/9.1.0, .../modulerc4/mvapich/2.1/intel/.modulerc, .../modulerc4/mvapich/2.1/intel/2018, .../modulerc4/mvapich/2.1/intel/2019, .../modulerc4/mvapich/2.1/pgi/.modulerc, .../modulerc4/mvapich/2.1/pgi/18.4, .../modulerc4/mvapich/2.1/pgi/19.4, .../modulerc4/mvapich/2.3.1/.modulerc, .../modulerc4/mvapich/2.3.1/gcc/.modulerc, .../modulerc4/mvapich/2.3.1/gcc/9.1.0, .../modulerc4/mvapich/2.3.1/intel/.modulerc, .../modulerc4/mvapich/2.3.1/intel/2019, .../modulerc4/mvapich/2.3.1/pgi/.modulerc, .../modulerc4/mvapich/2.3.1/pgi/19.4, .../modulerc4/mvapich/common, .../modulerc4/mvapich/gcc/.modulerc, .../modulerc4/mvapich/gcc/8.2.0/2.1, .../modulerc4/mvapich/gcc/9.1.0/2.1, .../modulerc4/mvapich/gcc/9.1.0/2.3.1, .../modulerc4/mvapich/intel/.modulerc, .../modulerc4/mvapich/intel/2018/2.1, .../modulerc4/mvapich/intel/2019/2.1, .../modulerc4/mvapich/intel/2019/2.3.1, .../modulerc4/mvapich/pgi/.modulerc, .../modulerc4/mvapich/pgi/18.4/2.1, .../modulerc4/mvapich/pgi/19.4/2.1, .../modulerc4/mvapich/pgi/19.4/2.3.1, .../modulerc4/openmpi/.modulerc, .../modulerc4/openmpi/3.1/.modulerc, .../modulerc4/openmpi/3.1/gcc/.modulerc, .../modulerc4/openmpi/3.1/gcc/8.2.0, .../modulerc4/openmpi/3.1/gcc/9.1.0, .../modulerc4/openmpi/3.1/intel/.modulerc, .../modulerc4/openmpi/3.1/intel/2018, .../modulerc4/openmpi/3.1/intel/2019, .../modulerc4/openmpi/3.1/pgi/.modulerc, .../modulerc4/openmpi/3.1/pgi/18.4, .../modulerc4/openmpi/3.1/pgi/19.4, .../modulerc4/openmpi/4.0/.modulerc, .../modulerc4/openmpi/4.0/gcc/.modulerc, .../modulerc4/openmpi/4.0/gcc/9.1.0, .../modulerc4/openmpi/4.0/intel/.modulerc, .../modulerc4/openmpi/4.0/intel/2019, .../modulerc4/openmpi/4.0/pgi/.modulerc, .../modulerc4/openmpi/4.0/pgi/19.4, .../modulerc4/openmpi/common, .../modulerc4/openmpi/gcc/.modulerc, .../modulerc4/openmpi/gcc/8.2.0/3.1, .../modulerc4/openmpi/gcc/9.1.0/3.1, .../modulerc4/openmpi/gcc/9.1.0/4.0, .../modulerc4/openmpi/intel/.modulerc, .../modulerc4/openmpi/intel/2018/3.1, .../modulerc4/openmpi/intel/2019/3.1, .../modulerc4/openmpi/intel/2019/4.0, .../modulerc4/openmpi/pgi/.modulerc, .../modulerc4/openmpi/pgi/18.4/3.1, .../modulerc4/openmpi/pgi/19.4/3.1, .../modulerc4/openmpi/pgi/19.4/4.0, .../compiler-etc-dependencies/modulerc4/pgi/18.4, .../compiler-etc-dependencies/modulerc4/pgi/19.4, .../compiler-etc-dependencies/modulerc4/pgi/common, .../tcllib/ChildModules.tcl, .../tcllib/CompilerFromPath.tcl, .../tcllib/CompilerUtils.tcl, .../compiler-etc-dependencies/tcllib/GetFamVer.tcl, .../tcllib/LoadedCompMatches.tcl, .../tcllib/LoadedModules.tcl, .../tcllib/LoadedMpiMatches.tcl, .../compiler-etc-dependencies/tcllib/MpiUtils.tcl, .../tcllib/WarningUtils.tcl, .../tcllib/common_utilities.tcl, .../compiler-etc-dependencies/tcllib/temp.tcl, doc/source/cookbook/compiler-etc-dependencies.rst: doc: add compiler-etc-dependencies cookbook recipe New cookbook discussing various strategies for creating modulefiles for packages with multiple builds depending on previously loaded compiler, MPI libraries etc. (E.g. handling different "flavors" of packages) 2020-02-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * script/createmodule.sh: script: fix path deduplication in createmodule.sh Fixes #316 2020-02-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/006-procs.exp: ts: adapt perl code which sets _mlstatus * modulecmd.tcl.in: Lift perl variable strictness for _mlstatus Declaration of $_mlstatus (evaluation status variable) cannot be done as part of generated code passed to `eval` statement. If $_mlstatus is declared or re-declared as part of evaluated code, defined value cannot be retrieved afterward in `module` subroutine. To be able to retrieve the value of $_mlstatus set within generated code evaluation yet avoiding warnings of a 'use strict;' mode, temporarily disable variable strictness. 2020-02-10 Andrey Maslennikov <andrew.maslennikov@gmail.com> * modulecmd.tcl.in: Add "my" for perl's $_mlstatus Since this variable is always rendered it might be evaluated in a strict scope and fail with the following error: `Global symbol "$_mlstatus" requires explicit package name (did you forget to declare "my $_mlstatus"?)` 2020-02-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/040-subshell.exp, testsuite/install.00-init/050-crossshell.exp: ts: adapt (again) err msg and code for fish 3.1 2020-02-17 Armin Wehrfritz <armin.wehrfritz@unsw.edu.au> * script/createmodule.py.in: script: fix createmodule.py for python3 Fixes #315 2020-02-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitignore: git: ignore dir used for local tests 2020-02-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/040-subshell.exp: ts: adapt err msg for fish 3.1 2020-02-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * configure: install: pass --with-python option to compat configure 2020-02-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/rpm/environment-modules.spec.in: rpm: use configure option --with-python to set shebang * Makefile: install: build and install createmodule.py in bindir * Makefile: install: ensure all built scripts have exec perms * INSTALL.rst, configure: install: add --with-python configure option Enable to pass a specific Python interpreter command name or location at configure step with `--with-python` option. Specified command name or location should be found on build system only if building from git repository. * .gitignore, INSTALL.rst, Makefile, Makefile.inc.in, configure, script/{createmodule.py => createmodule.py.in}, .../{gitlog2changelog.py => gitlog2changelog.py.in}: install: build createmodule.py/gitlog2changelog.py to set shebang Adapt configure script and Makefile to detect `python` command location and set it as shebang for `createmodule.py` and `gitlog2changelog.py`. If python command is not found python3 then python2 are searched. 2020-02-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml: travis: fix configuration warnings * .travis.yml: travis: replace a CentOS 6 test case by a CentOS 8 * Makefile, configure: install: %D git-log placeholder by not be supported * .travis.yml, Makefile: install/travis: add rules to build rpm and test it * testsuite/modules.00-init/005-init_ts.exp: ts: output detected tty col number 2020-02-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/375-deps6.exp, testsuite/modules.50-cmds/376-switch.exp: ts: fix msg block err tests with regexp special chars 2020-02-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/006-procs.exp, testsuite/modules.60-initx/010-init_ts.exp: ts: output test error details whatever verbose value 2020-02-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitignore, Makefile, script/mt: install/script: abort auxiliary tools download after few seconds Abort download of icdiff, nagelfar or tclsh83 after 2 timeouts of 5 seconds and record download failure for icdiff to avoid mt script to attempt a new download tentative every time it is called. 2020-02-03 Andrey Portnoy <aportnoy@fastmail.com> * script/add.modules.in: Fix typo in add.modules.in 2020-02-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles.path1/loc_dv10/.version, testsuite/modulefiles.path1/loc_dv10/1.1, testsuite/modulefiles.path2/loc_dv10/.version, testsuite/modulefiles.path2/loc_dv10/1.2, testsuite/modules.20-locate/069-cross.exp: Fix sym version targetting mod version with space in name Correctly handle symbolic version target including a whitespace in their name. 2020-02-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc. git archive build and createmodule script fixes in NEWS 2020-02-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * script/createmodule.py, script/createmodule.sh: script: fix createmodule.{sh,py} for script outputting text Inhibit output generated by scripts evaluated by createmodule.sh and createmodule.py to ensure these outputs will not get in the way when analyzing the environment change done by the evaluated scripts. Fixes #309 * script/createmodule.sh: script: avoid shell func defs in createmodule.sh Fix createmodule.sh script to correctly analyses environment when shell functions are found defined in it. These shell function definitions are skipped. 2020-01-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst: doc: need more tools to install from a git archive export 2020-01-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, configure, doc/Makefile, testsuite/install.00-init/030-options.exp: install: need sphinx if dist does not contain prebuilt doc Check at configure step if pre-built documents are available, if found Sphinx-related makefile rules are inhibited. Otherwise Sphinx availability is tested and documentation build is disabled if not found. * .gitignore, Makefile: install: no txt version of docs at dist root * Makefile: install: no need to pre-build README file in dist * README.md: doc: update core dev list in README * .gitattributes, Makefile, doc/Makefile: install: no exclude of doc files from git archive dist No more exclusion of project-related or installation documents from git archive distribution. Enable makefile rules relative to Sphinx documentation build even if not building from git repository. With release distribution tarballs nothing changes as document is pre-built in these archives. When working from a `git archive` export, these Sphinx rules will help to build docs. 2020-01-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/Makefile: install: do not clean ml.1 on 'make clean' if pre-built * Makefile: install: add missing ml.1 pre-built doc in dist * .gitattributes, Makefile: install: build empty changelog if not building from git In case Modules is built from a `git archive` distribution, generate a bare ChangeLog file only referring to the NEWS document. Always include gitlog2changelog.py tool in distributions, but do not run it if not building from a git repository. * configure: install: auto disable compat build if no src and not in git 2020-01-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitattributes, Makefile, configure, version.inc.in: install: enable version.inc build outside git repository Make `git archive` substitute .version.inc.in with commit hash, date and refs. Compute MODULES_BUILD and MODULES_BUILD_DATE from these informations in ./configure and Makefile if not working from git repository. 2020-01-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst: doc: desc. Improved Windows support in NEWS/MIGRATING 2020-01-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * README.md: doc: add ref to ml(1) man page in README 2020-01-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .appveyor.yml: appveyor: add native windows installation test case 2020-01-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, script/TESTINSTALL.bat: script: add TESTINSTALL.bat script and ship it in dist-win * script/ml.cmd, script/module.cmd: script: ensure relevant exit code is set at end of win scripts 2020-01-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, INSTALL.bat => script/INSTALL.bat, UNINSTALL.bat => script/UNINSTALL.bat: script: move INSTALL.bat & UNINSTALL.bat in script dir 2020-01-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.bat, UNINSTALL.bat: install: set session PATH in INSTALL/UNINSTALL win scripts * INSTALL.bat: install: fix location of Windows find command 2020-01-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/FAQ.rst, doc/source/index.rst: doc: reorganize documentation index 2020-01-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/howto/using_on_windows.pdf: doc: remove now deprecated using_on_windows howto * Makefile, UNINSTALL.bat: install: provide a basic uninstall script for Windows 2020-01-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/cmd.cmd, script/ml.cmd, script/module.cmd: script/init: quote path variables in win-specific scripts To handle installation path containing whitespaces like "C:\Program Files\Environment Modules". * INSTALL.bat, Makefile: install: provide a basic install script for Windows * .gitignore, Makefile, init/Makefile: install: add dist-win rule to build win-specific dist zip ball * Makefile, NEWS.rst, script/ml.cmd, testsuite/install.00-init/030-options.exp: install: add ml.cmd wrapper on Windows installation * .gitattributes, .gitignore, INSTALL-win.rst, INSTALL-win.txt, Makefile, doc/Makefile, doc/source/INSTALL-win.rst, doc/source/index.rst: doc: transform INSTALL-win.txt into INSTALL-win.rst 2020-01-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst, NEWS.rst: doc: desc --enable-windows-support in NEWS/INSTALL * .travis.yml, site.exp.in, testsuite/install.00-init/030-options.exp: ts: add test to check win-specific file install * script/module.cmd: script: simplify module.cmd batch file Execute initialization script if MODULES_CMD environment variable is not found defined. * init/cmd.cmd: init: simplify cmd init file Always define Modules-specific environment variables when running `cmd` initialization file. * Makefile, {windows => script}/module.cmd: script: move win-specific module.cmd file in script dir * Makefile, init/Makefile, windows/moduleinit.cmd => init/cmd.cmd, windows/module.cmd: init: move windows/moduleinit.cmd as init/cmd.cmd file 2019-05-21 Jacques Raphanel <dvp@crabisoft.fr> * Makefile, Makefile.inc.in, configure: Install: add --enable-windows-support configure option Provide new `--enable-windows-support` option for configure to automatically install windows batch file to bin directory during install step. This new option is not enabled by default. 2019-05-08 Jacques Raphanel <dvp@crabisoft.fr> * windows/module.cmd, windows/moduleinit.cmd: Add support for portable/standalone install on Windows Update moduleinit.cmd file to set Modules-specific environment variables according to the script directory and the file existence for: * MODULESHOME if not defined yet and if `..\libexec\modulecmd.tcl` exists * add `..\bin` directory to PATH if `module.cmd` is not available from PATH and available from `..\bin` * add `..\bin` directory to PATH if `tclsh.exe` is not available from PATH and available from `..\bin` Automatically call `moduleinit.cmd` from `module.cmd` if modules is not initialized yet (based on environment variables) Fixes #272 2020-01-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml: travis: increase testsuite timeout to 25mins * Makefile: install: use newer version of nagelfar (1.3.1) * Makefile: install: use newer version of icdiff (1.9.5) * .gitattributes, contrib/pre-commit: contrib: remove not-used-anymore pre-commit script * .gitattributes, .gitignore: git: remove refs to deleted www-specific stuff * .appveyor.yml, .cirrus.yml, .gitattributes, .gitignore, .travis.yml, Makefile, NEWS.rst, contrib/readme.txt, contrib/rpm/environment-modules.spec.in, {contrib/scripts => script}/add.modules.in, {contrib/scripts => script}/createmodule.py, {contrib/scripts => script}/createmodule.sh, {contrib => script}/envml, {contrib => script}/gitlog2changelog.py, {contrib => script}/mb, {contrib/scripts => script}/mkroot, {contrib => script}/mlprof, {contrib/scripts => script}/modulecmd.in, {contrib => script}/mt, {contrib => script}/mtreview, {contrib => script}/nglfar2ccov, {contrib => script}/playdemo: script: move all dist. and maint. scripts in a script dir * .gitignore, Makefile, NEWS.rst, contrib/{mb.in => mb}, contrib/{mlprof.in => mlprof}, contrib/mt, contrib/{mtreview.in => mtreview}, contrib/{playdemo.in => playdemo}: script: remove need to build project management-specific tools Make mb, mlprof, mtreview and playdemo use `/usr/bin/env tclsh` shebang rather applying there TCLSH location defined by `./configure` process. 2019-12-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.2/NaN, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/045-listlong.exp, testsuite/modules.70-maint/290-json.exp, testsuite/modules.90-avail/070-full.exp: ts: test json output in 70/290 2019-12-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Make -j/-t/-l mutually exclusive Use of --json command line switch automatically disables previous enablement of -t or -l. Same goes for --terse and --long switches. * modulecmd.tcl.in: Save err msg if json output to render them all together Record error messages in a g_report_erralist global array list rather output them directly in order to output all of them together in a JSON structure right before exiting. * modulecmd.tcl.in: Render final error message through reportError Use regular reportError procedure to also render the last error message before exiting. Re-enable error report prior this call in case it was previously inhibited. Also clear all record message ids to ensure last error will be rendered at top level. 2019-12-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Enable JSON output only on supported sub-cmd 2019-12-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst: doc: desc -j/--json in NEWS/MIGRATING * doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: desc. -j/--json option in diff/man * modulecmd.tcl.in: Add support for JSON output on whatis/search subcmds 2019-12-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add support for JSON output on savelist subcmd * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module: init: add -j/--json options to completion scripts * modulecmd.tcl.in: Add support for JSON output on list subcmd 2019-12-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add support for JSON output on avail subcmd Fixes #303 * modulecmd.tcl.in: Add --json/-j command-line switches * modulecmd.tcl.in: Handle output report done in JSON format * modulecmd.tcl.in: Add modfile pathname to result returned by findModules 2019-12-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, modulecmd.tcl.in, testsuite/modulefiles.2/loc, testsuite/modulefiles.2/unloc, testsuite/modules.00-init/070-command.exp, testsuite/modules.70-maint/280-ml.exp: Fix mod subcmd abbrev match Fix module sub-command abbreviation match to ensure passed abbreviated form fully match sub-command, not only its minimal abbreviated form. As an example, ``lod`` or ``loda`` do not match anymore the ``load`` sub-command, ``lo`` or ``loa`` still do. * modulecmd.tcl.in, testsuite/modulefiles.2/f, testsuite/modulefiles.2/t, testsuite/modules.70-maint/280-ml.exp: Filter-out all known cmd line switches when parsing ml args To accurately determine specified module sub-command or list of modules to load or unload. 2019-12-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst: doc: desc ml in NEWS/MIGRATING 2019-12-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/Makefile, init/bash.in, init/sh.in: init: ensure ml is defined in bash/ksh subshells * .travis.yml: travis: disable ml on a CI case * testsuite/example/modulerc-1.in, testsuite/modules.70-maint/120-autoinit.exp: ts: adapt autoinit output test for 'ml' * testsuite/bin/install_test_cmake, testsuite/bin/install_test_perl, testsuite/bin/install_test_python, testsuite/bin/install_test_r, testsuite/bin/install_test_ruby, testsuite/bin/install_test_tcl, testsuite/install.00-init/024-ml.exp, testsuite/install.00-init/025-autoinit.exp, testsuite/install.00-init/040-subshell.exp, testsuite/install.00-init/080-args.exp: ts: test 'ml' over Modules installation 2019-11-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.2/bar/0.1, testsuite/modulefiles.2/bar/0.2, testsuite/modulefiles.2/bar/1, testsuite/modulefiles.2/bar/2, testsuite/modulefiles.2/baz/1, testsuite/modulefiles.2/baz/2, testsuite/modulefiles.2/foo/0.1, testsuite/modulefiles.2/foo/0.2, testsuite/modulefiles.2/foo/1, testsuite/modulefiles.2/foo/2, testsuite/modulefiles.2/load, testsuite/modulefiles.2/mlinmod, testsuite/modulefiles.2/modemptyarg/swap, testsuite/modulefiles.2/modemptyarg/swap2, testsuite/modulefiles.2/qux/1, testsuite/modulefiles.2/qux/2, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.70-maint/280-ml.exp: ts: add test for 'ml' command * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.50-cmds/301-interp-command.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/045-listlong.exp, testsuite/modules.70-maint/230-verbosity.exp: ts: set global var for cur loaded msg header * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/080-begenv.exp, testsuite/modules.00-init/150-access-init.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.70-maint/043-listno.exp, testsuite/modules.70-maint/048-listlongno.exp: ts: set in a common var the no loaded msg * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/015-version.exp, testsuite/modules.00-init/100-pager.exp, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/150-access-init.exp, testsuite/modules.70-maint/220-config.exp: ts: set a common var for Modules version report msg 2019-11-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add ml procedure 2019-11-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/example/siteconfig.tcl-1: Adapt parseModuleVersionSpecifier proc mlspec Add a 'mlspec' argument to the parseModuleVersionSpecifier procedure to indicate module specification comes or not from the 'ml' command. A slightly different processing is applied in this case as module name may be prefixed by a '-' character when specified over the 'ml' command to indicate this module should be unloaded. When mlspec is enabled two lists are returned by parseModuleVersionSpecifier: one for the list of the module to load and another for the modules to unload. 2019-11-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Define ml func/alias if enabled in renderAutoinit * modulecmd.tcl.in: Add cmdMlHelp proc to output ml usage msg * modulecmd.tcl.in: Adapt main to call 'ml' procs when ml is called cmd 2019-11-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Resolve and check module command in parseModuleCommandName Add parseModuleCommandName procedure to handle the name check and resolution (in case of aliased name) of the command supplied to the module procedure. 2019-11-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/rpm/environment-modules.spec.in, doc/Makefile, doc/source/conf.py, doc/source/index.rst, doc/source/ml.rst, doc/source/module.rst: doc/rpm: add ml man page * INSTALL.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst, doc/source/modulefile.rst: doc: desc ml in man/diff/INSTALL * testsuite/modules.70-maint/220-config.exp: ts: adapt existing tests to ml cfg opt * Makefile, Makefile.inc.in, configure, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, site.exp.in: Introduce ml configuration option Add the ability to control whether or not a ``ml`` command should be defined at Modules initialization time. `ml` is a handy frontend to the module command: it reduces the number of characters to type to trigger module. Enablement is managed throught a new configuration option named `ml` (which defines `MODULES_ML` environment variable when set). It may be enabled by default in `modulecmd.tcl` script with option `--enable-ml` passed to `./configure` script. 2019-11-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../design/default-latest-version-specifiers.rst: doc: add default-latest-version-specifiers design notes 2020-01-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc. doc improvements in NEWS 2020-01-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst: doc: alphabetically sort sub-cmds, opts and envar in module.1 * doc/source/modulefile.rst: doc: alphabetically sort modulefile cmds in modulefile.4 * doc/source/diff_v3_v4.rst: doc: apply same markup on diff doc than man pages * doc/source/module.rst, doc/source/modulefile.rst: doc: split lines larger than 78 cols in man pages * doc/source/modulefile.rst: doc: desc. modulefile cmd version addition in modulefile.4 2020-01-08 Colin Marquardt <cmarqu42@gmail.com> * doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: desc. env var version addition in module.1 * doc/source/module.rst: doc: desc. sub-cmds version addition in module.1 2020-01-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst: doc: desc. cmd line switches version addition in module.1 2020-01-08 Colin Marquardt <cmarqu42@gmail.com> * doc/source/module.rst, doc/source/modulefile.rst: doc: markup code with double backticks in man pages 2020-01-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst, doc/source/modulefile.rst: doc: fix missing ref link in or between man pages 2020-01-07 Colin Marquardt <cmarqu42@gmail.com> * doc/source/module.rst, doc/source/modulefile.rst: doc: markup modulefile cmd with :mfcmd: in man pages * doc/source/modulefile.rst: doc: markup modulefile cmd sections with .. mfcmd:: in man pages * doc/source/module.rst, doc/source/modulefile.rst: doc: markup subcmd with :subcmd: in man pages * doc/source/module.rst: doc: markup subcmd sections with .. subcmd:: in man pages 2020-01-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/conf.py: doc: add sphinx directives/roles for sub-cmd and modulefile cmd 2020-01-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/conf.py, doc/source/module.rst: doc: markup autogen files with :file: in man pages 2020-01-06 Colin Marquardt <cmarqu42@gmail.com> * doc/source/module.rst: doc: markup option sections with .. option:: in man pages * doc/source/module.rst, doc/source/modulefile.rst: doc: markup cmd opt with :option: in man pages * doc/source/module.rst, doc/source/modulefile.rst: doc: markup env var with :envvar: in man pages * doc/source/module.rst, doc/source/modulefile.rst: doc: markup env var sections with .. envar:: in man pages * doc/source/module.rst, doc/source/modulefile.rst: doc: markup cmds with :command: in man pages 2020-01-05 Colin Marquardt <cmarqu42@gmail.com> * doc/source/modulefile.rst: doc: markup man page ref with :manpage: in man pages * doc/source/module.rst, doc/source/modulefile.rst: doc: markup files with :file: in man pages * doc/source/module.rst, doc/source/modulefile.rst: doc: fix ref link to Locating Modulefiles section * doc/example/modulepaths-persist-over-sudo/rc, doc/example/test-modulefiles/modulefiles/test_dir_and_file, doc/source/cookbook/ensure-user-qualify-modules.rst, doc/source/cookbook/inhibit-report-info.rst, doc/source/cookbook/log-module-commands.rst, doc/source/cookbook/module-info-name-return-basename.rst, doc/source/cookbook/modulepaths-persist-over-sudo.rst, doc/source/cookbook/test-modulefiles.rst, doc/source/cookbook/unload-firstly-loaded.rst: doc: highlight code included in cookbook recipes Specify language directive for included Tcl script files in cookbook recipes to get their code highlighted in resulting HTML documents. As Pygment Tcl lexer used by Sphinx does not support the whole Tcl syntax, scripts of modulepaths-persist-over-sudo and test-modulefiles recipes have been adapted to enable highlighting. Change has not been performed over the expose-procs-vars-to-modulefiles and top-priority-values recipes as their code cannot be adapted to match lexer needs. * doc/source/diff_v3_v4.rst, doc/source/module.rst, doc/source/modulefile.rst: doc: fix some typos and grammar across documents 2020-01-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .cirrus.yml: cirrus: update python requirement on FreeBSD test env 2020-01-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version 4.4.1 * doc/source/design/advanced-module-version-specifiers.rst: doc: clarify adv vers spec does not support identification context * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: ts: add tests to improve on-the-fly proc define coverage * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp, .../modules.70-maint/260-extended_default.exp, .../272-adv_version_spec-range.exp, testsuite/modules.90-avail/080-noindepth.exp: ts: add tests to improve modEq procs coverage * modulecmd.tcl.in: Remove useless getModuleFromVersSpec proc 2020-01-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/mlprof.in, doc/source/conf.py, modulecmd.tcl.in: New year (2020) copyright mention update * contrib/mlprof.in: contrib/mlprof: keep proc stats even if redefined 2019-12-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles/loc_sym/exec2, testsuite/modulefiles/loc_sym/exec3, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/090-memcache.exp: Cache getModules results Introduce a memory cache for the results build up by getModules procedure. Done in order to reuse these results if next searches are identical, which happens in whatis/search context. As a side effect a module resolution cannot be changed by the evaluation of a modulefile sharing same root name, as the initial module resolution to find this modulefile to evaluation has cached resolution result. This side effect should not however impact more than the project testsuite as module resolution should not be defined within a modulefile but within modulerc files. 2019-12-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Use modEqStatic proc in findModules * modulecmd.tcl.in: Introduce doesModMatchAtDepth procedure When defining modMatchAtDepth procedure also define the doesModMatchAtDepth procedure, similar to modMatchAtDepth but only receiving one module name as argument and returning a boolean. * modulecmd.tcl.in: Hardwire modMatchAtDepth procedure Redefine the modMatchAtDepth to hardwire indepth and test argument directly at procedure definition time to optimize performances. * modulecmd.tcl.in: Introduce modEqStatic procedure Introduce the modEqStatic procedure, a more static version of the modEq procedure to use in repetitive comparison contexts like done in getModules and modMatchAtDepth. In modEqStatic, search query is hard wired which removes the need to call getModuleVersSpec each time the procedure is called. Instead getModuleVersSpec is called when the modEqStatic procedure is defined to get the hard wire elements. Doing so saves a lot of time in the getModules routine. 2019-12-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/mb.in: contrib: adapt 'mb' script to profile rather bench module Adapt `mb` script to profile modulecmd test runs rather bench them when `profile` argument is passed to the script. * .gitignore, Makefile, contrib/mlprof.in: contrib: add 'mlprof' script Add the 'mlprof' script which wraps modulecmd.tcl to collect profiling information on its execution. 2019-12-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/140-color.exp: Highlight avail/whatis res matching adv vers spec query Improve highlighting of module avail and whatis search result by coloring module names matching search query expressed with the advanced version specifiers. A name@1,3 or name@1:3 queries now highlight name/1 and name/3 strings found in search result. 2019-12-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.70-maint/260-extended_default.exp, testsuite/modules.70-maint/270-adv_version_spec.exp, .../modules.70-maint/272-adv_version_spec-range.exp: Fix avail search for default vers when not matching query Fix module avail --default queries when modulefile default version does not match query: select latest version from modulefiles matching query unless implicit_default configuration is disabled in which case no default version is returned. * modulecmd.tcl.in, testsuite/modules.70-maint/270-adv_version_spec.exp, testsuite/modules.70-maint/271-adv_version_spec-in.exp: Fix avail queries in no-depth mode when res is a virtual mod When a module avail query performed in no-indepth mode and targets a virtual module, fix result to filter-out the directory holding the virtual module from result. * testsuite/modulefiles.indepth/deepA/1/notamod, testsuite/modulefiles.indepth/deepA/2/1/notamod, testsuite/modulefiles.indepth/deepA/4/.modulerc, testsuite/modulefiles.indepth/deepA/4/1/1/notamod, testsuite/modulefiles.indepth/deepA/4/1/2/1, testsuite/modulefiles.indepth/deepA/4/1/2/3, testsuite/modulefiles.indepth/deepA/4/1/3/.modulerc, testsuite/modulefiles.indepth/deepA/4/1/3/1, testsuite/modulefiles.indepth/deepA/4/1/3/2, testsuite/modules.70-maint/260-extended_default.exp, testsuite/modules.70-maint/270-adv_version_spec.exp, testsuite/modules.70-maint/272-adv_version_spec-range.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/080-noindepth.exp: ts: add tests for avail dir and filtering fixes * modulecmd.tcl.in: Fix avail queries when dirs in result in no-indepth mode In case a module avail query performed in a no-indepth mode with --latest/-L or --default/-d flags either enabled or disabled, fix query processing to return directory elements if they are part of result. 2019-12-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Fix -L/-d queries when upper dir not matching query In case module avail query does not match a directory but only its contained elements (for instance `module av mod/7` matches mod/7.1 and mod/7.2 but not mod/), fix query processing to correctly return latest or default element in case --latest/-L or --default/-d flags are set. Add an ext_filter argument to getModules procedure to indicate that directories of elements matching query should be part of the result list even if these directories does not match query. This ext_filter argument is enabled by listModules procedure when latest or default filters are enabled. These directories are used when filtering is enabled to determine what element should be displayed. 2019-12-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml: travis: no more need for md5sha1sum pkg on OSX md5sum is now provided by coreutils 2019-12-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../design/advanced-module-version-specifiers.rst, doc/source/design/extended-default.rst, doc/source/design/insensitive-case.rst, doc/source/design/module-selection-contexts.rst: doc: fix rst bullet lists in design docs Conform to RST docutils standard [1] that express bullet lists and nested bullet lists should be separated by a blank line before and after them. Fixes #306. [1] https://docutils.sourceforge.io/docs/ref/rst/r estructuredtext.html#bullet-lists 2019-12-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/rpm/environment-modules.spec.in: rpm: fix spec file for el8 build Remove Modules compat version build dependency on tclx-devel package as TclX is not provided anymore in el8. Convert shebang of createmodule.py tool from python to python3. 2019-11-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml: travis: explicitly install wget on osx to fix libssl dep issue 2019-11-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst: doc: add anchor for each module sub-cmd and env var * doc/source/modulefile.rst: doc: add anchor for each modulefile command 2019-11-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.2/advvers10/1, testsuite/modulefiles.2/advvers10/2, testsuite/modulefiles.2/advvers10/3, testsuite/modulefiles.2/advvers10/4, testsuite/modulefiles.2/advvers10/5, testsuite/modulefiles.2/advvers10/6, testsuite/modulefiles.2/advvers10/7, testsuite/modulefiles.2/advvers10/8, testsuite/modulefiles.2/advvers8/1, testsuite/modulefiles.2/advvers8/2, testsuite/modulefiles.2/advvers8/3, testsuite/modulefiles.2/advvers9/.modulerc, testsuite/modulefiles.2/advvers9/1, testsuite/modulefiles.2/advvers9/2, testsuite/modulefiles.2/advvers9/3, testsuite/modulefiles.deps/haa, testsuite/modulefiles.deps/hab, testsuite/modulefiles.deps/hac/.modulerc, testsuite/modulefiles.deps/hac/1, testsuite/modulefiles.deps/hac/2, testsuite/modulefiles.deps/had, testsuite/modulefiles.deps/hae, testsuite/modules.50-cmds/378-sametarget.exp, .../modules.70-maint/271-adv_version_spec-in.exp, .../272-adv_version_spec-range.exp: ts: check load/prereq handle loaded non-default the same Add test to check dependency resolution applies the same against a non default version loaded whether module load/prereq is used to declared and whatever the auto_handling module enabled. Handling was different between module load and prereq prior c50e2ba7d3a03ecd2baa933a5ce8991835f3feb1. Which fixes #228. Added tests also check behavior against advanced module version specifier. 2019-11-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitignore, doc/demo/Makefile: doc/demo: add Makefile to build imgs from session cast * .gitignore, Makefile, contrib/playdemo.in: contrib: add 'playdemo' script 2019-11-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/demo/sc19/01welcome.cast, doc/demo/sc19/02config.cast, doc/demo/sc19/03auto_handling.cast, doc/demo/sc19/04icase.cast, doc/demo/sc19/05extended_default.cast, doc/demo/sc19/06advanced_version_spec.cast, doc/demo/sc19/07thanks.cast, doc/demo/sc19/script, doc/example/sc19/modulefiles/appA/1.0, doc/example/sc19/modulefiles/appA/2.0, doc/example/sc19/modulefiles/appB/1.0, doc/example/sc19/modulefiles/appC/.modulerc, doc/example/sc19/modulefiles/appC/1.0, doc/example/sc19/modulefiles/appC/2.0, doc/example/sc19/modulefiles/appC/2.2.10, doc/example/sc19/modulefiles/appC/2.2.2, doc/example/sc19/modulefiles/appC/2.4, doc/example/sc19/modulefiles/appC/3.6, doc/example/sc19/modulefiles/appD/1.2, doc/example/sc19/modulefiles/appD/2.1, doc/example/sc19/modulefiles/libX/1.0, doc/example/sc19/modulefiles/libX/2.0, doc/example/sc19/modulefiles/libY/.modulerc, doc/example/sc19/modulefiles/libY/1.0, doc/example/sc19/modulefiles/libY/2.0, doc/example/sc19/modulefiles/toolchain/a, doc/example/sc19/modulefiles/toolchain/b: doc: add sc19 demo 2019-11-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Skip mod loading msg if mod already loaded Skip output of module loading message if module is already loaded. * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp: Enclose in quote dep spec in error/warning mesg Fix error and warning messages relative to dependency management to enclose dependency specification in single quotes to clearly distinguish specification from each other. 2019-11-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version 4.4.0 2019-11-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc. conflict fix/design notes/MODULESHOME in NEWS * doc/source/diff_v3_v4.rst, doc/source/module.rst, doc/source/modulefile.rst: doc: desc. advanced_version_spec in diff/man * INSTALL.rst, configure: doc: desc. advanced_version_spec in configure/INSTALL * MIGRATING.rst, NEWS.rst: doc: desc. advanced_version_spec in NEWS 2019-11-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst: doc: desc. advanced_version_spec in MIGRATING 2019-11-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module: init: fix missing -i/--icase in completion scripts * testsuite/example/modulerc-1.in, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/220-config.exp: ts: adapt tests to new config option home * INSTALL.rst, Makefile, Makefile.inc.in, configure, doc/source/module.rst, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, site.exp.in: Introduce home configuration option Make MODULESHOME environment variable controllable through the `config` sub-command with `home` configuration option. A `--with-moduleshome` argument is also added to the ./configure script to set specific default value for this option at installation time. Fixes #292 2019-11-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../design/advanced-module-version-specifiers.rst: doc: refine again advanced_version_spec design * testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/020-module.exp, testsuite/modulefiles.2/advvers6/3.0, testsuite/modulefiles.2/advvers6/3.1, testsuite/modulefiles.2/advvers6/3.2, .../272-adv_version_spec-range.exp: ts: additionnal adv_vers_spec in 70/272 and install ts * .cirrus.yml: cirrus: install openmp to satisfy R needs 2019-11-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.2/advvers6/1.2, testsuite/modulefiles.2/advvers6/1.3, testsuite/modulefiles.2/advvers6/1.4, testsuite/modulefiles.2/advvers6/1.5.1, testsuite/modulefiles.2/advvers6/1.5.2, testsuite/modulefiles.2/advvers6/1.6, testsuite/modulefiles.2/advvers6/1.7, testsuite/modulefiles.2/advvers6/1.8, testsuite/modulefiles.2/advvers6/2.0, testsuite/modulefiles.2/advvers6/2.1, testsuite/modulefiles.2/advvers7/.modulerc, testsuite/modulefiles.2/advvers7/0.9, testsuite/modulefiles.2/advvers7/1.0, testsuite/modulefiles.2/advvers7/1.1, testsuite/modulefiles.2/advvers7/1.2, testsuite/modulefiles.2/advvers7/1.3.1, testsuite/modulefiles.2/advvers7/1.3.2, testsuite/modulefiles.2/advvers7/2.0, testsuite/modulefiles.2/advvers7/2.1, testsuite/modulefiles.2/advvers7/2.2, testsuite/modulefiles.2/advvers7/3.0, testsuite/modulefiles.2/advvers7/3.1, testsuite/modulefiles.2/advvers7/3.2, testsuite/modulefiles.2/advvers7/3.3, testsuite/modulefiles.2/advvers7/4.0, testsuite/modulefiles.2/advvers7/4.1, testsuite/modulefiles.2/advvers7/4.2, testsuite/modulefiles.2/advvers7/5.0, testsuite/modulefiles.2/advvers7/5.1, testsuite/modulefiles.2/advvers7/5.2, testsuite/modulefiles.2/advvers7/5.3, testsuite/modulefiles.2/advvers7/6.0, testsuite/modulefiles.2/advvers7/6.1, testsuite/modulefiles.2/advvers7/6.2, testsuite/modulefiles.2/advvers7/6.3, testsuite/modulefiles.2/advvers7/6.4, testsuite/modulefiles.2/advvers7/6.5, testsuite/modulefiles.2/advvers7/6.6, testsuite/modulefiles.2/advvers7/6.7, testsuite/modulefiles.2/advvers7/7.0, testsuite/modulefiles.2/advvers7/8.1.1, testsuite/modulefiles.2/advvers7/8.1.2, testsuite/modulefiles.2/advvers7/8.2.1, testsuite/modulefiles.2/advvers7/8.2.2, testsuite/modulefiles.2/advvers7/8.3.1, testsuite/modulefiles.2/advvers7/8.3.2, testsuite/modulefiles.2/advvers7/8.4.1, testsuite/modulefiles.2/advvers7/8.4.2, testsuite/modulefiles.2/advvers7/8.5.1, testsuite/modulefiles.2/advvers7/8.5.2, testsuite/modulefiles.2/advvers7/9.0, testsuite/modules.00-init/006-procs.exp, .../272-adv_version_spec-range.exp: ts: vers range spec compat check mod ctx tests 2019-11-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../272-adv_version_spec-range.exp: ts: vers range spec select one mod ctx tests 2019-11-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Serialize version range specifier in MODULES_{LMPREREQ,LMCONFLICT} When saving current loaded prereq and conflict through MODULES_LMPREREQ and MODULES_LMCONFLICT environment variable, translate version range specifier `:` into `<` character to distinguish it from path separator character. * testsuite/modulefiles.2/extdfl7/.modulerc, testsuite/modulefiles.2/extdfl7/10a, testsuite/modulefiles.2/extdfl7/10foo, testsuite/modulefiles.2/extdfl7/10g, testsuite/modulefiles.2/extdfl8/1.3.1, testsuite/modulefiles.2/extdfl8/1.3.7, testsuite/modulefiles.2/extdfl8/1.33, testsuite/modulefiles.2/extdfl8/1.4.5, testsuite/modules.00-init/005-init_ts.exp, .../272-adv_version_spec-range.exp: ts: vers range spec basic and search-specific ctx tests 2019-11-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Introduce range of version in mod version spec A range of version may be specified after '@' with the help of ':' character to express *greater or equal* (ex: `1.2:`), *lower or equal* (ex: `:1.2`) or *between or equal* (ex: `1.1:1.2`) conditions. Adapt procedures that parse module version specifier or compare module version. Error is raised if version specified for range are not versions or higher version is lower than lower version. Non 'xdigit' character in higher part of version number is considered as a non version number. It avoids symbols like `default`, `new` and so on to get in the version range way. 2019-11-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.70-maint/240-icase.exp, .../modules.70-maint/270-adv_version_spec.exp, .../modules.70-maint/271-adv_version_spec-in.exp: ts: skip icase tests if underlying fs is case-insensitive 2019-11-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/378-sametarget.exp: One conflict statement may match multiple loaded mod Conflict defined with a generic module name or an advanced version specifier may match multiple loaded modules (generally in case multiple loaded modules share same root name). Loaded environment analysis has been fixed to bound conflict to all loaded modules matching it. As a result the dependent reload mechanism is not triggered when one loaded module matching conflict is removed if another loaded module still match the conflict. * testsuite/modulefiles.2/advvers4/1.1, testsuite/modulefiles.2/advvers4/1.2, testsuite/modulefiles.2/advvers4/1.3, testsuite/modulefiles.2/advvers4/1.4, testsuite/modulefiles.2/advvers4/1.5.1, testsuite/modulefiles.2/advvers4/1.5.2, testsuite/modulefiles.2/advvers4/1.6, testsuite/modulefiles.2/advvers4/1.7, testsuite/modulefiles.2/advvers4/1.8, testsuite/modulefiles.2/advvers4/2.0, testsuite/modulefiles.2/advvers4/2.1, testsuite/modulefiles.2/advvers5/.modulerc, testsuite/modulefiles.2/advvers5/0.9, testsuite/modulefiles.2/advvers5/1.0, testsuite/modulefiles.2/advvers5/1.1, testsuite/modulefiles.2/advvers5/1.2, testsuite/modulefiles.2/advvers5/1.3.1, testsuite/modulefiles.2/advvers5/1.3.2, testsuite/modulefiles.2/advvers5/2.0, testsuite/modulefiles.2/advvers5/2.1, testsuite/modulefiles.2/advvers5/2.2, testsuite/modulefiles.2/advvers5/3.0, testsuite/modulefiles.2/advvers5/3.1, testsuite/modulefiles.2/advvers5/3.2, testsuite/modulefiles.2/advvers5/3.3, testsuite/modulefiles.2/advvers5/4.0, testsuite/modulefiles.2/advvers5/4.1, testsuite/modulefiles.2/advvers5/4.2, testsuite/modulefiles.2/advvers5/5.0, testsuite/modulefiles.2/advvers5/5.1, testsuite/modulefiles.2/advvers5/5.2, testsuite/modulefiles.2/advvers5/5.3, testsuite/modulefiles.2/advvers5/6.0, testsuite/modulefiles.2/advvers5/6.1, testsuite/modulefiles.2/advvers5/6.2, testsuite/modulefiles.2/advvers5/6.3, testsuite/modulefiles.2/advvers5/6.4, testsuite/modulefiles.2/advvers5/6.5, testsuite/modulefiles.2/advvers5/6.6, testsuite/modulefiles.2/advvers5/6.7, testsuite/modulefiles.2/advvers5/7.0, testsuite/modulefiles.2/advvers5/8.1.1, testsuite/modulefiles.2/advvers5/8.1.2, testsuite/modulefiles.2/advvers5/8.2.1, testsuite/modulefiles.2/advvers5/8.2.2, testsuite/modulefiles.2/advvers5/8.3.1, testsuite/modulefiles.2/advvers5/8.3.2, testsuite/modulefiles.2/advvers5/8.4.1, testsuite/modulefiles.2/advvers5/8.4.2, testsuite/modulefiles.2/advvers5/8.5.1, testsuite/modulefiles.2/advvers5/8.5.2, testsuite/modulefiles.2/advvers5/9.0, .../modules.70-maint/271-adv_version_spec-in.exp: ts: vers list spec compat check mod ctx tests 2019-10-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Record mod vers spec with setModuleVersSpec proc * doc/source/design/insensitive-case.rst: doc: desc avail/load corner case for icase design * .../design/advanced-module-version-specifiers.rst: doc: refine advanced_version_spec design * testsuite/modulefiles.2/extdfl/.1.3.3, .../modules.70-maint/271-adv_version_spec-in.exp: ts: vers list spec select one mod ctx tests 2019-10-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.2/ICASE3/1.1, testsuite/modulefiles.2/ICASE3/VERS.1, testsuite/modulefiles.2/ICASE3/vers.1, testsuite/modulefiles.2/advvers@2.2, testsuite/modulefiles.2/iCaSe3/1.3, testsuite/modulefiles.2/iCaSe3/1.4, testsuite/modulefiles.2/icase3/1.2, testsuite/modulefiles.2/nocase/deep/2, testsuite/modules.70-maint/240-icase.exp, .../modules.70-maint/271-adv_version_spec-in.exp: ts: vers list spec basic and search-specific ctx tests 2019-10-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles.deps/con1/1.1, testsuite/modulefiles.deps/con1/1.2, testsuite/modulefiles.deps/con2/2.1, testsuite/modulefiles.deps/con2/2.2, testsuite/modulefiles.deps/con2/2.3, testsuite/modules.50-cmds/131-conflict-module.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/380-altname.exp, testsuite/modules.70-maint/240-icase.exp, .../modules.70-maint/260-extended_default.exp, .../modules.70-maint/270-adv_version_spec.exp: Handle complex mod vers spec in isModuleEvaluated Rework whole isModuleEvaluated procedure to check all names of loaded or loadind module attempt against module version specifiers passed as argument. Add the 'exclmod' argument to the procedure to exclude from tested list the currently evaluated module: avoid this way detecting self on reflexive conflict definition. As a result just loaded or currently loading conflicting modules are better detected when conflict is expressed against an alias name or a module generic name. * modulecmd.tcl.in: Rename arrayKeyMatch into getEqArrayKey As procedure returns key string, not a boolean value. * modulecmd.tcl.in: Rename arrayKeyEq into getArrayKey And remove call to module version specifier translation: procedure only receive regular module/version specification. * modulecmd.tcl.in: Improve extdfl check in modVersCmp 2019-10-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, .../modules.70-maint/260-extended_default.exp: Adapt mod ext dfl check in modEq if contains *? When query's module contains globbing wildcard characters (? or *) adapt extended default match test to use an escaped version of module designation when modEq is called for an equal test. 2019-10-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.20-locate/030-defvers.exp, .../modules.70-maint/270-adv_version_spec.exp: Makes arrayKeyMatch rely on modEq Call modEq to check mod name passed matches array elements, so arrayKeyMatch procedure does not need to be specialized to match icase and extended_default setup, which is now deleguated to modEq. * modulecmd.tcl.in: Makes modMatchAtDepth rely on modEq Call modEq to check mod name passed in modMatchAtDepth, so this procedure does not need to handle the icase check which is deleguated to modEq. * modulecmd.tcl.in: Fix modEq for empty mod name Test empty module name against simple module name/vers test branch. 2019-10-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add support for contains test in modEq By setting test argument of modEq procedure to 'matchin', perform contains-style match test. 2019-10-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Adapt modname check in modEq if contains *? When query's module name contains globbing wildcard characters (? or *) adapt test to check module names match and then extract module version in modEq. * testsuite/modulefiles.2/e+t.fl/1.3.1, testsuite/modulefiles.2/e+t.fl/1.3.7, testsuite/modulefiles.2/e+t.fl/1.4.5, testsuite/modules.70-maint/260-extended_default.exp, testsuite/modules.70-maint/270-adv_version_spec.exp: ts: test wildcard chars in mod name on 70/{260,270} 2019-10-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Handle version list spec on modEq Adapt modEq procedure to handle version list specifier (ex: @1,2). Introduce modVersCmp procedure to handle version comparison. * modulecmd.tcl.in: Introduce list of version in mod version spec A list of version may be specified after '@' by joining the multiple versions to set with the ',' character (ex: @1.2,1.3). Parse this syntax and store version specification information in parseModuleVersionSpecifier procedure and adapt procedures that handle the version specification information like getOneModuleFromVersSpec and getAllModuleFromVersSpec. * modulecmd.tcl.in: Rework storage of mod version specifier Change internal storage structure to hold module version specifier with 4 fields: complete module name version, module name, version comparison set, and module version. * modulecmd.tcl.in: Rework getModuleVersSpec into getModuleFromVersSpec Change getModuleVersSpec procedure into getModuleFromVersSpec to extract just specified module (name and version) from module name and version specifier. 2019-10-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Get one mod name from spec with getOneModuleFromVersSpec Introduce getOneModuleFromVersSpec procedure to extract one module name from module name version specification. * modulecmd.tcl.in: Test all mod mentionned in spec on isModuleSpecHidden Add a getAllModulesFromVersSpec procedure that parses module name version specification to return a list of all the module mentionned in specification. Use this new helper procedure in isModuleSpecHidden to check if one module from returned list is an hidden module. * modulecmd.tcl.in: Adapt modEq to include modMatch test Refactor modEq procedure to include modMatch-kind test. * modulecmd.tcl.in: Define mod cmp procs in getModules instead findModules Define the module name and version comparison procedures at the beginning of the getModules procedure so it is not needed to define the modMatch procedure in findModules as findModules is only called by getModules. 2019-10-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Adapt modEq to include modStartEq test Add a 'test' argument to modEq procedure to only check if passed module name matches pattern on pattern length when it equals to 'eqstart'. So modStartEq procedure is not needed anymore, calls are replaced with [modEq $pattern $mod eqstart]. * modulecmd.tcl.in: Makes modStartNb rely on modStartEq Call modStartEq to check full name passed in modStartNb, so modStartNb does not need to handle the extended_default check which is then deleguated to modStartEq. Introduce getModuleNameFromVersSpec to extract module name from module name version specification. 2019-10-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, .../modules.70-maint/270-adv_version_spec.exp: Module version specifier cannot contain / char No deep version specification to ease version comparison. * modulecmd.tcl.in: Translate vers spec directly in arrayKeyEq Pass the module version specification toward arrayKeyEq to translate it there for module matching. * modulecmd.tcl.in: Translate vers spec directly in modStartNb Pass the module version specification toward modStartNb to translate it there for module matching. 2019-10-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Translate vers spec directly in modStartEq Pass the module version specification toward modStartEq to translate it there for module matching. * modulecmd.tcl.in: Translate vers spec directly in arrayKeyMatch Pass the module version specification toward arrayKeyMatch to translate it there for module matching. * modulecmd.tcl.in: Get one module name from vers spec in getPathToModule Translate module name version specification in getPathToModule to extract one module version name from it. Use that to determine the module name root to find. * modulecmd.tcl.in: Get one module name from vers spec in listModules Translate module name version specification in listModules to extract one module version name from it. Use that to determine the no-indepth search properties. * modulecmd.tcl.in: Get one module name from vers spec in getModules Translate module name version specification in getModules to extract one module version name from it. Use that to determine the module name root to find and no-indepth search properties. * modulecmd.tcl.in: Translate vers spec directly in modMatch Pass the module version specification toward modMatch procedure to translate it there for module matching. modMatch procedure is adapted to apply the translation only if a 'trspec' argument is set to 1. A pattern suffix 'psuf' argument is also added to give the ability to append a suffix string to translated module name version. * modulecmd.tcl.in: Add isModuleSpecHidden to translate vers spec Introduce the isModuleSpecHidden procedure to pass it the module version specification which is there translated to check if corresponding module names are hidden or not. * modulecmd.tcl.in: Translate vers spec directly in modMatchAtDepth Pass the module version specification toward modMatchAtDepth to translate it there for module matching. Also pass the 'contains' mode toward this procedure to adapt module name version once translated. 2019-10-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles.2/extdfl2/.modulerc, testsuite/modulefiles.2/extdfl7/.modulerc, testsuite/modules.70-maint/240-icase.exp, .../modules.70-maint/260-extended_default.exp, .../modules.70-maint/270-adv_version_spec.exp: Adapt modEq proc to icase and extended_default config 2019-10-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.70-maint/270-adv_version_spec.exp: No need to translate mod vers spec in conflict proc Get error message reflecting way conflict is defined. * modulecmd.tcl.in, .../modules.70-maint/270-adv_version_spec.exp: Introduce a modEq proc for cmdModuleSearch/getModules Check 2 module names are equal with a dedicated proc called 'modEq' that translates one name argument against recorded module version specifiers. Use this procedure in cmdModuleSearch, thus this procedure does not need to translate module name it receives against recorded module version specifiers. Also use modEq for a comparison in getModules procedure. 2019-10-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.2/.modulerc, testsuite/modulefiles.2/advvers/1.3, testsuite/modulefiles.2/advvers/1.4, testsuite/modulefiles.2/advvers/1.5, testsuite/modulefiles.2/advvers/1.6, testsuite/modulefiles.2/advvers/1.7, testsuite/modulefiles.2/advvers/1.8, testsuite/modulefiles.2/advvers2/1.0, testsuite/modulefiles.2/advvers2/1.1, testsuite/modulefiles.2/advvers2/1.2, testsuite/modulefiles.2/advvers2/1.3, testsuite/modulefiles.2/advvers2/2.0, testsuite/modulefiles.2/advvers2/2.1, testsuite/modulefiles.2/advvers2/2.2, testsuite/modulefiles.2/advvers2/3.0, testsuite/modulefiles.2/advvers2/3.1, testsuite/modulefiles.2/advvers2/3.2, testsuite/modulefiles.2/advvers2/3.3, testsuite/modulefiles.2/advvers2/4.0, testsuite/modulefiles.2/advvers2/4.1, testsuite/modulefiles.2/advvers2/4.2, testsuite/modulefiles.2/advvers2/5.0, testsuite/modulefiles.2/advvers2/5.1, testsuite/modulefiles.2/advvers2/5.2, testsuite/modulefiles.2/advvers2/5.3, testsuite/modulefiles.2/advvers2/6.0, testsuite/modulefiles.2/advvers2/6.1, testsuite/modulefiles.2/advvers2/6.2, testsuite/modulefiles.2/advvers2/6.3, testsuite/modulefiles.2/advvers2/6.4, testsuite/modulefiles.2/advvers2/6.5, testsuite/modulefiles.2/advvers2/6.6, testsuite/modulefiles.2/advvers2/6.7, testsuite/modulefiles.2/advvers2/7.0, testsuite/modulefiles.2/advvers2/8.1.1, testsuite/modulefiles.2/advvers2/8.1.2, testsuite/modulefiles.2/advvers2/8.2.1, testsuite/modulefiles.2/advvers2/8.2.2, testsuite/modulefiles.2/advvers2/8.3.1, testsuite/modulefiles.2/advvers2/8.3.2, testsuite/modulefiles.2/advvers2/8.4.1, testsuite/modulefiles.2/advvers2/8.4.2, testsuite/modulefiles.2/advvers2/8.5.1, testsuite/modulefiles.2/advvers2/8.5.2, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.70-maint/240-icase.exp, .../modules.70-maint/270-adv_version_spec.exp: ts: add adv vers spec tests for check compat mod ctx 2019-10-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.2/advvers/1.2, .../modules.70-maint/270-adv_version_spec.exp: ts: add adv vers spec tests for select one mod ctx 2019-10-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.2/advvers/deep/1/1.2, testsuite/modulefiles.2/advvers@2.1, testsuite/modulefiles.2/extdfl/.1.3.4, testsuite/modules.00-init/005-init_ts.exp, .../modules.70-maint/270-adv_version_spec.exp: ts: add basic adv vers spec test + search-specific ctx 2019-10-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Fetch translated vers spec in 'check compat' contexts * modulecmd.tcl.in: Fetch translated vers spec in 'select one' contexts * modulecmd.tcl.in: Fetch translated vers spec in 'return all' contexts 2019-10-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Parse mod vers specifier where mod could be specified Introduce parseModuleVersionSpecifier procedure to parse module specification and extract from it module name and version specifier. Call this new procedure in all procedures receiving module specification: module, conflict, prereq and is-loaded. * modulecmd.tcl.in: Rework error mngt in module proc Do not catch error in procedure, let it flow upstream and catch it at top level. 2019-09-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml, testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.70-maint/220-config.exp: ts/travis: adapt existing tests to advanced_version_spec cfg opt * Makefile, Makefile.inc.in, configure, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, site.exp.in: Introduce advanced_version_spec configuration option Add the advanced_version_spec configuration option that will control the activation of advanced module version specifier syntax. 2019-08-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../design/advanced-module-version-specifiers.rst: doc: add advanced-module-version-specifiers design spec 2019-11-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst: doc: desc extended_default in NEWS/MIGRATING 2019-11-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: mention module-info-name-return-basename recipe add in NEWS 2019-09-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst, doc/source/design/extended-default.rst, doc/source/module.rst, doc/source/modulefile.rst, modulecmd.tcl.in, .../modules.70-maint/260-extended_default.exp: Remove '-' from list of ext dfl separator char Remove the '-' character from the list of extended default separator characters, as it is not feasible to determine in all cases the highest version specified after this character (to determine an implicit default). This removal means that only '.' is taken into account as extended default separator. 2019-09-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Apply extended_default to compatibility check context 2019-09-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Rework def of modStartNb alternatives Expand procedure alternatives as individual procedures. The one to activate is renamed 'modStartNb' by defineModStartNbProc. * modulecmd.tcl.in: Rework def of modStartEq alternatives Expand procedure alternatives as individual procedures. The one to activate is renamed 'modStartEq' by defineModStartEqProc. 2019-09-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.2/extdfl/.modulerc, testsuite/modulefiles.2/extdfl/1.0.0-alpha.1, testsuite/modulefiles.2/extdfl/1.0.0-alpha.beta, testsuite/modulefiles.2/extdfl/1.0.0-beta, testsuite/modulefiles.2/extdfl/1.0.2, testsuite/modulefiles.2/extdfl/1.1.0, testsuite/modulefiles.2/extdfl/1.1.0-beta, testsuite/modulefiles.2/extdfl/1.2.10, testsuite/modulefiles.2/extdfl/1.2.3, testsuite/modulefiles.2/extdfl/1.3.1, testsuite/modulefiles.2/extdfl/1.3.7, testsuite/modulefiles.2/extdfl/1.4.5, testsuite/modulefiles.2/extdfl/2.0, testsuite/modulefiles.2/extdfl/2.0.1, testsuite/modulefiles.2/extdfl2/2.rc.1, testsuite/modulefiles.2/extdfl2/2.rc.2, testsuite/modulefiles.2/extdfl2/3.0.0, testsuite/modulefiles.2/extdfl2/3.0.15, testsuite/modulefiles.2/extdfl2/3.0.2, testsuite/modulefiles.2/extdfl2/3.010.1, testsuite/modulefiles.2/extdfl2/3.09.3, testsuite/modulefiles.2/extdfl2/3.1.3, testsuite/modulefiles.2/extdfl2/3.1.7, testsuite/modulefiles.2/extdfl2/3.10.2, testsuite/modulefiles.2/extdfl2/3.9.2, testsuite/modulefiles.2/extdfl3/.modulerc, testsuite/modulefiles.2/extdfl3/1.0, testsuite/modulefiles.2/extdfl3/1.1/3, testsuite/modulefiles.2/extdfl3/1.3/4, testsuite/modulefiles.2/extdfl6/conflict, testsuite/modulefiles.2/extdfl6/conflict2, testsuite/modulefiles.2/extdfl6/conflicta, testsuite/modulefiles.2/extdfl6/conflicts, testsuite/modulefiles.2/extdfl6/info, testsuite/modulefiles.2/extdfl6/info2, testsuite/modulefiles.2/extdfl6/isloaded, testsuite/modulefiles.2/extdfl6/isloaded2, testsuite/modulefiles.2/extdfl6/load, testsuite/modulefiles.2/extdfl6/load2, testsuite/modulefiles.2/extdfl6/load3, testsuite/modulefiles.2/extdfl6/prereq, testsuite/modulefiles.2/extdfl6/prereq2, testsuite/modulefiles.2/extdfl6/prereqc, testsuite/modulefiles.2/extdfl6/prereqi, testsuite/modulefiles.2/extdfl6/prereqi2, testsuite/modulefiles.2/extdfl6/unload, testsuite/modulefiles.2/extdfl6/unload2, testsuite/modulefiles.2/extdfl7/.modulerc, testsuite/modulefiles.2/extdfl7/1.1, testsuite/modulefiles.2/extdfl7/2.1, testsuite/modulefiles.2/extdfl7/2.10, testsuite/modulefiles.2/extdfl7/3.1, testsuite/modulefiles.2/extdfl7/4.1, testsuite/modulefiles.2/extdfl7/5.1, testsuite/modulefiles.2/extdfl7/6.1, testsuite/modulefiles.2/extdfl7/7.0, testsuite/modulefiles.2/extdfl7/7.1, testsuite/modulefiles.2/extdflb.4.0, testsuite/modulefiles.2/extdflb.4.1/1, testsuite/modulefiles.2/extdflc-4/1, testsuite/modulefiles.2/extdflc-5/1, .../modules.70-maint/260-extended_default.exp: ts: cover extended_default with tests 2019-09-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Rework def of arrayKeyMatch alternatives Expand procedure alternatives as individual procedures. The one to activate is renamed 'arrayKeyMatch' by defineArrayKeyMatchProc. * modulecmd.tcl.in: Rework def of modMatch alternatives Expand procedure alternatives as individual procedures. The one to activate is renamed 'modMatch' by defineModMatchProc. * modulecmd.tcl.in: Rework def of modMatchAtDepth alternatives Expand procedure alternatives as individual procedures. The one to activate is renamed 'modMatchAtDepth' by defineModMatchAtDepthProc. * modulecmd.tcl.in: Apply extended_default to return all matching mod context Only update modMatch. No need to update modMatchAtDepth procedure to take into account extended_default, as all match tests going through this procedures are already appended with a wildcard character (*). 2019-09-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/extended-default.rst: doc: refine extended_default design 2019-09-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Apply extended_default to single module selection context 2019-09-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst, doc/source/modulefile.rst: doc: desc extended_default in man/diff/INSTALL * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.70-maint/220-config.exp: ts: adapt existing tests to extended_default cfg opt * Makefile, Makefile.inc.in, configure, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, site.exp.in: Introduce extended_default configuration option Add the ability to select a module when its version is partially specified. Enable this behavior through a new configuration option named `extended_default` (which defines `MODULES_EXTENDED_DEFAULT` environment variable when set). When extended_default mechanism is enabled a module version may be specified by its starting portion, part separated from the rest of the version string by a `.` or `-` character. When multiple versions match partial version specified and only one module should be returned, default version (implicit or explicit) among matches is returned. In case `implicit_default` is disabled and no explicit default is found among matches, an error is returned. Mechanism may be enabled by default in `modulecmd.tcl` script with option `--enable-extended-default` passed to `./configure` script. 2019-11-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: add in NEWS issue ref and contrib. name for icase feature 2019-09-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/250-nan.exp: ts: ensure icase is disabled for 70/250 tests 2019-09-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/insensitive-case.rst: doc: desc corner cases in icase design 2019-09-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/152-module-emptyarg.exp: ts: adapt 50/152 tests due to whatis changes in ts/modpath.2 * modulecmd.tcl.in: Introduce arrayKeyEq help proc Search array keys for an insensitive case match if icase mode is enabled and no sensitive case match is found. 2019-09-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Resolve vers or alias specified with different case When insensitive case match is enabled for module version specification to select one module context, if no case sensitive exact match is found when trying to resolve a symbolic version or a module alias, then select highest case insensitive matching version if any. This change enables a case insensitive match only for direct alias or symbol resolution. In case an alias or symbolic version icase matches another alias or symbolic version which in turn also icase matches a modulefile, resolution will currently fail. * modulecmd.tcl.in: Define modStartNb proc on the fly Make getLoadedWithClosestName procedure relies on a modStartNb procedure to compare how many starting parts between both names passed as argument are equivalent. This modStartNb is defined on the fly by the defineModStartNbProc procedure to adapt its code to the current icase enabled mode. 2019-09-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Define modStartEq proc on the fly Make doesModuleMatchesName, doesLoadingModuleMatchesName and getAllModuleResolvedName procedures rely on a modStartEq procedure to compare if both names passed as argument have the same starting parts. This modStartEq is defined on the fly by the defineModStartEqProc procedure to adapt its code to the current icase enabled mode. * modulecmd.tcl.in: Get path to module specified with different case When insensitive case match is enabled for module version specification to select one module context, if no case sensitive exact match is found then select highest case insensitive matching version. 2019-09-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Define modMatchAtDepth procedure on the fly Add a defineModMatchAtDepthProc procedure that defines modMatchAtDepth procedure with code adapted to the current indepth and icase configuration. On the fly procedure definition helps to improve performance as defined procedure is finely tuned. * modulecmd.tcl.in: Define modMatch procedure on the fly Add a defineModMatchProc procedure that defines modMatch procedure with code adapted to the current icase configuration. On the fly procedure definition helps to improve performance as defined procedure is finely tuned. 2019-09-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.2/.modulerc, testsuite/modulefiles.2/ICASE/1, testsuite/modulefiles.2/ICASE2/1, testsuite/modulefiles.2/IcAsE/1, testsuite/modulefiles.2/iCaSe/1, testsuite/modulefiles.2/iCaSe2/1, testsuite/modulefiles.2/icASE/1, testsuite/modulefiles.2/icase/1, testsuite/modulefiles.2/icase/conflict, testsuite/modulefiles.2/icase/conflicta, testsuite/modulefiles.2/icase/conflictp, testsuite/modulefiles.2/icase/conflicts, testsuite/modulefiles.2/icase/info, testsuite/modulefiles.2/icase/infoloaded, testsuite/modulefiles.2/icase/isloaded, testsuite/modulefiles.2/icase/load, testsuite/modulefiles.2/icase/loadi, testsuite/modulefiles.2/icase/prereq, testsuite/modulefiles.2/icase/prereqc, testsuite/modulefiles.2/icase/unload, testsuite/modulefiles.2/icase/z, testsuite/modulefiles.2/nocase/.hidden, testsuite/modulefiles.2/nocase/.modulerc, testsuite/modulefiles.2/nocase/1, testsuite/modulefiles.2/nocase/deep/3, testsuite/modulefiles.2/nocase/deep2/notamodule, testsuite/modulefiles.2/nocase/regular, testsuite/modulefiles.2/nocase2, testsuite/modulefiles.2/nocase7/conflictim1, testsuite/modulefiles.2/nocase7/conflictim2, testsuite/modulefiles.2/nocase7/prereqim1, testsuite/modulefiles.2/nocase7/prereqim2, testsuite/modules.70-maint/220-config.exp, testsuite/modules.70-maint/240-icase.exp: ts: add tests for icase config * doc/source/module.rst: doc: search sub-cmd is always performed icase Clarify on search sub-command that search query string is always matched in a case insensitive manner. * modulecmd.tcl.in: Mention -i/--icase in help message 2019-09-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module: init: add 'icase' option to completion scripts 2019-09-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, Makefile.inc.in, configure, modulecmd.tcl.in, site.exp.in: Rework avail_icase into icase option Rework avail_icase configuration option in a generic icase option which defines the contexts where to apply a case insensitive match for search query string and module specification: never, only on search-related sub-commands or always. * modulecmd.tcl.in: Migrate 'avail_icase' cfg option retrieval to getConf * INSTALL.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: desc icase in man/diff/INSTALL Fixes #212 * doc/source/module.rst: doc: fix typo in MODULES_SEARCH_MATCH section of module.1 2019-09-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst: doc: desc icase in NEWS/MIGRATING 2019-05-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Match module name in case or nocase mode with modMatch * testsuite/modules.00-init/090-switches.exp, testsuite/modules.70-maint/060-apropos.exp: ts: adapt existing tests to reintroduced icase mode 2019-04-15 Eric Deveaud <edeveaud@pasteur.fr> * modulecmd.tcl.in: icase search only when argument provided * Makefile, Makefile.inc.in, configure, modulecmd.tcl.in: control icase module av at configure time * modulecmd.tcl.in: poc for case insensitive search//avail 2019-08-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/extended-default.rst: doc: add extended-default design spec * doc/source/design/insensitive-case.rst: doc: add insensitive-case design spec * doc/source/design.rst, doc/source/design/module-selection-contexts.rst, doc/source/index.rst: doc: add module-selection-contexts design spec 2019-09-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/example/ensure-user-qualify-modules/siteconfig.tcl, .../ensure-user-qualify-modules/siteconfig.tcl-4.3, doc/source/cookbook/ensure-user-qualify-modules.rst: doc: adapt ensure-user-qualify-modules recipe to config rework 2019-09-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst: doc: desc. conf opt internal rework in NEWS/MIGRATING 2019-08-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * siteconfig.tcl, testsuite/example/siteconfig.tcl-1: Update siteconfig.tcl files with new int config setup ways Use the lappendConf procedure to set the locked_configs option and the setConf procedure to set the avail_report_dir_sym and avail_report_mfile_sym options. * modulecmd.tcl.in: Introduce setConf/unsetConf/lappendConf Add the setConf, unsetConf and lappendConf procedures to provide unified ways to set the value of configuration option. 2019-08-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/100-pager.exp, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/140-color.exp, testsuite/modules.00-init/150-access-init.exp, testsuite/modules.70-maint/220-config.exp: ts: adapt tests to match new getConf debugging output * modulecmd.tcl.in: Rework config option val retrieval in cmdModuleConfig 2019-09-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Migrate 'wa_277' cfg option retrieval to getConf 2019-08-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, modulecmd.tcl.in, site.exp.in: Migrate 'pager' cfg option retrieval to getConf Introduce on the way the @pagercmd@ configuration pattern which is the concatenation of the @pager@ and @pageropts@ patterns with a whitespace joining the two when @pageropts@ is not empty. * modulecmd.tcl.in: Migrate 'colors' cfg option retrieval to getConf * Makefile, modulecmd.tcl.in: Migrate 'color' cfg option retrieval to getConf Use an 'initConfColor' procedure to specifically initialize this 'color' configuration option. Adapt value set for this option from the configure script or through the command-line switches to use the valid public names (never, auto and always) to ensure convertion to the internal value only occurs in the initConfColor procedure. 2019-08-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Migrate 'tcl_ext_lib' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'siteconfig' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'run_quarantine' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'rcfile' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'silent_shell_debug' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'collection_target' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'collection_pin_version' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'avail_report_mfile_sym' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'avail_report_dir_sym' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'extra_siteconfig' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'locked_configs' cfg option retrieval to getConf 2019-08-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Migrate 'verbosity' cfg option retrieval to getConf * modulecmd.tcl.in: Make isVerbosityLevel rely on g_config_defs To get existing verbosity levels * modulecmd.tcl.in: Migrate 'set_shell_startup' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'search_match' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'implicit_default' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'unload_match_order' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'term_background' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'avail_indepth' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'auto_handling' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'ignored_dirs' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'contact' cfg option retrieval to getConf 2019-07-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Introduce 'getConf' proc Add getConf procedure that retrieves any configuration option value and set the value of this option if not yet defined. * modulecmd.tcl.in: Store all configs in a g_configs array * modulecmd.tcl.in, testsuite/modules.00-init/100-pager.exp, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/150-access-init.exp: Rework pager config internal variable Use only one global variable to store pager command configuration and its associated command-line options rather using one variable for the command name and a second one for its options. * modulecmd.tcl.in: Rework colors initialization code Use ::g_colors_list list variable as primary configuration variable rather ::g_colors array variable. Sync array value on list value. * modulecmd.tcl.in: Auto guess config option cmd-line overridde Check if a '::asked_$option' exists, if true it means configuration option has been overridden from the command-line. * modulecmd.tcl.in: Store conf opt props in g_config_defs global array Define a global array named 'g_config_defs' to store the properties of all configuration options. For each option, a list is set to indicate associated superseding environment variable, default value if any, is configuration option lockable to default value, valid value list, internal value representation and procedure to call to initialize option value. 2019-10-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../modulefiles/info/name, .../siteconfig.tcl, .../cookbook/module-info-name-return-basename.rst, doc/source/diff_v3_v4.rst: doc: add module-info-name-return-basename recipe Fixes #297. 2019-09-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version 4.3.1 * modulecmd.tcl.in, testsuite/modulefiles.2/NaN, testsuite/modulefiles.2/nanbar/1, testsuite/modulefiles.2/nanbar/2, testsuite/modulefiles.2/nanbar/nan, testsuite/modulefiles.2/nanfoo/.modulerc, testsuite/modulefiles.2/nanfoo/1, testsuite/modules.70-maint/250-nan.exp: Rework ternary operator expr if res may equal 'nan' Rework all the ternary operator expressions (eg. [expr {cond ? true : false}] if their true or false result may be equal to the nan string (whatever the case used to write it). When a 'nan' value is returned from such an expression an error is raised, which breaks Modules as soon as a modulefile, an alias or a symbolic version is named 'nan'. These expressions are rewritten as bare if/then/else blocks. Fixes #296. 2019-09-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deep/modulerc/.modulerc, testsuite/modulefiles/loc_rc3/.modulerc, testsuite/modulefiles/loc_rc3/0.0/.notmodfile, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.80-deep/010-init_ts.exp, testsuite/modules.80-deep/030-display.exp, testsuite/modules.80-deep/050-whatis.exp, testsuite/modules.80-deep/068-transitive-deep.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/070-full.exp: ts: adapt tests for #294 and #295 fixes * modulecmd.tcl.in: Fix alias over dir when implicit_default is disabled Fix the whatis and paths sub-command results for module aliases targeting a directory when implicit_default configuration option is disabled. No error is returned and same result is now obtained whether the alias name or its target is used as argument for those two sub-commands. Fixes #295. * modulecmd.tcl.in: Fix sym over dir when implicit_default is disabled Fix the whatis and paths sub-command results for module symbolic versions targeting a directory when implicit_default configuration option is disabled. No error is returned and same result is now obtained whether the symbolic name or its target is used as argument for those two sub-commands. Fixes #294. 2019-09-16 Tom Payerle <payerle@umd.edu> * doc/example/tips-for-code-reuse/bar/1.0/nothreads, doc/example/tips-for-code-reuse/bar/1.0/openmp, doc/example/tips-for-code-reuse/bar/1.0/pthreads, doc/example/tips-for-code-reuse/bar/2.0/nothreads, doc/example/tips-for-code-reuse/bar/2.0/openmp, doc/example/tips-for-code-reuse/bar/2.0/pthreads, doc/example/tips-for-code-reuse/bar/common, doc/example/tips-for-code-reuse/foo/1.0, doc/example/tips-for-code-reuse/foo/2.0, doc/example/tips-for-code-reuse/fooA/1.0, doc/example/tips-for-code-reuse/fooA/2.0, doc/example/tips-for-code-reuse/fooA/common, doc/example/tips-for-code-reuse/fooB/.generic, doc/example/tips-for-code-reuse/fooB/1.0, doc/example/tips-for-code-reuse/fooB/2.0, doc/example/tips-for-code-reuse/fooB/common, doc/source/cookbook/tips-for-code-reuse.rst: doc: Adding cookbook page "tips-for-code-reuse" 2019-09-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: desc wa_277 in man/diff/INSTALL 2019-09-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml, testsuite/install.00-init/020-module.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/220-config.exp: ts/travis: adapt tests to wa_277 cfg * Makefile, Makefile.inc.in, configure, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, site.exp.in: Workaround for Tcsh history issue with wa_277 conf opt Introduce the wa_277 configuration option to workaround an issue with Tcsh history described on ticket #277. When option is enabled (which sets the MODULES_WA_277 environment variable to 1), an alternative module alias is defined which fixes the history mechanism issue. However the alternative definition of the module alias weakens shell evaluation of the code produced by modulefiles. Characters with special meaning for Tcsh shell (like { and }) may not be used anymore in shell alias definition elsewhere the evaluation of the code produced by modulefiles will return a syntax error. Fixes #277. 2019-09-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/example/ensure-user-qualify-modules/initrc, .../modulefiles/softa/1, .../modulefiles/softa/2, .../modulefiles/softb/.modulerc, .../modulefiles/softb/1, .../modulefiles/softb/2, .../ensure-user-qualify-modules/siteconfig.tcl, .../cookbook/ensure-user-qualify-modules.rst: doc: add ensure-user-qualify-modules recipe to cookbook * contrib/etc/rc-modulepath, doc/example/modulepaths-persist-over-sudo/rc, .../cookbook/modulepaths-persist-over-sudo.rst: doc: add modulepaths-persist-over-sudo recipe to cookbook Rework global RC file proposed in contrib/etc/rc-modulepath, for use case described at [1], as a cookbook recipe. [1] https://bugzilla.redhat.com/show_bug.cgi?id=1139165 2019-09-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../modulefiles/bar/1, .../modulefiles/foo/1, .../siteconfig.tcl, .../cookbook/expose-procs-vars-to-modulefiles.rst: doc: add expose-procs-vars-to-modulefiles recipe to cookbook 2019-09-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/example/log-module-commands/siteconfig.tcl, doc/source/cookbook/log-module-commands.rst: doc: add log-module-commands recipe to cookbook Fixes #283. * doc/source/cookbook/inhibit-report-info.rst, doc/source/cookbook/top-priority-values.rst, doc/source/cookbook/unload-firstly-loaded.rst: doc: desc way to find siteconfig script location in recipes In cookbook recipes implying the installation of a site-specific configuration script, instructions are provided to help to find the expected location of this script on the current setup. Fixes #266. 2019-09-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.80-deep/022-switch.exp: Load current env info prior match switch one-name-rule When looking at the closest match among loaded modules when switching module with just a single module argument specified, load the informations on the currently set environment to get the alternative names of loaded modules prior to look at closest module match. Fixes #290. 2019-09-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/modulefile.rst: doc: attempt to clarify eval mode in modulefile man Fixes #289 2019-08-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/bin/install_test_csh, testsuite/home/.module/.target, testsuite/home/.module/coll1, testsuite/home/.module/coll2, testsuite/home/.module/coll3, testsuite/home/.module/coll4.target, testsuite/home/coll5, testsuite/install.00-init/060-quar.exp, testsuite/install.00-init/080-args.exp, testsuite/{modulefiles.other => modulefiles.2}/1.1/version, testsuite/{modulefiles.other => modulefiles.2}/1.2/version, testsuite/{modulefiles.other => modulefiles.2}/1.3/version, .../{modulefiles.other2 => modulefiles.2}/clear/.modulerc, testsuite/{modulefiles.other2 => modulefiles.2}/clear/1, testsuite/{modulefiles.other2 => modulefiles.2}/clear/2, testsuite/{modulefiles.other2 => modulefiles.2}/clear/3, testsuite/{modulefiles.other => modulefiles.2}/longerrword, .../{modulefiles.other => modulefiles.2}/modemptyarg/aliases, .../{modulefiles.other => modulefiles.2}/modemptyarg/apropos, .../{modulefiles.other => modulefiles.2}/modemptyarg/avail, .../{modulefiles.other => modulefiles.2}/modemptyarg/display, .../{modulefiles.other => modulefiles.2}/modemptyarg/list, .../{modulefiles.other => modulefiles.2}/modemptyarg/load, .../{modulefiles.other => modulefiles.2}/modemptyarg/purge, .../{modulefiles.other => modulefiles.2}/modemptyarg/reload, .../{modulefiles.other => modulefiles.2}/modemptyarg/restore, .../{modulefiles.other => modulefiles.2}/modemptyarg/save, .../modemptyarg/savelist, .../{modulefiles.other => modulefiles.2}/modemptyarg/saverm, .../modemptyarg/saveshow, .../{modulefiles.other => modulefiles.2}/modemptyarg/source, .../{modulefiles.other => modulefiles.2}/modemptyarg/swap, .../{modulefiles.other => modulefiles.2}/modemptyarg/swap2, .../{modulefiles.other => modulefiles.2}/modemptyarg/swap3, .../{modulefiles.other => modulefiles.2}/modemptyarg/test, .../{modulefiles.other => modulefiles.2}/modemptyarg/unload, .../{modulefiles.other => modulefiles.2}/modemptyarg/unuse, .../{modulefiles.other => modulefiles.2}/modemptyarg/use, .../{modulefiles.other => modulefiles.2}/modemptyarg/whatis, testsuite/{modulefiles.other => modulefiles.2}/putsvar, testsuite/{modulefiles.other => modulefiles.2}/quar, testsuite/{modulefiles.other => modulefiles.2}/restore, .../veryveryveryveryveryveryveryverylong/.modulerc, .../veryveryveryveryveryveryveryverylong/name, testsuite/modulefiles.other/README, testsuite/modulefiles/info/isused, testsuite/modulefiles/use/1.0, testsuite/modulefiles/use/2.0, testsuite/modulefiles/use/2.1, testsuite/modulefiles/use/2.2, testsuite/modulefiles/use/3.0, testsuite/modulefiles/use/3.1, testsuite/modulefiles/use/3.2, testsuite/modulefiles/use/4.1, testsuite/modules.00-init/110-quar.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/032-prepend.exp, testsuite/modules.10-use/040-load-use.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.70-maint/045-listlong.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.70-maint/153-is-loaded.exp, testsuite/modules.70-maint/200-errdisp.exp, testsuite/modules.70-maint/210-clear.exp, testsuite/modules.90-avail/050-long.exp, testsuite/modules.95-version/010-init_ts.exp, testsuite/modules.95-version/050-fullpathentry.exp: ts: add modulefiles.2 test modulepath repository And make it a repository for additional test modulefiles that do not need to take part in the global avail tests made over the main repository (modulefiles) and who could mixed with others (like other and other2). 2019-08-27 Per Persson <md2perpe+github@gmail.com> * README.md: doc: use quote instead of code for links in README Inside a code block URLs are not converted to links when the Markdown is rendered as HTML. In a quote they do. The other differences are minor both for the raw text and for the rendered text. 2019-08-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/120-autoinit.exp: ts: check precedence of etc/modulespath over init/.modulespath * testsuite/modules.70-maint/120-autoinit.exp: ts: check precedence of etc/initrc over init/modulerc * .gitignore, .travis.yml, Makefile, testsuite/example/initrc.in, testsuite/modules.70-maint/120-autoinit.exp: ts: test initrc eval output during autoinit 2019-08-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/home/coll14, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/999-cleanup.exp: ts: check urequn mech when restoring collection * modulecmd.tcl.in: Remove useless dir content cleanup in getModules proc No need to remove purged entries from directory content list as elements are added to these list only if valid for the search performed (they are not removed later on, so no need to update directory content). 2019-08-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Remove useless var test in mod reload helper procs * testsuite/modules.70-maint/230-verbosity.exp: ts: add more verbosity tests in 70/230 2019-08-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * lib/configure.ac: lib: bump Envmodules lib version to 1.0.1 Bump version of Envmodules library after the small changes made: - directly return result of Envmodules_Init last operation - Tcl_GetBooleanFromObj already set error message, no need to rewrite an error message in case boolean argument is not boolean * lib/envmodules.c, lib/envmodules.h: lib: bump copyright year mention * Makefile, lib/.gitignore, lib/Makefile.in, lib/configure.ac, lib/testutil-closedir.c, testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/120-siteconfig.exp: ts/lib: test tcl ext lib against a failed closedir call Add an utility library that supersedes the closedir function from libc. The closedir function from this added library always returns an error (-1). It is used for coverage test of the closedir call made withing the Envmodules_GetFilesInDirectoryObjCmd function of the Tcl extension library. 2019-08-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: ts: test tcl ext lib procedures against erroneous calls * .travis.yml: travis: add a tcl8.4 build to the matrix to check testsiteconfig-1 * lib/envmodules.c: lib: Tcl_GetBooleanFromObj already set err msg No need to craft an error message when a non-boolean value is passed to procedures as the Tcl_GetBooleanFromObj function already set the accurate message when it returns non-OK. 2019-08-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: ts: load tcl ext lib by tclsh83 in 00/120 * .gitignore, .travis.yml, Makefile: install/ts: fetch & install old Tcl interp for coverage Add directives into Makefile to install a Tcl8.3 interpreter in order to unlock some additional non-regression tests to improve code coverage tests. 2019-08-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * lib/envmodules.c: lib: directly return res of Envmodules_Init last op 2019-08-05 Felix Neumärker <xdch47@posteo.de> * lib/Makefile.in: install: fix typo on CFLAGS definition in lib/Makefile Fixes #287. 2019-08-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml: travis: increase testsuite run wait time As 15 minutes has become not enough on OSX. * testsuite/install.00-init/050-crossshell.exp: ts: fix not found error msg for mksh New version of mksh returns a 'inaccessible or not found' error message: https://github.com/MirBSD/mksh/commit/64918da0043974fe07450e99427c 5f276d1b6ea0 2019-07-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/150-access-init.exp: Fix error report when Tcl ext lib fails to load Correct modulecmd.tcl script startup to correctly report error in case Tcl extension library fails to load. Fixes #284. 2019-07-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitignore, Makefile, contrib/mb.in: contrib: add 'mb' script to bench modules versions 2019-07-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version 4.3.0 * MIGRATING.rst, NEWS.rst, doc/source/module.rst, modulecmd.tcl.in, testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.00-init/140-color.exp: Honor CLICOLOR/CLICOLOR_FORCE env var to set color mode Add support for standard variables CLICOLOR and CLICOLOR_FORCE to define color mode. Implement specification for these variables described at https://bixense.com/clicolors/. Fixes #279. 2019-07-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/230-verbosity.exp: ts: add tests for verbosity cfg 2019-07-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst: doc: desc verbosity in NEWS/MIGRATING * INSTALL.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: desc verbosity in man/diff/INSTALL * doc/source/cookbook/inhibit-report-info.rst: doc: update inhibit-report-info recipe with verbosity cfg * configure, modulecmd.tcl.in, testsuite/modules.70-maint/220-config.exp: Introduce 'concise' verbosity level Introduce the ``concise`` verbosity level to get slightly less messages than under normal verbosity mode. Concise mode disables informational messages, like additional module evaluation triggered by a module load or unload, aborted evaluation issues or module evaluation report occurring on ``restore`` or ``source`` sub-commands. The ``module`` command could be set concise at ``./configure`` time with ``--with-verbosity`` option. ``MODULES_VERBOSITY`` environment variable supersedes this setting and it could be set with ``config`` module sub-command through the ``verbosity`` option. Fixes #204. * modulecmd.tcl.in: Report every mod load/unload on source sub-cmd When verbosity level is normal or at an higher level, reports every module loads or unloads performed to ``source`` a scriptfile, even if there is no specific message to output for these module evaluations. Clarifies what module evaluations have been triggered to source the scriptfile. * modulecmd.tcl.in, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/080-access-coll.exp: Report every mod load/unload on restore sub-cmd When verbosity level is normal or at an higher level, reports every module loads or unloads performed to ``restore`` a collection, even if there is no specific message to output for these module evaluations. Clarifies what module evaluations have been triggered to restore the collection. 2019-07-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * configure, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, testsuite/modules.00-init/090-switches.exp, testsuite/modules.70-maint/220-config.exp: Reintroduce 'verbose' verbosity level Reintroduce the ``verbose`` verbosity level and associated ``--verbose`` and ``-v`` command-line switches, which were available on Modules v3. Verbose mode adds additional informational messages, like a systematic report of the loading or unloading module evaluations. The ``module`` command could be set verbose by default at ``./configure`` time with ``--with-verbosity`` option. ``MODULES_VERBOSITY`` environment variable supersedes this setting and it could be set with ``config`` module sub-command through the ``verbosity`` option. * configure, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, testsuite/modules.00-init/090-switches.exp, testsuite/modules.70-maint/220-config.exp: Reintroduce 'silent' verbosity level Reintroduce the ``silent`` verbosity level and associated ``--silent`` and ``-s`` command-line switches, which were available on Modules v3. Silent mode turns off error, warning and informational messages. The ``module`` command could be set silent by default at ``./configure`` time with ``--with-verbosity`` option. ``MODULES_VERBOSITY`` environment variable supersedes this setting and it could be set with ``config`` module sub-command through the ``verbosity`` option. 2019-07-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, Makefile.inc.in, configure, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, site.exp.in, testsuite/example/siteconfig.tcl-1, testsuite/example/siteconfig.tcl-2, testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.00-init/100-pager.exp, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/150-access-init.exp, testsuite/modules.70-maint/220-config.exp: Add ability to control message verbosity Add a ``verbosity`` configuration option to define the default message verbosity level (between a ``normal`` and a ``debug`` level). This option could be set at ``./configure`` time with ``--with-verbosity`` option. It could be superseded with the ``MODULES_VERBOSITY`` environment variable, that could be set with ``config`` module sub-command through the ``verbosity`` option. Defining a ``debug`` verbosity level at the command-line level is still achieved by using the ``-D`` or ``--debug`` command-line switches. 2019-07-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/376-deps7.exp: Inhibit UreqUn when performing purge/reload/restore sub-cmd When unloading a module that contains a ``module load`` or ``module switch`` modulefile command, inhibit the unload performed of the useless requirement when auto_handling mode is disabled if currently performing a purge, reload or restore sub-command. As the unload sequence is determined and managed from these top commands. * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/080-access-coll.exp: No message block for restore sub-cmd Remove the message block display output for the ``restore`` sub-command as this output style is reserved for modulefile evaluation mode (load, unload and switch) to clarify understanding. * modulecmd.tcl.in: Remove msg record set for purge sub-cmd No the message block display output for the ``purge`` sub-command as this output style is reserved for modulefile evaluation mode (load, unload and switch) to clarify understanding. * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/375-deps6.exp, testsuite/modules.50-cmds/377-cyclic.exp, testsuite/modules.50-cmds/377-error.exp: No message block for reload sub-cmd Remove the message block display output for the ``reload`` sub-command as this output style is reserved for modulefile evaluation mode (load, unload and switch) to clarify understanding. 2019-07-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Dissociate an eval id from a record msg id Adapt the pushMsgRecordId and popMsgRecordId procedures to set and evaluation id in addition to a record message id. These evaluation ids will track successful and failed module evaluation to distinguish these evaluation results from output message recording. A setmsgid argument is added to both procedures to optionally set this record message id, which is unwanted on global actions not outputing their results under some message block. 2019-07-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/360-restoreenv.exp, testsuite/modules.50-cmds/370-deps-bis.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-error.exp: Report load/unload evaluation break Report an error when a module load or unload evaluation aborts due to the use of the ``break`` or ``exit`` modulefile commands. This error notification clarifies that module evaluation failed. Fixes #267. 2019-07-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/050-crossshell.exp: ts: fix ksh err msg change in install/050 tests * .cirrus.yml: cirrus: install readline to satisfy R needs 2019-07-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst: doc: clarifies usage of config sub-cmd in init RC * MIGRATING.rst, NEWS.rst: doc: desc init conf alt naming in NEWS/MIGRATING 2019-07-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/rpm/environment-modules.spec.in: rpm: use /etc/environment-modules as etcdir And store Modules initialization configurations in it. * contrib/rpm/environment-modules.spec.in: rpm: disable set_shell_startup 2019-07-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst, doc/source/diff_v3_v4.rst: doc: desc init conf alt naming in diff/INSTALL * .travis.yml, testsuite/install.00-init/005-init_ts.exp, testsuite/modules.70-maint/120-autoinit.exp: ts: adapt tests to --with-initconf-in=etcdir * configure: install: add --enable-modulespath configure opt Add the ``--enable-modulespath`` configure option, which is an alias for the ``--enable-dotmodulespath`` option as ``.modulespath`` configuration file is named ``modulespath`` when installed in ``etcdic``. * testsuite/modules.70-maint/220-config.exp: ts: fix regexp char escaping in 70/220 * Makefile, Makefile.inc.in, configure, init/Makefile, site.exp.in: install: add --with-initconf-in configure opt Introduce the ability to install the Modules initialization configuration files in the ``etcdir`` rather than in the ``initdir``. A new configure option is introduced for this task: ``--with-initconf-in``. Accepted values for this option are: ``etcdir`` or ``initdir`` (default). 2019-07-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash.in, init/cmake.in, init/csh.in, init/fish.in, init/ksh.in, init/python.py.in, init/r.R.in, init/ruby.rb.in, init/sh.in, init/tcl.in, init/zsh.in, modulecmd.tcl.in: Use initconf in etcdir rather initdir if it exists Take into account Modules initialization configurations found in ``etc`` directory if they exist rather in ``init`` directory. If ``initrc`` configuration file is found in ``etcdir`` then it is preferred over ``modulerc`` file in ``initdir``. Following the same trend, ``modulespath`` configuration file is found in ``etcdir`` then it is preferred over ``.modulespath`` file in ``initdir``. * Makefile, doc/source/module.rst, modulecmd.tcl.in, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/081-access-rc.exp: Set global RC file in @etcdir@ instead @prefix@/etc Fix location of ``etc/rc`` global RC file to ``@etcdir@/rc`` instead of ``@prefix@/etc/rc`` to cope with ``@etcdir@`` specific setup (defaults to ``@prefix@/etc``). 2019-07-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, contrib/rpm/environment-modules.spec.in: doc/rpm: merge release of version 4.2.5 * modulecmd.tcl.in, testsuite/modulefiles.deps/m10, testsuite/modulefiles.deps/m11, testsuite/modulefiles.deps/m12, testsuite/modules.50-cmds/376-deps7.exp: Fix 'module load a b' in modfiles when a or b is loaded Fix automatic loading of modulefiles when multiple module names are set on a single ``module load`` modulefile command. When auto_handling mode was disabled, the load of not loaded modules was not achieved as soon as some modules on this list were already loaded. Fixes #281. 2019-07-04 Colin Marquardt <cmarqu42@gmail.com> * NEWS.rst, .../test-modulefiles/modulefiles/test_dir_and_file, doc/source/cookbook/test-modulefiles.rst: doc: add cookbook recipe for ModulesTest Fixes #182. 2019-07-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml: travis: fix opensuse/leap docker container install 2019-07-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitignore, .travis.yml, Makefile, testsuite/example/modulerc-1.in, testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/030-options.exp, testsuite/install.00-init/050-crossshell.exp, testsuite/modules.70-maint/120-autoinit.exp: ts: test init modulerc that disables set_shell_startup * modulecmd.tcl.in: Clear cached config value when setting config During a ``config`` sub-command, config values are fetched which leads for some of the configuration options to the cache of their value. When ``config`` sub-command is called to set a configuration option value, unsets any cached value for this option (as value has just been updated). 2019-07-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/modulerc.in, testsuite/example/modulerc.in: init: mention possible config set in modulerc * modulecmd.tcl.in: Enable 'config' sub-cmd from source/autoinit eval Allow ``config`` sub-command to be called from a modulefile if this modulefile is evaluated by the ``autoinit`` or ``source`` sub-commands called at a top-level module context. 2019-07-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst: doc: desc search_match in NEWS/MIGRATING * .travis.yml, testsuite/install.00-init/010-environ.exp, testsuite/install.00-init/050-crossshell.exp, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/220-config.exp: ts/travis: adapt tests to set_shell_startup cfg * contrib/mt: contrib: fix array init issue on 'mt' script * INSTALL.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: desc set_shell_startup in man/diff/INSTALL 2019-07-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, Makefile.inc.in, configure, init/bash.in, init/bash_completion.in, init/csh.in, init/fish.in, init/fish_completion, init/ksh.in, init/sh.in, init/tcsh_completion.in, init/zsh-functions/_module, init/zsh.in, modulecmd.tcl.in, site.exp.in: Add ability to disable shell startup file set Introduce the ability not to set the shell startup file that ensure ``module`` command is defined once shell has been initialized. Setting shell startup file currently means defining ``ENV`` and ``BASH_ENV`` environment variable to the Modules bourne shell initialization script. ``./configure`` options ``--enable-set-shell-startup`` and ``--disable-set-shell-startup`` define if shell startup should be set or not by default. It could be superseded with the ``MODULES_SET_SHELL_STARTUP`` environment variable, that could be set with ``config`` module sub-command through the ``set_shell_startup`` option. 2019-07-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/140-color.exp, testsuite/modules.70-maint/220-config.exp: ts: correctly escape exp res in 00/140 and 70/220 * contrib/mt: contrib: fix var unbound issue on 'mt' with older bash * .travis.yml: travis: optionally change clone dir To launch tests from path containing specific chars (with special meaning in regular expressions) to ensure expected results from test cases are correctly escaped. 2019-06-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml, testsuite/modulefiles.indepth/modv/.common, testsuite/modulefiles.indepth/modv/.modulerc, testsuite/modules.00-init/140-color.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.20-locate/090-memcache.exp, testsuite/modules.70-maint/220-config.exp, testsuite/modules.80-deep/068-transitive-deep.exp, testsuite/modules.90-avail/020-single.exp, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/050-long.exp, testsuite/modules.90-avail/080-noindepth.exp, testsuite/modules.91-sort/020-avail.exp: ts/travis: adapt tests to search_match cfg 2019-06-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst: doc: desc search_match in NEWS/MIGRATING * INSTALL.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: desc search_match in man/diff/INSTALL * Makefile, Makefile.inc.in, configure, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, site.exp.in: Add ability to control module search match Introduce the ability to control the module search match. Search query string should match module name start or any part of module fully qualified name. Default search match behavior is set at ``./configure`` time with the ``--with-search-match`` option. It could be superseded with the ``MODULES_SEARCH_MATCH`` environment variable, that could be set with ``config`` module sub-command through the ``search_match`` option. Command-line switches ``--starts-with`` (``-S``) and ``--contains`` (``-C``) for ``avail`` module sub-command enable to supersede defined search match configuration. 2019-07-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Rework no-indepth mod match in getModules Match search query at corresponding search depth level when indepth mode is disabled without implying that search query matches beginning of module names. This is a preparatory work to a search match option where query could be contained in module name and not only be the start of module name. As some results from findModules are removed through the process of getModules, update element list of directories to fit results. 2019-06-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, modulecmd.tcl.in, testsuite/modulefiles/append/1.8, testsuite/modulefiles/prepend/1.10, testsuite/modulefiles/remove/1.8, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.90-avail/070-full.exp: Args after var name are values on {append,prepend,remove}-path Fix argument parsing for the `append-path`, `prepend-path` and `remove-path` modulefile commands to consider every arguments found after the variable name as variable values and not command option even if argument starts with `-` character. Fixes #278. * modulecmd.tcl.in, testsuite/modules.20-locate/057-mcookie.exp: Trim modfile magic cookie string from # chars Right trim '#' characters from the fetched modulefile magic cookie string to ensure a correct compatibility version comparison. Useful when modulefile first line is equal to '#%Module4.3##############'. Thanks to Eric Deveaud for the issue report. 2019-06-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst, modulecmd.tcl.in, testsuite/modules.70-maint/220-config.exp: Report locked config option value with a locked mention * doc/source/module.rst, modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.70-maint/220-config.exp: Raise error when setting locked config option Raise an error and exit if module 'config' sub-command attempts to modify a configuration option which is locked. 2019-06-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml, INSTALL.rst, MIGRATING.rst, NEWS.rst, configure, doc/source/module.rst, modulecmd.tcl.in, siteconfig.tcl, testsuite/modules.00-init/140-color.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/090-memcache.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/378-sametarget.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.70-maint/100-path.exp, testsuite/modules.70-maint/170-contact.exp, testsuite/modules.70-maint/220-config.exp, testsuite/modules.91-sort/040-load-sort.exp: install: enable implicit_default in locked_configs Makes implicit_default configuration option lockable through locked_configs option. * .travis.yml, INSTALL.rst, MIGRATING.rst, Makefile, Makefile.inc.in, NEWS.rst, configure, doc/source/module.rst, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, site.exp.in, siteconfig.tcl, testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/100-pager.exp, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/150-access-init.exp, testsuite/modules.70-maint/220-config.exp: install: replaces --enable-extra-siteconfig with --with-locked-configs Add to the configure script the --with-locked-configs option to ignore environment variable superseding of Modules configurations defined in modulecmd.tcl script. Lockable configuration option are extra_siteconfig. Currently locked options are reported through the locked_configs option on the config sub-command. This new configure option replces --enable-extra-siteconfig which was dedicated to the control over the MODULES_SITECONFIG variable. 2019-06-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst: doc: clarify source sub-cmd in module.1 man Talk about scriptfile on `source` sub-command rather modulefile to clarify a bit usage. 2019-06-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst: doc: desc implicit_default in NEWS/MIGRATING 2019-06-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml, testsuite/home/coll13, testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.00-init/140-color.exp, testsuite/modules.20-locate/030-defvers.exp, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/035-defname.exp, testsuite/modules.20-locate/038-defcontext.exp, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/055-locrcerrs.exp, testsuite/modules.20-locate/057-mcookie.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.20-locate/075-symlink.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.20-locate/090-memcache.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/322-is-avail.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/378-sametarget.exp, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.61-coll/080-access-coll.exp, testsuite/modules.61-coll/999-cleanup.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.70-maint/100-path.exp, testsuite/modules.70-maint/156-is-avail.exp, testsuite/modules.70-maint/170-contact.exp, testsuite/modules.70-maint/220-config.exp, testsuite/modules.80-deep/020-load-deep.exp, testsuite/modules.80-deep/022-switch.exp, testsuite/modules.80-deep/030-display.exp, testsuite/modules.80-deep/068-transitive-deep.exp, testsuite/modules.80-deep/080-access-deep.exp, testsuite/modules.90-avail/080-noindepth.exp, testsuite/modules.91-sort/020-avail.exp, testsuite/modules.91-sort/040-load-sort.exp: ts/travis: adapt tests to implicit_default cfg 2019-05-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Force implicit_default enablement during 'restore' When performing a 'module restore', forcibly enable the implicit_default option to correctly match current state against the collection to restore, even if this collection was saved with implicit_default enabled and current setup at restore time has this option disabled. implicit_default is then restored to its defined value once the match is over. So the load of a module to restore from the collection may fail when implicit_default is disabled if this module is an implicit default and collection was saved with implicit_default enabled. 2019-05-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst, doc/source/modulefile.rst: doc: desc implicit_default in man/diff/INSTALL * Makefile, Makefile.inc.in, configure, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, site.exp.in: Control whether an implicit default should be selected Add the ability to configure whether an implicit default version should be defined for modules with no default version explicitly defined. When enabled, which stays the default behavior, a module version is automatically selected (latest one) when the generic name of the module is passed. When implicit default selection is disabled, the name of modules to evaluate should be fully qualified elsewhere an error is returned. This option is set at `./configure` time with the `--enable-implicit-default` and `--disable-implicit-default` options. It could be superseded with the `MODULES_IMPLICIT_DEFAULT` environment variable, that could be set with `config` module sub-command throught the `implicit_default` option. When implicit_default is disabled: - module implicit default versions are excluded from 'module avail -d' results. - false is returned when argument passed to the 'is-avail' sub-command is a directory without an explicit default set in it. - and auto_handling is enabled, the requirement load mechanism will fail on requirement relying on module implicit default version Fixes #179. 2019-05-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add report_issue arg to getPathToModule proc Add the report_issue argument to the getPathToModule procedure to inhibit the report of issue raised during the search and resolution of a passed module name. Issue report is unwanted when performing a reverse lookup of the module names resolving to a known modulefile (like done in procedures getSimplifiedLoadedModuleList and getAllModuleResolvedName). Issue report is also disabled in cmdModuleSearch, as found issues are reported later on through the list returned by the getPathToModule call. 2019-05-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml, testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/375-deps6.exp, testsuite/modules.50-cmds/375-order.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/378-sametarget.exp, testsuite/modules.50-cmds/379-module-unload.exp, testsuite/modules.70-maint/220-config.exp, testsuite/modules.80-deep/021-unload.exp: ts/travis: adapt tests to unload_match_order cfg 2019-05-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst: doc: desc unload_match_order in NEWS/MIGRATING * doc/source/cookbook/unload-firstly-loaded.rst: doc: update unload-firstly-loaded recipe with unload_match_order cfg 2019-05-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: desc unload_match_order in man/diff/INSTALL * Makefile, Makefile.inc.in, configure, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, site.exp.in: Add the ability to configure of unload match order Add the ability to configure when unloading a module and multiple loaded modules match request if firstly loaded module should be choosen or lastly loaded module. Default behavior is set at the `./configure` time with the `--with-unload-match-order` switch. This default could be superseded with the `MODULES_UNLOAD_MATCH_ORDER` environment variable, that could be set with `config` module sub-command throught the `unload_match_order` option. This change allows to restore behavior of Modules compatibility version where first matching module in loaded module list were unloaded in such situation. By default, lastly loaded module is set for unload (like it was before this change) to limit impact on the loaded module list when dependencies are woven between these loaded modules. Even if this change enables to change the default behavior, it is highly recommanded to keep it as soon your modulefiles express dependencies between each other. Fixes #198. 2019-05-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc fix for #270 in NEWS 2019-05-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp: ts: clean any automated handling mode configuration 2019-05-08 Jacques Raphanel <dvp@crabisoft.fr> * contrib/scripts/createmodule.py: contrib: add support for creating module file skeleton from MSDOS prompt Update createmodule.py to provide support for cmd shell to use `set` instead of `env`. Fixes #270. 2019-05-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst: doc: desc config cmd in NEWS/MIGRATING 2019-05-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * site.exp.in, testsuite/modulefiles/modbad/config, testsuite/modules.00-init/071-args.exp, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.70-maint/220-config.exp, testsuite/modules.90-avail/070-full.exp: ts: test 'config' sub-command * contrib/mt, contrib/mtreview.in: ts: outputs full log in 'mt' if testsuite failed but no failure found 2019-01-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst: doc: desc config cmd in man module.1 2019-05-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Reword configuration 'key' into configuration 'option' 2019-05-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, NEWS.rst, contrib/rpm/environment-modules.spec.in, siteconfig.tcl: install: provide a bare siteconfig.tcl Provide a bare siteconfig.tcl in designated etcdir at installation time if no pre-existing site-specific configuration file is found at designated location. 2019-05-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml, INSTALL.rst, MIGRATING.rst, Makefile, Makefile.inc.in, NEWS.rst, configure, doc/source/module.rst, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, site.exp.in, testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/150-access-init.exp: Add ability to disallow MODULES_SITECONFIG Add to the configure script the `--enable-extra-siteconfig` and `--disable-extra-siteconfig` options to allow or forbid the definition of a site-specific configuration script controlled with the `MODULES_SITECONFIG` environment variable. These options control the default value of the `g_extrasiteconfig` variable in `modulecmd.tcl`. If this variable is true (by default), MODULES_SITECONFIG is looked at the siteconfig sourcing time. Thus the primary siteconfig.tcl can set the variable to false to ensure the extra siteconfig is disabled whatever the option passed at ./configure time. 2019-05-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_v3_v4.rst: doc: desc config sub-cmd in diff_v3_v4 * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in: Report and set 'extra_siteconfig' on 'config' sub-command Report and be able to set the 'extra_siteconfig' configuration, linked to the MODULES_SITECONFIG environment variable, on the 'config' sub-command. 2019-01-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/140-color.exp: Fix block report line split when output color 2019-01-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst: doc: desc. MODULECONTACT/MODULERCFILE in module.1 * CONTRIBUTING.rst: doc: provide 'config --dump-state' result when reporting issue * modulecmd.tcl.in: Dump machine/os/tcl_version state on 'config' sub-cmd 2019-01-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in: Report and set 'rcfile' on 'config' sub-command Report and be able to set the 'rcfile' configuration, linked to the MODULERCFILE environment variable, on the 'config' sub-command. * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module: init: add 'config' sub-cmd to shell comp scripts * modulecmd.tcl.in: Rework cmdModuleConfig argument parsing To handle the definition of empty value. * modulecmd.tcl.in: Add the ability to report one config on 'config' sub-cmd When just a configuration key name is passed to the 'config' sub-command (and no value associated to it) just report this configuration key value rather reporting all configuration keys. * modulecmd.tcl.in: Add ability to unset conf from 'config' sub-cmd When the '--reset' command-line switch and a configuration key name is passed to the 'config' sub-cmd, unset the relative environment variable. Ensure this configuration key could be altered. * modulecmd.tcl.in: Reword cmdModuleConfig data structure Split details in multiple arrays for modularity. * modulecmd.tcl.in: Rework displayConfig procedure Pass configuration value directly and re-order arguments. * modulecmd.tcl.in: Add ability to set conf from 'config' sub-cmd When a configuration key name and value is passed to the 'config' sub-command, set the relative environment variable with passed value. Ensure on the way that configuration key name can be altered with an environment variable and that passed value is valid. 2019-01-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Report Modules env variable on config --dump-state Report the list of the environment variables related to Modules in an additionnal table displayed on the --dump-state action of the 'config' sub-command. * modulecmd.tcl.in: Report in state list global RC files loaded Track the global RC files that are loaded and report this information on a 'config' sub-command among the current state information. * modulecmd.tcl.in: Report in state list if siteconfig/tcl_ext_lib have been loaded Track if a site configuration has been sourced and if the Tcl extension library has been loaded. This information is reported on a 'config' sub-command among the current state information. * modulecmd.tcl.in: Dump Modules state on 'config' sub-cmd with --dump-state Add the --dump-state command-line switch to the 'config' module sub-cmd. Add a second report table that displays each state value of the current modulecmd.tcl execution. Take this opportunity to move 'path_separator', 'term_columns', 'debug', 'force' and 'paginate' from the config table to the state table. * modulecmd.tcl.in: Report runenv configs set for modulecmd run-time execution Report the environment variable set for modulecmd run-time execution configuration on 'module config' sub-command. * modulecmd.tcl.in: Report avail_report_{dir,mfile}_sym/ignored_dirs configs Report the avail_report_dir_sym, avail_report_mfile_sym and ignored_dirs configuration on 'module config' sub-command. 2019-01-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Define global 'ignored_dirs' at first use Instead of initializing ignored dirs in modulecmd.tcl main script body, introduce a 'getIgnoredDirs' procedure that will initialize this information at first call. * modulecmd.tcl.in: Define global 'contact' at first use Instead of initializing 'contact' address in modulecmd.tcl main script body, introduce a 'getContact' procedure that will initialize this information at first call. * modulecmd.tcl.in: Report if config has been overridden on 'config' sub-cmd Introduce a displayConfig helper procedure that checks if a given configuration parameter has been overridden from its default value by command-line switch or environment variable. Report configuration value and from where it has eventually been overridden. * modulecmd.tcl.in: Register use_pager as a global variable To get access to this value, on which the paginate option is based, when reporting configuration. * modulecmd.tcl.in: Also register colors as a global list To get access to this value, on which the color table is based, when reporting configuration. 2019-01-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Introduce 'config' sub-command Add the 'config' sub-command to report all the different parameter set for the tool. 2019-05-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc. fixes for #274 and #275 in NEWS * modulecmd.tcl.in, testsuite/modules.90-avail/090-dup-modpath.exp, .../modules.95-version/090-dup-modpath-version.exp: No duplicate entry in resolved modulepath list When resolving the enabled list of modulepaths, ensure resolved path entries are unique. Fixes #274. * testsuite/modules.10-use/999-cleanup.exp, testsuite/modules.61-coll/999-cleanup.exp, testsuite/modules.90-avail/999-cleanup.exp: ts: ensure a correct 999-cleanup exist for every ts parts * modulecmd.tcl.in, testsuite/install.00-init/020-module.exp, testsuite/modulefiles/alias/3.0, testsuite/modules.00-init/006-procs.exp, testsuite/modules.50-cmds/076-alias-sub.exp: Fix escaping of '?' character in shell alias Fixes #275. 2019-05-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/siteconfig.tcl-2, testsuite/modules.00-init/120-siteconfig.exp: ts: superseded defs between siteconfig files * testsuite/modules.00-init/150-access-init.exp: ts: test restricted access to siteconfig and MODULERCFILE 2019-05-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, doc/source/module.rst: doc: desc etcdir/siteconfig.tcl in FILES sect. of module.1 * doc/source/module.rst: doc: desc. MODULERCFILE var in module.1 man page 2019-05-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst, testsuite/example/siteconfig.tcl-2, testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.00-init/100-pager.exp, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/150-access-init.exp: adding documentation and tests for MODULES_SITECONFIG 2019-03-06 Ben Bowers <nanobowers@gmail.com> * modulecmd.tcl.in: adding MODULES_SITECONFIG env. variable support Add the ability to define a site-specific configuration file with an environment variable: MODULES_SITECONFIG. When set, the script file pointed by the variable is sourced (if readable) after the site-specific configuration file initially defined in modulecmd.tcl. Fixes #234. 2019-05-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst: doc: fix typo in migrating guide for v4.3 * .travis.yml: travis: add CentOS 7 test case where extlib is disabled Add a CentOS 7 test case with compat version disabled and Tcl extension library disabled. Helps to compare performances between 2 test cases where the only difference is the enablement of the Tcl extension library. 2019-05-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, init/bash.in, init/ksh.in, init/profile-compat.sh.in, init/sh.in, init/zsh.in: init: improve readability of var definition operations Improve readability of variable definition operations by writing one definition operation per line rather having multiple commands on a single line like 'VAR=val; export VAR'. Fixes #225. 2019-05-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, testsuite/modules.70-maint/210-clear.exp: Leverage --force cmd-line switch on 'clear' sub-cmd Leverage --force command-line switch on 'clear' sub-command to skip confirmation dialog. Fixes #268. 2019-05-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/150-access-init.exp: ts: test tclextlib restricted read access * modulecmd.tcl.in: Remove useless var exist test in __getFilesInDirectory * testsuite/modules.10-use/{040-load.exp => 040-load-use.exp}, testsuite/modules.10-use/{080-access.exp => 080-access-use.exp}, testsuite/modules.20-locate/{095-cleanup.exp => 999-cleanup.exp}, testsuite/modules.60-initx/{005-init.exp => 010-init_ts.exp}, testsuite/modules.60-initx/{010-list.exp => 015-list.exp}, testsuite/modules.60-initx/{080-access.exp => 080-access-initx.exp}, testsuite/modules.60-initx/{095-cleanup.exp => 999-cleanup.exp}, testsuite/modules.61-coll/{080-access.exp => 080-access-coll.exp}, testsuite/modules.80-deep/{020-load.exp => 020-load-deep.exp}, testsuite/modules.80-deep/{040-list.exp => 040-list-deep.exp}, testsuite/modules.80-deep/{068-transitive.exp => 068-transitive-deep.exp}, testsuite/modules.80-deep/{080-access.exp => 080-access-deep.exp}, testsuite/modules.91-sort/{040-load.exp => 040-load-sort.exp}, testsuite/modules.95-version/{020-load.exp => 020-load-version.exp}: ts: ensure test file name are unique To ensure test file selection done in 'mt' script will not end up with test file collision. * Makefile, contrib/mt: ts: rework way 'mt' pass test list to runtest Instead of removing read access to test files that should not be run in 'mt' script, transmits to 'runtest' the list of test files to run via a RUNTESTFILES environment variable appended to 'runtest' command line in Makefile targets. * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: ts: check clear cmd confirmation msg * testsuite/config/unix.exp, testsuite/modules.00-init/006-procs.exp: ts: improve test launch procedures 2019-05-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/140-color.exp: ts: test calling color initialization procedures twice * .travis.yml: travis: set coverage on 2 cases where extlib is enabled Enable code coverage on 2 existing test cases where the Modules Tcl extension library is enabled. 2019-05-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml, lib/.gitignore, lib/Makefile.in: install/ts: enable gcov on Modules Tcl ext lib When coverage is asked (COVERAGE=y) also check lib/envmodules.c (Modules Tcl extension library) and report obtained coverage result (Codecov script automatically finds Gcov coverage results). 2019-05-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml, CONTRIBUTING.rst, Makefile, contrib/mt: install/ts: trigger coverage with var instead of make target Instead of running test coverage with 'make testcoverage', use COVERAGE variable to trigger this run ('make test COVERAGE=y'). * CONTRIBUTING.rst: doc: adapt name of coverage annoted script in CONTRIBUTING Annoted script generated by test coverage process has changed following to the introduction of the Modules Tcl extension library. 2019-01-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/config/unix.exp, testsuite/modulefiles.other2/clear/.modulerc, testsuite/modulefiles.other2/clear/1, testsuite/modulefiles.other2/clear/2, testsuite/modulefiles.other2/clear/3, testsuite/modulefiles/modbad/clear, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/006-procs.exp, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.70-maint/210-clear.exp, testsuite/modules.90-avail/070-full.exp: ts: test 'clear' sub-command * MIGRATING.rst, NEWS.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, testsuite/modules.00-init/100-pager.exp: Re-introduce 'clear' sub-command With same behavior than on compatibility version. The list of the environmet variables that are cleared by this sub-command has been updated to match the recent development (MODULES_LMPREREQ, ...) Fixes #203. 2019-05-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Fix colors init against badly formed MODULES_COLORS Seems that 'array set' could partially set values to an array in case the list passed to it is badly formed (odd number of element). This situation has been witnessed on FreeBSD. So unset the array variable to ensure it will not be found set at all by the remaining code of the initColors procedure. 2019-01-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_v3_v4.rst: doc: desc color mode in diff_v3_v4 2019-01-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/140-color.exp: ts: test colored output * modulecmd.tcl.in: Buffer reportError calls before initErrorReport To produce first warning and error messages (triggered during argument parse) with expected pager and color mode. 2019-01-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst, MIGRATING.rst, NEWS.rst, configure, doc/source/module.rst: doc: desc color mode in man/NEWS/INSTALL/MIGRATING 2019-01-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, .../veryveryveryveryveryveryveryverylong/.modulerc, .../veryveryveryveryveryveryveryverylong/name, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.70-maint/045-listlong.exp, testsuite/modules.90-avail/050-long.exp: Adapt padding for long modulename on long-mode reporting Fix some tests that were assuming at least one whitespace between list long output fields. 2019-01-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Highlight table column title When displaying a report table, list when doing a module list or module avail in --long mode, highlight each column title with the 'hi' SGR code. 2019-01-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Pass each col len as arg to displayTableHeader Change displayTableHeader procedure to pass each column length after each column title. 2019-01-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/siteconfig.tcl-1, testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.00-init/100-pager.exp, testsuite/modules.00-init/120-siteconfig.exp: ts: adapt existing tests for color 2019-01-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Show caller name of bootstrap reportDebug Like for the regular reportDebug procedure, report the name of the calling procedure of the bootstrap reportDebug (procedure set prior paging initialization). So both bootstrap and regular reportDebug behave and report the same way. 2019-01-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, Makefile.inc.in, configure, modulecmd.tcl.in, site.exp.in: Define a light and dark background default color set Define by default a color set for dark background and a color set for light background. These color sets can be define at configure time with the --with-dark-background-colors and --with-dark-background-colors options respectively. Terminal background color kind can be defined to 'light' or 'dark'. This value can be set at configure time with the --with-terminal-background option or with the environment variable MODULES_TERM_BACKGROUND. If the default color set is not superseded by the MODULES_COLORS environment variable, the dark background colors will apply if terminal background is set to dark. If the terminal background is set to light, the light background colors will apply instead. 2018-12-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module: init: add --color opt to bash/fish/tcsh/zsh comp scripts Add both the --color and --color= forms of the colorize output command-line switch to the shell completion scripts. * modulecmd.tcl.in: Color module cmd reported by 'saveshow' cmd Graphically enhance the 'module' command reported on a 'module saveshow' command. As for modulefile commands use the 'cm' SGR key. * modulecmd.tcl.in: Color modfile cmd reported by 'display' cmd Graphically enhance the modulefile commands reported on a 'module display' command. Introduce the 'cm' SGR key for these modulefile commands. * modulecmd.tcl.in: Highlight modfile/collfile name on display/help/test/saveshow Hightlight the modulefile header name reported on the display, help and test commands. Following the same trend, highlight the collection file header name reported on the saveshow command. * modulecmd.tcl.in: Hightlight matched module whatis/search query string Hightlight in each module whatis module name result or in each module search whatis string result the substring matching the search query string following the same process than for module avail search query hightlight. * modulecmd.tcl.in: Hightlight matched module avail search query string Hightlight in each module avail result the substring matching the search query string in which the wildcard characters have been right trimmed off. No hightlight is performed if color mode is disabled or if some wildcard characters persist after the right trim. 2018-12-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Graphically represent 'default' symbol Instead of outputing the 'default' symbol among the whole symbol list, represent it graphically with the 'de' SGR key applied to the module name. If color mode is disabled or no specific 'de' SGR key is defined, output 'default' symbol like any other symbol. * modulecmd.tcl.in: Color sym and its separator differently Use 'sy' sgr key to color symbols and 'se' sgr key to color the separator characters surrounding these symbols '(', ':' and ')'. * modulecmd.tcl.in: No '@' tag added to aliases when they are colored Do not add a '@' tag, to indicate element reported is an alias, when alias are colored (which already indicates the entry is an alias) * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module: init: run module in --color=never mode in shell comp scripts Ensure color mode is disabled when calling module command in the bash, fish, tcsh and zsh completion scripts. * modulecmd.tcl.in: Color sym reported by 'list' cmd Graphically enhance symbols on 'module list' command like done for 'module avail'. Make use of formatListEltToLongDisplay and formatListEltToDisplay procedure to format the elements to output in the same way than 'module avail'. * modulecmd.tcl.in: Color alias/sym reported by 'aliases' cmd Graphically enhance aliases and symbols on 'module aliases' command like done for 'module avail'. * modulecmd.tcl.in: Color dir/alias/syms reported by 'avail' cmd Graphically enhance directories, aliases and symbols on 'module avail' reports (regular, terse and long). Introduce the 'di', 'al' and 'sy' SGR keys respectively for directories, aliases and symbols). 2018-12-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Pass elts length to displayElementList proc Externalize from the displayElementList procedure the computation of the length of each element to display. This is done to prepare the output of graphically enhanced elements from this procedure. Element lengths are computed in each procedure building the display list. This is where the graphical enhancement will take place so it is the right spot to learn the real length (without SGR code) of these elements to output. Take this opportunity to also change displayElementList procedure to pass it the display list as a list argument rather as "args" which requires to 'eval' the procedure call. * modulecmd.tcl.in: Highlight displayed list header When reporting list elements, hightlight passed header, mainly with the 'hi' sgr key except if header is a modulepath, in this case 'mp' sgr key is used. * modulecmd.tcl.in: Color modulepaths reported by module use Graphically render modulepaths reported on 'module use' and 'module unuse' with 'mp' sgr key. * modulecmd.tcl.in: Highlight named element of msg record Highlight named element passed as header to reportMsgRecord procedure (using 'hi' sgr key). * modulecmd.tcl.in: Color DEBUG/ERROR/Module ERROR/WARNING/INFO msgs Make use of sgr procedure to graphically render header of ERROR, Module ERROR, WARNING and INFO messages (respectively with 'er', 'me', 'wa' and 'in' sgr keys). Graphically render the whole DEBUG message (header + message text) with 'db' sgr key. 2018-12-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml, Makefile, Makefile.inc.in, configure, modulecmd.tcl.in, site.exp.in: Introduce colored output Add the ability to graphically enhance some part of the produced output to improve result readability. Colored output enablement could be controlled at configure time with the --enable-color option, or with the MODULES_COLOR environment variable or with the command-line switch --color. MODULES_COLOR variable and --color switch accepts the following values: never, auto and always. With the --enable-color configure option, the 'auto' color mode is applied. When color mode is set to 'auto', output is colored if a terminal is attached to stderr. Colors to apply to each elements can be controlled at configure time with the --with-colors option or with the MODULES_COLORS environment variable. A color set consists of a list of key=value separated by colon where each key represents an output element that can be colored and each value represents a SGR code applied to this element to color it. Thanks to [1] for the detailled description of the Select Graphic Rendition (SGR) codes. [1] https://stackoverflow.com/questions/4842424/list-of-ansi-color-e scape-sequences 2019-01-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_v3_v4.rst: doc: desc avail in depth mode in diff_v3_v4 2018-12-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst, doc/source/module.rst: doc: desc avail in depth mode in man/NEWS/MIGRATING * testsuite/modulefiles.indepth/mod30/.1, testsuite/modulefiles.indepth/mod30/2, testsuite/modulefiles.indepth/mod9/3/.version, testsuite/modulefiles.indepth/mod9/3/2, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/080-noindepth.exp: ts: more tests for avail --no-indepth mode Add situations to check optimisations made to findModules procedure when no in depth mode is enabled. * modulecmd.tcl.in: Optimize findModules when no in depth search is asked Cut down some I/O operations in findModules procedure when a no in depth search is performed as it is not required to check in depth existing modulefiles, only those matching query depth level. .modulerc files are still searched in depth, as they can produce virtual modules and in the future they may invalidate modulefiles. All files at the search query depth level are analyze. And for the directories below this depth level modulefiles are analyzed until one is found valid (other modulefiles are skipped as we only want to determine if directory holds at least one valid modulefile and should be reported). 2018-12-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/zsh-functions/_module: init: zsh completes avail mods in no in depth mode * init/fish_completion: init: fish completes avail mods in no in depth mode 2018-12-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash_completion.in: init: bash completes avail mods in no in depth mode Take advantage of the no in depth mode of the module avail command to only get available choices for the current query file depth level. * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module: init: add support for --indepth/--no-indepth avail opts 2018-12-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.90-avail/040-wild.exp: ts: test avail in depth mode with wildcard chars * testsuite/modulefiles.indepth/mod0, testsuite/modulefiles.indepth/mod1/1, testsuite/modulefiles.indepth/mod1/2, testsuite/modulefiles.indepth/mod10, testsuite/modulefiles.indepth/mod11/.modulerc, testsuite/modulefiles.indepth/mod11/1, testsuite/modulefiles.indepth/mod11/2, testsuite/modulefiles.indepth/mod2/.modulerc, testsuite/modulefiles.indepth/mod2/1, testsuite/modulefiles.indepth/mod2/2, testsuite/modulefiles.indepth/mod3/.modulerc, testsuite/modulefiles.indepth/mod4/.1, testsuite/modulefiles.indepth/mod5/.common, testsuite/modulefiles.indepth/mod5/.modulerc, testsuite/modulefiles.indepth/mod6/1/notamod, testsuite/modulefiles.indepth/mod6/2/1/notamod, testsuite/modulefiles.indepth/mod6/3/1/1/notamod, testsuite/modulefiles.indepth/mod6/3/1/2/1, testsuite/modulefiles.indepth/mod7/1/notamod, testsuite/modulefiles.indepth/mod7/2/1/notamod, testsuite/modulefiles.indepth/mod7/3/1/1/notamod, testsuite/modulefiles.indepth/mod7/3/1/2/notamod, testsuite/modulefiles.indepth/mod7/4/1, testsuite/modulefiles.indepth/mod8/1/notamod, testsuite/modulefiles.indepth/mod8/2/1/notamod, testsuite/modulefiles.indepth/mod8/3/1/1/notamod, testsuite/modulefiles.indepth/mod8/3/1/2/notamod, testsuite/modulefiles.indepth/mod8/4/.modulerc, testsuite/modulefiles.indepth/mod9/1/notamod, testsuite/modulefiles.indepth/mod9/2/1/notamod, testsuite/modulefiles.indepth/mod9/3/1/1/notamod, testsuite/modulefiles.indepth/mod9/3/1/2/notamod, testsuite/modulefiles.indepth/mod9/4/.common, testsuite/modulefiles.indepth/mod9/4/.modulerc, testsuite/modulefiles.indepth/notmod1/notamod, testsuite/modulefiles.indepth/notmod2/1/notamod, testsuite/modulefiles.indepth/notmod3/1/1/.notamod, testsuite/modulefiles.indepth/notmod3/1/2, .../modulefiles.indepth/notmod4/1/1/1/notamod, testsuite/modulefiles.indepth/notmod4/2, testsuite/modules.90-avail/080-noindepth.exp: ts: test avail --no-indepth mode 2018-12-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/035-defname.exp, testsuite/modules.20-locate/038-defcontext.exp, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.20-locate/090-memcache.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.80-deep/080-access.exp, testsuite/modules.90-avail/020-single.exp, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/050-long.exp, testsuite/modules.90-avail/070-full.exp, testsuite/modules.91-sort/020-avail.exp: ts: ensure existing avail tests use 'in depth' mode * modulecmd.tcl.in: Adapt getModules/listModules to --no-indepth mode Remove in getModules the result entries collected within the procedure where more filename path separator are found than in search query string. This way entries related to the content of directories matching query are removed. Only entries matching search query at its very same depth level are kept + the matching directories holding those entries. This or these matching directories holding entries matching search query are kept to get access to the default or the latest entries in these directories if -d (default) or -L (latest) filters are enabled. The directories holding entries are then excluded from display output in listModules procedure to keep this --no-indepth mode displaying only entries lying at the same directory depth level. When the -d (default) or -L (latest) filters are enabled and the --no-indepth mode is enabled too, if search query targets the root content of the modulepath, do not apply the output filter. In this situation every elements at the root of a modulepath can be considered a default of a latest entry. 2018-12-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml, INSTALL.rst, Makefile, Makefile.inc.in, configure, modulecmd.tcl.in, site.exp.in: Introduce --indepth/--no-indepth avail mode Add the ability to perform non-recursive avail search by limiting results to the elements matching search query and not including elements contained in the directories part of the result. Default behavior is unchanged: in depth search is performed. --indepth and --no-indepth command-line switches are introduced to control behavior as well as an environment variable: MODULES_AVAIL_INDEPTH. Default behavior may also be controlled at ./configure time with the --enable-avail-indepth and --disable-avail-indepth switches. The --no-indepth mode is pretty useful to provide an efficient glance at the available packages when a lot of different versions exist for each of them. Shell completion scripts also benefit from the non-recursive view to propose choices corresponding to the current depth level only. Moreover I/O operations are reduced on this --no-indepth mode as the full modulefile tree is not entirely walked through. This commit introduces the new configure script and modulecmd options and it lays the ground for the changes on the module find and the result display that will be made in the next commits. Fixes #150. 2018-12-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.80-deep/068-transitive.exp, testsuite/modules.90-avail/070-full.exp, testsuite/modules.91-sort/020-avail.exp: Append / char to dir results of avail command Append a forward slash character to any directory result of an avail command to better distinguish these directories from regular files. Will also help shell completion scripts to more efficienlty guide users to the directory entries (no need to type this forward slash character to look deeper in directory). 2018-12-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.91-sort/020-avail.exp: Fix -d/-L avail search when arg ends with trailing slash Correctly get available default (-d) and latest (-L) version whether search pattern is passed with an ending forward slash character or not or if it contains '*' wildcard character. * modulecmd.tcl.in: Fix listModules to display dir tags if any only 2018-12-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Make all findModules proc args mandatory * modulecmd.tcl.in: Make all listModules proc args mandatory 2018-12-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst, doc/source/modulefile.rst: doc: desc Modulepath rc file in man/NEWS/MIGRATING 2018-12-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.rc/.modulerc, testsuite/modulefiles.rc/.version, testsuite/modulefiles.rc/bar/.modulerc, testsuite/modulefiles.rc/bar/1, testsuite/modulefiles.rc/bar/2, testsuite/modulefiles.rc/foo/.common, testsuite/modulefiles.rc/foo/.modulerc, testsuite/modulefiles.rc/plain, testsuite/modules.20-locate/066-modulepath-rc.exp, testsuite/modules.20-locate/081-access-rc.exp: ts: test usage of modulepath rc file * lib/envmodules.c, modulecmd.tcl.in, .../.modulerc => etc/modulerc.depsaltname}, testsuite/modules.50-cmds/377-deps8.exp, testsuite/modules.50-cmds/377-opposite.exp: Take .modulerc at modulepath root into account When looking for modulefiles in enabled modulepaths, take .modulerc file found at the root of a modulepath directory into account. Which means these RC files are now evaluated like global rc files and can be used to define module aliases targeting modulefiles stored in the underlying file tree. findModules procedure has been adapted to return any .modulerc file found at the root of the directory. Code that look at modulepath root has been adapted to use the getFilesInDirectory procedure or command. A fetch_dotversion argument is added to the getFilesInDirectory Tcl procedure and its libtclenvmodules counterpart. This argument is disabled when looking at modulepath root content to avoid returning eventual .version file stored there. Shorthand version notation (ex: /1.0) cannot be used in a modulepath rc file as a module name cannot be determined from this location. * MIGRATING.rst, NEWS.rst: doc: desc. I/O optim work in NEWS and MIGRATING 2018-12-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst: doc: refer to Modules Tcl extension lib in INSTALL 2018-12-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * lib/configure.ac, lib/envmodules.c, lib/envmodules.h, modulecmd.tcl.in: Implement getFilesInDirectory in Tcl extension library Add function in libtclenvmodules to implement getFilesInDirectory as a command, which provides a more IO-optimized way than native Tcl commands perform by avoiding specific additional queries to get hidden files like .modulerc and .version. As a result 1 stat and 2 access syscalls are saved per directory read. 2018-12-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Introduce getFilesInDirectory proc to get dir elt list Extract code from findModules procedure that analyzes and returns the content of a given directory to define a dedicate procedure for that job: getFilesInDirectory. This getFilesInDirectory procedure will also be made available as a command defined in the Tcl extension library to reduce the IO calls made to achieve the task. 2018-12-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * lib/Makefile.in: install: fix lib/Makefile to ensure CFLAGS is applied Which is required on FreeBSD to pass include location directives. * testsuite/modules.00-init/100-pager.exp, testsuite/modules.00-init/120-siteconfig.exp: ts: fix tests confused by ext lib load debug msg * lib/envmodules.c: lib: adapt error report to support Tcl8.4 Add code to Tcl extension library to report error specifically when built against Tcl8.4. This version of Tcl does not propose a Tcl_ObjPrintf function, so the Tcl_AppendResult function is used instead when the library is built against this version. * .gitignore, .travis.yml, Makefile, contrib/nglfar2ccov, testsuite/config/unix.exp: install/ts: run ts against currently built ext lib Adapt Makefile and testsuite initialization to set then use a specific modulecmd.tcl script tuned to load the libtclenvmodules.so currently built in 'lib' directory. 2018-12-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Init error report when rendering top main error When an error is caught during modulecmd.tcl first initialization steps, ensure the error report facility is initialized to render error message. On main procedure when an error raised, attempt to initialize error report before rendering catched error message, as error may have occurred prior regular error report init. Adapt initErrorReport procedure to ensure its content is run only once even if called multiple times. * lib/Makefile.in, lib/configure.ac: install: adapt lib makefile to build with Tcl8.5 Add @TCL_SHLIB_CFLAGS@ flag to the CFLAGS_DEFAULT to ensure to obtain the '-fPIC' directive on the resulting compiling command. 2018-12-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .appveyor.yml, .travis.yml, INSTALL.rst, Makefile, Makefile.inc.in, configure, contrib/rpm/environment-modules.spec.in, modulecmd.tcl.in, site.exp.in: install: configure/build/install lib from main scripts Call configure script and Makefile of 'lib' directory from main configure and Makefile to configure/build/install/clean libtclenvmodules from top-level scripts. Add '--libdir', '--enable-libtclenvmodules', '--with-tcl' and '--with-tclinclude' options to main configure script to control libtclenvmodules build and installation. Documentation of these new options has been added to INSTALL guide. When '--enable-libtclenvmodules' option is set (default) code in modulecmd.tcl is enabled to load compiled libtclenvmodules shared library. Update RPM spec file to take into account libtclenvmodules. Update Travis and AppVeyor configurations to check libtclenvmodules enablement and disablement over the various test cases. 2018-12-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile: install: improve Makefile install/test target prereqs spec 2018-11-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * lib/.gitignore, lib/Makefile.in, lib/aclocal.m4, lib/configure.ac, lib/tcl.m4: Add autotools configs to build libtclenvmodules Build this extension library against Tcl stub library to be able to 'load' it in modulecmd.tcl script. * lib/envmodules.c, lib/envmodules.h: Introduce Modules Tcl extension library Introduce Modules Tcl extension library (written in C) to extend Tcl language in order to provide more optimized I/O commands than native Tcl commands do. This library first provides a 'readFile' command which performs an open, read, close of a given modulefile to fetch its content. Compared to the Tcl native open, read, close commands it saves 1 ioctl + 1 fcntl + N lstat system calls per modulefile. 2018-11-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Introduce readFile proc to read a file Adapt all procedures reading file (modulefile, shell init file, collection file) to use the readFile procedure for that reading job. This readFile command is defined as a Tcl procedure if not found defined (by the load of the upcoming C extension). * modulecmd.tcl.in: Always read full modfile on most module cmds Except for path, paths, list, avail and aliases module commands always fully read a modulefile whether its full content is needed or just its header to verify its validity. Proceed this way to only read file once on commands that first just check modulefile validity then read again valid files to get their full content. The path, paths, list, avail and aliases module commands are excluded from this 'always read full modulefile' mechanism as they never need to get the full modulefile content. Most files found within modulepaths are intended to be modulefiles so always reading full file content even for invalid modulefiles should not harm much performances compared to the gain of reading every valid modulefiles only once instead of two. * modulecmd.tcl.in: Cache modfile content read to minimize file ops If modulefile is fully read, cache the content read and the file header computed to avoid another file read if the same modulefile need to be read multiple times. 2018-11-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Call readModuleContent in checkValidModule proc To read a modulefile so the code to read file and analyze its header to check it is a valid modulefile is just written once. readModuleContent procedure has been adapted to proceed like checkValidModule did when it is called in a only_check_validity mode. In this mode, only the first line of the file is read as we just want to parse the header of the file (as it was done previously in checkValidModule procedure). 2019-04-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst, NEWS.rst: doc: desc. Vim addons in NEWS and INSTALL * .appveyor.yml, .cirrus.yml: appveyor/cirrus: test 'make uninstall' 2019-04-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/rpm/environment-modules.spec.in: rpm: install modulefile vim syntax addons 2019-04-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, Makefile.inc.in, configure: install: rename vim addons configure options For disambiguation with Vim plugins and for letting room for further improvements in this area, rename '--enable-vimplugin' configure option into '--enable-vim-addons' and '--vimplugindir' into '--vimdatadir'. 2018-12-08 Felix Neumärker <xdch47@posteo.de> * Makefile, Makefile.inc.in, configure, contrib/vim/ftdetect/modulefile.vim, contrib/vim/ftplugin/modulefile.vim, contrib/vim/syntax/modulefile.vim: add vim syntax support 2019-04-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version 4.2.4 * testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.50-cmds/065-remove-undo.exp: ts: correctly escape exp res in 50/{042,047,052,057,062,065} 2019-04-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * README.md: doc: provide short install guideline in README Fixes #230. * init/zsh.in: init: init MANPATH on zsh if empty to preserve man sysconfig Zsh initializes by default the MANPATH environment variable to an empty value when it starts. To preserve manpath system configuration even after addition to this variable by modulefiles, set MANPATH variable to ':' if found empty. Fixes #224. * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: ts: improve getDiffBetweenList proc test coverage * modulecmd.tcl.in, testsuite/modulefiles/append/8.0, testsuite/modulefiles/prepend/8.0, testsuite/modulefiles/remove/8.0, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.90-avail/070-full.exp: Raise error when bad option passed to {append,prepend,remove}-path Raise an error when an invalid option is set on append-path, prepend-path or remove-path modulefile command. Fixes #249. * .appveyor.yml: Revert "appveyor: stop testing R in Cygwin platform" This reverts commit 48624f9d11e3f118b7a6f7d31a16614597e179cf. AppVeyor Cygwin environment has been updated, which fixed the R issue. See appveyor/ci#2898. * modulecmd.tcl.in, testsuite/modules.50-cmds/377-error.exp: Inhibit 'module load' in DepRe context When reloading modules through the *Dependent Reload* automated mechanism, disable the automated loading of modules by other modules with the 'module load' modulefile command as done for the 'prereq' command. It saves the mechanism from the reload of modules that have just been unloaded (and asked by the user to be unloaded from instance when performing a 'switch' command). Fixes #265. 2019-04-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/374-deps5.exp: No req load suggestion msg as soon as one has been tried Instead of requiring that all possibilities need be tried to consider the requirement load or the conflict unload has been tried, consider it tried as soon as one module choice has been evaluated. * modulecmd.tcl.in, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/377-error.exp, testsuite/modules.61-coll/040-restore.exp: Do not re-evaluate a failing module Skip load or unload evaluation of a module whose respectively load or unload was already attempted but failed. If this second evaluation attempt occurs within the same main evaluation frame. Fixes #264. * modulecmd.tcl.in: Refactor eval context change for switch cmd in modfile * modulecmd.tcl.in, testsuite/modules.50-cmds/377-opposite.exp: No load attempt of already loaded mod in no-auto mode When the automated module handling mode is disabled, do not attempt to load a requirement expressed in a modulefile with a 'module load' command, if this requirement is already loaded or loading. 2019-04-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/006-procs.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-cyclic.exp, testsuite/modules.50-cmds/377-error.exp: Distinguish DepRe load/unload phases in msgs Adapt warning, error and info messages relative to the Dependent Reload mechanism to distinguish the unload phase from the load (reload) phase of this mechanism. In the automated module handling summary report, unloaded modules via this mechanism are reported in the *Unloading dependent* list and modules reloaded afterward are reported against the "Reloading dependent* list. Fixes #263. 2019-04-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/370-deps-bis.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/377-opposite.exp, testsuite/modules.50-cmds/380-altname.exp: Correctly report loading state of conflicting module Fixes #262. * testsuite/modulefiles.deps/alt/.modulerc, testsuite/modulefiles.deps/alt/8, testsuite/modulefiles.deps/i3b, testsuite/modulefiles.deps/i4b, testsuite/modules.50-cmds/380-altname.exp: ts: test issue with prereq using alt name in 50/380 2019-04-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/380-altname.exp: Resolve mod name passed to isModuleEvaluated To check if actual module has been evaluated based on its aliased or symbolic name. 2019-04-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Register modfile eval attempt in addition to modname Helps to find a given module has been evaluated when a conflict/prereq statement is sometimes done on the module name and other times on the modulefile. * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/370-deps-bis.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/375-deps6.exp, testsuite/modules.50-cmds/376-deps7.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-cyclic.exp, testsuite/modules.50-cmds/377-deps8.exp, testsuite/modules.50-cmds/377-error.exp, testsuite/modules.50-cmds/377-opposite.exp, testsuite/modules.50-cmds/378-sametarget.exp, testsuite/modules.50-cmds/379-module-unload.exp, testsuite/modules.50-cmds/380-altname.exp, testsuite/modules.61-coll/040-restore.exp: ts: adapt text msgs to fixed loaded conflict report 2019-04-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Report loaded conflict on corresp. module msg block When loading a module, report any loaded conflict on the message reporting block corresponding to this module load. This warning or error message comes in addition to the eventual conflict unload message reported under the message block of the main evaluation. When a module load is forced and a conflict of this module is loaded, report this conflict with the same concise message (no hint) whether an unload of this conflicting module was attempted or not. Fixes #261. 2019-04-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Raise ConUn err/warn msg to top level message block When a conflicting module is seen loaded but the unload of this module was attempted, report a conflict unload error or warning message toward the main evaluation message block. Fixes #261. * modulecmd.tcl.in: Refactor error raising code in conflict proc 2019-04-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/370-deps-bis.exp, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/375-deps6.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-error.exp, testsuite/modules.50-cmds/377-opposite.exp: Clearer error/warn msg when unloading a required mod When unloading a module which has some dependent module still loaded, produce a more specific error or warning message if an evaluation of these dependent modules has been realized or if the unload of the required module is forced. Fixes #259. 2019-04-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-opposite.exp: Also register unload evaluation attempt In addition to load evaluation attempt, also register the various unload evaluation attempt to get a more appropriate warning or error message regarding the missing requirement during a module load. When these requirements are unloaded due to a conflict or a dependent unload/reload mechanism, it seems better not to advise user to load this requirement (as the dependency management system has unloaded it). * modulecmd.tcl.in: Use distinctive context for main load and unload 2019-04-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/375-deps6.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-cyclic.exp, testsuite/modules.50-cmds/377-deps8.exp, testsuite/modules.50-cmds/377-error.exp, testsuite/modules.50-cmds/377-opposite.exp: Same req missing warn msg in force mode whatever the auto mode When a module load is forced and a requirement of this module is missing, report this miss with the same concise message (no hint) whether a load of this requirement was attempted or not. * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/370-deps-bis.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/377-error.exp, testsuite/modules.61-coll/040-restore.exp: Report missing req on corresponding module msg block When loading a module, report any missing requirement on the message reporting block corresponding to this module load. This warning or error message comes in addition to the eventual requirement load message reported under the message block of the main evaluation. Fixes #258. * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/370-deps-bis.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/377-error.exp, testsuite/modules.61-coll/040-restore.exp: Raise failed ReqLo msg to top level message block 2019-04-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/370-deps-bis.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/376-deps7.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-error.exp, testsuite/modules.50-cmds/377-opposite.exp, testsuite/modules.50-cmds/379-module-unload.exp, testsuite/modules.50-cmds/380-altname.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.70-maint/140-multiargs.exp: More appropriate warn/err msg for failed ReqLo When a module requirement is seen missing but the load of this module was attempted, report a more specific error or warning message to let user understand that the load of the requirement was attempted but failed. Thus distinction is made between missing requirements where a load tentative was made and those were the no load attempt was performed (when the automated module handling mode is disabled for instance). Fixes #257. 2019-04-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Refactor cmdModule{Load,Unload} error catch code 2019-04-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/376-deps7.exp, testsuite/modules.50-cmds/376-switch.exp: Report failed {load,unload} of switched-{off,on} module When switching modules, report failure of switched-off module unload or switched-on module load under the message block of the switch action. A failed switched-off module unload is reported as an error, as it aborts the switch evaluation, whereas a failed switched-on module load is reported as a warning. Fixes #255. 2019-04-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/376-switch.exp: Rely on cmdModuleUnload error catch mech for prereq report When attempting to unload a module, if this module has dependent loaded it cannot be unloaded if auto_handling mode is disabled. Treat that situation through the cmdModuleUnload error catch rather just with a reportError call. In case this situation happens through a 'module unload' command in a modulefile evaluated in load mode, no error return code should be set. However in other situations, cmdModuleUnload command should return an error code. So this change fixes 'switch' sub-command when the switched-off module cannot be unloaded as it has some dependent module loaded. Now it fails the whole switch process and no load of the switched-on module is not tried. Fixes #251. * modulecmd.tcl.in: Rely on cmdModuleLoad error catch mech for conflict report * modulecmd.tcl.in, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/376-switch.exp: Move 'module switch' deps set in cmdModuleSwitch Used for 'module switch' commands is set in modulefile. In order to get finer control on the dependency definition and error report when the unload of the switched-off module or the load of the switched-on module fail. 2019-04-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/373-deps4.exp: Drop output of failed ReqLo eval if one succeed When multiple modules are listed on a prereq command, drop the output of those modules that fails to load (by the requirement load automated mechanism) to only keep the output of the module whose load succeed. Introduces procedures and variables to hold reports until all requirement choices are tried to be loaded, then release held output (drop or print). Exception is made for debug output which is always immediately printed. Fixes #254. * testsuite/modules.50-cmds/376-deps7.exp: ts: clarify comment on no-auto urequn report in 50/376 2019-04-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-error.exp: Warn if useless requirement unload fails on no-auto mode During the unload of a module when the automated module handling mode is disabled, report a warning message foreach unload of a useless requirement that fails as done when the automated module handling mode is enabled. Fixes #253. 2019-03-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Remove useless priorlmlist var from cmdModule{Load,Unload} * doc/example/inhibit-report-info/siteconfig.tcl, modulecmd.tcl.in, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-error.exp: Report auto mech warn/err to top level message block During an additional evaluation triggered by an automated module handling mechanism, ensure warning and error messages are reported under the message block of the main evaluation. Add a 'recordtop' argument to the reportWarning and reportError procedures in order to indicate that the message should be recorded under the top-level message block instead of the currently active message block. Fixes #252. 2019-04-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/040-list.exp: ts: add specific term width tests for list subcommand 2019-04-15 Jesper Dahlberg <jesper@ludd.ltu.se> * modulecmd.tcl.in: Fix hanging 'list' command Bug correction of the list command for the case when the terminal width is equal to the text width to be printed when only a single column is used. Without the correction, the 'moudule list' command hangs. 2019-04-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .appveyor.yml: appveyor: stop testing R in Cygwin platform On Cygwin platform, R installation seems currently broken under the AppVeyor CI environment (see https://github.com/appveyor/ci/issues/2913). So for the time being, remove R installation to avoid failing test results. 2019-04-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/conf.py: doc: improve code that disable smart quotes With contribution from @volans- for the Sphinx version test code. * doc/source/conf.py: doc: preserve quotes and dashes when making html docs Restrain Sphinx from converting quotes and dashes to lang-specific entities with either the html_use_smartypants or smartquotes options. Fixes #250 2019-03-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/370-deps-bis.exp, testsuite/modules.50-cmds/377-error.exp: ts: report UReqUn eval in accurate order in --no-auto mode * testsuite/modules.50-cmds/377-error.exp: ts: no auto mech summary report when top eval fails * testsuite/modules.50-cmds/376-deps7.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-cyclic.exp, testsuite/modules.50-cmds/377-error.exp, testsuite/modules.61-coll/040-restore.exp: ts: detect mod eval in accurate context on sumup lists 2019-03-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-error.exp: ts: failed eval are not part of auto mech summary lists 2019-03-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/377-error.exp: ts: auto mech msg summary always after err/warn msgs * modulecmd.tcl.in: Rely on context arg of to know if switch is ongoing * modulecmd.tcl.in: Register and report each evaluation and assoc context Better track each module evaluation and the context associated to it in order to report a more accurate information on the additional modules loaded or unloaded when proceeding the main evaluation request. When calling for a module load or unload, pass a context name to either the cmdModuleLoad or cmdModuleUnload procedure called to let it register the module evaluation and its associated context into a global structure gathering all these informations per top-level evaluation. Report messages on the additional evaluation occuring during a main one are now based on these registered information rather on computed list of elements passed to the cmdModuleLoad or cmdModuleUnload procedures. As a result a more reliable information is obtained, especially during a main load evaluation, where previously some unload/load additional evaluation were not seen or were reported against another automated mechanism. Additional evaluation messages are only reported if the main evaluation goes to its end, which means that if some event forces it to rollback the summary list of actions will not be seen to let users better understand the resulting situation (nothing was unloaded or loaded) and focus on the error message. Previously finished auto mechanisms were immediatly reported which confused people as an error occuring after the mechanism leads to a full rollback. In case an additional evaluation fails, the corresponding module is removed from the list of modules on which the auto mechanism triggered a load or an unload evaluation. When unloading useless requirements in no-auto mode, these unloads are now reported in their correct evaluation order (order of definition found in modulefiles). Fixes #244, fixes #245, fixes #246, fixes #247 and fixes #248 2019-03-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version 4.2.3 * testsuite/modules.50-cmds/375-deps6.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.61-coll/040-restore.exp: ts: correctly escape exp res in 50/{375,376} and 61/041 * .gitattributes: install: exclude CI confs from dist tarballs 2019-03-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitattributes, .gitignore, Makefile, doc/Makefile: install: fix CONTRIBUTING guide build and install 2019-03-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Fix useless conditions on reloadModuleList{Load,Unload}Phase * testsuite/modules.50-cmds/377-error.exp: ts: add force mode tests in 50-377-error 2019-03-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/mtreview.in, testsuite/install.00-init/006-procs.exp, testsuite/modules.00-init/006-procs.exp: ts: add distinctive mark at end of res/exp string To distinguish the end of the output or expected result from the output or expected result content. 'mtreview' tool better catches the content it has to compare. 2019-03-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile: install: fix md5sum passed argument To perform correctly on OS X. 2019-03-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .cirrus.yml, .gitignore, .travis.yml, Makefile, contrib/mt, contrib/mtreview.in: install: fetch 'icdiff' to process test res throught it * contrib/mt: contrib: mt calls mtreview to process test results * testsuite/modulefiles.deps/rfa, testsuite/modulefiles.deps/rfb, testsuite/modulefiles.deps/rfc, testsuite/modulefiles.deps/rfd, testsuite/modulefiles.deps/rfe, testsuite/modulefiles.deps/rff, testsuite/modulefiles.deps/rfg, testsuite/modulefiles.deps/rfh, testsuite/modulefiles.deps/rfi, testsuite/modulefiles.deps/rfj, testsuite/modulefiles.deps/rfk, testsuite/modulefiles.deps/rfl, testsuite/modulefiles.deps/rfm, testsuite/modulefiles.deps/rfn, testsuite/modulefiles.deps/rga, testsuite/modulefiles.deps/rgb, testsuite/modulefiles.deps/rgc, testsuite/modulefiles.deps/rgd, testsuite/modulefiles.deps/rge, testsuite/modulefiles.deps/rgf, testsuite/modulefiles.deps/rgg, testsuite/modulefiles.deps/rgh, testsuite/modulefiles.deps/rgi, testsuite/modulefiles.deps/rgj, testsuite/modulefiles.deps/rgk, testsuite/modulefiles.deps/rgl, testsuite/modulefiles.deps/rgm, testsuite/modulefiles.deps/rgn, testsuite/modules.50-cmds/377-error.exp: ts: add situations in 50/377-error where crashes occur on multiple auto mech 2019-03-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .appveyor.yml, .cirrus.yml, .travis.yml, contrib/mt: travis,appveyor,cirrus: launch tests throught 'mt' * .gitignore, Makefile, contrib/mtreview.in: contrib: add 'mtreview' script to highlight failed tests * modulecmd.tcl.in, testsuite/modulefiles.deps/raam, testsuite/modulefiles.deps/rabm, testsuite/modulefiles.deps/racm, testsuite/modulefiles.deps/radm, testsuite/modulefiles.deps/raem, testsuite/modulefiles.deps/rafm, testsuite/modulefiles.deps/ragm, testsuite/modulefiles.deps/rahm, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/377-error.exp: In no-auto mode one UReqUn failure should not fail whole unload During the unload of a module with auto_handling mode disabled, if the unload of one of its useless requirements (by the useless requirement unload mechanism triggered in --no-auto mode when requirements are declared with the 'module load' modulefile command) fails, it should not fail the whole unload process like when auto_handling mode is enabled. Fixes #238 2019-03-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deps/rea, testsuite/modulefiles.deps/reb, testsuite/modulefiles.deps/rec, testsuite/modulefiles.deps/red, testsuite/modulefiles.deps/ree, testsuite/modulefiles.deps/ref, testsuite/modulefiles.deps/reg, testsuite/modulefiles.deps/reh, testsuite/modulefiles.deps/rei, testsuite/modulefiles.deps/rej, testsuite/modulefiles.deps/rek, testsuite/modulefiles.deps/rel, testsuite/modulefiles.deps/rem, testsuite/modulefiles.deps/ren, testsuite/modules.50-cmds/377-error.exp: ts: add DepRe tests in 50/377-error 2019-03-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles.deps/rdc, testsuite/modulefiles.deps/rdd, testsuite/modulefiles.deps/rde, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/375-deps6.exp, testsuite/modules.50-cmds/377-cyclic.exp, testsuite/modules.50-cmds/377-error.exp: On reload cmd, stop if one unloading/loading mod fails When reloading all loaded modules with the 'reload' sub-command, if one reloading module fails to unload or load abort the whole reload process to preserve environment sanity. Add a sum-up message group for reload sub-command to clearly get all errors related to this command under the same message block. Fixes #237 2019-03-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/376-switch.exp: Stop if one DepRe load fails except if force mode set During the load or the unload of a module, if the load of one of its dependent (by the dependent reload mechanism) fails abort the whole unload/load process. Exception made if the force mode is enabled. In this case failing module stays loaded and Dependent Unload mechanism continues with next module to load. When applying DepRe load phase during a switch command, consider force mode a default since here we are trying to reload the dependent modules found when unloading switched-off module. Switch action does not guarantee to find all DepRe modules still loaded at the end of process. Fixes #241 2019-03-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Stop if one DepRe unload fails except if force mode set During the load or the unload of a module, if the unload of one of its dependent (by the dependent reload mechanism) fails abort the whole unload/load process. Exception made if the force mode is enabled. In this case failing module stays loaded and Dependent Unload mechanism continues with next module to unload. This failing module is removed from the Dependent Reload list, so it will not take part of the load phrase of the mechanism. Fixes #239 2019-03-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deps/rca, testsuite/modulefiles.deps/rcb, testsuite/modulefiles.deps/rcc, testsuite/modulefiles.deps/rcd, testsuite/modulefiles.deps/rce, testsuite/modules.50-cmds/377-error.exp: ts: add purge/reload tests in 50/377-error * modulecmd.tcl.in: Add debug msgs to {push,pop,restore}Settings procs 2019-03-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-error.exp: If one UReqUn fails removes its requirements from UReqUn list During the unload of a module, if the unload of one of its useless requirements (by the useless requirement unload mechanism) fails, removes the requirements of this failing module from the useless requirement list so they are kept loaded as failing module will still be loaded. Such error is reported as a warning and it does not stop the whole unload process as main module to unload and its dependent are able to unload, just its requirements automatically loaded cannot be unloaded. So the job has been done, not perfectly but main task is successful and resulting user environment is coherent. A getRequiredLoadedModuleList procedure is introduced to get all the loaded modules required by a list of modules passed to the procedure. Fixes #240 2019-03-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/377-error.exp: Stop unload if one DepUn fails except if force mode set During the unload of a module, if the unload of one of its dependent (by the dependent unload mechanism) fails abort the whole unload process. Exception made if the force mode is enabled. In this case failing module stays loaded and Dependent Unload mechanism continues with next module to unload. 2019-03-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Rework cmdModuleLoad code with break/continue commands To improve clarity of the cmdModuleLoad procedure replace large if/then/else conditional blocks by break or continue abortion commands. A catch statement is set around the evaluation parts of the procedure and if a break happens, saved settings are restored (which means some evaluation went wrong and previous settings are rolled back). * modulecmd.tcl.in: Remove useless rollback in cmdModuleLoad Now push/pop/restoreSettings procedures correctly handle the conflict, prereq and alternative names information, there is no need to specificly clear their relative structures in cmdModuleLoad when setup must be rolled back. * modulecmd.tcl.in: Rework cmdModuleUnload code with break/continue commands To improve clarity of the cmdModuleUnload procedure replace large if/then/else conditional blocks by break or continue abortion commands. A catch statement is set around the evaluation parts of the procedure and if a break happens, saved settings are restored (which means some evaluation went wrong and previous settings are rolled back). 2019-03-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/example/flavored-modules/modulefiles/.common, .../modulefiles/flavor/gromacs/plumed, .../modulefiles/flavor/gromacs/standard, .../modulefiles/flavor/hdf5/parallel, .../modulefiles/flavor/hdf5/serial, .../modulefiles/flavor/netcdf-fortran/.modulerc, .../modulefiles/flavor/netcdf/.modulerc, doc/example/flavored-modules/modulefiles/gcc/4.8, doc/example/flavored-modules/modulefiles/gcc/8, doc/example/flavored-modules/modulefiles/gromacs/5, doc/example/flavored-modules/modulefiles/hdf5/1.10, doc/example/flavored-modules/modulefiles/hdf5/1.8, doc/example/flavored-modules/modulefiles/intel/15, doc/example/flavored-modules/modulefiles/intel/17, .../flavored-modules/modulefiles/intelmpi/17, .../flavored-modules/modulefiles/jasper/1.900, .../modulefiles/netcdf-fortran/4.4, .../flavored-modules/modulefiles/netcdf/4.6, .../flavored-modules/modulefiles/openmpi/2.0, doc/example/flavored-modules/modulefiles/pgi/18, doc/example/flavored-modules/modulefiles/wrf/3.9: doc: add example modulefiles for 'flavored-modules' recipe 2019-03-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deps/ibm, testsuite/modules.50-cmds/375-order.exp, testsuite/modules.50-cmds/376-switch.exp: ts: test reverting 'module load/switch' when req loaded after 2019-03-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/378-sametarget.exp: Set requirement from closest match When computing dependencies between loaded or loading modules, if multiple candidates match a requirement, the closest one to the requiring module is selected instead of the farest one. This change makes dependency selection consistent with loaded module selection which selects lastly loaded module when multiple modules match search. * modulecmd.tcl.in: Add a 'isModuleUnloadable' helper procedure isModuleUnloadable checks whether a given loaded module could be automatically unloaded or not (it can if it has been automatically loaded and no other loaded module requires it). Use this new procedure in getUnloadableLoadedModuleList and cmdModuleUnload procedures. For the latter it simplifies the treatment when 'onlyureq' argment is enabled * modulecmd.tcl.in, testsuite/modules.50-cmds/375-order.exp, testsuite/modules.50-cmds/376-switch.exp: Correct unloadable mod search when reverting 'module load/switch' Select unload candidate from loaded module list excluding modules loaded after the current unloading module. So only module loaded prior dependent module are taken into account. Then pass this candidate, if any, to cmdModuleUnload and rely on this procedure to unload module only if it is unloadable. Previous commit was relying on the list of unloadable modules, obtained from getUnloadableLoadedModuleList procedure, which sometimes led to corner cases especially if dependency information were not set somehow (no module would be unloaded in that case as getUnloadableLoadedModuleList relies only on these dependency information). As the candidate is selected to be the closest one from the module requiring it, it changes unloading result when multiple candidates are found prior requiring module (previously firstly loaded module was unloaded). 2019-03-06 Ben Bowers <nanobowers@gmail.com> * CONTRIBUTING.rst: Adding emacs settings useful for adhering to coding conventions Fixes #233 2019-03-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .cirrus.yml: cirrus: fix custom clone script for pull request 2019-03-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles.deps/ih/0, testsuite/modulefiles.deps/iim, testsuite/modulefiles.deps/swg/0, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/375-order.exp, testsuite/modules.50-cmds/376-switch.exp: Fix mod selection for 'module load/switch' in modfile when unloading When unloading a loaded module that contains 'module load' or 'module switch' commands in its modulefile, loaded required module should be unloaded if it has been automatically loaded. This commit fixes the selection of this module to unload automatically when evaluating in unload mode the 'module load' or 'module switch' commands used in modulefiles. If a loaded module matches the 'module load' or 'module switch' statement but was loaded after the module making these statements, it should not be selected as the module to automatically unload. Fixes #232 2019-03-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deps/swi, testsuite/modulefiles.deps/swj, testsuite/modulefiles.deps/swk, testsuite/modulefiles.deps/swl, testsuite/modulefiles.deps/swm, testsuite/modulefiles.deps/swn, testsuite/modules.50-cmds/376-switch.exp: ts: add 'module switch' in modfile erroneous situation With switched-off or switched-on or both modules targeted by 'module switch' fail to load/unload. 2019-02-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.80-deep/068-transitive.exp: Find alt names of mod coming from distant dirs If an alias is set on a directory and this directory default element is an alias toward a modulefile. When this modulefile is loaded, it holds no reference to first alias. For default elements in a directory that points to a modulefile, when this modulefile is loaded, it should receive the eventual aliases set on the distant directory as alternative names. Fixes #231 2019-02-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Remove unneeded control prior reporting info when unloading No need to check if we are on main unload action prior reporting lists of additionnally loaded or unloaded modules in cmdModuleUnload procedure, as these code sections could only be reached from the main unload action. * modulecmd.tcl.in: Remove unneeded recordId push/pop in switch context No need to adapt message record id for a switch action for code sections that are never reached when a switch action is ongoing. * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: ts: check getLoadedConflict proc in non-serialized mode * testsuite/cmd.exe, testsuite/modules.50-cmds/140-system.exp: ts: check 'system' cmd in a Windows simulated context 2019-02-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.other/restore, testsuite/modules.61-coll/040-restore.exp: ts: check load msg report when modfile use restore cmd * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: ts: check getModuleFromLoadingModulefile proc in 00/120 Call procedure against a not loaded modulefile. * testsuite/modulefiles.deps/msf, testsuite/modulefiles.deps/mtf, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/375-deps6.exp: ts: basic conflict/prereq test on fully qualified module name * modulecmd.tcl.in: Rewrite evaluation mode test in 'system' proc * testsuite/modules.50-cmds/375-deps6.exp: ts: test an is-loading conflict check in force mode 2019-02-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deps/swa, testsuite/modulefiles.deps/swb, testsuite/modulefiles.deps/swc, testsuite/modulefiles.deps/swd, testsuite/modulefiles.deps/swe, testsuite/modulefiles.deps/swf, testsuite/modulefiles.deps/swg/1, testsuite/modulefiles.deps/swg/2, testsuite/modulefiles.deps/swh, testsuite/modules.50-cmds/376-switch.exp: ts: add 'module switch' in modfile dep tests * modulecmd.tcl.in, testsuite/modulefiles.other/modemptyarg/swap3, testsuite/modules.50-cmds/152-module-emptyarg.exp: Revert 'module switch' in modfile when unloading modfile No distinction were made previously for 'module switch' command used in modulefile regarding modulefile evaluation mode. This was a mistake as an unload evaluation of a modulefile should revert what has been set at load time. During an unload evaluation, a 'module switch' command is converted to a 'module unload' of the switched-on module, like for 'module load' command. Nothing is done for switched-off module, like for 'module unload' command. CAUTION: it is not recommended to use the `switch` sub-command in modulefiles as this command is intended for the command-line for a 2in1 operation. Could be removed from the modulefile scope in a future release. Use `module unload` and `module load` commands in modulefiles instead. Fixes #226 2019-02-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/152-module-emptyarg.exp: Track deps defined by 'module switch' in modfile When 'module switch' commands are found in modulefiles, track switched-off modulefile as a conflict and switched-to modulefile as a requirement to apply same behaviors than for 'module load' and 'module unload' commands in modulefiles. If 'switch' sub-command has only one argument, do not define any conflict, only a requirement on the defined switched-to argument. CAUTION: it is not recommended to use the `switch` sub-command in modulefiles as this command is intended for the command-line for a 2in1 operation. Could be removed from the modulefile scope in a future release. Use `module unload` and `module load` commands in modulefiles instead. Fixes #229 * testsuite/modules.95-version/050-fullpathentry.exp: ts: add use/unuse tests in 95/050 Demonstrate correct addition or removal to MODULEPATH of entry composed of a bare variable reference. 2019-02-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/example/modulefiles-in-git/modulefiles/localmodules: doc: mention author of modulefiles-in-git examples 2019-02-24 Scott Johnson <scottjohnsoninsf@gmail.com> * .../modulefiles-in-git/modulefiles/localmodules, doc/source/cookbook/modulefiles-in-git.rst: New cookbook entry for versioning Modulefiles with Git Originally developed at: https://github.com/scottj97/environment-modules-in-git 2019-02-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.95-version/050-fullpathentry.exp: Accept a variable reference as a full MODULEPATH entry Enable to define a path entry to the MODULEPATH variable which corresponds to a variable reference only (not a variable reference mixed in a path string). Was previously prefixing this variable reference with current working directory path as variable reference was detected as a relative path. Fixes #223 * init/bash.in, init/csh.in, init/fish.in, init/ksh.in, init/sh.in, init/zsh.in: init: init MANPATH if not set to preserve man sysconfig In shell initialization scripts, initialize MANPATH if not set with a value that preserves manpath system configuration even after addition of paths to this variable by modulefiles Fixes #224 * contrib/rpm/environment-modules.spec.in: rpm: add CONTRIBUTING guide to %doc 2019-02-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deps/ra, testsuite/modulefiles.deps/raa, testsuite/modulefiles.deps/rab, testsuite/modulefiles.deps/rac, testsuite/modulefiles.deps/rad, testsuite/modulefiles.deps/rae, testsuite/modulefiles.deps/raf, testsuite/modulefiles.deps/rag, testsuite/modulefiles.deps/rah, testsuite/modulefiles.deps/rb, testsuite/modulefiles.deps/rba, testsuite/modulefiles.deps/rbb, testsuite/modulefiles.deps/rbc, testsuite/modulefiles.deps/rbd, testsuite/modulefiles.deps/rbe, testsuite/modulefiles.deps/rbf, testsuite/modulefiles.deps/rbg, testsuite/modulefiles.deps/rbh, testsuite/modulefiles.deps/rc, testsuite/modulefiles.deps/rd, testsuite/modulefiles.deps/re, testsuite/modulefiles.deps/rf, testsuite/modulefiles.deps/rg, testsuite/modulefiles.deps/rh, testsuite/modulefiles.deps/ri, testsuite/modulefiles.deps/rj, testsuite/modulefiles.deps/rk, testsuite/modulefiles.deps/rl, testsuite/modulefiles.deps/rm, testsuite/modulefiles.deps/rn, testsuite/modulefiles.deps/ro, testsuite/modulefiles.deps/rq, testsuite/modulefiles.deps/rr, testsuite/modulefiles.deps/rs, testsuite/modules.50-cmds/377-error.exp: ts: test mod eval crash during auto handling mechs 2019-02-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add dep-related internal structs to settings save/restore In order to correctly restore internal information state when a modulefile evaluation fails, add all the dependency-related internal arrays to the list of variables saved prior modulefile evaluation, then restored in case modulefile evaluation fails. 2019-02-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/375-order.exp: ts: clear unneeded comment in 50/375-order 2019-02-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version 4.2.2 2019-02-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deps/ie, testsuite/modulefiles.deps/if, testsuite/modulefiles.deps/ig, testsuite/modulefiles.deps/ih/1, testsuite/modulefiles.deps/ih/2, testsuite/modulefiles.deps/ii, testsuite/modulefiles.deps/ij, testsuite/modules.50-cmds/375-order.exp: ts: check requirement loading order in 50/375-order 2019-02-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Use NPO deps to compute DepUn list if it heals loaded mods Compute Dependent Unload module list with regular or "No Particular Order" dependency structures. Compare both list to choose the accurate one. Result list obtained from the "No Particular Order" stuctures is chosen if the loaded environment could be healed after unloading asked module with dependencies loaded after the modules requiring them. This is guessed from the length of the obtained lists: less element in NPO list means NPO dependencies could save some loaded modules from being unloaded by the Dependent Unload mechanism. 2019-02-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/040-subshell.exp, testsuite/install.00-init/050-crossshell.exp: ts: adapt err msg for fish 3.0 * modulecmd.tcl.in: No dep struct exist check in areModuleConstraintsSatisfied No need to test existence of the requirement list for a loaded module in g_moduleDepend or g_moduleNPODepend structure, as all loaded modules get an array key in these arrays whether they have requirements or not. 2019-02-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Clarify auto handled mods in debug msgs * modulecmd.tcl.in: Clarify debug msgs on {set,unset}ModuleDependency 2019-02-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles.deps/go, testsuite/modulefiles.deps/gp, testsuite/modulefiles.deps/gq, testsuite/modulefiles.deps/gr, testsuite/modulefiles.deps/gs, testsuite/modules.50-cmds/377-cyclic.exp: Update NPO dep structs to break dep cycle Update the setModuleDependency and unsetModuleDependency procedures to break any dependency cycle spotted in the No Particular Order dependency structures. 2019-02-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Use NPO deps struct to compute DepUn/DepRe on unload Use the No Particular Order dependency structures to get the modules to handle via the Dependent Unload and the Dependend Reload mechanisms at unload time. Using these No Particular Order dependency structures help to "heal" the loaded environment after an unload batch as some dependent modules loaded before their requirements could be reloaded to get an unloaded requirement replaced by another loaded after dependent. This change mainly adds the 'nporeq' argument to the getDependentLoadedModuleList procedure to use the NPO structures rather the order-dependent ones. Then the sortModulePerLoadedAndDepOrder, areModuleConstraintsSatisfied and getDirectDependentList procedures are updated in turns to use these NPO structures when called by getDependentLoadedModuleList in nporeq mode. * modulecmd.tcl.in: Add structs to manipulate NPO requirements In addition to the g_moduleDepend, g_dependHash and g_prereqViolation structures that hold requirement state of loaded modules, taking into account loading order, introduce the g_moduleNPODepend, g_dependNPOHash and g_prereqNPOViolation structures that hold requirements between loaded modules whatever their loading order (No Particular Order taken into account), which means a requirement loaded after its dependent module will be found in the *NPO* structures but not in the regular ones. 2019-02-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/375-deps6.exp: ts: adapt test res for only PRE req are valid * modulecmd.tcl.in: Only PRE requirement are considered valid When looking at the dependency of a loaded module, only consider requirement loaded before dependent (holding a prior position in the loaded module list) as valid, those loaded after dependent module are considered as an unmet dependency. 2019-02-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add getUnmetDependentLoadedModuleList for load DepRe Compute the Dependent Reload module list when loading a module with the introduced getUnmetDependentLoadedModuleList procedure. Instead of faking new module is already loaded to get the dependent list able to be reloaded, missing requirement over new module is just silenced to determine these Dependent Reload modules. Also take into account requirements loaded after dependent that help to solve a requirement constraint with upcoming loaded mod. 2019-01-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles.deps/refcon/1, testsuite/modulefiles.deps/refcon/2, testsuite/modules.50-cmds/375-deps6.exp: Fix warn msg when forcing a reflexive conflict Message appeared twice (one for generic name at conflict command evaluation and one during persistent conflict check at end of load). 2019-01-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/tcsh_completion.in: init: fix tcsh completion when 'noclobber' var is set Fix _module_not_yet_loaded alias in tcsh completion script to handle situation when 'noclobber' variable is set (should force to write to the fifo files). Also ensure actual 'rm' command is called and not an alias that may ask for confirmation. Fixes #219 2019-01-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .cirrus.yml, README.md: Introduce Cirrus CI config file for FreeBSD CI * .appveyor.yml: appveyor: exclude compat branches from ci 2019-01-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst: doc: up MIGRATING for 'eval then check if conflict' 2019-01-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deps/un/1, testsuite/modulefiles.deps/un/2, testsuite/modulefiles.deps/un/3, testsuite/modulefiles.deps/una, testsuite/modulefiles.deps/unb, testsuite/modulefiles.deps/unc, testsuite/modulefiles.deps/und, testsuite/modules.50-cmds/379-module-unload.exp: ts: add tests for 'eval then check if conflict' 2019-01-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/370-deps-bis.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/376-deps7.exp, testsuite/modules.50-cmds/377-cyclic.exp, testsuite/modules.50-cmds/377-opposite.exp, testsuite/modules.50-cmds/378-sametarget.exp, testsuite/modules.50-cmds/380-altname.exp: ts: fix for 'eval then check if conflict' Adapt existing tests according to the modulefile evaluation that now occurs even if a conflict toward modulefile is set prior load. There is no change to the output shell code (output order may vary as some rollback may occur after a load tentative if a conflict violation is detected afterward). Also some stderr output messages may change since a load tentative is made (so messages outputed within modulefile will be seen). If evaluation attempt fails on something else than a conflict violation, this error will take precedence over the conflict error (prereq not found, modulefile syntax error, etc). If modulefile declares multiple conflicts which are currently violated, there will be an error message for each of them as evaluation is going through the whole modulefile before raising conflict errors. 2019-01-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Evaluate mod then check conflict violation Give the chance to the 'module unload' statements in modulefile to solve conflict that were registered prior the load attempt of this modulefile by evaluating modulefile then check afterward if a conflict violation is there rather checking if a conflict violation exists (and shout error if there is) before evaluating modulefile. So modulefile is evaluated even if a conflict is registered against him prior its evaluation. If a conflict is still set after its evaluation (and the evaluation of its requirements) everything is rolled back. The 'module unload' commands could solve these already registered conflicts. 'conflict' commands used in the loading modulefile will however still break the load immediately if the conflict is seen violated to maintain same behavior. With this change, behavior of these 'module unload' modulefile commands is restored to what it was able to do prior conflict consistency changes, yet this consistency is maintained as everything is rolled back in the end if conflict is still there. doesModuleConflict procedure has also been changed to look at loading modules in addition to loaded modules, since the conflict check triggered by 'module unload' will not raise an error (error is now raised based on the result of the doesModuleConflict call. Fixes #216 * testsuite/modules.50-cmds/095-uname.exp: ts: escape (, ) and + in 'uname -v' res 2019-01-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * README.md: doc: add repology packaging status badge in README 2019-01-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/conf.py, modulecmd.tcl.in: New year (2019) copyright mention update 2019-01-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml: travis: fix OSX brew install Ensure homebrew is up-to-date to avoid consistency issue 2018-12-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/zsh-functions/_module: init: recognize --{auto,no-auto,force,paginate,no-pager} opts in zsh comp Add recognition of the --auto, --no-auto, --force, --paginate and --no-pager command-line switches in zsh shell completion script. * init/fish_completion: init: recognize --{auto,no-auto,force} opts in fish comp Add recognition of the --auto, --no-auto and --force command-line switches in fish shell completion script. * modulecmd.tcl.in, testsuite/modulefiles/function/1.0, testsuite/modules.50-cmds/390-function.exp, testsuite/modules.50-cmds/391-function-undo.exp: Trim function body passed to set-function cmd Trim any whitespace, newline or ';' characters at the beginning or end of the function body passed to set-function modulefile command to correctly define shell function whatever the writing style used. 2018-12-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/FAQ.rst: doc: add a FAQ entry to desc. use of module from Makefile Thanks to Robert McLay for the hint. * doc/source/module.rst: doc: fix typo in Python init example in module man page 2018-11-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/guide/get_started/03-first_module-bar.sh, contrib/guide/get_started/13-datadir-common.sh: contrib: fix mkdir in get_started guide scripts 2018-11-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * CONTRIBUTING.rst, doc/source/CONTRIBUTING.rst, doc/source/index.rst: doc: add CONTRIBUTING guide 2018-11-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/example/inhibit-report-info/modulefiles/bar, doc/example/inhibit-report-info/modulefiles/foo, .../example}/inhibit-report-info/siteconfig.tcl, .../example}/top-priority-values/modulefiles/bar/1, .../example}/top-priority-values/modulefiles/foo/1, .../example}/top-priority-values/siteconfig.tcl, .../unload-firstly-loaded/modulefiles/foo/1, .../unload-firstly-loaded/modulefiles/foo/2, .../example}/unload-firstly-loaded/siteconfig.tcl, doc/source/cookbook.rst, doc/source/cookbook/inhibit-report-info.rst, doc/source/cookbook/top-priority-values.rst, doc/source/cookbook/unload-firstly-loaded.rst, doc/source/index.rst: doc: introduce cookbook Add a cookbook section in the documentation and port there the 3 pre-existing recipes: inhibit-report-info, top-priority-values and unload-firstly-loaded. Move the examples files of these recipes from contrib/cookbook to doc/example directory. 2018-11-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles.deps/ia, testsuite/modulefiles.deps/ib, testsuite/modulefiles.deps/ic, testsuite/modulefiles.deps/id, testsuite/modules.50-cmds/373-deps4.exp: Fix DepUn when all mods from an opt list are unloaded Correct the Dependent Unload mechanism when it triggers the unload of 2 modules making together a requirement from another module. This module is now also added to the dependent modules to unload as both modules from its requirement definition are unloaded. 2018-11-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version 4.2.1 2018-11-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.70-maint/152-remove-path.exp: Rework ref counter handling and relative error mngt No more disturbing warning messages when reference counter variable is not coherent with its relative environment variable. Erroneous value will raise a debug message only and relative reference counter is ignored (which means a count of 1 is applied). Now environment variable is trusted and if its path elements are found in a reference counter variable, this counter is taken into account. Elsewhere, a reference counter of 1 is applied. Which means a value found in reference counter variable but not in variable is ignored. A value found in variable but not in reference counter (or with a bad reference counter value) gets a count of 1 applied. Adapt existing tests in 70/152 and 50/40 and add some unload command tests in 50/040. Fixes #206 2018-11-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash.in, init/csh.in, init/fish.in, init/ksh.in, init/sh.in, init/zsh.in: init: skip shell env alteration if autoinit cmd failed Fixes #208 2018-11-07 Satya Mishra <satya.devel@gmail.com> * init/csh.in, testsuite/modules.70-maint/120-autoinit.exp: use :q to quote prompt to accomodate prompts with embedded newlines * modulecmd.tcl.in: use :q to quote prompt to accomodate prompts with embedded newlines 2018-11-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deps/ha/1, testsuite/modulefiles.deps/ha/2, testsuite/modulefiles.deps/ha/3, testsuite/modulefiles.deps/hb, testsuite/modulefiles.deps/hc, testsuite/modulefiles.deps/hd, testsuite/modulefiles.deps/he, testsuite/modulefiles.deps/hf, testsuite/modulefiles.deps/hg, testsuite/modules.50-cmds/378-sametarget.exp: ts: tests multiple deps targeting same mod in 50/378 * modulecmd.tcl.in: Fix dep computation when opt prereq list target same mod Ensure a loaded module matching multiple entries of a same 'or' prereq will just be considered as one module matching prereq. * modulecmd.tcl.in, testsuite/modulefiles.deps/fia, testsuite/modules.50-cmds/377-deps8.exp: Fix dep computation when unloading for multi ref Some dependencies expressed may target same module so it is important to safely unset dependency reference (in case unset has already been performed) 2018-11-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deps/ga, testsuite/modulefiles.deps/gb, testsuite/modulefiles.deps/gc, testsuite/modulefiles.deps/gd, testsuite/modulefiles.deps/ge, testsuite/modulefiles.deps/gf, testsuite/modulefiles.deps/gg, testsuite/modulefiles.deps/gh, testsuite/modulefiles.deps/gi, testsuite/modulefiles.deps/gj, testsuite/modulefiles.deps/gk, testsuite/modulefiles.deps/gl, testsuite/modulefiles.deps/gm, testsuite/modulefiles.deps/gn, testsuite/modulefiles.deps/gw, testsuite/modulefiles.deps/gx, testsuite/modulefiles.deps/gy, testsuite/modulefiles.deps/gz, testsuite/modules.50-cmds/377-cyclic.exp: ts: tests cyclic dep situations in 50/377-cyclic 2018-11-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Check 'module load' mod not already loading before loading it Useful in case of cyclic dependencies to avoid an infinite loading loop. 2018-10-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Compute loaded mod dependency relations without cycle When computing dependency relations between loaded modules and a freshly loaded one, do not launch a refresh of those unmet relations for an already loaded module with the new one if this relation closes a dependency cycle. When parsing the already loaded environment, the loaded module dependency relations are computed giving each module only the visibility of modules loaded prior it. Modules loaded after one module are not taken into account as they have not taken part of its requirements. 2018-11-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Check prereq mod is not already loading before loading it Useful in case of cyclic dependencies to avoid an infinite loading loop. 2018-10-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/373-deps4.exp: ts: clarify test in 50/373 with a UreqUn mod found after dependent 2018-10-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/mt: contrib: select between files at same ts num in 'mt' 2018-11-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_v3_v4.rst, modulecmd.tcl.in, testsuite/etc/modulerc.altname, testsuite/etc/rc, testsuite/modulefiles.deps/alt/9, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.50-cmds/380-altname.exp: Enable 'is-loaded' for modulerc eval Make 'is-loaded' modulefile command callable from a modulerc interpretation. Restore this way the behavior of compatibility version. Update diff doc and add some specific non-regression tests in 20/060 and 50/380. Fixes #207 2018-10-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deps/faa, testsuite/modulefiles.deps/fab, testsuite/modulefiles.deps/fac, testsuite/modulefiles.deps/fad, testsuite/modulefiles.deps/fae, testsuite/modulefiles.deps/faf, testsuite/modulefiles.deps/fai, testsuite/modulefiles.deps/faj, testsuite/modulefiles.deps/fak, testsuite/modulefiles.deps/fal, testsuite/modulefiles.deps/fam, testsuite/modulefiles.deps/fan, testsuite/modules.50-cmds/377-deps8.exp, testsuite/modules.50-cmds/377-opposite.exp: ts: test opposite defs using diff cmds and alt names 50/377 2018-10-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/380-altname.exp: ts: test empty/bad elt in MODULES_LMALTNAME in 50/380 * testsuite/modules.50-cmds/120-prereq-full.exp: ts: test empty elt in MODULES_LMNOTUASKED in 50/120 * testsuite/modules.50-cmds/130-conflict-full.exp: ts: test empty/bad elt in MODULES_LMCONFLICT in 50/130 * testsuite/modules.50-cmds/120-prereq-full.exp: ts: test empty/bad elt in MODULES_LMPREREQ in 50/120 * testsuite/home/coll12, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/999-cleanup.exp: ts: restore coll holding incompat modfiles in 61/040 * testsuite/home/coll11, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/999-cleanup.exp: ts: save/restore coll with mod using 'module load' cmd 2018-10-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deps/.modulerc, testsuite/modulefiles.deps/fr, testsuite/modulefiles.deps/fs, testsuite/modulefiles.deps/ft, testsuite/modulefiles.deps/fu, testsuite/modules.50-cmds/377-deps8.exp: ts: test similar defs using diff cmds and alt names 50/377 * testsuite/modulefiles.deps/i6, testsuite/modulefiles.deps/i7, testsuite/modules.50-cmds/380-altname.exp: ts: test module {unload,load} cmds on alt names in 50/380 * testsuite/modulefiles.deps/.modulerc, testsuite/modulefiles.deps/fn, testsuite/modulefiles.deps/fo, testsuite/modulefiles.deps/fp, testsuite/modulefiles.deps/fq, testsuite/modules.50-cmds/377-deps8.exp: ts: test dup dep set with diff cmds and alt names in 50/377 2018-10-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deps/fj, testsuite/modulefiles.deps/fk, testsuite/modulefiles.deps/fl, testsuite/modulefiles.deps/fm, testsuite/modules.50-cmds/377-deps8.exp: ts: test dup dep set with diff cmds in 50/377 * testsuite/modulefiles.deps/fi, testsuite/modules.50-cmds/377-deps8.exp: ts: test dependency reordered dup defs in 50/377 * testsuite/modulefiles.deps/fa, testsuite/modulefiles.deps/fb, testsuite/modulefiles.deps/fc, testsuite/modulefiles.deps/fd, testsuite/modulefiles.deps/fe, testsuite/modulefiles.deps/ff, testsuite/modulefiles.deps/fg, testsuite/modulefiles.deps/fh, testsuite/modules.50-cmds/377-deps8.exp: ts: test dependency exact duplicate defs in 50/377 2018-10-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deps/ma, testsuite/modulefiles.deps/mb, testsuite/modulefiles.deps/mbs, testsuite/modulefiles.deps/mbt, testsuite/modulefiles.deps/mbu, testsuite/modulefiles.deps/mc, testsuite/modulefiles.deps/md, testsuite/modulefiles.deps/me, testsuite/modulefiles.deps/mf, testsuite/modulefiles.deps/mg, testsuite/modulefiles.deps/mh, testsuite/modulefiles.deps/mi, testsuite/modulefiles.deps/mj, testsuite/modulefiles.deps/mk, testsuite/modulefiles.deps/ml, testsuite/modulefiles.deps/mm, testsuite/modulefiles.deps/mn, testsuite/modulefiles.deps/mo, testsuite/modulefiles.deps/mp, testsuite/modulefiles.deps/mq, testsuite/modulefiles.deps/mr, testsuite/modules.50-cmds/370-deps-bis.exp: ts: duplicate 50/370 tests with module {load,unload} cmds Instead of prereq/conflict commands. * modulecmd.tcl.in, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/375-deps6.exp: Check mod to unload is not required by a loading mod Adapt getDependentLoadedModuleList and getDirectDependentList procedure to be able to take currently loading modules into account when looking for modules requiring a given module. Help to refrain a "module unload" order set within a modulefile to unload a module required by a loading module evaluated deeper in the stack. Adapt exiting tests working on inconsistent situations. 2018-10-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash_completion.in: init: fix unload/switch cmd completion on bash * modulecmd.tcl.in, testsuite/modules.20-locate/090-memcache.exp, testsuite/modules.50-cmds/310-puts.exp, testsuite/modules.70-maint/080-help.exp: Add details on active interp on debug msg * testsuite/modulefiles.deps/u, testsuite/modules.50-cmds/370-deps.exp: ts: no spread of broken mod dep defs to next eval mod * testsuite/modules.70-maint/070-display.exp: ts: auto/no-auto/force args are ignored on other cmd 2018-10-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles/puts/9, testsuite/modules.50-cmds/310-puts.exp, testsuite/modules.90-avail/070-full.exp: ts: check puts is linked to correct interp * testsuite/etc/rc, testsuite/modules.20-locate/060-rc.exp: ts: check 'module-info command' resolution from global rc 2018-10-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Use Tcl 'if' or 'expr' ternary operator * modulecmd.tcl.in: Correctly filter a wild findModules cache When it is used in a non-wild case later on. 2018-10-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.memcache/foo/1, testsuite/modulefiles.memcache/foo/2, testsuite/modulefiles.memcache/foo1/1, testsuite/modulefiles.memcache/foo1/2, testsuite/modulefiles.memcache/look/1, testsuite/modulefiles.memcache/look/2, testsuite/modulefiles.memcache/look/3, testsuite/modulefiles.memcache/look/4, testsuite/modulefiles.memcache/look/5, testsuite/modulefiles.memcache/look/6, testsuite/modulefiles.memcache/look/7, testsuite/modulefiles.memcache/look/8, testsuite/modulefiles.memcache/sp cial/1, testsuite/modules.20-locate/090-memcache.exp: ts: add 20/090 to test findModules cache * modulecmd.tcl.in: Adopt Tcl minimal escaping style (fix additional strs) * modulecmd.tcl.in: Remove useless msg prefix from some reportDebug calls * modulecmd.tcl.in: Brace value of default path separator on Win As ';' is elsewhere interpreted as a Tcl syntax keyword * modulecmd.tcl.in: Brace g_pager setting as it can be empty If Modules is configured with --without-pager for instance. * testsuite/modulefiles/alias/3.0, testsuite/modulefiles/function/2.0, testsuite/modules.50-cmds/076-alias-sub.exp, testsuite/modules.50-cmds/390-function.exp: ts: fix tests based on modulecmd.tcl content As 'adopt minimal escaping style' change the piece of string searched by some tests. 2018-10-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Adopt Tcl minimal escaping style See https://wiki.tcl.tk/41378 * doc/source/modulefile.rst, modulecmd.tcl.in, testsuite/modulefiles/system/2.0, testsuite/modules.50-cmds/140-system.exp, testsuite/systest1: Fix 'system' to run cmd through shell system modulefile command is intended to the command passed to it trough shell, like done on compatibility version. So update system procedure to find correct shell on the current platform and run command through it. Doing so, shell commands with backticks for instance are correctly run. Fixes #205 * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module: init: fix saved coll listing in bash/zsh/tcsh/fish completions When no collection is currently found. * init/fish_completion, init/tcsh_completion.in: init: fix loaded modules listing in tcsh/fish completions 2018-10-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../cookbook/top-priority-values/siteconfig.tcl: cookbook: port 'top-priority-values' to v4.2 * contrib/cookbook/unload-firstly-loaded/siteconfig.tcl: cookbook: port 'unload-firstly-loaded' to v4.2 * .../cookbook/inhibit-report-info/siteconfig.tcl: cookbook: add 'inhibit-report-info' recipe Helpful for #204 2018-10-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version 4.2.0 * MIGRATING.rst: doc: add cross-ref for each v4.2 new feature in MIGRATING 2018-10-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/151-module-onlytop.exp: ts: fix 50/151 for new block report style * MIGRATING.rst: doc: desc. new modfile cmds for v4.2 in MIGRATING * .travis.yml: travis: increase again git clone depth to catch last tag 2018-09-09 Ben Bowers <nanobowers@gmail.com> * doc/source/diff_v3_v4.rst, doc/source/modulefile.rst, modulecmd.tcl.in, testsuite/modulefiles/function/1.0, testsuite/modulefiles/function/2.0, testsuite/modules.50-cmds/390-function.exp, testsuite/modules.50-cmds/391-function-undo.exp, testsuite/modules.90-avail/070-full.exp: added set-function and unset-function commands fixed linelength and tabs/spaces adding set-function/unset-function documentation adding tests for set-function/unset-function fixed failing test for function modulefile additions 2018-10-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/mt: contrib: add 'mt' utility Helps to run just a specific part of the test suite * modulecmd.tcl.in, testsuite/modulefiles/system/2.0, testsuite/modules.50-cmds/140-system.exp, testsuite/systest: Fix args pass on 'system' modfile command Correctly transmit the arguments along with the command to execute. Need to use 'eval' for the underlying command to get its multiple args and not one joined string. Fixes #201 2018-10-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, testsuite/modules.50-cmds/180-unload.exp: Support 'remove' as an alias on 'unload' command As compatibility version does Fixes #200 * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, testsuite/modules.50-cmds/180-unload.exp: Support 'del' as an alias on 'unload' command Like compatibility version does. Fixes #200 2018-10-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.20-locate/057-mcookie.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/310-puts.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/359-allin-env.exp, testsuite/modules.50-cmds/360-restoreenv.exp, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/999-cleanup.exp: ts: fix tests when ts path includes spec chars 2018-10-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst: doc: desc. improved message report in MIGRATING * testsuite/modules.50-cmds/310-puts.exp: ts: fix 50/310 for block output rendering Transform load tests in non-regexp test to avoid re escaping chars to count in line split mechanism. 2018-10-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/130-auto_handling.exp, testsuite/modules.20-locate/040-alias.exp, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.20-locate/047-symerrs.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/100-loglevel.exp, testsuite/modules.50-cmds/101-badfac.exp, testsuite/modules.50-cmds/105-trace.exp, testsuite/modules.50-cmds/110-verbose.exp, testsuite/modules.50-cmds/115-verbose-msg.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp, .../modules.50-cmds/132-conflict-fullpath.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/195-load-recurs.exp, testsuite/modules.50-cmds/240-chdir.exp, testsuite/modules.50-cmds/250-x-resource.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.50-cmds/284-info-others.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.50-cmds/310-puts.exp, testsuite/modules.50-cmds/330-source.exp, testsuite/modules.50-cmds/340-modvar.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/371-deps2.exp, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/375-deps6.exp, testsuite/modules.50-cmds/376-deps7.exp, testsuite/modules.50-cmds/380-altname.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/080-access.exp, testsuite/modules.70-maint/140-multiargs.exp, testsuite/modules.70-maint/190-emptyarg.exp, testsuite/modules.80-deep/022-switch.exp: ts: adapt tests to new block report style * modulecmd.tcl.in: Set a rec msg id for reload action Create a record message id during the reload action to let underlying unload and load actions to know they are not the top-level action. May be use later on to provide sum-up information resulting from this reload action. * modulecmd.tcl.in: Set a rec msg id for purge action Create a record message id during the purge action to let underlying unload actions to know they are not the top-level action. May be use later on to provide sum-up information resulting from this purge action. 2018-10-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Report unload/load made during a module restore Report for the top level module restore all the modules that have been unloaded and loaded during this restore action. * modulecmd.tcl.in: Inhibit DepRe load phase on load if switch ongoing If a switch action is ongoing, inhibit the DepRe load phase when loading switched to module. Instead add the DepRe module list to the already gathered DepRe list from the unload action of the switched out module. * modulecmd.tcl.in: Report additional load/unload during a module switch Report for the top level module switch all the additional modules that have been automatically unloaded or loaded during this main switch. Report record is still enabled on the top unload/load actions part of switch action, but additional unload/load sumup information is recorded against switch report. This way errors popping during these main unload or load actions are reported against their relative unload/load record like if an unload or load has just occured. 2018-10-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Report additional load/unload during a module unload Report for the top level module unload all the additional modules that have been automatically unloaded or loaded during this main unload When auto handling is disabled but some extra modules have been unloaded during the unload process (due to module load commands in modulefile) then report these extra unloads as Useless Requirement Unload (UReqUn) * modulecmd.tcl.in: Report additional load/unload during a module load On a top level module load (main load action), report all the additional modules that have been unload or loaded for this main load process to succeed. Three helper procedures are added for this change: reportInfo, getDiffBetweenList and isMsgRecordIdTop. * modulecmd.tcl.in: Clear all modlist arg from getUnloadableLoadedModuleList res 2018-10-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.other/longerrword, testsuite/modules.70-maint/200-errdisp.exp: ts: add 70-maint/200-errdisp tests * modulecmd.tcl.in, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.70-maint/060-apropos.exp: Ask for a blankline prior next content with reportSeparateNextContent Update displayElementList procedure to use this new reportSeparateNextContent procedure rather handling its own global flag (g_eltlist_disp). Adapt testsuite related to displayElementList output 2018-10-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Split line if too wide in reportMsgRecord * modulecmd.tcl.in: Add procs to format conflict/prereq err msgs 2018-09-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Record messages to report them by block on load/unload Save warning, error and internal bug message produced during a cmdModuleLoad or cmdModuleUnload evaluation for a module to report all these messages as a dedicated "Loading <module>" or "Unloading <module>" block after evaluation. A recording ID is set when preparing a load or an unload evaluation. If a recording ID is found when running reportError, the message is recorded in a global structure rather reported immediately. Once evaluation is finished, all messages are rendered under a block. Improve this way readability of those messages when evaluating mode may cascade a lot of stuff. * modulecmd.tcl.in, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/376-deps7.exp, testsuite/modules.50-cmds/380-altname.exp: Neat prereq/conflict err msg when called from cmdModule procs Remove useless 'WARNING: ' prefix as message goes to reportError. * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/090-uname-proc.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.70-maint/060-apropos.exp: Report global error raised from modfile eval as error Was reported as WARNING previously which was confusing as these errors are fatal for modulefile evaluation. Use prefix code "GLOBALERR " when raising error to catch them in execute-modulefile and distinguish the global errors from the Module internal bug. As a side nice effect, these kind of evaluation error are now reported through reportError, which makes them automatically silent on global evaluation (like avail or search). Adapt testsuite * modulecmd.tcl.in: Make report{Warning,InternalBug} rely on reportError * modulecmd.tcl.in: Handle nonewline report arg as boolean Instead of a string. Remove this nonewline arg from reportDebug, reportWarning and reportError as it was unused. 2018-09-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../cookbook/unload-firstly-loaded/siteconfig.tcl: cookbook: add 'unload-firstly-loaded' recipe Helpful for #198 * doc/source/diff_v3_v4.rst: doc: desc. unload diff when multiple loaded mods match Helpful for #198 * doc/source/diff_v3_v4.rst, modulecmd.tcl.in, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.80-deep/021-unload.exp, testsuite/modules.80-deep/068-transitive.exp: Only look at loaded modules when unloading Adapt getPathToModule procedure to only look at the loaded module list when searching a module to unload. If passed module not found in this situation does not produce an "Unable to locate modulefile" issue. So unloading an unexistent modulefile does not produce an error anymore, as it was the case on compatibility version. Moreover switching from an unexistent modulefile to another modulefile does not produce the "Unable to locate modulefile" error and new module load is attempted. Compatibility version does not walk in this situation as on this version module to unload must be loaded elsewhere an error is triggered. Adapt testsuite and diff document. Fixes #199 2018-09-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst: doc: desc. module load/unload consistency in MIGRATING 2018-09-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: From warn/nuasked to onlyureq/onlyndep args on cmdModuleUnload Change warn and nuasked arguments previously added to cmdModuleUnload procedure by onlyureq and onlyndep to better cope needs. 'onlyureq' indicates only the not required anymore modules should be unloaded (not user asked modules or those not required by another loaded module). This flag is enabled when dealing with 'module load' commands in modulefiles interpreted in unload mode. If a module cannot be unloaded because it is required, then no error message is produced. So 'onlyureq' argument replaces both 'warn' and 'nuasked' arguments. 'onlyndep' indicates that only modules not required by other modules should be unloaded. It is used when dealing with 'module unload' commands in modulefiles interpreted in load mode. This is useful when force mode is enabled to avoid breaking the dependency of a loaded module when trying to load a module declaring this dependency as a module to unload (acts like for conflicts). 2018-09-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Return err if conflicts found in cmdModuleLoad When passed module cannot be loaded due to a conflict, set cmdModuleLoad to return an error code. Which may be interpreted as a sub-interpretation failure if this load was triggered by a 'module load' command in modulefile. * modulecmd.tcl.in, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.70-maint/140-multiargs.exp: Raise prereq error if 'module load' not satisfied Call prereq procedure rather just bare setLoadedPrereq when interpreting 'module load' commands found in modulefiles. When auto_handling mode is enabled, prereq will also handle the cmdModuleLoad call. This call is still done in module procedure if auto_handling is disabled. In case load is not satisfied, prereq error message will be obtained. 2018-09-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deps/m1, testsuite/modulefiles.deps/m2, testsuite/modulefiles.deps/m3, testsuite/modulefiles.deps/m4, testsuite/modulefiles.deps/m5, testsuite/modulefiles.deps/m6, testsuite/modulefiles.deps/m7, testsuite/modules.50-cmds/376-deps7.exp: ts: add tests for module load/unload & auto_handling 2018-09-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.allin/allin/1, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/375-deps6.exp: ts: adapt to modfile 'module unload' auto handling * testsuite/modules.20-locate/069-cross.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/195-load-recurs.exp, testsuite/modules.50-cmds/197-load-lots.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp: ts: adapt to modfile 'module load' auto/no-auto handling More test case adaptation to follow the new 'module load' commands handling when the auto_handling mechanisms are enabled or disabled. The tests changed here show different behavior whether auto_handling is enabled or not. Due to the fact that module unloads is not cascaded when auto_handling is enabled and UReqUn modules ares unloaded in reverse loaded order, not in the order specified within modulefile. These 2 behavior changes lead to different result: command order change, unwind process when a module to unload is erroneous, or variable resulting value when unloading modules compete over same variable to set. 2018-09-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Auto handling and 'module unload' commands in modulefile 'module unload' commands in modulefiles may impact the auto handling mode, so a few things need to be adapted: - on 'load' mode, proceed with the unload which may raise error if the module is required by another loaded module. - on 'load' mode, set a conflict toward modules to unload to ensure they will not be loaded afterward. If module has not been correctly unloaded prior the conflict definition, modulefile defining the 'module unload' command will not be loaded. - on 'unload' mode, does nothing as the defined conflict ensure environment consistency and will forbid conflicting module load. If conflicting module has been loaded, it means this situation has been forced so there is no expectation this module who defines a 'module unload' effectively unloads this module which is required by the user. 2018-09-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.20-locate/069-cross.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/195-load-recurs.exp, testsuite/modules.50-cmds/197-load-lots.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.50-cmds/340-modvar.exp, testsuite/modules.80-deep/020-load.exp: ts: adapt to modfile 'module load' auto handling * modulecmd.tcl.in: Auto handling and 'module load' commands in modulefile 'module load' commands in modulefiles may impact the auto handling mode, so a few things need to be adapted: - on a 'load' mode, register each module passed to the module load command as a prereq of evaluated modulefile. This way the dependency will correctly be tracked - on an 'unload' mode, proceed to the unload action when evaluating the 'module load' statement only if auto handling is disabled. Do nothing when evaluating the statement if auto handling is enabled, as these modules will be unloaded as part of the UReqUn mechanism. This way all unload/reload are triggered from the top unload action to ensure nothing will get in the way of the DepUn/DepRe/UReqUn processed from there. Note that on an unload mode, modules are unloaded only if no other loaded modules require them and they have not been asked by user, elsewhere no unload is made to ensure the consistency of the loaded environment (as these modules are explicitely required by user or by another loaded module) Treating these modules to unload through UReqUn mechanism leads to some behavior changes: - unload interpretation is not cascaded anymore in this case and every module to unload are processed sequentially - a consequence of the previous point is that an error happening when processing the unload of a UReqUn module, will not unwinds the whole unload process as it does when auto_handling is disabled - unload happens in the reverse loaded order, not in the order defined by the 'module load' commands in the modulefile - as a consequence of this previous point, environment change after the whole unload may be different if the unloaded modules compete over a variable to set when unloading (last module to be unloaded will not be the same) 2018-09-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add 'nuasked' arg to cmdModuleUnload proc Add a 'nuasked' argument to the cmdModuleUnload procedure to control whether or not only the non-user-asked modules should be unloaded. 2018-09-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Remove useless global var in cmdModuleUnload * modulecmd.tcl.in: Add 'warn' arg to cmdModuleUnload proc Add a 'warn' argument to the cmdModuleUnload procedure to control whether or not display the warning message when a module cannot be unloaded because it is still required by other loaded module. This argument is equal to true every time except for the interpretation of 'module load' commands in modulefile when mode is 'unload'. In this situation module unload may not be performed if module is still required but it is a normal situation like the UReqUn mechanism (only the useless modulefiles are automatically unloaded). * modulecmd.tcl.in: Avoid unloading mods from getDependentLoadedModuleList res Excludes modules currently being unloaded from the result of getDependentLoadedModuleList procedure. This situation may appear when unloading a module containing itself a "module load" commands, which is translated into a "module unload" command on unload module. When in turns this modulefile targetted by the "module load" command is unloaded, it should not found its dependent modulefile who is currently being unloaded into its dependent result list to avoid UReqUn/DepUn infinite loop. 2018-09-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: Fix uninitialized 'rows' var in displayElementList proc Add test case in 00-init/120-siteconfig to demonstrate a setup that falls in the uninitialized 'rows' pit. Fixes #195 2018-09-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, doc/source/modulefile.rst, modulecmd.tcl.in, testsuite/modulefiles/mcookie/1, testsuite/modulefiles/mcookierc/.modulerc, testsuite/modulefiles/mcookierc/1, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.20-locate/057-mcookie.exp: Check version set in modulefile magic cookie Magic cookie at the beginning of modulefiles may sometimes set a version number, for instance '#Module1.0'. Until now this version number was about a modulefile standard version. However there is no known modulefile API versioning and new modulefile commands are added along new Modules releases. So the idea here is to match this version number optionally set on magic cookie and compare it to the modulecmd.tcl release version. If modulefile sets a version number greater than modulecmd.tcl version, this modulefile is not evaluated like when no magic cookie is set at all. Add specific tests in 20-locate suite and adapt modulefile man page and MIGRATING doc. Fixes #171 2018-09-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml, INSTALL.rst, Makefile, Makefile.inc.in, configure, init/Makefile, init/bash.in, init/cmake.in, init/fish.in, init/ksh.in, init/perl.pm.in, init/python.py.in, init/r.R.in, init/ruby.rb.in, init/sh.in, init/tcl.in, init/zsh.in, modulecmd.tcl.in, site.exp.in, testsuite/install.00-init/060-quar.exp, testsuite/modules.00-init/110-quar.exp, testsuite/modules.70-maint/120-autoinit.exp: install: add --enable-quarantine-support configure opt Add the ability to control whether or not code to support quarantine mechanism should be added to the module function and initialization scripts. Enabled by default Fixes #167 2018-09-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml, INSTALL.rst, Makefile, Makefile.inc.in, configure, init/Makefile, init/bash.in, init/ksh.in, init/sh.in, init/zsh.in, modulecmd.tcl.in, site.exp.in, testsuite/install.00-init/030-options.exp, testsuite/modules.70-maint/120-autoinit.exp: install: add --enable-silent-shell-debug-support configure opt Add the ability to control whether or not code to support silent shell debug should be added to the module function and sh-kind initialization scripts. Enabled by default Fixes #166 2018-09-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash.in, init/ksh.in, init/sh.in, init/zsh.in, modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: init: split unset of shdbg and quar-related vars * .travis.yml, INSTALL.rst, configure: install: add --with-bin-search-path configure opt Get in control of the path list used to search the tools required to build and configure Modules. Default value: /usr/bin:/bin:/usr/local/bin Adapt one travis scenario to test the setup of a specific value for this configure option. Fixes #164 * MIGRATING.rst: doc: desc. alt name consistency in MIGRATING 2018-09-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_v3_v4.rst, doc/source/module.rst, doc/source/modulefile.rst: doc: desc. alt name in manpages and diff doc Also fix some typos found on the way and clarifies commands where symbolic versions and aliases where already supported. * testsuite/modules.50-cmds/350-allin.exp: ts: skip allin tests if domainname tool not there 2018-08-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/etc/modulerc.altname, testsuite/modulefiles.deps/alt/.modulerc, testsuite/modulefiles.deps/alt/1, testsuite/modulefiles.deps/alt/7, testsuite/modulefiles.deps/alt/8, testsuite/modulefiles.deps/alt/dir/.modulerc, testsuite/modulefiles.deps/alt/dir/2, testsuite/modulefiles.deps/alt/dir/3, testsuite/modulefiles.deps/alt/dir/4, testsuite/modulefiles.deps/alt/dir/5, testsuite/modulefiles.deps/alt/dir/6, testsuite/modulefiles.deps/alt2/1, testsuite/modulefiles.deps/i1, testsuite/modulefiles.deps/i2, testsuite/modulefiles.deps/i3, testsuite/modulefiles.deps/i4, testsuite/modulefiles.deps/i5/1, testsuite/modulefiles.deps/i5/2, testsuite/modules.50-cmds/380-altname.exp: ts: add alt name specific tests * modulecmd.tcl.in: Match alt names on is-loading query Look at all names resolving to loading modules for is-loading queries. * modulecmd.tcl.in, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.80-deep/010-init_ts.exp, testsuite/modules.80-deep/020-load.exp, testsuite/modules.80-deep/068-transitive.exp, testsuite/modules.80-deep/999-cleanup.exp: Mod inherits alt names of its parent directories Improve correlation especially on unload actions. A module alias set on a parent directory of a module will be added to the list of module alternative names, thus it will be matched when attempting an unload on this alias name. 2018-08-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.80-deep/068-transitive.exp: ts: adapt resolution warning test with alt name These warning messages are not displayed anymore as alternative names registered in environment are used instead of triggering a modulefile resolution through the modulepaths. * testsuite/modules.70-maint/153-is-loaded.exp, testsuite/modules.70-maint/157-info-loaded.exp: ts: adapt env consistency test results with alt name Alternative name match leads to loaded environment correlation test. So this test is now performed most of the time. 2018-08-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Check mod alt names when comparing mod to names When checking if a loaded module name matches a given string, also checks if match happens with any of the alternative names of mod. Add doesModuleMatchesName procedure to check mod main and alternative names. Then replace 'string first' tests by a call to this new procedure in conflict, getLoadedWithClosestName, getLoadedMatchingName, doesModuleConflict and setModuleDependency procedures. Register alternative names of module prior its modulefile evaluation as this information is required before any query of matching conflict (call to doesModuleConflict procedure or call to conflict procedure during modulefile evaluation). Fixes #143 2018-08-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.00-init/071-args.exp, testsuite/modules.10-use/040-load.exp, testsuite/modules.10-use/080-access.exp, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/038-defcontext.exp, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.20-locate/075-symlink.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/197-load-lots.exp, testsuite/modules.50-cmds/280-info-specified.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/080-access.exp, testsuite/modules.61-coll/999-cleanup.exp, testsuite/modules.80-deep/010-init_ts.exp, testsuite/modules.80-deep/020-load.exp, testsuite/modules.80-deep/021-unload.exp, testsuite/modules.80-deep/022-switch.exp, testsuite/modules.80-deep/068-transitive.exp, testsuite/modules.80-deep/080-access.exp, testsuite/modules.80-deep/999-cleanup.exp: ts: adapt existing tests to MODULES_LMALTNAME 2018-08-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Register loaded module alt names in MODULES_LMALTNAME A module may have alternate names resulting from the module alias or symbolic version set through the resolution of its modulefile. Here we start to keep track of these alternative names for every loaded modules by using an environment variable: MODULES_LMALTNAME. It follows the same tracking principle than used for keeping track of conflicts or prereqs between modules. Helper procedures are introduced to get/set module alternative names. Right after loading modulefile, its alternative names are retrieved from the ::g_resolvedHash resolving array and set to the g_loadedModuleAltname array wich is then used to get and set alternative names value without dependency to the alias/symbol global resolving process. * MIGRATING.rst: doc: cite Flavours for AMHM in MIGRATING doc * MIGRATING.rst, doc/source/module.rst: doc: add DepUn + clarify UReqUn,DepRe Especially regarding the inter-dependencies between these mechanisms and the specificities of the switch sub-command. 2018-08-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, doc/source/module.rst, modulecmd.tcl.in, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/375-deps6.exp: Brand auto handling mechanisms * Requirement Load (ReqLo) * Dependent Reload (DepRe) * Useless Requirement Unload (UReqUn) * Dependent Unload (DepUn) Mention these mechanism titles in MIGRATION and module man page documentations. Reword code and tests that where previously using the DU/DR/URU short names. 2018-08-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/FAQ.rst, doc/source/conf.py: doc: mention createmodule.{sh,py} scripts in FAQ Fixes #189 * modulecmd.tcl.in: No prereq violation set for dependent on getDependentLoadedModuleList Modules strongly requiring mods where previously set in prereq violation state as mod where unloaded. Remove that since these modules requiring mod during an unload (the DU modules) are now part of the list of modules passed as argument to getDependentLoadedModuleList. So this part of the code will not be run anymore. * modulecmd.tcl.in: Move remaining 'lsearch -exact == -1' to notInList 2018-08-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/375-deps6.exp: No prereq violation warn msg for DR mech or purge During a purge or the unload phase of the DR mechanism do not warn about the unload process violating a prereq constraint. In these situation, violation is due to the dependent module not being able to also unload or to unload prior its requirement. All of this because this dependent module is its in a violation state. * testsuite/modules.50-cmds/374-deps5.exp: ts: add DU/DR/URU tests on switch action 2018-08-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: No getPathToModule call in cmdModuleSwitch Simplify code of cmdModuleSwitch which now relies more on cmdModuleUnload. There is no more need to resolve module to unload within cmdModuleSwitch as it is perfectly handled with its related modules to unload within cmdModuleUnload. * modulecmd.tcl.in: Rely on cmdModuleUnload DU/URU/DR during switch Rely on the DU/URU mechanisms of cmdModuleUnload during a switch action and also the unload part of the DR mechanism. cmdModuleUnload transmit the DR module list to cmdModuleSwitch for this procedure to be able to handle the reload phase of the DR mechanism once the newly switched-to module is loaded. This change makes useless the being_reload argument of the getDependentLoadedModuleList procedure, as module candidates are now found when looking for DU modules in cmdModuleSwitch. being_reload argument is thus removed from getDependentLoadedModuleList proc. 2018-08-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deps/h50, testsuite/modulefiles.deps/h51, testsuite/modulefiles.deps/h52, testsuite/modulefiles.deps/h53, testsuite/modulefiles.deps/h54, testsuite/modulefiles.deps/h55, testsuite/modulefiles.deps/h56, testsuite/modulefiles.deps/h57, testsuite/modulefiles.deps/h58, testsuite/modulefiles.deps/h60, testsuite/modulefiles.deps/h61, testsuite/modulefiles.deps/h62, testsuite/modulefiles.deps/h63, testsuite/modulefiles.deps/h64, testsuite/modulefiles.deps/h65, testsuite/modulefiles.deps/h66, testsuite/modulefiles.deps/h67, testsuite/modulefiles.deps/h68, testsuite/modulefiles.deps/h69, testsuite/modulefiles.deps/h70, testsuite/modulefiles.deps/h71, testsuite/modulefiles.deps/h72, testsuite/modulefiles.deps/h73, testsuite/modulefiles.deps/h74, testsuite/modules.50-cmds/373-deps4.exp: ts: add new tests DU mechanism-specific 2018-08-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/375-deps6.exp: Introduce "Dependent Unload" (DU) mechanism Add the ability when auto handling is enabled to unload modules requiring the module asked for unload rather shouting an error. Dependent Unload (DU) mechanism builds list of all modules actively requiring (not optionaly requiring it) the module set for unload or actively requiring modules part of this DU batch. These DU modules are then unloaded prior main module unload, not to be there anymore once module asked for unload is in turn unloaded. These DU modules also contributes to determine the list of Useless Requirement Unload (URU) modules. As unloading the DU modules may also add new URU modules. These DU modules also contributes to determine the list of Dependent Reload (DR) modules. As unloading the DU modules may also add new DR modules. Take this opportunity to clarify comments around Dependent Reload (DR) and Useless Requirement Unload (URU) mechanisms in cmdModuleUnload procedure. Update "deps" test expectations now the DU mechanism is in place. * modulecmd.tcl.in: Pass a module list to getUnloadableLoadedModuleList Like for getDependentLoadedModuleList procedure makes getUnloadableLoadedModuleList able to process a module list passed as argument. 2018-08-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Compute 'drmodlist' only if auto enabled in cmdModuleLoad * modulecmd.tcl.in: Rename 'depmod' in 'drmodlist' in cmdModule{Load,Unload} Rename local variable 'depmod' into 'drmodlist' (dependent reload module list) for clarification. * modulecmd.tcl.in: Treat list of elt in appendNoDupToList Adapt appendNoDupToList to treat list of elements rather just a single element * modulecmd.tcl.in: Work over 1 list in getDependentLoadedModuleList Only use 'fulllist' as 'testlist' could be merged into 'fulllist'. * modulecmd.tcl.in: Work over 1 list in getUnloadableLoadedModuleList Only use 'fulllist' as 'unmodlist' could be deduced from it in the end. * modulecmd.tcl.in: Add appendNoDupToList helper proc Add procedure to append to a list an element if this element is not already part of this list * modulecmd.tcl.in: Add isInList/notInList helper procs Introduce two helper procedures to check existence of an element in a list: isInList and notInList. When this script compatibility will moved from Tcl>=8.4 to Tcl>=8.5, will change these helper procs in 'in' and 'ni'. * modulecmd.tcl.in: Add getDirectDependentList helper procedure Add a getDirectDependentList procedure in charge of querying ::g_dependHash array to return list of dependent modules, stronly or weakly attached to passed mod. 2018-08-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles.deps/h30, testsuite/modulefiles.deps/h31, testsuite/modulefiles.deps/h32, testsuite/modulefiles.deps/h33, testsuite/modulefiles.deps/h34, testsuite/modulefiles.deps/h35, testsuite/modulefiles.deps/h36, testsuite/modulefiles.deps/h37, testsuite/modulefiles.deps/h38, testsuite/modulefiles.deps/h39, testsuite/modulefiles.deps/h40, testsuite/modules.50-cmds/373-deps4.exp: Pass a module list to getDependentLoadedModuleList Adapt getDependentLoadedModuleList procedure to get a module list as argument rather a single module name. Helps to get in one call all the dependent modules of those passed as argument. Also improve correctness as sometimes multiple modules may violate constraint of another one. To get this module freed, all conflicting modules may set unloaded. So if all of these conflicting modules are passed as argument to getDependentLoadedModuleList, the dependent module will be seen freed and will be part of the procedure result list. 2018-08-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles.deps/h10, testsuite/modulefiles.deps/h11, testsuite/modulefiles.deps/h12, testsuite/modulefiles.deps/h20, testsuite/modulefiles.deps/h21, testsuite/modulefiles.deps/h22, testsuite/modulefiles.deps/h23, testsuite/modulefiles.deps/h24, testsuite/modulefiles.deps/h25, testsuite/modules.50-cmds/373-deps4.exp: Trigger full useless prereqs unload from main unload Call from the main unload action the automatic unload of prereq modules that became useless due to main module unload. To achieve that, getUnloadableLoadedModuleList procedure now returns to the tree of unloadable modules. Then cmdModuleUnload calls over this unloadable module list is made in a --no-auto mode not to deviate from what was computed before unload/load processing. * modulecmd.tcl.in, testsuite/modulefiles.deps/h1, testsuite/modulefiles.deps/h2, testsuite/modulefiles.deps/h3, testsuite/modulefiles.deps/h4, testsuite/modules.50-cmds/373-deps4.exp: Compute list of unloadable required modules prior unload When unloading a module, its requirements that have been automatically loaded and are not required by any other module will automatically be unloaded when their dependent module is unloaded. Compute the list of these unloadable required modules prior to the unload of their dependent module, not to be confused by currently being reloaded dependent module that may hold a requirement on these potentially unloadable modules. Merge getRequiredLoadedModuleList procedure into getUnloadableLoadedModuleList that now takes the name of the module being unloaded as argument. Call getUnloadableLoadedModuleList prior any module change so determine that a required module will be useless after module unload if this required module has only one dependent (module currently being unloaded) * modulecmd.tcl.in: Add 'direct' arg to getDependentLoadedModuleList proc Split meaning of 'strong' argument into a new argument named 'direct'. Now strong means active dependency (not an optional one). And direct means only first-level dependent, when equals to 0 it means the full dependency tree should be returned. 2018-08-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/373-deps4.exp: Ensure --no-auto mode on load phase of dependent reload Ensure dependent modules reload do not deviate from previously loaded list. Like already done during a "switch" action. Here now also applies to "load" and "unload" actions. * modulecmd.tcl.in, testsuite/modulefiles.deps/g1, testsuite/modulefiles.deps/g2, testsuite/modulefiles.deps/g3, testsuite/modulefiles.deps/g4, testsuite/modulefiles.deps/g5, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/375-deps6.exp: Split dependent reload process around main action When reloading dependent module during a module load or a module unload, split this reload process into an unload phase, prior main action, than a load phase after main action. Performing this way helps dependent module to get refreshed accurately with an unload phase in same situation than their last load. Then load phase of the reload process will be able to correctly adapt with new dependency loaded or unloaded. Proceeding this way enables modulefiles to adapt their variable definitions based on their loaded requirements. However when prereq or conflict violation constraint appear, unload stage of a dependent module may not correctly unset variable as described in nonreg tests. 2018-08-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add reloadModuleList{Unload,Load}Phase procs Split module reload process into 2 procedures: reloadModuleListUnloadPhase that unloads module list and reloadModuleListLoadPhase that load it again after. Adapt cmdModuleReload and cmdModuleSwitch to take advantage of these new procedures. 2018-08-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Handle uasked flag on cmdModuleSwitch proc Add a 'uasked' argument to the cmdModuleSwitch procedure to determine if the module to load during the switch action is asked by user (called on the command line or in a first level sourced file) or not. 2018-08-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * README.md: doc: fix cea-hpc/modules appveyor weblink 2018-08-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/rpm/environment-modules.spec.in: rpm: add gcc in build requirements for compat version Reference: https://fedoraproject.org/wiki/Changes/Remove_GCC_from_BuildRoot 2018-08-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version 4.1.4 * doc/source/modulefile.rst, modulecmd.tcl.in, testsuite/modulefiles.deep/badmodvers/.version, testsuite/modulefiles.deep/badmodvers/dir1/2.0, testsuite/modulefiles.deep/badmodvers/foo, testsuite/modules.80-deep/010-init_ts.exp, testsuite/modules.80-deep/020-load.exp, testsuite/modules.80-deep/021-unload.exp, testsuite/modules.80-deep/030-display.exp, testsuite/modules.80-deep/050-whatis.exp, testsuite/modules.80-deep/999-cleanup.exp, testsuite/modules.90-avail/070-full.exp: ModulesVersion can only refer to modfile in same dir Clarify modulefile man page and .version modulerc interpretation about ModulesVersion variable which can only refer to modulefile located in the same directory than where this .version modulerc file is located. Report error if a nested ModulesVersion value is detected. This value is ignored. Add tests in 80-deep suite on that change. Clarifies RH#979787 [1] Fixes #176 [1] https://bugzilla.redhat.com/show_bug.cgi?id=979787 2018-08-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../cookbook/top-priority-values/modulefiles/bar/1, .../cookbook/top-priority-values/modulefiles/foo/1, .../cookbook/top-priority-values/siteconfig.tcl: cookbook: add 'top-priority-values' recipe 2018-08-16 Jan Synacek <jsynacek@redhat.com> * contrib/scripts/createmodule.py: contrib: createmodule.py: fix typo * contrib/scripts/createmodule.py: contrib: createmodule.py: open pipes in text mode Otherwise, pipes are opened in binary mode and there are type errors further down the code. * contrib/scripts/createmodule.py: contrib: createmodule.py: fix tab indentation 2018-08-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * README.md: doc: add appveyor build badge in README * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Fix exec() usage in module func on Python3 Need to pass a variable namespace to exec() function to get the value of the '_mlstatus' variable generated by modulecmd. This change enables to return correct status on Python3, as exec() function behaves differently between Python2 and 3 [1]. [1] https:// stackoverflow.com/questions/15086040/behavior-of-exec-function-in-python-2-a nd-python-3 * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.20-locate/081-access-rc.exp, testsuite/modules.60-initx/080-access.exp, testsuite/modules.61-coll/080-access.exp, testsuite/modules.80-deep/080-access.exp: ts: skip 08?-access tests if locked dir/file are still readable * testsuite/modules.10-use/080-access.exp: ts: skip tests in 10/080 when file readable in locked dir * contrib/gitlog2changelog.py: Fix gitlog2changelog.py script for python3 * testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/050-crossshell.exp: ts: sh and ksh shells on MSYS2 behaves like on CYGWIN 2018-08-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.61-coll/020-savelist.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.90-avail/070-full.exp: ts: skip tty cols nb test if cols nb cannot be changed * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/090-uname-proc.exp, testsuite/modules.50-cmds/099-uname-cleanup.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.70-maint/060-apropos.exp: ts: adapt expected results when 'domainname' not avail On MSYS2, domainname is not available, which produces error message on 'uname/domain' modulefile. This message shows up on every 'module search' queries. Here all impacted test cases are updated to expect this error message on all module search queries. * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.20-locate/075-symlink.exp, testsuite/modules.70-maint/130-aliases.exp: ts: skip mod symlink tests if no fs support 2018-08-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .appveyor.yml: Introduce AppVeyor config file for Windows CI * configure: install: look for 'make' on MSYS2 2018-08-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml: travis: help compat configure to locate tclConfig.sh on osx * testsuite/modulefiles.deps/dh, testsuite/modulefiles.deps/ea, testsuite/modulefiles.deps/eb, testsuite/modulefiles.deps/ec, testsuite/modulefiles.deps/ed, testsuite/modulefiles.deps/ee, testsuite/modulefiles.deps/ef, testsuite/modulefiles.deps/eg, testsuite/modules.50-cmds/374-deps5.exp: ts: add complex deps tests on switch command 2018-08-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/373-deps4.exp: ts: add more missing prereq tests in 50/373 * testsuite/modules.50-cmds/130-conflict-full.exp: ts: --{no-,}auto switch tests on conflict situations 2018-07-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp: ts: --{no-,}auto switch tests on prereq situations 2018-08-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: No auto_handling when reloading dependent during a switch Disable auto handling mode during a switch command when reloading the modules dependent on "old" after "new" being loaded. Proceed this way to avoid unsatisfied requirements, now "old" is unloaded to be solved automatically against user will. As a result, some of the dependent modules may not be reloaded if "new" module does not satisfy their constraint. 2018-07-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/375-deps6.exp: Reload dependent and not conflicting anymore on switch When switching a module by another, add to the list of module to reload, those modules dependent of unloaded module and those modules that were in conflict with unloaded module that can take advantage of this unload to be reloaded. 2018-07-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deps/mv, testsuite/modules.50-cmds/375-deps6.exp: ts: warning when --force used in modulefile 2018-07-31 Colin Marquardt <github@marquardt-home.de> * modulecmd.tcl.in: Ignore dirs .SYNC/ (DesignSync) and .sos/ (SOS). 2018-07-28 Colin Marquardt <github@marquardt-home.de> * doc/source/FAQ.rst: Fix small typo. 2018-07-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst: doc: desc. conflict& prereq consistency/auto/force in MIGRATING 2018-07-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst: doc: desc. env var change in MIGRATING * doc/source/diff_v3_v4.rst: doc: desc. conflict& prereq consistency/auto/force in diff 2018-07-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst, doc/source/modulefile.rst: doc: desc. --force in module.1 2018-07-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst, doc/source/modulefile.rst: doc: desc. --auto/--no-auto/MODULES_AUTO_HANDLING in module.1 2018-07-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/130-conflict-full.exp: ts: --force over unsatisfied conflict when --no-auto * testsuite/modules.50-cmds/120-prereq-full.exp: ts: --force over unsatisfied prereq when --no-auto 2018-07-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.61-coll/030-save.exp: ts: check saving collection when constraint not satisfied 2018-07-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/375-deps6.exp: ts: add reload tests to 50-cmds/375-deps6 * modulecmd.tcl.in: No reload of all loaded mods if constraints are violated * testsuite/modules.50-cmds/375-deps6.exp: ts: add purge tests to 50-cmds/375-deps6 * modulecmd.tcl.in: Reload dependent if auto=1 on cmdModuleUnload Makes 'auto' argument of cmdModuleUnload procedure also control the reload of all dependent modules once passed mod has been unloaded. 'auto' argument was already controlling the automatic unload or modules required by passed mod to unload if these required modules have been loaded without being asked by users. As a consequence the unloading phase of a purge or reload command or event the unload phase of the dependent modules of a switch command do not attempt to reload the dependent modules. (as these dependent modules will be handled through the same unload phase). 2018-07-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deps/f1, testsuite/modulefiles.deps/f10, testsuite/modulefiles.deps/f11, testsuite/modulefiles.deps/f12, testsuite/modulefiles.deps/f13, testsuite/modulefiles.deps/f14, testsuite/modulefiles.deps/f15, testsuite/modulefiles.deps/f16, testsuite/modulefiles.deps/f17, testsuite/modulefiles.deps/f18, testsuite/modulefiles.deps/f19, testsuite/modulefiles.deps/f2, testsuite/modulefiles.deps/f20, testsuite/modulefiles.deps/f21, testsuite/modulefiles.deps/f22/1, testsuite/modulefiles.deps/f22/2, testsuite/modulefiles.deps/f23, testsuite/modulefiles.deps/f24, testsuite/modulefiles.deps/f25, testsuite/modulefiles.deps/f26, testsuite/modulefiles.deps/f27, testsuite/modulefiles.deps/f28, testsuite/modulefiles.deps/f29, testsuite/modulefiles.deps/f3, testsuite/modulefiles.deps/f4, testsuite/modulefiles.deps/f5, testsuite/modulefiles.deps/f6, testsuite/modulefiles.deps/f7, testsuite/modulefiles.deps/f8, testsuite/modulefiles.deps/f9, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/375-deps6.exp: ts: add deps tests when constraints are violated * modulecmd.tcl.in: Take disapearing prereq in account on getDependentLoadedModuleList When 'being_unload' argument is set, which means passed mod is currently being unloaded, exclude from result list the loaded modules requiring passed mod. As this module is being unloaded, these dependend modules are entering in a violation state, so they cannot be reloaded. This is achieved by temporarily defining the dependent modules in prereq violation state, for the time of the getDependentLoadedModuleList procedure execution. 2018-07-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Change sortPerModuleLoadedOrder into sortModulePerLoadedAndDepOrder Rename sortPerModuleLoadedOrder proc into sortModulePerLoadedAndDepOrder. Sort is now refined to take dependencies into account: a dependent module should be placed prior the loaded module requiring it. This refinement is made to avoid reloading multiple times the same loaded module when dependent module is set after module requiring it in list. 2018-07-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add 'being_unload' arg to getDependentLoadedModuleList Indicate to getDependentLoadedModuleList procedure that targeting module is being unloaded. In this case the procedure will return loaded modules conflicting with passed mod and the dependent modules of these conflicting module. These loaded modules are added to the dependent loaded module list since passed mod is being unloaded, they can be reloaded now the conflict violation is fixed. This reload garanties the modules previously in conflict are now correctly loaded and in an expected loaded order. 2018-07-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Introduce a 'force' arg to cmdModuleUnload Add the ability to by-pass requiring modules check when unloading a module with an argument on the cmdModuleUnload procedure. This new 'force' argument is enabled when reloading modules as the requirement by-pass will immediately be fixed once the required modules are loaded again. Happens when reloading dependent modules on load, unload and switch actions. Some of the dependent modules may be excluded from reloading module list as they are in a prereq/conflict violation state so the remaining modules to reload may face some requiring modules still loaded, thus their reload need to be forced. Also enabled when purging loaded modules as all modules should be unloaded even if some violations make unloading prereqs before the module requiring them. * modulecmd.tcl.in: Rename 'autounload' cmdModuleUnload arg into 'auto' 2018-06-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: No collection save if mod constraints unsatisfied Raise error on a save sub-command is some module constraint is not satisfied. * modulecmd.tcl.in: Update getDependentLoadedModuleList to return sane deps Add a sat_constraint argument to getDependentLoadedModuleList procedure to ask for dependent loaded modules whose constraints are satisfied. This argument is enabled when reloading dependent modules in load, unload and switch actions. A areModuleConstraintsSatisfied procedure is introduced and getDependentLoadedModuleList relies on it to determine if a given loaded module has its constraints (prereq and conflict) satisfied as well as all loaded modules whose given loaded module depends on. When no module name is passed to areModuleConstraintsSatisfied, this procedure returns if all loaded module satisfy their loading constraints. 2018-06-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Track loaded mod violating their prereq/conflict def Update setModuleDependency and unsetModuleDependency procedures to register/unregister in a ::g_prereqViolation array loaded modules violating their prereq definition (means they have been loaded in force mode or their prereq was unloaded in force mode). Proceed in a similar way for conflicts with a ::g_conflictViolation array, still in setModuleDependency and unsetModuleDependency procedures. For prereq violation, updates of dependent loaded module eventual violation is obtained by the re-compute of the dependency chain performed in setModuleDependency and unsetModuleDependency. For conflict violation, updates of violation state is done for loaded modules conflicting with module processed by setModuleDependency or unsetModuleDependency. To achieve that list of conflicting-with loaded modules is set in ::g_conflictViolation array. This array is handled by setModuleConflictViolation and unsetModuleConflictViolation procedures. doesModuleConflict procedure is updated on the way to skip from its result eventual own reflexive conflict, as this procedure is now called once mod is effectively loaded and not anymore prior mod load (as when it is called from cmdModuleLoad). Also check conflicting modules declared by current module are loaded or not. 2018-06-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash_completion.in, init/tcsh_completion.in, modulecmd.tcl.in, testsuite/modules.00-init/090-switches.exp: By-pass conflict/prereq issue with -f/--force cmd-line switches Add -f/--force command-line switches to by-pass dependency consistency in case of * load of a module conflicting with another loaded module * load of a module where its declared requirements cannot be loaded * unload of a module required by other loaded module These options are only useful for the load, unload and switch module sub-commands. When a dependency is actually by-passed, still produce a warning message to help user learn that something has effectively been forced. Warning messages will be improved later-on to let user better understand what happens Update shell completion scripts. 2018-06-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/example/siteconfig.tcl-1, testsuite/modules.50-cmds/130-conflict-full.exp: Remove g_force with path ref counting meaning As a consequence a loaded module cannot be loaded a second time in force mode. So the check of this situation in conflict procedure is not useful anymore as the TESTSUITE_ENABLE_SITECONFIG_DEBUG non-regression test. * modulecmd.tcl.in, testsuite/modulefiles.deps/mu, testsuite/modules.50-cmds/372-deps3.exp: Ignore --auto/--no-auto opt when called from modulefile 2018-06-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst: doc: desc. MODULES_LM{CONFLICT,NOTUASKED,PREREQ} in module.1 2018-06-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in: init: add pager opts in shell completion scripts * testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/371-deps2.exp, testsuite/modules.50-cmds/373-deps4.exp: ts: always test auto handling in 50-cmds Adapt tests relying on an enabled auto_handling mode in 50-cmds suite to set in any cases MODULES_AUTO_HANDLING environment variable to perform the tests whatever the auto_handling mode set at configure time. Also update prereq tests in 50-cmds/12* to check behaviors when auto_handling is disabled and when it is enabled. * init/bash_completion.in, init/tcsh_completion.in, modulecmd.tcl.in, testsuite/modules.00-init/130-auto_handling.exp: Add --auto/--no-auto command-line switches Add the ability to control from the command-line whether the auto_hanling mode should be enabled or disabled. Command-line option override auto_handling enablement value set with MODULES_AUTO_HANDLING environment variable or set at configure time. Update tests and shell completion scripts. * modulecmd.tcl.in, testsuite/modules.00-init/130-auto_handling.exp: Introduce MODULES_AUTO_HANDLING Add the ability to control whether the auto_handling mode should be enabled or disabled with an environment variable: MODULES_AUTO_HANDLING. When set to 0 or 1, this environment variable overrides value set for auto_handling mode at configure time. 2018-06-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deps/da, testsuite/modulefiles.deps/db, testsuite/modulefiles.deps/dc, testsuite/modulefiles.deps/dd, testsuite/modulefiles.deps/de, testsuite/modulefiles.deps/df, testsuite/modulefiles.deps/dg, testsuite/modules.50-cmds/373-deps4.exp: ts: add broken prereq in list tests * testsuite/home/coll10, testsuite/home/coll9, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/999-cleanup.exp: ts: add coll tests for --notuasked flag 2018-06-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deps/ca, testsuite/modulefiles.deps/cb, testsuite/modulefiles.deps/cc, testsuite/modulefiles.deps/cd, testsuite/modulefiles.deps/ce, testsuite/modulefiles.deps/cf, testsuite/modulefiles.deps/cg, testsuite/modules.50-cmds/373-deps4.exp: ts: add dependent module handling checks * testsuite/modulefiles.deps/ms, testsuite/modulefiles.deps/mt, testsuite/modulefiles.deps/s, testsuite/modulefiles.deps/t, testsuite/modules.50-cmds/372-deps3.exp: ts: add prereq/conflict consistency checks 2018-06-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/372-deps3.exp: ts: add tests for is-loading conflict check Introduce 372-deps3 tests to check dependency consistency whatever the auto_handling state. 2018-06-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Rework is-loading to get closer to is-loaded handling Rework is-loading procedure to call getLoadedMatchingName procedure like is-loaded. Adapt getLoadedMatchingName to work on loading modules rather loaded modules. To achieve that, isModulefileLoading, getModuleFromLoadingModulefile, getLoadingModuleFileList and getLoadingModuleList procedures are introduced to be called instead of their 'loaded' counterpart when getLoadedMatchingName is called to look at loading modules. Remove is-loading procedure from aliases set for modulefile interpreter as there is no current need to acces such kind of procedure during a modulefile evaluation context. 2018-06-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Check unloading mod prereq violation whatever auto_handling state Ensure unloading module does not violate a registered prereq set by an already loaded module whatever the auto_handling state as it does not relate to an automatic handling mechanism. * modulecmd.tcl.in: Check loading mod conflict violation whatever auto_handling state Ensure loading module does not violate a registered conflict set by an already loaded module whatever the auto_handling state as it does not relate to an automatic handling mechanism. * modulecmd.tcl.in: Raise is-loading conflict error whatever auto_handling state Ensure conflict statement is satisfied even against modules currently being loaded. This error raise is not related to an automatic handling mechanism so it is triggered whatever the auto_handling state. 2018-06-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Loads from a top source cmd are considered user asked If module load orders are made from a 'module source' or during the source of an autoinit commands, consider these 'module load' orders found during evaluation as user asked orders. 2018-06-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/006-procs.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.00-init/071-args.exp, testsuite/modules.10-use/040-load.exp, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/035-defname.exp, testsuite/modules.20-locate/038-defcontext.exp, testsuite/modules.20-locate/040-alias.exp, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.20-locate/046-getsym.exp, testsuite/modules.20-locate/047-symerrs.exp, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.20-locate/075-symlink.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/020-setenv.exp, testsuite/modules.50-cmds/022-setenv-eschars.exp, testsuite/modules.50-cmds/025-setenv-undo.exp, testsuite/modules.50-cmds/028-setenv-refcount.exp, testsuite/modules.50-cmds/029-setenv-env.exp, testsuite/modules.50-cmds/030-unsetenv.exp, testsuite/modules.50-cmds/035-unsetenv-undo.exp, testsuite/modules.50-cmds/036-unsetenv-x.exp, .../modules.50-cmds/038-unsetenv-refcount.exp, testsuite/modules.50-cmds/039-unsetenv-env.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/049-append-env.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/059-prepend-env.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/069-remove-env.exp, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/076-alias-sub.exp, testsuite/modules.50-cmds/077-alias-undo.exp, testsuite/modules.50-cmds/078-refresh.exp, testsuite/modules.50-cmds/080-info-name.exp, testsuite/modules.50-cmds/081-info-user.exp, testsuite/modules.50-cmds/082-info-user-exp.exp, testsuite/modules.50-cmds/083-info-mode.exp, testsuite/modules.50-cmds/084-info-mode-exp.exp, testsuite/modules.50-cmds/085-info-flags.exp, testsuite/modules.50-cmds/086-info-shells.exp, testsuite/modules.50-cmds/087-info-shells-exp.exp, testsuite/modules.50-cmds/088-info-isloaded.exp, testsuite/modules.50-cmds/089-info-type.exp, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/100-loglevel.exp, testsuite/modules.50-cmds/101-badfac.exp, testsuite/modules.50-cmds/105-trace.exp, testsuite/modules.50-cmds/110-verbose.exp, testsuite/modules.50-cmds/115-verbose-msg.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp, .../modules.50-cmds/132-conflict-fullpath.exp, testsuite/modules.50-cmds/140-system.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/172-swap-app-delim.exp, testsuite/modules.50-cmds/173-swap-app-delim.exp, testsuite/modules.50-cmds/175-swap2.exp, testsuite/modules.50-cmds/177-swap-prep-delim.exp, testsuite/modules.50-cmds/178-swap-prep-delim.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/195-load-recurs.exp, testsuite/modules.50-cmds/197-load-lots.exp, testsuite/modules.50-cmds/200-break.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/220-continue.exp, testsuite/modules.50-cmds/230-loop.exp, testsuite/modules.50-cmds/240-chdir.exp, testsuite/modules.50-cmds/250-x-resource.exp, testsuite/modules.50-cmds/260-getenv.exp, testsuite/modules.50-cmds/269-getenv-env.exp, testsuite/modules.50-cmds/280-info-specified.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.50-cmds/285-info-loaded.exp, testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.50-cmds/301-interp-command.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.50-cmds/310-puts.exp, testsuite/modules.50-cmds/320-is-saved.exp, testsuite/modules.50-cmds/321-is-used.exp, testsuite/modules.50-cmds/322-is-avail.exp, testsuite/modules.50-cmds/330-source.exp, testsuite/modules.50-cmds/340-modvar.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/359-allin-env.exp, testsuite/modules.50-cmds/360-restoreenv.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/371-deps2.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/080-access.exp, testsuite/modules.70-maint/020-update.exp, testsuite/modules.70-maint/030-purge.exp, testsuite/modules.70-maint/050-whatis-load.exp, testsuite/modules.70-maint/140-multiargs.exp, testsuite/modules.70-maint/180-reload.exp, testsuite/modules.70-maint/190-emptyarg.exp, testsuite/modules.80-deep/020-load.exp, testsuite/modules.80-deep/021-unload.exp, testsuite/modules.80-deep/022-switch.exp, testsuite/modules.80-deep/068-transitive.exp, testsuite/modules.80-deep/080-access.exp, testsuite/modules.91-sort/040-load.exp, testsuite/modules.95-version/020-load.exp, testsuite/modules.95-version/020-unload.exp, testsuite/modules.95-version/022-load2.exp, testsuite/modules.95-version/022-unload2.exp, testsuite/modules.95-version/040-xgetenv.exp: Record not user asked mod rather user asked For better and simpler compatibility with previous modulecmd version and also for using same approach for both loaded environment and saved collections, track in the user environment the loaded modules that have not been asked by user (modules that have been automatically loaded as dependency of another loaded module) instead of tracking those loaded modules directly asked by user. As a consequence MODULES_LMUASKED is transformed in MODULES_LMNOTUASKED and modulecmd.tcl code is adapted to determine the 'user asked' state from this negated record. Adapt the whole testsuite consequently. 2018-06-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Rely on isModuleUserAsked rather getLoadedModuleUserAskedList Use isModuleUserAsked procedure rather checking list result returned by getLoadedModuleUserAskedList procedure to determine a loaded module has been asked by user. * modulecmd.tcl.in: Replace reloadDepLoadedModuleList by cmdModuleReload Drop reloadDepLoadedModuleList procedure to make use of cmdModuleReload in cmdModuleLoad and cmdModuleUnload to reload dependent modules. Adapt cmdModuleReload procedure to pass it a module list. If no list provided, proc falls back to the full currently loaded module list. * modulecmd.tcl.in: Unload/load dep mod one by one in cmdModuleSwitch Like for reload command, change cmdModuleSwitch to unload then reload dependent module list one by one rather unloading/loading user asked modules only and rely on the dependency mechanism. Doing so, the loaded module list that need to be reloaded is kept as it is exactly reloaded one by one. * modulecmd.tcl.in, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/197-load-lots.exp, testsuite/modules.50-cmds/340-modvar.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/371-deps2.exp: Unload/load dep mod one by one in reloadDepLoadedModuleList Like for reload command, change reloadDepLoadedModuleList to unload then reload dependent module list one by one rather unloading/loading user asked modules only and rely on the dependency mechanism. Doing so, the loaded module list that need to be reloaded is kept as it is exactly reloaded one by one. No more need to mark currently loaded module as 'user asked' to avoid it to be reloaded during reloadDepLoadedModuleList, since we now proceed one by one. Remove setModuleUserAsked and unsetModuleUserAsked procedures now they are useless. 2018-06-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: No auto unload/load on restore/purge/reload Call cmdModuleUnload with autounload of leaf dependencies disabled when performing a restore, purge or reload command. So it gets same unload behavior (processing each module one by one in specified order) whatever the auto_handling state. Then reload module one by one on restore and reload commands whatever the auto_handling state to follow the same principle. * modulecmd.tcl.in: Add autounload arg to cmdModuleUnload Control the automatic unload attempt of leaf requirements, once mod has been unloaded, with an 'autounload' argument on cmdModuleUnload proc. * testsuite/modulefiles.deps/aa, testsuite/modulefiles.deps/ab, testsuite/modulefiles.deps/ac, testsuite/modulefiles.deps/ad, testsuite/modulefiles.deps/ae, testsuite/modulefiles.deps/af, testsuite/modulefiles.deps/ag, testsuite/modulefiles.deps/ah, testsuite/modulefiles.deps/ai, testsuite/modulefiles.deps/aj, testsuite/modulefiles.deps/ak, testsuite/modulefiles.deps/bf, testsuite/modulefiles.deps/bi, testsuite/modulefiles.deps/bj, testsuite/modulefiles.deps/bk, testsuite/modules.50-cmds/371-deps2.exp: ts: add 50-cmds/371-deps2 tests 2018-06-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add sortPerModuleLoadedOrder proc Add sortPerModuleLoadedOrder procedure to sort passed module list following the module loaded order. * modulecmd.tcl.in: Rework code to get unload autoloaded mods when no more req Add getRequiredLoadedModuleList proc to return all loaded modules in the requirement list of passed mod. This proc is called once mod has been unloaded, prior to the deletion of these requirement info in cmdModuleUnload. Add getUnloadableLoadedModuleList proc, to return the modules that have been automatically loaded and could now be automatically unloaded, as no more modules requires them (mandatory or optionaly). This proc takes the result of getRequiredLoadedModuleList as input. 2018-06-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Gets dep modules with getDependentLoadedModuleList proc Introduce the 'getDependentLoadedModuleList' procedure to retrieve the currently loaded modules that require the mod passed as argument. By default only strong dependencies are returned (loaded modules directly depending on passed mod and not having an alternative module loaded to satisfy their prereq). When non-strong dependencies are asked, 'depended by' dependencies are searched recursively to return all loaded modules linked to passed module. This new 'getDependentLoadedModuleList' procedure relies on the global arrays managed by setModuleDependency procedure. It replaces both getDepLoadedModuleList and getActiveDepLoadedModuleList procedures. 2018-05-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Move deps-related procs near similar oth procs * modulecmd.tcl.in: Build and maintain dep chain between loaded mod Introduce setModuleDependency and unsetModuleDependency procedures to build and maintain global arrays representing the dependency chain between loaded modulefiles based on the prereqs defined by each of these modules. setModuleDependency is called when module is loaded or current environment state is analyzed (called by setLoadedModule). unsetModuleDependency is called when module is unloaded (called by unsetLoadedModule). The g_moduleDepend array is set for each loaded module as a mirror of their relative definition in g_loadedModulePrereq, where module reference in the prereq definition is replaced by the name of the actual loaded modulefile matching the module reference. When a module reference of a prereq definition has no match among the currently loaded modulefiles, this unmet dependency is registered instead in the g_moduleUnmetDep global array. This situation happens when an optional dependency is not satisfied or if the load of a module has been forced (no dependency loaded prior to the load of the asked module). Reverse arrays are also set (g_dependHash and g_unmetDepHash) to easy the search of registered elements. When a new module is loaded, setModuleDependency looks if this new module was previously set as an unmet dependency. If it is the case, update dependent loaded modules dependency definition now the unmet dep is satisfied. 2018-05-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deps/a, testsuite/modulefiles.deps/b, testsuite/modulefiles.deps/c, testsuite/modulefiles.deps/d, testsuite/modulefiles.deps/e, testsuite/modulefiles.deps/f, testsuite/modulefiles.deps/g, testsuite/modulefiles.deps/h, testsuite/modulefiles.deps/i, testsuite/modulefiles.deps/j, testsuite/modulefiles.deps/k, testsuite/modulefiles.deps/l, testsuite/modulefiles.deps/m, testsuite/modulefiles.deps/n, testsuite/modulefiles.deps/o, testsuite/modulefiles.deps/p, testsuite/modulefiles.deps/q, testsuite/modulefiles.deps/r, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/370-deps.exp: ts: add 50-cmds/370-deps tests * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp, .../modules.50-cmds/132-conflict-fullpath.exp: ts: add procs to format conflict/prereq err msg * .travis.yml: travis: enable autohandling on one test config * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp: ts: clean new MODULES_LM* env vars at ts startup * testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp: ts: adapt prereq tests if autohandling is enabled 2018-05-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Rework mod user asked internal handling Change module user asked internal handling (registering/unregistering in global structures) to get similar handling than loaded module list. Rename g_lmUasked into g_loadedModuleUasked to get closer to the name used for conflicts and prereqs registration. Primarily sets g_loadedModuleUasked through setLoadedModule procedure and unsets through unsetLoadedModule. Add isModuleUserAsked procedure to check if passed mod has been asked by user. Temporarily add setModuleUserAsked and unsetModuleUserAsked procedures to set/unset g_loadedModuleUasked array, for use around reloadDepLoadedModuleList call in cmdModuleLoad. * modulecmd.tcl.in: Clean currentModule var from cmdModule{Load,Unload} procs 2018-05-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: No uasked found on current env means all are uasked When looking at the current environement state in cacheCurrentModules procedure, if no user asked modules are found then all loaded modules are user asked modules. Helps transition between a Modules version not knowing about 'user asked' modules and a newer Modules version introducting this tracking feature. Environment setup on the previous Modules version will still be functionnal if newer Modules version is upgraded live. * modulecmd.tcl.in: Ignore '--notuasked' flag in case it is passed on module load --notuasked flag enables to keep track of the user asked state in saved collection (by flagging those not directly asked by user). Ignore it if passed directly to a 'module load' command (do not raise error) in case a collection file is sourced like a shell script. Do not advertise this new flag as it has no effect and should be kept internal as user asked mechanism is automatically controlled from the location the module load command is issued. * modulecmd.tcl.in: No uasked found in collection means all are usaked If none of the loaded modules found in collection is marked 'user asked', this means all modules saved are user asked to make collections saved prior to the user asked change still valid on new Modules version. * modulecmd.tcl.in: Track user asked loaded modules whatever auto_handling state Keep track of the loaded modules asked by user whether the auto_handling option is enabled or disabled. A loaded module has been asked by user when its load order is coming from the user not from the evaluation of a modulefile. Keeping track of this state in any cases will help to introduce per-module command automatic handling. Also saved collections do not break when auto_handling is enabled or disabled on Modules installation afterward. An 'uasked' first position argument is set on cmdModuleLoad procedure to pass the user asked state. cmdModuleReload is reworked to correctly restore the user asked state for each module unloaded in its first operation phase. cmdModuleSwitch always sets the module it loads as user asked. Should be discussed later on in conjunction with the behavior of this sub-command when called from a modulefile. Collections sub-commands and related utility procedures have been reworked to save and restore the non-'user asked' state of the loaded modules. Non-'user asked' state is recorded rather 'user asked' state to fit collection saved prior to this change were every modules mentionned in collection are considered 'user asked'. When restoring a collection currently loaded modules are unloaded to be loaded again even if they got same loading position than in collection but a different user asked state. Non-user asked state is saved in collection by adding the '--notuasked' argument on recorded module load lines. 2018-05-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Register conflict/prereq/usaked whatever auto_handling state Get, set and export in environment loaded modules declared conflicts, prereqs and their 'user asked' state whether the auto_handling option is enabled or not. Keep g_auto_handling to control automated actions but information registering is perfomed in any cases. Will help to introduce per-module command automatic handling and by-pass mechanism, still keeping a consistent intel. * modulecmd.tcl.in: Initial rework of mod prereq internal handling Change module prereq internal handling (registering/unregistering in global structures) to get similar handling than loaded module list. Rename g_lmPrereq into g_loadedModulePrereq. Remove ModulesCurrentPrereq global list, that were registering the prereq list of the currently evaluated module. Now directly registers into g_loadedModulePrereq. If evaluation goes wrong and is aborted, then prereqs registered in g_loadedModulePrereq are unregistered to correctly restore state prior evaluation. Introduce set, unset and get accessors for the g_modulesPrereq array. getLoadedPrereq is also able to return its result serialized to manage MODULES_LMPREREQ environment variable. 2018-05-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Rework mod conflict internal handling Change module conflict internal handling (registering/unregistering in global structures) to get similar handling than loaded module list. Rename g_lmConflict into g_loadedModuleConflict. Remove ModulesCurrentConflict global list, that were registering the conflict list of the currently evaluated module. Now directly registers into g_loadedModuleConflict, to be able to check only one structure to get both loaded and loading defined conflicts. If evaluation goes wrong and is aborted, then conflicts registered in g_loadedModuleConflict are unregistered to correctly restore state prior evaluation. Introduce set, unset and get accessors for the g_loadedModuleConflict array. getLoadedConflict is also able to return its result serialized to manage MODULES_LMCONFLICT environment variable. A doesModuleConflict procedure is also added to return whether or not passed module conflicts with currently defined rules. 2018-05-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Parse MODULES_LMUASKED with getLoadedModuleUserAskedList proc * modulecmd.tcl.in: Parse MODULES_LMPREREQ with getLoadedModulePrereqList proc * modulecmd.tcl.in: Parse MODULES_LMCONFLICT with getLoadedModuleConflictList proc * modulecmd.tcl.in: Rename g_def_separator_lvl{2,3} in g_sub{1,2}_separator And normalize access to these global variables (using $::varname). 2018-05-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst, Makefile, Makefile.inc.in, configure, modulecmd.tcl.in, site.exp.in: install: add --enable-auto-handling configure opt Enable or disable the automatic modulefile handling at configure time with '--enable-auto-handling' option. Disabled by default, will be set enbaled by default in next major release (v5). Throw this configure information to the testsuite to adapt result depending of feature enablement. 2018-05-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Set g_auto_handling as g_orig_load_control+g_auto_resolve_dep Gather all automatic module handling features enablement under a single g_auto_handling global variable, rather g_orig_load_control and g_auto_resolve_dep. Automated actions are all enabled or all disabled to simplify tests and configurations. * testsuite/modules.00-init/006-procs.exp, testsuite/modules.00-init/071-args.exp, testsuite/modules.10-use/040-load.exp, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/035-defname.exp, testsuite/modules.20-locate/038-defcontext.exp, testsuite/modules.20-locate/040-alias.exp, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.20-locate/046-getsym.exp, testsuite/modules.20-locate/047-symerrs.exp, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.20-locate/075-symlink.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/020-setenv.exp, testsuite/modules.50-cmds/022-setenv-eschars.exp, testsuite/modules.50-cmds/025-setenv-undo.exp, testsuite/modules.50-cmds/028-setenv-refcount.exp, testsuite/modules.50-cmds/029-setenv-env.exp, testsuite/modules.50-cmds/030-unsetenv.exp, testsuite/modules.50-cmds/035-unsetenv-undo.exp, testsuite/modules.50-cmds/036-unsetenv-x.exp, .../modules.50-cmds/038-unsetenv-refcount.exp, testsuite/modules.50-cmds/039-unsetenv-env.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/049-append-env.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/059-prepend-env.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/069-remove-env.exp, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/076-alias-sub.exp, testsuite/modules.50-cmds/077-alias-undo.exp, testsuite/modules.50-cmds/078-refresh.exp, testsuite/modules.50-cmds/080-info-name.exp, testsuite/modules.50-cmds/081-info-user.exp, testsuite/modules.50-cmds/082-info-user-exp.exp, testsuite/modules.50-cmds/083-info-mode.exp, testsuite/modules.50-cmds/084-info-mode-exp.exp, testsuite/modules.50-cmds/085-info-flags.exp, testsuite/modules.50-cmds/086-info-shells.exp, testsuite/modules.50-cmds/087-info-shells-exp.exp, testsuite/modules.50-cmds/088-info-isloaded.exp, testsuite/modules.50-cmds/089-info-type.exp, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/100-loglevel.exp, testsuite/modules.50-cmds/101-badfac.exp, testsuite/modules.50-cmds/105-trace.exp, testsuite/modules.50-cmds/110-verbose.exp, testsuite/modules.50-cmds/115-verbose-msg.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp, .../modules.50-cmds/132-conflict-fullpath.exp, testsuite/modules.50-cmds/140-system.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/172-swap-app-delim.exp, testsuite/modules.50-cmds/173-swap-app-delim.exp, testsuite/modules.50-cmds/175-swap2.exp, testsuite/modules.50-cmds/177-swap-prep-delim.exp, testsuite/modules.50-cmds/178-swap-prep-delim.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/195-load-recurs.exp, testsuite/modules.50-cmds/197-load-lots.exp, testsuite/modules.50-cmds/200-break.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/220-continue.exp, testsuite/modules.50-cmds/230-loop.exp, testsuite/modules.50-cmds/240-chdir.exp, testsuite/modules.50-cmds/250-x-resource.exp, testsuite/modules.50-cmds/260-getenv.exp, testsuite/modules.50-cmds/269-getenv-env.exp, testsuite/modules.50-cmds/280-info-specified.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.50-cmds/285-info-loaded.exp, testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.50-cmds/301-interp-command.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.50-cmds/310-puts.exp, testsuite/modules.50-cmds/320-is-saved.exp, testsuite/modules.50-cmds/321-is-used.exp, testsuite/modules.50-cmds/322-is-avail.exp, testsuite/modules.50-cmds/330-source.exp, testsuite/modules.50-cmds/340-modvar.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/359-allin-env.exp, testsuite/modules.50-cmds/360-restoreenv.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/080-access.exp, testsuite/modules.70-maint/020-update.exp, testsuite/modules.70-maint/030-purge.exp, testsuite/modules.70-maint/050-whatis-load.exp, testsuite/modules.70-maint/140-multiargs.exp, testsuite/modules.70-maint/180-reload.exp, testsuite/modules.70-maint/190-emptyarg.exp, testsuite/modules.80-deep/020-load.exp, testsuite/modules.80-deep/021-unload.exp, testsuite/modules.80-deep/022-switch.exp, testsuite/modules.80-deep/068-transitive.exp, testsuite/modules.80-deep/080-access.exp, testsuite/modules.91-sort/040-load.exp, testsuite/modules.95-version/020-load.exp, testsuite/modules.95-version/020-unload.exp, testsuite/modules.95-version/022-load2.exp, testsuite/modules.95-version/022-unload2.exp, testsuite/modules.95-version/040-xgetenv.exp: ts: adapt test results for asked mod registration 2018-05-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Register module asked for load in MODULES_LMUASKED Change name of the environment variable used to register the names of modules explicitely asked for load by user (not loaded automatically as dependency): from _LMSTICKY_ to MODULES_LMUASKED in order to get a MODULES_ common prefix for all Modules-specific environment variables. 2014-05-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Introducing automatic module dependency resolution Introduce an automatic module dependency resolution by attempting during a "module load" to load modules declared as prereq and attempting during a "module unload" to unload modules declared as prereq if they have been loaded automatically. To distinguish between modules loaded upon user request or automatically for dependency resolution, module load requested by user are registered as "sticky" in _LMSTICKY_ environment variable. Additionnally all switched modules are considered sticky. Module commands managing the whole set of loaded modules (save, restore, purge and reload) have been adapted to only work over the sticky modules to take benefit from the dependency resolution. Moreover, when reloading modules declaring a prereq during a switch, load or unload action, only sticky modules are reloaded. Original dependency management behavior is preserved by default. Automatic dependency resolution can be enabled by setting to 0 the g_auto_resolve_dep variable in modulecmd.tcl script. 2018-04-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/006-procs.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/350-allin.exp: ts: adapt test results for prereq registration 2018-04-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Register declared prereq in MODULES_LMPREREQ Change name of the environment variable used to register prereqs declared by loaded modules: from _LMPREREQ_ to MODULES_LMPREREQ in order to get a MODULES_ common prefix for all Modules-specific environment variables. 2014-04-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Registering prereq of loaded modules to ensure they are satisfied When defining a prereq with module "b" in module "a", this prereq is not satisfied when module "b" is unloaded whereas module "a" is still loaded. It seems interesting to guaranty that prereq modules cannot be unloaded if modules requiring them are still loaded. To do so, this patch introduces the registration of the prereq declared by loaded modules in _LMPREREQ_ environment variable. Checks have been added to cmdModuleUnload procedure to forbid the unload of modules targeted by a registered prereq. In case of a switch action, all modules declaring a prereq on the switched module are reloaded. cmdModuleSwitch procedure first unloads the modules declaring prereq, then proceed switch as usual and after that loads again the modules declaring prereq. Similarly to switch action, modules declaring an optional prereq on a module are reloaded when this module is loaded or unloaded. cmdModuleLoad and cmdModuleUnload procedures reload the modules declaring prereq after their main load/unload process to avoid reloading modules whereas prereq-module fails to load/unload. Original load control behavior is preserved by default. New behavior can be enabled by setting to 0 the g_orig_load_control variable in modulecmd.tcl script. 2018-04-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/006-procs.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp, testsuite/modules.50-cmds/132-conflict-fullpath.exp, testsuite/modules.50-cmds/195-load-recurs.exp, testsuite/modules.80-deep/020-load.exp, testsuite/modules.80-deep/022-switch.exp, testsuite/modules.80-deep/080-access.exp: ts: adapt test results for conflict registration * modulecmd.tcl.in: Register declared conflict in MODULES_LMCONFLICT Change name of the environment variable used to register conflicts declared by loaded modules: from _LMCONFLICT_ to MODULES_LMCONFLICT in order to get a MODULES_ common prefix for all Modules-specific environment variables. 2014-03-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Registering conflict of loaded modules to ensure they are satisfied When defining a conflict with module "b" in module "a", this conflict is not satisfied when loading module "b" unless this module defines a conflict with "a". Since it happens that modules "a" and "b" are not managed by the same people, it seems interesting to guaranty that conflicts defined by loaded modules are always satisfied. To do so, this patch introduces the registration of the conflict declared by loaded modules in _LMCONFLICT_ environment variable. Checks have been added to cmdModuleLoad procedure to forbid the load of modules targeted by a registered conflict. Since modulefile may directly call module load, an is-loading procedure has been introduced to also ensure that current module will not be loaded if it defines a conflict toward a module which is currently loading. Original load control behavior is preserved by default. New behavior can be enabled by setting to 0 the g_orig_load_control variable in modulecmd.tcl script. 2018-07-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile: install: simplify RPM release number generation Just append current build number to previous RPM release number, rather making a complex and too much specific computation. Thanks to Michael Sternberg (@mgsternberg) for challenging the way this numbering generation worked. Fixes #175 2018-07-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst, Makefile, configure: install: use sed rather grep and cut Use sed command rather a combination of grep and cut in 'configure' and 'Makefile' scripts. As a result grep and cut commands are not required anymore to install new Modules releases. However, grep is still required to install compatibility version. Big thanks to Michael Sternberg (@mgsternberg) for crafting the right sed commands to achieve a more efficient installation process. Fixes #175 * init/ksh.in: init: fix ksh script for ksh88 compatibility Fix a ksh88 incompatible assignment and use '.' rather 'source' to source external script. Fixes #159 * modulecmd.tcl.in, testsuite/modulefiles/loc_rc010/.1.0, testsuite/modulefiles/loc_rc010/.modulerc, testsuite/modulefiles/loc_rc010/2.0, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.90-avail/070-full.exp: Handle default version sets on an hidden modulefile When looking for the default version of a given modulefile, if this default is set on an hidden modulefile, this hidden modulefile were not found as the initial modulefile search were not looking for hidden modulefiles. When this situation is now spotted, modulefile search is started again with inclusion of hidden files. Add a test for this situation in 20-locate/067-hidden. Fixes #177 * init/bash_completion.in, init/zsh-functions/_module: init: enable ERE on sed with '-E' argument rather '-r' When enabling Extended Regular Expression (ERE) on sed command, use the '-E' argument (rather '-r') for compatibility with OS X's and BSDs' sed. 'sed -E' is used in bash and zsh completion scripts. ERE are required to interpret alternation character '|'. Fixes #178 2018-07-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/modulefile.rst: doc: state in modulefile(4) getenv should be pref. over ::env 2018-06-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, Makefile.inc.in, configure: install: relax GNU grep requirement constraint Rely on regular grep options rather grep -P to better cope with OSes where BSD grep is available by default. 2018-06-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version 4.1.3 2018-06-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/profile.sh.in: Detect shell with variables in profile.sh script To improve shell detection code that until now was relying on a parent process name check, some shell variables will be used to determine the current shell name. $BASH and $ZSH_NAME variables will be looked at if defined to determine calling shell name. Doing so will avoid some external command call when running bash or zsh. Also if people source /etc/profile script in their own bash or zsh script it will correctly determine calling shell name, as parent process in this case is the script name. Cannot determine shell name on ksh with a variable due to the lack of a consistent detection mechanism across all ksh flavors [1]. Fixes #173 [1] https://books.google.fr/books?id=53zaxy423xcC&pg=PA161 2018-05-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_v3_v4.rst: doc: env var definition during a whatis mode eval 2018-05-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles.deep/moddalias/.modulerc, testsuite/modulefiles.deep/moddalias/dir1/1, testsuite/modulefiles.deep/moddalias/dir2/.ignored, testsuite/modules.80-deep/010-init_ts.exp, testsuite/modules.80-deep/020-load.exp, testsuite/modules.80-deep/021-unload.exp, testsuite/modules.80-deep/030-display.exp, testsuite/modules.80-deep/050-whatis.exp, testsuite/modules.80-deep/999-cleanup.exp, testsuite/modules.90-avail/070-full.exp: If subdir is empty do not update parent dir if overwritten During a modulefile lookup in getModules, directory definitions are updated if some empty directories are found in them. Do not attempt this directory definition update when finding an empty directory if parent directory has been overwritten by an alias definition for instance. Fixes #170 2018-05-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles.allin/allenvchg/1, testsuite/modulefiles.allin/allenvchg/2, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/359-allin-env.exp: Setenv on unload mode set var to val in interp context Interpreting a setenv modulefile order during an unload evaluation, variable is still set to be unset in generated shell code but it is set to the value defined on the setenv order in the interpreter context instead of being cleared. This change is made to recover and improve behavior of compat version and previous version of modulecmd.tcl where variable's value found in environment were not touch in interpreater context. This is useful when using environment variable value to append/prepend-path another variable. This change enables to correctly unset this other variable on an unload evaluation. Was previously not unset since the first variable used to edit the second was found cleared. This change is currently limited to the setenv order and does not apply to the prepend-path and append-path, where during an unload evaluation variable value part is removed from variable also in interpreter context. Need to distinguish value in interpreter context from value to set in shell output code to also apply this mechanism to path edition modulefile orders. 2018-05-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/bin/install_test_sh, testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/020-module.exp, testsuite/modulefiles/alias/3.0, testsuite/modules.00-init/006-procs.exp, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/076-alias-sub.exp, testsuite/modules.90-avail/070-full.exp: Define shell alias with special chars escaped When producing code to output shell alias definition, escaping of special characters was missing until now in renderSettings procedure. Code to bake shell alias has been fixed to work in a similar way than for environment variable with full range of shell special characters escaped. Translation of $n/$* in !!:n/!* on csh-like shells is maintained for compatibility with v3. To improve this compatibility, a \ prior to $ disables translation on csh (like with v3), then after \$ is translated in $ for all shells. Adapt testsuite to use value escaping over expected output result for shell alias (like done for environment variable). Adapt consequently all shell alias tests in 50-cmds/07*. Add test in 50-cmds/076-alias-sub to demonstrate escaping of complex shell alias. Use modulefile from this new test within install testsuite to garanty shell alias produce is effective on shell sessions. Check availability of tools used by this alias (grep, tr, awk) to determine if install test can be launched on current system. Fixes #165 * testsuite/modules.00-init/006-procs.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/150-append-path.exp, testsuite/modules.70-maint/151-prepend-path.exp, testsuite/modules.70-maint/152-remove-path.exp: ts: fix special chars escaping code in values Add more special characters to the escaping list for regular shells. And fix code to over escape special characters relative to regular expression when regexp mode is enabled. * testsuite/bin/install_test_sh, testsuite/install.00-init/040-subshell.exp: ts: fix word splitting for zsh test in install suite 2018-05-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Quote csh generated code to pass it to eval Brace modulecmd.tcl call in module csh alias with quotes to pass quoted content to the shell evaluation. Use :q modifier on !* to escape quotes passed as arguments to the module command * init/bash.in, init/ksh.in, init/sh.in, init/zsh.in: init: init/export _module_raw if stderr attached to term To get coherent with the test made by modulecmd.tcl to determine if autoinit sub-command has to produce code for the '_module_raw' shell function, export this function (or initialize it on compat mode) if stderr is attached to a terminal. Was previously testing stdout, whereas modulecmd.tcl is checking stderr, which led to inconsistencies as described in [1]. Fixes #169 [1] https://bugzilla.redhat.com/show_bug.cgi?id=1575479 2018-05-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/guide/get_started/00-cleanup.sh, contrib/guide/get_started/01-modulepath-modulerc.sh, .../guide/get_started/02-first_module-install.sh, contrib/guide/get_started/03-first_module-bar.sh, contrib/guide/get_started/04-second_modulefile.sh, contrib/guide/get_started/05-more_modulefile-foo.sh, .../guide/get_started/06-more_modulefile-share.sh, .../guide/get_started/07-guide_modulefile_search.sh, .../get_started/08-guide_modulefile_search-alias.sh, contrib/guide/get_started/09-global_modulerc.sh, contrib/guide/get_started/10-restrict_visibility.sh, contrib/guide/get_started/11-restore_visibility.sh, contrib/guide/get_started/12-datadir-create.sh, contrib/guide/get_started/13-datadir-common.sh, contrib/guide/get_started/14-datadir-versions.sh, contrib/guide/get_started/15-datadir-virtual.sh, contrib/guide/get_started/16-conflict.sh, contrib/guide/get_started/17-prereq.sh, contrib/guide/get_started/18-collection-target.sh, contrib/guide/get_started/19-siteconfig.sh, contrib/guide/get_started/README, contrib/guide/get_started/test.py: contrib: add scripts from upcoming 'get started' guide 2018-05-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, doc/source/module.rst, modulecmd.tcl.in, testsuite/config/unix.exp, testsuite/modules.00-init/071-args.exp: Args should be passed as list not single string Update documentation for module usage on scripting language like Perl or Python to provide examples where arguments are passed as a list of string rather a single string. For compatibility with previously advertised examples, first argument is splitted if multiple word are detected in it. 2018-05-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Clean unneeded global variable set in slave interp * modulecmd.tcl.in: Pass cur itrp ref in initInterpCommands to aliases needing it Sets in initInterpCommands procedure interpreter reference as first argument to interpreter alias requiring it, rather doing it in initModfileModeAliases where actual interpreter reference is not known (as this procedure is called at first time a mode-specific interp is created, but not on subsequent times when another interp of same mode but working in a nested level is build up). Now initModfileModeAliases defines a specific __itrp__ keyword to let initInterpCommands know that the argument to pass to the alias to define is the actual interp reference. * modulecmd.tcl.in, testsuite/modules.70-maint/080-help.exp: Add getEvalModuleStackDepth to learn nb of mod in eval Get the number of either modulerc/modulefile currently being evaluated (nested evaluation) with a new procedure called getEvalModuleStackDepth, relying on the number of element of the g_moduleNameStack global list. Use this new procedure rather [info level] to determine if module procedure is called at top level or not and to determine the slave interpreter to use (an interpreter is reused to evaluate a modulefile from same evaluation nested level). Gives a more precise information on modulefile evaluation depth level than [info level] which reflects Tcl procedure call stack depth. * .travis.yml: travis: test --enable-append-{bin,man}path configure opts * INSTALL.rst, Makefile.inc.in, configure, init/Makefile, init/bash.in, init/csh.in, init/fish.in, init/ksh.in, init/sh.in, init/zsh.in: install: add --enable-append-{bin,man}path configure opts Add the ability to append rather prepend the man or bin directory when adding these directory to the relative environment variable is enabled (with --enable-set-manpath or --enable-set-binpath). Takes the form of 2 new configure options: --enable-append-manpath and --enable-append-binpath. No effect if set but relative --enable-set-{bin,man}path option is unset or disabled. 2018-05-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash.in, init/ksh.in, init/sh.in, init/zsh.in, modulecmd.tcl.in, testsuite/install.00-init/010-environ.exp, testsuite/modules.70-maint/120-autoinit.exp: Rename _moduleraw shell func in _module_raw To use a common _module_ prefix for all module-related internal shell functions as suggested by Paul FM [1]. [1] https://sourceforge.net/p/modules/mailman/message/36230667/ * modulecmd.tcl.in: Call runModulerc within module proc at top level Call runModulerc, to find and execute any global rc file found, within module procedure once module sub-command is known and registered. This way global rc file can learn the current command processed. 2018-05-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Use getModuleNameVersion in execute-modulerc to get mod details * modulecmd.tcl.in: Track sourced rc files in getModules rather execute-modulerc Handle g_rcfilesSourced global array that track sourced rc files in getModules procedure rather execute-modulerc procedure. This way only call execute-modulerc procedure if rc file has not yet been sourced. It saves a lot of procedure call especially in case of global query command like whatis, where initial global findModules result is re-used for each sub-query raised during modulefile evaluation. 2018-03-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Cache findModules results Introduce a memory cache for the results build up by findModules procedure. Done in order to reuse these results if next searches are compatible instead of re-walking the filesystem. A cached result may be used by a search looking for a subset of this result. For instance searching for modules 'foo' in '/path/to/dir' may use the cache result saved after the search of '*' modules in 'path/to/dir'. This superset result is then filtered-out whithin the getModules procedure. 2018-04-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Fix resetInterpState to restore empty string value Useful to restore initial value of ::errorCode and ::errorInfo. * modulecmd.tcl.in: Set reportDebug as nop proc when debug is disabled Define in initErrorReport the reportDebug procedure as a no-operation procedure to optimize operations whether debugging is enabled or not. * modulecmd.tcl.in, testsuite/modules.50-cmds/359-allin-env.exp: Set *setenv cmds as init-if-undef proc on whatis mode Define a specific procedure for the setenv and unsetenv commands on a whatis evaluation mode: setenv-wh. This procedure checks the environment variable targeted by the command and initialize it as an empty string if undefined. Proceed this way to reduce the total amount of time of a whatis query but still initializing variables if undefined to avoid 'undefined variable' errors during evaluation if environment variable value are referred to later in modulefile. Value set to variable are not the correct one (no value set if variable defined, empty string set if variable is undefined) but it should not affect the whatis query as only the 'module-whatis' commands are valuable in this mode. * modulecmd.tcl.in, testsuite/modules.50-cmds/359-allin-env.exp: Set *-path cmds as init-if-undef proc on whatis mode Define a specific procedure for the append-path, prepend-path and remove-path commands on a whatis evaluation mode: edit-path-wh. This procedure checks the environment variable targeted by the command and initialize it as an empty string if undefined. Proceed this way to reduce the total amount of time of a whatis query but still initializing variables if undefined to avoid 'undefined variable' errors during evaluation if environment variable value are referred to later in modulefile. Value set to variable are not the correct one (no value set if variable defined, empty string set if variable is undefined) but it should not affect the whatis query as only the 'module-whatis' commands are valuable in this mode. 2018-04-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Fallback on split/join in psplit/pjoin if no sep char found Achieve better performances in most cases (as separator character is usualy not used) 2018-04-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Remove unneeded g_inhibit_dispreport As modulefile commands do not handle anymore their display-mode report, display report inhibition for modulerc evaluation is not needed anymore. * modulecmd.tcl.in, testsuite/modulefiles.allin/allin/1, testsuite/modulefiles.allin/allin/3, testsuite/modulefiles.allin/allin/4, testsuite/modulefiles.other/modemptyarg/apropos, testsuite/modulefiles.other/modemptyarg/avail, testsuite/modulefiles.other/modemptyarg/whatis, testsuite/modulefiles/modbad/append-path, testsuite/modulefiles/modbad/autoinit, testsuite/modulefiles/modbad/empty, testsuite/modulefiles/modbad/foo, testsuite/modulefiles/modbad/help, testsuite/modulefiles/modbad/info-loaded, testsuite/modulefiles/modbad/is-avail, testsuite/modulefiles/modbad/is-loaded, testsuite/modulefiles/modbad/is-saved, testsuite/modulefiles/modbad/is-used, testsuite/modulefiles/modbad/path, testsuite/modulefiles/modbad/paths, testsuite/modulefiles/modbad/prepend-path, testsuite/modulefiles/modbad/remove-path, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.50-cmds/330-source.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.80-deep/030-display.exp: Move 'module' to the per-mode evaluation interp 'module' modulefile command targets module procedure on load and unload modes of modulefile evaluation. reportCmd is targeted on display mode. For other modes a nop is targeted. 'module' command is now disabled on help, test and whatis mode which stabilizes evaluation on these modes. On Modules v3, module command was also disabled on all these query evaluation modes. 2018-04-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/350-allin.exp: Move 'x-resource' to the per-mode evaluation interp 'x-resource' modulefile command targets x-resource procedure on load and unload modes of modulefile evaluation. reportCmd is targeted on display mode. For other modes a nop is targeted. * modulecmd.tcl.in: Move 'module-virtual' to the per-mode evaluation interp 'module-virtual' modulefile command targets module-virtual procedure on every mode of modulefile evaluation. * modulecmd.tcl.in: Move 'module-alias' to the per-mode evaluation interp 'module-alias' modulefile command targets module-alias procedure on every mode of modulefile evaluation. * modulecmd.tcl.in: Move 'module-version' to the per-mode evaluation interp 'module-version' modulefile command targets module-version procedure on every mode of modulefile evaluation. * modulecmd.tcl.in, testsuite/modules.20-locate/035-defname.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/140-multiargs.exp, testsuite/modules.70-maint/170-contact.exp: Brace empty or whitespace-containing arg on reportCmd reportCmd processes the argument list of the called command to brace empty arguments or arguments containing whitespace character. Makes visible for a human eye the limit of each parameter (especially for empty strings). * modulecmd.tcl.in, testsuite/modules.50-cmds/039-unsetenv-env.exp, testsuite/modules.50-cmds/069-remove-env.exp, testsuite/modules.50-cmds/140-system.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/359-allin-env.exp, testsuite/modules.70-maint/140-multiargs.exp: Trace exec to reportCmd on display mode enabled cmds For those commands enables on display mode (commands that are also run on this mode, not only reported, like */*-path commands): use an execution trace (at leave step) to call for the report commands after running the enabled procedure. With this change these enabled-on-display commands do not have to handle their display reporting anymore. Current evaluation mode can now be ignored by these procedures. The reportCmdTrace procedure is introduced to be set as the execution trace procedure in case alias command for modulefile interp is not set to reportCmd on a display evaluation mode. As a side effect of this change, commands are reported even if their execution raise an error (helps to see the command line along with raised error message). 2018-04-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Refactor code of getenv command Same kind of debug message or mode test than used in other modulefile command procedures. g_inhibit_dispreport test is not needed as getenv cannot be reached from a modulerc evaluation 2018-04-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.70-maint/070-display.exp: Move '*-path' to the per-mode evaluation interp 'append-path' modulefile command targets append-path procedure on every mode of modulefile evaluation except unload mode where remove-path is targeted. append-path procedure is called on all these modes to perform variable set for later use of this variable during the modulefile evaluation. 'prepend-path' modulefile command targets prepend-path procedure on every mode of modulefile evaluation except unload mode where remove-path is targeted. prepend-path procedure is called on all these modes to perform variable set for later use of this variable during the modulefile evaluation. 'remove-path' modulefile command targets remove-path procedure on every mode of modulefile evaluation except unload mode where remove-path-un is targeted. remove-path procedure is called on all these modes to perform variable set/unset for later use of this variable during the modulefile evaluation. remove-path-un procedure is used on unload mode to clear variable if currently unset for later use of this variable during eval. * modulecmd.tcl.in, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/055-locrcerrs.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.20-locate/075-symlink.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.20-locate/081-access-rc.exp, testsuite/modules.50-cmds/029-setenv-env.exp, testsuite/modules.50-cmds/039-unsetenv-env.exp, testsuite/modules.50-cmds/049-append-env.exp, testsuite/modules.50-cmds/059-prepend-env.exp, testsuite/modules.50-cmds/069-remove-env.exp, testsuite/modules.50-cmds/140-system.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/260-getenv.exp, testsuite/modules.50-cmds/269-getenv-env.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.50-cmds/310-puts.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/359-allin-env.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/170-contact.exp, testsuite/modules.80-deep/080-access.exp: Move '*setenv' to the per-mode evaluation interp 'setenv' modulefile command targets setenv procedure on every mode of modulefile evaluation except unload mode where setenv-un is targeted. setenv procedure is called on all these modes to perform variable set for later use of this variable during the modulefile evaluation. setenv-un procedure is used on unload mode to call unsetenv with the correct argument list. 'unsetenv' modulefile command targets unsetenv procedure on every mode of modulefile evaluation except unload mode where unsetenv-un is targeted. unsetenv procedure is called on all these modes to perform variable set/unset for later use of this variable during the modulefile evaluation. unsetenv-un procedure is used on unload mode to call setenv or unsetenv depending on the value passed or not as argument. 2018-04-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.70-maint/070-display.exp: Move '*set-alias' to the per-mode evaluation interp 'set-alias' modulefile command targets set-alias procedure on load mode of modulefile evaluation. set-alias-un is targeted on unload mode. reportCmd is targeted on display mode. For other modes a nop is targeted. set-alias-un procedure is used on unload mode to call unset-alias with the correct argument list. 'unset-alias' modulefile command targets unset-alias procedure on load mode of modulefile evaluation. reportCmd is targeted on display mode. For other modes a nop is targeted. * modulecmd.tcl.in: Move 'conflict' to the per-mode evaluation interp 'conflict' modulefile command targets conflict procedure on load mode of modulefile evaluation. reportCmd is targeted on display mode. For other modes a nop is targeted. * modulecmd.tcl.in: Move 'prereq' to the per-mode evaluation interp 'prereq' modulefile command targets prereq procedure on load mode of modulefile evaluation. reportCmd is targeted on display mode. For other modes a nop is targeted. * modulecmd.tcl.in: Move 'module-whatis' to the per-mode evaluation interp 'module-whatis' modulefile command targets module-whatis procedure on whatis mode of modulefile evaluation. reportCmd is targeted on display mode. For other modes a nop is targeted. * modulecmd.tcl.in: Move 'chdir' to the per-mode evaluation interp 'chdir' modulefile command targets chdir procedure on load mode of modulefile evaluation. reportCmd is targeted on display mode. For other modes a nop is targeted. * modulecmd.tcl.in, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp: Move 'module-{log,trace,user,verb}' to the per-mode evaluation interp module-log, module-trace, module-user and module-verbosity modulefile commands target 'nimp' procedure on load and unload modes of modulefile evaluation. reportCmd is targeted on display mode. For other modes a nop is targeted. * modulecmd.tcl.in: Add 'nimp' proc to get a dummy 'not implemented' target * modulecmd.tcl.in: Disable chdir,module{,-trace,-log,-user,-verbosity} from modulerc eval Make chdir, module, module-trace, module-verbosity, module-user and module-log commands target the 'nop' procedure on modulerc interpreter. These commands were declared for modulerc evaluation but this did not make any sense as their action only concern modulefile evaluation. * modulecmd.tcl.in: Move 'system' to the per-mode evaluation interp 'system' modulefile command targets system procedure on load and unload modes of modulefile evaluation. reportCmd is targeted on display mode. For other modes a nop is targeted. 'system' can also currently be called from a modulerc evaluation when load or unload mode is detected. Kept as is for the moment. May/should change for next major release. * modulecmd.tcl.in: Add 'reportCmd' proc to use as target for display mode If interpreter alias command targets the reportCmd procedure, make sure command name is passed as first argument. * modulecmd.tcl.in: Define arg to pass to interp aliases in initModfileModeAliases Transform g_modfileAliasesPassItrp, array listing aliases where the interpreter name should be passed as alias command first argument, into g_modfile${mode}AliasesPassArg, array listing first argument to pass to particular aliases. The new structure is defined per evaluation mode (a specific alias/argument list per mode). So its definition is moved from execute-modulefile to initModfileModeAliases. 2018-04-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add 'nop' proc to get a dummy target for certain eval mode * modulecmd.tcl.in: Adapt interp alias commands to the evaluation mode Make interpreter alias command targets vary depending on the evaluation mode to adapt behavior of modulefile commands to the currently run module command. For instance a 'setenv' command is evaluation as an 'unsetenv' command when unloading a modulefile. This commit lays the groundwork to adapt modulefile commands to the evaluation mode. All commands are kept for the moment in the situation where the same procedure is applied to all evaluation modes. * modulecmd.tcl.in: Define slave interp cmds in initInterpCommands proc * modulecmd.tcl.in, testsuite/modulefiles/spread/2.0, testsuite/modulefiles/spreadrc/dir2/1.0, testsuite/modules.70-maint/080-help.exp: Dedicate a modfile interp for each evaluation mode * modulecmd.tcl.in, testsuite/modules.70-maint/080-help.exp: Use same dump state for same kind of interp Share same dump state between interpreters of the same kind (modfile or modrc) but working at different levels. * modulecmd.tcl.in: Clarify interp name and reportDebug their creation * modulecmd.tcl.in: Push/pop modname and specified in execute-mod* procs 2018-04-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.70-maint/080-help.exp: Automatically prefix debug msgs by calling proc name 2018-03-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Harmonize/reduce execute-module{rc,file} debug msg 2018-04-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_v3_v4.rst: doc: remove-path applied when unloading on compat vers * doc/source/diff_v3_v4.rst: doc: desc. MANPATH special treatment on compat version Describe the difference behavior between Modules 4+ and compatibility version regarding how append-path/prepend-path commands handle the MANPATH environment variable when unset. Helps clarify [1]. [1] https://bugzilla.redhat.com/show_bug.cgi?id=1564899 * modulecmd.tcl.in, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/069-remove-env.exp: Make remove-path clear ::env(var) on unload mode if unset Clears the variable passed to 'remove-path' procedure in ::env() array on unload mode and if this variable is unset for later use during the modulefile evaluation. Helps producing same variable evaluation behavior whatever the evaluation mode, avoiding access to undefined references by defining a cleared but set value to these undefined variables. As a side effect as remove-path command is now evaluated on unload mode, invalid argument on this command will raise error. Previously arguments were not parsed so no error raised on unload mode. 2018-04-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Get env var set value or fallback value with get-env Add a 'get-env' procedure to read values from 'env' array, like what is done with 'set-env' for setting value. Distinguish set environment variable from cleared one with help of g_clearedEnvVars array. * modulecmd.tcl.in, testsuite/modulefiles/getenv/0.6, testsuite/modules.50-cmds/269-getenv-env.exp, testsuite/modules.50-cmds/359-allin-env.exp: Keep track of cleared env var in g_clearedEnvVars When unsetting (clearing) an environment variable in 'unset-env' procedure, keep track of it in a g_clearedEnvVars array to be able to distinguish later on, in 'getenv' procedure, if variable is equal to an empty string or if it has been unset (cleared). * testsuite/modulefiles.allin/allenvchg/1, testsuite/modulefiles.allin/allenvchg/2, testsuite/modules.50-cmds/359-allin-env.exp: ts: add 50-cmds/359-allin-env tests Check environment variable change commands all together over the different modulefile evaluation modes. * doc/source/modulefile.rst, modulecmd.tcl.in, testsuite/modulefiles/getenv/1.0, testsuite/modules.50-cmds/260-getenv.exp: Add valifundef arg to getenv procedure Allow to define value to return if variable name passed to the getenv procedure is undef. Add a description of 'getenv' command in the modulefile man page. * modulecmd.tcl.in, testsuite/modulefiles/getenv/0.6, testsuite/modules.50-cmds/269-getenv-env.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.90-avail/070-full.exp: Make getenv return value on help/test/whatis modes 2018-04-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/029-setenv-env.exp, testsuite/modules.50-cmds/039-unsetenv-env.exp, testsuite/modules.50-cmds/049-append-env.exp, testsuite/modules.50-cmds/059-prepend-env.exp, testsuite/modules.50-cmds/069-remove-env.exp, testsuite/modules.50-cmds/350-allin.exp: Clear env var even if not set on unset-env On 'unset-env' procedure, clears environment variable whether it is set or not to get consistent behavior whatever the current environment setup on later references of this variable during modulefile evaluation. Adapt 029-setenv-env, 039-unsetenv-env, 049-append-env, 059-prepend-env and 069-remove-env test cases: no more 'no such variable' errors. * modulecmd.tcl.in, testsuite/modulefiles.allin/allin/1, testsuite/modulefiles/unsetenv/0.6, testsuite/modules.50-cmds/039-unsetenv-env.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/070-full.exp: Make unsetenv alter ::env() on display/help/test/whatis modes Like previously done for 'remove-path', set the variable passed to 'unsetenv' procedure in ::env() array to make accurate value available for later use during the modulefile evaluation. Add 50-cmds/039-unsetenv-env test to check this ::env() array change over all evaluation mode. Adapt 50-cmds/350-allin to check this change against 'whatis' mode. 2018-04-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles/remove/5.0, testsuite/modules.50-cmds/069-remove-env.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.90-avail/070-full.exp: Make remove-path alter ::env() on display/help/test/whatis modes Like previously done for 'append-path', set the variable passed to 'remove-path' procedure in ::env() array to make accurate value available for later use during the modulefile evaluation. As a side effect as remove-path command is now evaluated on help, test, display and whatis modes, invalid argument on this command will raise error. Previously arguments were not parsed so no error raised. Add 50-cmds/069-remove-env test to check this ::env() array change over all evaluation mode. Adapt 50-cmds/350-allin to check this change against 'whatis' mode. * testsuite/modulefiles/setenv/0.7.1, testsuite/modulefiles/setenv/0.7.2, testsuite/modules.50-cmds/028-setenv-refcount.exp, testsuite/modules.90-avail/070-full.exp: ts: add tests to 50-cmds/028-setenv-refcount Test load and unload mode on modulefiles where setenv and append-path commands play on same variable. Check both ways: setenv then append-path or appen-path then setenv. 2018-04-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Set env var and propagate creation with set-env Make use of the 'set-env' procedure to set an environment variable and propagate creation to the running shell (outputing set command to stdout). Creation is propagated only if currently in 'load' or 'unload' evaluation mode. 2018-04-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/049-append-env.exp, testsuite/modules.50-cmds/180-unload.exp: Unset any ref cnt var on setenv/unsetenv in any mode Whatever the evaluation mode, unset any existing reference counter variable when running setenv/unsetenv commands. Adapt and add tests to put in light behaviors when unloading a standardly-set variable going through append-path/prepend-path. The standardly-set variable is transformed into a path-like variable through the evaluation, resulting in the end in the definition of a reference counter variable (if variable is not setenv/unsetenv during evaluation) or in the deletion of this reference counter variable (if setenv/unsetenv during evaluation). 2018-04-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.70-maint/152-remove-path.exp, testsuite/modules.70-maint/190-emptyarg.exp: Delete env var and propagate deletion with unset-env Make use of the 'unset-env' procedure to delete an environment variable and propagate deletion to the running shell (outputing deletion command to stdout). Deletion is propagated only if currently in 'load' or 'unload' evaluation mode. unset-env procedure distinguishes environment variables from those set for Modules internal use, like path reference counter variables. Internal variables are purely unset whereas other environment variables are just cleared, not unset, to avoid breaking later reference to these variables in modulefiles. In case of environment variable for internal use, variable deletion is propagated to shell only if variable was found set. Aligning all unsets on this rule gives no unset of reference counter variable on unload mode if the variable is not found defined at that time. Adapt expected test results for the above side effect. 2018-04-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/029-setenv-env.exp, testsuite/modules.50-cmds/049-append-env.exp, testsuite/modules.50-cmds/059-prepend-env.exp, testsuite/modules.70-maint/152-remove-path.exp: ts: use helper procs to set env vars on env var set tests 2018-04-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/050-modpath.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/032-prepend.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.10-use/080-access.exp, testsuite/modules.10-use/090-bad.exp, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.50-cmds/010-init_ts.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, .../modules.50-cmds/132-conflict-fullpath.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/321-is-used.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/360-restoreenv.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/055-whatis.exp, testsuite/modules.70-maint/056-whatis-nullpath.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/100-path.exp, testsuite/modules.70-maint/110-paths.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.70-maint/153-is-loaded.exp, testsuite/modules.70-maint/155-is-used.exp, testsuite/modules.70-maint/190-emptyarg.exp, testsuite/modules.80-deep/010-init_ts.exp, testsuite/modules.80-deep/021-unload.exp, testsuite/modules.80-deep/999-cleanup.exp, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/070-full.exp, testsuite/modules.91-sort/010-init_ts.exp, testsuite/modules.91-sort/020-avail.exp, testsuite/modules.95-version/010-init_ts.exp, testsuite/modules.95-version/999-cleanup.exp: ts: use helper procs to set MODULEPATH env var 2018-04-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/006-procs.exp, testsuite/modules.20-locate/038-defcontext.exp, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/025-setenv-undo.exp, testsuite/modules.50-cmds/029-setenv-env.exp, testsuite/modules.50-cmds/035-unsetenv-undo.exp, testsuite/modules.50-cmds/036-unsetenv-x.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/049-append-env.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/059-prepend-env.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/077-alias-undo.exp, testsuite/modules.50-cmds/078-refresh.exp, testsuite/modules.50-cmds/083-info-mode.exp, testsuite/modules.50-cmds/084-info-mode-exp.exp, testsuite/modules.50-cmds/085-info-flags.exp, testsuite/modules.50-cmds/088-info-isloaded.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/130-conflict-full.exp, .../modules.50-cmds/132-conflict-fullpath.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/172-swap-app-delim.exp, testsuite/modules.50-cmds/173-swap-app-delim.exp, testsuite/modules.50-cmds/175-swap2.exp, testsuite/modules.50-cmds/177-swap-prep-delim.exp, testsuite/modules.50-cmds/178-swap-prep-delim.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/195-load-recurs.exp, testsuite/modules.50-cmds/197-load-lots.exp, testsuite/modules.50-cmds/200-break.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/220-continue.exp, testsuite/modules.50-cmds/230-loop.exp, testsuite/modules.50-cmds/240-chdir.exp, testsuite/modules.50-cmds/250-x-resource.exp, testsuite/modules.50-cmds/280-info-specified.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.50-cmds/285-info-loaded.exp, testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.50-cmds/301-interp-command.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.50-cmds/330-source.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/360-restoreenv.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.70-maint/020-update.exp, testsuite/modules.70-maint/030-purge.exp, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/045-listlong.exp, testsuite/modules.70-maint/055-whatis.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/140-multiargs.exp, testsuite/modules.70-maint/153-is-loaded.exp, testsuite/modules.70-maint/157-info-loaded.exp, testsuite/modules.70-maint/180-reload.exp, testsuite/modules.70-maint/190-emptyarg.exp, testsuite/modules.80-deep/021-unload.exp, testsuite/modules.80-deep/022-switch.exp, testsuite/modules.80-deep/068-transitive.exp, testsuite/modules.90-avail/020-single.exp, testsuite/modules.95-version/020-unload.exp, testsuite/modules.95-version/022-load2.exp, testsuite/modules.95-version/022-unload2.exp, testsuite/modules.95-version/040-xgetenv.exp: ts: add helper procs to set env for tests Add new procedures (unsetenv_loaded_module, setenv_loaded_module, setenv_path_var, unsetenv_path_var, unsetenv_var, setenv_var) to set environment for tests in a consistent way (defining reference counter variable for path-like variables). Adapt all test files to set LOADEDMODULES and _LMFILES_ (and relative reference counter variables) with these new helper procedures. 2018-04-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/350-allin.exp: Clear var in evaluation context on unload mode of setenv To get a more accurate (empty) value when using variable later on during the evaluation of the modulefile. Previously set value (prior to unset) was retrieved and used. * modulecmd.tcl.in: No env var unset on unload-path in evaluation context Do not unset-env in unload-path proc (called by *-path commands) like setenv to avoid breaking later reference to the variable in modulefile. Value is cleared instead. 2018-04-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles.allin/allin/1, testsuite/modulefiles/append/7.0, testsuite/modulefiles/prepend/4.0, testsuite/modules.50-cmds/049-append-env.exp, testsuite/modules.50-cmds/059-prepend-env.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.70-maint/140-multiargs.exp, testsuite/modules.90-avail/070-full.exp: Make append/prepend-path alter ::env() on display/help/test/whatis modes Like previously done for 'setenv', set the variable passed to 'append-path' and 'prepend-path' procedures in ::env() array to make it available for later use during the modulefile evaluation. As a side effect as append-path/prepend-path commands are now evaluated on help, test, display and whatis modes, invalid argument on these commands will raise error. Previously arguments were not parsed so no error raised. Add 50-cmds/049-append-env and 50-cmds/059-prepend-env tests to check this ::env() array change over all evaluation mode. Adapt 50-cmds/350-allin to check this change against 'whatis' mode. * modulecmd.tcl.in: Pass full ref cnt inconsistency msg to reportWarning To inhibit full message in case 'g_inhibit_errreport' is enabled. 2018-04-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles.allin/allin/1, testsuite/modulefiles/setenv/0.6, testsuite/modules.50-cmds/029-setenv-env.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.90-avail/070-full.exp: Make setenv alter ::env() on help/test/whatis modes Set the variable passed to 'setenv' procedure in ::env() array to make it available for later use during the modulefile evaluation. Add 50-cmds/029-setenv-env tests to check this ::env() array change over all evaluation mode. Adapt 50-cmds/350-allin to check this change against 'whatis' mode. Fixes #160 * testsuite/modulefiles.allin/restoreenv/1, testsuite/modulefiles.allin/restoreenv/2, testsuite/modules.50-cmds/360-restoreenv.exp: ts: add 50-cmds/360-restoreenv tests Test all kind of environment change (variable, alias, chdir, xres, puts) in case the evaluation of a modulefile fails: previous environment context should be restored. * modulecmd.tcl.in: Correctly save/restore x-resource env settings Fix typo on x-resource setting array names 2018-04-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add chdir/puts env settings to the per-mod saved env stack Add the g_changeDir, g_stdoutPuts and g_return_text global variable to the saved environment context. Restore stacked value of these variable in case a load failed for instance, like for env and g_Aliases array variable. * testsuite/modulefiles.allin/allin/1, testsuite/modulefiles.allin/allin/2, testsuite/modulefiles.allin/allin/3, testsuite/modulefiles.allin/allin/4, testsuite/modulefiles.allin/allin/5, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/250-x-resource.exp, testsuite/modules.50-cmds/350-allin.exp: ts: add 50-cmds/350-allin tests Gather all Tcl modulefile commands in few modulefiles and test them against all the existing modes. This commit is a record of the current situation where many inconsistencies can be seen especially on descriptive modes where too many commands are evaluated. 2018-04-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Factorize cmd switch in module proc * modulecmd.tcl.in: Treat list-related options within module proc Handle the options related to list commands (list, savelist and avail) within the module procedure instead of the main procedure. Makes possible to pass these options to the module commands when called from a modulefile or scriptfile. * modulecmd.tcl.in: Remove unused show_flags arg on listModules proc And simplify related display option management. * modulecmd.tcl.in: Handle arg list within cmdModuleAvail proc * modulecmd.tcl.in: Add debug msg at the start of module proc 2018-04-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/060-quar.exp, testsuite/install.00-init/070-stderrtty.exp: ts: fix tests where cmd arg separator were missing * testsuite/modulefiles.other/modemptyarg/aliases, testsuite/modulefiles.other/modemptyarg/apropos, testsuite/modulefiles.other/modemptyarg/avail, testsuite/modulefiles.other/modemptyarg/display, testsuite/modulefiles.other/modemptyarg/list, testsuite/modulefiles.other/modemptyarg/load, testsuite/modulefiles.other/modemptyarg/purge, testsuite/modulefiles.other/modemptyarg/reload, testsuite/modulefiles.other/modemptyarg/restore, testsuite/modulefiles.other/modemptyarg/save, testsuite/modulefiles.other/modemptyarg/savelist, testsuite/modulefiles.other/modemptyarg/saverm, testsuite/modulefiles.other/modemptyarg/saveshow, testsuite/modulefiles.other/modemptyarg/source, testsuite/modulefiles.other/modemptyarg/swap, testsuite/modulefiles.other/modemptyarg/swap2, testsuite/modulefiles.other/modemptyarg/test, testsuite/modulefiles.other/modemptyarg/unload, testsuite/modulefiles.other/modemptyarg/unuse, testsuite/modulefiles.other/modemptyarg/use, testsuite/modulefiles.other/modemptyarg/whatis, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/330-source.exp, testsuite/modules.70-maint/190-emptyarg.exp: ts: add 50-cmds/152-module-emptyarg tests Check module commands set in modulefiles with an empty string argument passed to these commands. This is the "within modulefile" counterpart of 70-maint/190-emptyarg which is targetting command-line test. Check the module commands (with their empty string argument) on every existing mode (load, unload, display, help, test and whatis). Reveal many inconsistencies, especially on the descriptive modes (display, help and test), that should be fixed in future commits. 2018-04-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles/modbad/empty, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.90-avail/070-full.exp: ts: empty mod cmd call check in 50/151-module-onlytop * modulecmd.tcl.in: Handle empty cmd name in module proc only 2018-03-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version 4.1.2 * testsuite/modules.10-use/070-unuse.exp, testsuite/modules.50-cmds/140-system.exp, testsuite/modules.80-deep/080-access.exp: testsuite: fix some re tests for special ts dir 2018-03-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/bin/install_test_sh: testsuite: correct IFS setup in install_test_sh for dash The IFS=$';' notation on dash makes $ character part of field separator list. 2018-03-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/bin/install_test_csh, testsuite/install.00-init/080-args.exp, testsuite/modulefiles.other/putsvar: testsuite: add 080-args test to install suite Add install non-regression tests to check handling of arguments passed on the command line of shell langs of passed to the module function on other langs. Test pass of empty string, string containing space, variable reference, espace stuff and so on. Hardwire some test in install_test_csh script to correctly pass single quote to the tested module command. * testsuite/modules.70-maint/120-autoinit.exp: testsuite: adapt 70/120-autoinit tests to recent changes 2018-03-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/006-procs.exp, testsuite/modules.70-maint/120-autoinit.exp: Add '\' to the escape char list for R "Unless it's escaped, \ is interpreted as a special character that identifies sectioning and mark-up macros." [1] Also temporary fix escaping code for 70-maint/120-autoinit tests: no re escaping for R (need re escaping to better cope with lang escaping). [1] https://developer.r-project.org/parseRd.pdf * testsuite/bin/install_test_cmake: testsuite: fix cmake test install script for args >2 * modulecmd.tcl.in: Fix parameter expansion on sh-shells in quar mode Protect "$@" from the 'eval' command added when quarantine mode is activated. 2018-03-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/bin/install_test_cmake, testsuite/bin/install_test_perl, testsuite/bin/install_test_python, testsuite/bin/install_test_r, testsuite/bin/install_test_ruby, testsuite/bin/install_test_tcl: testsuite: check no arg or empty string arg Adapt tests of install suite to be able to call module function with no passed arg if tested command equals to "NOARG". Also adapt these tests to call module with an empty string argument if tested command equals to empty string. * modulecmd.tcl.in: Fix Python module func to accept no arg Adapt module function for Python to accept being called with no argument. * modulecmd.tcl.in: Empty module cmd clears arg list If an empty command name is passed, it is interpreted as "help" command. For more consistency argument list (after command name) is cleared in this situation to always get the general usage message rather triggering the help mode of an arbitrary modulefile. 2018-03-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/bin/install_test_cmake, testsuite/bin/install_test_perl, testsuite/bin/install_test_python, testsuite/bin/install_test_r, testsuite/bin/install_test_ruby, testsuite/bin/install_test_tcl, testsuite/install.00-init/020-module.exp, testsuite/install.00-init/022-module-compat.exp, testsuite/install.00-init/030-options.exp, testsuite/install.00-init/060-quar.exp, testsuite/install.00-init/070-stderrtty.exp: testsuite: separate cmd args with ',' Adapt tests of install suite to use ',' character as argument separator (on same command) for non-pure shell languages (Tcl, Perl, Python, Ruby, Cmake and R). Help to distinguish a separator between args from a whitespace within an arg. * modulecmd.tcl.in: Fix module func parameter expansion on Perl To correctly handle parameter containing whitespace character or empty string parameter. 2018-03-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Fix module func parameter expansion on CMake To correctly handle parameter containing whitespace character or empty elements. For the latter case, command definition must be adapted to the number of args to be able to pass, to some extend (<5 args) empty string element to modulecmd. There is no other way to achieve empty string element argument as empty strings are skipped from ${ARGV}. [1] [1] https://gitlab.kitware.com/cmake/cmake/issues/16341 2018-03-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Fix module func parameter expansion on R To correctly handle parameter containing whitespace character. 2018-03-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Fix module func parameter expansion on Ruby To correctly handle no passed parameter or parameter containing whitespace character. * modulecmd.tcl.in: Fix module func parameter expansion on fish-shell To correctly handle parameter containing whitespace, quote, escape characters. * modulecmd.tcl.in: Fix module func parameter expansion on sh-shells To correctly handle parameter containing whitespace character. 2018-03-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.70-maint/190-emptyarg.exp: testsuite: add 70-maint/190-emptyarg tests Test all module commands called from cmdline with an empty string argument. Move pre-existing empty-string-argument tests in this new test file. 2018-03-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Return empty res if mod name empty on getLoadedMatchingName * modulecmd.tcl.in: Report error if path is empty string on cmdModuleUnuse Like done on cmdModuleUse. * modulecmd.tcl.in: Return empty res if path empty on getAbsolutePath * modulecmd.tcl.in: Raise error if coll name is empty Add check in getCollectionFilename procedure to raise error if passed collection name is an empty string. Makes collection-related commands quit in error if empty collection name is provided (save, restore, saverm, saveshow, is-saved). No collection name provided still activate default collection, thus no error raise. * modulecmd.tcl.in: Fix default arg for cmdModule{Save*,Restore} procs Default collection name set as default 'coll' argument value is 'default'. Change default value of argument, was '', to directly match default collection name. It enables to distinguish between an empty string argument and default argument value. 2018-03-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Fix handling of empty list on Tcl8.4 lreverse proc Was previously returned a list with 1 empty element instead of a list with 0 element. 2018-03-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: No skip of empty arg on cmdModuleHelp Will be handled by getPathToModule procedure, who will raise error on empty module name. * modulecmd.tcl.in, testsuite/modulefiles/module/empty, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.90-avail/070-full.exp: Report error when empty name passed to getPathToModule Triggered with 'module load ""' call in modulefile. Helps to know what is going on. 2018-03-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: testsuite: fake win platform to check path var handling Separator ';' is used instead of ':' on Windows platform. Add a test leveraging siteconfig.tcl-1 to check path variable handling on a fake Windows platform. Set/get default path variable separator with new getPathSeparator procedure. This way, global variable g_def_separator is defined after parsing the siteconfig.tcl. * testsuite/modulefiles/info/shellsexp, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/006-procs.exp, testsuite/modules.50-cmds/076-alias-sub.exp, testsuite/modules.70-maint/120-autoinit.exp: testsuite: add 'cmd' to the test shell list * modulecmd.tcl.in: Improve Windows cmd shell support * modulecmd.tcl.in, testsuite/example/siteconfig.tcl-1, testsuite/mode, testsuite/modules.90-avail/070-full.exp: Fetch terminal width on Windows with 'mode' cmd Add test with fake 'mode' command to run on Linux. 2018-03-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.61-coll/020-savelist.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.90-avail/070-full.exp: testsuite: check stty can change width before tests * testsuite/modules.00-init/006-procs.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/032-prepend.exp, testsuite/modules.50-cmds/040-append.exp: testsuite: fix tests when value contains parenthesis Escape the environment value like modulecmd does when producing shell code. Careful when test is performed in regexp mode. 2018-03-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/022-module-compat.exp, testsuite/install.00-init/030-options.exp: testsuite: adapt install suite for compat on Cygwin * modulecmd.tcl.in: Rewrite if/return tests in return/expr * Makefile, Makefile.inc.in, configure: install: handle modulecmd exe ext on Cygwin Add EXEEXT Makefile variable in configure/Makefile process to append on Cygwin a '.exe' extension to modulecmd binary built. * modulecmd.tcl.in: Remove unneeded dir 'reglob' for Cygwin in findModules As tested, glob on Cygwin does not change symlink involved in $dir so it does not seem useful anymore to 'reglob' $dir on findModules procedure. * modulecmd.tcl.in: Remove unneeded symlink transformation for Cygwin Symlink created on Cygwin does not get an automatic ".lnk" suffix extension. ".lnk" shortcut made on Windows cannot be interpreted as a symlink either on Cygwin or Windows cmd. Tcl will not recognize a directory or a modulefile when looking at these ".lnk" shortcut. Remove the .lnk file name transformation as it is not useful. In addition, 'isWin' returns false on a Cygwin environment as detected platform on this tool equals to 'unix' not 'windows'. 2018-03-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.10-use/080-access.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.20-locate/081-access-rc.exp, testsuite/modules.60-initx/080-access.exp, testsuite/modules.61-coll/080-access.exp, testsuite/modules.80-deep/080-access.exp: testsuite: fix access tests for Cygwin Check file permission can be edited and check a file in a locked directory is readable or not. Adapt access tests depending on these check results. No access test is perfomed if file permission cannot be edited. * testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/050-crossshell.exp: testsuite: adapt install suite for Cygwin * testsuite/bin/install_test_csh: testsuite: fix csh empty string cmp in install_test_csh * testsuite/modules.50-cmds/040-append.exp: testsuite: fix truncated csh test for escaped content 2018-03-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/095-uname.exp: testsuite: fix uname test for Cygwin * testsuite/modules.10-use/030-use.exp: testsuite: use modules-specific vars for tests in 10-use/030-use * configure: install: look for 'make' on Cygwin 2018-03-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/home/.module/.target: Rm uneeded coll name test in cmdModuleSavelist * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: testsuite: test lm accessor in 00-init/120-siteconfig 2018-03-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/180-reload.exp: testsuite: add 'reload' cmd tests in 70-maint * testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.60-initx/020-add.exp, testsuite/modules.60-initx/050-rm.exp, testsuite/modules.70-maint/030-purge.exp, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/055-whatis.exp, testsuite/modules.70-maint/060-apropos.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.90-avail/020-single.exp: testsuite: check command nicknames * modulecmd.tcl.in: Process mod info before any content output on 'list' cmd * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.70-maint/030-purge.exp, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/055-whatis.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/153-is-loaded.exp, testsuite/modules.70-maint/157-info-loaded.exp, testsuite/modules.90-avail/020-single.exp: Detect inconsistent loaded environment state When needing to correlate the information from the LOADEDMODULES and the _LMFILES_ environment variables. Does not affect module commands not requiring correlation of these informations, like whatis/avail. Error raised on load, unload, switch, reload, purge, list, save and restore commands. May affect info-loaded or is-loaded commands if module passed as argument to these command is specified as a full path modulefile. 2018-03-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Set/get accessors for g_loadedModules{,Files} arrays Define set/get accessor procedures to handle the g_loadedModules and g_loadedModuleFiles arrays. Trigger in the get accessors the load of currently defined information in LOADEDMODULES and _LMFILES_ in the two arrays, by calling the cacheCurrentModules procedure. Make this loading procedure perform its work only once by using a global g_lm_info_cached flag. cacheCurrentModules is not called anymore at the start of the modulecmd execution but only once and when needed. 2018-03-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/071-args.exp: Refactor cmd arg nb test in module proc * modulecmd.tcl.in: Refactor command name setup in module proc * modulecmd.tcl.in: Refactor calling level check for cmd in module proc * modulecmd.tcl.in: Resolve module cmd alias/shortcut prior running cmd * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: testsuite: file read w/o err report in 00/120-siteconfig * testsuite/modules.80-deep/080-access.exp: testsuite: test dfl res when sibbling dir locked Add test in 80-deep/080-access to remove access to a modulefile from a sibbling directory than implicit default for this module. Check that implicit default is not impacted by its sibbling change. 2018-03-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.70-maint/030-purge.exp, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/153-is-loaded.exp: Ignore empty path element in _LMFILES_ If _LMFILES_ environment variable contains empty module element (for instance when it equals to '/path/to/mod1::/path/to/mod2'), this empty element is ignored. This way it ensures all elements from the _LMFILES_ variable are non-empty string. Add tests to check module commands against a _LMFILES_ variable containing empty element. * Makefile: install/testsuite: dl nagelfar from alt. location If primary link is not ok. 2018-03-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.70-maint/030-purge.exp, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/153-is-loaded.exp: Ignore empty path element in LOADEDMODULES If LOADEDMODULES environment variable contains empty module element (for instance when it equals to 'mod1::mod2'), this empty element is ignored. This way it ensures all elements from the LOADEDMODULES variable are non-empty string. Add tests to check module commands against a LOADEDMODULES variable containing empty element. * modulecmd.tcl.in, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/055-whatis.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/100-path.exp, testsuite/modules.70-maint/110-paths.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.70-maint/155-is-used.exp, testsuite/modules.90-avail/070-full.exp: Ignore empty path element in MODULEPATH If MODULEPATH environment variable contains empty path element (for instance when it equals to '/path/to/dir1::/path/to/dir2'), this empty element is ignored. This way it ensures all elements from the MODULEPATH variable are non-empty string. Add tests to check module commands against a MODULEPATH variable containing empty element. 2018-03-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst, init/bash.in, init/ksh.in, init/sh.in, init/zsh.in, testsuite/bin/install_test_sh, testsuite/install.00-init/070-stderrtty.exp: init: shield autoinit res from param expansion on sh-shells Quote autoinit result for eval interpretation on SH-kind shells to avoid parameter expansion to randomly occur on generated code depending on file or directory names of current working directory. Test basic module commands in install testsuite with a 'something (test)' file existing in current working directory. Fixes bug reported at [1]. [1] https://bugzilla.redhat.com/show_bug.cgi?id=1549664 * modulecmd.tcl.in: Fix whatis result on empty dir name * modulecmd.tcl.in, testsuite/modulefiles/puts/8, testsuite/modules.50-cmds/310-puts.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.90-avail/070-full.exp: Call real 'puts' command in caller context To be able to 'puts' content on opened channels, the 'puts' command should be executed from the modulefile interpreter context. Elsewhere, master interpreter does not know about the channels opened in its sub-interpreters. Adapt interpreter setup to add a command renaming step, to avoid the puts modulefile alias to overwrite the original puts command. puts modulefile alias now also pass the caller interpreter reference as first argument to be able to execute the original puts command, renamed _puts, within context of this caller interpreter. Handle wrong argument number error in putsModfileCmd to report an error for 'puts' command rather '_puts' which should not be known by users. Add non-regression test to check puts command against opened channel. Fixes #157 2018-02-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/siteconfig.tcl-1, testsuite/modules.50-cmds/130-conflict-full.exp: testsuite: load again conflict test in 50/130-conflict-full * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: testsuite: terse+numbered disp test in 00/120-siteconfig * modulecmd.tcl.in: Rely on elt count in displayElementList Do not check element count before calling displayElementList, rely on element count made by displayElementList procedure to return if no element has to be displayed. * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: testsuite: parseAccessIssue custom msg in 00/120-siteconfig * testsuite/modules.70-maint/120-autoinit.exp: testsuite: MODULE_VERSION set prior autoinit test * modulecmd.tcl.in, testsuite/home/coll7, testsuite/home/coll8, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.61-coll/999-cleanup.exp: Handle full path mod in collection Enable to save and restore collections containing full path modulefiles eventually with no modulepath defined. Valid collection test is changed from 'no modulepath saved' to 'no modulepath AND no loaded module saved'. * modulecmd.tcl.in, testsuite/home/.module/coll6.target, testsuite/modulefiles.path1/novercross, testsuite/modulefiles.path2/novercross, testsuite/modulefiles.path3/novercross, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/020-savelist.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/080-access.exp, testsuite/modules.61-coll/999-cleanup.exp: Rewrite getSimplifiedLoadedModuleList proc Use helper list if it is provided rather than only in case no MODULEPATH is defined. Rework name simplification code to make use of getPathToModule procedure instead of listModules. Loop around as long as parent name matches tested modulefile, so "foo/bar/version" can returned "foo" if "foo/bar/version" is default version of "foo". Add non-regression tests mixing deep and virtual modulefiles whose definitions are spread through multiple modulepaths. Help checking default versions are correctly detected in complex situation. 2018-02-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/home/coll5, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.61-coll/999-cleanup.exp: testsuite: prepended modulepath tests in 61-coll * modulecmd.tcl.in, testsuite/modulefiles/append/6.0, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.90-avail/070-full.exp: testsuite: bad ref counter tests in 50-cmds/040-append * .travis.yml: travis: remove already installed deps on OS X Which led to error when an upgrade is available for an already installed brew package. * testsuite/modules.10-use/030-use.exp: testsuite: test path with extra ./.. in 10-use/030-use * testsuite/example/siteconfig.tcl-1, testsuite/modules.90-avail/070-full.exp, testsuite/stty: testsuite: simulate solaris stty in 90-avail/070-full * modulecmd.tcl.in, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/020-savelist.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/050-saverm.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.61-coll/999-cleanup.exp, testsuite/modules.70-maint/154-is-saved.exp: Check HOME var exists before using in findCollections Add a test for every collection-related commands to check behavior when HOME variable is not defined. * testsuite/modules.10-use/070-unuse.exp: testsuite: unuse with ref>1 in 10-use/070-unuse * testsuite/example/siteconfig.tcl-1, testsuite/modules.90-avail/070-full.exp: testsuite: no flag report test in 90-avail/070-full 2018-02-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/040-list.exp: testsuite: regular output test in 70-maint/040-list * testsuite/modulefiles/system/1.0, testsuite/modules.50-cmds/140-system.exp, testsuite/modules.90-avail/070-full.exp, testsuite/systest0: testsuite: display/exit 0 tests in 50-cmds/140-system * testsuite/modulefiles/append/5.0, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.90-avail/070-full.exp: testsuite: large val append test in 50-cmds/040-append * testsuite/modules.90-avail/070-full.exp: testsuite: small term width test in 90-avail/070-full * testsuite/modules.00-init/010-environ.exp, testsuite/modules.70-maint/170-contact.exp: testsuite: add 70-maint/170-contact test Check error message of a broken modulefile when MODULECONTACT environment variable is set. * modulecmd.tcl.in: Switch over state env vars rather if/elseif 2018-02-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles/loc_sym/alias11, testsuite/modules.20-locate/040-alias.exp, testsuite/modules.90-avail/070-full.exp: testsuite: alias def loop test in 20-locate/040-alias * modulecmd.tcl.in, testsuite/modules.10-use/030-use.exp: testsuite: test modpath var ref in 10-use/030-use * contrib/etc/rc-modulepath: contrib: add example global rc file Ensuring MODULEPATH definition, if found empty or undefined. This configuration helps fixing [1]. [1] https://bugzilla.redhat.com/show_bug.cgi?id=1139165 * testsuite/modulefiles/loc_sym/alias10, testsuite/modules.20-locate/040-alias.exp, testsuite/modules.90-avail/070-full.exp: testsuite: test 'module-info alias' on non-alias mod 2018-02-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles/uname/cache, testsuite/modulefiles/uname/unk, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/070-full.exp: testsuite: add uname tests in 50-cmds/095-uname Check uname internal cache value mechanism and result obtained when an unknown sub-command is passed to uname. * testsuite/modules.00-init/100-pager.exp: testsuite: 'puts stderr' test in 00-init/100-pager Test that stderr output made during modulefile evaluation comes in correct order regarding other debugging information when pager is enabled. 2018-02-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: testsuite: add 120-siteconfig tests in 00-init suite * testsuite/modules.00-init/100-pager.exp: testsuite: check bad cmd set as pager Add tests to 100-pager in 00-init suite to check situation where defined pager command refers to a non-existent file. * testsuite/install.00-init/070-stderrtty.exp: testsuite: check args handling in 070-stderrtty Set a directory with name starting by '$' to check if shell arguments are correctly escaped. Complements #154. * testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/070-stderrtty.exp: testsuite: add 070-stderrtty tests to install suite Check installed Modules version when STDERR channel is attached to a TTY. * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Improve passed args protection on _moduleraw As suggested by @degremont on #154, $@ is better suited than $* when surrounded by double-quotes to escape passed arguments. Improve fix for #154. 2018-02-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml, Makefile, testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/100-pager.exp, testsuite/modules.70-maint/120-autoinit.exp: testsuite/travis: add cases forcing term attach state 2018-02-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/006-procs.exp, testsuite/modules.70-maint/120-autoinit.exp: Change 'global var' to '::var' Work on global variables in procedure with '::var' syntax rather declaring them with 'global' command. Linking global variable to local scope with 'global' command is expensive in terms of performance and only useful if variable is accessed more than 15 times [1]. [1] https://wiki.tcl.tk/1177 2018-02-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: fix typo in v4.1.1 release notes * MIGRATING.rst, NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version 4.1.1 * contrib/rpm/environment-modules.spec.in: rpm: add procps in build requirements As 'ps' is now checked at ./configure time. 2018-02-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst, modulecmd.tcl.in, testsuite/modules.00-init/100-pager.exp: Ignore LESS env var for pager configuration As for the PAGER environment variable, do not consider anymore the LESS environment variable for Modules pager configuration in order to avoid side effects coming from a general pager configuration not compatible with Modules pager handling. Previously when LESS was spotted defined, default paging command options were blanked if default pager was 'less'. With this change, even if LESS environment variable is defined, default paging command options are still taken into account. Adapt doc and tests accordingly. Complements #146 * contrib/rpm/environment-modules.spec.in: rpm: move hostname requirement to compat subpackage As suggested by RH#1545369 [1] [1] https://bugzilla.redhat.com/show_bug.cgi?id=1545369 2018-02-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml: travis: add OS X test cases Cannot install R currently on OS X image (homebrew issue with gcc install). Should be added later on. * modulecmd.tcl.in: Zero tty cols equals cols not found 'stty size' on OS X Travis-CI environment returns '0 0' * modulecmd.tcl.in: Protect args passed to _moduleraw SH function Avoid current working directory content to interfere with the arguments to pass from module to _moduleraw function on SH-kind shells when shell is attached to a terminal. Fixes #154 2018-02-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/Makefile: install: workaround Linux+Make 3.81 '\\\n' issue Was affecting tests on Ubuntu Trusty 2018-02-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/060-quar.exp, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.70-maint/150-append-path.exp, testsuite/modules.70-maint/152-remove-path.exp: DYLD/LD vars cannot be path-updated on OSX if SIP-enabled Path-variable handling is not effective on OSX for DYLD and LD variables in case System Integrity Protection (SIP) id enabled: in this situation these variables are not exported in subshell context, so they appear undefined to modulecmd.tcl. Nullify modshare variable content for the moment, do not print warning message. Adapt the DYLD/LD test cases when running on OSX if SIP is detected enabled. * init/Makefile: install: more portable \n to build init/modulerc That also works on OS X. 2018-02-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/050-crossshell.exp: testsuite: fix sh/ksh sub/cross shell tests on OSX * testsuite/modules.50-cmds/095-uname.exp: testsuite: escape ';' in 'uname -v' res on OSX * configure: install: fix configure script for OSX On Darwin, 'make' is a GNU make, GNU grep is called 'ggrep' and autopoint is installed in a gettext-specific bin directory. * doc/source/module.rst, modulecmd.tcl.in, testsuite/modules.00-init/100-pager.exp: Ignore PAGER env var for pager configuration Do not consider anymore the PAGER environment variable for Modules pager configuration in order to avoid side effects coming from a general pager configuration not compatible with Modules pager handling. This change makes Modules pager implementation moving away from Git pager implementation (which was taken as reference to model configuration behavior of Modules pager). Git is able to withstand any pager configuration, especially to quit pager if content fits in one screen. Not the case with our implementation currently, so it is safer to only take into account pager configuration that is specific to Modules. Adapt doc and tests accordingly. Fixes #146 2018-02-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Start pager only if some text has to be printed Start pager if enabled at first message to print on stderr. No pager is started anymore when nothing need to be outputted on stderr. To achieve that pager setup is split on a configuration and enablement initialization (initPager procedure) and startup (startPager procedure). Split in two procedures is required to report debug messages on pager configuration that will be printed through the started pager. Partially fix #146. * modulecmd.tcl.in: Split report procedures in pre and post init err report Define 2 procedures for reportDebug, reportErrorAndExit and report. First to use before error report being initialized, to bufferize messages. The second one to be used to effectively report messages once error report being initialized. initErrorReport procedure handles the procedure switch by use of 'rename' Tcl command. g_init_errreport variable is removed as the procedure split make it useless. No performance change is observed. 2018-02-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.70-maint/150-append-path.exp, testsuite/modules.70-maint/152-remove-path.exp: Use specific modshare var name for DYLD-specific vars Name modshare variable for DYLD-specific variables MODULES_MODSHARE_<var> rather <var>_modshare to avoid warning messages due to DYLD detecting unknown variables when using _modshare suffix. A getModshareVarName procedure has been created to determine the variable name to use for reference counter variables. Maybe all modshare variables will move to a MODULES_MODSHARE prefix fashion in the future. Fixes #153 * modulecmd.tcl.in, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/045-listlong.exp: Harden list cmd against unexistent mod Check loaded module is found before outputing stats on it. * modulecmd.tcl.in, testsuite/modulefiles/info/isused, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/055-whatis.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/100-path.exp, testsuite/modules.70-maint/110-paths.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.90-avail/070-full.exp: Clean MODULEPATH content before using it Improve getModulePathList procedure to pass each directory element part of the MODULEPATH env variable through getAbsolutePath. Ensure this way each directory has correct form to work with afterward. A 'set_abs' argument is added to getModulePathList procedure, enabled by default, to apply this new cleanup behavior. Not applied for cmdModuleUse and cmdModuleUnuse who will need extra work to detect relative/full paths already set in MODULEPATH. Add bunch of tests to check the various commands when modulepath directory has trailing slash at its end. Fixes #152 2018-02-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/csh.in: init: no call to manpath if MANPATH defined on csh * INSTALL.rst: doc: clarify use of 'gmake' to install on non-Linux * init/csh.in: init: correct switchml def for Solaris pure csh 2018-02-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/040-subshell.exp, testsuite/install.00-init/050-crossshell.exp: testsuite: fix sh sub/cross shell tests on Solaris 2018-02-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/csh.in, testsuite/bin/install_test_csh: init/testsuite: need quotes for eval arg on pure csh 2018-02-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/bin/install_test_csh, testsuite/bin/install_test_fish, testsuite/bin/install_test_sh, testsuite/install.00-init/005-init_ts.exp: testsuite: detect ksh93 if ksh not found Useful on FreeBSD where ksh is not there only ksh93 binary. 2018-02-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/bin/install_test_csh: testsuite: use pure csh syntax in install_test_csh * testsuite/install.00-init/010-environ.exp: testsuite: setup basic locale for install tests * init/Makefile: install: portable newline echo in Makefile * Makefile, Makefile.inc.in, configure, init/Makefile: install: check rmdir '--ignore-fail-on-non-empty' exists * Makefile, Makefile.inc.in, configure: install: check for GNU grep on Solaris * testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/040-subshell.exp, testsuite/install.00-init/050-crossshell.exp: testsuite: fix sh sub/cross shell tests on FreeBSD * init/Makefile: install: fix multi modulepath build in init/modulerc * init/Makefile: install: define a portable \n to build init/modulerc 2018-01-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile.inc.in, configure, init/Makefile, init/bash.in, init/csh.in, init/fish.in, init/ksh.in, init/sh.in, init/zsh.in: install/init: use MANPATH if manpath cmd not there * Makefile, Makefile.inc.in, configure: install: save 'git worktree' avail for Makefile * configure: install: check for 'gmake' cmd on non-Linux systems 2018-01-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * configure, contrib/envml: Use 'env' to start 'bash' in shebang Adapt configure and envml scripts to call bash interpreter through env utility, as bash is not installed under /bin on some systems like FreeBSD. Would be a lot more better if 'configure' script were a /bin/sh script. 2018-01-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.61-coll/020-savelist.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.90-avail/070-full.exp: Specific code to query tty col num on SunOS * testsuite/install.00-init/005-init_ts.exp: testsuite: use tclsh found at configuration time For install testsuite, do not try to find tclsh, use location found at configure time. * configure: install: detect tclsh8.{4,5,6} if no tclsh found Adapt configure script to be able to test multiple variant of a command name. Use that to detect if a version-specific of tclsh is available in case no generic 'tclsh' binary exists. * testsuite/modules.20-locate/043-virtual.exp: testsuite: no illegal dir op on FreeBSD 2018-01-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash.in, init/ksh.in, init/sh.in, init/zsh.in, modulecmd.tcl.in, testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/030-options.exp, testsuite/install.00-init/050-crossshell.exp, testsuite/modules.70-maint/120-autoinit.exp: init: use default value on undef var in sh shells To avoid unbound variables on bash '-eu' mode for instance, use a default value on undefined variable. Adapt SH init scripts and autoinit code. Add 'bash -eu' to the list of tested shells on 'testinstall' suite. Fixes #151 2018-01-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: No local var used in sh shell autoinit code Considering the diversity of ways local variables are handled through the sh-variants ('local' known everywhere except on ksh, 'typeset' known everywhere except on pure-sh, and on some systems the pure-sh is in fact a 'ksh'), no local variables are defined and these variables that should have been local are unset at the beginning and the end. Fixes #147 * init/Makefile: install: portable symlink copy with '-R -P' Make symlink copy portable with 'cp -R -P' (to support SunOS) * configure: install: check automake/aclocal bef. compat configure * init/Makefile: install: 'cp --remove-destination' is not portable Adapt 'cp --remove-destination' into rm + cp commands as the --remove-destination is not understood everywhere (not known on SunOS for instance). 2018-01-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, Makefile.inc.in, configure, doc/Makefile, site.exp.in, testsuite/install.00-init/030-options.exp: install: give ability to install without doc built If no sphinx-build found, warn user but still make it possible to build and install Modules (without the documentation). Enables to install Modules from git repository for test purpose on systems where python-sphinx is not available in regular pakage repositories. * Makefile.inc.in, configure, init/Makefile, init/profile-compat.sh.in, init/profile.sh.in: install: get 'ps' and 'basename' loc in configure Check paths in configure script to detect the location of the 'ps' and 'basename' commands. Then use this found location in profile.sh scripts. First part of #147 is solved here. 2018-01-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Write once all elt list in terse mode * modulecmd.tcl.in, testsuite/modules.70-maint/070-display.exp: Make separator line fit small screen width 2018-01-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/Makefile: doc/Makefile: Use $(MAKE) variable for recursive cmds 2018-01-19 Felix Neumärker <xdch47@posteo.de> * Makefile: Makefile: Use $(MAKE) variable for recursive cmds 2018-01-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version 4.1.0 * MIGRATING.rst: doc: describe v4.1 in MIGRATING 2018-01-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/rpm/environment-modules.spec.in: rpm: add 'less' to build requirements To pass configure step as 'less' is defined as default pager and build enables paging capabilities in module. * modulecmd.tcl.in, testsuite/modulefiles.deep/modvirt/.common, testsuite/modulefiles.deep/modvirt/.modulerc, testsuite/modulefiles.deep/modvirt/dir1/.modulerc, testsuite/modulefiles.path1/dvcross/.base, testsuite/modulefiles.path1/dvcross/.modulerc, testsuite/modulefiles.path2/dvcross/.base, testsuite/modulefiles.path2/dvcross/.modulerc, testsuite/modulefiles.path3/dvcross/.base, testsuite/modulefiles.path3/dvcross/.modulerc, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.80-deep/010-init_ts.exp, testsuite/modules.80-deep/020-load.exp, testsuite/modules.80-deep/021-unload.exp, testsuite/modules.80-deep/022-switch.exp, testsuite/modules.80-deep/030-display.exp, testsuite/modules.80-deep/050-whatis.exp, testsuite/modules.80-deep/080-access.exp, testsuite/modules.80-deep/999-cleanup.exp: Correctly handle deep virtual modules Fix getModules procedure to correctly handle virtual modules when the sub-directories they refer to does not exist on the filesystem. For instance 'modvirt/dir0/sub1/1.0' may be a virtual module defined with module-virtual modvirt/dir0/sub1/1.0 .common in 'modvirt/.modulerc' where modvirt/dir0 and modvirt/dir0/sub1 do not correspond to existing directories on the filesystem. Now getModules will define among its result virtual directory entries to make the deep virtual modules findable when, for instance searching a default version. Add non-regression tests in 20-locate and 80-deep suites for the deep virtual module use-case. 2018-01-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.20-locate/043-virtual.exp: testsuite: less _modshare checks in 043-virtual Simplify test code and protect it from Tcl array to list sorting issue. * NEWS.rst, doc/source/diff_v3_v4.rst, doc/source/modulefile.rst: doc: desc. module-virtual command * testsuite/modulefiles/loc_sym/exec3, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.90-avail/070-full.exp: testsuite: check module-virtual cmd in display mode * doc/source/conf.py, modulecmd.tcl.in: New year copyright mention update * modulecmd.tcl.in, testsuite/modulefiles/loc_virt2/.modulerc, testsuite/modulefiles/loc_virt2/2.0, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.90-avail/070-full.exp: Virtual module target may be loaded as is Adapt similar loaded module detection code and add tests to check behavior when the target of a virtual module is loaded as is and a virtual module targeting it is loaded/unloaded/switched/etc. Also set test cases on module mixing regular and virtual versions, playing with short or full path name representation. * modulecmd.tcl.in, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.50-cmds/170-swap.exp: Update g_loadedModuleFiles arrays in load/unload cmds Update the content of the g_loadedModuleFiles cache array right after loading or unloading a module. Helps subsequent actions to learn the exact current state, especially in case of single command implying multiple actions (switch or load/unload of multiple modules) 2018-01-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.20-locate/043-virtual.exp: Handle _LMFILES_ path var in duplicates mode Multiple loaded virtual modules may target same file so handling of the _LMFILES_ path variable is changed to a 'duplicates' mode to ensure a file entry will always correspond to a module entry in LOADEDMODULES. Adapt entry removal in _LMFILES_ variable to delete the entry at the index corresponding to the index of the entry removed in LOADEDMODULES. Add new test cases to check this duplicate mode entries in all situation where _LMFILES_ content is involved. 2018-01-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles/loc_virt1/.common, testsuite/modulefiles/loc_virt1/.modulerc, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.90-avail/070-full.exp, testsuite/virttargets/loc_virt: testsuite: add module-virtual cmd tests 2018-01-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/etc/rc, testsuite/modulefiles.path1/vcross/.base, testsuite/modulefiles.path1/vcross/.modulerc, testsuite/modulefiles.path2/vcross/.base, testsuite/modulefiles.path2/vcross/.modulerc, testsuite/modulefiles.path3/vcross/.base, testsuite/modulefiles.path3/vcross/.modulerc, testsuite/modulefiles/dirmodvirt/.modulerc, testsuite/modulefiles/dirmodvirt/1.0, testsuite/modulefiles/loc_dvv1/.common, testsuite/modulefiles/loc_dvv1/.modulerc, testsuite/modulefiles/loc_dvv1/.version, testsuite/modulefiles/loc_rcv1/.base, testsuite/modulefiles/loc_rcv1/.common, testsuite/modulefiles/loc_rcv1/.modulerc, testsuite/modulefiles/loc_rcv2/.common, testsuite/modulefiles/loc_rcv2/.modulerc, testsuite/modulefiles/loc_sym/.common, testsuite/modulefiles/loc_sym/alias8, testsuite/modulefiles/loc_sym/alias9, testsuite/modulefiles/loc_sym/getvers10, testsuite/modulefiles/loc_sym/getvers9, testsuite/modulefiles/loc_sym/version24, testsuite/modulefiles/loc_sym/version25, testsuite/modulefiles/loc_sym/version26, testsuite/modules.20-locate/030-defvers.exp, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/040-alias.exp, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.20-locate/046-getsym.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.20-locate/080-access.exp, testsuite/virttargets/loc_rcv: testsuite: add virtual modules location tests 2018-01-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Cache modulefile validity check result Add in checkValidModule procedure a 'g_modfileValid' global array to save validity check result of a modulefile at first query, then reuse this cached result on subsequent queries on same modulefile. * modulecmd.tcl.in: Cache file mtime query results Add 'getFileMtime' to query file modification time. On first call, cache the result then use cache on subsequent calls for the same file. * modulecmd.tcl.in: Find modulepath of virtual module on 'search' cmd Add 'findModulepathFromModulefile' procedure to get the modulepath corresponding to a passed modulefile (or modulerc). Adapt 'search' cmd when looking at module alias target, to correctly handle virtual modules. Modulepath directory is retrieved, when detecting a virtual module, from the modulerc file that has defined this virtual module. * modulecmd.tcl.in: Handle loaded virtual modules on 'list' cmd Introduce 'isModuleVirtual' procedure to detect a module is virtual based on its name and modulefile. A module is stated virtual if its name cannot be found at end of its modulefile name. When looking at loaded modules during a 'list' command, treat specifically virtual modules, almost like full path modules. Tags on loaded virtual module are not search as once loaded we do not know anymore from what modulepath directory the virtual module was coming from. 2018-01-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles/source/1.1, testsuite/modulefiles/source/1.2, testsuite/modules.50-cmds/330-source.exp, testsuite/modules.90-avail/070-full.exp: Treat file relative to cwd in source/unsource So a relative file to source from a modulefile or modulerc, is relative starting from the directory of the modulefile/modulerc sourcing it. Add a specific case to treat empty file name by the way. * modulecmd.tcl.in, testsuite/modules.10-use/030-use.exp, testsuite/modules.50-cmds/015-use.exp: Specific err on cmdModuleUse when empty dir name * modulecmd.tcl.in, testsuite/modulefiles/conflict/relpath, testsuite/modulefiles/info/isused, testsuite/modulefiles/module/relpath, testsuite/modulefiles/prereq/relpath, testsuite/modulefiles/use/4.1, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, .../modules.50-cmds/132-conflict-fullpath.exp, testsuite/modules.50-cmds/150-module.exp: Cwd during interp corresponds to modfile dir Now getAbsolutePath procedure, which make a path passed as argument an absolute path, check the current path of the interpreted modulefile or modulerc rather always taking the current path of the module command execution. So a modulefile or modulerc can use relative paths based on a determistic way as it is now based on their location. Previously it was not possible as relative paths were dependent of the location from where the module command was executed. If ModulesCurrentModulefile variable is not empty, getAbsolutePath nows it is called during a modulefile/modulerc interpretation, so it takes the directory name of this ModulesCurrentModulefile as current working directory. * modulecmd.tcl.in, testsuite/modulefiles/modvar/modfile, testsuite/modulefiles/modvar/submodfile, testsuite/modules.50-cmds/340-modvar.exp, testsuite/modules.90-avail/070-full.exp: Handle ModulesCurrentModulefile in a push/pop fashion Refactor handling of the ModulesCurrentModulefile public global variable to get same treatment like ModuleName with a push/pop mechanism. Then call to the new pushModuleFile and popModuleFile procedures is gathered in the execute-modulefile and execute-modulerc procedures to push filename before interpretation and popping it when interpretation is done. Change is that ModulesCurrentModulefile is reset after interpretation, so when this variable is queried in a master interpretation context it is possible to know if some file is currently being interpreted or not (value restored to the empty string). 2018-01-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Introduce 'module-virtual' modulefile command Introduce the virtual module concept with the 'module-virtual' modulefile command. This new command takes a module name as first argument and a modulefile location as second argument. A virtual module stands for this module name associated to a modulefile. The modulefile is the script interpreted when loading or unloading the virtual module which appears or can be found with its virtual name. Like a module aliases, virtual modules are expected to be defined within modulerc files (at whatever rc level). Virtual modules can be targeted by aliases or symbolic versions. They also compete with aliases and regular modules for the implicit default version of a module. Multiple virtual modules may target the same modulefile, which can distinguish between these various virtual names by use of the "[module-info name]" command. A virtual module cannot be loaded using a full path name (merge of its module path and its module name) as this file does not exist. Based on a proof of concept made by Bert Wesarg [1]. [1] https://github.com/bertwesarg/modules-tcl/commit/545e9f 2018-01-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, modulecmd.tcl.in, testsuite/modulefiles/spread/1.0, testsuite/modulefiles/spread/2.0, testsuite/modulefiles/spread/3.0, testsuite/modulefiles/spread/4.0, testsuite/modulefiles/spread/5.0, testsuite/modulefiles/spread/6.0, testsuite/modulefiles/spread/7.0, testsuite/modulefiles/spread/8.0, testsuite/modulefiles/spreadrc/dir1/.modulerc, testsuite/modulefiles/spreadrc/dir1/1.0, testsuite/modulefiles/spreadrc/dir2/.modulerc, testsuite/modulefiles/spreadrc/dir2/1.0, testsuite/modulefiles/spreadrc/dir3/.modulerc, testsuite/modulefiles/spreadrc/dir3/1.0, testsuite/modulefiles/spreadrc/dir4/.modulerc, testsuite/modulefiles/spreadrc/dir4/1.0, testsuite/modulefiles/spreadrc/dir5/.modulerc, testsuite/modulefiles/spreadrc/dir5/1.0, testsuite/modulefiles/spreadrc/dir6/.modulerc, testsuite/modulefiles/spreadrc/dir6/1.0, testsuite/modulefiles/spreadrc/dir7/.modulerc, testsuite/modulefiles/spreadrc/dir7/1.0, testsuite/modulefiles/spreadrc/dir8/.modulerc, testsuite/modulefiles/spreadrc/dir8/1.0: Correctly handle list var when reset interp When restoring an initial interpreter variable which was a list, issue occured as the 'slave eval set' was given more than one value argument. Passing values enclosed in a 'list' fixes the issue. Improve non-regression tests to ensure expected handling will persist over times. Closes #145 2018-01-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/030-options.exp: testsuite: check modulecmd on compat only if inst. * NEWS.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: desc MODULES_CMD var and modulecmd wrapper * testsuite/install.00-init/030-options.exp: testsuite: check modulecmd in install suite * .gitignore, Makefile, contrib/rpm/environment-modules.spec.in, contrib/scripts/modulecmd.in: install: introduce modulecmd wrapper script Which execute the module command bin corresponding to active flavor. 2018-01-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash.in, init/cmake.in, init/csh.in, init/ksh.in, init/perl.pm.in, init/python.py.in, init/ruby.rb.in, init/sh.in, init/zsh.in, modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Expose current modulecmd with MODULES_CMD env var 2018-01-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, init/cmake.in, modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Fix removal of tmp moduleinit.cmake.XXXXXXXXXXXX * NEWS.rst: doc: dsc versioning, Tcl {} and .modspath parse in NEWS * testsuite/modules.00-init/100-pager.exp: testsuite: esc install path for pager regexp tests 2017-12-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/modulefiles/version.in: install: reinit module code in version modfile Adapt version modulefile, which is deployed in versioning installation mode, to re-initialize module command during its unload, to restore the command of the previously loaded version. Goes through a full re-initialization to overcome incompatible definition of the module command between version 3 and 4. This full re-initialization cannot be attempted on scripting shells, like Perl or Python, as function re-definition is not a common practice on these languages. 2017-12-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_v3_v4.rst: doc: update diff_v3_v4 with 4.1 changes so far * NEWS.rst, doc/source/module.rst: doc: desc. variable ref support in MODULEPATH * testsuite/install.00-init/060-quar.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/132-conflict-fullpath.exp, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.50-cmds/330-source.exp: testsuite: fix regexp-tests not escaping modfile paths * site.exp.in, testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/030-options.exp: testsuite: check versioning-specific modfile install * testsuite/bin/install_test_cmake: testsuite: support 3-arg cmd on cmake test script 2017-12-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, Makefile.inc.in, configure, init/Makefile, site.exp.in: install: add @VERSION@ pattern Introduce the '@VERSION@' pattern, combination of Modules release and build information, for building files to install. Still rely on @MODULES_RELEASE@ and @MODULES_BUILD@ when these information are needed prior to ./configure call (dist-related stuff) or are expected to change after ./configure call (modulecmd.tcl in dev environment). * .travis.yml: travis: enable versioning install on some test cases * Makefile, testsuite/example/.modulespath.in, testsuite/example/modulerc.in, testsuite/modules.00-init/006-procs.exp, testsuite/modules.70-maint/120-autoinit.exp: testsuite/travis: adapt modpath in ex cfg if versioning Adapt defined modulepaths in example testsuite configuration file (modulerc and .modulespath) depending if versioning installation mode is enabled or not. 2017-12-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml, Makefile, testsuite/example/.modulespath-empty: testsuite/travis: add an empty .modulespath example Check behavior when .modulespath exists but does not hold any path to add to MODULEPATH. * modulecmd.tcl.in: Correct parsing of init/.modulespath lines w/o comment * modulecmd.tcl.in: Fix MODULEPATH init when init/.modulespath empty * init/ksh.in: init: change 'string contains' tests for ksh Adapt the 'string contains' tests in ksh init script (used to setup FPATH, PATH and MANPATH without duplicates) to correctly handle paths containing '+' character, which is detected as a pattern-specific character on the '=~' test condition previously used. * INSTALL.rst, configure, init/Makefile, site.exp.in, testsuite/install.00-init/030-options.exp: install: adapt default modpath if versioning set If --enable-versioning configure option is set, default modulepath option is changed from '$prefix/modulefiles' to '$baseprefix/$MODULE_VERSION/modulefiles'. Adapt installation process to handle modulepath containing special '$' character. Adapt also install testsuite to correctly check these modulepaths containing variable references. 2017-12-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/006-procs.exp: Set env var on Tcl with val enclosed in {} Produce environment variable set code for Tcl shell with value enclosed in curly braces {} rather double-quote "". Curly braces are more effective to protect value from interpretation, like if it contains a dollar character. 2017-12-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitignore, INSTALL.rst, Makefile, Makefile.inc.in, configure, contrib/modulefiles/modules.in, contrib/modulefiles/version.in, init/Makefile, modulecmd.tcl.in, site.exp.in, testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.70-maint/120-autoinit.exp: install: deploy MODULE_VERSION and version modfile When --enable-versioning is set at configure time, deploy the setup of the MODULE_VERSION and MODULE_VERSION_STACK environment variables in modulecmd.tcl and in a version-specific modulefile. This version-specific modulefile is deployed in a @baseprefix@/versions modulepath directory, which is also created specifically for versioning installation mode. MODULE_VERSION and MODULE_VERSION_STACK environment variables setup in modulecmd.tcl is commented if versioning installation mode is not enabled rather deleted to guaranty consistency across code coverage tests (same code line numbering whatever the installation options set). version-specific modulefile is a bit different than the one used before <4.0 as now module version is initialized when loading this module by calling the autoinit action on the modulecmd.tcl script. These version-specific modulefiles enable to switch from one module version to another but there is an incompatibility of initialization between Modules 3.2 and Modules >=4. Switching from Modules 3.2 to Modules >4 will be possible, but not going back from >4 to version 3.2. 2017-12-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.95-version/040-xgetenv.exp: Solve env var reference in MODULEPATH Restore the ability of C-version to resolve environment variable reference put in MODULEPATH elements. Path element is registered in MODULEPATH variable with its variable references. When path entry is used, variable references are solved to get real path. Add a 'resolvStringWithEnv' procedure to handle resolution of environment variable references set in string. Re-enable non-regression tests of 95-version suite. 2017-12-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst, configure: install: add --enable-versioning Add '--enable-versioning' configure option to append Modules version to the chosen installation prefix. * init/Makefile: testsuite/travis: fix testconfig removal of etcdir 2017-12-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc. siteconfig.tcl in NEWS * .travis.yml, Makefile, init/Makefile, testsuite/example/siteconfig.tcl: testsuite/travis: add an example siteconfig.tcl Add 'install-testsiteconfig' make target to setup a dummy siteconfig.tcl file in install_etcdir. Link that to some of the travis checks to run testsuite with an existing siteconfig.tcl * modulecmd.tcl.in, testsuite/modules.00-init/100-pager.exp: Transparently bufferize err report before pager init Define a global g_init_errreport flag to know within report or reportErrorAndExit procedure if error reporting has been initialized or not. If not yet initialized, call to output message is saved in a buffer list. A 'initErrorReport' procedure is added to switch 'g_init_errreport' flag and output every messages saved in buffer list. With this change, it is possible to use reportDebug, reportWarning, reportErrorAndExit, etc procedures transparently without having to know if error reporting has been enabled or not. The report procedures can then be used in siteconfig.tcl extension without messing paging output. Regarding reportDebug, g_init_errreport enables to know if call has to be saved since if error report is not initialized, debug mode status is not yet known. 2017-12-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst, Makefile, Makefile.inc.in, configure, doc/Makefile, doc/source/conf.py, doc/source/module.rst, init/Makefile, modulecmd.tcl.in, site.exp.in: Introduce @etcdir@/siteconfig.tcl script Add the possibility to setup a site-specific configuration Tcl script which will be sourced at the start of modulecmd.tcl. This site-specific Tcl script enables to supersede global variable and procedure definition made in modulecmd.tcl. This way local adaptations can be made without editing the modulecmd.tcl script. '--etcdir' configure option is added to specify the location of the site-specific configuration script. * NEWS.rst: doc: desc work on *-path commands in NEWS 2017-12-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Improve getReferenceCountArray proc debug message * modulecmd.tcl.in, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.70-maint/152-remove-path.exp: Always set/unset var when removing path in it Even if no change on variable value, always set (or unset) this variable as its relative counter reference variable is always set (or unset). 2017-12-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst, doc/source/modulefile.rst, init/bash_completion.in, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, testsuite/modulefiles/append/4.1, testsuite/modulefiles/remove/4.0, testsuite/modulefiles/remove/4.1, testsuite/modulefiles/remove/4.2, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.70-maint/150-append-path.exp, testsuite/modules.70-maint/152-remove-path.exp, testsuite/modules.90-avail/070-full.exp: Add --index opt to remove-path Remove path entry in environment variable by passing an index rather a string. String at specified index in content list is removed if coherent with relative reference counter. 2017-12-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst, doc/source/modulefile.rst, init/bash_completion.in, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, testsuite/modulefiles/append/4.0, testsuite/modulefiles/remove/3.0, testsuite/modulefiles/remove/3.1, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.70-maint/150-append-path.exp, testsuite/modules.70-maint/151-prepend-path.exp, testsuite/modules.70-maint/152-remove-path.exp, testsuite/modules.90-avail/070-full.exp: Introduce --duplicates opt to {append,prepend}-path Let the possibility to append or prepend path element entry to a variable even if this entry is already registered into the variable which introduces duplicates element within the variable value. Entries are added with eventual duplication by the use of the --duplicate option on append-path and prepend-path commands. These additions increment the reference counter as usual. Removal of duplicated path entry depends on the reference counter value. Entries are not removed unless reference counter value is lesser than the number of duplicated entries. 2017-12-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst, doc/source/modulefile.rst, modulecmd.tcl.in, testsuite/modulefiles/append/1.7, testsuite/modulefiles/append/2.4, testsuite/modulefiles/prepend/1.9, testsuite/modulefiles/prepend/2.4, testsuite/modulefiles/remove/1.7, testsuite/modulefiles/remove/2.4, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.70-maint/150-append-path.exp, testsuite/modules.70-maint/151-prepend-path.exp, testsuite/modules.70-maint/152-remove-path.exp, testsuite/modules.90-avail/070-full.exp: Pass multi paths in multi strs on {append,prepend,remove}-path Enable append-path, prepend-path and remove-path to receive multiple path value arguments. Add some non-regression tests for modulefile or sub-command cases. Update modulefile.4 and module.1 docs. Closes #141 * doc/source/modulefile.rst, modulecmd.tcl.in, testsuite/modulefiles/append/1.6, testsuite/modulefiles/append/2.3, testsuite/modulefiles/prepend/1.8, testsuite/modulefiles/prepend/2.3, testsuite/modulefiles/remove/1.6, testsuite/modulefiles/remove/2.3, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.70-maint/150-append-path.exp, testsuite/modules.70-maint/151-prepend-path.exp, testsuite/modules.70-maint/152-remove-path.exp, testsuite/modules.90-avail/070-full.exp: Pass multiple paths in 1 str on {append,prepend,remove}-path Detect if path string passed to append-path, prepend-path or remove-path commands is composed of multiple path entries (separated by specified or default delimiter string). In this situation add/remove each path separately to correctly update relative reference counter. Add some non-regression tests for modulefile or sub-command cases. Update modulefile.4 doc. Closes #142 2017-12-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Simplify check of add-path pos arg (prepend/append) If not 'prepend' then it is 'append', no third choice. * modulecmd.tcl.in: Rely on add-path rather append-path internally Do not use append-path, prepend-path, remove-path in internal procedures not to depend on current mode (load or unload). * modulecmd.tcl.in: Improve readability of cmdModuleUse proc * modulecmd.tcl.in, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.70-maint/150-append-path.exp, testsuite/modules.70-maint/151-prepend-path.exp, testsuite/modules.70-maint/152-remove-path.exp: Move path cmd arg parse in {add,unload}-path Move path commands (append-path, prepend-path and remove-path) argument check and parse in internal unload-path and add-path procedures. So it can benefit for both external and internal calls and gather all checks in parsePathCommandArgs. Update all 'unload-path' and 'add-path' calls for new argument order. In addition it is not needed anymore to pass a separator character to these 2 procedures as it set to the default value through parsePathCommandArgs. Adapt non-regression tests. * modulecmd.tcl.in, testsuite/modules.50-cmds/050-prepend.exp: Distinguish cleared var from bare empty path entry Sometimes a variable is cleared by defining it empty instead of unsetting it. This is perticulary the case with LOADEDMODULES which is often set empty in init script to say nothing loaded. So this situation need to be distinguished from a path variable set to an empty path entry. To distinguish both situations, relative reference counter variable is used to check if an empty path entry is registered. * modulecmd.tcl.in, testsuite/modulefiles/prepend/3.0, testsuite/modulefiles/prepend/3.1, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.90-avail/070-full.exp: Fix reference counter handling of empty path entry 2017-12-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles/prepend/1.1, testsuite/modulefiles/prepend/1.6, testsuite/modulefiles/prepend/1.7, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.70-maint/150-append-path.exp, testsuite/modules.70-maint/151-prepend-path.exp, testsuite/modules.70-maint/152-remove-path.exp, testsuite/modules.90-avail/070-full.exp: Add support for --delim=C arg syntax on *-path cmds Closes #140 * modulecmd.tcl.in, testsuite/modulefiles/append/0.5, testsuite/modulefiles/append/1.5, testsuite/modulefiles/prepend/0.5, testsuite/modulefiles/prepend/1.5, testsuite/modulefiles/remove/0.5, testsuite/modulefiles/remove/1.5, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.70-maint/150-append-path.exp, testsuite/modules.70-maint/151-prepend-path.exp, testsuite/modules.70-maint/152-remove-path.exp, testsuite/modules.90-avail/070-full.exp: Check env var name not empty for *-path commands * modulecmd.tcl.in: Catch/report error in cmdModuleResurface and return false 2017-12-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles/append/0.3, testsuite/modulefiles/append/0.4, testsuite/modulefiles/append/1.3, testsuite/modulefiles/append/1.4, testsuite/modulefiles/prepend/0.3, testsuite/modulefiles/prepend/0.4, testsuite/modulefiles/prepend/1.3, testsuite/modulefiles/prepend/1.4, testsuite/modulefiles/remove/0.3, testsuite/modulefiles/remove/0.4, testsuite/modulefiles/remove/1.3, testsuite/modulefiles/remove/1.4, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.70-maint/150-append-path.exp, testsuite/modules.70-maint/151-prepend-path.exp, testsuite/modules.70-maint/152-remove-path.exp, testsuite/modules.90-avail/070-full.exp: Improve {append,prepend,remove}-path arg check Detect missing environment variable name or value when calling append-path, prepend-path or remove-path procedures. Raise error in this situation. Introduce a 'parsePathCommandArgs' to check args for the 3 *-path commands. Add non-regression tests in 050-cmds and 070-maint suites to check bad argument situations. Closes #139 * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/070-command.exp, testsuite/modules.00-init/071-args.exp, testsuite/modules.00-init/090-switches.exp, testsuite/modules.70-maint/020-update.exp: testsuite: set type help message as global var 2017-12-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc coll. pinning and @prefix@/etc/rc in NEWS * .travis.yml, Makefile, init/Makefile, modulecmd.tcl.in, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/065-rcerrs.exp, testsuite/modules.20-locate/081-access-rc.exp: @prefix@/etc/rc does not depend on MODULESHOME anymore Avoid dependency to the MODULESHOME environment variable when looking for the etc/rc global RC file. To define an environment dynamic global RC file the MODULERCFILE variable may be used. By not relying on an environment variable we ensure this etc/rc will always be read, if it exists, whatever the current environment state. Location of this etc/rc is based on @prefix@ defined at configure time which is also the basis for the MODULESHOME value, so this change should not have an impact if MODULESHOME variable were not manipulated afterward. This change is useful when using module through commands resetting the environment like 'sudo' (see RH#1443124, RH#1139165 [1]) module.1 man page is already mentionning @prefix@/etc/rc, no change needed there. Adapt testsuite to provide a way to test the use of a @prefix@/etc/rc file for the whole 'make test' duration, with 'make install-testetcrc'. [1] https://bugzilla.redhat.com/show_bug.cgi?id=1139165 2017-12-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/home/.module/default, testsuite/modules.00-init/010-environ.exp, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.61-coll/999-cleanup.exp: testsuite: check MODULES_COLLECTION_PIN_VERSION 2017-12-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst, modulecmd.tcl.in: Introduce MODULES_COLLECTION_PIN_VERSION Add the ability to always record module name + version even if this version corresponds to the default one. By default, version number is omitted if it corresponds to the implicit or explicitly set default version. If MODULES_COLLECTION_PIN_VERSION environment variable is set to 1, version number is always recorded. When restoring a collection, we do not know for sure if it was saved with pinned versions or not, so module load and unload movements are determined on both simplified or raw module list. Results with less module to load or unload (means with more matches between module lists) are kept. Acknowledgment: this development has been made and funded within the framework of the PRACE Fifth Implementation Phase (PRACE-5IP) project (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's Horizon 2020 research and innovation programme (2014-2020) under grant agreement no. 730913. Closes #89 2017-12-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * configure: install: change git repo clone detection threshold Relative to travis git clone depth increase * .travis.yml: travis: increase git clone depth to catch last tag * NEWS.rst: doc: desc work on full path name modfile in NEWS * testsuite/modules.50-cmds/310-puts.exp: testsuite: fix puts 3-arg bad case test for Tcl<8.6 * testsuite/modulefiles/puts/7, testsuite/modules.50-cmds/310-puts.exp, testsuite/modules.90-avail/070-full.exp: testsuite: add 3-arg bad case test for putsModfileCmd 2017-12-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Full to short name cmp in getLoadedWithClosestName * testsuite/modules.50-cmds/170-swap.exp: testsuite: one name swap with full path modfile 2017-12-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles/conflict/fullpath, .../modules.50-cmds/132-conflict-fullpath.exp, testsuite/modules.90-avail/070-full.exp: testsuite: test conflict will full path modulefile * NEWS.rst: doc: desc unload mode 'module source' in NEWS * testsuite/modulefiles/prereq/fullpath, testsuite/modules.50-cmds/122-prereq-fullpath.exp: testsuite: test prereq will full path modulefile 2017-12-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/030-shells.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.70-maint/153-is-loaded.exp, testsuite/modules.80-deep/021-unload.exp: Correlate mod to already loaded full path mod Check if a passed modulefile correspond to an already loaded full path module (passed as full path name when it was loaded) thank to set modulepath. This is done to detect this modulefile is-loaded, should not be loaded a second time (with a different name) or should be unloaded. Add a 'findModuleNameFromModulefile' procedure to get corresponding modulefile name from a full path name based on currently enabled modulepaths. Adapt 'getLoadedWithClosestName' and 'getLoadedMatchingName' procedures to make use of 'findModuleNameFromModulefile' when a loaded module is detected to be full path. Make cmdModuleLoad use 'getLoadedMatchingName' after 'getPathToModule' to check whether returned module is already loaded or not (checking short or full path name combinations) Add tests on load, unload, swap and is-loaded actions. * doc/source/module.rst: doc: fix info-loaded section layout in module.1 2017-12-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.70-maint/153-is-loaded.exp: Correlate full path mod to already loaded mod Check if a passed full path modulefile correspond to an already loaded module (passed as short name when it was loaded). To detect this full path modulefile is-loaded, should not be loaded a second time (with a different name), should be unloaded. Add tests on load, unload, swap and is-loaded actions. 2017-12-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp: testsuite: new tests to check full path mod support * modulecmd.tcl.in, testsuite/modules.00-init/050-modpath.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp: Modulefile starting with '(.|..)/' are full path Consider modulefile passed with name starting by './' or '../' a full path name modulefile, like those starting by '/'. Convert them to an absolute path after detection to always register full path modulefiles with their absolute path name. Adapt existing full path load and unload tests. Complements #132 * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.20-locate/075-symlink.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp: testsuite: def 'err_file' for 'no such file...' msg 2017-12-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: putsModfileCmd call 'report' to send stderr content To better handle content sent to stderr, which should sometimes go through a pager process, pass it to the 'report' procedure rather calling the real 'puts' command in putsModfileCmd procedure (which acts as the puts command in a modulefile context) * testsuite/bin/install_test_tcl: testsuite: fix install_test_tcl for Tcl8.5 compat * testsuite/modulefiles/source/0.9, testsuite/modulefiles/source/1.0, testsuite/modules.50-cmds/330-source.exp, testsuite/modules.90-avail/070-full.exp: testsuite: check 'module source' when called from modfile * modulecmd.tcl.in: Ensure false is rendered only once If a false statement has already been rendered, do not render it again even if renderFalse procedure is called a second time. Useful in case within a modulefile interpretation a command ends up with a reportErrorAndExit statement, then renderSettings is called. * modulecmd.tcl.in: Handle 'source' command in unload and display mode Report command call in display mode and change source in unsource on unload mode. Also reverse order of script to interpret on unload. Closes #137 2017-12-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/050-modpath.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.20-locate/040-alias.exp, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.20-locate/046-getsym.exp, testsuite/modules.20-locate/047-symerrs.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.50-cmds/010-init_ts.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/020-setenv.exp, testsuite/modules.50-cmds/022-setenv-eschars.exp, testsuite/modules.50-cmds/025-setenv-undo.exp, testsuite/modules.50-cmds/028-setenv-refcount.exp, testsuite/modules.50-cmds/030-unsetenv.exp, testsuite/modules.50-cmds/035-unsetenv-undo.exp, testsuite/modules.50-cmds/036-unsetenv-x.exp, .../modules.50-cmds/038-unsetenv-refcount.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/076-alias-sub.exp, testsuite/modules.50-cmds/077-alias-undo.exp, testsuite/modules.50-cmds/078-refresh.exp, testsuite/modules.50-cmds/080-info-name.exp, testsuite/modules.50-cmds/081-info-user.exp, testsuite/modules.50-cmds/082-info-user-exp.exp, testsuite/modules.50-cmds/086-info-shells.exp, testsuite/modules.50-cmds/087-info-shells-exp.exp, testsuite/modules.50-cmds/088-info-isloaded.exp, testsuite/modules.50-cmds/089-info-type.exp, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/100-loglevel.exp, testsuite/modules.50-cmds/101-badfac.exp, testsuite/modules.50-cmds/105-trace.exp, testsuite/modules.50-cmds/110-verbose.exp, testsuite/modules.50-cmds/115-verbose-msg.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp, testsuite/modules.50-cmds/140-system.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/172-swap-app-delim.exp, testsuite/modules.50-cmds/173-swap-app-delim.exp, testsuite/modules.50-cmds/175-swap2.exp, testsuite/modules.50-cmds/177-swap-prep-delim.exp, testsuite/modules.50-cmds/178-swap-prep-delim.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/195-load-recurs.exp, testsuite/modules.50-cmds/197-load-lots.exp, testsuite/modules.50-cmds/200-break.exp, testsuite/modules.50-cmds/220-continue.exp, testsuite/modules.50-cmds/230-loop.exp, testsuite/modules.50-cmds/240-chdir.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/080-access.exp, testsuite/modules.70-maint/020-update.exp, testsuite/modules.70-maint/030-purge.exp, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/050-whatis-load.exp, testsuite/modules.70-maint/100-path.exp, testsuite/modules.70-maint/110-paths.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.80-deep/010-init_ts.exp, testsuite/modules.80-deep/021-unload.exp, testsuite/modules.91-sort/010-init_ts.exp, testsuite/modules.95-version/010-init_ts.exp, testsuite/modules.95-version/020-load.exp, testsuite/modules.95-version/020-unload.exp, testsuite/modules.95-version/022-load2.exp, testsuite/modules.95-version/022-unload2.exp, testsuite/modules.95-version/040-xgetenv.exp, testsuite/modules.95-version/999-cleanup.exp: testsuite: use 'modpath' rather 'env(MODULEPATH)' * NEWS.rst: doc: desc path/info-loaded/no-arg-case in NEW * doc/source/module.rst, doc/source/modulefile.rst, modulecmd.tcl.in, testsuite/modules.00-init/071-args.exp, testsuite/modules.50-cmds/321-is-used.exp, testsuite/modules.70-maint/155-is-used.exp: Handle no argument case on 'is-used' Returns true when no argument is passed to 'is-used' if any directory is used, whatever it is. Adapt docs and test cases to this new behavior. Acknowledgment: this development has been made and funded within the framework of the PRACE Fifth Implementation Phase (PRACE-5IP) project (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's Horizon 2020 research and innovation programme (2014-2020) under grant agreement no. 730913. Closes #144 * doc/source/module.rst, doc/source/modulefile.rst, modulecmd.tcl.in, testsuite/modules.00-init/071-args.exp, testsuite/modules.50-cmds/320-is-saved.exp, testsuite/modules.70-maint/154-is-saved.exp: Handle no argument case on 'is-saved' Returns true when no argument is passed to 'is-saved' if any collection matching currently set collection target exists whatever this collection is. Adapt docs and test cases to this new behavior. Acknowledgment: this development has been made and funded within the framework of the PRACE Fifth Implementation Phase (PRACE-5IP) project (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's Horizon 2020 research and innovation programme (2014-2020) under grant agreement no. 730913. * modulecmd.tcl.in: Extract findCollections proc from cmdModuleSavelist Add an independent procedure to find all collections saved corresponding to enabled collection target. * doc/source/module.rst, doc/source/modulefile.rst, modulecmd.tcl.in, testsuite/modules.00-init/071-args.exp, testsuite/modules.50-cmds/088-info-isloaded.exp, testsuite/modules.70-maint/153-is-loaded.exp: Handle no argument case on 'is-loaded' Returns true when no argument is passed to 'is-loaded' if any modulefile is loaded, whatever it is. Adapt docs and test cases to this new behavior. Acknowledgment: this development has been made and funded within the framework of the PRACE Fifth Implementation Phase (PRACE-5IP) project (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's Horizon 2020 research and innovation programme (2014-2020) under grant agreement no. 730913. * testsuite/modules.70-maint/153-is-loaded.exp: testsuite: improve coverage for is-loaded sub-cmds * modulecmd.tcl.in: Fix 'is-loaded' to handle list of mods as arg Align behavior on other is-* commands and man-page: return 1 if at least one arg matches, return 0 elsewhere. * modulecmd.tcl.in: Make 'is-loaded' relies on 'getLoadedMatchingName' Add a 'returnfirst' return type to the getLoadedMatchingName procedure then make is-loaded use getLoadedMatchingName rather than redoing it. * testsuite/modulefiles/info/isloaded, testsuite/modules.50-cmds/088-info-isloaded.exp: testsuite: improve coverage of 'is-loaded' tests 2017-11-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/bin/install_test_cmake, testsuite/bin/install_test_perl, testsuite/bin/install_test_python, testsuite/bin/install_test_r, testsuite/bin/install_test_ruby, testsuite/bin/install_test_tcl, testsuite/install.00-init/020-module.exp: testsuite: check info-loaded on install suite Adapt install test scripts to output obtained result text. * modulecmd.tcl.in, testsuite/modules.00-init/006-procs.exp, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.20-locate/075-symlink.exp, testsuite/modules.70-maint/100-path.exp, testsuite/modules.70-maint/110-paths.exp: Returning text sub-cmds always returns text In case of error, message is displayed on stderr but commands will still return text, an empty string. If no result are found, an empty string is also set as returning value. Text is returned as result if 'g_return_text' global variable is defined. It has the priority over error/false/true returns. This way text can always be expected as the returned value of a module sub-command returning text in normal cases. Adapt non-regression test cases for 'path' and 'paths'. * doc/source/module.rst, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, testsuite/modulefiles/modbad/info-loaded, testsuite/modules.00-init/071-args.exp, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.70-maint/157-info-loaded.exp, testsuite/modules.90-avail/070-full.exp: Introduce 'info-loaded' as module sub-command Like for 'is-loaded', register 'module-info loaded' modulefile Tcl command as a module sub-command to make it reachable from the command line. Sub-command is named 'info-loaded' for sake of efficiency (not 'module-info-loaded'). Add the new command to the existing shell completion scripts (bash, tcsh fish, zsh). Document new command in the module.1 man page. Check 'info-loaded' command argument error in 071-args tests of 00-init suite. Test 'module info-loaded' cannot be called from a modulefile with 151-module-onlytop in 50-cmds suite. Add 156-info-loaded tests in 70-maint suite to validate new sub-command. Acknowledgment: this development has been made and funded within the framework of the PRACE Fifth Implementation Phase (PRACE-5IP) project (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's Horizon 2020 research and innovation programme (2014-2020) under grant agreement no. 730913. Closes #3 * doc/source/modulefile.rst, modulecmd.tcl.in, testsuite/modulefiles/info/loaded, testsuite/modules.50-cmds/285-info-loaded.exp, testsuite/modules.90-avail/070-full.exp: Introduce 'module-info loaded' modulefile command Add 'loaded' sub-command to the 'module-info' modulefile Tcl command. This new sub-command returns name of the modules currently loaded corresponding to the name passed as argument. May return multiple modules if passed name matches more than one loaded modules. Document new command in modulefile.4 and test it with a 285-info-loaded tests in 50-cmds suite. Acknowledgment: this development has been made and funded within the framework of the PRACE Fifth Implementation Phase (PRACE-5IP) project (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's Horizon 2020 research and innovation programme (2014-2020) under grant agreement no. 730913. * testsuite/modules.00-init/006-procs.exp: testsuite: remove shell_echo helper proc Not used anymore as tests using shell_echo moved to shell_text. * modulecmd.tcl.in, testsuite/modules.00-init/006-procs.exp, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/038-defcontext.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.20-locate/075-symlink.exp, testsuite/modules.70-maint/110-paths.exp, testsuite/modules.80-deep/068-transitive.exp: Paths sub-commands now returns text Adapt 'paths' module sub-commands to return text result like 'path' sub-command, rather printing text result. 'paths' may return multiple values as a result, so these values are returned as words in a space separated string. Exception made to real shells where each words is returned(printed as it is real shells) separately, like previously done. As a side effect also, if an error occur a 'false' boolean will be returned rather resulting text. Adapt non-regression tests to align 'paths' test on shell_text procedure rather shell_echo. 2017-11-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles/modbad/path, testsuite/modulefiles/modbad/paths, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.90-avail/070-full.exp: 'path' and 'paths' are only avail from command line * modulecmd.tcl.in, testsuite/modules.00-init/006-procs.exp, testsuite/modules.20-locate/038-defcontext.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.70-maint/100-path.exp: Make sub-commands return text rather printing text Introduce renderText procedure to return a text string rather a true/false boolean. On regular shells, it still echoes text, but on scripting languages a string text value is returned. Apply this new mechanism to the 'path' sub-command. Adapt non-regression tests with the new return code for this sub-command. * modulecmd.tcl.in: Change test to detect something has been sent to stdout Test something has been rendered by looking at the settings arrays or lists rather checking stdout channel. (which does not seem to work, as it returns -1. 2017-11-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc is-{saved,used,avail} in NEWS * testsuite/install.00-init/005-init_ts.exp: testsuite: fix sh_family specific install tests Was broken if one sh shell was not installed. * doc/source/module.rst, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, testsuite/modulefiles/modbad/is-avail, testsuite/modules.00-init/071-args.exp, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.70-maint/156-is-avail.exp, testsuite/modules.90-avail/070-full.exp: Introduce 'is-avail' as module sub-command Like for 'append-path', register 'is-avail' modulefile Tcl command as a module sub-command to make it reachable from the command line. Add the new command to the existing shell completion scripts (bash, tcsh fish, zsh). Document new command in the module.1 man page. Check 'is-avail' command argument error in 071-args tests of 00-init suite. Test 'module is-avail' cannot be called from a modulefile with 151-module-onlytop in 50-cmds suite. Add 155-is-avail tests in 70-maint suite to validate new sub-command. Acknowledgment: this development has been made and funded within the framework of the PRACE Fifth Implementation Phase (PRACE-5IP) project (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's Horizon 2020 research and innovation programme (2014-2020) under grant agreement no. 730913. * doc/source/modulefile.rst, modulecmd.tcl.in, testsuite/modulefiles/info/isavail, testsuite/modules.50-cmds/322-is-avail.exp: Add 'is-avail' modulefile command Introduce 'is-avail' modulefile command to check, following the same spirit than 'is-loaded', if any of the passed modulefiles exists in enabled in MODULEPATH. Document new command in modulefile.4 and test it with a 322-is-avail tests in 50-cmds suite. Acknowledgment: this development has been made and funded within the framework of the PRACE Fifth Implementation Phase (PRACE-5IP) project (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's Horizon 2020 research and innovation programme (2014-2020) under grant agreement no. 730913. * doc/source/module.rst, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, testsuite/modulefiles/modbad/is-used, testsuite/modules.00-init/071-args.exp, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.70-maint/155-is-used.exp, testsuite/modules.90-avail/070-full.exp: Introduce 'is-used' as module sub-command Like for 'append-path', register 'is-used' modulefile Tcl command as a module sub-command to make it reachable from the command line. Add the new command to the existing shell completion scripts (bash, tcsh fish, zsh). Document new command in the module.1 man page. Check 'is-used' command argument error in 071-args tests of 00-init suite. Test 'module is-used' cannot be called from a modulefile with 151-module-onlytop in 50-cmds suite. Add 154-is-used tests in 70-maint suite to validate new sub-command. Acknowledgment: this development has been made and funded within the framework of the PRACE Fifth Implementation Phase (PRACE-5IP) project (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's Horizon 2020 research and innovation programme (2014-2020) under grant agreement no. 730913. * doc/source/modulefile.rst, modulecmd.tcl.in, testsuite/modulefiles/info/isused, testsuite/modules.50-cmds/321-is-used.exp: Add 'is-used' modulefile command Introduce 'is-used' modulefile command to check, following the same spirit than 'is-loaded', if any of the passed directories has been enabled in MODULEPATH. Document new command in modulefile.4 and test it with a 321-is-used tests in 50-cmds suite. Acknowledgment: this development has been made and funded within the framework of the PRACE Fifth Implementation Phase (PRACE-5IP) project (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's Horizon 2020 research and innovation programme (2014-2020) under grant agreement no. 730913. 2017-11-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, testsuite/modulefiles/modbad/is-saved, testsuite/modules.00-init/071-args.exp, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.70-maint/154-is-saved.exp, testsuite/modules.90-avail/070-full.exp: Introduce 'is-saved' as module sub-command Like for 'append-path', register 'is-saved' modulefile Tcl command as a module sub-command to make it reachable from the command line. Add the new command to the existing shell completion scripts (bash, tcsh fish, zsh). Document new command in the module.1 man page. Check 'is-saved' command argument error in 071-args tests of 00-init suite. Test 'module is-saved' cannot be called from a modulefile with 151-module-onlytop in 50-cmds suite. Add 154-is-saved tests in 70-maint suite to validate new sub-command. Acknowledgment: this development has been made and funded within the framework of the PRACE Fifth Implementation Phase (PRACE-5IP) project (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's Horizon 2020 research and innovation programme (2014-2020) under grant agreement no. 730913. * doc/source/modulefile.rst, modulecmd.tcl.in, testsuite/modulefiles/info/issaved, testsuite/modules.50-cmds/320-is-saved.exp, testsuite/modules.90-avail/070-full.exp: Add 'is-saved' modulefile command Introduce 'is-saved' modulefile command to check, following the same spirit than 'is-loaded', if any of the passed collections exists. Document new command in modulefile.4 and test it with a 320-is-saved tests in 50-cmds suite. Acknowledgment: this development has been made and funded within the framework of the PRACE Fifth Implementation Phase (PRACE-5IP) project (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's Horizon 2020 research and innovation programme (2014-2020) under grant agreement no. 730913. 2017-11-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/020-module.exp: testsuite: use unk mod to ensure !is-loaded test * NEWS.rst: doc: desc *-path and is-loaded cmds in NEWS * testsuite/bin/install_test_tcl, testsuite/install.00-init/020-module.exp: testsuite: test a command return false in install suite Add tests in install testsuite to check commands returning true or false as result. Use new sub-command 'is-loaded' for test. * doc/source/module.rst, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, testsuite/modulefiles/modbad/is-loaded, testsuite/modules.00-init/071-args.exp, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.70-maint/153-is-loaded.exp, testsuite/modules.90-avail/070-full.exp: Introduce 'is-loaded' as module sub-command Like for 'append-path', register 'is-loaded' modulefile Tcl command as a module sub-command to make it reachable from the command line. Improve 'cmdModuleResurface' procedure to set a global 'g_return_false' flag when 'is-loaded' command returns 0. If 'g_return_false' flag is set shell code rendering will end with a false value returned. Add the new command to the existing shell completion scripts (bash, tcsh fish, zsh). Document new command in the module.1 man page. Check 'is-loaded' command argument error in 071-args tests of 00-init suite. Test 'module is-loaded' cannot be called from a modulefile with 151-module-onlytop in 50-cmds suite. Add 153-is-loaded tests in 70-maint suite to validate new sub-command. Acknowledgment: this development has been made and funded within the framework of the PRACE Fifth Implementation Phase (PRACE-5IP) project (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's Horizon 2020 research and innovation programme (2014-2020) under grant agreement no. 730913. Closes #116 * testsuite/modules.00-init/071-args.exp: testsuite: tests bad arg number for *-path cmds * testsuite/modules.70-maint/150-append-path.exp, testsuite/modules.70-maint/151-prepend-path.exp, testsuite/modules.70-maint/152-remove-path.exp: testsuite: add *-path tests in 70-maint Add 150-append-path, 151-prepend-path and 152-remove-path tests to the 70-maint suite to check these new module sub-command. 2017-11-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles/modbad/append-path, testsuite/modulefiles/modbad/autoinit, testsuite/modulefiles/modbad/foo, testsuite/modulefiles/modbad/help, testsuite/modulefiles/modbad/prepend-path, testsuite/modulefiles/modbad/remove-path, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.90-avail/070-full.exp: testsuite: add 151-module-onlytop in 50-cmds suite Check module sub-commands that cannot be called within modulefile. * doc/source/module.rst, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in: Improve new {append,prepend,remove}-path commands Refactor code to call from the module command line modulefile-specific commands. These commands can only be called from the command line, not when calling 'module' procedure from a modulefile, to avoid any ambiguity. When parsing command line arguments, check context to know if '-d' means '--default' (avail command) or '--delim' (*-path commands). Add the new commands to the existing shell completion scripts (bash, tcsh, fish, zsh). Document new commands in the module.1 man page. Acknowledgment: this development has been made and funded within the framework of the PRACE Fifth Implementation Phase (PRACE-5IP) project (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's Horizon 2020 research and innovation programme (2014-2020) under grant agreement no. 730913. 2017-03-02 Bert Wesarg <bert.wesarg@googlemail.com> * modulecmd.tcl.in: New subcommands to run (prepend|append|remove)-path directly from the command line. 2017-11-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc module function return and stdout spool * modulecmd.tcl.in, testsuite/modulefiles/puts/1, testsuite/modulefiles/puts/2, testsuite/modulefiles/puts/3, testsuite/modulefiles/puts/4, testsuite/modulefiles/puts/5, testsuite/modulefiles/puts/6, testsuite/modules.00-init/006-procs.exp, testsuite/modules.50-cmds/083-info-mode.exp, testsuite/modules.50-cmds/084-info-mode-exp.exp, testsuite/modules.50-cmds/085-info-flags.exp, testsuite/modules.50-cmds/310-puts.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.90-avail/070-full.exp: Spool puts stdout command to render after env changes Supersede 'puts' command to catch content sent to stdout within modulefile in order to postpone content channel send after rendering on stdout the relative environment changes required by the modulefile. By doing so, environment variable set within modulefile will be available when outputing directly command to the stdout channel. A 'putsModfileCmd' procedure is added to catch all 'puts' call in a modulefile interpretation. This procedure analyzes if the puts command targets the stdout channel. If so, command argument is saved in a 'g_stdoutPuts' global list to be then processed during renderSettings. If no, the real puts is called (for stderr send for instance). Add 50-cmds/310-puts non-regression tests to garanty all kind of puts command are well processed. Closes #113 2017-11-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/cmake.in, init/perl.pm.in, init/python.py.in, init/ruby.rb.in: Return dummy true on compat module function Make compatibility module function to always return a value to be able to check function result either new main version or compat version is called. Adapt cmake, perl, python and ruby compat module function to return a true value. Always true is returned as compat version does not handle returning error exit code. * modulecmd.tcl.in, testsuite/install.00-init/020-module.exp, testsuite/modules.00-init/006-procs.exp: Protect sensitive unsetenv on Tcl shell When rendering an unsetenv modulefile command, protect the corresponding "unset env(VAR)" with a 'catch' Tcl command as unset will raise an error if env(VAR) does not exist prior to unset it. * modulecmd.tcl.in, testsuite/modules.00-init/006-procs.exp, testsuite/modules.20-locate/050-locrc.exp: Render 'true' only if something output already Optimize content sent to stdout by only sending 'true' statement if something else was sent before that. Nothing written on stdout means everything is fine and the module function defined for all shells already take that into account, as assigned result status is set to true before calling for modulecmd.tcl. With this change, stdout channel is left empty for sub-commands not outputing shell code like avail, help, ... * modulecmd.tcl.in, testsuite/modules.00-init/006-procs.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.50-cmds/083-info-mode.exp, testsuite/modules.50-cmds/084-info-mode-exp.exp, testsuite/modules.50-cmds/085-info-flags.exp: Align 'true' rendering of sh/csh/fish with other shells When calling for a 'true' statement at the end of shell code rendering, also express a true statement for sh/csh/fish as it is the case for other shells. True statement will also be produced even if something has already been sent to stdout channel. To ensure in all cases that shell code will finish on a true statement if code is correctly generated. 2017-11-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/006-procs.exp, testsuite/modules.70-maint/120-autoinit.exp: Render true/false with a variable assignment Set a local variable on shells to return true or false status, like already done on cmake and python. This way shells treat the return status in the same way. For other shells that cmake and python, it does not change behavior as the variable assignement returns the value assigned, so it still returns a boolean as last rendered operation. 'real' shells are not touched as they already return in all cases a boolean status without any specific assignment. Prior to modulecmd.tcl execution, the variable used for returned status assignement is initialized to 'true'. This way we are sure the variable will always be set and with a default 'true' value we may optimize rendering as no rendering means true. 2017-11-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.70-maint/070-display.exp: Rename renderError/Ok in renderFalse/True * modulecmd.tcl.in, testsuite/modules.00-init/030-shells.exp, testsuite/modules.00-init/071-args.exp, testsuite/modules.00-init/090-switches.exp, testsuite/modules.10-use/080-access.exp, testsuite/modules.10-use/090-bad.exp, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/035-defname.exp, testsuite/modules.20-locate/038-defcontext.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.50-cmds/301-interp-command.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.60-initx/010-list.exp, testsuite/modules.60-initx/020-add.exp, testsuite/modules.60-initx/030-switch.exp, testsuite/modules.60-initx/040-prepend.exp, testsuite/modules.60-initx/050-rm.exp, testsuite/modules.60-initx/060-2nd.exp, testsuite/modules.60-initx/080-access.exp, testsuite/modules.61-coll/020-savelist.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/050-saverm.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.61-coll/080-access.exp, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/043-listno.exp, testsuite/modules.70-maint/045-listlong.exp, testsuite/modules.70-maint/048-listlongno.exp, testsuite/modules.70-maint/056-whatis-nullpath.exp, testsuite/modules.70-maint/060-apropos.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.80-deep/068-transitive.exp, testsuite/modules.80-deep/080-access.exp, testsuite/modules.90-avail/020-single.exp, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/050-long.exp, testsuite/modules.90-avail/060-empty.exp, testsuite/modules.90-avail/070-full.exp, testsuite/modules.91-sort/020-avail.exp: Render 'true' or 'false' at end of all sub-commands Until now some module sub-commands did not finish their run with an ok statement when everything goes well. It was the case for avail, aliases, list, apropos/search/keyword, save*, init* and help (without arg). However when some errors occurred on these commands, they were returning an error statement. To apply same behavior to all commands whatever the result is (error occurred or not) a call to renderSettings is made after all commands which will produce a true or false statement sent to stdout. As a consequence the return value of all module sub-command call can be checked against a true/false value. Even if modulecmd.tcl should now return a true/false statement, keep checks on the intermediate variable required on python and cmake shells to guaranty a false boolean return in case very bad stuff happened within modulecmd.tcl not producing the intermediate variable statement. Adapt all non-reg tests to get correct return code (OK or ERR). Note that when apropos/search/keyword hit a modulefile error when interpreting, it will return a 'false' statement even if result output seem correct (as these kind of error are not hidden to better read obtained result). 2017-11-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/006-procs.exp, testsuite/modules.70-maint/120-autoinit.exp: Rename _mlret var to _mlstatus in autoinit To better distinguish this internal variable from the _mlre variable used for quarantine mechanism. * testsuite/bin/install_test_cmake, testsuite/bin/install_test_perl, testsuite/bin/install_test_python, testsuite/bin/install_test_r, testsuite/bin/install_test_ruby, testsuite/bin/install_test_tcl: testsuite: adapt install scripts to check ret value Adapt tcl, perl, python, ruby, cmake and R install test scripts to check module command result based on new boolean return value system. * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Adapt perl/python/cmake/r autoinit to return status Change module function defined for perl, python, cmake and R, to return the status (true or false) obtained at rendering end. Also drop on perl the carp error handling, to get same error handling for all shells. * modulecmd.tcl.in, testsuite/modules.00-init/006-procs.exp, testsuite/modules.70-maint/070-display.exp: Make shells return 'false' rather raising exception Use an expression for each supported shell to say 'false' when error occurred during modulecmd.tcl process. This was already the behavior for the sh/csh/fish shells but a change is made to the other lang shells where previously an exception was raised in case of error. Moving from a raised exception to a boolean return seem to be more appropriate for the calling scripts, which will not explode anymore each time a modulefile is not found for instance. Boolean return opens the path to a return value check on all supported shells (was only possible on sh/csh/fish before that). Now all shells are aligned with a 'true' value returned in case of success rendering and a 'false' value returned in case of error. * modulecmd.tcl.in, testsuite/modules.00-init/006-procs.exp: Make shells return 'true' when rendering ok Add an expression for each supported shell to say 'true' when code rendering is perfomed and things are ok. A 'renderOk' procedure is added following same principle than 'renderError'. These code additions keep the ability for the rendering to be called from the shell module function or from a direct execution. To achieve that instead of using a 'return true' statement, which would had no meaning outside of a module function, a true statement is expressed. Most of the shells will return the result from the last evaluated statement. For shells not returning result from the last evaluated statement (python, cmake), a variable is set to true. This variable will be used in module function to return the status value. For the sh/csh/fish shells, no code is rendered if something has already been sent to stdout, as in this case the last lines will return 'true' by itself. 2017-11-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/030-shells.exp, testsuite/modules.00-init/080-begenv.exp, testsuite/modules.00-init/090-switches.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/032-prepend.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.20-locate/020-fqual.exp, testsuite/modules.20-locate/030-defvers.exp, testsuite/modules.20-locate/035-defname.exp, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/055-locrcerrs.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/065-rcerrs.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.20-locate/075-symlink.exp, testsuite/modules.50-cmds/083-info-mode.exp, testsuite/modules.50-cmds/084-info-mode-exp.exp, testsuite/modules.50-cmds/085-info-flags.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/260-getenv.exp, testsuite/modules.50-cmds/280-info-specified.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.50-cmds/284-info-others.exp, testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.50-cmds/301-interp-command.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.60-initx/010-list.exp, testsuite/modules.60-initx/020-add.exp, testsuite/modules.60-initx/030-switch.exp, testsuite/modules.60-initx/040-prepend.exp, testsuite/modules.60-initx/050-rm.exp, testsuite/modules.60-initx/060-2nd.exp, testsuite/modules.60-initx/080-access.exp, testsuite/modules.61-coll/020-savelist.exp, testsuite/modules.70-maint/020-update.exp, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/043-listno.exp, testsuite/modules.70-maint/045-listlong.exp, testsuite/modules.70-maint/048-listlongno.exp, testsuite/modules.70-maint/055-whatis.exp, testsuite/modules.70-maint/056-whatis-nullpath.exp, testsuite/modules.70-maint/060-apropos.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.90-avail/020-single.exp, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/050-long.exp, testsuite/modules.90-avail/060-empty.exp, testsuite/modules.90-avail/070-full.exp, testsuite/modules.91-sort/020-avail.exp, testsuite/modules.91-sort/030-whatis.exp: testsuite: check out and err channels for all tests Always use testouterr* procedures to check both stdout and stderr channels output. * modulecmd.tcl.in: Move autoinit code in a renderAutoinit proc Move it out of renderSettings to improve overall readability. * modulecmd.tcl.in: No render struct change during display mode setenv 2017-11-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/006-procs.exp, testsuite/modules.70-maint/120-autoinit.exp: Interpret Tcl rendered code in proc context When using module interface in a Tcl script, previous code was upleveling generated modules code to render environment changes. Now that env array is declared withing proc, eval can be used rather uplevel to render. By the way, if things are ok, do not exec true. Does not have sense in a Tcl script context. 2017-11-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/006-procs.exp: Express true or false on sh/csh/fish with test Use the buildins 'test' function to express true or false value on sh-kind, csh-kind or fish shells rather making a call to an external command (/bin/true and /bin/false). * NEWS.rst, doc/source/module.rst: doc: desc MODULES_SILENT_SHELL_DEBUG in module.1 and NEWS * INSTALL.rst: doc: add --with-quarantine-vars in INSTALL * testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/030-options.exp: testsuite: check MODULES_SILENT_SHELL_DEBUG Simple tests to verify MODULES_SILENT_SHELL_DEBUG environment variable does not break module command. 2017-11-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/010-environ.exp, testsuite/install.00-init/060-quar.exp, testsuite/modulefiles.other/quar, testsuite/modules.00-init/110-quar.exp: testsuite: shield quar tests against cur env * init/bash.in, init/ksh.in, init/sh.in, init/zsh.in, modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Silent sh-shells debug if MODULES_SILENT_SHELL_DEBUG Introduce MODULES_SILENT_SHELL_DEBUG environment variable to silent the xtrace and verbose output on sh-kind shells. When set (means MODULES_SILENT_SHELL_DEBUG=1), current xtrace and verbose flags are saved then these shell properties are disabled. Once execution is finished, saved setup is restored. This mechanism is defined on initialization scripts, at the beginning to silent, at the end to restore defined behavior. It is also defined within the module function following exact same principle. By default, xtrace and verbose shell properties are applied to module function and initialization script if enabled in calling shell script or interactive session. These properties are disabled in module context only if MODULES_SILENT_SHELL_DEBUG is set to '1'. Notice that if xtrace/verbose properties are set, shell code that leads to disable them when MODULES_SILENT_SHELL_DEBUG is set will be outputed as debugging is set during these operations. The mechanism only applies to the SH-shell family. Closes #121 * NEWS.rst: doc: describe quarantine mechanism in NEWS 2017-11-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst: doc: reorder env var in module.1 * doc/source/module.rst: doc: describe quar-related variables in module.1 2017-11-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml: travis: revert array handling of CONFIGURE_OPTS Array set is not understood on travis env setup. Revert to single-quote string set. Just check a simpler quarantine configuration for the moment. * .travis.yml: travis: handle CONFIGURE_OPTS as shell array * .travis.yml: travis: check quarantine configuration in some builds * testsuite/install.00-init/060-quar.exp: testsuite: adapt install suite for quar config Add a specific test in 060-quar in case quarantine has been configured at build time, to check chosen configuration is correctly applied in shells. This test replaces all other quarantine tests, as init script is set with quarantine-related variables and the regular tests cannot supersede that. * contrib/rpm/environment-modules.spec.in: rpm: define LD_LIBRARY_PATH as quarantine var * Makefile.inc.in, configure, init/Makefile, init/bash.in, init/cmake.in, init/fish.in, init/ksh.in, init/perl.pm.in, init/python.py.in, init/r.R.in, init/ruby.rb.in, init/sh.in, init/tcl.in, init/zsh.in, site.exp.in: install: add --with-quarantine-vars Add --with-quarantine-vars configure option to define quarantine mechanism configuration at build time. Value passed to the configure option will be used by Makefile to initialize in the various initialization scripts the MODULES_RUN_QUARANTINE variable and eventual MODULES_RUNENV_<VAR>. * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Use _ml-prefixed var name to return code on sh shells 2017-11-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash.in, init/ksh.in, init/sh.in, init/zsh.in, modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Handle IFS in a sh-compatible way On sh shell like dash, IFS cannot be local var. Also when setting IFS with the "IFS=$' ';" syntax $ character is also added to the IFS value. * testsuite/install.00-init/060-quar.exp, testsuite/modules.00-init/110-quar.exp: testsuite: check quar mech with ' ' and '"' val Adapt quarantine mechanism tests to check variable values containing space and double-quote. Single quote currently leads to issue. Should not be an immediate problem due to the kind of variables and relative values this mechanism will handle (LD_LIBRARY_PATH, LD_PRELOAD, etc). * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Put autoinit code in braces as much as possible Use braces for the different shell autoinit code to avoid special character espacing as much as we can in these complex piece of shell code. In some cases, braces cannot be used: when variable value should be replaced and when a beginning brace does not match a close brace in the same string). * testsuite/install.00-init/060-quar.exp: testsuite: test bad libpath setup in install/060-quar Check fake LD_LIBRARY_PATH setup is taken into account in 060-quar test of install testsuite before running test. Skip test if tclsh does not rise to the bait. 2017-11-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash.in, init/ksh.in, init/sh.in, init/zsh.in, modulecmd.tcl.in, testsuite/install.00-init/060-quar.exp, testsuite/modules.70-maint/120-autoinit.exp: Ensure correct IFS on sh-kind script or func With quarantine mechanism sh-kind init scripts or module function are sensitive to IFS value. If space character is not part of IFS, eval command will not be able to understand command-line string. This commit add code in init scripts and module function to guaranty correct value for IFS. * testsuite/install.00-init/060-quar.exp: testsuite: check runenv in install.00-init/060-quar Add test in 060-quar of install suite to check runtime environment value for quarantine variable are effectively set. Test is made by providing a bad LD_LIBRARY_PATH that will crash all execs. 2017-11-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/r.R.in, modulecmd.tcl.in, testsuite/install.00-init/060-quar.exp, testsuite/modules.70-maint/120-autoinit.exp: Add quarantine mechanism support to r * init/cmake.in, modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Add quarantine mechanism support to cmake * init/ruby.rb.in, modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Add quarantine mechanism support to ruby 2017-11-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/python.py.in, modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Add quarantine mechanism support to python * init/perl.pm.in, modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Add quarantine mechanism support to perl * init/tcl.in, modulecmd.tcl.in, testsuite/install.00-init/060-quar.exp, testsuite/modules.70-maint/120-autoinit.exp: Add quarantine mechanism support to tcl 2017-11-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/fish.in, modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Add quarantine mechanism support to fish * modulecmd.tcl.in, testsuite/install.00-init/060-quar.exp, testsuite/modules.00-init/110-quar.exp: No quarantine mechanism support on CSH-kind shells Tried to make it fit within the 'module' alias, with no success. 'foreach' and nested 'if' do not cope with csh alias. Tests have been adapted to skip csh/tcsh shells. Also MODULES_RUN_QUARANTINE variable is purely ignored if detected shell is from CSH family. 2017-11-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Improve generation of csh autoinit code 2017-11-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash.in, init/ksh.in, init/sh.in, init/zsh.in, modulecmd.tcl.in, testsuite/install.00-init/060-quar.exp, testsuite/modules.00-init/110-quar.exp, testsuite/modules.70-maint/120-autoinit.exp: Improve variable name check in MODULES_RUN_QUARANTINE A variable name cannot start with a [0-9] character. * testsuite/modules.70-maint/120-autoinit.exp: testsuite: fix autoinit test in coverage mode * init/bash.in, init/ksh.in, init/sh.in, init/zsh.in, modulecmd.tcl.in, testsuite/install.00-init/060-quar.exp, testsuite/modules.00-init/110-quar.exp, testsuite/modules.70-maint/120-autoinit.exp: Validate variable names set in MODULES_RUN_QUARANTINE Test that the names of the environment variable defined in MODULES_RUN_QUARANTINE are valid names. Add test in quarantine setup code within init scripts (silent check) and also test in modulecmd.tcl. The latter reports a warning if a bad name is detected. Add a non-regression test in modules.00-init and install.00-init test suites. 2017-11-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/010-environ.exp, testsuite/install.00-init/050-crossshell.exp, testsuite/install.00-init/060-quar.exp: testsuite: add 060-quar to install.00-init suite Check real operation of the quarantine mechanism at the initialization stage and during call of module commands. Setup a fake libtcl .so library to verify quarantine is correctly protecting tclsh at runtime. * init/bash.in, init/ksh.in, init/sh.in, init/zsh.in: init: setup quarantine before autoinit for SH shells As now a call to modulecmd.tcl defines the module function and surrounding initial environment, this execution should also be shield against bad environment with quarantine mechanism. 2017-11-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.other/quar, testsuite/modules.00-init/010-environ.exp, testsuite/modules.00-init/110-quar.exp, testsuite/modules.70-maint/120-autoinit.exp: testsuite: add 110-quar tests in 00-init suite Check handling of environment variables related to the quarantine runtime feature Adapt tests in 70-maint/120-autoinit to new module function code. * modulecmd.tcl.in: Introduce quarantine runtime (sh shells only) Introduce a mechanism set within module function definition to modify modulecmd.tcl runtime environment in order to protect it from side-effect coming from the current user environment definition. For instance, if modulecmd.tcl is installed to work with a tclsh version 8.4 but current environment has enabled a libtcl8.6.so in LD_LIBRARY_PATH, this environment will not be able to run modulecmd.tcl anymore. Quarantine runtime mechanism helps to define a sane LD_LIBRARY_PATH value which will be set for modulecmd.tcl to guaranty correct operations. The mechanism is piloted by environment variables. First of all MODULES_RUN_QUARANTINE, a space-separated list of environment variable names. Every variable found in MODULES_RUN_QUARANTINE will be set in quarantine during the modulecmd.tcl runtime. Their value will be set empty or set to the value of the corresponding MODULES_RUNENV_<VAR> environment variable if defined. The initial value these variables have will be passed to modulecmd.tcl via the '<VAR>_modquar' variable. Then once modulecmd.tcl is started it restores <VAR> to the content found in <VAR>_modquar (its original value). This commit adds the feature for the SH-kind shells only (sh, bash, ksh and zsh). Some complex shell code was required to distinguish an unset variable from a variable set empty: `eval 'echo ${'$var'+x}'`. Code is also slightly different for sh shell than other sh-kind shells due to a different supported syntax to define local variable. No 'typeset' builtin is found on a pure sh shell, like dash. 'ksh' on its side does not understand 'local' builtin. So code for 'sh' shell uses 'local' builtin and other sh-kind shells use 'typeset'. Zsh code has a difference compared to the other sh shells, as word splitting need to be explicitly enabled with a '${=var}' syntax. Space is used as variable name separator in MODULES_RUN_QUARANTINE variable, as it is the most convenient separator to work with in SH-kind shells (no need to adapt IFS). * site.exp.in, testsuite/modules.70-maint/120-autoinit.exp: testsuite: add 'install_tclsh' var in site.exp 2017-11-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/Makefile: install: fix use of ifeq/wildcard in Makefile Prefer 'rmdir --ignore-fail-on-non-empty' which is evaluated at runtime. ifeq is evaluated at Makefile read. * doc/source/conf.py: Fix no branch name for version release on RTD builds * Makefile, doc/source/conf.py: Correct version release tag in Makefile and Sphinx * INSTALL.rst, NEWS.rst: doc: describe pager support in NEWS * .travis.yml: travis: test various pager configure setup * modulecmd.tcl.in: A 'cat' pager value set in script means disabling * modulecmd.tcl.in: --paginate enables paging only not disabled from script * modulecmd.tcl.in: Detect use of less/cat pager even if set as full path 2017-10-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst, Makefile, Makefile.inc.in, configure, contrib/rpm/environment-modules.spec.in, modulecmd.tcl.in, site.exp.in, testsuite/modules.00-init/100-pager.exp: install: add --with-pager and --with-pager-opts Add --with-pager and --with-pager-opts configure options to choose at build time pager setup. * modulecmd.tcl.in: Remove g_use_pager, redundant with g_pager Set g_pager to the empty value to disable message output paging by default. 2017-10-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.00-init/100-pager.exp: testsuite: add 100-pager tests in 00-init suite Check handling of options related to pager feature. 2017-10-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add '-K' option to less pager Quit less pager on interupt (^C typed) instead of trapping it. As module is set as a shell function, SIGINT signal is first send to this function and its underlying children (modulecmd + less pager). If less trap this interput it will remain alone after end of module function and modulecmd process, but not in direct interaction with terminal. So it seems preferable to end pager at the same time its parent process vanish. Without option '-K', less continues until reading all its remaining stdin buffer. An alternative would be to trap signal within modulecmd, but it implies using the TclX extension to get access to the 'signal' procedure. Moreover, after effect will quite be the same, as shell function is terminated and remaining processed are not in direct interaction with terminal. For the record, trapping signal in modulecmd makes this process able to finish right after the pager command. Procedure designated to trap signal will be run once currently blocking IO is processed. Then close of pipe descriptor will finished once pager finish in turns to process it remaining stdin buffer. Instead of using TclX, Expect extension may be used to trap signal but with exact same handling behavior than TclX. Another lead would be to trap/untrap signal within shell function, but signal is then completely ignored. * modulecmd.tcl.in: Increase pager fd buffer size to 64k More aligned with the buffer size 'less' is setting-up. Should be sufficent to handle most kind of output content in one pass. * modulecmd.tcl.in: Handle case when pager is ended (killed or quit) Catch cases when pager is ended before all messages are reported to it ('q' pressed or process killed). Error raised from 'puts' call are ignored with 'catch'. As we handle here informational messages, do not end the full modulecmd process when message channel is dead. Also protect pager fd operations in cleanupAndExit, in case pipe is not operational anymore. 2017-10-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Fetch tty cols only if needed via getTtyColumns proc * modulecmd.tcl.in: Report release nb & info via reportVersion proc * modulecmd.tcl.in: Report usage message in a single output call * modulecmd.tcl.in: Enable pager during first report call Instead of always setting-up pager if enabled, configure and start it only if reporting message. This way, module commands not reporting anything will not got the overhead of the pager setup. 2017-10-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst, modulecmd.tcl.in: Introduce pager support Paginate stderr output into paging command, using 'less' by default, following the same fashion and behavior than 'git' command. Pager is enabled by default in modulecmd script. New global variables 'g_use_pager', 'g_pager' and 'g_pager_opts' control default behavior of module command. Pager is enabled only if stderr stream is attached to a terminal. Pager setup can then be superseeded by environment variables. If LESS variable is set and paging command is set to 'less', default pager options are cleared to use those defined in LESS variable. If MODULES_PAGER variable is defined, its value superseeds paging activation, command and options. If this variable is empty, paging is disabled. If PAGER variable is defined and MODULES_PAGER is unset, PAGER value superseeds paging activation, command and options. If this variable is empty, paging is disabled. Default behavior and MODULES_PAGER or PAGER environment variables can be superseeded by command-line options: --paginate to enable paging and --no-pager to disable it. When pager is enabled, a pipe file descripted is ignited to the paging command and option for stderr stream. Once set, this file descriptor is used by all report procedures to output message content, rather using stderr. modulecmd command-line parse has been revised not to output message during argument treatment. Debug, warning and error messages are saved to then be displayed once pager setup is achieved. An 'initPager' procedure is introduced to configure then start paging. A 'cleanupAndExit' is added to close pager before exiting if pager has been started. 2017-10-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: describe work around autoinit command in NEWS * .gitignore, .travis.yml, Makefile, init/Makefile, .../example/{.modulespath => .modulespath.in}, testsuite/example/{modulerc => modulerc.in}, testsuite/modules.70-maint/120-autoinit.exp: testsuite/travis: rework tests with ex. init config Use make for test config setup rather direct commands in travis configuration. 2017-10-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml: travis: fix install/cmake/R issues * testsuite/install.00-init/010-environ.exp: testsuite: fix bash func cleaning in install suite * modulecmd.tcl.in, testsuite/install.00-init/020-module.exp, testsuite/modules.00-init/006-procs.exp, testsuite/modules.70-maint/120-autoinit.exp: Same kind of error raise code for Tcl than other langs In case of error, an error exit code will be returned (1 instead of 0). * .travis.yml: travis: add other lang pkgs for testinstall 2017-10-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Remove extra newline on Perl autoinit code * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Messages should go to stderr on Tcl autoinit code 2017-10-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/bin/install_test_cmake, testsuite/bin/install_test_perl, testsuite/bin/install_test_python, testsuite/bin/install_test_r, testsuite/bin/install_test_ruby, testsuite/bin/install_test_tcl, testsuite/config/unix.exp, testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/020-module.exp, testsuite/install.00-init/022-module-compat.exp, testsuite/install.00-init/030-options.exp: testsuite: check all langs in install testsuite * init/Makefile: install: skip initdir rmdir if not empty on uninstall 2017-10-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml, testsuite/example/.modulespath, testsuite/example/modulerc, testsuite/modules.70-maint/120-autoinit.exp: testsuite: check various autoinit setup Add example modulerc and .modulespath configuration and test autoinit behavior when these examples are installed in init directory. * modulecmd.tcl.in: Deprecated @prefix@/modulerc in autoinit Keep behavior of init script where only one modulerc file is sourced if it exists (in @initdir@). 2017-10-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash.in, init/cmake.in, init/csh.in, init/fish.in, init/ksh.in, init/perl.pm.in, init/python.py.in, init/r.R.in, init/ruby.rb.in, init/sh.in, init/tcl.in, init/zsh.in: init: shell scripts now rely on autoinit command Make use of autoinit module command to initialize module command and its initial surrounding environment (default value for MODULESHOME, MODULEPATH, LOADEDMODULES and parse of init/.modulespath). Then if compatibility version is currently activated redefined the module command to point to the compat binary. But the compat version will benefit from the surrounding environment initialization made by autoinit. With this change, activated compatibility version will also get its environment initialized by the init/modulerc file whereas before this change only the main version was affected by this setup file. * modulecmd.tcl.in, site.exp.in, testsuite/modules.70-maint/120-autoinit.exp: Use configure tags to set dir locations in autoinit Define in autoinit command the value of MODULESHOME based on @prefix@ configure tag and initialization directory based on @initdir@ rather guessing them from modulecmd.tcl location. Same location approach that initialization scripts this way. 2017-10-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, modulecmd.tcl.in: Parse init/.modulespath in autoinit Parse init/.modulespath like done in initialization script. Call cmdModuleUse for each path entry. This way, relative paths are solved before being registered in MODULEPATH variable. Now reference counter for MODULESPATH is also set when enabling the configured paths. * modulecmd.tcl.in: Define empty MODULEPATH/LOADEDMODULES in autoinit If not previously defined, set an empty MODULEPATH and LOADEDMODULES like done in init script. Do not source modulerc scripts if MODULEPATH or LOADEDMODULES are non-empty. * modulecmd.tcl.in: Define autoinit surrounding env vars in cmdModuleAutoinit Rather in renderSettings where only the module command is defined depending of current shell. Enables to make use of 'setenv' to define surrounding variables like MODULESHOME and call to 'module source' before the rendering stage. * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Make autoinit shell code fit init script definitions Use contribution from Thomas Zeiser for CSH autoinit code (Thomas Zeiser). 2017-10-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Produce redirect function code on autoinit for sh/fish Integrate the generation of the _moduleraw function on sh-kind and fish shells when calling 'autoinit' command. As for initialization scripts, stderr output redirection is set when a terminal is attached to stderr channel. A 'isATty' procedure is introduced to detect terminal attachement. 2017-10-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash.in, init/fish.in, init/ksh.in, init/sh.in, init/zsh.in: init: redirect stderr msg on stdout if terminal Change from previous behavior where redirection were set if shell was interactive. With this change, a 'sh script' command launched from a terminal session will setup module stderr redirection whereas previously it was not the case as script was not ran in interactive mode. Shell interactive mode is useful to know that interaction will occur on stdin (interesting for completion setup). Knowing session is attached to a terminal seems to be the good pivot to adapt stdout or stderr functioning (help to determine if PAGER mode can be enabled or not on 'git') 2017-10-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version 4.0.0 2017-10-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/index.rst: doc: add intro and refine toc of index page * configure: travis: fix full git repo detection in configure * .travis.yml: travis: increase git clone depth to catch last tag * contrib/rpm/environment-modules.spec.in: rpm: add 'modules-tcl' provides for auto-upgrade When a previous 'modules-tcl' package is installed, the new 'environment-modules' package will automatically be found as an upgrade candidate. * NEWS.rst: doc: reference last additions for v4.0 to NEWS * INSTALL.rst: doc: describe compat version requirements in INSTALL * README.md: doc: add 'Transition from v3.2' section in README * INSTALL.rst, README.md: doc: describe sphinx requirement at install time 2017-10-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, contrib/doc2www, www/.htaccess, www/Makefile, www/c/INSTALL.html, www/c/NEWS.html, www/c/README.html, www/c/module.html, www/c/modulefile.html, www/index.html, www/modules.css: www: remove website content Website content is simplified now docs are built with sphinx and hosted on Read The Docs. Remaining website content is moved from master branch to gh-pages branch. * .travis.yml: travis: fix manpath install on centos6 container * INSTALL.rst, MIGRATING.rst, NEWS.rst: doc: fix typo and layout in INSTALL/MIGRATING/NEWS * .gitattributes, .gitignore, Makefile, NEWS, NEWS.rst, contrib/rpm/environment-modules.spec.in, doc/Makefile, doc/source/NEWS.rst, doc/source/index.rst: doc: migrate NEWS doc from TXT to RST * .gitattributes, .gitignore, INSTALL.rst, INSTALL.txt, Makefile, doc/Makefile, doc/source/INSTALL.rst, doc/source/index.rst: doc: migrate INSTALL doc from TXT to RST 2017-10-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitattributes, .gitignore, MIGRATING.md => MIGRATING.rst, Makefile, contrib/rpm/environment-modules.spec.in, doc/Makefile, doc/source/MIGRATING.rst, doc/source/index.rst: doc: migrate MIGRATING doc from MD to RST To integrate it into sphinx process and make it available on the Web. * doc/source/conf.py: doc: define sphinx required minimal version in conf 2017-10-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * www/index.html: www: reshape index for new project structure Put download, docs and community information right after introduction section. Simplify content and link to Read The Docs for documentation material. 2017-10-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/030-options.exp: testsuite: fix utilities install test on csh shells * doc/source/module.rst, doc/source/modulefile.rst: doc: detail path variable elt counter in man-pages * MIGRATING.md, doc/source/diff_v3_v4.rst: doc: mention output redirection in migrate and diff 2017-10-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * site.exp.in, testsuite/install.00-init/022-module-compat.exp, testsuite/install.00-init/030-options.exp: testsuite: test compat version installation * .travis.yml: travis: add 'make srpm' test on centos * doc/Makefile: install: use rm rather sphinx to clean built docs 2017-10-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/rpm/environment-modules.spec.in: rpm: fix diff doc location in spec * testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/030-options.exp, testsuite/modules.00-init/006-procs.exp, testsuite/modules.00-init/050-modpath.exp, testsuite/modules.00-init/090-switches.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/032-prepend.exp, testsuite/modules.20-locate/010-init_ts.exp, testsuite/modules.20-locate/020-fqual.exp, testsuite/modules.20-locate/030-defvers.exp, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/035-defname.exp, testsuite/modules.20-locate/038-defcontext.exp, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/055-locrcerrs.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.20-locate/075-symlink.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.20-locate/095-cleanup.exp, testsuite/modules.50-cmds/083-info-mode.exp, testsuite/modules.50-cmds/084-info-mode-exp.exp, testsuite/modules.50-cmds/085-info-flags.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/250-x-resource.exp, testsuite/modules.50-cmds/260-getenv.exp, testsuite/modules.50-cmds/280-info-specified.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.50-cmds/284-info-others.exp, testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.50-cmds/301-interp-command.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.61-coll/080-access.exp, testsuite/modules.61-coll/999-cleanup.exp, testsuite/modules.70-maint/045-listlong.exp, testsuite/modules.70-maint/055-whatis.exp, testsuite/modules.70-maint/060-apropos.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.70-maint/140-multiargs.exp, testsuite/modules.80-deep/010-init_ts.exp, testsuite/modules.80-deep/030-display.exp, testsuite/modules.80-deep/050-whatis.exp, testsuite/modules.80-deep/068-transitive.exp, testsuite/modules.80-deep/080-access.exp, testsuite/modules.80-deep/999-cleanup.exp, testsuite/modules.90-avail/020-single.exp, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/050-long.exp, testsuite/modules.90-avail/070-full.exp, testsuite/modules.91-sort/010-init_ts.exp, testsuite/modules.91-sort/020-avail.exp, testsuite/modules.91-sort/030-whatis.exp, testsuite/modules.91-sort/999-cleanup.exp: testsuite: re modpath string if regexp test Transform modulepath for regexp enabled tests (escape characters having a meaning in regexp like '+') * testsuite/modules.00-init/006-procs.exp, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.20-locate/075-symlink.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.80-deep/022-switch.exp: testsuite: pass err number on shell_err Migrate some ERR test cases to a non '_re' test if they do not require regexp. * testsuite/modules.00-init/006-procs.exp, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/040-alias.exp, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.20-locate/046-getsym.exp, testsuite/modules.20-locate/047-symerrs.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/065-rcerrs.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.20-locate/075-symlink.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/020-setenv.exp, testsuite/modules.50-cmds/030-unsetenv.exp, testsuite/modules.50-cmds/036-unsetenv-x.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/086-info-shells.exp, testsuite/modules.50-cmds/087-info-shells-exp.exp, testsuite/modules.50-cmds/089-info-type.exp, testsuite/modules.50-cmds/101-badfac.exp, testsuite/modules.50-cmds/131-conflict-module.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/230-loop.exp, testsuite/modules.50-cmds/284-info-others.exp, testsuite/modules.80-deep/021-unload.exp, testsuite/modules.80-deep/068-transitive.exp, testsuite/modules.91-sort/040-load.exp, testsuite/modules.95-version/040-xgetenv.exp: testsuite: no _re tests if regexp not needed * .gitattributes, .gitignore, Makefile, ...nt-modules.spec => environment-modules.spec.in}: install: genereate RPM spec to ajust source0 and release 2017-10-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/FAQ.rst, doc/source/index.rst: doc: add FAQ imported from SF wiki * www/.htaccess: www: add .htaccess file to redirect some docs to RTD * INSTALL.txt, Makefile, configure, contrib/rpm/environment-modules.spec, doc/Makefile, init/Makefile: install: use sed rather perl for substitutions Use sed instead of perl in configure and Makefile scripts as perl is not required anymore to build documentation. sed is a lighter requirement to build and install software. * README.md: doc: mention RTD in README * Makefile, doc/source/conf.py: install: no mention of master git branch in vers num * Makefile, doc/Makefile: install: broader usage of makefile translate-in-script * doc/Makefile: install: rm doc BUILD_DIR if exists only 2017-10-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitignore, .travis.yml, INSTALL.txt, Makefile, Makefile.inc.in, README.md, configure, contrib/rpm/environment-modules.spec, doc/Makefile, doc/html/common.css, doc/source/version.py.in: install: adapt doc build process to sphinx Change makefile to build doc with sphinx rather pod. Docs are now pregenerated in dist-tarball, to avoid requiring documentation build tool when installing from these dist-tarball. Adapt travis conf & RPM spec file to the new documentation build process. 2017-10-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/conf.py, doc/source/index.rst: doc: introduce sphinx configuration To build existing manpages and diff_v3_v4 document. 2017-10-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_v3_v4.pod, doc/source/diff_v3_v4.rst, doc/source/module.pod.in, doc/source/module.rst, doc/source/modulefile.pod, doc/source/modulefile.rst: doc: migrate from pod to rst Transform source documents from POD format to reStructuredText to then benefit from Sphinx documentation framework and Read The Docs publishing capabilities. 2017-09-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/Makefile: install: set manpage date to modules build date * modulecmd.tcl.in: Remove license information on help/usage message * doc/Makefile: install: make doc only install man and txt No install of HTML files, so no need to build them at make install. * .gitattributes, .gitignore, Makefile, doc/Makefile, init/Makefile, modulecmd.tcl.in, version.inc.in: install: handle version number through git tags Introduce a version.inc file sourced by Makefiles, that holds release number and build information. Makefiles use these information to set correct version number in manpages and modulecmd.tcl script. version.inc is present in dist tarball. This file is generated from version.inc.in file by main Makefile when working in git repository. Release information are retrieved from the tags of the git repository. Release number corresponds to last git tag set. Build number is the result of the 'git describe' command: this information helps to know from what git branch and commit the current build is made of. 2017-09-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/rpm/environment-modules.spec: rpm: add version to modules-tcl Obsoletes statement Comply with: https://fedoraproject.org/wiki/Packaging:G uidelines#Renaming.2FReplacing_Existing_Packages Thanks to Aurelien Degremont for spotting this. Fixes #133 * doc/source/module.pod.in: doc: add EXIT STATUS section in module.1 * MIGRATING.md, doc/source/diff_v3_v4.pod: doc: describe modulefiles hiding feature In MIGRATING guide and diff reference doc. * testsuite/modules.50-cmds/180-unload.exp: testsuite: test unload of full pathname modulefile Add test in 180-unload of 50-cmds suite to check a loaded module specified as full pathname correctly unloads. 2017-09-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/045-listlong.exp: Fix 'list' when full path mod is loaded When a modulefile has been loaded using its full file path name, not its name relative to a modulepath, skip property search on 'list' command. Previously the property search applied to full path module were checking the whole current path tree to find modulefiles. Introduces a isModuleFullPath procedure to help determine a given module name is specified as a full pathname or not. Add tests to 70-maint suite to check 'module list' behavior with full path name loaded modules. Fixes #132 * MIGRATING.md: doc: link to v4.0 closed issues in MIGRATING 2017-09-28 ebagrenrut <ebagrenrut@gmail.com> * contrib/rpm/environment-modules.spec: contrib/rpm/environment-modules.spec: Now Obsoletes: modules-tcl. Results in modules-tcl being removed by yum when environment-modules is installed. 2017-09-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles/prereq/orlist, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.90-avail/070-full.exp: testsuite: add OR-list test for prereq Ensure correct error message report in case of OR-list of prereq. Clarifies #79 and #123. 2017-09-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.path1/fodcross/2.7.13/sub-13, testsuite/modulefiles.path2/fodcross/2.7.13, testsuite/modules.20-locate/069-cross.exp: testsuite: mod corresp. to file or dir in diff modpath Add location test for modulefiles spread in different modulepath directories where modulefile name corresponds to a file in one modulepath and corresponds to a directory in another modulepath. Ensure correct support for #63. * doc/source/diff_v3_v4.pod, doc/source/module.pod.in: doc: avail/apropos/whatis support glob patterns * MIGRATING.md, doc/source/diff_v3_v4.pod: doc: clarify submod unload during switch command 2017-09-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitignore, Makefile: install: add dist-tar, dist-gzip and dist-bzip2 targets Add dist tarball variants to provide dist-bzip2 file required by RPM spec file. Source RPM can now be built with either: $ make srpm or $ make dist-bzip2 $ rpmbuild -ts modules-*.tar.bz2 Fixes #129 * contrib/rpm/environment-modules.spec, contrib/scripts/createmodule.py, contrib/scripts/createmodule.sh: contrib: import createmodule.{sh,py} scripts These scripts developed by Orion E. Poplawski are referenced by the environment-modules.spec file. Include them in repository to be able to generate RPM from the tarball. Fixes #130 2017-09-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, contrib/rpm/environment-modules.spec, doc/Makefile, init/Makefile, modulecmd.tcl.in, testsuite/install.00-init/020-module.exp, testsuite/install.00-init/025-autoinit.exp, testsuite/install.00-init/040-subshell.exp, testsuite/install.00-init/050-crossshell.exp, testsuite/modules.00-init/015-version.exp: Release of version 4.0.0-beta Adapt testsuite to take new release name in account. 2017-09-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitignore, NEWS, contrib/rpm/environment-modules.spec, doc/Makefile, doc/source/{diff_with_c-version.pod => diff_v3_v4.pod}: doc: rename diff_with_c-version to diff_v3_v4 * .gitignore, MIGRATING.md, Makefile, contrib/rpm/environment-modules.spec: doc: add MIGRATING guide 2017-09-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_with_c-version.pod: doc: improve diff doc with more changes between 3.2 & 4 2017-09-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_with_c-version.pod: doc: rephrase diff to talk about Modules 3.2 and 4 * doc/source/module.pod.in: doc: describe MODULES_USE_COMPAT_VERSION in module.1 * init/bash.in, init/bash_completion.in, init/cmake.in, init/csh.in, init/ksh.in, init/perl.pm.in, init/profile-compat.csh.in, init/profile-compat.sh.in, init/python.py.in, init/ruby.rb.in, init/sh.in, init/zsh.in: init: rename use compat var in MODULES_USE_COMPAT_VERSION Use a distinguishable prefix for environment variables relative to the Modules software: 'MODULES_'. 2017-09-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS: Add release notes for 4.0.0 in NEWS 2017-09-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/Makefile, init/fish_completion, init/fish_completion.in: init: fix and normalize fish_completion * remove incorrect references to apt-get * use space instead of tabs * normalize description messages reusing short sentences already made for zsh completion * fix function to filter module command output and only return modulefile list not mixed with files * simplify install process by removing need for a '.in' file (and fix bash_completion install on the way) 2017-09-21 BEFH <fultonh1@gmail.com> * init/Makefile, init/fish_completion.in: fish_completion Created an initial fish_completion script and added to Makefile. 2017-09-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/rpm/environment-modules.spec, ...cros.modules-tcl => macros.environment-modules}, ...les-tcl-1.923-fix-uname-nodename-when-dns.patch, .../modules-tcl-1.923-fix-uname-release-test.patch, ...ules-tcl-1.923-fix-uname-release-with-lsb.patch, .../modules-tcl-1.923-no-etc-rc-as-rc-file.patch, ...dules-tcl-1.923-skip-access-tests-if-root.patch, ...dules-tcl-1.923-unneeded-manpath-q-option.patch, contrib/rpm/modules-tcl.spec: rpm: adapt spec for 4.0.0-beta Base new environment-modules.spec on Fedora specfile made by Orion Poplawski. Adapt content to build on either Fedora and EL systems. * contrib/scripts/add.modules.in, contrib/scripts/mkroot: contrib: add proper header for add.modules and mkroot * .gitignore, Makefile, contrib/scripts/add.modules.in, contrib/scripts/{mkroot.in => mkroot}: install: add add.modules and mkroot to bindir * contrib/scripts/add.modules.in, contrib/scripts/mkroot.in: contrib: import add.modules and mkroot from c branch These scripts are usually part of a regular environment-modules installation * init/profile.sh.in: init: use . instead of source in sh-kind profile script 2017-09-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * www/index.html: www: update bug tracker url 2017-09-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/doc2www, www/c/INSTALL.html, www/c/NEWS.html, www/c/README.html, www/c/module.html, www/c/modulefile.html, www/index.html: www: update repository url And be more forge neutral in footer disclaimer of all pages. * testsuite/install.00-init/030-options.exp: testsuite: fix test relative to installed contrib mods * .gitignore, contrib/modulefiles/module-info, contrib/modulefiles/modules.in, init/Makefile: install: add 'modules' modfile to example modfiles * .gitignore, .travis.yml, INSTALL-win.txt, INSTALL.txt, Makefile, NEWS, configure, contrib/modulefiles/module-git, doc/Makefile: Rename Modules-Tcl > Modules in docs and install scripts 2017-09-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * README.md: doc: speak about Modules rather Modules-Tcl in README 2017-09-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile: install: add ChangeLog-compat and NEWS-compat Build and install ChangeLog and NEWS files relative to compatibility version in %docdir. * configure: install: fetch compat git branch in configure If install is attempted from a git repository, try to get compat branch is not already available in local repository. Handle various cases like truncated repository. * .travis.yml: travis: fix build requirements for compat version * .travis.yml: travis: exclude compat branches from ci 2017-09-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/.gitignore, init/Makefile, init/profile-compat.csh.in, init/profile-compat.sh.in: init: add profile scripts enabling compat vers by default 2017-09-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile: install: add compat src to dist tarball 2017-09-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitignore, init/.gitignore: git: fix location of ignored files * init/Makefile: install: remove any preexisting ksh-functions switchml In case we reinstall with this time C version installation disabled. * init/perl.pm.in: init: normalize perl.pm hash key syntax * init/.gitignore, init/Makefile, init/bash.in, init/{bash_completion => bash_completion.in}, init/cmake.in, init/csh.in, init/fish.in, init/ksh.in, init/perl.pm.in, init/python.py.in, init/ruby.rb.in, init/sh.in, init/zsh.in: init: adapt scripts to --enable-compat-version build Introduce MODULE_USE_COMPAT_VERSION environment variable to control the activation of the compatibility version rather main version in case of --enable-compat-version installation. The initialization script of the shells supporting compatibility version are adapted to define the 'module' command based on the modulecmd-compat binary if MODULE_USE_COMPAT_VERSION is set to 1. Elsewhere module is based on modulecmd.tcl. 'switchml' function of alias is reintroduced to switch between main and compatibility version based on the state of the MODULE_USE_COMPAT_VERSION environment variable. Acknowledgment: this development has been made and funded within the framework of the PRACE Fifth Implementation Phase (PRACE-5IP) project (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's Horizon 2020 research and innovation programme (2014-2020) under grant agreement no. 730913. 2017-09-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitignore, .travis.yml, INSTALL.txt, Makefile, Makefile.inc.in, configure, doc/Makefile, init/Makefile, site.exp.in, testsuite/install.00-init/030-options.exp: install: --enable-compat-version to build compat vers Introduce '--enable-compat-version' configure argument to configure and build compatibility (C) version in addition to main version. This compatibility version is located in the 'compat' directory, which is automatically populated with 'c-master' git branch if we work in the git repository. 'configure' script is adapted to run the compatibility version relative configure script. Unknown command-line arguments are passed down to this script, which raise error if these arguments are not known there either. Some compatibility version configure script argument are also incompatible in this dual installation mode, so an error is raised (--enable-versioning for instance). Build process will generate and install modulecmd-compat, module-compat.1 and modulefile-compat.4 from this compatibility version. 'compat' suffix enables clear distinction with main version files. Acknowledgment: this development has been made and funded within the framework of the PRACE Fifth Implementation Phase (PRACE-5IP) project (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's Horizon 2020 research and innovation programme (2014-2020) under grant agreement no. 730913. 2017-09-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.txt, Makefile.inc.in, configure, contrib/rpm/modules-tcl.spec, init/Makefile, init/bash.in, init/csh.in, init/ksh.in, init/sh.in, init/zsh.in: install: remove features linking to external C version Remove the --enable-set-switchml, --enable-use-cver-dotmodulespath, --with-cver-initdir, --with-cver-bindir and --with-cver-mandir configure option that previously enabled to link Modules-Tcl installation to an external Modules-C installation. This change is an initial step toward a bundled installation of Tcl/C versions, so the external linking support will transform into a dual flavor installation. 2017-09-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash.in, init/csh.in, init/fish.in, init/ksh.in, init/sh.in, init/zsh.in: init: module source @initdir@/modulerc rather shell source Like for other lang init scripts. 2017-09-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.80-deep/022-switch.exp: No swap-on if swap-off failed During a 'switch' command, if the unloading part fails the loading part will not be tried. Unloading part fails if module to unload does not exist or its unload interpretation raise error. If module to unload exist and is not loaded, unload is considered successful. * modulecmd.tcl.in: Debug on 'nothing to do' cond of load/unload Add a debug message when load command has nothing because module to load is already loaded. Add a debug message when unload command has nothing to do because module unload exists but is not loaded. 2017-09-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles/module/bad, testsuite/modulefiles/module/err, testsuite/modulefiles/module/lbad, testsuite/modulefiles/module/lerr, testsuite/modulefiles/module/lunk, testsuite/modulefiles/module/unk, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.70-maint/140-multiargs.exp, testsuite/modules.90-avail/070-full.exp: Failed load/unload if submod load/unload fails When a modulefile loads or unloads another modulefile, load or unload issue did not previously led to upper module load or unload failure. As a result, the upper modulefile appeared loaded or unloaded whereas its dependent sub-modulefile were not loaded or respectively still loaded. This commit makes cmdModuleLoad and cmdModuleUnload procedure return an exit code to let know if load or unload action performed correctly. In case of a 'module load' or 'module unload' call within a modulefile, the module procedure will raise an error with the dummy message 'SUB_FAILED'. This message is caught at the result of the modulefile interpretation to return an error code, without raising error count or message as it has already been handled at the root of the issue. * modulecmd.tcl.in: Fix popSettings stack handling popSettings were cleaning 2 levels of stack instead of 1, resulting in bad environment restore when issue occurred in a nested modulefile interpretation. * testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.70-maint/090-source.exp: testsuite: add tests for unknown or broken mod Add tests to check behavior for commands performing modulefile interpretation when modulefile is unknown or has broken Tcl code inside. 2017-09-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.50-cmds/301-interp-command.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp: Only one sep line between 2 mods on display/help/test Print only one separator line (---) between the interpretation of 2 modules on the display, help and test commands to improve readability of the results displayed. To do so, cmdModuleDisplay and cmdModuleTest procedures have been adapted to receive the full list of modules to work on, like it was already done on cmdModuleHelp. Adapt non-regression tests output to this change. * modulecmd.tcl.in, testsuite/modulefiles/bad2/body, testsuite/modules.00-init/006-procs.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/284-info-others.exp, testsuite/modules.70-maint/060-apropos.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.70-maint/140-multiargs.exp, testsuite/modules.80-deep/021-unload.exp, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/070-full.exp: Do not exit if internal error occurs in interp mod Previously an internal error occurring during the interpretation of a modulefile (like broken Tcl code) was leading to an immediate exit of the whole module execution. So the end of the ongoing command was skipped (like printing separator line '---' on display command or interpreting next modulefile passed argument on load command). With this change, an internal error occurring during the interpretation of a modulefile will be treated as any other error raised by modulefile Tcl commands (like prereq, conflict, append-path, etc). Interpretation will be considered as failed but ongoing command will get this failed status and will continue. As a result, when this kind of error occurs now display, help, load, unload, whatis and source commands will end treatment of the failed modulefile and then proceed with the following modulefiles passed as arguments. Add 140-multiargs non-regression tests in 70-maint suite to check behavior of module commands running with multiple modulefiles passed as argument. 2017-08-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.10-use/080-access.exp, testsuite/modules.10-use/090-bad.exp, testsuite/modules.20-locate/010-init_ts.exp, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/065-rcerrs.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.20-locate/081-access-rc.exp, testsuite/modules.20-locate/095-cleanup.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/284-info-others.exp, testsuite/modules.70-maint/055-whatis.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.70-maint/100-path.exp, testsuite/modules.80-deep/021-unload.exp, testsuite/modules.80-deep/022-switch.exp, testsuite/modules.80-deep/080-access.exp: Print more readable messages on reportInternalBug Improve readability of error messages encountered during modulefile execution by putting Tcl error message first after the 'Module ERROR' prefix. To achieve this improvement, modulefile is passed to reportInternalBug procedure as a separate argument. Procedures getting and manipulating error information have been adapted to add modulefile as an element of the error information to be able to transmit it to reportInternalBug. In addition, this commit change error reporting kind when facing access error on readModuleContent. Previously access issues were reported with reportInternalBug whereas these issues were not relative to modulefile content. reportError is now used to report access issue as when this kind of error is encountered when checking file is valid modulefile. Adapt relative non-regression tests and take opportunity to centralize common error messages at start of the testsuite. 2017-08-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, doc/Makefile, init/Makefile: install: avoid make to rebuild Makefile.inc 2017-08-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add getModuleNameFromModulepath helper proc * modulecmd.tcl.in: Add getModulepathFromModuleName helper proc * modulecmd.tcl.in, testsuite/modules.70-maint/130-aliases.exp: Add blank line between displayed list of elements When reporting results per category or modulepaths like during an 'avail' or 'whatis' command, add a blank line between categories or modulepaths to get a clearer separation between them. With this change, behavior is align with C-version and standard tools like 'ls'. * modulecmd.tcl.in, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.90-avail/060-empty.exp: No table header display if no avail result Do not print the table header line in --long mode on an 'avail' command if no result are returned. Take opportunity of this change to introduce the displayTableHeader procedure in order to get an homogeneous code to produce such kind of header in the various command procedures requiring it. 2017-08-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/modulefile.pod, modulecmd.tcl.in, testsuite/modulefiles/.hidden/1.0, testsuite/modulefiles/loc_rc8/.2.0, testsuite/modulefiles/loc_rc8/.modulerc, testsuite/modulefiles/loc_rc8/.subdir/4.0, testsuite/modulefiles/loc_rc8/1.0, testsuite/modulefiles/loc_rc9/.1.0, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.90-avail/070-full.exp: Add support for hidden 'dot' modulefiles Modulefiles with part of their name starting with a '.' dot character are considered as hidden modulefiles, like dot files on Unix-kind filesystems. After introduction of the getModules/findModules procedures hidden modulefiles where automatically discarded. So this commit re-introduce the support to locate these dot modulefiles. Add a 'fetch_hidden' argument to the findModules procedure to enable an extra lookup on walked directories to gather the dot modulefiles. The getModules procedures now looks at the passed mod and if named module correspond to a dot modulefile findModules 'fetch_hidden' argument is turned on. Since getPathToModule call to getModules for broad search (with just passed mod root name), this procedure also makes the 'is hidden module' test to order getModules to do the hidden search. A hidden modulefile does not appear in case of wild search, it is only returned when search is about its exact name. When a symbolic version targets a hidden modulefile, this modulefile will also be returned in case search is about symbol exact name. A module alias targeting a hidden modulefile is returned as any other aliases. Add 067-hidden non-regression tests in 20-locate suite. 2017-08-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Look for alias/sym tgt in all path on cmdModuleSearch Introduce a second search round in cmdModuleSearch to solve module alias or symbolic version that were not solved by looking at modules in the modulepath where they have been defined. During initial search round across modulepaths, these aliases or symbols which return an 'Unable to locate' issue from getPathToModule are stored in an extra_search array which gathers all elements to look at during the extra search round. Extra search round will attempt to solve these aliases or symbol in all defined modulepaths, except the path already looked at. Due to this second search round, results are not processed immediately for each modulepath but once when all location searches are finished. So user will get one full output rather progressive results modulepath after modulepath. This behavior change in outputing results is required as an alias or symbol solved globally may alter the result list of a modulepath already processed. So when these kind of alias or symbol are searched, their target modulefile will be appended to the list of files to interpret of the modulepath they are coming from. To optimize alias/symbol resolution process the 'full_list' array is introduced to store all the module names added to each modulepath arrays, so before asking getPathToModule for resoltution, look if defined target has not already been found and saved in 'full_list'. 2017-08-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Look for alias/sym tgt in all path on cmdModulePaths Resolve alias or symbolic version by looking in all modulepaths, rather just current modulepath, in order to match alias or symbol targeting a module in a different modulepath. Resolution is made first in current modulepath directory, if not solved there the other modulepaths will be looked at following their precedence order. Previously only alias and symbolic version targeting module in same modulepath were found. * doc/source/modulefile.pod, modulecmd.tcl.in: Handle alias/sym pt. to another path in getPathToModule When searching for a module in a given modulepath directory, if a module alias or a symbolic version matches searched module but the target of this alias or symbol is not found in current modulepath directory, search for this target restarting search from the first modulepath in list to ensure modulepath priority. Previously this kind of alias or symbol targeting a module in a different modulepath were only found if this path was set after the modulepath where the alias or symbol is defined. Clarify alias and symbolic version modulepath resolution steps in modulefile man page. 2017-08-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/etc/modulerc.cross, testsuite/modulefiles.path1/cross/.modulerc, testsuite/modulefiles.path1/cross/3.0, testsuite/modulefiles.path1/cross/4.0, testsuite/modulefiles.path1/dcross/.modulerc, testsuite/modulefiles.path1/dcross/4.0, testsuite/modulefiles.path1/dcross/dir1/1.0, testsuite/modulefiles.path1/lcross/1, testsuite/modulefiles.path1/lcross/10, testsuite/modulefiles.path1/lcross/6, testsuite/modulefiles.path1/othcross/.modulerc, testsuite/modulefiles.path1/othcross/1.0, testsuite/modulefiles.path2/cross/.modulerc, testsuite/modulefiles.path2/cross/1.0, testsuite/modulefiles.path2/cross/6.0, testsuite/modulefiles.path2/dcross/dir1/.modulerc, testsuite/modulefiles.path2/dcross/dir1/2.0, testsuite/modulefiles.path2/dcross/dir2/1.0, testsuite/modulefiles.path2/lcross/11, testsuite/modulefiles.path2/lcross/2, testsuite/modulefiles.path2/lcross/4, testsuite/modulefiles.path2/lcross/5, testsuite/modulefiles.path2/lcross/7, testsuite/modulefiles.path3/cross/.modulerc, testsuite/modulefiles.path3/cross/2.0, testsuite/modulefiles.path3/cross/5.0, testsuite/modulefiles.path3/dcross/.modulerc, testsuite/modulefiles.path3/dcross/5.0, testsuite/modulefiles.path3/dcross/dir1/3.0, testsuite/modulefiles.path3/dcross/dir3/1.0, testsuite/modulefiles.path3/lcross/12, testsuite/modulefiles.path3/lcross/3, testsuite/modulefiles.path3/lcross/8, testsuite/modulefiles.path3/othcross/.modulerc, testsuite/modulefiles.path3/othcross/2.0, testsuite/modules.20-locate/069-cross.exp: testsuite: add tests for mods spread across paths Add location tests for module, aliases and symbolic versions whose definition are spread across multiple modulepaths. * testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.80-deep/068-transitive.exp: testsuite: add unload tests mentioning sym or alias 2017-08-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/install.00-init/030-options.exp, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/035-defname.exp, testsuite/modules.20-locate/038-defcontext.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.80-deep/068-transitive.exp, testsuite/modules.80-deep/080-access.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/050-long.exp, testsuite/modules.91-sort/020-avail.exp: Parsable modulepath header when -l/-t enabled Do not ship modulepath header in a separator line in terse or long output on module avail command. With this change, behavior is aligned with C-version. * modulecmd.tcl.in, testsuite/modules.61-coll/020-savelist.exp, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/045-listlong.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/050-long.exp: Make -l/-t switches mutually exclusive Last switch mentionned on command-line is honored * modulecmd.tcl.in: Remove useless g_loadedModulesGeneric structure Registering the loaded module name in the g_loadedModulesGeneric global array to look for loaded module information is now useless following the addition of the getLoadedWithClosestName and getLoadedMatchingName mechanisms. * modulecmd.tcl.in, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.80-deep/022-switch.exp: Enable getPathToModule to return closest loaded mod If 'look_loaded' argument of getPathToModule procedure is set to 'match' look at matching loaded modules to get result (unload behavior). Enable to return the closest loaded modules (not module expressed in mod but sharing at least the same root name) by setting look_loaded argument to 'close'. With this change, cmdModuleUnload is adapted to call getPathToModule in 'match' look_loaded mode most of the time, but in case of 'module switch' with a single argument, cmdModuleUnload will call getPathToModule in 'close' look_loaded mode. As a consequence, cmdModuleSwitch does not need anymore to work on module resolution and rely entirely on cmdModuleLoad and cmdModuleUnload which in turn rely on getPathToModule. Add complementary tests in 50-cmds/170-swap and 80-deep/022-switch to ensure closest loaded module is not returned in case of 'switch old new' command (not 'switch new'). * modulecmd.tcl.in, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.80-deep/021-unload.exp: Unload deep mod with just root name passed as arg Enable to unload 'mod/dir/subdir/vers' when unload of 'mod' or 'mod/dir' asked. Was previously working only if deep module to unload was also the default version for these root names. Introduce getLoadedMatchingName procedure to check passed name is equal to or is a subpart of a loaded module. This new procedure is then used in getPathToModule when look_loaded is enabled (so when unloading module). Add 021-unload tests in 80-deep suite to check unload of deep modules using sub names. Add also new tests in 180-unload of 50-cmds suite to check behavior when multiple loaded modules match searched name. * modulecmd.tcl.in, testsuite/modulefiles.deep/plain/dir1/1.0, testsuite/modulefiles.deep/plain/dir1/2.0, testsuite/modulefiles.deep/plain/dir2/1.0, testsuite/modulefiles.deep/plain/dir2/2.0, testsuite/modules.80-deep/022-switch.exp, testsuite/modules.80-deep/030-display.exp, testsuite/modules.80-deep/080-access.exp: Fix getLoadedWithClosestName search Algorithm were matching middle or end part of module even if no match on root element. Add 022-switch tests in 80-deep to test getLoadedWithClosestName on deep module names. 2017-08-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/180-unload.exp: Remove dummy code on cmdModuleUnload Clean code in cmdModuleUnload procedure that were used as fallback treatment in case a module loaded were not found by getPathToModule (relative modulepath unconfigured?). Nowadays getPathToModule procedure also look at the loaded module information and return in case of an 'unload' action registered loaded modulefile, whatever configured modulepath. Take this opportunity to add 180-unload tests in 50-cmds suite to check unload behavior with different name condition and when the modulepath relative to the loaded module to unload is not set anymore. * modulecmd.tcl.in, testsuite/modulefiles/loc_dv1/1.0, testsuite/modulefiles/loc_dv1/2.0, testsuite/modulefiles/loc_dv2/2.0, testsuite/modules.20-locate/030-defvers.exp, testsuite/modules.20-locate/038-defcontext.exp: Locate module using loaded context only on 'unload' When searching for a modulefile corresponding to a given name, the getPathToModule procedure was previously looking by default at the list of loaded modulefiles to find a match. This behavior lead to different result depending on the loaded environment context for all module commands relying on modulefile location. For instance, if 'mod' had 2 versions '1' and '2', the latter being default version, if 'mod/1' were loaded it was this version that were answered when asking for 'mod'. This commit restore a predictable and idempotent behavior where the loaded modules context is only use when working on this loaded context. Same behavior than C-version is now encountered. As a result, only the 'unload' command now looks at loaded modules to find location of modules passed as argument. Load, display and help commands do not look anymore at loaded modules to locate their module arguments. Non-regression tests 038-defcontext in 20-locate have been introduced to ensure correct behavior will persist over time. 2017-08-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles/loc_sym/version23, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.90-avail/070-full.exp: Do not alter resolution path when spreading sym When spreading symbol along resolution path, do not update this resolution path. Exception made when overwriting a pre-existing symbol (used for instance in case default version set in .version file superseeds a default an already set via .modulerc file) Protected resolution path helps to spread symbol all along the path without missing intermediate resolution. * testsuite/modulefiles.deep/modtr/.modulerc, testsuite/modulefiles.deep/trmod/.modulerc, testsuite/modulefiles/loc_sym/version22, testsuite/modulefiles/loc_tr/.modulerc, testsuite/modulefiles/tr2_loc/.modulerc, testsuite/modulefiles/tr_loc/.modulerc, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.80-deep/068-transitive.exp, testsuite/modules.90-avail/070-full.exp: testsuite: check 'default' symbol spread Add non-regression tests in 20-locate/045-symvers, 20-locate/068-transitive and 80-deep/068-transitive to ensure that 'default' symbol has same spreading properties than other symbols. * modulecmd.tcl.in, testsuite/modulefiles/loc_sym/version21, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.90-avail/070-full.exp: Fix symbol spread when set on alias before their def Propagate symbols set on aliases before the definition of these aliases. Previously, a symbol set on a not-yet-defined alias were lost and not applied to the alias target once set. With this change setting a symbol on an alias gives same result either this symbol is set before or after the alias definition. 2017-08-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Remove 'default_is_special' from getModuleNameVersion New "default" treatment in setModuleResolution procedure permits to remove the 'default_is_special' hack from getModuleNameVersion procedure. One exception still needed for the 'module-info symbols' command, which may be called for 'modname/default' with no default symbol necessary registered but symbols set on bare module name. * modulecmd.tcl.in, testsuite/modulefiles/loc_sym/version17, testsuite/modulefiles/loc_sym/version18, testsuite/modulefiles/loc_sym/version19, testsuite/modulefiles/loc_sym/version20, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.80-deep/068-transitive.exp, testsuite/modules.90-avail/070-full.exp: Register step-by-step resolution path Register a step-by-step resolution path with help of g_resolvedPath array in order to be able propagating symbols all along this resolution path. Previously intermediate steps were skipped during symbol spread leading to different results depending on module-version statement order. Add tests in 045-symvers of 20-locate suite to check new behavior. Also correct tests in 068-transitive of 20-locate and 80-deep suites. 2017-08-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles/loc_dv2/1.0, testsuite/modulefiles/loc_dv7/2.0/1.0, testsuite/modulefiles/loc_dv9/1.0, testsuite/modulefiles/loc_sym/alias7, testsuite/modulefiles/loc_sym/version15, testsuite/modulefiles/loc_sym/version16, testsuite/modules.20-locate/030-defvers.exp, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/040-alias.exp, testsuite/modules.20-locate/045-symvers.exp: Resolve 'mod/default' when 'default' symbol set Resolve the 'default' symbolic version as any other symbolic version when passed as module name on commands performing module resolution like load, display, help and test. Previously 'default' symbolic version used in module name was only found on search-like commands like avail, whatis and paths. With this change same behavior than C-version is achieve. setModuleResolution procedure has been reworked to register resolution and symbols on 'modulename/default' in addition to just 'modulename'. So resolution or symbol querying now find a match on 'modulename/default'. Introduce 031-defvers2 non-regression tests in 20-locate suite to test usage of 'default' symbol in module name passed on command-line. Also add tests in 040-alias and 045-symvers of 20-locate suite to check module-alias and module-version behavior when targeting default module. 2017-08-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Avoid empty-string on unload when running Tcl8.4 * .gitignore, Makefile, contrib/nglfar2ccov, doc/Makefile, modulecmd.tcl => modulecmd.tcl.in: More standard shebang for modulecmd.tcl Make use of './configure' information to set a precise tclsh shebang on modulecmd.tcl script. This change requires to move modulecmd.tcl to modulecmd.tcl.in within repository. Shebang is set to '@TCLSHDIR@/tclsh' rather just '@TCLSH@' in modulecmd.tcl.in to help forge code determines that this file is a Tcl script. * testsuite/modules.20-locate/080-access.exp: testsuite: check access on symlink module Add non-regression tests in 080-access of 20-locate suite to control behavior of filesystem symlink module when symlink target directory or its content has a restricted accessed. * modulecmd.tcl: Skip module-version registration if invalid modname 2017-08-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modulefiles.deep/modtr/.modulerc, testsuite/modulefiles.deep/modtr/dir4/.modulerc, testsuite/modulefiles.deep/tr2mod/.modulerc, testsuite/modulefiles.deep/tr2mod/dir3/.modulerc, testsuite/modulefiles.deep/trmod/.modulerc, testsuite/modulefiles.deep/trmod/dir3/.modulerc, testsuite/modulefiles/tr2_loc/.modulerc, testsuite/modulefiles/tr_loc/.modulerc, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.80-deep/068-transitive.exp, testsuite/modules.90-avail/070-full.exp: Include all kind of symvers target in getModules res When parsing symbolic version targets in getModules procedures, these targets were previously included in search result only if they were found on the filesystem (file or directory). But sometimes, these targets may be module alias and not a consistent file or directory. This situation happens when a module-version is set on an alias which in turns targets a modulefile in a different directory. When you query the symbolic version in the end-point modulefile directory, you get the modulefile as a result, but if you query the symbol in the alias directory, this alias will be returned. Adapt non-regression tests in 060-rc of 20-locate suite and in 068-transitive of 80-deep suite. Improve especially the 068-transitive tests with aliases and symbols set from different module. * .gitignore: git: ignore vim swap files 2017-08-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modulefiles.deep/modtr/.modulerc, testsuite/modulefiles.deep/modtr/3.0, testsuite/modulefiles.deep/modtr/dir1/1.0, testsuite/modulefiles.deep/modtr/dir2/2.0, testsuite/modulefiles.deep/modtr/dir3/.modulerc, testsuite/modulefiles.deep/modtr/dir4/.modulerc, testsuite/modulefiles.deep/modtr/dir4/mod4.0, .../modulefiles.deep/modtr/dir5/subdir/mod5.0, testsuite/modulefiles/loc_tr/.modulerc, testsuite/modulefiles/loc_tr/1.0, testsuite/modulefiles/loc_tr/2.0, testsuite/modulefiles/loc_tr/3.0, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.80-deep/068-transitive.exp, testsuite/modules.90-avail/070-full.exp: Let setModuleResolution handle g_moduleVersion Register all symbolic module version in g_moduleVersion array by letting setModuleResolution procedure handle this array. So now module-version procedure deleguates g_moduleVersion handling to setModuleResolution. With this change all symbols are now registered in g_moduleVersion which enables to search on these names during an 'avail' command. It was previously possible to match these symbols only if they were explicitely defined on a 'module-version' statement and were not about the 'default' symbol. Symbols inherited by transitivity are now also registered in g_moduleVersion and resolution structure by recursive call to setModuleResolution procedure. setModuleResolution procedure has also been adapted to withdraw its 'override_default' argument. When called, setModuleResolution will now always override an already defined symbolic version, but 'module-version' procedure will refrain from calling setModuleResolution if this symbol is already set in g_moduleVersion. Introduce non-regression tests 068-transitive in 20-locate and 80-deep suites and add new tests in 060-rc in 20-locate suite to check transitive definitions in various conditions. 2017-08-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles/symlink, testsuite/modulefiles/symlink2, testsuite/modulefiles/symlink3, testsuite/modules.20-locate/075-symlink.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/070-full.exp: testsuite: check behavior with fs symlink Add 075-symlink non-regression tests in 20-locate suite to validate behavior when module is a filesystem symlink. Adapt tests in 70-maint/130-aliases, 90-avail/040-wild and 90-avail/070-full for the addition of the 'symlink*' modules. * testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/055-prepend-undo.exp: testsuite: add prepend tests for leading colon case Add a load test in 050-prepend and an unload test in 055-prepend-undo of 50-cmds suite to validate behavior when a PATH-like variable is initially set when a prefixing colon. Load should treat it as an empty path element. Unload restore this prefixing colon. 2017-08-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitignore, Makefile.in => Makefile, Makefile.inc.in, configure, doc/{Makefile.in => Makefile}, init/.gitignore, init/{Makefile.in => Makefile}: install: fix Makefile generation flaws Generate a shared 'Makefile.inc' file rather all 'Makefile's at configure time. Avoid init/Makefile being rebuilt by initscript '%.in' rules. Correct 'all' rule typo in doc/Makefile. Enforce '.modulespath' symlink creation when usecverdotmodulespath is enabled. * doc/source/diff_with_c-version.pod, doc/source/module.pod.in, doc/source/modulefile.pod, init/.gitignore, init/Makefile.in, init/r.R.in, modulecmd.tcl, testsuite/modulefiles/info/shellsexp, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/006-procs.exp, testsuite/modules.70-maint/120-autoinit.exp: Support for R "shell" And adapt documentation, installation and testsuite. 2015-11-21 Roy Storey <roy.storey@plantandfood.co.nz> * init/r.R.in: init: script for R support 2017-08-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/rpm/modules-tcl.spec, doc/source/diff_with_c-version.pod, doc/source/module.pod.in, doc/source/modulefile.pod, init/.gitignore, init/Makefile.in, init/ruby.rb.in, modulecmd.tcl, testsuite/modulefiles/info/shellsexp, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/006-procs.exp, testsuite/modules.70-maint/120-autoinit.exp: Support for Ruby "shell" And adapt documentation, installation and testsuite. 2011-10-17 Tammo Tjarks <tammo@tammo-tjarks.de> * init/ruby.rb.in: init: script for Ruby support 2017-08-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.pod.in, init/.gitignore, init/Makefile.in, init/{perl.in => perl.pm.in}, init/{python.in => python.py.in}: Use file extension for perl/python init script Rename 'perl' in 'perl.pm' and 'python' into 'python.py' to get same init script filename than C-version. * modulecmd.tcl, testsuite/modules.00-init/006-procs.exp: Properly set preliminary code for x-res stuff 2017-08-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.20-locate/030-defvers.exp: Ignore extra '/' on module name for loc * doc/source/diff_with_c-version.pod, doc/source/module.pod.in, doc/source/modulefile.pod, init/.gitignore, init/Makefile.in, init/cmake.in, modulecmd.tcl, testsuite/modulefiles/info/shellsexp, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/006-procs.exp, testsuite/modules.70-maint/120-autoinit.exp: Support for CMake "shell" And adapt documentation, installation and testsuite. * modulecmd.tcl, testsuite/modules.00-init/006-procs.exp, testsuite/modules.50-cmds/090-uname-proc.exp, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/099-uname-cleanup.exp, testsuite/modules.50-cmds/250-x-resource.exp: Improve check and run of external command Add 'getCommandPath' procedure to find path of command and cache this location using 'auto_execok' Tcl command. Add 'runCommand' procedure to get command location from getCommandPath then execute command if found. An error is raised if not found. Plug 'uname' and 'x-resource' procedures on these new mechanisms to handle their external command run. Especially 'x-resource' now checks if X11 environment is editable by running 'xrdb -query'. If this command produces error, then X11 resources cannot be edited and x-resource procedure will raise an error. Adapt non-regression tests 09x-uname and 250-x-resource of 50-cmds suite consequently. 2017-08-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/rpm/modules-tcl.spec: rpm: adapt environment-modules provides to distrib 2017-08-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml: travis: add test variants for openSUSE * .travis.yml, testsuite/modules.00-init/006-procs.exp, testsuite/modules.50-cmds/250-x-resource.exp: testsuite: fix xres orders production Use same mechanism than in modulecmd.tcl to get exact same ordering of x-resource directives to test results. Enable use of a virtual display server on CentOS test environment with Xvfb to test behavior of x-resource on this distribution. Thanks to Gabe Turner for reporting the issues on the x-resource test that were due to the rewrite of the non-regression testsuite. * ...ules-tcl-1.923-fix-uname-release-with-lsb.patch, contrib/rpm/modules-tcl.spec: rpm: fix %license use on el6 and bad patch4 %license macro does not exist on el6 environment and cannot be set as attempted as we need a %files-macro. So use %doc instead of %license on el6 and below. Also fix patch #4 were testsuite update was previously missing to fix the uname/release issue when an /etc/lsb-release file exists. Thanks to Gabe Turner for reporting this issue 2017-08-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile.in, modulecmd.tcl: Add 'testsyntax' makefile rule Adapt by the way some code lines that were too long (>78). * modulecmd.tcl: Always mention channelid on 'puts' statement * modulecmd.tcl: Harmonize and optimize write of 'switch' statement * modulecmd.tcl, testsuite/modules.00-init/006-procs.exp, testsuite/modules.70-maint/120-autoinit.exp: Fix some typos on shell code rendering * modulecmd.tcl, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/055-prepend-undo.exp: Raise and render error once on unload During an 'unload' action, an error occuring on a loaded module will not affect the unload of the other modules passed on the command line. This commit remove the additional error message that were displayed in this situation: only the message raised from the modulefile interpretation is useful. Also only render error once, so 'renderError' procedure will do nothing if it has already been called. 2017-08-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/015-version.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.91-sort/030-whatis.exp: testsuite: harden tests using '.*' regexp * testsuite/modulefiles/dirmodalias/1.0, testsuite/modules.00-init/006-procs.exp, testsuite/modules.00-init/015-version.exp, testsuite/modules.00-init/090-switches.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/032-prepend.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.20-locate/020-fqual.exp, testsuite/modules.20-locate/030-defvers.exp, testsuite/modules.20-locate/035-defname.exp, testsuite/modules.20-locate/047-symerrs.exp, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/055-locrcerrs.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/260-getenv.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.50-cmds/284-info-others.exp, testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.50-cmds/301-interp-command.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.61-coll/020-savelist.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/080-access.exp, testsuite/modules.70-maint/055-whatis.exp, testsuite/modules.70-maint/060-apropos.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.80-deep/030-display.exp, testsuite/modules.80-deep/050-whatis.exp, testsuite/modules.80-deep/080-access.exp, testsuite/modules.90-avail/020-single.exp, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/050-long.exp, testsuite/modules.90-avail/060-empty.exp, testsuite/modules.91-sort/020-avail.exp, testsuite/modules.91-sort/030-whatis.exp: testsuite: imply ^$ for match str on re-enabled tests Automatically prefix matching string with '^' and suffix it with '$' in case of regexp-enabled non-regression tests. Adapt all regexp-enabled tests requiring it for this change. * .../modules-tcl-1.923-fix-uname-nodename-when-dns.patch, contrib/rpm/modules-tcl.spec, modulecmd.tcl: Use 'uname -n' for 'uname nodename' To avoid involment of DNS resolution base the result of the 'uname nodename' modulefile command on 'uname -n' system command rather on '[info hostname]'. With this fix same behavior than C-version is achieved for 'uname nodename'. 2017-08-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/006-procs.exp, testsuite/modules.00-init/080-begenv.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/032-prepend.exp, testsuite/modules.10-use/040-load.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.10-use/080-access.exp, testsuite/modules.10-use/090-bad.exp, testsuite/modules.20-locate/010-init_ts.exp, testsuite/modules.20-locate/035-defname.exp, testsuite/modules.20-locate/040-alias.exp, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.20-locate/046-getsym.exp, testsuite/modules.20-locate/047-symerrs.exp, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.20-locate/095-cleanup.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/020-setenv.exp, testsuite/modules.50-cmds/022-setenv-eschars.exp, testsuite/modules.50-cmds/025-setenv-undo.exp, testsuite/modules.50-cmds/028-setenv-refcount.exp, testsuite/modules.50-cmds/030-unsetenv.exp, testsuite/modules.50-cmds/035-unsetenv-undo.exp, testsuite/modules.50-cmds/036-unsetenv-x.exp, .../modules.50-cmds/038-unsetenv-refcount.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/076-alias-sub.exp, testsuite/modules.50-cmds/077-alias-undo.exp, testsuite/modules.50-cmds/078-refresh.exp, testsuite/modules.50-cmds/080-info-name.exp, testsuite/modules.50-cmds/081-info-user.exp, testsuite/modules.50-cmds/082-info-user-exp.exp, testsuite/modules.50-cmds/083-info-mode.exp, testsuite/modules.50-cmds/084-info-mode-exp.exp, testsuite/modules.50-cmds/085-info-flags.exp, testsuite/modules.50-cmds/086-info-shells.exp, testsuite/modules.50-cmds/087-info-shells-exp.exp, testsuite/modules.50-cmds/088-info-isloaded.exp, testsuite/modules.50-cmds/089-info-type.exp, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/100-loglevel.exp, testsuite/modules.50-cmds/101-badfac.exp, testsuite/modules.50-cmds/105-trace.exp, testsuite/modules.50-cmds/110-verbose.exp, testsuite/modules.50-cmds/115-verbose-msg.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp, testsuite/modules.50-cmds/140-system.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/172-swap-app-delim.exp, testsuite/modules.50-cmds/173-swap-app-delim.exp, testsuite/modules.50-cmds/175-swap2.exp, testsuite/modules.50-cmds/177-swap-prep-delim.exp, testsuite/modules.50-cmds/178-swap-prep-delim.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/195-load-recurs.exp, testsuite/modules.50-cmds/197-load-lots.exp, testsuite/modules.50-cmds/200-break.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/220-continue.exp, testsuite/modules.50-cmds/230-loop.exp, testsuite/modules.50-cmds/240-chdir.exp, testsuite/modules.50-cmds/250-x-resource.exp, testsuite/modules.50-cmds/260-getenv.exp, testsuite/modules.50-cmds/280-info-specified.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.50-cmds/301-interp-command.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/080-access.exp, testsuite/modules.70-maint/020-update.exp, testsuite/modules.70-maint/030-purge.exp, testsuite/modules.70-maint/050-whatis-load.exp, testsuite/modules.70-maint/090-source.exp, testsuite/modules.70-maint/100-path.exp, testsuite/modules.70-maint/110-paths.exp, testsuite/modules.80-deep/020-load.exp, testsuite/modules.80-deep/080-access.exp, testsuite/modules.91-sort/040-load.exp, testsuite/modules.95-version/020-load.exp, testsuite/modules.95-version/020-unload.exp, testsuite/modules.95-version/022-load2.exp, testsuite/modules.95-version/022-unload2.exp, testsuite/modules.95-version/040-xgetenv.exp: testsuite: refactor tests with code output Adapt test*out* procedures to call for 'shell_out' procedure if passed code output is a code order list rather than an output string. 'shell_out' procedure in turn calls for specific procedure to parse shell commands and transform them in the appropriate shell code. This way shell code is handled in a central location and tests do not need anymore to handle the particularity of each supported shells. 2017-07-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/030-shells.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.50-cmds/284-info-others.exp, testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.50-cmds/301-interp-command.exp, testsuite/modules.61-coll/020-savelist.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/050-saverm.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.61-coll/080-access.exp, testsuite/modules.70-maint/045-listlong.exp, testsuite/modules.70-maint/055-whatis.exp, testsuite/modules.70-maint/060-apropos.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.80-deep/050-whatis.exp, testsuite/modules.90-avail/020-single.exp, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/050-long.exp, testsuite/modules.90-avail/060-empty.exp, testsuite/modules.91-sort/020-avail.exp, testsuite/modules.91-sort/030-whatis.exp: testsuite: rely more on global definitions * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/006-procs.exp, testsuite/modules.00-init/030-shells.exp, testsuite/modules.00-init/070-command.exp, testsuite/modules.00-init/071-args.exp, testsuite/modules.00-init/090-switches.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/032-prepend.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/250-x-resource.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/050-saverm.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.70-maint/100-path.exp, testsuite/modules.70-maint/110-paths.exp: testsuite: refactor ALL shell tests Adapt test* procedure to call test for each supported shell when test_shell argument is set to 'ALL'. Transform all tests set for all shells with a common output to use this new 'ALL' test_shell argument. 2017-07-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Rework python and perl shell code for error or nop No output of 'import os' for Python shell when there is only an error message to render. No double output of '1;' for Perl shell for a no-operation situation. * testsuite/modules.00-init/006-procs.exp, testsuite/modules.00-init/070-command.exp, testsuite/modules.00-init/071-args.exp, testsuite/modules.00-init/090-switches.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.10-use/080-access.exp, testsuite/modules.10-use/090-bad.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.20-locate/081-access-rc.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/250-x-resource.exp, testsuite/modules.50-cmds/284-info-others.exp, testsuite/modules.60-initx/005-init.exp, testsuite/modules.60-initx/020-add.exp, testsuite/modules.60-initx/030-switch.exp, testsuite/modules.60-initx/040-prepend.exp, testsuite/modules.60-initx/050-rm.exp, testsuite/modules.60-initx/060-2nd.exp, testsuite/modules.60-initx/080-access.exp, testsuite/modules.60-initx/095-cleanup.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/050-saverm.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.61-coll/080-access.exp, testsuite/modules.70-maint/055-whatis.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.70-maint/090-source.exp, testsuite/modules.70-maint/100-path.exp, testsuite/modules.70-maint/110-paths.exp, testsuite/modules.80-deep/080-access.exp: testsuite: refactor shell OK and ERR code Pass 'OK' or 'ERR' string to test procedure, then these procedures will use the new internal 'shell_ok' and 'shell_err' procedures to translate these bare OK/ERR strings in the appropriate code for the given shell. 2017-08-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * ...dules-tcl-1.923-fix-uname-release-with-lsb.patch, contrib/rpm/modules-tcl.spec, modulecmd.tcl, testsuite/modules.50-cmds/090-uname-proc.exp: Always use tcl_platform(osVersion) as 'uname release' When querying 'uname release' always use value of the 'osVersion' field of 'tcl_platform' array to get the real 'uname --kernel-release' value. Remove specific behavior when /etc/lsb-release file is found as it was too specific and led to different behavior depending of the Linux distribution. 2017-07-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../modules-tcl-1.923-fix-uname-release-test.patch, .../modules-tcl-1.923-no-etc-rc-as-rc-file.patch, ...dules-tcl-1.923-skip-access-tests-if-root.patch, ...dules-tcl-1.923-unneeded-manpath-q-option.patch, contrib/rpm/modules-tcl.spec: rpm: fix spec and patches for 1.923-2 build * .travis.yml: travis: add test variants for CentOS * modulecmd.tcl: Never take /etc/rc as a module rc file * init/csh.in: init: remove unneeded manpath '-q' option for csh * testsuite/modules.10-use/080-access.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.20-locate/081-access-rc.exp, testsuite/modules.60-initx/080-access.exp, testsuite/modules.61-coll/080-access.exp, testsuite/modules.80-deep/080-access.exp: testsuite: skip access tests if run by root 2017-07-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_with_c-version.pod, doc/source/modulefile.pod, testsuite/modules.50-cmds/076-alias-sub.exp: doc: clarify 'set-alias' command * modulecmd.tcl, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/076-alias-sub.exp, testsuite/modules.50-cmds/077-alias-undo.exp: No alias handling for 'tcl' shell Remove code that were handling aliases for the 'tcl' shell. Aliases are only effective for 'real' shells not script programming language shells. 2017-07-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_with_c-version.pod, modulecmd.tcl, testsuite/modules.60-initx/050-rm.exp, testsuite/modules.60-initx/060-2nd.exp: Keep 'module load' lines after init{rm,clear} Instead of removing the whole line when no more module specified on it during an 'initrm' command or during an 'initclear', keep the line with 'module load' to be able to reuse this line on next 'initadd' command. Adapt non-regression tests in 050-rm and 060-2nd of 60-initx suite and diff doc. * doc/source/diff_with_c-version.pod, modulecmd.tcl, testsuite/modules.00-init/090-switches.exp, testsuite/modules.70-maint/060-apropos.exp: Warning rather error on C-version specific switches Report an 'unsupported option' warning message when C-version specific command-line switches are passed rather than producing an 'invalid option' error. Adapt non-regression tests of 00-init/090-switches and 70-maint/060-apropos and diff doc. 2017-07-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_with_c-version.pod, modulecmd.tcl, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/043-listno.exp, testsuite/modules.70-maint/045-listlong.exp, testsuite/modules.70-maint/048-listlongno.exp, testsuite/modules.70-maint/050-whatis-load.exp, testsuite/modules.70-maint/055-whatis.exp, testsuite/modules.70-maint/080-help.exp: Relax constraint on cmd line args position Look the full argument list to find options or command switches, so options may be passed after the command name and command switches may be found before the command name. With this behavior commad-line argument position constraint is aligned with C-version. Adapt non-regression tests in 70-maint suite and diff doc. 2017-07-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/rpm/modules-tcl.spec, testsuite/modules.50-cmds/095-uname.exp: testsuite: fix uname release test in 50-cmds suite Update RPM spec file by the way to fix Koji build under 'armhfp' architecture. 2017-07-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * www/Makefile: www: fix README.html build in Makefile * NEWS, contrib/rpm/modules-tcl.spec, doc/source/diff_with_c-version.pod, modulecmd.tcl, www/index.html: Release of version 1.923 * testsuite/modules.61-coll/020-savelist.exp, testsuite/modules.90-avail/070-full.exp: testsuite: skip term width tests if cannot query term * testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.50-cmds/301-interp-command.exp: testsuite: fix cmp string in 50-cmds suite When converting an array to a string list, the order of its element cannot be determined. 2017-07-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.70-maint/130-aliases.exp: Call for getModules in any cases in cmdModuleAliases Previously getModules was only called when g_moduleAlias and g_moduleVersion global arrays were both empty, but in case of a global or user RC file that set an alias or a symbolic version, no more alias and version are looked for in module paths. To fix that, getModules is called for all defined module paths in any cases as it is done for cmdModuleAvail. Add relative non-regression test in 130-aliases of 70-maint suite. * testsuite/modules.00-init/010-environ.exp: testsuite: clean MODULESHOME env var before start 2017-07-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Rework error handling in cmdModuleSearch Take benefit of changes made on getPathToModule to return error information through the result list to avoid extra call to getPathToModule in cmdModuleSearch if nothing was found. Now through the parsing of getModules results and getPathToModule alias resolution results, all the error information are gathered and registered if element name matches search string. At the end of the cmdModuleSearch procedure, all the registered errors are printed. Add a 'reportIssue' procedure to help reporting error messages depending of their kind, useful for getPathToModule and cmdModuleSearch procedures. 2017-07-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Return error info as result from getPathToModule Rework getPathToModule procedure to return error information through the result structure. 2017-07-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Rework registering of access/invalid file error Integrate modulefile or directory access issue or invalidity directly in the result array produced by findModules/getModules procedures. By doing so access to the error information is straigthforward for getPathToModule procedure. To achieve this integration, the checkValidModule procedure has been revised to return any error message in addition to the check status. 2017-07-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.20-locate/060-rc.exp: Same res for version than alias on getPath/search/paths Take symbolic version into accounts like done for alias when attempting to find out the modulefile targeted by a given module name. Symbolic versions were until now left away from this resolution treatment as their modulefile target were automatically part of the mod_list result returned by getModules procedure. But in some cases, a symbolic version may be hold on an alias, so the target modulefile of this symbol does not hold the same module name than this symbolic module and thus is not part of the result list. This change is useful for resolution procedures like getPathToModule, cmdModuleSearch and cmdModulePaths. It also helps to localize the element in error, if any, as the availability of the symbolic version information will help to determine if the error concerns the search made by the user or not. Add relative non-regression tests in 060-rc of 20-locate suite. * modulecmd.tcl, testsuite/modules.20-locate/060-rc.exp: Include global/user rc defs in search/whatis/paths Ask getModules procedure to include global or user RC definitions when called in cmdModuleSearch and cmdModulePaths. By doing so aliases or symbolic versions defined in these global or user RC will be found and solved if specified as module to search on these commands. To do so, make 'search' argument of getModules procedure a list rather a string to be able to precise multiple search keywords like done by cmdModuleSearch. Add non-regression tests in 060-rc of 20-locate suite. * modulecmd.tcl, testsuite/modules.20-locate/050-locrc.exp: Look at loaded mods in getPathToModule if asked only Add 'look_loaded' argument to getPathToModule procedure in order to look at the loaded modules to get path for specified 'mod' only if this new argument is enabled. 'look_loaded' argument is enabled by default. Disable this behavior when getPathToModule recursively call itself to solve aliases or when cmdModuleSearch or cmdModulePaths also attempt to solve alias in the middle of their own search. Add non-regression tests in 050-locrc of 20-locate suite. * modulecmd.tcl: Constraint module resolution to specific dir if set If 'indir' argument is set for getPathToModule procedure, look to find modulefile corresponding to 'mod' argument only in modulepath directory specified. Rely on this feature in cmdModuleSearch and cmdModulePaths for alias resolution, where result has to belong to the current modulepath directory being searched. 2017-07-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Rework getPathToModule to fully rely on getModules * modulecmd.tcl: Rework handling of global/user rc defs in getModules Introduce a 'g_rcVersion' array to handle symbolic versions set from a global or a user RC the same way than aliases with the 'g_rcAlias' array. Then in getModules procedure treat these definitions from global or user RC with a 'add_rc_defs' flag. If set and if aliases or symbolic versions match passed mod, these aliases or versions from global or user RC are added to the result array. If search in getModules is set to 'rc_defs_included', the aliases and symbolic versions set from global or user RC added to the result array in addition to the search result from the passed directory. 2017-07-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.91-sort/020-avail.exp: Register in getModules dir default even if broken Register a default set for a given module in the corresponding 'directory' entry in the result consolidated by the getModules procedure, even if this default does not correspond to a valid entry. This way it is up to the procedure treating the result provided by getModules to handle the verification of the default correctness and display any error. As a consequence, a bad default will lead to no result displayed for the corresponding module in case of 'onlydefault' avail display. Add tests in 020-avail of 91-sort suite to check behavior. * modulecmd.tcl: Register sym versions in getModules result array Add tracking of the source file that defined a given symbolic module version in order to add in getModules these symbloc versions to the 'mod_list' result array if they match searched modulepath directory and module. Symbolic versions are added to 'mod_list' array as 'version' entries so they can be ignored by treatment not requiring them (like display procedures that get symbols not independently but through the relative modulefile). 2017-07-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Take benefit of new dir handling in getPathToModule Rework code in getPathToModule procedure to use the information that is now stored in the mod_list structure (result of the getModules procedure call). With this information it is now easier to get directory default element. Also empty directories are not part of mod_list result, so less tests are required in getPathToModule. 2017-07-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, .../emptydeepdir/emptydir/.ignored, testsuite/modulefiles.deep/modalias/dir3/.ignored, testsuite/modulefiles/emptydir/.ignored, testsuite/modules.91-sort/020-avail.exp: Handle empty dir in getModules dir consolidation When consolidating directory content information in getModules procedure, handle empty directories so they are removed from the result array. When an empty directory is removed and its parent directory becomes empty after child removal, remove also this directory and so on. Moreover when an empty directory is removed and if it was the default version of this parent directory, default is changed to last element in parent directory. Add and adapt tests in 020-avail of 91-sort suite. 2017-07-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modulefiles/dirmodalias/.modulerc, testsuite/modulefiles/dirmodalias/1.0, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.90-avail/070-full.exp, testsuite/modules.91-sort/020-avail.exp: Fix default/latest avail when alias override dir When an alias is set and overrides name of existing directory, take this alias in account for default and latest choice and ignore directory content. Add and adapt tests in 020-avail of 91-sort suite. 2017-07-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.91-sort/020-avail.exp: Rework default/latest avail version search Improve getModules procedure to register for each directory the default element in this dir (implicitly or explicitly set) and the list of all elements dictionarily sorted. Then base the code in listModules procedure that look for default or latest versions only on the information stored in getModules array result rather than comparing every result names between each other. As a side effect, default or latest available version printing does not confuse output anymore when at a given level a sub-directory element is last element in directory among modulefiles. Previously sub-directory was printed but last file among modulefiles was also printed (2 latests version at the same level). Also to simplify behavior, and understand a directory tagged "default" does not appear anymore in default listing result as its content (the default version found in that dir) will be displayed. Remove stringDictionaryCompare procedure that is not used anymore due to the code rework. Add and adapt tests in 020-avail of 91-suite. * modulecmd.tcl, testsuite/modules.90-avail/030-multiple.exp: Correct inclusion of aliases in getModules res Fix inclusion of aliases in getModules procedure results not to include these aliases if they are not part of the exact same path than path of the search. Previously if alias source path and search path were similar, aliases were wrongly included in results. Add test in 030-multiple of 90-avail to check correct behavior. 2017-07-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Rework way getCollectionFilename proc pass descr Return collection filename and description as a list result in getCollectionFilename procedure rather passing a variable name altered in procedure with 'upvar' call. * modulecmd.tcl, testsuite/modules.61-coll/080-access.exp: Distinguish collection found from read test Previsously cmdModuleRestore and cmdModuleSaveshow procedures were directly calling for 'file readable' so existence and readability were tested in a single call. To be able to distinguish an exist issue from a read issue these two procedures now only test existence and readability is tested by the readCollectionContent procedure. As a result, if a collection exists but is not readable a different message will now appear. 2017-07-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.60-initx/080-access.exp: testsuite: add 080-access tests in 60-initx suite Test behaviors when shell init script cannot be accessed or written with 080-access tests added to 60-initx suite. * modulecmd.tcl: Change init* cmds write behavior Previously initadd, initprepend, initswitch, initrm and initclear commands were altering shell initialization file by writing a new file then copying this new file to replace the existing init file. This commit tries to simplify init file re-write by first consolidating new file content in a list variable, then when shell init file read is finished and new content is established, the shell init file is opened in write mode and its content is replaced with the new content. In addition new behavior only re-writes shell init file if its content need to be altered. Take this opportunity to also change name of some local variables to make them shorter. * modulecmd.tcl, testsuite/home/.modules.savenull, testsuite/modules.60-initx/005-init.exp, testsuite/modules.60-initx/010-list.exp, testsuite/modules.60-initx/020-add.exp, testsuite/modules.60-initx/030-switch.exp, testsuite/modules.60-initx/040-prepend.exp, testsuite/modules.60-initx/050-rm.exp, testsuite/modules.60-initx/060-2nd.exp, testsuite/modules.60-initx/095-cleanup.exp: Raise error on init* cmds when no 'module load' found When no 'module load' line has been found in shell init file raise an error on initadd, initprepend, initswitch, initrm and initclear commands as action requested was not performed. 2017-06-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.20-locate/081-access-rc.exp: testsuite: add 081-access-rc tests in 20-loc suite Check behavior when global RC files cannot be read. * testsuite/etc/rc, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/065-rcerrs.exp: testsuite: more tests for global RC in 20-loc suite Test behaviors when global RC is not set at all, or is set at $MODULESHOME/etc/rc or is both set at $MODULESHOME/etc/rc and $MODULERCFILE. 2017-06-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.61-coll/040-restore.exp: testsuite: add tests restoring bad coll in 61-coll * modulecmd.tcl, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/050-saverm.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.61-coll/080-access.exp: Normalize collection access issue error message Test behaviors when collection cannot be accessed with 080-access tests added to 61-coll suite. Normalize error messages for the various collection-related commands when collection cannot be accessed. Catch also error when trying to access the collection directory but access rights on this directory does not allow for listing its content. 2017-06-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modulefiles/setenv/0.8, testsuite/modulefiles/unsetenv/0.8, testsuite/modules.50-cmds/028-setenv-refcount.exp, .../modules.50-cmds/038-unsetenv-refcount.exp, testsuite/modules.90-avail/020-single.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/050-long.exp, testsuite/modules.90-avail/070-full.exp: Clean any previous ref count array on setenv/unsetenv When manpulating path list with append-path/prepend-path/etc commands a _modshare variable is set to keep track of how many times each reference has been loaded. But if after these commands a setenv/unsetenv command is used, the _modshare variable is left alone whereas the path list variable is entirely replaced by a new value or destroyed. To sanitize this kind of situation, any existing _modshare variable is cleaned-up when the associated variable is targeted by a setenv or an unsetenv command. Non-regression tests 028-setenv-refcount and 038-unsetenv-refcount in 50-cmds suite have been added to check new behavior. 2017-03-24 Bert Wesarg <bert.wesarg@googlemail.com> * init/bash.in, init/fish.in, init/ksh.in, init/sh.in, init/zsh.in, testsuite/install.00-init/010-environ.exp: init: Do not pollute tab-completion with `moduleraw` command. 2017-06-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modulefiles/spread/5.0, testsuite/modulefiles/spread/6.0, testsuite/modulefiles/spread/7.0, testsuite/modulefiles/spread/8.0, testsuite/modulefiles/spreadrc/dir5/.modulerc, testsuite/modulefiles/spreadrc/dir5/1.0, testsuite/modulefiles/spreadrc/dir6/.modulerc, testsuite/modulefiles/spreadrc/dir6/1.0, testsuite/modulefiles/spreadrc/dir7/.modulerc, testsuite/modulefiles/spreadrc/dir7/1.0, testsuite/modulefiles/spreadrc/dir8/.modulerc, testsuite/modulefiles/spreadrc/dir8/1.0, testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.90-avail/070-full.exp: Dedicate an interp per interpretation level Have a separate interpreter per level of interpretation in case of nested interpretations. By doing so a module loaded by another does not influence the interpretation of the module loading it. Non-regression tests 302-interp-cascaded have been added to 50-cmds suite. 2017-06-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modulefiles/spread/3.0, testsuite/modulefiles/spread/4.0, testsuite/modulefiles/spreadrc/dir3/.modulerc, testsuite/modulefiles/spreadrc/dir3/1.0, testsuite/modulefiles/spreadrc/dir4/.modulerc, testsuite/modulefiles/spreadrc/dir4/1.0, testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.50-cmds/301-interp-command.exp, testsuite/modules.90-avail/070-full.exp: Renew interp when command list is altered Delete/recreate the interpreter when a native Tcl command is altered by a previous modulerc or modulefile interpretation. When a Tcl native command is overriden it appears in the defined procedure list. This procedure not part of the initial list is unset at the reset time which makes also disappear the Tcl command. List of Tcl commands is dumped at initial interpreter creation time and compared after each procedure reset. If command lists differ, interpreter is deleted then recreated to ensure proper functioning. Non-regression tests 301-interp-command have been added to 50-cmds suite. 2017-06-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modulefiles/spread/1.0, testsuite/modulefiles/spread/2.0, testsuite/modulefiles/spreadrc/.modulerc, testsuite/modulefiles/spreadrc/dir1/.modulerc, testsuite/modulefiles/spreadrc/dir1/1.0, testsuite/modulefiles/spreadrc/dir2/.modulerc, testsuite/modulefiles/spreadrc/dir2/1.0, testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.90-avail/070-full.exp: Reset interp state from one interp to another When creating interpreter, dump its variable and procedure content so before each usage of this interpreter for another modulerc or modulefile the initial variable and procedure state is restored to avoid spread of definitions from one interpretation to another. Variables are removed if they are not part of the initial state or restored if their value has changed. Procedures are removed if they are not part of the initial state. Nothing is done if procedures part of the initial state have been changed during an interpretation as there is no vital procedure in this list. Interpreter aliases are redefined before each interpretation to clear any potential override of these aliased procedures. dumpInterpState and resetInterpState procedures are introduced to handle the dump/reset mechanism of the interpreter. Non regression tests 300-interp in 50-cmds suite have been added to test the correct behavior of interpreters when running a list of modulerc and modulefiles. 2017-06-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Reuse interp rather creating new one each time Make use of the same Tcl interp for each modulefile interpreation and use another one for each modulerc (but the same for each modulerc). By doing so we proceed like on C-version where same interpreter is used across modulefile or modulerc interpretation. Huge performance improvement is achievied with this change on commands making intensive use of interp like 'avail'. Change code to use a static name for those interpreter: '__modulefile' for the interp dedicated to modulefile interpretation and '__modulerc' for the interp dedicated to the RC interpretation. 2017-06-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Workaround 'glob -nocomplain' for perms issue on Tcl8.4 On Tcl 8.4, 'glob -nocomplain' also silent permission errors. So to handle access issue to directory in findModules we workaround that by not using the '-nocomplain' option of glob but handling case where glob raise an error when directory is empty. 2017-06-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_with_c-version.pod, modulecmd.tcl, testsuite/modules.20-locate/047-symerrs.exp: Revise alias and symbolic version internal registering Register alias and symbolic version deep resolution at definition time through a new 'setModuleResolution' procedure called by 'module-version' and 'module-alias' procedures. Make use of new global array 'g_moduleResolved' and its reverse structure 'g_resolvedHash' to keep registered resolution at hand. Also introduce 'g_symbolHash' global array to register and easily get the list of all symbols for a given module. As resolution is now computed at definition time, the 'getVersAliasList' and 'resolveModuleVersionOrAlias' procedures can be greatly simplified and just need to return the value of the 'g_symbolHash' or 'g_moduleResolved' arrays for the module name passed as argument. This change saves lot of time especially on commands heavily relying on these procedures like 'avail'. The global arrays 'g_versionHash', 'g_moduleDefault' and 'g_aliasHash' become useless with this change so they have been removed. As a side effect of resolving alias and symbolic version at definition time, resolution loop are not registered anymore and produce an error message when spotted. 2017-05-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Try/catch rather test/try in findModules When reading the content of a modulefile directory, try access then catch any issue rather testing access before trying. By doing so we reduce the number of 'access' system call. Getting an access error at the 'open' time is a bit more costly than at 'stat' time but most modulefile directories should not raise access issue, only some. If any issue occur, register it in the g_access_mod_info global array as done in checkValidModule procedure. A unified procedure called registerAccessIssue has been setup for both checkValidModule and findModules procedures to share same code. 2017-06-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.00-init/071-args.exp: No error raise on empty arg list for load To cope with initadd behavior that require at least an empty 'module load' line in startup files. (fix SF bug#88) * modulecmd.tcl, testsuite/home/.modules.saveempty, testsuite/modules.60-initx/020-add.exp: Fix initadd to handle load line w/o trailing space Was previously expecting load directive to be written 'module load ' to get a match. With fix, 'module load' line will also be matched. Add test in 020-add of 60-initx suite to check that. 2017-06-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modulefiles/break/5.0, testsuite/modulefiles/break/6.0, testsuite/modulefiles/continue/5.0, testsuite/modulefiles/continue/6.0, testsuite/modulefiles/exit/4.0, testsuite/modules.50-cmds/200-break.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/220-continue.exp, testsuite/modules.50-cmds/230-loop.exp, testsuite/modules.90-avail/070-full.exp: Fix use of break/exit/continue outside of a loop Like C-version catch raised error when break or continue are called from outside of a loop to handle them as when they are called from modulefile main body. Add non-regression tests in 200-break, 210-exit, 220-continue and 230-loop of 50-cmds to check behavior when break, exit and continue are called from within a procedure. 2017-05-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.10-use/090-bad.exp: testsuite: add 090-bad tests in 10-use suite * modulecmd.tcl, testsuite/modulefiles/use/4.0, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/032-prepend.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.90-avail/070-full.exp: Add tests for use/unuse of empty path name Adapt cmdModuleUse to handle empty path name "" as any other path string, so an error is returned when file type is cheked. Add tests in 10-use and 50-cmds suites to check behavior of use and unuse commands with an empty path passed as argument. Add by the way tests that were missing for bash shell in 10-use suite. * testsuite/modulefiles/use/3.0, testsuite/modulefiles/use/3.1, testsuite/modulefiles/use/3.2, testsuite/modules.10-use/032-prepend.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.90-avail/070-full.exp: testsuite: add test for use --prepend Introduce new tests for 'use --prepend' command in 10-use and 50-cmds suites. * testsuite/modulefiles/RCS/1.0: testsuite: add modulefile part of ignored list * modulecmd.tcl: No modpath dir checks in cmdModule{Avail,Aliases} Rely on checks already made in findModules procedures which trap bad directories (type, access rights, etc) by calling glob under the catch umbrella. Make cmdModuleAliases use getModules procedure by the way rather listModules to trigger aliases and versions search. * testsuite/modules.00-init/006-procs.exp, testsuite/modules.10-use/080-access.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.80-deep/080-access.exp: testsuite: add 080-access tests in 10-use suite Test behaviors when modulepath cannot be accessed. Centralize by the way the change_file_perms and restore_file_perms procedures that are now used in different parts of the testsuite. 2017-05-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles/loc_dv9/.version, testsuite/modulefiles/loc_dv9/1.0, testsuite/modulefiles/loc_dv9/2.0, testsuite/modules.20-locate/030-defvers.exp, testsuite/modules.90-avail/070-full.exp: testsuite: test module-version use in .version file Add test to 030-defvers in 20-locate suite to check that default version is correctly resolved when it is declared with module-version command in a .version rc file. 2017-05-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles/remove/1.0, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.90-avail/070-full.exp: testsuite: add 062-remove-delim tests in 50-cmds suite * testsuite/modules.70-maint/130-aliases.exp: testsuite: add 130-aliases tests in 70-maint suite 2017-05-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles/module/.ignored, testsuite/modulefiles/module/ignored~: testsuite: add test modfiles that should be hidden Ensure modulefiles starting with a dot or finishing with a tilde are not reported in global 'module avail' results. * testsuite/modules.61-coll/020-savelist.exp: testsuite: test all 'savelist' display options 2017-05-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Fix loop in lreverse proc provided for Tcl<8.5 * modulecmd.tcl: Workaround min and max funcs not avail in Tcl<8.5 * .travis.yml: travis: use version specific-tclsh on the diff. builds * INSTALL.txt, Makefile.in, configure, testsuite/config/unix.exp, testsuite/modules.70-maint/120-autoinit.exp: install: add --with-tclsh config opt package Add the ability to choose the Tcl interpreter shell to setup in initialization scripts and to use when running the testsuite. 2017-05-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles/help/2.0, testsuite/modulefiles/trace/all_on, testsuite/modules.50-cmds/105-trace.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp: Add tests for deprecated 'module-trace' cmd * testsuite/modulefiles/info/others, testsuite/modules.50-cmds/284-info-others.exp, testsuite/modules.90-avail/070-full.exp: Add tests for bad or deprecated 'module-info' cmds * modulecmd.tcl, testsuite/modulefiles/bad2/proc, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/070-full.exp: Put call to Modules{Display,Help,Test} procs under catch Put the ModulesDisplay, ModulesHelp and ModulesTest procedures call under the same catch than used for the evaludation of the modulefile content. Doing so an error found within these procedures will be handled the same way than if the error is triggered from the main body of the modulefile. As a consequence, the ModulesDisplay, ModulesHelp and ModulesTest procedures are not anymore called when an error has been raised during the modulefile main evaluation, since the same catch is shared. Some existing test results have been adapted for this change and new tests have been added to check this specific behavior in 070-display, 080-help and 085-test in 70-maint suite. 2017-05-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.70-maint/060-apropos.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp: Harmonize and test '--debug' option 2017-05-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.00-init/071-args.exp: Remove 'debug' module command This hidden command produces output that is hard to process. So as it does not seem to be useful and as it is not tested, I prefer to remove it. If a need raise again on this 'debug' topic, a new command will be introduced. 2017-05-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_with_c-version.pod, doc/source/module.pod.in, site.exp.in, testsuite/bin/install_test_csh, testsuite/bin/install_test_fish, testsuite/bin/install_test_sh, testsuite/config/unix.exp, testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/006-procs.exp, testsuite/install.00-init/025-autoinit.exp, testsuite/modules.70-maint/120-autoinit.exp: Test and document 'autoinit' module command 2017-05-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_with_c-version.pod, doc/source/module.pod.in, modulecmd.tcl, testsuite/modules.70-maint/110-paths.exp: Fix, test and document 'paths' module command * doc/source/diff_with_c-version.pod, doc/source/module.pod.in, modulecmd.tcl, testsuite/modules.70-maint/100-path.exp, .../{095-cleanup.exp => 999-cleanup.exp}: Test and document 'path' module command 2017-05-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/070-unuse.exp: testsuite: cover use/unuse with no args Add non-regression tests in 10-use suite for the 'use' and 'unuse' commands when no arg are passed to them (print list of enabled module paths). * testsuite/modules.90-avail/070-full.exp: testsuite: add 070-full test to 90-avail suite Validate output of all modules from a test modulepath with a specific terminal width setup. * .travis.yml: travis: coverage on each Tcl rel + x-server init For a more complete coverage, run it on each Tcl releases, also enable a x-server on a test case to validate x-resource modulefile command. To optimize builds, when MAKE_TESTCOVERAGE is enabled run 'testcoverage' instead of 'test'. * modulecmd.tcl, testsuite/modules.50-cmds/250-x-resource.exp: Correct use of xrdb tool when not in default path 2017-05-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_with_c-version.pod, modulecmd.tcl, testsuite/modules.00-init/071-args.exp, testsuite/modules.60-initx/005-init.exp, testsuite/modules.60-initx/010-list.exp, testsuite/modules.60-initx/020-add.exp, testsuite/modules.60-initx/030-switch.exp, testsuite/modules.60-initx/040-prepend.exp, testsuite/modules.60-initx/050-rm.exp, testsuite/modules.60-initx/060-2nd.exp, testsuite/modules.60-initx/095-cleanup.exp: Fix 'init*' commands to behave more like C-version Adapt tests from 60-initx to match results produced by this module flavor. Clarify differences with C-version on these module commands in diff_with_c-version documentation. 2006-01-12 R.K. Owen <rk@owen.sj.ca.us> * testsuite/home/.modules, testsuite/modules.60-initx/005-init.exp, testsuite/modules.60-initx/010-list.exp, testsuite/modules.60-initx/020-add.exp, testsuite/modules.60-initx/030-switch.exp, testsuite/modules.60-initx/040-prepend.exp, testsuite/modules.60-initx/050-rm.exp, testsuite/modules.60-initx/060-2nd.exp, testsuite/modules.60-initx/095-cleanup.exp: testsuite: added suite for the "module init*" cmds 2017-05-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml: travis: test 'make uninstall' * .gitattributes, .gitignore, Makefile.in, README.txt => README.md: Move to README.md to embed build and coverage status * .gitignore, .travis.yml, Makefile.in, contrib/nglfar2ccov: Integrate to codecov.io code coverage service Add nglfar2ccov contrib script to translate Nagelfar coverage result for Codecov report. Append publication of coverage report to codecov.io service. 2017-05-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitignore, Makefile.in, testsuite/config/unix.exp: Add makefile rules to produce code coverage Instrument modulecmd.tcl, then run testsuite and produce a coverage report based on code coverage analysis of Nagelfar toolkit [1]. Include retrieval and installation of Nagelfar within Makefile. [1] http://nagelfar.sourceforge.net/codecoverage.html 2017-05-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.txt, configure: install: clarify that 'configure' is a bash script * init/sh.in: init: make sh init script closer to POSIX spec Provide support for /bin/sh flavors different than bash or zsh (dash for instance). 2017-05-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/bin/install_test_sh, testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/030-options.exp, testsuite/install.00-init/040-subshell.exp, testsuite/install.00-init/050-crossshell.exp: testsuite: adapt 'install' suite for dash sh-shell 2017-05-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml: Introduce travis-ci configuration file 2017-05-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/090-uname-proc.exp: testsuite: adapt 'uname release' test for Ubuntu * modulecmd.tcl: Adapt sep and col display for very short width term When terminal width is found too short to handle one a single line separator title or one column of content, set a minimal number of '-' for separator line and set column number to 1. 2017-05-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitignore, INSTALL.txt, Makefile.in, README.txt, configure, site.exp.in, testsuite/bin/install_test_csh, testsuite/bin/install_test_fish, testsuite/bin/install_test_sh, testsuite/config/unix.exp, testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/006-procs.exp, testsuite/install.00-init/010-environ.exp, testsuite/install.00-init/020-module.exp, testsuite/install.00-init/030-options.exp, testsuite/install.00-init/040-subshell.exp, testsuite/install.00-init/050-crossshell.exp: Introduce 'install' non-regression testsuite This new non-regression testsuite is triggered by the 'make testinstall' command and checks modules-tcl installation is operational. 2017-05-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.txt: doc: fix reference to 'make test' in INSTALL 2017-05-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/fish.in: init: fix modulerc load test on 'fish' init script 2017-05-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/sh.in: init: fix interactive shell test on 'sh' init script 2017-05-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile.in: install: add notice at end of install for next steps * INSTALL.txt, Makefile.in, configure, contrib/rpm/modules-tcl.spec, init/Makefile.in: install: add --enable-example-modulefiles config opt Install by default some modulefiles provided as example in the system modulefiles directory. * Makefile.in, init/Makefile.in: install: skip modulefilesdir removal if not empty * contrib/modulefiles/dot, contrib/modulefiles/module-git, contrib/modulefiles/module-info, contrib/modulefiles/null, contrib/modulefiles/use.own: contrib: import and adapt example modulefiles Get and adapt regular set of example modulefiles provided with environment-modules. 2017-05-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/Makefile.in, init/zsh-functions/_module, init/zsh.in: Add completion script for Zsh 2017-04-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_with_c-version.pod, doc/source/module.pod.in, doc/source/modulefile.pod, init/bash_completion, init/tcsh_completion.in, modulecmd.tcl, testsuite/modulefiles/info/command, testsuite/modulefiles/info/commandexp, testsuite/modulefiles/info/mode1, testsuite/modulefiles/info/mode2, testsuite/modulefiles/info/mode3, testsuite/modulefiles/info/mode4, testsuite/modulefiles/info/mode5, testsuite/modulefiles/info/mode6, testsuite/modulefiles/info/specified, testsuite/modulefiles/inforc/1.0, testsuite/modulefiles/inforc/2.0, testsuite/modulefiles/test/1.0, testsuite/modulefiles/test/1.2, testsuite/modulefiles/test/2.0, testsuite/modules.00-init/071-args.exp, testsuite/modules.50-cmds/083-info-mode.exp, testsuite/modules.50-cmds/084-info-mode-exp.exp, testsuite/modules.50-cmds/085-info-flags.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/280-info-specified.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/085-test.exp: Introduce 'test' command and mode Add 'module test' command to trigger when called execution of a ModulesTest procedure in target modulefile following same kind of mechanism than 'module help'. If ModulesTest procedure is missing from modulefile, a 'Unable to find ModulesTest proc' message is displayed but no error code is set. If ModulesTest procedure returns 1 (true), test is considered successful and message 'Test result: PASS' is displayed. If ModulesTest returns no or any other value, test is considered failed and message 'Test result: FAIL' is displayed. In this case, module command exit in error. Adapt bash and tcsh completion scripts for the new command. Describe new command and new mode in docs. Adapt existing non-regression tests and relative test modulefiles for new command and new mode in 00-init, 50-cmds and 70-maint suites. Add 085-test tests in 70-maint to check coherent behavior of new command. 2017-04-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS, contrib/rpm/modules-tcl.spec, doc/source/diff_with_c-version.pod, modulecmd.tcl, www/index.html: Release of version 1.832 2017-04-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modulefiles/getenv/1.0, testsuite/modules.50-cmds/260-getenv.exp: Fix getenv proc to correctly return env variable Add 260-getenv non-regression test in 50-cmds suite. Thanks to Roberto Beccherle for reporting this issue. * contrib/rpm/modules-tcl.spec: rpm: make use of alternatives for man pages on Fedora * contrib/rpm/modules-tcl.spec: rpm: use rpm macro file provided in source tarball 2017-04-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.txt, Makefile.in, configure, contrib/rpm/modules-tcl.spec, doc/Makefile.in: install: add --enable-doc-install config opt feature With this doc install can be disabled for package manager like rpm that handles by itself this kind of doc. * Makefile.in: install: add a 'srpm' make target * doc/source/diff_with_c-version.pod, doc/source/modulefile.pod: doc: clarify mgmt of file access issue * doc/source/diff_with_c-version.pod: doc: load in modfile unload in reserve order 2017-04-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_with_c-version.pod, doc/source/module.pod.in, doc/source/modulefile.pod: doc: clarify version/alias handling in avail and loc 2017-04-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Reset got mod list between each dir in getPathToModule * testsuite/modulefiles.deep/moddef/dir2/.modulerc, testsuite/modulefiles.deep/moddef/dir2/1.0, testsuite/modulefiles.deep/moddef/dir2/2.0, testsuite/modules.80-deep/080-access.exp: Add access issue non-reg tests in 80-deep suite Add non-regression tests in 080-access of 80-deep suite to guaranty correct behavior when some access issues happen on modulefile or modulerc or directory in case of deep modulefiles. * modulecmd.tcl: Mention not found alias target in cmdModuleSearch For a given mod search, if an alias corresponds to this search but the associated modulefile cannot be located, report locate error on this not found target. * modulecmd.tcl: Stop mod dir resolution as soon as we get an issue When looking to a directory content in order to resolve a modulefile in the getPathToModule procedure, stop this resolution as soon as we get an issue on a mod to return (invalid or access issue). 2017-04-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Adapt cmdModuleSearch to raise access error message If searching for a given mod and no modulefile to interpret found, call for a resolution of this mod after re-enabling error report. If there are some access issues, they will be echoed via this call to getPathToModule. * modulecmd.tcl: Add indir arg to getPathToModule proc Be able to optionally precise in what module directory to search for mod instead of looking for mod in every directory set in MODULEPATH. If 'indir' arg is set, do not raise the 'cannot locate mod' error. Also build return list with module found status when a modulefile cannot be returned. Modulefile is then empty string and instead of module name boolean is set depending if a module has been found for search or not. * modulecmd.tcl, testsuite/modules.70-maint/060-apropos.exp: Display all whatis line when search matches one Instead of displaying only the whatis line matching the apropos search, all whatis line are now displayed to get the full description of the module. Add non-regression test in 060-apropos of 70-maint suite to check this specific behavior. 2017-04-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.80-deep/050-whatis.exp, testsuite/modules.91-sort/030-whatis.exp: Match alias but report modulefile on whatis/apropos cmds As whatis/apropos commands make interpretation of modulefiles like load/unload, always report the module under their modulefile name not their alias name. Of course, alias and symbolic version may still be used to query whatis content, but displayed result will mention the relative modulefile targetted by this alias or symbol. Adapt existing non-regression tests in 20-locate, 80-deep and 91-sort suites. 2017-04-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Plug cmdModuleSearch on getModules rather listModules Change cmdModuleSearch procedure to make use of getModules rather calling for listModules then running getPathToModule on each result return. With getModules, getPathToModule only need to be called on alias result, not on modulefile, which saves a lot of time. * modulecmd.tcl, testsuite/modules.50-cmds/190-load.exp: Rely more on checkValidModule for full pathname module Rather checking existence and readability within getPathToModule procedure, better rely on the checkValidModule procedure then analyse global arrays for error information. 2017-04-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Register then display modulefile access issue When checking validity of a modulefile in checkValidModule procedure, register any access issue within a new global array g_access_mod_info. Then when looking for a specific module, if an access issue occured during its check, display returned error code message. * modulecmd.tcl: Check found vers valid before using in getPathToModule Last element in a directory may be an alias whose target modulefile may be not be readable, so we need to check this target is available on our list of valid modulefiles before using it. * modulecmd.tcl: Check last elt in dir before use in getPathToModule Handle cases where directory is empty or none of its elements can be accessed. * testsuite/modulefiles/loc_rc6/0.9, testsuite/modules.20-locate/080-access.exp, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/050-long.exp: Add access issue non-reg tests in 20-locate suite Add non-regression tests in 080-access of 20-locate suite to guaranty correct behavior when some access issues happen on modulefile or modulerc or directory. As a loc_rc6/0.9 module is added for the purpose of the new tests, adapt non-regression tests working with loc_rc6 in 90-avail suite. 2017-04-15 Jason Travis <jtravis@tgen.org> * doc/example.txt: doc: fix typo 2017-04-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modulefiles/module/meta, testsuite/modules.50-cmds/150-module.exp: Reverse load command mod list on unload mode When mode is set to unload, 'module load' commands in modulefile are interpreted as 'module unload' commands. To guaranty correct behavior regarding requirements, the module list passed to the load command is reversed to get and unload of the modulefiles in the reverse order than load. This is the same behavior than applied on purge or restore commands, where loaded module list is reversed to be unloaded. Add non-regression tests in 150-module of 50-cmds suite to check load and unload of meta-module works correctly over time. * init/modulerc.in, modulecmd.tcl, testsuite/home/rcnomagic, testsuite/home/rctosource, testsuite/modules.70-maint/090-source.exp: Relax magic cookie constraint on source command As files sourced by a 'module source' command may be managed outside of the modulefile environment, relax the constraint of having a specific magic cookie at the start of the file to get required clearance before evaluation. This is typicaly helpful for the initialization modulerc file that may loose its magic cookie after some manual edits. Add non-regression tests in 090-source of 70-maint suite. * INSTALL-win.txt, doc/howto/using_on_windows.pdf, doc/readme.txt, windows/module-tcl-win.chm: doc: Transform windows how-to from CHM to PDF Change "Using modules-tcl on Windows" how-to document from a CHM format to a PDF format, as CHM is a proprietary format that does not cope well with open-source project. Document has been moved to 'doc' directory, a new 'howto' sub-directory has been created to host this file. * .gitattributes, contrib/template/.gconf/apps/%gconf.xml, contrib/template/.gconf/apps/evolution/%gconf.xml, .../.gconf/apps/evolution/calendar/%gconf.xml, .../apps/evolution/calendar/notify/%gconf.xml, .../template/.gconf/apps/gconf-editor/%gconf.xml, contrib/template/.gconf/apps/gedit-2/%gconf.xml, .../.gconf/apps/gedit-2/plugins/%gconf.xml, .../apps/gedit-2/plugins/filebrowser/%gconf.xml, .../gedit-2/plugins/filebrowser/on_load/%gconf.xml, .../.gconf/apps/gedit-2/preferences/%gconf.xml, .../.gconf/apps/gedit-2/preferences/ui/%gconf.xml, .../gedit-2/preferences/ui/statusbar/%gconf.xml, .../.gconf/apps/gnome-power-manager/%gconf.xml, .../apps/gnome-power-manager/buttons/%gconf.xml, .../.gconf/apps/gnome-screensaver/%gconf.xml, .../template/.gconf/apps/gnome-settings/%gconf.xml, .../apps/gnome-settings/gnome-panel/%gconf.xml, .../template/.gconf/apps/gnome-terminal/%gconf.xml, .../.gconf/apps/gnome-terminal/profiles/%gconf.xml, .../gnome-terminal/profiles/Default/%gconf.xml, .../.gconf/apps/nautilus-open-terminal/%gconf.xml, contrib/template/.gconf/apps/panel/%gconf.xml, .../template/.gconf/apps/panel/applets/%gconf.xml, .../apps/panel/applets/clock_screen0/%gconf.xml, .../panel/applets/clock_screen0/prefs/%gconf.xml, .../applets/indicator_applet_screen0/%gconf.xml, .../apps/panel/applets/mixer_screen0/%gconf.xml, .../applets/notification_area_screen0/%gconf.xml, .../applets/show_desktop_button_screen0/%gconf.xml, .../panel/applets/trashapplet_screen0/%gconf.xml, .../panel/applets/window_list_screen0/%gconf.xml, .../applets/window_list_screen0/prefs/%gconf.xml, .../applets/workspace_switcher_screen0/%gconf.xml, .../workspace_switcher_screen0/prefs/%gconf.xml, .../template/.gconf/apps/panel/general/%gconf.xml, .../template/.gconf/apps/panel/objects/%gconf.xml, .../objects/browser_launcher_screen0/%gconf.xml, .../objects/clock_separator_screen0/%gconf.xml, .../apps/panel/objects/menu_bar_screen0/%gconf.xml, .../.gconf/apps/panel/objects/object_0/%gconf.xml, .../.gconf/apps/panel/objects/object_1/%gconf.xml, .../.gconf/apps/panel/objects/object_2/%gconf.xml, .../panel/objects/yelp_launcher_screen0/%gconf.xml, .../.gconf/apps/panel/toplevels/%gconf.xml, .../toplevels/bottom_panel_screen0/%gconf.xml, .../bottom_panel_screen0/background/%gconf.xml, .../panel/toplevels/top_panel_screen0/%gconf.xml, .../top_panel_screen0/background/%gconf.xml, contrib/template/.gconf/desktop/%gconf.xml, contrib/template/.gconf/desktop/gnome/%gconf.xml, .../.gconf/desktop/gnome/accessibility/%gconf.xml, .../gnome/accessibility/keyboard/%gconf.xml, .../.gconf/desktop/gnome/applications/%gconf.xml, .../gnome/applications/window_manager/%gconf.xml, .../.gconf/desktop/gnome/lockdown/%gconf.xml, contrib/template/.vim/colors/herald.vim, contrib/template/.vim/colors/moria.vim, contrib/template/.vim/colors/xoria256.vim, contrib/template/.vim/perl-support.zip, .../template/.vim/perlsupport/README.perlsupport, .../.vim/perlsupport/autoload/perlsupportgui.vim, .../perlsupport/autoload/perlsupportprofiling.vim, .../.vim/perlsupport/autoload/perlsupportregex.vim, .../template/.vim/perlsupport/doc/perlsupport.txt, .../template/.vim/perlsupport/ftplugin/perl.vim, .../codesnippets/SmallProf-variables.pl, .../perl-support/codesnippets/dot.SmallProf, .../codesnippets/free-software-comment, .../perl-support/codesnippets/module-interface.pl, .../perlsupport/perl-support/codesnippets/new.pl, .../codesnippets/pod-template-application.pl, .../codesnippets/pod-template-module.pl, .../print-data-structure-with-Dumper.pl, .../perl-support/codesnippets/print-hash-sorted.pl, .../perl-support/codesnippets/print-hash.pl, ...process-all-files-in-a-directory-recursively.pl, .../perl-support/codesnippets/slurp-file.pl, .../.vim/perlsupport/perl-support/doc/ChangeLog, .../perlsupport/perl-support/doc/perl-hot-keys.pdf, .../perlsupport/perl-support/doc/perl-hot-keys.tex, .../.vim/perlsupport/perl-support/doc/pmdesc3.text, .../perl-support/modules/perl-modules.list, .../perl-support/rc/customization.ctags, .../perl-support/rc/customization.gvimrc, .../perl-support/rc/customization.perltidyrc, .../perl-support/rc/customization.smallprof, .../perl-support/rc/customization.vimrc, .../perlsupport/perl-support/scripts/csv2err.pl, .../perlsupport/perl-support/scripts/efm_perl.pl, .../perlsupport/perl-support/scripts/pmdesc3.pl, .../perlsupport/perl-support/scripts/wrapper.sh, .../perlsupport/perl-support/templates/Templates, .../perl-support/templates/comments.template, .../perl-support/templates/idioms.template, .../perl-support/templates/pod.template, .../perl-support/templates/statements.template, .../perlsupport/perl-support/wordlists/perl.list, .../.vim/perlsupport/plugin/perl-support.vim, contrib/template/.vim/plugin/matrix.vim, contrib/template/.vim/syntax/fluxkeys.vim, contrib/template/.vim/syntax/perl.vim: Remove .gconf/.vim dirs from profile template example These two directories were big with very site-specific content. With this removal profile template example can now be integrated into distribution tarball releases. * modulecmd.tcl, testsuite/modules.20-locate/020-fqual.exp, testsuite/modules.20-locate/030-defvers.exp, testsuite/modules.20-locate/035-defname.exp, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/055-locrcerrs.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.80-deep/030-display.exp: Disable modulerc command report on display-mode Introduce a g_inhibit_dispreport global variable to be able to inhibit the report of command set within a modulerc file when mode is set to 'display'. This way a 'display' of a modulefile only outputs stuff from this modulefile and not from the various .modulerc on the path toward this modulefile. Adapt most display-related non-regression tests to correctly check returned output from start to end. 2017-04-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash_completion, init/tcsh_completion.in: Eliminates sym from avail res in completion scripts Previously only '(default)' symbol was wiped from avail result in bash and tcsh completion scripts. Adapt sed rules to clean up every potential symbols. * testsuite/modulefiles/loc_rc1/1.0, testsuite/modulefiles/loc_rc1/2.0, testsuite/modulefiles/loc_rc2/1.0, testsuite/modulefiles/loc_rc2/2.0, testsuite/modulefiles/loc_rc3/1.0, testsuite/modulefiles/loc_rc3/2.0, testsuite/modulefiles/loc_rc3/3.0, testsuite/modulefiles/loc_rc4/1.0, testsuite/modulefiles/loc_rc4/2.0, testsuite/modulefiles/loc_rc4/3.0, testsuite/modulefiles/loc_rc5/1.0, testsuite/modulefiles/loc_rc5/2.0, testsuite/modulefiles/loc_rc6/1.2, testsuite/modulefiles/loc_rc7/0.9, testsuite/modulefiles/loc_rc7/1.2, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/055-locrcerrs.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.80-deep/050-whatis.exp: Add non-reg tests for whatis cmd on alias or sym Add bunch of tests in 050-locrc of 20-locate suite and 050-whatis of 80-deep suite to guaranty over time correct behavior of whatis command on module aliases or symbolic module version. * testsuite/modulefiles.deep/modsym/.modulerc, testsuite/modulefiles.deep/modsym/dir1/1.0, testsuite/modulefiles.deep/modsym/dir2/.modulerc, testsuite/modulefiles.deep/modsym/dir2/2.0, testsuite/modules.80-deep/010-init_ts.exp, testsuite/modules.80-deep/020-load.exp, testsuite/modules.80-deep/030-display.exp, testsuite/modules.80-deep/999-cleanup.exp: Non-reg tests for symbol on deep modules Add non-regression tests in 80-deep suite to ensure correct behavior of module-version symbols on deep modulefiles. * testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.91-sort/020-avail.exp: Symbols are avoided when looking for implicit default Add non-regression tests in 050-locrc of 20-locate suite and in 020-avail of 91-sort suite to clarify that symbolic versions do not take part of the choice made when looking for an implicit version or a latest version (only aliases and modulefiles can be returned). * modulecmd.tcl, testsuite/modules.90-avail/020-single.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/050-long.exp: Add symbolic version target to res list on getModules When looking for modules, after looking at paths contents and module aliases set within the current dir, look at symbolic versions set with module-version to see if some match searched mod. If so, add the modulefile target of these symbolic version to the result list if found in path previously but not yet added to the result list. With this new behavior a 'module avail mod/sym' will display the relative 'mod/vers'. Previously nothing was returned. Add non-regression tests in 020-single, 040-wild and 050-long of 90-avail suite to check this new behavior persist over time. * modulecmd.tcl, testsuite/modulefiles.deep/modalias/.modulerc, testsuite/modulefiles.deep/modalias/3.0, testsuite/modulefiles.deep/modalias/dir1/.modulerc, testsuite/modulefiles.deep/modalias/dir1/1.0, testsuite/modulefiles.deep/modalias/dir2/.modulerc, testsuite/modulefiles.deep/modalias/dir2/2.0, testsuite/modules.80-deep/010-init_ts.exp, testsuite/modules.80-deep/020-load.exp, testsuite/modules.80-deep/030-display.exp, testsuite/modules.80-deep/999-cleanup.exp: Optimize getPathToModule when solved alias is upper-mod Improve getPathToModule procedure to be able to solve any-kind of module aliases within a single call rather than restarting new searches when solved aliases are on the upper part (elt1/) of a current search (elt1/elt2/) sharing same module root. Add isSameModuleRoot procedure on the way to be able to check two modules share the same base name. Add non-regression tests in 020-load and 030-display of 80-deep suite to guaranty that sub or upper aliases are correctly found. * modulecmd.tcl: Change default search value of listModules to 'wild' Previously set default value for 'search' argument was deprecated so change it to 'wild' which will result when passed to getModules in the addition of a wildcard to look at modules. This way the wildcard is only added in conjunction of listModules searches as getPathToModule searches should search for exact things. * modulecmd.tcl: Move deep mod lookup logic from findModules to getModules When a deep module is asked for searched to getModules (elt1/elt2/vers) call findModules to search on upper element (elt1) in order to return every modulerc or modulefiles related to this module. Then getModules parses the array returned by findModules to build its results with only the directories, modulefiles and aliases that correspond to the asked search. By doing so, some modulerc search logic can be eliminated from findModules, as we will now always look at the whole deep module content. 2017-04-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.50-cmds/190-load.exp: Rework handling of error raised by checkValidModule In checkValidModule procedure, register an entry in a g_invalid_mod_info global array when a modulefile does not correctly set the magic cookie. By doing so we are able to state during a modulefile search in getPathToModule procedure that the modulefile was found but it was not correctly defined. This mechanism may be extended to other kind of modulefile error (like access issues). Add new non-regression tests to 190-load in 50-cmds suite for modulefile specified as full path as new error handling better detect issues on this use-case. 2017-04-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Optimize getPathToModule when solved alias is sub-mod In case an alias resolution leads to a subsequent modulefile (modulefile part of the current searched tree), go further in that searched tree rather restarting search with a new getPathToModule call. 2017-04-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modulefiles/loc_rc7/.modulerc, testsuite/modulefiles/loc_rc7/0.9, testsuite/modulefiles/loc_rc7/1.2, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.91-sort/020-avail.exp: Add aliases to dir list of elements in getModules When looking for an implicit default in a directory, now aliases are part of the directory items so it can be returned as the last element in it (highest numerically sorted version). Add tests in 050-locrc of 20-locate suite to guaranty this behavior on load command and tests in 020-avail of 91-sort suite to guaranty this behavior on avail command. 2017-04-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.70-maint/045-listlong.exp: Consider upper dir .version file in findModules If searched mod is found next to a .version file (in same directory), add this rc file to the list of those to interpret (like any modulerc files found on the path between the modulepath dir and the dir of the search mod). With this fix 'module list' will correctly display the 'default' tag along loaded modules when set via a .version file. Adapt 045-listlong test in 70-maint suite to check this. * modulecmd.tcl, testsuite/modules.70-maint/045-listlong.exp: Plug cmdModuleList on getModules rather getPathToModule Call for getPathToModule for each loaded modules to retrieve their tag list and modulefile modification time in case of long output. Also fix long output to display tag list if any. Add a non-reg test in 045-listlong of 70-maint suite to check that. * modulecmd.tcl, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.90-avail/020-single.exp: Plug getPathToModule on findModules/getModules Make getPathToModule procedure relying on findModules and getModules procedures for module search and rc file interpretation, as listModules now does. findModules and getModules have been adapted to also handle getPathToModule use-cases. Code to look for modules is now merged in a common set of procedures which will help both search sides (getPathToModule/listModules) to get immediate benefit from enhancement made on this code area. As a side effect a 'module avail' on a module name which is an alias will now correctly return this alias module. A test has been added in 020-single of 90-avail suite to check that. * modulecmd.tcl: Introduce getLoadedModuleFileList proc Add a getLoadedModuleFileList procedure to return a list corresponding to the content of the _LMFILES_ environment variable (like getLoadedModuleList for LOADEDMODULES). Take this opportunity to register modulefile path in g_loadedModules global array, to be able to easily determine what file correspond to what loaded module. 2017-04-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.91-sort/020-avail.exp: Separate file search from display treatment in listModules Introduce findModules and getModules procedures to handle file search for modulefiles and rc files interpretation. findModules is in charge of searching paths for module-related files. getModules calls findModules to get file list, then interprets any rc files found to consolidate a list of modules to return. listModules procedure now calls for getModules to get an array of modules corresponding to the directory passed as argument. So focus of listModules is now to prepare results for display. This new methodolidy also corrects way directory where handled in case of '--default' and '--latest' listing. On a '--default' listing, a modulefile does not appear anymore if a dir is set default at the same level. On a '--latest' listing: a dir does not appear anymore if set default but not the latest. Non-regression tests have been added in 020-avail of 91-sort suite to ensure a correct behavior will be maintained over time. 2017-03-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Protect read/close under catch in checkValidModule Improve code of checkValidModule procedure to put read and close calls under catch protection. Also, only read 8 characters at the beginning of file to check header is valid. * modulecmd.tcl: Read then eval rather source module content Replace source of modulefile and modulerc content by a file read then an evaluation of its content to optimize open/read/close operations of a 'module avail' command. By doing so, a modulerc is only read once during avail rather twice (once for validity check, then for sourcing content). Now validity check is performed at the same time the content is read to be passed for evaluation. In terms of Tcl C code, read+eval is equivalent to source. Only 'info script' has to be adapted with read file name in order to get same behavior during module code evaluation. 2017-03-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Call report only once per list to display * modulecmd.tcl: Optimize grid size computation in displayElementList Change algorithm strategy to compute the optimized number of column that can be used to display in column-fashion a list of elements. Previous algorithm was starting with a number of column equals to the number of element in list. New algorithm starts closer to the solution with a number of column equals to the basic solution where each column width is the same (equals to the length of biggest element in list). This approach reduces the number of iteration needed to reach best solution. Also when a column width is changed currently computed row widths is adapted only for this column and not entirely reset. All these optimizations drastically improve grid size computation time. New algorithm is approximatelly 12 time faster than the previous one. There is no more an overhead for this display mode. 2017-03-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modulefiles.deep/dir2/.modulerc, testsuite/modulefiles.deep/dir2/1.0, testsuite/modulefiles.deep/dir2/3.0, testsuite/modulefiles.deep/modload/dir2/.modulerc, testsuite/modulefiles.deep/modload/dir2/1.0, testsuite/modulefiles.deep/modload/dir2/3.0, testsuite/modules.80-deep/010-init_ts.exp, testsuite/modules.80-deep/020-load.exp, testsuite/modules.80-deep/030-display.exp, testsuite/modules.80-deep/999-cleanup.exp: Fix getModuleNameVersion to translate mod name on demand only Translate module name to currently interpreted module name when name correspond to the last part this interpreted module only if translation is enabled (was previously done in all cases). Translation is enabled when usage of symbolic modulefile names are allowed, which means it is enabled from 'module-version', 'module-alias' and 'module-info version' and 'module-info symbols'. Add non-reg tests in 020-load and 030-display of 80-deep suite to check that. 2017-03-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Add license and copyright header to modulecmd.tcl Take also this opportunity to correct the version number which should be equal to the number of commits but which was commit number+1 * contrib/doc2www, www/c/INSTALL.html, www/c/NEWS.html, www/c/README.html, www/c/module.html, www/c/modulefile.html, www/index.html: Append myself to the copyright list 2017-03-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/rpm/macros.modules-tcl, contrib/rpm/modules-tcl.spec: install: add initial RPM specfile * init/Makefile.in, init/bash.in, init/csh.in, init/ksh.in, init/sh.in, init/zsh.in: install: fix reset of regular path in switchml Avoid resetting regular path (/usr/bin) or manpath (/usr/share/man) when switching from Tcl to C version in switchml utility. 2017-03-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.50-cmds/250-x-resource.exp: Raise error on x-resource if DISPLAY not set X11 resource changes cannot occur if DISPLAY environment variable is not set. So raise an error in x-resource procedure if we detect that DISPLAY is not defined. Adapt 250-x-resource tests in 50-cmds to change expected results in case testsuite is ran with no DISPLAY set (like during rpm build). 2017-03-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile.in: testsuite: remove runtest verbose mode Remove testsuite verbose mode as it is now sucessfull. No need to always get full details of the test run. Replace it by the RUNTESTFLAGS make variable to be able to set verbository on demand from the command-line. * INSTALL.txt, Makefile.in, configure, doc/Makefile.in: install: do not build html doc as not installed HTML documentation is not included in the install process so do not build it and remove strong requirement of pod2html. 2017-03-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/lisp.in: init: fix lisp script for env-change actions 2017-03-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS, modulecmd.tcl: Release of version 1.775 * modulecmd.tcl: Fix MODULESHOME setup in autoinit for libexec install * contrib/doc2www, www/Makefile, www/c/INSTALL.html, www/c/NEWS.html, www/c/README.html, www/c/module.html, www/c/modulefile.html, www/index.html: www: add README and INSTALL files for Tcl and C 2017-03-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Remove use of untested var in runModulerc * testsuite/modules.50-cmds/088-info-isloaded.exp, testsuite/modules.50-cmds/150-module.exp: testsuite: be resilient to _modshare fluctuation '_modshare' variables are get and set as an array so order of elements is not guaranteed. Multiple elements set in a _modshare variable may be ordered differently depending of the current system or the path they represents. 150-module and 088-info-isloaded tests from 50-cmds have been adapted to be resilient to _modshare variable fluctuation. 2017-03-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/LICENSE.GPL => COPYING.GPLv2, INSTALL-win.txt, INSTALL.txt, Makefile.in, README.txt, doc/Makefile.in, doc/example.txt, doc/install.txt, doc/installwin.txt, doc/readme.txt, init/README.txt, readme.txt: doc: Adapt and harmonize INSTALL and README files Change documents markup to improve readability and extend content to fit the new installation process. INSTALL*, README and LICENSE documents have been moved/renamed in order to be found at the root directory to conform with open-source project standards and let people easily find these files once they retrieve either a distribution tarball or a clone of git repository. README.txt in init dir has been deleted as INSTALL.txt in root directory now integrates its content. INSTALL.txt and example.txt are now installed in 'docdir' at 'make install' time. 2017-03-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_with_c-version.pod: doc: add tcl specific stuff to diff_with_c-version Improve diff_with_c-version document to describe the features of the Tcl-version that are not supported on the C-version. Also state that the diff takes C version 3.2.10 against Tcl version 1.729 as a basis. Differences appearing past these versions will be flagged with the release number of appearance. * configure, init/Makefile.in, init/bash.in, init/csh.in, init/fish.in, init/ksh.in, init/perl.in, init/python.in, init/sh.in, init/tcl.in, init/zsh.in: init: do not load modulerc config is env already set If MODULEPATH or LOADEDMODULES is already set, do not source the modulerc configuration file in init scripts. As a consequence, if .modulespath sets a module path, then modulerc will be ignored which clarifies how default configuration is loaded: if both .modulespath and modulerc are defined, .modulespath takes precedence over modulerc. So if .modulespath sets a module path, all loaded modules defined in the modulerc file will be ignored. 2017-02-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Introduce release date to display next to version 2017-02-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile.in, doc/Makefile.in, init/Makefile.in: install: add 'DESTDIR' support * .gitignore, Makefile, Makefile.in, configure, doc/{Makefile => Makefile.in}, init/.gitignore, init/{Makefile => Makefile.in}: install: introduce a 'configure' step Add a 'configure' shell script to generate Makefiles, rather than choosing installtion directories or enabled features a the 'make' step. By doing so, installation process is clearer and closer to build conventions. Use a custom 'configure' shell script rather than using autoconf and automake tool suites in order to keep good readability of Makefiles. Moreover our build use case is relatively small since nothing is complied so there is no real benefit of using autoconf/automake. Adapt Makefiles to this 'configure' change and add 'distclean' target. 2017-02-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, init/Makefile: init: add make option to bind on C ver .modulespath Add the 'usecverdotmodulespath' make argument to generate init/.modulespath config file as a symlink on C version installed .modulespath configuration (by doing so both C and Tcl versions installed on the same environment can share the same MODULEPATH initialization setup). 'cverinitdir' must be known for 'usecverdotmodulespath' to be taken in account. * Makefile, init/Makefile, init/bash.in, init/csh.in, init/fish.in, init/ksh.in, init/sh.in, init/zsh.in: init: define switchml tool in shell init scripts Introduce 'switchml' tool, a shell function (or alias for csh or tcsh shells) that swap currently enabled Modules version (C or Tcl) by the other version (C or Tcl). In case a swapped version was defining specific PATH or MANPATH entries, these specific entries are removed when switching to the other version to avoid still relying on the binaries and man pages of the swapped-out version. 2017-02-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitattributes, .gitignore, Makefile, doc/Makefile: install: add a 'dist' make target Build a distribution tarball from the git repository content with the 'dist' make target. Add gitattributes to exclude git-specific and website-specific content in distribution tarball. Also exclude user home directory template from dist tarball as its content has a very large size and may not apply to everybody. Adapt parts of Makefiles to behave correctly when ran from a distribution tarball, not from the git repository. 2017-02-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, doc/Makefile, init/Makefile: install: add an 'uninstall' make target * Makefile, init/.modulespath.in, init/Makefile, init/modulerc.examp, init/modulerc.in: init: generate modulerc and .modulespath configs Add makefile rules to generate the modulerc and .modulespath configuration files. modulerc is generated in any case. By default it hosts the MODULEPATH and LOADEDMODULES definition passed to the Makefile with the 'modulepath' and 'loadedmodules' argument. The 'setdotmodulespath' Makefile argument is also introduced. When set to 'y', the .modulespath is generated and hosts the MODULEPATH definition. In this case, modulerc config file only gets the LOADEDMODULES definition or is set empty if no value is passed to the 'loadedmodules' argument. 2017-02-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, doc/Makefile, doc/source/module.pod.in, init/Makefile: install: add modulefilesdir configuration option @modulefilesdir@ enables to set the default system-wide modulefiles directory as described in module.1 man page. * Makefile, init/Makefile, init/bash.in, init/csh.in, init/fish.in, init/ksh.in, init/sh.in, init/zsh.in: init: set PATH and MANPATH in shell init scripts Add the possibility to set PATH and MANPATH in shell init scripts (sh-like, csh-like and fish scripts) if specific option are enabled in makefile (enabled by default). With this, bin directory and man directory of the modules-tcl installation are prepended to the MANPATH and PATH environment variables. Prepending is required for PATH as manpath utility in its default Linux setup will automatically set MANPATH from PATH change, so if we want MANPATH to be prepended, PATH has to be prepended. 2017-02-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitignore, Makefile, doc/Makefile, doc/source/{module.pod => module.pod.in}: doc: adapt module doc to path used for install Use same process than init scripts to translate module documentation from configure-like pattern (@prefix@, @initdir@, etc) to the path name chosen for installation. * .gitignore, doc/Makefile: doc: make a txt version of diff_with_c-version doc And include this txt version in the documentation directory made for installation. * .gitignore, Makefile, doc/Makefile, init/.gitignore, init/Makefile, init/bash.in, init/csh.in, init/fish.in, init/ksh.in, init/lisp.in, init/perl.in, init/profile.csh.in, init/profile.sh.in, init/python.in, init/sh.in, init/tcl.in, init/tcsh_completion.in, init/zsh.in: Introduce an installation process Introduce an 'install' target in makefiles to provide an installation process for modules-tcl. Defines installation paths with Makefile variables in order to avoid having a ./configure step. Install paths are set during the 'make' step by passing 'prefix', 'libexecdir', 'mandir', etc arguments to the make command. If no path definitions are passed to the 'make' command, installation will be made in '/usr/local/modules-tcl' by default. Installation paths provided (or set from the default value found in Makefile) are saved at the 'make' step in a .makeinstallpath file. Then at the 'make install' step, this .makeinstallpath file is read and make knows where to install modules-tcl. These paths definitions are also used to translate *.in init script to their installed version. modulecmd.tcl script is by default set to be installed in the libexec directory to follow FHS specification (as this script is an executable but not directly accessed by users). * init/csh.in: init: throw module exit code on csh-like script Also takes this opportunity to refactor code of this init script. 2017-02-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/.gitignore, init/Makefile, init/profile.csh.in, init/profile.sh.in: init: add /etc/profile.d scripts * init/.gitignore, init/Makefile, init/bash.in, init/csh.in, init/fish.in, init/ksh.in, init/sh.in, init/zsh.in: init: ensure module definition in sh-like sub-shells Adapt shell init scripts (sh-like, csh-like and fish) to get module defined in sh-like sub-shells. The method to define the module function in interactive or non-interactive sh-like sub-shells vary according to the shell flavor. The below table is an attempt to summarize the method to use to get 'module' function defined in sub-shell depending of the SH-shell kind and if the sub-shell is in interactive mode or not. +-----+----------+-----------+-------+ | ENV | BASH_ENV | export -f | FPATH | +-------------+-------------------+-----+----------+-----------+-------+ | |inter sub-shell | | | X | | |BASH +-------------------+-----+----------+-----------+-------+ | |non-inter sub-shell| | X | X | | +-------------+-------------------+-----+----------+-----------+-------+ | |inter sub-shell | X | | X | | |SH +-------------------+-----+----------+-----------+-------+ |(BASH-compat)|non-inter sub-shell| | | X | | +-------------+-------------------+-----+----------+-----------+-------+ | |inter sub-shell | X | | | X(*)| |SH +-------------------+-----+----------+-----------+-------+ |(ZSH-compat) |non-inter sub-shell| X | | | X(*)| +-------------+-------------------+-----+----------+-----------+-------+ | |inter sub-shell | X | | | X | |KSH +-------------------+-----+----------+-----------+-------+ | |non-inter sub-shell| | | | X | +-------------+-------------------+-----+----------+-----------+-------+ | |inter sub-shell | X | | | X(*)| |KSH +-------------------+-----+----------+-----------+-------+ |(ZSH-compat) |non-inter sub-shell| X | | | X(*)| +-------------+-------------------+-----+----------+-----------+-------+ | |inter sub-shell | | | | X(*)| |ZSH +-------------------+-----+----------+-----------+-------+ | |non-inter sub-shell| | | | X(*)| +-------------+-------------------+-----+----------+-----------+-------+ (*) autoload required Shell init scripts have been adapted to implement these different method to cover most of the initialization cases. Note that 'zsh' requires to declare with autoload the functions put in FPATH directory so there is no gain to configure FPATH for 'zsh' compare to a bare source of the 'zsh' init script. * init/.gitignore, init/bash.in, init/csh.in, init/fish.in, init/ksh.in, init/perl.in, init/python.in, init/sh.in, init/tcl.in, init/zsh.in: init: set MODULEPATH if not defined Initialize MODULEPATH variable if not defined, with an empty string or with the content of the init/.modulespath file if it exists and it is readable. This file contains a list of module paths, one per line or many per line separated by colon character. This way of initializing MODULEPATH has been retrieved from C version init scripts in order for sysadmins to keep a familiar concept to set default MODULEPATH. * init/bash.in, init/csh.in, init/fish.in, init/ksh.in, init/perl.in, init/python.in, init/sh.in, init/tcl.in, init/zsh.in: init: set empty LOADEDMODULES if not defined 2017-02-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/Makefile, init/bash.in, init/csh.in, init/tcsh.in: init: introduce SHELLNAME var to replace in script With SHELLNAME replacement variable, tcsh init script is derivated from csh init script. * init/bash.in, init/csh.in, init/fish.in, init/ksh.in, init/perl.in, init/python.in, init/sh.in, init/tcl.in, init/tcsh.in, init/zsh.in: init: do not source init/modulerc if not readable * doc/source/module.pod: doc: fix python init example for python3 compat * init/.gitignore, init/Makefile, init/{tcsh_completion => tcsh_completion.in}: init: replace tclsh and MODULESHOME in tcsh_completion * init/Makefile, init/bash.in, init/csh.in, init/fish.in, init/ksh.in, init/lisp.in, init/perl.in, init/python.in, init/sh.in, init/tcl.in, init/tcsh.in, init/zsh.in: init: get and set TCLSH in init scripts As for MODULESHOME, get 'tclsh' location from Makefile then replace '@TCLSH@' pattern in shell init scripts with found location rather than guessing it in the init scripts. By doing so, same 'tclsh' location search is applied to all init scripts. Search is performed with 'command' to look at a predefined list of PATHs in order to be resilient to the current PATH content. * init/Makefile, init/bash.in, init/csh.in, init/fish.in, init/ksh.in, init/lisp.in, init/perl.in, init/python.in, init/sh.in, init/tcl.in, init/tcsh.in, init/zsh.in: init: normalize use and replacement of MODULESHOME Simplify guess of MODULESHOME location by more relying on 'make' capabilities than 'perl'. Adapt init scripts for the different shells to use the MODULESHOME variable that is replaced during the 'make' process rather than ${MODULESHOME}, $env(MODULESHOME), etc. By the way, use a replacement pattern closer to what 'configure' is using with '@MODULESHOME@' rather than '$MODULESHOME' which was confusing in shell scripts. * init/zsh.debug: init: remove unused zsh.debug 2017-02-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Fix MODULESHOME setup in autoinit Set modulecmd.tcl script directory absolute then guess MODULESHOME from it. Adapt this setup if modulecmd.tcl is located in a 'bin' directory as in this case MODULESHOME is set to the upper directory (as 'init' directory will be located at the same level than the 'bin' dir not inside the 'bin' dir). By the way, fix perl autoinit code to simply use 'argv0' rather than 'MODULESHOME' in order to set the module function as for the other languages. 2017-03-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modulefiles/loc_rc6/.modulerc, testsuite/modulefiles/loc_rc6/1.2, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/050-long.exp: Correct alias/version resolution on avail command List of version symbols was erroneous on an avail command in case a modulefile held symbols like default and was targeted by aliases. Avail output was showing the aliases holding the symbols instead of the modulefile. getVersAliasList procedure was fixed to perform the alias resolution attempt in a second phase of the procedure, to let chance to retrieve symbols for the initial module name passed to the procedure. 030-multiple, 040-wild and 050-long tests of the 90-avail suite has been enhanced with new tests to check this behavior. loc_rc6 modulefile has been added to the testsuite modulefiles to reproduce this use case. Thanks to Bert Wesarg and Levi Morrison for reporting this issue. 2017-02-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/doc2www, www/Makefile, www/c/NEWS.html, www/{man => c}/module.html, www/{man => c}/modulefile.html, www/index.html: www: include NEWS files on website Include the NEWS file of C and Tcl versions to the documentation portal of Environment Modules. Move C documentation to a 'c' directory to better distinguish from the Tcl documentation that is stored in the 'tcl' directory. Hard links are maintained on the Website not to break URL to man/module.html and man/modulefile.html pages. * NEWS: Add NEWS file to desc changes in modules-tcl rel 2017-02-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/doc2www, www/index.html, www/man/module.html, www/man/modulefile.html: www: add Mark Lakata to the copyright list * .gitignore, Makefile, contrib/gitlog2changelog.py: Add gitlog2changelog.py contrib script Import gitlog2changelog.py GPL script to generate a ChangeLog file based on the commits of the git repository. Add a 'ChangeLog' rule to the Makefile. * contrib/doc2www, www/index.html, www/man/module.html, www/man/modulefile.html: www: update lic/copyright and version order Adapt pages as suggested by R.K. and Kent: * update copyright for the recent years * add reference to LGPL as C version has some parts using this lic * reword C and Tcl version presentation * put C version first 2017-02-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitignore, Makefile, contrib/doc2www, www/Makefile: www: Include Tcl version docs and papers/talk to website Introduce 'doc2www' script to convert Tcl version documents to the website format, with usage of the 'bootstrap' web toolkit. Makefiles have been adapted to be able to generate these www documents from the source pod files and to copy existing txt and pdf files in the website tree. * www/index.html, www/man/module.html, www/man/modulefile.html, www/modules.css: www: Change website look and feel with Bootstrap Adapt web pages to make use of the Bootstrap toolkit in order to get a modern and easy to maintain web style and content. Bootstrap also helps to get a responsive design so the website will adapt to the terminal used to read it. Thanks to Aurelien Degremont for pointing me to the right tool for this task. * www/man/module.html, www/man/modulefile.html: www: Import and adapt last version of C manpages 2017-02-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * www/index.html, www/maillist.html: www: Refresh content all on single page 2017-02-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/paper/MC2_whitney_paper.pdf, doc/paper/Modules-Paper.pdf, doc/paper/absmod.pdf, doc/paper/user-setup.pdf, doc/talk/CSE-IT_modules_talk.pdf: doc: Import papers and talk avail on www 2017-02-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * www/index.html, www/maillist.html, www/man/module.html, www/man/modulefile.html, www/modules.css: www: Import current website 2017-02-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Fix use of pwd in renderSettings proc renderSettings was using the 'pwd' binary instead of the 'pwd' Tcl call, which cause issue when PATH is empty. Code has been adapted to reuse the value of the 'cwd' global variable or set its value by calling the 'pwd' Tcl function. * doc/source/module.pod: doc: Describe collection stuff 2017-01-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/Makefile, doc/source/diff_with_c-version.pod: doc: Introduce diff_with_c-version.pod document * doc/source/module.pod, doc/source/modulefile.pod: doc: use itemized-list for ENV and FILES sections Adapt module.pod and modulefile.pod to use itemized-list rather than head2 for the content of their ENVIRONMENT and FILES sections. HTML rendering is clearer with a list than h2. * .gitignore, doc/Makefile, doc/html/common.css: doc: add a minimal css file to render html docs 2017-01-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Improve shebang to only search tclsh once if in PATH 2017-01-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/modulefile.pod, modulecmd.tcl, testsuite/modulefiles/info/mode3, testsuite/modules.50-cmds/084-info-mode-exp.exp, testsuite/modules.95-version/020-unload.exp, testsuite/modules.95-version/022-unload2.exp: Add module-info mode check against 'remove' and switch' value For compatibility with C-version, enable to check current 'module-info mode' against the 'remove' and 'switch' value. To achieve this change 'remove' is considered an alias of the 'unload' value. 'switch' is checked against the current 'module-info command'. 084-info-mode-exp tests of 50-cmds suite have been adapted. In addition 020-unload and 022-unload2 tests of 95-version suite have also been adapted as the modulefiles they check are using a 'module-info mode remove' test. 2017-01-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Handle sep line on avail/help/display with a proc * doc/source/modulefile.pod, modulecmd.tcl, testsuite/home/.module/infocmd, testsuite/home/.module/infocmdexp, testsuite/modulefiles/info/command, testsuite/modulefiles/info/commandexp, testsuite/modulefiles/inforc/.modulerc, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.61-coll/020-savelist.exp: Introduce 'module-info command' Introduce g_commandNameStack variable, currentCommandName, pushCommandName and popCommandName procedures to implement a 'module-info command' that returns the name of the currently running module command. This new mechanism enables to distinguish complex 'load' or 'unload' commands that cannot be determined with 'module-info mode' alone. For instance a modulefile can now be aware that a 'switch', a 'restore' or a 'purge' command is currently being run. Add description of this new command to the modulefile documentation. Add 282-info-command and 283-info-command-exp tests in 50-cmds and adapt 281-info-modulerc in 50-cmds and 020-savelist in 61-coll. * doc/source/module.pod: doc: add missing 'aliases' and 'source' sub-commands 2017-01-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modulefiles/inforc/.modulerc, testsuite/modulefiles/inforc/1.0, testsuite/modulefiles/inforc/2.0, testsuite/modules.50-cmds/281-info-modulerc.exp: Enable use of 'module-info' from modulerc Give access to the 'module-info' procedure in slave interp when executing .modulerc or .version file. Adapt push/pop mode calls to surround procedure calls that can execute a modulerc file to get there a coherent 'module-info mode' value. Add 281-info-modulerc tests to the 50-cmds suite. 2017-01-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modulefiles/info/.modulerc, testsuite/modulefiles/info/specified, testsuite/modules.50-cmds/280-info-specified.exp: Fix 'module-info specified' Introduce g_specifiedNameStack variable, currentSpecifiedName, pushSpecifiedName and popSpecifiedName procedures to implement a 'module-info specified' that returns the modulefile name as specified on the command-line. Add 280-info-specified tests to the 50-cmds suite. * modulecmd.tcl: Simplify code of cur/push/pop mode and modname procs * doc/source/module.pod: doc: add missing 'search' module sub-command 2017-01-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Display system command with no extra space if no arg * modulecmd.tcl: Display unsetenv command with 1 tab sep instead of 2 To get result aligned with the other commands. * modulecmd.tcl, testsuite/modules.70-maint/055-whatis.exp, testsuite/modules.70-maint/060-apropos.exp, testsuite/modules.90-avail/030-multiple.exp: No exit raise on modfile error for avail/whatis cmds Do not exit on an error raised by one modulerc or one modulefile for global commands avail, whatis or search that parse the content of all modulefile/modulerc found in the defined module paths. By doing so results from these global commands will not be harmed if error exists in a few modulefiles. The content of these modulefiles will be ignored after the erroneous line. So in a whatis/search case if the module-whatis definition is set before the erroneous line, the modulefile will be taken into account. If the module-whatis definition is set after the erroneous line, the modulefile will be ignored. To achieve this goal a 'exit_on_error' argument has been added to the 'execute-modulerc' and 'execute-modulefile' procedures. By default this argument is enabled but calls made from 'listModules' and 'cmdModuleSearch' disable it. Add non-regression test to 055-whatis and 060-apropos in 70-maint suite and to 030-multiple in 90-avail suite. * modulecmd.tcl, testsuite/modulefiles/bad/.modulerc, testsuite/modulefiles/bad/after, testsuite/modulefiles/bad/before, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp: Non-zero exit code when exiting from execute-mod procs When a critical error is encountered when interpreting a modulefile or a modulerc from execute-modulefile or execute-modulerc procedures, exit as done elsewhere. Means call for error code rendering and raise error to top level, where exit command is called. A new procedure called 'exitOnError' is added and it is called by execute-modulefile and execute-modulerc procedures. Top level error management code now does not always print an error message as in this situation error message has already been displayed when the reportInternalBug procedure was called. Add non-regression tests to 190-load in 50-cmds suite and to 070-display and 080-help in 70-maint suite. * modulecmd.tcl: Refactor exit and ModulesVersion set of execute-modulerc Refactor the execute-modulerc procedure to handle exit in case of critical error as it is done on execute-modulefile procedure with the slave interp evaluation returning an errorVal. Then this errorVal is treated to check if a critical error as been encountered (errorVal=2). To achieve this goal the way the ModulesVersion variable is set need to be changed as the slave interp now returns errorVal not ModulesVersion. A setModulesVersion procedure is added to enable the slave interp to pass the value of the ModulesVersion variable in the master interp context. 2017-01-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Retrieve help mode from module-info on execute-modulefile Remove the 'help' argument on the execute-modulefile procedure that was used to know the execution is made on a 'help' mode. Now that 'help' mode is pushed to the 'mode' stack, 'help' mode can be retrieved from 'module-info mode'. 2017-01-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Inhibit non-critical error report on avail/whatis Introduce the g_inhibit_errreport variable to inhibit the stderr display of non-critical error aka error reported through the reportWarning, reportError or reportInternalBug procedures. inhibitErrorReport and reenableErrorReport procedures are added to enable or disable g_inhibit_errreport. This new mechanism has been deployed on the 'avail', 'aliases' and 'whatis/search' commands, in order to avoid error flood when parsing all modulefiles or modulercs. This way, results from these commands will appear clearly to the user. 2017-01-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.50-cmds/210-exit.exp: Handle multiple lines of module-whatis for same modfile Treat g_whatis as a list where each module-whatis text-line is appended to the previous lines. In case of search, these lines are displayed only if they match the search pattern (to get same behavior as on C-version) As a side effect, if no 'module-whatis' directive are found in a modulefile, this modulefile is never displayed on a 'module whatis' call (same behavior as on C-version). Adapt 210-exit whatis test in 50-cmds suite. * modulecmd.tcl: Handle multiple args passed to module-whatis cmd When multiple arguments are provided to the module-whatis module command, join them with " " to get a line of text. * modulecmd.tcl: Return error on whatis if searched modfile not found If 'module whatis' command gets modulefiles as argument, if this or these modulefiles do not match any existing modulefile in the defined module path, then raise error as done on 'module load'. 2017-01-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles/coll/a, testsuite/modulefiles/coll/b, testsuite/modulefiles/coll/c, testsuite/modulefiles/coll/d, testsuite/modulefiles/help/2.0, testsuite/modules.70-maint/010-init_ts.exp, testsuite/modules.70-maint/020-update.exp, testsuite/modules.70-maint/030-purge.exp, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/043-listno.exp, testsuite/modules.70-maint/045-listlong.exp, testsuite/modules.70-maint/048-listlongno.exp, testsuite/modules.70-maint/050-whatis-load.exp, testsuite/modules.70-maint/055-whatis.exp, testsuite/modules.70-maint/056-whatis-nullpath.exp, testsuite/modules.70-maint/060-apropos.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/095-cleanup.exp: testsuite: import and adapt 70-maint suite Also adapt 'coll' modulefiles to better cope with whatis/search commands. 2017-01-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Set a ref count of 1 for path without ref count When a path is used in a variable but does not own a reference count assume this count is 1 rather than 999999999 to be able to unload it afterward which would not be possible if this path is referred 999999999 times. 2015-06-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/envml: Introducing envml utility Add a 'envml' script tool which act as an application launcher where module commands are instancied to setup environment before launching the given application. 2017-01-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/010-environ.exp: testsuite: clean _modshare env vars before start Unset any *_modshare environment variable before test start to get independent from the current environment situation. * Makefile: Ask for pwd physical resolution in Makefile Use physical resolution (pwd -P) rather than logical resolution to be able to match result returned by the 'pwd' Tcl command. 2017-01-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/999-cleanup.exp: Always register paths as absolute paths Convert paths provided to be part of MODULEPATH environment variable in order to always register the corresponding absolute path. This way these paths become independent from the current working directory, which can be modified afterward by the user. Use 'file join [pwd]' method rather than 'file normalize' to get aboslute paths in order to preserve potential symlink used in the relative path hierarchy. Convertion also strips any extra '/' character and resolive "." and ".." components. readCollectionContent and cmdModuleUnuse procedures have also been adapted to keep compatibility with previous behavior where relative paths were able to be registered in MODULEPATH. Adapt 61-coll suite and improve 030-use and 070-unuse tests of 10-use suite. 2017-01-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.50-cmds/210-exit.exp: Inhibit next modfiles interp with 'exit' only if mode is load Do not impact with 'exit' calls the remaining modulefiles to interpret in case of global non-load action like whatis, display or help. Some tests have been added to 210-exit in order to check this behavior. * doc/source/modulefile.pod, modulecmd.tcl, testsuite/modules.50-cmds/087-info-shells-exp.exp: Add arg to test current {shell,shelltype}' in module-info Add the possibility to pass a string to 'module-info shell' and 'module-info shelltype' to get a boolean test on currently used shell or shelltype. This kind of behavior is already available on 'module-info mode' to test module current mode. These features are supported by C-version even if not documented. modulefile documentation and 087-info-shells-exp tests in 50-cmds suite have been adapted accordingly. 2017-01-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/modulefile.pod: doc: clarify 'module-info {symbols,version}' commands 2017-01-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modulefiles/loc_def/default, testsuite/modulefiles/loc_def/truedef, testsuite/modules.20-locate/035-defname.exp: Do not always treat 'default' version-name as a symbol Do not always treat 'default' version-name as a symbol where 'module/default' is equal to 'module'. Sometimes 'module/default' can be a real modulefile thus it should be treated like that. To do so a 'default_is_special' argument has been added to the 'getModuleNameVersion' procedure in order to treat 'default' as a special version-name only when working with 'module-version', 'module-info version' and 'module-info symbols' commands. Add 035-defname tests to 50-cmds suite to check this behavior. 2017-01-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp: Escape ':' in modshare var when used as path element in var Some list variable may contain element with ':' in it, like for URL, separated by a character different than ':'. However corresponding modshare variable always use colon character as separator so we need to escape colon used as variable content in modshare variable to avoid issue. To achieve that psplit and pjoin procedures are introduced as well as a charUnescaped procedure, which is the reverse of the already existing charEscaped procedure. With these new procedures path-like variable escape or unescape $g_def_separator character used in element of the variable when splitting or joining the whole variable. Adapt 042-append-delim, 047-app-del-undo, 052-prepend-delim and 057-pre-del-undo tests in 50-cmds suite to check colon character is correctly escaped in modshare variable. * modulecmd.tcl: Introduce charEscaped proc to escape char passed as arg Replace multiEscaped, doubleQuoteEscaped and singleQuoteEscaped procs by a single procedure that can escape any set of characters passed as argument. 2017-01-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/modulefile.pod: doc: adapt descrition of 'x-resource' * doc/source/modulefile.pod: doc: adapt calls used by 'system' and 'uname' * doc/source/modulefile.pod: doc: adapt list of mode returned by 'module-info mode' * doc/source/module.pod: doc: add refresh alias on reload sub-command 2017-01-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.pod: doc: case when MODULERCFILE points to a directory * doc/source/module.pod, doc/source/modulefile.pod: doc: add --default and --latest avail switches * doc/source/module.pod: doc: add --help, --version and --debug switches * doc/source/module.pod: doc: switch command accepts only one argument * doc/source/module.pod: doc: reference newly supported shells (fish, tcl, lisp) * init/python.in: init: fix TCLSH typo in python script 2016-12-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.pod, doc/source/modulefile.pod: doc: improve docs readability Adopt and apply writing conventions found especially in man-manpages(7) to improve documents readability: * always refer to 'modulefile' or 'modulefiles' with I<> pod code * refer to other manpages with B<> pod code * refer to filename or pathname with F<> pod code * refer to environment variable with B<> pod code * no '$' before environment variable except if its value is referred * no escaping '{}' of environment variable * use item list to describe ordered list * use item list to describe all command-line switches, all module sub-commands and all modules-specific Tcl commands * refer to command-line switches, module sub-commands, modules-specific Tcl commands, Modules variables and Modules subroutines with B<> pod code * use normal font for arguments on item list * refer to arguments of current command-line switch, module sub-command or modules-specific Tcl command with I<> pod code * express 1+ arguments with a 'arg...' syntax * format pod source with 'fmt' to set maximum line witdh to 78 chars * fix double spaces ' ' or end of line extra space found in paragraphs * doc/source/module.pod, doc/source/modulefile.pod: doc: remove stuff specific to C-version Changes made on module.pl: * remove text related to the 'modulesbeginenv' feature * remove 'clear' sub-command * change 'update' sub-command into 'reload and adapt description Changes made on modulefile.pl: * remove 'module-info flags' modules-specific Tcl command * remove 'module-trace' modules-specific Tcl command * remove 'module-user' modules-specific Tcl command * remove 'module-log' modules-specific Tcl command * remove 'module-verbosity' modules-specific Tcl command * doc/source/module.pod, doc/source/modulefile.pod: doc: syntax fixes and import recent changes on C doc 2017-01-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/Makefile, doc/source/{module.pl => module.pod}, doc/source/{modulefile.pl => modulefile.pod}: doc: use .pod extension for POD documents This way these files are automatically recognized as POD files and the appropriate syntax highlight mode is automatically set. 2017-01-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, doc/Makefile: Create a doc-specific Makefile Separate documentation generation in a dedicated Makefile put in the doc directory. Generate documentation in a more 'Makefile' fashion, with a target per document file. 2017-01-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitignore, doc/html/module.html, doc/html/modulefile.html, doc/man/man1/module.1, doc/man/man4/modulefile.4: Remove generated documents from git repository Clear HTML and MAN pages from the repository as they are generated content from POD files. This way git commits on documentation are clearer as they only contain changes on POD files. Add rules to .gitignore to stop tracking generated HTML and MAN documents in repository. 2016-12-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, notdone/modules.50-cmds/170-swap.exp, notdone/modules.50-cmds/175-swap2.exp, testsuite/modulefiles/append/1.1, testsuite/modulefiles/prepend/1.1, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/172-swap-app-delim.exp, testsuite/modules.50-cmds/173-swap-app-delim.exp, testsuite/modules.50-cmds/175-swap2.exp, testsuite/modules.50-cmds/177-swap-prep-delim.exp, testsuite/modules.50-cmds/178-swap-prep-delim.exp: Make 'switch' command handle a single argument On a 'module switch [mod1] mod2', If 'mod1' is not specified, then it is assumed to be the currently loaded module with the same root name as 'mod2'. Introduce a 'getLoadedWithClosestName' procedure to look at currently loaded modules and return the one with the closest name to the name passed as argument. Import and adapt 170-swap, 172-swap-app-delim, 173-swap-app-delim, 175-swap2, 177-swap-prep-delim and 178-swap-prep-delim tests to the 50-cmds suite. 2016-12-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Make 'switch' command consistent Switch command were previsouly setting 'new' as 'old' and 'old' as 'new' when 'new' is detected loaded. This behavior led to inconsistency especially when the same 'module switch old new' command is called twice. First time 'old' is loaded and 'new' is unloaded. Then for the second call 'old' is unloaded and 'new' is loaded, and so on. In this case, the result of the switch command depends on the current situation which confuses most persons using it. This commit makes the switch command idempotent by always ending up with 'old' unloaded and 'new' loaded, whatever the starting situation is. 2016-12-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, notdone/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/210-exit.exp: Add support for 'exit' command in modulefile Add support for use of 'exit' command within modulefile as described in modulefile(4) man page. This command will cause the immediate cessation of this module and any additional ones on the command line. This module and the subsequent modules will not be listed as loaded. No environment commands will be performed in the current module. To achieve that a 'exitModfileCmd' procedure is added to superseed the 'exit' command during modulefile interpretation. When called this procedure sets a flag that inhibit further modulefile interpretation. Import and adapt 210-exit tests in 50-cmds suite. * init/bash_completion, init/tcsh_completion, modulecmd.tcl, notdone/modules.50-cmds/078-refresh.exp, testsuite/modules.50-cmds/078-refresh.exp: Add 'refresh' command as alias on 'reload' command Add a 'refresh' command as available on C-version but instead of reloading the volatile components (ie. shell aliases) only, here we unload then reload all the currently loaded modules. This behavior is different than on C-version but it ends with same results : shell aliases are refreshed in sub-shells. Import and adapt 07-refresh tests in 50-cmds suite. 2016-12-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, .../modules.50-cmds/100-loglevel.exp, .../modules.50-cmds/101-badfac.exp, .../modules.50-cmds/110-verbose.exp, .../modules.50-cmds/115-verbose-msg.exp: Add dummy module-{log,trace,user,verbosity} procs Add dummy procedures for the module-log, module-trace, module-user and module-verbosity commands available on C-version. These commands do not seem relevant to be implemented on Tcl-version of module, but having dummy procedure for them enable support for modulefiles using these commands. Without dummy procedures these modulefiles raise error as the commands are not known. The 4 dummy procedures report a warning message to let the user know that even if the modulefile has been loaded/unloaded/etc, the module-log, module-trace, module-user or module-verbosity calls were not interpreted. Import and adapt 100-loglevel, 101-badfac, 110-verbose and 115-verbose-msg tests in 50-cmds suite. 2016-12-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.50-cmds/140-system.exp: Adapt 'system' to behave like described on manpage Previously the 'system' modulefile command was adding the specified string to the list of things to interpret on stdout. This commit aligns the behavior of the 'system' command on the one implemented on Modules C-version which is documented on modulefile(4) man page. Now 'system' passes string to the 'exec' Tcl procedure with stdout redirected to stderr since stdout would be parsed by the evaluating shell. The exit status of the executed command is returned. Adapt '140-system' test in 50-cmds suite accordingly. 2016-12-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * notdone/modules.50-cmds/120-prereq-full.exp, notdone/modules.50-cmds/130-conflict-full.exp, notdone/modules.50-cmds/131-conflict-module.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp: testsuite: import 'conflict' and 'prereq' tests in 50-cmds suite * modulecmd.tcl, notdone/modules.50-cmds/190-load.exp, .../modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/190-load.exp: Fix 'module list' when module loaded with full path On Tcl-version, modulefile loaded by giving its full path has its name equal to its full path since module name and version cannot be distinguished from the path. On C-version, module name equals to the tail of the full path. Also import and adapt 'module' and 'load' tests in 50-cmds suite. 2016-12-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Disable g_force to avoid loading already loaded mod In order to get closer to C-version, disable g_force by default to avoid loading a modulefile already loaded. This behavior also avoid path element reference counting to get increased when the same module is asked twice for load. Thus with cleaner path element reference count, automatic modulefile dependency management is made possible. 2016-12-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * notdone/modules.50-cmds/080-info-name.exp, notdone/modules.50-cmds/088-info-isloaded.exp, testsuite/modules.50-cmds/080-info-name.exp, testsuite/modules.50-cmds/088-info-isloaded.exp: testsuite: import module-info name/isloaded in 50-cmds suite * modulecmd.tcl, testsuite/modulefiles/info/mode1, testsuite/modulefiles/info/mode3, .../modules.50-cmds/083-info-mode.exp, .../modules.50-cmds/084-info-mode-exp.exp: Clarify module-info 'mode' option Fix mode setup during a 'help' command and import info-mode relative tests in 50-cmds suite. module-info non-regression tests have been adapted to match behavior of Tcl-version: * during a 'help' command, stdout output of ModulesHelp procedure is not redirected to stderr as done on C-version * on an 'unload' command, module-info mode is equal to 'unload' and not 'remove' * on a 'switch' command, module-info mode is equal to 'unload' then 'load' and not 'switch1', 'switch2' and 'switch3' * on a 'switch' command, module-info mode never equals to 'switch' 2016-12-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modulefiles/info/mode5, .../modules.50-cmds/081-info-user.exp, .../modules.50-cmds/082-info-user-exp.exp, .../modules.50-cmds/085-info-flags.exp: Clarify module-info 'flags' and 'user' options 'flags' and 'user' are C-version specific options and they are not relevant for Tcl-version. So they are present on Tcl-version to avoid breaking modulefile using them but always return false or an empty string to reflect the fact that these options are unmanaged here. Import and adapt info-user and info-flags non-regression tests in 50-cmds suite. 2016-12-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, notdone/modules.50-cmds/042-append-delim.exp, notdone/modules.50-cmds/045-append-undo.exp, notdone/modules.50-cmds/047-app-del-undo.exp, notdone/modules.50-cmds/050-prepend.exp, notdone/modules.50-cmds/052-prepend-delim.exp, notdone/modules.50-cmds/055-prepend-undo.exp, notdone/modules.50-cmds/057-pre-del-undo.exp, notdone/modules.50-cmds/060-remove.exp, notdone/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/065-remove-undo.exp: Handle empty or separator path on add-path/unload-path Improve add-path and unload-path to handle empty path {}, that can be added or removed from a path list like on C-version. Also if provided path is equal to the separator string, like ":", an error is raised as this kind of path cannot be handled in path list variables. This behavior here is different than on C-version where path equals to ":" can be added or removed to path list variables. Import or adapt add-path and unload-path relative tests (04*-append, 05*-prepend and 06*-remove) in 50-cmds suite. 2016-12-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, notdone/modules.50-cmds/025-setenv-undo.exp, notdone/modules.50-cmds/035-unsetenv-undo.exp, notdone/modules.50-cmds/036-unsetenv-x.exp, testsuite/modules.50-cmds/025-setenv-undo.exp, testsuite/modules.50-cmds/035-unsetenv-undo.exp, testsuite/modules.50-cmds/036-unsetenv-x.exp: Improve unsetenv for unload and display modes On unload mode, delete environment variable targeted by an unsetenv directive if no value has been provided along. On display mode, print environment variable value if any has been passed to unsetenv directive. Import 025-setenv-undo, 035-unsetenv-undo and 036-unsetenv-x tests in 50-cmds suite. 2016-12-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/040-load.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/020-setenv.exp, testsuite/modules.50-cmds/022-setenv-eschars.exp, testsuite/modules.50-cmds/030-unsetenv.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/076-alias-sub.exp, testsuite/modules.50-cmds/086-info-shells.exp, testsuite/modules.50-cmds/089-info-type.exp, testsuite/modules.50-cmds/195-load-recurs.exp, testsuite/modules.50-cmds/197-load-lots.exp, testsuite/modules.50-cmds/200-break.exp, testsuite/modules.50-cmds/220-continue.exp, testsuite/modules.50-cmds/230-loop.exp, testsuite/modules.50-cmds/240-chdir.exp, testsuite/modules.50-cmds/250-x-resource.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.91-sort/040-load.exp, testsuite/modules.95-version/020-load.exp, testsuite/modules.95-version/020-unload.exp, testsuite/modules.95-version/022-load2.exp, testsuite/modules.95-version/022-unload2.exp, testsuite/modules.95-version/040-xgetenv.exp: Enclose tcl variable set within double quotes When modules is used within Tcl code, value to set to a variable were previously "double quote escaped" but not enclosed by double quotes at set time. By enclosing values with double quotes, complex values can be managed like for instance those including whitespaces. Fix all Tcl-relative non-regression tests in testsuite. * modulecmd.tcl, notdone/modules.50-cmds/022-setenv-eschars.exp, testsuite/modules.50-cmds/022-setenv-eschars.exp: Fix perl quoting style for variable set Import 'setenv-eschars' test in 50-cmds suite and by the way fix quoting style for perl when setting variable. Single quotes are used to set variable, so single quotes should be escaped rather than double quote. 2016-12-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, notdone/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/017-use-undo.exp: Call unuse instead of use on module unload When modulefiles define 'module use' calls, 'module unuse' is called when current mode is 'unload'. No change made to 'module unuse' calls, 'module unuse' is also called when mode is 'unload' (same behavior as 'module unload'). On 'display' mode, 'module use' and 'module unuse' calls are now reported (displayed). Import 'use-undo' tests in 50-cmds suite. * notdone/modules.50-cmds/070-alias-proc.exp, notdone/modules.50-cmds/075-alias.exp, notdone/modules.50-cmds/076-alias-sub.exp, notdone/modules.50-cmds/077-alias-undo.exp, notdone/modules.50-cmds/140-system.exp, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/076-alias-sub.exp, testsuite/modules.50-cmds/077-alias-undo.exp: testsuite: import 'alias' tests in 50-cmds suite 2016-12-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * notdone/modules.50-cmds/090-uname-proc.exp, testsuite/modules.50-cmds/090-uname-proc.exp, .../modules.50-cmds/095-uname.exp, .../modules.50-cmds/099-uname-cleanup.exp: testsuite: import 'uname' tests in 50-cmds suite 2016-11-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, notdone/modules.50-cmds/220-continue.exp, notdone/modules.50-cmds/230-loop.exp, testsuite/modules.50-cmds/220-continue.exp, testsuite/modules.50-cmds/230-loop.exp: Fix use of 'continue' command in modulefile This commit also add continue-specific non-regression tests in modules.50-cmds suite. * modulecmd.tcl, notdone/modules.50-cmds/240-chdir.exp, testsuite/modules.50-cmds/240-chdir.exp: Add support for 'chdir' command in modulefile This commit also add chdir-specific non-regression tests in modules.50-cmds suite. * modulecmd.tcl, notdone/modules.50-cmds/200-break.exp, testsuite/modules.50-cmds/200-break.exp: Fix use of 'break' command in modulefile This commit also add break-specific non-regression tests in modules.50-cmds suite. 2016-11-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modulefiles/averssort/.modulerc, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/050-long.exp, testsuite/modules.90-avail/060-empty.exp, testsuite/modules.91-sort/010-init_ts.exp, testsuite/modules.91-sort/020-avail.exp, testsuite/modules.91-sort/030-whatis.exp, testsuite/modules.91-sort/999-cleanup.exp: testsuite: improve 90-avail and 91-sort for alias/version Add tests to 90-avail and 91-sort suites to check correct display of aliases and versions on module avail command. 2016-11-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: No display of modulepath header if no module found in it On module avail, search and aliases commands the header for modulepath where no module has been found (because there is no module, alias or version in them or nothing matches current search expression) is not displayed anymore. 2016-10-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Remove call to cmdModuleAliases when asked for avail Module aliases are now displayed along regular modulefiles when cmdModuleAvail is processed. Thus call to cmdModuleAliases is now useless when avail action is asked. 2016-10-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Display aliases set in global/user modulerc on avail Fill a g_rcAlias array with all aliases defined from the global or user modulerc. Then adapt listModules procedure to be able to display only the aliases defined from the global or user modulerc (no directory lookup) when search argument is set to "rc_alias_only". cmdModuleAvail now starts by displaying aliases set in the global or user-specific modulerc in a dedicated "global/user modulerc" list. By doing so all aliases defined are now displayed on module avail output (even those defined in the global or user modulerc). 2016-10-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.90-avail/050-long.exp: Include aliases as part of listModules results Adapt listModules procedure to include to the results returned all the module aliases defined through the analyzed directory. By doing so a module avail or search commands automatically return all the aliases defined in addition to regular modulefiles to get a complete view of what is available. In module-alias procedure the full path name of the file that declared an alias is registered in a g_sourceAlias array. In listModules this array is looked at to distinguish the aliases coming from the currently analyzed directory. Aliases are displayed from the module path where they are defined. A "@" symbol is appended to the alias name, in the same way module-version are displayed, in order to be able to distinguish an alias from a regular modulefile. "@" has been retained as symbol to qualify module aliases as this symbol is used by "ls" command to qualify symbolic links. When --long display format is asked, the target of the alias is printed after the alias name. No last modification time is displayed as it has no meaning for a module alias. 2016-10-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Fix default module test based on '(default)' tag As default tag may not be the only one tag applying to a module (other versions may also be part of the tag list), default version tests, that were only comparing the '(default)' string, have been adapted to correctly handle cases where multiple tags apply to a default module. On resolveModuleVersionOrAlias procedure, test on '(default)' string has simply been removed since name passed to the procedure does not contain anymore tags in any situation. On getSimplifiedLoadedModuleList procedure, call to listModules procedure has been revised to only ask for default versions, this way there is no need to test a '(default)' string since all results returned are default versions. 2016-10-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.90-avail/050-long.exp: Handle show_modtimes directly in listModules Adapt cmdModuleAvail and listModules procedures to handle show_modtimes treatment directly within listModules rather than in cmdModuleAvail. This way there is no need to loop over listModules results and call getPathToModule on each of them. File location is already known by listModules, so file modification time query is easy to make there. As a consequence avail long output is directly managed by listModules. This output structure has been improved to let more space to display module tag list. Moreover when terse mode is used, tag list is no more separated by a space from module name (same behavior as C-version). Align list and savelist long output the improved output structure applied to avail long output. 2016-10-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Make listModules show_flags even when filter set Previous listModules code was not complying with the show_flags directives when a filter were set like "onlydefaults" or "onlylastest". This commit improves this by centralizing the code handling the show_flags directives. 2016-10-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Merge listModules proc flag_default_* args Simplify management of flag_default_dir and flag_default_mf arguments of listModules procedure by merging both args in a show_flags argument and set local value for reporting flags of directories or modulefiles based on the value of this show_flags argument and global variables flag_default_dir and flag_default_mf. * modulecmd.tcl: Remove listModules proc full_path argument Simplify listModules procedure by removing the full_path argument that was in all cases disabled. 2016-10-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Render error on display/help command Add error rendering directive when calling display or help commands as they can hit a magic cookie or a not found errors when processing name passed as argument. 2016-09-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Fix module-info symbols resolution Return all symbols defined by calling the getVersAliasList procedure. This procedure has been enhanced to first attempt an alias resolution on the name passed to it. Then each time a version or a default is found a recursive call is made on this new name to get all versions or default linked to the initial name. getVersAliasList has also been enhanced to pass and get a list of already resolved symbols for the current resolution in order to detect infinite resolution loop. Results returned by getVersAliasList are now sorted using the dictionnary-style sort as already performed by listModules. All these improvements made to the getVersAliasList will benefit to the listModules procedure so "avail" command will return more accurate versions and default information. 2016-09-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Improve .modulerc/.version handling in getPathToModule Adapt getPathToModule to parse .modulerc file at each level of the specified module in order to be able to resolve any alias that may be defined within the module directories. Means if module name "mod/sub1/sub2" is passed to getPathToModule, the procedure will parse any .modulerc file in "mod", "mod/sub1" and "mod/sub1/sub2" directories (if these dirs exist) then it will attempt to resolve module name with aliases and version found. To behave like Modules-C, if both a .modulerc and a .version file exist for the module name passed to getPathToModule, .modulerc is parsed then .version. In this situation a default value set from .version will win over a default value set in .modulerc. Same kind of change has been applied to the listModules procedure. A new argument named "search" has been added to the listModules procedure to be able when called by getPathToModule with a "no_depth" value to only get the content of a directory and not its sub elements as sub-directory resolution, .modulerc and .version are handled within getPathToModule. 2016-09-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Fix module-info version resolution Call for resolveModuleVersionOrAlias procedure to deeply resolve name provided by recursively looking at alias or version structures. Also improve module-version procedure to raise a warning message in case of duplicate version symbol is found. 2016-09-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Fix module-info alias resolution Call for resolveModuleVersionOrAlias procedure to deeply resolve name provided by recursively looking at alias structures. Improvement is made here to the resolveModuleVersionOrAlias procedure in order to be able to only look for alias (and not alias and version) when attempting resolution. A g_aliasHash array is introduced here to be able to reversely look at alias definition as Modules-C does. module-alias procedure has been adapted to fill this new structure and resolveModuleVersionOrAlias makes use of it if alias is searched and not found in g_moduleAlias array. 2016-09-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Register alias and version by the short module name Store aliases and versions by the short module name rather than full module path to get closer to the Modules-C behavior on alias and version management. As a consequence an alias defined in a module path can apply to a module stored in another module path. But this behavior is required to make alias defined in global modulerc functional. A getModuleNameVersion procedure is introduced to determine with a name provided as argument the corresponding module name, version and name/version. Module name is guessed from current module name when shorthand version notation is used. Both name and version are guessed from current module if name provided is empty. 2016-09-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Improve resolveModuleVersionOrAlias proc to detect loop Adapt resolveModuleVersionOrAlias procedure to resolve only one name at a time and pass a list of already resolved symbols for the current resolution in order to detect infinite resolution loop. When infinite resolution loop is detected error message is raised and returned value is set to "*undef*" to behave like Modules C-version. 2016-09-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Remove useless alias/version resolution in module proc Aliases and versions are solved when getPathToModule proc is called and getPathToModule is called by all command proc that need to resolve an alias or a version. So alias and version resolution is not required at the beginning of the module procedure. Resolving any argument to the module procedure as alias or version was also potentially erroneous. 2016-09-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Source $MODULERCFILE/modulerc when $MODULERCFILE is dir In order to behave like C-version, if the $MODULERCFILE variable is set and points to a directory, source the "modulerc" file in it instead of trying to source the directory (which led to error). 2016-09-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../modules.20-locate/010-init_ts.exp, .../modules.20-locate/020-fqual.exp, .../modules.20-locate/030-defvers.exp, .../modules.20-locate/040-alias.exp, .../modules.20-locate/045-symvers.exp, .../modules.20-locate/046-getsym.exp, .../modules.20-locate/047-symerrs.exp, .../modules.20-locate/048-symexec.exp, .../modules.20-locate/050-locrc.exp, .../modules.20-locate/055-locrcerrs.exp, .../modules.20-locate/060-rc.exp, .../modules.20-locate/065-rcerrs.exp, .../modules.20-locate/070-homerc.exp, .../modules.20-locate/095-cleanup.exp: testsuite: import and adapt 20-locate tests Import the 20-locate test directory in use in Modules-C testsuite, that was previously put aside for Modules-TCL. Adapt syntax of tests and results to fit the output of Modules-TCL which sometimes slightly differ from the C version. At this stage, most of the tests from this 20-locate directory are failling as aliases and versions support in Modules-TCL is not as complete as it is in C version. Next commits will close the gap between the two Modules flavors. 2016-09-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.80-deep/020-load.exp, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/040-wild.exp: testsuite: fixing deep/020, avail/030 and avail/040 * Fix typo error on 80-deep/020-load test (incorrect result were expected) * Adapt 90-avail/030-multiple result syntax not to conflict with regular expression special character like '(' * Adapt 90-avail/040-wild to use terse mode to not be dependent of local terminal size 2016-11-11 Kent Mein <mein@cs.umn.edu> * modulecmd.tcl, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/040-wild.exp: Make it so you can do module avail un Also fixed a couple of test cases. 2016-11-03 Kent Mein <mein@cs.umn.edu> * init/.gitignore, init/Makefile, modulecmd.tcl, testsuite/not_installed: Added missing fish shell to init Makefile In the process saw a typo in not_installed fixed that as well. Also updated the .gitignore file. This bug was found by Michael Gooch. 2016-08-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Compare strings with 'eq' instead of '==' in execute-modulefile '==' operator is meant for numerical comparison so it is more correct and faster to use 'eq' operator when comparing strings. * modulecmd.tcl, testsuite/modules.00-init/071-args.exp: Check each command receives the correct number of arg Improve module procedure to check for each module command that the correct number of argument are provided. If an unexpected number of argument is provided an error is raised as when an invalid command name is specified. This way module exit with an error code and an error is rendered in order to be checked from the shell. 2016-08-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.90-avail/020-single.exp: Improve column-mode in displayElementList Change way to compute rows*cols display grid in order to maximize the number of column to display per line. To do so a width is computed for each column instead of having each column width based on the largest one. The new code takes a bit more time to proceed (as there is more stuff to compute) but the additionnal time taken is not really discernable from the user perspective: on a 'module avail' containing ~10 paths and ~400 modulefiles, there is less than 0.1 second extra time. As display is now denser, two spaces are now used instead of one to separate elements. Thanks to Aurelien Degremont for crafting the right algorithm for this. * modulecmd.tcl, testsuite/modules.91-sort/030-whatis.exp: Merge list printing codes under displayElementList Set a common procedure to manage the display of list of elements: displayElementList. Lists can be displayed in a column fashion or with only one element per line. Elements displayed may be prefixed by their number. Also a header can be printed on top of the list. Adapt cmdModuleList, cmdModuleSavelist, cmdModuleSearch, cmdModuleAvail and cmdModuleAliases to use this new procedure. With a single set of code to manage this aspect it will be easier to improve it and all commands calling it will automatically benefit from these improvements. 2016-08-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.00-init/015-version.exp, testsuite/modules.00-init/090-switches.exp: Put all command-line parsing under catch protection Make command-line option parsing benefit from the catch (+reportError +exit 1) applied to command parsing and running. This way it produces same kind of error behavior when an invalid option is typed as when an invalid command is typed. Also put shell name parsing first in order to be able to renderError appropriately when an invalid option is typed. Elsewhere the puts of /bin/false on stdout was not made as no shell were set. An invalid option containing only one '-' as first character will now also produces an error. Before that only invalid options starting with '--' were treated as error. Improve testsuite on option treatment. Test long and short versions of these options and test the returned output. 2016-08-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.00-init/070-command.exp, testsuite/modules.00-init/090-switches.exp: Merge main command handling in module proc Make module command handling appear in a single location, the module procedure, rather than having a duplication of code in the main section. This modification simplifies the addition of new commands or the adaptation of existing commands as everything has to be done only once. Now calling module from a modulefile or a modulerc benefits from the same command shortcuts than when it is called from the command line. Moreover do not print anymore the module usage message when an invalid command is typed, as this large message often hide the error printed on the first line. An advice to type "module --help" is printed instead. * modulecmd.tcl: Simplify parsing of command switch arguments * modulecmd.tcl: Harmonize usage of exit when error occurs When error occurs and exit is called, always quit with the same error code: 1. Add a call to "exit 1" when error is caught in main section when processing module command. Remove use of exit in cmdModuleInit procedure, replaced by call to reportErrorAndExit, which will be caught at top level and go through the "exit 1" added above. End main section with an "exit 0" to explicit everything went well. * modulecmd.tcl: Harmonize reportErrorAndExit messages As done for the other report* procedures, here we harmonize some reportErrorAndExit messages to something simpler and clearer. There is no need to make reportErrorAndExit call to reportError instead of using "error" build-in proc since error proc raise a message which is caught and output by reportError in the end. 2016-08-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Standardize reportInternalBug procedure Adapt reportInternalBug procedure to make it call "report" rather than re-implementing a "puts stderr" procedure. This way all messages printed to stderr pass through the "report" procedure. Take also this opportunity to standardize some messages to something simpler and clearer. * modulecmd.tcl, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp: Standardize reportError procedure Add an "ERROR: " prefix to all messages put through reportError to make these error messages look similar. Take also this opportunity to standardize all error messages to this new single prefix, moving away from the inherited "+(0):ERROR:0: " prefix to something simpler and clearer. * modulecmd.tcl: Standardize reportWarning procedure Adapt reportWarning procedure to make it call "report" rather than re-implementing a "puts stderr" procedure. Also add a "WARNING: " prefix to all messages put through reportWarning to make this procedure different from the report procedure. Take also this opportunity to standardize some warning messages and to change some 'reportError "WARNING' calls into reportWarning calls where it was not necessary to raise the error counter (as it is warnings not errors). * modulecmd.tcl: Remove setup of global variables not accessed in procs * modulecmd.tcl: Add short option -d for --delim on prepend-path 2016-08-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.00-init/030-shells.exp: Introduce getModulePathList proc Defines a getModulePathList procedure that returns a list of the module paths by parsing the MODULEPATH environment variable. This new procedure enables to gather in a single location the code to parse MODULEPATH, thus it removes the need for many procedures to know about "env" and "g_def_separator" global variables. getModulePathList procedure also enables with its "behavior" parameter to directly exit on error when MODULEPATH is not set. By default, it returns an empty list. The "exiterronundef" behavior allows to closely match previous behavior, when $env(MODULEPATH) were accessed without being defined. * modulecmd.tcl: Introduce getLoadedModuleList proc Defines a getLoadedModuleList procedure that returns a list of the loaded modules by parsing the LOADEDMODULES environment variable. This new procedure enables to gather in a single location the code to parse LOADEDMODULES, thus it removes the need for many procedures to know about "env" and "g_def_separator" global variables. * modulecmd.tcl: Remove separator optional parameter where useless An optional parameter named "separator" was specified on many procedures but calls to these procedures never set this parameter. This commit removes these unused "separator" parameters to improve code clarity and it will help to provide in further commits generic procedures to access environment state. 2016-08-16 Romain Fihue <romain.fihue@cea.fr> * modulecmd.tcl, testsuite/home/.module/{coll4 => coll4.target}, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/020-savelist.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/050-saverm.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.61-coll/999-cleanup.exp: Introduce collection target concept Collection directory may sometimes be shared on multiple machines which may use different modules setup. For instance modules users may access with the same HOME directory multiple systems using different OS versions. When it happens a collection made on machine 1 may be erroneous on machine 2. To handle this use case, we introduce here the concept of target for module collections. By setting the MODULES_COLLECTION_TARGET environment variable to something that can make a distinction between machines that are incompatible with each other, only collections matching this target will be valid on it. When a target is set, only the collections made for that target will be available to restore, list, show, rm, and saving will register the target footprint (collection filename will be suffixed with ".$env(MODULES_COLLECTION_TARGET)". Collection target is not involved when collection is specified as file path on show, restore and save commands. For example, the MODULES_COLLECTION_TARGET variable may be set with results from commands like lsb_release, hostname, dnsdomainname, etc. 2016-08-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash_completion, init/tcsh_completion, modulecmd.tcl, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.61-coll/999-cleanup.exp: Introduce saveshow command Gives the ability to display the content of a given collection. 61-coll testsuite is adapted to test this new command. 2016-08-10 Romain Fihue <romain.fihue@cea.fr> * modulecmd.tcl, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/050-saverm.exp, testsuite/modules.61-coll/999-cleanup.exp: Save and restore collection specified as file path Until now, it was only possible to save and restore a collection located in default collection directory (under $HOME/.module). With this commit, a file path can be specified to the save and restore commands. On the contrary, saverm command has been enforced to use a name to target the collection to remove in order to avoid this command to be able to delete any file. 61-coll testsuite is adapted to test this new use case. 2016-08-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash_completion, init/tcsh_completion, modulecmd.tcl, testsuite/modules.61-coll/050-saverm.exp: Introduce saverm command Gives the ability to remove a given collection (it deletes corresponding file) 61-coll testsuite is adapted to test this new command. 2016-08-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Refactor collection code a little bit Introduce a getCollectionFilename procedure to query collection filename and simplify error management code in cmdModuleSave and cmdModuleRestore to improve code readability. Also set separate procedures to generate the content of a collection (formatCollectionContent procedure) and to read a collection file (readCollectionContent procedure) in order to prepare further enhancements on module collections. 2016-08-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Make use of lassign build-in proc lassign build-in procedure has been introduced in Tcl8.5 and provides an easier way to manage list results like those returned by getPathToModule and getMovementBetweenList. For compatibility with Tcl8.4 and earlier, a lassign procedure is provided here (set if not defined). See [1] for an overview of lassign implementations and performances. [1] http://wiki.tcl.tk/1530 2016-08-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/home/.module/coll2: Restore collection with multiple mods specified on single line Sometimes people manually edit their collection and may be tempted to specify multiple modules to load or multiple paths to use on a single line, for instance: module use --append path1 path2 module load mod1 mod2 mod3 This commit makes this use case possible by splitting content read from collection file. 61-coll testsuite has been adapted to test this use case (collection "coll2" has been changed to use this kind of syntax). 2016-08-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/home/.module/coll4, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/020-savelist.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/999-cleanup.exp: Fix restore when there is no module to load in collection Some uninitialized variable was causing issue when trying to restore a collection not defining any module to load. modules.61-coll testsuite has been adapted accordingly by introducing a "coll4" collection that only set paths to use, no module to load. Thanks to Nicolas Wiart for pointing this out. 2016-08-07 Aurelien Cedeyn <aurelien.cedeyn@cea.fr> * modulecmd.tcl, testsuite/home/.module/coll3, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/020-savelist.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/999-cleanup.exp: Fix restore when collection fully rewind module paths When restoring a collection which requires to unuse all currently set module paths before adding new ones, it previously raised error trying to access the empty env(MODULEPATH) variable. Fix that and work-around getSimplifiedLoadedModuleList procedure with helper list provided as argument to be able to compute simplified version of loaded modules even if there is no MODULEPATH set to look at all existing versions for a module. modules.61-coll testsuite has been adapted accordingly by introducing a "coll3" collection that requires to unuse all previously loaded paths when restoring. 2016-08-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/home/.module/coll1, testsuite/home/.module/coll2, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/999-cleanup.exp: Correctly restore multiple paths with order preservation cmdModuleUse prepends paths by default so cmdModuleRestore command was previously prepending new paths instead of appending them. To guaranty path order cmdModuleRestore now calls cmdModuleUse with --append flag by default. To keep the ability to directly source a collection file from a shell, now cmdModuleSave adds --append flag to the 'module use' lines it records. cmdModuleRestore treats this flag if present, but adds --append if no flag found to keep compatibility with previously generated collections. modules.61-coll testsuite is adapted accordingly to test collections containing more than one module path and to test previous and new style of 'module use' recorded lines. 2016-08-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.61-coll/030-save.exp: Raise error if try to save an empty environment * testsuite/home/.module/coll1, testsuite/home/.module/coll2, testsuite/home/.module/default, testsuite/modulefiles/coll/a, testsuite/modulefiles/coll/b, testsuite/modulefiles/coll/c, testsuite/modulefiles/coll/d, testsuite/modules.00-init/006-procs.exp, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/020-savelist.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/999-cleanup.exp: testsuite: add tests for collection management Introduce modules.61-coll testsuite to guaranty that savelist, save and restore commands behave appropriately. Add testoutfile_cmd procedure to 00-init/006-procs to get the ability to check module command output and specified file content. This new procedure enables to check content of collection generated by a 'save' command. 2016-07-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles/info/shellsexp, testsuite/modules.00-init/030-shells.exp, testsuite/modules.00-init/080-begenv.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/040-load.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/020-setenv.exp, testsuite/modules.50-cmds/030-unsetenv.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/086-info-shells.exp, testsuite/modules.50-cmds/087-info-shells-exp.exp, testsuite/modules.50-cmds/089-info-type.exp, testsuite/modules.50-cmds/195-load-recurs.exp, testsuite/modules.50-cmds/197-load-lots.exp, testsuite/modules.50-cmds/250-x-resource.exp, testsuite/modules.91-sort/040-load.exp, testsuite/modules.95-version/020-load.exp, testsuite/modules.95-version/020-unload.exp, testsuite/modules.95-version/022-load2.exp, testsuite/modules.95-version/022-unload2.exp, testsuite/modules.95-version/040-xgetenv.exp: testsuite: add tests for fish shell * init/fish.in, modulecmd.tcl: Support for fish shell 2016-07-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/030-shells.exp, testsuite/modules.00-init/080-begenv.exp, testsuite/modules.10-use/040-load.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/020-setenv.exp, testsuite/modules.50-cmds/030-unsetenv.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.91-sort/040-load.exp, testsuite/modules.95-version/020-load.exp, testsuite/modules.95-version/020-unload.exp, testsuite/modules.95-version/022-load2.exp, testsuite/modules.95-version/022-unload2.exp, testsuite/modules.95-version/040-xgetenv.exp: testsuite: add tests for tcl/python/lisp where perl is tested 2016-07-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * notdone/modules.50-cmds/086-info-shells.exp, notdone/modules.50-cmds/087-info-shells-exp.exp, testsuite/modulefiles/info/shellsexp, testsuite/modules.50-cmds/086-info-shells.exp, testsuite/modules.50-cmds/087-info-shells-exp.exp, .../modules.50-cmds/121-prereq-module.exp: testsuite: adapt 50-cmds/info-shells and 50-cmds/121-prereq tests * testsuite/modulefiles/info/type, testsuite/modulefiles/load/.version, testsuite/modulefiles/load/00, testsuite/modulefiles/load/10, testsuite/modulefiles/load/11, testsuite/modulefiles/load/12, testsuite/modulefiles/load/13, testsuite/modulefiles/load/14, testsuite/modulefiles/load/15, testsuite/modulefiles/load/16, testsuite/modulefiles/load/17, testsuite/modulefiles/load/18, testsuite/modulefiles/load/19, testsuite/modulefiles/load/20, testsuite/modulefiles/load/21, testsuite/modulefiles/load/22, testsuite/modulefiles/load/23, testsuite/modulefiles/load/24, testsuite/modulefiles/load/25, testsuite/modulefiles/load/26, testsuite/modulefiles/load/27, testsuite/modulefiles/load/28, testsuite/modulefiles/load/29, testsuite/modulefiles/load/30, testsuite/modulefiles/load/all, testsuite/modulefiles/recurs/modA, testsuite/modulefiles/recurs/modB, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.50-cmds/089-info-type.exp, testsuite/modules.50-cmds/195-load-recurs.exp, testsuite/modules.50-cmds/197-load-lots.exp: testsuite: import tests recently added to C-version * modulecmd.tcl: Add short option -d for --delim on append-path/remove-path 2016-07-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/home/.Xresources, testsuite/modulefiles/x-resource/1, testsuite/modules.50-cmds/250-x-resource.exp: testsuite: add tests and relative configs for x-resource Add 250-x-resource tests in 50-cmds serie to check x-resource commands in modulefile are correctly interpreted at load and unload times for the various shells. A x-resource/1 modulefile and a .Xresources config files are added to test various setting conditions (single resource string, complex string content, resource file to load). * modulecmd.tcl: Implement unload of x-resources and fix load Implement unload action of x-resources defined for all shells. Unload of x-resources is done by clearing string resource values with "xrdb -merge" since there is no xrdb command that can clear one property (xrdb -remove clears everything). For resources loaded from file, file content is parsed with "xrdb -load" and each property it defines is also cleared. This commit also corrects the way x-resource value is parsed. Sometimes x-resource value may be provided within resource name as the "x-resource {Ileaf.popup.saveUnder: True}" example provided in manpage. So if no value is provided, resource name is looked at to check if a value is provided within string (space or colon are looked at). Load of x-resources is also fixed by this commit for sh, csh and tcl to handle resource name and value containing wildcard characters and fixed for sh and csh to output well-behaving code to execute ("echo | xrdb -merge" instead of "xrdb -merge <<EOF") 2016-07-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/python.in, modulecmd.tcl: Fix Python autoinit, error and x-resource rendering Python code used to define the module command (autoinit action) was broken (syntax errors) and not Python3-compatible. Error rendering is also fixed here for Python3 compliance. Code used to process x-resource is adapted to comply with Python recommendation [1] (subprocess.Popen should be used instead of os.popen). Python init script is also modified by this commit to use same code as the one generated by autoinit action with call to subprocess.Popen rather than os.popen. [1] https://docs.python.org/2/library/os.html#os.popen 2016-07-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Replace reverseList proc by lreverse build-in proc lreverse build-in procedure has been introduced in Tcl8.5 and provides best performances. For compatibility with Tcl8.4 and earlier, a lreverse procedure is provided here (set if not defined). See [1] for an overview of lreverse implementations and performances. [1] http://wiki.tcl.tk/17188 * modulecmd.tcl: Fix dollar sign usage on XRDBPIPE variable * .gitignore: Ignore runtest result files in git repository 2016-07-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Use 'eq'/'ne' in place of '=='/'!=' to compare strings '==' and '!=' operators are meant for numerical comparison so it is more correct and faster to use 'eq' or 'ne' operators when comparing strings. This was found using the 'ttclcheck' utility [1] over the modulecmd.tcl complete code. [1] http://www.xdobry.de/ttclcheck 2016-07-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Remove code regarding undefined g_aliasHash array Some code where present in module-alias proc regarding a g_aliasHash global array. But this array variable is not defined nor used anywhere else in script. * modulecmd.tcl: Remove unused spaceEscaped proc 2016-07-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Introduce reportDebug proc Add a reportDebug procedure to simplify and harmonize debug report management. With this new procedure, the way to test if debug is enabled or not is found only in one place (and g_debug variable does not have to be known in every procedures). * testsuite/modules.50-cmds/140-system.exp, testsuite/modules.95-version/040-xgetenv.exp: testsuite: comment cmds/140-system and version/040-xgetenv Skip both cmds/140-system and version/040-xgetenv tests since pure-Tcl version of module does not behave like C version for "system" procedure and "live" resolution of variables set within paths. 2016-07-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Add hints for vim to correctly set tabs when developping * Makefile, testsuite/config/unix.exp: testsuite: fix MODULECMD initialization Update way MODULECMD is defined to let a chance for modulecmd.tcl to be found before looking at PATH for modulecmd binary. This way on systems where modulecmd is installed in default paths, tests can still be run on modulecmd.tcl. Remove MODULECMD env variable setup in Makefile for "make test" since environment variables are not looked at to initialize MODULECMD tcl variable when tests are configured. 2016-01-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modulefiles/verssort/1, testsuite/modulefiles/verssort/1.10, testsuite/modulefiles/verssort/1.2.1, testsuite/modulefiles/verssort/1.2.4, testsuite/modulefiles/verssort/1.8-2015-12-01, testsuite/modulefiles/verssort/1.8-2016-02-01, testsuite/modules.91-sort/010-init_ts.exp, testsuite/modules.91-sort/020-avail.exp, testsuite/modules.91-sort/030-whatis.exp, testsuite/modules.91-sort/040-load.exp, testsuite/modules.91-sort/999-cleanup.exp: Always dictionary-sort list of modules or collections Dictionary sort of Tcl enables to determine that a version 1.10 is greater that a version 1.8, for instance. This useful kind of sort was in use in modules-tcl previously but not for every sort. For instance load command was correctly able to find the greatest version of a module whereas avail and whatis commands did not sort existing versions accordingly. This patch applies the dictionary sort everywhere to ensure the exact same sort is applied everywhere. Dictionary sort appears to be the most appropriate kind of sort to work with software versions. So the sort_order argument of listModules procedure is removed to always get the same sort applied. Also a stringDictionaryCompare procedure is added in order to compare two strings with dictionary-sort (useful to know what string is greater than the other). In addition, modules.91-sort testsuite is introduced to guaranty that avail, whatis and load commands behave appropriately regarding sort. 2016-02-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/030-shells.exp, testsuite/modules.50-cmds/040-append.exp: testsuite: fixing init/030-shells and cmds/040-append * Adapt error message when MODULEPATH is empty (message differ on this module implementation) on 00-init/030-shells testsuite * Adapt 50-cmds/040-append testsuite since adding a bare colon to a path does not produce a path change on this module implementation 2015-04-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash_completion: Fixing bash completion to be posix compliant Bash Process Substitution is not known by posix sh so _module_not_yet_loaded function has been adapted to behave correctly when bash is launched in --posix mode. 2016-03-25 Kent Mein <mein@cs.umn.edu> * init/python.in: Make things work with python3. 2016-02-05 Kent Mein <mein@cs.umn.edu> * modulecmd.tcl: Remove unneeded code that was causing an issue. Thanks to Andy Barber for pointing this out. 2014-12-24 Kent Mein <mein@cs.umn.edu> * modulecmd.tcl: Small tweak for OSX. Uname is in a different location. * Makefile, doc/html/module.html, doc/html/modulefile.html, doc/man/man1/module.1, doc/man/man4/modulefile.4, doc/source/module.pl, doc/source/modulefile.pl: More doc work. 2014-11-12 Kent Mein <mein@cs.umn.edu> * doc/html/module.html, doc/html/modulefile.html, doc/man/man1/module.1, doc/man/man4/modulefile.4, doc/source/module.pl, doc/source/modulefile.pl: Fix some warnings in the documentation from podchecker. 2014-07-16 Kent Mein <mein@cs.umn.edu> * doc/html/module.html, doc/man/man1/module.1, doc/source/module.pl: Some work on documentation. * init/sh.in: Fix the check for interactive vs non interactive mode for some shells. 2014-06-05 Kent Mein <mein@cs.umn.edu> * doc/LICENSE.LGPL, doc/readme.txt: I talked to R.K. Owen and he cleared up why we had the LGPL there. It turns out specific files in the C version of modules are under the LGPL, since those files are not in the tcl only version of modules I'm removing the LGPL just to clean things up. Kent 2014-06-03 Kent Mein <mein@cs.umn.edu> * Makefile, doc/html/module.html, doc/html/modulefile.html, doc/man/man1/module.1, doc/man/man4/modulefile.4, doc/readme.txt, doc/source/module.pl, doc/source/modulefile.pl, man/man1/module.1, man/man4/modulefile.4: Create source docs for man pages. This is still a work in progress, but I've converted the current man pages over to pod (perl documentation format) The idea being that it's easier to edit and can be converted to various formats. The manpages are very out of date, but this at least will encourage me to keep them upto date and make it much easier to work with. 2014-05-21 Kent Mein <mein@cs.umn.edu> * modulecmd.tcl: Rename some vars used for a named pipe This affects both tcl and perl, and picks a more standard name between the two. * testsuite/modules.00-init/090-switches.exp: Update the test for the --help option since things have changed. 2014-05-20 Kent Mein <mein@cs.umn.edu> * init/.gitignore, init/Makefile, init/tcl.in, modulecmd.tcl: Patch from Yao-Ting Chiu This adds the tcl shell as an option. 2014-05-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Clarify prereq error message when multiple modules are specified 2014-04-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Managing settings to save as a stack with push/pop procedures Manage settings to save as a stack to have a separate set of settings for each module loaded or unloaded in order to be able to restore the correct set in case of failure. 2014-04-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Fixing restoreSettings to clear current arrays Clear current arrays before restoring saved values to remove potential new variables set before the issue occurs which lead to restoreSettings procedure call. 2014-03-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Improving save/restore command when saving module default version Save the modulename minus the module version if loaded version to save is module default version. 2014-03-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Fixing saveSettings to clear pre-existing saved arrays Clear pre-existing saved arrays in saveSettings to guaranty that multiple load/unload sequence will restore correct settings when a failure occurs. 2014-03-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Improving restore command behavior Move from a Purge+Unuse+Source approach to a smoother way with Unload+Unuse+Use+Load of just the modules and modulepaths needed to migrate from currently loaded environment to collection with preservation of the load order. * modulecmd.tcl: Reorganizing help page with groups of command and short descriptions 2014-03-07 Kent Mein <mein@cs.umn.edu> * modulecmd.tcl: Updating the version # wasn't done in the last commit. 2014-02-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash_completion, init/tcsh_completion, modulecmd.tcl: Introduction of save/restore/savelist commands for collection management Add module collection management to enable dump and reload of multiple module environment states. 2014-02-14 Kent Mein <mein@cs.umn.edu> * contrib/pre-commit, modulecmd.tcl: Added a hook script to automatically bump the version # Of modules to the next commit # so that next time we commit changes it will be updated. This is a little bit tricky because of the way pre-commit's work. (It's making the change for the next commit not the current one). 2014-02-12 Kent Mein <mein@cs.umn.edu> * contrib/modulefiles/HOME, contrib/modulefiles/dot, contrib/modulefiles/module-info, contrib/modulefiles/null, init/modulerc.examp: Added in a couple of the default modules I removed before. Also modified the comments in the example modulerc file a little. * doc/install.txt, doc/installwin.txt, init/Makefile, init/modulerc.examp, modulefiles/.gitignore, modulefiles/HOME, modulefiles/dot, modulefiles/module-cvs, modulefiles/module-info, modulefiles/modules, modulefiles/notavail, modulefiles/null, modulefiles/use.own, modulefiles/version: Change make so it does not create a default modulerc And update the documentation so things flow a little better. 2014-02-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: modify list command show_modtimes behavior to match behavior of avail command same specific header and module reporting format. gives show_modtimes more priority over show_oneperline. 2014-01-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: fix help usage message to correctly align switches 2014-02-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: fix show_modtimes to correctly display day number 2014-01-16 Kent Mein <mein@cs.umn.edu> * modulecmd.tcl: Small patch by Trey Greer Fixes it so LOADEDMODULES env var is initalized correctly when it's set to "". * modulecmd.tcl: Fixed a typo. I introduced a typo in the last commit this fixes it. * modulecmd.tcl: Fix up the formating a little. * init/bash_completion: Another patch from Xavier Delaruelle, Tweak to the bash completion so it works around some extra spacing. * init/csh.in, init/tcsh.in, init/tcsh_completion: Another patch by Xavier Delaruelle, This one reworks the patch from Joshua Randall to define tcsh completion for the c version so it works with this one. * init/bash_completion, modulecmd.tcl: More patches from Xavier Delaruelle, Added -D option (short form of --debug) Added -d or --default to only show default modules when doing module avail Added -L or --latest to only show latest version of modules when doing avail * init/bash.in, init/ksh.in, init/sh.in, init/zsh.in: Patch from Xavier Delaruelle, Now only redirect module from stderr to stdout in interactive mode to avoid breaking non interactive sessions (scp, sftp, etc). * init/bash_completion, modulecmd.tcl: 3 patches from Xavier Delaruelle Add --long and --terse options to help. Fix ModulesDisplay so it works. Fix ModulesAlias function so it works as well. 2013-11-06 Kent Mein <mein@cs.umn.edu> * contrib/readme.txt, doc/{install => install.txt}, doc/installwin.txt, readme.txt: Updated the documentation a bit. 2013-11-04 Kent Mein <mein@cs.umn.edu> * init/bash.in, init/ksh.in, init/sh.in, init/zsh.in: Added redirect stderr to stdout for shells that support it. * init/tcsh.in: Fix a site specific bit that snuck in awhile back. This shouldn't have been here, now it is fixed though. * init/bash.in: source the bash_completion script by default. This is for the tcl native version of modules and it just starts using the bash_completion script that has been supplied so that it's actually used. 2013-10-19 Kent Mein <mein@cs.umn.edu> * doc/example.txt: Some small tweaks to example setup documentation. 2013-08-01 Kent Mein <mein@cs.umn.edu> * testsuite/modules.50-cmds/040-append.exp: Fix one of the tests. * modulecmd.tcl: Simplify the csh autoinit code. If this is a problem we can add it back in but I'm guessing no one will even notice. 2013-06-06 Kent Mein <mein@cs.umn.edu> * modulecmd.tcl: A few patches from Xavier Delaruel to adjust exit codes when an error appears. 2013-03-25 Kent Mein <mein@cs.umn.edu> * modulecmd.tcl: Introduce MODULECONTACT var, Patch from Xavier Delaruelle So you can set the contact info with an environement variable instead of altering the modulecmd.tcl file directly. 2013-03-21 Kent Mein <mein@cs.umn.edu> * modulecmd.tcl: Clean up some dead code and a little reformating. * init/bash_completion: Patch by Xavier Delaruelle to add bash completion. You need to source the file in addition to the init/bash file to get it to work. * modulecmd.tcl: Fixing module help. Thanks to Xavier Delaruelle for the fix. 2013-03-13 Kent Mein <mein@cs.umn.edu> * notdone/modules.20-locate/010-init_ts.exp, notdone/modules.20-locate/020-fqual.exp, notdone/modules.20-locate/030-defvers.exp, notdone/modules.20-locate/040-alias.exp, notdone/modules.20-locate/045-symvers.exp, notdone/modules.20-locate/046-getsym.exp, notdone/modules.20-locate/047-symerrs.exp, notdone/modules.20-locate/048-symexec.exp, notdone/modules.20-locate/050-locrc.exp, notdone/modules.20-locate/055-locrcerrs.exp, notdone/modules.20-locate/060-rc.exp, notdone/modules.20-locate/065-rcerrs.exp, notdone/modules.20-locate/070-homerc.exp, notdone/modules.20-locate/095-cleanup.exp, notdone/modules.50-cmds/017-use-undo.exp, notdone/modules.50-cmds/022-setenv-eschars.exp, notdone/modules.50-cmds/025-setenv-undo.exp, notdone/modules.50-cmds/035-unsetenv-undo.exp, notdone/modules.50-cmds/036-unsetenv-x.exp, notdone/modules.50-cmds/042-append-delim.exp, notdone/modules.50-cmds/045-append-undo.exp, notdone/modules.50-cmds/047-app-del-undo.exp, notdone/modules.50-cmds/050-prepend.exp, notdone/modules.50-cmds/052-prepend-delim.exp, notdone/modules.50-cmds/055-prepend-undo.exp, notdone/modules.50-cmds/057-pre-del-undo.exp, notdone/modules.50-cmds/060-remove.exp, notdone/modules.50-cmds/065-remove-undo.exp, notdone/modules.50-cmds/070-alias-proc.exp, notdone/modules.50-cmds/075-alias.exp, notdone/modules.50-cmds/076-alias-sub.exp, notdone/modules.50-cmds/077-alias-undo.exp, notdone/modules.50-cmds/078-refresh.exp, notdone/modules.50-cmds/080-info-name.exp, notdone/modules.50-cmds/081-info-user.exp, notdone/modules.50-cmds/082-info-user-exp.exp, notdone/modules.50-cmds/083-info-mode.exp, notdone/modules.50-cmds/084-info-mode-exp.exp, notdone/modules.50-cmds/085-info-flags.exp, notdone/modules.50-cmds/086-info-shells.exp, notdone/modules.50-cmds/087-info-shells-exp.exp, notdone/modules.50-cmds/088-info-isloaded.exp, notdone/modules.50-cmds/090-uname-proc.exp, notdone/modules.50-cmds/095-uname.exp, notdone/modules.50-cmds/099-uname-cleanup.exp, notdone/modules.50-cmds/100-loglevel.exp, notdone/modules.50-cmds/101-badfac.exp, notdone/modules.50-cmds/110-verbose.exp, notdone/modules.50-cmds/115-verbose-msg.exp, notdone/modules.50-cmds/120-prereq-full.exp, notdone/modules.50-cmds/121-prereq-module.exp, notdone/modules.50-cmds/130-conflict-full.exp, notdone/modules.50-cmds/131-conflict-module.exp, notdone/modules.50-cmds/140-system.exp, notdone/modules.50-cmds/150-module.exp, notdone/modules.50-cmds/170-swap.exp, notdone/modules.50-cmds/175-swap2.exp, notdone/modules.50-cmds/190-load.exp, notdone/modules.50-cmds/200-break.exp, notdone/modules.50-cmds/210-exit.exp, notdone/modules.50-cmds/220-continue.exp, notdone/modules.50-cmds/230-loop.exp, notdone/modules.50-cmds/240-chdir.exp: Added a bunch of test cases that are not put in yet that probably should be. * contrib/scripts/createmodule.sh: Add a contributed script to help creating inital modules. 2013-03-04 Kent Mein <mein@cs.umn.edu> * init/.gitignore: Add modulerc to .gitignore. * init/modulerc: Remove the modulerc file because it's built by make and its location dependant. * doc/example.txt: More work on the example document. * modulecmd.tcl: Added module-info type so it returns "Tcl" * modulecmd.tcl: Fix a small problem pointed out by Sergiy Khan Bug #49 in the tracker. * doc/example.txt, readme.txt: Small tweaks to the readme and added the example document. * contrib/modulefiles/compilers/.version, contrib/modulefiles/compilers/compilers, contrib/modulefiles/dot, contrib/modulefiles/gnu, contrib/modulefiles/java/.version, contrib/modulefiles/java/6/.version, contrib/modulefiles/java/6/35, contrib/modulefiles/java/6/38, contrib/modulefiles/java/7/.version, contrib/modulefiles/java/7/07, contrib/modulefiles/java/7/11, contrib/modulefiles/local, contrib/modulefiles/math/mathematica/.version, contrib/modulefiles/math/mathematica/7.0.1, contrib/modulefiles/math/mathematica/8.0.1, contrib/modulefiles/null, contrib/modulefiles/openwin, contrib/modulefiles/perl/.version, contrib/modulefiles/perl/5.14.1, contrib/modulefiles/perl/5.8.7, contrib/modulefiles/scheme/.version, contrib/modulefiles/scheme/drscheme/.version, contrib/modulefiles/scheme/drscheme/410, contrib/modulefiles/scheme/drscheme/425, contrib/modulefiles/scheme/mit, contrib/modulefiles/scheme/racket/.version, contrib/modulefiles/scheme/racket/5.0.2, contrib/modulefiles/scheme/racket/5.1.1, contrib/modulefiles/soft/gcc/.version, contrib/modulefiles/soft/gcc/4.5.2, contrib/modulefiles/soft/gcc/4.7.2, contrib/modulefiles/system, contrib/modulefiles/user, contrib/scripts/resetenv, contrib/scripts/resetgnome, contrib/template/.aliases, contrib/template/.bash_profile, contrib/template/.bashrc, contrib/template/.cshrc, contrib/template/.fvwm2rc, contrib/template/.gconf/apps/%gconf.xml, contrib/template/.gconf/apps/evolution/%gconf.xml, .../.gconf/apps/evolution/calendar/%gconf.xml, .../apps/evolution/calendar/notify/%gconf.xml, .../template/.gconf/apps/gconf-editor/%gconf.xml, contrib/template/.gconf/apps/gedit-2/%gconf.xml, .../.gconf/apps/gedit-2/plugins/%gconf.xml, .../apps/gedit-2/plugins/filebrowser/%gconf.xml, .../gedit-2/plugins/filebrowser/on_load/%gconf.xml, .../.gconf/apps/gedit-2/preferences/%gconf.xml, .../.gconf/apps/gedit-2/preferences/ui/%gconf.xml, .../gedit-2/preferences/ui/statusbar/%gconf.xml, .../.gconf/apps/gnome-power-manager/%gconf.xml, .../apps/gnome-power-manager/buttons/%gconf.xml, .../.gconf/apps/gnome-screensaver/%gconf.xml, .../template/.gconf/apps/gnome-settings/%gconf.xml, .../apps/gnome-settings/gnome-panel/%gconf.xml, .../template/.gconf/apps/gnome-terminal/%gconf.xml, .../.gconf/apps/gnome-terminal/profiles/%gconf.xml, .../gnome-terminal/profiles/Default/%gconf.xml, .../.gconf/apps/nautilus-open-terminal/%gconf.xml, contrib/template/.gconf/apps/panel/%gconf.xml, .../template/.gconf/apps/panel/applets/%gconf.xml, .../apps/panel/applets/clock_screen0/%gconf.xml, .../panel/applets/clock_screen0/prefs/%gconf.xml, .../applets/indicator_applet_screen0/%gconf.xml, .../apps/panel/applets/mixer_screen0/%gconf.xml, .../applets/notification_area_screen0/%gconf.xml, .../applets/show_desktop_button_screen0/%gconf.xml, .../panel/applets/trashapplet_screen0/%gconf.xml, .../panel/applets/window_list_screen0/%gconf.xml, .../applets/window_list_screen0/prefs/%gconf.xml, .../applets/workspace_switcher_screen0/%gconf.xml, .../workspace_switcher_screen0/prefs/%gconf.xml, .../template/.gconf/apps/panel/general/%gconf.xml, .../template/.gconf/apps/panel/objects/%gconf.xml, .../objects/browser_launcher_screen0/%gconf.xml, .../objects/clock_separator_screen0/%gconf.xml, .../apps/panel/objects/menu_bar_screen0/%gconf.xml, .../.gconf/apps/panel/objects/object_0/%gconf.xml, .../.gconf/apps/panel/objects/object_1/%gconf.xml, .../.gconf/apps/panel/objects/object_2/%gconf.xml, .../panel/objects/yelp_launcher_screen0/%gconf.xml, .../.gconf/apps/panel/toplevels/%gconf.xml, .../toplevels/bottom_panel_screen0/%gconf.xml, .../bottom_panel_screen0/background/%gconf.xml, .../panel/toplevels/top_panel_screen0/%gconf.xml, .../top_panel_screen0/background/%gconf.xml, contrib/template/.gconf/desktop/%gconf.xml, contrib/template/.gconf/desktop/gnome/%gconf.xml, .../.gconf/desktop/gnome/accessibility/%gconf.xml, .../gnome/accessibility/keyboard/%gconf.xml, .../.gconf/desktop/gnome/applications/%gconf.xml, .../gnome/applications/window_manager/%gconf.xml, .../.gconf/desktop/gnome/lockdown/%gconf.xml, contrib/template/.login, contrib/template/.logout, contrib/template/.mailcap, contrib/template/.mime.types, contrib/template/.vim/colors/herald.vim, contrib/template/.vim/colors/moria.vim, contrib/template/.vim/colors/xoria256.vim, contrib/template/.vim/perl-support.zip, .../template/.vim/perlsupport/README.perlsupport, .../.vim/perlsupport/autoload/perlsupportgui.vim, .../perlsupport/autoload/perlsupportprofiling.vim, .../.vim/perlsupport/autoload/perlsupportregex.vim, .../template/.vim/perlsupport/doc/perlsupport.txt, .../template/.vim/perlsupport/ftplugin/perl.vim, .../codesnippets/SmallProf-variables.pl, .../perl-support/codesnippets/dot.SmallProf, .../codesnippets/free-software-comment, .../perl-support/codesnippets/module-interface.pl, .../perlsupport/perl-support/codesnippets/new.pl, .../codesnippets/pod-template-application.pl, .../codesnippets/pod-template-module.pl, .../print-data-structure-with-Dumper.pl, .../perl-support/codesnippets/print-hash-sorted.pl, .../perl-support/codesnippets/print-hash.pl, ...process-all-files-in-a-directory-recursively.pl, .../perl-support/codesnippets/slurp-file.pl, .../.vim/perlsupport/perl-support/doc/ChangeLog, .../perlsupport/perl-support/doc/perl-hot-keys.pdf, .../perlsupport/perl-support/doc/perl-hot-keys.tex, .../.vim/perlsupport/perl-support/doc/pmdesc3.text, .../perl-support/modules/perl-modules.list, .../perl-support/rc/customization.ctags, .../perl-support/rc/customization.gvimrc, .../perl-support/rc/customization.perltidyrc, .../perl-support/rc/customization.smallprof, .../perl-support/rc/customization.vimrc, .../perlsupport/perl-support/scripts/csv2err.pl, .../perlsupport/perl-support/scripts/efm_perl.pl, .../perlsupport/perl-support/scripts/pmdesc3.pl, .../perlsupport/perl-support/scripts/wrapper.sh, .../perlsupport/perl-support/templates/Templates, .../perl-support/templates/comments.template, .../perl-support/templates/idioms.template, .../perl-support/templates/pod.template, .../perl-support/templates/statements.template, .../perlsupport/perl-support/wordlists/perl.list, .../.vim/perlsupport/plugin/perl-support.vim, contrib/template/.vim/plugin/matrix.vim, contrib/template/.vim/syntax/fluxkeys.vim, contrib/template/.vim/syntax/perl.vim, contrib/template/README.dotfiles, contrib/template/resetenv.conf, man/man1/module.1, man/man4/modulefile.4: Added really old man pages, and a bunch of example things. Still need to write some documentation for the contrib stuff and update the man pages. * LICENSE.GPL => doc/LICENSE.GPL, LICENSE.LGPL => doc/LICENSE.LGPL, README-EMACS.txt => doc/emacs.txt, README.txt => doc/install, doc/installwin.txt, readme.txt: Setup some more complicated documentation and move existing docs to new dir. 2013-01-22 Kent Mein <mein@cs.umn.edu> * modulefiles/{HOME.in => HOME}, modulefiles/Makefile.am, modulefiles/{dot.in => dot}, modulefiles/lang/.gitignore, modulefiles/lang/.mklang, modulefiles/{module-cvs.in => module-cvs}, modulefiles/{module-info.in => module-info}, modulefiles/{modules.in => modules}, modulefiles/{notavail.in => notavail}, modulefiles/{null.in => null}, modulefiles/{use.own.in => use.own}, modulefiles/{version.in => version}: Clean up the default modulefiles a bit. Kent * .gitattributes, doc/.gitignore, doc/Makefile.am, doc/Modules-Paper.doc, doc/Modules-Paper.pdf, doc/module.1.in, doc/modulefile.4.in: Removed the documentation, no need to have it twice. Maybe will work on a way to add it back in later... Kent * xref/ModuleCmd_Avail.c.html, xref/ModuleCmd_Avail.c.src.html, xref/ModuleCmd_Clear.c.html, xref/ModuleCmd_Clear.c.src.html, xref/ModuleCmd_Display.c.html, xref/ModuleCmd_Display.c.src.html, xref/ModuleCmd_Help.c.html, xref/ModuleCmd_Help.c.src.html, xref/ModuleCmd_Init.c.html, xref/ModuleCmd_Init.c.src.html, xref/ModuleCmd_List.c.html, xref/ModuleCmd_List.c.src.html, xref/ModuleCmd_Load.c.html, xref/ModuleCmd_Load.c.src.html, xref/ModuleCmd_Purge.c.html, xref/ModuleCmd_Purge.c.src.html, xref/ModuleCmd_Refresh.c.html, xref/ModuleCmd_Refresh.c.src.html, xref/ModuleCmd_Switch.c.html, xref/ModuleCmd_Switch.c.src.html, xref/ModuleCmd_Update.c.html, xref/ModuleCmd_Update.c.src.html, xref/ModuleCmd_Use.c.html, xref/ModuleCmd_Use.c.src.html, xref/ModuleCmd_Whatis.c.html, xref/ModuleCmd_Whatis.c.src.html, xref/cmdAlias.c.html, xref/cmdAlias.c.src.html, xref/cmdChdir.c.html, xref/cmdChdir.c.src.html, xref/cmdConflict.c.html, xref/cmdConflict.c.src.html, xref/cmdInfo.c.html, xref/cmdInfo.c.src.html, xref/cmdIsLoaded.c.html, xref/cmdIsLoaded.c.src.html, xref/cmdLog.c.html, xref/cmdLog.c.src.html, xref/cmdMisc.c.html, xref/cmdMisc.c.src.html, xref/cmdModule.c.html, xref/cmdModule.c.src.html, xref/cmdPath.c.html, xref/cmdPath.c.src.html, xref/cmdSetenv.c.html, xref/cmdSetenv.c.src.html, xref/cmdUlvl.c.html, xref/cmdUlvl.c.src.html, xref/cmdUname.c.html, xref/cmdUname.c.src.html, xref/cmdVerbose.c.html, xref/cmdVerbose.c.src.html, xref/cmdVersion.c.html, xref/cmdVersion.c.src.html, xref/cmdWhatis.c.html, xref/cmdWhatis.c.src.html, xref/cmdXResource.c.html, xref/cmdXResource.c.src.html, xref/config.h.html, xref/config.h.src.html, xref/cxref.apdx.html, xref/cxref.css, xref/cxref.function, xref/cxref.html, xref/cxref.include, xref/cxref.typedef, xref/cxref.variable, xref/error.c.html, xref/error.c.src.html, xref/getopt.c.html, xref/getopt.c.src.html, xref/getopt.h.html, xref/getopt.h.src.html, xref/index.html, xref/init.c.html, xref/init.c.src.html, xref/locate_module.c.html, xref/locate_module.c.src.html, xref/main.c.html, xref/main.c.src.html, xref/modules_def.h.html, xref/modules_def.h.src.html, xref/utility.c.html, xref/utility.c.src.html, xref/utilmem.c.html, xref/utilmem.c.src.html, xref/utilobj.c.html, xref/utilobj.c.src.html, xref/uvec.c.html, xref/uvec.c.src.html, xref/version.c.html, xref/version.c.src.html: Removing more stuff that was c version specific. Kent 2013-01-10 Kent Mein <mein@cs.umn.edu> * tcl/Makefile => Makefile, tcl/README-EMACS.txt => README-EMACS.txt, tcl/README.txt => README.txt, {tcl/init => init}/.gitignore, {tcl/init => init}/Makefile, {tcl/init => init}/README.txt, {tcl/init => init}/bash.in, {tcl/init => init}/csh.in, {tcl/init => init}/ksh.in, {tcl/init => init}/lisp.in, {tcl/init => init}/modulerc, {tcl/init => init}/perl.in, {tcl/init => init}/python.in, {tcl/init => init}/sh.in, {tcl/init => init}/tcsh.in, {tcl/init => init}/zsh.debug, {tcl/init => init}/zsh.in, tcl/modulecmd.tcl => modulecmd.tcl, {tcl/testsuite => testsuite}/config/unix.exp, {tcl/testsuite => testsuite}/etc/bad, {tcl/testsuite => testsuite}/etc/empty, {tcl/testsuite => testsuite}/etc/modulerc, {tcl/testsuite => testsuite}/home/.modulerc, {tcl/testsuite => testsuite}/home/.modules, {tcl/testsuite => testsuite}/home/.modules.save, .../modulefiles.deep/modulerc/.modulerc, .../modulefiles.deep/modulerc/dir1/.modulerc, .../modulefiles.deep/modulerc/dir1/1.0, .../modulefiles.deep/modulerc/dir1/2.0, .../modulefiles.deep/modulerc/dir2/.modulerc, .../modulefiles.deep/modulerc/dir2/1.0/.modulerc, .../modulefiles.deep/modulerc/dir2/1.0/rc1, .../modulefiles.deep/modulerc/dir2/1.0/rc2, .../modulefiles.deep/modulerc/dir2/2.0, .../modulefiles.deep/modulerc/dir2/3.0, .../testsuite => testsuite}/modulefiles.deep/plain/dir1/1.0, .../testsuite => testsuite}/modulefiles.deep/plain/dir1/2.0, .../testsuite => testsuite}/modulefiles.deep/plain/dir2/1.0, .../testsuite => testsuite}/modulefiles.deep/plain/dir2/2.0, .../modulefiles.deep/version/.version, .../modulefiles.deep/version/dir1/.version, .../modulefiles.deep/version/dir1/1.0, .../modulefiles.deep/version/dir1/2.0, .../modulefiles.deep/version/dir2/.version, .../modulefiles.deep/version/dir2/1.0, .../modulefiles.deep/version/dir2/2.0/.version, .../modulefiles.deep/version/dir2/2.0/rc1, .../modulefiles.deep/version/dir2/2.0/rc2, .../modulefiles.deep/version/dir2/3.0, {tcl/testsuite => testsuite}/modulefiles.other/1.1/version, {tcl/testsuite => testsuite}/modulefiles.other/1.2/version, {tcl/testsuite => testsuite}/modulefiles.other/1.3/version, {tcl/testsuite => testsuite}/modulefiles.other/README, {tcl/testsuite => testsuite}/modulefiles/README, {tcl/testsuite => testsuite}/modulefiles/alias/1.0, {tcl/testsuite => testsuite}/modulefiles/alias/2.0, {tcl/testsuite => testsuite}/modulefiles/append/0.1, {tcl/testsuite => testsuite}/modulefiles/append/0.2, {tcl/testsuite => testsuite}/modulefiles/append/1.0, {tcl/testsuite => testsuite}/modulefiles/append/2.0, {tcl/testsuite => testsuite}/modulefiles/append/2.1, {tcl/testsuite => testsuite}/modulefiles/append/2.2, {tcl/testsuite => testsuite}/modulefiles/break/1.0, {tcl/testsuite => testsuite}/modulefiles/break/2.0, {tcl/testsuite => testsuite}/modulefiles/break/3.0, {tcl/testsuite => testsuite}/modulefiles/break/4.0, {tcl/testsuite => testsuite}/modulefiles/chdir/1.0, {tcl/testsuite => testsuite}/modulefiles/chdir/2.0, {tcl/testsuite => testsuite}/modulefiles/chdir/3.0, {tcl/testsuite => testsuite}/modulefiles/chdir/4.0, {tcl/testsuite => testsuite}/modulefiles/conflict/full, {tcl/testsuite => testsuite}/modulefiles/conflict/module, {tcl/testsuite => testsuite}/modulefiles/continue/1.0, {tcl/testsuite => testsuite}/modulefiles/continue/2.0, {tcl/testsuite => testsuite}/modulefiles/continue/3.0, {tcl/testsuite => testsuite}/modulefiles/continue/4.0, {tcl/testsuite => testsuite}/modulefiles/empty/1.0, {tcl/testsuite => testsuite}/modulefiles/eschars/1.0, {tcl/testsuite => testsuite}/modulefiles/exit/1.0, {tcl/testsuite => testsuite}/modulefiles/exit/2.0, {tcl/testsuite => testsuite}/modulefiles/exit/3.0, {tcl/testsuite => testsuite}/modulefiles/help/2.0, {tcl/testsuite => testsuite}/modulefiles/info/isloaded, {tcl/testsuite => testsuite}/modulefiles/info/mode1, {tcl/testsuite => testsuite}/modulefiles/info/mode2, {tcl/testsuite => testsuite}/modulefiles/info/mode3, {tcl/testsuite => testsuite}/modulefiles/info/mode4, {tcl/testsuite => testsuite}/modulefiles/info/mode5, {tcl/testsuite => testsuite}/modulefiles/info/mode6, {tcl/testsuite => testsuite}/modulefiles/info/name, {tcl/testsuite => testsuite}/modulefiles/info/shells, {tcl/testsuite => testsuite}/modulefiles/info/shellsexp, {tcl/testsuite => testsuite}/modulefiles/info/user, {tcl/testsuite => testsuite}/modulefiles/info/userexp, {tcl/testsuite => testsuite}/modulefiles/loc_dv1/1.0, {tcl/testsuite => testsuite}/modulefiles/loc_dv1/2.0, {tcl/testsuite => testsuite}/modulefiles/loc_dv1/3.0, {tcl/testsuite => testsuite}/modulefiles/loc_dv2/.version, {tcl/testsuite => testsuite}/modulefiles/loc_dv2/1.0, {tcl/testsuite => testsuite}/modulefiles/loc_dv2/2.0, {tcl/testsuite => testsuite}/modulefiles/loc_dv3/.version, {tcl/testsuite => testsuite}/modulefiles/loc_dv3/1.0, {tcl/testsuite => testsuite}/modulefiles/loc_dv3/2.0, {tcl/testsuite => testsuite}/modulefiles/loc_dv4/.version, {tcl/testsuite => testsuite}/modulefiles/loc_dv4/1.0, {tcl/testsuite => testsuite}/modulefiles/loc_dv4/2.0, {tcl/testsuite => testsuite}/modulefiles/loc_dv6/1.0, {tcl/testsuite => testsuite}/modulefiles/loc_dv6/2.0/1.0, {tcl/testsuite => testsuite}/modulefiles/loc_dv7/.version, {tcl/testsuite => testsuite}/modulefiles/loc_dv7/1.0, {tcl/testsuite => testsuite}/modulefiles/loc_dv7/2.0/1.0, {tcl/testsuite => testsuite}/modulefiles/loc_dv7/3.0, {tcl/testsuite => testsuite}/modulefiles/loc_dv8/.version, {tcl/testsuite => testsuite}/modulefiles/loc_dv8/1.0, {tcl/testsuite => testsuite}/modulefiles/loc_dv8/2.0, {tcl/testsuite => testsuite}/modulefiles/loc_fq/1.0, {tcl/testsuite => testsuite}/modulefiles/loc_fq/2.0, {tcl/testsuite => testsuite}/modulefiles/loc_rc1/.modulerc, {tcl/testsuite => testsuite}/modulefiles/loc_rc1/1.0, {tcl/testsuite => testsuite}/modulefiles/loc_rc1/2.0, {tcl/testsuite => testsuite}/modulefiles/loc_rc2/.modulerc, {tcl/testsuite => testsuite}/modulefiles/loc_rc2/1.0, {tcl/testsuite => testsuite}/modulefiles/loc_rc2/2.0, {tcl/testsuite => testsuite}/modulefiles/loc_rc3/.modulerc, {tcl/testsuite => testsuite}/modulefiles/loc_rc3/1.0, {tcl/testsuite => testsuite}/modulefiles/loc_rc3/2.0, {tcl/testsuite => testsuite}/modulefiles/loc_rc3/3.0, {tcl/testsuite => testsuite}/modulefiles/loc_rc4/.modulerc, {tcl/testsuite => testsuite}/modulefiles/loc_rc4/.version, {tcl/testsuite => testsuite}/modulefiles/loc_rc4/1.0, {tcl/testsuite => testsuite}/modulefiles/loc_rc4/2.0, {tcl/testsuite => testsuite}/modulefiles/loc_rc4/3.0, {tcl/testsuite => testsuite}/modulefiles/loc_rc5/.modulerc, {tcl/testsuite => testsuite}/modulefiles/loc_rc5/1.0, {tcl/testsuite => testsuite}/modulefiles/loc_rc5/2.0, {tcl/testsuite => testsuite}/modulefiles/loc_sym/1.0, {tcl/testsuite => testsuite}/modulefiles/loc_sym/alias1, {tcl/testsuite => testsuite}/modulefiles/loc_sym/alias2, {tcl/testsuite => testsuite}/modulefiles/loc_sym/alias3, {tcl/testsuite => testsuite}/modulefiles/loc_sym/alias4, {tcl/testsuite => testsuite}/modulefiles/loc_sym/alias5, {tcl/testsuite => testsuite}/modulefiles/loc_sym/alias6, {tcl/testsuite => testsuite}/modulefiles/loc_sym/exec1, {tcl/testsuite => testsuite}/modulefiles/loc_sym/exec2, {tcl/testsuite => testsuite}/modulefiles/loc_sym/getvers1, {tcl/testsuite => testsuite}/modulefiles/loc_sym/getvers2, {tcl/testsuite => testsuite}/modulefiles/loc_sym/getvers3, {tcl/testsuite => testsuite}/modulefiles/loc_sym/getvers4, {tcl/testsuite => testsuite}/modulefiles/loc_sym/getvers5, {tcl/testsuite => testsuite}/modulefiles/loc_sym/getvers6, {tcl/testsuite => testsuite}/modulefiles/loc_sym/getvers7, {tcl/testsuite => testsuite}/modulefiles/loc_sym/getvers8, {tcl/testsuite => testsuite}/modulefiles/loc_sym/versinf1, {tcl/testsuite => testsuite}/modulefiles/loc_sym/versinf2, {tcl/testsuite => testsuite}/modulefiles/loc_sym/versinf3, {tcl/testsuite => testsuite}/modulefiles/loc_sym/versinf4, {tcl/testsuite => testsuite}/modulefiles/loc_sym/versinf5, {tcl/testsuite => testsuite}/modulefiles/loc_sym/versinf6, {tcl/testsuite => testsuite}/modulefiles/loc_sym/versinf7, {tcl/testsuite => testsuite}/modulefiles/loc_sym/version1, {tcl/testsuite => testsuite}/modulefiles/loc_sym/version10, {tcl/testsuite => testsuite}/modulefiles/loc_sym/version11, {tcl/testsuite => testsuite}/modulefiles/loc_sym/version12, {tcl/testsuite => testsuite}/modulefiles/loc_sym/version13, {tcl/testsuite => testsuite}/modulefiles/loc_sym/version14, {tcl/testsuite => testsuite}/modulefiles/loc_sym/version2, {tcl/testsuite => testsuite}/modulefiles/loc_sym/version3, {tcl/testsuite => testsuite}/modulefiles/loc_sym/version4, {tcl/testsuite => testsuite}/modulefiles/loc_sym/version5, {tcl/testsuite => testsuite}/modulefiles/loc_sym/version6, {tcl/testsuite => testsuite}/modulefiles/loc_sym/version7, {tcl/testsuite => testsuite}/modulefiles/loc_sym/version8, {tcl/testsuite => testsuite}/modulefiles/loc_sym/version9, {tcl/testsuite => testsuite}/modulefiles/log/badfac, {tcl/testsuite => testsuite}/modulefiles/log/err_both_1, {tcl/testsuite => testsuite}/modulefiles/log/err_both_2, {tcl/testsuite => testsuite}/modulefiles/log/err_file, {tcl/testsuite => testsuite}/modulefiles/log/err_syslog, {tcl/testsuite => testsuite}/modulefiles/module/2.0, {tcl/testsuite => testsuite}/modulefiles/prepend/0.1, {tcl/testsuite => testsuite}/modulefiles/prepend/0.2, {tcl/testsuite => testsuite}/modulefiles/prepend/1.0, {tcl/testsuite => testsuite}/modulefiles/prepend/2.0, {tcl/testsuite => testsuite}/modulefiles/prepend/2.1, {tcl/testsuite => testsuite}/modulefiles/prepend/2.2, {tcl/testsuite => testsuite}/modulefiles/prereq/full, {tcl/testsuite => testsuite}/modulefiles/prereq/module, {tcl/testsuite => testsuite}/modulefiles/remove/2.0, {tcl/testsuite => testsuite}/modulefiles/setenv/1.0, {tcl/testsuite => testsuite}/modulefiles/system/2.0, {tcl/testsuite => testsuite}/modulefiles/trace/all_off, {tcl/testsuite => testsuite}/modulefiles/trace/all_on, {tcl/testsuite => testsuite}/modulefiles/uname/domain, {tcl/testsuite => testsuite}/modulefiles/uname/machine, {tcl/testsuite => testsuite}/modulefiles/uname/nodename, {tcl/testsuite => testsuite}/modulefiles/uname/release, {tcl/testsuite => testsuite}/modulefiles/uname/sysname, {tcl/testsuite => testsuite}/modulefiles/uname/version, {tcl/testsuite => testsuite}/modulefiles/unsetenv/0.9, {tcl/testsuite => testsuite}/modulefiles/unsetenv/1.0, {tcl/testsuite => testsuite}/modulefiles/use/.version, {tcl/testsuite => testsuite}/modulefiles/use/1.0, {tcl/testsuite => testsuite}/modulefiles/use/2.0, {tcl/testsuite => testsuite}/modulefiles/use/2.1, {tcl/testsuite => testsuite}/modulefiles/use/2.2, {tcl/testsuite => testsuite}/modulefiles/user/adv, {tcl/testsuite => testsuite}/modulefiles/user/advanced, {tcl/testsuite => testsuite}/modulefiles/user/exp, {tcl/testsuite => testsuite}/modulefiles/user/expert, {tcl/testsuite => testsuite}/modulefiles/user/nov, {tcl/testsuite => testsuite}/modulefiles/user/novice, {tcl/testsuite => testsuite}/modulefiles/user/undef, {tcl/testsuite => testsuite}/modulefiles/verbose/msg, {tcl/testsuite => testsuite}/modulefiles/verbose/off, {tcl/testsuite => testsuite}/modulefiles/verbose/on, {tcl/testsuite => testsuite}/modulefiles/verbose/undef, {tcl/testsuite => testsuite}/modulefiles/versions/1.1, {tcl/testsuite => testsuite}/modulefiles/versions/1.2, {tcl/testsuite => testsuite}/modulefiles/versions/1.3, {tcl/testsuite => testsuite}/modulefiles/whatis/lines, {tcl/testsuite => testsuite}/modulefiles/whatis/multiple, {tcl/testsuite => testsuite}/modulefiles/whatis/none, {tcl/testsuite => testsuite}/modulefiles/whatis/single, {tcl/testsuite => testsuite}/modulefiles/whatis/string, .../testsuite => testsuite}/modules.00-init/005-init_ts.exp, {tcl/testsuite => testsuite}/modules.00-init/006-procs.exp, .../testsuite => testsuite}/modules.00-init/010-environ.exp, .../testsuite => testsuite}/modules.00-init/015-version.exp, {tcl/testsuite => testsuite}/modules.00-init/030-shells.exp, .../testsuite => testsuite}/modules.00-init/050-modpath.exp, {tcl/testsuite => testsuite}/modules.00-init/080-begenv.exp, .../modules.00-init/090-switches.exp, {tcl/testsuite => testsuite}/modules.10-use/010-init_ts.exp, {tcl/testsuite => testsuite}/modules.10-use/030-use.exp, {tcl/testsuite => testsuite}/modules.10-use/031-append.exp, {tcl/testsuite => testsuite}/modules.10-use/040-load.exp, {tcl/testsuite => testsuite}/modules.10-use/070-unuse.exp, .../testsuite => testsuite}/modules.50-cmds/010-init_ts.exp, {tcl/testsuite => testsuite}/modules.50-cmds/015-use.exp, {tcl/testsuite => testsuite}/modules.50-cmds/020-setenv.exp, .../modules.50-cmds/030-unsetenv.exp, {tcl/testsuite => testsuite}/modules.50-cmds/040-append.exp, {tcl/testsuite => testsuite}/modules.50-cmds/140-system.exp, .../testsuite => testsuite}/modules.50-cmds/999-cleanup.exp, .../testsuite => testsuite}/modules.80-deep/010-init_ts.exp, {tcl/testsuite => testsuite}/modules.80-deep/020-load.exp, .../testsuite => testsuite}/modules.80-deep/030-display.exp, {tcl/testsuite => testsuite}/modules.80-deep/040-list.exp, .../testsuite => testsuite}/modules.80-deep/999-cleanup.exp, .../modules.90-avail/010-init_ts.exp, .../testsuite => testsuite}/modules.90-avail/020-single.exp, .../modules.90-avail/030-multiple.exp, {tcl/testsuite => testsuite}/modules.90-avail/040-wild.exp, {tcl/testsuite => testsuite}/modules.90-avail/050-long.exp, {tcl/testsuite => testsuite}/modules.90-avail/060-empty.exp, .../modules.95-version/010-init_ts.exp, .../testsuite => testsuite}/modules.95-version/020-load.exp, .../modules.95-version/020-unload.exp, .../modules.95-version/022-load2.exp, .../modules.95-version/022-unload2.exp, .../modules.95-version/040-xgetenv.exp, .../modules.95-version/999-cleanup.exp, {tcl/testsuite => testsuite}/not_installed, {tcl/testsuite => testsuite}/systest, {tcl/windows => windows}/module-tcl-win.chm, {tcl/windows => windows}/module.cmd, {tcl/windows => windows}/moduleinit.cmd: Moved things out of the tcl directory. Kent * .cxref, .ftp, .gitignore, .indent.pro, .spec.in, ChangeLog, INSTALL, INSTALL.RH7x, MACHINES, Makefile.am, ModuleCmd_Avail.c, ModuleCmd_Clear.c, ModuleCmd_Display.c, ModuleCmd_Help.c, ModuleCmd_Init.c, ModuleCmd_List.c, ModuleCmd_Load.c, ModuleCmd_Purge.c, ModuleCmd_Refresh.c, ModuleCmd_Switch.c, ModuleCmd_Update.c, ModuleCmd_Use.c, ModuleCmd_Whatis.c, NEWS, PROBLEMS, README, README.perl, TODO, acinclude.m4, cmdAlias.c, cmdChdir.c, cmdConflict.c, cmdInfo.c, cmdIsLoaded.c, cmdLog.c, cmdMisc.c, cmdModule.c, cmdPath.c, cmdSetenv.c, cmdUlvl.c, cmdUname.c, cmdVerbose.c, cmdVersion.c, cmdWhatis.c, cmdXResource.c, config/.gitignore, config/emtcl.m4, config/tcl.m4, configure.ac, contrib/modules.ebuild, cvs2cl.pl, error.c, etc/.gitignore, etc/Makefile.am, etc/README, etc/add.modules.in, etc/global/.gitignore, etc/global/bashrc.in, etc/global/csh.cshrc.in, etc/global/csh.login.in, etc/global/csh.modules.in, etc/global/profile.in, etc/global/profile.modules.in, etc/mkroot.in, etc/skel/.cshrc.in, etc/skel/.gitignore, etc/skel/.kshenv.in, etc/skel/.login.in, etc/skel/.profile.in, ext/.gitignore, ext/Makefile.am, ext/README, ext/add.ext.in, ext/common/.cshrc.in, ext/common/.gitignore, ext/common/.kshenv.in, ext/common/.login.in, ext/common/.profile.in, ext/mkroot.in, ext/skel/.cshrc.ext, ext/skel/.kshenv.ext, ext/skel/.login.ext, ext/skel/.modules, ext/skel/.profile.ext, getopt.c, getopt.h, init.c, init/.gitignore, init/.modulespath.in, init/Makefile.am, init/bash.in, init/bash_completion.in, init/cmake.in, init/csh.in, init/ksh.in, init/perl.pm.in, init/python.py.in, init/ruby.rb.in, init/sh.in, init/zsh.in, locate_module.c, main.c, modules.lsm.in, modules_def.h, ovec.c, ovec.h, po/.cvsignore, po/ChangeLog, po/LINGUAS, po/Makevars, po/POTFILES.in, testsuite/.gitignore, testsuite/config/unix.exp, testsuite/etc/.gitignore, testsuite/etc/bad, testsuite/etc/empty, testsuite/etc/modulerc, testsuite/home/.gitignore, testsuite/home/.modulerc, testsuite/home/.modules.save, testsuite/modulefiles.deep/modulerc/.modulerc, testsuite/modulefiles.deep/modulerc/dir1/.modulerc, testsuite/modulefiles.deep/modulerc/dir1/1.0, testsuite/modulefiles.deep/modulerc/dir1/2.0, testsuite/modulefiles.deep/modulerc/dir2/.modulerc, .../modulefiles.deep/modulerc/dir2/1.0/.modulerc, testsuite/modulefiles.deep/modulerc/dir2/1.0/rc1, testsuite/modulefiles.deep/modulerc/dir2/1.0/rc2, testsuite/modulefiles.deep/modulerc/dir2/2.0, testsuite/modulefiles.deep/modulerc/dir2/3.0, testsuite/modulefiles.deep/plain/dir1/1.0, testsuite/modulefiles.deep/plain/dir1/2.0, testsuite/modulefiles.deep/plain/dir2/1.0, testsuite/modulefiles.deep/plain/dir2/2.0, testsuite/modulefiles.deep/version/.version, testsuite/modulefiles.deep/version/dir1/.version, testsuite/modulefiles.deep/version/dir1/1.0, testsuite/modulefiles.deep/version/dir1/2.0, testsuite/modulefiles.deep/version/dir2/.version, testsuite/modulefiles.deep/version/dir2/1.0, .../modulefiles.deep/version/dir2/2.0/.version, testsuite/modulefiles.deep/version/dir2/2.0/rc1, testsuite/modulefiles.deep/version/dir2/2.0/rc2, testsuite/modulefiles.deep/version/dir2/3.0, testsuite/modulefiles.other/1.1/version, testsuite/modulefiles.other/1.2/version, testsuite/modulefiles.other/1.3/version, testsuite/modulefiles.other/README, testsuite/modulefiles/README, testsuite/modulefiles/alias/1.0, testsuite/modulefiles/alias/2.0, testsuite/modulefiles/append/0.1, testsuite/modulefiles/append/0.2, testsuite/modulefiles/append/1.0, testsuite/modulefiles/append/1.1, testsuite/modulefiles/append/2.0, testsuite/modulefiles/append/2.1, testsuite/modulefiles/append/2.2, testsuite/modulefiles/break/1.0, testsuite/modulefiles/break/2.0, testsuite/modulefiles/break/3.0, testsuite/modulefiles/break/4.0, testsuite/modulefiles/chdir/1.0, testsuite/modulefiles/chdir/2.0, testsuite/modulefiles/chdir/3.0, testsuite/modulefiles/chdir/4.0, testsuite/modulefiles/conflict/full, testsuite/modulefiles/conflict/module, testsuite/modulefiles/continue/1.0, testsuite/modulefiles/continue/2.0, testsuite/modulefiles/continue/3.0, testsuite/modulefiles/continue/4.0, testsuite/modulefiles/empty/1.0, testsuite/modulefiles/eschars/1.0, testsuite/modulefiles/exit/1.0, testsuite/modulefiles/exit/2.0, testsuite/modulefiles/exit/3.0, testsuite/modulefiles/help/2.0, testsuite/modulefiles/info/isloaded, testsuite/modulefiles/info/mode1, testsuite/modulefiles/info/mode2, testsuite/modulefiles/info/mode3, testsuite/modulefiles/info/mode4, testsuite/modulefiles/info/mode5, testsuite/modulefiles/info/mode6, testsuite/modulefiles/info/name, testsuite/modulefiles/info/shells, testsuite/modulefiles/info/shellsexp, testsuite/modulefiles/info/user, testsuite/modulefiles/info/userexp, testsuite/modulefiles/loc_dv1/1.0, testsuite/modulefiles/loc_dv1/2.0, testsuite/modulefiles/loc_dv1/3.0, testsuite/modulefiles/loc_dv2/.version, testsuite/modulefiles/loc_dv2/1.0, testsuite/modulefiles/loc_dv2/2.0, testsuite/modulefiles/loc_dv3/.version, testsuite/modulefiles/loc_dv3/1.0, testsuite/modulefiles/loc_dv3/2.0, testsuite/modulefiles/loc_dv4/.version, testsuite/modulefiles/loc_dv4/1.0, testsuite/modulefiles/loc_dv4/2.0, testsuite/modulefiles/loc_dv6/1.0, testsuite/modulefiles/loc_dv6/2.0/1.0, testsuite/modulefiles/loc_dv7/.version, testsuite/modulefiles/loc_dv7/1.0, testsuite/modulefiles/loc_dv7/2.0/1.0, testsuite/modulefiles/loc_dv7/3.0, testsuite/modulefiles/loc_dv8/.version, testsuite/modulefiles/loc_dv8/1.0, testsuite/modulefiles/loc_dv8/2.0, testsuite/modulefiles/loc_fq/1.0, testsuite/modulefiles/loc_fq/2.0, testsuite/modulefiles/loc_rc1/.modulerc, testsuite/modulefiles/loc_rc1/1.0, testsuite/modulefiles/loc_rc1/2.0, testsuite/modulefiles/loc_rc2/.modulerc, testsuite/modulefiles/loc_rc2/1.0, testsuite/modulefiles/loc_rc2/2.0, testsuite/modulefiles/loc_rc3/.modulerc, testsuite/modulefiles/loc_rc3/1.0, testsuite/modulefiles/loc_rc3/2.0, testsuite/modulefiles/loc_rc3/3.0, testsuite/modulefiles/loc_rc4/.modulerc, testsuite/modulefiles/loc_rc4/.version, testsuite/modulefiles/loc_rc4/1.0, testsuite/modulefiles/loc_rc4/2.0, testsuite/modulefiles/loc_rc4/3.0, testsuite/modulefiles/loc_rc5/.modulerc, testsuite/modulefiles/loc_rc5/1.0, testsuite/modulefiles/loc_rc5/2.0, testsuite/modulefiles/loc_sym/1.0, testsuite/modulefiles/loc_sym/alias1, testsuite/modulefiles/loc_sym/alias2, testsuite/modulefiles/loc_sym/alias3, testsuite/modulefiles/loc_sym/alias4, testsuite/modulefiles/loc_sym/alias5, testsuite/modulefiles/loc_sym/alias6, testsuite/modulefiles/loc_sym/exec1, testsuite/modulefiles/loc_sym/exec2, testsuite/modulefiles/loc_sym/getvers1, testsuite/modulefiles/loc_sym/getvers2, testsuite/modulefiles/loc_sym/getvers3, testsuite/modulefiles/loc_sym/getvers4, testsuite/modulefiles/loc_sym/getvers5, testsuite/modulefiles/loc_sym/getvers6, testsuite/modulefiles/loc_sym/getvers7, testsuite/modulefiles/loc_sym/getvers8, testsuite/modulefiles/loc_sym/versinf1, testsuite/modulefiles/loc_sym/versinf2, testsuite/modulefiles/loc_sym/versinf3, testsuite/modulefiles/loc_sym/versinf4, testsuite/modulefiles/loc_sym/versinf5, testsuite/modulefiles/loc_sym/versinf6, testsuite/modulefiles/loc_sym/versinf7, testsuite/modulefiles/loc_sym/version1, testsuite/modulefiles/loc_sym/version10, testsuite/modulefiles/loc_sym/version11, testsuite/modulefiles/loc_sym/version12, testsuite/modulefiles/loc_sym/version13, testsuite/modulefiles/loc_sym/version14, testsuite/modulefiles/loc_sym/version2, testsuite/modulefiles/loc_sym/version3, testsuite/modulefiles/loc_sym/version4, testsuite/modulefiles/loc_sym/version5, testsuite/modulefiles/loc_sym/version6, testsuite/modulefiles/loc_sym/version7, testsuite/modulefiles/loc_sym/version8, testsuite/modulefiles/loc_sym/version9, testsuite/modulefiles/log/badfac, testsuite/modulefiles/log/err_both_1, testsuite/modulefiles/log/err_both_2, testsuite/modulefiles/log/err_file, testsuite/modulefiles/log/err_syslog, testsuite/modulefiles/module/2.0, testsuite/modulefiles/prepend/0.1, testsuite/modulefiles/prepend/0.2, testsuite/modulefiles/prepend/1.0, testsuite/modulefiles/prepend/1.1, testsuite/modulefiles/prepend/2.0, testsuite/modulefiles/prepend/2.1, testsuite/modulefiles/prepend/2.2, testsuite/modulefiles/prereq/full, testsuite/modulefiles/prereq/module, testsuite/modulefiles/recurs/modA, testsuite/modulefiles/recurs/modB, testsuite/modulefiles/remove/2.0, testsuite/modulefiles/setenv/1.0, testsuite/modulefiles/system/2.0, testsuite/modulefiles/trace/all_off, testsuite/modulefiles/trace/all_on, testsuite/modulefiles/uname/domain, testsuite/modulefiles/uname/machine, testsuite/modulefiles/uname/nodename, testsuite/modulefiles/uname/release, testsuite/modulefiles/uname/sysname, testsuite/modulefiles/uname/version, testsuite/modulefiles/unsetenv/0.9, testsuite/modulefiles/unsetenv/1.0, testsuite/modulefiles/use/.version, testsuite/modulefiles/use/1.0, testsuite/modulefiles/use/2.0, testsuite/modulefiles/use/2.1, testsuite/modulefiles/use/2.2, testsuite/modulefiles/user/adv, testsuite/modulefiles/user/advanced, testsuite/modulefiles/user/exp, testsuite/modulefiles/user/expert, testsuite/modulefiles/user/nov, testsuite/modulefiles/user/novice, testsuite/modulefiles/user/undef, testsuite/modulefiles/verbose/msg, testsuite/modulefiles/verbose/off, testsuite/modulefiles/verbose/on, testsuite/modulefiles/verbose/undef, testsuite/modulefiles/versions/1.1, testsuite/modulefiles/versions/1.2, testsuite/modulefiles/versions/1.3, testsuite/modulefiles/whatis/lines, testsuite/modulefiles/whatis/multiple, testsuite/modulefiles/whatis/none, testsuite/modulefiles/whatis/single, testsuite/modulefiles/whatis/string, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/006-procs.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.00-init/015-version.exp, testsuite/modules.00-init/030-shells.exp, testsuite/modules.00-init/050-modpath.exp, testsuite/modules.00-init/080-begenv.exp, testsuite/modules.00-init/090-switches.exp, testsuite/modules.10-use/010-init_ts.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/040-load.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.20-locate/010-init_ts.exp, testsuite/modules.20-locate/020-fqual.exp, testsuite/modules.20-locate/030-defvers.exp, testsuite/modules.20-locate/040-alias.exp, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.20-locate/046-getsym.exp, testsuite/modules.20-locate/047-symerrs.exp, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/055-locrcerrs.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/065-rcerrs.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.20-locate/095-cleanup.exp, testsuite/modules.30-userlvl/010-init_ts.exp, testsuite/modules.30-userlvl/030-novice.exp, testsuite/modules.30-userlvl/035-nov.exp, testsuite/modules.30-userlvl/040-advanced.exp, testsuite/modules.30-userlvl/045-adv.exp, testsuite/modules.30-userlvl/050-expert.exp, testsuite/modules.30-userlvl/055-exp.exp, testsuite/modules.30-userlvl/090-undef.exp, testsuite/modules.50-cmds/010-init_ts.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/020-setenv.exp, testsuite/modules.50-cmds/022-setenv-eschars.exp, testsuite/modules.50-cmds/025-setenv-undo.exp, testsuite/modules.50-cmds/030-unsetenv.exp, testsuite/modules.50-cmds/035-unsetenv-undo.exp, testsuite/modules.50-cmds/036-unsetenv-x.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/070-alias-proc.exp, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/076-alias-sub.exp, testsuite/modules.50-cmds/077-alias-undo.exp, testsuite/modules.50-cmds/078-refresh.exp, testsuite/modules.50-cmds/080-info-name.exp, testsuite/modules.50-cmds/081-info-user.exp, testsuite/modules.50-cmds/082-info-user-exp.exp, testsuite/modules.50-cmds/083-info-mode.exp, testsuite/modules.50-cmds/084-info-mode-exp.exp, testsuite/modules.50-cmds/085-info-flags.exp, testsuite/modules.50-cmds/086-info-shells.exp, testsuite/modules.50-cmds/087-info-shells-exp.exp, testsuite/modules.50-cmds/088-info-isloaded.exp, testsuite/modules.50-cmds/090-uname-proc.exp, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/099-uname-cleanup.exp, testsuite/modules.50-cmds/100-loglevel.exp, testsuite/modules.50-cmds/101-badfac.exp, testsuite/modules.50-cmds/110-verbose.exp, testsuite/modules.50-cmds/115-verbose-msg.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp, testsuite/modules.50-cmds/140-system.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/172-swap-app-delim.exp, testsuite/modules.50-cmds/173-swap-app-delim.exp, testsuite/modules.50-cmds/175-swap2.exp, testsuite/modules.50-cmds/177-swap-prep-delim.exp, testsuite/modules.50-cmds/178-swap-prep-delim.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/195-load-recurs.exp, testsuite/modules.50-cmds/200-break.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/220-continue.exp, testsuite/modules.50-cmds/230-loop.exp, testsuite/modules.50-cmds/240-chdir.exp, testsuite/modules.50-cmds/999-cleanup.exp, testsuite/modules.60-initx/005-init.exp, testsuite/modules.60-initx/010-list.exp, testsuite/modules.60-initx/020-add.exp, testsuite/modules.60-initx/030-switch.exp, testsuite/modules.60-initx/040-prepend.exp, testsuite/modules.60-initx/050-rm.exp, testsuite/modules.60-initx/060-2nd.exp, testsuite/modules.60-initx/095-cleanup.exp, testsuite/modules.70-maint/010-init_ts.exp, testsuite/modules.70-maint/020-update.exp, testsuite/modules.70-maint/030-purge.exp, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/043-listno.exp, testsuite/modules.70-maint/045-listlong.exp, testsuite/modules.70-maint/048-listlongno.exp, testsuite/modules.70-maint/050-whatis-load.exp, testsuite/modules.70-maint/055-whatis.exp, testsuite/modules.70-maint/060-apropos.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/095-cleanup.exp, testsuite/modules.80-deep/010-init_ts.exp, testsuite/modules.80-deep/020-load.exp, testsuite/modules.80-deep/030-display.exp, testsuite/modules.80-deep/040-list.exp, testsuite/modules.80-deep/999-cleanup.exp, testsuite/modules.90-avail/010-init_ts.exp, testsuite/modules.90-avail/020-single.exp, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/050-long.exp, testsuite/modules.90-avail/060-empty.exp, testsuite/modules.95-version/010-init_ts.exp, testsuite/modules.95-version/020-load.exp, testsuite/modules.95-version/020-unload.exp, testsuite/modules.95-version/022-load2.exp, testsuite/modules.95-version/022-unload2.exp, testsuite/modules.95-version/040-xgetenv.exp, testsuite/modules.95-version/999-cleanup.exp, testsuite/not_installed, testsuite/systest, utility.c, utilmem.c, utilobj.c, uvec.c, uvec.h, version.c: Removed all of the non tcl version stuff. Or most of it anyway. Kent 2012-11-30 Kent Mein <mein@cs.umn.edu> * tcl/init/Makefile: Remove some unneeded complication to the Makefile since were not using cvs anymore. Kent 2012-11-19 R.K. Owen <rk@owen.sj.ca.us> * LICENSE.GPL, LICENSE.LGPL, NEWS: Rolled in the recent LICENSE.GPL address change, and the same to the the LICENSE.LGPL. 2012-11-12 R.K. Owen <rk@owen.sj.ca.us> * ModuleCmd_Init.c, NEWS, cmdXResource.c, utility.c: Rolled in the following patch * Fixed the segfault problem with Tcl_RegExpCompile() (Kenneth Hoste, Tyson Whitehead) 2012-11-08 R.K. Owen <rk@owen.sj.ca.us> * ModuleCmd_Avail.c, NEWS, configure.ac, doc/module.1.in, doc/modulefile.4.in: Rolled in the increased Update buffer and using the locale for Avail. 2012-11-05 R.K. Owen <rk@owen.sj.ca.us> * ModuleCmd_Update.c, NEWS: * Increased the "update" buffer (Leon Kos) rolled into main branch. 2012-11-01 R.K. Owen <rk@owen.sj.ca.us> * ovec.h, uvec.h: Remove the $Id$ lines from the header files. * .gitattributes, Makefile.am, ModuleCmd_Avail.c, ModuleCmd_Clear.c, ModuleCmd_Display.c, ModuleCmd_Help.c, ModuleCmd_Init.c, ModuleCmd_List.c, ModuleCmd_Load.c, ModuleCmd_Purge.c, ModuleCmd_Refresh.c, ModuleCmd_Switch.c, ModuleCmd_Update.c, ModuleCmd_Use.c, ModuleCmd_Whatis.c, cmdAlias.c, cmdChdir.c, cmdConflict.c, cmdInfo.c, cmdIsLoaded.c, cmdLog.c, cmdMisc.c, cmdModule.c, cmdPath.c, cmdSetenv.c, cmdUlvl.c, cmdUname.c, cmdVerbose.c, cmdVersion.c, cmdWhatis.c, cmdXResource.c, configure.ac, error.c, etc/Makefile.am, etc/add.modules.in, ext/Makefile.am, ext/add.ext.in, getopt.c, init.c, init/.modulespath.in, init/Makefile.am, locate_module.c, main.c, modulefiles/Makefile.am, ovec.c, utility.c, utilmem.c, utilobj.c, uvec.c: Changing to the git $Id$ 2012-10-30 R.K. Owen <rk@owen.sj.ca.us> * .cvsignore => .gitignore, NEWS, TODO, cmdPath.c, config/{.cvsignore => .gitignore}, doc/{.cvsignore => .gitignore}, etc/{.cvsignore => .gitignore}, etc/global/{.cvsignore => .gitignore}, etc/skel/{.cvsignore => .gitignore}, ext/{.cvsignore => .gitignore}, ext/common/{.cvsignore => .gitignore}, init/{.cvsignore => .gitignore}, modulefiles/{.cvsignore => .gitignore}, modulefiles/lang/{.cvsignore => .gitignore}, tcl/init/{.cvsignore => .gitignore}, testsuite/{.cvsignore => .gitignore}, testsuite/etc/{.cvsignore => .gitignore}, testsuite/home/{.cvsignore => .gitignore}, testsuite/modulefiles/append/1.1, testsuite/modulefiles/prepend/1.1, testsuite/modulefiles/recurs/modA, testsuite/modulefiles/recurs/modB, testsuite/modules.50-cmds/085-info-flags.exp, testsuite/modules.50-cmds/172-swap-app-delim.exp, testsuite/modules.50-cmds/173-swap-app-delim.exp, testsuite/modules.50-cmds/177-swap-prep-delim.exp, testsuite/modules.50-cmds/178-swap-prep-delim.exp, testsuite/modules.50-cmds/195-load-recurs.exp: Rolled in the fix by Tyson Whitehead for the "module swap" with the --delim option 2012-10-29 R.K. Owen <rk@owen.sj.ca.us> * testsuite/modules.50-cmds/172-seap-app-delim.exp: Bad file name. * .gitignore, NEWS, cmdPath.c, testsuite/modulefiles/append/1.1, testsuite/modulefiles/prepend/1.1, testsuite/modules.50-cmds/172-seap-app-delim.exp, testsuite/modules.50-cmds/172-swap-app-delim.exp, testsuite/modules.50-cmds/173-swap-app-delim.exp, testsuite/modules.50-cmds/177-swap-prep-delim.exp, testsuite/modules.50-cmds/178-swap-prep-delim.exp: * Fix the module swap with the --delim option (Tyson Whitehead) 2012-10-25 R.K. Owen <rk@owen.sj.ca.us> * .cvsignore => .gitignore, config/{.cvsignore => .gitignore}, doc/{.cvsignore => .gitignore}, etc/{.cvsignore => .gitignore}, etc/global/{.cvsignore => .gitignore}, etc/skel/{.cvsignore => .gitignore}, ext/{.cvsignore => .gitignore}, ext/common/{.cvsignore => .gitignore}, init/{.cvsignore => .gitignore}, modulefiles/{.cvsignore => .gitignore}, tcl/init/{.cvsignore => .gitignore}, testsuite/{.cvsignore => .gitignore}, testsuite/etc/{.cvsignore => .gitignore}, testsuite/home/{.cvsignore => .gitignore}: Moved the .cvsignore files to .gitignore * version.c: Check whether the bash shell is interactive or not Fixed a typo in the perl init script Trivial change to the version variable. * version.c: Trivial change to the version variable. 2012-09-10 sirdude <sirdude> * tcl/modulecmd.tcl: A couple of small patches by Thomas Zeiser thomas.zeiser@rrze.uni-erlangen.de The first one adds some checks to make sure a directory is readable before trying to read it. The second reverses the order of perging modules so that they are removed last to first, which maybe seems more intuitive? Kent 2012-05-17 rkowen <rkowen> * ModuleCmd_Load.c, NEWS, modules_def.h, testsuite/modulefiles/recurs/modA, testsuite/modulefiles/recurs/modB, testsuite/modules.50-cmds/085-info-flags.exp, testsuite/modules.50-cmds/195-load-recurs.exp: * Fix the flags with regards to recursive load/unload 2012-04-11 rkowen <rkowen> * configure.ac: Fixed syntax error. 2012-03-20 sirdude <sirdude> * tcl/modulecmd.tcl: Modify getenv so it returns _UNDEFINED_ instead of erroring if the environment variable is not defined. Also changed the display option so it returns $varname instead of [getenv $varname] Kent 2012-03-19 sirdude <sirdude> * tcl/init/.cvsignore, tcl/modulecmd.tcl: Added a getenv function on the suggestion of a few people on the mailing list. Thanks go to: Mark Lakata, Paul FM and Roberto Beccer Let me know if there are any problems with it. I also snuck in a ignore line for .gitignore so I can use git locally, and fixed some minor whitespace issues. Kent Mein 2011-12-13 rkowen <rkowen> * ModuleCmd_Update.c, testsuite/modules.70-maint/020-update.exp: Fixed the update test, and cleaned up the update code a bit. 2011-12-01 rkowen <rkowen> * main.c, utility.c: Fixed some memory issues. * ModuleCmd_Purge.c, ModuleCmd_Update.c, ModuleCmd_Use.c, cmdPath.c, cmdSetenv.c, configure.ac, testsuite/modules.00-init/080-begenv.exp, utility.c: Rolled in the recent 3-2-9 changes with regard to checks of the EMGetEnv resulting pointers. 2011-11-29 rkowen <rkowen> * ModuleCmd_Whatis.c: Fixed a memory error in the whatis part. 2011-11-28 rkowen <rkowen> * utility.c: Make sure a char *ptr is initialized to NULL. * ModuleCmd_Purge.c, ModuleCmd_Update.c, ModuleCmd_Use.c, NEWS, cmdPath.c, cmdSetenv.c, testsuite/modules.00-init/080-begenv.exp, utility.c, version.c: Test ptrs yielded by EMGetEnv. 2011-11-22 rkowen <rkowen> * testsuite/modules.00-init/010-environ.exp, utility.c: Found why the --with-split-size option was producing extra "unsetenv _LMFILES_000". 2011-11-21 rkowen <rkowen> * testsuite/modules.00-init/010-environ.exp, testsuite/modules.10-use/040-load.exp, testsuite/modules.20-locate/040-alias.exp, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.20-locate/046-getsym.exp, testsuite/modules.20-locate/047-symerrs.exp, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.30-userlvl/040-advanced.exp, testsuite/modules.30-userlvl/045-adv.exp, testsuite/modules.30-userlvl/050-expert.exp, testsuite/modules.30-userlvl/055-exp.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/020-setenv.exp, testsuite/modules.50-cmds/022-setenv-eschars.exp, testsuite/modules.50-cmds/030-unsetenv.exp, testsuite/modules.50-cmds/036-unsetenv-x.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/076-alias-sub.exp, testsuite/modules.50-cmds/080-info-name.exp, testsuite/modules.50-cmds/086-info-shells.exp, testsuite/modules.50-cmds/087-info-shells-exp.exp, testsuite/modules.50-cmds/088-info-isloaded.exp, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/110-verbose.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp, testsuite/modules.50-cmds/140-system.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/175-swap2.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/200-break.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/220-continue.exp, testsuite/modules.50-cmds/230-loop.exp, testsuite/modules.50-cmds/240-chdir.exp, testsuite/modules.70-maint/050-whatis-load.exp, testsuite/modules.80-deep/020-load.exp, testsuite/modules.95-version/020-load.exp, testsuite/modules.95-version/020-unload.exp, testsuite/modules.95-version/022-load2.exp, testsuite/modules.95-version/022-unload2.exp, testsuite/modules.95-version/040-xgetenv.exp, testsuite/modules.95-version/999-cleanup.exp: Have the testsuite handle when configured with --with-split-size, but it's assumed large enough to not split _LMFILES_ in the tests. * utility.c: Further checks for empty environment variables from EMGetEnv() for _LMFILES_%d 2011-11-15 rkowen <rkowen> * utility.c: Fixed --with-split-size problem with _LMFILES_NNN. 2011-11-11 rkowen <rkowen> * ChangeLog: Updated * ModuleCmd_List.c, ModuleCmd_Purge.c, ModuleCmd_Refresh.c, ModuleCmd_Update.c, ModuleCmd_Use.c, NEWS, cmdPath.c, cmdSetenv.c, init.c, modules_def.h, utility.c: Merged in the TclGetEnv/TclSetEnv fix from 3.2.9. * version.c: Reset version to 3.2.9 not 3.2.9a. * ChangeLog: Updated. * ModuleCmd_Purge.c, ModuleCmd_Update.c, ModuleCmd_Use.c, NEWS, cmdPath.c, cmdSetenv.c, init.c, modules_def.h, utility.c, version.c: Crucial bug fix ... TclGetEnv/TclSetEnv are Tcl routines, so renamed these to EMGetEnv/EMSetEnv. Fix due to Orion Poplawski. 2011-11-10 rkowen <rkowen> * ChangeLog, NEWS: Updated with current 3.2.9 info. * ChangeLog: Update for distribution. * ChangeLog, NEWS, version.c: Preparation for distribution. 2011-10-24 rkowen <rkowen> * NEWS, cmdPath.c: * Removed the RegExp code from cmdPath.c (Poor Yorick) 2011-10-17 rkowen <rkowen> * Makefile.am, NEWS, init.c, init/Makefile.am, init/ruby.rb.in, utility.c: Rolled in the ruby addition from Tammo Tjarks. * Makefile.am, NEWS, init.c, init/Makefile.am, init/ruby.rb.in, utility.c: * Added support for Ruby (Tammo Tjarks) 2011-10-13 rkowen <rkowen> * ModuleCmd_List.c, ModuleCmd_Load.c, ModuleCmd_Refresh.c, ModuleCmd_Switch.c, NEWS, cmdConflict.c, cmdIsLoaded.c, cmdSetenv.c, init.c, modulefiles/module-info.in, modules_def.h, utility.c: * Fixed unload & load of same module problem (Bug 3211669). 2011-10-13 sirdude <sirdude> * tcl/testsuite/modules.10-use/030-use.exp, tcl/testsuite/modules.10-use/031-append.exp, tcl/testsuite/modules.10-use/040-load.exp, tcl/testsuite/modules.10-use/070-unuse.exp, tcl/testsuite/modules.50-cmds/015-use.exp, tcl/testsuite/modules.50-cmds/020-setenv.exp, tcl/testsuite/modules.50-cmds/030-unsetenv.exp, tcl/testsuite/modules.50-cmds/040-append.exp, tcl/testsuite/modules.50-cmds/140-system.exp, tcl/testsuite/modules.80-deep/020-load.exp, tcl/testsuite/modules.80-deep/030-display.exp, tcl/testsuite/modules.90-avail/020-single.exp, tcl/testsuite/modules.90-avail/030-multiple.exp, tcl/testsuite/modules.90-avail/040-wild.exp, tcl/testsuite/modules.90-avail/050-long.exp, tcl/testsuite/modules.90-avail/060-empty.exp, tcl/testsuite/modules.95-version/020-load.exp, tcl/testsuite/modules.95-version/020-unload.exp, tcl/testsuite/modules.95-version/022-load2.exp, tcl/testsuite/modules.95-version/022-unload2.exp, tcl/testsuite/modules.95-version/040-xgetenv.exp: Added a couple of other tests Also added terminators to the end of the regex tests... Kent 2011-10-11 sirdude <sirdude> * tcl/modulecmd.tcl: Remove outer loop for aliases in csh/sh type shells and fix it so sh shells us unalias Kent 2011-10-10 rkowen <rkowen> * cmdInfo.c: Even though "trace" is no longer used ... should still have module-info still respond with "*undef*", so older modulefiles can still be processed without a Tcl error. 2011-10-07 sirdude <sirdude> * tcl/testsuite/modules.50-cmds/020-setenv.exp, tcl/testsuite/modules.50-cmds/030-unsetenv.exp: Added some additional tests that I have converted. Still a lot of tests to add... Kent * tcl/testsuite/modules.90-avail/050-long.exp: Fix this test for the tcl version. Kent * tcl/modulecmd.tcl: This is a patch provided by Wilson Snyder to fix up the regsub statements I also silenced a few warnings produced by nagelfar(a syntax checker for tcl) Basically it simplified a couple of the if statements by using a temp variable. Kent 2011-10-06 rkowen <rkowen> * cmdConflict.c: Fixed bug-3300132 prereq error format problem. * cmdConflict.c: Fixed bug-3300132 prereq error format problem. * ModuleCmd_Display.c, ModuleCmd_Help.c, ModuleCmd_Load.c, ModuleCmd_Purge.c, ModuleCmd_Refresh.c, ModuleCmd_Update.c, ModuleCmd_Use.c, ModuleCmd_Whatis.c, NEWS, cmdPath.c, cmdSetenv.c, init.c, modules_def.h, utility.c, utilmem.c: * Fixed the "module purge" memory corruption (Poor Yorick). * Isolated calls to the new interpreter and get & set env.vars. * NEWS, cmdPath.c, utility.c: * Fixed the module purge corruption (Poor Yorick) * NEWS: Updated with module purge fix 2011-10-03 rkowen <rkowen> * cmdPath.c, utility.c: Rolled in Poor Yorick's changes to Remove_Path() which fixes the memory corruption of "module purge". * ModuleCmd_Avail.c, ModuleCmd_Update.c, NEWS, cmdLog.c, cmdVersion.c, cmdWhatis.c, error.c, locate_module.c, modules_def.h, utility.c: * Optionally use Tcl memory check routines for malloc/realloc. * ModuleCmd_Display.c, ModuleCmd_Help.c, ModuleCmd_Load.c, ModuleCmd_Purge.c, ModuleCmd_Refresh.c, ModuleCmd_Update.c, ModuleCmd_Use.c, ModuleCmd_Whatis.c, NEWS, cmdPath.c, cmdSetenv.c, init.c, modules_def.h, utility.c: * Isolated calls to the new interpreter and get & set env.vars. 2011-09-29 rkowen <rkowen> * testsuite/config/unix.exp: Simplified the comp_output procedure ... due to Poor Yorick. * cmdPath.c: Change the strcpy to memmove because of possible memory overlap. 2011-09-19 rkowen <rkowen> * configure.ac: Removed the explicit call to AM_PO_SUBDIRS, which is already invoked by the AM_GNU_GETTEXT. Patch thanks to "Poor Yorick". 2011-09-13 sirdude <sirdude> * tcl/modulecmd.tcl: Patch from Andy Wettstein so that aliases work again with bash and other sh like shells. Kent 2011-08-12 sirdude <sirdude> * tcl/modulecmd.tcl: Fix provided by Thomas Zeiser. ( A missing ; ) Kent 2011-06-17 sirdude <sirdude> * tcl/modulecmd.tcl: Patch by Larry Baker to bring the tcl version more inline with the c version. Kent 2011-05-13 sirdude <sirdude> * tcl/modulecmd.tcl: Patch by Larry Baker to add a 'module aliases' command. Kent 2011-05-10 sirdude <sirdude> * tcl/Makefile, tcl/README.txt, tcl/init/Makefile, tcl/windows/module-tcl-win.chm, tcl/windows/module.cmd, tcl/windows/moduleinit.cmd: This commit is for the tcl version of modules, it does some additional work on windows It updates the README file which was pretty sparse It also redoes the Makefiles so that it will build a default modulerc file if it doesn't exist. Kent * tcl/modulecmd.tcl: This should fix bug# 3097451 I haven't tested it to make sure and the code needs more work but it's a start. Kent 2011-04-27 sirdude <sirdude> * tcl/modulecmd.tcl: Patch from Kwee Heong Tan This provides better support under windows. There is still more work to do here. Kent 2011-04-06 sirdude <sirdude> * tcl/testsuite/modules.10-use/040-load.exp, tcl/testsuite/modules.50-cmds/010-init_ts.exp, tcl/testsuite/modules.50-cmds/015-use.exp, tcl/testsuite/modules.50-cmds/999-cleanup.exp, tcl/testsuite/modules.95-version/010-init_ts.exp, tcl/testsuite/modules.95-version/020-load.exp, tcl/testsuite/modules.95-version/020-unload.exp, tcl/testsuite/modules.95-version/022-load2.exp, tcl/testsuite/modules.95-version/022-unload2.exp, tcl/testsuite/modules.95-version/040-xgetenv.exp, tcl/testsuite/modules.95-version/999-cleanup.exp: More test files for tcl version of modules. Kent 2011-03-22 sirdude <sirdude> * tcl/modulecmd.tcl: Small patch from Wilson Snyder to improve python support. Kent 2011-03-15 sirdude <sirdude> * tcl/init/csh.in, tcl/init/tcsh.in: Fix up the calls to the command so its not doing variable substitution all of the time. Kent * tcl/Makefile, tcl/testsuite/config/unix.exp, tcl/testsuite/etc/bad, tcl/testsuite/etc/empty, tcl/testsuite/etc/modulerc, tcl/testsuite/home/.modulerc, tcl/testsuite/home/.modules, tcl/testsuite/home/.modules.save, tcl/testsuite/modulefiles.deep/modulerc/.modulerc, .../modulefiles.deep/modulerc/dir1/.modulerc, tcl/testsuite/modulefiles.deep/modulerc/dir1/1.0, tcl/testsuite/modulefiles.deep/modulerc/dir1/2.0, .../modulefiles.deep/modulerc/dir2/.modulerc, .../modulefiles.deep/modulerc/dir2/1.0/.modulerc, .../modulefiles.deep/modulerc/dir2/1.0/rc1, .../modulefiles.deep/modulerc/dir2/1.0/rc2, tcl/testsuite/modulefiles.deep/modulerc/dir2/2.0, tcl/testsuite/modulefiles.deep/modulerc/dir2/3.0, tcl/testsuite/modulefiles.deep/plain/dir1/1.0, tcl/testsuite/modulefiles.deep/plain/dir1/2.0, tcl/testsuite/modulefiles.deep/plain/dir2/1.0, tcl/testsuite/modulefiles.deep/plain/dir2/2.0, tcl/testsuite/modulefiles.deep/version/.version, .../modulefiles.deep/version/dir1/.version, tcl/testsuite/modulefiles.deep/version/dir1/1.0, tcl/testsuite/modulefiles.deep/version/dir1/2.0, .../modulefiles.deep/version/dir2/.version, tcl/testsuite/modulefiles.deep/version/dir2/1.0, .../modulefiles.deep/version/dir2/2.0/.version, .../modulefiles.deep/version/dir2/2.0/rc1, .../modulefiles.deep/version/dir2/2.0/rc2, tcl/testsuite/modulefiles.deep/version/dir2/3.0, tcl/testsuite/modulefiles.other/1.1/version, tcl/testsuite/modulefiles.other/1.2/version, tcl/testsuite/modulefiles.other/1.3/version, tcl/testsuite/modulefiles.other/README, tcl/testsuite/modulefiles/README, tcl/testsuite/modulefiles/alias/1.0, tcl/testsuite/modulefiles/alias/2.0, tcl/testsuite/modulefiles/append/0.1, tcl/testsuite/modulefiles/append/0.2, tcl/testsuite/modulefiles/append/1.0, tcl/testsuite/modulefiles/append/2.0, tcl/testsuite/modulefiles/append/2.1, tcl/testsuite/modulefiles/append/2.2, tcl/testsuite/modulefiles/break/1.0, tcl/testsuite/modulefiles/break/2.0, tcl/testsuite/modulefiles/break/3.0, tcl/testsuite/modulefiles/break/4.0, tcl/testsuite/modulefiles/chdir/1.0, tcl/testsuite/modulefiles/chdir/2.0, tcl/testsuite/modulefiles/chdir/3.0, tcl/testsuite/modulefiles/chdir/4.0, tcl/testsuite/modulefiles/conflict/full, tcl/testsuite/modulefiles/conflict/module, tcl/testsuite/modulefiles/continue/1.0, tcl/testsuite/modulefiles/continue/2.0, tcl/testsuite/modulefiles/continue/3.0, tcl/testsuite/modulefiles/continue/4.0, tcl/testsuite/modulefiles/empty/1.0, tcl/testsuite/modulefiles/eschars/1.0, tcl/testsuite/modulefiles/exit/1.0, tcl/testsuite/modulefiles/exit/2.0, tcl/testsuite/modulefiles/exit/3.0, tcl/testsuite/modulefiles/help/2.0, tcl/testsuite/modulefiles/info/isloaded, tcl/testsuite/modulefiles/info/mode1, tcl/testsuite/modulefiles/info/mode2, tcl/testsuite/modulefiles/info/mode3, tcl/testsuite/modulefiles/info/mode4, tcl/testsuite/modulefiles/info/mode5, tcl/testsuite/modulefiles/info/mode6, tcl/testsuite/modulefiles/info/name, tcl/testsuite/modulefiles/info/shells, tcl/testsuite/modulefiles/info/shellsexp, tcl/testsuite/modulefiles/info/user, tcl/testsuite/modulefiles/info/userexp, tcl/testsuite/modulefiles/loc_dv1/1.0, tcl/testsuite/modulefiles/loc_dv1/2.0, tcl/testsuite/modulefiles/loc_dv1/3.0, tcl/testsuite/modulefiles/loc_dv2/.version, tcl/testsuite/modulefiles/loc_dv2/1.0, tcl/testsuite/modulefiles/loc_dv2/2.0, tcl/testsuite/modulefiles/loc_dv3/.version, tcl/testsuite/modulefiles/loc_dv3/1.0, tcl/testsuite/modulefiles/loc_dv3/2.0, tcl/testsuite/modulefiles/loc_dv4/.version, tcl/testsuite/modulefiles/loc_dv4/1.0, tcl/testsuite/modulefiles/loc_dv4/2.0, tcl/testsuite/modulefiles/loc_dv6/1.0, tcl/testsuite/modulefiles/loc_dv6/2.0/1.0, tcl/testsuite/modulefiles/loc_dv7/.version, tcl/testsuite/modulefiles/loc_dv7/1.0, tcl/testsuite/modulefiles/loc_dv7/2.0/1.0, tcl/testsuite/modulefiles/loc_dv7/3.0, tcl/testsuite/modulefiles/loc_dv8/.version, tcl/testsuite/modulefiles/loc_dv8/1.0, tcl/testsuite/modulefiles/loc_dv8/2.0, tcl/testsuite/modulefiles/loc_fq/1.0, tcl/testsuite/modulefiles/loc_fq/2.0, tcl/testsuite/modulefiles/loc_rc1/.modulerc, tcl/testsuite/modulefiles/loc_rc1/1.0, tcl/testsuite/modulefiles/loc_rc1/2.0, tcl/testsuite/modulefiles/loc_rc2/.modulerc, tcl/testsuite/modulefiles/loc_rc2/1.0, tcl/testsuite/modulefiles/loc_rc2/2.0, tcl/testsuite/modulefiles/loc_rc3/.modulerc, tcl/testsuite/modulefiles/loc_rc3/1.0, tcl/testsuite/modulefiles/loc_rc3/2.0, tcl/testsuite/modulefiles/loc_rc3/3.0, tcl/testsuite/modulefiles/loc_rc4/.modulerc, tcl/testsuite/modulefiles/loc_rc4/.version, tcl/testsuite/modulefiles/loc_rc4/1.0, tcl/testsuite/modulefiles/loc_rc4/2.0, tcl/testsuite/modulefiles/loc_rc4/3.0, tcl/testsuite/modulefiles/loc_rc5/.modulerc, tcl/testsuite/modulefiles/loc_rc5/1.0, tcl/testsuite/modulefiles/loc_rc5/2.0, tcl/testsuite/modulefiles/loc_sym/1.0, tcl/testsuite/modulefiles/loc_sym/alias1, tcl/testsuite/modulefiles/loc_sym/alias2, tcl/testsuite/modulefiles/loc_sym/alias3, tcl/testsuite/modulefiles/loc_sym/alias4, tcl/testsuite/modulefiles/loc_sym/alias5, tcl/testsuite/modulefiles/loc_sym/alias6, tcl/testsuite/modulefiles/loc_sym/exec1, tcl/testsuite/modulefiles/loc_sym/exec2, tcl/testsuite/modulefiles/loc_sym/getvers1, tcl/testsuite/modulefiles/loc_sym/getvers2, tcl/testsuite/modulefiles/loc_sym/getvers3, tcl/testsuite/modulefiles/loc_sym/getvers4, tcl/testsuite/modulefiles/loc_sym/getvers5, tcl/testsuite/modulefiles/loc_sym/getvers6, tcl/testsuite/modulefiles/loc_sym/getvers7, tcl/testsuite/modulefiles/loc_sym/getvers8, tcl/testsuite/modulefiles/loc_sym/versinf1, tcl/testsuite/modulefiles/loc_sym/versinf2, tcl/testsuite/modulefiles/loc_sym/versinf3, tcl/testsuite/modulefiles/loc_sym/versinf4, tcl/testsuite/modulefiles/loc_sym/versinf5, tcl/testsuite/modulefiles/loc_sym/versinf6, tcl/testsuite/modulefiles/loc_sym/versinf7, tcl/testsuite/modulefiles/loc_sym/version1, tcl/testsuite/modulefiles/loc_sym/version10, tcl/testsuite/modulefiles/loc_sym/version11, tcl/testsuite/modulefiles/loc_sym/version12, tcl/testsuite/modulefiles/loc_sym/version13, tcl/testsuite/modulefiles/loc_sym/version14, tcl/testsuite/modulefiles/loc_sym/version2, tcl/testsuite/modulefiles/loc_sym/version3, tcl/testsuite/modulefiles/loc_sym/version4, tcl/testsuite/modulefiles/loc_sym/version5, tcl/testsuite/modulefiles/loc_sym/version6, tcl/testsuite/modulefiles/loc_sym/version7, tcl/testsuite/modulefiles/loc_sym/version8, tcl/testsuite/modulefiles/loc_sym/version9, tcl/testsuite/modulefiles/log/badfac, tcl/testsuite/modulefiles/log/err_both_1, tcl/testsuite/modulefiles/log/err_both_2, tcl/testsuite/modulefiles/log/err_file, tcl/testsuite/modulefiles/log/err_syslog, tcl/testsuite/modulefiles/module/2.0, tcl/testsuite/modulefiles/prepend/0.1, tcl/testsuite/modulefiles/prepend/0.2, tcl/testsuite/modulefiles/prepend/1.0, tcl/testsuite/modulefiles/prepend/2.0, tcl/testsuite/modulefiles/prepend/2.1, tcl/testsuite/modulefiles/prepend/2.2, tcl/testsuite/modulefiles/prereq/full, tcl/testsuite/modulefiles/prereq/module, tcl/testsuite/modulefiles/remove/2.0, tcl/testsuite/modulefiles/setenv/1.0, tcl/testsuite/modulefiles/system/2.0, tcl/testsuite/modulefiles/trace/all_off, tcl/testsuite/modulefiles/trace/all_on, tcl/testsuite/modulefiles/uname/domain, tcl/testsuite/modulefiles/uname/machine, tcl/testsuite/modulefiles/uname/nodename, tcl/testsuite/modulefiles/uname/release, tcl/testsuite/modulefiles/uname/sysname, tcl/testsuite/modulefiles/uname/version, tcl/testsuite/modulefiles/unsetenv/0.9, tcl/testsuite/modulefiles/unsetenv/1.0, tcl/testsuite/modulefiles/use/.version, tcl/testsuite/modulefiles/use/1.0, tcl/testsuite/modulefiles/use/2.0, tcl/testsuite/modulefiles/use/2.1, tcl/testsuite/modulefiles/use/2.2, tcl/testsuite/modulefiles/user/adv, tcl/testsuite/modulefiles/user/advanced, tcl/testsuite/modulefiles/user/exp, tcl/testsuite/modulefiles/user/expert, tcl/testsuite/modulefiles/user/nov, tcl/testsuite/modulefiles/user/novice, tcl/testsuite/modulefiles/user/undef, tcl/testsuite/modulefiles/verbose/msg, tcl/testsuite/modulefiles/verbose/off, tcl/testsuite/modulefiles/verbose/on, tcl/testsuite/modulefiles/verbose/undef, tcl/testsuite/modulefiles/versions/1.1, tcl/testsuite/modulefiles/versions/1.2, tcl/testsuite/modulefiles/versions/1.3, tcl/testsuite/modulefiles/whatis/lines, tcl/testsuite/modulefiles/whatis/multiple, tcl/testsuite/modulefiles/whatis/none, tcl/testsuite/modulefiles/whatis/single, tcl/testsuite/modulefiles/whatis/string, tcl/testsuite/modules.00-init/005-init_ts.exp, tcl/testsuite/modules.00-init/006-procs.exp, tcl/testsuite/modules.00-init/010-environ.exp, tcl/testsuite/modules.00-init/015-version.exp, tcl/testsuite/modules.00-init/030-shells.exp, tcl/testsuite/modules.00-init/050-modpath.exp, tcl/testsuite/modules.00-init/080-begenv.exp, tcl/testsuite/modules.00-init/090-switches.exp, tcl/testsuite/modules.10-use/010-init_ts.exp, tcl/testsuite/modules.10-use/030-use.exp, tcl/testsuite/modules.10-use/031-append.exp, tcl/testsuite/modules.10-use/040-load.exp, tcl/testsuite/modules.10-use/070-unuse.exp, tcl/testsuite/modules.80-deep/010-init_ts.exp, tcl/testsuite/modules.80-deep/020-load.exp, tcl/testsuite/modules.80-deep/030-display.exp, tcl/testsuite/modules.80-deep/040-list.exp, tcl/testsuite/modules.80-deep/999-cleanup.exp, tcl/testsuite/modules.90-avail/010-init_ts.exp, tcl/testsuite/modules.90-avail/020-single.exp, tcl/testsuite/modules.90-avail/030-multiple.exp, tcl/testsuite/modules.90-avail/040-wild.exp, tcl/testsuite/modules.90-avail/050-long.exp, tcl/testsuite/modules.90-avail/060-empty.exp, tcl/testsuite/not_installed, tcl/testsuite/systest: Finally got testfiles working with the tcl version of modules. There is still lots of work to be done but there are a good number of tests that are working. Currently 80 of 90 are passing. At this point I want to commit before fixing issues which involve modifying the main application. Kent * tcl/modulecmd.tcl: This commit does a couple of things. Bring back the auto determine shell to call(needed for the next commit testsuite) It also removes the need for using a temp file This commit also has a couple of small fixes to make it more like the standard version of modules as far as output to the screen goes. Kent 2011-02-28 sirdude <sirdude> * tcl/modulecmd.tcl: This commit does a few things to modulecmd.tcl It cleans up some unused global vars Fixes some spacing in some report statements as well as fixes some debugging statements adds a ubuntu specific bit of code to uname so uname release returns the codename of an ubuntu install Finally in getPathToModule I commented out the Check for aliases bit of code This is already done at the top level so no need to do it again. (If someone finds a case where this is needed let me know and I'll add it back in) Kent 2010-11-12 rkowen <rkowen> * doc/module.1.in: Updated the man page with regards to the package modulefile directories. * NEWS, doc/module.1.in, doc/modulefile.4.in, init/bash.in, init/cmake.in, init/csh.in, init/ksh.in, init/perl.pm.in, init/python.py.in, init/sh.in, init/zsh.in, main.c, modulefiles/modules.in, modules_def.h: * Removed the $MODULESHOME env.var. which is not used at all. * ChangeLog, Makefile.am, NEWS, configure.ac, doc/module.1.in, init/.modulespath.in, init/Makefile.am, init/bash.in, init/bash_completion.in, init/cmake.in, init/csh.in, init/ksh.in, init/perl.pm.in, init/python.py.in, init/sh.in, init/zsh.in, main.c, modulefiles/Makefile.am: * Reworked configuration and Makefile for fine-grain control of certain paths and config files. 2010-11-11 rkowen <rkowen> * ModuleCmd_Load.c, NEWS: Rolled in the Modules 3.2.9 version. * Fix the coexistence of load/remove flags (Martin Siegert) * ModuleCmd_Load.c, NEWS: * Fix the coexistence of load/remove flags (due to Martin Siegert) * ChangeLog, Makefile.am, ModuleCmd_Avail.c, ModuleCmd_Clear.c, ModuleCmd_Display.c, ModuleCmd_Help.c, ModuleCmd_Init.c, ModuleCmd_List.c, ModuleCmd_Load.c, ModuleCmd_Purge.c, ModuleCmd_Refresh.c, ModuleCmd_Switch.c, ModuleCmd_Update.c, ModuleCmd_Use.c, ModuleCmd_Whatis.c, NEWS, TODO, cmdAlias.c, cmdConflict.c, cmdInfo.c, cmdIsLoaded.c, cmdLog.c, cmdMisc.c, cmdModule.c, cmdPath.c, cmdSetenv.c, cmdTrace.c, cmdUlvl.c, cmdUname.c, cmdVerbose.c, cmdVersion.c, cmdWhatis.c, cmdXResource.c, config/emtcl.m4, config/tcl.m4, configure.ac, doc/.cvsignore, doc/module.1.in, doc/modulefile.4.in, error.c, etc/add.modules.in, etc/global/bashrc.in, etc/global/csh.modules.in, etc/global/profile.modules.in, etc/mkroot.in, ext/add.ext.in, ext/mkroot.in, init.c, init/.modulespath.in, init/Makefile.am, init/bash.in, init/cmake.in, init/csh.in, init/ksh.in, init/perl.pm.in, init/python.py.in, init/sh.in, init/zsh.in, locate_module.c, main.c, modulefiles/Makefile.am, modulefiles/dot.in, modulefiles/module-cvs.in, modulefiles/module-info.in, modulefiles/modules.in, modulefiles/null.in, modulefiles/use.own.in, modulefiles/version.in, modules.lsm.in, modules_def.h, testsuite/config/unix.exp, testsuite/modulefiles.deep/modulerc/.modulerc, testsuite/modulefiles.deep/modulerc/dir1/.modulerc, testsuite/modulefiles.deep/modulerc/dir1/1.0, testsuite/modulefiles.deep/modulerc/dir1/2.0, testsuite/modulefiles.deep/modulerc/dir2/.modulerc, .../modulefiles.deep/modulerc/dir2/1.0/.modulerc, testsuite/modulefiles.deep/modulerc/dir2/1.0/rc1, testsuite/modulefiles.deep/modulerc/dir2/1.0/rc2, testsuite/modulefiles.deep/modulerc/dir2/2.0, testsuite/modulefiles.deep/modulerc/dir2/3.0, testsuite/modulefiles.deep/plain/dir1/1.0, testsuite/modulefiles.deep/plain/dir1/2.0, testsuite/modulefiles.deep/plain/dir2/1.0, testsuite/modulefiles.deep/plain/dir2/2.0, testsuite/modulefiles.deep/version/.version, testsuite/modulefiles.deep/version/dir1/.version, testsuite/modulefiles.deep/version/dir1/1.0, testsuite/modulefiles.deep/version/dir1/2.0, testsuite/modulefiles.deep/version/dir2/.version, testsuite/modulefiles.deep/version/dir2/1.0, .../modulefiles.deep/version/dir2/2.0/.version, testsuite/modulefiles.deep/version/dir2/2.0/rc1, testsuite/modulefiles.deep/version/dir2/2.0/rc2, testsuite/modulefiles.deep/version/dir2/3.0, testsuite/modulefiles/break/2.0, testsuite/modulefiles/info/shellsexp, testsuite/modules.00-init/006-procs.exp, testsuite/modules.00-init/030-shells.exp, testsuite/modules.00-init/080-begenv.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.35-trace/010-init_ts.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/020-setenv.exp, testsuite/modules.50-cmds/022-setenv-eschars.exp, testsuite/modules.50-cmds/025-setenv-undo.exp, testsuite/modules.50-cmds/030-unsetenv.exp, testsuite/modules.50-cmds/035-unsetenv-undo.exp, testsuite/modules.50-cmds/036-unsetenv-x.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/077-alias-undo.exp, testsuite/modules.50-cmds/078-refresh.exp, testsuite/modules.50-cmds/080-info-name.exp, testsuite/modules.50-cmds/086-info-shells.exp, testsuite/modules.50-cmds/087-info-shells-exp.exp, testsuite/modules.50-cmds/088-info-isloaded.exp, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/100-loglevel.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/175-swap2.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/200-break.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/220-continue.exp, testsuite/modules.50-cmds/230-loop.exp, testsuite/modules.70-maint/045-listlong.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.80-deep/010-init_ts.exp, testsuite/modules.80-deep/020-load.exp, testsuite/modules.80-deep/030-display.exp, testsuite/modules.80-deep/040-list.exp, testsuite/modules.80-deep/999-cleanup.exp, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/050-long.exp, testsuite/modules.95-version/020-load.exp, testsuite/modules.95-version/020-unload.exp, testsuite/modules.95-version/022-load2.exp, testsuite/modules.95-version/022-unload2.exp, testsuite/modules.95-version/040-xgetenv.exp, utility.c, version.c, xref/ModuleCmd_Avail.c.html, xref/ModuleCmd_Avail.c.src.html, xref/ModuleCmd_Clear.c.html, xref/ModuleCmd_Clear.c.src.html, xref/ModuleCmd_Display.c.html, xref/ModuleCmd_Display.c.src.html, xref/ModuleCmd_Help.c.html, xref/ModuleCmd_Help.c.src.html, xref/ModuleCmd_Init.c.html, xref/ModuleCmd_Init.c.src.html, xref/ModuleCmd_List.c.html, xref/ModuleCmd_List.c.src.html, xref/ModuleCmd_Load.c.html, xref/ModuleCmd_Load.c.src.html, xref/ModuleCmd_Purge.c.html, xref/ModuleCmd_Purge.c.src.html, xref/ModuleCmd_Refresh.c.html, xref/ModuleCmd_Refresh.c.src.html, xref/ModuleCmd_Switch.c.html, xref/ModuleCmd_Switch.c.src.html, xref/ModuleCmd_Update.c.html, xref/ModuleCmd_Update.c.src.html, xref/ModuleCmd_Use.c.html, xref/ModuleCmd_Use.c.src.html, xref/ModuleCmd_Whatis.c.html, xref/ModuleCmd_Whatis.c.src.html, xref/cmdAlias.c.html, xref/cmdAlias.c.src.html, xref/cmdChdir.c.html, xref/cmdChdir.c.src.html, xref/cmdConflict.c.html, xref/cmdConflict.c.src.html, xref/cmdInfo.c.html, xref/cmdInfo.c.src.html, xref/cmdIsLoaded.c.html, xref/cmdIsLoaded.c.src.html, xref/cmdLog.c.html, xref/cmdLog.c.src.html, xref/cmdMisc.c.html, xref/cmdMisc.c.src.html, xref/cmdModule.c.html, xref/cmdModule.c.src.html, xref/cmdPath.c.html, xref/cmdPath.c.src.html, xref/cmdSetenv.c.html, xref/cmdSetenv.c.src.html, xref/cmdTrace.c.html, xref/cmdTrace.c.src.html, xref/cmdUlvl.c.html, xref/cmdUlvl.c.src.html, xref/cmdUname.c.html, xref/cmdUname.c.src.html, xref/cmdVerbose.c.html, xref/cmdVerbose.c.src.html, xref/cmdVersion.c.html, xref/cmdVersion.c.src.html, xref/cmdWhatis.c.html, xref/cmdWhatis.c.src.html, xref/cmdXResource.c.html, xref/cmdXResource.c.src.html, xref/cxref.apdx.html, xref/cxref.function, xref/cxref.html, xref/cxref.include, xref/cxref.typedef, xref/cxref.variable, xref/error.c.html, xref/error.c.src.html, xref/getopt.c.html, xref/getopt.c.src.html, xref/init.c.html, xref/init.c.src.html, xref/locate_module.c.html, xref/locate_module.c.src.html, xref/main.c.html, xref/main.c.src.html, xref/utility.c.html, xref/utility.c.src.html, xref/version.c.html, xref/version.c.src.html: Setting up the modules-3-2-9 branch. 2010-11-04 rkowen <rkowen> * locate_module.c: Using a const char * to remove a compiler warning message. 2010-10-18 rkowen <rkowen> * NEWS, cmdVersion.c, doc/modulefile.4.in, testsuite/modulefiles.deep/modulerc/.modulerc, testsuite/modulefiles.deep/modulerc/dir1/.modulerc, .../modulefiles.deep/modulerc/dir2/1.0/.modulerc, testsuite/modulefiles/loc_rc3/.modulerc, testsuite/modulefiles/loc_rc4/.modulerc: * Let the "module-version" command use a "name" of '.' for "this" module directory ... useful for deep modulefile directories. 2010-10-18 sirdude <sirdude> * tcl/modulecmd.tcl: small fixes to module-info Kent 2010-10-14 rkowen <rkowen> * ModuleCmd_Avail.c, configure.ac, init.c, locate_module.c, main.c, modules_def.h: Added in a skipdirs object with the name of source code management directories to skip, unless the directory has a module dot file (.version or .modulerc). Fixed problem with the po/Makefile.* 2010-10-11 rkowen <rkowen> * cmdVersion.c, locate_module.c, modules_def.h: Rolled in some changes from the mfiles branch. 2010-10-08 rkowen <rkowen> * ModuleCmd_Avail.c, ModuleCmd_Init.c, ModuleCmd_Load.c, ModuleCmd_Purge.c, ModuleCmd_Switch.c, ModuleCmd_Update.c, ModuleCmd_Whatis.c, cmdConflict.c, cmdInfo.c, cmdIsLoaded.c, cmdModule.c, cmdPath.c, cmdUname.c, cmdVersion.c, cmdWhatis.c, cmdXResource.c, init.c, locate_module.c, main.c, utility.c, utilmem.c: Simplified the conditional tests for NULL. * ModuleCmd_Use.c, ModuleCmd_Whatis.c, cmdChdir.c, cmdConflict.c, locate_module.c, modules_def.h, utility.c: Hid most of the stat() calls behind is_(), an internal function. 2010-10-07 rkowen <rkowen> * cmdVersion.c, doc/modulefile.4.in, locate_module.c, testsuite/modulefiles.deep/modulerc/.modulerc, testsuite/modulefiles.deep/modulerc/dir1/.modulerc, testsuite/modulefiles.deep/modulerc/dir1/1.0, testsuite/modulefiles.deep/modulerc/dir1/2.0, testsuite/modulefiles.deep/modulerc/dir2/.modulerc, .../modulefiles.deep/modulerc/dir2/1.0/.modulerc, testsuite/modulefiles.deep/modulerc/dir2/1.0/rc1, testsuite/modulefiles.deep/modulerc/dir2/1.0/rc2, testsuite/modulefiles.deep/modulerc/dir2/2.0, testsuite/modulefiles.deep/modulerc/dir2/3.0, testsuite/modulefiles.deep/plain/dir1/1.0, testsuite/modulefiles.deep/plain/dir1/2.0, testsuite/modulefiles.deep/plain/dir2/1.0, testsuite/modulefiles.deep/plain/dir2/2.0, testsuite/modulefiles.deep/version/.version, testsuite/modulefiles.deep/version/dir1/.version, testsuite/modulefiles.deep/version/dir1/1.0, testsuite/modulefiles.deep/version/dir1/2.0, testsuite/modulefiles.deep/version/dir2/.version, testsuite/modulefiles.deep/version/dir2/1.0, .../modulefiles.deep/version/dir2/2.0/.version, testsuite/modulefiles.deep/version/dir2/2.0/rc1, testsuite/modulefiles.deep/version/dir2/2.0/rc2, testsuite/modulefiles.deep/version/dir2/3.0, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.80-deep/010-init_ts.exp, testsuite/modules.80-deep/020-load.exp, testsuite/modules.80-deep/030-display.exp, testsuite/modules.80-deep/040-list.exp, testsuite/modules.80-deep/999-cleanup.exp: Rolled in the deep modulefile changes from version 3.2.8. * modulefiles/module-cvs.in, modulefiles/modules.in: Rolled in the modulefile changes from version 3.2.8. * ChangeLog, Makefile.am: Rolled in the Makefile.am / library order fix from version 3.2.8. 2010-10-05 rkowen <rkowen> * doc/module.1.in: Updated with sections on initializing modules for perl and python from version 3.2.8. * ModuleCmd_Purge.c: Merged the fix for multiple module purge from version 3.2.8. * ChangeLog, NEWS, config/emtcl.m4, config/tcl.m4, configure.ac, testsuite/modules.70-maint/070-display.exp: Rolled in from version 3.2.8 the configure --with-man-path option and the fixed emtcl.m4 which corrects the --with-tcl and related options, and the --without-x test variance. 2010-10-04 rkowen <rkowen> * cmdConflict.c, doc/module.1.in, init.c, init/Makefile.am, init/cmake.in, init/{perl.in => perl.pm.in}, init/python.in, init/python.py.in, testsuite/modulefiles/info/shellsexp, testsuite/modules.00-init/030-shells.exp, testsuite/modules.00-init/080-begenv.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/020-setenv.exp, testsuite/modules.50-cmds/022-setenv-eschars.exp, testsuite/modules.50-cmds/025-setenv-undo.exp, testsuite/modules.50-cmds/030-unsetenv.exp, testsuite/modules.50-cmds/035-unsetenv-undo.exp, testsuite/modules.50-cmds/036-unsetenv-x.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/077-alias-undo.exp, testsuite/modules.50-cmds/080-info-name.exp, testsuite/modules.50-cmds/086-info-shells.exp, testsuite/modules.50-cmds/087-info-shells-exp.exp, testsuite/modules.50-cmds/088-info-isloaded.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/175-swap2.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/200-break.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/220-continue.exp, testsuite/modules.50-cmds/230-loop.exp, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.95-version/020-load.exp, testsuite/modules.95-version/020-unload.exp, testsuite/modules.95-version/022-load2.exp, testsuite/modules.95-version/022-unload2.exp, testsuite/modules.95-version/040-xgetenv.exp, utility.c: Rolled in the cmake addition from version 3.2.8, and the new perl.pm & python.py init files. 2010-10-01 sirdude <sirdude> * tcl/modulecmd.tcl: Patches from John Tseng, Fixes an issue with perl autoinit by adding tclsh to the call Updates to module-version. Kent 2010-07-27 rkowen <rkowen> * cmdChdir.c, init/bash_completion.in, testsuite/modulefiles/alias/1.0, testsuite/modulefiles/append/0.1, testsuite/modulefiles/append/0.2, testsuite/modulefiles/append/1.0, testsuite/modulefiles/append/2.1, testsuite/modulefiles/append/2.2, testsuite/modulefiles/break/4.0, testsuite/modulefiles/continue/1.0, testsuite/modulefiles/continue/2.0, testsuite/modulefiles/continue/3.0, testsuite/modulefiles/continue/4.0, testsuite/modulefiles/exit/1.0, testsuite/modulefiles/exit/2.0, testsuite/modulefiles/exit/3.0, testsuite/modulefiles/prepend/0.1, testsuite/modulefiles/prepend/0.2, testsuite/modulefiles/prepend/1.0, testsuite/modulefiles/prepend/2.1, testsuite/modulefiles/prepend/2.2, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/076-alias-sub.exp, testsuite/modules.50-cmds/175-swap2.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/220-continue.exp, testsuite/modules.50-cmds/230-loop.exp, testsuite/modules.50-cmds/999-cleanup.exp: Base version is 3-2-0, then merged to 3-2-7. 2010-05-28 sirdude <sirdude> * tcl/modulecmd.tcl: Last patch from Gerrit Renker This one makes it so module switch tries to swap the order if the user messed it up. If you type: module switch new old instead of: module switch old new it will attempt to correct it. Kent * tcl/modulecmd.tcl: Another patch by Gerrit Renker This one makes module display/show more similar to the c version of modules. Kent * tcl/modulecmd.tcl: Two more patches by Gerrit Renker These two clean up the "version" info and makes the startup files more compatable with the c version of modules. Kent * tcl/modulecmd.tcl: This is patch #6 from Gerrit Renker This patch increased the CSH_LIMIT to the same as linux's default. (This seams reasonable, if people have older machines that have issues they can always drop it back down to a lower value) Kent * tcl/modulecmd.tcl: This is patch #5 from Gerrit Renker This one improves escaping of special symbols Kent * tcl/modulecmd.tcl: Patch #4 from Gerrit Renker This one cleans up dynamic columns and makes it autodetect Kent 2010-05-27 sirdude <sirdude> * tcl/modulecmd.tcl: small typo in last patch was missing a $ Kent * tcl/modulecmd.tcl: Patch #3 submitted by Gerrit Renker This one fixes a heck of a lot of typo's. (Spelling isn't my strong suit) :) Kent * tcl/modulecmd.tcl: Two patches by Gerrit Renker The first one fixes an issue with sourcing a .versin/.modulerc over and over the second one fixes up listModules so that it behaves better. (Gerrit has submitted a number of patches, this is just two of them) Kent 2010-05-24 sirdude <sirdude> * tcl/modulecmd.tcl: This is a patch by Gerrit Renker to fix an issue with _LMFILES_ not having correct data when nesting module load/unload commands inside of other modules. Kent 2009-10-15 rkowen <rkowen> * modulefiles/.cvsignore: Ignore the generated notavail modulefile * NEWS, configure.ac, modulefiles/Makefile.am, modulefiles/notavail.in: * Added the "notavail" modulefile (as shown in man page) * init.c, locate_module.c, main.c: Resolved some minor warnings. * Makefile.am, ModuleCmd_Avail.c, ModuleCmd_Init.c, ModuleCmd_List.c, ModuleCmd_Load.c, ModuleCmd_Refresh.c, ModuleCmd_Switch.c, ModuleCmd_Whatis.c, NEWS, PROBLEMS, cmdConflict.c, cmdInfo.c, cmdIsLoaded.c, cmdLog.c, cmdVersion.c, configure.ac, error.c, init.c, locate_module.c, main.c, modules_def.h, ovec.c, ovec.h, testsuite/etc/{rc => modulerc}, testsuite/modules.20-locate/060-rc.exp, utility.c, utilobj.c, uvec.c: Allow loading and unloading the .modulerc & .version files Removed the Tcl intrepretor from many of the locate_modulefile utility routines. Simplified the error code with uvec. Added "tag" to MHash object for existence testing. Passes all tests but 2 generate "duplicate version symbol ... found". Merged in from the mfiles branch. 2009-10-12 rkowen <rkowen> * ChangeLog: Updated with 'mpath' merge. * ModuleCmd_Avail.c, ModuleCmd_Use.c, ModuleCmd_Whatis.c, NEWS, cmdConflict.c, cmdIsLoaded.c, locate_module.c, main.c, modules_def.h, testsuite/modules.10-use/040-load.exp, utility.c: Merged in the 'mpath' branch changes. 2009-09-22 rkowen <rkowen> * init/.modulespath.in, init/Makefile.am, init/bash.in, init/csh.in, init/ksh.in, init/python.in, init/sh.in, init/zsh.in: Merged in the final of the 3.2.7b changes to the init/ files. * Makefile.am: Added init/bash_completion.in into the distribution list. * init/bash.in, init/csh.in, init/ksh.in, init/python.in, init/sh.in, init/zsh.in: Changed the sed '\t' to a tab char so it would work on Solaris. 2009-09-02 rkowen <rkowen> * ChangeLog, cmdConflict.c, cmdLog.c, error.c, testsuite/modules.50-cmds/100-loglevel.exp, utility.c, xref/ModuleCmd_Avail.c.html, xref/ModuleCmd_Avail.c.src.html, xref/ModuleCmd_Clear.c.html, xref/ModuleCmd_Clear.c.src.html, xref/ModuleCmd_Display.c.html, xref/ModuleCmd_Display.c.src.html, xref/ModuleCmd_Help.c.html, xref/ModuleCmd_Help.c.src.html, xref/ModuleCmd_Init.c.html, xref/ModuleCmd_Init.c.src.html, xref/ModuleCmd_List.c.html, xref/ModuleCmd_List.c.src.html, xref/ModuleCmd_Load.c.html, xref/ModuleCmd_Load.c.src.html, xref/ModuleCmd_Purge.c.html, xref/ModuleCmd_Purge.c.src.html, xref/ModuleCmd_Refresh.c.html, xref/ModuleCmd_Refresh.c.src.html, xref/ModuleCmd_Switch.c.html, xref/ModuleCmd_Switch.c.src.html, xref/ModuleCmd_Update.c.html, xref/ModuleCmd_Update.c.src.html, xref/ModuleCmd_Use.c.html, xref/ModuleCmd_Use.c.src.html, xref/ModuleCmd_Whatis.c.html, xref/ModuleCmd_Whatis.c.src.html, xref/cmdAlias.c.html, xref/cmdAlias.c.src.html, xref/cmdChdir.c.html, xref/cmdChdir.c.src.html, xref/cmdConflict.c.html, xref/cmdConflict.c.src.html, xref/cmdInfo.c.html, xref/cmdInfo.c.src.html, xref/cmdIsLoaded.c.html, xref/cmdIsLoaded.c.src.html, xref/cmdLog.c.html, xref/cmdLog.c.src.html, xref/cmdMisc.c.html, xref/cmdMisc.c.src.html, xref/cmdModule.c.html, xref/cmdModule.c.src.html, xref/cmdPath.c.html, xref/cmdPath.c.src.html, xref/cmdSetenv.c.html, xref/cmdSetenv.c.src.html, xref/cmdUlvl.c.html, xref/cmdUlvl.c.src.html, xref/cmdUname.c.html, xref/cmdUname.c.src.html, xref/cmdVerbose.c.html, xref/cmdVerbose.c.src.html, xref/cmdVersion.c.html, xref/cmdVersion.c.src.html, xref/cmdWhatis.c.html, xref/cmdWhatis.c.src.html, xref/cmdXResource.c.html, xref/cmdXResource.c.src.html, xref/config.h.html, xref/config.h.src.html, xref/cxref.apdx.html, xref/cxref.function, xref/cxref.html, xref/cxref.include, xref/cxref.typedef, xref/cxref.variable, xref/error.c.html, xref/error.c.src.html, xref/getopt.c.html, xref/getopt.c.src.html, xref/init.c.html, xref/init.c.src.html, xref/locate_module.c.html, xref/locate_module.c.src.html, xref/main.c.html, xref/main.c.src.html, xref/modules_def.h.html, xref/modules_def.h.src.html, xref/utility.c.html, xref/utility.c.src.html, xref/version.c.html: Merged in the mlist code clean up changes. 2009-09-01 rkowen <rkowen> * ChangeLog, xref/ModuleCmd_Avail.c.html, xref/ModuleCmd_Avail.c.src.html, xref/ModuleCmd_Clear.c.html, xref/ModuleCmd_Clear.c.src.html, xref/ModuleCmd_Display.c.html, xref/ModuleCmd_Display.c.src.html, xref/ModuleCmd_Help.c.html, xref/ModuleCmd_Help.c.src.html, xref/ModuleCmd_Init.c.html, xref/ModuleCmd_Init.c.src.html, xref/ModuleCmd_List.c.html, xref/ModuleCmd_List.c.src.html, xref/ModuleCmd_Load.c.html, xref/ModuleCmd_Load.c.src.html, xref/ModuleCmd_Purge.c.html, xref/ModuleCmd_Purge.c.src.html, xref/ModuleCmd_Refresh.c.html, xref/ModuleCmd_Refresh.c.src.html, xref/ModuleCmd_Switch.c.html, xref/ModuleCmd_Switch.c.src.html, xref/ModuleCmd_Update.c.html, xref/ModuleCmd_Update.c.src.html, xref/ModuleCmd_Use.c.html, xref/ModuleCmd_Use.c.src.html, xref/ModuleCmd_Whatis.c.html, xref/ModuleCmd_Whatis.c.src.html, xref/cmdAlias.c.html, xref/cmdAlias.c.src.html, xref/cmdChdir.c.html, xref/cmdChdir.c.src.html, xref/cmdConflict.c.html, xref/cmdConflict.c.src.html, xref/cmdInfo.c.html, xref/cmdInfo.c.src.html, xref/cmdIsLoaded.c.html, xref/cmdIsLoaded.c.src.html, xref/cmdLog.c.html, xref/cmdLog.c.src.html, xref/cmdMisc.c.html, xref/cmdMisc.c.src.html, xref/cmdModule.c.html, xref/cmdModule.c.src.html, xref/cmdPath.c.html, xref/cmdPath.c.src.html, xref/cmdSetenv.c.html, xref/cmdSetenv.c.src.html, xref/cmdTrace.c.html, xref/cmdTrace.c.src.html, xref/cmdUlvl.c.html, xref/cmdUlvl.c.src.html, xref/cmdUname.c.html, xref/cmdUname.c.src.html, xref/cmdVerbose.c.html, xref/cmdVerbose.c.src.html, xref/cmdVersion.c.html, xref/cmdVersion.c.src.html, xref/cmdWhatis.c.html, xref/cmdWhatis.c.src.html, xref/cmdXResource.c.html, xref/cmdXResource.c.src.html, xref/config.h.html, xref/config.h.src.html, xref/cxref.apdx.html, xref/cxref.function, xref/cxref.html, xref/cxref.include, xref/cxref.typedef, xref/cxref.variable, xref/error.c.html, xref/error.c.src.html, xref/getopt.c.html, xref/getopt.c.src.html, xref/init.c.html, xref/init.c.src.html, xref/locate_module.c.html, xref/locate_module.c.src.html, xref/main.c.html, xref/main.c.src.html, xref/modules_def.h.html, xref/modules_def.h.src.html, xref/utility.c.html, xref/utility.c.src.html, xref/utilmem.c.html, xref/utilmem.c.src.html, xref/utilobj.c.html, xref/utilobj.c.src.html, xref/uvec.c.html, xref/uvec.c.src.html, xref/version.c.html: Updated the cxref pages. * LICENSE.LGPL, Makefile.am, ModuleCmd_Avail.c, ModuleCmd_Clear.c, ModuleCmd_Init.c, ModuleCmd_List.c, ModuleCmd_Load.c, ModuleCmd_Use.c, ModuleCmd_Whatis.c, NEWS, cmdAlias.c, cmdChdir.c, cmdConflict.c, cmdInfo.c, cmdIsLoaded.c, cmdLog.c, cmdModule.c, cmdPath.c, cmdSetenv.c, cmdUlvl.c, cmdUname.c, cmdVerbose.c, cmdVersion.c, cmdWhatis.c, cmdXResource.c, configure.ac, error.c, init.c, locate_module.c, main.c, modulefiles/.cvsignore, modulefiles/HOME.in, modulefiles/Makefile.am, modules_def.h, utility.c, utilmem.c, utilobj.c, uvec.c, uvec.h: Merging in the changes from the mlist branch. 2009-08-24 rkowen <rkowen> * cmdConflict.c: Lost value of notloaded_flag in conversion to objv. 2009-08-23 rkowen <rkowen> * ChangeLog: Updated. * ModuleCmd_Avail.c, ModuleCmd_Clear.c, ModuleCmd_Display.c, ModuleCmd_Help.c, ModuleCmd_Init.c, ModuleCmd_List.c, ModuleCmd_Load.c, ModuleCmd_Purge.c, ModuleCmd_Refresh.c, ModuleCmd_Switch.c, ModuleCmd_Update.c, ModuleCmd_Use.c, ModuleCmd_Whatis.c, NEWS, cmdAlias.c, cmdChdir.c, cmdConflict.c, cmdInfo.c, cmdIsLoaded.c, cmdLog.c, cmdMisc.c, cmdModule.c, cmdPath.c, cmdSetenv.c, cmdUlvl.c, cmdUname.c, cmdVerbose.c, cmdVersion.c, cmdWhatis.c, cmdXResource.c, configure.ac, error.c, getopt.c, init.c, locate_module.c, main.c, modules_def.h, utility.c, utilobj.c: Merged the nodeb branch into the main trunk. * ChangeLog: Updated. * .indent.pro, ChangeLog, Makefile.am, ModuleCmd_Avail.c, ModuleCmd_Clear.c, ModuleCmd_Display.c, ModuleCmd_Help.c, ModuleCmd_Load.c, ModuleCmd_Refresh.c, ModuleCmd_Update.c, ModuleCmd_Use.c, ModuleCmd_Whatis.c, NEWS, cmdAlias.c, cmdChdir.c, cmdConflict.c, cmdInfo.c, cmdIsLoaded.c, cmdLog.c, cmdMisc.c, cmdModule.c, cmdPath.c, cmdSetenv.c, cmdUlvl.c, cmdUname.c, cmdVerbose.c, cmdVersion.c, cmdWhatis.c, cmdXResource.c, error.c, init.c, locate_module.c, main.c, modules_def.h, testsuite/modulefiles/chdir/1.0, testsuite/modulefiles/chdir/2.0, testsuite/modulefiles/chdir/3.0, testsuite/modulefiles/chdir/4.0, testsuite/modules.50-cmds/240-chdir.exp, utility.c, utilobj.c: Merged in the btclobj1 branch changes to the main trunk - converted the module commands to Tcl dual-ported objects. 2009-08-18 rkowen <rkowen> * xref/cmdChdir.c.html, xref/cmdChdir.c.src.html: cmdChdir is now part of the xref mix. 2009-08-14 rkowen <rkowen> * Makefile.am, xref/ModuleCmd_Avail.c.html, xref/ModuleCmd_Avail.c.src.html, xref/ModuleCmd_Clear.c.html, xref/ModuleCmd_Clear.c.src.html, xref/ModuleCmd_Display.c.html, xref/ModuleCmd_Display.c.src.html, xref/ModuleCmd_Help.c.html, xref/ModuleCmd_Help.c.src.html, xref/ModuleCmd_Init.c.html, xref/ModuleCmd_Init.c.src.html, xref/ModuleCmd_List.c.html, xref/ModuleCmd_List.c.src.html, xref/ModuleCmd_Load.c.html, xref/ModuleCmd_Load.c.src.html, xref/ModuleCmd_Purge.c.html, xref/ModuleCmd_Purge.c.src.html, xref/ModuleCmd_Refresh.c.html, xref/ModuleCmd_Refresh.c.src.html, xref/ModuleCmd_Switch.c.html, xref/ModuleCmd_Switch.c.src.html, xref/ModuleCmd_Update.c.html, xref/ModuleCmd_Update.c.src.html, xref/ModuleCmd_Use.c.html, xref/ModuleCmd_Use.c.src.html, xref/ModuleCmd_Whatis.c.html, xref/ModuleCmd_Whatis.c.src.html, xref/cmdAlias.c.html, xref/cmdAlias.c.src.html, xref/cmdConflict.c.html, xref/cmdConflict.c.src.html, xref/cmdInfo.c.html, xref/cmdInfo.c.src.html, xref/cmdIsLoaded.c.html, xref/cmdIsLoaded.c.src.html, xref/cmdLog.c.html, xref/cmdLog.c.src.html, xref/cmdMisc.c.html, xref/cmdMisc.c.src.html, xref/cmdModule.c.html, xref/cmdModule.c.src.html, xref/cmdPath.c.html, xref/cmdPath.c.src.html, xref/cmdSetenv.c.html, xref/cmdSetenv.c.src.html, xref/cmdUlvl.c.html, xref/cmdUlvl.c.src.html, xref/cmdUname.c.html, xref/cmdUname.c.src.html, xref/cmdVerbose.c.html, xref/cmdVerbose.c.src.html, xref/cmdVersion.c.html, xref/cmdVersion.c.src.html, xref/cmdWhatis.c.html, xref/cmdWhatis.c.src.html, xref/cmdXResource.c.html, xref/cmdXResource.c.src.html, xref/config.h.html, xref/config.h.src.html, xref/cxref.apdx.html, xref/cxref.function, xref/cxref.html, xref/cxref.include, xref/cxref.typedef, xref/cxref.variable, xref/error.c.html, xref/error.c.src.html, xref/getopt.c.html, xref/getopt.c.src.html, xref/getopt.h.html, xref/getopt.h.src.html, xref/init.c.html, xref/init.c.src.html, xref/locate_module.c.html, xref/locate_module.c.src.html, xref/main.c.html, xref/main.c.src.html, xref/modules_def.h.html, xref/modules_def.h.src.html, xref/utility.c.html, xref/utility.c.src.html, xref/version.c.html, xref/version.c.src.html: Got cxref running and regenerated the cross references. * locate_module.c: Cleaned up a memory error and redundant code. 2009-08-13 rkowen <rkowen> * ChangeLog, ModuleCmd_Avail.c, ModuleCmd_Init.c, ModuleCmd_Purge.c, ModuleCmd_Refresh.c, ModuleCmd_Update.c, NEWS, cmdChdir.c, cmdModule.c, cmdVersion.c, cmdWhatis.c, cmdXResource.c, configure.ac, locate_module.c, main.c, modules_def.h, utility.c: * All string allocation is performed by a common internal routine * --disable-beginenv is now the configuration default 2009-08-11 rkowen <rkowen> * ModuleCmd_Avail.c, ModuleCmd_Clear.c, ModuleCmd_Display.c, ModuleCmd_Help.c, ModuleCmd_Init.c, ModuleCmd_List.c, ModuleCmd_Load.c, ModuleCmd_Purge.c, ModuleCmd_Refresh.c, ModuleCmd_Switch.c, ModuleCmd_Update.c, ModuleCmd_Use.c, ModuleCmd_Whatis.c, NEWS, README, TODO, cmdAlias.c, cmdChdir.c, cmdConflict.c, cmdInfo.c, cmdIsLoaded.c, cmdLog.c, cmdMisc.c, cmdModule.c, cmdPath.c, cmdSetenv.c, cmdUlvl.c, cmdUname.c, cmdVerbose.c, cmdVersion.c, cmdWhatis.c, cmdXResource.c, configure.ac, doc/module.1.in, error.c, getopt.c, init.c, locate_module.c, main.c, modules_def.h, testsuite/modulefiles/.moduleavailcache, testsuite/modulefiles/.moduleavailcache.202, testsuite/modulefiles/.moduleavailcachedir, testsuite/modulefiles/.moduleavailcachedir.202, testsuite/modules.00-init/090-switches.exp, testsuite/modules.70-maint/060-apropos.exp, utility.c: Merged in the bnocache branch to the main source tree. 2009-08-10 rkowen <rkowen> * ChangeLog: Updated. * ModuleCmd_Display.c, NEWS, cmdLog.c, configure.ac, error.c, modules_def.h: Merged the syslogging changes from the bsyslog branch. 2009-08-03 rkowen <rkowen> * ChangeLog: Updated. * Makefile.am, NEWS, cmdInfo.c, cmdLog.c, cmdModule.c, cmdTrace.c, configure.ac, doc/modulefile.4.in, init.c, modulefiles/module-info.in, modules_def.h, testsuite/modulefiles/help/2.0, testsuite/modulefiles/trace/all_off, testsuite/modulefiles/trace/all_on, testsuite/modulefiles/trace/colon, testsuite/modulefiles/trace/dilo_onoff, testsuite/modulefiles/trace/disp_onoff, testsuite/modulefiles/trace/disptrac, testsuite/modulefiles/trace/load_all1, testsuite/modulefiles/trace/load_all2, testsuite/modulefiles/trace/load_on, testsuite/modulefiles/trace/load_onoff, testsuite/modulefiles/trace/load_ovr, testsuite/modules.35-trace/010-init_ts.exp, testsuite/modules.35-trace/020-default.exp, testsuite/modules.35-trace/030-all-on.exp, testsuite/modules.35-trace/031-all-off.exp, testsuite/modules.35-trace/040-load-all.exp, testsuite/modules.35-trace/041-load-all.exp, testsuite/modules.35-trace/042-load-on.exp, testsuite/modules.35-trace/043-load-onoff.exp, testsuite/modules.35-trace/044-load-ovr.exp, testsuite/modules.35-trace/050-disp-onoff.exp, testsuite/modules.35-trace/060-dilo-onoff.exp, testsuite/modules.35-trace/070-colon.exp, testsuite/modules.35-trace/095-cleanup.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.70-maint/070-display.exp: Merged in the bnotrace branch changes ... essentially removing the module-trace command. * init/bash_completion.in: Added bash_completion init * ChangeLog: Updated. * Makefile.am, ModuleCmd_Avail.c, ModuleCmd_Clear.c, ModuleCmd_Display.c, ModuleCmd_Help.c, ModuleCmd_Init.c, ModuleCmd_List.c, ModuleCmd_Purge.c, ModuleCmd_Refresh.c, ModuleCmd_Switch.c, ModuleCmd_Update.c, ModuleCmd_Use.c, ModuleCmd_Whatis.c, cmdAlias.c, cmdChdir.c, cmdConflict.c, cmdInfo.c, cmdIsLoaded.c, cmdLog.c, cmdMisc.c, cmdModule.c, cmdPath.c, cmdSetenv.c, cmdTrace.c, cmdUlvl.c, cmdUname.c, cmdVerbose.c, cmdVersion.c, cmdWhatis.c, cmdXResource.c, configure.ac, doc/module.1.in, doc/modulefile.4.in, error.c, etc/global/bashrc.in, etc/global/csh.modules.in, etc/global/profile.modules.in, init.c, init/.modulespath.in, init/Makefile.am, init/bash.in, init/csh.in, init/filter, init/ksh.in, init/perl.in, init/python.in, init/sh.in, init/zsh.in, locate_module.c, modulefiles/Makefile.am, modules_def.h, utility.c, version.c: Rolled in the remaining 3.2.7 changes to the main branch. 2009-07-31 rkowen <rkowen> * ChangeLog: Updated main branch with 3.2.7 changes. * NEWS: Updated 3.2.7 changes. 2009-04-09 sirdude <sirdude> * tcl/modulecmd.tcl: This is a patch by John Tseng, It adds the ability to support Dynamic columns using stty you just setenv DYNAMIC_COLUMNS 1 and it will start using them. Kent * tcl/modulecmd.tcl: Fleshed out the debugging statements so most functions have them now. Kent 2009-02-24 sirdude <sirdude> * tcl/modulecmd.tcl: Some more cruft removal. Kent * tcl/Makefile, tcl/init/modulerc, tcl/modulecmd.tcl: added synonym of search for apropos/keyword Partialy contributed by Hunter Matthews. There is still an issue with it though. If you have a malformed module it will die. Probably there are other commands that die as well. Need to look at it more. Kent * tcl/modulecmd.tcl: Cleaned up some stuff that wasn't used and also fixed some minor formating issues. Kent * tcl/modulecmd.tcl: Updated the help dialog so its a bit more organized an easier to read. Kent * tcl/modulecmd.tcl: Patch by Hunter Matthews to clean up the output of module avail a little bit. Kent * tcl/modulecmd.tcl: Some patches submitted by Hunter Matthews adds --help as a commandline option. fixes issues with modulerc file getting sourced twice in sh and tcsh shells. Kent 2008-09-17 sirdude <sirdude> * tcl/modulecmd.tcl: Small patch for differences in glob on various platforms. Contributed by Thomas Zeiser Kent 2008-02-20 rkowen <rkowen> * NEWS, cmdPath.c, configure.ac, init/bash.in, testsuite/modulefiles/append/2.1, testsuite/modulefiles/append/2.2, testsuite/modulefiles/prepend/2.1, testsuite/modulefiles/prepend/2.2, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/175-swap2.exp: Rolled in the 3.2.7 changes so far. 2007-10-29 rkowen <rkowen> * ModuleCmd_Avail.c, NEWS: Rolled in the skip .git version control dirs in modulefile dirs. 2007-10-23 sirdude <sirdude> * tcl/modulecmd.tcl: updated ignored directories to include .svn and .git Thanks to John Tseng. Kent 2007-09-05 sirdude <sirdude> * tcl/modulecmd.tcl: Made it so that module use and module unuse work the same way, I also added a little debugging info for both of them. Kent 2007-05-16 sirdude <sirdude> * tcl/modulecmd.tcl: update to replaceFromList patch from Olly. adds a fix for when item2 is empty. Kent * tcl/modulecmd.tcl: Another great little patch by Olly Stephens, This one makes it so that if a module has an error message in it module help (modulefile) will still attempt to call the help function for that module. Kent * tcl/modulecmd.tcl: Another patch by Olly, This one extends some of the shortcuts accepted. example module lo blah now works just like module load blah Its not perfect but again better than what is there currently. Kent * tcl/modulecmd.tcl: Another patch by Olly, This one makes it so that help is displayed if a user types an invalid module command (Example: module blah) or if a user just types module with no args. Kent * tcl/modulecmd.tcl: Patch by Olly, Forces 0600 mode on the tmpfile when opening it. Really we need to figure out how to remove the need for a tmpfile, until then though this is still better than it was. Kent 2007-02-22 rkowen <rkowen> * NEWS, locate_module.c: Rolled in 3.2.6 realloc() fix. 2007-02-14 rkowen <rkowen> * NEWS, testsuite/modules.50-cmds/095-uname.exp: Rolled in 3.2.5 changes to the uname test * ModuleCmd_Avail.c, ModuleCmd_Update.c, ModuleCmd_Whatis.c, cmdConflict.c, cmdLog.c, cmdModule.c, cmdTrace.c, cmdVersion.c, cmdWhatis.c, cmdXResource.c, error.c, init.c, locate_module.c, modules_def.h, utility.c: Rolled in the 3.2.5 module_malloc() wrapper. 2007-02-09 rkowen <rkowen> * contrib/modules.ebuild: Gentoo ebuild script for modules, contributed by Peter Fischer <peter.fischer@terrasel.de> 2006-12-19 sirdude <sirdude> * tcl/modulecmd.tcl: updated module list so it skips modules with no name for -l and -t (it now handles them like module list without options) Kent 2006-12-13 sirdude <sirdude> * tcl/modulecmd.tcl: Fix provied by Eric Mastromarc reference counting was not working for unload-path now it is again. Kent 2006-12-12 sirdude <sirdude> * tcl/modulecmd.tcl: Modified prereq so its a logical OR for multiple modulefies on one command line. example: prereq foo bar If you want it foo AND bar do: prereq foo prereq bar Patch done by Chris Pruett Kent 2006-12-07 sirdude <sirdude> * tcl/modulecmd.tcl: Patch provided by Thomas Zeiser, better fix for reverting header to find dynamically what version of tclsh to use. It also now sorts output of module avail. Kent * tcl/modulecmd.tcl: reverting commit 1.75 where I removed the header section that finds tclsh. Kent 2006-09-13 sirdude <sirdude> * tcl/modulecmd.tcl: Changed (VAR)_modshare back to use g_def_seperator instead of user defined variable. Currently there is an issue with doing something like append-path -delem " " PATH /usr/bin append-path -delem " " PATH /usr/local/bin append-path -delem ":" PATH /usr/sbin then loading that module and unloading it... Because of the mixed delimiters the unload does not work properly. It at least works for the basic case now though. Kent 2006-09-07 sirdude <sirdude> * tcl/modulecmd.tcl: changed syntax of specifying a delimitor to match c version of modules and also made sure you can use " " and { } as a delimitor. Thanks go to Dr Reinhold Bader for this fix.... Kent 2006-08-23 sirdude <sirdude> * tcl/modulecmd.tcl: "module use" (without args) was broken, now its fixed again. Kent * tcl/modulecmd.tcl: fixed revision variable stuff. Kent * tcl/modulecmd.tcl: Added in cvs revision variables so that module help prints out what version of cvs file was checked out. Kent 2006-08-16 sirdude <sirdude> * tcl/modulecmd.tcl: this is a pathetic commit ;) Modified the comment for g_user so that it says the right thing. Kent 2006-08-15 sirdude <sirdude> * tcl/modulecmd.tcl: This commit removes the remaining warnings generated by nagelfar redid a couple of calls to interp eval recoded the replaceFromList function so it uses lreplace removed the removeFromList function and made it call replaceFromList instead... I also added _LMFILES_ environment variable haven't done anything with it yet though. (intent is to use it in unloading a module) Kent * tcl/modulecmd.tcl: removed all of the hardcoded default path seperators ":" and replaced with a variable. Kent 2006-08-14 sirdude <sirdude> * tcl/init/.cvsignore: added scripts that get created so that they don't show up in cvs update... Kent * tcl/modulecmd.tcl: fixed a few calls to catch and made sure they called it in a similar manor... (there are two more left that are slightly different but I didn't take the time to figure them out) one of the fixes was posted by Chris Pruett, and I just applied it where it needed it... :) Kent * tcl/modulecmd.tcl: added an else statement that I dropped by accident when merging module command and module command help slave functions... Also reran frink so it looks pretty again... Kent 2006-08-13 sirdude <sirdude> * tcl/modulecmd.tcl: more work on seperator specification. (removing hardcoded ":"'s Kent * tcl/modulecmd.tcl: combined a couple of duplicate statements in a switch. Kent * tcl/modulecmd.tcl: Start of allowing a spwcified seperator for commands. Still needs a lot of work... Kent * tcl/modulecmd.tcl: made module switch behave like it use to... (Sorry it took so long to switch it back) now it does not recursively unload and reload modules... This way seems more flexable and more intunitive to users. Kent 2006-08-12 sirdude <sirdude> * tcl/modulecmd.tcl: by accident shut off showing default module files.... Turning it back on. Kent * tcl/modulecmd.tcl: module avail with flag_default_dir was broken This fixes it. Kent * tcl/modulecmd.tcl: Null module was causing problems with module avail -l There were some odd settings for null which I just changed to "" everything seems to work better this way so going to commit it. Kent * tcl/modulecmd.tcl: Updated the help section so its more like the binary module command... Kent * tcl/init/bash.in, tcl/init/ksh.in, tcl/init/zsh.in: fix up bash's friends so they work properly... Kent * tcl/modulecmd.tcl: updated module-info so that it works with the module-info module for the most part. There is still some work here. Patch submitted by Mark Moraes Kent 2006-08-11 sirdude <sirdude> * tcl/Makefile, tcl/modulecmd.tcl, testsuite/config/unix.exp: updated Make test so it "works" again... combined functions for looking at .version and modulerc files... Kent * tcl/modulecmd.tcl: This one has been on my todo list for awhile now. Reduced redundant code and made the slave for module help and executing a module one function. Kent * tcl/modulecmd.tcl: removed the following functions: module-log module-verbosity module-user module-trace they were empty, if anyone ever decides to do them they can add them back in. just trying to make this thing a little leaner ;) Kent * tcl/modulecmd.tcl: ran frink -e to make things look pretty again ;) Kent * tcl/modulecmd.tcl: I used nagelfar.tcl (http://nagelfar.berlios.de/) a tcl syntax checker and cleaned up most warnings from it. found a couple of typos as well because of it.... Kent * tcl/modulecmd.tcl: another typo. (was missing a $ for a variable) Kent * tcl/modulecmd.tcl: Removed the code to find tclsh since its in the init scripts no reason to duplicate it and probably will speed things up a bit keeping it in the init files. Kent * tcl/modulecmd.tcl: On irix with an older version of tclsh I was getting errors with reportWarning and reportInternalBug not being defined when there was a malformed module... made it so they were copied over to the slave where needed. Kent * tcl/modulecmd.tcl: missed some prints to stderr and I also fixed some typos... Kent * tcl/modulecmd.tcl: made $contact = emailaddress and modified reportInternalError so it prints out the contact email address. Kent * tcl/modulecmd.tcl: moved all puts stderr's to one of the report functions. This could still use some cleaning up. (not really sure we need 3 report functions) but its at least a little nicer. (Was thinking about changing it to echo "$msg" instead of sending it to stderr... that way you could do things like module avail | more and it would work... Need to do some more testing on it though :) Kent * tcl/init/csh.in, tcl/init/tcsh.in: removed extra quotes that didn't need to be there. Kent 2006-06-15 rkowen <rkowen> * locate_module.c: Rolled in 3.2.4 graceful handling of empty MODULEPATH dirs. 2006-06-02 rkowen <rkowen> * ChangeLog: update main. 2006-06-01 rkowen <rkowen> * NEWS, doc/module.1.in, doc/modulefile.4.in, etc/add.modules.in, etc/mkroot.in, ext/add.ext.in, ext/mkroot.in, init/.modulespath.in, init/Makefile.am, init/bash.in, init/ksh.in, init/sh.in, init/zsh.in, modulefiles/dot.in, modulefiles/module-cvs.in, modulefiles/module-info.in, modulefiles/modules.in, modulefiles/null.in, modulefiles/use.own.in, modulefiles/version.in: Rolled in the 3.2.3 top_builddir and @configure_input\@ changes. * NEWS, cmdPath.c, doc/modulefile.4.in, locate_module.c, modules_def.h, testsuite/modulefiles/append/1.0, testsuite/modulefiles/prepend/1.0, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp: Rolled in the 3.2.3 prepend-path/append-path --delim changes. * ModuleCmd_Init.c, cmdConflict.c, cmdIsLoaded.c, cmdPath.c, locate_module.c, main.c, modules_def.h: Rolled in the pre-changes for handling arbitrary delimiters for lists (instead of ':'). 2006-05-31 sirdude <sirdude> * tcl/modulecmd.tcl: * minor typos in error output fixed * support for modules which are known to have no dependencies. Presently a module switch foo/4 foo/5 will reload all modules which have been loaded after foo. But sometimes this may be a nuisance, especially if module files implement their own reloading mechanism. Hence the modules entered as a ":" separated list into the environment variable MODULE_NORELOAD will not be reloaded during a module switch. The "module reload" command however still reloads the complet e module set. This is upward compatible since the original functionality is re tained if MODULE_RELOAD is left empty. patch provided by Dr. Reinhold Bader Kent 2006-05-25 rkowen <rkowen> * ChangeLog, modules.lsm.in: Merged in the working LSM from 3.2.2 * ChangeLog, NEWS, testsuite/modulefiles/alias/1.0, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/076-alias-sub.exp, testsuite/modules.50-cmds/078-refresh.exp, utility.c: Rolled in the 3.2.3 changes * the set-alias command will for Bourne shell derivatives substitute the safe ${1+"$@"} for $*. 2006-05-19 rkowen <rkowen> * Makefile.am, NEWS, init.c: Rolled in the TclX changes from 3-2-2. 2006-05-15 rkowen <rkowen> * NEWS, error.c, main.c, testsuite/modules.35-trace/010-init_ts.exp, testsuite/modules.50-cmds/100-loglevel.exp: Rolled in the syslog related changes from 3.2.3 2006-05-12 rkowen <rkowen> * NEWS: Added a section for 3.3.x * NEWS, cmdVersion.c: Folded in dgoldendias patch. * ChangeLog, modules.lsm.in: Added the Title line, which must have gotten lost in previous edits. 2006-05-04 rkowen <rkowen> * ChangeLog, NEWS, config/emtcl.m4, config/tcl.m4, configure.ac, main.c: Rolled in the 3.2.2 configure changes to the main development trunk. 2006-05-01 rkowen <rkowen> * ModuleCmd_List.c, ModuleCmd_Refresh.c, ModuleCmd_Update.c, ModuleCmd_Whatis.c, cmdLog.c, configure.ac, error.c, locate_module.c, modules_def.h, testsuite/modulefiles/append/0.1, testsuite/modulefiles/append/0.2, testsuite/modulefiles/prepend/0.1, testsuite/modulefiles/prepend/0.2, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, utility.c: Rolled in the xstrtok changes and tests from modules-3-2-2. 2006-04-10 rkowen <rkowen> * ChangeLog, init/Makefile.am: Change from using . & .. to $(srcdir) and $(top_srcdir) respectively. (Thanks to suggestion from Boris Boesler <boesler.AT.ifn.et.tu-dresden.de>) 2006-03-23 rkowen <rkowen> * init/csh.in: Rolled in init csh fix from 3.2.1 * ChangeLog: update. * init/csh.in, testsuite/modules.00-init/006-procs.exp, testsuite/modules.70-maint/045-listlong.exp, testsuite/modules.90-avail/050-long.exp, version.c: Merged in the 3.2.1 changes. 2006-03-07 rkowen <rkowen> * ModuleCmd_Load.c, NEWS, cmdModule.c, doc/modulefile.4.in, main.c, modules_def.h, testsuite/config/unix.exp, testsuite/modulefiles/break/2.0, testsuite/modulefiles/break/4.0, testsuite/modulefiles/continue/1.0, testsuite/modulefiles/continue/2.0, testsuite/modulefiles/continue/3.0, testsuite/modulefiles/continue/4.0, testsuite/modulefiles/exit/1.0, testsuite/modulefiles/exit/2.0, testsuite/modulefiles/exit/3.0, testsuite/modules.00-init/006-procs.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/220-continue.exp, testsuite/modules.50-cmds/230-loop.exp, testsuite/modules.50-cmds/999-cleanup.exp, utility.c: Rolled in the 3.2.0 exit changes. 2006-02-09 rkowen <rkowen> * init/Makefile.am: Fixed the tcsh target. 2006-02-06 rkowen <rkowen> * cmdModule.c, cmdPath.c, init.c, modules_def.h: Rolled in the Tcl_GetStringResult() changes from 3.2.0 * modulefiles/lang/.mklang: Fine-tuned the logic of dealing with $LANG and $LANG_STACK. Added some target language verbage. * .cvsignore, ChangeLog, Makefile.am, modulefiles/Makefile.am, modulefiles/lang/.cvsignore, modulefiles/lang/.mklang, po/.cvsignore, po/ChangeLog, po/LINGUAS, po/Makevars, po/POTFILES.in: Added the lang modulefiles and upgraded the Makefile.am-s to create a working distribution tar ball. 2006-02-05 rkowen <rkowen> * Makefile.am: After 'gettextize'. * configure.ac: The changes of 'gettextize', note that autopoint is not too smart with AC_CONFIG_AUX_DIR ... it appends on any text after macro to the directory name. So do not add 'dnl' for comments or to escape the \n. 2006-02-04 rkowen <rkowen> * ChangeLog: Updated. * version.c: The current version for the i18n mods is 3.3 alpha * main.c: Alert translators to the "common" strings. * error.c: Fixed grammar error. * utility.c: [ 730293 ] remove-path won't remove paths with a $ in it. Made the change and the tests ran fine. I'm not sure what cleanse_path() is supposed to do. * init.c: [ 672612 ] Tcl command execution failed and modules use pointed out the use of the deprecated Tcl fn Tcl_VarEval(). Replaced this with Tcl_Eval() and added some Tcl logic to handle when $auto_path is not set. * init/perl.in: Fixed where it needs to reference $ENV{...} [ 705033 ] Bug in init/perl * init/perl.in: Added 1 at end so perl/init can be used by the perl require. * cmdConflict.c: Removed i18n from the debugging statements ... not necessary. * Makefile.am, utility.c: Rolled in the changes from 3-2-0 patch1 2006-01-31 rkowen <rkowen> * ModuleCmd_Avail.c, ModuleCmd_Help.c, ModuleCmd_Init.c, ModuleCmd_List.c, ModuleCmd_Update.c, ModuleCmd_Use.c, ModuleCmd_Whatis.c, cmdConflict.c, cmdModule.c, cmdUname.c, cmdVersion.c, cmdXResource.c, configure.ac, error.c, getopt.c, init.c, locate_module.c, main.c, modules_def.h, utility.c: First pass through tagging all the translateable text with _(...), etc. for easy extraction by xgettext. Passes all tests. 2006-01-26 rkowen <rkowen> * Makefile.am, configure.ac, main.c, modules_def.h: Setting up autoconf for handling i18n & l10n. * configure.ac: The AC_AIX check needs to be before any compiler tests. Added the AM_GNU_GETTEXT macro for i18n & l10n. 2006-01-23 rkowen <rkowen> * Makefile.am, modules.lsm.in: Updated for LSM version 4 2006-01-19 rkowen <rkowen> * ChangeLog, Makefile.am, modules.lsm.in: Changed from sunsite to ibiblio (same thing though). * modules.lsm.in: Can't ftp into the SourceForge.net site. 2006-01-18 rkowen <rkowen> * version.c: Ready for the 3.2.0 release * ChangeLog, xref/config.h.html, xref/config.h.src.html: Updated. * xref/cmdModule.c.html, xref/cmdModule.c.src.html, xref/cmdPath.c.html, xref/cmdXResource.c.html, xref/cmdXResource.c.src.html, xref/cxref.apdx.html, xref/cxref.function, xref/modules_def.h.src.html, xref/utility.c.html, xref/utility.c.src.html: Updated. * MACHINES, NEWS: News about eliminating --with-force-path. 2006-01-17 rkowen <rkowen> * ChangeLog, README, cmdModule.c, configure.ac, modules_def.h, utility.c: Removed the --with-force-path option ... which basically makes sure that PATH and LD_LIBRARY_PATH have some minimum values, given by a couple of MODULE_*_SACRED env.vars. If you need something like this, then you've probably written your modulefiles wrong! * cmdXResource.c: Eliminated the C++ style commented lines. * config/emtcl.m4: Shortened option to --with-tcl-ver and fixed some minor problems with it. * configure.ac: Fixed what happens when no /bin/csh and the split_size is not set. * utility.c: Add some casts to eliminate warning messages. 2006-01-12 rkowen <rkowen> * ChangeLog: Updated * cvs2cl.pl: Don't need to track xref/ changes. * ChangeLog: Updated. * xref/cxref.variable, xref/main.c.html, xref/main.c.src.html, xref/modules_def.h.html, xref/modules_def.h.src.html, xref/version.c.html, xref/version.c.src.html: Updated the cxref docs * ChangeLog: Updated. * ChangeLog, version.c: Updated version date. * main.c, modules_def.h: Have --version list out the version date also. * testsuite/home/.cvsignore: Ignore the test generated file. * testsuite/home/.modules: This gets made when a test is performed. * xref/ModuleCmd_Avail.c.html, xref/ModuleCmd_Avail.c.src.html, xref/ModuleCmd_Clear.c.html, xref/ModuleCmd_Clear.c.src.html, xref/ModuleCmd_Display.c.html, xref/ModuleCmd_Display.c.src.html, xref/ModuleCmd_Help.c.html, xref/ModuleCmd_Help.c.src.html, xref/ModuleCmd_Init.c.html, xref/ModuleCmd_Init.c.src.html, xref/ModuleCmd_List.c.html, xref/ModuleCmd_List.c.src.html, xref/ModuleCmd_Load.c.html, xref/ModuleCmd_Load.c.src.html, xref/ModuleCmd_Purge.c.html, xref/ModuleCmd_Purge.c.src.html, xref/ModuleCmd_Refresh.c.src.html, xref/ModuleCmd_Switch.c.html, xref/ModuleCmd_Switch.c.src.html, xref/ModuleCmd_Update.c.src.html, xref/ModuleCmd_Use.c.html, xref/ModuleCmd_Use.c.src.html, xref/ModuleCmd_Whatis.c.html, xref/ModuleCmd_Whatis.c.src.html, xref/cmdAlias.c.html, xref/cmdAlias.c.src.html, xref/cmdConflict.c.html, xref/cmdConflict.c.src.html, xref/cmdInfo.c.html, xref/cmdInfo.c.src.html, xref/cmdIsLoaded.c.html, xref/cmdIsLoaded.c.src.html, xref/cmdLog.c.html, xref/cmdLog.c.src.html, xref/cmdMisc.c.html, xref/cmdMisc.c.src.html, xref/cmdModule.c.html, xref/cmdModule.c.src.html, xref/cmdPath.c.html, xref/cmdPath.c.src.html, xref/cmdSetenv.c.html, xref/cmdSetenv.c.src.html, xref/cmdTrace.c.html, xref/cmdTrace.c.src.html, xref/cmdUlvl.c.html, xref/cmdUlvl.c.src.html, xref/cmdUname.c.html, xref/cmdUname.c.src.html, xref/cmdVerbose.c.html, xref/cmdVerbose.c.src.html, xref/cmdVersion.c.html, xref/cmdVersion.c.src.html, xref/cmdWhatis.c.html, xref/cmdWhatis.c.src.html, xref/cmdXResource.c.html, xref/cmdXResource.c.src.html, xref/config.h.html, xref/config.h.src.html, xref/error.c.html, xref/error.c.src.html, xref/getopt.c.html, xref/getopt.c.src.html, xref/init.c.html, xref/init.c.src.html, xref/locate_module.c.html, xref/locate_module.c.src.html, xref/main.c.html, xref/main.c.src.html, xref/modules_def.h.html, xref/modules_def.h.src.html, xref/utility.c.html, xref/utility.c.src.html, xref/version.c.src.html: Updated the cxref docs to 3.2.0rc4 * .cvsignore, doc/.cvsignore, etc/.cvsignore, init/.cvsignore: More things to ignore. * ModuleCmd_Init.c, NEWS, version.c: Reworked the "module init*" subcommand to handle dot files with multiple "module load" lines. * INSTALL: Added the documentation related to --with-tcl-*. * config/emtcl.m4, config/tcl.m4, configure.ac: Reintroduced (or added) the configure options --with-tcl-{versions|lib|include} to allow the user to specify any values which may be missing from the tclConfig.sh script. * testsuite/home/.modules, testsuite/home/.modules.save, testsuite/modules.60-initx/005-init.exp, testsuite/modules.60-initx/010-list.exp, testsuite/modules.60-initx/020-add.exp, testsuite/modules.60-initx/030-switch.exp, testsuite/modules.60-initx/040-prepend.exp, testsuite/modules.60-initx/050-rm.exp, testsuite/modules.60-initx/060-2nd.exp, testsuite/modules.60-initx/095-cleanup.exp: Added a test suite for the "module init*" subcommands. * testsuite/modules.50-cmds/070-alias-proc.exp: Use the "native" Tcl file remove command. * utility.c: Minor formatting changes. * modules_def.h: Minor reformatting. * Makefile.am: Added INSTALL.RH7x to the distribution pkg. 2005-12-15 rkowen <rkowen> * ChangeLog: Update ChangeLog * ChangeLog, INSTALL: Updating the INSTALL doc for 3.2.0 * version.c: Time for the 3.2.0 release 2005-12-14 sirdude <sirdude> * tcl/modulecmd.tcl: Added the system command. Kent 2005-12-13 sirdude <sirdude> * tcl/modulecmd.tcl: Fix by Marcus Wagner. Makes it so module unload works the same way module load does. Specifically for the break command. Kent 2005-12-12 sirdude <sirdude> * tcl/modulecmd.tcl: Fix provided by Mark Moraes. Prevents modulefilename collisions by prepending slaves with __ before commit if you had a module file named: module-info and tried to do a module show module-info you would get: bad option "mode": must be alias, aliases, eval, expose, hide, hidden, issafe, invokehidden, or marktrusted invoked from within "module-info mode whatis " Now it works. Kent * tcl/modulecmd.tcl: removed unused variable junk from 3 places in the code. (was just setting it to "" in all 3 places) Kent 2005-12-06 rkowen <rkowen> * ChangeLog: Updated. 2005-12-05 rkowen <rkowen> * ChangeLog, cvs2cl.pl: Changed the ChangeLog script to not record changes about itself to itself. * testsuite/modules.50-cmds/170-swap.exp: Added more single argument "swap" tests. * ChangeLog, Makefile.am, NEWS, cvs2cl.pl, stripmkf, version.c: Added the cvs2cl.pl perl script for generating the ChangeLog semi-automatically. Removed stripmkf - an artifact from older releases. * ChangeLog, etc/Makefile.am, ext/Makefile.am: Put the add.modules/add.ext & mkroot scripts under the --prefix bin directory since those scripts are platform independent, and the modules modulefile will point to these scripts. 2005-12-02 rkowen <rkowen> * ChangeLog, configure.ac, init/Makefile.am, modulefiles/Makefile.am: Put the init/ scripts under the --exec-prefix directory, because they point to the platform specific modulecmd. 2005-11-30 rkowen <rkowen> * ChangeLog, cmdSetenv.c, configure.ac, init/.modulespath.in, modulefiles/Makefile.am, modules_def.h, utility.c, version.c: * Eliminated any warnings caused by using Tcl 8.4 * Fixed any mixed size differences when using ints and pointers. (Only an issue with 64 bit machines.) 2005-11-29 rkowen <rkowen> * ModuleCmd_Avail.c, ModuleCmd_Clear.c, ModuleCmd_Display.c, ModuleCmd_Help.c, ModuleCmd_List.c, ModuleCmd_Load.c, ModuleCmd_Switch.c, ModuleCmd_Whatis.c, cmdAlias.c, cmdConflict.c, cmdInfo.c, cmdIsLoaded.c, cmdLog.c, cmdMisc.c, cmdTrace.c, cmdUlvl.c, cmdUname.c, cmdVerbose.c, cmdVersion.c, cmdWhatis.c, error.c, getopt.c, init.c, locate_module.c, main.c, utility.c: Made all the 'First Edition' years to be 4 digits. * ModuleCmd_Clear.c, ModuleCmd_Init.c, ModuleCmd_Purge.c, ModuleCmd_Refresh.c, ModuleCmd_Update.c, ModuleCmd_Use.c, cmdAlias.c, cmdConflict.c, cmdInfo.c, cmdIsLoaded.c, cmdLog.c, cmdMisc.c, cmdModule.c, cmdPath.c, cmdSetenv.c, cmdTrace.c, cmdUlvl.c, cmdUname.c, cmdVerbose.c, cmdVersion.c, cmdWhatis.c, cmdXResource.c, init.c, locate_module.c, main.c, modules_def.h, utility.c, version.c: Added the CONST84 qualifier to eliminate compiler warnings, and the side effects. 2005-11-27 rkowen <rkowen> * config/tcl.m4: It's not an error (exit) if it can't find tclxConfig.sh! 2005-11-26 rkowen <rkowen> * Makefile.am: Should read the sf.net file-release-system notes before changing the ftp-sourceforge target. * Makefile.am, configure.ac, modules.lsm.in: Updated the LSM and the creation and handling of distribution tarballs. * Makefile.am, modulefiles/Makefile.am: Rolled in the Make versioning install fragment from the predeep branch. 2005-11-25 rkowen <rkowen> * xref/ModuleCmd_Avail.c.html, xref/ModuleCmd_Display.c.html, xref/ModuleCmd_Refresh.c.html, xref/ModuleCmd_Refresh.c.src.html, xref/ModuleCmd_Update.c.html, xref/ModuleCmd_Update.c.src.html, xref/cmdConflict.c.html, xref/cmdConflict.c.src.html, xref/cmdInfo.c.src.html, xref/cmdModule.c.html, xref/cmdModule.c.src.html, xref/cmdPath.c.html, xref/cmdPath.c.src.html, xref/cmdSetenv.c.html, xref/cmdSetenv.c.src.html, xref/cmdTrace.c.html, xref/cmdTrace.c.src.html, xref/cmdUlvl.c.html, xref/cmdUlvl.c.src.html, xref/cmdWhatis.c.html, xref/config.h.html, xref/config.h.src.html, xref/cxref.apdx.html, xref/cxref.css, xref/cxref.function, xref/cxref.html, xref/cxref.include, xref/cxref.variable, xref/error.c.html, xref/init.c.html, xref/main.c.html, xref/main.c.src.html, xref/modules_def.h.html, xref/modules_def.h.src.html, xref/utility.c.html, xref/version.c.html, xref/version.c.src.html: Updated the cxref docs with the "refresh" changes. * Makefile.am: Need to include ./docs in SUBDIRS * configure.ac, testsuite/modules.50-cmds/070-alias-proc.exp, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/078-refresh.exp: Finished the alias/refresh tests for sourcing a tmpfile, and also the special case for the Bourne shell where funcs and no aliases. 2005-11-22 rkowen <rkowen> * ModuleCmd_Refresh.c, ModuleCmd_Update.c, main.c, testsuite/modules.00-init/006-procs.exp, testsuite/modules.50-cmds/070-alias-proc.exp, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/077-alias-undo.exp, testsuite/modules.50-cmds/078-refresh.exp: Cleaned up the test proc code, and normalized the "refresh" code to the existing standard. 2005-11-21 rkowen <rkowen> * ChangeLog, Makefile.am, ModuleCmd_Refresh.c, cmdConflict.c, cmdInfo.c, cmdModule.c, cmdPath.c, cmdSetenv.c, cmdTrace.c, cmdUlvl.c, doc/module.1.in, main.c, modules_def.h: * ModuleCmd_Refresh.c: Like "update" but refreshes only the non-persistent attributes of the currently loaded modules, regardless of the state of the loaded modules (i.e. refresh aliases). (still needs some test code) * ChangeLog, cmdConflict.c, version.c: * cmdConflict.c: Fixed memory allocation bug in cmdPrereq(). When there is more than 1 argument to the prereq command, both savedlens and savedlists were indexed past what the initial malloc allowed. 2005-11-15 sirdude <sirdude> * tcl/modulecmd.tcl: Updated alias function so that it also works on ksh. I tested it on a couple of different sh shells and everything seems to work this way, and it wasn't working on some of them before. Kent 2005-11-15 rkowen <rkowen> * .cxref, Makefile.am, xref/ModuleCmd_Avail.c.html, xref/ModuleCmd_Avail.c.src.html, xref/ModuleCmd_Clear.c.html, xref/ModuleCmd_Clear.c.src.html, xref/ModuleCmd_Display.c.html, xref/ModuleCmd_Display.c.src.html, xref/ModuleCmd_Help.c.html, xref/ModuleCmd_Help.c.src.html, xref/ModuleCmd_Init.c.html, xref/ModuleCmd_Init.c.src.html, xref/ModuleCmd_List.c.html, xref/ModuleCmd_List.c.src.html, xref/ModuleCmd_Load.c.html, xref/ModuleCmd_Load.c.src.html, xref/ModuleCmd_Purge.c.html, xref/ModuleCmd_Purge.c.src.html, xref/ModuleCmd_Switch.c.html, xref/ModuleCmd_Switch.c.src.html, xref/ModuleCmd_Update.c.html, xref/ModuleCmd_Update.c.src.html, xref/ModuleCmd_Use.c.html, xref/ModuleCmd_Use.c.src.html, xref/ModuleCmd_Whatis.c.html, xref/ModuleCmd_Whatis.c.src.html, xref/cmdAlias.c.html, xref/cmdAlias.c.src.html, xref/cmdConflict.c.html, xref/cmdConflict.c.src.html, xref/cmdInfo.c.html, xref/cmdInfo.c.src.html, xref/cmdIsLoaded.c.html, xref/cmdIsLoaded.c.src.html, xref/cmdLog.c.html, xref/cmdLog.c.src.html, xref/cmdMisc.c.html, xref/cmdMisc.c.src.html, xref/cmdModule.c.html, xref/cmdModule.c.src.html, xref/cmdPath.c.html, xref/cmdPath.c.src.html, xref/cmdSetenv.c.html, xref/cmdSetenv.c.src.html, xref/cmdTrace.c.html, xref/cmdTrace.c.src.html, xref/cmdUlvl.c.html, xref/cmdUlvl.c.src.html, xref/cmdUname.c.html, xref/cmdUname.c.src.html, xref/cmdVerbose.c.html, xref/cmdVerbose.c.src.html, xref/cmdVersion.c.html, xref/cmdVersion.c.src.html, xref/cmdWhatis.c.html, xref/cmdWhatis.c.src.html, xref/cmdXResource.c.html, xref/cmdXResource.c.src.html, xref/config.h.html, xref/config.h.src.html, xref/cxref.apdx.html, xref/cxref.function, xref/cxref.html, xref/cxref.include, xref/cxref.typedef, xref/cxref.variable, xref/error.c.html, xref/error.c.src.html, xref/getopt.c.html, xref/getopt.c.src.html, xref/getopt.h.html, xref/getopt.h.src.html, xref/index.html, xref/init.c.html, xref/init.c.src.html, xref/locate_module.c.html, xref/locate_module.c.src.html, xref/main.c.html, xref/main.c.src.html, xref/modules_def.h.html, xref/modules_def.h.src.html, xref/utility.c.html, xref/utility.c.src.html, xref/version.c.html, xref/version.c.src.html: Updated the cxref docs 2005-11-14 rkowen <rkowen> * ChangeLog, Makefile.am, ModuleCmd_Avail.c, ModuleCmd_Bootstrap.c, ModuleCmd_Init.c, ModuleCmd_List.c, ModuleCmd_Update.c, ModuleCmd_Use.c, README, acinclude.m4, cmdConflict.c, cmdInfo.c, cmdIsLoaded.c, cmdModule.c, cmdPath.c, cmdTrace.c, cmdUlvl.c, cmdVersion.c, config/tcl.m4, configure.ac, doc/module.1.in, error.c, init.c, lib/.cvsignore, lib/Makefile.am, lib/avec.h, lib/avec.man, lib/avec/.cvsignore, lib/avec/avec_.c, lib/avec/avec_.h, lib/avec/avec_accessor.c, lib/avec/avec_alloc.c, lib/avec/avec_close.c, lib/avec/avec_ctor.c, lib/avec/avec_dealloc.c, lib/avec/avec_decrease.c, lib/avec/avec_delete.c, lib/avec/avec_dtor.c, lib/avec/avec_increase.c, lib/avec/avec_init.c, lib/avec/avec_insert.c, lib/avec/avec_keys.c, lib/avec/avec_lookup.c, lib/avec/avec_remove.c, lib/avec/avec_resize.c, lib/avec/avec_resize_percentage.c, lib/avec/avec_set_fns.c, lib/avec/avec_values.c, lib/avec/avec_walk.c, lib/avec/avec_walk_r.c, lib/configure.ac, lib/iprime.h, lib/iprime.man, lib/iprime/.cvsignore, lib/iprime/chprime.c, lib/iprime/hprime.c, lib/iprime/iprime.c, lib/iprime/iprime_.h, lib/iprime/iprime_lut.c, lib/iprime/lprime.c, lib/iprime/scprime.c, lib/iprime/ucprime.c, lib/iprime/uhprime.c, lib/iprime/uiprime.c, lib/iprime/ulprime.c, lib/isqrt.h, lib/isqrt.man, lib/isqrt/.cvsignore, lib/isqrt/chsqrt.c, lib/isqrt/hsqrt.c, lib/isqrt/isqrt.c, lib/isqrt/isqrt_.h, lib/isqrt/isqrt_lut.c, lib/isqrt/lsqrt.c, lib/isqrt/scsqrt.c, lib/isqrt/ucsrt.c, lib/isqrt/uhsqrt.c, lib/isqrt/uisqrt.c, lib/isqrt/ulsqrt.c, lib/list.h, lib/list.man, lib/list/.cvsignore, lib/list/list_.c, lib/list/list_.h, lib/list/list_append.c, lib/list/list_ctor.c, lib/list/list_delete.c, lib/list/list_dtor.c, lib/list/list_exists.c, lib/list/list_first.c, lib/list/list_insert.c, lib/list/list_last.c, lib/list/list_number.c, lib/list/list_pop.c, lib/list/list_push.c, lib/list/list_qsort.c, lib/list/list_shift.c, lib/list/list_sizeof.c, lib/list/list_swap.c, lib/list/list_unshift.c, lib/memdebug.c, lib/memdebug.h, lib/memdebug.man, lib/strmalloc.c, lib/strmalloc.h, lib/strmalloc.man, lib/tests/.cvsignore, lib/tests/Makefile.am, lib/tests/tavec.c, lib/tests/tiprime.c, lib/tests/tisqrt.c, lib/tests/tstrmalloc.c, lib/tests/tuvec.c, lib/uvec.h, lib/uvec.man, lib/uvec/.cvsignore, lib/uvec/str2uvec.c, lib/uvec/uvec2str.c, lib/uvec/uvec2uvec.c, lib/uvec/uvec_accessor.c, lib/uvec/uvec_add.c, lib/uvec/uvec_alloc.c, lib/uvec/uvec_close.c, lib/uvec/uvec_copy.c, lib/uvec/uvec_copy_str.c, lib/uvec/uvec_copy_vec.c, lib/uvec/uvec_count_tok.c, lib/uvec/uvec_ctor.c, lib/uvec/uvec_dealloc.c, lib/uvec/uvec_dtor.c, lib/uvec/uvec_init.c, lib/uvec/uvec_insert.c, lib/uvec/uvec_push.c, lib/uvec/uvec_randomize.c, lib/uvec/uvec_reverse.c, lib/uvec/uvec_shift.c, lib/uvec/uvec_sort.c, lib/uvec/uvec_strfns.c, lib/uvec/uvec_strfree.c, lib/uvec/vec2uvec.c, locate_module.c, main.c, modulefiles/module-cvs.in, modules_def.h, testsuite/.cvsignore, testsuite/config/unix.exp, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/006-procs.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.00-init/015-version.exp, testsuite/modules.00-init/030-shells.exp, testsuite/modules.00-init/050-modpath.exp, testsuite/modules.00-init/080-begenv.exp, testsuite/modules.20-locate/040-alias.exp, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.20-locate/046-getsym.exp, testsuite/modules.20-locate/047-symerrs.exp, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.30-userlvl/040-advanced.exp, testsuite/modules.30-userlvl/045-adv.exp, testsuite/modules.30-userlvl/050-expert.exp, testsuite/modules.30-userlvl/055-exp.exp, testsuite/modules.35-trace/010-init_ts.exp, testsuite/modules.35-trace/020-default.exp, testsuite/modules.35-trace/030-all-on.exp, testsuite/modules.35-trace/031-all-off.exp, testsuite/modules.35-trace/040-load-all.exp, testsuite/modules.35-trace/041-load-all.exp, testsuite/modules.35-trace/042-load-on.exp, testsuite/modules.35-trace/043-load-onoff.exp, testsuite/modules.35-trace/044-load-ovr.exp, testsuite/modules.35-trace/050-disp-onoff.exp, testsuite/modules.35-trace/060-dilo-onoff.exp, testsuite/modules.35-trace/070-colon.exp, testsuite/modules.35-trace/095-cleanup.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/020-setenv.exp, testsuite/modules.50-cmds/022-setenv-eschars.exp, testsuite/modules.50-cmds/025-setenv-undo.exp, testsuite/modules.50-cmds/030-unsetenv.exp, testsuite/modules.50-cmds/035-unsetenv-undo.exp, testsuite/modules.50-cmds/036-unsetenv-x.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/070-alias-proc.exp, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/077-alias-undo.exp, testsuite/modules.50-cmds/080-info-name.exp, testsuite/modules.50-cmds/081-info-user.exp, testsuite/modules.50-cmds/082-info-user-exp.exp, testsuite/modules.50-cmds/083-info-mode.exp, testsuite/modules.50-cmds/084-info-mode-exp.exp, testsuite/modules.50-cmds/085-info-flags.exp, testsuite/modules.50-cmds/086-info-shells.exp, testsuite/modules.50-cmds/087-info-shells-exp.exp, testsuite/modules.50-cmds/088-info-isloaded.exp, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/101-badfac.exp, testsuite/modules.50-cmds/110-verbose.exp, testsuite/modules.50-cmds/115-verbose-msg.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp, testsuite/modules.50-cmds/140-system.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/200-break.exp, testsuite/modules.70-maint/020-update.exp, testsuite/modules.70-maint/030-purge.exp, testsuite/modules.70-maint/050-whatis-load.exp, testsuite/modules.70-maint/060-apropos.exp, testsuite/modules.70-maint/095-cleanup.exp, testsuite/modules.95-version/020-load.exp, testsuite/modules.95-version/020-unload.exp, testsuite/modules.95-version/022-load2.exp, testsuite/modules.95-version/022-unload2.exp, testsuite/modules.95-version/040-xgetenv.exp, testsuite/modules.95-version/999-cleanup.exp, utility.c, version.c: Merged in the modules_3_2_predeep_branch branch to the main trunk. Removed the hash library. 2005-07-21 sirdude <sirdude> * tcl/modulecmd.tcl: Made it so g_debug is passed to the module files. 2005-05-09 sirdude <sirdude> * tcl/modulecmd.tcl: Removed error message that shouldn't be print there. It was printing an error complaining it couldn't find a module even though it could. 2005-05-05 sirdude <sirdude> * tcl/modulecmd.tcl: Added a space between columns in module list command. Kent 2005-04-27 sirdude <sirdude> * tcl/modulecmd.tcl: Fix so module swap perl perl works the same as module swap perl (before was different if you had a different version than the default loaded) Kent * tcl/modulecmd.tcl: Ran modulecmd.tcl through frink since no one complained about doing it. Kent * tcl/modulecmd.tcl: added lazy find for module switch Example: Say you have the following modules perl/5.6 perl/5.8(default) and you have perl/5.6 loaded currently. Now you can do module switch perl perl and it will unload perl/5.6 and load perl/5.8 before it would error saying the perl module is not loaded. Kent 2005-04-19 sirdude <sirdude> * tcl/modulecmd.tcl: I added -l and -t options for module list and module avail also fixed resolveModuleVersionOrAlias up a bit so it deals with module(default) Kent 2005-04-15 sirdude <sirdude> * tcl/modulecmd.tcl: fix (default) display on modules that are "deep" soft/xemacs/21.4 etc.... Kent * tcl/modulecmd.tcl: made reload unload all modules then load them all in the proper order. Similar to module swap. Kent 2005-04-14 sirdude <sirdude> * tcl/modulecmd.tcl: Modified module switch so it unloaded last module first down to the module its swapping out and then reloaded everything in order. Before it was unloading them starting at the module to be swapped out to the end and then loading them in the same order. Probably not a big deal but code is actually shorter now and is probably more correct. I also added -a and -append as alternatives to --append and --prepend for module use. (There were comments saying it would be nice to have that) Kent * tcl/modulecmd.tcl: fixes module whatis problem with (default) before it wasn't able to find modules that had a .version file. Kent * tcl/modulecmd.tcl: Added two more globals DEF_COLUMNS and MODULES_CURRENT_VERSION and removed hardcoded bits relating to them. Also removed some misc code that was commented out and no longer used. Kent 2005-04-08 sirdude <sirdude> * tcl/modulecmd.tcl: Fix module swap so that it unloads old module and everything after it then loads new and everything that was after old. Kent * tcl/modulecmd.tcl: Fix up module init(cmds) I made them behave like the c versions example before the initadd added a module to every module load line now it just does the first. I have a ~/.modules directory and before this caused the init(cmds) to fail. Also made it so it only changes one file not all . files it goes through. Kent 2005-04-07 sirdude <sirdude> * tcl/modulecmd.tcl: Moved some global variables up to the top of the file. Kent 2005-04-06 sirdude <sirdude> * tcl/modulecmd.tcl: Modified patch for prereq's I also fixed a small problem in the module show for prereq's Kent * tcl/modulecmd.tcl: Rodney Mach's unalias fix Kent 2004-11-18 lakata <lakata> * tcl/README-EMACS.txt, tcl/init/.cvsignore, tcl/init/lisp.in: submitted by tbennett@nvidia.com * tcl/init/Makefile, tcl/modulecmd.tcl: patch for Emacs from tbennett@nvidia.com 2004-11-05 lakata <lakata> * tcl/modulecmd.tcl: added more error checking to init/modulerc. probably should change this yet again to standardize the naming convention * tcl/modulecmd.tcl: changed hardcoded path to /home/Mark etc to $MODULESHOME 2004-10-22 lakata <lakata> * tcl/init/README.txt: added instructions on using the new autoinit feature * tcl/modulecmd.tcl: added autoinit feature. not documented until we get some feedback 2004-10-22 harlan <harlan> * locate_module.c: cleanup/refactor * configure.ac: cleanup * ModuleCmd_Avail.c: USE_COLCOMP -> DEF_COLLATE_BY_NUMBER * Makefile.am: Alphabetize... 2004-10-15 lakata <lakata> * tcl/modulecmd.tcl: * made compatibility changes with tcl < 8.1. string equal changed to string match and changes to regular expressions. There is now a caveat: module init* commands won't work if there are tabs in your startup file around the module commands if tcl < 8.1. * Fixed display so that setenv values don't give an error if used later in the module during display * Fixed bug with Perl. rendersetting output now ends with "1;" for perl so that the require command works correctly * Changed noexistent path error to warning in cmdModuleUse. Otherwise, if you gave more than one path, some of the other legal paths may not get added. This is a revert back to how modulecmd was originally and probably breaks compatability with the C version in this regard 2004-10-13 lakata <lakata> * tcl/modulecmd.tcl: * Fixed ModulesHelp so that it doesn't error out when not present * Added module-verision,module-alias, module-trace, module-user, module-verbosity, and module-log to module file execution. All but module-version and module-alias give a warning that it is not implemented * Added module-trace, module-user, module-verbosity, and module-log to modulerc execution. All give warnings that the funcionatlity is not implemented * Added #%Module checking on .version and .modulerc files * execute-version will now add version defaults to the global defaults array like .modulerc files do * .version files are no longer executed if a .modulerc is executed in the same directory * module-info symbols command implemented (could use more testing) * module-info version command implemented (could use more testing) * moduule-info alias command implemented * module-version - fixed problem of adding duplicate version aliases to global hash * module-alias updated to keep track of aliases by module name in global hash * Fix unload-path so that setenv-path followed by prepend-path works during unload * fixed bug in is-loaded. It took a list of modules as an argument but would return true if only one of the arguments was loaded. Now all arguments have to be loaded to return true. * Added getVersAliasList function. Returns list of default and version aliases given a modulename/version * Added default and version alias information to avail and list output * Added a few more "----" to the module list output * tcl/modulecmd.tcl: modulecmd.tcl 2004-10-07 lakata <lakata> * tcl/modulecmd.tcl: (1) Andrew Barbers changes to fix some bugs. (2) Mark Lakatas change to sym links under cygwin. removed check for MODULEPATH, since you can use "module use ..." to set it 2004-10-05 lakata <lakata> * tcl/modulecmd.tcl: from Andrew Barber: Here is another update. This one has some tricky changes. Most of it was done to try and get the testsuite to pass. I added a few more features too. The biggest changes were in: getPathToModule - now it can resolve aliases found in .modulerc and .version files , runModulerc - now this is responsible for finding and executing the global .modulerc files (new feature for tcl version) * tcl/modulecmd.tcl: patch from Tony Bennett. need for gentoo system 2004-10-01 lakata <lakata> * tcl/modulecmd.tcl: Andrew Barbers changes: * added module-verision and module-alias commands, * added automatic of execution .modulerc files found in module directories, * added switch processing and -debug switch for debug messages 2004-09-30 lakata <lakata> * tcl/modulecmd.tcl: (1) added more commands to the internal "module" command (2) added all of the init* commands, like initadd (3) changed the help message slightly 2004-09-23 sirdude <sirdude> * tcl/modulecmd.tcl: David Mores patch so that first module in module list is shown again. Sorry about that I should have caught that before... Kent * tcl/modulecmd.tcl: Mark Moe's patch to prevent infinate loop when you have module a loading module b where module b has a .version that points to unavailable version of module b Kent 2004-09-21 sirdude <sirdude> * tcl/modulecmd.tcl: David Mores, patches to the COLUMNS stuff. Kent * tcl/modulecmd.tcl: Mark Moe's patch for skipping 0 length modules in module list and adding the printing of: "Currently Loaded Modulesfiles:" Kent 2004-09-16 sirdude <sirdude> * tcl/modulecmd.tcl: Harlan Stenn's Patch from Phong Nguyen, It basically wraps the openning of a tmpfile in a catch command I also updated the error message after it to use the tmpfile var instead of hardcoding it... Kent 2004-05-25 sirdude <sirdude> * tcl/init/bash.in, tcl/init/csh.in, tcl/init/ksh.in, tcl/init/perl.in, tcl/init/python.in, tcl/init/sh.in, tcl/init/tcsh.in, tcl/init/zsh.in: tcl version of modules now looks at environment var TCLSH if it exits and uses that first. Suggested by David Astrom. Kent * tcl/modulecmd.tcl: Use env(COLUMNS) if its defined instead of a hard coded number. submitted by David Astrom through Mark Lakata. Kent 2004-04-21 sirdude <sirdude> * tcl/modulecmd.tcl: David Mores patch to prevent tcl version from hanging with a .version file that does not set the ModulesVersion correctly. Kent 2004-01-16 sirdude <sirdude> * tcl/Makefile: removed clean and test from the default make. Kent * tcl/Makefile, testsuite/config/unix.exp: Made it so that the testsuite works with the tcl version of modules. Current stats for the tcl version are: # of expected passes 146 # of unexpected failures 376 Not too shabby, I'm guessing it will be fairly straight forward to increase this by quite a bit. Kent 2004-01-15 sirdude <sirdude> * tcl/init/bash.in, tcl/init/csh.in, tcl/init/ksh.in, tcl/init/perl.in, tcl/init/python.in, tcl/init/sh.in, tcl/init/tcsh.in, tcl/init/zsh.in: Modified the tcl init files so that they try to find tclsh, this should make them quite a bit faster assuming they find it. (This way it locates the shell just once instead of for every single command.) Kent * tcl/modulecmd.tcl: Improved module help functionatlity for the tcl version of modules. now you can type module help (module) also commiting the patch someone submitted to the board that allows for .version files in directorys other than the top level. (for tcl version only) Kent Mein 2003-10-30 harlan <harlan> * tcl/modulecmd.tcl: bash requires a space after the { on function definitions. * tcl/modulecmd.tcl: Remove the /tmp file early. Use the "function" keyword when creating sh functions; otherwise if the function already exists the name gets expanded on some shells. 2003-10-28 lakata <lakata> * tcl/modulecmd.tcl: prevent "break" from generating an error message 2003-10-27 lakata <lakata> * tcl/modulecmd.tcl: 1) module-info shell and shelltype would generate an TCL error when used (FIXED) 2) remove-path had two typos in it (FIXED) 3) Added detection of full path in getPathToModule procedure 2003-10-20 lakata <lakata> * tcl/modulecmd.tcl: 1) Add support for the other shells that the C version includes 2) Add support for prereq command 3) Replace the "/bin/uname" calls to use the tcl_platform variable and "info hostname" command Enclosed are my latest modulecmd.tcl updates. I have added most of the features that I thought it needed and implemented the slave interpreter to execute modulefile in. I have tested it to some degree but not very seriously. Richard.M.Born@seagate.com 2003-10-15 lakata <lakata> * tcl/modulecmd.tcl: fixed two bugs in the display command 2003-10-07 lakata <lakata> * tcl/modulecmd.tcl: cleaned up the mode and modulename settings that used to be access via the upvar. also changed the calling convention for getPathToModule, which now does not throw an exception for minor warnings * tcl/modulecmd.tcl: fixed a bug where the result of the catch is either an error or the last command 2003-10-06 lakata <lakata> * tcl/modulecmd.tcl: fixed a bug in the popMode command and made it backward compatible with tcl 8.0 * tcl/modulecmd.tcl: 1. pulled all references to puts stderr to report/reportWarnings/reportInternalBug. 2. changed the way the g_mode variable is handled. Instead of relying on the call stack, it now uses an explicit stack, which should solve any problems with using other namespaces 3. removed a bunch of debugging statements. 4. fixed the way errors are handled, giving more meaningful responses. 5. if an error is caught in load, the env/alias settings are NOT updated and restored to a previous state. for instance, in a conflict this is important. * tcl/modulecmd.tcl: fixed bug in listModules that was failing on cygwin 2003-10-03 lakata <lakata> * tcl/modulecmd.tcl: Proxy check in for Richard.M.Born@seagate.com. He wrote: 1) It didn't handle modulefiles in the main directory for commands like module avail 2) It didn't define the ModulesCurrentModulefile variable 3) It didn't ignore certain temp files (*~, #*#) 4) It didn't look for the Modulefile MagicCookie to filter out non-modulefiles I have updated modulecmd.tcl to address these issues. I have removed lsHack and replaced it with listModules procedure. I am not familiar with the glob issue that you noted for Cygwin so you may want to run a few test cases to see if the new function still works for you. I also updated the module paths command to what I think you were intending. 2003-08-08 harlan <harlan> * tcl/modulecmd.tcl: Changes to lsHack for cmdModulePath and friends. 2003-08-07 harlan <harlan> * tcl/modulecmd.tcl: Typo * tcl/modulecmd.tcl: Add $Revision$ to the version * tcl/modulecmd.tcl: Initial support for "module path". 2003-08-02 harlan <harlan> * tcl/modulecmd.tcl: /bin/sh has no shell functions. Avoid an extra call to getPathToModule 2003-08-01 harlan <harlan> * tcl/modulecmd.tcl: whitespace cleanup, lose cruft. 2003-07-30 lakata <lakata> * tcl/README.txt, tcl/modulecmd.tcl: version 0.98: fixed a bug in the error_count (missing closing brace). also implemented check to abort the tempfile sourcing if the tempfile is empty. this is to be more blackboxish, avoiding relying on the shell to do a clean up. one of our users is not using the module command correctly, and it is created a whole bunch of empty /tmp/modulescript files in the /tmp dir. 2003-07-15 harlan <harlan> * tcl/modulecmd.tcl: Begin to handle errors. 2003-07-10 harlan <harlan> * ChangeLog, tcl/modulecmd.tcl: * tcl/modulecmd.tcl: If g_force is set, ignore *_modshare. When we produce a shell function, preface the definition with "function" in case it's already defined. Default g_force to 1 now. 2003-06-26 harlan <harlan> * tcl/modulecmd.tcl: ModuleTcl: 0.97 Aliases: add/load, rm/inload, nodename/node We need to eval more "cmdModule{Unl,L}oad $arg" lines to: Implement --append (and --prepend) for cmdModuleUse Use -dictionary lsorts to provide an easy substitute for colcomp(). Added SCCS and RCS to the ignoreDir list. Moved ignoreDir processing to lsHack to fix a problem. Make sure an empty modulefile direcoty doesn't cause an error. 2003-06-02 harlan <harlan> * tcl/init/README.txt: Reformat some long lines. 2003-05-30 lakata <lakata> * tcl/init/README.txt, tcl/init/bash.in, tcl/init/csh.in, tcl/init/ksh.in, tcl/init/modulerc, tcl/init/perl.in, tcl/init/sh.in, tcl/init/tcsh.in, tcl/init/zsh.in: changed the way MODULEPATH is set up. since this is another environment variable like all the others, it is now set using the module command itself. pretty sneaky, huh? * tcl/modulecmd.tcl: 1. added the "source" command (experimental) 2. added sanity checking to verify that something external did not muck with path and path_modshare variables. 3. fixed a bug if you use tcsh and your paths get longer than 1024 characters. Previously, it was truncating the path, but this can get you into trouble if important things like /usr/bin or /usr/local/bin are truncated. The real solution is to STOP USING TCSH... use zsh instead. 2003-03-28 lakata <lakata> * tcl/README.txt, tcl/modulecmd.tcl: changes for cygwin. files should not have cr/lf (DOS) endings. * tcl/init/Makefile, tcl/init/README.txt, tcl/init/bash, tcl/init/bash.in, tcl/init/{csh => csh.in}, tcl/init/ksh, tcl/init/ksh.in, tcl/init/{perl => perl.in}, tcl/init/{python => python.in}, tcl/init/sh, tcl/init/sh.in, tcl/init/{tcsh => tcsh.in}, tcl/init/zsh, tcl/init/zsh.in: made init files more general 2003-01-22 lakata <lakata> * tcl/init/perl: error checking if something goes wrong in perl * tcl/modulecmd.tcl: fixed bugs with corrupted env vars, improved the reliability of _modshare variables 2002-11-29 lakata <lakata> * tcl/modulecmd.tcl: changed help message * tcl/README.txt, tcl/init/bash, tcl/init/csh, tcl/init/ksh, tcl/init/perl, tcl/init/python, tcl/init/sh, tcl/init/tcsh, tcl/init/zsh, tcl/init/zsh.debug, tcl/modulecmd.tcl: first check in 2002-09-18 harlan <harlan> * ChangeLog, Makefile.am, lib/.cvsignore, lib/Makefile.am, lib/tests/Makefile.am: * Makefile.am (modulecmd_CFLAGS): Use X_CFLAGS and TCL_INCLUDES. * lib/tests/Makefile.am (EXTRA_PROGRAMS): Renamed from noinst_PROGRAMS. Lose the .x suffixes. * lib/Makefile.am (ACLOCAL_AMFLAGS): Look in ../config/ . 2002-09-16 rkowen <rkowen> * ChangeLog, Makefile.am, ModuleCmd_List.c, TODO, colcomp.c, configure.ac, lib/uvec.man, locate_module.c, main.c, modules_def.h, utility.c: 2002-09-16 R.K. Owen <rk@owen.sj.ca.us> * colcomp.c: removed * utility.c: added colcomp.c contents * Makefile.am: removed colcomp.c * main.c: Added DEF_COLLATE_BY_NUMBER output for --version * configure.ac: changed USE_COLCOMP to DEF_COLLATE_BY_NUMBER, and added memdebug * locate_module.c: changed USE_COLCOMP and GetModuleName for deep dirs. * modules_def.h: check for HAVE_CONFIG_H, and added memdebug * ModuleCmd_List.c: Simplified using uvec objects 2002-09-13 rkowen <rkowen> * ChangeLog, config/.cvsignore, init/.cvsignore: 2002-09-12 R.K. Owen <rk@owen.sj.ca.us> * config/.cvsignore: New File: Ignore autogenerated files. * init/.cvsignore: Ignore autogenerated files. * .cvsignore, ChangeLog, doc/.cvsignore, etc/.cvsignore, ext/.cvsignore, lib/.cvsignore, lib/tests/.cvsignore, lib/tests/Makefile.am, modulefiles/.cvsignore: 2002-09-12 R.K. Owen <rk@owen.sj.ca.us> * .cvsignore: Ignore autogenerated files. * doc/.cvsignore: Ignore autogenerated files. * etc/.cvsignore: Ignore autogenerated files. * ext/.cvsignore: Ignore autogenerated files. * lib/.cvsignore: Ignore autogenerated files. * lib/tests/.cvsignore: Ignore autogenerated files. * modulefiles/.cvsignore: Ignore autogenerated files. * lib/tests/Makefile.am: Tweeked for autoreconf * ChangeLog, README, lib/Makefile.am, lib/aclocal.m4, lib/configure.ac, lib/tests/tuvec.c, lib/uvec.h, lib/uvec/uvec_copy_str.c, lib/uvec/uvec_strfree.c: 2002-09-12 R.K. Owen <rk@owen.sj.ca.us> * README: Updated the anonymous CVS invocation. * lib/aclocal.m4: Deleted auto* generated file. * lib/configure.ac: Tweeked to autoreconf * lib/Makefile.am: Tweeked to autoreconf * lib/uvec.h: Added uvec_strfree * lib/uvec/uvec_copy_str.c: Uses uvec string fns * lib/uvec/uvec_copy_vec.c: Uses uvec string fns * lib/uvec/uvec_strfree.c: New file: to dealloc uvec2str() generated strings * lib/tests/tuvec.c: Updated for uvec changes 2002-09-12 harlan <harlan> * doc/Makefile.am, lib/config.h.in, lib/configure: * doc/Makefile.am: Added file. * lib/configure: Remove auto*-generated file. * lib/config.h.in: Ditto. * ChangeLog, Makefile.in, README, aclocal.m4, config.h.in, config/compile, config/depcomp, config/install-sh, config/missing, config/mkinstalldirs, configure, doc/Makefile.in, etc/Makefile.in, ext/Makefile.in, init/Makefile.in, lib/Makefile.in, lib/tests/Makefile.in, modulefiles/Makefile.in: * README: Update the instructions for using the CVS version of modules. * modulefiles/Makefile.in: Deleted auto* generated file. * lib/tests/Makefile.in: Ditto. * lib/Makefile.in: Ditto. * init/Makefile.in: Ditto. * ext/Makefile.in: Ditto. * etc/Makefile.in: Ditto. * doc/Makefile.in: Ditto. * config/mkinstalldirs: Ditto. * config/missing: Ditto. * config/install-sh: Ditto. * config/depcomp: Ditto. * config/compile: Ditto. * configure: Ditto. * config.h.in: Ditto. * aclocal.m4: Ditto. * Makefile.in: Ditto. * ChangeLog: Renamed ChangeLog to NEWS, started a new ChangeLog. * Makefile.am, ModuleCmd_Avail.c, NEWS, colcomp.c, configure.ac, lib/Makefile, locate_module.c: * colcomp.c: New file. Alternative collating algorithm that sorts numeric substrings numerically (mostly). * lib/Makefile: Remove auto*-generated file. * locate_module.c (SortedDirList): Ignore SCCS/ subdirs, too. * configure.ac: Disable our "look" for RUNTEST; it drives auto* crazy. Added the --with-file-collate={string,number} test, which provides a way to enable USE_COLCOMP. * ModuleCmd_Avail.c (fi_ent_cmp): USE_COLCOMP when told to do so. * locate_module.c (filename_compare): Ditto. * Makefile.am (modulecmd_LDFLAGS): lib is in the builddir, not the srcdir. (modulecmd_SOURCES): Added colcomp.c . * ChangeLog => NEWS: Rename ChangeLog to NEWS. 2002-08-27 rkowen <rkowen> * lib/Makefile, lib/Makefile.am, lib/Makefile.in, lib/memdebug.c, lib/memdebug.h, lib/memdebug.man, lib/tests/Makefile.in: Added the memdebug headerfile and sources. 2002-08-22 rkowen <rkowen> * cmdVersion.c, locate_module.c, modules_def.h: Fixed up GetDefault to handle .modulerc and .version files, where the latter will read the env.var. defined in .version and do a module-version so that the modlist data can be updated. These mods handle deep dirs on "module load" ... now need to fix up the rest! There's also now an amazing amount of cruft to weed out. 2002-08-14 lakata <lakata> * README: updated docs to reflect new configure (TCL paths) * locate_module.c, modules_def.h: removed compiler warnings about const char* * configure, configure.ac: added hack for linux that cant do -lX11 with -L/usr/X11R6/lib * cmdInfo.c, cmdVersion.c: removed compiler warnings * Makefile.in: fixed LDFLAGS build problem when not building in orig dist. directory 2002-08-02 rkowen <rkowen> * Makefile.am, Makefile.in, ModuleCmd_Avail.c, ModuleCmd_Display.c, ModuleCmd_Init.c, ModuleCmd_Load.c, ModuleCmd_Switch.c, aclocal.m4, cmdConflict.c, cmdInfo.c, cmdIsLoaded.c, cmdPath.c, cmdVersion.c, configure, configure.ac, error.c, etc/Makefile.in, ext/Makefile.in, init/Makefile.in, locate_module.c, main.c, modulefiles/Makefile.in, modules_def.h, testsuite/modules.00-init/080-begenv.exp, utility.c: A whole slew of changes progressing to deap modulefile directories. The current is not usuable, but will eventually be. These changes are checked in for safe keeping while R.K.Owen is on vacation. * xref/ModuleCmd_Avail.c.html, xref/ModuleCmd_Clear.c.html, xref/ModuleCmd_Display.c.html, xref/ModuleCmd_Help.c.html, xref/ModuleCmd_Init.c.html, xref/ModuleCmd_List.c.html, xref/ModuleCmd_Load.c.html, xref/ModuleCmd_Purge.c.html, xref/ModuleCmd_Switch.c.html, xref/ModuleCmd_Update.c.html, xref/ModuleCmd_Use.c.html, xref/ModuleCmd_Whatis.c.html, xref/cmdAlias.c.html, xref/cmdConflict.c.html, xref/cmdInfo.c.html, xref/cmdIsLoaded.c.html, xref/cmdLog.c.html, xref/cmdMisc.c.html, xref/cmdModule.c.html, xref/cmdPath.c.html, xref/cmdSetenv.c.html, xref/cmdTrace.c.html, xref/cmdUlvl.c.html, xref/cmdUname.c.html, xref/cmdVerbose.c.html, xref/cmdVersion.c.html, xref/cmdWhatis.c.html, xref/cxref.apdx.html, xref/cxref.function, xref/cxref.html, xref/cxref.include, xref/cxref.typedef, xref/cxref.variable, xref/error.c.html, xref/getopt.c.html, xref/init.c.html, xref/locate_module.c.html, xref/main.c.html, xref/utility.c.html, xref/version.c.html: Updated the xref html, but not current. * lib/Makefile, lib/Makefile.in, lib/uvec.h, lib/uvec.man, lib/uvec/uvec_copy_str.c, lib/uvec/uvec_copy_vec.c, lib/uvec/uvec_strfns.c: Changed how uvec sets/gets the uvec_strfns. 2002-07-29 rkowen <rkowen> * lib/Makefile.am, lib/list.h, lib/list.man, lib/list/.cvsignore, lib/list/list_.c, lib/list/list_.h, lib/list/list_append.c, lib/list/list_ctor.c, lib/list/list_delete.c, lib/list/list_dtor.c, lib/list/list_exists.c, lib/list/list_first.c, lib/list/list_insert.c, lib/list/list_last.c, lib/list/list_number.c, lib/list/list_pop.c, lib/list/list_push.c, lib/list/list_qsort.c, lib/list/list_shift.c, lib/list/list_sizeof.c, lib/list/list_swap.c, lib/list/list_unshift.c: Added the list object for doubly linked lists. 2002-07-18 rkowen <rkowen> * lib/config.h.in: Need this also. * lib/Makefile.in: Forgot this one. * lib/Makefile, lib/Makefile.am, lib/aclocal.m4, lib/configure, lib/configure.ac, lib/tests/.cvsignore, lib/tests/Makefile.am, lib/tests/Makefile.in: Adding in the automake/autoconf files for the modules library. * lib/strmalloc.c, lib/strmalloc.h, lib/strmalloc.man, lib/tests/tstrmalloc.c: Added the strmalloc code to the modules library, this will be useful for creating new strings with aliases expanded. * lib/.cvsignore, lib/tests/tuvec.c, lib/uvec.h, lib/uvec.man, lib/uvec/.cvsignore, lib/uvec/str2uvec.c, lib/uvec/uvec2str.c, lib/uvec/uvec2uvec.c, lib/uvec/uvec_accessor.c, lib/uvec/uvec_add.c, lib/uvec/uvec_alloc.c, lib/uvec/uvec_close.c, lib/uvec/uvec_copy.c, lib/uvec/uvec_copy_str.c, lib/uvec/uvec_copy_vec.c, lib/uvec/uvec_count_tok.c, lib/uvec/uvec_ctor.c, lib/uvec/uvec_dealloc.c, lib/uvec/uvec_dtor.c, lib/uvec/uvec_init.c, lib/uvec/uvec_insert.c, lib/uvec/uvec_push.c, lib/uvec/uvec_randomize.c, lib/uvec/uvec_reverse.c, lib/uvec/uvec_shift.c, lib/uvec/uvec_sort.c, lib/uvec/uvec_strfns.c, lib/uvec/vec2uvec.c: Added the uvec code, which provides basic unix vector capabilities. A unix vector is a NULL terminated array of char * strings. An example of this is *argv[] or *environ[]. * lib/isqrt.h, lib/isqrt.man, lib/isqrt/.cvsignore, lib/isqrt/chsqrt.c, lib/isqrt/hsqrt.c, lib/isqrt/isqrt.c, lib/isqrt/isqrt_.h, lib/isqrt/isqrt_lut.c, lib/isqrt/lsqrt.c, lib/isqrt/scsqrt.c, lib/isqrt/ucsrt.c, lib/isqrt/uhsqrt.c, lib/isqrt/uisqrt.c, lib/isqrt/ulsqrt.c, lib/tests/tisqrt.c: Adding in the isqrt code to the modules library, this is needed by iprime (which is needed by avec). * lib/iprime.h, lib/iprime.man, lib/iprime/.cvsignore, lib/iprime/chprime.c, lib/iprime/hprime.c, lib/iprime/iprime.c, lib/iprime/iprime_.h, lib/iprime/iprime_lut.c, lib/iprime/lprime.c, lib/iprime/scprime.c, lib/iprime/ucprime.c, lib/iprime/uhprime.c, lib/iprime/uiprime.c, lib/iprime/ulprime.c, lib/tests/tiprime.c: Added the iprime code to the modules library. This is needed by avec to compute the optimal hash size. * lib/avec.h, lib/avec.man, lib/avec/.cvsignore, lib/avec/avec_.c, lib/avec/avec_.h, lib/avec/avec_accessor.c, lib/avec/avec_alloc.c, lib/avec/avec_close.c, lib/avec/avec_ctor.c, lib/avec/avec_dealloc.c, lib/avec/avec_decrease.c, lib/avec/avec_delete.c, lib/avec/avec_dtor.c, lib/avec/avec_increase.c, lib/avec/avec_init.c, lib/avec/avec_insert.c, lib/avec/avec_keys.c, lib/avec/avec_lookup.c, lib/avec/avec_remove.c, lib/avec/avec_resize.c, lib/avec/avec_resize_percentage.c, lib/avec/avec_set_fns.c, lib/avec/avec_values.c, lib/avec/avec_walk.c, lib/avec/avec_walk_r.c, lib/tests/tavec.c: Added an associative vector object to the modules library. 2002-06-17 rkowen <rkowen> * RKOConfigure, locate_module.c: Minor changes in preparation for big ones. * ChangeLog, ModuleCmd_Avail.c, ModuleCmd_Update.c, ModuleCmd_Use.c, config.h.in, configure, configure.ac, doc/module.1.in, error.c, init.c, main.c, modules_def.h, testsuite/config/unix.exp, testsuite/modules.00-init/006-procs.exp, testsuite/modules.00-init/080-begenv.exp, testsuite/modules.70-maint/020-update.exp: * Made the .modulesbeginenv facility optional (default is not to have it) * default for cache is now "no" * Added version_test() to testsuite to make some of the tests conditional on the values generated by --version. - the configure options help is formatted with AC_HELP_STRING 2002-06-14 rkowen <rkowen> * .cvsignore, ChangeLog, Makefile.am, Makefile.in, config.h.in, config/compile, configure, configure.ac, doc/Makefile.in, etc/.cvsignore, etc/Makefile.am, etc/Makefile.in, ext/.cvsignore, ext/Makefile.am, ext/Makefile.in, init/Makefile.am, init/Makefile.in, init/filter, init/zsh.in, modulefiles/Makefile.am, modulefiles/Makefile.in, testsuite/etc/.cvsignore: * Reworked every configure-based file - uses automake to generate most of the Makefile.in - renamed configure.in to configure.ac per autoconf - Versioning is optional now with a configure option - reworked the init scripts for versioning or not - eliminated acconfig.h and put templates in configure.ac - make install now honors the DESTDIR variable for package builds - honors bindir for modulecmd location (but the init scripts are only correct if no versioning) * Collected the usage info and now it can be displayed with the --help or -H option (same as help) * --version now gives most of the optional configure parameters for easy debugging of problems * Fixed bootstrap to just source the appropriate init script * Makefile.am, Makefile.in, acconfig.h, config.h.in, configure, configure.ac, etc/Makefile.am, etc/Makefile.in, etc/add.modules.in, etc/global/bashrc.in, etc/global/csh.cshrc.in, etc/skel/.cshrc.in, etc/skel/.kshenv.in, ext/Makefile.am, ext/Makefile.in, ext/add.ext.in, ext/common/.cshrc.in, ext/common/.kshenv.in, init/.modulespath.in, init/bash.in, init/csh.in, init/ksh.in, init/perl.in, init/python.in, init/sh.in, init/zsh.in: Removed the acconfig.h file since it's essentially in the configure.ac now. Reworked all the init,skel,add.* files to handle versioning or no. Added Makefile.am to ./etc/ and ./ext/ for cleaner installs. 2002-06-13 rkowen <rkowen> * Makefile.am, Makefile.in, ModuleCmd_Help.c, acconfig.h, config.h.in, doc/module.1.in, main.c, modules_def.h, testsuite/modules.00-init/015-version.exp: The version info displays some of the configuration options. Moved the usage info into module_usage() that can be displayed with the --help or -H switch. * Makefile.am, Makefile.in, ModuleCmd_Whatis.c, acconfig.h, config.h.in, configure, configure.ac, main.c: Renamed INSTPATH to PREFIX and is no longer passed as a compiler -D argument, but is now entered directly into the config.h header. 2002-06-12 rkowen <rkowen> * Makefile.am, Makefile.in, ModuleCmd_Bootstrap.c, init.c, main.c, modules_def.h, utility.c: Converted the configure scripts over to automake,autoconf generation. Modified "module bootstrap" to source the init files. Put the shell properties and moved set_derelict and renamed it set_shell_properties into init.c . Created a matrix of shell properties { name, derelict, init, cmd separator }. * testsuite/etc/apropos.cache, testsuite/modules.50-cmds/095-uname.exp: Fixed test syntax - it didn't like "dangling" ('s and )'s in regexp string. Just escaped them. Removed apropos.cache - it gets regenerated with each test. * ModuleCmd_Switch.c, testsuite/modules.50-cmds/170-swap.exp: Fixed up "module switch" one argument form (use stringer alloc) and added more tests (one for each of the major shells). 2002-06-11 rkowen <rkowen> * acconfig.h, config.h.in, configure, configure.ac: Added MODULES_INIT_DIR to the configure files. 2002-06-10 rkowen <rkowen> * Makefile.am, Makefile.in, ModuleCmd_Bootstrap.c, acconfig.h, acinclude.m4, aclocal.m4, config.h.in, configure, configure.ac: Upgraded the auto-configuration to use automake/1.6 and autoconf/2.53 to auto-generate some of the files. * init/bash.in, init/csh.in, init/ksh.in, init/perl.in, init/sh.in, init/zsh.in: Re-introduced the init files with versioning. * config/depcomp, config/install-sh, config/install.sh, config/missing, config/mkinstalldirs: Upgraded install scripts to automake/1.6 autoconf/2.53 standards. 2002-06-06 rkowen <rkowen> * configure.in => configure.ac: configure.ac is actually the continuation of configure.in. do "cvs log configure.in" for a history. ---------------------------- revision 1.11 (of configure.in) date: 2002/04/29 21:16:48; author: rkowen; state: Exp; lines: +145 -116 * Upgraded configure.in to autoconf 2.52. * Changed the configure to search for libTcl.sh to acquire all it's necessary Tcl env.vars from it. 2002-05-06 rkowen <rkowen> * .cvsignore, doc/.cvsignore, etc/.cvsignore, etc/global/.cvsignore, etc/skel/.cvsignore, ext/.cvsignore, ext/common/.cvsignore, init/.cvsignore, modulefiles/.cvsignore, testsuite/.cvsignore: Added a bunch of .cvsignore files to avoid CVS in listing the known (but made) files. 2002-05-03 rkowen <rkowen> * testsuite/modulefiles/eschars/1.0, testsuite/modules.35-trace/010-init_ts.exp, testsuite/modules.35-trace/030-all-on.exp, testsuite/modules.35-trace/031-all-off.exp, testsuite/modules.35-trace/040-load-all.exp, testsuite/modules.35-trace/041-load-all.exp, testsuite/modules.35-trace/042-load-on.exp, testsuite/modules.35-trace/043-load-onoff.exp, testsuite/modules.35-trace/044-load-ovr.exp, testsuite/modules.35-trace/050-disp-onoff.exp, testsuite/modules.35-trace/060-dilo-onoff.exp, testsuite/modules.35-trace/070-colon.exp, testsuite/modules.50-cmds/022-setenv-eschars.exp, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, utility.c: Added EscapePerlString to utility.c, added '*' to list of csh special chars. Fixed up tests to reflect these changes. Added testsuite/modules.50-cmds/022-setenv-eschars.exp to test out escaping special chars. 2002-04-30 rkowen <rkowen> * install.sh, version.c: Moved install.sh to config/ and updated the version to 3.2.0a . 2002-04-30 lakata <lakata> * ModuleCmd_Bootstrap.c: fixed getexecname() problem. 2002-04-29 rkowen <rkowen> * RKOConfigure: Eliminated a lot of the extraneous options now that configure/tclConfig.sh . * ChangeLog, Makefile.in, ModuleCmd_Avail.c, ModuleCmd_Init.c, ModuleCmd_Load.c, ModuleCmd_Purge.c, ModuleCmd_Switch.c, ModuleCmd_Update.c, ModuleCmd_Whatis.c, aclocal.m4, cmdConflict.c, cmdLog.c, cmdModule.c, cmdPath.c, cmdTrace.c, cmdVersion.c, cmdXResource.c, config/install.sh, config/tcl.m4, configure, configure.in, error.c, init.c, locate_module.c, main.c, modules_def.h, utility.c: * Upgraded configure.in to autoconf 2.52. * Changed the configure to search for libTcl.sh to acquire all it's necessary Tcl env.vars from it. * created a utility function stringer() to handle most of the strcpy/strcat operations and to automatically allocate string memory. * Mostly changed the memory malloc/free to use stringer/null_free. * rewrote some of the code logic to have a single point of exit with unwinding of memory allocations. 2002-04-29 lakata <lakata> * ModuleCmd_Bootstrap.c: fixed bug with binary_name without an absolute path * ModuleCmd_Help.c: fixed help for swap|switch, to reflect optional first modulefile1 * ModuleCmd_Bootstrap.c, config.h.in, configure, configure.in: added PREFIX to config.h and propagated to bootstrap code as MODULESHOME * doc/module.1.in: updated docs regarding "switch" and MODULESHOME * ChangeLog: "module switch foo/1.3" change log * ModuleCmd_Bootstrap.c, ModuleCmd_Switch.c, error.c, modules_def.h: added support for 1-arg form of "swap/switch" command * ModuleCmd_List.c: sanity check added in case _LMFILES_ and LOADEDMODULES env vars get corrupted externally * testsuite/modules.50-cmds/170-swap.exp: added test for one-argument form of swap/switch command 2002-04-27 lakata <lakata> * ChangeLog, Makefile.in, ModuleCmd_Bootstrap.c, cmdModule.c, cmdTrace.c, config.h.in, doc/module.1.in, init/bash.in, init/csh.in, init/ksh.in, init/perl.in, init/sh.in, init/zsh.in, main.c, modules_def.h, utility.c: added the bootstrap command 2002-04-24 lakata <lakata> * ChangeLog: more stuff * init/tcsh.in: tcsh is now generated from csh, not tcsh.in * init/Makefile.in: tcsh script is copy of csh script * init/csh.in: fixed csh init script to deal with funny shell chars like * and {} * utility.c: (1) removed unset -f for zsh unaliasing (2) removed single quotes for quoting env vars. This breaks if the env var itself has single quotes. The more robust method is to individually escape all the dangerous characters. Old method: setenv foo 'bar bar' New method: setenv foo bar\ bar (3) removed tmpnam and tempname stuff, replacing with safer tmpfile_mod() * config.h.in, configure, configure.in: added TMP_DIR define * cmdXResource.c: suppress warning if DISPLAY is not set * cmdModule.c: fixed help message * aclocal.m4: fixed problem with finding tcl lib using glob * testsuite/modules.00-init/080-begenv.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.20-locate/040-alias.exp, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.20-locate/046-getsym.exp, testsuite/modules.20-locate/047-symerrs.exp, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.30-userlvl/040-advanced.exp, testsuite/modules.30-userlvl/045-adv.exp, testsuite/modules.30-userlvl/050-expert.exp, testsuite/modules.30-userlvl/055-exp.exp, testsuite/modules.35-trace/010-init_ts.exp, testsuite/modules.35-trace/020-default.exp, testsuite/modules.35-trace/030-all-on.exp, testsuite/modules.35-trace/031-all-off.exp, testsuite/modules.35-trace/040-load-all.exp, testsuite/modules.35-trace/041-load-all.exp, testsuite/modules.35-trace/042-load-on.exp, testsuite/modules.35-trace/043-load-onoff.exp, testsuite/modules.35-trace/044-load-ovr.exp, testsuite/modules.35-trace/050-disp-onoff.exp, testsuite/modules.35-trace/060-dilo-onoff.exp, testsuite/modules.35-trace/070-colon.exp, testsuite/modules.35-trace/095-cleanup.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/020-setenv.exp, testsuite/modules.50-cmds/030-unsetenv.exp, testsuite/modules.50-cmds/035-unsetenv-undo.exp, testsuite/modules.50-cmds/036-unsetenv-x.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/077-alias-undo.exp, testsuite/modules.50-cmds/080-info-name.exp, testsuite/modules.50-cmds/081-info-user.exp, testsuite/modules.50-cmds/082-info-user-exp.exp, testsuite/modules.50-cmds/083-info-mode.exp, testsuite/modules.50-cmds/084-info-mode-exp.exp, testsuite/modules.50-cmds/085-info-flags.exp, testsuite/modules.50-cmds/086-info-shells.exp, testsuite/modules.50-cmds/087-info-shells-exp.exp, testsuite/modules.50-cmds/088-info-isloaded.exp, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/101-badfac.exp, testsuite/modules.50-cmds/110-verbose.exp, testsuite/modules.50-cmds/115-verbose-msg.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp, testsuite/modules.50-cmds/140-system.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/200-break.exp, testsuite/modules.70-maint/020-update.exp, testsuite/modules.70-maint/050-whatis-load.exp, testsuite/modules.95-version/020-load.exp, testsuite/modules.95-version/020-unload.exp, testsuite/modules.95-version/022-load2.exp, testsuite/modules.95-version/022-unload2.exp, testsuite/modules.95-version/040-xgetenv.exp: changed tests to match new syntax for setting env vars. rather than quoting, special characters are escaped 2002-04-09 lakata <lakata> * Makefile.in: simplified installation of deep directories 2002-03-18 rkowen <rkowen> * Makefile.in: Un-escaped the --srcdir $$TESTSUITEDIR, because it caused problems on Linux dejagnu 1.4.1 . The variable is being interpolated before the runtest command is executed. 2002-03-11 lakata <lakata> * aclocal.m4, configure, configure.in: more TCL smarts, if tclsh does not exist on path * INSTALL: added hints on how to recognize a bad TCL install * ChangeLog: updates for release 3.1.6++ * testsuite/modules.00-init/015-version.exp.in, testsuite/modules.50-cmds/100-loglevel.exp.in: removed *.in versions (configure processed) * testsuite/modules.00-init/015-version.exp, testsuite/modules.50-cmds/100-loglevel.exp: renamed from *.in versions (configure processed) * testsuite/config/unix.exp, testsuite/modulefiles/system/2.0, testsuite/modulefiles/use/{1.0.in => 1.0}, testsuite/modulefiles/use/{2.0.in => 2.0}, testsuite/modulefiles/use/{2.1.in => 2.1}, testsuite/modulefiles/use/{2.2.in => 2.2}, testsuite/modules.00-init/010-environ.exp, testsuite/modules.00-init/015-version.exp.in, testsuite/modules.00-init/050-modpath.exp, testsuite/modules.00-init/080-begenv.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/065-rcerrs.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.70-maint/010-init_ts.exp, testsuite/modules.70-maint/020-update.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.95-version/010-init_ts.exp: (a) updated testsuite by centering source on TESTSUITEDIR, rather than rely on "pwd" or relative paths, which prohibit running the testsuite from a different dir (b) removed autoconf/configure processing of testsuite * INSTALL: Added more information about configuring TCL and a few other prerequisites. * configure: reran autoconf. see configure.in log * probetcl: probetcl functionality is now in aclocal.m4 * configure.in: (a) reordered configuration, so that critical things are done first (aids in debugging to get the hardstuff done first). (b) removed some of the testsuite configuration (c) added -with-tcl-library configuration (d) changed the help messages * config.h.in: removed redundant lines * cmdXResource.c: (a) fixed regular expression for XRDB parsing (b) fixed spelling of "resource" (i think it was using the French spelling before) * Makefile.in: (a) change the way testsuite is configured, so "clean" was updated (b) changed -I include path to point to cwd instead .. * aclocal.m4: fixed the way TCL was configured 2002-03-10 rkowen <rkowen> * init/csh.in: Fixed bug in init/csh script, which only affected those that changed their history character. Found by Barb Mauzy of Cray Inc. * Makefile.in: Updated the dist tarball upload targets. * modulefiles/module-cvs.in: Fixed up module-ftp alias to reflect the current SourceForge.Net ftp situation. * version.c: Preparing the version move to 3.1.7 * .ftp: Made the tarball ftp uploading script more generic. * modules.lsm.in: Changed the primary & alternate ftp site to the current SourceForge.Net set up. 2002-03-09 lakata <lakata> * ModuleCmd_Avail.c: Fixed bug in mkdirnm. There was a check to see if the dir eq ".", but was done using a char comparison, not string comparison. Caused severe problems if dir was "..", since only first character was used. 2002-03-08 lakata <lakata> * INSTALL: Simplified docs by removing details of RKOConfigure and describing a typical install on a standard unix box 2002-01-04 rkowen <rkowen> * version.c: Minor change to date. * ChangeLog, ModuleCmd_Load.c, PROBLEMS, RKOConfigure, doc/modulefile.4.in, init.c, testsuite/modulefiles/break/1.0, testsuite/modulefiles/break/2.0, testsuite/modulefiles/break/3.0, testsuite/modules.50-cmds/200-break.exp: * A 'break' in a modulefile will cause the modulefile to not be added to $LOADEDMODULES, but will be considered a successful execution to not affect other modulefiles being loaded concurrently (Patch due to Scott Gaskins). * Tests and docs added for the above. 2001-12-20 rkowen <rkowen> * TODO: Added Harlan Stenn's suggestions, and cleaned it up a bit. 2001-11-05 rkowen <rkowen> * ChangeLog, Makefile.in, PROBLEMS, RKOConfigure, configure, configure.in, doc/Modules-Paper.pdf, locate_module.c, probetcl, testsuite/modules.50-cmds/190-load.exp, version.c: * Fixed problem with module load when the full path is given (patch due to Scott Gaskins). * Added tests for the above problem. * Added the Modules-Paper in PDF format (thanks to Philip Kearns and Leo Butler for raising the issue). * Modified probetcl to avoid using the -c option (patch due to Philip Kearns). * Modified probetcl to use tclsh first then tcl * Added TCL_VERSION to configure and use it in the Makefile to use the -ltcl@TCL_VERSION@ library. 2001-08-18 rkowen <rkowen> * ChangeLog, version.c: Release 3.1.5 2001-08-17 rkowen <rkowen> * ChangeLog, ModuleCmd_Load.c, cmdPath.c, version.c: * Fixed up cmdPath to remove individual items from a path (patch due to Eric Stanley). 2001-08-03 rkowen <rkowen> * .ftp, Makefile.in, version.c: Minor fixes for distribution uploading. * Makefile.in: Fixed the ftp-local bz2 patch target. * .spec.in, ChangeLog, Makefile.in, version.c: * Added bz2 files to distribution mix. 2001-07-26 rkowen <rkowen> * ChangeLog, cmdPath.c, testsuite/modulefiles/info/isloaded, testsuite/modulefiles/loc_dv1/1.0, testsuite/modulefiles/loc_dv1/2.0, testsuite/modules.50-cmds/088-info-isloaded.exp, testsuite/modules.50-cmds/170-swap.exp, version.c: * Fixed "module swap" to put the substituted module in the same path location as the old. Also added a number of tests for this feature. (Bug was pointed out by Leo Butler <lbutler@brocade.com>) * Added tests for the "is-loaded" modulefile command introduced back in 3.0.8-rko. 2001-07-16 rkowen <rkowen> * version.c: Testing to see if a really minor update could be done. * INSTALL.RH7x, etc/global/bashrc.in, etc/global/profile.in: Fixed some embarrassing typos and editting mistakes. 2001-07-11 rkowen <rkowen> * testsuite/modulefiles/versions/1.1, testsuite/modulefiles/versions/1.2, testsuite/modulefiles/versions/1.3: More test stragglers for 3.1.3 * testsuite/modulefiles.other/1.1/version, testsuite/modulefiles.other/1.2/version, testsuite/modulefiles.other/1.3/version, testsuite/modulefiles/unsetenv/0.9: Forgot some straggler test files for 3.1.3 * ChangeLog, README.perl, configure, configure.in, modulefiles/Makefile.in, modulefiles/module-cvs.in, modulefiles/modules.in, modulefiles/use.own.in, testsuite/modules.50-cmds/017-use-undo.exp, version.c, xref/ModuleCmd_Use.c.html, xref/cxref.function: * Added module-cvs modulefile for easy CVS/ftp access to the modules CVS repository. * Added README.perl describing Ron Isaacson's Env::Modulecmd perl module (Ron.Isaacson@morganstanley.com). * Added further tests for modulefile "module use dir_path" * Fixed bug of unloading a modulefile with a "module use dir_path" * cmdModule.c: Was forcing a "use" even when the "use" was embedded in modulefile, which was being unloaded. * version.c: Changed the version to 3.1.3a to note that this is not a release. 2001-07-09 rkowen <rkowen> * ChangeLog, INSTALL, INSTALL.RH7x, ModuleCmd_Use.c, cmdPath.c, cmdSetenv.c, configure, configure.in, doc/modulefile.4.in, etc/Makefile.in, etc/global/bashrc.in, etc/global/csh.cshrc.in, etc/global/csh.login.in, etc/global/csh.modules.in, etc/global/profile.in, etc/global/profile.modules.in, etc/skel/.kshenv.in, etc/skel/.profile.in, modulefiles/use.own.in, modulefiles/version.in, testsuite/modulefiles/use/.version, testsuite/modulefiles/use/1.0.in, testsuite/modulefiles/use/2.0.in, testsuite/modulefiles/use/2.1.in, testsuite/modulefiles/use/2.2.in, testsuite/modules.00-init/080-begenv.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.20-locate/040-alias.exp, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.20-locate/046-getsym.exp, testsuite/modules.20-locate/047-symerrs.exp, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.30-userlvl/030-novice.exp, testsuite/modules.30-userlvl/035-nov.exp, testsuite/modules.30-userlvl/040-advanced.exp, testsuite/modules.30-userlvl/045-adv.exp, testsuite/modules.30-userlvl/050-expert.exp, testsuite/modules.30-userlvl/055-exp.exp, testsuite/modules.30-userlvl/090-undef.exp, testsuite/modules.35-trace/020-default.exp, testsuite/modules.35-trace/030-all-on.exp, testsuite/modules.35-trace/031-all-off.exp, testsuite/modules.35-trace/040-load-all.exp, testsuite/modules.35-trace/041-load-all.exp, testsuite/modules.35-trace/042-load-on.exp, testsuite/modules.35-trace/043-load-onoff.exp, testsuite/modules.35-trace/044-load-ovr.exp, testsuite/modules.35-trace/050-disp-onoff.exp, testsuite/modules.35-trace/060-dilo-onoff.exp, testsuite/modules.35-trace/070-colon.exp, testsuite/modules.50-cmds/010-init_ts.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/020-setenv.exp, testsuite/modules.50-cmds/025-setenv-undo.exp, testsuite/modules.50-cmds/030-unsetenv.exp, testsuite/modules.50-cmds/035-unsetenv-undo.exp, testsuite/modules.50-cmds/036-unsetenv-x.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/080-info-name.exp, testsuite/modules.50-cmds/081-info-user.exp, testsuite/modules.50-cmds/082-info-user-exp.exp, testsuite/modules.50-cmds/083-info-mode.exp, testsuite/modules.50-cmds/084-info-mode-exp.exp, testsuite/modules.50-cmds/085-info-flags.exp, testsuite/modules.50-cmds/086-info-shells.exp, testsuite/modules.50-cmds/087-info-shells-exp.exp, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/101-badfac.exp, testsuite/modules.50-cmds/110-verbose.exp, testsuite/modules.50-cmds/115-verbose-msg.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp, testsuite/modules.50-cmds/140-system.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.70-maint/020-update.exp, testsuite/modules.70-maint/050-whatis-load.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.95-version/010-init_ts.exp, testsuite/modules.95-version/020-load.exp, testsuite/modules.95-version/020-unload.exp, testsuite/modules.95-version/022-load2.exp, testsuite/modules.95-version/022-unload2.exp, testsuite/modules.95-version/040-xgetenv.exp, testsuite/modules.95-version/999-cleanup.exp, utility.c, version.c: * Added document file INSTALL.RH7x which explains how to set up an modules environment for all users through the system shell files. Is specific to Linux/RedHat 7.x, but is of general applicability. * Added further tests for modulefile "module use dir_path" (found an unload bug that will be fixed before release) * Environment variable contents are now quoted to preserve any embedded environment variables. (Needed for versioning) * Added over 50 tests specific to module versioning, and testing xgetenv. * Fixed the unsetenv on unload function, the feature added in 3.0.6-rko was supposed to set the env.var. to the optional third argument. This was to allow old env.var. values to be recovered by unraveling a stack set in an other env.var. Added tests for this feature. This is used by the version modulefile. * Fixed and updated the version modulefile to allow stacked versions to be removed the stack. * Removed an annoying spurious stderr newline. 2001-06-22 rkowen <rkowen> * ModuleCmd_Help.c: Spurious fprintf(stderr,...) was adding anomalous blank lines to the tests. 2001-06-10 rkowen <rkowen> * Makefile.in, testsuite/modulefiles.other/README: Fixed the way a distribution tar ball is made. It makes only one CVS connection instead of one per file. 2001-06-09 rkowen <rkowen> * Makefile.in: Added targets to aid sending the tarball to the ftp sites. * ChangeLog, Makefile.in, ModuleCmd_Avail.c, ModuleCmd_Display.c, ModuleCmd_Help.c, ModuleCmd_Init.c, ModuleCmd_Load.c, ModuleCmd_Switch.c, ModuleCmd_Use.c, ModuleCmd_Whatis.c, cmdAlias.c, cmdConflict.c, cmdInfo.c, cmdIsLoaded.c, cmdLog.c, cmdMisc.c, cmdModule.c, cmdPath.c, cmdSetenv.c, cmdTrace.c, cmdUlvl.c, cmdVerbose.c, cmdVersion.c, cmdWhatis.c, cmdXResource.c, doc/module.1.in, error.c, getopt.c, locate_module.c, main.c, modules.lsm.in, modules_def.h, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/070-unuse.exp, utility.c, version.c, xref/ModuleCmd_Avail.c.html, xref/ModuleCmd_Display.c.html, xref/ModuleCmd_Help.c.html, xref/ModuleCmd_Init.c.html, xref/ModuleCmd_Load.c.html, xref/ModuleCmd_Switch.c.html, xref/ModuleCmd_Use.c.html, xref/ModuleCmd_Whatis.c.html, xref/cmdAlias.c.html, xref/cmdConflict.c.html, xref/cmdInfo.c.html, xref/cmdIsLoaded.c.html, xref/cmdLog.c.html, xref/cmdMisc.c.html, xref/cmdModule.c.html, xref/cmdPath.c.html, xref/cmdSetenv.c.html, xref/cmdTrace.c.html, xref/cmdUlvl.c.html, xref/cmdVerbose.c.html, xref/cmdVersion.c.html, xref/cmdWhatis.c.html, xref/cmdXResource.c.html, xref/cxref.apdx.html, xref/cxref.function, xref/cxref.variable, xref/error.c.html, xref/init.c.html, xref/locate_module.c.html, xref/main.c.html, xref/utility.c.html: * Fixed the "module use --append" feature, and fixed the tests for "module use", "module use --append", and "module unuse". * Changed the global variable names (flags,current_module) to (g_flags, g_current_module) to identify their ubiquity in the module source. 2001-03-22 rminsk <rminsk> * init/python.in: Was not setting the environment variable MODULESHOME * ChangeLog: Comment added about mel support * configure: Added python 2001-02-15 rminsk <rminsk> * version.c: Retracted new version * version.c: Bumped version for mel addition * utility.c: Added mel (Maya Extension Language) support 2001-02-01 rminsk <rminsk> * Makefile.in: Removed other references to "-rko" in version numbers. * Makefile.in: Fixed tag rule to use the cvs module "module" instead of "module-3.1rko" * ChangeLog: Updated for 3.1.1 release. * configure.in: Added init/python * Makefile.in: Updated version number of 3.0 to 3.1. * version.c: Bumped up version number for new release 2001-01-16 rminsk <rminsk> * init/python.in: Removing blank lines * init/Makefile.in, init/python.in: Fixing typeo's * init/Makefile.in, init/python.in: Adding python init files. * utility.c: Fixing bug the the _LMFILES_ environment variable. As the _LMFILES_ shrink in size the extra _LMFILES%03d_ were not being unset. Made sure extra _LMFILES%03d_ are removed each time _LMFILES_ is set. Added initial support for scheme (scm, guile). Made output of ksh (bash, zsh) aliases recognize the escape charater ("\"). This was important to be able to escape "$". Anytime an alias had a "$" in it a function was always output. Fixed a bug in search of the LOADEDMODULES environment variable. Would not correctly find a module if only a partial module name was given. For example "maya/3.0" would be found but "maya" would not. In the process of fixing this bug a possible memory corruption was also fixed. * init/csh.in: Removed variable histchar. It was not being used. Modified to store the current prompt and unset prompt while modules is running. A bug in csh will cause and eval of an eval (eval `eval ...`) to output a prompt. This cause the first eval to try to execute the prompt. * init.c: Fixing bug the the _LMFILES_ environment variable. If the user is using csh and _LMFILES_ is large than LMSPLIT_SIZE it gets split into _LMFILES.%03d_. For modules to work correctly the split _LMFILES.%03d_ must be joined to make _LMFILES_. 2000-11-03 rk <rk> * xref/cmdModule.c.html: * Fixed the changed *interpter->result return value with Tcl8.3+ (patch due to Jens Hamisch). And some document changes. * ChangeLog, INSTALL, cmdModule.c: * Fixed the changed *interpter->result return value with Tcl8.3+ (patch due to Jens Hamisch). And some document changes. 2000-06-28 rk <rk> * ChangeLog, Makefile.in, ModuleCmd_Load.c, README, ccc.h.in, xref/ModuleCmd_Avail.c.html, xref/ModuleCmd_Clear.c.html, xref/ModuleCmd_Display.c.html, xref/ModuleCmd_Help.c.html, xref/ModuleCmd_Init.c.html, xref/ModuleCmd_List.c.html, xref/ModuleCmd_Load.c.html, xref/ModuleCmd_Purge.c.html, xref/ModuleCmd_Switch.c.html, xref/ModuleCmd_Update.c.html, xref/ModuleCmd_Use.c.html, xref/ModuleCmd_Whatis.c.html, xref/cmdAlias.c.html, xref/cmdConflict.c.html, xref/cmdInfo.c.html, xref/cmdIsLoaded.c.html, xref/cmdLog.c.html, xref/cmdMisc.c.html, xref/cmdModule.c.html, xref/cmdPath.c.html, xref/cmdSetenv.c.html, xref/cmdTrace.c.html, xref/cmdUlvl.c.html, xref/cmdUname.c.html, xref/cmdVerbose.c.html, xref/cmdVersion.c.html, xref/cmdWhatis.c.html, xref/cmdXResource.c.html, xref/error.c.html, xref/init.c.html, xref/locate_module.c.html, xref/main.c.html, xref/utility.c.html: * Removed warning message for unloading a module that's not loaded. * Added source code cross-referencing via cxref-1.5b(patched) * .cxref, Makefile.in, xref/ModuleCmd_Avail.c.html, xref/ModuleCmd_Clear.c.html, xref/ModuleCmd_Display.c.html, xref/ModuleCmd_Help.c.html, xref/ModuleCmd_Init.c.html, xref/ModuleCmd_List.c.html, xref/ModuleCmd_Load.c.html, xref/ModuleCmd_Purge.c.html, xref/ModuleCmd_Switch.c.html, xref/ModuleCmd_Update.c.html, xref/ModuleCmd_Use.c.html, xref/ModuleCmd_Whatis.c.html, xref/cmdAlias.c.html, xref/cmdConflict.c.html, xref/cmdInfo.c.html, xref/cmdIsLoaded.c.html, xref/cmdLog.c.html, xref/cmdMisc.c.html, xref/cmdModule.c.html, xref/cmdPath.c.html, xref/cmdSetenv.c.html, xref/cmdTrace.c.html, xref/cmdUlvl.c.html, xref/cmdUname.c.html, xref/cmdVerbose.c.html, xref/cmdVersion.c.html, xref/cmdWhatis.c.html, xref/cmdXResource.c.html, xref/cxref.apdx.html, xref/cxref.function, xref/cxref.html, xref/cxref.include, xref/cxref.typedef, xref/cxref.variable, xref/error.c.html, xref/getopt.c.html, xref/index.html, xref/init.c.html, xref/locate_module.c.html, xref/main.c.html, xref/utility.c.html, xref/version.c.html: Added cxref-1.5b(patched) generated HTML files showing the source code cross-referencing relations. * Makefile.in, configure, configure.in, version.c: Minor updates. * .cxref, .ftp, .spec.in, ChangeLog, INSTALL, LICENSE.GPL, MACHINES, Makefile.in, ModuleCmd_Avail.c, ModuleCmd_Clear.c, ModuleCmd_Display.c, ModuleCmd_Help.c, ModuleCmd_Init.c, ModuleCmd_List.c, ModuleCmd_Load.c, ModuleCmd_Purge.c, ModuleCmd_Switch.c, ModuleCmd_Update.c, ModuleCmd_Use.c, ModuleCmd_Whatis.c, PROBLEMS, README, RKOConfigure, TODO, acconfig.h, aclocal.m4, ccc.h.in, cmdAlias.c, cmdConflict.c, cmdInfo.c, cmdIsLoaded.c, cmdLog.c, cmdMisc.c, cmdModule.c, cmdPath.c, cmdSetenv.c, cmdTrace.c, cmdUlvl.c, cmdUname.c, cmdVerbose.c, cmdVersion.c, cmdWhatis.c, cmdXResource.c, config.h.in, configure, configure.in, doc/Makefile.in, doc/Modules-Paper.doc, doc/module.1.in, doc/modulefile.4.in, error.c, etc/Makefile.in, etc/README, etc/add.modules.in, etc/global/csh.login.in, etc/global/csh.modules.in, etc/global/profile.in, etc/global/profile.modules.in, etc/mkroot.in, etc/skel/.cshrc.in, etc/skel/.kshenv.in, etc/skel/.login.in, etc/skel/.profile.in, ext/Makefile.in, ext/README, ext/add.ext.in, ext/common/.cshrc.in, ext/common/.kshenv.in, ext/common/.login.in, ext/common/.profile.in, ext/mkroot.in, ext/skel/.cshrc.ext, ext/skel/.kshenv.ext, ext/skel/.login.ext, ext/skel/.modules, ext/skel/.profile.ext, getopt.c, getopt.h, init.c, init/.modulespath.in, init/Makefile.in, init/bash.in, init/csh.in, init/ksh.in, init/perl.in, init/sh.in, init/tcsh.in, init/zsh.in, install.sh, locate_module.c, main.c, modulefiles/Makefile.in, modulefiles/dot.in, modulefiles/module-info.in, modulefiles/modules.in, modulefiles/null.in, modulefiles/use.own.in, modulefiles/version.in, modules.lsm.in, modules_def.h, probetcl, stripmkf, testsuite/config/unix.exp, testsuite/etc/apropos.cache, testsuite/etc/bad, testsuite/etc/empty, testsuite/etc/rc, testsuite/home/.modulerc, testsuite/modulefiles/.moduleavailcache, testsuite/modulefiles/.moduleavailcache.202, testsuite/modulefiles/.moduleavailcachedir, testsuite/modulefiles/.moduleavailcachedir.202, testsuite/modulefiles/README, testsuite/modulefiles/alias/2.0, testsuite/modulefiles/append/2.0, testsuite/modulefiles/conflict/full, testsuite/modulefiles/conflict/module, testsuite/modulefiles/empty/1.0, testsuite/modulefiles/help/2.0, testsuite/modulefiles/info/mode1, testsuite/modulefiles/info/mode2, testsuite/modulefiles/info/mode3, testsuite/modulefiles/info/mode4, testsuite/modulefiles/info/mode5, testsuite/modulefiles/info/mode6, testsuite/modulefiles/info/name, testsuite/modulefiles/info/shells, testsuite/modulefiles/info/shellsexp, testsuite/modulefiles/info/user, testsuite/modulefiles/info/userexp, testsuite/modulefiles/loc_dv1/1.0, testsuite/modulefiles/loc_dv1/2.0, testsuite/modulefiles/loc_dv1/3.0, testsuite/modulefiles/loc_dv2/.version, testsuite/modulefiles/loc_dv2/1.0, testsuite/modulefiles/loc_dv2/2.0, testsuite/modulefiles/loc_dv3/.version, testsuite/modulefiles/loc_dv3/1.0, testsuite/modulefiles/loc_dv3/2.0, testsuite/modulefiles/loc_dv4/.version, testsuite/modulefiles/loc_dv4/1.0, testsuite/modulefiles/loc_dv4/2.0, testsuite/modulefiles/loc_dv6/1.0, testsuite/modulefiles/loc_dv6/2.0/1.0, testsuite/modulefiles/loc_dv7/.version, testsuite/modulefiles/loc_dv7/1.0, testsuite/modulefiles/loc_dv7/2.0/1.0, testsuite/modulefiles/loc_dv7/3.0, testsuite/modulefiles/loc_dv8/.version, testsuite/modulefiles/loc_dv8/1.0, testsuite/modulefiles/loc_dv8/2.0, testsuite/modulefiles/loc_fq/1.0, testsuite/modulefiles/loc_fq/2.0, testsuite/modulefiles/loc_rc1/.modulerc, testsuite/modulefiles/loc_rc1/1.0, testsuite/modulefiles/loc_rc1/2.0, testsuite/modulefiles/loc_rc2/.modulerc, testsuite/modulefiles/loc_rc2/1.0, testsuite/modulefiles/loc_rc2/2.0, testsuite/modulefiles/loc_rc3/.modulerc, testsuite/modulefiles/loc_rc3/1.0, testsuite/modulefiles/loc_rc3/2.0, testsuite/modulefiles/loc_rc3/3.0, testsuite/modulefiles/loc_rc4/.modulerc, testsuite/modulefiles/loc_rc4/.version, testsuite/modulefiles/loc_rc4/1.0, testsuite/modulefiles/loc_rc4/2.0, testsuite/modulefiles/loc_rc4/3.0, testsuite/modulefiles/loc_rc5/.modulerc, testsuite/modulefiles/loc_rc5/1.0, testsuite/modulefiles/loc_rc5/2.0, testsuite/modulefiles/loc_sym/1.0, testsuite/modulefiles/loc_sym/alias1, testsuite/modulefiles/loc_sym/alias2, testsuite/modulefiles/loc_sym/alias3, testsuite/modulefiles/loc_sym/alias4, testsuite/modulefiles/loc_sym/alias5, testsuite/modulefiles/loc_sym/alias6, testsuite/modulefiles/loc_sym/exec1, testsuite/modulefiles/loc_sym/exec2, testsuite/modulefiles/loc_sym/getvers1, testsuite/modulefiles/loc_sym/getvers2, testsuite/modulefiles/loc_sym/getvers3, testsuite/modulefiles/loc_sym/getvers4, testsuite/modulefiles/loc_sym/getvers5, testsuite/modulefiles/loc_sym/getvers6, testsuite/modulefiles/loc_sym/getvers7, testsuite/modulefiles/loc_sym/getvers8, testsuite/modulefiles/loc_sym/versinf1, testsuite/modulefiles/loc_sym/versinf2, testsuite/modulefiles/loc_sym/versinf3, testsuite/modulefiles/loc_sym/versinf4, testsuite/modulefiles/loc_sym/versinf5, testsuite/modulefiles/loc_sym/versinf6, testsuite/modulefiles/loc_sym/versinf7, testsuite/modulefiles/loc_sym/version1, testsuite/modulefiles/loc_sym/version10, testsuite/modulefiles/loc_sym/version11, testsuite/modulefiles/loc_sym/version12, testsuite/modulefiles/loc_sym/version13, testsuite/modulefiles/loc_sym/version14, testsuite/modulefiles/loc_sym/version2, testsuite/modulefiles/loc_sym/version3, testsuite/modulefiles/loc_sym/version4, testsuite/modulefiles/loc_sym/version5, testsuite/modulefiles/loc_sym/version6, testsuite/modulefiles/loc_sym/version7, testsuite/modulefiles/loc_sym/version8, testsuite/modulefiles/loc_sym/version9, testsuite/modulefiles/log/badfac, testsuite/modulefiles/log/err_both_1, testsuite/modulefiles/log/err_both_2, testsuite/modulefiles/log/err_file, testsuite/modulefiles/log/err_syslog, testsuite/modulefiles/module/2.0, testsuite/modulefiles/prepend/2.0, testsuite/modulefiles/prereq/full, testsuite/modulefiles/prereq/module, testsuite/modulefiles/remove/2.0, testsuite/modulefiles/system/2.0, testsuite/modulefiles/trace/all_off, testsuite/modulefiles/trace/all_on, testsuite/modulefiles/trace/colon, testsuite/modulefiles/trace/dilo_onoff, testsuite/modulefiles/trace/disp_onoff, testsuite/modulefiles/trace/disptrac, testsuite/modulefiles/trace/load_all1, testsuite/modulefiles/trace/load_all2, testsuite/modulefiles/trace/load_on, testsuite/modulefiles/trace/load_onoff, testsuite/modulefiles/trace/load_ovr, testsuite/modulefiles/uname/domain, testsuite/modulefiles/uname/machine, testsuite/modulefiles/uname/nodename, testsuite/modulefiles/uname/release, testsuite/modulefiles/uname/sysname, testsuite/modulefiles/uname/version, testsuite/modulefiles/unsetenv/1.0, testsuite/modulefiles/user/adv, testsuite/modulefiles/user/advanced, testsuite/modulefiles/user/exp, testsuite/modulefiles/user/expert, testsuite/modulefiles/user/nov, testsuite/modulefiles/user/novice, testsuite/modulefiles/user/undef, testsuite/modulefiles/verbose/msg, testsuite/modulefiles/verbose/off, testsuite/modulefiles/verbose/on, testsuite/modulefiles/verbose/undef, testsuite/modulefiles/whatis/lines, testsuite/modulefiles/whatis/multiple, testsuite/modulefiles/whatis/none, testsuite/modulefiles/whatis/single, testsuite/modulefiles/whatis/string, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/006-procs.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.00-init/015-version.exp.in, testsuite/modules.00-init/030-shells.exp, testsuite/modules.00-init/050-modpath.exp, testsuite/modules.00-init/080-begenv.exp, testsuite/modules.00-init/090-switches.exp, testsuite/modules.10-use/010-init_ts.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.20-locate/010-init_ts.exp, testsuite/modules.20-locate/020-fqual.exp, testsuite/modules.20-locate/030-defvers.exp, testsuite/modules.20-locate/040-alias.exp, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.20-locate/046-getsym.exp, testsuite/modules.20-locate/047-symerrs.exp, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/055-locrcerrs.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/065-rcerrs.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.20-locate/095-cleanup.exp, testsuite/modules.30-userlvl/010-init_ts.exp, testsuite/modules.30-userlvl/030-novice.exp, testsuite/modules.30-userlvl/035-nov.exp, testsuite/modules.30-userlvl/040-advanced.exp, testsuite/modules.30-userlvl/045-adv.exp, testsuite/modules.30-userlvl/050-expert.exp, testsuite/modules.30-userlvl/055-exp.exp, testsuite/modules.30-userlvl/090-undef.exp, testsuite/modules.35-trace/010-init_ts.exp, testsuite/modules.35-trace/020-default.exp, testsuite/modules.35-trace/030-all-on.exp, testsuite/modules.35-trace/031-all-off.exp, testsuite/modules.35-trace/040-load-all.exp, testsuite/modules.35-trace/041-load-all.exp, testsuite/modules.35-trace/042-load-on.exp, testsuite/modules.35-trace/043-load-onoff.exp, testsuite/modules.35-trace/044-load-ovr.exp, testsuite/modules.35-trace/050-disp-onoff.exp, testsuite/modules.35-trace/060-dilo-onoff.exp, testsuite/modules.35-trace/070-colon.exp, testsuite/modules.35-trace/095-cleanup.exp, testsuite/modules.50-cmds/010-init_ts.exp, testsuite/modules.50-cmds/020-setenv.exp, testsuite/modules.50-cmds/025-setenv-undo.exp, testsuite/modules.50-cmds/030-unsetenv.exp, testsuite/modules.50-cmds/035-unsetenv-undo.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/070-alias-proc.exp, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/077-alias-undo.exp, testsuite/modules.50-cmds/080-info-name.exp, testsuite/modules.50-cmds/081-info-user.exp, testsuite/modules.50-cmds/082-info-user-exp.exp, testsuite/modules.50-cmds/083-info-mode.exp, testsuite/modules.50-cmds/084-info-mode-exp.exp, testsuite/modules.50-cmds/085-info-flags.exp, testsuite/modules.50-cmds/086-info-shells.exp, testsuite/modules.50-cmds/087-info-shells-exp.exp, testsuite/modules.50-cmds/090-uname-proc.exp, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/099-uname-cleanup.exp, testsuite/modules.50-cmds/100-loglevel.exp.in, testsuite/modules.50-cmds/101-badfac.exp, testsuite/modules.50-cmds/110-verbose.exp, testsuite/modules.50-cmds/115-verbose-msg.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp, testsuite/modules.50-cmds/140-system.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.70-maint/010-init_ts.exp, testsuite/modules.70-maint/020-update.exp, testsuite/modules.70-maint/030-purge.exp, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/043-listno.exp, testsuite/modules.70-maint/045-listlong.exp, testsuite/modules.70-maint/048-listlongno.exp, testsuite/modules.70-maint/050-whatis-load.exp, testsuite/modules.70-maint/055-whatis.exp, testsuite/modules.70-maint/060-apropos.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/095-cleanup.exp, testsuite/modules.90-avail/010-init_ts.exp, testsuite/modules.90-avail/020-single.exp, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/050-long.exp, testsuite/modules.90-avail/060-empty.exp, testsuite/not_installed, testsuite/systest, utility.c, version.c: modules is a shell tool for setting-up the user environment on the fly, as it were. It's a powerful mechanism for dynamically changing environment variables, aliases, X11 resources, etc. It uses an embedded Tcl intrepretor, with a few extensions. Therefore, it has a well defined language syntax. Version 3.1 is GPL, and includes many improvements over the 3.0beta. 1998-12-11 rk <rk> * testsuite/modulefiles/setenv/1.0: modules is a shell tool for setting-up the user environment on the fly, as it were. It's a powerful mechanism for dynamically changing environment variables, aliases, X11 resources, etc. It uses an embedded Tcl intrepretor, with a few extensions. Therefore, it has a well defined language syntax. Version 3.1 is GPL, and includes many improvements over the 3.0beta.
Linux 65-254-81-4.cprapid.com 5.14.0-284.11.1.el9_2.x86_64 #1 SMP PREEMPT_DYNAMIC Tue May 9 05:49:00 EDT 2023 x86_64
Apache
65.254.81.4