Preview: ChangeLog
Size: 1.09 MB
/home/godevadmin/www/upload_images/home/000~ROOT~000/usr/share/doc/environment-modules/ChangeLog
2020-07-30 Xavier Delaruelle <[email protected]> * NEWS.rst, contrib/rpm/environment-modules.spec.in, version.inc.in: Release of version 4.5.2 * testsuite/modules.50-cmds/370-deps-fullpath.exp: ts: fix 50/370 tests on short term size * script/mpub, script/mrel: script: enable mrel/mpub to release from a vZ.Y.x branch Adapt the `mrel` and `mpub` release to produce new Modules release from a 'vZ.Y.x' branch rather from 'master' branch. 2020-07-28 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.50-cmds/370-deps-fullpath.exp: Fix reflexive conflict issue when mod is loaded full path Adapt conflict detection tests to ensure a module loaded by its full pathname will not detect itself as a conflict when declaring a reflexive conflict. Fixes #352. 2020-07-28 Rob Hurt <[email protected]> * doc/source/index.rst: doc: clarify about lang-specific modules in index I think it would be worth adding a clarification about Perl (and other language) modules vs. the environment modules described here, because the use of the term "modules" for both can be confusing to new users. Also fixed some typos and formatting. 2020-07-26 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Separate quar var def from tclshbin in _module_raw Clearly separate quarantine variable definition from tclsh binary on modulecmd.tcl evaluated command call in _module_raw function for sh, bash, ksh and zsh shells. When _module_raw is evaluted in zsh completion process, the command call was not correctly generated and location of tclsh binary was the value set to all quarantine variable declared. Which in case of LD_PRELOAD, led to error messages. Fixes #350. 2020-06-06 Xavier Delaruelle <[email protected]> * script/mpub, script/mrel: script: fix distclean err to ignore in mrel/mpub * script/mrel: script: add cleaning of prev built rpm in 'mrel' 2020-06-02 Xavier Delaruelle <[email protected]> * doc/source/modulefile.rst: doc: reorder module-info sub-cmd desc. in modulefile(4) 2020-07-07 Xavier Delaruelle <[email protected]> * testsuite/install.00-init/060-quar.exp: ts: fix install quar test when LD_PRELOAD is set 2020-07-06 Xavier Delaruelle <[email protected]> * .travis.yml: travis: use '--arg val' configure syntax on 2 test cases * configure: install: set dir arg with '--arg val' form in configure Enable the definition of the installation directory argument of the ./configure script with the `--arg val` syntax form in addition to the `--arg=val` syntax. Fixes #348 * .travis.yml: travis: fix --with-quarantine-vars arg bad definition * configure: install: show lib/compat configure args on configure * configure: install: raise error on unknown configure argument Fixes #348 * configure: install: limit compat args to those supported in configure Only pass to compatibility version ./configure script arguments that make sense to it. Do not transmit anymore arguments that are unknown to this compatibility version ./configure script. Compatibility version ./configure script argument listed in project's main configure script are only a subset of supported arguments. Main configure script can only be used to run compatibility configure script with the argument list here. 2020-05-11 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Fix double err counter increase when mod eval breaks 2020-04-19 Xavier Delaruelle <[email protected]> * init/bash_completion.in: init: fix dup apropos/keyword/search in bash comp apropos, keyword and search sub-commands now accept arguments so they need to be removed from empty-or-wide-argument-command list * init/fish_completion: init: fix list/source sub-cmd in fish completion list and source sub-commands do not need available modulefiles as argument. 2020-06-01 Xavier Delaruelle <[email protected]> * NEWS.rst, contrib/rpm/environment-modules.spec.in, version.inc.in: Release of version 4.5.1 2020-05-27 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Fix format of err stack trace start Fix formatting of error stack trace not to look for internal commands to withdraw if startup stack pattern cannot be matched. 2020-05-14 Roy Storey <[email protected]> * modulecmd.tcl.in, testsuite/modules.00-init/150-access-init.exp: Use absolute path to load tcl_ext_lib Fixes #344 2020-05-14 Xavier Delaruelle <[email protected]> * .travis.yml: travis: update one OSX case to use latest img version 2020-05-10 Xavier Delaruelle <[email protected]> * Makefile: install: improve test deps dl retry mechanism 2020-05-09 Xavier Delaruelle <[email protected]> * .travis.yml, Makefile: travis: retry test deps setup as their dl regularly fail Add a 'test-deps' make target to specifically build all dependencies for tests, like Nagelfar and Tcl8.3 download. Call this specific target in Travis CI through the `travis_retry` utility to retry dependency download if they fail. * modulecmd.tcl.in, testsuite/modulefiles.2/setenv/0.1, testsuite/modulefiles/spread/3.0, testsuite/modulefiles/spread/7.0, testsuite/modulefiles/spreadrc/dir3/.modulerc, testsuite/modulefiles/spreadrc/dir3/1.0, testsuite/modulefiles/spreadrc/dir4/.modulerc, testsuite/modulefiles/spreadrc/dir7/.modulerc, testsuite/modulefiles/spreadrc/dir7/1.0, testsuite/modulefiles/spreadrc/dir8/.modulerc, testsuite/modules.50-cmds/029-setenv-env.exp: Sync env var changes across Tcl sub-interpreters Ensure environment variable change at the Tcl interpreter level is propagated to every sub-interpreters used to evaluate modulefiles or modulercs. Tcl by default maintain the `::env` array in sync across all started interpreters. But in some cases, it appears a change occuring in master interpreter is not correctly propagated when the variable is later on updated in sub-interpreter. Fixes #342 2020-05-08 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modulefiles.allin/restoreenv/0.1, testsuite/modulefiles.allin/restoreenv/0.2, testsuite/modules.50-cmds/360-restoreenv.exp: Keep link with env vars when restoring settings after breakage In case a modulefile evaluation fails, environment context prior this failed evaluation is restored. Fix environment variable restoration mechanism to keep the link that monitors and updates environment variable array `env` in every Tcl sub-interpreters. Unsetting the whole `env` array makes Tcl stop monitoring env accesses and stop updating environment variables. Environment context restoration is now done by updating the `env` array (unsetting keys in the array and setting value for new or existing keys). Fixes #340 2020-05-07 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.70-maint/280-ml.exp: Disable pager when clear sub-cmd called with ml cmd To ensure a proper prompt message output on clear sub-command, no pager is started. This commit also turns off pager when clear sub-command is called through the ml shortcut command. Fixes #338 2020-04-13 Xavier Delaruelle <[email protected]> * .gitattributes: install: remove project-specific tools from git export 2020-04-12 Xavier Delaruelle <[email protected]> * .gitattributes, script/mpub: script: add 'mpub' to publish new release Add the `mpub` script, that automates Modules new release publishing over git repositories and websites. * .gitattributes, script/mrel: script: add 'mrel' to build/test release files Introduce the `mrel` script, that automates build of the Modules release files and performs tests over these distribution files to guaranty their correctness. * Makefile: install: consistenly output Makefile warning msgs on stderr 2020-04-07 Xavier Delaruelle <[email protected]> * NEWS.rst, contrib/rpm/environment-modules.spec.in, version.inc.in: Release of version 4.5.0 * .gitattributes: install: exclude .github dir from dist tarballs * .cirrus.yml: cirrus: use updated FreeBSD images Remove openmp package, not available in these new images. (was required on previous images to get an operational R setup) * testsuite/modulefiles.2/autosym1/.modulerc, testsuite/modulefiles.2/autosym1/1, testsuite/modulefiles.2/autosym1/2, testsuite/modulefiles.2/autosym2/.modulerc, testsuite/modulefiles.2/autosym2/1, testsuite/modulefiles.2/autosym2/2, testsuite/modulefiles.2/autosym3/.modulerc, testsuite/modulefiles.2/autosym3/1, testsuite/modulefiles.2/autosym3/2, testsuite/modulefiles.2/autosym4/.modulerc, testsuite/modulefiles.2/autosym4/1, testsuite/modulefiles.2/autosym4/2, testsuite/modulefiles.2/autosym5/.modulerc, testsuite/modulefiles.2/autosym5/1, testsuite/modulefiles.2/autosym5/2, testsuite/modulefiles.2/autosym5/default, testsuite/modulefiles.2/autosym6/.modulerc, testsuite/modulefiles.2/autosym6/1, testsuite/modulefiles.2/autosym6/2, testsuite/modulefiles.2/autosym7/dir1/1, testsuite/modulefiles.2/autosym7/dir1/2, testsuite/modulefiles.2/autosym7/dir2/1, testsuite/modulefiles.2/autosym7/dir2/2, testsuite/modulefiles.2/autosym8/.modulerc, testsuite/modulefiles.2/autosym8/1, testsuite/modulefiles.2/autosym8/2, testsuite/modulefiles.2/autosym9/1, .../274-adv_version_spec-autosym.exp: ts: add 70/274 tests to validate auto symbols 2020-04-06 Xavier Delaruelle <[email protected]> * NEWS.rst, modulecmd.tcl.in, .../modules.70-maint/271-adv_version_spec-in.exp: Honor default when version list is composed of symvers When an advanced version specifier list contains symbolic version references, fix resolving to honor default version if part of the specified list. Fixes #334. 2020-04-04 Xavier Delaruelle <[email protected]> * NEWS.rst: doc: desc. getModules improvements in NEWS * MIGRATING.rst: doc: desc. auto default/latest symbols in MIGRATING * doc/source/module.rst, doc/source/modulefile.rst: doc: desc. default/latest auto symbols in man pages 2020-04-01 Xavier Delaruelle <[email protected]> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/130-auto_handling.exp, testsuite/modules.10-use/040-load-use.exp, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/035-defname.exp, testsuite/modules.20-locate/038-defcontext.exp, testsuite/modules.20-locate/040-alias.exp, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/057-mcookie.exp, testsuite/modules.20-locate/066-modulepath-rc.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.20-locate/075-symlink.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.20-locate/090-memcache.exp, testsuite/modules.20-locate/100-wspace.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/020-setenv.exp, testsuite/modules.50-cmds/022-setenv-eschars.exp, testsuite/modules.50-cmds/030-unsetenv.exp, testsuite/modules.50-cmds/076-alias-sub.exp, testsuite/modules.50-cmds/081-info-user.exp, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/100-loglevel.exp, testsuite/modules.50-cmds/105-trace.exp, testsuite/modules.50-cmds/110-verbose.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp, .../modules.50-cmds/132-conflict-fullpath.exp, testsuite/modules.50-cmds/140-system.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/195-load-recurs.exp, testsuite/modules.50-cmds/197-load-lots.exp, testsuite/modules.50-cmds/230-loop.exp, testsuite/modules.50-cmds/240-chdir.exp, testsuite/modules.50-cmds/250-x-resource.exp, testsuite/modules.50-cmds/260-getenv.exp, testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.50-cmds/301-interp-command.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.50-cmds/310-puts.exp, testsuite/modules.50-cmds/340-modvar.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/359-allin-env.exp, testsuite/modules.50-cmds/360-restoreenv.exp, testsuite/modules.50-cmds/375-deps6.exp, testsuite/modules.50-cmds/375-order.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/378-sametarget.exp, testsuite/modules.50-cmds/380-altname.exp, testsuite/modules.50-cmds/390-function.exp, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.70-maint/050-whatis-load.exp, testsuite/modules.70-maint/180-reload.exp, testsuite/modules.70-maint/230-verbosity.exp, testsuite/modules.70-maint/240-icase.exp, testsuite/modules.70-maint/250-nan.exp, .../modules.70-maint/260-extended_default.exp, .../modules.70-maint/270-adv_version_spec.exp, .../modules.70-maint/271-adv_version_spec-in.exp, .../272-adv_version_spec-range.exp, .../273-adv_version_spec-space.exp, testsuite/modules.70-maint/280-ml.exp, testsuite/modules.70-maint/290-json.exp, testsuite/modules.70-maint/300-err_stack.exp, testsuite/modules.80-deep/020-load-deep.exp, testsuite/modules.80-deep/022-switch.exp, testsuite/modules.80-deep/068-transitive-deep.exp, testsuite/modules.80-deep/080-access-deep.exp, testsuite/modules.80-deep/090-deepvirt.exp, testsuite/modules.91-sort/040-load-sort.exp, testsuite/modules.95-version/022-load2.exp: ts: adapt existing tests for auto symbols 2020-04-02 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Record auto symbol in loaded environment Once a module, which benefits from automatically defined symbolic versions, is loaded, the associated auto symbols are recorded in loaded environment among all the alternative names applying to the loaded module (in `MODULES_LMALTNAME` environment variable). Auto symbols are distinguished from regular symbols by the `as|` prefix which is applied to them. 2020-03-30 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Auto define default/latest symbol when adv_vers_spec enabled When `advanced_version_spec` is enabled, automatically define a `default` and `latest` symbolic version for each module (at each module depth for deep modules) if those symbols or alias or regular modules with these names are not defined. In case `implicit_default` configuration is disabled, these automatic symbolic versions are not defined. Design principles are described in *Default and latest version specifiers* document. Fixes #210. 2020-04-03 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Fix version target inclusion loop in getModules Change loop variable name, as direlt is already used to control what entry to record in parent directory. 2020-04-01 Xavier Delaruelle <[email protected]> * .../design/default-latest-version-specifiers.rst: doc: refine default/latest vers spec design 2020-03-31 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.20-locate/090-memcache.exp, .../modules.70-maint/260-extended_default.exp: Perform noplaindir filter within getModules Rather applying a filter that removes the directory entries with no tag attached to them, except if search is performed in a no-indepth manner, perform this filter directly withing getModules procedure. * modulecmd.tcl.in, .../modules.70-maint/260-extended_default.exp, .../modules.70-maint/270-adv_version_spec.exp, testsuite/modules.90-avail/080-noindepth.exp: Perform onlydefaults/onlylatest filter within getModules Rather re-filtering result from getModules procedure within listModules procedure, perform the onlydefaults/onlylatest (-d/-L) avail filters directly within getModules. 2020-03-30 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Ensure dir struct definition when only contains not-searched default In case a directory has set for default element an hidden entry not searched in this getModules processing, still record this directory in dir_list with the default target referred in it (even if not part of found_list result. Doing so ensure that starting phase 3 of getModules processing, all directories with a default defined will have an entry in found_list. * testsuite/modules.70-maint/220-config.exp: ts: fix 70/220 when MODULES_ICASE is externally set 2020-03-31 Adrien Cotte <[email protected]> * init/bash_completion.in: bash_completion: fix ml no space between -modules 2020-03-29 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Remove uneeded test when removing dir from getModules res * .travis.yml, contrib/rpm/environment-modules.spec.in: rpm: define LD_PRELOAD as quarantine var along with LD_LIBRARY_PATH To ensure a sane quarantine effect in case LD_PRELOAD libs depend on libraries found with LD_LIBRARY_PATH. See https://sourceforge.net/p/modules/mailman/message/36959212/ * modulecmd.tcl.in, testsuite/modulefiles/loc_rc010/.modulerc, testsuite/modulefiles/loc_rc010/dir/.4.0, testsuite/modulefiles/loc_rc010/dir/sub1/notamod, testsuite/modulefiles/loc_rc010/dir/sub2/incompat, testsuite/modulefiles/loc_rc010/wrong, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.70-maint/130-aliases.exp: Rework version target inclusion in getModules result Rework loop walking the symbolic version target to include all elements recursively contained in directory targeted by symbolic version. Now using dir_list structure to walk path rather querying the whole found_list with modEq test procedure. * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.80-deep/068-transitive-deep.exp: ts: fix indepth-dependent test in 80/068 For 3 tests, result depends on indepth option, not implicit_default option. 2020-03-28 Xavier Delaruelle <[email protected]> * doc/source/modulefile.rst: doc: clarify hidden module location in modulefile.4 * modulecmd.tcl.in, testsuite/modulefiles/loc_rc010/subdir/.hidsub/3.0, testsuite/modulefiles/loc_rc010/subdir/.modulerc, testsuite/modulefiles/loc_rc010/subdir/.subdir/3.0, testsuite/modules.20-locate/067-hidden.exp: Add ref in res to version target not in res but not searched Enable resolution of default module in module sub-directory when this default symbol targets an hidden directory (whose name starts with a dot character). Adapt getModules procedure to add reference, in the directory description returned as result, for symbolic version targets that are hidden, not included in returned result but excluded from search made. Fixes #331 * modulecmd.tcl.in, testsuite/modules.70-maint/130-aliases.exp: Filter hidden sym/alias/module from aliases output Filter-out from the output of the `aliases` sub-command all hidden aliases, symbolic versions or hidden modules targeted by a non-hidden symbolic version. Fixes #330 2020-03-27 Xavier Delaruelle <[email protected]> * testsuite/modulefiles/loc_rc010/.modulerc, testsuite/modulefiles/loc_rcv1/.modulerc, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.90-avail/070-full.exp: ts: test alias/symver/virtual hidden modules in 20/067 2020-03-28 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Consider alias/symver/virtual hidden if name starts with . Hide special modules (aliases, symbolic versions and virtual modules) whose version name starts with a dot character (.) from avail, whatis and paths searches if their query does not fully match special module name. Hidden symbolic version will still be reported if the modulefile it targets is part of search result. Fixes #329 2020-03-26 Xavier Delaruelle <[email protected]> * testsuite/etc/modulerc.deepvirt, testsuite/modulefiles.2/.modulerc, testsuite/modulefiles.2/deepvirt1/.modulerc, testsuite/modulefiles.2/quux/1, testsuite/modules.80-deep/090-deepvirt.exp: ts: add 80/090 deep alias and virtual module tests * testsuite/modules.00-init/006-procs.exp, testsuite/modules.70-maint/290-json.exp, testsuite/modules.90-avail/070-full.exp: ts: compare sorted json output As json output is not sorted by modulecmd.tcl it may happens that test output found on some configurations or platforms is not the one expected although it is correct. To avoid these errors a new test procedure is added to compare stderr output in a sorted manner, so error will be obtained if something is missing in the result but not if the result is outputed in a different order. 2020-03-25 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.20-locate/090-memcache.exp, testsuite/modules.70-maint/290-json.exp, testsuite/modules.90-avail/070-full.exp: Exclude directory from findModules result There is no need to record found directory in findModules result as these elements will be computed in getModules. * modulecmd.tcl.in: No record of dir content in res returned by findModules No need to record the content of each directory in the result returned by the findModules procedure as full directory content (with virtual elements) is computed in getModules. * modulecmd.tcl.in: Remove useless modMatchAtDepth procedure Following getModules code refactoring, the generated procedure modMatchAtDepth has become useless. Only doesModMatchAtDepth is now used. 2020-03-24 Xavier Delaruelle <[email protected]> * testsuite/modules.70-maint/190-emptyarg.exp, testsuite/modules.70-maint/240-icase.exp, testsuite/modules.70-maint/290-json.exp, testsuite/modules.80-deep/068-transitive-deep.exp, testsuite/modules.90-avail/070-full.exp: ts: adapt tests to getModules refactoring Available modules search process is not changed but the refactoring of the getModules procedure fixed some hidden issues like in 80/068: symbol targeting a directory which contains aliases where not correctly analyzed previously (aliases where skipped from result) Module avail result order also change when JSON format output is enabled due to this code refactoring (as JSON output is not sorted). It also fix non-wild searches (performed during whatis or paths sub-commands) that previously matched partial alias, symbolic version or virtual module names. Fully matching names for these kind of modules are not only retained for these non-wild searches. Test results in 70/190, 70/240 and 70/290 have been adapted. 2020-03-23 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Refactor getModules procedure Rework the full getModules procedure to simplify its processing and apply the same match tests to every kind of modules (regular modulefile, symbolic, version, alias or virtual module). getModules procedure acts now in 4 phases. First every kind of modules are gathered. Then a second phase is set to filter-out modules dynamically hidden or forbidden (this filter will be deployed later on). Third phase is the elaboration of each directory content to determine especially their default and latest versions. At last the fourth phase process all gathered results to only keep those matching search query. As the procedure now applies the same mechanisms for all kind of modules, this code refactoring has solved several issues: * An `avail` search over a symbolic version targeting a directory now correctly returns the special modules (alias and virtual module) lying in this directory. * `whatis` and `paths` searches only return special modules (symbolic version, alias and virtual modules) that fully match search query not those that partially match it. * alias and virtual module whose name mention a directory that does not exists are correctly handled. Fixes #168, #327 and #328 2020-03-25 Xavier Delaruelle <[email protected]> * doc/source/design/default-latest-version-specifiers.rst: doc: update deflatest design for default/latest modfile 2020-03-21 Xavier Delaruelle <[email protected]> * NEWS.rst: doc: desc. ml bash comp/fish stderr fix/space fixes in NEWS 2020-03-19 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.20-locate/100-wspace.exp: Fix path cmd result if it contains space char * testsuite/install.00-init/080-args.exp, testsuite/modules.20-locate/100-wspace.exp, .../273-adv_version_spec-space.exp: ts: adapt tests after enclosed mod names in adv_vers_spec disabled mode 2020-02-17 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Enclose names incl. space even if adv_vers_spec is disabled Enclose module name and versions if it contains a space character even if the advanced versio specifier mechanism is disabled. Rework the advanced version specifier parsing done in parseModuleVersionSpecifier procedure to also check argument passed if advanced_version_spec mechanism is disabled and enclose them in curly braces if a space character is found in them. 2020-03-16 Xavier Delaruelle <[email protected]> * testsuite/home/coll15, testsuite/home/coll16, testsuite/modulefiles.2/space ye/1.8, testsuite/modulefiles.2/space ye/1.9, testsuite/modulefiles.2/space ye/2.8, testsuite/modulefiles.2/space ye/2.9, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.20-locate/100-wspace.exp, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/999-cleanup.exp, .../273-adv_version_spec-space.exp, testsuite/modules.90-avail/080-noindepth.exp: ts: tests module path/name/version finishing by a space char 2020-03-13 Xavier Delaruelle <[email protected]> * testsuite/modulefiles.2/sp.ce y+/0 2, testsuite/modulefiles.2/space ye/1.0, testsuite/modulefiles.2/space ye/1.1, testsuite/modulefiles.2/space ye/1.2, testsuite/modulefiles.2/space ye/1.3, testsuite/modulefiles.2/space ye/1.4, testsuite/modulefiles.2/space ye/1.5, testsuite/modulefiles.2/space ye/1.6, testsuite/modulefiles.2/space ye/1.7, testsuite/modulefiles.2/space ye/2.0, testsuite/modulefiles.2/space ye/2.1, testsuite/modulefiles.2/space ye/2.2, testsuite/modulefiles.2/space ye/2.3, testsuite/modulefiles.2/space ye/2.4, testsuite/modulefiles.2/space ye/2.5, testsuite/modulefiles.2/space ye/2.6, testsuite/modulefiles.2/space ye/2.7, testsuite/modules.00-init/005-init_ts.exp, .../272-adv_version_spec-range.exp, .../273-adv_version_spec-space.exp: ts: add tests mixing adv vers spec and deps 2020-02-18 Xavier Delaruelle <[email protected]> * testsuite/modules.20-locate/100-wspace.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.70-maint/240-icase.exp, testsuite/modules.70-maint/260-extended_default.exp, testsuite/modules.70-maint/270-adv_version_spec.exp, testsuite/modules.70-maint/272-adv_version_spec-range.exp: ts: skip wspace tests if symlinks not supported on fs 2020-02-17 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Correctly enclose mod name when defining cmp proc * modulecmd.tcl.in: Keep mod vers spec enclosed if containing space when parsed 2020-02-15 Xavier Delaruelle <[email protected]> * testsuite/modulefiles.2/sp.ce y+/1.2, testsuite/modulefiles.2/sp.ce y+/2.10, testsuite/modulefiles.2/sp.ce y+/2.4, testsuite/modulefiles.2/sp.ce y+/2.6, testsuite/modulefiles.2/sp.ce y+/2.7, testsuite/modulefiles.2/space yd/2.1, testsuite/modulefiles.2/space yd/2.10, testsuite/modulefiles.2/space yd/2.2, testsuite/modulefiles.2/space yd/3.0, testsuite/modulefiles.2/space yd/4.1, testsuite/modulefiles.2/space yd/5.0, testsuite/modules.70-maint/240-icase.exp, .../modules.70-maint/260-extended_default.exp, .../modules.70-maint/270-adv_version_spec.exp, .../272-adv_version_spec-range.exp: ts: test space in names with icase/extdfl/adv_vers_spec 2020-02-14 Xavier Delaruelle <[email protected]> * testsuite/example/initrc.in, testsuite/modules.70-maint/120-autoinit.exp: ts: add names with space in test example initrc * testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/020-module.exp: ts: test name containing space on install ts * .appveyor.yml: appveyor: use default inst dir for win native test * site.exp.in, testsuite/install.00-init/030-options.exp: ts: check availability of createmodule.py in install ts * testsuite/modules.20-locate/100-wspace.exp, testsuite/modules.90-avail/080-noindepth.exp: ts: test space in name against no-indepth and no implicit_default * modulecmd.tcl.in: Enclose mod and modpath names if space in them when saving coll * modulecmd.tcl.in: Fix collection parsing to handle enclosed names Correctly read modulepath and module names if enclosed in double-quotes or curly-braces to escape space characters used in these names. * testsuite/home/coll15, testsuite/home/coll16, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.61-coll/999-cleanup.exp: ts: test colls with space in modulepath and module names * testsuite/modules.20-locate/100-wspace.exp: ts: test space in module name against ml command 2020-02-07 Xavier Delaruelle <[email protected]> * testsuite/modulefiles.2/space yc/2, testsuite/modulefiles.2/space yc/3, testsuite/modulefiles.2/space yc/4, testsuite/modulefiles.2/space yc/5, testsuite/modulefiles.2/spacenc/2, testsuite/modulefiles.2/spacenc/3, testsuite/modulefiles.2/spacenc/4, testsuite/modules.20-locate/100-wspace.exp: ts: tests using space in module dependencies * modulecmd.tcl.in: Fix handling of mod containing space when set as deps Fix dependency analysis mechanisms to correctly handle modulefiles contaning space in their name. 2020-02-05 Xavier Delaruelle <[email protected]> * testsuite/config/unix.exp, testsuite/modulefiles wspace, testsuite/modulefiles.2/space ya/.modulerc, testsuite/modulefiles.2/space ya/1, testsuite/modulefiles.2/space ya/2, testsuite/modulefiles.2/space yb/.modulerc, testsuite/modulefiles.2/space yb/1, testsuite/modulefiles.2/spacen/.modulerc, testsuite/modulefiles.2/spacen/1, testsuite/modulefiles.2/spacen/2 s, testsuite/modulefiles.2/spacenb/.modulerc, testsuite/modulefiles.2/spacenb/1, testsuite/modules.20-locate/100-wspace.exp: ts: tests using space in module or modulepath names 2020-02-06 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Protect mod or modpath names containing space from eval Correctly handle modulefiles and modulepaths containing a space character in their name. Protect module and modulepath names which contain a space from being splitted in two words. 2020-03-18 Xavier Delaruelle <[email protected]> * init/fish_completion, modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Update stderr redirection for new Fish shell versions Use of '^' character to redirect stderr has been deprecated starting Fish version 3.1. It now produces an error. Stderr should be redirected with '2>' like on SH shells. Hopefully '2>' redirection is also supported on old Fish versions (all version 2 support it). Fixes #325 2020-03-14 Xavier Delaruelle <[email protected]> * init/bash_completion.in: init: define ml completion only if ml command defined 2020-03-12 Adrien Cotte <[email protected]> * init/bash_completion.in: init: add 'ml' command support in bash completion 2020-03-11 Xavier Delaruelle <[email protected]> * NEWS.rst: doc: desc. recent changes in NEWS 2020-03-10 Xavier Delaruelle <[email protected]> * INSTALL.rst, MIGRATING.rst, Makefile, NEWS.rst, script/TESTINSTALL.bat, testsuite/install.00-init/030-options.exp: install/ts/doc: install and test envml.cmd along other *.cmd * script/envml.cmd: script: apply same module enablement check in all *.cmd 2020-02-29 Jacques Raphanel <[email protected]> * script/envml, script/envml.cmd: script: introduce envml.cmd for windows Provide a dedicated batch file to provide similar behavior of envml bash script but for CMD Windows shell. Update existing envml bash script to provide same behavior for cmd and sh file (split argument over ';' character, in addition to '&' character). 2020-03-09 Xavier Delaruelle <[email protected]> * doc/source/diff_v3_v4.rst: doc: add ref to 4.0 closed issues in diff doc * MIGRATING.rst: doc: desc. error stack trace in MIGRATING 2020-03-08 Xavier Delaruelle <[email protected]> * .github/ISSUE_TEMPLATE/bug_report.md, .github/ISSUE_TEMPLATE/feature_request.md: github: add issue templates * testsuite/example/siteconfig.tcl-1, testsuite/modulefiles.2/bad3/bodyfor, testsuite/modulefiles.2/bad3/bodyif, testsuite/modulefiles.2/bad3/bodywhile, testsuite/modulefiles.2/bad3/proc2, testsuite/modulefiles.2/bad3/proc3, testsuite/modulefiles.2/badrc3/.modulerc, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.70-maint/300-err_stack.exp: ts: add more error stack tests 2020-03-06 Xavier Delaruelle <[email protected]> * testsuite/modules.70-maint/120-autoinit.exp: ts: tclsh is reported tclshX.Y on FreeBSD 2020-03-05 Xavier Delaruelle <[email protected]> * testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/140-color.exp: ts: adapt err stack output for siteconfig failed eval * modulecmd.tcl.in: Rework error stack filtering for siteconfig eval issue When a error occurs during the evaluation of the siteconfig specific file, only remove from error stack the elements relative to the modulecmd.tcl code that evaluates the file. * .cirrus.yml: cirrus: add tclsh to FreeBSD test env * script/mt: script: mt exits in err if ts ok but review failed * testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/284-info-others.exp, testsuite/modules.50-cmds/330-source.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/170-contact.exp, testsuite/modules.70-maint/300-err_stack.exp: ts: fix expected err stack result for Tcl8.4 ran with coverage Do not match error stack output exactly as extended code block reported on Tcl8.4 differ whether tests are run with coverage enabled or disabled. 2020-03-04 Xavier Delaruelle <[email protected]> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.20-locate/066-modulepath-rc.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/330-source.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.70-maint/090-source.exp, testsuite/modules.70-maint/140-multiargs.exp, testsuite/modules.70-maint/150-append-path.exp, testsuite/modules.70-maint/151-prepend-path.exp, testsuite/modules.70-maint/152-remove-path.exp, testsuite/modules.70-maint/170-contact.exp, testsuite/modules.70-maint/190-emptyarg.exp, testsuite/modules.70-maint/230-verbosity.exp, .../modules.70-maint/270-adv_version_spec.exp, .../modules.70-maint/271-adv_version_spec-in.exp, .../272-adv_version_spec-range.exp, testsuite/modules.70-maint/280-ml.exp, testsuite/modules.70-maint/290-json.exp, testsuite/modules.70-maint/300-err_stack.exp: ts: refactor common modulefile error msg * testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/284-info-others.exp, testsuite/modules.50-cmds/330-source.exp: ts: new err stack format expose switch block on Tcl8.4 2020-03-03 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Rework error stack filtering Improve error stack output format to only filter elements of the stack describing modulecmd.tcl internals. This is now achieved by comparing procedure name in the stack or its caller procedure name against interpreter known Tcl commands and procedures. If procedure or caller name in the stack is only known by modulecmd.tcl Tcl interpreter (and not modulefile or modulerc Tcl interpreter) then this element in the error stack is discarded. 2020-03-02 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Also report modulerc err stack trace for known error * testsuite/modules.20-locate/066-modulepath-rc.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/284-info-others.exp, testsuite/modules.50-cmds/310-puts.exp, testsuite/modules.50-cmds/330-source.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.70-maint/140-multiargs.exp, .../modules.70-maint/270-adv_version_spec.exp, .../modules.70-maint/271-adv_version_spec-in.exp, .../272-adv_version_spec-range.exp: ts: adapt module err output to display err stack * modulecmd.tcl.in: Also report modulefile err stack trace for known error When an error occurs during the evaluation of a modulefile, report associated error stack trace filtered to only output useful information for users. Errors thrown by a modulecmd.tcl procedure, only the second to last element in error stack has to be kept to hide modulecmd.tcl internals. * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.20-locate/066-modulepath-rc.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.70-maint/170-contact.exp, testsuite/modules.70-maint/300-err_stack.exp: ts: adapt err stack output for old tcl version 2020-02-29 Xavier Delaruelle <[email protected]> * testsuite/modulefiles.2/bad3/.bodycommon, testsuite/modulefiles.2/bad3/.proccommon, testsuite/modulefiles.2/bad3/bodyproc, testsuite/modulefiles.2/bad3/bodysource, testsuite/modulefiles.2/bad3/procproc, testsuite/modulefiles.2/bad3/procsource, testsuite/modulefiles.2/badrc3/.modulerc, testsuite/modulefiles.2/badrc3/1, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.70-maint/300-err_stack.exp: ts: test err stack trace output in 70/300 * testsuite/modules.20-locate/066-modulepath-rc.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp: ts: adapt modulerc err output to display err stack * modulecmd.tcl.in: Report modulerc err stack trace if error is unknown When an error occurs during the evaluation of a modulerc, report associated error stack trace filtered to only output useful information for users. 2020-02-28 Xavier Delaruelle <[email protected]> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.70-maint/090-source.exp, testsuite/modules.70-maint/140-multiargs.exp, testsuite/modules.70-maint/170-contact.exp, testsuite/modules.70-maint/200-errdisp.exp, testsuite/modules.70-maint/230-verbosity.exp, testsuite/modules.70-maint/280-ml.exp: ts: adapt module err output to display err stack * modulecmd.tcl.in: Return error thrown by puts with a specific code As `puts` procedure is specifically handled in modulefile evaluation context, also consider the errors it thrown as specific not to disclose the specific stack trace. 2020-02-29 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Report modulefile err stack trace if error is unknown When an error occurs during the evaluation of a modulefile, report associated error stack trace filtered to only output useful information for users. 2020-02-26 Xavier Delaruelle <[email protected]> * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: ts: test unknown issue throw in 00/120 * modulecmd.tcl.in: Encourage unknown issue report to GitHub project * modulecmd.tcl.in: Catch modulefile known errors with error codes Use specific error code (MODULES_ERR_SUBFAILED, MODULES_ERR_GLOBALTOP and MODULES_ERR_GLOBAL) rather prepending error message with a specific string to throw known errors occurring during modulefile evaluation. * modulecmd.tcl.in, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/140-color.exp: Report err stack trace for siteconfig eval errors Add to the error message the error stack trace for errors occuring during site-specific configuration evaluation. Error stack is expunged from the modulecmd.tcl internals to only report information relevant to site-specific configuration file. Introduce the `formatErrStackTrace` procedure to tailor error stack trace to filter and only keep informations that are relevant to users to understand what code is broken. * modulecmd.tcl.in: Report err stack trace if error is unknown Add to the error message the error stack trace on a global error when this error is unknown. 2020-02-25 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Throw known error with a specific error code Use `MODULES_ERR_KNOWN` error code to throw errors that are known to the module system. `knerror` procedure is introduced to throw error with this new specific error code set. * modulecmd.tcl.in: Render error in main's catch Define `MODULES_ERR_RENDERED` error code, used in `reportErrorAndExit` procedure to express that generated error has been rendered (error count increased and false value returned on stdout). If an error is caught in main procedure catch, render its error if not done yet (if obtained errorCode is not `MODULES_ERR_RENDERED`). So there is no more need to catch error around main call to `module` or `ml` procedure has it will be now correctly handled by main catch. Thus in this situation error will only be rendered once. 2020-02-29 Xavier Delaruelle <[email protected]> * testsuite/install.00-init/005-init_ts.exp, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/140-color.exp, testsuite/modules.60-initx/080-access-initx.exp, testsuite/modules.61-coll/080-access-coll.exp, testsuite/modules.70-maint/290-json.exp: ts: adapt err msg for multi-line msg harmonization * modulecmd.tcl.in: Harmonize multi-line error message report When an error message is composed of multiple lines, render it in the same way whether it is part of a block message or not: lines after the first one are prepended with a 2-space padding. As a result error messages appear clearly separated from each other. 2020-03-05 Xavier Delaruelle <[email protected]> * NEWS.rst: doc: clarify next version if not released yet 2020-03-04 Xavier Delaruelle <[email protected]> * script/createmodule.sh: script: handle variable value change in createmodule.sh When analyzing environment variable changes applied by shell script passed as argument, produce a `setenv` modulefile statement for any variable found set prior script evaluation and for which value is completely changed after script evaluation. Fixes #320 2020-02-25 Xavier Delaruelle <[email protected]> * script/nglfar2ccov: script: adapt nglfar2ccov to nagelfar new format output Analyzed script name is now reported with its path name. 2020-02-24 Xavier Delaruelle <[email protected]> * doc/source/module.rst, modulecmd.tcl.in, testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.00-init/140-color.exp: Add support for NO_COLOR env variable Add support for the NO_COLOR environment variable (https://no-color.org/) which when set (regardess of its value) prevents the addition of ANSI color. When set, NO_COLOR prevails over CLICOLOR and CLICOLOR_FORCE environment variables. MODULES_COLOR overrides these tree variables. Fixes #310 2020-02-22 Xavier Delaruelle <[email protected]> * Makefile: install: rm README on 'make clean' * Makefile.inc.in, configure, init/.gitignore, init/Makefile, init/bash_completion.in, init/zsh-functions/{_module => _module.in}: init: use 'sed -r' if 'sed -E' not supported `-E` option is a *relatively* recent option of GNU sed (v4.2), yet mandatory for OS portability (as detailled in b68e44e). Adapt configure step to detect if sed option `-E` is supported and fallback to `-r` otherwise. Fixes #317 * init/bash_completion.in: init: fix bash completion script for Bash <4.0 `compopt` Bash builtin has been introduced in Bash 4.0, so using it on Bash <4.0 prints error messages. To fix this, `comptopt` availability is checked prior usage. If not available, the no-space-append behavior will not be obtained which will not be an optimal situation if the `no-indepth` mode is set for the `avail` sub-command. Fixes #318 2020-02-21 Xavier Delaruelle <[email protected]> * doc/source/cookbook/compiler-etc-dependencies.rst: doc: clarify some statements in compiler-etc-depend recipe * doc/source/cookbook/compiler-etc-dependencies.rst: doc: add refs between sections in compiler-etc-depend recipe * .../{modules3.2.10 => modules3}/bar-defaults.out, .../{modules3.2.10 => modules3}/bar-loads.out, .../{modules3.2.10 => modules3}/bar-switch.out, .../{modules3.2.10 => modules3}/foo-avail1.out, .../{modules3.2.10 => modules3}/foo-avail2.out, .../{modules3.2.10 => modules3}/foo-defaults.out, .../{modules3.2.10 => modules3}/foo-loads.out, .../{modules3.2.10 => modules3}/foo-switch.out, .../{modules3.2.10 => modules3}/modavail.out, .../{modules3.2.10 => modules3}/modversion.out, .../{modules3.2.10 => modules3}/ompi-defaults.out, .../{modules3.2.10 => modules3}/ompi-loads1.out, .../{modules3.2.10 => modules3}/ompi-switch.out, .../{modules4.3.1 => modules4}/bar-defaults.out, .../{modules4.3.1 => modules4}/bar-loads.out, .../{modules4.3.1 => modules4}/bar-switch.out, .../{modules4.3.1 => modules4}/foo-avail1.out, .../{modules4.3.1 => modules4}/foo-avail2.out, .../{modules4.3.1 => modules4}/foo-defaults.out, .../{modules4.3.1 => modules4}/foo-loads.out, .../{modules4.3.1 => modules4}/foo-switch.out, .../{modules4.3.1 => modules4}/modavail.out, .../{modules4.3.1 => modules4}/modversion.out, .../{modules4.3.1 => modules4}/ompi-defaults.out, .../{modules4.3.1 => modules4}/ompi-loads1.out, .../{modules4.3.1 => modules4}/ompi-switch.out, .../{modules3.2.10 => modules3}/bar-defaults.out, .../{modules3.2.10 => modules3}/bar-loads.out, .../{modules3.2.10 => modules3}/bar-switch.out, .../{modules3.2.10 => modules3}/foo-avail1.out, .../{modules3.2.10 => modules3}/foo-avail2.out, .../{modules3.2.10 => modules3}/foo-defaults.out, .../{modules3.2.10 => modules3}/foo-loads.out, .../{modules3.2.10 => modules3}/foo-switch.out, .../{modules3.2.10 => modules3}/modavail.out, .../{modules3.2.10 => modules3}/modversion.out, .../{modules3.2.10 => modules3}/ompi-defaults.out, .../{modules3.2.10 => modules3}/ompi-loads1.out, .../{modules3.2.10 => modules3}/ompi-switch.out, .../{modules4.3.1 => modules4}/bar-defaults.out, .../{modules4.3.1 => modules4}/bar-loads.out, .../{modules4.3.1 => modules4}/bar-switch.out, .../{modules4.3.1 => modules4}/foo-avail1.out, .../{modules4.3.1 => modules4}/foo-avail2.out, .../{modules4.3.1 => modules4}/foo-defaults.out, .../{modules4.3.1 => modules4}/foo-loads.out, .../{modules4.3.1 => modules4}/foo-switch.out, .../{modules4.3.1 => modules4}/modavail.out, .../{modules4.3.1 => modules4}/modversion.out, .../{modules4.3.1 => modules4}/ompi-defaults.out, .../{modules4.3.1 => modules4}/ompi-loads1.out, .../{modules4.3.1 => modules4}/ompi-switch.out, .../{modules3.2.10 => modules3}/bar-defaults.out, .../{modules3.2.10 => modules3}/bar-loads.out, .../{modules3.2.10 => modules3}/bar-switch.out, .../{modules3.2.10 => modules3}/foo-avail1.out, .../{modules3.2.10 => modules3}/foo-avail2.out, .../{modules3.2.10 => modules3}/foo-defaults.out, .../{modules3.2.10 => modules3}/foo-loads.out, .../{modules3.2.10 => modules3}/foo-switch.out, .../{modules3.2.10 => modules3}/modavail.out, .../{modules3.2.10 => modules3}/modversion.out, .../{modules3.2.10 => modules3}/ompi-defaults.out, .../{modules3.2.10 => modules3}/ompi-loads1.out, .../{modules3.2.10 => modules3}/ompi-switch.out, .../{modules4.3.1 => modules4}/bar-defaults.out, .../{modules4.3.1 => modules4}/bar-loads.out, .../{modules4.3.1 => modules4}/bar-switch.out, .../{modules4.3.1 => modules4}/foo-avail1.out, .../{modules4.3.1 => modules4}/foo-avail2.out, .../{modules4.3.1 => modules4}/foo-defaults.out, .../{modules4.3.1 => modules4}/foo-loads.out, .../{modules4.3.1 => modules4}/foo-switch.out, .../{modules4.3.1 => modules4}/modavail.out, .../{modules4.3.1 => modules4}/modversion.out, .../{modules4.3.1 => modules4}/ompi-defaults.out, .../{modules4.3.1 => modules4}/ompi-loads1.out, .../{modules4.3.1 => modules4}/ompi-switch.out, .../{modules3.2.10 => modules3}/bar-defaults.out, .../{modules3.2.10 => modules3}/bar-loads.out, .../{modules3.2.10 => modules3}/bar-switch.out, .../{modules3.2.10 => modules3}/foo-avail1.out, .../{modules3.2.10 => modules3}/foo-avail2.out, .../{modules3.2.10 => modules3}/foo-defaults.out, .../{modules3.2.10 => modules3}/foo-loads.out, .../{modules3.2.10 => modules3}/foo-switch.out, .../{modules3.2.10 => modules3}/modavail.out, .../{modules3.2.10 => modules3}/modversion.out, .../{modules3.2.10 => modules3}/ompi-defaults.out, .../{modules3.2.10 => modules3}/ompi-loads1.out, .../{modules3.2.10 => modules3}/ompi-switch.out, .../{modules4.3.1 => modules4}/bar-defaults.out, .../{modules4.3.1 => modules4}/bar-loads.out, .../{modules4.3.1 => modules4}/bar-switch.out, .../{modules4.3.1 => modules4}/foo-avail1.out, .../{modules4.3.1 => modules4}/foo-avail2.out, .../{modules4.3.1 => modules4}/foo-defaults.out, .../{modules4.3.1 => modules4}/foo-loads.out, .../{modules4.3.1 => modules4}/foo-switch.out, .../{modules4.3.1 => modules4}/modavail.out, .../{modules4.3.1 => modules4}/modversion.out, .../{modules4.3.1 => modules4}/ompi-defaults.out, .../{modules4.3.1 => modules4}/ompi-loads1.out, .../{modules4.3.1 => modules4}/ompi-switch.out, doc/source/cookbook/compiler-etc-dependencies.rst: doc: refer to more generic vers name in compiler-etc-depend recipe * doc/source/cookbook/compiler-etc-dependencies.rst: doc: simplify reading of compiler-etc-depend recipe (code) 2020-02-20 Xavier Delaruelle <[email protected]> * .../example-sessions/common_code.sh, .../flavours/modules3.2.10/bar-defaults.out, .../flavours/modules3.2.10/bar-loads.out, .../flavours/modules3.2.10/bar-switch.out, .../flavours/modules3.2.10/foo-avail1.out, .../flavours/modules3.2.10/foo-avail2.out, .../flavours/modules3.2.10/foo-defaults.out, .../flavours/modules3.2.10/foo-loads.out, .../flavours/modules3.2.10/foo-switch.out, .../flavours/modules3.2.10/modavail.out, .../flavours/modules3.2.10/modversion.out, .../flavours/modules3.2.10/ompi-defaults.out, .../flavours/modules3.2.10/ompi-loads1.out, .../flavours/modules3.2.10/ompi-switch.out, .../flavours/modules4.3.1/bar-defaults.out, .../flavours/modules4.3.1/bar-loads.out, .../flavours/modules4.3.1/bar-switch.out, .../flavours/modules4.3.1/foo-avail1.out, .../flavours/modules4.3.1/foo-avail2.out, .../flavours/modules4.3.1/foo-defaults.out, .../flavours/modules4.3.1/foo-loads.out, .../flavours/modules4.3.1/foo-switch.out, .../flavours/modules4.3.1/modavail.out, .../flavours/modules4.3.1/modversion.out, .../flavours/modules4.3.1/ompi-defaults.out, .../flavours/modules4.3.1/ompi-loads1.out, .../flavours/modules4.3.1/ompi-switch.out, .../homebrewed/modules3.2.10/bar-defaults.out, .../homebrewed/modules3.2.10/bar-loads.out, .../homebrewed/modules3.2.10/bar-switch.out, .../homebrewed/modules3.2.10/foo-avail1.out, .../homebrewed/modules3.2.10/foo-avail2.out, .../homebrewed/modules3.2.10/foo-defaults.out, .../homebrewed/modules3.2.10/foo-loads.out, .../homebrewed/modules3.2.10/foo-switch.out, .../homebrewed/modules3.2.10/modavail.out, .../homebrewed/modules3.2.10/modversion.out, .../homebrewed/modules3.2.10/ompi-defaults.out, .../homebrewed/modules3.2.10/ompi-loads1.out, .../homebrewed/modules3.2.10/ompi-switch.out, .../homebrewed/modules4.3.1/bar-defaults.out, .../homebrewed/modules4.3.1/bar-loads.out, .../homebrewed/modules4.3.1/bar-switch.out, .../homebrewed/modules4.3.1/foo-avail1.out, .../homebrewed/modules4.3.1/foo-avail2.out, .../homebrewed/modules4.3.1/foo-defaults.out, .../homebrewed/modules4.3.1/foo-loads.out, .../homebrewed/modules4.3.1/foo-switch.out, .../homebrewed/modules4.3.1/modavail.out, .../homebrewed/modules4.3.1/modversion.out, .../homebrewed/modules4.3.1/ompi-defaults.out, .../homebrewed/modules4.3.1/ompi-loads1.out, .../homebrewed/modules4.3.1/ompi-switch.out, .../modulepath/modules3.2.10/bar-defaults.out, .../modulepath/modules3.2.10/bar-loads.out, .../modulepath/modules3.2.10/bar-switch.out, .../modulepath/modules3.2.10/foo-avail1.out, .../modulepath/modules3.2.10/foo-avail2.out, .../modulepath/modules3.2.10/foo-defaults.out, .../modulepath/modules3.2.10/foo-loads.out, .../modulepath/modules3.2.10/foo-switch.out, .../modulepath/modules3.2.10/modavail.out, .../modulepath/modules3.2.10/modversion.out, .../modulepath/modules3.2.10/ompi-defaults.out, .../modulepath/modules3.2.10/ompi-loads1.out, .../modulepath/modules3.2.10/ompi-switch.out, .../modulepath/modules4.3.1/bar-defaults.out, .../modulepath/modules4.3.1/bar-loads.out, .../modulepath/modules4.3.1/bar-switch.out, .../modulepath/modules4.3.1/foo-avail1.out, .../modulepath/modules4.3.1/foo-avail2.out, .../modulepath/modules4.3.1/foo-defaults.out, .../modulepath/modules4.3.1/foo-loads.out, .../modulepath/modules4.3.1/foo-switch.out, .../modulepath/modules4.3.1/modavail.out, .../modulepath/modules4.3.1/modversion.out, .../modulepath/modules4.3.1/ompi-defaults.out, .../modulepath/modules4.3.1/ompi-loads1.out, .../modulepath/modules4.3.1/ompi-switch.out, .../modulerc/modules3.2.10/bar-defaults.out, .../modulerc/modules3.2.10/bar-loads.out, .../modulerc/modules3.2.10/bar-switch.out, .../modulerc/modules3.2.10/foo-avail1.out, .../modulerc/modules3.2.10/foo-avail2.out, .../modulerc/modules3.2.10/foo-defaults.out, .../modulerc/modules3.2.10/foo-loads.out, .../modulerc/modules3.2.10/foo-switch.out, .../modulerc/modules3.2.10/modavail.out, .../modulerc/modules3.2.10/modversion.out, .../modulerc/modules3.2.10/ompi-defaults.out, .../modulerc/modules3.2.10/ompi-loads1.out, .../modulerc/modules3.2.10/ompi-switch.out, .../modulerc/modules4.3.1/bar-defaults.out, .../modulerc/modules4.3.1/bar-loads.out, .../modulerc/modules4.3.1/bar-switch.out, .../modulerc/modules4.3.1/foo-avail1.out, .../modulerc/modules4.3.1/foo-avail2.out, .../modulerc/modules4.3.1/foo-defaults.out, .../modulerc/modules4.3.1/foo-loads.out, .../modulerc/modules4.3.1/foo-switch.out, .../modulerc/modules4.3.1/modavail.out, .../modulerc/modules4.3.1/modversion.out, .../modulerc/modules4.3.1/ompi-defaults.out, .../modulerc/modules4.3.1/ompi-loads1.out, .../modulerc/modules4.3.1/ompi-switch.out, .../tcllib/LoadedCompMatches.tcl, .../tcllib/LoadedMpiMatches.tcl, .../tcllib/WarningUtils.tcl, doc/source/cookbook/compiler-etc-dependencies.rst: doc: improve console output reading of compiler-etc-depend recipe * doc/source/cookbook/compiler-etc-dependencies.rst: doc: adopt neutral tone compiler-etc-depend recipe * doc/source/cookbook/compiler-etc-dependencies.rst: doc: add ref to ext tools mentionned in compiler-etc-depend recipe * doc/source/cookbook/compiler-etc-dependencies.rst: doc: normalize rst section/link syntax in compiler-etc-depend recipe * doc/source/cookbook/compiler-etc-dependencies.rst: doc: fix typos in compiler-etc-depend recipe * .../compiler-etc-dependencies/flavours/bar/4.7, .../compiler-etc-dependencies/flavours/bar/5.4, .../compiler-etc-dependencies/flavours/bar/common, .../compiler-etc-dependencies/flavours/foo/1.1, .../compiler-etc-dependencies/flavours/foo/2.4, .../compiler-etc-dependencies/flavours/foo/common, .../compiler-etc-dependencies/flavours/gnu/8.2.0, .../compiler-etc-dependencies/flavours/gnu/9.1.0, .../compiler-etc-dependencies/flavours/gnu/common, .../compiler-etc-dependencies/flavours/intel/2018, .../compiler-etc-dependencies/flavours/intel/2019, .../flavours/intel/common, .../flavours/intelmpi/default, .../compiler-etc-dependencies/flavours/mvapich/2.1, .../flavours/mvapich/2.3.1, .../flavours/mvapich/common, .../compiler-etc-dependencies/flavours/openmpi/3.1, .../compiler-etc-dependencies/flavours/openmpi/4.0, .../flavours/openmpi/common, .../compiler-etc-dependencies/flavours/pgi/18.4, .../compiler-etc-dependencies/flavours/pgi/19.4, .../compiler-etc-dependencies/flavours/pgi/common, .../compiler-etc-dependencies/flavours/simd/avx, .../compiler-etc-dependencies/flavours/simd/avx2, .../compiler-etc-dependencies/flavours/simd/common, .../compiler-etc-dependencies/flavours/simd/sse4.1, .../compiler-etc-dependencies/homebrewed/bar/4.7, .../compiler-etc-dependencies/homebrewed/bar/5.4, .../homebrewed/bar/common, .../compiler-etc-dependencies/homebrewed/foo/1.1, .../compiler-etc-dependencies/homebrewed/foo/2.4, .../homebrewed/foo/common, .../compiler-etc-dependencies/homebrewed/gcc/8.2.0, .../compiler-etc-dependencies/homebrewed/gcc/9.1.0, .../homebrewed/gcc/common, .../homebrewed/intel/2018, .../homebrewed/intel/2019, .../homebrewed/intel/common, .../homebrewed/intelmpi/default, .../homebrewed/mvapich/2.1, .../homebrewed/mvapich/2.3.1, .../homebrewed/mvapich/common, .../homebrewed/openmpi/3.1, .../homebrewed/openmpi/4.0, .../homebrewed/openmpi/common, .../compiler-etc-dependencies/homebrewed/pgi/18.4, .../compiler-etc-dependencies/homebrewed/pgi/19.4, .../homebrewed/pgi/common, .../compiler-etc-dependencies/homebrewed/simd/avx, .../compiler-etc-dependencies/homebrewed/simd/avx2, .../homebrewed/simd/common, .../homebrewed/simd/sse4.1, .../modrc_common/modulerc.default_lowest_simd, .../modrc_common/modulerc.select_compiler_family, .../modrc_common/modulerc.select_compiler_version, .../modrc_common/modulerc.select_mpi_family, .../modrc_common/modulerc.select_mpi_version, .../modulepath/Compiler/gcc/8.2.0/bar/4.7/avx, .../modulepath/Compiler/gcc/8.2.0/bar/4.7/sse4.1, .../modulepath/Compiler/gcc/8.2.0/foo/1.1, .../modulepath/Compiler/gcc/8.2.0/mvapich/2.1, .../modulepath/Compiler/gcc/8.2.0/openmpi/3.1, .../modulepath/Compiler/gcc/9.1.0/bar/5.4/avx, .../modulepath/Compiler/gcc/9.1.0/bar/5.4/avx2, .../modulepath/Compiler/gcc/9.1.0/foo/2.4, .../modulepath/Compiler/gcc/9.1.0/mvapich/2.1, .../modulepath/Compiler/gcc/9.1.0/mvapich/2.3.1, .../modulepath/Compiler/gcc/9.1.0/openmpi/3.1, .../modulepath/Compiler/gcc/9.1.0/openmpi/4.0, .../modulepath/Compiler/intel/2018/foo/1.1, .../Compiler/intel/2018/intelmpi/default, .../modulepath/Compiler/intel/2018/mvapich/2.1, .../modulepath/Compiler/intel/2018/openmpi/3.1, .../modulepath/Compiler/intel/2019/foo/2.4, .../Compiler/intel/2019/intelmpi/default, .../modulepath/Compiler/intel/2019/mvapich/2.1, .../modulepath/Compiler/intel/2019/mvapich/2.3.1, .../modulepath/Compiler/intel/2019/openmpi/3.1, .../modulepath/Compiler/intel/2019/openmpi/4.0, .../modulepath/Compiler/pgi/18.4/foo/1.1, .../modulepath/Compiler/pgi/18.4/mvapich/2.1, .../modulepath/Compiler/pgi/18.4/openmpi/3.1, .../modulepath/Compiler/pgi/19.4/foo/2.4, .../modulepath/Compiler/pgi/19.4/mvapich/2.1, .../modulepath/Compiler/pgi/19.4/mvapich/2.3.1, .../modulepath/Compiler/pgi/19.4/openmpi/3.1, .../modulepath/Compiler/pgi/19.4/openmpi/4.0, .../CompilerMPI/gcc/8.2.0/mvapich/2.1/foo/1.1, .../CompilerMPI/gcc/8.2.0/openmpi/3.1/foo/1.1, .../CompilerMPI/gcc/9.1.0/mvapich/2.3.1/foo/2.4, .../CompilerMPI/gcc/9.1.0/openmpi/4.0/foo/2.4, .../intel/2018/intelmpi/default/foo/1.1, .../CompilerMPI/intel/2018/mvapich/2.1/foo/1.1, .../CompilerMPI/intel/2018/openmpi/3.1/foo/1.1, .../intel/2019/intelmpi/default/foo/2.4, .../CompilerMPI/intel/2019/mvapich/2.3.1/foo/2.4, .../CompilerMPI/intel/2019/openmpi/4.0/foo/2.4, .../CompilerMPI/pgi/18.4/mvapich/2.1/foo/1.1, .../CompilerMPI/pgi/18.4/openmpi/3.1/foo/1.1, .../CompilerMPI/pgi/19.4/openmpi/3.1/foo/2.4, .../19.4/openmpi/4.0/{REAMDE.txt => README.txt}, .../modulepath/Core/gcc/8.2.0, .../modulepath/Core/gcc/9.1.0, .../modulepath/Core/gcc/common, .../modulepath/Core/intel/2018, .../modulepath/Core/intel/2019, .../modulepath/Core/intel/common, .../modulepath/Core/pgi/18.4, .../modulepath/Core/pgi/19.4, .../modulepath/Core/pgi/common, .../modulepath/common/bar/common, .../modulepath/common/foo/common, .../modulepath/common/intelmpi/common, .../modulepath/common/mvapich/common, .../modulepath/common/openmpi/common, .../compiler-etc-dependencies/modulerc3/bar/common, .../compiler-etc-dependencies/modulerc3/foo/common, .../modulerc3/mvapich/common, .../modulerc3/openmpi/common, .../modulerc4/bar/4.7/gcc/8.2.0/avx, .../modulerc4/bar/4.7/gcc/8.2.0/sse4.1, .../modulerc4/bar/5.4/gcc/9.1.0/avx, .../modulerc4/bar/5.4/gcc/9.1.0/avx2, .../compiler-etc-dependencies/modulerc4/bar/common, .../modulerc4/foo/1.1/gcc/8.2.0/mvapich/2.1, .../modulerc4/foo/1.1/gcc/8.2.0/nompi, .../modulerc4/foo/1.1/gcc/8.2.0/openmpi/3.1, .../modulerc4/foo/1.1/intel/2018/intelmpi, .../modulerc4/foo/1.1/intel/2018/mvapich/2.1, .../modulerc4/foo/1.1/intel/2018/nompi, .../modulerc4/foo/1.1/intel/2018/openmpi/3.1, .../modulerc4/foo/1.1/pgi/18.4/mvapich/2.1, .../modulerc4/foo/1.1/pgi/18.4/nompi, .../modulerc4/foo/1.1/pgi/18.4/openmpi/3.1, .../modulerc4/foo/2.4/gcc/9.1.0/mvapich/2.3.1, .../modulerc4/foo/2.4/gcc/9.1.0/nompi, .../modulerc4/foo/2.4/gcc/9.1.0/openmpi/4.0, .../modulerc4/foo/2.4/intel/2019/intelmpi, .../modulerc4/foo/2.4/intel/2019/mvapich/2.3.1, .../modulerc4/foo/2.4/intel/2019/nompi, .../modulerc4/foo/2.4/intel/2019/openmpi/4.0, .../modulerc4/foo/2.4/pgi/19.4/nompi, .../modulerc4/foo/2.4/pgi/19.4/openmpi/3.1, .../compiler-etc-dependencies/modulerc4/foo/common, .../compiler-etc-dependencies/modulerc4/gcc/8.2.0, .../compiler-etc-dependencies/modulerc4/gcc/9.1.0, .../compiler-etc-dependencies/modulerc4/gcc/common, .../compiler-etc-dependencies/modulerc4/intel/2018, .../compiler-etc-dependencies/modulerc4/intel/2019, .../modulerc4/intel/common, .../modulerc4/mvapich/2.1/gcc/8.2.0, .../modulerc4/mvapich/2.1/gcc/9.1.0, .../modulerc4/mvapich/2.1/intel/2018, .../modulerc4/mvapich/2.1/intel/2019, .../modulerc4/mvapich/2.1/pgi/18.4, .../modulerc4/mvapich/2.1/pgi/19.4, .../modulerc4/mvapich/2.3.1/gcc/9.1.0, .../modulerc4/mvapich/2.3.1/intel/2019, .../modulerc4/mvapich/2.3.1/pgi/19.4, .../modulerc4/mvapich/common, .../modulerc4/openmpi/3.1/gcc/8.2.0, .../modulerc4/openmpi/3.1/gcc/9.1.0, .../modulerc4/openmpi/3.1/intel/2018, .../modulerc4/openmpi/3.1/intel/2019, .../modulerc4/openmpi/3.1/pgi/18.4, .../modulerc4/openmpi/3.1/pgi/19.4, .../modulerc4/openmpi/4.0/gcc/9.1.0, .../modulerc4/openmpi/4.0/intel/2019, .../modulerc4/openmpi/4.0/pgi/19.4, .../modulerc4/openmpi/common, .../compiler-etc-dependencies/modulerc4/pgi/18.4, .../compiler-etc-dependencies/modulerc4/pgi/19.4, .../compiler-etc-dependencies/modulerc4/pgi/common, doc/source/cookbook/compiler-etc-dependencies.rst: doc: normalize code of modulefile of compiler-etc-depend recipe And include these modulefile examples as Tcl code in recipe document to get their content highlighted. 2020-02-19 Xavier Delaruelle <[email protected]> * .../tcllib/ChildModules.tcl, .../tcllib/CompilerFromPath.tcl, .../tcllib/CompilerUtils.tcl, .../compiler-etc-dependencies/tcllib/GetFamVer.tcl, .../tcllib/LoadedCompMatches.tcl, .../tcllib/LoadedModules.tcl, .../tcllib/LoadedMpiMatches.tcl, .../compiler-etc-dependencies/tcllib/MpiUtils.tcl, .../tcllib/WarningUtils.tcl, .../tcllib/common_utilities.tcl, .../compiler-etc-dependencies/tcllib/temp.tcl, doc/source/cookbook/compiler-etc-dependencies.rst: doc: normalize code of Tcl lib of compiler-etc-depend recipe Add authorship information, same header and comment structure for all Tcl files to include these files in cookbook recipe document with Tcl syntax highlight. * doc/source/cookbook/compiler-etc-dependencies.rst: doc: fix broken refs in compiler-etc-depend recipe 2020-02-18 Xavier Delaruelle <[email protected]> * .../flavours/modules3.2.10/foo-avail1.out, .../flavours/modules3.2.10/foo-avail2.out, .../flavours/modules3.2.10/modavail.out, .../flavours/modules4.3.1/bar-loads.out, .../flavours/modules4.3.1/bar-switch.out, .../flavours/modules4.3.1/foo-avail1.out, .../flavours/modules4.3.1/foo-avail2.out, .../flavours/modules4.3.1/foo-defaults.out, .../flavours/modules4.3.1/foo-loads.out, .../flavours/modules4.3.1/foo-switch.out, .../flavours/modules4.3.1/modavail.out, .../flavours/modules4.3.1/ompi-defaults.out, .../flavours/modules4.3.1/ompi-loads1.out, .../flavours/modules4.3.1/ompi-switch.out, .../example-sessions/foo-loads.sh, .../homebrewed/modules3.2.10/foo-avail1.out, .../homebrewed/modules3.2.10/foo-avail2.out, .../homebrewed/modules3.2.10/modavail.out, .../homebrewed/modules4.3.1/bar-defaults.out, .../homebrewed/modules4.3.1/bar-loads.out, .../homebrewed/modules4.3.1/bar-switch.out, .../homebrewed/modules4.3.1/foo-avail1.out, .../homebrewed/modules4.3.1/foo-avail2.out, .../homebrewed/modules4.3.1/foo-defaults.out, .../homebrewed/modules4.3.1/foo-loads.out, .../homebrewed/modules4.3.1/foo-switch.out, .../homebrewed/modules4.3.1/modavail.out, .../homebrewed/modules4.3.1/ompi-defaults.out, .../homebrewed/modules4.3.1/ompi-loads1.out, .../homebrewed/modules4.3.1/ompi-switch.out, .../modulepath/modules3.2.10/foo-avail1.out, .../modulepath/modules3.2.10/modavail.out, .../modulepath/modules4.3.1/bar-defaults.out, .../modulepath/modules4.3.1/bar-loads.out, .../modulepath/modules4.3.1/bar-switch.out, .../modulepath/modules4.3.1/foo-avail1.out, .../modulepath/modules4.3.1/foo-defaults.out, .../modulepath/modules4.3.1/foo-loads.out, .../modulepath/modules4.3.1/foo-switch.out, .../modulepath/modules4.3.1/modavail.out, .../modulepath/modules4.3.1/ompi-defaults.out, .../modulepath/modules4.3.1/ompi-loads1.out, .../modulepath/modules4.3.1/ompi-switch.out, .../modulerc/modules3.2.10/foo-avail1.out, .../modulerc/modules3.2.10/foo-avail2.out, .../modulerc/modules3.2.10/modavail.out, .../modulerc/modules4.3.1/bar-defaults.out, .../modulerc/modules4.3.1/bar-loads.out, .../modulerc/modules4.3.1/bar-switch.out, .../modulerc/modules4.3.1/foo-avail1.out, .../modulerc/modules4.3.1/foo-avail2.out, .../modulerc/modules4.3.1/foo-defaults.out, .../modulerc/modules4.3.1/foo-loads.out, .../modulerc/modules4.3.1/foo-switch.out, .../modulerc/modules4.3.1/modavail.out, .../modulerc/modules4.3.1/ompi-defaults.out, .../modulerc/modules4.3.1/ompi-loads1.out, .../modulerc/modules4.3.1/ompi-switch.out, .../example-sessions/ompi-switch.sh, .../compiler-etc-dependencies/flavours/gnu/common, .../flavours/intel/common, .../flavours/openmpi/common, .../compiler-etc-dependencies/flavours/pgi/common, .../homebrewed/foo/common, .../homebrewed/gcc/common, .../homebrewed/intel/common, .../homebrewed/pgi/common, .../homebrewed/simd/common, .../modrc_common/modulerc.default_lowest_simd, .../modrc_common/modulerc.select_compiler_family, .../modrc_common/modulerc.select_compiler_version, .../modrc_common/modulerc.select_mpi_family, .../modrc_common/modulerc.select_mpi_version, .../CompilerMPI/pgi/19.4/openmpi/4.0/REAMDE.txt, .../modulepath/Core/gcc/common, .../modulepath/Core/intel/common, .../modulepath/Core/pgi/common, .../modulepath/common/intelmpi/common, .../modulepath/common/mvapich/common, .../modulepath/common/openmpi/common, .../modulerc3/mvapich/common, .../modulerc3/openmpi/common, .../compiler-etc-dependencies/modulerc4/gcc/common, .../modulerc4/intel/common, .../modulerc4/mvapich/common, .../modulerc4/openmpi/common, .../compiler-etc-dependencies/modulerc4/pgi/common, .../tcllib/ChildModules.tcl, .../tcllib/CompilerFromPath.tcl, .../tcllib/CompilerUtils.tcl, .../compiler-etc-dependencies/tcllib/GetFamVer.tcl, .../tcllib/LoadedCompMatches.tcl, .../tcllib/LoadedMpiMatches.tcl, .../compiler-etc-dependencies/tcllib/MpiUtils.tcl, .../tcllib/WarningUtils.tcl, .../tcllib/common_utilities.tcl, .../compiler-etc-dependencies/tcllib/temp.tcl: doc: simplify reading of compiler-etc-depend recipe (trailing space) * .../flavours/modules3.2.10/bar-loads.out, .../flavours/modules3.2.10/bar-switch.out, .../flavours/modules3.2.10/foo-loads.out, .../flavours/modules3.2.10/foo-switch.out, .../flavours/modules3.2.10/ompi-loads1.out, .../flavours/modules3.2.10/ompi-switch.out, .../flavours/modules4.3.1/bar-loads.out, .../flavours/modules4.3.1/bar-switch.out, .../flavours/modules4.3.1/foo-loads.out, .../flavours/modules4.3.1/foo-switch.out, .../flavours/modules4.3.1/ompi-loads1.out, .../flavours/modules4.3.1/ompi-switch.out, .../homebrewed/modules3.2.10/bar-loads.out, .../homebrewed/modules3.2.10/bar-switch.out, .../homebrewed/modules3.2.10/foo-loads.out, .../homebrewed/modules3.2.10/foo-switch.out, .../homebrewed/modules3.2.10/ompi-loads1.out, .../homebrewed/modules3.2.10/ompi-switch.out, .../homebrewed/modules4.3.1/bar-defaults.out, .../homebrewed/modules4.3.1/bar-loads.out, .../homebrewed/modules4.3.1/bar-switch.out, .../homebrewed/modules4.3.1/foo-defaults.out, .../homebrewed/modules4.3.1/foo-loads.out, .../homebrewed/modules4.3.1/foo-switch.out, .../homebrewed/modules4.3.1/ompi-defaults.out, .../homebrewed/modules4.3.1/ompi-loads1.out, .../homebrewed/modules4.3.1/ompi-switch.out, .../modulepath/modules3.2.10/bar-defaults.out, .../modulepath/modules3.2.10/bar-loads.out, .../modulepath/modules3.2.10/bar-switch.out, .../modulepath/modules3.2.10/foo-defaults.out, .../modulepath/modules3.2.10/foo-loads.out, .../modulepath/modules3.2.10/foo-switch.out, .../modulepath/modules3.2.10/ompi-defaults.out, .../modulepath/modules3.2.10/ompi-loads1.out, .../modulepath/modules3.2.10/ompi-switch.out, .../modulepath/modules4.3.1/bar-defaults.out, .../modulepath/modules4.3.1/bar-loads.out, .../modulepath/modules4.3.1/bar-switch.out, .../modulepath/modules4.3.1/foo-defaults.out, .../modulepath/modules4.3.1/foo-loads.out, .../modulepath/modules4.3.1/foo-switch.out, .../modulepath/modules4.3.1/ompi-defaults.out, .../modulepath/modules4.3.1/ompi-loads1.out, .../modulepath/modules4.3.1/ompi-switch.out, .../modulerc/modules3.2.10/bar-defaults.out, .../modulerc/modules3.2.10/bar-loads.out, .../modulerc/modules3.2.10/bar-switch.out, .../modulerc/modules3.2.10/foo-defaults.out, .../modulerc/modules3.2.10/foo-loads.out, .../modulerc/modules3.2.10/foo-switch.out, .../modulerc/modules3.2.10/ompi-defaults.out, .../modulerc/modules3.2.10/ompi-loads1.out, .../modulerc/modules3.2.10/ompi-switch.out, .../modulerc/modules4.3.1/bar-defaults.out, .../modulerc/modules4.3.1/bar-loads.out, .../modulerc/modules4.3.1/bar-switch.out, .../modulerc/modules4.3.1/foo-defaults.out, .../modulerc/modules4.3.1/foo-loads.out, .../modulerc/modules4.3.1/foo-switch.out, .../modulerc/modules4.3.1/ompi-defaults.out, .../modulerc/modules4.3.1/ompi-loads1.out, .../modulerc/modules4.3.1/ompi-switch.out, .../fake-sw-root/bar/4.7/gcc/8.2.0/avx/bin/bar, .../fake-sw-root/bar/4.7/gcc/8.2.0/sse4.1/bin/bar, .../fake-sw-root/bar/5.4/gcc/9.1.0/avx/bin/bar, .../fake-sw-root/bar/5.4/gcc/9.1.0/avx2/bin/bar, .../fake-sw-root/foo/1.1/gcc/8.2.0/mvapich/2.1/bin/foo, .../fake-sw-root/foo/1.1/gcc/8.2.0/nompi/bin/foo, .../fake-sw-root/foo/1.1/gcc/8.2.0/openmpi/3.1/bin/foo, .../fake-sw-root/foo/1.1/intel/2018/intelmpi/bin/foo, .../foo/1.1/intel/2018/mvapich/2.1/bin/foo, .../fake-sw-root/foo/1.1/intel/2018/nompi/bin/foo, .../foo/1.1/intel/2018/openmpi/3.1/bin/foo, .../fake-sw-root/foo/1.1/pgi/18.4/mvapich/2.1/bin/foo, .../fake-sw-root/foo/1.1/pgi/18.4/nompi/bin/foo, .../fake-sw-root/foo/1.1/pgi/18.4/openmpi/3.1/bin/foo, .../foo/2.4/gcc/9.1.0/mvapich/2.3.1/bin/foo, .../fake-sw-root/foo/2.4/gcc/9.1.0/nompi/bin/foo, .../fake-sw-root/foo/2.4/gcc/9.1.0/openmpi/4.0/bin/foo, .../fake-sw-root/foo/2.4/intel/2019/intelmpi/bin/foo, .../foo/2.4/intel/2019/mvapich/2.3.1/bin/foo, .../fake-sw-root/foo/2.4/intel/2019/nompi/bin/foo, .../foo/2.4/intel/2019/openmpi/4.0/bin/foo, .../fake-sw-root/foo/2.4/pgi/19.4/nompi/bin/foo, .../fake-sw-root/foo/2.4/pgi/19.4/openmpi/3.1/bin/foo, .../fake-sw-root/gcc/8.2.0/bin/gcc, .../fake-sw-root/gcc/9.1.0/bin/gcc, .../fake-sw-root/intel/2018/bin/icc, .../fake-sw-root/intel/2019/bin/icc, .../fake-sw-root/mvapich/2.1/gcc/8.2.0/bin/mpirun, .../fake-sw-root/mvapich/2.1/gcc/9.1.0/bin/mpirun, .../fake-sw-root/mvapich/2.1/intel/2018/bin/mpirun, .../fake-sw-root/mvapich/2.1/intel/2019/bin/mpirun, .../fake-sw-root/mvapich/2.1/pgi/18.4/bin/mpirun, .../fake-sw-root/mvapich/2.1/pgi/19.4/bin/mpirun, .../fake-sw-root/mvapich/2.3.1/gcc/9.1.0/bin/mpirun, .../fake-sw-root/mvapich/2.3.1/intel/2019/bin/mpirun, .../fake-sw-root/mvapich/2.3.1/pgi/19.4/bin/mpirun, .../fake-sw-root/openmpi/3.1/gcc/8.2.0/bin/mpirun, .../fake-sw-root/openmpi/3.1/gcc/9.1.0/bin/mpirun, .../fake-sw-root/openmpi/3.1/intel/2018/bin/mpirun, .../fake-sw-root/openmpi/3.1/intel/2019/bin/mpirun, .../fake-sw-root/openmpi/3.1/pgi/18.4/bin/mpirun, .../fake-sw-root/openmpi/3.1/pgi/19.4/bin/mpirun, .../fake-sw-root/openmpi/4.0/gcc/9.1.0/bin/mpirun, .../fake-sw-root/openmpi/4.0/intel/2019/bin/mpirun, .../fake-sw-root/openmpi/4.0/pgi/19.4/bin/mpirun, .../fake-sw-root/pgi/18.4/bin/pgcc, .../fake-sw-root/pgi/19.4/bin/pgcc, doc/example/compiler-etc-dependencies/flavours/bar/4.7, doc/example/compiler-etc-dependencies/flavours/bar/5.4, .../compiler-etc-dependencies/flavours/bar/common, doc/example/compiler-etc-dependencies/flavours/foo/1.1, doc/example/compiler-etc-dependencies/flavours/foo/2.4, .../compiler-etc-dependencies/flavours/foo/common, .../compiler-etc-dependencies/flavours/gnu/8.2.0, .../compiler-etc-dependencies/flavours/gnu/9.1.0, .../compiler-etc-dependencies/flavours/gnu/common, .../compiler-etc-dependencies/flavours/intel/2018, .../compiler-etc-dependencies/flavours/intel/2019, .../compiler-etc-dependencies/flavours/intel/common, .../compiler-etc-dependencies/flavours/mvapich/2.1, .../compiler-etc-dependencies/flavours/mvapich/2.3.1, .../compiler-etc-dependencies/flavours/mvapich/common, .../compiler-etc-dependencies/flavours/openmpi/3.1, .../compiler-etc-dependencies/flavours/openmpi/4.0, .../compiler-etc-dependencies/flavours/openmpi/common, .../compiler-etc-dependencies/flavours/pgi/18.4, .../compiler-etc-dependencies/flavours/pgi/19.4, .../compiler-etc-dependencies/flavours/pgi/common, .../compiler-etc-dependencies/homebrewed/bar/4.7, .../compiler-etc-dependencies/homebrewed/bar/5.4, .../compiler-etc-dependencies/homebrewed/bar/common, .../compiler-etc-dependencies/homebrewed/foo/1.1, .../compiler-etc-dependencies/homebrewed/foo/2.4, .../compiler-etc-dependencies/homebrewed/foo/common, .../compiler-etc-dependencies/homebrewed/gcc/8.2.0, .../compiler-etc-dependencies/homebrewed/gcc/9.1.0, .../compiler-etc-dependencies/homebrewed/gcc/common, .../compiler-etc-dependencies/homebrewed/intel/2018, .../compiler-etc-dependencies/homebrewed/intel/2019, .../compiler-etc-dependencies/homebrewed/intel/common, .../compiler-etc-dependencies/homebrewed/mvapich/2.1, .../compiler-etc-dependencies/homebrewed/mvapich/2.3.1, .../homebrewed/mvapich/common, .../compiler-etc-dependencies/homebrewed/openmpi/3.1, .../compiler-etc-dependencies/homebrewed/openmpi/4.0, .../homebrewed/openmpi/common, .../compiler-etc-dependencies/homebrewed/pgi/18.4, .../compiler-etc-dependencies/homebrewed/pgi/19.4, .../compiler-etc-dependencies/homebrewed/pgi/common, .../modulepath/Compiler/gcc/8.2.0/bar/4.7/avx, .../modulepath/Compiler/gcc/8.2.0/bar/4.7/sse4.1, .../modulepath/Compiler/gcc/8.2.0/foo/1.1, .../modulepath/Compiler/gcc/8.2.0/mvapich/2.1, .../modulepath/Compiler/gcc/8.2.0/openmpi/3.1, .../modulepath/Compiler/gcc/9.1.0/bar/5.4/avx, .../modulepath/Compiler/gcc/9.1.0/bar/5.4/avx2, .../modulepath/Compiler/gcc/9.1.0/foo/2.4, .../modulepath/Compiler/gcc/9.1.0/mvapich/2.1, .../modulepath/Compiler/gcc/9.1.0/mvapich/2.3.1, .../modulepath/Compiler/gcc/9.1.0/openmpi/3.1, .../modulepath/Compiler/gcc/9.1.0/openmpi/4.0, .../modulepath/Compiler/intel/2018/foo/1.1, .../modulepath/Compiler/intel/2018/intelmpi/default, .../modulepath/Compiler/intel/2018/mvapich/2.1, .../modulepath/Compiler/intel/2018/openmpi/3.1, .../modulepath/Compiler/intel/2019/foo/2.4, .../modulepath/Compiler/intel/2019/intelmpi/default, .../modulepath/Compiler/intel/2019/mvapich/2.1, .../modulepath/Compiler/intel/2019/mvapich/2.3.1, .../modulepath/Compiler/intel/2019/openmpi/3.1, .../modulepath/Compiler/intel/2019/openmpi/4.0, .../modulepath/Compiler/pgi/18.4/foo/1.1, .../modulepath/Compiler/pgi/18.4/mvapich/2.1, .../modulepath/Compiler/pgi/18.4/openmpi/3.1, .../modulepath/Compiler/pgi/19.4/foo/2.4, .../modulepath/Compiler/pgi/19.4/mvapich/2.1, .../modulepath/Compiler/pgi/19.4/mvapich/2.3.1, .../modulepath/Compiler/pgi/19.4/openmpi/3.1, .../modulepath/Compiler/pgi/19.4/openmpi/4.0, .../CompilerMPI/gcc/8.2.0/mvapich/2.1/foo/1.1, .../CompilerMPI/gcc/8.2.0/openmpi/3.1/foo/1.1, .../CompilerMPI/gcc/9.1.0/mvapich/2.3.1/foo/2.4, .../CompilerMPI/gcc/9.1.0/openmpi/4.0/foo/2.4, .../CompilerMPI/intel/2018/intelmpi/default/foo/1.1, .../CompilerMPI/intel/2018/mvapich/2.1/foo/1.1, .../CompilerMPI/intel/2018/openmpi/3.1/foo/1.1, .../CompilerMPI/intel/2019/intelmpi/default/foo/2.4, .../CompilerMPI/intel/2019/mvapich/2.3.1/foo/2.4, .../CompilerMPI/intel/2019/openmpi/4.0/foo/2.4, .../CompilerMPI/pgi/18.4/mvapich/2.1/foo/1.1, .../CompilerMPI/pgi/18.4/openmpi/3.1/foo/1.1, .../CompilerMPI/pgi/19.4/openmpi/3.1/foo/2.4, .../modulepath/Core/gcc/8.2.0, .../modulepath/Core/gcc/9.1.0, .../modulepath/Core/gcc/common, .../modulepath/Core/intel/2018, .../modulepath/Core/intel/2019, .../modulepath/Core/intel/common, .../compiler-etc-dependencies/modulepath/Core/pgi/18.4, .../compiler-etc-dependencies/modulepath/Core/pgi/19.4, .../modulepath/Core/pgi/common, .../modulepath/common/bar/common, .../modulepath/common/foo/common, .../modulepath/common/mvapich/common, .../modulepath/common/openmpi/common, .../compiler-etc-dependencies/modulerc3/bar/common, .../compiler-etc-dependencies/modulerc3/foo/common, .../compiler-etc-dependencies/modulerc3/mvapich/common, .../compiler-etc-dependencies/modulerc3/openmpi/common, .../modulerc4/bar/4.7/gcc/8.2.0/avx, .../modulerc4/bar/4.7/gcc/8.2.0/sse4.1, .../modulerc4/bar/5.4/gcc/9.1.0/avx, .../modulerc4/bar/5.4/gcc/9.1.0/avx2, .../compiler-etc-dependencies/modulerc4/bar/common, .../modulerc4/foo/1.1/gcc/8.2.0/mvapich/2.1, .../modulerc4/foo/1.1/gcc/8.2.0/nompi, .../modulerc4/foo/1.1/gcc/8.2.0/openmpi/3.1, .../modulerc4/foo/1.1/intel/2018/intelmpi, .../modulerc4/foo/1.1/intel/2018/mvapich/2.1, .../modulerc4/foo/1.1/intel/2018/nompi, .../modulerc4/foo/1.1/intel/2018/openmpi/3.1, .../modulerc4/foo/1.1/pgi/18.4/mvapich/2.1, .../modulerc4/foo/1.1/pgi/18.4/nompi, .../modulerc4/foo/1.1/pgi/18.4/openmpi/3.1, .../modulerc4/foo/2.4/gcc/9.1.0/mvapich/2.3.1, .../modulerc4/foo/2.4/gcc/9.1.0/nompi, .../modulerc4/foo/2.4/gcc/9.1.0/openmpi/4.0, .../modulerc4/foo/2.4/intel/2019/intelmpi, .../modulerc4/foo/2.4/intel/2019/mvapich/2.3.1, .../modulerc4/foo/2.4/intel/2019/nompi, .../modulerc4/foo/2.4/intel/2019/openmpi/4.0, .../modulerc4/foo/2.4/pgi/19.4/nompi, .../modulerc4/foo/2.4/pgi/19.4/openmpi/3.1, .../compiler-etc-dependencies/modulerc4/foo/common, .../compiler-etc-dependencies/modulerc4/gcc/8.2.0, .../compiler-etc-dependencies/modulerc4/gcc/9.1.0, .../compiler-etc-dependencies/modulerc4/gcc/common, .../compiler-etc-dependencies/modulerc4/intel/2018, .../compiler-etc-dependencies/modulerc4/intel/2019, .../compiler-etc-dependencies/modulerc4/intel/common, .../modulerc4/mvapich/2.1/gcc/8.2.0, .../modulerc4/mvapich/2.1/gcc/9.1.0, .../modulerc4/mvapich/2.1/intel/2018, .../modulerc4/mvapich/2.1/intel/2019, .../modulerc4/mvapich/2.1/pgi/18.4, .../modulerc4/mvapich/2.1/pgi/19.4, .../modulerc4/mvapich/2.3.1/gcc/9.1.0, .../modulerc4/mvapich/2.3.1/intel/2019, .../modulerc4/mvapich/2.3.1/pgi/19.4, .../compiler-etc-dependencies/modulerc4/mvapich/common, .../modulerc4/openmpi/3.1/gcc/8.2.0, .../modulerc4/openmpi/3.1/gcc/9.1.0, .../modulerc4/openmpi/3.1/intel/2018, .../modulerc4/openmpi/3.1/intel/2019, .../modulerc4/openmpi/3.1/pgi/18.4, .../modulerc4/openmpi/3.1/pgi/19.4, .../modulerc4/openmpi/4.0/gcc/9.1.0, .../modulerc4/openmpi/4.0/intel/2019, .../modulerc4/openmpi/4.0/pgi/19.4, .../compiler-etc-dependencies/modulerc4/openmpi/common, .../compiler-etc-dependencies/modulerc4/pgi/18.4, .../compiler-etc-dependencies/modulerc4/pgi/19.4, .../compiler-etc-dependencies/modulerc4/pgi/common, doc/source/cookbook/compiler-etc-dependencies.rst: doc: simplify reading of compiler-etc-depend recipe (dummy) 2019-12-20 Tom Payerle <[email protected]> * .../example-sessions/bar-defaults.sh, .../example-sessions/bar-loads.sh, .../example-sessions/bar-switch.sh, .../example-sessions/common_code.sh, .../flavours/modules3.2.10/bar-defaults.out, .../flavours/modules3.2.10/bar-loads.out, .../flavours/modules3.2.10/bar-switch.out, .../flavours/modules3.2.10/foo-avail1.out, .../flavours/modules3.2.10/foo-avail2.out, .../flavours/modules3.2.10/foo-defaults.out, .../flavours/modules3.2.10/foo-loads.out, .../flavours/modules3.2.10/foo-switch.out, .../flavours/modules3.2.10/modavail.out, .../flavours/modules3.2.10/modversion.out, .../flavours/modules3.2.10/ompi-defaults.out, .../flavours/modules3.2.10/ompi-loads1.out, .../flavours/modules3.2.10/ompi-switch.out, .../flavours/modules4.3.1/bar-defaults.out, .../flavours/modules4.3.1/bar-loads.out, .../flavours/modules4.3.1/bar-switch.out, .../flavours/modules4.3.1/foo-avail1.out, .../flavours/modules4.3.1/foo-avail2.out, .../flavours/modules4.3.1/foo-defaults.out, .../flavours/modules4.3.1/foo-loads.out, .../flavours/modules4.3.1/foo-switch.out, .../flavours/modules4.3.1/modavail.out, .../flavours/modules4.3.1/modversion.out, .../flavours/modules4.3.1/ompi-defaults.out, .../flavours/modules4.3.1/ompi-loads1.out, .../flavours/modules4.3.1/ompi-switch.out, .../example-sessions/foo-avail1.sh, .../example-sessions/foo-avail2.sh, .../example-sessions/foo-defaults.sh, .../example-sessions/foo-loads.sh, .../example-sessions/foo-switch.sh, .../homebrewed/modules3.2.10/bar-defaults.out, .../homebrewed/modules3.2.10/bar-loads.out, .../homebrewed/modules3.2.10/bar-switch.out, .../homebrewed/modules3.2.10/foo-avail1.out, .../homebrewed/modules3.2.10/foo-avail2.out, .../homebrewed/modules3.2.10/foo-defaults.out, .../homebrewed/modules3.2.10/foo-loads.out, .../homebrewed/modules3.2.10/foo-switch.out, .../homebrewed/modules3.2.10/modavail.out, .../homebrewed/modules3.2.10/modversion.out, .../homebrewed/modules3.2.10/ompi-defaults.out, .../homebrewed/modules3.2.10/ompi-loads1.out, .../homebrewed/modules3.2.10/ompi-switch.out, .../homebrewed/modules4.3.1/bar-defaults.out, .../homebrewed/modules4.3.1/bar-loads.out, .../homebrewed/modules4.3.1/bar-switch.out, .../homebrewed/modules4.3.1/foo-avail1.out, .../homebrewed/modules4.3.1/foo-avail2.out, .../homebrewed/modules4.3.1/foo-defaults.out, .../homebrewed/modules4.3.1/foo-loads.out, .../homebrewed/modules4.3.1/foo-switch.out, .../homebrewed/modules4.3.1/modavail.out, .../homebrewed/modules4.3.1/modversion.out, .../homebrewed/modules4.3.1/ompi-defaults.out, .../homebrewed/modules4.3.1/ompi-loads1.out, .../homebrewed/modules4.3.1/ompi-switch.out, .../example-sessions/modavail.sh, .../modulepath/modules3.2.10/bar-defaults.out, .../modulepath/modules3.2.10/bar-loads.out, .../modulepath/modules3.2.10/bar-switch.out, .../modulepath/modules3.2.10/foo-avail1.out, .../modulepath/modules3.2.10/foo-avail2.out, .../modulepath/modules3.2.10/foo-defaults.out, .../modulepath/modules3.2.10/foo-loads.out, .../modulepath/modules3.2.10/foo-switch.out, .../modulepath/modules3.2.10/modavail.out, .../modulepath/modules3.2.10/modversion.out, .../modulepath/modules3.2.10/ompi-defaults.out, .../modulepath/modules3.2.10/ompi-loads1.out, .../modulepath/modules3.2.10/ompi-switch.out, .../modulepath/modules4.3.1/bar-defaults.out, .../modulepath/modules4.3.1/bar-loads.out, .../modulepath/modules4.3.1/bar-switch.out, .../modulepath/modules4.3.1/foo-avail1.out, .../modulepath/modules4.3.1/foo-avail2.out, .../modulepath/modules4.3.1/foo-defaults.out, .../modulepath/modules4.3.1/foo-loads.out, .../modulepath/modules4.3.1/foo-switch.out, .../modulepath/modules4.3.1/modavail.out, .../modulepath/modules4.3.1/modversion.out, .../modulepath/modules4.3.1/ompi-defaults.out, .../modulepath/modules4.3.1/ompi-loads1.out, .../modulepath/modules4.3.1/ompi-switch.out, .../modulerc/modules3.2.10/bar-defaults.out, .../modulerc/modules3.2.10/bar-loads.out, .../modulerc/modules3.2.10/bar-switch.out, .../modulerc/modules3.2.10/foo-avail1.out, .../modulerc/modules3.2.10/foo-avail2.out, .../modulerc/modules3.2.10/foo-defaults.out, .../modulerc/modules3.2.10/foo-loads.out, .../modulerc/modules3.2.10/foo-switch.out, .../modulerc/modules3.2.10/modavail.out, .../modulerc/modules3.2.10/modversion.out, .../modulerc/modules3.2.10/ompi-defaults.out, .../modulerc/modules3.2.10/ompi-loads1.out, .../modulerc/modules3.2.10/ompi-switch.out, .../modulerc/modules4.3.1/bar-defaults.out, .../modulerc/modules4.3.1/bar-loads.out, .../modulerc/modules4.3.1/bar-switch.out, .../modulerc/modules4.3.1/foo-avail1.out, .../modulerc/modules4.3.1/foo-avail2.out, .../modulerc/modules4.3.1/foo-defaults.out, .../modulerc/modules4.3.1/foo-loads.out, .../modulerc/modules4.3.1/foo-switch.out, .../modulerc/modules4.3.1/modavail.out, .../modulerc/modules4.3.1/modversion.out, .../modulerc/modules4.3.1/ompi-defaults.out, .../modulerc/modules4.3.1/ompi-loads1.out, .../modulerc/modules4.3.1/ompi-switch.out, .../example-sessions/modversion.sh, .../example-sessions/ompi-defaults.sh, .../example-sessions/ompi-loads1.sh, .../example-sessions/ompi-switch.sh, .../example-sessions/ompi-switch.sh.m431, .../fake-sw-root/bar/4.7/1/README.txt, .../fake-sw-root/bar/4.7/1/gnu-8.2.0-simd-avx, .../fake-sw-root/bar/4.7/1/gnu-8.2.0-simd-sse4.1, .../fake-sw-root/bar/4.7/gcc/8.2.0/avx/bin/bar, .../fake-sw-root/bar/4.7/gcc/8.2.0/sse4.1/bin/bar, .../fake-sw-root/bar/5.4/1/README.txt, .../fake-sw-root/bar/5.4/1/gnu-9.1.0-simd-avx, .../fake-sw-root/bar/5.4/1/gnu-9.1.0-simd-avx2, .../fake-sw-root/bar/5.4/gcc/9.1.0/avx/bin/bar, .../fake-sw-root/bar/5.4/gcc/9.1.0/avx2/bin/bar, .../fake-sw-root/foo/1.1/1/README.txt, .../fake-sw-root/foo/1.1/1/gnu-8.2.0, .../fake-sw-root/foo/1.1/1/gnu-8.2.0-mvapich-2.1, .../fake-sw-root/foo/1.1/1/gnu-8.2.0-openmpi-3.1, .../fake-sw-root/foo/1.1/1/intel-2018, .../foo/1.1/1/intel-2018-intelmpi-default, .../fake-sw-root/foo/1.1/1/intel-2018-mvapich-2.1, .../fake-sw-root/foo/1.1/1/intel-2018-openmpi-3.1, .../fake-sw-root/foo/1.1/1/pgi-18.4, .../fake-sw-root/foo/1.1/1/pgi-18.4-mvapich-2.1, .../fake-sw-root/foo/1.1/1/pgi-18.4-openmpi-3.1, .../foo/1.1/gcc/8.2.0/mvapich/2.1/bin/foo, .../fake-sw-root/foo/1.1/gcc/8.2.0/nompi/bin/foo, .../foo/1.1/gcc/8.2.0/openmpi/3.1/bin/foo, .../foo/1.1/intel/2018/intelmpi/bin/foo, .../foo/1.1/intel/2018/mvapich/2.1/bin/foo, .../fake-sw-root/foo/1.1/intel/2018/nompi/bin/foo, .../foo/1.1/intel/2018/openmpi/3.1/bin/foo, .../foo/1.1/pgi/18.4/mvapich/2.1/bin/foo, .../fake-sw-root/foo/1.1/pgi/18.4/nompi/bin/foo, .../foo/1.1/pgi/18.4/openmpi/3.1/bin/foo, .../fake-sw-root/foo/2.4/1/README.txt, .../fake-sw-root/foo/2.4/1/gnu-9.1.0, .../fake-sw-root/foo/2.4/1/gnu-9.1.0-mvapich-2.3.1, .../fake-sw-root/foo/2.4/1/gnu-9.1.0-openmpi-4.0, .../fake-sw-root/foo/2.4/1/intel-2019, .../foo/2.4/1/intel-2019-intelmpi-default, .../foo/2.4/1/intel-2019-mvapich-2.3.1, .../fake-sw-root/foo/2.4/1/intel-2019-openmpi-4.0, .../fake-sw-root/foo/2.4/1/pgi-19.4, .../fake-sw-root/foo/2.4/1/pgi-19.4-openmpi-3.1, .../foo/2.4/gcc/9.1.0/mvapich/2.3.1/bin/foo, .../fake-sw-root/foo/2.4/gcc/9.1.0/nompi/bin/foo, .../foo/2.4/gcc/9.1.0/openmpi/4.0/bin/foo, .../foo/2.4/intel/2019/intelmpi/bin/foo, .../foo/2.4/intel/2019/mvapich/2.3.1/bin/foo, .../fake-sw-root/foo/2.4/intel/2019/nompi/bin/foo, .../foo/2.4/intel/2019/openmpi/4.0/bin/foo, .../fake-sw-root/foo/2.4/pgi/19.4/nompi/bin/foo, .../foo/2.4/pgi/19.4/openmpi/3.1/bin/foo, .../fake-sw-root/gcc/8.2.0/bin/gcc, .../fake-sw-root/gcc/9.1.0/bin/gcc, .../fake-sw-root/intel/2018/bin/icc, .../fake-sw-root/intel/2019/bin/icc, .../fake-sw-root/mvapich/2.1/1/README.txt, .../fake-sw-root/mvapich/2.1/1/gnu-8.2.0, .../fake-sw-root/mvapich/2.1/1/gnu-9.1.0, .../fake-sw-root/mvapich/2.1/1/intel-2018, .../fake-sw-root/mvapich/2.1/1/intel-2019, .../fake-sw-root/mvapich/2.1/1/pgi-18.4, .../fake-sw-root/mvapich/2.1/1/pgi-19.4, .../fake-sw-root/mvapich/2.1/gcc/8.2.0/bin/mpirun, .../fake-sw-root/mvapich/2.1/gcc/9.1.0/bin/mpirun, .../fake-sw-root/mvapich/2.1/intel/2018/bin/mpirun, .../fake-sw-root/mvapich/2.1/intel/2019/bin/mpirun, .../fake-sw-root/mvapich/2.1/pgi/18.4/bin/mpirun, .../fake-sw-root/mvapich/2.1/pgi/19.4/bin/mpirun, .../fake-sw-root/mvapich/2.3.1/1/README.txt, .../fake-sw-root/mvapich/2.3.1/1/gnu-9.1.0, .../fake-sw-root/mvapich/2.3.1/1/intel-2019, .../fake-sw-root/mvapich/2.3.1/1/pgi-19.4, .../mvapich/2.3.1/gcc/9.1.0/bin/mpirun, .../mvapich/2.3.1/intel/2019/bin/mpirun, .../fake-sw-root/mvapich/2.3.1/pgi/19.4/bin/mpirun, .../fake-sw-root/openmpi/3.1/1/README.txt, .../fake-sw-root/openmpi/3.1/1/gnu-8.2.0, .../fake-sw-root/openmpi/3.1/1/gnu-9.1.0, .../fake-sw-root/openmpi/3.1/1/intel-2018, .../fake-sw-root/openmpi/3.1/1/intel-2019, .../fake-sw-root/openmpi/3.1/1/pgi-18.4, .../fake-sw-root/openmpi/3.1/1/pgi-19.4, .../fake-sw-root/openmpi/3.1/gcc/8.2.0/bin/mpirun, .../fake-sw-root/openmpi/3.1/gcc/9.1.0/bin/mpirun, .../fake-sw-root/openmpi/3.1/intel/2018/bin/mpirun, .../fake-sw-root/openmpi/3.1/intel/2019/bin/mpirun, .../fake-sw-root/openmpi/3.1/pgi/18.4/bin/mpirun, .../fake-sw-root/openmpi/3.1/pgi/19.4/bin/mpirun, .../fake-sw-root/openmpi/4.0/1/README.txt, .../fake-sw-root/openmpi/4.0/1/gnu-9.1.0, .../fake-sw-root/openmpi/4.0/1/intel-2019, .../fake-sw-root/openmpi/4.0/1/pgi-19.4, .../fake-sw-root/openmpi/4.0/gcc/9.1.0/bin/mpirun, .../fake-sw-root/openmpi/4.0/intel/2019/bin/mpirun, .../fake-sw-root/openmpi/4.0/pgi/19.4/bin/mpirun, .../fake-sw-root/pgi/18.4/bin/pgcc, .../fake-sw-root/pgi/19.4/bin/pgcc, .../compiler-etc-dependencies/flavours/bar/4.7, .../compiler-etc-dependencies/flavours/bar/5.4, .../compiler-etc-dependencies/flavours/bar/common, .../compiler-etc-dependencies/flavours/foo/1.1, .../compiler-etc-dependencies/flavours/foo/2.4, .../compiler-etc-dependencies/flavours/foo/common, .../compiler-etc-dependencies/flavours/gnu/8.2.0, .../compiler-etc-dependencies/flavours/gnu/9.1.0, .../compiler-etc-dependencies/flavours/gnu/common, .../compiler-etc-dependencies/flavours/intel/2018, .../compiler-etc-dependencies/flavours/intel/2019, .../flavours/intel/common, .../flavours/intelmpi/default, .../compiler-etc-dependencies/flavours/mvapich/2.1, .../flavours/mvapich/2.3.1, .../flavours/mvapich/common, .../compiler-etc-dependencies/flavours/openmpi/3.1, .../compiler-etc-dependencies/flavours/openmpi/4.0, .../flavours/openmpi/common, .../compiler-etc-dependencies/flavours/pgi/18.4, .../compiler-etc-dependencies/flavours/pgi/19.4, .../compiler-etc-dependencies/flavours/pgi/common, .../compiler-etc-dependencies/flavours/simd/avx, .../compiler-etc-dependencies/flavours/simd/avx2, .../compiler-etc-dependencies/flavours/simd/common, .../compiler-etc-dependencies/flavours/simd/sse4.1, .../compiler-etc-dependencies/homebrewed/bar/4.7, .../compiler-etc-dependencies/homebrewed/bar/5.4, .../homebrewed/bar/common, .../compiler-etc-dependencies/homebrewed/foo/1.1, .../compiler-etc-dependencies/homebrewed/foo/2.4, .../homebrewed/foo/common, .../compiler-etc-dependencies/homebrewed/gcc/8.2.0, .../compiler-etc-dependencies/homebrewed/gcc/9.1.0, .../homebrewed/gcc/common, .../homebrewed/intel/2018, .../homebrewed/intel/2019, .../homebrewed/intel/common, .../homebrewed/intelmpi/default, .../homebrewed/mvapich/2.1, .../homebrewed/mvapich/2.3.1, .../homebrewed/mvapich/common, .../homebrewed/openmpi/3.1, .../homebrewed/openmpi/4.0, .../homebrewed/openmpi/common, .../compiler-etc-dependencies/homebrewed/pgi/18.4, .../compiler-etc-dependencies/homebrewed/pgi/19.4, .../homebrewed/pgi/common, .../compiler-etc-dependencies/homebrewed/simd/avx, .../compiler-etc-dependencies/homebrewed/simd/avx2, .../homebrewed/simd/common, .../homebrewed/simd/sse4.1, .../modrc_common/modulerc.default_lowest_simd, .../modrc_common/modulerc.select_compiler_family, .../modrc_common/modulerc.select_compiler_version, .../modrc_common/modulerc.select_mpi_family, .../modrc_common/modulerc.select_mpi_version, .../Compiler/gcc/8.2.0/bar/4.7/.modulerc, .../modulepath/Compiler/gcc/8.2.0/bar/4.7/avx, .../modulepath/Compiler/gcc/8.2.0/bar/4.7/sse4.1, .../modulepath/Compiler/gcc/8.2.0/bar/common, .../modulepath/Compiler/gcc/8.2.0/foo/1.1, .../modulepath/Compiler/gcc/8.2.0/foo/common, .../modulepath/Compiler/gcc/8.2.0/mvapich/2.1, .../modulepath/Compiler/gcc/8.2.0/mvapich/common, .../modulepath/Compiler/gcc/8.2.0/openmpi/3.1, .../modulepath/Compiler/gcc/8.2.0/openmpi/common, .../Compiler/gcc/9.1.0/bar/5.4/.modulerc, .../modulepath/Compiler/gcc/9.1.0/bar/5.4/avx, .../modulepath/Compiler/gcc/9.1.0/bar/5.4/avx2, .../modulepath/Compiler/gcc/9.1.0/bar/common, .../modulepath/Compiler/gcc/9.1.0/foo/2.4, .../modulepath/Compiler/gcc/9.1.0/foo/common, .../modulepath/Compiler/gcc/9.1.0/mvapich/2.1, .../modulepath/Compiler/gcc/9.1.0/mvapich/2.3.1, .../modulepath/Compiler/gcc/9.1.0/mvapich/common, .../modulepath/Compiler/gcc/9.1.0/openmpi/3.1, .../modulepath/Compiler/gcc/9.1.0/openmpi/4.0, .../modulepath/Compiler/gcc/9.1.0/openmpi/common, .../modulepath/Compiler/intel/2018/foo/1.1, .../modulepath/Compiler/intel/2018/foo/common, .../modulepath/Compiler/intel/2018/intelmpi/common, .../Compiler/intel/2018/intelmpi/default, .../modulepath/Compiler/intel/2018/mvapich/2.1, .../modulepath/Compiler/intel/2018/mvapich/common, .../modulepath/Compiler/intel/2018/openmpi/3.1, .../modulepath/Compiler/intel/2018/openmpi/common, .../modulepath/Compiler/intel/2019/foo/2.4, .../modulepath/Compiler/intel/2019/foo/common, .../modulepath/Compiler/intel/2019/intelmpi/common, .../Compiler/intel/2019/intelmpi/default, .../modulepath/Compiler/intel/2019/mvapich/2.1, .../modulepath/Compiler/intel/2019/mvapich/2.3.1, .../modulepath/Compiler/intel/2019/mvapich/common, .../modulepath/Compiler/intel/2019/openmpi/3.1, .../modulepath/Compiler/intel/2019/openmpi/4.0, .../modulepath/Compiler/intel/2019/openmpi/common, .../modulepath/Compiler/pgi/18.4/foo/1.1, .../modulepath/Compiler/pgi/18.4/foo/common, .../modulepath/Compiler/pgi/18.4/mvapich/2.1, .../modulepath/Compiler/pgi/18.4/mvapich/common, .../modulepath/Compiler/pgi/18.4/openmpi/3.1, .../modulepath/Compiler/pgi/18.4/openmpi/common, .../modulepath/Compiler/pgi/19.4/foo/2.4, .../modulepath/Compiler/pgi/19.4/foo/common, .../modulepath/Compiler/pgi/19.4/mvapich/2.1, .../modulepath/Compiler/pgi/19.4/mvapich/2.3.1, .../modulepath/Compiler/pgi/19.4/mvapich/common, .../modulepath/Compiler/pgi/19.4/openmpi/3.1, .../modulepath/Compiler/pgi/19.4/openmpi/4.0, .../modulepath/Compiler/pgi/19.4/openmpi/common, .../CompilerMPI/gcc/8.2.0/mvapich/2.1/foo/1.1, .../CompilerMPI/gcc/8.2.0/mvapich/2.1/foo/common, .../CompilerMPI/gcc/8.2.0/openmpi/3.1/foo/1.1, .../CompilerMPI/gcc/8.2.0/openmpi/3.1/foo/common, .../CompilerMPI/gcc/9.1.0/mvapich/2.3.1/foo/2.4, .../CompilerMPI/gcc/9.1.0/mvapich/2.3.1/foo/common, .../CompilerMPI/gcc/9.1.0/openmpi/4.0/foo/2.4, .../CompilerMPI/gcc/9.1.0/openmpi/4.0/foo/common, .../intel/2018/intelmpi/default/foo/1.1, .../intel/2018/intelmpi/default/foo/common, .../CompilerMPI/intel/2018/mvapich/2.1/foo/1.1, .../CompilerMPI/intel/2018/mvapich/2.1/foo/common, .../CompilerMPI/intel/2018/openmpi/3.1/foo/1.1, .../CompilerMPI/intel/2018/openmpi/3.1/foo/common, .../intel/2019/intelmpi/default/foo/2.4, .../intel/2019/intelmpi/default/foo/common, .../CompilerMPI/intel/2019/mvapich/2.3.1/foo/2.4, .../intel/2019/mvapich/2.3.1/foo/common, .../CompilerMPI/intel/2019/openmpi/4.0/foo/2.4, .../CompilerMPI/intel/2019/openmpi/4.0/foo/common, .../CompilerMPI/pgi/18.4/mvapich/2.1/foo/1.1, .../CompilerMPI/pgi/18.4/mvapich/2.1/foo/common, .../CompilerMPI/pgi/18.4/openmpi/3.1/foo/1.1, .../CompilerMPI/pgi/18.4/openmpi/3.1/foo/common, .../CompilerMPI/pgi/19.4/openmpi/3.1/foo/2.4, .../CompilerMPI/pgi/19.4/openmpi/3.1/foo/common, .../CompilerMPI/pgi/19.4/openmpi/4.0/REAMDE.txt, .../modulepath/Core/gcc/8.2.0, .../modulepath/Core/gcc/9.1.0, .../modulepath/Core/gcc/common, .../modulepath/Core/intel/2018, .../modulepath/Core/intel/2019, .../modulepath/Core/intel/common, .../modulepath/Core/pgi/18.4, .../modulepath/Core/pgi/19.4, .../modulepath/Core/pgi/common, .../modulepath/common/bar/common, .../modulepath/common/foo/common, .../modulepath/common/intelmpi/common, .../modulepath/common/mvapich/common, .../modulepath/common/openmpi/common, .../modulerc3/bar/.modulerc, .../modulerc3/bar/4.7/.modulerc, .../modulerc3/bar/4.7/gcc/.modulerc, .../modulerc3/bar/4.7/gcc/8.2.0/.modulerc, .../modulerc3/bar/4.7/gcc/8.2.0/avx, .../modulerc3/bar/4.7/gcc/8.2.0/sse4.1, .../modulerc3/bar/5.4/.modulerc, .../modulerc3/bar/5.4/gcc/.modulerc, .../modulerc3/bar/5.4/gcc/9.1.0/avx, .../modulerc3/bar/5.4/gcc/9.1.0/avx2, .../modulerc3/bar/avx/.modulerc, .../modulerc3/bar/avx/gcc/.modulerc, .../modulerc3/bar/avx/gcc/8.2.0/4.7, .../modulerc3/bar/avx/gcc/9.1.0/5.4, .../modulerc3/bar/avx2/.modulerc, .../modulerc3/bar/avx2/gcc/.modulerc, .../modulerc3/bar/avx2/gcc/9.1.0/5.4, .../compiler-etc-dependencies/modulerc3/bar/common, .../modulerc3/bar/gcc/.modulerc, .../modulerc3/bar/gcc/8.2.0/.modulerc, .../modulerc3/bar/gcc/8.2.0/avx/4.7, .../modulerc3/bar/gcc/8.2.0/sse4.1/4.7, .../modulerc3/bar/gcc/9.1.0/.modulerc, .../modulerc3/bar/gcc/9.1.0/avx/5.4, .../modulerc3/bar/gcc/9.1.0/avx2/5.4, .../modulerc3/bar/sse4.1/.modulerc, .../modulerc3/bar/sse4.1/gcc/.modulerc, .../modulerc3/bar/sse4.1/gcc/8.2.0/4.7, .../modulerc3/foo/.modulerc, .../modulerc3/foo/1.1/.modulerc, .../modulerc3/foo/1.1/gcc/.modulerc, .../modulerc3/foo/1.1/gcc/8.2.0/.modulerc, .../modulerc3/foo/1.1/gcc/8.2.0/mvapich/.modulerc, .../modulerc3/foo/1.1/gcc/8.2.0/mvapich/2.1, .../modulerc3/foo/1.1/gcc/8.2.0/nompi, .../modulerc3/foo/1.1/gcc/8.2.0/openmpi/.modulerc, .../modulerc3/foo/1.1/gcc/8.2.0/openmpi/3.1, .../modulerc3/foo/1.1/intel/.modulerc, .../modulerc3/foo/1.1/intel/2018/.modulerc, .../modulerc3/foo/1.1/intel/2018/intelmpi, .../modulerc3/foo/1.1/intel/2018/mvapich/.modulerc, .../modulerc3/foo/1.1/intel/2018/mvapich/2.1, .../modulerc3/foo/1.1/intel/2018/nompi, .../modulerc3/foo/1.1/intel/2018/openmpi/.modulerc, .../modulerc3/foo/1.1/intel/2018/openmpi/3.1, .../modulerc3/foo/1.1/pgi/.modulerc, .../modulerc3/foo/1.1/pgi/18.4/.modulerc, .../modulerc3/foo/1.1/pgi/18.4/mvapich/.modulerc, .../modulerc3/foo/1.1/pgi/18.4/mvapich/2.1, .../modulerc3/foo/1.1/pgi/18.4/nompi, .../modulerc3/foo/1.1/pgi/18.4/openmpi/.modulerc, .../modulerc3/foo/1.1/pgi/18.4/openmpi/3.1, .../modulerc3/foo/2.4/.modulerc, .../modulerc3/foo/2.4/gcc/.modulerc, .../modulerc3/foo/2.4/gcc/9.1.0/.modulerc, .../modulerc3/foo/2.4/gcc/9.1.0/mvapich/.modulerc, .../modulerc3/foo/2.4/gcc/9.1.0/mvapich/2.3.1, .../modulerc3/foo/2.4/gcc/9.1.0/nompi, .../modulerc3/foo/2.4/gcc/9.1.0/openmpi/.modulerc, .../modulerc3/foo/2.4/gcc/9.1.0/openmpi/4.0, .../modulerc3/foo/2.4/intel/.modulerc, .../modulerc3/foo/2.4/intel/2019/.modulerc, .../modulerc3/foo/2.4/intel/2019/intelmpi, .../modulerc3/foo/2.4/intel/2019/mvapich/.modulerc, .../modulerc3/foo/2.4/intel/2019/mvapich/2.3.1, .../modulerc3/foo/2.4/intel/2019/nompi, .../modulerc3/foo/2.4/intel/2019/openmpi/.modulerc, .../modulerc3/foo/2.4/intel/2019/openmpi/4.0, .../modulerc3/foo/2.4/pgi/.modulerc, .../modulerc3/foo/2.4/pgi/19.4/.modulerc, .../modulerc3/foo/2.4/pgi/19.4/nompi, .../modulerc3/foo/2.4/pgi/19.4/openmpi/.modulerc, .../modulerc3/foo/2.4/pgi/19.4/openmpi/3.1, .../compiler-etc-dependencies/modulerc3/foo/common, .../modulerc3/foo/gcc/.modulerc, .../modulerc3/foo/gcc/8.2.0/.modulerc, .../modulerc3/foo/gcc/8.2.0/mvapich/.modulerc, .../modulerc3/foo/gcc/8.2.0/mvapich/2.1/1.1, .../modulerc3/foo/gcc/8.2.0/nompi/1.1, .../modulerc3/foo/gcc/8.2.0/openmpi/.modulerc, .../modulerc3/foo/gcc/8.2.0/openmpi/3.1/1.1, .../modulerc3/foo/gcc/9.1.0/.modulerc, .../modulerc3/foo/gcc/9.1.0/mvapich/.modulerc, .../modulerc3/foo/gcc/9.1.0/mvapich/2.3.1/2.4, .../modulerc3/foo/gcc/9.1.0/nompi/2.4, .../modulerc3/foo/gcc/9.1.0/openmpi/.modulerc, .../modulerc3/foo/gcc/9.1.0/openmpi/4.0/2.4, .../modulerc3/foo/intel/.modulerc, .../modulerc3/foo/intel/2018/.modulerc, .../modulerc3/foo/intel/2018/intelmpi/1.1, .../modulerc3/foo/intel/2018/mvapich/.modulerc, .../modulerc3/foo/intel/2018/mvapich/2.1/1.1, .../modulerc3/foo/intel/2018/nompi/1.1, .../modulerc3/foo/intel/2018/openmpi/.modulerc, .../modulerc3/foo/intel/2018/openmpi/3.1/1.1, .../modulerc3/foo/intel/2019/.modulerc, .../modulerc3/foo/intel/2019/intelmpi/2.4, .../modulerc3/foo/intel/2019/mvapich/.modulerc, .../modulerc3/foo/intel/2019/mvapich/2.3.1/2.4, .../modulerc3/foo/intel/2019/nompi/2.4, .../modulerc3/foo/intel/2019/openmpi/.modulerc, .../modulerc3/foo/intel/2019/openmpi/4.0/2.4, .../modulerc3/foo/pgi/.modulerc, .../modulerc3/foo/pgi/18.4/.modulerc, .../modulerc3/foo/pgi/18.4/mvapich/.modulerc, .../modulerc3/foo/pgi/18.4/mvapich/2.1/1.1, .../modulerc3/foo/pgi/18.4/nompi/1.1, .../modulerc3/foo/pgi/18.4/openmpi/.modulerc, .../modulerc3/foo/pgi/18.4/openmpi/3.1/1.1, .../modulerc3/foo/pgi/19.4/.modulerc, .../modulerc3/foo/pgi/19.4/nompi/2.4, .../modulerc3/foo/pgi/19.4/openmpi/.modulerc, .../modulerc3/foo/pgi/19.4/openmpi/3.1/2.4, .../compiler-etc-dependencies/modulerc3/gcc/8.2.0, .../compiler-etc-dependencies/modulerc3/gcc/9.1.0, .../compiler-etc-dependencies/modulerc3/gcc/common, .../compiler-etc-dependencies/modulerc3/intel/2018, .../compiler-etc-dependencies/modulerc3/intel/2019, .../modulerc3/intel/common, .../modulerc3/mvapich/.modulerc, .../modulerc3/mvapich/2.1/.modulerc, .../modulerc3/mvapich/2.1/gcc/.modulerc, .../modulerc3/mvapich/2.1/gcc/8.2.0, .../modulerc3/mvapich/2.1/gcc/9.1.0, .../modulerc3/mvapich/2.1/intel/.modulerc, .../modulerc3/mvapich/2.1/intel/2018, .../modulerc3/mvapich/2.1/intel/2019, .../modulerc3/mvapich/2.1/pgi/.modulerc, .../modulerc3/mvapich/2.1/pgi/18.4, .../modulerc3/mvapich/2.1/pgi/19.4, .../modulerc3/mvapich/2.3.1/.modulerc, .../modulerc3/mvapich/2.3.1/gcc/.modulerc, .../modulerc3/mvapich/2.3.1/gcc/9.1.0, .../modulerc3/mvapich/2.3.1/intel/.modulerc, .../modulerc3/mvapich/2.3.1/intel/2019, .../modulerc3/mvapich/2.3.1/pgi/.modulerc, .../modulerc3/mvapich/2.3.1/pgi/19.4, .../modulerc3/mvapich/common, .../modulerc3/mvapich/gcc/.modulerc, .../modulerc3/mvapich/gcc/8.2.0/2.1, .../modulerc3/mvapich/gcc/9.1.0/2.1, .../modulerc3/mvapich/gcc/9.1.0/2.3.1, .../modulerc3/mvapich/intel/.modulerc, .../modulerc3/mvapich/intel/2018/2.1, .../modulerc3/mvapich/intel/2019/2.1, .../modulerc3/mvapich/intel/2019/2.3.1, .../modulerc3/mvapich/pgi/.modulerc, .../modulerc3/mvapich/pgi/18.4/2.1, .../modulerc3/mvapich/pgi/19.4/2.1, .../modulerc3/mvapich/pgi/19.4/2.3.1, .../modulerc3/openmpi/.modulerc, .../modulerc3/openmpi/3.1/.modulerc, .../modulerc3/openmpi/3.1/gcc/.modulerc, .../modulerc3/openmpi/3.1/gcc/8.2.0, .../modulerc3/openmpi/3.1/gcc/9.1.0, .../modulerc3/openmpi/3.1/intel/.modulerc, .../modulerc3/openmpi/3.1/intel/2018, .../modulerc3/openmpi/3.1/intel/2019, .../modulerc3/openmpi/3.1/pgi/.modulerc, .../modulerc3/openmpi/3.1/pgi/18.4, .../modulerc3/openmpi/3.1/pgi/19.4, .../modulerc3/openmpi/4.0/.modulerc, .../modulerc3/openmpi/4.0/gcc/.modulerc, .../modulerc3/openmpi/4.0/gcc/9.1.0, .../modulerc3/openmpi/4.0/intel/.modulerc, .../modulerc3/openmpi/4.0/intel/2019, .../modulerc3/openmpi/4.0/pgi/.modulerc, .../modulerc3/openmpi/4.0/pgi/19.4, .../modulerc3/openmpi/common, .../modulerc3/openmpi/gcc/.modulerc, .../modulerc3/openmpi/gcc/8.2.0/3.1, .../modulerc3/openmpi/gcc/9.1.0/3.1, .../modulerc3/openmpi/gcc/9.1.0/4.0, .../modulerc3/openmpi/intel/.modulerc, .../modulerc3/openmpi/intel/2018/3.1, .../modulerc3/openmpi/intel/2019/3.1, .../modulerc3/openmpi/intel/2019/4.0, .../modulerc3/openmpi/pgi/.modulerc, .../modulerc3/openmpi/pgi/18.4/3.1, .../modulerc3/openmpi/pgi/19.4/3.1, .../modulerc3/openmpi/pgi/19.4/4.0, .../compiler-etc-dependencies/modulerc3/pgi/18.4, .../compiler-etc-dependencies/modulerc3/pgi/19.4, .../compiler-etc-dependencies/modulerc3/pgi/common, .../modulerc4/bar/.modulerc, .../modulerc4/bar/4.7/.modulerc, .../modulerc4/bar/4.7/gcc/.modulerc, .../modulerc4/bar/4.7/gcc/8.2.0/.modulerc, .../modulerc4/bar/4.7/gcc/8.2.0/avx, .../modulerc4/bar/4.7/gcc/8.2.0/sse4.1, .../modulerc4/bar/5.4/.modulerc, .../modulerc4/bar/5.4/gcc/.modulerc, .../modulerc4/bar/5.4/gcc/9.1.0/avx, .../modulerc4/bar/5.4/gcc/9.1.0/avx2, .../modulerc4/bar/avx/.modulerc, .../modulerc4/bar/avx/gcc/.modulerc, .../modulerc4/bar/avx/gcc/8.2.0/4.7, .../modulerc4/bar/avx/gcc/9.1.0/5.4, .../modulerc4/bar/avx2/.modulerc, .../modulerc4/bar/avx2/gcc/.modulerc, .../modulerc4/bar/avx2/gcc/9.1.0/5.4, .../compiler-etc-dependencies/modulerc4/bar/common, .../modulerc4/bar/gcc/.modulerc, .../modulerc4/bar/gcc/8.2.0/.modulerc, .../modulerc4/bar/gcc/8.2.0/avx/4.7, .../modulerc4/bar/gcc/8.2.0/sse4.1/4.7, .../modulerc4/bar/gcc/9.1.0/.modulerc, .../modulerc4/bar/gcc/9.1.0/avx/5.4, .../modulerc4/bar/gcc/9.1.0/avx2/5.4, .../modulerc4/bar/sse4.1/.modulerc, .../modulerc4/bar/sse4.1/gcc/.modulerc, .../modulerc4/bar/sse4.1/gcc/8.2.0/4.7, .../modulerc4/foo/.modulerc, .../modulerc4/foo/1.1/.modulerc, .../modulerc4/foo/1.1/gcc/.modulerc, .../modulerc4/foo/1.1/gcc/8.2.0/.modulerc, .../modulerc4/foo/1.1/gcc/8.2.0/mvapich/.modulerc, .../modulerc4/foo/1.1/gcc/8.2.0/mvapich/2.1, .../modulerc4/foo/1.1/gcc/8.2.0/nompi, .../modulerc4/foo/1.1/gcc/8.2.0/openmpi/.modulerc, .../modulerc4/foo/1.1/gcc/8.2.0/openmpi/3.1, .../modulerc4/foo/1.1/intel/.modulerc, .../modulerc4/foo/1.1/intel/2018/.modulerc, .../modulerc4/foo/1.1/intel/2018/intelmpi, .../modulerc4/foo/1.1/intel/2018/mvapich/.modulerc, .../modulerc4/foo/1.1/intel/2018/mvapich/2.1, .../modulerc4/foo/1.1/intel/2018/nompi, .../modulerc4/foo/1.1/intel/2018/openmpi/.modulerc, .../modulerc4/foo/1.1/intel/2018/openmpi/3.1, .../modulerc4/foo/1.1/pgi/.modulerc, .../modulerc4/foo/1.1/pgi/18.4/.modulerc, .../modulerc4/foo/1.1/pgi/18.4/mvapich/.modulerc, .../modulerc4/foo/1.1/pgi/18.4/mvapich/2.1, .../modulerc4/foo/1.1/pgi/18.4/nompi, .../modulerc4/foo/1.1/pgi/18.4/openmpi/.modulerc, .../modulerc4/foo/1.1/pgi/18.4/openmpi/3.1, .../modulerc4/foo/2.4/.modulerc, .../modulerc4/foo/2.4/gcc/.modulerc, .../modulerc4/foo/2.4/gcc/9.1.0/.modulerc, .../modulerc4/foo/2.4/gcc/9.1.0/mvapich/.modulerc, .../modulerc4/foo/2.4/gcc/9.1.0/mvapich/2.3.1, .../modulerc4/foo/2.4/gcc/9.1.0/nompi, .../modulerc4/foo/2.4/gcc/9.1.0/openmpi/.modulerc, .../modulerc4/foo/2.4/gcc/9.1.0/openmpi/4.0, .../modulerc4/foo/2.4/intel/.modulerc, .../modulerc4/foo/2.4/intel/2019/.modulerc, .../modulerc4/foo/2.4/intel/2019/intelmpi, .../modulerc4/foo/2.4/intel/2019/mvapich/.modulerc, .../modulerc4/foo/2.4/intel/2019/mvapich/2.3.1, .../modulerc4/foo/2.4/intel/2019/nompi, .../modulerc4/foo/2.4/intel/2019/openmpi/.modulerc, .../modulerc4/foo/2.4/intel/2019/openmpi/4.0, .../modulerc4/foo/2.4/pgi/.modulerc, .../modulerc4/foo/2.4/pgi/19.4/.modulerc, .../modulerc4/foo/2.4/pgi/19.4/nompi, .../modulerc4/foo/2.4/pgi/19.4/openmpi/.modulerc, .../modulerc4/foo/2.4/pgi/19.4/openmpi/3.1, .../compiler-etc-dependencies/modulerc4/foo/common, .../modulerc4/foo/gcc/.modulerc, .../modulerc4/foo/gcc/8.2.0/.modulerc, .../modulerc4/foo/gcc/8.2.0/mvapich/.modulerc, .../modulerc4/foo/gcc/8.2.0/mvapich/2.1/1.1, .../modulerc4/foo/gcc/8.2.0/nompi/1.1, .../modulerc4/foo/gcc/8.2.0/openmpi/.modulerc, .../modulerc4/foo/gcc/8.2.0/openmpi/3.1/1.1, .../modulerc4/foo/gcc/9.1.0/.modulerc, .../modulerc4/foo/gcc/9.1.0/mvapich/.modulerc, .../modulerc4/foo/gcc/9.1.0/mvapich/2.3.1/2.4, .../modulerc4/foo/gcc/9.1.0/nompi/2.4, .../modulerc4/foo/gcc/9.1.0/openmpi/.modulerc, .../modulerc4/foo/gcc/9.1.0/openmpi/4.0/2.4, .../modulerc4/foo/intel/.modulerc, .../modulerc4/foo/intel/2018/.modulerc, .../modulerc4/foo/intel/2018/intelmpi/1.1, .../modulerc4/foo/intel/2018/mvapich/.modulerc, .../modulerc4/foo/intel/2018/mvapich/2.1/1.1, .../modulerc4/foo/intel/2018/nompi/1.1, .../modulerc4/foo/intel/2018/openmpi/.modulerc, .../modulerc4/foo/intel/2018/openmpi/3.1/1.1, .../modulerc4/foo/intel/2019/.modulerc, .../modulerc4/foo/intel/2019/intelmpi/2.4, .../modulerc4/foo/intel/2019/mvapich/.modulerc, .../modulerc4/foo/intel/2019/mvapich/2.3.1/2.4, .../modulerc4/foo/intel/2019/nompi/2.4, .../modulerc4/foo/intel/2019/openmpi/.modulerc, .../modulerc4/foo/intel/2019/openmpi/4.0/2.4, .../modulerc4/foo/pgi/.modulerc, .../modulerc4/foo/pgi/18.4/.modulerc, .../modulerc4/foo/pgi/18.4/mvapich/.modulerc, .../modulerc4/foo/pgi/18.4/mvapich/2.1/1.1, .../modulerc4/foo/pgi/18.4/nompi/1.1, .../modulerc4/foo/pgi/18.4/openmpi/.modulerc, .../modulerc4/foo/pgi/18.4/openmpi/3.1/1.1, .../modulerc4/foo/pgi/19.4/.modulerc, .../modulerc4/foo/pgi/19.4/nompi/2.4, .../modulerc4/foo/pgi/19.4/openmpi/.modulerc, .../modulerc4/foo/pgi/19.4/openmpi/3.1/2.4, .../compiler-etc-dependencies/modulerc4/gcc/8.2.0, .../compiler-etc-dependencies/modulerc4/gcc/9.1.0, .../compiler-etc-dependencies/modulerc4/gcc/common, .../compiler-etc-dependencies/modulerc4/intel/2018, .../compiler-etc-dependencies/modulerc4/intel/2019, .../modulerc4/intel/common, .../modulerc4/mvapich/.modulerc, .../modulerc4/mvapich/2.1/.modulerc, .../modulerc4/mvapich/2.1/gcc/.modulerc, .../modulerc4/mvapich/2.1/gcc/8.2.0, .../modulerc4/mvapich/2.1/gcc/9.1.0, .../modulerc4/mvapich/2.1/intel/.modulerc, .../modulerc4/mvapich/2.1/intel/2018, .../modulerc4/mvapich/2.1/intel/2019, .../modulerc4/mvapich/2.1/pgi/.modulerc, .../modulerc4/mvapich/2.1/pgi/18.4, .../modulerc4/mvapich/2.1/pgi/19.4, .../modulerc4/mvapich/2.3.1/.modulerc, .../modulerc4/mvapich/2.3.1/gcc/.modulerc, .../modulerc4/mvapich/2.3.1/gcc/9.1.0, .../modulerc4/mvapich/2.3.1/intel/.modulerc, .../modulerc4/mvapich/2.3.1/intel/2019, .../modulerc4/mvapich/2.3.1/pgi/.modulerc, .../modulerc4/mvapich/2.3.1/pgi/19.4, .../modulerc4/mvapich/common, .../modulerc4/mvapich/gcc/.modulerc, .../modulerc4/mvapich/gcc/8.2.0/2.1, .../modulerc4/mvapich/gcc/9.1.0/2.1, .../modulerc4/mvapich/gcc/9.1.0/2.3.1, .../modulerc4/mvapich/intel/.modulerc, .../modulerc4/mvapich/intel/2018/2.1, .../modulerc4/mvapich/intel/2019/2.1, .../modulerc4/mvapich/intel/2019/2.3.1, .../modulerc4/mvapich/pgi/.modulerc, .../modulerc4/mvapich/pgi/18.4/2.1, .../modulerc4/mvapich/pgi/19.4/2.1, .../modulerc4/mvapich/pgi/19.4/2.3.1, .../modulerc4/openmpi/.modulerc, .../modulerc4/openmpi/3.1/.modulerc, .../modulerc4/openmpi/3.1/gcc/.modulerc, .../modulerc4/openmpi/3.1/gcc/8.2.0, .../modulerc4/openmpi/3.1/gcc/9.1.0, .../modulerc4/openmpi/3.1/intel/.modulerc, .../modulerc4/openmpi/3.1/intel/2018, .../modulerc4/openmpi/3.1/intel/2019, .../modulerc4/openmpi/3.1/pgi/.modulerc, .../modulerc4/openmpi/3.1/pgi/18.4, .../modulerc4/openmpi/3.1/pgi/19.4, .../modulerc4/openmpi/4.0/.modulerc, .../modulerc4/openmpi/4.0/gcc/.modulerc, .../modulerc4/openmpi/4.0/gcc/9.1.0, .../modulerc4/openmpi/4.0/intel/.modulerc, .../modulerc4/openmpi/4.0/intel/2019, .../modulerc4/openmpi/4.0/pgi/.modulerc, .../modulerc4/openmpi/4.0/pgi/19.4, .../modulerc4/openmpi/common, .../modulerc4/openmpi/gcc/.modulerc, .../modulerc4/openmpi/gcc/8.2.0/3.1, .../modulerc4/openmpi/gcc/9.1.0/3.1, .../modulerc4/openmpi/gcc/9.1.0/4.0, .../modulerc4/openmpi/intel/.modulerc, .../modulerc4/openmpi/intel/2018/3.1, .../modulerc4/openmpi/intel/2019/3.1, .../modulerc4/openmpi/intel/2019/4.0, .../modulerc4/openmpi/pgi/.modulerc, .../modulerc4/openmpi/pgi/18.4/3.1, .../modulerc4/openmpi/pgi/19.4/3.1, .../modulerc4/openmpi/pgi/19.4/4.0, .../compiler-etc-dependencies/modulerc4/pgi/18.4, .../compiler-etc-dependencies/modulerc4/pgi/19.4, .../compiler-etc-dependencies/modulerc4/pgi/common, .../tcllib/ChildModules.tcl, .../tcllib/CompilerFromPath.tcl, .../tcllib/CompilerUtils.tcl, .../compiler-etc-dependencies/tcllib/GetFamVer.tcl, .../tcllib/LoadedCompMatches.tcl, .../tcllib/LoadedModules.tcl, .../tcllib/LoadedMpiMatches.tcl, .../compiler-etc-dependencies/tcllib/MpiUtils.tcl, .../tcllib/WarningUtils.tcl, .../tcllib/common_utilities.tcl, .../compiler-etc-dependencies/tcllib/temp.tcl, doc/source/cookbook/compiler-etc-dependencies.rst: doc: add compiler-etc-dependencies cookbook recipe New cookbook discussing various strategies for creating modulefiles for packages with multiple builds depending on previously loaded compiler, MPI libraries etc. (E.g. handling different "flavors" of packages) 2020-02-19 Xavier Delaruelle <[email protected]> * script/createmodule.sh: script: fix path deduplication in createmodule.sh Fixes #316 2020-02-17 Xavier Delaruelle <[email protected]> * testsuite/modules.00-init/006-procs.exp: ts: adapt perl code which sets _mlstatus * modulecmd.tcl.in: Lift perl variable strictness for _mlstatus Declaration of $_mlstatus (evaluation status variable) cannot be done as part of generated code passed to `eval` statement. If $_mlstatus is declared or re-declared as part of evaluated code, defined value cannot be retrieved afterward in `module` subroutine. To be able to retrieve the value of $_mlstatus set within generated code evaluation yet avoiding warnings of a 'use strict;' mode, temporarily disable variable strictness. 2020-02-10 Andrey Maslennikov <[email protected]> * modulecmd.tcl.in: Add "my" for perl's $_mlstatus Since this variable is always rendered it might be evaluated in a strict scope and fail with the following error: `Global symbol "$_mlstatus" requires explicit package name (did you forget to declare "my $_mlstatus"?)` 2020-02-17 Xavier Delaruelle <[email protected]> * testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/040-subshell.exp, testsuite/install.00-init/050-crossshell.exp: ts: adapt (again) err msg and code for fish 3.1 2020-02-17 Armin Wehrfritz <[email protected]> * script/createmodule.py.in: script: fix createmodule.py for python3 Fixes #315 2020-02-17 Xavier Delaruelle <[email protected]> * .gitignore: git: ignore dir used for local tests 2020-02-15 Xavier Delaruelle <[email protected]> * testsuite/install.00-init/040-subshell.exp: ts: adapt err msg for fish 3.1 2020-02-11 Xavier Delaruelle <[email protected]> * configure: install: pass --with-python option to compat configure 2020-02-10 Xavier Delaruelle <[email protected]> * contrib/rpm/environment-modules.spec.in: rpm: use configure option --with-python to set shebang * Makefile: install: build and install createmodule.py in bindir * Makefile: install: ensure all built scripts have exec perms * INSTALL.rst, configure: install: add --with-python configure option Enable to pass a specific Python interpreter command name or location at configure step with `--with-python` option. Specified command name or location should be found on build system only if building from git repository. * .gitignore, INSTALL.rst, Makefile, Makefile.inc.in, configure, script/{createmodule.py => createmodule.py.in}, .../{gitlog2changelog.py => gitlog2changelog.py.in}: install: build createmodule.py/gitlog2changelog.py to set shebang Adapt configure script and Makefile to detect `python` command location and set it as shebang for `createmodule.py` and `gitlog2changelog.py`. If python command is not found python3 then python2 are searched. 2020-02-09 Xavier Delaruelle <[email protected]> * .travis.yml: travis: fix configuration warnings * .travis.yml: travis: replace a CentOS 6 test case by a CentOS 8 * Makefile, configure: install: %D git-log placeholder by not be supported * .travis.yml, Makefile: install/travis: add rules to build rpm and test it * testsuite/modules.00-init/005-init_ts.exp: ts: output detected tty col number 2020-02-05 Xavier Delaruelle <[email protected]> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/375-deps6.exp, testsuite/modules.50-cmds/376-switch.exp: ts: fix msg block err tests with regexp special chars 2020-02-04 Xavier Delaruelle <[email protected]> * testsuite/modules.00-init/006-procs.exp, testsuite/modules.60-initx/010-init_ts.exp: ts: output test error details whatever verbose value 2020-02-03 Xavier Delaruelle <[email protected]> * .gitignore, Makefile, script/mt: install/script: abort auxiliary tools download after few seconds Abort download of icdiff, nagelfar or tclsh83 after 2 timeouts of 5 seconds and record download failure for icdiff to avoid mt script to attempt a new download tentative every time it is called. 2020-02-03 Andrey Portnoy <[email protected]> * script/add.modules.in: Fix typo in add.modules.in 2020-02-03 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modulefiles.path1/loc_dv10/.version, testsuite/modulefiles.path1/loc_dv10/1.1, testsuite/modulefiles.path2/loc_dv10/.version, testsuite/modulefiles.path2/loc_dv10/1.2, testsuite/modules.20-locate/069-cross.exp: Fix sym version targetting mod version with space in name Correctly handle symbolic version target including a whitespace in their name. 2020-02-02 Xavier Delaruelle <[email protected]> * NEWS.rst: doc: desc. git archive build and createmodule script fixes in NEWS 2020-02-01 Xavier Delaruelle <[email protected]> * script/createmodule.py, script/createmodule.sh: script: fix createmodule.{sh,py} for script outputting text Inhibit output generated by scripts evaluated by createmodule.sh and createmodule.py to ensure these outputs will not get in the way when analyzing the environment change done by the evaluated scripts. Fixes #309 * script/createmodule.sh: script: avoid shell func defs in createmodule.sh Fix createmodule.sh script to correctly analyses environment when shell functions are found defined in it. These shell function definitions are skipped. 2020-01-30 Xavier Delaruelle <[email protected]> * INSTALL.rst: doc: need more tools to install from a git archive export 2020-01-29 Xavier Delaruelle <[email protected]> * Makefile, configure, doc/Makefile, testsuite/install.00-init/030-options.exp: install: need sphinx if dist does not contain prebuilt doc Check at configure step if pre-built documents are available, if found Sphinx-related makefile rules are inhibited. Otherwise Sphinx availability is tested and documentation build is disabled if not found. * .gitignore, Makefile: install: no txt version of docs at dist root * Makefile: install: no need to pre-build README file in dist * README.md: doc: update core dev list in README * .gitattributes, Makefile, doc/Makefile: install: no exclude of doc files from git archive dist No more exclusion of project-related or installation documents from git archive distribution. Enable makefile rules relative to Sphinx documentation build even if not building from git repository. With release distribution tarballs nothing changes as document is pre-built in these archives. When working from a `git archive` export, these Sphinx rules will help to build docs. 2020-01-28 Xavier Delaruelle <[email protected]> * doc/Makefile: install: do not clean ml.1 on 'make clean' if pre-built * Makefile: install: add missing ml.1 pre-built doc in dist * .gitattributes, Makefile: install: build empty changelog if not building from git In case Modules is built from a `git archive` distribution, generate a bare ChangeLog file only referring to the NEWS document. Always include gitlog2changelog.py tool in distributions, but do not run it if not building from a git repository. * configure: install: auto disable compat build if no src and not in git 2020-01-26 Xavier Delaruelle <[email protected]> * .gitattributes, Makefile, configure, version.inc.in: install: enable version.inc build outside git repository Make `git archive` substitute .version.inc.in with commit hash, date and refs. Compute MODULES_BUILD and MODULES_BUILD_DATE from these informations in ./configure and Makefile if not working from git repository. 2020-01-20 Xavier Delaruelle <[email protected]> * MIGRATING.rst, NEWS.rst: doc: desc. Improved Windows support in NEWS/MIGRATING 2020-01-25 Xavier Delaruelle <[email protected]> * README.md: doc: add ref to ml(1) man page in README 2020-01-20 Xavier Delaruelle <[email protected]> * .appveyor.yml: appveyor: add native windows installation test case 2020-01-24 Xavier Delaruelle <[email protected]> * Makefile, script/TESTINSTALL.bat: script: add TESTINSTALL.bat script and ship it in dist-win * script/ml.cmd, script/module.cmd: script: ensure relevant exit code is set at end of win scripts 2020-01-23 Xavier Delaruelle <[email protected]> * Makefile, INSTALL.bat => script/INSTALL.bat, UNINSTALL.bat => script/UNINSTALL.bat: script: move INSTALL.bat & UNINSTALL.bat in script dir 2020-01-22 Xavier Delaruelle <[email protected]> * INSTALL.bat, UNINSTALL.bat: install: set session PATH in INSTALL/UNINSTALL win scripts * INSTALL.bat: install: fix location of Windows find command 2020-01-18 Xavier Delaruelle <[email protected]> * doc/source/FAQ.rst, doc/source/index.rst: doc: reorganize documentation index 2020-01-17 Xavier Delaruelle <[email protected]> * doc/howto/using_on_windows.pdf: doc: remove now deprecated using_on_windows howto * Makefile, UNINSTALL.bat: install: provide a basic uninstall script for Windows 2020-01-15 Xavier Delaruelle <[email protected]> * init/cmd.cmd, script/ml.cmd, script/module.cmd: script/init: quote path variables in win-specific scripts To handle installation path containing whitespaces like "C:\Program Files\Environment Modules". * INSTALL.bat, Makefile: install: provide a basic install script for Windows * .gitignore, Makefile, init/Makefile: install: add dist-win rule to build win-specific dist zip ball * Makefile, NEWS.rst, script/ml.cmd, testsuite/install.00-init/030-options.exp: install: add ml.cmd wrapper on Windows installation * .gitattributes, .gitignore, INSTALL-win.rst, INSTALL-win.txt, Makefile, doc/Makefile, doc/source/INSTALL-win.rst, doc/source/index.rst: doc: transform INSTALL-win.txt into INSTALL-win.rst 2020-01-13 Xavier Delaruelle <[email protected]> * INSTALL.rst, NEWS.rst: doc: desc --enable-windows-support in NEWS/INSTALL * .travis.yml, site.exp.in, testsuite/install.00-init/030-options.exp: ts: add test to check win-specific file install * script/module.cmd: script: simplify module.cmd batch file Execute initialization script if MODULES_CMD environment variable is not found defined. * init/cmd.cmd: init: simplify cmd init file Always define Modules-specific environment variables when running `cmd` initialization file. * Makefile, {windows => script}/module.cmd: script: move win-specific module.cmd file in script dir * Makefile, init/Makefile, windows/moduleinit.cmd => init/cmd.cmd, windows/module.cmd: init: move windows/moduleinit.cmd as init/cmd.cmd file 2019-05-21 Jacques Raphanel <[email protected]> * Makefile, Makefile.inc.in, configure: Install: add --enable-windows-support configure option Provide new `--enable-windows-support` option for configure to automatically install windows batch file to bin directory during install step. This new option is not enabled by default. 2019-05-08 Jacques Raphanel <[email protected]> * windows/module.cmd, windows/moduleinit.cmd: Add support for portable/standalone install on Windows Update moduleinit.cmd file to set Modules-specific environment variables according to the script directory and the file existence for: * MODULESHOME if not defined yet and if `..\libexec\modulecmd.tcl` exists * add `..\bin` directory to PATH if `module.cmd` is not available from PATH and available from `..\bin` * add `..\bin` directory to PATH if `tclsh.exe` is not available from PATH and available from `..\bin` Automatically call `moduleinit.cmd` from `module.cmd` if modules is not initialized yet (based on environment variables) Fixes #272 2020-01-12 Xavier Delaruelle <[email protected]> * .travis.yml: travis: increase testsuite timeout to 25mins * Makefile: install: use newer version of nagelfar (1.3.1) * Makefile: install: use newer version of icdiff (1.9.5) * .gitattributes, contrib/pre-commit: contrib: remove not-used-anymore pre-commit script * .gitattributes, .gitignore: git: remove refs to deleted www-specific stuff * .appveyor.yml, .cirrus.yml, .gitattributes, .gitignore, .travis.yml, Makefile, NEWS.rst, contrib/readme.txt, contrib/rpm/environment-modules.spec.in, {contrib/scripts => script}/add.modules.in, {contrib/scripts => script}/createmodule.py, {contrib/scripts => script}/createmodule.sh, {contrib => script}/envml, {contrib => script}/gitlog2changelog.py, {contrib => script}/mb, {contrib/scripts => script}/mkroot, {contrib => script}/mlprof, {contrib/scripts => script}/modulecmd.in, {contrib => script}/mt, {contrib => script}/mtreview, {contrib => script}/nglfar2ccov, {contrib => script}/playdemo: script: move all dist. and maint. scripts in a script dir * .gitignore, Makefile, NEWS.rst, contrib/{mb.in => mb}, contrib/{mlprof.in => mlprof}, contrib/mt, contrib/{mtreview.in => mtreview}, contrib/{playdemo.in => playdemo}: script: remove need to build project management-specific tools Make mb, mlprof, mtreview and playdemo use `/usr/bin/env tclsh` shebang rather applying there TCLSH location defined by `./configure` process. 2019-12-20 Xavier Delaruelle <[email protected]> * testsuite/modulefiles.2/NaN, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/045-listlong.exp, testsuite/modules.70-maint/290-json.exp, testsuite/modules.90-avail/070-full.exp: ts: test json output in 70/290 2019-12-18 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Make -j/-t/-l mutually exclusive Use of --json command line switch automatically disables previous enablement of -t or -l. Same goes for --terse and --long switches. * modulecmd.tcl.in: Save err msg if json output to render them all together Record error messages in a g_report_erralist global array list rather output them directly in order to output all of them together in a JSON structure right before exiting. * modulecmd.tcl.in: Render final error message through reportError Use regular reportError procedure to also render the last error message before exiting. Re-enable error report prior this call in case it was previously inhibited. Also clear all record message ids to ensure last error will be rendered at top level. 2019-12-17 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Enable JSON output only on supported sub-cmd 2019-12-13 Xavier Delaruelle <[email protected]> * MIGRATING.rst, NEWS.rst: doc: desc -j/--json in NEWS/MIGRATING * doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: desc. -j/--json option in diff/man * modulecmd.tcl.in: Add support for JSON output on whatis/search subcmds 2019-12-12 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Add support for JSON output on savelist subcmd * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module: init: add -j/--json options to completion scripts * modulecmd.tcl.in: Add support for JSON output on list subcmd 2019-12-11 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Add support for JSON output on avail subcmd Fixes #303 * modulecmd.tcl.in: Add --json/-j command-line switches * modulecmd.tcl.in: Handle output report done in JSON format * modulecmd.tcl.in: Add modfile pathname to result returned by findModules 2019-12-15 Xavier Delaruelle <[email protected]> * NEWS.rst, modulecmd.tcl.in, testsuite/modulefiles.2/loc, testsuite/modulefiles.2/unloc, testsuite/modules.00-init/070-command.exp, testsuite/modules.70-maint/280-ml.exp: Fix mod subcmd abbrev match Fix module sub-command abbreviation match to ensure passed abbreviated form fully match sub-command, not only its minimal abbreviated form. As an example, ``lod`` or ``loda`` do not match anymore the ``load`` sub-command, ``lo`` or ``loa`` still do. * modulecmd.tcl.in, testsuite/modulefiles.2/f, testsuite/modulefiles.2/t, testsuite/modules.70-maint/280-ml.exp: Filter-out all known cmd line switches when parsing ml args To accurately determine specified module sub-command or list of modules to load or unload. 2019-12-08 Xavier Delaruelle <[email protected]> * MIGRATING.rst, NEWS.rst: doc: desc ml in NEWS/MIGRATING 2019-12-01 Xavier Delaruelle <[email protected]> * init/Makefile, init/bash.in, init/sh.in: init: ensure ml is defined in bash/ksh subshells * .travis.yml: travis: disable ml on a CI case * testsuite/example/modulerc-1.in, testsuite/modules.70-maint/120-autoinit.exp: ts: adapt autoinit output test for 'ml' * testsuite/bin/install_test_cmake, testsuite/bin/install_test_perl, testsuite/bin/install_test_python, testsuite/bin/install_test_r, testsuite/bin/install_test_ruby, testsuite/bin/install_test_tcl, testsuite/install.00-init/024-ml.exp, testsuite/install.00-init/025-autoinit.exp, testsuite/install.00-init/040-subshell.exp, testsuite/install.00-init/080-args.exp: ts: test 'ml' over Modules installation 2019-11-28 Xavier Delaruelle <[email protected]> * testsuite/modulefiles.2/bar/0.1, testsuite/modulefiles.2/bar/0.2, testsuite/modulefiles.2/bar/1, testsuite/modulefiles.2/bar/2, testsuite/modulefiles.2/baz/1, testsuite/modulefiles.2/baz/2, testsuite/modulefiles.2/foo/0.1, testsuite/modulefiles.2/foo/0.2, testsuite/modulefiles.2/foo/1, testsuite/modulefiles.2/foo/2, testsuite/modulefiles.2/load, testsuite/modulefiles.2/mlinmod, testsuite/modulefiles.2/modemptyarg/swap, testsuite/modulefiles.2/modemptyarg/swap2, testsuite/modulefiles.2/qux/1, testsuite/modulefiles.2/qux/2, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.70-maint/280-ml.exp: ts: add test for 'ml' command * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.50-cmds/301-interp-command.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/045-listlong.exp, testsuite/modules.70-maint/230-verbosity.exp: ts: set global var for cur loaded msg header * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/080-begenv.exp, testsuite/modules.00-init/150-access-init.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.70-maint/043-listno.exp, testsuite/modules.70-maint/048-listlongno.exp: ts: set in a common var the no loaded msg * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/015-version.exp, testsuite/modules.00-init/100-pager.exp, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/150-access-init.exp, testsuite/modules.70-maint/220-config.exp: ts: set a common var for Modules version report msg 2019-11-26 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Add ml procedure 2019-11-27 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/example/siteconfig.tcl-1: Adapt parseModuleVersionSpecifier proc mlspec Add a 'mlspec' argument to the parseModuleVersionSpecifier procedure to indicate module specification comes or not from the 'ml' command. A slightly different processing is applied in this case as module name may be prefixed by a '-' character when specified over the 'ml' command to indicate this module should be unloaded. When mlspec is enabled two lists are returned by parseModuleVersionSpecifier: one for the list of the module to load and another for the modules to unload. 2019-11-26 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Define ml func/alias if enabled in renderAutoinit * modulecmd.tcl.in: Add cmdMlHelp proc to output ml usage msg * modulecmd.tcl.in: Adapt main to call 'ml' procs when ml is called cmd 2019-11-25 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Resolve and check module command in parseModuleCommandName Add parseModuleCommandName procedure to handle the name check and resolution (in case of aliased name) of the command supplied to the module procedure. 2019-11-22 Xavier Delaruelle <[email protected]> * contrib/rpm/environment-modules.spec.in, doc/Makefile, doc/source/conf.py, doc/source/index.rst, doc/source/ml.rst, doc/source/module.rst: doc/rpm: add ml man page * INSTALL.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst, doc/source/modulefile.rst: doc: desc ml in man/diff/INSTALL * testsuite/modules.70-maint/220-config.exp: ts: adapt existing tests to ml cfg opt * Makefile, Makefile.inc.in, configure, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, site.exp.in: Introduce ml configuration option Add the ability to control whether or not a ``ml`` command should be defined at Modules initialization time. `ml` is a handy frontend to the module command: it reduces the number of characters to type to trigger module. Enablement is managed throught a new configuration option named `ml` (which defines `MODULES_ML` environment variable when set). It may be enabled by default in `modulecmd.tcl` script with option `--enable-ml` passed to `./configure` script. 2019-11-16 Xavier Delaruelle <[email protected]> * .../design/default-latest-version-specifiers.rst: doc: add default-latest-version-specifiers design notes 2020-01-09 Xavier Delaruelle <[email protected]> * NEWS.rst: doc: desc. doc improvements in NEWS 2020-01-08 Xavier Delaruelle <[email protected]> * doc/source/module.rst: doc: alphabetically sort sub-cmds, opts and envar in module.1 * doc/source/modulefile.rst: doc: alphabetically sort modulefile cmds in modulefile.4 * doc/source/diff_v3_v4.rst: doc: apply same markup on diff doc than man pages * doc/source/module.rst, doc/source/modulefile.rst: doc: split lines larger than 78 cols in man pages * doc/source/modulefile.rst: doc: desc. modulefile cmd version addition in modulefile.4 2020-01-08 Colin Marquardt <[email protected]> * doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: desc. env var version addition in module.1 * doc/source/module.rst: doc: desc. sub-cmds version addition in module.1 2020-01-08 Xavier Delaruelle <[email protected]> * doc/source/module.rst: doc: desc. cmd line switches version addition in module.1 2020-01-08 Colin Marquardt <[email protected]> * doc/source/module.rst, doc/source/modulefile.rst: doc: markup code with double backticks in man pages 2020-01-07 Xavier Delaruelle <[email protected]> * doc/source/module.rst, doc/source/modulefile.rst: doc: fix missing ref link in or between man pages 2020-01-07 Colin Marquardt <[email protected]> * doc/source/module.rst, doc/source/modulefile.rst: doc: markup modulefile cmd with :mfcmd: in man pages * doc/source/modulefile.rst: doc: markup modulefile cmd sections with .. mfcmd:: in man pages * doc/source/module.rst, doc/source/modulefile.rst: doc: markup subcmd with :subcmd: in man pages * doc/source/module.rst: doc: markup subcmd sections with .. subcmd:: in man pages 2020-01-07 Xavier Delaruelle <[email protected]> * doc/source/conf.py: doc: add sphinx directives/roles for sub-cmd and modulefile cmd 2020-01-06 Xavier Delaruelle <[email protected]> * doc/source/conf.py, doc/source/module.rst: doc: markup autogen files with :file: in man pages 2020-01-06 Colin Marquardt <[email protected]> * doc/source/module.rst: doc: markup option sections with .. option:: in man pages * doc/source/module.rst, doc/source/modulefile.rst: doc: markup cmd opt with :option: in man pages * doc/source/module.rst, doc/source/modulefile.rst: doc: markup env var with :envvar: in man pages * doc/source/module.rst, doc/source/modulefile.rst: doc: markup env var sections with .. envar:: in man pages * doc/source/module.rst, doc/source/modulefile.rst: doc: markup cmds with :command: in man pages 2020-01-05 Colin Marquardt <[email protected]> * doc/source/modulefile.rst: doc: markup man page ref with :manpage: in man pages * doc/source/module.rst, doc/source/modulefile.rst: doc: markup files with :file: in man pages * doc/source/module.rst, doc/source/modulefile.rst: doc: fix ref link to Locating Modulefiles section * doc/example/modulepaths-persist-over-sudo/rc, doc/example/test-modulefiles/modulefiles/test_dir_and_file, doc/source/cookbook/ensure-user-qualify-modules.rst, doc/source/cookbook/inhibit-report-info.rst, doc/source/cookbook/log-module-commands.rst, doc/source/cookbook/module-info-name-return-basename.rst, doc/source/cookbook/modulepaths-persist-over-sudo.rst, doc/source/cookbook/test-modulefiles.rst, doc/source/cookbook/unload-firstly-loaded.rst: doc: highlight code included in cookbook recipes Specify language directive for included Tcl script files in cookbook recipes to get their code highlighted in resulting HTML documents. As Pygment Tcl lexer used by Sphinx does not support the whole Tcl syntax, scripts of modulepaths-persist-over-sudo and test-modulefiles recipes have been adapted to enable highlighting. Change has not been performed over the expose-procs-vars-to-modulefiles and top-priority-values recipes as their code cannot be adapted to match lexer needs. * doc/source/diff_v3_v4.rst, doc/source/module.rst, doc/source/modulefile.rst: doc: fix some typos and grammar across documents 2020-01-08 Xavier Delaruelle <[email protected]> * .cirrus.yml: cirrus: update python requirement on FreeBSD test env 2020-01-03 Xavier Delaruelle <[email protected]> * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version 4.4.1 * doc/source/design/advanced-module-version-specifiers.rst: doc: clarify adv vers spec does not support identification context * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: ts: add tests to improve on-the-fly proc define coverage * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp, .../modules.70-maint/260-extended_default.exp, .../272-adv_version_spec-range.exp, testsuite/modules.90-avail/080-noindepth.exp: ts: add tests to improve modEq procs coverage * modulecmd.tcl.in: Remove useless getModuleFromVersSpec proc 2020-01-02 Xavier Delaruelle <[email protected]> * contrib/mlprof.in, doc/source/conf.py, modulecmd.tcl.in: New year (2020) copyright mention update * contrib/mlprof.in: contrib/mlprof: keep proc stats even if redefined 2019-12-30 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modulefiles/loc_sym/exec2, testsuite/modulefiles/loc_sym/exec3, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/090-memcache.exp: Cache getModules results Introduce a memory cache for the results build up by getModules procedure. Done in order to reuse these results if next searches are identical, which happens in whatis/search context. As a side effect a module resolution cannot be changed by the evaluation of a modulefile sharing same root name, as the initial module resolution to find this modulefile to evaluation has cached resolution result. This side effect should not however impact more than the project testsuite as module resolution should not be defined within a modulefile but within modulerc files. 2019-12-29 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Use modEqStatic proc in findModules * modulecmd.tcl.in: Introduce doesModMatchAtDepth procedure When defining modMatchAtDepth procedure also define the doesModMatchAtDepth procedure, similar to modMatchAtDepth but only receiving one module name as argument and returning a boolean. * modulecmd.tcl.in: Hardwire modMatchAtDepth procedure Redefine the modMatchAtDepth to hardwire indepth and test argument directly at procedure definition time to optimize performances. * modulecmd.tcl.in: Introduce modEqStatic procedure Introduce the modEqStatic procedure, a more static version of the modEq procedure to use in repetitive comparison contexts like done in getModules and modMatchAtDepth. In modEqStatic, search query is hard wired which removes the need to call getModuleVersSpec each time the procedure is called. Instead getModuleVersSpec is called when the modEqStatic procedure is defined to get the hard wire elements. Doing so saves a lot of time in the getModules routine. 2019-12-27 Xavier Delaruelle <[email protected]> * contrib/mb.in: contrib: adapt 'mb' script to profile rather bench module Adapt `mb` script to profile modulecmd test runs rather bench them when `profile` argument is passed to the script. * .gitignore, Makefile, contrib/mlprof.in: contrib: add 'mlprof' script Add the 'mlprof' script which wraps modulecmd.tcl to collect profiling information on its execution. 2019-12-25 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.00-init/140-color.exp: Highlight avail/whatis res matching adv vers spec query Improve highlighting of module avail and whatis search result by coloring module names matching search query expressed with the advanced version specifiers. A name@1,3 or name@1:3 queries now highlight name/1 and name/3 strings found in search result. 2019-12-23 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.70-maint/260-extended_default.exp, testsuite/modules.70-maint/270-adv_version_spec.exp, .../modules.70-maint/272-adv_version_spec-range.exp: Fix avail search for default vers when not matching query Fix module avail --default queries when modulefile default version does not match query: select latest version from modulefiles matching query unless implicit_default configuration is disabled in which case no default version is returned. * modulecmd.tcl.in, testsuite/modules.70-maint/270-adv_version_spec.exp, testsuite/modules.70-maint/271-adv_version_spec-in.exp: Fix avail queries in no-depth mode when res is a virtual mod When a module avail query performed in no-indepth mode and targets a virtual module, fix result to filter-out the directory holding the virtual module from result. * testsuite/modulefiles.indepth/deepA/1/notamod, testsuite/modulefiles.indepth/deepA/2/1/notamod, testsuite/modulefiles.indepth/deepA/4/.modulerc, testsuite/modulefiles.indepth/deepA/4/1/1/notamod, testsuite/modulefiles.indepth/deepA/4/1/2/1, testsuite/modulefiles.indepth/deepA/4/1/2/3, testsuite/modulefiles.indepth/deepA/4/1/3/.modulerc, testsuite/modulefiles.indepth/deepA/4/1/3/1, testsuite/modulefiles.indepth/deepA/4/1/3/2, testsuite/modules.70-maint/260-extended_default.exp, testsuite/modules.70-maint/270-adv_version_spec.exp, testsuite/modules.70-maint/272-adv_version_spec-range.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/080-noindepth.exp: ts: add tests for avail dir and filtering fixes * modulecmd.tcl.in: Fix avail queries when dirs in result in no-indepth mode In case a module avail query performed in a no-indepth mode with --latest/-L or --default/-d flags either enabled or disabled, fix query processing to return directory elements if they are part of result. 2019-12-22 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Fix -L/-d queries when upper dir not matching query In case module avail query does not match a directory but only its contained elements (for instance `module av mod/7` matches mod/7.1 and mod/7.2 but not mod/), fix query processing to correctly return latest or default element in case --latest/-L or --default/-d flags are set. Add an ext_filter argument to getModules procedure to indicate that directories of elements matching query should be part of the result list even if these directories does not match query. This ext_filter argument is enabled by listModules procedure when latest or default filters are enabled. These directories are used when filtering is enabled to determine what element should be displayed. 2019-12-20 Xavier Delaruelle <[email protected]> * .travis.yml: travis: no more need for md5sha1sum pkg on OSX md5sum is now provided by coreutils 2019-12-17 Xavier Delaruelle <[email protected]> * .../design/advanced-module-version-specifiers.rst, doc/source/design/extended-default.rst, doc/source/design/insensitive-case.rst, doc/source/design/module-selection-contexts.rst: doc: fix rst bullet lists in design docs Conform to RST docutils standard [1] that express bullet lists and nested bullet lists should be separated by a blank line before and after them. Fixes #306. [1] https://docutils.sourceforge.io/docs/ref/rst/r estructuredtext.html#bullet-lists 2019-12-03 Xavier Delaruelle <[email protected]> * contrib/rpm/environment-modules.spec.in: rpm: fix spec file for el8 build Remove Modules compat version build dependency on tclx-devel package as TclX is not provided anymore in el8. Convert shebang of createmodule.py tool from python to python3. 2019-11-29 Xavier Delaruelle <[email protected]> * .travis.yml: travis: explicitly install wget on osx to fix libssl dep issue 2019-11-27 Xavier Delaruelle <[email protected]> * doc/source/module.rst: doc: add anchor for each module sub-cmd and env var * doc/source/modulefile.rst: doc: add anchor for each modulefile command 2019-11-21 Xavier Delaruelle <[email protected]> * testsuite/modulefiles.2/advvers10/1, testsuite/modulefiles.2/advvers10/2, testsuite/modulefiles.2/advvers10/3, testsuite/modulefiles.2/advvers10/4, testsuite/modulefiles.2/advvers10/5, testsuite/modulefiles.2/advvers10/6, testsuite/modulefiles.2/advvers10/7, testsuite/modulefiles.2/advvers10/8, testsuite/modulefiles.2/advvers8/1, testsuite/modulefiles.2/advvers8/2, testsuite/modulefiles.2/advvers8/3, testsuite/modulefiles.2/advvers9/.modulerc, testsuite/modulefiles.2/advvers9/1, testsuite/modulefiles.2/advvers9/2, testsuite/modulefiles.2/advvers9/3, testsuite/modulefiles.deps/haa, testsuite/modulefiles.deps/hab, testsuite/modulefiles.deps/hac/.modulerc, testsuite/modulefiles.deps/hac/1, testsuite/modulefiles.deps/hac/2, testsuite/modulefiles.deps/had, testsuite/modulefiles.deps/hae, testsuite/modules.50-cmds/378-sametarget.exp, .../modules.70-maint/271-adv_version_spec-in.exp, .../272-adv_version_spec-range.exp: ts: check load/prereq handle loaded non-default the same Add test to check dependency resolution applies the same against a non default version loaded whether module load/prereq is used to declared and whatever the auto_handling module enabled. Handling was different between module load and prereq prior c50e2ba7d3a03ecd2baa933a5ce8991835f3feb1. Which fixes #228. Added tests also check behavior against advanced module version specifier. 2019-11-20 Xavier Delaruelle <[email protected]> * .gitignore, doc/demo/Makefile: doc/demo: add Makefile to build imgs from session cast * .gitignore, Makefile, contrib/playdemo.in: contrib: add 'playdemo' script 2019-11-19 Xavier Delaruelle <[email protected]> * doc/demo/sc19/01welcome.cast, doc/demo/sc19/02config.cast, doc/demo/sc19/03auto_handling.cast, doc/demo/sc19/04icase.cast, doc/demo/sc19/05extended_default.cast, doc/demo/sc19/06advanced_version_spec.cast, doc/demo/sc19/07thanks.cast, doc/demo/sc19/script, doc/example/sc19/modulefiles/appA/1.0, doc/example/sc19/modulefiles/appA/2.0, doc/example/sc19/modulefiles/appB/1.0, doc/example/sc19/modulefiles/appC/.modulerc, doc/example/sc19/modulefiles/appC/1.0, doc/example/sc19/modulefiles/appC/2.0, doc/example/sc19/modulefiles/appC/2.2.10, doc/example/sc19/modulefiles/appC/2.2.2, doc/example/sc19/modulefiles/appC/2.4, doc/example/sc19/modulefiles/appC/3.6, doc/example/sc19/modulefiles/appD/1.2, doc/example/sc19/modulefiles/appD/2.1, doc/example/sc19/modulefiles/libX/1.0, doc/example/sc19/modulefiles/libX/2.0, doc/example/sc19/modulefiles/libY/.modulerc, doc/example/sc19/modulefiles/libY/1.0, doc/example/sc19/modulefiles/libY/2.0, doc/example/sc19/modulefiles/toolchain/a, doc/example/sc19/modulefiles/toolchain/b: doc: add sc19 demo 2019-11-16 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Skip mod loading msg if mod already loaded Skip output of module loading message if module is already loaded. * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp: Enclose in quote dep spec in error/warning mesg Fix error and warning messages relative to dependency management to enclose dependency specification in single quotes to clearly distinguish specification from each other. 2019-11-17 Xavier Delaruelle <[email protected]> * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version 4.4.0 2019-11-16 Xavier Delaruelle <[email protected]> * NEWS.rst: doc: desc. conflict fix/design notes/MODULESHOME in NEWS * doc/source/diff_v3_v4.rst, doc/source/module.rst, doc/source/modulefile.rst: doc: desc. advanced_version_spec in diff/man * INSTALL.rst, configure: doc: desc. advanced_version_spec in configure/INSTALL * MIGRATING.rst, NEWS.rst: doc: desc. advanced_version_spec in NEWS 2019-11-15 Xavier Delaruelle <[email protected]> * MIGRATING.rst: doc: desc. advanced_version_spec in MIGRATING 2019-11-13 Xavier Delaruelle <[email protected]> * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module: init: fix missing -i/--icase in completion scripts * testsuite/example/modulerc-1.in, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/220-config.exp: ts: adapt tests to new config option home * INSTALL.rst, Makefile, Makefile.inc.in, configure, doc/source/module.rst, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, site.exp.in: Introduce home configuration option Make MODULESHOME environment variable controllable through the `config` sub-command with `home` configuration option. A `--with-moduleshome` argument is also added to the ./configure script to set specific default value for this option at installation time. Fixes #292 2019-11-12 Xavier Delaruelle <[email protected]> * .../design/advanced-module-version-specifiers.rst: doc: refine again advanced_version_spec design * testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/020-module.exp, testsuite/modulefiles.2/advvers6/3.0, testsuite/modulefiles.2/advvers6/3.1, testsuite/modulefiles.2/advvers6/3.2, .../272-adv_version_spec-range.exp: ts: additionnal adv_vers_spec in 70/272 and install ts * .cirrus.yml: cirrus: install openmp to satisfy R needs 2019-11-11 Xavier Delaruelle <[email protected]> * testsuite/modulefiles.2/advvers6/1.2, testsuite/modulefiles.2/advvers6/1.3, testsuite/modulefiles.2/advvers6/1.4, testsuite/modulefiles.2/advvers6/1.5.1, testsuite/modulefiles.2/advvers6/1.5.2, testsuite/modulefiles.2/advvers6/1.6, testsuite/modulefiles.2/advvers6/1.7, testsuite/modulefiles.2/advvers6/1.8, testsuite/modulefiles.2/advvers6/2.0, testsuite/modulefiles.2/advvers6/2.1, testsuite/modulefiles.2/advvers7/.modulerc, testsuite/modulefiles.2/advvers7/0.9, testsuite/modulefiles.2/advvers7/1.0, testsuite/modulefiles.2/advvers7/1.1, testsuite/modulefiles.2/advvers7/1.2, testsuite/modulefiles.2/advvers7/1.3.1, testsuite/modulefiles.2/advvers7/1.3.2, testsuite/modulefiles.2/advvers7/2.0, testsuite/modulefiles.2/advvers7/2.1, testsuite/modulefiles.2/advvers7/2.2, testsuite/modulefiles.2/advvers7/3.0, testsuite/modulefiles.2/advvers7/3.1, testsuite/modulefiles.2/advvers7/3.2, testsuite/modulefiles.2/advvers7/3.3, testsuite/modulefiles.2/advvers7/4.0, testsuite/modulefiles.2/advvers7/4.1, testsuite/modulefiles.2/advvers7/4.2, testsuite/modulefiles.2/advvers7/5.0, testsuite/modulefiles.2/advvers7/5.1, testsuite/modulefiles.2/advvers7/5.2, testsuite/modulefiles.2/advvers7/5.3, testsuite/modulefiles.2/advvers7/6.0, testsuite/modulefiles.2/advvers7/6.1, testsuite/modulefiles.2/advvers7/6.2, testsuite/modulefiles.2/advvers7/6.3, testsuite/modulefiles.2/advvers7/6.4, testsuite/modulefiles.2/advvers7/6.5, testsuite/modulefiles.2/advvers7/6.6, testsuite/modulefiles.2/advvers7/6.7, testsuite/modulefiles.2/advvers7/7.0, testsuite/modulefiles.2/advvers7/8.1.1, testsuite/modulefiles.2/advvers7/8.1.2, testsuite/modulefiles.2/advvers7/8.2.1, testsuite/modulefiles.2/advvers7/8.2.2, testsuite/modulefiles.2/advvers7/8.3.1, testsuite/modulefiles.2/advvers7/8.3.2, testsuite/modulefiles.2/advvers7/8.4.1, testsuite/modulefiles.2/advvers7/8.4.2, testsuite/modulefiles.2/advvers7/8.5.1, testsuite/modulefiles.2/advvers7/8.5.2, testsuite/modulefiles.2/advvers7/9.0, testsuite/modules.00-init/006-procs.exp, .../272-adv_version_spec-range.exp: ts: vers range spec compat check mod ctx tests 2019-11-10 Xavier Delaruelle <[email protected]> * .../272-adv_version_spec-range.exp: ts: vers range spec select one mod ctx tests 2019-11-09 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Serialize version range specifier in MODULES_{LMPREREQ,LMCONFLICT} When saving current loaded prereq and conflict through MODULES_LMPREREQ and MODULES_LMCONFLICT environment variable, translate version range specifier `:` into `<` character to distinguish it from path separator character. * testsuite/modulefiles.2/extdfl7/.modulerc, testsuite/modulefiles.2/extdfl7/10a, testsuite/modulefiles.2/extdfl7/10foo, testsuite/modulefiles.2/extdfl7/10g, testsuite/modulefiles.2/extdfl8/1.3.1, testsuite/modulefiles.2/extdfl8/1.3.7, testsuite/modulefiles.2/extdfl8/1.33, testsuite/modulefiles.2/extdfl8/1.4.5, testsuite/modules.00-init/005-init_ts.exp, .../272-adv_version_spec-range.exp: ts: vers range spec basic and search-specific ctx tests 2019-11-08 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Introduce range of version in mod version spec A range of version may be specified after '@' with the help of ':' character to express *greater or equal* (ex: `1.2:`), *lower or equal* (ex: `:1.2`) or *between or equal* (ex: `1.1:1.2`) conditions. Adapt procedures that parse module version specifier or compare module version. Error is raised if version specified for range are not versions or higher version is lower than lower version. Non 'xdigit' character in higher part of version number is considered as a non version number. It avoids symbols like `default`, `new` and so on to get in the version range way. 2019-11-05 Xavier Delaruelle <[email protected]> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.70-maint/240-icase.exp, .../modules.70-maint/270-adv_version_spec.exp, .../modules.70-maint/271-adv_version_spec-in.exp: ts: skip icase tests if underlying fs is case-insensitive 2019-11-01 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.50-cmds/378-sametarget.exp: One conflict statement may match multiple loaded mod Conflict defined with a generic module name or an advanced version specifier may match multiple loaded modules (generally in case multiple loaded modules share same root name). Loaded environment analysis has been fixed to bound conflict to all loaded modules matching it. As a result the dependent reload mechanism is not triggered when one loaded module matching conflict is removed if another loaded module still match the conflict. * testsuite/modulefiles.2/advvers4/1.1, testsuite/modulefiles.2/advvers4/1.2, testsuite/modulefiles.2/advvers4/1.3, testsuite/modulefiles.2/advvers4/1.4, testsuite/modulefiles.2/advvers4/1.5.1, testsuite/modulefiles.2/advvers4/1.5.2, testsuite/modulefiles.2/advvers4/1.6, testsuite/modulefiles.2/advvers4/1.7, testsuite/modulefiles.2/advvers4/1.8, testsuite/modulefiles.2/advvers4/2.0, testsuite/modulefiles.2/advvers4/2.1, testsuite/modulefiles.2/advvers5/.modulerc, testsuite/modulefiles.2/advvers5/0.9, testsuite/modulefiles.2/advvers5/1.0, testsuite/modulefiles.2/advvers5/1.1, testsuite/modulefiles.2/advvers5/1.2, testsuite/modulefiles.2/advvers5/1.3.1, testsuite/modulefiles.2/advvers5/1.3.2, testsuite/modulefiles.2/advvers5/2.0, testsuite/modulefiles.2/advvers5/2.1, testsuite/modulefiles.2/advvers5/2.2, testsuite/modulefiles.2/advvers5/3.0, testsuite/modulefiles.2/advvers5/3.1, testsuite/modulefiles.2/advvers5/3.2, testsuite/modulefiles.2/advvers5/3.3, testsuite/modulefiles.2/advvers5/4.0, testsuite/modulefiles.2/advvers5/4.1, testsuite/modulefiles.2/advvers5/4.2, testsuite/modulefiles.2/advvers5/5.0, testsuite/modulefiles.2/advvers5/5.1, testsuite/modulefiles.2/advvers5/5.2, testsuite/modulefiles.2/advvers5/5.3, testsuite/modulefiles.2/advvers5/6.0, testsuite/modulefiles.2/advvers5/6.1, testsuite/modulefiles.2/advvers5/6.2, testsuite/modulefiles.2/advvers5/6.3, testsuite/modulefiles.2/advvers5/6.4, testsuite/modulefiles.2/advvers5/6.5, testsuite/modulefiles.2/advvers5/6.6, testsuite/modulefiles.2/advvers5/6.7, testsuite/modulefiles.2/advvers5/7.0, testsuite/modulefiles.2/advvers5/8.1.1, testsuite/modulefiles.2/advvers5/8.1.2, testsuite/modulefiles.2/advvers5/8.2.1, testsuite/modulefiles.2/advvers5/8.2.2, testsuite/modulefiles.2/advvers5/8.3.1, testsuite/modulefiles.2/advvers5/8.3.2, testsuite/modulefiles.2/advvers5/8.4.1, testsuite/modulefiles.2/advvers5/8.4.2, testsuite/modulefiles.2/advvers5/8.5.1, testsuite/modulefiles.2/advvers5/8.5.2, testsuite/modulefiles.2/advvers5/9.0, .../modules.70-maint/271-adv_version_spec-in.exp: ts: vers list spec compat check mod ctx tests 2019-10-31 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Record mod vers spec with setModuleVersSpec proc * doc/source/design/insensitive-case.rst: doc: desc avail/load corner case for icase design * .../design/advanced-module-version-specifiers.rst: doc: refine advanced_version_spec design * testsuite/modulefiles.2/extdfl/.1.3.3, .../modules.70-maint/271-adv_version_spec-in.exp: ts: vers list spec select one mod ctx tests 2019-10-30 Xavier Delaruelle <[email protected]> * testsuite/modulefiles.2/ICASE3/1.1, testsuite/modulefiles.2/ICASE3/VERS.1, testsuite/modulefiles.2/ICASE3/vers.1, testsuite/modulefiles.2/[email protected], testsuite/modulefiles.2/iCaSe3/1.3, testsuite/modulefiles.2/iCaSe3/1.4, testsuite/modulefiles.2/icase3/1.2, testsuite/modulefiles.2/nocase/deep/2, testsuite/modules.70-maint/240-icase.exp, .../modules.70-maint/271-adv_version_spec-in.exp: ts: vers list spec basic and search-specific ctx tests 2019-10-28 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modulefiles.deps/con1/1.1, testsuite/modulefiles.deps/con1/1.2, testsuite/modulefiles.deps/con2/2.1, testsuite/modulefiles.deps/con2/2.2, testsuite/modulefiles.deps/con2/2.3, testsuite/modules.50-cmds/131-conflict-module.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/380-altname.exp, testsuite/modules.70-maint/240-icase.exp, .../modules.70-maint/260-extended_default.exp, .../modules.70-maint/270-adv_version_spec.exp: Handle complex mod vers spec in isModuleEvaluated Rework whole isModuleEvaluated procedure to check all names of loaded or loadind module attempt against module version specifiers passed as argument. Add the 'exclmod' argument to the procedure to exclude from tested list the currently evaluated module: avoid this way detecting self on reflexive conflict definition. As a result just loaded or currently loading conflicting modules are better detected when conflict is expressed against an alias name or a module generic name. * modulecmd.tcl.in: Rename arrayKeyMatch into getEqArrayKey As procedure returns key string, not a boolean value. * modulecmd.tcl.in: Rename arrayKeyEq into getArrayKey And remove call to module version specifier translation: procedure only receive regular module/version specification. * modulecmd.tcl.in: Improve extdfl check in modVersCmp 2019-10-26 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, .../modules.70-maint/260-extended_default.exp: Adapt mod ext dfl check in modEq if contains *? When query's module contains globbing wildcard characters (? or *) adapt extended default match test to use an escaped version of module designation when modEq is called for an equal test. 2019-10-25 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.20-locate/030-defvers.exp, .../modules.70-maint/270-adv_version_spec.exp: Makes arrayKeyMatch rely on modEq Call modEq to check mod name passed matches array elements, so arrayKeyMatch procedure does not need to be specialized to match icase and extended_default setup, which is now deleguated to modEq. * modulecmd.tcl.in: Makes modMatchAtDepth rely on modEq Call modEq to check mod name passed in modMatchAtDepth, so this procedure does not need to handle the icase check which is deleguated to modEq. * modulecmd.tcl.in: Fix modEq for empty mod name Test empty module name against simple module name/vers test branch. 2019-10-22 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Add support for contains test in modEq By setting test argument of modEq procedure to 'matchin', perform contains-style match test. 2019-10-21 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Adapt modname check in modEq if contains *? When query's module name contains globbing wildcard characters (? or *) adapt test to check module names match and then extract module version in modEq. * testsuite/modulefiles.2/e+t.fl/1.3.1, testsuite/modulefiles.2/e+t.fl/1.3.7, testsuite/modulefiles.2/e+t.fl/1.4.5, testsuite/modules.70-maint/260-extended_default.exp, testsuite/modules.70-maint/270-adv_version_spec.exp: ts: test wildcard chars in mod name on 70/{260,270} 2019-10-20 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Handle version list spec on modEq Adapt modEq procedure to handle version list specifier (ex: @1,2). Introduce modVersCmp procedure to handle version comparison. * modulecmd.tcl.in: Introduce list of version in mod version spec A list of version may be specified after '@' by joining the multiple versions to set with the ',' character (ex: @1.2,1.3). Parse this syntax and store version specification information in parseModuleVersionSpecifier procedure and adapt procedures that handle the version specification information like getOneModuleFromVersSpec and getAllModuleFromVersSpec. * modulecmd.tcl.in: Rework storage of mod version specifier Change internal storage structure to hold module version specifier with 4 fields: complete module name version, module name, version comparison set, and module version. * modulecmd.tcl.in: Rework getModuleVersSpec into getModuleFromVersSpec Change getModuleVersSpec procedure into getModuleFromVersSpec to extract just specified module (name and version) from module name and version specifier. 2019-10-19 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Get one mod name from spec with getOneModuleFromVersSpec Introduce getOneModuleFromVersSpec procedure to extract one module name from module name version specification. * modulecmd.tcl.in: Test all mod mentionned in spec on isModuleSpecHidden Add a getAllModulesFromVersSpec procedure that parses module name version specification to return a list of all the module mentionned in specification. Use this new helper procedure in isModuleSpecHidden to check if one module from returned list is an hidden module. * modulecmd.tcl.in: Adapt modEq to include modMatch test Refactor modEq procedure to include modMatch-kind test. * modulecmd.tcl.in: Define mod cmp procs in getModules instead findModules Define the module name and version comparison procedures at the beginning of the getModules procedure so it is not needed to define the modMatch procedure in findModules as findModules is only called by getModules. 2019-10-18 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Adapt modEq to include modStartEq test Add a 'test' argument to modEq procedure to only check if passed module name matches pattern on pattern length when it equals to 'eqstart'. So modStartEq procedure is not needed anymore, calls are replaced with [modEq $pattern $mod eqstart]. * modulecmd.tcl.in: Makes modStartNb rely on modStartEq Call modStartEq to check full name passed in modStartNb, so modStartNb does not need to handle the extended_default check which is then deleguated to modStartEq. Introduce getModuleNameFromVersSpec to extract module name from module name version specification. 2019-10-16 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, .../modules.70-maint/270-adv_version_spec.exp: Module version specifier cannot contain / char No deep version specification to ease version comparison. * modulecmd.tcl.in: Translate vers spec directly in arrayKeyEq Pass the module version specification toward arrayKeyEq to translate it there for module matching. * modulecmd.tcl.in: Translate vers spec directly in modStartNb Pass the module version specification toward modStartNb to translate it there for module matching. 2019-10-15 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Translate vers spec directly in modStartEq Pass the module version specification toward modStartEq to translate it there for module matching. * modulecmd.tcl.in: Translate vers spec directly in arrayKeyMatch Pass the module version specification toward arrayKeyMatch to translate it there for module matching. * modulecmd.tcl.in: Get one module name from vers spec in getPathToModule Translate module name version specification in getPathToModule to extract one module version name from it. Use that to determine the module name root to find. * modulecmd.tcl.in: Get one module name from vers spec in listModules Translate module name version specification in listModules to extract one module version name from it. Use that to determine the no-indepth search properties. * modulecmd.tcl.in: Get one module name from vers spec in getModules Translate module name version specification in getModules to extract one module version name from it. Use that to determine the module name root to find and no-indepth search properties. * modulecmd.tcl.in: Translate vers spec directly in modMatch Pass the module version specification toward modMatch procedure to translate it there for module matching. modMatch procedure is adapted to apply the translation only if a 'trspec' argument is set to 1. A pattern suffix 'psuf' argument is also added to give the ability to append a suffix string to translated module name version. * modulecmd.tcl.in: Add isModuleSpecHidden to translate vers spec Introduce the isModuleSpecHidden procedure to pass it the module version specification which is there translated to check if corresponding module names are hidden or not. * modulecmd.tcl.in: Translate vers spec directly in modMatchAtDepth Pass the module version specification toward modMatchAtDepth to translate it there for module matching. Also pass the 'contains' mode toward this procedure to adapt module name version once translated. 2019-10-14 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modulefiles.2/extdfl2/.modulerc, testsuite/modulefiles.2/extdfl7/.modulerc, testsuite/modules.70-maint/240-icase.exp, .../modules.70-maint/260-extended_default.exp, .../modules.70-maint/270-adv_version_spec.exp: Adapt modEq proc to icase and extended_default config 2019-10-13 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.70-maint/270-adv_version_spec.exp: No need to translate mod vers spec in conflict proc Get error message reflecting way conflict is defined. * modulecmd.tcl.in, .../modules.70-maint/270-adv_version_spec.exp: Introduce a modEq proc for cmdModuleSearch/getModules Check 2 module names are equal with a dedicated proc called 'modEq' that translates one name argument against recorded module version specifiers. Use this procedure in cmdModuleSearch, thus this procedure does not need to translate module name it receives against recorded module version specifiers. Also use modEq for a comparison in getModules procedure. 2019-10-08 Xavier Delaruelle <[email protected]> * testsuite/modulefiles.2/.modulerc, testsuite/modulefiles.2/advvers/1.3, testsuite/modulefiles.2/advvers/1.4, testsuite/modulefiles.2/advvers/1.5, testsuite/modulefiles.2/advvers/1.6, testsuite/modulefiles.2/advvers/1.7, testsuite/modulefiles.2/advvers/1.8, testsuite/modulefiles.2/advvers2/1.0, testsuite/modulefiles.2/advvers2/1.1, testsuite/modulefiles.2/advvers2/1.2, testsuite/modulefiles.2/advvers2/1.3, testsuite/modulefiles.2/advvers2/2.0, testsuite/modulefiles.2/advvers2/2.1, testsuite/modulefiles.2/advvers2/2.2, testsuite/modulefiles.2/advvers2/3.0, testsuite/modulefiles.2/advvers2/3.1, testsuite/modulefiles.2/advvers2/3.2, testsuite/modulefiles.2/advvers2/3.3, testsuite/modulefiles.2/advvers2/4.0, testsuite/modulefiles.2/advvers2/4.1, testsuite/modulefiles.2/advvers2/4.2, testsuite/modulefiles.2/advvers2/5.0, testsuite/modulefiles.2/advvers2/5.1, testsuite/modulefiles.2/advvers2/5.2, testsuite/modulefiles.2/advvers2/5.3, testsuite/modulefiles.2/advvers2/6.0, testsuite/modulefiles.2/advvers2/6.1, testsuite/modulefiles.2/advvers2/6.2, testsuite/modulefiles.2/advvers2/6.3, testsuite/modulefiles.2/advvers2/6.4, testsuite/modulefiles.2/advvers2/6.5, testsuite/modulefiles.2/advvers2/6.6, testsuite/modulefiles.2/advvers2/6.7, testsuite/modulefiles.2/advvers2/7.0, testsuite/modulefiles.2/advvers2/8.1.1, testsuite/modulefiles.2/advvers2/8.1.2, testsuite/modulefiles.2/advvers2/8.2.1, testsuite/modulefiles.2/advvers2/8.2.2, testsuite/modulefiles.2/advvers2/8.3.1, testsuite/modulefiles.2/advvers2/8.3.2, testsuite/modulefiles.2/advvers2/8.4.1, testsuite/modulefiles.2/advvers2/8.4.2, testsuite/modulefiles.2/advvers2/8.5.1, testsuite/modulefiles.2/advvers2/8.5.2, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.70-maint/240-icase.exp, .../modules.70-maint/270-adv_version_spec.exp: ts: add adv vers spec tests for check compat mod ctx 2019-10-07 Xavier Delaruelle <[email protected]> * testsuite/modulefiles.2/advvers/1.2, .../modules.70-maint/270-adv_version_spec.exp: ts: add adv vers spec tests for select one mod ctx 2019-10-06 Xavier Delaruelle <[email protected]> * testsuite/modulefiles.2/advvers/deep/1/1.2, testsuite/modulefiles.2/[email protected], testsuite/modulefiles.2/extdfl/.1.3.4, testsuite/modules.00-init/005-init_ts.exp, .../modules.70-maint/270-adv_version_spec.exp: ts: add basic adv vers spec test + search-specific ctx 2019-10-04 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Fetch translated vers spec in 'check compat' contexts * modulecmd.tcl.in: Fetch translated vers spec in 'select one' contexts * modulecmd.tcl.in: Fetch translated vers spec in 'return all' contexts 2019-10-02 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Parse mod vers specifier where mod could be specified Introduce parseModuleVersionSpecifier procedure to parse module specification and extract from it module name and version specifier. Call this new procedure in all procedures receiving module specification: module, conflict, prereq and is-loaded. * modulecmd.tcl.in: Rework error mngt in module proc Do not catch error in procedure, let it flow upstream and catch it at top level. 2019-09-29 Xavier Delaruelle <[email protected]> * .travis.yml, testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.70-maint/220-config.exp: ts/travis: adapt existing tests to advanced_version_spec cfg opt * Makefile, Makefile.inc.in, configure, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, site.exp.in: Introduce advanced_version_spec configuration option Add the advanced_version_spec configuration option that will control the activation of advanced module version specifier syntax. 2019-08-31 Xavier Delaruelle <[email protected]> * .../design/advanced-module-version-specifiers.rst: doc: add advanced-module-version-specifiers design spec 2019-11-14 Xavier Delaruelle <[email protected]> * MIGRATING.rst, NEWS.rst: doc: desc extended_default in NEWS/MIGRATING 2019-11-13 Xavier Delaruelle <[email protected]> * NEWS.rst: doc: mention module-info-name-return-basename recipe add in NEWS 2019-09-29 Xavier Delaruelle <[email protected]> * INSTALL.rst, doc/source/design/extended-default.rst, doc/source/module.rst, doc/source/modulefile.rst, modulecmd.tcl.in, .../modules.70-maint/260-extended_default.exp: Remove '-' from list of ext dfl separator char Remove the '-' character from the list of extended default separator characters, as it is not feasible to determine in all cases the highest version specified after this character (to determine an implicit default). This removal means that only '.' is taken into account as extended default separator. 2019-09-28 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Apply extended_default to compatibility check context 2019-09-27 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Rework def of modStartNb alternatives Expand procedure alternatives as individual procedures. The one to activate is renamed 'modStartNb' by defineModStartNbProc. * modulecmd.tcl.in: Rework def of modStartEq alternatives Expand procedure alternatives as individual procedures. The one to activate is renamed 'modStartEq' by defineModStartEqProc. 2019-09-24 Xavier Delaruelle <[email protected]> * testsuite/modulefiles.2/extdfl/.modulerc, testsuite/modulefiles.2/extdfl/1.0.0-alpha.1, testsuite/modulefiles.2/extdfl/1.0.0-alpha.beta, testsuite/modulefiles.2/extdfl/1.0.0-beta, testsuite/modulefiles.2/extdfl/1.0.2, testsuite/modulefiles.2/extdfl/1.1.0, testsuite/modulefiles.2/extdfl/1.1.0-beta, testsuite/modulefiles.2/extdfl/1.2.10, testsuite/modulefiles.2/extdfl/1.2.3, testsuite/modulefiles.2/extdfl/1.3.1, testsuite/modulefiles.2/extdfl/1.3.7, testsuite/modulefiles.2/extdfl/1.4.5, testsuite/modulefiles.2/extdfl/2.0, testsuite/modulefiles.2/extdfl/2.0.1, testsuite/modulefiles.2/extdfl2/2.rc.1, testsuite/modulefiles.2/extdfl2/2.rc.2, testsuite/modulefiles.2/extdfl2/3.0.0, testsuite/modulefiles.2/extdfl2/3.0.15, testsuite/modulefiles.2/extdfl2/3.0.2, testsuite/modulefiles.2/extdfl2/3.010.1, testsuite/modulefiles.2/extdfl2/3.09.3, testsuite/modulefiles.2/extdfl2/3.1.3, testsuite/modulefiles.2/extdfl2/3.1.7, testsuite/modulefiles.2/extdfl2/3.10.2, testsuite/modulefiles.2/extdfl2/3.9.2, testsuite/modulefiles.2/extdfl3/.modulerc, testsuite/modulefiles.2/extdfl3/1.0, testsuite/modulefiles.2/extdfl3/1.1/3, testsuite/modulefiles.2/extdfl3/1.3/4, testsuite/modulefiles.2/extdfl6/conflict, testsuite/modulefiles.2/extdfl6/conflict2, testsuite/modulefiles.2/extdfl6/conflicta, testsuite/modulefiles.2/extdfl6/conflicts, testsuite/modulefiles.2/extdfl6/info, testsuite/modulefiles.2/extdfl6/info2, testsuite/modulefiles.2/extdfl6/isloaded, testsuite/modulefiles.2/extdfl6/isloaded2, testsuite/modulefiles.2/extdfl6/load, testsuite/modulefiles.2/extdfl6/load2, testsuite/modulefiles.2/extdfl6/load3, testsuite/modulefiles.2/extdfl6/prereq, testsuite/modulefiles.2/extdfl6/prereq2, testsuite/modulefiles.2/extdfl6/prereqc, testsuite/modulefiles.2/extdfl6/prereqi, testsuite/modulefiles.2/extdfl6/prereqi2, testsuite/modulefiles.2/extdfl6/unload, testsuite/modulefiles.2/extdfl6/unload2, testsuite/modulefiles.2/extdfl7/.modulerc, testsuite/modulefiles.2/extdfl7/1.1, testsuite/modulefiles.2/extdfl7/2.1, testsuite/modulefiles.2/extdfl7/2.10, testsuite/modulefiles.2/extdfl7/3.1, testsuite/modulefiles.2/extdfl7/4.1, testsuite/modulefiles.2/extdfl7/5.1, testsuite/modulefiles.2/extdfl7/6.1, testsuite/modulefiles.2/extdfl7/7.0, testsuite/modulefiles.2/extdfl7/7.1, testsuite/modulefiles.2/extdflb.4.0, testsuite/modulefiles.2/extdflb.4.1/1, testsuite/modulefiles.2/extdflc-4/1, testsuite/modulefiles.2/extdflc-5/1, .../modules.70-maint/260-extended_default.exp: ts: cover extended_default with tests 2019-09-27 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Rework def of arrayKeyMatch alternatives Expand procedure alternatives as individual procedures. The one to activate is renamed 'arrayKeyMatch' by defineArrayKeyMatchProc. * modulecmd.tcl.in: Rework def of modMatch alternatives Expand procedure alternatives as individual procedures. The one to activate is renamed 'modMatch' by defineModMatchProc. * modulecmd.tcl.in: Rework def of modMatchAtDepth alternatives Expand procedure alternatives as individual procedures. The one to activate is renamed 'modMatchAtDepth' by defineModMatchAtDepthProc. * modulecmd.tcl.in: Apply extended_default to return all matching mod context Only update modMatch. No need to update modMatchAtDepth procedure to take into account extended_default, as all match tests going through this procedures are already appended with a wildcard character (*). 2019-09-25 Xavier Delaruelle <[email protected]> * doc/source/design/extended-default.rst: doc: refine extended_default design 2019-09-23 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Apply extended_default to single module selection context 2019-09-22 Xavier Delaruelle <[email protected]> * INSTALL.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst, doc/source/modulefile.rst: doc: desc extended_default in man/diff/INSTALL * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.70-maint/220-config.exp: ts: adapt existing tests to extended_default cfg opt * Makefile, Makefile.inc.in, configure, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, site.exp.in: Introduce extended_default configuration option Add the ability to select a module when its version is partially specified. Enable this behavior through a new configuration option named `extended_default` (which defines `MODULES_EXTENDED_DEFAULT` environment variable when set). When extended_default mechanism is enabled a module version may be specified by its starting portion, part separated from the rest of the version string by a `.` or `-` character. When multiple versions match partial version specified and only one module should be returned, default version (implicit or explicit) among matches is returned. In case `implicit_default` is disabled and no explicit default is found among matches, an error is returned. Mechanism may be enabled by default in `modulecmd.tcl` script with option `--enable-extended-default` passed to `./configure` script. 2019-11-11 Xavier Delaruelle <[email protected]> * NEWS.rst: doc: add in NEWS issue ref and contrib. name for icase feature 2019-09-22 Xavier Delaruelle <[email protected]> * testsuite/modules.70-maint/250-nan.exp: ts: ensure icase is disabled for 70/250 tests 2019-09-11 Xavier Delaruelle <[email protected]> * doc/source/design/insensitive-case.rst: doc: desc corner cases in icase design 2019-09-10 Xavier Delaruelle <[email protected]> * testsuite/modules.50-cmds/152-module-emptyarg.exp: ts: adapt 50/152 tests due to whatis changes in ts/modpath.2 * modulecmd.tcl.in: Introduce arrayKeyEq help proc Search array keys for an insensitive case match if icase mode is enabled and no sensitive case match is found. 2019-09-09 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Resolve vers or alias specified with different case When insensitive case match is enabled for module version specification to select one module context, if no case sensitive exact match is found when trying to resolve a symbolic version or a module alias, then select highest case insensitive matching version if any. This change enables a case insensitive match only for direct alias or symbol resolution. In case an alias or symbolic version icase matches another alias or symbolic version which in turn also icase matches a modulefile, resolution will currently fail. * modulecmd.tcl.in: Define modStartNb proc on the fly Make getLoadedWithClosestName procedure relies on a modStartNb procedure to compare how many starting parts between both names passed as argument are equivalent. This modStartNb is defined on the fly by the defineModStartNbProc procedure to adapt its code to the current icase enabled mode. 2019-09-08 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Define modStartEq proc on the fly Make doesModuleMatchesName, doesLoadingModuleMatchesName and getAllModuleResolvedName procedures rely on a modStartEq procedure to compare if both names passed as argument have the same starting parts. This modStartEq is defined on the fly by the defineModStartEqProc procedure to adapt its code to the current icase enabled mode. * modulecmd.tcl.in: Get path to module specified with different case When insensitive case match is enabled for module version specification to select one module context, if no case sensitive exact match is found then select highest case insensitive matching version. 2019-09-07 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Define modMatchAtDepth procedure on the fly Add a defineModMatchAtDepthProc procedure that defines modMatchAtDepth procedure with code adapted to the current indepth and icase configuration. On the fly procedure definition helps to improve performance as defined procedure is finely tuned. * modulecmd.tcl.in: Define modMatch procedure on the fly Add a defineModMatchProc procedure that defines modMatch procedure with code adapted to the current icase configuration. On the fly procedure definition helps to improve performance as defined procedure is finely tuned. 2019-09-05 Xavier Delaruelle <[email protected]> * testsuite/modulefiles.2/.modulerc, testsuite/modulefiles.2/ICASE/1, testsuite/modulefiles.2/ICASE2/1, testsuite/modulefiles.2/IcAsE/1, testsuite/modulefiles.2/iCaSe/1, testsuite/modulefiles.2/iCaSe2/1, testsuite/modulefiles.2/icASE/1, testsuite/modulefiles.2/icase/1, testsuite/modulefiles.2/icase/conflict, testsuite/modulefiles.2/icase/conflicta, testsuite/modulefiles.2/icase/conflictp, testsuite/modulefiles.2/icase/conflicts, testsuite/modulefiles.2/icase/info, testsuite/modulefiles.2/icase/infoloaded, testsuite/modulefiles.2/icase/isloaded, testsuite/modulefiles.2/icase/load, testsuite/modulefiles.2/icase/loadi, testsuite/modulefiles.2/icase/prereq, testsuite/modulefiles.2/icase/prereqc, testsuite/modulefiles.2/icase/unload, testsuite/modulefiles.2/icase/z, testsuite/modulefiles.2/nocase/.hidden, testsuite/modulefiles.2/nocase/.modulerc, testsuite/modulefiles.2/nocase/1, testsuite/modulefiles.2/nocase/deep/3, testsuite/modulefiles.2/nocase/deep2/notamodule, testsuite/modulefiles.2/nocase/regular, testsuite/modulefiles.2/nocase2, testsuite/modulefiles.2/nocase7/conflictim1, testsuite/modulefiles.2/nocase7/conflictim2, testsuite/modulefiles.2/nocase7/prereqim1, testsuite/modulefiles.2/nocase7/prereqim2, testsuite/modules.70-maint/220-config.exp, testsuite/modules.70-maint/240-icase.exp: ts: add tests for icase config * doc/source/module.rst: doc: search sub-cmd is always performed icase Clarify on search sub-command that search query string is always matched in a case insensitive manner. * modulecmd.tcl.in: Mention -i/--icase in help message 2019-09-07 Xavier Delaruelle <[email protected]> * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module: init: add 'icase' option to completion scripts 2019-09-04 Xavier Delaruelle <[email protected]> * Makefile, Makefile.inc.in, configure, modulecmd.tcl.in, site.exp.in: Rework avail_icase into icase option Rework avail_icase configuration option in a generic icase option which defines the contexts where to apply a case insensitive match for search query string and module specification: never, only on search-related sub-commands or always. * modulecmd.tcl.in: Migrate 'avail_icase' cfg option retrieval to getConf * INSTALL.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: desc icase in man/diff/INSTALL Fixes #212 * doc/source/module.rst: doc: fix typo in MODULES_SEARCH_MATCH section of module.1 2019-09-03 Xavier Delaruelle <[email protected]> * MIGRATING.rst, NEWS.rst: doc: desc icase in NEWS/MIGRATING 2019-05-22 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Match module name in case or nocase mode with modMatch * testsuite/modules.00-init/090-switches.exp, testsuite/modules.70-maint/060-apropos.exp: ts: adapt existing tests to reintroduced icase mode 2019-04-15 Eric Deveaud <[email protected]> * modulecmd.tcl.in: icase search only when argument provided * Makefile, Makefile.inc.in, configure, modulecmd.tcl.in: control icase module av at configure time * modulecmd.tcl.in: poc for case insensitive search//avail 2019-08-31 Xavier Delaruelle <[email protected]> * doc/source/design/extended-default.rst: doc: add extended-default design spec * doc/source/design/insensitive-case.rst: doc: add insensitive-case design spec * doc/source/design.rst, doc/source/design/module-selection-contexts.rst, doc/source/index.rst: doc: add module-selection-contexts design spec 2019-09-15 Xavier Delaruelle <[email protected]> * doc/example/ensure-user-qualify-modules/siteconfig.tcl, .../ensure-user-qualify-modules/siteconfig.tcl-4.3, doc/source/cookbook/ensure-user-qualify-modules.rst: doc: adapt ensure-user-qualify-modules recipe to config rework 2019-09-02 Xavier Delaruelle <[email protected]> * MIGRATING.rst, NEWS.rst: doc: desc. conf opt internal rework in NEWS/MIGRATING 2019-08-04 Xavier Delaruelle <[email protected]> * siteconfig.tcl, testsuite/example/siteconfig.tcl-1: Update siteconfig.tcl files with new int config setup ways Use the lappendConf procedure to set the locked_configs option and the setConf procedure to set the avail_report_dir_sym and avail_report_mfile_sym options. * modulecmd.tcl.in: Introduce setConf/unsetConf/lappendConf Add the setConf, unsetConf and lappendConf procedures to provide unified ways to set the value of configuration option. 2019-08-03 Xavier Delaruelle <[email protected]> * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/100-pager.exp, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/140-color.exp, testsuite/modules.00-init/150-access-init.exp, testsuite/modules.70-maint/220-config.exp: ts: adapt tests to match new getConf debugging output * modulecmd.tcl.in: Rework config option val retrieval in cmdModuleConfig 2019-09-16 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Migrate 'wa_277' cfg option retrieval to getConf 2019-08-03 Xavier Delaruelle <[email protected]> * Makefile, modulecmd.tcl.in, site.exp.in: Migrate 'pager' cfg option retrieval to getConf Introduce on the way the @pagercmd@ configuration pattern which is the concatenation of the @pager@ and @pageropts@ patterns with a whitespace joining the two when @pageropts@ is not empty. * modulecmd.tcl.in: Migrate 'colors' cfg option retrieval to getConf * Makefile, modulecmd.tcl.in: Migrate 'color' cfg option retrieval to getConf Use an 'initConfColor' procedure to specifically initialize this 'color' configuration option. Adapt value set for this option from the configure script or through the command-line switches to use the valid public names (never, auto and always) to ensure convertion to the internal value only occurs in the initConfColor procedure. 2019-08-02 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Migrate 'tcl_ext_lib' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'siteconfig' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'run_quarantine' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'rcfile' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'silent_shell_debug' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'collection_target' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'collection_pin_version' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'avail_report_mfile_sym' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'avail_report_dir_sym' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'extra_siteconfig' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'locked_configs' cfg option retrieval to getConf 2019-08-01 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Migrate 'verbosity' cfg option retrieval to getConf * modulecmd.tcl.in: Make isVerbosityLevel rely on g_config_defs To get existing verbosity levels * modulecmd.tcl.in: Migrate 'set_shell_startup' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'search_match' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'implicit_default' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'unload_match_order' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'term_background' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'avail_indepth' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'auto_handling' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'ignored_dirs' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'contact' cfg option retrieval to getConf 2019-07-31 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Introduce 'getConf' proc Add getConf procedure that retrieves any configuration option value and set the value of this option if not yet defined. * modulecmd.tcl.in: Store all configs in a g_configs array * modulecmd.tcl.in, testsuite/modules.00-init/100-pager.exp, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/150-access-init.exp: Rework pager config internal variable Use only one global variable to store pager command configuration and its associated command-line options rather using one variable for the command name and a second one for its options. * modulecmd.tcl.in: Rework colors initialization code Use ::g_colors_list list variable as primary configuration variable rather ::g_colors array variable. Sync array value on list value. * modulecmd.tcl.in: Auto guess config option cmd-line overridde Check if a '::asked_$option' exists, if true it means configuration option has been overridden from the command-line. * modulecmd.tcl.in: Store conf opt props in g_config_defs global array Define a global array named 'g_config_defs' to store the properties of all configuration options. For each option, a list is set to indicate associated superseding environment variable, default value if any, is configuration option lockable to default value, valid value list, internal value representation and procedure to call to initialize option value. 2019-10-10 Xavier Delaruelle <[email protected]> * .../modulefiles/info/name, .../siteconfig.tcl, .../cookbook/module-info-name-return-basename.rst, doc/source/diff_v3_v4.rst: doc: add module-info-name-return-basename recipe Fixes #297. 2019-09-21 Xavier Delaruelle <[email protected]> * MIGRATING.rst, NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version 4.3.1 * modulecmd.tcl.in, testsuite/modulefiles.2/NaN, testsuite/modulefiles.2/nanbar/1, testsuite/modulefiles.2/nanbar/2, testsuite/modulefiles.2/nanbar/nan, testsuite/modulefiles.2/nanfoo/.modulerc, testsuite/modulefiles.2/nanfoo/1, testsuite/modules.70-maint/250-nan.exp: Rework ternary operator expr if res may equal 'nan' Rework all the ternary operator expressions (eg. [expr {cond ? true : false}] if their true or false result may be equal to the nan string (whatever the case used to write it). When a 'nan' value is returned from such an expression an error is raised, which breaks Modules as soon as a modulefile, an alias or a symbolic version is named 'nan'. These expressions are rewritten as bare if/then/else blocks. Fixes #296. 2019-09-19 Xavier Delaruelle <[email protected]> * testsuite/modulefiles.deep/modulerc/.modulerc, testsuite/modulefiles/loc_rc3/.modulerc, testsuite/modulefiles/loc_rc3/0.0/.notmodfile, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.80-deep/010-init_ts.exp, testsuite/modules.80-deep/030-display.exp, testsuite/modules.80-deep/050-whatis.exp, testsuite/modules.80-deep/068-transitive-deep.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/070-full.exp: ts: adapt tests for #294 and #295 fixes * modulecmd.tcl.in: Fix alias over dir when implicit_default is disabled Fix the whatis and paths sub-command results for module aliases targeting a directory when implicit_default configuration option is disabled. No error is returned and same result is now obtained whether the alias name or its target is used as argument for those two sub-commands. Fixes #295. * modulecmd.tcl.in: Fix sym over dir when implicit_default is disabled Fix the whatis and paths sub-command results for module symbolic versions targeting a directory when implicit_default configuration option is disabled. No error is returned and same result is now obtained whether the symbolic name or its target is used as argument for those two sub-commands. Fixes #294. 2019-09-16 Tom Payerle <[email protected]> * doc/example/tips-for-code-reuse/bar/1.0/nothreads, doc/example/tips-for-code-reuse/bar/1.0/openmp, doc/example/tips-for-code-reuse/bar/1.0/pthreads, doc/example/tips-for-code-reuse/bar/2.0/nothreads, doc/example/tips-for-code-reuse/bar/2.0/openmp, doc/example/tips-for-code-reuse/bar/2.0/pthreads, doc/example/tips-for-code-reuse/bar/common, doc/example/tips-for-code-reuse/foo/1.0, doc/example/tips-for-code-reuse/foo/2.0, doc/example/tips-for-code-reuse/fooA/1.0, doc/example/tips-for-code-reuse/fooA/2.0, doc/example/tips-for-code-reuse/fooA/common, doc/example/tips-for-code-reuse/fooB/.generic, doc/example/tips-for-code-reuse/fooB/1.0, doc/example/tips-for-code-reuse/fooB/2.0, doc/example/tips-for-code-reuse/fooB/common, doc/source/cookbook/tips-for-code-reuse.rst: doc: Adding cookbook page "tips-for-code-reuse" 2019-09-16 Xavier Delaruelle <[email protected]> * INSTALL.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: desc wa_277 in man/diff/INSTALL 2019-09-15 Xavier Delaruelle <[email protected]> * .travis.yml, testsuite/install.00-init/020-module.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/220-config.exp: ts/travis: adapt tests to wa_277 cfg * Makefile, Makefile.inc.in, configure, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, site.exp.in: Workaround for Tcsh history issue with wa_277 conf opt Introduce the wa_277 configuration option to workaround an issue with Tcsh history described on ticket #277. When option is enabled (which sets the MODULES_WA_277 environment variable to 1), an alternative module alias is defined which fixes the history mechanism issue. However the alternative definition of the module alias weakens shell evaluation of the code produced by modulefiles. Characters with special meaning for Tcsh shell (like { and }) may not be used anymore in shell alias definition elsewhere the evaluation of the code produced by modulefiles will return a syntax error. Fixes #277. 2019-09-14 Xavier Delaruelle <[email protected]> * doc/example/ensure-user-qualify-modules/initrc, .../modulefiles/softa/1, .../modulefiles/softa/2, .../modulefiles/softb/.modulerc, .../modulefiles/softb/1, .../modulefiles/softb/2, .../ensure-user-qualify-modules/siteconfig.tcl, .../cookbook/ensure-user-qualify-modules.rst: doc: add ensure-user-qualify-modules recipe to cookbook * contrib/etc/rc-modulepath, doc/example/modulepaths-persist-over-sudo/rc, .../cookbook/modulepaths-persist-over-sudo.rst: doc: add modulepaths-persist-over-sudo recipe to cookbook Rework global RC file proposed in contrib/etc/rc-modulepath, for use case described at [1], as a cookbook recipe. [1] https://bugzilla.redhat.com/show_bug.cgi?id=1139165 2019-09-13 Xavier Delaruelle <[email protected]> * .../modulefiles/bar/1, .../modulefiles/foo/1, .../siteconfig.tcl, .../cookbook/expose-procs-vars-to-modulefiles.rst: doc: add expose-procs-vars-to-modulefiles recipe to cookbook 2019-09-12 Xavier Delaruelle <[email protected]> * doc/example/log-module-commands/siteconfig.tcl, doc/source/cookbook/log-module-commands.rst: doc: add log-module-commands recipe to cookbook Fixes #283. * doc/source/cookbook/inhibit-report-info.rst, doc/source/cookbook/top-priority-values.rst, doc/source/cookbook/unload-firstly-loaded.rst: doc: desc way to find siteconfig script location in recipes In cookbook recipes implying the installation of a site-specific configuration script, instructions are provided to help to find the expected location of this script on the current setup. Fixes #266. 2019-09-09 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.80-deep/022-switch.exp: Load current env info prior match switch one-name-rule When looking at the closest match among loaded modules when switching module with just a single module argument specified, load the informations on the currently set environment to get the alternative names of loaded modules prior to look at closest module match. Fixes #290. 2019-09-06 Xavier Delaruelle <[email protected]> * doc/source/modulefile.rst: doc: attempt to clarify eval mode in modulefile man Fixes #289 2019-08-17 Xavier Delaruelle <[email protected]> * testsuite/bin/install_test_csh, testsuite/home/.module/.target, testsuite/home/.module/coll1, testsuite/home/.module/coll2, testsuite/home/.module/coll3, testsuite/home/.module/coll4.target, testsuite/home/coll5, testsuite/install.00-init/060-quar.exp, testsuite/install.00-init/080-args.exp, testsuite/{modulefiles.other => modulefiles.2}/1.1/version, testsuite/{modulefiles.other => modulefiles.2}/1.2/version, testsuite/{modulefiles.other => modulefiles.2}/1.3/version, .../{modulefiles.other2 => modulefiles.2}/clear/.modulerc, testsuite/{modulefiles.other2 => modulefiles.2}/clear/1, testsuite/{modulefiles.other2 => modulefiles.2}/clear/2, testsuite/{modulefiles.other2 => modulefiles.2}/clear/3, testsuite/{modulefiles.other => modulefiles.2}/longerrword, .../{modulefiles.other => modulefiles.2}/modemptyarg/aliases, .../{modulefiles.other => modulefiles.2}/modemptyarg/apropos, .../{modulefiles.other => modulefiles.2}/modemptyarg/avail, .../{modulefiles.other => modulefiles.2}/modemptyarg/display, .../{modulefiles.other => modulefiles.2}/modemptyarg/list, .../{modulefiles.other => modulefiles.2}/modemptyarg/load, .../{modulefiles.other => modulefiles.2}/modemptyarg/purge, .../{modulefiles.other => modulefiles.2}/modemptyarg/reload, .../{modulefiles.other => modulefiles.2}/modemptyarg/restore, .../{modulefiles.other => modulefiles.2}/modemptyarg/save, .../modemptyarg/savelist, .../{modulefiles.other => modulefiles.2}/modemptyarg/saverm, .../modemptyarg/saveshow, .../{modulefiles.other => modulefiles.2}/modemptyarg/source, .../{modulefiles.other => modulefiles.2}/modemptyarg/swap, .../{modulefiles.other => modulefiles.2}/modemptyarg/swap2, .../{modulefiles.other => modulefiles.2}/modemptyarg/swap3, .../{modulefiles.other => modulefiles.2}/modemptyarg/test, .../{modulefiles.other => modulefiles.2}/modemptyarg/unload, .../{modulefiles.other => modulefiles.2}/modemptyarg/unuse, .../{modulefiles.other => modulefiles.2}/modemptyarg/use, .../{modulefiles.other => modulefiles.2}/modemptyarg/whatis, testsuite/{modulefiles.other => modulefiles.2}/putsvar, testsuite/{modulefiles.other => modulefiles.2}/quar, testsuite/{modulefiles.other => modulefiles.2}/restore, .../veryveryveryveryveryveryveryverylong/.modulerc, .../veryveryveryveryveryveryveryverylong/name, testsuite/modulefiles.other/README, testsuite/modulefiles/info/isused, testsuite/modulefiles/use/1.0, testsuite/modulefiles/use/2.0, testsuite/modulefiles/use/2.1, testsuite/modulefiles/use/2.2, testsuite/modulefiles/use/3.0, testsuite/modulefiles/use/3.1, testsuite/modulefiles/use/3.2, testsuite/modulefiles/use/4.1, testsuite/modules.00-init/110-quar.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/032-prepend.exp, testsuite/modules.10-use/040-load-use.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.70-maint/045-listlong.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.70-maint/153-is-loaded.exp, testsuite/modules.70-maint/200-errdisp.exp, testsuite/modules.70-maint/210-clear.exp, testsuite/modules.90-avail/050-long.exp, testsuite/modules.95-version/010-init_ts.exp, testsuite/modules.95-version/050-fullpathentry.exp: ts: add modulefiles.2 test modulepath repository And make it a repository for additional test modulefiles that do not need to take part in the global avail tests made over the main repository (modulefiles) and who could mixed with others (like other and other2). 2019-08-27 Per Persson <[email protected]> * README.md: doc: use quote instead of code for links in README Inside a code block URLs are not converted to links when the Markdown is rendered as HTML. In a quote they do. The other differences are minor both for the raw text and for the rendered text. 2019-08-15 Xavier Delaruelle <[email protected]> * testsuite/modules.70-maint/120-autoinit.exp: ts: check precedence of etc/modulespath over init/.modulespath * testsuite/modules.70-maint/120-autoinit.exp: ts: check precedence of etc/initrc over init/modulerc * .gitignore, .travis.yml, Makefile, testsuite/example/initrc.in, testsuite/modules.70-maint/120-autoinit.exp: ts: test initrc eval output during autoinit 2019-08-14 Xavier Delaruelle <[email protected]> * testsuite/home/coll14, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/999-cleanup.exp: ts: check urequn mech when restoring collection * modulecmd.tcl.in: Remove useless dir content cleanup in getModules proc No need to remove purged entries from directory content list as elements are added to these list only if valid for the search performed (they are not removed later on, so no need to update directory content). 2019-08-13 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Remove useless var test in mod reload helper procs * testsuite/modules.70-maint/230-verbosity.exp: ts: add more verbosity tests in 70/230 2019-08-09 Xavier Delaruelle <[email protected]> * lib/configure.ac: lib: bump Envmodules lib version to 1.0.1 Bump version of Envmodules library after the small changes made: - directly return result of Envmodules_Init last operation - Tcl_GetBooleanFromObj already set error message, no need to rewrite an error message in case boolean argument is not boolean * lib/envmodules.c, lib/envmodules.h: lib: bump copyright year mention * Makefile, lib/.gitignore, lib/Makefile.in, lib/configure.ac, lib/testutil-closedir.c, testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/120-siteconfig.exp: ts/lib: test tcl ext lib against a failed closedir call Add an utility library that supersedes the closedir function from libc. The closedir function from this added library always returns an error (-1). It is used for coverage test of the closedir call made withing the Envmodules_GetFilesInDirectoryObjCmd function of the Tcl extension library. 2019-08-08 Xavier Delaruelle <[email protected]> * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: ts: test tcl ext lib procedures against erroneous calls * .travis.yml: travis: add a tcl8.4 build to the matrix to check testsiteconfig-1 * lib/envmodules.c: lib: Tcl_GetBooleanFromObj already set err msg No need to craft an error message when a non-boolean value is passed to procedures as the Tcl_GetBooleanFromObj function already set the accurate message when it returns non-OK. 2019-08-07 Xavier Delaruelle <[email protected]> * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: ts: load tcl ext lib by tclsh83 in 00/120 * .gitignore, .travis.yml, Makefile: install/ts: fetch & install old Tcl interp for coverage Add directives into Makefile to install a Tcl8.3 interpreter in order to unlock some additional non-regression tests to improve code coverage tests. 2019-08-06 Xavier Delaruelle <[email protected]> * lib/envmodules.c: lib: directly return res of Envmodules_Init last op 2019-08-05 Felix Neumärker <[email protected]> * lib/Makefile.in: install: fix typo on CFLAGS definition in lib/Makefile Fixes #287. 2019-08-05 Xavier Delaruelle <[email protected]> * .travis.yml: travis: increase testsuite run wait time As 15 minutes has become not enough on OSX. * testsuite/install.00-init/050-crossshell.exp: ts: fix not found error msg for mksh New version of mksh returns a 'inaccessible or not found' error message: https://github.com/MirBSD/mksh/commit/64918da0043974fe07450e99427c 5f276d1b6ea0 2019-07-30 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.00-init/150-access-init.exp: Fix error report when Tcl ext lib fails to load Correct modulecmd.tcl script startup to correctly report error in case Tcl extension library fails to load. Fixes #284. 2019-07-29 Xavier Delaruelle <[email protected]> * .gitignore, Makefile, contrib/mb.in: contrib: add 'mb' script to bench modules versions 2019-07-26 Xavier Delaruelle <[email protected]> * MIGRATING.rst, NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version 4.3.0 * MIGRATING.rst, NEWS.rst, doc/source/module.rst, modulecmd.tcl.in, testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.00-init/140-color.exp: Honor CLICOLOR/CLICOLOR_FORCE env var to set color mode Add support for standard variables CLICOLOR and CLICOLOR_FORCE to define color mode. Implement specification for these variables described at https://bixense.com/clicolors/. Fixes #279. 2019-07-25 Xavier Delaruelle <[email protected]> * testsuite/modules.70-maint/230-verbosity.exp: ts: add tests for verbosity cfg 2019-07-22 Xavier Delaruelle <[email protected]> * MIGRATING.rst, NEWS.rst: doc: desc verbosity in NEWS/MIGRATING * INSTALL.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: desc verbosity in man/diff/INSTALL * doc/source/cookbook/inhibit-report-info.rst: doc: update inhibit-report-info recipe with verbosity cfg * configure, modulecmd.tcl.in, testsuite/modules.70-maint/220-config.exp: Introduce 'concise' verbosity level Introduce the ``concise`` verbosity level to get slightly less messages than under normal verbosity mode. Concise mode disables informational messages, like additional module evaluation triggered by a module load or unload, aborted evaluation issues or module evaluation report occurring on ``restore`` or ``source`` sub-commands. The ``module`` command could be set concise at ``./configure`` time with ``--with-verbosity`` option. ``MODULES_VERBOSITY`` environment variable supersedes this setting and it could be set with ``config`` module sub-command through the ``verbosity`` option. Fixes #204. * modulecmd.tcl.in: Report every mod load/unload on source sub-cmd When verbosity level is normal or at an higher level, reports every module loads or unloads performed to ``source`` a scriptfile, even if there is no specific message to output for these module evaluations. Clarifies what module evaluations have been triggered to source the scriptfile. * modulecmd.tcl.in, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/080-access-coll.exp: Report every mod load/unload on restore sub-cmd When verbosity level is normal or at an higher level, reports every module loads or unloads performed to ``restore`` a collection, even if there is no specific message to output for these module evaluations. Clarifies what module evaluations have been triggered to restore the collection. 2019-07-21 Xavier Delaruelle <[email protected]> * configure, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, testsuite/modules.00-init/090-switches.exp, testsuite/modules.70-maint/220-config.exp: Reintroduce 'verbose' verbosity level Reintroduce the ``verbose`` verbosity level and associated ``--verbose`` and ``-v`` command-line switches, which were available on Modules v3. Verbose mode adds additional informational messages, like a systematic report of the loading or unloading module evaluations. The ``module`` command could be set verbose by default at ``./configure`` time with ``--with-verbosity`` option. ``MODULES_VERBOSITY`` environment variable supersedes this setting and it could be set with ``config`` module sub-command through the ``verbosity`` option. * configure, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, testsuite/modules.00-init/090-switches.exp, testsuite/modules.70-maint/220-config.exp: Reintroduce 'silent' verbosity level Reintroduce the ``silent`` verbosity level and associated ``--silent`` and ``-s`` command-line switches, which were available on Modules v3. Silent mode turns off error, warning and informational messages. The ``module`` command could be set silent by default at ``./configure`` time with ``--with-verbosity`` option. ``MODULES_VERBOSITY`` environment variable supersedes this setting and it could be set with ``config`` module sub-command through the ``verbosity`` option. 2019-07-20 Xavier Delaruelle <[email protected]> * Makefile, Makefile.inc.in, configure, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, site.exp.in, testsuite/example/siteconfig.tcl-1, testsuite/example/siteconfig.tcl-2, testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.00-init/100-pager.exp, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/150-access-init.exp, testsuite/modules.70-maint/220-config.exp: Add ability to control message verbosity Add a ``verbosity`` configuration option to define the default message verbosity level (between a ``normal`` and a ``debug`` level). This option could be set at ``./configure`` time with ``--with-verbosity`` option. It could be superseded with the ``MODULES_VERBOSITY`` environment variable, that could be set with ``config`` module sub-command through the ``verbosity`` option. Defining a ``debug`` verbosity level at the command-line level is still achieved by using the ``-D`` or ``--debug`` command-line switches. 2019-07-18 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.50-cmds/376-deps7.exp: Inhibit UreqUn when performing purge/reload/restore sub-cmd When unloading a module that contains a ``module load`` or ``module switch`` modulefile command, inhibit the unload performed of the useless requirement when auto_handling mode is disabled if currently performing a purge, reload or restore sub-command. As the unload sequence is determined and managed from these top commands. * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/080-access-coll.exp: No message block for restore sub-cmd Remove the message block display output for the ``restore`` sub-command as this output style is reserved for modulefile evaluation mode (load, unload and switch) to clarify understanding. * modulecmd.tcl.in: Remove msg record set for purge sub-cmd No the message block display output for the ``purge`` sub-command as this output style is reserved for modulefile evaluation mode (load, unload and switch) to clarify understanding. * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/375-deps6.exp, testsuite/modules.50-cmds/377-cyclic.exp, testsuite/modules.50-cmds/377-error.exp: No message block for reload sub-cmd Remove the message block display output for the ``reload`` sub-command as this output style is reserved for modulefile evaluation mode (load, unload and switch) to clarify understanding. 2019-07-19 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Dissociate an eval id from a record msg id Adapt the pushMsgRecordId and popMsgRecordId procedures to set and evaluation id in addition to a record message id. These evaluation ids will track successful and failed module evaluation to distinguish these evaluation results from output message recording. A setmsgid argument is added to both procedures to optionally set this record message id, which is unwanted on global actions not outputing their results under some message block. 2019-07-17 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/360-restoreenv.exp, testsuite/modules.50-cmds/370-deps-bis.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-error.exp: Report load/unload evaluation break Report an error when a module load or unload evaluation aborts due to the use of the ``break`` or ``exit`` modulefile commands. This error notification clarifies that module evaluation failed. Fixes #267. 2019-07-16 Xavier Delaruelle <[email protected]> * testsuite/install.00-init/050-crossshell.exp: ts: fix ksh err msg change in install/050 tests * .cirrus.yml: cirrus: install readline to satisfy R needs 2019-07-12 Xavier Delaruelle <[email protected]> * MIGRATING.rst: doc: clarifies usage of config sub-cmd in init RC * MIGRATING.rst, NEWS.rst: doc: desc init conf alt naming in NEWS/MIGRATING 2019-07-11 Xavier Delaruelle <[email protected]> * contrib/rpm/environment-modules.spec.in: rpm: use /etc/environment-modules as etcdir And store Modules initialization configurations in it. * contrib/rpm/environment-modules.spec.in: rpm: disable set_shell_startup 2019-07-10 Xavier Delaruelle <[email protected]> * INSTALL.rst, doc/source/diff_v3_v4.rst: doc: desc init conf alt naming in diff/INSTALL * .travis.yml, testsuite/install.00-init/005-init_ts.exp, testsuite/modules.70-maint/120-autoinit.exp: ts: adapt tests to --with-initconf-in=etcdir * configure: install: add --enable-modulespath configure opt Add the ``--enable-modulespath`` configure option, which is an alias for the ``--enable-dotmodulespath`` option as ``.modulespath`` configuration file is named ``modulespath`` when installed in ``etcdic``. * testsuite/modules.70-maint/220-config.exp: ts: fix regexp char escaping in 70/220 * Makefile, Makefile.inc.in, configure, init/Makefile, site.exp.in: install: add --with-initconf-in configure opt Introduce the ability to install the Modules initialization configuration files in the ``etcdir`` rather than in the ``initdir``. A new configure option is introduced for this task: ``--with-initconf-in``. Accepted values for this option are: ``etcdir`` or ``initdir`` (default). 2019-07-09 Xavier Delaruelle <[email protected]> * init/bash.in, init/cmake.in, init/csh.in, init/fish.in, init/ksh.in, init/python.py.in, init/r.R.in, init/ruby.rb.in, init/sh.in, init/tcl.in, init/zsh.in, modulecmd.tcl.in: Use initconf in etcdir rather initdir if it exists Take into account Modules initialization configurations found in ``etc`` directory if they exist rather in ``init`` directory. If ``initrc`` configuration file is found in ``etcdir`` then it is preferred over ``modulerc`` file in ``initdir``. Following the same trend, ``modulespath`` configuration file is found in ``etcdir`` then it is preferred over ``.modulespath`` file in ``initdir``. * Makefile, doc/source/module.rst, modulecmd.tcl.in, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/081-access-rc.exp: Set global RC file in @etcdir@ instead @prefix@/etc Fix location of ``etc/rc`` global RC file to ``@etcdir@/rc`` instead of ``@prefix@/etc/rc`` to cope with ``@etcdir@`` specific setup (defaults to ``@prefix@/etc``). 2019-07-08 Xavier Delaruelle <[email protected]> * NEWS.rst, contrib/rpm/environment-modules.spec.in: doc/rpm: merge release of version 4.2.5 * modulecmd.tcl.in, testsuite/modulefiles.deps/m10, testsuite/modulefiles.deps/m11, testsuite/modulefiles.deps/m12, testsuite/modules.50-cmds/376-deps7.exp: Fix 'module load a b' in modfiles when a or b is loaded Fix automatic loading of modulefiles when multiple module names are set on a single ``module load`` modulefile command. When auto_handling mode was disabled, the load of not loaded modules was not achieved as soon as some modules on this list were already loaded. Fixes #281. 2019-07-04 Colin Marquardt <[email protected]> * NEWS.rst, .../test-modulefiles/modulefiles/test_dir_and_file, doc/source/cookbook/test-modulefiles.rst: doc: add cookbook recipe for ModulesTest Fixes #182. 2019-07-07 Xavier Delaruelle <[email protected]> * .travis.yml: travis: fix opensuse/leap docker container install 2019-07-06 Xavier Delaruelle <[email protected]> * .gitignore, .travis.yml, Makefile, testsuite/example/modulerc-1.in, testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/030-options.exp, testsuite/install.00-init/050-crossshell.exp, testsuite/modules.70-maint/120-autoinit.exp: ts: test init modulerc that disables set_shell_startup * modulecmd.tcl.in: Clear cached config value when setting config During a ``config`` sub-command, config values are fetched which leads for some of the configuration options to the cache of their value. When ``config`` sub-command is called to set a configuration option value, unsets any cached value for this option (as value has just been updated). 2019-07-05 Xavier Delaruelle <[email protected]> * init/modulerc.in, testsuite/example/modulerc.in: init: mention possible config set in modulerc * modulecmd.tcl.in: Enable 'config' sub-cmd from source/autoinit eval Allow ``config`` sub-command to be called from a modulefile if this modulefile is evaluated by the ``autoinit`` or ``source`` sub-commands called at a top-level module context. 2019-07-04 Xavier Delaruelle <[email protected]> * MIGRATING.rst, NEWS.rst: doc: desc search_match in NEWS/MIGRATING * .travis.yml, testsuite/install.00-init/010-environ.exp, testsuite/install.00-init/050-crossshell.exp, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/220-config.exp: ts/travis: adapt tests to set_shell_startup cfg * contrib/mt: contrib: fix array init issue on 'mt' script * INSTALL.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: desc set_shell_startup in man/diff/INSTALL 2019-07-03 Xavier Delaruelle <[email protected]> * Makefile, Makefile.inc.in, configure, init/bash.in, init/bash_completion.in, init/csh.in, init/fish.in, init/fish_completion, init/ksh.in, init/sh.in, init/tcsh_completion.in, init/zsh-functions/_module, init/zsh.in, modulecmd.tcl.in, site.exp.in: Add ability to disable shell startup file set Introduce the ability not to set the shell startup file that ensure ``module`` command is defined once shell has been initialized. Setting shell startup file currently means defining ``ENV`` and ``BASH_ENV`` environment variable to the Modules bourne shell initialization script. ``./configure`` options ``--enable-set-shell-startup`` and ``--disable-set-shell-startup`` define if shell startup should be set or not by default. It could be superseded with the ``MODULES_SET_SHELL_STARTUP`` environment variable, that could be set with ``config`` module sub-command through the ``set_shell_startup`` option. 2019-07-02 Xavier Delaruelle <[email protected]> * testsuite/modules.00-init/140-color.exp, testsuite/modules.70-maint/220-config.exp: ts: correctly escape exp res in 00/140 and 70/220 * contrib/mt: contrib: fix var unbound issue on 'mt' with older bash * .travis.yml: travis: optionally change clone dir To launch tests from path containing specific chars (with special meaning in regular expressions) to ensure expected results from test cases are correctly escaped. 2019-06-28 Xavier Delaruelle <[email protected]> * .travis.yml, testsuite/modulefiles.indepth/modv/.common, testsuite/modulefiles.indepth/modv/.modulerc, testsuite/modules.00-init/140-color.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.20-locate/090-memcache.exp, testsuite/modules.70-maint/220-config.exp, testsuite/modules.80-deep/068-transitive-deep.exp, testsuite/modules.90-avail/020-single.exp, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/050-long.exp, testsuite/modules.90-avail/080-noindepth.exp, testsuite/modules.91-sort/020-avail.exp: ts/travis: adapt tests to search_match cfg 2019-06-15 Xavier Delaruelle <[email protected]> * MIGRATING.rst, NEWS.rst: doc: desc search_match in NEWS/MIGRATING * INSTALL.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: desc search_match in man/diff/INSTALL * Makefile, Makefile.inc.in, configure, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, site.exp.in: Add ability to control module search match Introduce the ability to control the module search match. Search query string should match module name start or any part of module fully qualified name. Default search match behavior is set at ``./configure`` time with the ``--with-search-match`` option. It could be superseded with the ``MODULES_SEARCH_MATCH`` environment variable, that could be set with ``config`` module sub-command through the ``search_match`` option. Command-line switches ``--starts-with`` (``-S``) and ``--contains`` (``-C``) for ``avail`` module sub-command enable to supersede defined search match configuration. 2019-07-01 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Rework no-indepth mod match in getModules Match search query at corresponding search depth level when indepth mode is disabled without implying that search query matches beginning of module names. This is a preparatory work to a search match option where query could be contained in module name and not only be the start of module name. As some results from findModules are removed through the process of getModules, update element list of directories to fit results. 2019-06-26 Xavier Delaruelle <[email protected]> * NEWS.rst, modulecmd.tcl.in, testsuite/modulefiles/append/1.8, testsuite/modulefiles/prepend/1.10, testsuite/modulefiles/remove/1.8, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.90-avail/070-full.exp: Args after var name are values on {append,prepend,remove}-path Fix argument parsing for the `append-path`, `prepend-path` and `remove-path` modulefile commands to consider every arguments found after the variable name as variable values and not command option even if argument starts with `-` character. Fixes #278. * modulecmd.tcl.in, testsuite/modules.20-locate/057-mcookie.exp: Trim modfile magic cookie string from # chars Right trim '#' characters from the fetched modulefile magic cookie string to ensure a correct compatibility version comparison. Useful when modulefile first line is equal to '#%Module4.3##############'. Thanks to Eric Deveaud for the issue report. 2019-06-07 Xavier Delaruelle <[email protected]> * doc/source/module.rst, modulecmd.tcl.in, testsuite/modules.70-maint/220-config.exp: Report locked config option value with a locked mention * doc/source/module.rst, modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.70-maint/220-config.exp: Raise error when setting locked config option Raise an error and exit if module 'config' sub-command attempts to modify a configuration option which is locked. 2019-06-05 Xavier Delaruelle <[email protected]> * .travis.yml, INSTALL.rst, MIGRATING.rst, NEWS.rst, configure, doc/source/module.rst, modulecmd.tcl.in, siteconfig.tcl, testsuite/modules.00-init/140-color.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/090-memcache.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/378-sametarget.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.70-maint/100-path.exp, testsuite/modules.70-maint/170-contact.exp, testsuite/modules.70-maint/220-config.exp, testsuite/modules.91-sort/040-load-sort.exp: install: enable implicit_default in locked_configs Makes implicit_default configuration option lockable through locked_configs option. * .travis.yml, INSTALL.rst, MIGRATING.rst, Makefile, Makefile.inc.in, NEWS.rst, configure, doc/source/module.rst, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, site.exp.in, siteconfig.tcl, testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/100-pager.exp, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/150-access-init.exp, testsuite/modules.70-maint/220-config.exp: install: replaces --enable-extra-siteconfig with --with-locked-configs Add to the configure script the --with-locked-configs option to ignore environment variable superseding of Modules configurations defined in modulecmd.tcl script. Lockable configuration option are extra_siteconfig. Currently locked options are reported through the locked_configs option on the config sub-command. This new configure option replces --enable-extra-siteconfig which was dedicated to the control over the MODULES_SITECONFIG variable. 2019-06-03 Xavier Delaruelle <[email protected]> * doc/source/module.rst: doc: clarify source sub-cmd in module.1 man Talk about scriptfile on `source` sub-command rather modulefile to clarify a bit usage. 2019-06-02 Xavier Delaruelle <[email protected]> * MIGRATING.rst, NEWS.rst: doc: desc implicit_default in NEWS/MIGRATING 2019-06-01 Xavier Delaruelle <[email protected]> * .travis.yml, testsuite/home/coll13, testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.00-init/140-color.exp, testsuite/modules.20-locate/030-defvers.exp, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/035-defname.exp, testsuite/modules.20-locate/038-defcontext.exp, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/055-locrcerrs.exp, testsuite/modules.20-locate/057-mcookie.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.20-locate/075-symlink.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.20-locate/090-memcache.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/322-is-avail.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/378-sametarget.exp, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.61-coll/080-access-coll.exp, testsuite/modules.61-coll/999-cleanup.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.70-maint/100-path.exp, testsuite/modules.70-maint/156-is-avail.exp, testsuite/modules.70-maint/170-contact.exp, testsuite/modules.70-maint/220-config.exp, testsuite/modules.80-deep/020-load-deep.exp, testsuite/modules.80-deep/022-switch.exp, testsuite/modules.80-deep/030-display.exp, testsuite/modules.80-deep/068-transitive-deep.exp, testsuite/modules.80-deep/080-access-deep.exp, testsuite/modules.90-avail/080-noindepth.exp, testsuite/modules.91-sort/020-avail.exp, testsuite/modules.91-sort/040-load-sort.exp: ts/travis: adapt tests to implicit_default cfg 2019-05-31 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Force implicit_default enablement during 'restore' When performing a 'module restore', forcibly enable the implicit_default option to correctly match current state against the collection to restore, even if this collection was saved with implicit_default enabled and current setup at restore time has this option disabled. implicit_default is then restored to its defined value once the match is over. So the load of a module to restore from the collection may fail when implicit_default is disabled if this module is an implicit default and collection was saved with implicit_default enabled. 2019-05-28 Xavier Delaruelle <[email protected]> * INSTALL.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst, doc/source/modulefile.rst: doc: desc implicit_default in man/diff/INSTALL * Makefile, Makefile.inc.in, configure, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, site.exp.in: Control whether an implicit default should be selected Add the ability to configure whether an implicit default version should be defined for modules with no default version explicitly defined. When enabled, which stays the default behavior, a module version is automatically selected (latest one) when the generic name of the module is passed. When implicit default selection is disabled, the name of modules to evaluate should be fully qualified elsewhere an error is returned. This option is set at `./configure` time with the `--enable-implicit-default` and `--disable-implicit-default` options. It could be superseded with the `MODULES_IMPLICIT_DEFAULT` environment variable, that could be set with `config` module sub-command throught the `implicit_default` option. When implicit_default is disabled: - module implicit default versions are excluded from 'module avail -d' results. - false is returned when argument passed to the 'is-avail' sub-command is a directory without an explicit default set in it. - and auto_handling is enabled, the requirement load mechanism will fail on requirement relying on module implicit default version Fixes #179. 2019-05-30 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Add report_issue arg to getPathToModule proc Add the report_issue argument to the getPathToModule procedure to inhibit the report of issue raised during the search and resolution of a passed module name. Issue report is unwanted when performing a reverse lookup of the module names resolving to a known modulefile (like done in procedures getSimplifiedLoadedModuleList and getAllModuleResolvedName). Issue report is also disabled in cmdModuleSearch, as found issues are reported later on through the list returned by the getPathToModule call. 2019-05-25 Xavier Delaruelle <[email protected]> * .travis.yml, testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/375-deps6.exp, testsuite/modules.50-cmds/375-order.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/378-sametarget.exp, testsuite/modules.50-cmds/379-module-unload.exp, testsuite/modules.70-maint/220-config.exp, testsuite/modules.80-deep/021-unload.exp: ts/travis: adapt tests to unload_match_order cfg 2019-05-24 Xavier Delaruelle <[email protected]> * MIGRATING.rst, NEWS.rst: doc: desc unload_match_order in NEWS/MIGRATING * doc/source/cookbook/unload-firstly-loaded.rst: doc: update unload-firstly-loaded recipe with unload_match_order cfg 2019-05-23 Xavier Delaruelle <[email protected]> * INSTALL.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: desc unload_match_order in man/diff/INSTALL * Makefile, Makefile.inc.in, configure, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, site.exp.in: Add the ability to configure of unload match order Add the ability to configure when unloading a module and multiple loaded modules match request if firstly loaded module should be choosen or lastly loaded module. Default behavior is set at the `./configure` time with the `--with-unload-match-order` switch. This default could be superseded with the `MODULES_UNLOAD_MATCH_ORDER` environment variable, that could be set with `config` module sub-command throught the `unload_match_order` option. This change allows to restore behavior of Modules compatibility version where first matching module in loaded module list were unloaded in such situation. By default, lastly loaded module is set for unload (like it was before this change) to limit impact on the loaded module list when dependencies are woven between these loaded modules. Even if this change enables to change the default behavior, it is highly recommanded to keep it as soon your modulefiles express dependencies between each other. Fixes #198. 2019-05-24 Xavier Delaruelle <[email protected]> * NEWS.rst: doc: desc fix for #270 in NEWS 2019-05-22 Xavier Delaruelle <[email protected]> * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp: ts: clean any automated handling mode configuration 2019-05-08 Jacques Raphanel <[email protected]> * contrib/scripts/createmodule.py: contrib: add support for creating module file skeleton from MSDOS prompt Update createmodule.py to provide support for cmd shell to use `set` instead of `env`. Fixes #270. 2019-05-18 Xavier Delaruelle <[email protected]> * MIGRATING.rst, NEWS.rst: doc: desc config cmd in NEWS/MIGRATING 2019-05-19 Xavier Delaruelle <[email protected]> * site.exp.in, testsuite/modulefiles/modbad/config, testsuite/modules.00-init/071-args.exp, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.70-maint/220-config.exp, testsuite/modules.90-avail/070-full.exp: ts: test 'config' sub-command * contrib/mt, contrib/mtreview.in: ts: outputs full log in 'mt' if testsuite failed but no failure found 2019-01-07 Xavier Delaruelle <[email protected]> * doc/source/module.rst: doc: desc config cmd in man module.1 2019-05-20 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Reword configuration 'key' into configuration 'option' 2019-05-18 Xavier Delaruelle <[email protected]> * Makefile, NEWS.rst, contrib/rpm/environment-modules.spec.in, siteconfig.tcl: install: provide a bare siteconfig.tcl Provide a bare siteconfig.tcl in designated etcdir at installation time if no pre-existing site-specific configuration file is found at designated location. 2019-05-17 Xavier Delaruelle <[email protected]> * .travis.yml, INSTALL.rst, MIGRATING.rst, Makefile, Makefile.inc.in, NEWS.rst, configure, doc/source/module.rst, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, site.exp.in, testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/150-access-init.exp: Add ability to disallow MODULES_SITECONFIG Add to the configure script the `--enable-extra-siteconfig` and `--disable-extra-siteconfig` options to allow or forbid the definition of a site-specific configuration script controlled with the `MODULES_SITECONFIG` environment variable. These options control the default value of the `g_extrasiteconfig` variable in `modulecmd.tcl`. If this variable is true (by default), MODULES_SITECONFIG is looked at the siteconfig sourcing time. Thus the primary siteconfig.tcl can set the variable to false to ensure the extra siteconfig is disabled whatever the option passed at ./configure time. 2019-05-16 Xavier Delaruelle <[email protected]> * doc/source/diff_v3_v4.rst: doc: desc config sub-cmd in diff_v3_v4 * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in: Report and set 'extra_siteconfig' on 'config' sub-command Report and be able to set the 'extra_siteconfig' configuration, linked to the MODULES_SITECONFIG environment variable, on the 'config' sub-command. 2019-01-30 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.00-init/140-color.exp: Fix block report line split when output color 2019-01-06 Xavier Delaruelle <[email protected]> * doc/source/module.rst: doc: desc. MODULECONTACT/MODULERCFILE in module.1 * CONTRIBUTING.rst: doc: provide 'config --dump-state' result when reporting issue * modulecmd.tcl.in: Dump machine/os/tcl_version state on 'config' sub-cmd 2019-01-05 Xavier Delaruelle <[email protected]> * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in: Report and set 'rcfile' on 'config' sub-command Report and be able to set the 'rcfile' configuration, linked to the MODULERCFILE environment variable, on the 'config' sub-command. * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module: init: add 'config' sub-cmd to shell comp scripts * modulecmd.tcl.in: Rework cmdModuleConfig argument parsing To handle the definition of empty value. * modulecmd.tcl.in: Add the ability to report one config on 'config' sub-cmd When just a configuration key name is passed to the 'config' sub-command (and no value associated to it) just report this configuration key value rather reporting all configuration keys. * modulecmd.tcl.in: Add ability to unset conf from 'config' sub-cmd When the '--reset' command-line switch and a configuration key name is passed to the 'config' sub-cmd, unset the relative environment variable. Ensure this configuration key could be altered. * modulecmd.tcl.in: Reword cmdModuleConfig data structure Split details in multiple arrays for modularity. * modulecmd.tcl.in: Rework displayConfig procedure Pass configuration value directly and re-order arguments. * modulecmd.tcl.in: Add ability to set conf from 'config' sub-cmd When a configuration key name and value is passed to the 'config' sub-command, set the relative environment variable with passed value. Ensure on the way that configuration key name can be altered with an environment variable and that passed value is valid. 2019-01-04 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Report Modules env variable on config --dump-state Report the list of the environment variables related to Modules in an additionnal table displayed on the --dump-state action of the 'config' sub-command. * modulecmd.tcl.in: Report in state list global RC files loaded Track the global RC files that are loaded and report this information on a 'config' sub-command among the current state information. * modulecmd.tcl.in: Report in state list if siteconfig/tcl_ext_lib have been loaded Track if a site configuration has been sourced and if the Tcl extension library has been loaded. This information is reported on a 'config' sub-command among the current state information. * modulecmd.tcl.in: Dump Modules state on 'config' sub-cmd with --dump-state Add the --dump-state command-line switch to the 'config' module sub-cmd. Add a second report table that displays each state value of the current modulecmd.tcl execution. Take this opportunity to move 'path_separator', 'term_columns', 'debug', 'force' and 'paginate' from the config table to the state table. * modulecmd.tcl.in: Report runenv configs set for modulecmd run-time execution Report the environment variable set for modulecmd run-time execution configuration on 'module config' sub-command. * modulecmd.tcl.in: Report avail_report_{dir,mfile}_sym/ignored_dirs configs Report the avail_report_dir_sym, avail_report_mfile_sym and ignored_dirs configuration on 'module config' sub-command. 2019-01-03 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Define global 'ignored_dirs' at first use Instead of initializing ignored dirs in modulecmd.tcl main script body, introduce a 'getIgnoredDirs' procedure that will initialize this information at first call. * modulecmd.tcl.in: Define global 'contact' at first use Instead of initializing 'contact' address in modulecmd.tcl main script body, introduce a 'getContact' procedure that will initialize this information at first call. * modulecmd.tcl.in: Report if config has been overridden on 'config' sub-cmd Introduce a displayConfig helper procedure that checks if a given configuration parameter has been overridden from its default value by command-line switch or environment variable. Report configuration value and from where it has eventually been overridden. * modulecmd.tcl.in: Register use_pager as a global variable To get access to this value, on which the paginate option is based, when reporting configuration. * modulecmd.tcl.in: Also register colors as a global list To get access to this value, on which the color table is based, when reporting configuration. 2019-01-02 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Introduce 'config' sub-command Add the 'config' sub-command to report all the different parameter set for the tool. 2019-05-15 Xavier Delaruelle <[email protected]> * NEWS.rst: doc: desc. fixes for #274 and #275 in NEWS * modulecmd.tcl.in, testsuite/modules.90-avail/090-dup-modpath.exp, .../modules.95-version/090-dup-modpath-version.exp: No duplicate entry in resolved modulepath list When resolving the enabled list of modulepaths, ensure resolved path entries are unique. Fixes #274. * testsuite/modules.10-use/999-cleanup.exp, testsuite/modules.61-coll/999-cleanup.exp, testsuite/modules.90-avail/999-cleanup.exp: ts: ensure a correct 999-cleanup exist for every ts parts * modulecmd.tcl.in, testsuite/install.00-init/020-module.exp, testsuite/modulefiles/alias/3.0, testsuite/modules.00-init/006-procs.exp, testsuite/modules.50-cmds/076-alias-sub.exp: Fix escaping of '?' character in shell alias Fixes #275. 2019-05-14 Xavier Delaruelle <[email protected]> * testsuite/example/siteconfig.tcl-2, testsuite/modules.00-init/120-siteconfig.exp: ts: superseded defs between siteconfig files * testsuite/modules.00-init/150-access-init.exp: ts: test restricted access to siteconfig and MODULERCFILE 2019-05-09 Xavier Delaruelle <[email protected]> * NEWS.rst, doc/source/module.rst: doc: desc etcdir/siteconfig.tcl in FILES sect. of module.1 * doc/source/module.rst: doc: desc. MODULERCFILE var in module.1 man page 2019-05-08 Xavier Delaruelle <[email protected]> * MIGRATING.rst, NEWS.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst, testsuite/example/siteconfig.tcl-2, testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.00-init/100-pager.exp, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/150-access-init.exp: adding documentation and tests for MODULES_SITECONFIG 2019-03-06 Ben Bowers <[email protected]> * modulecmd.tcl.in: adding MODULES_SITECONFIG env. variable support Add the ability to define a site-specific configuration file with an environment variable: MODULES_SITECONFIG. When set, the script file pointed by the variable is sourced (if readable) after the site-specific configuration file initially defined in modulecmd.tcl. Fixes #234. 2019-05-08 Xavier Delaruelle <[email protected]> * MIGRATING.rst: doc: fix typo in migrating guide for v4.3 * .travis.yml: travis: add CentOS 7 test case where extlib is disabled Add a CentOS 7 test case with compat version disabled and Tcl extension library disabled. Helps to compare performances between 2 test cases where the only difference is the enablement of the Tcl extension library. 2019-05-07 Xavier Delaruelle <[email protected]> * NEWS.rst, init/bash.in, init/ksh.in, init/profile-compat.sh.in, init/sh.in, init/zsh.in: init: improve readability of var definition operations Improve readability of variable definition operations by writing one definition operation per line rather having multiple commands on a single line like 'VAR=val; export VAR'. Fixes #225. 2019-05-06 Xavier Delaruelle <[email protected]> * MIGRATING.rst, NEWS.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, testsuite/modules.70-maint/210-clear.exp: Leverage --force cmd-line switch on 'clear' sub-cmd Leverage --force command-line switch on 'clear' sub-command to skip confirmation dialog. Fixes #268. 2019-05-05 Xavier Delaruelle <[email protected]> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/150-access-init.exp: ts: test tclextlib restricted read access * modulecmd.tcl.in: Remove useless var exist test in __getFilesInDirectory * testsuite/modules.10-use/{040-load.exp => 040-load-use.exp}, testsuite/modules.10-use/{080-access.exp => 080-access-use.exp}, testsuite/modules.20-locate/{095-cleanup.exp => 999-cleanup.exp}, testsuite/modules.60-initx/{005-init.exp => 010-init_ts.exp}, testsuite/modules.60-initx/{010-list.exp => 015-list.exp}, testsuite/modules.60-initx/{080-access.exp => 080-access-initx.exp}, testsuite/modules.60-initx/{095-cleanup.exp => 999-cleanup.exp}, testsuite/modules.61-coll/{080-access.exp => 080-access-coll.exp}, testsuite/modules.80-deep/{020-load.exp => 020-load-deep.exp}, testsuite/modules.80-deep/{040-list.exp => 040-list-deep.exp}, testsuite/modules.80-deep/{068-transitive.exp => 068-transitive-deep.exp}, testsuite/modules.80-deep/{080-access.exp => 080-access-deep.exp}, testsuite/modules.91-sort/{040-load.exp => 040-load-sort.exp}, testsuite/modules.95-version/{020-load.exp => 020-load-version.exp}: ts: ensure test file name are unique To ensure test file selection done in 'mt' script will not end up with test file collision. * Makefile, contrib/mt: ts: rework way 'mt' pass test list to runtest Instead of removing read access to test files that should not be run in 'mt' script, transmits to 'runtest' the list of test files to run via a RUNTESTFILES environment variable appended to 'runtest' command line in Makefile targets. * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: ts: check clear cmd confirmation msg * testsuite/config/unix.exp, testsuite/modules.00-init/006-procs.exp: ts: improve test launch procedures 2019-05-03 Xavier Delaruelle <[email protected]> * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/140-color.exp: ts: test calling color initialization procedures twice * .travis.yml: travis: set coverage on 2 cases where extlib is enabled Enable code coverage on 2 existing test cases where the Modules Tcl extension library is enabled. 2019-05-01 Xavier Delaruelle <[email protected]> * .travis.yml, lib/.gitignore, lib/Makefile.in: install/ts: enable gcov on Modules Tcl ext lib When coverage is asked (COVERAGE=y) also check lib/envmodules.c (Modules Tcl extension library) and report obtained coverage result (Codecov script automatically finds Gcov coverage results). 2019-05-02 Xavier Delaruelle <[email protected]> * .travis.yml, CONTRIBUTING.rst, Makefile, contrib/mt: install/ts: trigger coverage with var instead of make target Instead of running test coverage with 'make testcoverage', use COVERAGE variable to trigger this run ('make test COVERAGE=y'). * CONTRIBUTING.rst: doc: adapt name of coverage annoted script in CONTRIBUTING Annoted script generated by test coverage process has changed following to the introduction of the Modules Tcl extension library. 2019-01-13 Xavier Delaruelle <[email protected]> * testsuite/config/unix.exp, testsuite/modulefiles.other2/clear/.modulerc, testsuite/modulefiles.other2/clear/1, testsuite/modulefiles.other2/clear/2, testsuite/modulefiles.other2/clear/3, testsuite/modulefiles/modbad/clear, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/006-procs.exp, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.70-maint/210-clear.exp, testsuite/modules.90-avail/070-full.exp: ts: test 'clear' sub-command * MIGRATING.rst, NEWS.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, testsuite/modules.00-init/100-pager.exp: Re-introduce 'clear' sub-command With same behavior than on compatibility version. The list of the environmet variables that are cleared by this sub-command has been updated to match the recent development (MODULES_LMPREREQ, ...) Fixes #203. 2019-05-01 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Fix colors init against badly formed MODULES_COLORS Seems that 'array set' could partially set values to an array in case the list passed to it is badly formed (odd number of element). This situation has been witnessed on FreeBSD. So unset the array variable to ensure it will not be found set at all by the remaining code of the initColors procedure. 2019-01-10 Xavier Delaruelle <[email protected]> * doc/source/diff_v3_v4.rst: doc: desc color mode in diff_v3_v4 2019-01-08 Xavier Delaruelle <[email protected]> * testsuite/modules.00-init/140-color.exp: ts: test colored output * modulecmd.tcl.in: Buffer reportError calls before initErrorReport To produce first warning and error messages (triggered during argument parse) with expected pager and color mode. 2019-01-06 Xavier Delaruelle <[email protected]> * INSTALL.rst, MIGRATING.rst, NEWS.rst, configure, doc/source/module.rst: doc: desc color mode in man/NEWS/INSTALL/MIGRATING 2019-01-05 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, .../veryveryveryveryveryveryveryverylong/.modulerc, .../veryveryveryveryveryveryveryverylong/name, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.70-maint/045-listlong.exp, testsuite/modules.90-avail/050-long.exp: Adapt padding for long modulename on long-mode reporting Fix some tests that were assuming at least one whitespace between list long output fields. 2019-01-04 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Highlight table column title When displaying a report table, list when doing a module list or module avail in --long mode, highlight each column title with the 'hi' SGR code. 2019-01-02 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Pass each col len as arg to displayTableHeader Change displayTableHeader procedure to pass each column length after each column title. 2019-01-03 Xavier Delaruelle <[email protected]> * testsuite/example/siteconfig.tcl-1, testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.00-init/100-pager.exp, testsuite/modules.00-init/120-siteconfig.exp: ts: adapt existing tests for color 2019-01-05 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Show caller name of bootstrap reportDebug Like for the regular reportDebug procedure, report the name of the calling procedure of the bootstrap reportDebug (procedure set prior paging initialization). So both bootstrap and regular reportDebug behave and report the same way. 2019-01-02 Xavier Delaruelle <[email protected]> * Makefile, Makefile.inc.in, configure, modulecmd.tcl.in, site.exp.in: Define a light and dark background default color set Define by default a color set for dark background and a color set for light background. These color sets can be define at configure time with the --with-dark-background-colors and --with-dark-background-colors options respectively. Terminal background color kind can be defined to 'light' or 'dark'. This value can be set at configure time with the --with-terminal-background option or with the environment variable MODULES_TERM_BACKGROUND. If the default color set is not superseded by the MODULES_COLORS environment variable, the dark background colors will apply if terminal background is set to dark. If the terminal background is set to light, the light background colors will apply instead. 2018-12-30 Xavier Delaruelle <[email protected]> * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module: init: add --color opt to bash/fish/tcsh/zsh comp scripts Add both the --color and --color= forms of the colorize output command-line switch to the shell completion scripts. * modulecmd.tcl.in: Color module cmd reported by 'saveshow' cmd Graphically enhance the 'module' command reported on a 'module saveshow' command. As for modulefile commands use the 'cm' SGR key. * modulecmd.tcl.in: Color modfile cmd reported by 'display' cmd Graphically enhance the modulefile commands reported on a 'module display' command. Introduce the 'cm' SGR key for these modulefile commands. * modulecmd.tcl.in: Highlight modfile/collfile name on display/help/test/saveshow Hightlight the modulefile header name reported on the display, help and test commands. Following the same trend, highlight the collection file header name reported on the saveshow command. * modulecmd.tcl.in: Hightlight matched module whatis/search query string Hightlight in each module whatis module name result or in each module search whatis string result the substring matching the search query string following the same process than for module avail search query hightlight. * modulecmd.tcl.in: Hightlight matched module avail search query string Hightlight in each module avail result the substring matching the search query string in which the wildcard characters have been right trimmed off. No hightlight is performed if color mode is disabled or if some wildcard characters persist after the right trim. 2018-12-29 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Graphically represent 'default' symbol Instead of outputing the 'default' symbol among the whole symbol list, represent it graphically with the 'de' SGR key applied to the module name. If color mode is disabled or no specific 'de' SGR key is defined, output 'default' symbol like any other symbol. * modulecmd.tcl.in: Color sym and its separator differently Use 'sy' sgr key to color symbols and 'se' sgr key to color the separator characters surrounding these symbols '(', ':' and ')'. * modulecmd.tcl.in: No '@' tag added to aliases when they are colored Do not add a '@' tag, to indicate element reported is an alias, when alias are colored (which already indicates the entry is an alias) * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module: init: run module in --color=never mode in shell comp scripts Ensure color mode is disabled when calling module command in the bash, fish, tcsh and zsh completion scripts. * modulecmd.tcl.in: Color sym reported by 'list' cmd Graphically enhance symbols on 'module list' command like done for 'module avail'. Make use of formatListEltToLongDisplay and formatListEltToDisplay procedure to format the elements to output in the same way than 'module avail'. * modulecmd.tcl.in: Color alias/sym reported by 'aliases' cmd Graphically enhance aliases and symbols on 'module aliases' command like done for 'module avail'. * modulecmd.tcl.in: Color dir/alias/syms reported by 'avail' cmd Graphically enhance directories, aliases and symbols on 'module avail' reports (regular, terse and long). Introduce the 'di', 'al' and 'sy' SGR keys respectively for directories, aliases and symbols). 2018-12-28 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Pass elts length to displayElementList proc Externalize from the displayElementList procedure the computation of the length of each element to display. This is done to prepare the output of graphically enhanced elements from this procedure. Element lengths are computed in each procedure building the display list. This is where the graphical enhancement will take place so it is the right spot to learn the real length (without SGR code) of these elements to output. Take this opportunity to also change displayElementList procedure to pass it the display list as a list argument rather as "args" which requires to 'eval' the procedure call. * modulecmd.tcl.in: Highlight displayed list header When reporting list elements, hightlight passed header, mainly with the 'hi' sgr key except if header is a modulepath, in this case 'mp' sgr key is used. * modulecmd.tcl.in: Color modulepaths reported by module use Graphically render modulepaths reported on 'module use' and 'module unuse' with 'mp' sgr key. * modulecmd.tcl.in: Highlight named element of msg record Highlight named element passed as header to reportMsgRecord procedure (using 'hi' sgr key). * modulecmd.tcl.in: Color DEBUG/ERROR/Module ERROR/WARNING/INFO msgs Make use of sgr procedure to graphically render header of ERROR, Module ERROR, WARNING and INFO messages (respectively with 'er', 'me', 'wa' and 'in' sgr keys). Graphically render the whole DEBUG message (header + message text) with 'db' sgr key. 2018-12-27 Xavier Delaruelle <[email protected]> * .travis.yml, Makefile, Makefile.inc.in, configure, modulecmd.tcl.in, site.exp.in: Introduce colored output Add the ability to graphically enhance some part of the produced output to improve result readability. Colored output enablement could be controlled at configure time with the --enable-color option, or with the MODULES_COLOR environment variable or with the command-line switch --color. MODULES_COLOR variable and --color switch accepts the following values: never, auto and always. With the --enable-color configure option, the 'auto' color mode is applied. When color mode is set to 'auto', output is colored if a terminal is attached to stderr. Colors to apply to each elements can be controlled at configure time with the --with-colors option or with the MODULES_COLORS environment variable. A color set consists of a list of key=value separated by colon where each key represents an output element that can be colored and each value represents a SGR code applied to this element to color it. Thanks to [1] for the detailled description of the Select Graphic Rendition (SGR) codes. [1] https://stackoverflow.com/questions/4842424/list-of-ansi-color-e scape-sequences 2019-01-10 Xavier Delaruelle <[email protected]> * doc/source/diff_v3_v4.rst: doc: desc avail in depth mode in diff_v3_v4 2018-12-26 Xavier Delaruelle <[email protected]> * MIGRATING.rst, NEWS.rst, doc/source/module.rst: doc: desc avail in depth mode in man/NEWS/MIGRATING * testsuite/modulefiles.indepth/mod30/.1, testsuite/modulefiles.indepth/mod30/2, testsuite/modulefiles.indepth/mod9/3/.version, testsuite/modulefiles.indepth/mod9/3/2, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/080-noindepth.exp: ts: more tests for avail --no-indepth mode Add situations to check optimisations made to findModules procedure when no in depth mode is enabled. * modulecmd.tcl.in: Optimize findModules when no in depth search is asked Cut down some I/O operations in findModules procedure when a no in depth search is performed as it is not required to check in depth existing modulefiles, only those matching query depth level. .modulerc files are still searched in depth, as they can produce virtual modules and in the future they may invalidate modulefiles. All files at the search query depth level are analyze. And for the directories below this depth level modulefiles are analyzed until one is found valid (other modulefiles are skipped as we only want to determine if directory holds at least one valid modulefile and should be reported). 2018-12-23 Xavier Delaruelle <[email protected]> * init/zsh-functions/_module: init: zsh completes avail mods in no in depth mode * init/fish_completion: init: fish completes avail mods in no in depth mode 2018-12-22 Xavier Delaruelle <[email protected]> * init/bash_completion.in: init: bash completes avail mods in no in depth mode Take advantage of the no in depth mode of the module avail command to only get available choices for the current query file depth level. * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module: init: add support for --indepth/--no-indepth avail opts 2018-12-19 Xavier Delaruelle <[email protected]> * testsuite/modules.90-avail/040-wild.exp: ts: test avail in depth mode with wildcard chars * testsuite/modulefiles.indepth/mod0, testsuite/modulefiles.indepth/mod1/1, testsuite/modulefiles.indepth/mod1/2, testsuite/modulefiles.indepth/mod10, testsuite/modulefiles.indepth/mod11/.modulerc, testsuite/modulefiles.indepth/mod11/1, testsuite/modulefiles.indepth/mod11/2, testsuite/modulefiles.indepth/mod2/.modulerc, testsuite/modulefiles.indepth/mod2/1, testsuite/modulefiles.indepth/mod2/2, testsuite/modulefiles.indepth/mod3/.modulerc, testsuite/modulefiles.indepth/mod4/.1, testsuite/modulefiles.indepth/mod5/.common, testsuite/modulefiles.indepth/mod5/.modulerc, testsuite/modulefiles.indepth/mod6/1/notamod, testsuite/modulefiles.indepth/mod6/2/1/notamod, testsuite/modulefiles.indepth/mod6/3/1/1/notamod, testsuite/modulefiles.indepth/mod6/3/1/2/1, testsuite/modulefiles.indepth/mod7/1/notamod, testsuite/modulefiles.indepth/mod7/2/1/notamod, testsuite/modulefiles.indepth/mod7/3/1/1/notamod, testsuite/modulefiles.indepth/mod7/3/1/2/notamod, testsuite/modulefiles.indepth/mod7/4/1, testsuite/modulefiles.indepth/mod8/1/notamod, testsuite/modulefiles.indepth/mod8/2/1/notamod, testsuite/modulefiles.indepth/mod8/3/1/1/notamod, testsuite/modulefiles.indepth/mod8/3/1/2/notamod, testsuite/modulefiles.indepth/mod8/4/.modulerc, testsuite/modulefiles.indepth/mod9/1/notamod, testsuite/modulefiles.indepth/mod9/2/1/notamod, testsuite/modulefiles.indepth/mod9/3/1/1/notamod, testsuite/modulefiles.indepth/mod9/3/1/2/notamod, testsuite/modulefiles.indepth/mod9/4/.common, testsuite/modulefiles.indepth/mod9/4/.modulerc, testsuite/modulefiles.indepth/notmod1/notamod, testsuite/modulefiles.indepth/notmod2/1/notamod, testsuite/modulefiles.indepth/notmod3/1/1/.notamod, testsuite/modulefiles.indepth/notmod3/1/2, .../modulefiles.indepth/notmod4/1/1/1/notamod, testsuite/modulefiles.indepth/notmod4/2, testsuite/modules.90-avail/080-noindepth.exp: ts: test avail --no-indepth mode 2018-12-16 Xavier Delaruelle <[email protected]> * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/035-defname.exp, testsuite/modules.20-locate/038-defcontext.exp, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.20-locate/090-memcache.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.80-deep/080-access.exp, testsuite/modules.90-avail/020-single.exp, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/050-long.exp, testsuite/modules.90-avail/070-full.exp, testsuite/modules.91-sort/020-avail.exp: ts: ensure existing avail tests use 'in depth' mode * modulecmd.tcl.in: Adapt getModules/listModules to --no-indepth mode Remove in getModules the result entries collected within the procedure where more filename path separator are found than in search query string. This way entries related to the content of directories matching query are removed. Only entries matching search query at its very same depth level are kept + the matching directories holding those entries. This or these matching directories holding entries matching search query are kept to get access to the default or the latest entries in these directories if -d (default) or -L (latest) filters are enabled. The directories holding entries are then excluded from display output in listModules procedure to keep this --no-indepth mode displaying only entries lying at the same directory depth level. When the -d (default) or -L (latest) filters are enabled and the --no-indepth mode is enabled too, if search query targets the root content of the modulepath, do not apply the output filter. In this situation every elements at the root of a modulepath can be considered a default of a latest entry. 2018-12-13 Xavier Delaruelle <[email protected]> * .travis.yml, INSTALL.rst, Makefile, Makefile.inc.in, configure, modulecmd.tcl.in, site.exp.in: Introduce --indepth/--no-indepth avail mode Add the ability to perform non-recursive avail search by limiting results to the elements matching search query and not including elements contained in the directories part of the result. Default behavior is unchanged: in depth search is performed. --indepth and --no-indepth command-line switches are introduced to control behavior as well as an environment variable: MODULES_AVAIL_INDEPTH. Default behavior may also be controlled at ./configure time with the --enable-avail-indepth and --disable-avail-indepth switches. The --no-indepth mode is pretty useful to provide an efficient glance at the available packages when a lot of different versions exist for each of them. Shell completion scripts also benefit from the non-recursive view to propose choices corresponding to the current depth level only. Moreover I/O operations are reduced on this --no-indepth mode as the full modulefile tree is not entirely walked through. This commit introduces the new configure script and modulecmd options and it lays the ground for the changes on the module find and the result display that will be made in the next commits. Fixes #150. 2018-12-15 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.80-deep/068-transitive.exp, testsuite/modules.90-avail/070-full.exp, testsuite/modules.91-sort/020-avail.exp: Append / char to dir results of avail command Append a forward slash character to any directory result of an avail command to better distinguish these directories from regular files. Will also help shell completion scripts to more efficienlty guide users to the directory entries (no need to type this forward slash character to look deeper in directory). 2018-12-14 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.91-sort/020-avail.exp: Fix -d/-L avail search when arg ends with trailing slash Correctly get available default (-d) and latest (-L) version whether search pattern is passed with an ending forward slash character or not or if it contains '*' wildcard character. * modulecmd.tcl.in: Fix listModules to display dir tags if any only 2018-12-13 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Make all findModules proc args mandatory * modulecmd.tcl.in: Make all listModules proc args mandatory 2018-12-10 Xavier Delaruelle <[email protected]> * MIGRATING.rst, NEWS.rst, doc/source/modulefile.rst: doc: desc Modulepath rc file in man/NEWS/MIGRATING 2018-12-09 Xavier Delaruelle <[email protected]> * testsuite/modulefiles.rc/.modulerc, testsuite/modulefiles.rc/.version, testsuite/modulefiles.rc/bar/.modulerc, testsuite/modulefiles.rc/bar/1, testsuite/modulefiles.rc/bar/2, testsuite/modulefiles.rc/foo/.common, testsuite/modulefiles.rc/foo/.modulerc, testsuite/modulefiles.rc/plain, testsuite/modules.20-locate/066-modulepath-rc.exp, testsuite/modules.20-locate/081-access-rc.exp: ts: test usage of modulepath rc file * lib/envmodules.c, modulecmd.tcl.in, .../.modulerc => etc/modulerc.depsaltname}, testsuite/modules.50-cmds/377-deps8.exp, testsuite/modules.50-cmds/377-opposite.exp: Take .modulerc at modulepath root into account When looking for modulefiles in enabled modulepaths, take .modulerc file found at the root of a modulepath directory into account. Which means these RC files are now evaluated like global rc files and can be used to define module aliases targeting modulefiles stored in the underlying file tree. findModules procedure has been adapted to return any .modulerc file found at the root of the directory. Code that look at modulepath root has been adapted to use the getFilesInDirectory procedure or command. A fetch_dotversion argument is added to the getFilesInDirectory Tcl procedure and its libtclenvmodules counterpart. This argument is disabled when looking at modulepath root content to avoid returning eventual .version file stored there. Shorthand version notation (ex: /1.0) cannot be used in a modulepath rc file as a module name cannot be determined from this location. * MIGRATING.rst, NEWS.rst: doc: desc. I/O optim work in NEWS and MIGRATING 2018-12-07 Xavier Delaruelle <[email protected]> * INSTALL.rst: doc: refer to Modules Tcl extension lib in INSTALL 2018-12-04 Xavier Delaruelle <[email protected]> * lib/configure.ac, lib/envmodules.c, lib/envmodules.h, modulecmd.tcl.in: Implement getFilesInDirectory in Tcl extension library Add function in libtclenvmodules to implement getFilesInDirectory as a command, which provides a more IO-optimized way than native Tcl commands perform by avoiding specific additional queries to get hidden files like .modulerc and .version. As a result 1 stat and 2 access syscalls are saved per directory read. 2018-12-03 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Introduce getFilesInDirectory proc to get dir elt list Extract code from findModules procedure that analyzes and returns the content of a given directory to define a dedicate procedure for that job: getFilesInDirectory. This getFilesInDirectory procedure will also be made available as a command defined in the Tcl extension library to reduce the IO calls made to achieve the task. 2018-12-02 Xavier Delaruelle <[email protected]> * lib/Makefile.in: install: fix lib/Makefile to ensure CFLAGS is applied Which is required on FreeBSD to pass include location directives. * testsuite/modules.00-init/100-pager.exp, testsuite/modules.00-init/120-siteconfig.exp: ts: fix tests confused by ext lib load debug msg * lib/envmodules.c: lib: adapt error report to support Tcl8.4 Add code to Tcl extension library to report error specifically when built against Tcl8.4. This version of Tcl does not propose a Tcl_ObjPrintf function, so the Tcl_AppendResult function is used instead when the library is built against this version. * .gitignore, .travis.yml, Makefile, contrib/nglfar2ccov, testsuite/config/unix.exp: install/ts: run ts against currently built ext lib Adapt Makefile and testsuite initialization to set then use a specific modulecmd.tcl script tuned to load the libtclenvmodules.so currently built in 'lib' directory. 2018-12-01 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Init error report when rendering top main error When an error is caught during modulecmd.tcl first initialization steps, ensure the error report facility is initialized to render error message. On main procedure when an error raised, attempt to initialize error report before rendering catched error message, as error may have occurred prior regular error report init. Adapt initErrorReport procedure to ensure its content is run only once even if called multiple times. * lib/Makefile.in, lib/configure.ac: install: adapt lib makefile to build with Tcl8.5 Add @TCL_SHLIB_CFLAGS@ flag to the CFLAGS_DEFAULT to ensure to obtain the '-fPIC' directive on the resulting compiling command. 2018-12-02 Xavier Delaruelle <[email protected]> * .appveyor.yml, .travis.yml, INSTALL.rst, Makefile, Makefile.inc.in, configure, contrib/rpm/environment-modules.spec.in, modulecmd.tcl.in, site.exp.in: install: configure/build/install lib from main scripts Call configure script and Makefile of 'lib' directory from main configure and Makefile to configure/build/install/clean libtclenvmodules from top-level scripts. Add '--libdir', '--enable-libtclenvmodules', '--with-tcl' and '--with-tclinclude' options to main configure script to control libtclenvmodules build and installation. Documentation of these new options has been added to INSTALL guide. When '--enable-libtclenvmodules' option is set (default) code in modulecmd.tcl is enabled to load compiled libtclenvmodules shared library. Update RPM spec file to take into account libtclenvmodules. Update Travis and AppVeyor configurations to check libtclenvmodules enablement and disablement over the various test cases. 2018-12-01 Xavier Delaruelle <[email protected]> * Makefile: install: improve Makefile install/test target prereqs spec 2018-11-29 Xavier Delaruelle <[email protected]> * lib/.gitignore, lib/Makefile.in, lib/aclocal.m4, lib/configure.ac, lib/tcl.m4: Add autotools configs to build libtclenvmodules Build this extension library against Tcl stub library to be able to 'load' it in modulecmd.tcl script. * lib/envmodules.c, lib/envmodules.h: Introduce Modules Tcl extension library Introduce Modules Tcl extension library (written in C) to extend Tcl language in order to provide more optimized I/O commands than native Tcl commands do. This library first provides a 'readFile' command which performs an open, read, close of a given modulefile to fetch its content. Compared to the Tcl native open, read, close commands it saves 1 ioctl + 1 fcntl + N lstat system calls per modulefile. 2018-11-25 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Introduce readFile proc to read a file Adapt all procedures reading file (modulefile, shell init file, collection file) to use the readFile procedure for that reading job. This readFile command is defined as a Tcl procedure if not found defined (by the load of the upcoming C extension). * modulecmd.tcl.in: Always read full modfile on most module cmds Except for path, paths, list, avail and aliases module commands always fully read a modulefile whether its full content is needed or just its header to verify its validity. Proceed this way to only read file once on commands that first just check modulefile validity then read again valid files to get their full content. The path, paths, list, avail and aliases module commands are excluded from this 'always read full modulefile' mechanism as they never need to get the full modulefile content. Most files found within modulepaths are intended to be modulefiles so always reading full file content even for invalid modulefiles should not harm much performances compared to the gain of reading every valid modulefiles only once instead of two. * modulecmd.tcl.in: Cache modfile content read to minimize file ops If modulefile is fully read, cache the content read and the file header computed to avoid another file read if the same modulefile need to be read multiple times. 2018-11-24 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Call readModuleContent in checkValidModule proc To read a modulefile so the code to read file and analyze its header to check it is a valid modulefile is just written once. readModuleContent procedure has been adapted to proceed like checkValidModule did when it is called in a only_check_validity mode. In this mode, only the first line of the file is read as we just want to parse the header of the file (as it was done previously in checkValidModule procedure). 2019-04-29 Xavier Delaruelle <[email protected]> * INSTALL.rst, NEWS.rst: doc: desc. Vim addons in NEWS and INSTALL * .appveyor.yml, .cirrus.yml: appveyor/cirrus: test 'make uninstall' 2019-04-28 Xavier Delaruelle <[email protected]> * contrib/rpm/environment-modules.spec.in: rpm: install modulefile vim syntax addons 2019-04-29 Xavier Delaruelle <[email protected]> * Makefile, Makefile.inc.in, configure: install: rename vim addons configure options For disambiguation with Vim plugins and for letting room for further improvements in this area, rename '--enable-vimplugin' configure option into '--enable-vim-addons' and '--vimplugindir' into '--vimdatadir'. 2018-12-08 Felix Neumärker <[email protected]> * Makefile, Makefile.inc.in, configure, contrib/vim/ftdetect/modulefile.vim, contrib/vim/ftplugin/modulefile.vim, contrib/vim/syntax/modulefile.vim: add vim syntax support 2019-04-26 Xavier Delaruelle <[email protected]> * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version 4.2.4 * testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.50-cmds/065-remove-undo.exp: ts: correctly escape exp res in 50/{042,047,052,057,062,065} 2019-04-25 Xavier Delaruelle <[email protected]> * README.md: doc: provide short install guideline in README Fixes #230. * init/zsh.in: init: init MANPATH on zsh if empty to preserve man sysconfig Zsh initializes by default the MANPATH environment variable to an empty value when it starts. To preserve manpath system configuration even after addition to this variable by modulefiles, set MANPATH variable to ':' if found empty. Fixes #224. * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: ts: improve getDiffBetweenList proc test coverage * modulecmd.tcl.in, testsuite/modulefiles/append/8.0, testsuite/modulefiles/prepend/8.0, testsuite/modulefiles/remove/8.0, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.90-avail/070-full.exp: Raise error when bad option passed to {append,prepend,remove}-path Raise an error when an invalid option is set on append-path, prepend-path or remove-path modulefile command. Fixes #249. * .appveyor.yml: Revert "appveyor: stop testing R in Cygwin platform" This reverts commit 48624f9d11e3f118b7a6f7d31a16614597e179cf. AppVeyor Cygwin environment has been updated, which fixed the R issue. See appveyor/ci#2898. * modulecmd.tcl.in, testsuite/modules.50-cmds/377-error.exp: Inhibit 'module load' in DepRe context When reloading modules through the *Dependent Reload* automated mechanism, disable the automated loading of modules by other modules with the 'module load' modulefile command as done for the 'prereq' command. It saves the mechanism from the reload of modules that have just been unloaded (and asked by the user to be unloaded from instance when performing a 'switch' command). Fixes #265. 2019-04-23 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.50-cmds/374-deps5.exp: No req load suggestion msg as soon as one has been tried Instead of requiring that all possibilities need be tried to consider the requirement load or the conflict unload has been tried, consider it tried as soon as one module choice has been evaluated. * modulecmd.tcl.in, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/377-error.exp, testsuite/modules.61-coll/040-restore.exp: Do not re-evaluate a failing module Skip load or unload evaluation of a module whose respectively load or unload was already attempted but failed. If this second evaluation attempt occurs within the same main evaluation frame. Fixes #264. * modulecmd.tcl.in: Refactor eval context change for switch cmd in modfile * modulecmd.tcl.in, testsuite/modules.50-cmds/377-opposite.exp: No load attempt of already loaded mod in no-auto mode When the automated module handling mode is disabled, do not attempt to load a requirement expressed in a modulefile with a 'module load' command, if this requirement is already loaded or loading. 2019-04-22 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/006-procs.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-cyclic.exp, testsuite/modules.50-cmds/377-error.exp: Distinguish DepRe load/unload phases in msgs Adapt warning, error and info messages relative to the Dependent Reload mechanism to distinguish the unload phase from the load (reload) phase of this mechanism. In the automated module handling summary report, unloaded modules via this mechanism are reported in the *Unloading dependent* list and modules reloaded afterward are reported against the "Reloading dependent* list. Fixes #263. 2019-04-21 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.50-cmds/370-deps-bis.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/377-opposite.exp, testsuite/modules.50-cmds/380-altname.exp: Correctly report loading state of conflicting module Fixes #262. * testsuite/modulefiles.deps/alt/.modulerc, testsuite/modulefiles.deps/alt/8, testsuite/modulefiles.deps/i3b, testsuite/modulefiles.deps/i4b, testsuite/modules.50-cmds/380-altname.exp: ts: test issue with prereq using alt name in 50/380 2019-04-20 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/380-altname.exp: Resolve mod name passed to isModuleEvaluated To check if actual module has been evaluated based on its aliased or symbolic name. 2019-04-19 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Register modfile eval attempt in addition to modname Helps to find a given module has been evaluated when a conflict/prereq statement is sometimes done on the module name and other times on the modulefile. * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/370-deps-bis.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/375-deps6.exp, testsuite/modules.50-cmds/376-deps7.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-cyclic.exp, testsuite/modules.50-cmds/377-deps8.exp, testsuite/modules.50-cmds/377-error.exp, testsuite/modules.50-cmds/377-opposite.exp, testsuite/modules.50-cmds/378-sametarget.exp, testsuite/modules.50-cmds/379-module-unload.exp, testsuite/modules.50-cmds/380-altname.exp, testsuite/modules.61-coll/040-restore.exp: ts: adapt text msgs to fixed loaded conflict report 2019-04-18 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Report loaded conflict on corresp. module msg block When loading a module, report any loaded conflict on the message reporting block corresponding to this module load. This warning or error message comes in addition to the eventual conflict unload message reported under the message block of the main evaluation. When a module load is forced and a conflict of this module is loaded, report this conflict with the same concise message (no hint) whether an unload of this conflicting module was attempted or not. Fixes #261. 2019-04-17 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Raise ConUn err/warn msg to top level message block When a conflicting module is seen loaded but the unload of this module was attempted, report a conflict unload error or warning message toward the main evaluation message block. Fixes #261. * modulecmd.tcl.in: Refactor error raising code in conflict proc 2019-04-15 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/370-deps-bis.exp, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/375-deps6.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-error.exp, testsuite/modules.50-cmds/377-opposite.exp: Clearer error/warn msg when unloading a required mod When unloading a module which has some dependent module still loaded, produce a more specific error or warning message if an evaluation of these dependent modules has been realized or if the unload of the required module is forced. Fixes #259. 2019-04-14 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-opposite.exp: Also register unload evaluation attempt In addition to load evaluation attempt, also register the various unload evaluation attempt to get a more appropriate warning or error message regarding the missing requirement during a module load. When these requirements are unloaded due to a conflict or a dependent unload/reload mechanism, it seems better not to advise user to load this requirement (as the dependency management system has unloaded it). * modulecmd.tcl.in: Use distinctive context for main load and unload 2019-04-13 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/375-deps6.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-cyclic.exp, testsuite/modules.50-cmds/377-deps8.exp, testsuite/modules.50-cmds/377-error.exp, testsuite/modules.50-cmds/377-opposite.exp: Same req missing warn msg in force mode whatever the auto mode When a module load is forced and a requirement of this module is missing, report this miss with the same concise message (no hint) whether a load of this requirement was attempted or not. * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/370-deps-bis.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/377-error.exp, testsuite/modules.61-coll/040-restore.exp: Report missing req on corresponding module msg block When loading a module, report any missing requirement on the message reporting block corresponding to this module load. This warning or error message comes in addition to the eventual requirement load message reported under the message block of the main evaluation. Fixes #258. * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/370-deps-bis.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/377-error.exp, testsuite/modules.61-coll/040-restore.exp: Raise failed ReqLo msg to top level message block 2019-04-11 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/370-deps-bis.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/376-deps7.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-error.exp, testsuite/modules.50-cmds/377-opposite.exp, testsuite/modules.50-cmds/379-module-unload.exp, testsuite/modules.50-cmds/380-altname.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.70-maint/140-multiargs.exp: More appropriate warn/err msg for failed ReqLo When a module requirement is seen missing but the load of this module was attempted, report a more specific error or warning message to let user understand that the load of the requirement was attempted but failed. Thus distinction is made between missing requirements where a load tentative was made and those were the no load attempt was performed (when the automated module handling mode is disabled for instance). Fixes #257. 2019-04-07 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Refactor cmdModule{Load,Unload} error catch code 2019-04-04 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/376-deps7.exp, testsuite/modules.50-cmds/376-switch.exp: Report failed {load,unload} of switched-{off,on} module When switching modules, report failure of switched-off module unload or switched-on module load under the message block of the switch action. A failed switched-off module unload is reported as an error, as it aborts the switch evaluation, whereas a failed switched-on module load is reported as a warning. Fixes #255. 2019-04-06 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/376-switch.exp: Rely on cmdModuleUnload error catch mech for prereq report When attempting to unload a module, if this module has dependent loaded it cannot be unloaded if auto_handling mode is disabled. Treat that situation through the cmdModuleUnload error catch rather just with a reportError call. In case this situation happens through a 'module unload' command in a modulefile evaluated in load mode, no error return code should be set. However in other situations, cmdModuleUnload command should return an error code. So this change fixes 'switch' sub-command when the switched-off module cannot be unloaded as it has some dependent module loaded. Now it fails the whole switch process and no load of the switched-on module is not tried. Fixes #251. * modulecmd.tcl.in: Rely on cmdModuleLoad error catch mech for conflict report * modulecmd.tcl.in, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/376-switch.exp: Move 'module switch' deps set in cmdModuleSwitch Used for 'module switch' commands is set in modulefile. In order to get finer control on the dependency definition and error report when the unload of the switched-off module or the load of the switched-on module fail. 2019-04-03 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.50-cmds/373-deps4.exp: Drop output of failed ReqLo eval if one succeed When multiple modules are listed on a prereq command, drop the output of those modules that fails to load (by the requirement load automated mechanism) to only keep the output of the module whose load succeed. Introduces procedures and variables to hold reports until all requirement choices are tried to be loaded, then release held output (drop or print). Exception is made for debug output which is always immediately printed. Fixes #254. * testsuite/modules.50-cmds/376-deps7.exp: ts: clarify comment on no-auto urequn report in 50/376 2019-04-01 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-error.exp: Warn if useless requirement unload fails on no-auto mode During the unload of a module when the automated module handling mode is disabled, report a warning message foreach unload of a useless requirement that fails as done when the automated module handling mode is enabled. Fixes #253. 2019-03-31 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Remove useless priorlmlist var from cmdModule{Load,Unload} * doc/example/inhibit-report-info/siteconfig.tcl, modulecmd.tcl.in, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-error.exp: Report auto mech warn/err to top level message block During an additional evaluation triggered by an automated module handling mechanism, ensure warning and error messages are reported under the message block of the main evaluation. Add a 'recordtop' argument to the reportWarning and reportError procedures in order to indicate that the message should be recorded under the top-level message block instead of the currently active message block. Fixes #252. 2019-04-16 Xavier Delaruelle <[email protected]> * testsuite/modules.70-maint/040-list.exp: ts: add specific term width tests for list subcommand 2019-04-15 Jesper Dahlberg <[email protected]> * modulecmd.tcl.in: Fix hanging 'list' command Bug correction of the list command for the case when the terminal width is equal to the text width to be printed when only a single column is used. Without the correction, the 'moudule list' command hangs. 2019-04-16 Xavier Delaruelle <[email protected]> * .appveyor.yml: appveyor: stop testing R in Cygwin platform On Cygwin platform, R installation seems currently broken under the AppVeyor CI environment (see https://github.com/appveyor/ci/issues/2913). So for the time being, remove R installation to avoid failing test results. 2019-04-07 Xavier Delaruelle <[email protected]> * doc/source/conf.py: doc: improve code that disable smart quotes With contribution from @volans- for the Sphinx version test code. * doc/source/conf.py: doc: preserve quotes and dashes when making html docs Restrain Sphinx from converting quotes and dashes to lang-specific entities with either the html_use_smartypants or smartquotes options. Fixes #250 2019-03-29 Xavier Delaruelle <[email protected]> * testsuite/modules.50-cmds/370-deps-bis.exp, testsuite/modules.50-cmds/377-error.exp: ts: report UReqUn eval in accurate order in --no-auto mode * testsuite/modules.50-cmds/377-error.exp: ts: no auto mech summary report when top eval fails * testsuite/modules.50-cmds/376-deps7.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-cyclic.exp, testsuite/modules.50-cmds/377-error.exp, testsuite/modules.61-coll/040-restore.exp: ts: detect mod eval in accurate context on sumup lists 2019-03-28 Xavier Delaruelle <[email protected]> * testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-error.exp: ts: failed eval are not part of auto mech summary lists 2019-03-27 Xavier Delaruelle <[email protected]> * testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/377-error.exp: ts: auto mech msg summary always after err/warn msgs * modulecmd.tcl.in: Rely on context arg of to know if switch is ongoing * modulecmd.tcl.in: Register and report each evaluation and assoc context Better track each module evaluation and the context associated to it in order to report a more accurate information on the additional modules loaded or unloaded when proceeding the main evaluation request. When calling for a module load or unload, pass a context name to either the cmdModuleLoad or cmdModuleUnload procedure called to let it register the module evaluation and its associated context into a global structure gathering all these informations per top-level evaluation. Report messages on the additional evaluation occuring during a main one are now based on these registered information rather on computed list of elements passed to the cmdModuleLoad or cmdModuleUnload procedures. As a result a more reliable information is obtained, especially during a main load evaluation, where previously some unload/load additional evaluation were not seen or were reported against another automated mechanism. Additional evaluation messages are only reported if the main evaluation goes to its end, which means that if some event forces it to rollback the summary list of actions will not be seen to let users better understand the resulting situation (nothing was unloaded or loaded) and focus on the error message. Previously finished auto mechanisms were immediatly reported which confused people as an error occuring after the mechanism leads to a full rollback. In case an additional evaluation fails, the corresponding module is removed from the list of modules on which the auto mechanism triggered a load or an unload evaluation. When unloading useless requirements in no-auto mode, these unloads are now reported in their correct evaluation order (order of definition found in modulefiles). Fixes #244, fixes #245, fixes #246, fixes #247 and fixes #248 2019-03-23 Xavier Delaruelle <[email protected]> * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version 4.2.3 * testsuite/modules.50-cmds/375-deps6.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.61-coll/040-restore.exp: ts: correctly escape exp res in 50/{375,376} and 61/041 * .gitattributes: install: exclude CI confs from dist tarballs 2019-03-22 Xavier Delaruelle <[email protected]> * .gitattributes, .gitignore, Makefile, doc/Makefile: install: fix CONTRIBUTING guide build and install 2019-03-21 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Fix useless conditions on reloadModuleList{Load,Unload}Phase * testsuite/modules.50-cmds/377-error.exp: ts: add force mode tests in 50-377-error 2019-03-20 Xavier Delaruelle <[email protected]> * contrib/mtreview.in, testsuite/install.00-init/006-procs.exp, testsuite/modules.00-init/006-procs.exp: ts: add distinctive mark at end of res/exp string To distinguish the end of the output or expected result from the output or expected result content. 'mtreview' tool better catches the content it has to compare. 2019-03-19 Xavier Delaruelle <[email protected]> * Makefile: install: fix md5sum passed argument To perform correctly on OS X. 2019-03-18 Xavier Delaruelle <[email protected]> * .cirrus.yml, .gitignore, .travis.yml, Makefile, contrib/mt, contrib/mtreview.in: install: fetch 'icdiff' to process test res throught it * contrib/mt: contrib: mt calls mtreview to process test results * testsuite/modulefiles.deps/rfa, testsuite/modulefiles.deps/rfb, testsuite/modulefiles.deps/rfc, testsuite/modulefiles.deps/rfd, testsuite/modulefiles.deps/rfe, testsuite/modulefiles.deps/rff, testsuite/modulefiles.deps/rfg, testsuite/modulefiles.deps/rfh, testsuite/modulefiles.deps/rfi, testsuite/modulefiles.deps/rfj, testsuite/modulefiles.deps/rfk, testsuite/modulefiles.deps/rfl, testsuite/modulefiles.deps/rfm, testsuite/modulefiles.deps/rfn, testsuite/modulefiles.deps/rga, testsuite/modulefiles.deps/rgb, testsuite/modulefiles.deps/rgc, testsuite/modulefiles.deps/rgd, testsuite/modulefiles.deps/rge, testsuite/modulefiles.deps/rgf, testsuite/modulefiles.deps/rgg, testsuite/modulefiles.deps/rgh, testsuite/modulefiles.deps/rgi, testsuite/modulefiles.deps/rgj, testsuite/modulefiles.deps/rgk, testsuite/modulefiles.deps/rgl, testsuite/modulefiles.deps/rgm, testsuite/modulefiles.deps/rgn, testsuite/modules.50-cmds/377-error.exp: ts: add situations in 50/377-error where crashes occur on multiple auto mech 2019-03-17 Xavier Delaruelle <[email protected]> * .appveyor.yml, .cirrus.yml, .travis.yml, contrib/mt: travis,appveyor,cirrus: launch tests throught 'mt' * .gitignore, Makefile, contrib/mtreview.in: contrib: add 'mtreview' script to highlight failed tests * modulecmd.tcl.in, testsuite/modulefiles.deps/raam, testsuite/modulefiles.deps/rabm, testsuite/modulefiles.deps/racm, testsuite/modulefiles.deps/radm, testsuite/modulefiles.deps/raem, testsuite/modulefiles.deps/rafm, testsuite/modulefiles.deps/ragm, testsuite/modulefiles.deps/rahm, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/377-error.exp: In no-auto mode one UReqUn failure should not fail whole unload During the unload of a module with auto_handling mode disabled, if the unload of one of its useless requirements (by the useless requirement unload mechanism triggered in --no-auto mode when requirements are declared with the 'module load' modulefile command) fails, it should not fail the whole unload process like when auto_handling mode is enabled. Fixes #238 2019-03-14 Xavier Delaruelle <[email protected]> * testsuite/modulefiles.deps/rea, testsuite/modulefiles.deps/reb, testsuite/modulefiles.deps/rec, testsuite/modulefiles.deps/red, testsuite/modulefiles.deps/ree, testsuite/modulefiles.deps/ref, testsuite/modulefiles.deps/reg, testsuite/modulefiles.deps/reh, testsuite/modulefiles.deps/rei, testsuite/modulefiles.deps/rej, testsuite/modulefiles.deps/rek, testsuite/modulefiles.deps/rel, testsuite/modulefiles.deps/rem, testsuite/modulefiles.deps/ren, testsuite/modules.50-cmds/377-error.exp: ts: add DepRe tests in 50/377-error 2019-03-13 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modulefiles.deps/rdc, testsuite/modulefiles.deps/rdd, testsuite/modulefiles.deps/rde, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/375-deps6.exp, testsuite/modules.50-cmds/377-cyclic.exp, testsuite/modules.50-cmds/377-error.exp: On reload cmd, stop if one unloading/loading mod fails When reloading all loaded modules with the 'reload' sub-command, if one reloading module fails to unload or load abort the whole reload process to preserve environment sanity. Add a sum-up message group for reload sub-command to clearly get all errors related to this command under the same message block. Fixes #237 2019-03-12 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/376-switch.exp: Stop if one DepRe load fails except if force mode set During the load or the unload of a module, if the load of one of its dependent (by the dependent reload mechanism) fails abort the whole unload/load process. Exception made if the force mode is enabled. In this case failing module stays loaded and Dependent Unload mechanism continues with next module to load. When applying DepRe load phase during a switch command, consider force mode a default since here we are trying to reload the dependent modules found when unloading switched-off module. Switch action does not guarantee to find all DepRe modules still loaded at the end of process. Fixes #241 2019-03-11 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Stop if one DepRe unload fails except if force mode set During the load or the unload of a module, if the unload of one of its dependent (by the dependent reload mechanism) fails abort the whole unload/load process. Exception made if the force mode is enabled. In this case failing module stays loaded and Dependent Unload mechanism continues with next module to unload. This failing module is removed from the Dependent Reload list, so it will not take part of the load phrase of the mechanism. Fixes #239 2019-03-10 Xavier Delaruelle <[email protected]> * testsuite/modulefiles.deps/rca, testsuite/modulefiles.deps/rcb, testsuite/modulefiles.deps/rcc, testsuite/modulefiles.deps/rcd, testsuite/modulefiles.deps/rce, testsuite/modules.50-cmds/377-error.exp: ts: add purge/reload tests in 50/377-error * modulecmd.tcl.in: Add debug msgs to {push,pop,restore}Settings procs 2019-03-08 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-error.exp: If one UReqUn fails removes its requirements from UReqUn list During the unload of a module, if the unload of one of its useless requirements (by the useless requirement unload mechanism) fails, removes the requirements of this failing module from the useless requirement list so they are kept loaded as failing module will still be loaded. Such error is reported as a warning and it does not stop the whole unload process as main module to unload and its dependent are able to unload, just its requirements automatically loaded cannot be unloaded. So the job has been done, not perfectly but main task is successful and resulting user environment is coherent. A getRequiredLoadedModuleList procedure is introduced to get all the loaded modules required by a list of modules passed to the procedure. Fixes #240 2019-03-07 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/377-error.exp: Stop unload if one DepUn fails except if force mode set During the unload of a module, if the unload of one of its dependent (by the dependent unload mechanism) fails abort the whole unload process. Exception made if the force mode is enabled. In this case failing module stays loaded and Dependent Unload mechanism continues with next module to unload. 2019-03-06 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Rework cmdModuleLoad code with break/continue commands To improve clarity of the cmdModuleLoad procedure replace large if/then/else conditional blocks by break or continue abortion commands. A catch statement is set around the evaluation parts of the procedure and if a break happens, saved settings are restored (which means some evaluation went wrong and previous settings are rolled back). * modulecmd.tcl.in: Remove useless rollback in cmdModuleLoad Now push/pop/restoreSettings procedures correctly handle the conflict, prereq and alternative names information, there is no need to specificly clear their relative structures in cmdModuleLoad when setup must be rolled back. * modulecmd.tcl.in: Rework cmdModuleUnload code with break/continue commands To improve clarity of the cmdModuleUnload procedure replace large if/then/else conditional blocks by break or continue abortion commands. A catch statement is set around the evaluation parts of the procedure and if a break happens, saved settings are restored (which means some evaluation went wrong and previous settings are rolled back). 2019-03-16 Xavier Delaruelle <[email protected]> * doc/example/flavored-modules/modulefiles/.common, .../modulefiles/flavor/gromacs/plumed, .../modulefiles/flavor/gromacs/standard, .../modulefiles/flavor/hdf5/parallel, .../modulefiles/flavor/hdf5/serial, .../modulefiles/flavor/netcdf-fortran/.modulerc, .../modulefiles/flavor/netcdf/.modulerc, doc/example/flavored-modules/modulefiles/gcc/4.8, doc/example/flavored-modules/modulefiles/gcc/8, doc/example/flavored-modules/modulefiles/gromacs/5, doc/example/flavored-modules/modulefiles/hdf5/1.10, doc/example/flavored-modules/modulefiles/hdf5/1.8, doc/example/flavored-modules/modulefiles/intel/15, doc/example/flavored-modules/modulefiles/intel/17, .../flavored-modules/modulefiles/intelmpi/17, .../flavored-modules/modulefiles/jasper/1.900, .../modulefiles/netcdf-fortran/4.4, .../flavored-modules/modulefiles/netcdf/4.6, .../flavored-modules/modulefiles/openmpi/2.0, doc/example/flavored-modules/modulefiles/pgi/18, doc/example/flavored-modules/modulefiles/wrf/3.9: doc: add example modulefiles for 'flavored-modules' recipe 2019-03-08 Xavier Delaruelle <[email protected]> * testsuite/modulefiles.deps/ibm, testsuite/modules.50-cmds/375-order.exp, testsuite/modules.50-cmds/376-switch.exp: ts: test reverting 'module load/switch' when req loaded after 2019-03-04 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.50-cmds/378-sametarget.exp: Set requirement from closest match When computing dependencies between loaded or loading modules, if multiple candidates match a requirement, the closest one to the requiring module is selected instead of the farest one. This change makes dependency selection consistent with loaded module selection which selects lastly loaded module when multiple modules match search. * modulecmd.tcl.in: Add a 'isModuleUnloadable' helper procedure isModuleUnloadable checks whether a given loaded module could be automatically unloaded or not (it can if it has been automatically loaded and no other loaded module requires it). Use this new procedure in getUnloadableLoadedModuleList and cmdModuleUnload procedures. For the latter it simplifies the treatment when 'onlyureq' argment is enabled * modulecmd.tcl.in, testsuite/modules.50-cmds/375-order.exp, testsuite/modules.50-cmds/376-switch.exp: Correct unloadable mod search when reverting 'module load/switch' Select unload candidate from loaded module list excluding modules loaded after the current unloading module. So only module loaded prior dependent module are taken into account. Then pass this candidate, if any, to cmdModuleUnload and rely on this procedure to unload module only if it is unloadable. Previous commit was relying on the list of unloadable modules, obtained from getUnloadableLoadedModuleList procedure, which sometimes led to corner cases especially if dependency information were not set somehow (no module would be unloaded in that case as getUnloadableLoadedModuleList relies only on these dependency information). As the candidate is selected to be the closest one from the module requiring it, it changes unloading result when multiple candidates are found prior requiring module (previously firstly loaded module was unloaded). 2019-03-06 Ben Bowers <[email protected]> * CONTRIBUTING.rst: Adding emacs settings useful for adhering to coding conventions Fixes #233 2019-03-07 Xavier Delaruelle <[email protected]> * .cirrus.yml: cirrus: fix custom clone script for pull request 2019-03-02 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modulefiles.deps/ih/0, testsuite/modulefiles.deps/iim, testsuite/modulefiles.deps/swg/0, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/375-order.exp, testsuite/modules.50-cmds/376-switch.exp: Fix mod selection for 'module load/switch' in modfile when unloading When unloading a loaded module that contains 'module load' or 'module switch' commands in its modulefile, loaded required module should be unloaded if it has been automatically loaded. This commit fixes the selection of this module to unload automatically when evaluating in unload mode the 'module load' or 'module switch' commands used in modulefiles. If a loaded module matches the 'module load' or 'module switch' statement but was loaded after the module making these statements, it should not be selected as the module to automatically unload. Fixes #232 2019-03-01 Xavier Delaruelle <[email protected]> * testsuite/modulefiles.deps/swi, testsuite/modulefiles.deps/swj, testsuite/modulefiles.deps/swk, testsuite/modulefiles.deps/swl, testsuite/modulefiles.deps/swm, testsuite/modulefiles.deps/swn, testsuite/modules.50-cmds/376-switch.exp: ts: add 'module switch' in modfile erroneous situation With switched-off or switched-on or both modules targeted by 'module switch' fail to load/unload. 2019-02-28 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.80-deep/068-transitive.exp: Find alt names of mod coming from distant dirs If an alias is set on a directory and this directory default element is an alias toward a modulefile. When this modulefile is loaded, it holds no reference to first alias. For default elements in a directory that points to a modulefile, when this modulefile is loaded, it should receive the eventual aliases set on the distant directory as alternative names. Fixes #231 2019-02-27 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Remove unneeded control prior reporting info when unloading No need to check if we are on main unload action prior reporting lists of additionnally loaded or unloaded modules in cmdModuleUnload procedure, as these code sections could only be reached from the main unload action. * modulecmd.tcl.in: Remove unneeded recordId push/pop in switch context No need to adapt message record id for a switch action for code sections that are never reached when a switch action is ongoing. * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: ts: check getLoadedConflict proc in non-serialized mode * testsuite/cmd.exe, testsuite/modules.50-cmds/140-system.exp: ts: check 'system' cmd in a Windows simulated context 2019-02-26 Xavier Delaruelle <[email protected]> * testsuite/modulefiles.other/restore, testsuite/modules.61-coll/040-restore.exp: ts: check load msg report when modfile use restore cmd * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: ts: check getModuleFromLoadingModulefile proc in 00/120 Call procedure against a not loaded modulefile. * testsuite/modulefiles.deps/msf, testsuite/modulefiles.deps/mtf, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/375-deps6.exp: ts: basic conflict/prereq test on fully qualified module name * modulecmd.tcl.in: Rewrite evaluation mode test in 'system' proc * testsuite/modules.50-cmds/375-deps6.exp: ts: test an is-loading conflict check in force mode 2019-02-24 Xavier Delaruelle <[email protected]> * testsuite/modulefiles.deps/swa, testsuite/modulefiles.deps/swb, testsuite/modulefiles.deps/swc, testsuite/modulefiles.deps/swd, testsuite/modulefiles.deps/swe, testsuite/modulefiles.deps/swf, testsuite/modulefiles.deps/swg/1, testsuite/modulefiles.deps/swg/2, testsuite/modulefiles.deps/swh, testsuite/modules.50-cmds/376-switch.exp: ts: add 'module switch' in modfile dep tests * modulecmd.tcl.in, testsuite/modulefiles.other/modemptyarg/swap3, testsuite/modules.50-cmds/152-module-emptyarg.exp: Revert 'module switch' in modfile when unloading modfile No distinction were made previously for 'module switch' command used in modulefile regarding modulefile evaluation mode. This was a mistake as an unload evaluation of a modulefile should revert what has been set at load time. During an unload evaluation, a 'module switch' command is converted to a 'module unload' of the switched-on module, like for 'module load' command. Nothing is done for switched-off module, like for 'module unload' command. CAUTION: it is not recommended to use the `switch` sub-command in modulefiles as this command is intended for the command-line for a 2in1 operation. Could be removed from the modulefile scope in a future release. Use `module unload` and `module load` commands in modulefiles instead. Fixes #226 2019-02-23 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.50-cmds/152-module-emptyarg.exp: Track deps defined by 'module switch' in modfile When 'module switch' commands are found in modulefiles, track switched-off modulefile as a conflict and switched-to modulefile as a requirement to apply same behaviors than for 'module load' and 'module unload' commands in modulefiles. If 'switch' sub-command has only one argument, do not define any conflict, only a requirement on the defined switched-to argument. CAUTION: it is not recommended to use the `switch` sub-command in modulefiles as this command is intended for the command-line for a 2in1 operation. Could be removed from the modulefile scope in a future release. Use `module unload` and `module load` commands in modulefiles instead. Fixes #229 * testsuite/modules.95-version/050-fullpathentry.exp: ts: add use/unuse tests in 95/050 Demonstrate correct addition or removal to MODULEPATH of entry composed of a bare variable reference. 2019-02-25 Xavier Delaruelle <[email protected]> * doc/example/modulefiles-in-git/modulefiles/localmodules: doc: mention author of modulefiles-in-git examples 2019-02-24 Scott Johnson <[email protected]> * .../modulefiles-in-git/modulefiles/localmodules, doc/source/cookbook/modulefiles-in-git.rst: New cookbook entry for versioning Modulefiles with Git Originally developed at: https://github.com/scottj97/environment-modules-in-git 2019-02-23 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.95-version/050-fullpathentry.exp: Accept a variable reference as a full MODULEPATH entry Enable to define a path entry to the MODULEPATH variable which corresponds to a variable reference only (not a variable reference mixed in a path string). Was previously prefixing this variable reference with current working directory path as variable reference was detected as a relative path. Fixes #223 * init/bash.in, init/csh.in, init/fish.in, init/ksh.in, init/sh.in, init/zsh.in: init: init MANPATH if not set to preserve man sysconfig In shell initialization scripts, initialize MANPATH if not set with a value that preserves manpath system configuration even after addition of paths to this variable by modulefiles Fixes #224 * contrib/rpm/environment-modules.spec.in: rpm: add CONTRIBUTING guide to %doc 2019-02-20 Xavier Delaruelle <[email protected]> * testsuite/modulefiles.deps/ra, testsuite/modulefiles.deps/raa, testsuite/modulefiles.deps/rab, testsuite/modulefiles.deps/rac, testsuite/modulefiles.deps/rad, testsuite/modulefiles.deps/rae, testsuite/modulefiles.deps/raf, testsuite/modulefiles.deps/rag, testsuite/modulefiles.deps/rah, testsuite/modulefiles.deps/rb, testsuite/modulefiles.deps/rba, testsuite/modulefiles.deps/rbb, testsuite/modulefiles.deps/rbc, testsuite/modulefiles.deps/rbd, testsuite/modulefiles.deps/rbe, testsuite/modulefiles.deps/rbf, testsuite/modulefiles.deps/rbg, testsuite/modulefiles.deps/rbh, testsuite/modulefiles.deps/rc, testsuite/modulefiles.deps/rd, testsuite/modulefiles.deps/re, testsuite/modulefiles.deps/rf, testsuite/modulefiles.deps/rg, testsuite/modulefiles.deps/rh, testsuite/modulefiles.deps/ri, testsuite/modulefiles.deps/rj, testsuite/modulefiles.deps/rk, testsuite/modulefiles.deps/rl, testsuite/modulefiles.deps/rm, testsuite/modulefiles.deps/rn, testsuite/modulefiles.deps/ro, testsuite/modulefiles.deps/rq, testsuite/modulefiles.deps/rr, testsuite/modulefiles.deps/rs, testsuite/modules.50-cmds/377-error.exp: ts: test mod eval crash during auto handling mechs 2019-02-19 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Add dep-related internal structs to settings save/restore In order to correctly restore internal information state when a modulefile evaluation fails, add all the dependency-related internal arrays to the list of variables saved prior modulefile evaluation, then restored in case modulefile evaluation fails. 2019-02-18 Xavier Delaruelle <[email protected]> * testsuite/modules.50-cmds/375-order.exp: ts: clear unneeded comment in 50/375-order 2019-02-17 Xavier Delaruelle <[email protected]> * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version 4.2.2 2019-02-08 Xavier Delaruelle <[email protected]> * testsuite/modulefiles.deps/ie, testsuite/modulefiles.deps/if, testsuite/modulefiles.deps/ig, testsuite/modulefiles.deps/ih/1, testsuite/modulefiles.deps/ih/2, testsuite/modulefiles.deps/ii, testsuite/modulefiles.deps/ij, testsuite/modules.50-cmds/375-order.exp: ts: check requirement loading order in 50/375-order 2019-02-15 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Use NPO deps to compute DepUn list if it heals loaded mods Compute Dependent Unload module list with regular or "No Particular Order" dependency structures. Compare both list to choose the accurate one. Result list obtained from the "No Particular Order" stuctures is chosen if the loaded environment could be healed after unloading asked module with dependencies loaded after the modules requiring them. This is guessed from the length of the obtained lists: less element in NPO list means NPO dependencies could save some loaded modules from being unloaded by the Dependent Unload mechanism. 2019-02-14 Xavier Delaruelle <[email protected]> * testsuite/install.00-init/040-subshell.exp, testsuite/install.00-init/050-crossshell.exp: ts: adapt err msg for fish 3.0 * modulecmd.tcl.in: No dep struct exist check in areModuleConstraintsSatisfied No need to test existence of the requirement list for a loaded module in g_moduleDepend or g_moduleNPODepend structure, as all loaded modules get an array key in these arrays whether they have requirements or not. 2019-02-13 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Clarify auto handled mods in debug msgs * modulecmd.tcl.in: Clarify debug msgs on {set,unset}ModuleDependency 2019-02-12 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modulefiles.deps/go, testsuite/modulefiles.deps/gp, testsuite/modulefiles.deps/gq, testsuite/modulefiles.deps/gr, testsuite/modulefiles.deps/gs, testsuite/modules.50-cmds/377-cyclic.exp: Update NPO dep structs to break dep cycle Update the setModuleDependency and unsetModuleDependency procedures to break any dependency cycle spotted in the No Particular Order dependency structures. 2019-02-10 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Use NPO deps struct to compute DepUn/DepRe on unload Use the No Particular Order dependency structures to get the modules to handle via the Dependent Unload and the Dependend Reload mechanisms at unload time. Using these No Particular Order dependency structures help to "heal" the loaded environment after an unload batch as some dependent modules loaded before their requirements could be reloaded to get an unloaded requirement replaced by another loaded after dependent. This change mainly adds the 'nporeq' argument to the getDependentLoadedModuleList procedure to use the NPO structures rather the order-dependent ones. Then the sortModulePerLoadedAndDepOrder, areModuleConstraintsSatisfied and getDirectDependentList procedures are updated in turns to use these NPO structures when called by getDependentLoadedModuleList in nporeq mode. * modulecmd.tcl.in: Add structs to manipulate NPO requirements In addition to the g_moduleDepend, g_dependHash and g_prereqViolation structures that hold requirement state of loaded modules, taking into account loading order, introduce the g_moduleNPODepend, g_dependNPOHash and g_prereqNPOViolation structures that hold requirements between loaded modules whatever their loading order (No Particular Order taken into account), which means a requirement loaded after its dependent module will be found in the *NPO* structures but not in the regular ones. 2019-02-11 Xavier Delaruelle <[email protected]> * testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/375-deps6.exp: ts: adapt test res for only PRE req are valid * modulecmd.tcl.in: Only PRE requirement are considered valid When looking at the dependency of a loaded module, only consider requirement loaded before dependent (holding a prior position in the loaded module list) as valid, those loaded after dependent module are considered as an unmet dependency. 2019-02-07 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Add getUnmetDependentLoadedModuleList for load DepRe Compute the Dependent Reload module list when loading a module with the introduced getUnmetDependentLoadedModuleList procedure. Instead of faking new module is already loaded to get the dependent list able to be reloaded, missing requirement over new module is just silenced to determine these Dependent Reload modules. Also take into account requirements loaded after dependent that help to solve a requirement constraint with upcoming loaded mod. 2019-01-31 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modulefiles.deps/refcon/1, testsuite/modulefiles.deps/refcon/2, testsuite/modules.50-cmds/375-deps6.exp: Fix warn msg when forcing a reflexive conflict Message appeared twice (one for generic name at conflict command evaluation and one during persistent conflict check at end of load). 2019-01-30 Xavier Delaruelle <[email protected]> * init/tcsh_completion.in: init: fix tcsh completion when 'noclobber' var is set Fix _module_not_yet_loaded alias in tcsh completion script to handle situation when 'noclobber' variable is set (should force to write to the fifo files). Also ensure actual 'rm' command is called and not an alias that may ask for confirmation. Fixes #219 2019-01-20 Xavier Delaruelle <[email protected]> * .cirrus.yml, README.md: Introduce Cirrus CI config file for FreeBSD CI * .appveyor.yml: appveyor: exclude compat branches from ci 2019-01-19 Xavier Delaruelle <[email protected]> * MIGRATING.rst: doc: up MIGRATING for 'eval then check if conflict' 2019-01-18 Xavier Delaruelle <[email protected]> * testsuite/modulefiles.deps/un/1, testsuite/modulefiles.deps/un/2, testsuite/modulefiles.deps/un/3, testsuite/modulefiles.deps/una, testsuite/modulefiles.deps/unb, testsuite/modulefiles.deps/unc, testsuite/modulefiles.deps/und, testsuite/modules.50-cmds/379-module-unload.exp: ts: add tests for 'eval then check if conflict' 2019-01-17 Xavier Delaruelle <[email protected]> * testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/370-deps-bis.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/376-deps7.exp, testsuite/modules.50-cmds/377-cyclic.exp, testsuite/modules.50-cmds/377-opposite.exp, testsuite/modules.50-cmds/378-sametarget.exp, testsuite/modules.50-cmds/380-altname.exp: ts: fix for 'eval then check if conflict' Adapt existing tests according to the modulefile evaluation that now occurs even if a conflict toward modulefile is set prior load. There is no change to the output shell code (output order may vary as some rollback may occur after a load tentative if a conflict violation is detected afterward). Also some stderr output messages may change since a load tentative is made (so messages outputed within modulefile will be seen). If evaluation attempt fails on something else than a conflict violation, this error will take precedence over the conflict error (prereq not found, modulefile syntax error, etc). If modulefile declares multiple conflicts which are currently violated, there will be an error message for each of them as evaluation is going through the whole modulefile before raising conflict errors. 2019-01-15 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Evaluate mod then check conflict violation Give the chance to the 'module unload' statements in modulefile to solve conflict that were registered prior the load attempt of this modulefile by evaluating modulefile then check afterward if a conflict violation is there rather checking if a conflict violation exists (and shout error if there is) before evaluating modulefile. So modulefile is evaluated even if a conflict is registered against him prior its evaluation. If a conflict is still set after its evaluation (and the evaluation of its requirements) everything is rolled back. The 'module unload' commands could solve these already registered conflicts. 'conflict' commands used in the loading modulefile will however still break the load immediately if the conflict is seen violated to maintain same behavior. With this change, behavior of these 'module unload' modulefile commands is restored to what it was able to do prior conflict consistency changes, yet this consistency is maintained as everything is rolled back in the end if conflict is still there. doesModuleConflict procedure has also been changed to look at loading modules in addition to loaded modules, since the conflict check triggered by 'module unload' will not raise an error (error is now raised based on the result of the doesModuleConflict call. Fixes #216 * testsuite/modules.50-cmds/095-uname.exp: ts: escape (, ) and + in 'uname -v' res 2019-01-13 Xavier Delaruelle <[email protected]> * README.md: doc: add repology packaging status badge in README 2019-01-12 Xavier Delaruelle <[email protected]> * doc/source/conf.py, modulecmd.tcl.in: New year (2019) copyright mention update 2019-01-11 Xavier Delaruelle <[email protected]> * .travis.yml: travis: fix OSX brew install Ensure homebrew is up-to-date to avoid consistency issue 2018-12-24 Xavier Delaruelle <[email protected]> * init/zsh-functions/_module: init: recognize --{auto,no-auto,force,paginate,no-pager} opts in zsh comp Add recognition of the --auto, --no-auto, --force, --paginate and --no-pager command-line switches in zsh shell completion script. * init/fish_completion: init: recognize --{auto,no-auto,force} opts in fish comp Add recognition of the --auto, --no-auto and --force command-line switches in fish shell completion script. * modulecmd.tcl.in, testsuite/modulefiles/function/1.0, testsuite/modules.50-cmds/390-function.exp, testsuite/modules.50-cmds/391-function-undo.exp: Trim function body passed to set-function cmd Trim any whitespace, newline or ';' characters at the beginning or end of the function body passed to set-function modulefile command to correctly define shell function whatever the writing style used. 2018-12-10 Xavier Delaruelle <[email protected]> * doc/source/FAQ.rst: doc: add a FAQ entry to desc. use of module from Makefile Thanks to Robert McLay for the hint. * doc/source/module.rst: doc: fix typo in Python init example in module man page 2018-11-30 Xavier Delaruelle <[email protected]> * contrib/guide/get_started/03-first_module-bar.sh, contrib/guide/get_started/13-datadir-common.sh: contrib: fix mkdir in get_started guide scripts 2018-11-20 Xavier Delaruelle <[email protected]> * CONTRIBUTING.rst, doc/source/CONTRIBUTING.rst, doc/source/index.rst: doc: add CONTRIBUTING guide 2018-11-19 Xavier Delaruelle <[email protected]> * doc/example/inhibit-report-info/modulefiles/bar, doc/example/inhibit-report-info/modulefiles/foo, .../example}/inhibit-report-info/siteconfig.tcl, .../example}/top-priority-values/modulefiles/bar/1, .../example}/top-priority-values/modulefiles/foo/1, .../example}/top-priority-values/siteconfig.tcl, .../unload-firstly-loaded/modulefiles/foo/1, .../unload-firstly-loaded/modulefiles/foo/2, .../example}/unload-firstly-loaded/siteconfig.tcl, doc/source/cookbook.rst, doc/source/cookbook/inhibit-report-info.rst, doc/source/cookbook/top-priority-values.rst, doc/source/cookbook/unload-firstly-loaded.rst, doc/source/index.rst: doc: introduce cookbook Add a cookbook section in the documentation and port there the 3 pre-existing recipes: inhibit-report-info, top-priority-values and unload-firstly-loaded. Move the examples files of these recipes from contrib/cookbook to doc/example directory. 2018-11-16 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modulefiles.deps/ia, testsuite/modulefiles.deps/ib, testsuite/modulefiles.deps/ic, testsuite/modulefiles.deps/id, testsuite/modules.50-cmds/373-deps4.exp: Fix DepUn when all mods from an opt list are unloaded Correct the Dependent Unload mechanism when it triggers the unload of 2 modules making together a requirement from another module. This module is now also added to the dependent modules to unload as both modules from its requirement definition are unloaded. 2018-11-11 Xavier Delaruelle <[email protected]> * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version 4.2.1 2018-11-10 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.70-maint/152-remove-path.exp: Rework ref counter handling and relative error mngt No more disturbing warning messages when reference counter variable is not coherent with its relative environment variable. Erroneous value will raise a debug message only and relative reference counter is ignored (which means a count of 1 is applied). Now environment variable is trusted and if its path elements are found in a reference counter variable, this counter is taken into account. Elsewhere, a reference counter of 1 is applied. Which means a value found in reference counter variable but not in variable is ignored. A value found in variable but not in reference counter (or with a bad reference counter value) gets a count of 1 applied. Adapt existing tests in 70/152 and 50/40 and add some unload command tests in 50/040. Fixes #206 2018-11-09 Xavier Delaruelle <[email protected]> * init/bash.in, init/csh.in, init/fish.in, init/ksh.in, init/sh.in, init/zsh.in: init: skip shell env alteration if autoinit cmd failed Fixes #208 2018-11-07 Satya Mishra <[email protected]> * init/csh.in, testsuite/modules.70-maint/120-autoinit.exp: use :q to quote prompt to accomodate prompts with embedded newlines * modulecmd.tcl.in: use :q to quote prompt to accomodate prompts with embedded newlines 2018-11-07 Xavier Delaruelle <[email protected]> * testsuite/modulefiles.deps/ha/1, testsuite/modulefiles.deps/ha/2, testsuite/modulefiles.deps/ha/3, testsuite/modulefiles.deps/hb, testsuite/modulefiles.deps/hc, testsuite/modulefiles.deps/hd, testsuite/modulefiles.deps/he, testsuite/modulefiles.deps/hf, testsuite/modulefiles.deps/hg, testsuite/modules.50-cmds/378-sametarget.exp: ts: tests multiple deps targeting same mod in 50/378 * modulecmd.tcl.in: Fix dep computation when opt prereq list target same mod Ensure a loaded module matching multiple entries of a same 'or' prereq will just be considered as one module matching prereq. * modulecmd.tcl.in, testsuite/modulefiles.deps/fia, testsuite/modules.50-cmds/377-deps8.exp: Fix dep computation when unloading for multi ref Some dependencies expressed may target same module so it is important to safely unset dependency reference (in case unset has already been performed) 2018-11-05 Xavier Delaruelle <[email protected]> * testsuite/modulefiles.deps/ga, testsuite/modulefiles.deps/gb, testsuite/modulefiles.deps/gc, testsuite/modulefiles.deps/gd, testsuite/modulefiles.deps/ge, testsuite/modulefiles.deps/gf, testsuite/modulefiles.deps/gg, testsuite/modulefiles.deps/gh, testsuite/modulefiles.deps/gi, testsuite/modulefiles.deps/gj, testsuite/modulefiles.deps/gk, testsuite/modulefiles.deps/gl, testsuite/modulefiles.deps/gm, testsuite/modulefiles.deps/gn, testsuite/modulefiles.deps/gw, testsuite/modulefiles.deps/gx, testsuite/modulefiles.deps/gy, testsuite/modulefiles.deps/gz, testsuite/modules.50-cmds/377-cyclic.exp: ts: tests cyclic dep situations in 50/377-cyclic 2018-11-04 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Check 'module load' mod not already loading before loading it Useful in case of cyclic dependencies to avoid an infinite loading loop. 2018-10-31 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Compute loaded mod dependency relations without cycle When computing dependency relations between loaded modules and a freshly loaded one, do not launch a refresh of those unmet relations for an already loaded module with the new one if this relation closes a dependency cycle. When parsing the already loaded environment, the loaded module dependency relations are computed giving each module only the visibility of modules loaded prior it. Modules loaded after one module are not taken into account as they have not taken part of its requirements. 2018-11-01 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Check prereq mod is not already loading before loading it Useful in case of cyclic dependencies to avoid an infinite loading loop. 2018-10-31 Xavier Delaruelle <[email protected]> * testsuite/modules.50-cmds/373-deps4.exp: ts: clarify test in 50/373 with a UreqUn mod found after dependent 2018-10-29 Xavier Delaruelle <[email protected]> * contrib/mt: contrib: select between files at same ts num in 'mt' 2018-11-01 Xavier Delaruelle <[email protected]> * doc/source/diff_v3_v4.rst, modulecmd.tcl.in, testsuite/etc/modulerc.altname, testsuite/etc/rc, testsuite/modulefiles.deps/alt/9, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.50-cmds/380-altname.exp: Enable 'is-loaded' for modulerc eval Make 'is-loaded' modulefile command callable from a modulerc interpretation. Restore this way the behavior of compatibility version. Update diff doc and add some specific non-regression tests in 20/060 and 50/380. Fixes #207 2018-10-29 Xavier Delaruelle <[email protected]> * testsuite/modulefiles.deps/faa, testsuite/modulefiles.deps/fab, testsuite/modulefiles.deps/fac, testsuite/modulefiles.deps/fad, testsuite/modulefiles.deps/fae, testsuite/modulefiles.deps/faf, testsuite/modulefiles.deps/fai, testsuite/modulefiles.deps/faj, testsuite/modulefiles.deps/fak, testsuite/modulefiles.deps/fal, testsuite/modulefiles.deps/fam, testsuite/modulefiles.deps/fan, testsuite/modules.50-cmds/377-deps8.exp, testsuite/modules.50-cmds/377-opposite.exp: ts: test opposite defs using diff cmds and alt names 50/377 2018-10-28 Xavier Delaruelle <[email protected]> * testsuite/modules.50-cmds/380-altname.exp: ts: test empty/bad elt in MODULES_LMALTNAME in 50/380 * testsuite/modules.50-cmds/120-prereq-full.exp: ts: test empty elt in MODULES_LMNOTUASKED in 50/120 * testsuite/modules.50-cmds/130-conflict-full.exp: ts: test empty/bad elt in MODULES_LMCONFLICT in 50/130 * testsuite/modules.50-cmds/120-prereq-full.exp: ts: test empty/bad elt in MODULES_LMPREREQ in 50/120 * testsuite/home/coll12, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/999-cleanup.exp: ts: restore coll holding incompat modfiles in 61/040 * testsuite/home/coll11, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/999-cleanup.exp: ts: save/restore coll with mod using 'module load' cmd 2018-10-27 Xavier Delaruelle <[email protected]> * testsuite/modulefiles.deps/.modulerc, testsuite/modulefiles.deps/fr, testsuite/modulefiles.deps/fs, testsuite/modulefiles.deps/ft, testsuite/modulefiles.deps/fu, testsuite/modules.50-cmds/377-deps8.exp: ts: test similar defs using diff cmds and alt names 50/377 * testsuite/modulefiles.deps/i6, testsuite/modulefiles.deps/i7, testsuite/modules.50-cmds/380-altname.exp: ts: test module {unload,load} cmds on alt names in 50/380 * testsuite/modulefiles.deps/.modulerc, testsuite/modulefiles.deps/fn, testsuite/modulefiles.deps/fo, testsuite/modulefiles.deps/fp, testsuite/modulefiles.deps/fq, testsuite/modules.50-cmds/377-deps8.exp: ts: test dup dep set with diff cmds and alt names in 50/377 2018-10-26 Xavier Delaruelle <[email protected]> * testsuite/modulefiles.deps/fj, testsuite/modulefiles.deps/fk, testsuite/modulefiles.deps/fl, testsuite/modulefiles.deps/fm, testsuite/modules.50-cmds/377-deps8.exp: ts: test dup dep set with diff cmds in 50/377 * testsuite/modulefiles.deps/fi, testsuite/modules.50-cmds/377-deps8.exp: ts: test dependency reordered dup defs in 50/377 * testsuite/modulefiles.deps/fa, testsuite/modulefiles.deps/fb, testsuite/modulefiles.deps/fc, testsuite/modulefiles.deps/fd, testsuite/modulefiles.deps/fe, testsuite/modulefiles.deps/ff, testsuite/modulefiles.deps/fg, testsuite/modulefiles.deps/fh, testsuite/modules.50-cmds/377-deps8.exp: ts: test dependency exact duplicate defs in 50/377 2018-10-25 Xavier Delaruelle <[email protected]> * testsuite/modulefiles.deps/ma, testsuite/modulefiles.deps/mb, testsuite/modulefiles.deps/mbs, testsuite/modulefiles.deps/mbt, testsuite/modulefiles.deps/mbu, testsuite/modulefiles.deps/mc, testsuite/modulefiles.deps/md, testsuite/modulefiles.deps/me, testsuite/modulefiles.deps/mf, testsuite/modulefiles.deps/mg, testsuite/modulefiles.deps/mh, testsuite/modulefiles.deps/mi, testsuite/modulefiles.deps/mj, testsuite/modulefiles.deps/mk, testsuite/modulefiles.deps/ml, testsuite/modulefiles.deps/mm, testsuite/modulefiles.deps/mn, testsuite/modulefiles.deps/mo, testsuite/modulefiles.deps/mp, testsuite/modulefiles.deps/mq, testsuite/modulefiles.deps/mr, testsuite/modules.50-cmds/370-deps-bis.exp: ts: duplicate 50/370 tests with module {load,unload} cmds Instead of prereq/conflict commands. * modulecmd.tcl.in, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/375-deps6.exp: Check mod to unload is not required by a loading mod Adapt getDependentLoadedModuleList and getDirectDependentList procedure to be able to take currently loading modules into account when looking for modules requiring a given module. Help to refrain a "module unload" order set within a modulefile to unload a module required by a loading module evaluated deeper in the stack. Adapt exiting tests working on inconsistent situations. 2018-10-24 Xavier Delaruelle <[email protected]> * init/bash_completion.in: init: fix unload/switch cmd completion on bash * modulecmd.tcl.in, testsuite/modules.20-locate/090-memcache.exp, testsuite/modules.50-cmds/310-puts.exp, testsuite/modules.70-maint/080-help.exp: Add details on active interp on debug msg * testsuite/modulefiles.deps/u, testsuite/modules.50-cmds/370-deps.exp: ts: no spread of broken mod dep defs to next eval mod * testsuite/modules.70-maint/070-display.exp: ts: auto/no-auto/force args are ignored on other cmd 2018-10-23 Xavier Delaruelle <[email protected]> * testsuite/modulefiles/puts/9, testsuite/modules.50-cmds/310-puts.exp, testsuite/modules.90-avail/070-full.exp: ts: check puts is linked to correct interp * testsuite/etc/rc, testsuite/modules.20-locate/060-rc.exp: ts: check 'module-info command' resolution from global rc 2018-10-22 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Use Tcl 'if' or 'expr' ternary operator * modulecmd.tcl.in: Correctly filter a wild findModules cache When it is used in a non-wild case later on. 2018-10-21 Xavier Delaruelle <[email protected]> * testsuite/modulefiles.memcache/foo/1, testsuite/modulefiles.memcache/foo/2, testsuite/modulefiles.memcache/foo1/1, testsuite/modulefiles.memcache/foo1/2, testsuite/modulefiles.memcache/look/1, testsuite/modulefiles.memcache/look/2, testsuite/modulefiles.memcache/look/3, testsuite/modulefiles.memcache/look/4, testsuite/modulefiles.memcache/look/5, testsuite/modulefiles.memcache/look/6, testsuite/modulefiles.memcache/look/7, testsuite/modulefiles.memcache/look/8, testsuite/modulefiles.memcache/sp cial/1, testsuite/modules.20-locate/090-memcache.exp: ts: add 20/090 to test findModules cache * modulecmd.tcl.in: Adopt Tcl minimal escaping style (fix additional strs) * modulecmd.tcl.in: Remove useless msg prefix from some reportDebug calls * modulecmd.tcl.in: Brace value of default path separator on Win As ';' is elsewhere interpreted as a Tcl syntax keyword * modulecmd.tcl.in: Brace g_pager setting as it can be empty If Modules is configured with --without-pager for instance. * testsuite/modulefiles/alias/3.0, testsuite/modulefiles/function/2.0, testsuite/modules.50-cmds/076-alias-sub.exp, testsuite/modules.50-cmds/390-function.exp: ts: fix tests based on modulecmd.tcl content As 'adopt minimal escaping style' change the piece of string searched by some tests. 2018-10-20 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Adopt Tcl minimal escaping style See https://wiki.tcl.tk/41378 * doc/source/modulefile.rst, modulecmd.tcl.in, testsuite/modulefiles/system/2.0, testsuite/modules.50-cmds/140-system.exp, testsuite/systest1: Fix 'system' to run cmd through shell system modulefile command is intended to the command passed to it trough shell, like done on compatibility version. So update system procedure to find correct shell on the current platform and run command through it. Doing so, shell commands with backticks for instance are correctly run. Fixes #205 * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module: init: fix saved coll listing in bash/zsh/tcsh/fish completions When no collection is currently found. * init/fish_completion, init/tcsh_completion.in: init: fix loaded modules listing in tcsh/fish completions 2018-10-19 Xavier Delaruelle <[email protected]> * .../cookbook/top-priority-values/siteconfig.tcl: cookbook: port 'top-priority-values' to v4.2 * contrib/cookbook/unload-firstly-loaded/siteconfig.tcl: cookbook: port 'unload-firstly-loaded' to v4.2 * .../cookbook/inhibit-report-info/siteconfig.tcl: cookbook: add 'inhibit-report-info' recipe Helpful for #204 2018-10-18 Xavier Delaruelle <[email protected]> * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version 4.2.0 * MIGRATING.rst: doc: add cross-ref for each v4.2 new feature in MIGRATING 2018-10-17 Xavier Delaruelle <[email protected]> * testsuite/modules.50-cmds/151-module-onlytop.exp: ts: fix 50/151 for new block report style * MIGRATING.rst: doc: desc. new modfile cmds for v4.2 in MIGRATING * .travis.yml: travis: increase again git clone depth to catch last tag 2018-09-09 Ben Bowers <[email protected]> * doc/source/diff_v3_v4.rst, doc/source/modulefile.rst, modulecmd.tcl.in, testsuite/modulefiles/function/1.0, testsuite/modulefiles/function/2.0, testsuite/modules.50-cmds/390-function.exp, testsuite/modules.50-cmds/391-function-undo.exp, testsuite/modules.90-avail/070-full.exp: added set-function and unset-function commands fixed linelength and tabs/spaces adding set-function/unset-function documentation adding tests for set-function/unset-function fixed failing test for function modulefile additions 2018-10-15 Xavier Delaruelle <[email protected]> * contrib/mt: contrib: add 'mt' utility Helps to run just a specific part of the test suite * modulecmd.tcl.in, testsuite/modulefiles/system/2.0, testsuite/modules.50-cmds/140-system.exp, testsuite/systest: Fix args pass on 'system' modfile command Correctly transmit the arguments along with the command to execute. Need to use 'eval' for the underlying command to get its multiple args and not one joined string. Fixes #201 2018-10-14 Xavier Delaruelle <[email protected]> * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, testsuite/modules.50-cmds/180-unload.exp: Support 'remove' as an alias on 'unload' command As compatibility version does Fixes #200 * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, testsuite/modules.50-cmds/180-unload.exp: Support 'del' as an alias on 'unload' command Like compatibility version does. Fixes #200 2018-10-12 Xavier Delaruelle <[email protected]> * testsuite/modules.20-locate/057-mcookie.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/310-puts.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/359-allin-env.exp, testsuite/modules.50-cmds/360-restoreenv.exp, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/999-cleanup.exp: ts: fix tests when ts path includes spec chars 2018-10-11 Xavier Delaruelle <[email protected]> * MIGRATING.rst: doc: desc. improved message report in MIGRATING * testsuite/modules.50-cmds/310-puts.exp: ts: fix 50/310 for block output rendering Transform load tests in non-regexp test to avoid re escaping chars to count in line split mechanism. 2018-10-10 Xavier Delaruelle <[email protected]> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/130-auto_handling.exp, testsuite/modules.20-locate/040-alias.exp, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.20-locate/047-symerrs.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/100-loglevel.exp, testsuite/modules.50-cmds/101-badfac.exp, testsuite/modules.50-cmds/105-trace.exp, testsuite/modules.50-cmds/110-verbose.exp, testsuite/modules.50-cmds/115-verbose-msg.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp, .../modules.50-cmds/132-conflict-fullpath.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/195-load-recurs.exp, testsuite/modules.50-cmds/240-chdir.exp, testsuite/modules.50-cmds/250-x-resource.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.50-cmds/284-info-others.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.50-cmds/310-puts.exp, testsuite/modules.50-cmds/330-source.exp, testsuite/modules.50-cmds/340-modvar.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/371-deps2.exp, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/375-deps6.exp, testsuite/modules.50-cmds/376-deps7.exp, testsuite/modules.50-cmds/380-altname.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/080-access.exp, testsuite/modules.70-maint/140-multiargs.exp, testsuite/modules.70-maint/190-emptyarg.exp, testsuite/modules.80-deep/022-switch.exp: ts: adapt tests to new block report style * modulecmd.tcl.in: Set a rec msg id for reload action Create a record message id during the reload action to let underlying unload and load actions to know they are not the top-level action. May be use later on to provide sum-up information resulting from this reload action. * modulecmd.tcl.in: Set a rec msg id for purge action Create a record message id during the purge action to let underlying unload actions to know they are not the top-level action. May be use later on to provide sum-up information resulting from this purge action. 2018-10-06 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Report unload/load made during a module restore Report for the top level module restore all the modules that have been unloaded and loaded during this restore action. * modulecmd.tcl.in: Inhibit DepRe load phase on load if switch ongoing If a switch action is ongoing, inhibit the DepRe load phase when loading switched to module. Instead add the DepRe module list to the already gathered DepRe list from the unload action of the switched out module. * modulecmd.tcl.in: Report additional load/unload during a module switch Report for the top level module switch all the additional modules that have been automatically unloaded or loaded during this main switch. Report record is still enabled on the top unload/load actions part of switch action, but additional unload/load sumup information is recorded against switch report. This way errors popping during these main unload or load actions are reported against their relative unload/load record like if an unload or load has just occured. 2018-10-04 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Report additional load/unload during a module unload Report for the top level module unload all the additional modules that have been automatically unloaded or loaded during this main unload When auto handling is disabled but some extra modules have been unloaded during the unload process (due to module load commands in modulefile) then report these extra unloads as Useless Requirement Unload (UReqUn) * modulecmd.tcl.in: Report additional load/unload during a module load On a top level module load (main load action), report all the additional modules that have been unload or loaded for this main load process to succeed. Three helper procedures are added for this change: reportInfo, getDiffBetweenList and isMsgRecordIdTop. * modulecmd.tcl.in: Clear all modlist arg from getUnloadableLoadedModuleList res 2018-10-02 Xavier Delaruelle <[email protected]> * testsuite/modulefiles.other/longerrword, testsuite/modules.70-maint/200-errdisp.exp: ts: add 70-maint/200-errdisp tests * modulecmd.tcl.in, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.70-maint/060-apropos.exp: Ask for a blankline prior next content with reportSeparateNextContent Update displayElementList procedure to use this new reportSeparateNextContent procedure rather handling its own global flag (g_eltlist_disp). Adapt testsuite related to displayElementList output 2018-10-01 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Split line if too wide in reportMsgRecord * modulecmd.tcl.in: Add procs to format conflict/prereq err msgs 2018-09-30 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Record messages to report them by block on load/unload Save warning, error and internal bug message produced during a cmdModuleLoad or cmdModuleUnload evaluation for a module to report all these messages as a dedicated "Loading <module>" or "Unloading <module>" block after evaluation. A recording ID is set when preparing a load or an unload evaluation. If a recording ID is found when running reportError, the message is recorded in a global structure rather reported immediately. Once evaluation is finished, all messages are rendered under a block. Improve this way readability of those messages when evaluating mode may cascade a lot of stuff. * modulecmd.tcl.in, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/376-deps7.exp, testsuite/modules.50-cmds/380-altname.exp: Neat prereq/conflict err msg when called from cmdModule procs Remove useless 'WARNING: ' prefix as message goes to reportError. * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/090-uname-proc.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.70-maint/060-apropos.exp: Report global error raised from modfile eval as error Was reported as WARNING previously which was confusing as these errors are fatal for modulefile evaluation. Use prefix code "GLOBALERR " when raising error to catch them in execute-modulefile and distinguish the global errors from the Module internal bug. As a side nice effect, these kind of evaluation error are now reported through reportError, which makes them automatically silent on global evaluation (like avail or search). Adapt testsuite * modulecmd.tcl.in: Make report{Warning,InternalBug} rely on reportError * modulecmd.tcl.in: Handle nonewline report arg as boolean Instead of a string. Remove this nonewline arg from reportDebug, reportWarning and reportError as it was unused. 2018-09-29 Xavier Delaruelle <[email protected]> * .../cookbook/unload-firstly-loaded/siteconfig.tcl: cookbook: add 'unload-firstly-loaded' recipe Helpful for #198 * doc/source/diff_v3_v4.rst: doc: desc. unload diff when multiple loaded mods match Helpful for #198 * doc/source/diff_v3_v4.rst, modulecmd.tcl.in, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.80-deep/021-unload.exp, testsuite/modules.80-deep/068-transitive.exp: Only look at loaded modules when unloading Adapt getPathToModule procedure to only look at the loaded module list when searching a module to unload. If passed module not found in this situation does not produce an "Unable to locate modulefile" issue. So unloading an unexistent modulefile does not produce an error anymore, as it was the case on compatibility version. Moreover switching from an unexistent modulefile to another modulefile does not produce the "Unable to locate modulefile" error and new module load is attempted. Compatibility version does not walk in this situation as on this version module to unload must be loaded elsewhere an error is triggered. Adapt testsuite and diff document. Fixes #199 2018-09-23 Xavier Delaruelle <[email protected]> * MIGRATING.rst: doc: desc. module load/unload consistency in MIGRATING 2018-09-22 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: From warn/nuasked to onlyureq/onlyndep args on cmdModuleUnload Change warn and nuasked arguments previously added to cmdModuleUnload procedure by onlyureq and onlyndep to better cope needs. 'onlyureq' indicates only the not required anymore modules should be unloaded (not user asked modules or those not required by another loaded module). This flag is enabled when dealing with 'module load' commands in modulefiles interpreted in unload mode. If a module cannot be unloaded because it is required, then no error message is produced. So 'onlyureq' argument replaces both 'warn' and 'nuasked' arguments. 'onlyndep' indicates that only modules not required by other modules should be unloaded. It is used when dealing with 'module unload' commands in modulefiles interpreted in load mode. This is useful when force mode is enabled to avoid breaking the dependency of a loaded module when trying to load a module declaring this dependency as a module to unload (acts like for conflicts). 2018-09-21 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Return err if conflicts found in cmdModuleLoad When passed module cannot be loaded due to a conflict, set cmdModuleLoad to return an error code. Which may be interpreted as a sub-interpretation failure if this load was triggered by a 'module load' command in modulefile. * modulecmd.tcl.in, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.70-maint/140-multiargs.exp: Raise prereq error if 'module load' not satisfied Call prereq procedure rather just bare setLoadedPrereq when interpreting 'module load' commands found in modulefiles. When auto_handling mode is enabled, prereq will also handle the cmdModuleLoad call. This call is still done in module procedure if auto_handling is disabled. In case load is not satisfied, prereq error message will be obtained. 2018-09-18 Xavier Delaruelle <[email protected]> * testsuite/modulefiles.deps/m1, testsuite/modulefiles.deps/m2, testsuite/modulefiles.deps/m3, testsuite/modulefiles.deps/m4, testsuite/modulefiles.deps/m5, testsuite/modulefiles.deps/m6, testsuite/modulefiles.deps/m7, testsuite/modules.50-cmds/376-deps7.exp: ts: add tests for module load/unload & auto_handling 2018-09-16 Xavier Delaruelle <[email protected]> * testsuite/modulefiles.allin/allin/1, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/375-deps6.exp: ts: adapt to modfile 'module unload' auto handling * testsuite/modules.20-locate/069-cross.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/195-load-recurs.exp, testsuite/modules.50-cmds/197-load-lots.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp: ts: adapt to modfile 'module load' auto/no-auto handling More test case adaptation to follow the new 'module load' commands handling when the auto_handling mechanisms are enabled or disabled. The tests changed here show different behavior whether auto_handling is enabled or not. Due to the fact that module unloads is not cascaded when auto_handling is enabled and UReqUn modules ares unloaded in reverse loaded order, not in the order specified within modulefile. These 2 behavior changes lead to different result: command order change, unwind process when a module to unload is erroneous, or variable resulting value when unloading modules compete over same variable to set. 2018-09-15 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Auto handling and 'module unload' commands in modulefile 'module unload' commands in modulefiles may impact the auto handling mode, so a few things need to be adapted: - on 'load' mode, proceed with the unload which may raise error if the module is required by another loaded module. - on 'load' mode, set a conflict toward modules to unload to ensure they will not be loaded afterward. If module has not been correctly unloaded prior the conflict definition, modulefile defining the 'module unload' command will not be loaded. - on 'unload' mode, does nothing as the defined conflict ensure environment consistency and will forbid conflicting module load. If conflicting module has been loaded, it means this situation has been forced so there is no expectation this module who defines a 'module unload' effectively unloads this module which is required by the user. 2018-09-12 Xavier Delaruelle <[email protected]> * testsuite/modules.20-locate/069-cross.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/195-load-recurs.exp, testsuite/modules.50-cmds/197-load-lots.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.50-cmds/340-modvar.exp, testsuite/modules.80-deep/020-load.exp: ts: adapt to modfile 'module load' auto handling * modulecmd.tcl.in: Auto handling and 'module load' commands in modulefile 'module load' commands in modulefiles may impact the auto handling mode, so a few things need to be adapted: - on a 'load' mode, register each module passed to the module load command as a prereq of evaluated modulefile. This way the dependency will correctly be tracked - on an 'unload' mode, proceed to the unload action when evaluating the 'module load' statement only if auto handling is disabled. Do nothing when evaluating the statement if auto handling is enabled, as these modules will be unloaded as part of the UReqUn mechanism. This way all unload/reload are triggered from the top unload action to ensure nothing will get in the way of the DepUn/DepRe/UReqUn processed from there. Note that on an unload mode, modules are unloaded only if no other loaded modules require them and they have not been asked by user, elsewhere no unload is made to ensure the consistency of the loaded environment (as these modules are explicitely required by user or by another loaded module) Treating these modules to unload through UReqUn mechanism leads to some behavior changes: - unload interpretation is not cascaded anymore in this case and every module to unload are processed sequentially - a consequence of the previous point is that an error happening when processing the unload of a UReqUn module, will not unwinds the whole unload process as it does when auto_handling is disabled - unload happens in the reverse loaded order, not in the order defined by the 'module load' commands in the modulefile - as a consequence of this previous point, environment change after the whole unload may be different if the unloaded modules compete over a variable to set when unloading (last module to be unloaded will not be the same) 2018-09-21 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Add 'nuasked' arg to cmdModuleUnload proc Add a 'nuasked' argument to the cmdModuleUnload procedure to control whether or not only the non-user-asked modules should be unloaded. 2018-09-12 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Remove useless global var in cmdModuleUnload * modulecmd.tcl.in: Add 'warn' arg to cmdModuleUnload proc Add a 'warn' argument to the cmdModuleUnload procedure to control whether or not display the warning message when a module cannot be unloaded because it is still required by other loaded module. This argument is equal to true every time except for the interpretation of 'module load' commands in modulefile when mode is 'unload'. In this situation module unload may not be performed if module is still required but it is a normal situation like the UReqUn mechanism (only the useless modulefiles are automatically unloaded). * modulecmd.tcl.in: Avoid unloading mods from getDependentLoadedModuleList res Excludes modules currently being unloaded from the result of getDependentLoadedModuleList procedure. This situation may appear when unloading a module containing itself a "module load" commands, which is translated into a "module unload" command on unload module. When in turns this modulefile targetted by the "module load" command is unloaded, it should not found its dependent modulefile who is currently being unloaded into its dependent result list to avoid UReqUn/DepUn infinite loop. 2018-09-11 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: Fix uninitialized 'rows' var in displayElementList proc Add test case in 00-init/120-siteconfig to demonstrate a setup that falls in the uninitialized 'rows' pit. Fixes #195 2018-09-07 Xavier Delaruelle <[email protected]> * MIGRATING.rst, doc/source/modulefile.rst, modulecmd.tcl.in, testsuite/modulefiles/mcookie/1, testsuite/modulefiles/mcookierc/.modulerc, testsuite/modulefiles/mcookierc/1, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.20-locate/057-mcookie.exp: Check version set in modulefile magic cookie Magic cookie at the beginning of modulefiles may sometimes set a version number, for instance '#Module1.0'. Until now this version number was about a modulefile standard version. However there is no known modulefile API versioning and new modulefile commands are added along new Modules releases. So the idea here is to match this version number optionally set on magic cookie and compare it to the modulecmd.tcl release version. If modulefile sets a version number greater than modulecmd.tcl version, this modulefile is not evaluated like when no magic cookie is set at all. Add specific tests in 20-locate suite and adapt modulefile man page and MIGRATING doc. Fixes #171 2018-09-04 Xavier Delaruelle <[email protected]> * .travis.yml, INSTALL.rst, Makefile, Makefile.inc.in, configure, init/Makefile, init/bash.in, init/cmake.in, init/fish.in, init/ksh.in, init/perl.pm.in, init/python.py.in, init/r.R.in, init/ruby.rb.in, init/sh.in, init/tcl.in, init/zsh.in, modulecmd.tcl.in, site.exp.in, testsuite/install.00-init/060-quar.exp, testsuite/modules.00-init/110-quar.exp, testsuite/modules.70-maint/120-autoinit.exp: install: add --enable-quarantine-support configure opt Add the ability to control whether or not code to support quarantine mechanism should be added to the module function and initialization scripts. Enabled by default Fixes #167 2018-09-03 Xavier Delaruelle <[email protected]> * .travis.yml, INSTALL.rst, Makefile, Makefile.inc.in, configure, init/Makefile, init/bash.in, init/ksh.in, init/sh.in, init/zsh.in, modulecmd.tcl.in, site.exp.in, testsuite/install.00-init/030-options.exp, testsuite/modules.70-maint/120-autoinit.exp: install: add --enable-silent-shell-debug-support configure opt Add the ability to control whether or not code to support silent shell debug should be added to the module function and sh-kind initialization scripts. Enabled by default Fixes #166 2018-09-02 Xavier Delaruelle <[email protected]> * init/bash.in, init/ksh.in, init/sh.in, init/zsh.in, modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: init: split unset of shdbg and quar-related vars * .travis.yml, INSTALL.rst, configure: install: add --with-bin-search-path configure opt Get in control of the path list used to search the tools required to build and configure Modules. Default value: /usr/bin:/bin:/usr/local/bin Adapt one travis scenario to test the setup of a specific value for this configure option. Fixes #164 * MIGRATING.rst: doc: desc. alt name consistency in MIGRATING 2018-09-01 Xavier Delaruelle <[email protected]> * doc/source/diff_v3_v4.rst, doc/source/module.rst, doc/source/modulefile.rst: doc: desc. alt name in manpages and diff doc Also fix some typos found on the way and clarifies commands where symbolic versions and aliases where already supported. * testsuite/modules.50-cmds/350-allin.exp: ts: skip allin tests if domainname tool not there 2018-08-31 Xavier Delaruelle <[email protected]> * testsuite/etc/modulerc.altname, testsuite/modulefiles.deps/alt/.modulerc, testsuite/modulefiles.deps/alt/1, testsuite/modulefiles.deps/alt/7, testsuite/modulefiles.deps/alt/8, testsuite/modulefiles.deps/alt/dir/.modulerc, testsuite/modulefiles.deps/alt/dir/2, testsuite/modulefiles.deps/alt/dir/3, testsuite/modulefiles.deps/alt/dir/4, testsuite/modulefiles.deps/alt/dir/5, testsuite/modulefiles.deps/alt/dir/6, testsuite/modulefiles.deps/alt2/1, testsuite/modulefiles.deps/i1, testsuite/modulefiles.deps/i2, testsuite/modulefiles.deps/i3, testsuite/modulefiles.deps/i4, testsuite/modulefiles.deps/i5/1, testsuite/modulefiles.deps/i5/2, testsuite/modules.50-cmds/380-altname.exp: ts: add alt name specific tests * modulecmd.tcl.in: Match alt names on is-loading query Look at all names resolving to loading modules for is-loading queries. * modulecmd.tcl.in, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.80-deep/010-init_ts.exp, testsuite/modules.80-deep/020-load.exp, testsuite/modules.80-deep/068-transitive.exp, testsuite/modules.80-deep/999-cleanup.exp: Mod inherits alt names of its parent directories Improve correlation especially on unload actions. A module alias set on a parent directory of a module will be added to the list of module alternative names, thus it will be matched when attempting an unload on this alias name. 2018-08-30 Xavier Delaruelle <[email protected]> * testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.80-deep/068-transitive.exp: ts: adapt resolution warning test with alt name These warning messages are not displayed anymore as alternative names registered in environment are used instead of triggering a modulefile resolution through the modulepaths. * testsuite/modules.70-maint/153-is-loaded.exp, testsuite/modules.70-maint/157-info-loaded.exp: ts: adapt env consistency test results with alt name Alternative name match leads to loaded environment correlation test. So this test is now performed most of the time. 2018-08-27 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Check mod alt names when comparing mod to names When checking if a loaded module name matches a given string, also checks if match happens with any of the alternative names of mod. Add doesModuleMatchesName procedure to check mod main and alternative names. Then replace 'string first' tests by a call to this new procedure in conflict, getLoadedWithClosestName, getLoadedMatchingName, doesModuleConflict and setModuleDependency procedures. Register alternative names of module prior its modulefile evaluation as this information is required before any query of matching conflict (call to doesModuleConflict procedure or call to conflict procedure during modulefile evaluation). Fixes #143 2018-08-26 Xavier Delaruelle <[email protected]> * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.00-init/071-args.exp, testsuite/modules.10-use/040-load.exp, testsuite/modules.10-use/080-access.exp, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/038-defcontext.exp, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.20-locate/075-symlink.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/197-load-lots.exp, testsuite/modules.50-cmds/280-info-specified.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/080-access.exp, testsuite/modules.61-coll/999-cleanup.exp, testsuite/modules.80-deep/010-init_ts.exp, testsuite/modules.80-deep/020-load.exp, testsuite/modules.80-deep/021-unload.exp, testsuite/modules.80-deep/022-switch.exp, testsuite/modules.80-deep/068-transitive.exp, testsuite/modules.80-deep/080-access.exp, testsuite/modules.80-deep/999-cleanup.exp: ts: adapt existing tests to MODULES_LMALTNAME 2018-08-25 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Register loaded module alt names in MODULES_LMALTNAME A module may have alternate names resulting from the module alias or symbolic version set through the resolution of its modulefile. Here we start to keep track of these alternative names for every loaded modules by using an environment variable: MODULES_LMALTNAME. It follows the same tracking principle than used for keeping track of conflicts or prereqs between modules. Helper procedures are introduced to get/set module alternative names. Right after loading modulefile, its alternative names are retrieved from the ::g_resolvedHash resolving array and set to the g_loadedModuleAltname array wich is then used to get and set alternative names value without dependency to the alias/symbol global resolving process. * MIGRATING.rst: doc: cite Flavours for AMHM in MIGRATING doc * MIGRATING.rst, doc/source/module.rst: doc: add DepUn + clarify UReqUn,DepRe Especially regarding the inter-dependencies between these mechanisms and the specificities of the switch sub-command. 2018-08-24 Xavier Delaruelle <[email protected]> * MIGRATING.rst, doc/source/module.rst, modulecmd.tcl.in, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/375-deps6.exp: Brand auto handling mechanisms * Requirement Load (ReqLo) * Dependent Reload (DepRe) * Useless Requirement Unload (UReqUn) * Dependent Unload (DepUn) Mention these mechanism titles in MIGRATION and module man page documentations. Reword code and tests that where previously using the DU/DR/URU short names. 2018-08-23 Xavier Delaruelle <[email protected]> * doc/source/FAQ.rst, doc/source/conf.py: doc: mention createmodule.{sh,py} scripts in FAQ Fixes #189 * modulecmd.tcl.in: No prereq violation set for dependent on getDependentLoadedModuleList Modules strongly requiring mods where previously set in prereq violation state as mod where unloaded. Remove that since these modules requiring mod during an unload (the DU modules) are now part of the list of modules passed as argument to getDependentLoadedModuleList. So this part of the code will not be run anymore. * modulecmd.tcl.in: Move remaining 'lsearch -exact == -1' to notInList 2018-08-22 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.50-cmds/375-deps6.exp: No prereq violation warn msg for DR mech or purge During a purge or the unload phase of the DR mechanism do not warn about the unload process violating a prereq constraint. In these situation, violation is due to the dependent module not being able to also unload or to unload prior its requirement. All of this because this dependent module is its in a violation state. * testsuite/modules.50-cmds/374-deps5.exp: ts: add DU/DR/URU tests on switch action 2018-08-21 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: No getPathToModule call in cmdModuleSwitch Simplify code of cmdModuleSwitch which now relies more on cmdModuleUnload. There is no more need to resolve module to unload within cmdModuleSwitch as it is perfectly handled with its related modules to unload within cmdModuleUnload. * modulecmd.tcl.in: Rely on cmdModuleUnload DU/URU/DR during switch Rely on the DU/URU mechanisms of cmdModuleUnload during a switch action and also the unload part of the DR mechanism. cmdModuleUnload transmit the DR module list to cmdModuleSwitch for this procedure to be able to handle the reload phase of the DR mechanism once the newly switched-to module is loaded. This change makes useless the being_reload argument of the getDependentLoadedModuleList procedure, as module candidates are now found when looking for DU modules in cmdModuleSwitch. being_reload argument is thus removed from getDependentLoadedModuleList proc. 2018-08-19 Xavier Delaruelle <[email protected]> * testsuite/modulefiles.deps/h50, testsuite/modulefiles.deps/h51, testsuite/modulefiles.deps/h52, testsuite/modulefiles.deps/h53, testsuite/modulefiles.deps/h54, testsuite/modulefiles.deps/h55, testsuite/modulefiles.deps/h56, testsuite/modulefiles.deps/h57, testsuite/modulefiles.deps/h58, testsuite/modulefiles.deps/h60, testsuite/modulefiles.deps/h61, testsuite/modulefiles.deps/h62, testsuite/modulefiles.deps/h63, testsuite/modulefiles.deps/h64, testsuite/modulefiles.deps/h65, testsuite/modulefiles.deps/h66, testsuite/modulefiles.deps/h67, testsuite/modulefiles.deps/h68, testsuite/modulefiles.deps/h69, testsuite/modulefiles.deps/h70, testsuite/modulefiles.deps/h71, testsuite/modulefiles.deps/h72, testsuite/modulefiles.deps/h73, testsuite/modulefiles.deps/h74, testsuite/modules.50-cmds/373-deps4.exp: ts: add new tests DU mechanism-specific 2018-08-17 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/375-deps6.exp: Introduce "Dependent Unload" (DU) mechanism Add the ability when auto handling is enabled to unload modules requiring the module asked for unload rather shouting an error. Dependent Unload (DU) mechanism builds list of all modules actively requiring (not optionaly requiring it) the module set for unload or actively requiring modules part of this DU batch. These DU modules are then unloaded prior main module unload, not to be there anymore once module asked for unload is in turn unloaded. These DU modules also contributes to determine the list of Useless Requirement Unload (URU) modules. As unloading the DU modules may also add new URU modules. These DU modules also contributes to determine the list of Dependent Reload (DR) modules. As unloading the DU modules may also add new DR modules. Take this opportunity to clarify comments around Dependent Reload (DR) and Useless Requirement Unload (URU) mechanisms in cmdModuleUnload procedure. Update "deps" test expectations now the DU mechanism is in place. * modulecmd.tcl.in: Pass a module list to getUnloadableLoadedModuleList Like for getDependentLoadedModuleList procedure makes getUnloadableLoadedModuleList able to process a module list passed as argument. 2018-08-16 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Compute 'drmodlist' only if auto enabled in cmdModuleLoad * modulecmd.tcl.in: Rename 'depmod' in 'drmodlist' in cmdModule{Load,Unload} Rename local variable 'depmod' into 'drmodlist' (dependent reload module list) for clarification. * modulecmd.tcl.in: Treat list of elt in appendNoDupToList Adapt appendNoDupToList to treat list of elements rather just a single element * modulecmd.tcl.in: Work over 1 list in getDependentLoadedModuleList Only use 'fulllist' as 'testlist' could be merged into 'fulllist'. * modulecmd.tcl.in: Work over 1 list in getUnloadableLoadedModuleList Only use 'fulllist' as 'unmodlist' could be deduced from it in the end. * modulecmd.tcl.in: Add appendNoDupToList helper proc Add procedure to append to a list an element if this element is not already part of this list * modulecmd.tcl.in: Add isInList/notInList helper procs Introduce two helper procedures to check existence of an element in a list: isInList and notInList. When this script compatibility will moved from Tcl>=8.4 to Tcl>=8.5, will change these helper procs in 'in' and 'ni'. * modulecmd.tcl.in: Add getDirectDependentList helper procedure Add a getDirectDependentList procedure in charge of querying ::g_dependHash array to return list of dependent modules, stronly or weakly attached to passed mod. 2018-08-15 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modulefiles.deps/h30, testsuite/modulefiles.deps/h31, testsuite/modulefiles.deps/h32, testsuite/modulefiles.deps/h33, testsuite/modulefiles.deps/h34, testsuite/modulefiles.deps/h35, testsuite/modulefiles.deps/h36, testsuite/modulefiles.deps/h37, testsuite/modulefiles.deps/h38, testsuite/modulefiles.deps/h39, testsuite/modulefiles.deps/h40, testsuite/modules.50-cmds/373-deps4.exp: Pass a module list to getDependentLoadedModuleList Adapt getDependentLoadedModuleList procedure to get a module list as argument rather a single module name. Helps to get in one call all the dependent modules of those passed as argument. Also improve correctness as sometimes multiple modules may violate constraint of another one. To get this module freed, all conflicting modules may set unloaded. So if all of these conflicting modules are passed as argument to getDependentLoadedModuleList, the dependent module will be seen freed and will be part of the procedure result list. 2018-08-14 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modulefiles.deps/h10, testsuite/modulefiles.deps/h11, testsuite/modulefiles.deps/h12, testsuite/modulefiles.deps/h20, testsuite/modulefiles.deps/h21, testsuite/modulefiles.deps/h22, testsuite/modulefiles.deps/h23, testsuite/modulefiles.deps/h24, testsuite/modulefiles.deps/h25, testsuite/modules.50-cmds/373-deps4.exp: Trigger full useless prereqs unload from main unload Call from the main unload action the automatic unload of prereq modules that became useless due to main module unload. To achieve that, getUnloadableLoadedModuleList procedure now returns to the tree of unloadable modules. Then cmdModuleUnload calls over this unloadable module list is made in a --no-auto mode not to deviate from what was computed before unload/load processing. * modulecmd.tcl.in, testsuite/modulefiles.deps/h1, testsuite/modulefiles.deps/h2, testsuite/modulefiles.deps/h3, testsuite/modulefiles.deps/h4, testsuite/modules.50-cmds/373-deps4.exp: Compute list of unloadable required modules prior unload When unloading a module, its requirements that have been automatically loaded and are not required by any other module will automatically be unloaded when their dependent module is unloaded. Compute the list of these unloadable required modules prior to the unload of their dependent module, not to be confused by currently being reloaded dependent module that may hold a requirement on these potentially unloadable modules. Merge getRequiredLoadedModuleList procedure into getUnloadableLoadedModuleList that now takes the name of the module being unloaded as argument. Call getUnloadableLoadedModuleList prior any module change so determine that a required module will be useless after module unload if this required module has only one dependent (module currently being unloaded) * modulecmd.tcl.in: Add 'direct' arg to getDependentLoadedModuleList proc Split meaning of 'strong' argument into a new argument named 'direct'. Now strong means active dependency (not an optional one). And direct means only first-level dependent, when equals to 0 it means the full dependency tree should be returned. 2018-08-13 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.50-cmds/373-deps4.exp: Ensure --no-auto mode on load phase of dependent reload Ensure dependent modules reload do not deviate from previously loaded list. Like already done during a "switch" action. Here now also applies to "load" and "unload" actions. * modulecmd.tcl.in, testsuite/modulefiles.deps/g1, testsuite/modulefiles.deps/g2, testsuite/modulefiles.deps/g3, testsuite/modulefiles.deps/g4, testsuite/modulefiles.deps/g5, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/375-deps6.exp: Split dependent reload process around main action When reloading dependent module during a module load or a module unload, split this reload process into an unload phase, prior main action, than a load phase after main action. Performing this way helps dependent module to get refreshed accurately with an unload phase in same situation than their last load. Then load phase of the reload process will be able to correctly adapt with new dependency loaded or unloaded. Proceeding this way enables modulefiles to adapt their variable definitions based on their loaded requirements. However when prereq or conflict violation constraint appear, unload stage of a dependent module may not correctly unset variable as described in nonreg tests. 2018-08-08 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Add reloadModuleList{Unload,Load}Phase procs Split module reload process into 2 procedures: reloadModuleListUnloadPhase that unloads module list and reloadModuleListLoadPhase that load it again after. Adapt cmdModuleReload and cmdModuleSwitch to take advantage of these new procedures. 2018-08-06 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Handle uasked flag on cmdModuleSwitch proc Add a 'uasked' argument to the cmdModuleSwitch procedure to determine if the module to load during the switch action is asked by user (called on the command line or in a first level sourced file) or not. 2018-08-05 Xavier Delaruelle <[email protected]> * README.md: doc: fix cea-hpc/modules appveyor weblink 2018-08-21 Xavier Delaruelle <[email protected]> * contrib/rpm/environment-modules.spec.in: rpm: add gcc in build requirements for compat version Reference: https://fedoraproject.org/wiki/Changes/Remove_GCC_from_BuildRoot 2018-08-20 Xavier Delaruelle <[email protected]> * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version 4.1.4 * doc/source/modulefile.rst, modulecmd.tcl.in, testsuite/modulefiles.deep/badmodvers/.version, testsuite/modulefiles.deep/badmodvers/dir1/2.0, testsuite/modulefiles.deep/badmodvers/foo, testsuite/modules.80-deep/010-init_ts.exp, testsuite/modules.80-deep/020-load.exp, testsuite/modules.80-deep/021-unload.exp, testsuite/modules.80-deep/030-display.exp, testsuite/modules.80-deep/050-whatis.exp, testsuite/modules.80-deep/999-cleanup.exp, testsuite/modules.90-avail/070-full.exp: ModulesVersion can only refer to modfile in same dir Clarify modulefile man page and .version modulerc interpretation about ModulesVersion variable which can only refer to modulefile located in the same directory than where this .version modulerc file is located. Report error if a nested ModulesVersion value is detected. This value is ignored. Add tests in 80-deep suite on that change. Clarifies RH#979787 [1] Fixes #176 [1] https://bugzilla.redhat.com/show_bug.cgi?id=979787 2018-08-19 Xavier Delaruelle <[email protected]> * .../cookbook/top-priority-values/modulefiles/bar/1, .../cookbook/top-priority-values/modulefiles/foo/1, .../cookbook/top-priority-values/siteconfig.tcl: cookbook: add 'top-priority-values' recipe 2018-08-16 Jan Synacek <[email protected]> * contrib/scripts/createmodule.py: contrib: createmodule.py: fix typo * contrib/scripts/createmodule.py: contrib: createmodule.py: open pipes in text mode Otherwise, pipes are opened in binary mode and there are type errors further down the code. * contrib/scripts/createmodule.py: contrib: createmodule.py: fix tab indentation 2018-08-05 Xavier Delaruelle <[email protected]> * README.md: doc: add appveyor build badge in README * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Fix exec() usage in module func on Python3 Need to pass a variable namespace to exec() function to get the value of the '_mlstatus' variable generated by modulecmd. This change enables to return correct status on Python3, as exec() function behaves differently between Python2 and 3 [1]. [1] https:// stackoverflow.com/questions/15086040/behavior-of-exec-function-in-python-2-a nd-python-3 * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.20-locate/081-access-rc.exp, testsuite/modules.60-initx/080-access.exp, testsuite/modules.61-coll/080-access.exp, testsuite/modules.80-deep/080-access.exp: ts: skip 08?-access tests if locked dir/file are still readable * testsuite/modules.10-use/080-access.exp: ts: skip tests in 10/080 when file readable in locked dir * contrib/gitlog2changelog.py: Fix gitlog2changelog.py script for python3 * testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/050-crossshell.exp: ts: sh and ksh shells on MSYS2 behaves like on CYGWIN 2018-08-04 Xavier Delaruelle <[email protected]> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.61-coll/020-savelist.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.90-avail/070-full.exp: ts: skip tty cols nb test if cols nb cannot be changed * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/090-uname-proc.exp, testsuite/modules.50-cmds/099-uname-cleanup.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.70-maint/060-apropos.exp: ts: adapt expected results when 'domainname' not avail On MSYS2, domainname is not available, which produces error message on 'uname/domain' modulefile. This message shows up on every 'module search' queries. Here all impacted test cases are updated to expect this error message on all module search queries. * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.20-locate/075-symlink.exp, testsuite/modules.70-maint/130-aliases.exp: ts: skip mod symlink tests if no fs support 2018-08-03 Xavier Delaruelle <[email protected]> * .appveyor.yml: Introduce AppVeyor config file for Windows CI * configure: install: look for 'make' on MSYS2 2018-08-02 Xavier Delaruelle <[email protected]> * .travis.yml: travis: help compat configure to locate tclConfig.sh on osx * testsuite/modulefiles.deps/dh, testsuite/modulefiles.deps/ea, testsuite/modulefiles.deps/eb, testsuite/modulefiles.deps/ec, testsuite/modulefiles.deps/ed, testsuite/modulefiles.deps/ee, testsuite/modulefiles.deps/ef, testsuite/modulefiles.deps/eg, testsuite/modules.50-cmds/374-deps5.exp: ts: add complex deps tests on switch command 2018-08-01 Xavier Delaruelle <[email protected]> * testsuite/modules.50-cmds/373-deps4.exp: ts: add more missing prereq tests in 50/373 * testsuite/modules.50-cmds/130-conflict-full.exp: ts: --{no-,}auto switch tests on conflict situations 2018-07-31 Xavier Delaruelle <[email protected]> * testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp: ts: --{no-,}auto switch tests on prereq situations 2018-08-01 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: No auto_handling when reloading dependent during a switch Disable auto handling mode during a switch command when reloading the modules dependent on "old" after "new" being loaded. Proceed this way to avoid unsatisfied requirements, now "old" is unloaded to be solved automatically against user will. As a result, some of the dependent modules may not be reloaded if "new" module does not satisfy their constraint. 2018-07-30 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.50-cmds/375-deps6.exp: Reload dependent and not conflicting anymore on switch When switching a module by another, add to the list of module to reload, those modules dependent of unloaded module and those modules that were in conflict with unloaded module that can take advantage of this unload to be reloaded. 2018-07-29 Xavier Delaruelle <[email protected]> * testsuite/modulefiles.deps/mv, testsuite/modules.50-cmds/375-deps6.exp: ts: warning when --force used in modulefile 2018-07-31 Colin Marquardt <[email protected]> * modulecmd.tcl.in: Ignore dirs .SYNC/ (DesignSync) and .sos/ (SOS). 2018-07-28 Colin Marquardt <[email protected]> * doc/source/FAQ.rst: Fix small typo. 2018-07-20 Xavier Delaruelle <[email protected]> * MIGRATING.rst: doc: desc. conflict& prereq consistency/auto/force in MIGRATING 2018-07-19 Xavier Delaruelle <[email protected]> * MIGRATING.rst: doc: desc. env var change in MIGRATING * doc/source/diff_v3_v4.rst: doc: desc. conflict& prereq consistency/auto/force in diff 2018-07-18 Xavier Delaruelle <[email protected]> * doc/source/module.rst, doc/source/modulefile.rst: doc: desc. --force in module.1 2018-07-17 Xavier Delaruelle <[email protected]> * doc/source/module.rst, doc/source/modulefile.rst: doc: desc. --auto/--no-auto/MODULES_AUTO_HANDLING in module.1 2018-07-16 Xavier Delaruelle <[email protected]> * testsuite/modules.50-cmds/130-conflict-full.exp: ts: --force over unsatisfied conflict when --no-auto * testsuite/modules.50-cmds/120-prereq-full.exp: ts: --force over unsatisfied prereq when --no-auto 2018-07-15 Xavier Delaruelle <[email protected]> * testsuite/modules.61-coll/030-save.exp: ts: check saving collection when constraint not satisfied 2018-07-11 Xavier Delaruelle <[email protected]> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/375-deps6.exp: ts: add reload tests to 50-cmds/375-deps6 * modulecmd.tcl.in: No reload of all loaded mods if constraints are violated * testsuite/modules.50-cmds/375-deps6.exp: ts: add purge tests to 50-cmds/375-deps6 * modulecmd.tcl.in: Reload dependent if auto=1 on cmdModuleUnload Makes 'auto' argument of cmdModuleUnload procedure also control the reload of all dependent modules once passed mod has been unloaded. 'auto' argument was already controlling the automatic unload or modules required by passed mod to unload if these required modules have been loaded without being asked by users. As a consequence the unloading phase of a purge or reload command or event the unload phase of the dependent modules of a switch command do not attempt to reload the dependent modules. (as these dependent modules will be handled through the same unload phase). 2018-07-10 Xavier Delaruelle <[email protected]> * testsuite/modulefiles.deps/f1, testsuite/modulefiles.deps/f10, testsuite/modulefiles.deps/f11, testsuite/modulefiles.deps/f12, testsuite/modulefiles.deps/f13, testsuite/modulefiles.deps/f14, testsuite/modulefiles.deps/f15, testsuite/modulefiles.deps/f16, testsuite/modulefiles.deps/f17, testsuite/modulefiles.deps/f18, testsuite/modulefiles.deps/f19, testsuite/modulefiles.deps/f2, testsuite/modulefiles.deps/f20, testsuite/modulefiles.deps/f21, testsuite/modulefiles.deps/f22/1, testsuite/modulefiles.deps/f22/2, testsuite/modulefiles.deps/f23, testsuite/modulefiles.deps/f24, testsuite/modulefiles.deps/f25, testsuite/modulefiles.deps/f26, testsuite/modulefiles.deps/f27, testsuite/modulefiles.deps/f28, testsuite/modulefiles.deps/f29, testsuite/modulefiles.deps/f3, testsuite/modulefiles.deps/f4, testsuite/modulefiles.deps/f5, testsuite/modulefiles.deps/f6, testsuite/modulefiles.deps/f7, testsuite/modulefiles.deps/f8, testsuite/modulefiles.deps/f9, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/375-deps6.exp: ts: add deps tests when constraints are violated * modulecmd.tcl.in: Take disapearing prereq in account on getDependentLoadedModuleList When 'being_unload' argument is set, which means passed mod is currently being unloaded, exclude from result list the loaded modules requiring passed mod. As this module is being unloaded, these dependend modules are entering in a violation state, so they cannot be reloaded. This is achieved by temporarily defining the dependent modules in prereq violation state, for the time of the getDependentLoadedModuleList procedure execution. 2018-07-09 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Change sortPerModuleLoadedOrder into sortModulePerLoadedAndDepOrder Rename sortPerModuleLoadedOrder proc into sortModulePerLoadedAndDepOrder. Sort is now refined to take dependencies into account: a dependent module should be placed prior the loaded module requiring it. This refinement is made to avoid reloading multiple times the same loaded module when dependent module is set after module requiring it in list. 2018-07-08 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Add 'being_unload' arg to getDependentLoadedModuleList Indicate to getDependentLoadedModuleList procedure that targeting module is being unloaded. In this case the procedure will return loaded modules conflicting with passed mod and the dependent modules of these conflicting module. These loaded modules are added to the dependent loaded module list since passed mod is being unloaded, they can be reloaded now the conflict violation is fixed. This reload garanties the modules previously in conflict are now correctly loaded and in an expected loaded order. 2018-07-05 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Introduce a 'force' arg to cmdModuleUnload Add the ability to by-pass requiring modules check when unloading a module with an argument on the cmdModuleUnload procedure. This new 'force' argument is enabled when reloading modules as the requirement by-pass will immediately be fixed once the required modules are loaded again. Happens when reloading dependent modules on load, unload and switch actions. Some of the dependent modules may be excluded from reloading module list as they are in a prereq/conflict violation state so the remaining modules to reload may face some requiring modules still loaded, thus their reload need to be forced. Also enabled when purging loaded modules as all modules should be unloaded even if some violations make unloading prereqs before the module requiring them. * modulecmd.tcl.in: Rename 'autounload' cmdModuleUnload arg into 'auto' 2018-06-30 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: No collection save if mod constraints unsatisfied Raise error on a save sub-command is some module constraint is not satisfied. * modulecmd.tcl.in: Update getDependentLoadedModuleList to return sane deps Add a sat_constraint argument to getDependentLoadedModuleList procedure to ask for dependent loaded modules whose constraints are satisfied. This argument is enabled when reloading dependent modules in load, unload and switch actions. A areModuleConstraintsSatisfied procedure is introduced and getDependentLoadedModuleList relies on it to determine if a given loaded module has its constraints (prereq and conflict) satisfied as well as all loaded modules whose given loaded module depends on. When no module name is passed to areModuleConstraintsSatisfied, this procedure returns if all loaded module satisfy their loading constraints. 2018-06-29 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Track loaded mod violating their prereq/conflict def Update setModuleDependency and unsetModuleDependency procedures to register/unregister in a ::g_prereqViolation array loaded modules violating their prereq definition (means they have been loaded in force mode or their prereq was unloaded in force mode). Proceed in a similar way for conflicts with a ::g_conflictViolation array, still in setModuleDependency and unsetModuleDependency procedures. For prereq violation, updates of dependent loaded module eventual violation is obtained by the re-compute of the dependency chain performed in setModuleDependency and unsetModuleDependency. For conflict violation, updates of violation state is done for loaded modules conflicting with module processed by setModuleDependency or unsetModuleDependency. To achieve that list of conflicting-with loaded modules is set in ::g_conflictViolation array. This array is handled by setModuleConflictViolation and unsetModuleConflictViolation procedures. doesModuleConflict procedure is updated on the way to skip from its result eventual own reflexive conflict, as this procedure is now called once mod is effectively loaded and not anymore prior mod load (as when it is called from cmdModuleLoad). Also check conflicting modules declared by current module are loaded or not. 2018-06-28 Xavier Delaruelle <[email protected]> * init/bash_completion.in, init/tcsh_completion.in, modulecmd.tcl.in, testsuite/modules.00-init/090-switches.exp: By-pass conflict/prereq issue with -f/--force cmd-line switches Add -f/--force command-line switches to by-pass dependency consistency in case of * load of a module conflicting with another loaded module * load of a module where its declared requirements cannot be loaded * unload of a module required by other loaded module These options are only useful for the load, unload and switch module sub-commands. When a dependency is actually by-passed, still produce a warning message to help user learn that something has effectively been forced. Warning messages will be improved later-on to let user better understand what happens Update shell completion scripts. 2018-06-27 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/example/siteconfig.tcl-1, testsuite/modules.50-cmds/130-conflict-full.exp: Remove g_force with path ref counting meaning As a consequence a loaded module cannot be loaded a second time in force mode. So the check of this situation in conflict procedure is not useful anymore as the TESTSUITE_ENABLE_SITECONFIG_DEBUG non-regression test. * modulecmd.tcl.in, testsuite/modulefiles.deps/mu, testsuite/modules.50-cmds/372-deps3.exp: Ignore --auto/--no-auto opt when called from modulefile 2018-06-26 Xavier Delaruelle <[email protected]> * doc/source/module.rst: doc: desc. MODULES_LM{CONFLICT,NOTUASKED,PREREQ} in module.1 2018-06-25 Xavier Delaruelle <[email protected]> * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in: init: add pager opts in shell completion scripts * testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/371-deps2.exp, testsuite/modules.50-cmds/373-deps4.exp: ts: always test auto handling in 50-cmds Adapt tests relying on an enabled auto_handling mode in 50-cmds suite to set in any cases MODULES_AUTO_HANDLING environment variable to perform the tests whatever the auto_handling mode set at configure time. Also update prereq tests in 50-cmds/12* to check behaviors when auto_handling is disabled and when it is enabled. * init/bash_completion.in, init/tcsh_completion.in, modulecmd.tcl.in, testsuite/modules.00-init/130-auto_handling.exp: Add --auto/--no-auto command-line switches Add the ability to control from the command-line whether the auto_hanling mode should be enabled or disabled. Command-line option override auto_handling enablement value set with MODULES_AUTO_HANDLING environment variable or set at configure time. Update tests and shell completion scripts. * modulecmd.tcl.in, testsuite/modules.00-init/130-auto_handling.exp: Introduce MODULES_AUTO_HANDLING Add the ability to control whether the auto_handling mode should be enabled or disabled with an environment variable: MODULES_AUTO_HANDLING. When set to 0 or 1, this environment variable overrides value set for auto_handling mode at configure time. 2018-06-21 Xavier Delaruelle <[email protected]> * testsuite/modulefiles.deps/da, testsuite/modulefiles.deps/db, testsuite/modulefiles.deps/dc, testsuite/modulefiles.deps/dd, testsuite/modulefiles.deps/de, testsuite/modulefiles.deps/df, testsuite/modulefiles.deps/dg, testsuite/modules.50-cmds/373-deps4.exp: ts: add broken prereq in list tests * testsuite/home/coll10, testsuite/home/coll9, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/999-cleanup.exp: ts: add coll tests for --notuasked flag 2018-06-20 Xavier Delaruelle <[email protected]> * testsuite/modulefiles.deps/ca, testsuite/modulefiles.deps/cb, testsuite/modulefiles.deps/cc, testsuite/modulefiles.deps/cd, testsuite/modulefiles.deps/ce, testsuite/modulefiles.deps/cf, testsuite/modulefiles.deps/cg, testsuite/modules.50-cmds/373-deps4.exp: ts: add dependent module handling checks * testsuite/modulefiles.deps/ms, testsuite/modulefiles.deps/mt, testsuite/modulefiles.deps/s, testsuite/modulefiles.deps/t, testsuite/modules.50-cmds/372-deps3.exp: ts: add prereq/conflict consistency checks 2018-06-19 Xavier Delaruelle <[email protected]> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/372-deps3.exp: ts: add tests for is-loading conflict check Introduce 372-deps3 tests to check dependency consistency whatever the auto_handling state. 2018-06-15 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Rework is-loading to get closer to is-loaded handling Rework is-loading procedure to call getLoadedMatchingName procedure like is-loaded. Adapt getLoadedMatchingName to work on loading modules rather loaded modules. To achieve that, isModulefileLoading, getModuleFromLoadingModulefile, getLoadingModuleFileList and getLoadingModuleList procedures are introduced to be called instead of their 'loaded' counterpart when getLoadedMatchingName is called to look at loading modules. Remove is-loading procedure from aliases set for modulefile interpreter as there is no current need to acces such kind of procedure during a modulefile evaluation context. 2018-06-12 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Check unloading mod prereq violation whatever auto_handling state Ensure unloading module does not violate a registered prereq set by an already loaded module whatever the auto_handling state as it does not relate to an automatic handling mechanism. * modulecmd.tcl.in: Check loading mod conflict violation whatever auto_handling state Ensure loading module does not violate a registered conflict set by an already loaded module whatever the auto_handling state as it does not relate to an automatic handling mechanism. * modulecmd.tcl.in: Raise is-loading conflict error whatever auto_handling state Ensure conflict statement is satisfied even against modules currently being loaded. This error raise is not related to an automatic handling mechanism so it is triggered whatever the auto_handling state. 2018-06-11 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Loads from a top source cmd are considered user asked If module load orders are made from a 'module source' or during the source of an autoinit commands, consider these 'module load' orders found during evaluation as user asked orders. 2018-06-09 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/006-procs.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.00-init/071-args.exp, testsuite/modules.10-use/040-load.exp, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/035-defname.exp, testsuite/modules.20-locate/038-defcontext.exp, testsuite/modules.20-locate/040-alias.exp, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.20-locate/046-getsym.exp, testsuite/modules.20-locate/047-symerrs.exp, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.20-locate/075-symlink.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/020-setenv.exp, testsuite/modules.50-cmds/022-setenv-eschars.exp, testsuite/modules.50-cmds/025-setenv-undo.exp, testsuite/modules.50-cmds/028-setenv-refcount.exp, testsuite/modules.50-cmds/029-setenv-env.exp, testsuite/modules.50-cmds/030-unsetenv.exp, testsuite/modules.50-cmds/035-unsetenv-undo.exp, testsuite/modules.50-cmds/036-unsetenv-x.exp, .../modules.50-cmds/038-unsetenv-refcount.exp, testsuite/modules.50-cmds/039-unsetenv-env.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/049-append-env.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/059-prepend-env.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/069-remove-env.exp, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/076-alias-sub.exp, testsuite/modules.50-cmds/077-alias-undo.exp, testsuite/modules.50-cmds/078-refresh.exp, testsuite/modules.50-cmds/080-info-name.exp, testsuite/modules.50-cmds/081-info-user.exp, testsuite/modules.50-cmds/082-info-user-exp.exp, testsuite/modules.50-cmds/083-info-mode.exp, testsuite/modules.50-cmds/084-info-mode-exp.exp, testsuite/modules.50-cmds/085-info-flags.exp, testsuite/modules.50-cmds/086-info-shells.exp, testsuite/modules.50-cmds/087-info-shells-exp.exp, testsuite/modules.50-cmds/088-info-isloaded.exp, testsuite/modules.50-cmds/089-info-type.exp, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/100-loglevel.exp, testsuite/modules.50-cmds/101-badfac.exp, testsuite/modules.50-cmds/105-trace.exp, testsuite/modules.50-cmds/110-verbose.exp, testsuite/modules.50-cmds/115-verbose-msg.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp, .../modules.50-cmds/132-conflict-fullpath.exp, testsuite/modules.50-cmds/140-system.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/172-swap-app-delim.exp, testsuite/modules.50-cmds/173-swap-app-delim.exp, testsuite/modules.50-cmds/175-swap2.exp, testsuite/modules.50-cmds/177-swap-prep-delim.exp, testsuite/modules.50-cmds/178-swap-prep-delim.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/195-load-recurs.exp, testsuite/modules.50-cmds/197-load-lots.exp, testsuite/modules.50-cmds/200-break.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/220-continue.exp, testsuite/modules.50-cmds/230-loop.exp, testsuite/modules.50-cmds/240-chdir.exp, testsuite/modules.50-cmds/250-x-resource.exp, testsuite/modules.50-cmds/260-getenv.exp, testsuite/modules.50-cmds/269-getenv-env.exp, testsuite/modules.50-cmds/280-info-specified.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.50-cmds/285-info-loaded.exp, testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.50-cmds/301-interp-command.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.50-cmds/310-puts.exp, testsuite/modules.50-cmds/320-is-saved.exp, testsuite/modules.50-cmds/321-is-used.exp, testsuite/modules.50-cmds/322-is-avail.exp, testsuite/modules.50-cmds/330-source.exp, testsuite/modules.50-cmds/340-modvar.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/359-allin-env.exp, testsuite/modules.50-cmds/360-restoreenv.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/371-deps2.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/080-access.exp, testsuite/modules.70-maint/020-update.exp, testsuite/modules.70-maint/030-purge.exp, testsuite/modules.70-maint/050-whatis-load.exp, testsuite/modules.70-maint/140-multiargs.exp, testsuite/modules.70-maint/180-reload.exp, testsuite/modules.70-maint/190-emptyarg.exp, testsuite/modules.80-deep/020-load.exp, testsuite/modules.80-deep/021-unload.exp, testsuite/modules.80-deep/022-switch.exp, testsuite/modules.80-deep/068-transitive.exp, testsuite/modules.80-deep/080-access.exp, testsuite/modules.91-sort/040-load.exp, testsuite/modules.95-version/020-load.exp, testsuite/modules.95-version/020-unload.exp, testsuite/modules.95-version/022-load2.exp, testsuite/modules.95-version/022-unload2.exp, testsuite/modules.95-version/040-xgetenv.exp: Record not user asked mod rather user asked For better and simpler compatibility with previous modulecmd version and also for using same approach for both loaded environment and saved collections, track in the user environment the loaded modules that have not been asked by user (modules that have been automatically loaded as dependency of another loaded module) instead of tracking those loaded modules directly asked by user. As a consequence MODULES_LMUASKED is transformed in MODULES_LMNOTUASKED and modulecmd.tcl code is adapted to determine the 'user asked' state from this negated record. Adapt the whole testsuite consequently. 2018-06-08 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Rely on isModuleUserAsked rather getLoadedModuleUserAskedList Use isModuleUserAsked procedure rather checking list result returned by getLoadedModuleUserAskedList procedure to determine a loaded module has been asked by user. * modulecmd.tcl.in: Replace reloadDepLoadedModuleList by cmdModuleReload Drop reloadDepLoadedModuleList procedure to make use of cmdModuleReload in cmdModuleLoad and cmdModuleUnload to reload dependent modules. Adapt cmdModuleReload procedure to pass it a module list. If no list provided, proc falls back to the full currently loaded module list. * modulecmd.tcl.in: Unload/load dep mod one by one in cmdModuleSwitch Like for reload command, change cmdModuleSwitch to unload then reload dependent module list one by one rather unloading/loading user asked modules only and rely on the dependency mechanism. Doing so, the loaded module list that need to be reloaded is kept as it is exactly reloaded one by one. * modulecmd.tcl.in, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/197-load-lots.exp, testsuite/modules.50-cmds/340-modvar.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/371-deps2.exp: Unload/load dep mod one by one in reloadDepLoadedModuleList Like for reload command, change reloadDepLoadedModuleList to unload then reload dependent module list one by one rather unloading/loading user asked modules only and rely on the dependency mechanism. Doing so, the loaded module list that need to be reloaded is kept as it is exactly reloaded one by one. No more need to mark currently loaded module as 'user asked' to avoid it to be reloaded during reloadDepLoadedModuleList, since we now proceed one by one. Remove setModuleUserAsked and unsetModuleUserAsked procedures now they are useless. 2018-06-07 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: No auto unload/load on restore/purge/reload Call cmdModuleUnload with autounload of leaf dependencies disabled when performing a restore, purge or reload command. So it gets same unload behavior (processing each module one by one in specified order) whatever the auto_handling state. Then reload module one by one on restore and reload commands whatever the auto_handling state to follow the same principle. * modulecmd.tcl.in: Add autounload arg to cmdModuleUnload Control the automatic unload attempt of leaf requirements, once mod has been unloaded, with an 'autounload' argument on cmdModuleUnload proc. * testsuite/modulefiles.deps/aa, testsuite/modulefiles.deps/ab, testsuite/modulefiles.deps/ac, testsuite/modulefiles.deps/ad, testsuite/modulefiles.deps/ae, testsuite/modulefiles.deps/af, testsuite/modulefiles.deps/ag, testsuite/modulefiles.deps/ah, testsuite/modulefiles.deps/ai, testsuite/modulefiles.deps/aj, testsuite/modulefiles.deps/ak, testsuite/modulefiles.deps/bf, testsuite/modulefiles.deps/bi, testsuite/modulefiles.deps/bj, testsuite/modulefiles.deps/bk, testsuite/modules.50-cmds/371-deps2.exp: ts: add 50-cmds/371-deps2 tests 2018-06-04 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Add sortPerModuleLoadedOrder proc Add sortPerModuleLoadedOrder procedure to sort passed module list following the module loaded order. * modulecmd.tcl.in: Rework code to get unload autoloaded mods when no more req Add getRequiredLoadedModuleList proc to return all loaded modules in the requirement list of passed mod. This proc is called once mod has been unloaded, prior to the deletion of these requirement info in cmdModuleUnload. Add getUnloadableLoadedModuleList proc, to return the modules that have been automatically loaded and could now be automatically unloaded, as no more modules requires them (mandatory or optionaly). This proc takes the result of getRequiredLoadedModuleList as input. 2018-06-01 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Gets dep modules with getDependentLoadedModuleList proc Introduce the 'getDependentLoadedModuleList' procedure to retrieve the currently loaded modules that require the mod passed as argument. By default only strong dependencies are returned (loaded modules directly depending on passed mod and not having an alternative module loaded to satisfy their prereq). When non-strong dependencies are asked, 'depended by' dependencies are searched recursively to return all loaded modules linked to passed module. This new 'getDependentLoadedModuleList' procedure relies on the global arrays managed by setModuleDependency procedure. It replaces both getDepLoadedModuleList and getActiveDepLoadedModuleList procedures. 2018-05-30 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Move deps-related procs near similar oth procs * modulecmd.tcl.in: Build and maintain dep chain between loaded mod Introduce setModuleDependency and unsetModuleDependency procedures to build and maintain global arrays representing the dependency chain between loaded modulefiles based on the prereqs defined by each of these modules. setModuleDependency is called when module is loaded or current environment state is analyzed (called by setLoadedModule). unsetModuleDependency is called when module is unloaded (called by unsetLoadedModule). The g_moduleDepend array is set for each loaded module as a mirror of their relative definition in g_loadedModulePrereq, where module reference in the prereq definition is replaced by the name of the actual loaded modulefile matching the module reference. When a module reference of a prereq definition has no match among the currently loaded modulefiles, this unmet dependency is registered instead in the g_moduleUnmetDep global array. This situation happens when an optional dependency is not satisfied or if the load of a module has been forced (no dependency loaded prior to the load of the asked module). Reverse arrays are also set (g_dependHash and g_unmetDepHash) to easy the search of registered elements. When a new module is loaded, setModuleDependency looks if this new module was previously set as an unmet dependency. If it is the case, update dependent loaded modules dependency definition now the unmet dep is satisfied. 2018-05-27 Xavier Delaruelle <[email protected]> * testsuite/modulefiles.deps/a, testsuite/modulefiles.deps/b, testsuite/modulefiles.deps/c, testsuite/modulefiles.deps/d, testsuite/modulefiles.deps/e, testsuite/modulefiles.deps/f, testsuite/modulefiles.deps/g, testsuite/modulefiles.deps/h, testsuite/modulefiles.deps/i, testsuite/modulefiles.deps/j, testsuite/modulefiles.deps/k, testsuite/modulefiles.deps/l, testsuite/modulefiles.deps/m, testsuite/modulefiles.deps/n, testsuite/modulefiles.deps/o, testsuite/modulefiles.deps/p, testsuite/modulefiles.deps/q, testsuite/modulefiles.deps/r, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/370-deps.exp: ts: add 50-cmds/370-deps tests * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp, .../modules.50-cmds/132-conflict-fullpath.exp: ts: add procs to format conflict/prereq err msg * .travis.yml: travis: enable autohandling on one test config * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp: ts: clean new MODULES_LM* env vars at ts startup * testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp: ts: adapt prereq tests if autohandling is enabled 2018-05-26 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Rework mod user asked internal handling Change module user asked internal handling (registering/unregistering in global structures) to get similar handling than loaded module list. Rename g_lmUasked into g_loadedModuleUasked to get closer to the name used for conflicts and prereqs registration. Primarily sets g_loadedModuleUasked through setLoadedModule procedure and unsets through unsetLoadedModule. Add isModuleUserAsked procedure to check if passed mod has been asked by user. Temporarily add setModuleUserAsked and unsetModuleUserAsked procedures to set/unset g_loadedModuleUasked array, for use around reloadDepLoadedModuleList call in cmdModuleLoad. * modulecmd.tcl.in: Clean currentModule var from cmdModule{Load,Unload} procs 2018-05-11 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: No uasked found on current env means all are uasked When looking at the current environement state in cacheCurrentModules procedure, if no user asked modules are found then all loaded modules are user asked modules. Helps transition between a Modules version not knowing about 'user asked' modules and a newer Modules version introducting this tracking feature. Environment setup on the previous Modules version will still be functionnal if newer Modules version is upgraded live. * modulecmd.tcl.in: Ignore '--notuasked' flag in case it is passed on module load --notuasked flag enables to keep track of the user asked state in saved collection (by flagging those not directly asked by user). Ignore it if passed directly to a 'module load' command (do not raise error) in case a collection file is sourced like a shell script. Do not advertise this new flag as it has no effect and should be kept internal as user asked mechanism is automatically controlled from the location the module load command is issued. * modulecmd.tcl.in: No uasked found in collection means all are usaked If none of the loaded modules found in collection is marked 'user asked', this means all modules saved are user asked to make collections saved prior to the user asked change still valid on new Modules version. * modulecmd.tcl.in: Track user asked loaded modules whatever auto_handling state Keep track of the loaded modules asked by user whether the auto_handling option is enabled or disabled. A loaded module has been asked by user when its load order is coming from the user not from the evaluation of a modulefile. Keeping track of this state in any cases will help to introduce per-module command automatic handling. Also saved collections do not break when auto_handling is enabled or disabled on Modules installation afterward. An 'uasked' first position argument is set on cmdModuleLoad procedure to pass the user asked state. cmdModuleReload is reworked to correctly restore the user asked state for each module unloaded in its first operation phase. cmdModuleSwitch always sets the module it loads as user asked. Should be discussed later on in conjunction with the behavior of this sub-command when called from a modulefile. Collections sub-commands and related utility procedures have been reworked to save and restore the non-'user asked' state of the loaded modules. Non-'user asked' state is recorded rather 'user asked' state to fit collection saved prior to this change were every modules mentionned in collection are considered 'user asked'. When restoring a collection currently loaded modules are unloaded to be loaded again even if they got same loading position than in collection but a different user asked state. Non-user asked state is saved in collection by adding the '--notuasked' argument on recorded module load lines. 2018-05-10 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Register conflict/prereq/usaked whatever auto_handling state Get, set and export in environment loaded modules declared conflicts, prereqs and their 'user asked' state whether the auto_handling option is enabled or not. Keep g_auto_handling to control automated actions but information registering is perfomed in any cases. Will help to introduce per-module command automatic handling and by-pass mechanism, still keeping a consistent intel. * modulecmd.tcl.in: Initial rework of mod prereq internal handling Change module prereq internal handling (registering/unregistering in global structures) to get similar handling than loaded module list. Rename g_lmPrereq into g_loadedModulePrereq. Remove ModulesCurrentPrereq global list, that were registering the prereq list of the currently evaluated module. Now directly registers into g_loadedModulePrereq. If evaluation goes wrong and is aborted, then prereqs registered in g_loadedModulePrereq are unregistered to correctly restore state prior evaluation. Introduce set, unset and get accessors for the g_modulesPrereq array. getLoadedPrereq is also able to return its result serialized to manage MODULES_LMPREREQ environment variable. 2018-05-09 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Rework mod conflict internal handling Change module conflict internal handling (registering/unregistering in global structures) to get similar handling than loaded module list. Rename g_lmConflict into g_loadedModuleConflict. Remove ModulesCurrentConflict global list, that were registering the conflict list of the currently evaluated module. Now directly registers into g_loadedModuleConflict, to be able to check only one structure to get both loaded and loading defined conflicts. If evaluation goes wrong and is aborted, then conflicts registered in g_loadedModuleConflict are unregistered to correctly restore state prior evaluation. Introduce set, unset and get accessors for the g_loadedModuleConflict array. getLoadedConflict is also able to return its result serialized to manage MODULES_LMCONFLICT environment variable. A doesModuleConflict procedure is also added to return whether or not passed module conflicts with currently defined rules. 2018-05-08 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Parse MODULES_LMUASKED with getLoadedModuleUserAskedList proc * modulecmd.tcl.in: Parse MODULES_LMPREREQ with getLoadedModulePrereqList proc * modulecmd.tcl.in: Parse MODULES_LMCONFLICT with getLoadedModuleConflictList proc * modulecmd.tcl.in: Rename g_def_separator_lvl{2,3} in g_sub{1,2}_separator And normalize access to these global variables (using $::varname). 2018-05-07 Xavier Delaruelle <[email protected]> * INSTALL.rst, Makefile, Makefile.inc.in, configure, modulecmd.tcl.in, site.exp.in: install: add --enable-auto-handling configure opt Enable or disable the automatic modulefile handling at configure time with '--enable-auto-handling' option. Disabled by default, will be set enbaled by default in next major release (v5). Throw this configure information to the testsuite to adapt result depending of feature enablement. 2018-05-06 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Set g_auto_handling as g_orig_load_control+g_auto_resolve_dep Gather all automatic module handling features enablement under a single g_auto_handling global variable, rather g_orig_load_control and g_auto_resolve_dep. Automated actions are all enabled or all disabled to simplify tests and configurations. * testsuite/modules.00-init/006-procs.exp, testsuite/modules.00-init/071-args.exp, testsuite/modules.10-use/040-load.exp, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/035-defname.exp, testsuite/modules.20-locate/038-defcontext.exp, testsuite/modules.20-locate/040-alias.exp, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.20-locate/046-getsym.exp, testsuite/modules.20-locate/047-symerrs.exp, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.20-locate/075-symlink.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/020-setenv.exp, testsuite/modules.50-cmds/022-setenv-eschars.exp, testsuite/modules.50-cmds/025-setenv-undo.exp, testsuite/modules.50-cmds/028-setenv-refcount.exp, testsuite/modules.50-cmds/029-setenv-env.exp, testsuite/modules.50-cmds/030-unsetenv.exp, testsuite/modules.50-cmds/035-unsetenv-undo.exp, testsuite/modules.50-cmds/036-unsetenv-x.exp, .../modules.50-cmds/038-unsetenv-refcount.exp, testsuite/modules.50-cmds/039-unsetenv-env.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/049-append-env.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/059-prepend-env.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/069-remove-env.exp, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/076-alias-sub.exp, testsuite/modules.50-cmds/077-alias-undo.exp, testsuite/modules.50-cmds/078-refresh.exp, testsuite/modules.50-cmds/080-info-name.exp, testsuite/modules.50-cmds/081-info-user.exp, testsuite/modules.50-cmds/082-info-user-exp.exp, testsuite/modules.50-cmds/083-info-mode.exp, testsuite/modules.50-cmds/084-info-mode-exp.exp, testsuite/modules.50-cmds/085-info-flags.exp, testsuite/modules.50-cmds/086-info-shells.exp, testsuite/modules.50-cmds/087-info-shells-exp.exp, testsuite/modules.50-cmds/088-info-isloaded.exp, testsuite/modules.50-cmds/089-info-type.exp, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/100-loglevel.exp, testsuite/modules.50-cmds/101-badfac.exp, testsuite/modules.50-cmds/105-trace.exp, testsuite/modules.50-cmds/110-verbose.exp, testsuite/modules.50-cmds/115-verbose-msg.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp, .../modules.50-cmds/132-conflict-fullpath.exp, testsuite/modules.50-cmds/140-system.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/172-swap-app-delim.exp, testsuite/modules.50-cmds/173-swap-app-delim.exp, testsuite/modules.50-cmds/175-swap2.exp, testsuite/modules.50-cmds/177-swap-prep-delim.exp, testsuite/modules.50-cmds/178-swap-prep-delim.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/195-load-recurs.exp, testsuite/modules.50-cmds/197-load-lots.exp, testsuite/modules.50-cmds/200-break.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/220-continue.exp, testsuite/modules.50-cmds/230-loop.exp, testsuite/modules.50-cmds/240-chdir.exp, testsuite/modules.50-cmds/250-x-resource.exp, testsuite/modules.50-cmds/260-getenv.exp, testsuite/modules.50-cmds/269-getenv-env.exp, testsuite/modules.50-cmds/280-info-specified.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.50-cmds/285-info-loaded.exp, testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.50-cmds/301-interp-command.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.50-cmds/310-puts.exp, testsuite/modules.50-cmds/320-is-saved.exp, testsuite/modules.50-cmds/321-is-used.exp, testsuite/modules.50-cmds/322-is-avail.exp, testsuite/modules.50-cmds/330-source.exp, testsuite/modules.50-cmds/340-modvar.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/359-allin-env.exp, testsuite/modules.50-cmds/360-restoreenv.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/080-access.exp, testsuite/modules.70-maint/020-update.exp, testsuite/modules.70-maint/030-purge.exp, testsuite/modules.70-maint/050-whatis-load.exp, testsuite/modules.70-maint/140-multiargs.exp, testsuite/modules.70-maint/180-reload.exp, testsuite/modules.70-maint/190-emptyarg.exp, testsuite/modules.80-deep/020-load.exp, testsuite/modules.80-deep/021-unload.exp, testsuite/modules.80-deep/022-switch.exp, testsuite/modules.80-deep/068-transitive.exp, testsuite/modules.80-deep/080-access.exp, testsuite/modules.91-sort/040-load.exp, testsuite/modules.95-version/020-load.exp, testsuite/modules.95-version/020-unload.exp, testsuite/modules.95-version/022-load2.exp, testsuite/modules.95-version/022-unload2.exp, testsuite/modules.95-version/040-xgetenv.exp: ts: adapt test results for asked mod registration 2018-05-05 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Register module asked for load in MODULES_LMUASKED Change name of the environment variable used to register the names of modules explicitely asked for load by user (not loaded automatically as dependency): from _LMSTICKY_ to MODULES_LMUASKED in order to get a MODULES_ common prefix for all Modules-specific environment variables. 2014-05-13 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Introducing automatic module dependency resolution Introduce an automatic module dependency resolution by attempting during a "module load" to load modules declared as prereq and attempting during a "module unload" to unload modules declared as prereq if they have been loaded automatically. To distinguish between modules loaded upon user request or automatically for dependency resolution, module load requested by user are registered as "sticky" in _LMSTICKY_ environment variable. Additionnally all switched modules are considered sticky. Module commands managing the whole set of loaded modules (save, restore, purge and reload) have been adapted to only work over the sticky modules to take benefit from the dependency resolution. Moreover, when reloading modules declaring a prereq during a switch, load or unload action, only sticky modules are reloaded. Original dependency management behavior is preserved by default. Automatic dependency resolution can be enabled by setting to 0 the g_auto_resolve_dep variable in modulecmd.tcl script. 2018-04-27 Xavier Delaruelle <[email protected]> * testsuite/modules.00-init/006-procs.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/350-allin.exp: ts: adapt test results for prereq registration 2018-04-26 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Register declared prereq in MODULES_LMPREREQ Change name of the environment variable used to register prereqs declared by loaded modules: from _LMPREREQ_ to MODULES_LMPREREQ in order to get a MODULES_ common prefix for all Modules-specific environment variables. 2014-04-27 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Registering prereq of loaded modules to ensure they are satisfied When defining a prereq with module "b" in module "a", this prereq is not satisfied when module "b" is unloaded whereas module "a" is still loaded. It seems interesting to guaranty that prereq modules cannot be unloaded if modules requiring them are still loaded. To do so, this patch introduces the registration of the prereq declared by loaded modules in _LMPREREQ_ environment variable. Checks have been added to cmdModuleUnload procedure to forbid the unload of modules targeted by a registered prereq. In case of a switch action, all modules declaring a prereq on the switched module are reloaded. cmdModuleSwitch procedure first unloads the modules declaring prereq, then proceed switch as usual and after that loads again the modules declaring prereq. Similarly to switch action, modules declaring an optional prereq on a module are reloaded when this module is loaded or unloaded. cmdModuleLoad and cmdModuleUnload procedures reload the modules declaring prereq after their main load/unload process to avoid reloading modules whereas prereq-module fails to load/unload. Original load control behavior is preserved by default. New behavior can be enabled by setting to 0 the g_orig_load_control variable in modulecmd.tcl script. 2018-04-25 Xavier Delaruelle <[email protected]> * testsuite/modules.00-init/006-procs.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp, testsuite/modules.50-cmds/132-conflict-fullpath.exp, testsuite/modules.50-cmds/195-load-recurs.exp, testsuite/modules.80-deep/020-load.exp, testsuite/modules.80-deep/022-switch.exp, testsuite/modules.80-deep/080-access.exp: ts: adapt test results for conflict registration * modulecmd.tcl.in: Register declared conflict in MODULES_LMCONFLICT Change name of the environment variable used to register conflicts declared by loaded modules: from _LMCONFLICT_ to MODULES_LMCONFLICT in order to get a MODULES_ common prefix for all Modules-specific environment variables. 2014-03-19 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Registering conflict of loaded modules to ensure they are satisfied When defining a conflict with module "b" in module "a", this conflict is not satisfied when loading module "b" unless this module defines a conflict with "a". Since it happens that modules "a" and "b" are not managed by the same people, it seems interesting to guaranty that conflicts defined by loaded modules are always satisfied. To do so, this patch introduces the registration of the conflict declared by loaded modules in _LMCONFLICT_ environment variable. Checks have been added to cmdModuleLoad procedure to forbid the load of modules targeted by a registered conflict. Since modulefile may directly call module load, an is-loading procedure has been introduced to also ensure that current module will not be loaded if it defines a conflict toward a module which is currently loading. Original load control behavior is preserved by default. New behavior can be enabled by setting to 0 the g_orig_load_control variable in modulecmd.tcl script. 2018-07-15 Xavier Delaruelle <[email protected]> * Makefile: install: simplify RPM release number generation Just append current build number to previous RPM release number, rather making a complex and too much specific computation. Thanks to Michael Sternberg (@mgsternberg) for challenging the way this numbering generation worked. Fixes #175 2018-07-13 Xavier Delaruelle <[email protected]> * INSTALL.rst, Makefile, configure: install: use sed rather grep and cut Use sed command rather a combination of grep and cut in 'configure' and 'Makefile' scripts. As a result grep and cut commands are not required anymore to install new Modules releases. However, grep is still required to install compatibility version. Big thanks to Michael Sternberg (@mgsternberg) for crafting the right sed commands to achieve a more efficient installation process. Fixes #175 * init/ksh.in: init: fix ksh script for ksh88 compatibility Fix a ksh88 incompatible assignment and use '.' rather 'source' to source external script. Fixes #159 * modulecmd.tcl.in, testsuite/modulefiles/loc_rc010/.1.0, testsuite/modulefiles/loc_rc010/.modulerc, testsuite/modulefiles/loc_rc010/2.0, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.90-avail/070-full.exp: Handle default version sets on an hidden modulefile When looking for the default version of a given modulefile, if this default is set on an hidden modulefile, this hidden modulefile were not found as the initial modulefile search were not looking for hidden modulefiles. When this situation is now spotted, modulefile search is started again with inclusion of hidden files. Add a test for this situation in 20-locate/067-hidden. Fixes #177 * init/bash_completion.in, init/zsh-functions/_module: init: enable ERE on sed with '-E' argument rather '-r' When enabling Extended Regular Expression (ERE) on sed command, use the '-E' argument (rather '-r') for compatibility with OS X's and BSDs' sed. 'sed -E' is used in bash and zsh completion scripts. ERE are required to interpret alternation character '|'. Fixes #178 2018-07-01 Xavier Delaruelle <[email protected]> * doc/source/modulefile.rst: doc: state in modulefile(4) getenv should be pref. over ::env 2018-06-30 Xavier Delaruelle <[email protected]> * Makefile, Makefile.inc.in, configure: install: relax GNU grep requirement constraint Rely on regular grep options rather grep -P to better cope with OSes where BSD grep is available by default. 2018-06-18 Xavier Delaruelle <[email protected]> * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version 4.1.3 2018-06-17 Xavier Delaruelle <[email protected]> * init/profile.sh.in: Detect shell with variables in profile.sh script To improve shell detection code that until now was relying on a parent process name check, some shell variables will be used to determine the current shell name. $BASH and $ZSH_NAME variables will be looked at if defined to determine calling shell name. Doing so will avoid some external command call when running bash or zsh. Also if people source /etc/profile script in their own bash or zsh script it will correctly determine calling shell name, as parent process in this case is the script name. Cannot determine shell name on ksh with a variable due to the lack of a consistent detection mechanism across all ksh flavors [1]. Fixes #173 [1] https://books.google.fr/books?id=53zaxy423xcC&pg=PA161 2018-05-25 Xavier Delaruelle <[email protected]> * doc/source/diff_v3_v4.rst: doc: env var definition during a whatis mode eval 2018-05-24 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modulefiles.deep/moddalias/.modulerc, testsuite/modulefiles.deep/moddalias/dir1/1, testsuite/modulefiles.deep/moddalias/dir2/.ignored, testsuite/modules.80-deep/010-init_ts.exp, testsuite/modules.80-deep/020-load.exp, testsuite/modules.80-deep/021-unload.exp, testsuite/modules.80-deep/030-display.exp, testsuite/modules.80-deep/050-whatis.exp, testsuite/modules.80-deep/999-cleanup.exp, testsuite/modules.90-avail/070-full.exp: If subdir is empty do not update parent dir if overwritten During a modulefile lookup in getModules, directory definitions are updated if some empty directories are found in them. Do not attempt this directory definition update when finding an empty directory if parent directory has been overwritten by an alias definition for instance. Fixes #170 2018-05-23 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modulefiles.allin/allenvchg/1, testsuite/modulefiles.allin/allenvchg/2, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/359-allin-env.exp: Setenv on unload mode set var to val in interp context Interpreting a setenv modulefile order during an unload evaluation, variable is still set to be unset in generated shell code but it is set to the value defined on the setenv order in the interpreter context instead of being cleared. This change is made to recover and improve behavior of compat version and previous version of modulecmd.tcl where variable's value found in environment were not touch in interpreater context. This is useful when using environment variable value to append/prepend-path another variable. This change enables to correctly unset this other variable on an unload evaluation. Was previously not unset since the first variable used to edit the second was found cleared. This change is currently limited to the setenv order and does not apply to the prepend-path and append-path, where during an unload evaluation variable value part is removed from variable also in interpreter context. Need to distinguish value in interpreter context from value to set in shell output code to also apply this mechanism to path edition modulefile orders. 2018-05-20 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/bin/install_test_sh, testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/020-module.exp, testsuite/modulefiles/alias/3.0, testsuite/modules.00-init/006-procs.exp, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/076-alias-sub.exp, testsuite/modules.90-avail/070-full.exp: Define shell alias with special chars escaped When producing code to output shell alias definition, escaping of special characters was missing until now in renderSettings procedure. Code to bake shell alias has been fixed to work in a similar way than for environment variable with full range of shell special characters escaped. Translation of $n/$* in !!:n/!* on csh-like shells is maintained for compatibility with v3. To improve this compatibility, a \ prior to $ disables translation on csh (like with v3), then after \$ is translated in $ for all shells. Adapt testsuite to use value escaping over expected output result for shell alias (like done for environment variable). Adapt consequently all shell alias tests in 50-cmds/07*. Add test in 50-cmds/076-alias-sub to demonstrate escaping of complex shell alias. Use modulefile from this new test within install testsuite to garanty shell alias produce is effective on shell sessions. Check availability of tools used by this alias (grep, tr, awk) to determine if install test can be launched on current system. Fixes #165 * testsuite/modules.00-init/006-procs.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/150-append-path.exp, testsuite/modules.70-maint/151-prepend-path.exp, testsuite/modules.70-maint/152-remove-path.exp: ts: fix special chars escaping code in values Add more special characters to the escaping list for regular shells. And fix code to over escape special characters relative to regular expression when regexp mode is enabled. * testsuite/bin/install_test_sh, testsuite/install.00-init/040-subshell.exp: ts: fix word splitting for zsh test in install suite 2018-05-19 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Quote csh generated code to pass it to eval Brace modulecmd.tcl call in module csh alias with quotes to pass quoted content to the shell evaluation. Use :q modifier on !* to escape quotes passed as arguments to the module command * init/bash.in, init/ksh.in, init/sh.in, init/zsh.in: init: init/export _module_raw if stderr attached to term To get coherent with the test made by modulecmd.tcl to determine if autoinit sub-command has to produce code for the '_module_raw' shell function, export this function (or initialize it on compat mode) if stderr is attached to a terminal. Was previously testing stdout, whereas modulecmd.tcl is checking stderr, which led to inconsistencies as described in [1]. Fixes #169 [1] https://bugzilla.redhat.com/show_bug.cgi?id=1575479 2018-05-17 Xavier Delaruelle <[email protected]> * contrib/guide/get_started/00-cleanup.sh, contrib/guide/get_started/01-modulepath-modulerc.sh, .../guide/get_started/02-first_module-install.sh, contrib/guide/get_started/03-first_module-bar.sh, contrib/guide/get_started/04-second_modulefile.sh, contrib/guide/get_started/05-more_modulefile-foo.sh, .../guide/get_started/06-more_modulefile-share.sh, .../guide/get_started/07-guide_modulefile_search.sh, .../get_started/08-guide_modulefile_search-alias.sh, contrib/guide/get_started/09-global_modulerc.sh, contrib/guide/get_started/10-restrict_visibility.sh, contrib/guide/get_started/11-restore_visibility.sh, contrib/guide/get_started/12-datadir-create.sh, contrib/guide/get_started/13-datadir-common.sh, contrib/guide/get_started/14-datadir-versions.sh, contrib/guide/get_started/15-datadir-virtual.sh, contrib/guide/get_started/16-conflict.sh, contrib/guide/get_started/17-prereq.sh, contrib/guide/get_started/18-collection-target.sh, contrib/guide/get_started/19-siteconfig.sh, contrib/guide/get_started/README, contrib/guide/get_started/test.py: contrib: add scripts from upcoming 'get started' guide 2018-05-15 Xavier Delaruelle <[email protected]> * MIGRATING.rst, doc/source/module.rst, modulecmd.tcl.in, testsuite/config/unix.exp, testsuite/modules.00-init/071-args.exp: Args should be passed as list not single string Update documentation for module usage on scripting language like Perl or Python to provide examples where arguments are passed as a list of string rather a single string. For compatibility with previously advertised examples, first argument is splitted if multiple word are detected in it. 2018-05-03 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Clean unneeded global variable set in slave interp * modulecmd.tcl.in: Pass cur itrp ref in initInterpCommands to aliases needing it Sets in initInterpCommands procedure interpreter reference as first argument to interpreter alias requiring it, rather doing it in initModfileModeAliases where actual interpreter reference is not known (as this procedure is called at first time a mode-specific interp is created, but not on subsequent times when another interp of same mode but working in a nested level is build up). Now initModfileModeAliases defines a specific __itrp__ keyword to let initInterpCommands know that the argument to pass to the alias to define is the actual interp reference. * modulecmd.tcl.in, testsuite/modules.70-maint/080-help.exp: Add getEvalModuleStackDepth to learn nb of mod in eval Get the number of either modulerc/modulefile currently being evaluated (nested evaluation) with a new procedure called getEvalModuleStackDepth, relying on the number of element of the g_moduleNameStack global list. Use this new procedure rather [info level] to determine if module procedure is called at top level or not and to determine the slave interpreter to use (an interpreter is reused to evaluate a modulefile from same evaluation nested level). Gives a more precise information on modulefile evaluation depth level than [info level] which reflects Tcl procedure call stack depth. * .travis.yml: travis: test --enable-append-{bin,man}path configure opts * INSTALL.rst, Makefile.inc.in, configure, init/Makefile, init/bash.in, init/csh.in, init/fish.in, init/ksh.in, init/sh.in, init/zsh.in: install: add --enable-append-{bin,man}path configure opts Add the ability to append rather prepend the man or bin directory when adding these directory to the relative environment variable is enabled (with --enable-set-manpath or --enable-set-binpath). Takes the form of 2 new configure options: --enable-append-manpath and --enable-append-binpath. No effect if set but relative --enable-set-{bin,man}path option is unset or disabled. 2018-05-02 Xavier Delaruelle <[email protected]> * init/bash.in, init/ksh.in, init/sh.in, init/zsh.in, modulecmd.tcl.in, testsuite/install.00-init/010-environ.exp, testsuite/modules.70-maint/120-autoinit.exp: Rename _moduleraw shell func in _module_raw To use a common _module_ prefix for all module-related internal shell functions as suggested by Paul FM [1]. [1] https://sourceforge.net/p/modules/mailman/message/36230667/ * modulecmd.tcl.in: Call runModulerc within module proc at top level Call runModulerc, to find and execute any global rc file found, within module procedure once module sub-command is known and registered. This way global rc file can learn the current command processed. 2018-05-01 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Use getModuleNameVersion in execute-modulerc to get mod details * modulecmd.tcl.in: Track sourced rc files in getModules rather execute-modulerc Handle g_rcfilesSourced global array that track sourced rc files in getModules procedure rather execute-modulerc procedure. This way only call execute-modulerc procedure if rc file has not yet been sourced. It saves a lot of procedure call especially in case of global query command like whatis, where initial global findModules result is re-used for each sub-query raised during modulefile evaluation. 2018-03-29 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Cache findModules results Introduce a memory cache for the results build up by findModules procedure. Done in order to reuse these results if next searches are compatible instead of re-walking the filesystem. A cached result may be used by a search looking for a subset of this result. For instance searching for modules 'foo' in '/path/to/dir' may use the cache result saved after the search of '*' modules in 'path/to/dir'. This superset result is then filtered-out whithin the getModules procedure. 2018-04-30 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Fix resetInterpState to restore empty string value Useful to restore initial value of ::errorCode and ::errorInfo. * modulecmd.tcl.in: Set reportDebug as nop proc when debug is disabled Define in initErrorReport the reportDebug procedure as a no-operation procedure to optimize operations whether debugging is enabled or not. * modulecmd.tcl.in, testsuite/modules.50-cmds/359-allin-env.exp: Set *setenv cmds as init-if-undef proc on whatis mode Define a specific procedure for the setenv and unsetenv commands on a whatis evaluation mode: setenv-wh. This procedure checks the environment variable targeted by the command and initialize it as an empty string if undefined. Proceed this way to reduce the total amount of time of a whatis query but still initializing variables if undefined to avoid 'undefined variable' errors during evaluation if environment variable value are referred to later in modulefile. Value set to variable are not the correct one (no value set if variable defined, empty string set if variable is undefined) but it should not affect the whatis query as only the 'module-whatis' commands are valuable in this mode. * modulecmd.tcl.in, testsuite/modules.50-cmds/359-allin-env.exp: Set *-path cmds as init-if-undef proc on whatis mode Define a specific procedure for the append-path, prepend-path and remove-path commands on a whatis evaluation mode: edit-path-wh. This procedure checks the environment variable targeted by the command and initialize it as an empty string if undefined. Proceed this way to reduce the total amount of time of a whatis query but still initializing variables if undefined to avoid 'undefined variable' errors during evaluation if environment variable value are referred to later in modulefile. Value set to variable are not the correct one (no value set if variable defined, empty string set if variable is undefined) but it should not affect the whatis query as only the 'module-whatis' commands are valuable in this mode. 2018-04-27 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Fallback on split/join in psplit/pjoin if no sep char found Achieve better performances in most cases (as separator character is usualy not used) 2018-04-24 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Remove unneeded g_inhibit_dispreport As modulefile commands do not handle anymore their display-mode report, display report inhibition for modulerc evaluation is not needed anymore. * modulecmd.tcl.in, testsuite/modulefiles.allin/allin/1, testsuite/modulefiles.allin/allin/3, testsuite/modulefiles.allin/allin/4, testsuite/modulefiles.other/modemptyarg/apropos, testsuite/modulefiles.other/modemptyarg/avail, testsuite/modulefiles.other/modemptyarg/whatis, testsuite/modulefiles/modbad/append-path, testsuite/modulefiles/modbad/autoinit, testsuite/modulefiles/modbad/empty, testsuite/modulefiles/modbad/foo, testsuite/modulefiles/modbad/help, testsuite/modulefiles/modbad/info-loaded, testsuite/modulefiles/modbad/is-avail, testsuite/modulefiles/modbad/is-loaded, testsuite/modulefiles/modbad/is-saved, testsuite/modulefiles/modbad/is-used, testsuite/modulefiles/modbad/path, testsuite/modulefiles/modbad/paths, testsuite/modulefiles/modbad/prepend-path, testsuite/modulefiles/modbad/remove-path, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.50-cmds/330-source.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.80-deep/030-display.exp: Move 'module' to the per-mode evaluation interp 'module' modulefile command targets module procedure on load and unload modes of modulefile evaluation. reportCmd is targeted on display mode. For other modes a nop is targeted. 'module' command is now disabled on help, test and whatis mode which stabilizes evaluation on these modes. On Modules v3, module command was also disabled on all these query evaluation modes. 2018-04-23 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.50-cmds/350-allin.exp: Move 'x-resource' to the per-mode evaluation interp 'x-resource' modulefile command targets x-resource procedure on load and unload modes of modulefile evaluation. reportCmd is targeted on display mode. For other modes a nop is targeted. * modulecmd.tcl.in: Move 'module-virtual' to the per-mode evaluation interp 'module-virtual' modulefile command targets module-virtual procedure on every mode of modulefile evaluation. * modulecmd.tcl.in: Move 'module-alias' to the per-mode evaluation interp 'module-alias' modulefile command targets module-alias procedure on every mode of modulefile evaluation. * modulecmd.tcl.in: Move 'module-version' to the per-mode evaluation interp 'module-version' modulefile command targets module-version procedure on every mode of modulefile evaluation. * modulecmd.tcl.in, testsuite/modules.20-locate/035-defname.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/140-multiargs.exp, testsuite/modules.70-maint/170-contact.exp: Brace empty or whitespace-containing arg on reportCmd reportCmd processes the argument list of the called command to brace empty arguments or arguments containing whitespace character. Makes visible for a human eye the limit of each parameter (especially for empty strings). * modulecmd.tcl.in, testsuite/modules.50-cmds/039-unsetenv-env.exp, testsuite/modules.50-cmds/069-remove-env.exp, testsuite/modules.50-cmds/140-system.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/359-allin-env.exp, testsuite/modules.70-maint/140-multiargs.exp: Trace exec to reportCmd on display mode enabled cmds For those commands enables on display mode (commands that are also run on this mode, not only reported, like */*-path commands): use an execution trace (at leave step) to call for the report commands after running the enabled procedure. With this change these enabled-on-display commands do not have to handle their display reporting anymore. Current evaluation mode can now be ignored by these procedures. The reportCmdTrace procedure is introduced to be set as the execution trace procedure in case alias command for modulefile interp is not set to reportCmd on a display evaluation mode. As a side effect of this change, commands are reported even if their execution raise an error (helps to see the command line along with raised error message). 2018-04-21 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Refactor code of getenv command Same kind of debug message or mode test than used in other modulefile command procedures. g_inhibit_dispreport test is not needed as getenv cannot be reached from a modulerc evaluation 2018-04-20 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.70-maint/070-display.exp: Move '*-path' to the per-mode evaluation interp 'append-path' modulefile command targets append-path procedure on every mode of modulefile evaluation except unload mode where remove-path is targeted. append-path procedure is called on all these modes to perform variable set for later use of this variable during the modulefile evaluation. 'prepend-path' modulefile command targets prepend-path procedure on every mode of modulefile evaluation except unload mode where remove-path is targeted. prepend-path procedure is called on all these modes to perform variable set for later use of this variable during the modulefile evaluation. 'remove-path' modulefile command targets remove-path procedure on every mode of modulefile evaluation except unload mode where remove-path-un is targeted. remove-path procedure is called on all these modes to perform variable set/unset for later use of this variable during the modulefile evaluation. remove-path-un procedure is used on unload mode to clear variable if currently unset for later use of this variable during eval. * modulecmd.tcl.in, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/055-locrcerrs.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.20-locate/075-symlink.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.20-locate/081-access-rc.exp, testsuite/modules.50-cmds/029-setenv-env.exp, testsuite/modules.50-cmds/039-unsetenv-env.exp, testsuite/modules.50-cmds/049-append-env.exp, testsuite/modules.50-cmds/059-prepend-env.exp, testsuite/modules.50-cmds/069-remove-env.exp, testsuite/modules.50-cmds/140-system.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/260-getenv.exp, testsuite/modules.50-cmds/269-getenv-env.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.50-cmds/310-puts.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/359-allin-env.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/170-contact.exp, testsuite/modules.80-deep/080-access.exp: Move '*setenv' to the per-mode evaluation interp 'setenv' modulefile command targets setenv procedure on every mode of modulefile evaluation except unload mode where setenv-un is targeted. setenv procedure is called on all these modes to perform variable set for later use of this variable during the modulefile evaluation. setenv-un procedure is used on unload mode to call unsetenv with the correct argument list. 'unsetenv' modulefile command targets unsetenv procedure on every mode of modulefile evaluation except unload mode where unsetenv-un is targeted. unsetenv procedure is called on all these modes to perform variable set/unset for later use of this variable during the modulefile evaluation. unsetenv-un procedure is used on unload mode to call setenv or unsetenv depending on the value passed or not as argument. 2018-04-19 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.70-maint/070-display.exp: Move '*set-alias' to the per-mode evaluation interp 'set-alias' modulefile command targets set-alias procedure on load mode of modulefile evaluation. set-alias-un is targeted on unload mode. reportCmd is targeted on display mode. For other modes a nop is targeted. set-alias-un procedure is used on unload mode to call unset-alias with the correct argument list. 'unset-alias' modulefile command targets unset-alias procedure on load mode of modulefile evaluation. reportCmd is targeted on display mode. For other modes a nop is targeted. * modulecmd.tcl.in: Move 'conflict' to the per-mode evaluation interp 'conflict' modulefile command targets conflict procedure on load mode of modulefile evaluation. reportCmd is targeted on display mode. For other modes a nop is targeted. * modulecmd.tcl.in: Move 'prereq' to the per-mode evaluation interp 'prereq' modulefile command targets prereq procedure on load mode of modulefile evaluation. reportCmd is targeted on display mode. For other modes a nop is targeted. * modulecmd.tcl.in: Move 'module-whatis' to the per-mode evaluation interp 'module-whatis' modulefile command targets module-whatis procedure on whatis mode of modulefile evaluation. reportCmd is targeted on display mode. For other modes a nop is targeted. * modulecmd.tcl.in: Move 'chdir' to the per-mode evaluation interp 'chdir' modulefile command targets chdir procedure on load mode of modulefile evaluation. reportCmd is targeted on display mode. For other modes a nop is targeted. * modulecmd.tcl.in, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp: Move 'module-{log,trace,user,verb}' to the per-mode evaluation interp module-log, module-trace, module-user and module-verbosity modulefile commands target 'nimp' procedure on load and unload modes of modulefile evaluation. reportCmd is targeted on display mode. For other modes a nop is targeted. * modulecmd.tcl.in: Add 'nimp' proc to get a dummy 'not implemented' target * modulecmd.tcl.in: Disable chdir,module{,-trace,-log,-user,-verbosity} from modulerc eval Make chdir, module, module-trace, module-verbosity, module-user and module-log commands target the 'nop' procedure on modulerc interpreter. These commands were declared for modulerc evaluation but this did not make any sense as their action only concern modulefile evaluation. * modulecmd.tcl.in: Move 'system' to the per-mode evaluation interp 'system' modulefile command targets system procedure on load and unload modes of modulefile evaluation. reportCmd is targeted on display mode. For other modes a nop is targeted. 'system' can also currently be called from a modulerc evaluation when load or unload mode is detected. Kept as is for the moment. May/should change for next major release. * modulecmd.tcl.in: Add 'reportCmd' proc to use as target for display mode If interpreter alias command targets the reportCmd procedure, make sure command name is passed as first argument. * modulecmd.tcl.in: Define arg to pass to interp aliases in initModfileModeAliases Transform g_modfileAliasesPassItrp, array listing aliases where the interpreter name should be passed as alias command first argument, into g_modfile${mode}AliasesPassArg, array listing first argument to pass to particular aliases. The new structure is defined per evaluation mode (a specific alias/argument list per mode). So its definition is moved from execute-modulefile to initModfileModeAliases. 2018-04-18 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Add 'nop' proc to get a dummy target for certain eval mode * modulecmd.tcl.in: Adapt interp alias commands to the evaluation mode Make interpreter alias command targets vary depending on the evaluation mode to adapt behavior of modulefile commands to the currently run module command. For instance a 'setenv' command is evaluation as an 'unsetenv' command when unloading a modulefile. This commit lays the groundwork to adapt modulefile commands to the evaluation mode. All commands are kept for the moment in the situation where the same procedure is applied to all evaluation modes. * modulecmd.tcl.in: Define slave interp cmds in initInterpCommands proc * modulecmd.tcl.in, testsuite/modulefiles/spread/2.0, testsuite/modulefiles/spreadrc/dir2/1.0, testsuite/modules.70-maint/080-help.exp: Dedicate a modfile interp for each evaluation mode * modulecmd.tcl.in, testsuite/modules.70-maint/080-help.exp: Use same dump state for same kind of interp Share same dump state between interpreters of the same kind (modfile or modrc) but working at different levels. * modulecmd.tcl.in: Clarify interp name and reportDebug their creation * modulecmd.tcl.in: Push/pop modname and specified in execute-mod* procs 2018-04-17 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.70-maint/080-help.exp: Automatically prefix debug msgs by calling proc name 2018-03-28 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Harmonize/reduce execute-module{rc,file} debug msg 2018-04-17 Xavier Delaruelle <[email protected]> * doc/source/diff_v3_v4.rst: doc: remove-path applied when unloading on compat vers * doc/source/diff_v3_v4.rst: doc: desc. MANPATH special treatment on compat version Describe the difference behavior between Modules 4+ and compatibility version regarding how append-path/prepend-path commands handle the MANPATH environment variable when unset. Helps clarify [1]. [1] https://bugzilla.redhat.com/show_bug.cgi?id=1564899 * modulecmd.tcl.in, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/069-remove-env.exp: Make remove-path clear ::env(var) on unload mode if unset Clears the variable passed to 'remove-path' procedure in ::env() array on unload mode and if this variable is unset for later use during the modulefile evaluation. Helps producing same variable evaluation behavior whatever the evaluation mode, avoiding access to undefined references by defining a cleared but set value to these undefined variables. As a side effect as remove-path command is now evaluated on unload mode, invalid argument on this command will raise error. Previously arguments were not parsed so no error raised on unload mode. 2018-04-16 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Get env var set value or fallback value with get-env Add a 'get-env' procedure to read values from 'env' array, like what is done with 'set-env' for setting value. Distinguish set environment variable from cleared one with help of g_clearedEnvVars array. * modulecmd.tcl.in, testsuite/modulefiles/getenv/0.6, testsuite/modules.50-cmds/269-getenv-env.exp, testsuite/modules.50-cmds/359-allin-env.exp: Keep track of cleared env var in g_clearedEnvVars When unsetting (clearing) an environment variable in 'unset-env' procedure, keep track of it in a g_clearedEnvVars array to be able to distinguish later on, in 'getenv' procedure, if variable is equal to an empty string or if it has been unset (cleared). * testsuite/modulefiles.allin/allenvchg/1, testsuite/modulefiles.allin/allenvchg/2, testsuite/modules.50-cmds/359-allin-env.exp: ts: add 50-cmds/359-allin-env tests Check environment variable change commands all together over the different modulefile evaluation modes. * doc/source/modulefile.rst, modulecmd.tcl.in, testsuite/modulefiles/getenv/1.0, testsuite/modules.50-cmds/260-getenv.exp: Add valifundef arg to getenv procedure Allow to define value to return if variable name passed to the getenv procedure is undef. Add a description of 'getenv' command in the modulefile man page. * modulecmd.tcl.in, testsuite/modulefiles/getenv/0.6, testsuite/modules.50-cmds/269-getenv-env.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.90-avail/070-full.exp: Make getenv return value on help/test/whatis modes 2018-04-15 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.50-cmds/029-setenv-env.exp, testsuite/modules.50-cmds/039-unsetenv-env.exp, testsuite/modules.50-cmds/049-append-env.exp, testsuite/modules.50-cmds/059-prepend-env.exp, testsuite/modules.50-cmds/069-remove-env.exp, testsuite/modules.50-cmds/350-allin.exp: Clear env var even if not set on unset-env On 'unset-env' procedure, clears environment variable whether it is set or not to get consistent behavior whatever the current environment setup on later references of this variable during modulefile evaluation. Adapt 029-setenv-env, 039-unsetenv-env, 049-append-env, 059-prepend-env and 069-remove-env test cases: no more 'no such variable' errors. * modulecmd.tcl.in, testsuite/modulefiles.allin/allin/1, testsuite/modulefiles/unsetenv/0.6, testsuite/modules.50-cmds/039-unsetenv-env.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/070-full.exp: Make unsetenv alter ::env() on display/help/test/whatis modes Like previously done for 'remove-path', set the variable passed to 'unsetenv' procedure in ::env() array to make accurate value available for later use during the modulefile evaluation. Add 50-cmds/039-unsetenv-env test to check this ::env() array change over all evaluation mode. Adapt 50-cmds/350-allin to check this change against 'whatis' mode. 2018-04-14 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modulefiles/remove/5.0, testsuite/modules.50-cmds/069-remove-env.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.90-avail/070-full.exp: Make remove-path alter ::env() on display/help/test/whatis modes Like previously done for 'append-path', set the variable passed to 'remove-path' procedure in ::env() array to make accurate value available for later use during the modulefile evaluation. As a side effect as remove-path command is now evaluated on help, test, display and whatis modes, invalid argument on this command will raise error. Previously arguments were not parsed so no error raised. Add 50-cmds/069-remove-env test to check this ::env() array change over all evaluation mode. Adapt 50-cmds/350-allin to check this change against 'whatis' mode. * testsuite/modulefiles/setenv/0.7.1, testsuite/modulefiles/setenv/0.7.2, testsuite/modules.50-cmds/028-setenv-refcount.exp, testsuite/modules.90-avail/070-full.exp: ts: add tests to 50-cmds/028-setenv-refcount Test load and unload mode on modulefiles where setenv and append-path commands play on same variable. Check both ways: setenv then append-path or appen-path then setenv. 2018-04-13 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Set env var and propagate creation with set-env Make use of the 'set-env' procedure to set an environment variable and propagate creation to the running shell (outputing set command to stdout). Creation is propagated only if currently in 'load' or 'unload' evaluation mode. 2018-04-12 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.50-cmds/049-append-env.exp, testsuite/modules.50-cmds/180-unload.exp: Unset any ref cnt var on setenv/unsetenv in any mode Whatever the evaluation mode, unset any existing reference counter variable when running setenv/unsetenv commands. Adapt and add tests to put in light behaviors when unloading a standardly-set variable going through append-path/prepend-path. The standardly-set variable is transformed into a path-like variable through the evaluation, resulting in the end in the definition of a reference counter variable (if variable is not setenv/unsetenv during evaluation) or in the deletion of this reference counter variable (if setenv/unsetenv during evaluation). 2018-04-09 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.70-maint/152-remove-path.exp, testsuite/modules.70-maint/190-emptyarg.exp: Delete env var and propagate deletion with unset-env Make use of the 'unset-env' procedure to delete an environment variable and propagate deletion to the running shell (outputing deletion command to stdout). Deletion is propagated only if currently in 'load' or 'unload' evaluation mode. unset-env procedure distinguishes environment variables from those set for Modules internal use, like path reference counter variables. Internal variables are purely unset whereas other environment variables are just cleared, not unset, to avoid breaking later reference to these variables in modulefiles. In case of environment variable for internal use, variable deletion is propagated to shell only if variable was found set. Aligning all unsets on this rule gives no unset of reference counter variable on unload mode if the variable is not found defined at that time. Adapt expected test results for the above side effect. 2018-04-11 Xavier Delaruelle <[email protected]> * testsuite/modules.50-cmds/029-setenv-env.exp, testsuite/modules.50-cmds/049-append-env.exp, testsuite/modules.50-cmds/059-prepend-env.exp, testsuite/modules.70-maint/152-remove-path.exp: ts: use helper procs to set env vars on env var set tests 2018-04-10 Xavier Delaruelle <[email protected]> * testsuite/modules.00-init/050-modpath.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/032-prepend.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.10-use/080-access.exp, testsuite/modules.10-use/090-bad.exp, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.50-cmds/010-init_ts.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, .../modules.50-cmds/132-conflict-fullpath.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/321-is-used.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/360-restoreenv.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/055-whatis.exp, testsuite/modules.70-maint/056-whatis-nullpath.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/100-path.exp, testsuite/modules.70-maint/110-paths.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.70-maint/153-is-loaded.exp, testsuite/modules.70-maint/155-is-used.exp, testsuite/modules.70-maint/190-emptyarg.exp, testsuite/modules.80-deep/010-init_ts.exp, testsuite/modules.80-deep/021-unload.exp, testsuite/modules.80-deep/999-cleanup.exp, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/070-full.exp, testsuite/modules.91-sort/010-init_ts.exp, testsuite/modules.91-sort/020-avail.exp, testsuite/modules.95-version/010-init_ts.exp, testsuite/modules.95-version/999-cleanup.exp: ts: use helper procs to set MODULEPATH env var 2018-04-09 Xavier Delaruelle <[email protected]> * testsuite/modules.00-init/006-procs.exp, testsuite/modules.20-locate/038-defcontext.exp, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/025-setenv-undo.exp, testsuite/modules.50-cmds/029-setenv-env.exp, testsuite/modules.50-cmds/035-unsetenv-undo.exp, testsuite/modules.50-cmds/036-unsetenv-x.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/049-append-env.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/059-prepend-env.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/077-alias-undo.exp, testsuite/modules.50-cmds/078-refresh.exp, testsuite/modules.50-cmds/083-info-mode.exp, testsuite/modules.50-cmds/084-info-mode-exp.exp, testsuite/modules.50-cmds/085-info-flags.exp, testsuite/modules.50-cmds/088-info-isloaded.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/130-conflict-full.exp, .../modules.50-cmds/132-conflict-fullpath.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/172-swap-app-delim.exp, testsuite/modules.50-cmds/173-swap-app-delim.exp, testsuite/modules.50-cmds/175-swap2.exp, testsuite/modules.50-cmds/177-swap-prep-delim.exp, testsuite/modules.50-cmds/178-swap-prep-delim.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/195-load-recurs.exp, testsuite/modules.50-cmds/197-load-lots.exp, testsuite/modules.50-cmds/200-break.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/220-continue.exp, testsuite/modules.50-cmds/230-loop.exp, testsuite/modules.50-cmds/240-chdir.exp, testsuite/modules.50-cmds/250-x-resource.exp, testsuite/modules.50-cmds/280-info-specified.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.50-cmds/285-info-loaded.exp, testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.50-cmds/301-interp-command.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.50-cmds/330-source.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/360-restoreenv.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.70-maint/020-update.exp, testsuite/modules.70-maint/030-purge.exp, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/045-listlong.exp, testsuite/modules.70-maint/055-whatis.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/140-multiargs.exp, testsuite/modules.70-maint/153-is-loaded.exp, testsuite/modules.70-maint/157-info-loaded.exp, testsuite/modules.70-maint/180-reload.exp, testsuite/modules.70-maint/190-emptyarg.exp, testsuite/modules.80-deep/021-unload.exp, testsuite/modules.80-deep/022-switch.exp, testsuite/modules.80-deep/068-transitive.exp, testsuite/modules.90-avail/020-single.exp, testsuite/modules.95-version/020-unload.exp, testsuite/modules.95-version/022-load2.exp, testsuite/modules.95-version/022-unload2.exp, testsuite/modules.95-version/040-xgetenv.exp: ts: add helper procs to set env for tests Add new procedures (unsetenv_loaded_module, setenv_loaded_module, setenv_path_var, unsetenv_path_var, unsetenv_var, setenv_var) to set environment for tests in a consistent way (defining reference counter variable for path-like variables). Adapt all test files to set LOADEDMODULES and _LMFILES_ (and relative reference counter variables) with these new helper procedures. 2018-04-08 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.50-cmds/350-allin.exp: Clear var in evaluation context on unload mode of setenv To get a more accurate (empty) value when using variable later on during the evaluation of the modulefile. Previously set value (prior to unset) was retrieved and used. * modulecmd.tcl.in: No env var unset on unload-path in evaluation context Do not unset-env in unload-path proc (called by *-path commands) like setenv to avoid breaking later reference to the variable in modulefile. Value is cleared instead. 2018-04-07 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modulefiles.allin/allin/1, testsuite/modulefiles/append/7.0, testsuite/modulefiles/prepend/4.0, testsuite/modules.50-cmds/049-append-env.exp, testsuite/modules.50-cmds/059-prepend-env.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.70-maint/140-multiargs.exp, testsuite/modules.90-avail/070-full.exp: Make append/prepend-path alter ::env() on display/help/test/whatis modes Like previously done for 'setenv', set the variable passed to 'append-path' and 'prepend-path' procedures in ::env() array to make it available for later use during the modulefile evaluation. As a side effect as append-path/prepend-path commands are now evaluated on help, test, display and whatis modes, invalid argument on these commands will raise error. Previously arguments were not parsed so no error raised. Add 50-cmds/049-append-env and 50-cmds/059-prepend-env tests to check this ::env() array change over all evaluation mode. Adapt 50-cmds/350-allin to check this change against 'whatis' mode. * modulecmd.tcl.in: Pass full ref cnt inconsistency msg to reportWarning To inhibit full message in case 'g_inhibit_errreport' is enabled. 2018-04-06 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modulefiles.allin/allin/1, testsuite/modulefiles/setenv/0.6, testsuite/modules.50-cmds/029-setenv-env.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.90-avail/070-full.exp: Make setenv alter ::env() on help/test/whatis modes Set the variable passed to 'setenv' procedure in ::env() array to make it available for later use during the modulefile evaluation. Add 50-cmds/029-setenv-env tests to check this ::env() array change over all evaluation mode. Adapt 50-cmds/350-allin to check this change against 'whatis' mode. Fixes #160 * testsuite/modulefiles.allin/restoreenv/1, testsuite/modulefiles.allin/restoreenv/2, testsuite/modules.50-cmds/360-restoreenv.exp: ts: add 50-cmds/360-restoreenv tests Test all kind of environment change (variable, alias, chdir, xres, puts) in case the evaluation of a modulefile fails: previous environment context should be restored. * modulecmd.tcl.in: Correctly save/restore x-resource env settings Fix typo on x-resource setting array names 2018-04-05 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Add chdir/puts env settings to the per-mod saved env stack Add the g_changeDir, g_stdoutPuts and g_return_text global variable to the saved environment context. Restore stacked value of these variable in case a load failed for instance, like for env and g_Aliases array variable. * testsuite/modulefiles.allin/allin/1, testsuite/modulefiles.allin/allin/2, testsuite/modulefiles.allin/allin/3, testsuite/modulefiles.allin/allin/4, testsuite/modulefiles.allin/allin/5, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/250-x-resource.exp, testsuite/modules.50-cmds/350-allin.exp: ts: add 50-cmds/350-allin tests Gather all Tcl modulefile commands in few modulefiles and test them against all the existing modes. This commit is a record of the current situation where many inconsistencies can be seen especially on descriptive modes where too many commands are evaluated. 2018-04-04 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Factorize cmd switch in module proc * modulecmd.tcl.in: Treat list-related options within module proc Handle the options related to list commands (list, savelist and avail) within the module procedure instead of the main procedure. Makes possible to pass these options to the module commands when called from a modulefile or scriptfile. * modulecmd.tcl.in: Remove unused show_flags arg on listModules proc And simplify related display option management. * modulecmd.tcl.in: Handle arg list within cmdModuleAvail proc * modulecmd.tcl.in: Add debug msg at the start of module proc 2018-04-02 Xavier Delaruelle <[email protected]> * testsuite/install.00-init/060-quar.exp, testsuite/install.00-init/070-stderrtty.exp: ts: fix tests where cmd arg separator were missing * testsuite/modulefiles.other/modemptyarg/aliases, testsuite/modulefiles.other/modemptyarg/apropos, testsuite/modulefiles.other/modemptyarg/avail, testsuite/modulefiles.other/modemptyarg/display, testsuite/modulefiles.other/modemptyarg/list, testsuite/modulefiles.other/modemptyarg/load, testsuite/modulefiles.other/modemptyarg/purge, testsuite/modulefiles.other/modemptyarg/reload, testsuite/modulefiles.other/modemptyarg/restore, testsuite/modulefiles.other/modemptyarg/save, testsuite/modulefiles.other/modemptyarg/savelist, testsuite/modulefiles.other/modemptyarg/saverm, testsuite/modulefiles.other/modemptyarg/saveshow, testsuite/modulefiles.other/modemptyarg/source, testsuite/modulefiles.other/modemptyarg/swap, testsuite/modulefiles.other/modemptyarg/swap2, testsuite/modulefiles.other/modemptyarg/test, testsuite/modulefiles.other/modemptyarg/unload, testsuite/modulefiles.other/modemptyarg/unuse, testsuite/modulefiles.other/modemptyarg/use, testsuite/modulefiles.other/modemptyarg/whatis, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/330-source.exp, testsuite/modules.70-maint/190-emptyarg.exp: ts: add 50-cmds/152-module-emptyarg tests Check module commands set in modulefiles with an empty string argument passed to these commands. This is the "within modulefile" counterpart of 70-maint/190-emptyarg which is targetting command-line test. Check the module commands (with their empty string argument) on every existing mode (load, unload, display, help, test and whatis). Reveal many inconsistencies, especially on the descriptive modes (display, help and test), that should be fixed in future commits. 2018-04-01 Xavier Delaruelle <[email protected]> * testsuite/modulefiles/modbad/empty, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.90-avail/070-full.exp: ts: empty mod cmd call check in 50/151-module-onlytop * modulecmd.tcl.in: Handle empty cmd name in module proc only 2018-03-31 Xavier Delaruelle <[email protected]> * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version 4.1.2 * testsuite/modules.10-use/070-unuse.exp, testsuite/modules.50-cmds/140-system.exp, testsuite/modules.80-deep/080-access.exp: testsuite: fix some re tests for special ts dir 2018-03-27 Xavier Delaruelle <[email protected]> * testsuite/bin/install_test_sh: testsuite: correct IFS setup in install_test_sh for dash The IFS=$';' notation on dash makes $ character part of field separator list. 2018-03-26 Xavier Delaruelle <[email protected]> * testsuite/bin/install_test_csh, testsuite/install.00-init/080-args.exp, testsuite/modulefiles.other/putsvar: testsuite: add 080-args test to install suite Add install non-regression tests to check handling of arguments passed on the command line of shell langs of passed to the module function on other langs. Test pass of empty string, string containing space, variable reference, espace stuff and so on. Hardwire some test in install_test_csh script to correctly pass single quote to the tested module command. * testsuite/modules.70-maint/120-autoinit.exp: testsuite: adapt 70/120-autoinit tests to recent changes 2018-03-25 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/modules.00-init/006-procs.exp, testsuite/modules.70-maint/120-autoinit.exp: Add '\' to the escape char list for R "Unless it's escaped, \ is interpreted as a special character that identifies sectioning and mark-up macros." [1] Also temporary fix escaping code for 70-maint/120-autoinit tests: no re escaping for R (need re escaping to better cope with lang escaping). [1] https://developer.r-project.org/parseRd.pdf * testsuite/bin/install_test_cmake: testsuite: fix cmake test install script for args >2 * modulecmd.tcl.in: Fix parameter expansion on sh-shells in quar mode Protect "$@" from the 'eval' command added when quarantine mode is activated. 2018-03-24 Xavier Delaruelle <[email protected]> * testsuite/bin/install_test_cmake, testsuite/bin/install_test_perl, testsuite/bin/install_test_python, testsuite/bin/install_test_r, testsuite/bin/install_test_ruby, testsuite/bin/install_test_tcl: testsuite: check no arg or empty string arg Adapt tests of install suite to be able to call module function with no passed arg if tested command equals to "NOARG". Also adapt these tests to call module with an empty string argument if tested command equals to empty string. * modulecmd.tcl.in: Fix Python module func to accept no arg Adapt module function for Python to accept being called with no argument. * modulecmd.tcl.in: Empty module cmd clears arg list If an empty command name is passed, it is interpreted as "help" command. For more consistency argument list (after command name) is cleared in this situation to always get the general usage message rather triggering the help mode of an arbitrary modulefile. 2018-03-23 Xavier Delaruelle <[email protected]> * testsuite/bin/install_test_cmake, testsuite/bin/install_test_perl, testsuite/bin/install_test_python, testsuite/bin/install_test_r, testsuite/bin/install_test_ruby, testsuite/bin/install_test_tcl, testsuite/install.00-init/020-module.exp, testsuite/install.00-init/022-module-compat.exp, testsuite/install.00-init/030-options.exp, testsuite/install.00-init/060-quar.exp, testsuite/install.00-init/070-stderrtty.exp: testsuite: separate cmd args with ',' Adapt tests of install suite to use ',' character as argument separator (on same command) for non-pure shell languages (Tcl, Perl, Python, Ruby, Cmake and R). Help to distinguish a separator between args from a whitespace within an arg. * modulecmd.tcl.in: Fix module func parameter expansion on Perl To correctly handle parameter containing whitespace character or empty string parameter. 2018-03-22 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Fix module func parameter expansion on CMake To correctly handle parameter containing whitespace character or empty elements. For the latter case, command definition must be adapted to the number of args to be able to pass, to some extend (<5 args) empty string element to modulecmd. There is no other way to achieve empty string element argument as empty strings are skipped from ${ARGV}. [1] [1] https://gitlab.kitware.com/cmake/cmake/issues/16341 2018-03-21 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Fix module func parameter expansion on R To correctly handle parameter containing whitespace character. 2018-03-20 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Fix module func parameter expansion on Ruby To correctly handle no passed parameter or parameter containing whitespace character. * modulecmd.tcl.in: Fix module func parameter expansion on fish-shell To correctly handle parameter containing whitespace, quote, escape characters. * modulecmd.tcl.in: Fix module func parameter expansion on sh-shells To correctly handle parameter containing whitespace character. 2018-03-19 Xavier Delaruelle <[email protected]> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.70-maint/190-emptyarg.exp: testsuite: add 70-maint/190-emptyarg tests Test all module commands called from cmdline with an empty string argument. Move pre-existing empty-string-argument tests in this new test file. 2018-03-18 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Return empty res if mod name empty on getLoadedMatchingName * modulecmd.tcl.in: Report error if path is empty string on cmdModuleUnuse Like done on cmdModuleUse. * modulecmd.tcl.in: Return empty res if path empty on getAbsolutePath * modulecmd.tcl.in: Raise error if coll name is empty Add check in getCollectionFilename procedure to raise error if passed collection name is an empty string. Makes collection-related commands quit in error if empty collection name is provided (save, restore, saverm, saveshow, is-saved). No collection name provided still activate default collection, thus no error raise. * modulecmd.tcl.in: Fix default arg for cmdModule{Save*,Restore} procs Default collection name set as default 'coll' argument value is 'default'. Change default value of argument, was '', to directly match default collection name. It enables to distinguish between an empty string argument and default argument value. 2018-03-17 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: Fix handling of empty list on Tcl8.4 lreverse proc Was previously returned a list with 1 empty element instead of a list with 0 element. 2018-03-16 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in: No skip of empty arg on cmdModuleHelp Will be handled by getPathToModule procedure, who will raise error on empty module name. * modulecmd.tcl.in, testsuite/modulefiles/module/empty, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.90-avail/070-full.exp: Report error when empty name passed to getPathToModule Triggered with 'module load ""' call in modulefile. Helps to know what is going on. 2018-03-14 Xavier Delaruelle <[email protected]> * modulecmd.tcl.in, testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: testsuite: fake win platform to check path var handling Separator ';' is used instead of ':' on Windows platform. Add a test leveraging siteconfig.tcl-1 to check path variable handling on a fake Windows platform. Set/get default path variable separator with new getPathSeparator procedure. This way, global variable g_def_separator is defined after parsing the siteconfig.tcl. * testsuite/modulefiles/info/shellsexp, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/006-procs.exp, testsuite/modules.50-cmds/076-alias-sub.exp, testsuite/modules.70-maint/120-autoinit.exp: testsuite: add 'cmd' to the test shell list * modulecmd.tcl.in: Improve Windows cmd shell support * modulecmd.tcl.in, testsuite/example/siteconfig.tcl-1, testsuite/mode, testsuite/modules.90-avail/070-full.exp: Fetch terminal width on Windows with 'mode' cmd Add test with fake 'mode' command to run on Linux. 2018-03-12 Xavier Delaruelle <[email protected]> * testsuite/modules.61-coll/020-savelist.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.90-avail/070-full.exp: testsuite: check stty can change width before tests * testsuite/modules.00-init/006-procs.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/032-prepend.exp, testsuite/modules.50-cmds/040-append.exp: testsuite: fix tests when value contains parenthesis Escape the environment value like modulecmd does when producing shell code. Careful when test is performed in regexp mode. 2018-03-11 Xavier Delaruelle <[email protected]> * testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/022-module-compat.exp, testsuite/install.00-init/030-options.exp: testsuite: adapt install suite for compat on Cygwin * modulecmd.tcl.in: Rewrite if/return tests in return/expr * Makefile, Makefile.inc.in, configure: install: handle modulecmd exe ext on Cygwin Add EXEEXT Makefile variable in configure/Makefile process to append on Cygwin a '.exe' extension to modulecmd binary built. * modulecmd.tcl.in: Remove unneeded dir 'reglob' for Cygwin in findModules As tested, glob on Cygwin does not change symlink involved in $dir so it does not seem useful anymore to 'reglob' $dir on findModules procedure. * modulecmd.tcl.in: Remove unneeded symlink transformation for Cygwin Symlink created on Cygwin does not get an automatic ".lnk" suf
Showing 512.00 KB of 1.09 MB. Use Edit/Download for full content.
Directory Contents
Dirs: 0 × Files: 7