Server IP : 162.241.126.129 / Your IP : 18.118.10.75 Web Server : Apache System : Linux 162-241-126-129.cprapid.com 4.18.0-477.27.2.el8_8.x86_64 #1 SMP Fri Sep 29 08:21:01 EDT 2023 x86_64 User : rvway5nu4 ( 1018) PHP Version : 7.4.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /usr/share/doc/environment-modules/ |
Upload File : |
2020-07-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * 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 <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/370-deps-fullpath.exp: Fix reflexive conflict issue when mod is loaded full path Adapt conflict detection tests to ensure a module loaded by its full pathname will not detect itself as a conflict when declaring a reflexive conflict. Fixes #352. 2020-07-28 Rob Hurt <rchurt@users.noreply.github.com> * doc/source/index.rst: doc: clarify about lang-specific modules in index I think it would be worth adding a clarification about Perl (and other language) modules vs. the environment modules described here, because the use of the term "modules" for both can be confusing to new users. Also fixed some typos and formatting. 2020-07-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * 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 <xavier.delaruelle@cea.fr> * 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 <xavier.delaruelle@cea.fr> * doc/source/modulefile.rst: doc: reorder module-info sub-cmd desc. in modulefile(4) 2020-07-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/060-quar.exp: ts: fix install quar test when LD_PRELOAD is set 2020-07-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .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 <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Fix double err counter increase when mod eval breaks 2020-04-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash_completion.in: init: fix dup apropos/keyword/search in bash comp apropos, keyword and search sub-commands now accept arguments so they need to be removed from empty-or-wide-argument-command list * init/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 <xavier.delaruelle@cea.fr> * NEWS.rst, contrib/rpm/environment-modules.spec.in, version.inc.in: Release of version 4.5.1 2020-05-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Fix format of err stack trace start Fix formatting of error stack trace not to look for internal commands to withdraw if startup stack pattern cannot be matched. 2020-05-14 Roy Storey <kiwiroy@users.noreply.github.com> * modulecmd.tcl.in, testsuite/modules.00-init/150-access-init.exp: Use absolute path to load tcl_ext_lib Fixes #344 2020-05-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml: travis: update one OSX case to use latest img version 2020-05-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile: install: improve test deps dl retry mechanism 2020-05-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml, Makefile: travis: retry test deps setup as their dl regularly fail Add a 'test-deps' make target to specifically build all dependencies for tests, like Nagelfar and Tcl8.3 download. Call this specific target in Travis CI through the `travis_retry` utility to retry dependency download if they fail. * modulecmd.tcl.in, testsuite/modulefiles.2/setenv/0.1, testsuite/modulefiles/spread/3.0, testsuite/modulefiles/spread/7.0, testsuite/modulefiles/spreadrc/dir3/.modulerc, testsuite/modulefiles/spreadrc/dir3/1.0, testsuite/modulefiles/spreadrc/dir4/.modulerc, testsuite/modulefiles/spreadrc/dir7/.modulerc, testsuite/modulefiles/spreadrc/dir7/1.0, testsuite/modulefiles/spreadrc/dir8/.modulerc, testsuite/modules.50-cmds/029-setenv-env.exp: Sync env var changes across Tcl sub-interpreters Ensure environment variable change at the Tcl interpreter level is propagated to every sub-interpreters used to evaluate modulefiles or modulercs. Tcl by default maintain the `::env` array in sync across all started interpreters. But in some cases, it appears a change occuring in master interpreter is not correctly propagated when the variable is later on updated in sub-interpreter. Fixes #342 2020-05-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles.allin/restoreenv/0.1, testsuite/modulefiles.allin/restoreenv/0.2, testsuite/modules.50-cmds/360-restoreenv.exp: Keep link with env vars when restoring settings after breakage In case a modulefile evaluation fails, environment context prior this failed evaluation is restored. Fix environment variable restoration mechanism to keep the link that monitors and updates environment variable array `env` in every Tcl sub-interpreters. Unsetting the whole `env` array makes Tcl stop monitoring env accesses and stop updating environment variables. Environment context restoration is now done by updating the `env` array (unsetting keys in the array and setting value for new or existing keys). Fixes #340 2020-05-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.70-maint/280-ml.exp: Disable pager when clear sub-cmd called with ml cmd To ensure a proper prompt message output on clear sub-command, no pager is started. This commit also turns off pager when clear sub-command is called through the ml shortcut command. Fixes #338 2020-04-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitattributes: install: remove project-specific tools from git export 2020-04-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitattributes, script/mpub: script: add 'mpub' to publish new release Add the `mpub` script, that automates Modules new release publishing over git repositories and websites. * .gitattributes, script/mrel: script: add 'mrel' to build/test release files Introduce the `mrel` script, that automates build of the Modules release files and performs tests over these distribution files to guaranty their correctness. * Makefile: install: consistenly output Makefile warning msgs on stderr 2020-04-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, contrib/rpm/environment-modules.spec.in, version.inc.in: Release of version 4.5.0 * .gitattributes: install: exclude .github dir from dist tarballs * .cirrus.yml: cirrus: use updated FreeBSD images Remove openmp package, not available in these new images. (was required on previous images to get an operational R setup) * testsuite/modulefiles.2/autosym1/.modulerc, testsuite/modulefiles.2/autosym1/1, testsuite/modulefiles.2/autosym1/2, testsuite/modulefiles.2/autosym2/.modulerc, testsuite/modulefiles.2/autosym2/1, testsuite/modulefiles.2/autosym2/2, testsuite/modulefiles.2/autosym3/.modulerc, testsuite/modulefiles.2/autosym3/1, testsuite/modulefiles.2/autosym3/2, testsuite/modulefiles.2/autosym4/.modulerc, testsuite/modulefiles.2/autosym4/1, testsuite/modulefiles.2/autosym4/2, testsuite/modulefiles.2/autosym5/.modulerc, testsuite/modulefiles.2/autosym5/1, testsuite/modulefiles.2/autosym5/2, testsuite/modulefiles.2/autosym5/default, testsuite/modulefiles.2/autosym6/.modulerc, testsuite/modulefiles.2/autosym6/1, testsuite/modulefiles.2/autosym6/2, testsuite/modulefiles.2/autosym7/dir1/1, testsuite/modulefiles.2/autosym7/dir1/2, testsuite/modulefiles.2/autosym7/dir2/1, testsuite/modulefiles.2/autosym7/dir2/2, testsuite/modulefiles.2/autosym8/.modulerc, testsuite/modulefiles.2/autosym8/1, testsuite/modulefiles.2/autosym8/2, testsuite/modulefiles.2/autosym9/1, .../274-adv_version_spec-autosym.exp: ts: add 70/274 tests to validate auto symbols 2020-04-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, modulecmd.tcl.in, .../modules.70-maint/271-adv_version_spec-in.exp: Honor default when version list is composed of symvers When an advanced version specifier list contains symbolic version references, fix resolving to honor default version if part of the specified list. Fixes #334. 2020-04-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc. getModules improvements in NEWS * MIGRATING.rst: doc: desc. auto default/latest symbols in MIGRATING * doc/source/module.rst, doc/source/modulefile.rst: doc: desc. default/latest auto symbols in man pages 2020-04-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/130-auto_handling.exp, testsuite/modules.10-use/040-load-use.exp, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/035-defname.exp, testsuite/modules.20-locate/038-defcontext.exp, testsuite/modules.20-locate/040-alias.exp, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/057-mcookie.exp, testsuite/modules.20-locate/066-modulepath-rc.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.20-locate/075-symlink.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.20-locate/090-memcache.exp, testsuite/modules.20-locate/100-wspace.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/020-setenv.exp, testsuite/modules.50-cmds/022-setenv-eschars.exp, testsuite/modules.50-cmds/030-unsetenv.exp, testsuite/modules.50-cmds/076-alias-sub.exp, testsuite/modules.50-cmds/081-info-user.exp, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/100-loglevel.exp, testsuite/modules.50-cmds/105-trace.exp, testsuite/modules.50-cmds/110-verbose.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp, .../modules.50-cmds/132-conflict-fullpath.exp, testsuite/modules.50-cmds/140-system.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/195-load-recurs.exp, testsuite/modules.50-cmds/197-load-lots.exp, testsuite/modules.50-cmds/230-loop.exp, testsuite/modules.50-cmds/240-chdir.exp, testsuite/modules.50-cmds/250-x-resource.exp, testsuite/modules.50-cmds/260-getenv.exp, testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.50-cmds/301-interp-command.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.50-cmds/310-puts.exp, testsuite/modules.50-cmds/340-modvar.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/359-allin-env.exp, testsuite/modules.50-cmds/360-restoreenv.exp, testsuite/modules.50-cmds/375-deps6.exp, testsuite/modules.50-cmds/375-order.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/378-sametarget.exp, testsuite/modules.50-cmds/380-altname.exp, testsuite/modules.50-cmds/390-function.exp, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.70-maint/050-whatis-load.exp, testsuite/modules.70-maint/180-reload.exp, testsuite/modules.70-maint/230-verbosity.exp, testsuite/modules.70-maint/240-icase.exp, testsuite/modules.70-maint/250-nan.exp, .../modules.70-maint/260-extended_default.exp, .../modules.70-maint/270-adv_version_spec.exp, .../modules.70-maint/271-adv_version_spec-in.exp, .../272-adv_version_spec-range.exp, .../273-adv_version_spec-space.exp, testsuite/modules.70-maint/280-ml.exp, testsuite/modules.70-maint/290-json.exp, testsuite/modules.70-maint/300-err_stack.exp, testsuite/modules.80-deep/020-load-deep.exp, testsuite/modules.80-deep/022-switch.exp, testsuite/modules.80-deep/068-transitive-deep.exp, testsuite/modules.80-deep/080-access-deep.exp, testsuite/modules.80-deep/090-deepvirt.exp, testsuite/modules.91-sort/040-load-sort.exp, testsuite/modules.95-version/022-load2.exp: ts: adapt existing tests for auto symbols 2020-04-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Record auto symbol in loaded environment Once a module, which benefits from automatically defined symbolic versions, is loaded, the associated auto symbols are recorded in loaded environment among all the alternative names applying to the loaded module (in `MODULES_LMALTNAME` environment variable). Auto symbols are distinguished from regular symbols by the `as|` prefix which is applied to them. 2020-03-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Auto define default/latest symbol when adv_vers_spec enabled When `advanced_version_spec` is enabled, automatically define a `default` and `latest` symbolic version for each module (at each module depth for deep modules) if those symbols or alias or regular modules with these names are not defined. In case `implicit_default` configuration is disabled, these automatic symbolic versions are not defined. Design principles are described in *Default and latest version specifiers* document. Fixes #210. 2020-04-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Fix version target inclusion loop in getModules Change loop variable name, as direlt is already used to control what entry to record in parent directory. 2020-04-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../design/default-latest-version-specifiers.rst: doc: refine default/latest vers spec design 2020-03-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.20-locate/090-memcache.exp, .../modules.70-maint/260-extended_default.exp: Perform noplaindir filter within getModules Rather applying a filter that removes the directory entries with no tag attached to them, except if search is performed in a no-indepth manner, perform this filter directly withing getModules procedure. * modulecmd.tcl.in, .../modules.70-maint/260-extended_default.exp, .../modules.70-maint/270-adv_version_spec.exp, testsuite/modules.90-avail/080-noindepth.exp: Perform onlydefaults/onlylatest filter within getModules Rather re-filtering result from getModules procedure within listModules procedure, perform the onlydefaults/onlylatest (-d/-L) avail filters directly within getModules. 2020-03-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Ensure dir struct definition when only contains not-searched default In case a directory has set for default element an hidden entry not searched in this getModules processing, still record this directory in dir_list with the default target referred in it (even if not part of found_list result. Doing so ensure that starting phase 3 of getModules processing, all directories with a default defined will have an entry in found_list. * testsuite/modules.70-maint/220-config.exp: ts: fix 70/220 when MODULES_ICASE is externally set 2020-03-31 Adrien Cotte <adrien.cotte@eolen.com> * init/bash_completion.in: bash_completion: fix ml no space between -modules 2020-03-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Remove uneeded test when removing dir from getModules res * .travis.yml, contrib/rpm/environment-modules.spec.in: rpm: define LD_PRELOAD as quarantine var along with LD_LIBRARY_PATH To ensure a sane quarantine effect in case LD_PRELOAD libs depend on libraries found with LD_LIBRARY_PATH. See https://sourceforge.net/p/modules/mailman/message/36959212/ * modulecmd.tcl.in, testsuite/modulefiles/loc_rc010/.modulerc, testsuite/modulefiles/loc_rc010/dir/.4.0, testsuite/modulefiles/loc_rc010/dir/sub1/notamod, testsuite/modulefiles/loc_rc010/dir/sub2/incompat, testsuite/modulefiles/loc_rc010/wrong, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.70-maint/130-aliases.exp: Rework version target inclusion in getModules result Rework loop walking the symbolic version target to include all elements recursively contained in directory targeted by symbolic version. Now using dir_list structure to walk path rather querying the whole found_list with modEq test procedure. * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.80-deep/068-transitive-deep.exp: ts: fix indepth-dependent test in 80/068 For 3 tests, result depends on indepth option, not implicit_default option. 2020-03-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/modulefile.rst: doc: clarify hidden module location in modulefile.4 * modulecmd.tcl.in, testsuite/modulefiles/loc_rc010/subdir/.hidsub/3.0, testsuite/modulefiles/loc_rc010/subdir/.modulerc, testsuite/modulefiles/loc_rc010/subdir/.subdir/3.0, testsuite/modules.20-locate/067-hidden.exp: Add ref in res to version target not in res but not searched Enable resolution of default module in module sub-directory when this default symbol targets an hidden directory (whose name starts with a dot character). Adapt getModules procedure to add reference, in the directory description returned as result, for symbolic version targets that are hidden, not included in returned result but excluded from search made. Fixes #331 * modulecmd.tcl.in, testsuite/modules.70-maint/130-aliases.exp: Filter hidden sym/alias/module from aliases output Filter-out from the output of the `aliases` sub-command all hidden aliases, symbolic versions or hidden modules targeted by a non-hidden symbolic version. Fixes #330 2020-03-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles/loc_rc010/.modulerc, testsuite/modulefiles/loc_rcv1/.modulerc, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.90-avail/070-full.exp: ts: test alias/symver/virtual hidden modules in 20/067 2020-03-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Consider alias/symver/virtual hidden if name starts with . Hide special modules (aliases, symbolic versions and virtual modules) whose version name starts with a dot character (.) from avail, whatis and paths searches if their query does not fully match special module name. Hidden symbolic version will still be reported if the modulefile it targets is part of search result. Fixes #329 2020-03-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/etc/modulerc.deepvirt, testsuite/modulefiles.2/.modulerc, testsuite/modulefiles.2/deepvirt1/.modulerc, testsuite/modulefiles.2/quux/1, testsuite/modules.80-deep/090-deepvirt.exp: ts: add 80/090 deep alias and virtual module tests * testsuite/modules.00-init/006-procs.exp, testsuite/modules.70-maint/290-json.exp, testsuite/modules.90-avail/070-full.exp: ts: compare sorted json output As json output is not sorted by modulecmd.tcl it may happens that test output found on some configurations or platforms is not the one expected although it is correct. To avoid these errors a new test procedure is added to compare stderr output in a sorted manner, so error will be obtained if something is missing in the result but not if the result is outputed in a different order. 2020-03-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.20-locate/090-memcache.exp, testsuite/modules.70-maint/290-json.exp, testsuite/modules.90-avail/070-full.exp: Exclude directory from findModules result There is no need to record found directory in findModules result as these elements will be computed in getModules. * modulecmd.tcl.in: No record of dir content in res returned by findModules No need to record the content of each directory in the result returned by the findModules procedure as full directory content (with virtual elements) is computed in getModules. * modulecmd.tcl.in: Remove useless modMatchAtDepth procedure Following getModules code refactoring, the generated procedure modMatchAtDepth has become useless. Only doesModMatchAtDepth is now used. 2020-03-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/190-emptyarg.exp, testsuite/modules.70-maint/240-icase.exp, testsuite/modules.70-maint/290-json.exp, testsuite/modules.80-deep/068-transitive-deep.exp, testsuite/modules.90-avail/070-full.exp: ts: adapt tests to getModules refactoring Available modules search process is not changed but the refactoring of the getModules procedure fixed some hidden issues like in 80/068: symbol targeting a directory which contains aliases where not correctly analyzed previously (aliases where skipped from result) Module avail result order also change when JSON format output is enabled due to this code refactoring (as JSON output is not sorted). It also fix non-wild searches (performed during whatis or paths sub-commands) that previously matched partial alias, symbolic version or virtual module names. Fully matching names for these kind of modules are not only retained for these non-wild searches. Test results in 70/190, 70/240 and 70/290 have been adapted. 2020-03-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Refactor getModules procedure Rework the full getModules procedure to simplify its processing and apply the same match tests to every kind of modules (regular modulefile, symbolic, version, alias or virtual module). getModules procedure acts now in 4 phases. First every kind of modules are gathered. Then a second phase is set to filter-out modules dynamically hidden or forbidden (this filter will be deployed later on). Third phase is the elaboration of each directory content to determine especially their default and latest versions. At last the fourth phase process all gathered results to only keep those matching search query. As the procedure now applies the same mechanisms for all kind of modules, this code refactoring has solved several issues: * An `avail` search over a symbolic version targeting a directory now correctly returns the special modules (alias and virtual module) lying in this directory. * `whatis` and `paths` searches only return special modules (symbolic version, alias and virtual modules) that fully match search query not those that partially match it. * alias and virtual module whose name mention a directory that does not exists are correctly handled. Fixes #168, #327 and #328 2020-03-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/default-latest-version-specifiers.rst: doc: update deflatest design for default/latest modfile 2020-03-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc. ml bash comp/fish stderr fix/space fixes in NEWS 2020-03-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.20-locate/100-wspace.exp: Fix path cmd result if it contains space char * testsuite/install.00-init/080-args.exp, testsuite/modules.20-locate/100-wspace.exp, .../273-adv_version_spec-space.exp: ts: adapt tests after enclosed mod names in adv_vers_spec disabled mode 2020-02-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Enclose names incl. space even if adv_vers_spec is disabled Enclose module name and versions if it contains a space character even if the advanced versio specifier mechanism is disabled. Rework the advanced version specifier parsing done in parseModuleVersionSpecifier procedure to also check argument passed if advanced_version_spec mechanism is disabled and enclose them in curly braces if a space character is found in them. 2020-03-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/home/coll15, testsuite/home/coll16, testsuite/modulefiles.2/space ye/1.8, testsuite/modulefiles.2/space ye/1.9, testsuite/modulefiles.2/space ye/2.8, testsuite/modulefiles.2/space ye/2.9, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.20-locate/100-wspace.exp, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/999-cleanup.exp, .../273-adv_version_spec-space.exp, testsuite/modules.90-avail/080-noindepth.exp: ts: tests module path/name/version finishing by a space char 2020-03-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.2/sp.ce y+/0 2, testsuite/modulefiles.2/space ye/1.0, testsuite/modulefiles.2/space ye/1.1, testsuite/modulefiles.2/space ye/1.2, testsuite/modulefiles.2/space ye/1.3, testsuite/modulefiles.2/space ye/1.4, testsuite/modulefiles.2/space ye/1.5, testsuite/modulefiles.2/space ye/1.6, testsuite/modulefiles.2/space ye/1.7, testsuite/modulefiles.2/space ye/2.0, testsuite/modulefiles.2/space ye/2.1, testsuite/modulefiles.2/space ye/2.2, testsuite/modulefiles.2/space ye/2.3, testsuite/modulefiles.2/space ye/2.4, testsuite/modulefiles.2/space ye/2.5, testsuite/modulefiles.2/space ye/2.6, testsuite/modulefiles.2/space ye/2.7, testsuite/modules.00-init/005-init_ts.exp, .../272-adv_version_spec-range.exp, .../273-adv_version_spec-space.exp: ts: add tests mixing adv vers spec and deps 2020-02-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.20-locate/100-wspace.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.70-maint/240-icase.exp, testsuite/modules.70-maint/260-extended_default.exp, testsuite/modules.70-maint/270-adv_version_spec.exp, testsuite/modules.70-maint/272-adv_version_spec-range.exp: ts: skip wspace tests if symlinks not supported on fs 2020-02-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Correctly enclose mod name when defining cmp proc * modulecmd.tcl.in: Keep mod vers spec enclosed if containing space when parsed 2020-02-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.2/sp.ce y+/1.2, testsuite/modulefiles.2/sp.ce y+/2.10, testsuite/modulefiles.2/sp.ce y+/2.4, testsuite/modulefiles.2/sp.ce y+/2.6, testsuite/modulefiles.2/sp.ce y+/2.7, testsuite/modulefiles.2/space yd/2.1, testsuite/modulefiles.2/space yd/2.10, testsuite/modulefiles.2/space yd/2.2, testsuite/modulefiles.2/space yd/3.0, testsuite/modulefiles.2/space yd/4.1, testsuite/modulefiles.2/space yd/5.0, testsuite/modules.70-maint/240-icase.exp, .../modules.70-maint/260-extended_default.exp, .../modules.70-maint/270-adv_version_spec.exp, .../272-adv_version_spec-range.exp: ts: test space in names with icase/extdfl/adv_vers_spec 2020-02-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/initrc.in, testsuite/modules.70-maint/120-autoinit.exp: ts: add names with space in test example initrc * testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/020-module.exp: ts: test name containing space on install ts * .appveyor.yml: appveyor: use default inst dir for win native test * site.exp.in, testsuite/install.00-init/030-options.exp: ts: check availability of createmodule.py in install ts * testsuite/modules.20-locate/100-wspace.exp, testsuite/modules.90-avail/080-noindepth.exp: ts: test space in name against no-indepth and no implicit_default * modulecmd.tcl.in: Enclose mod and modpath names if space in them when saving coll * modulecmd.tcl.in: Fix collection parsing to handle enclosed names Correctly read modulepath and module names if enclosed in double-quotes or curly-braces to escape space characters used in these names. * testsuite/home/coll15, testsuite/home/coll16, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.61-coll/999-cleanup.exp: ts: test colls with space in modulepath and module names * testsuite/modules.20-locate/100-wspace.exp: ts: test space in module name against ml command 2020-02-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.2/space yc/2, testsuite/modulefiles.2/space yc/3, testsuite/modulefiles.2/space yc/4, testsuite/modulefiles.2/space yc/5, testsuite/modulefiles.2/spacenc/2, testsuite/modulefiles.2/spacenc/3, testsuite/modulefiles.2/spacenc/4, testsuite/modules.20-locate/100-wspace.exp: ts: tests using space in module dependencies * modulecmd.tcl.in: Fix handling of mod containing space when set as deps Fix dependency analysis mechanisms to correctly handle modulefiles contaning space in their name. 2020-02-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/config/unix.exp, testsuite/modulefiles wspace, testsuite/modulefiles.2/space ya/.modulerc, testsuite/modulefiles.2/space ya/1, testsuite/modulefiles.2/space ya/2, testsuite/modulefiles.2/space yb/.modulerc, testsuite/modulefiles.2/space yb/1, testsuite/modulefiles.2/spacen/.modulerc, testsuite/modulefiles.2/spacen/1, testsuite/modulefiles.2/spacen/2 s, testsuite/modulefiles.2/spacenb/.modulerc, testsuite/modulefiles.2/spacenb/1, testsuite/modules.20-locate/100-wspace.exp: ts: tests using space in module or modulepath names 2020-02-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Protect mod or modpath names containing space from eval Correctly handle modulefiles and modulepaths containing a space character in their name. Protect module and modulepath names which contain a space from being splitted in two words. 2020-03-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/fish_completion, modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Update stderr redirection for new Fish shell versions Use of '^' character to redirect stderr has been deprecated starting Fish version 3.1. It now produces an error. Stderr should be redirected with '2>' like on SH shells. Hopefully '2>' redirection is also supported on old Fish versions (all version 2 support it). Fixes #325 2020-03-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash_completion.in: init: define ml completion only if ml command defined 2020-03-12 Adrien Cotte <adrien@cotte.com> * init/bash_completion.in: init: add 'ml' command support in bash completion 2020-03-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc. recent changes in NEWS 2020-03-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst, MIGRATING.rst, Makefile, NEWS.rst, script/TESTINSTALL.bat, testsuite/install.00-init/030-options.exp: install/ts/doc: install and test envml.cmd along other *.cmd * script/envml.cmd: script: apply same module enablement check in all *.cmd 2020-02-29 Jacques Raphanel <Jacques.Raphanel@esi-group.com> * script/envml, script/envml.cmd: script: introduce envml.cmd for windows Provide a dedicated batch file to provide similar behavior of envml bash script but for CMD Windows shell. Update existing envml bash script to provide same behavior for cmd and sh file (split argument over ';' character, in addition to '&' character). 2020-03-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_v3_v4.rst: doc: add ref to 4.0 closed issues in diff doc * MIGRATING.rst: doc: desc. error stack trace in MIGRATING 2020-03-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .github/ISSUE_TEMPLATE/bug_report.md, .github/ISSUE_TEMPLATE/feature_request.md: github: add issue templates * testsuite/example/siteconfig.tcl-1, testsuite/modulefiles.2/bad3/bodyfor, testsuite/modulefiles.2/bad3/bodyif, testsuite/modulefiles.2/bad3/bodywhile, testsuite/modulefiles.2/bad3/proc2, testsuite/modulefiles.2/bad3/proc3, testsuite/modulefiles.2/badrc3/.modulerc, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.70-maint/300-err_stack.exp: ts: add more error stack tests 2020-03-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/120-autoinit.exp: ts: tclsh is reported tclshX.Y on FreeBSD 2020-03-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/140-color.exp: ts: adapt err stack output for siteconfig failed eval * modulecmd.tcl.in: Rework error stack filtering for siteconfig eval issue When a error occurs during the evaluation of the siteconfig specific file, only remove from error stack the elements relative to the modulecmd.tcl code that evaluates the file. * .cirrus.yml: cirrus: add tclsh to FreeBSD test env * script/mt: script: mt exits in err if ts ok but review failed * testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/284-info-others.exp, testsuite/modules.50-cmds/330-source.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/170-contact.exp, testsuite/modules.70-maint/300-err_stack.exp: ts: fix expected err stack result for Tcl8.4 ran with coverage Do not match error stack output exactly as extended code block reported on Tcl8.4 differ whether tests are run with coverage enabled or disabled. 2020-03-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.20-locate/066-modulepath-rc.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/330-source.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.70-maint/090-source.exp, testsuite/modules.70-maint/140-multiargs.exp, testsuite/modules.70-maint/150-append-path.exp, testsuite/modules.70-maint/151-prepend-path.exp, testsuite/modules.70-maint/152-remove-path.exp, testsuite/modules.70-maint/170-contact.exp, testsuite/modules.70-maint/190-emptyarg.exp, testsuite/modules.70-maint/230-verbosity.exp, .../modules.70-maint/270-adv_version_spec.exp, .../modules.70-maint/271-adv_version_spec-in.exp, .../272-adv_version_spec-range.exp, testsuite/modules.70-maint/280-ml.exp, testsuite/modules.70-maint/290-json.exp, testsuite/modules.70-maint/300-err_stack.exp: ts: refactor common modulefile error msg * testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/284-info-others.exp, testsuite/modules.50-cmds/330-source.exp: ts: new err stack format expose switch block on Tcl8.4 2020-03-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Rework error stack filtering Improve error stack output format to only filter elements of the stack describing modulecmd.tcl internals. This is now achieved by comparing procedure name in the stack or its caller procedure name against interpreter known Tcl commands and procedures. If procedure or caller name in the stack is only known by modulecmd.tcl Tcl interpreter (and not modulefile or modulerc Tcl interpreter) then this element in the error stack is discarded. 2020-03-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Also report modulerc err stack trace for known error * testsuite/modules.20-locate/066-modulepath-rc.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/284-info-others.exp, testsuite/modules.50-cmds/310-puts.exp, testsuite/modules.50-cmds/330-source.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.70-maint/140-multiargs.exp, .../modules.70-maint/270-adv_version_spec.exp, .../modules.70-maint/271-adv_version_spec-in.exp, .../272-adv_version_spec-range.exp: ts: adapt module err output to display err stack * modulecmd.tcl.in: Also report modulefile err stack trace for known error When an error occurs during the evaluation of a modulefile, report associated error stack trace filtered to only output useful information for users. Errors thrown by a modulecmd.tcl procedure, only the second to last element in error stack has to be kept to hide modulecmd.tcl internals. * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.20-locate/066-modulepath-rc.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.70-maint/170-contact.exp, testsuite/modules.70-maint/300-err_stack.exp: ts: adapt err stack output for old tcl version 2020-02-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.2/bad3/.bodycommon, testsuite/modulefiles.2/bad3/.proccommon, testsuite/modulefiles.2/bad3/bodyproc, testsuite/modulefiles.2/bad3/bodysource, testsuite/modulefiles.2/bad3/procproc, testsuite/modulefiles.2/bad3/procsource, testsuite/modulefiles.2/badrc3/.modulerc, testsuite/modulefiles.2/badrc3/1, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.70-maint/300-err_stack.exp: ts: test err stack trace output in 70/300 * testsuite/modules.20-locate/066-modulepath-rc.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp: ts: adapt modulerc err output to display err stack * modulecmd.tcl.in: Report modulerc err stack trace if error is unknown When an error occurs during the evaluation of a modulerc, report associated error stack trace filtered to only output useful information for users. 2020-02-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.70-maint/090-source.exp, testsuite/modules.70-maint/140-multiargs.exp, testsuite/modules.70-maint/170-contact.exp, testsuite/modules.70-maint/200-errdisp.exp, testsuite/modules.70-maint/230-verbosity.exp, testsuite/modules.70-maint/280-ml.exp: ts: adapt module err output to display err stack * modulecmd.tcl.in: Return error thrown by puts with a specific code As `puts` procedure is specifically handled in modulefile evaluation context, also consider the errors it thrown as specific not to disclose the specific stack trace. 2020-02-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Report modulefile err stack trace if error is unknown When an error occurs during the evaluation of a modulefile, report associated error stack trace filtered to only output useful information for users. 2020-02-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: ts: test unknown issue throw in 00/120 * modulecmd.tcl.in: Encourage unknown issue report to GitHub project * modulecmd.tcl.in: Catch modulefile known errors with error codes Use specific error code (MODULES_ERR_SUBFAILED, MODULES_ERR_GLOBALTOP and MODULES_ERR_GLOBAL) rather prepending error message with a specific string to throw known errors occurring during modulefile evaluation. * modulecmd.tcl.in, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/140-color.exp: Report err stack trace for siteconfig eval errors Add to the error message the error stack trace for errors occuring during site-specific configuration evaluation. Error stack is expunged from the modulecmd.tcl internals to only report information relevant to site-specific configuration file. Introduce the `formatErrStackTrace` procedure to tailor error stack trace to filter and only keep informations that are relevant to users to understand what code is broken. * modulecmd.tcl.in: Report err stack trace if error is unknown Add to the error message the error stack trace on a global error when this error is unknown. 2020-02-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Throw known error with a specific error code Use `MODULES_ERR_KNOWN` error code to throw errors that are known to the module system. `knerror` procedure is introduced to throw error with this new specific error code set. * modulecmd.tcl.in: Render error in main's catch Define `MODULES_ERR_RENDERED` error code, used in `reportErrorAndExit` procedure to express that generated error has been rendered (error count increased and false value returned on stdout). If an error is caught in main procedure catch, render its error if not done yet (if obtained errorCode is not `MODULES_ERR_RENDERED`). So there is no more need to catch error around main call to `module` or `ml` procedure has it will be now correctly handled by main catch. Thus in this situation error will only be rendered once. 2020-02-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/005-init_ts.exp, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/140-color.exp, testsuite/modules.60-initx/080-access-initx.exp, testsuite/modules.61-coll/080-access-coll.exp, testsuite/modules.70-maint/290-json.exp: ts: adapt err msg for multi-line msg harmonization * modulecmd.tcl.in: Harmonize multi-line error message report When an error message is composed of multiple lines, render it in the same way whether it is part of a block message or not: lines after the first one are prepended with a 2-space padding. As a result error messages appear clearly separated from each other. 2020-03-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: clarify next version if not released yet 2020-03-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * script/createmodule.sh: script: handle variable value change in createmodule.sh When analyzing environment variable changes applied by shell script passed as argument, produce a `setenv` modulefile statement for any variable found set prior script evaluation and for which value is completely changed after script evaluation. Fixes #320 2020-02-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * script/nglfar2ccov: script: adapt nglfar2ccov to nagelfar new format output Analyzed script name is now reported with its path name. 2020-02-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst, modulecmd.tcl.in, testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.00-init/140-color.exp: Add support for NO_COLOR env variable Add support for the NO_COLOR environment variable (https://no-color.org/) which when set (regardess of its value) prevents the addition of ANSI color. When set, NO_COLOR prevails over CLICOLOR and CLICOLOR_FORCE environment variables. MODULES_COLOR overrides these tree variables. Fixes #310 2020-02-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile: install: rm README on 'make clean' * Makefile.inc.in, configure, init/.gitignore, init/Makefile, init/bash_completion.in, init/zsh-functions/{_module => _module.in}: init: use 'sed -r' if 'sed -E' not supported `-E` option is a *relatively* recent option of GNU sed (v4.2), yet mandatory for OS portability (as detailled in b68e44e). Adapt configure step to detect if sed option `-E` is supported and fallback to `-r` otherwise. Fixes #317 * init/bash_completion.in: init: fix bash completion script for Bash <4.0 `compopt` Bash builtin has been introduced in Bash 4.0, so using it on Bash <4.0 prints error messages. To fix this, `comptopt` availability is checked prior usage. If not available, the no-space-append behavior will not be obtained which will not be an optimal situation if the `no-indepth` mode is set for the `avail` sub-command. Fixes #318 2020-02-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/cookbook/compiler-etc-dependencies.rst: doc: clarify some statements in compiler-etc-depend recipe * doc/source/cookbook/compiler-etc-dependencies.rst: doc: add refs between sections in compiler-etc-depend recipe * .../{modules3.2.10 => modules3}/bar-defaults.out, .../{modules3.2.10 => modules3}/bar-loads.out, .../{modules3.2.10 => modules3}/bar-switch.out, .../{modules3.2.10 => modules3}/foo-avail1.out, .../{modules3.2.10 => modules3}/foo-avail2.out, .../{modules3.2.10 => modules3}/foo-defaults.out, .../{modules3.2.10 => modules3}/foo-loads.out, .../{modules3.2.10 => modules3}/foo-switch.out, .../{modules3.2.10 => modules3}/modavail.out, .../{modules3.2.10 => modules3}/modversion.out, .../{modules3.2.10 => modules3}/ompi-defaults.out, .../{modules3.2.10 => modules3}/ompi-loads1.out, .../{modules3.2.10 => modules3}/ompi-switch.out, .../{modules4.3.1 => modules4}/bar-defaults.out, .../{modules4.3.1 => modules4}/bar-loads.out, .../{modules4.3.1 => modules4}/bar-switch.out, .../{modules4.3.1 => modules4}/foo-avail1.out, .../{modules4.3.1 => modules4}/foo-avail2.out, .../{modules4.3.1 => modules4}/foo-defaults.out, .../{modules4.3.1 => modules4}/foo-loads.out, .../{modules4.3.1 => modules4}/foo-switch.out, .../{modules4.3.1 => modules4}/modavail.out, .../{modules4.3.1 => modules4}/modversion.out, .../{modules4.3.1 => modules4}/ompi-defaults.out, .../{modules4.3.1 => modules4}/ompi-loads1.out, .../{modules4.3.1 => modules4}/ompi-switch.out, .../{modules3.2.10 => modules3}/bar-defaults.out, .../{modules3.2.10 => modules3}/bar-loads.out, .../{modules3.2.10 => modules3}/bar-switch.out, .../{modules3.2.10 => modules3}/foo-avail1.out, .../{modules3.2.10 => modules3}/foo-avail2.out, .../{modules3.2.10 => modules3}/foo-defaults.out, .../{modules3.2.10 => modules3}/foo-loads.out, .../{modules3.2.10 => modules3}/foo-switch.out, .../{modules3.2.10 => modules3}/modavail.out, .../{modules3.2.10 => modules3}/modversion.out, .../{modules3.2.10 => modules3}/ompi-defaults.out, .../{modules3.2.10 => modules3}/ompi-loads1.out, .../{modules3.2.10 => modules3}/ompi-switch.out, .../{modules4.3.1 => modules4}/bar-defaults.out, .../{modules4.3.1 => modules4}/bar-loads.out, .../{modules4.3.1 => modules4}/bar-switch.out, .../{modules4.3.1 => modules4}/foo-avail1.out, .../{modules4.3.1 => modules4}/foo-avail2.out, .../{modules4.3.1 => modules4}/foo-defaults.out, .../{modules4.3.1 => modules4}/foo-loads.out, .../{modules4.3.1 => modules4}/foo-switch.out, .../{modules4.3.1 => modules4}/modavail.out, .../{modules4.3.1 => modules4}/modversion.out, .../{modules4.3.1 => modules4}/ompi-defaults.out, .../{modules4.3.1 => modules4}/ompi-loads1.out, .../{modules4.3.1 => modules4}/ompi-switch.out, .../{modules3.2.10 => modules3}/bar-defaults.out, .../{modules3.2.10 => modules3}/bar-loads.out, .../{modules3.2.10 => modules3}/bar-switch.out, .../{modules3.2.10 => modules3}/foo-avail1.out, .../{modules3.2.10 => modules3}/foo-avail2.out, .../{modules3.2.10 => modules3}/foo-defaults.out, .../{modules3.2.10 => modules3}/foo-loads.out, .../{modules3.2.10 => modules3}/foo-switch.out, .../{modules3.2.10 => modules3}/modavail.out, .../{modules3.2.10 => modules3}/modversion.out, .../{modules3.2.10 => modules3}/ompi-defaults.out, .../{modules3.2.10 => modules3}/ompi-loads1.out, .../{modules3.2.10 => modules3}/ompi-switch.out, .../{modules4.3.1 => modules4}/bar-defaults.out, .../{modules4.3.1 => modules4}/bar-loads.out, .../{modules4.3.1 => modules4}/bar-switch.out, .../{modules4.3.1 => modules4}/foo-avail1.out, .../{modules4.3.1 => modules4}/foo-avail2.out, .../{modules4.3.1 => modules4}/foo-defaults.out, .../{modules4.3.1 => modules4}/foo-loads.out, .../{modules4.3.1 => modules4}/foo-switch.out, .../{modules4.3.1 => modules4}/modavail.out, .../{modules4.3.1 => modules4}/modversion.out, .../{modules4.3.1 => modules4}/ompi-defaults.out, .../{modules4.3.1 => modules4}/ompi-loads1.out, .../{modules4.3.1 => modules4}/ompi-switch.out, .../{modules3.2.10 => modules3}/bar-defaults.out, .../{modules3.2.10 => modules3}/bar-loads.out, .../{modules3.2.10 => modules3}/bar-switch.out, .../{modules3.2.10 => modules3}/foo-avail1.out, .../{modules3.2.10 => modules3}/foo-avail2.out, .../{modules3.2.10 => modules3}/foo-defaults.out, .../{modules3.2.10 => modules3}/foo-loads.out, .../{modules3.2.10 => modules3}/foo-switch.out, .../{modules3.2.10 => modules3}/modavail.out, .../{modules3.2.10 => modules3}/modversion.out, .../{modules3.2.10 => modules3}/ompi-defaults.out, .../{modules3.2.10 => modules3}/ompi-loads1.out, .../{modules3.2.10 => modules3}/ompi-switch.out, .../{modules4.3.1 => modules4}/bar-defaults.out, .../{modules4.3.1 => modules4}/bar-loads.out, .../{modules4.3.1 => modules4}/bar-switch.out, .../{modules4.3.1 => modules4}/foo-avail1.out, .../{modules4.3.1 => modules4}/foo-avail2.out, .../{modules4.3.1 => modules4}/foo-defaults.out, .../{modules4.3.1 => modules4}/foo-loads.out, .../{modules4.3.1 => modules4}/foo-switch.out, .../{modules4.3.1 => modules4}/modavail.out, .../{modules4.3.1 => modules4}/modversion.out, .../{modules4.3.1 => modules4}/ompi-defaults.out, .../{modules4.3.1 => modules4}/ompi-loads1.out, .../{modules4.3.1 => modules4}/ompi-switch.out, doc/source/cookbook/compiler-etc-dependencies.rst: doc: refer to more generic vers name in compiler-etc-depend recipe * doc/source/cookbook/compiler-etc-dependencies.rst: doc: simplify reading of compiler-etc-depend recipe (code) 2020-02-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../example-sessions/common_code.sh, .../flavours/modules3.2.10/bar-defaults.out, .../flavours/modules3.2.10/bar-loads.out, .../flavours/modules3.2.10/bar-switch.out, .../flavours/modules3.2.10/foo-avail1.out, .../flavours/modules3.2.10/foo-avail2.out, .../flavours/modules3.2.10/foo-defaults.out, .../flavours/modules3.2.10/foo-loads.out, .../flavours/modules3.2.10/foo-switch.out, .../flavours/modules3.2.10/modavail.out, .../flavours/modules3.2.10/modversion.out, .../flavours/modules3.2.10/ompi-defaults.out, .../flavours/modules3.2.10/ompi-loads1.out, .../flavours/modules3.2.10/ompi-switch.out, .../flavours/modules4.3.1/bar-defaults.out, .../flavours/modules4.3.1/bar-loads.out, .../flavours/modules4.3.1/bar-switch.out, .../flavours/modules4.3.1/foo-avail1.out, .../flavours/modules4.3.1/foo-avail2.out, .../flavours/modules4.3.1/foo-defaults.out, .../flavours/modules4.3.1/foo-loads.out, .../flavours/modules4.3.1/foo-switch.out, .../flavours/modules4.3.1/modavail.out, .../flavours/modules4.3.1/modversion.out, .../flavours/modules4.3.1/ompi-defaults.out, .../flavours/modules4.3.1/ompi-loads1.out, .../flavours/modules4.3.1/ompi-switch.out, .../homebrewed/modules3.2.10/bar-defaults.out, .../homebrewed/modules3.2.10/bar-loads.out, .../homebrewed/modules3.2.10/bar-switch.out, .../homebrewed/modules3.2.10/foo-avail1.out, .../homebrewed/modules3.2.10/foo-avail2.out, .../homebrewed/modules3.2.10/foo-defaults.out, .../homebrewed/modules3.2.10/foo-loads.out, .../homebrewed/modules3.2.10/foo-switch.out, .../homebrewed/modules3.2.10/modavail.out, .../homebrewed/modules3.2.10/modversion.out, .../homebrewed/modules3.2.10/ompi-defaults.out, .../homebrewed/modules3.2.10/ompi-loads1.out, .../homebrewed/modules3.2.10/ompi-switch.out, .../homebrewed/modules4.3.1/bar-defaults.out, .../homebrewed/modules4.3.1/bar-loads.out, .../homebrewed/modules4.3.1/bar-switch.out, .../homebrewed/modules4.3.1/foo-avail1.out, .../homebrewed/modules4.3.1/foo-avail2.out, .../homebrewed/modules4.3.1/foo-defaults.out, .../homebrewed/modules4.3.1/foo-loads.out, .../homebrewed/modules4.3.1/foo-switch.out, .../homebrewed/modules4.3.1/modavail.out, .../homebrewed/modules4.3.1/modversion.out, .../homebrewed/modules4.3.1/ompi-defaults.out, .../homebrewed/modules4.3.1/ompi-loads1.out, .../homebrewed/modules4.3.1/ompi-switch.out, .../modulepath/modules3.2.10/bar-defaults.out, .../modulepath/modules3.2.10/bar-loads.out, .../modulepath/modules3.2.10/bar-switch.out, .../modulepath/modules3.2.10/foo-avail1.out, .../modulepath/modules3.2.10/foo-avail2.out, .../modulepath/modules3.2.10/foo-defaults.out, .../modulepath/modules3.2.10/foo-loads.out, .../modulepath/modules3.2.10/foo-switch.out, .../modulepath/modules3.2.10/modavail.out, .../modulepath/modules3.2.10/modversion.out, .../modulepath/modules3.2.10/ompi-defaults.out, .../modulepath/modules3.2.10/ompi-loads1.out, .../modulepath/modules3.2.10/ompi-switch.out, .../modulepath/modules4.3.1/bar-defaults.out, .../modulepath/modules4.3.1/bar-loads.out, .../modulepath/modules4.3.1/bar-switch.out, .../modulepath/modules4.3.1/foo-avail1.out, .../modulepath/modules4.3.1/foo-avail2.out, .../modulepath/modules4.3.1/foo-defaults.out, .../modulepath/modules4.3.1/foo-loads.out, .../modulepath/modules4.3.1/foo-switch.out, .../modulepath/modules4.3.1/modavail.out, .../modulepath/modules4.3.1/modversion.out, .../modulepath/modules4.3.1/ompi-defaults.out, .../modulepath/modules4.3.1/ompi-loads1.out, .../modulepath/modules4.3.1/ompi-switch.out, .../modulerc/modules3.2.10/bar-defaults.out, .../modulerc/modules3.2.10/bar-loads.out, .../modulerc/modules3.2.10/bar-switch.out, .../modulerc/modules3.2.10/foo-avail1.out, .../modulerc/modules3.2.10/foo-avail2.out, .../modulerc/modules3.2.10/foo-defaults.out, .../modulerc/modules3.2.10/foo-loads.out, .../modulerc/modules3.2.10/foo-switch.out, .../modulerc/modules3.2.10/modavail.out, .../modulerc/modules3.2.10/modversion.out, .../modulerc/modules3.2.10/ompi-defaults.out, .../modulerc/modules3.2.10/ompi-loads1.out, .../modulerc/modules3.2.10/ompi-switch.out, .../modulerc/modules4.3.1/bar-defaults.out, .../modulerc/modules4.3.1/bar-loads.out, .../modulerc/modules4.3.1/bar-switch.out, .../modulerc/modules4.3.1/foo-avail1.out, .../modulerc/modules4.3.1/foo-avail2.out, .../modulerc/modules4.3.1/foo-defaults.out, .../modulerc/modules4.3.1/foo-loads.out, .../modulerc/modules4.3.1/foo-switch.out, .../modulerc/modules4.3.1/modavail.out, .../modulerc/modules4.3.1/modversion.out, .../modulerc/modules4.3.1/ompi-defaults.out, .../modulerc/modules4.3.1/ompi-loads1.out, .../modulerc/modules4.3.1/ompi-switch.out, .../tcllib/LoadedCompMatches.tcl, .../tcllib/LoadedMpiMatches.tcl, .../tcllib/WarningUtils.tcl, doc/source/cookbook/compiler-etc-dependencies.rst: doc: improve console output reading of compiler-etc-depend recipe * doc/source/cookbook/compiler-etc-dependencies.rst: doc: adopt neutral tone compiler-etc-depend recipe * doc/source/cookbook/compiler-etc-dependencies.rst: doc: add ref to ext tools mentionned in compiler-etc-depend recipe * doc/source/cookbook/compiler-etc-dependencies.rst: doc: normalize rst section/link syntax in compiler-etc-depend recipe * doc/source/cookbook/compiler-etc-dependencies.rst: doc: fix typos in compiler-etc-depend recipe * .../compiler-etc-dependencies/flavours/bar/4.7, .../compiler-etc-dependencies/flavours/bar/5.4, .../compiler-etc-dependencies/flavours/bar/common, .../compiler-etc-dependencies/flavours/foo/1.1, .../compiler-etc-dependencies/flavours/foo/2.4, .../compiler-etc-dependencies/flavours/foo/common, .../compiler-etc-dependencies/flavours/gnu/8.2.0, .../compiler-etc-dependencies/flavours/gnu/9.1.0, .../compiler-etc-dependencies/flavours/gnu/common, .../compiler-etc-dependencies/flavours/intel/2018, .../compiler-etc-dependencies/flavours/intel/2019, .../flavours/intel/common, .../flavours/intelmpi/default, .../compiler-etc-dependencies/flavours/mvapich/2.1, .../flavours/mvapich/2.3.1, .../flavours/mvapich/common, .../compiler-etc-dependencies/flavours/openmpi/3.1, .../compiler-etc-dependencies/flavours/openmpi/4.0, .../flavours/openmpi/common, .../compiler-etc-dependencies/flavours/pgi/18.4, .../compiler-etc-dependencies/flavours/pgi/19.4, .../compiler-etc-dependencies/flavours/pgi/common, .../compiler-etc-dependencies/flavours/simd/avx, .../compiler-etc-dependencies/flavours/simd/avx2, .../compiler-etc-dependencies/flavours/simd/common, .../compiler-etc-dependencies/flavours/simd/sse4.1, .../compiler-etc-dependencies/homebrewed/bar/4.7, .../compiler-etc-dependencies/homebrewed/bar/5.4, .../homebrewed/bar/common, .../compiler-etc-dependencies/homebrewed/foo/1.1, .../compiler-etc-dependencies/homebrewed/foo/2.4, .../homebrewed/foo/common, .../compiler-etc-dependencies/homebrewed/gcc/8.2.0, .../compiler-etc-dependencies/homebrewed/gcc/9.1.0, .../homebrewed/gcc/common, .../homebrewed/intel/2018, .../homebrewed/intel/2019, .../homebrewed/intel/common, .../homebrewed/intelmpi/default, .../homebrewed/mvapich/2.1, .../homebrewed/mvapich/2.3.1, .../homebrewed/mvapich/common, .../homebrewed/openmpi/3.1, .../homebrewed/openmpi/4.0, .../homebrewed/openmpi/common, .../compiler-etc-dependencies/homebrewed/pgi/18.4, .../compiler-etc-dependencies/homebrewed/pgi/19.4, .../homebrewed/pgi/common, .../compiler-etc-dependencies/homebrewed/simd/avx, .../compiler-etc-dependencies/homebrewed/simd/avx2, .../homebrewed/simd/common, .../homebrewed/simd/sse4.1, .../modrc_common/modulerc.default_lowest_simd, .../modrc_common/modulerc.select_compiler_family, .../modrc_common/modulerc.select_compiler_version, .../modrc_common/modulerc.select_mpi_family, .../modrc_common/modulerc.select_mpi_version, .../modulepath/Compiler/gcc/8.2.0/bar/4.7/avx, .../modulepath/Compiler/gcc/8.2.0/bar/4.7/sse4.1, .../modulepath/Compiler/gcc/8.2.0/foo/1.1, .../modulepath/Compiler/gcc/8.2.0/mvapich/2.1, .../modulepath/Compiler/gcc/8.2.0/openmpi/3.1, .../modulepath/Compiler/gcc/9.1.0/bar/5.4/avx, .../modulepath/Compiler/gcc/9.1.0/bar/5.4/avx2, .../modulepath/Compiler/gcc/9.1.0/foo/2.4, .../modulepath/Compiler/gcc/9.1.0/mvapich/2.1, .../modulepath/Compiler/gcc/9.1.0/mvapich/2.3.1, .../modulepath/Compiler/gcc/9.1.0/openmpi/3.1, .../modulepath/Compiler/gcc/9.1.0/openmpi/4.0, .../modulepath/Compiler/intel/2018/foo/1.1, .../Compiler/intel/2018/intelmpi/default, .../modulepath/Compiler/intel/2018/mvapich/2.1, .../modulepath/Compiler/intel/2018/openmpi/3.1, .../modulepath/Compiler/intel/2019/foo/2.4, .../Compiler/intel/2019/intelmpi/default, .../modulepath/Compiler/intel/2019/mvapich/2.1, .../modulepath/Compiler/intel/2019/mvapich/2.3.1, .../modulepath/Compiler/intel/2019/openmpi/3.1, .../modulepath/Compiler/intel/2019/openmpi/4.0, .../modulepath/Compiler/pgi/18.4/foo/1.1, .../modulepath/Compiler/pgi/18.4/mvapich/2.1, .../modulepath/Compiler/pgi/18.4/openmpi/3.1, .../modulepath/Compiler/pgi/19.4/foo/2.4, .../modulepath/Compiler/pgi/19.4/mvapich/2.1, .../modulepath/Compiler/pgi/19.4/mvapich/2.3.1, .../modulepath/Compiler/pgi/19.4/openmpi/3.1, .../modulepath/Compiler/pgi/19.4/openmpi/4.0, .../CompilerMPI/gcc/8.2.0/mvapich/2.1/foo/1.1, .../CompilerMPI/gcc/8.2.0/openmpi/3.1/foo/1.1, .../CompilerMPI/gcc/9.1.0/mvapich/2.3.1/foo/2.4, .../CompilerMPI/gcc/9.1.0/openmpi/4.0/foo/2.4, .../intel/2018/intelmpi/default/foo/1.1, .../CompilerMPI/intel/2018/mvapich/2.1/foo/1.1, .../CompilerMPI/intel/2018/openmpi/3.1/foo/1.1, .../intel/2019/intelmpi/default/foo/2.4, .../CompilerMPI/intel/2019/mvapich/2.3.1/foo/2.4, .../CompilerMPI/intel/2019/openmpi/4.0/foo/2.4, .../CompilerMPI/pgi/18.4/mvapich/2.1/foo/1.1, .../CompilerMPI/pgi/18.4/openmpi/3.1/foo/1.1, .../CompilerMPI/pgi/19.4/openmpi/3.1/foo/2.4, .../19.4/openmpi/4.0/{REAMDE.txt => README.txt}, .../modulepath/Core/gcc/8.2.0, .../modulepath/Core/gcc/9.1.0, .../modulepath/Core/gcc/common, .../modulepath/Core/intel/2018, .../modulepath/Core/intel/2019, .../modulepath/Core/intel/common, .../modulepath/Core/pgi/18.4, .../modulepath/Core/pgi/19.4, .../modulepath/Core/pgi/common, .../modulepath/common/bar/common, .../modulepath/common/foo/common, .../modulepath/common/intelmpi/common, .../modulepath/common/mvapich/common, .../modulepath/common/openmpi/common, .../compiler-etc-dependencies/modulerc3/bar/common, .../compiler-etc-dependencies/modulerc3/foo/common, .../modulerc3/mvapich/common, .../modulerc3/openmpi/common, .../modulerc4/bar/4.7/gcc/8.2.0/avx, .../modulerc4/bar/4.7/gcc/8.2.0/sse4.1, .../modulerc4/bar/5.4/gcc/9.1.0/avx, .../modulerc4/bar/5.4/gcc/9.1.0/avx2, .../compiler-etc-dependencies/modulerc4/bar/common, .../modulerc4/foo/1.1/gcc/8.2.0/mvapich/2.1, .../modulerc4/foo/1.1/gcc/8.2.0/nompi, .../modulerc4/foo/1.1/gcc/8.2.0/openmpi/3.1, .../modulerc4/foo/1.1/intel/2018/intelmpi, .../modulerc4/foo/1.1/intel/2018/mvapich/2.1, .../modulerc4/foo/1.1/intel/2018/nompi, .../modulerc4/foo/1.1/intel/2018/openmpi/3.1, .../modulerc4/foo/1.1/pgi/18.4/mvapich/2.1, .../modulerc4/foo/1.1/pgi/18.4/nompi, .../modulerc4/foo/1.1/pgi/18.4/openmpi/3.1, .../modulerc4/foo/2.4/gcc/9.1.0/mvapich/2.3.1, .../modulerc4/foo/2.4/gcc/9.1.0/nompi, .../modulerc4/foo/2.4/gcc/9.1.0/openmpi/4.0, .../modulerc4/foo/2.4/intel/2019/intelmpi, .../modulerc4/foo/2.4/intel/2019/mvapich/2.3.1, .../modulerc4/foo/2.4/intel/2019/nompi, .../modulerc4/foo/2.4/intel/2019/openmpi/4.0, .../modulerc4/foo/2.4/pgi/19.4/nompi, .../modulerc4/foo/2.4/pgi/19.4/openmpi/3.1, .../compiler-etc-dependencies/modulerc4/foo/common, .../compiler-etc-dependencies/modulerc4/gcc/8.2.0, .../compiler-etc-dependencies/modulerc4/gcc/9.1.0, .../compiler-etc-dependencies/modulerc4/gcc/common, .../compiler-etc-dependencies/modulerc4/intel/2018, .../compiler-etc-dependencies/modulerc4/intel/2019, .../modulerc4/intel/common, .../modulerc4/mvapich/2.1/gcc/8.2.0, .../modulerc4/mvapich/2.1/gcc/9.1.0, .../modulerc4/mvapich/2.1/intel/2018, .../modulerc4/mvapich/2.1/intel/2019, .../modulerc4/mvapich/2.1/pgi/18.4, .../modulerc4/mvapich/2.1/pgi/19.4, .../modulerc4/mvapich/2.3.1/gcc/9.1.0, .../modulerc4/mvapich/2.3.1/intel/2019, .../modulerc4/mvapich/2.3.1/pgi/19.4, .../modulerc4/mvapich/common, .../modulerc4/openmpi/3.1/gcc/8.2.0, .../modulerc4/openmpi/3.1/gcc/9.1.0, .../modulerc4/openmpi/3.1/intel/2018, .../modulerc4/openmpi/3.1/intel/2019, .../modulerc4/openmpi/3.1/pgi/18.4, .../modulerc4/openmpi/3.1/pgi/19.4, .../modulerc4/openmpi/4.0/gcc/9.1.0, .../modulerc4/openmpi/4.0/intel/2019, .../modulerc4/openmpi/4.0/pgi/19.4, .../modulerc4/openmpi/common, .../compiler-etc-dependencies/modulerc4/pgi/18.4, .../compiler-etc-dependencies/modulerc4/pgi/19.4, .../compiler-etc-dependencies/modulerc4/pgi/common, doc/source/cookbook/compiler-etc-dependencies.rst: doc: normalize code of modulefile of compiler-etc-depend recipe And include these modulefile examples as Tcl code in recipe document to get their content highlighted. 2020-02-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../tcllib/ChildModules.tcl, .../tcllib/CompilerFromPath.tcl, .../tcllib/CompilerUtils.tcl, .../compiler-etc-dependencies/tcllib/GetFamVer.tcl, .../tcllib/LoadedCompMatches.tcl, .../tcllib/LoadedModules.tcl, .../tcllib/LoadedMpiMatches.tcl, .../compiler-etc-dependencies/tcllib/MpiUtils.tcl, .../tcllib/WarningUtils.tcl, .../tcllib/common_utilities.tcl, .../compiler-etc-dependencies/tcllib/temp.tcl, doc/source/cookbook/compiler-etc-dependencies.rst: doc: normalize code of Tcl lib of compiler-etc-depend recipe Add authorship information, same header and comment structure for all Tcl files to include these files in cookbook recipe document with Tcl syntax highlight. * doc/source/cookbook/compiler-etc-dependencies.rst: doc: fix broken refs in compiler-etc-depend recipe 2020-02-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../flavours/modules3.2.10/foo-avail1.out, .../flavours/modules3.2.10/foo-avail2.out, .../flavours/modules3.2.10/modavail.out, .../flavours/modules4.3.1/bar-loads.out, .../flavours/modules4.3.1/bar-switch.out, .../flavours/modules4.3.1/foo-avail1.out, .../flavours/modules4.3.1/foo-avail2.out, .../flavours/modules4.3.1/foo-defaults.out, .../flavours/modules4.3.1/foo-loads.out, .../flavours/modules4.3.1/foo-switch.out, .../flavours/modules4.3.1/modavail.out, .../flavours/modules4.3.1/ompi-defaults.out, .../flavours/modules4.3.1/ompi-loads1.out, .../flavours/modules4.3.1/ompi-switch.out, .../example-sessions/foo-loads.sh, .../homebrewed/modules3.2.10/foo-avail1.out, .../homebrewed/modules3.2.10/foo-avail2.out, .../homebrewed/modules3.2.10/modavail.out, .../homebrewed/modules4.3.1/bar-defaults.out, .../homebrewed/modules4.3.1/bar-loads.out, .../homebrewed/modules4.3.1/bar-switch.out, .../homebrewed/modules4.3.1/foo-avail1.out, .../homebrewed/modules4.3.1/foo-avail2.out, .../homebrewed/modules4.3.1/foo-defaults.out, .../homebrewed/modules4.3.1/foo-loads.out, .../homebrewed/modules4.3.1/foo-switch.out, .../homebrewed/modules4.3.1/modavail.out, .../homebrewed/modules4.3.1/ompi-defaults.out, .../homebrewed/modules4.3.1/ompi-loads1.out, .../homebrewed/modules4.3.1/ompi-switch.out, .../modulepath/modules3.2.10/foo-avail1.out, .../modulepath/modules3.2.10/modavail.out, .../modulepath/modules4.3.1/bar-defaults.out, .../modulepath/modules4.3.1/bar-loads.out, .../modulepath/modules4.3.1/bar-switch.out, .../modulepath/modules4.3.1/foo-avail1.out, .../modulepath/modules4.3.1/foo-defaults.out, .../modulepath/modules4.3.1/foo-loads.out, .../modulepath/modules4.3.1/foo-switch.out, .../modulepath/modules4.3.1/modavail.out, .../modulepath/modules4.3.1/ompi-defaults.out, .../modulepath/modules4.3.1/ompi-loads1.out, .../modulepath/modules4.3.1/ompi-switch.out, .../modulerc/modules3.2.10/foo-avail1.out, .../modulerc/modules3.2.10/foo-avail2.out, .../modulerc/modules3.2.10/modavail.out, .../modulerc/modules4.3.1/bar-defaults.out, .../modulerc/modules4.3.1/bar-loads.out, .../modulerc/modules4.3.1/bar-switch.out, .../modulerc/modules4.3.1/foo-avail1.out, .../modulerc/modules4.3.1/foo-avail2.out, .../modulerc/modules4.3.1/foo-defaults.out, .../modulerc/modules4.3.1/foo-loads.out, .../modulerc/modules4.3.1/foo-switch.out, .../modulerc/modules4.3.1/modavail.out, .../modulerc/modules4.3.1/ompi-defaults.out, .../modulerc/modules4.3.1/ompi-loads1.out, .../modulerc/modules4.3.1/ompi-switch.out, .../example-sessions/ompi-switch.sh, .../compiler-etc-dependencies/flavours/gnu/common, .../flavours/intel/common, .../flavours/openmpi/common, .../compiler-etc-dependencies/flavours/pgi/common, .../homebrewed/foo/common, .../homebrewed/gcc/common, .../homebrewed/intel/common, .../homebrewed/pgi/common, .../homebrewed/simd/common, .../modrc_common/modulerc.default_lowest_simd, .../modrc_common/modulerc.select_compiler_family, .../modrc_common/modulerc.select_compiler_version, .../modrc_common/modulerc.select_mpi_family, .../modrc_common/modulerc.select_mpi_version, .../CompilerMPI/pgi/19.4/openmpi/4.0/REAMDE.txt, .../modulepath/Core/gcc/common, .../modulepath/Core/intel/common, .../modulepath/Core/pgi/common, .../modulepath/common/intelmpi/common, .../modulepath/common/mvapich/common, .../modulepath/common/openmpi/common, .../modulerc3/mvapich/common, .../modulerc3/openmpi/common, .../compiler-etc-dependencies/modulerc4/gcc/common, .../modulerc4/intel/common, .../modulerc4/mvapich/common, .../modulerc4/openmpi/common, .../compiler-etc-dependencies/modulerc4/pgi/common, .../tcllib/ChildModules.tcl, .../tcllib/CompilerFromPath.tcl, .../tcllib/CompilerUtils.tcl, .../compiler-etc-dependencies/tcllib/GetFamVer.tcl, .../tcllib/LoadedCompMatches.tcl, .../tcllib/LoadedMpiMatches.tcl, .../compiler-etc-dependencies/tcllib/MpiUtils.tcl, .../tcllib/WarningUtils.tcl, .../tcllib/common_utilities.tcl, .../compiler-etc-dependencies/tcllib/temp.tcl: doc: simplify reading of compiler-etc-depend recipe (trailing space) * .../flavours/modules3.2.10/bar-loads.out, .../flavours/modules3.2.10/bar-switch.out, .../flavours/modules3.2.10/foo-loads.out, .../flavours/modules3.2.10/foo-switch.out, .../flavours/modules3.2.10/ompi-loads1.out, .../flavours/modules3.2.10/ompi-switch.out, .../flavours/modules4.3.1/bar-loads.out, .../flavours/modules4.3.1/bar-switch.out, .../flavours/modules4.3.1/foo-loads.out, .../flavours/modules4.3.1/foo-switch.out, .../flavours/modules4.3.1/ompi-loads1.out, .../flavours/modules4.3.1/ompi-switch.out, .../homebrewed/modules3.2.10/bar-loads.out, .../homebrewed/modules3.2.10/bar-switch.out, .../homebrewed/modules3.2.10/foo-loads.out, .../homebrewed/modules3.2.10/foo-switch.out, .../homebrewed/modules3.2.10/ompi-loads1.out, .../homebrewed/modules3.2.10/ompi-switch.out, .../homebrewed/modules4.3.1/bar-defaults.out, .../homebrewed/modules4.3.1/bar-loads.out, .../homebrewed/modules4.3.1/bar-switch.out, .../homebrewed/modules4.3.1/foo-defaults.out, .../homebrewed/modules4.3.1/foo-loads.out, .../homebrewed/modules4.3.1/foo-switch.out, .../homebrewed/modules4.3.1/ompi-defaults.out, .../homebrewed/modules4.3.1/ompi-loads1.out, .../homebrewed/modules4.3.1/ompi-switch.out, .../modulepath/modules3.2.10/bar-defaults.out, .../modulepath/modules3.2.10/bar-loads.out, .../modulepath/modules3.2.10/bar-switch.out, .../modulepath/modules3.2.10/foo-defaults.out, .../modulepath/modules3.2.10/foo-loads.out, .../modulepath/modules3.2.10/foo-switch.out, .../modulepath/modules3.2.10/ompi-defaults.out, .../modulepath/modules3.2.10/ompi-loads1.out, .../modulepath/modules3.2.10/ompi-switch.out, .../modulepath/modules4.3.1/bar-defaults.out, .../modulepath/modules4.3.1/bar-loads.out, .../modulepath/modules4.3.1/bar-switch.out, .../modulepath/modules4.3.1/foo-defaults.out, .../modulepath/modules4.3.1/foo-loads.out, .../modulepath/modules4.3.1/foo-switch.out, .../modulepath/modules4.3.1/ompi-defaults.out, .../modulepath/modules4.3.1/ompi-loads1.out, .../modulepath/modules4.3.1/ompi-switch.out, .../modulerc/modules3.2.10/bar-defaults.out, .../modulerc/modules3.2.10/bar-loads.out, .../modulerc/modules3.2.10/bar-switch.out, .../modulerc/modules3.2.10/foo-defaults.out, .../modulerc/modules3.2.10/foo-loads.out, .../modulerc/modules3.2.10/foo-switch.out, .../modulerc/modules3.2.10/ompi-defaults.out, .../modulerc/modules3.2.10/ompi-loads1.out, .../modulerc/modules3.2.10/ompi-switch.out, .../modulerc/modules4.3.1/bar-defaults.out, .../modulerc/modules4.3.1/bar-loads.out, .../modulerc/modules4.3.1/bar-switch.out, .../modulerc/modules4.3.1/foo-defaults.out, .../modulerc/modules4.3.1/foo-loads.out, .../modulerc/modules4.3.1/foo-switch.out, .../modulerc/modules4.3.1/ompi-defaults.out, .../modulerc/modules4.3.1/ompi-loads1.out, .../modulerc/modules4.3.1/ompi-switch.out, .../fake-sw-root/bar/4.7/gcc/8.2.0/avx/bin/bar, .../fake-sw-root/bar/4.7/gcc/8.2.0/sse4.1/bin/bar, .../fake-sw-root/bar/5.4/gcc/9.1.0/avx/bin/bar, .../fake-sw-root/bar/5.4/gcc/9.1.0/avx2/bin/bar, .../fake-sw-root/foo/1.1/gcc/8.2.0/mvapich/2.1/bin/foo, .../fake-sw-root/foo/1.1/gcc/8.2.0/nompi/bin/foo, .../fake-sw-root/foo/1.1/gcc/8.2.0/openmpi/3.1/bin/foo, .../fake-sw-root/foo/1.1/intel/2018/intelmpi/bin/foo, .../foo/1.1/intel/2018/mvapich/2.1/bin/foo, .../fake-sw-root/foo/1.1/intel/2018/nompi/bin/foo, .../foo/1.1/intel/2018/openmpi/3.1/bin/foo, .../fake-sw-root/foo/1.1/pgi/18.4/mvapich/2.1/bin/foo, .../fake-sw-root/foo/1.1/pgi/18.4/nompi/bin/foo, .../fake-sw-root/foo/1.1/pgi/18.4/openmpi/3.1/bin/foo, .../foo/2.4/gcc/9.1.0/mvapich/2.3.1/bin/foo, .../fake-sw-root/foo/2.4/gcc/9.1.0/nompi/bin/foo, .../fake-sw-root/foo/2.4/gcc/9.1.0/openmpi/4.0/bin/foo, .../fake-sw-root/foo/2.4/intel/2019/intelmpi/bin/foo, .../foo/2.4/intel/2019/mvapich/2.3.1/bin/foo, .../fake-sw-root/foo/2.4/intel/2019/nompi/bin/foo, .../foo/2.4/intel/2019/openmpi/4.0/bin/foo, .../fake-sw-root/foo/2.4/pgi/19.4/nompi/bin/foo, .../fake-sw-root/foo/2.4/pgi/19.4/openmpi/3.1/bin/foo, .../fake-sw-root/gcc/8.2.0/bin/gcc, .../fake-sw-root/gcc/9.1.0/bin/gcc, .../fake-sw-root/intel/2018/bin/icc, .../fake-sw-root/intel/2019/bin/icc, .../fake-sw-root/mvapich/2.1/gcc/8.2.0/bin/mpirun, .../fake-sw-root/mvapich/2.1/gcc/9.1.0/bin/mpirun, .../fake-sw-root/mvapich/2.1/intel/2018/bin/mpirun, .../fake-sw-root/mvapich/2.1/intel/2019/bin/mpirun, .../fake-sw-root/mvapich/2.1/pgi/18.4/bin/mpirun, .../fake-sw-root/mvapich/2.1/pgi/19.4/bin/mpirun, .../fake-sw-root/mvapich/2.3.1/gcc/9.1.0/bin/mpirun, .../fake-sw-root/mvapich/2.3.1/intel/2019/bin/mpirun, .../fake-sw-root/mvapich/2.3.1/pgi/19.4/bin/mpirun, .../fake-sw-root/openmpi/3.1/gcc/8.2.0/bin/mpirun, .../fake-sw-root/openmpi/3.1/gcc/9.1.0/bin/mpirun, .../fake-sw-root/openmpi/3.1/intel/2018/bin/mpirun, .../fake-sw-root/openmpi/3.1/intel/2019/bin/mpirun, .../fake-sw-root/openmpi/3.1/pgi/18.4/bin/mpirun, .../fake-sw-root/openmpi/3.1/pgi/19.4/bin/mpirun, .../fake-sw-root/openmpi/4.0/gcc/9.1.0/bin/mpirun, .../fake-sw-root/openmpi/4.0/intel/2019/bin/mpirun, .../fake-sw-root/openmpi/4.0/pgi/19.4/bin/mpirun, .../fake-sw-root/pgi/18.4/bin/pgcc, .../fake-sw-root/pgi/19.4/bin/pgcc, doc/example/compiler-etc-dependencies/flavours/bar/4.7, doc/example/compiler-etc-dependencies/flavours/bar/5.4, .../compiler-etc-dependencies/flavours/bar/common, doc/example/compiler-etc-dependencies/flavours/foo/1.1, doc/example/compiler-etc-dependencies/flavours/foo/2.4, .../compiler-etc-dependencies/flavours/foo/common, .../compiler-etc-dependencies/flavours/gnu/8.2.0, .../compiler-etc-dependencies/flavours/gnu/9.1.0, .../compiler-etc-dependencies/flavours/gnu/common, .../compiler-etc-dependencies/flavours/intel/2018, .../compiler-etc-dependencies/flavours/intel/2019, .../compiler-etc-dependencies/flavours/intel/common, .../compiler-etc-dependencies/flavours/mvapich/2.1, .../compiler-etc-dependencies/flavours/mvapich/2.3.1, .../compiler-etc-dependencies/flavours/mvapich/common, .../compiler-etc-dependencies/flavours/openmpi/3.1, .../compiler-etc-dependencies/flavours/openmpi/4.0, .../compiler-etc-dependencies/flavours/openmpi/common, .../compiler-etc-dependencies/flavours/pgi/18.4, .../compiler-etc-dependencies/flavours/pgi/19.4, .../compiler-etc-dependencies/flavours/pgi/common, .../compiler-etc-dependencies/homebrewed/bar/4.7, .../compiler-etc-dependencies/homebrewed/bar/5.4, .../compiler-etc-dependencies/homebrewed/bar/common, .../compiler-etc-dependencies/homebrewed/foo/1.1, .../compiler-etc-dependencies/homebrewed/foo/2.4, .../compiler-etc-dependencies/homebrewed/foo/common, .../compiler-etc-dependencies/homebrewed/gcc/8.2.0, .../compiler-etc-dependencies/homebrewed/gcc/9.1.0, .../compiler-etc-dependencies/homebrewed/gcc/common, .../compiler-etc-dependencies/homebrewed/intel/2018, .../compiler-etc-dependencies/homebrewed/intel/2019, .../compiler-etc-dependencies/homebrewed/intel/common, .../compiler-etc-dependencies/homebrewed/mvapich/2.1, .../compiler-etc-dependencies/homebrewed/mvapich/2.3.1, .../homebrewed/mvapich/common, .../compiler-etc-dependencies/homebrewed/openmpi/3.1, .../compiler-etc-dependencies/homebrewed/openmpi/4.0, .../homebrewed/openmpi/common, .../compiler-etc-dependencies/homebrewed/pgi/18.4, .../compiler-etc-dependencies/homebrewed/pgi/19.4, .../compiler-etc-dependencies/homebrewed/pgi/common, .../modulepath/Compiler/gcc/8.2.0/bar/4.7/avx, .../modulepath/Compiler/gcc/8.2.0/bar/4.7/sse4.1, .../modulepath/Compiler/gcc/8.2.0/foo/1.1, .../modulepath/Compiler/gcc/8.2.0/mvapich/2.1, .../modulepath/Compiler/gcc/8.2.0/openmpi/3.1, .../modulepath/Compiler/gcc/9.1.0/bar/5.4/avx, .../modulepath/Compiler/gcc/9.1.0/bar/5.4/avx2, .../modulepath/Compiler/gcc/9.1.0/foo/2.4, .../modulepath/Compiler/gcc/9.1.0/mvapich/2.1, .../modulepath/Compiler/gcc/9.1.0/mvapich/2.3.1, .../modulepath/Compiler/gcc/9.1.0/openmpi/3.1, .../modulepath/Compiler/gcc/9.1.0/openmpi/4.0, .../modulepath/Compiler/intel/2018/foo/1.1, .../modulepath/Compiler/intel/2018/intelmpi/default, .../modulepath/Compiler/intel/2018/mvapich/2.1, .../modulepath/Compiler/intel/2018/openmpi/3.1, .../modulepath/Compiler/intel/2019/foo/2.4, .../modulepath/Compiler/intel/2019/intelmpi/default, .../modulepath/Compiler/intel/2019/mvapich/2.1, .../modulepath/Compiler/intel/2019/mvapich/2.3.1, .../modulepath/Compiler/intel/2019/openmpi/3.1, .../modulepath/Compiler/intel/2019/openmpi/4.0, .../modulepath/Compiler/pgi/18.4/foo/1.1, .../modulepath/Compiler/pgi/18.4/mvapich/2.1, .../modulepath/Compiler/pgi/18.4/openmpi/3.1, .../modulepath/Compiler/pgi/19.4/foo/2.4, .../modulepath/Compiler/pgi/19.4/mvapich/2.1, .../modulepath/Compiler/pgi/19.4/mvapich/2.3.1, .../modulepath/Compiler/pgi/19.4/openmpi/3.1, .../modulepath/Compiler/pgi/19.4/openmpi/4.0, .../CompilerMPI/gcc/8.2.0/mvapich/2.1/foo/1.1, .../CompilerMPI/gcc/8.2.0/openmpi/3.1/foo/1.1, .../CompilerMPI/gcc/9.1.0/mvapich/2.3.1/foo/2.4, .../CompilerMPI/gcc/9.1.0/openmpi/4.0/foo/2.4, .../CompilerMPI/intel/2018/intelmpi/default/foo/1.1, .../CompilerMPI/intel/2018/mvapich/2.1/foo/1.1, .../CompilerMPI/intel/2018/openmpi/3.1/foo/1.1, .../CompilerMPI/intel/2019/intelmpi/default/foo/2.4, .../CompilerMPI/intel/2019/mvapich/2.3.1/foo/2.4, .../CompilerMPI/intel/2019/openmpi/4.0/foo/2.4, .../CompilerMPI/pgi/18.4/mvapich/2.1/foo/1.1, .../CompilerMPI/pgi/18.4/openmpi/3.1/foo/1.1, .../CompilerMPI/pgi/19.4/openmpi/3.1/foo/2.4, .../modulepath/Core/gcc/8.2.0, .../modulepath/Core/gcc/9.1.0, .../modulepath/Core/gcc/common, .../modulepath/Core/intel/2018, .../modulepath/Core/intel/2019, .../modulepath/Core/intel/common, .../compiler-etc-dependencies/modulepath/Core/pgi/18.4, .../compiler-etc-dependencies/modulepath/Core/pgi/19.4, .../modulepath/Core/pgi/common, .../modulepath/common/bar/common, .../modulepath/common/foo/common, .../modulepath/common/mvapich/common, .../modulepath/common/openmpi/common, .../compiler-etc-dependencies/modulerc3/bar/common, .../compiler-etc-dependencies/modulerc3/foo/common, .../compiler-etc-dependencies/modulerc3/mvapich/common, .../compiler-etc-dependencies/modulerc3/openmpi/common, .../modulerc4/bar/4.7/gcc/8.2.0/avx, .../modulerc4/bar/4.7/gcc/8.2.0/sse4.1, .../modulerc4/bar/5.4/gcc/9.1.0/avx, .../modulerc4/bar/5.4/gcc/9.1.0/avx2, .../compiler-etc-dependencies/modulerc4/bar/common, .../modulerc4/foo/1.1/gcc/8.2.0/mvapich/2.1, .../modulerc4/foo/1.1/gcc/8.2.0/nompi, .../modulerc4/foo/1.1/gcc/8.2.0/openmpi/3.1, .../modulerc4/foo/1.1/intel/2018/intelmpi, .../modulerc4/foo/1.1/intel/2018/mvapich/2.1, .../modulerc4/foo/1.1/intel/2018/nompi, .../modulerc4/foo/1.1/intel/2018/openmpi/3.1, .../modulerc4/foo/1.1/pgi/18.4/mvapich/2.1, .../modulerc4/foo/1.1/pgi/18.4/nompi, .../modulerc4/foo/1.1/pgi/18.4/openmpi/3.1, .../modulerc4/foo/2.4/gcc/9.1.0/mvapich/2.3.1, .../modulerc4/foo/2.4/gcc/9.1.0/nompi, .../modulerc4/foo/2.4/gcc/9.1.0/openmpi/4.0, .../modulerc4/foo/2.4/intel/2019/intelmpi, .../modulerc4/foo/2.4/intel/2019/mvapich/2.3.1, .../modulerc4/foo/2.4/intel/2019/nompi, .../modulerc4/foo/2.4/intel/2019/openmpi/4.0, .../modulerc4/foo/2.4/pgi/19.4/nompi, .../modulerc4/foo/2.4/pgi/19.4/openmpi/3.1, .../compiler-etc-dependencies/modulerc4/foo/common, .../compiler-etc-dependencies/modulerc4/gcc/8.2.0, .../compiler-etc-dependencies/modulerc4/gcc/9.1.0, .../compiler-etc-dependencies/modulerc4/gcc/common, .../compiler-etc-dependencies/modulerc4/intel/2018, .../compiler-etc-dependencies/modulerc4/intel/2019, .../compiler-etc-dependencies/modulerc4/intel/common, .../modulerc4/mvapich/2.1/gcc/8.2.0, .../modulerc4/mvapich/2.1/gcc/9.1.0, .../modulerc4/mvapich/2.1/intel/2018, .../modulerc4/mvapich/2.1/intel/2019, .../modulerc4/mvapich/2.1/pgi/18.4, .../modulerc4/mvapich/2.1/pgi/19.4, .../modulerc4/mvapich/2.3.1/gcc/9.1.0, .../modulerc4/mvapich/2.3.1/intel/2019, .../modulerc4/mvapich/2.3.1/pgi/19.4, .../compiler-etc-dependencies/modulerc4/mvapich/common, .../modulerc4/openmpi/3.1/gcc/8.2.0, .../modulerc4/openmpi/3.1/gcc/9.1.0, .../modulerc4/openmpi/3.1/intel/2018, .../modulerc4/openmpi/3.1/intel/2019, .../modulerc4/openmpi/3.1/pgi/18.4, .../modulerc4/openmpi/3.1/pgi/19.4, .../modulerc4/openmpi/4.0/gcc/9.1.0, .../modulerc4/openmpi/4.0/intel/2019, .../modulerc4/openmpi/4.0/pgi/19.4, .../compiler-etc-dependencies/modulerc4/openmpi/common, .../compiler-etc-dependencies/modulerc4/pgi/18.4, .../compiler-etc-dependencies/modulerc4/pgi/19.4, .../compiler-etc-dependencies/modulerc4/pgi/common, doc/source/cookbook/compiler-etc-dependencies.rst: doc: simplify reading of compiler-etc-depend recipe (dummy) 2019-12-20 Tom Payerle <payerle@umd.edu> * .../example-sessions/bar-defaults.sh, .../example-sessions/bar-loads.sh, .../example-sessions/bar-switch.sh, .../example-sessions/common_code.sh, .../flavours/modules3.2.10/bar-defaults.out, .../flavours/modules3.2.10/bar-loads.out, .../flavours/modules3.2.10/bar-switch.out, .../flavours/modules3.2.10/foo-avail1.out, .../flavours/modules3.2.10/foo-avail2.out, .../flavours/modules3.2.10/foo-defaults.out, .../flavours/modules3.2.10/foo-loads.out, .../flavours/modules3.2.10/foo-switch.out, .../flavours/modules3.2.10/modavail.out, .../flavours/modules3.2.10/modversion.out, .../flavours/modules3.2.10/ompi-defaults.out, .../flavours/modules3.2.10/ompi-loads1.out, .../flavours/modules3.2.10/ompi-switch.out, .../flavours/modules4.3.1/bar-defaults.out, .../flavours/modules4.3.1/bar-loads.out, .../flavours/modules4.3.1/bar-switch.out, .../flavours/modules4.3.1/foo-avail1.out, .../flavours/modules4.3.1/foo-avail2.out, .../flavours/modules4.3.1/foo-defaults.out, .../flavours/modules4.3.1/foo-loads.out, .../flavours/modules4.3.1/foo-switch.out, .../flavours/modules4.3.1/modavail.out, .../flavours/modules4.3.1/modversion.out, .../flavours/modules4.3.1/ompi-defaults.out, .../flavours/modules4.3.1/ompi-loads1.out, .../flavours/modules4.3.1/ompi-switch.out, .../example-sessions/foo-avail1.sh, .../example-sessions/foo-avail2.sh, .../example-sessions/foo-defaults.sh, .../example-sessions/foo-loads.sh, .../example-sessions/foo-switch.sh, .../homebrewed/modules3.2.10/bar-defaults.out, .../homebrewed/modules3.2.10/bar-loads.out, .../homebrewed/modules3.2.10/bar-switch.out, .../homebrewed/modules3.2.10/foo-avail1.out, .../homebrewed/modules3.2.10/foo-avail2.out, .../homebrewed/modules3.2.10/foo-defaults.out, .../homebrewed/modules3.2.10/foo-loads.out, .../homebrewed/modules3.2.10/foo-switch.out, .../homebrewed/modules3.2.10/modavail.out, .../homebrewed/modules3.2.10/modversion.out, .../homebrewed/modules3.2.10/ompi-defaults.out, .../homebrewed/modules3.2.10/ompi-loads1.out, .../homebrewed/modules3.2.10/ompi-switch.out, .../homebrewed/modules4.3.1/bar-defaults.out, .../homebrewed/modules4.3.1/bar-loads.out, .../homebrewed/modules4.3.1/bar-switch.out, .../homebrewed/modules4.3.1/foo-avail1.out, .../homebrewed/modules4.3.1/foo-avail2.out, .../homebrewed/modules4.3.1/foo-defaults.out, .../homebrewed/modules4.3.1/foo-loads.out, .../homebrewed/modules4.3.1/foo-switch.out, .../homebrewed/modules4.3.1/modavail.out, .../homebrewed/modules4.3.1/modversion.out, .../homebrewed/modules4.3.1/ompi-defaults.out, .../homebrewed/modules4.3.1/ompi-loads1.out, .../homebrewed/modules4.3.1/ompi-switch.out, .../example-sessions/modavail.sh, .../modulepath/modules3.2.10/bar-defaults.out, .../modulepath/modules3.2.10/bar-loads.out, .../modulepath/modules3.2.10/bar-switch.out, .../modulepath/modules3.2.10/foo-avail1.out, .../modulepath/modules3.2.10/foo-avail2.out, .../modulepath/modules3.2.10/foo-defaults.out, .../modulepath/modules3.2.10/foo-loads.out, .../modulepath/modules3.2.10/foo-switch.out, .../modulepath/modules3.2.10/modavail.out, .../modulepath/modules3.2.10/modversion.out, .../modulepath/modules3.2.10/ompi-defaults.out, .../modulepath/modules3.2.10/ompi-loads1.out, .../modulepath/modules3.2.10/ompi-switch.out, .../modulepath/modules4.3.1/bar-defaults.out, .../modulepath/modules4.3.1/bar-loads.out, .../modulepath/modules4.3.1/bar-switch.out, .../modulepath/modules4.3.1/foo-avail1.out, .../modulepath/modules4.3.1/foo-avail2.out, .../modulepath/modules4.3.1/foo-defaults.out, .../modulepath/modules4.3.1/foo-loads.out, .../modulepath/modules4.3.1/foo-switch.out, .../modulepath/modules4.3.1/modavail.out, .../modulepath/modules4.3.1/modversion.out, .../modulepath/modules4.3.1/ompi-defaults.out, .../modulepath/modules4.3.1/ompi-loads1.out, .../modulepath/modules4.3.1/ompi-switch.out, .../modulerc/modules3.2.10/bar-defaults.out, .../modulerc/modules3.2.10/bar-loads.out, .../modulerc/modules3.2.10/bar-switch.out, .../modulerc/modules3.2.10/foo-avail1.out, .../modulerc/modules3.2.10/foo-avail2.out, .../modulerc/modules3.2.10/foo-defaults.out, .../modulerc/modules3.2.10/foo-loads.out, .../modulerc/modules3.2.10/foo-switch.out, .../modulerc/modules3.2.10/modavail.out, .../modulerc/modules3.2.10/modversion.out, .../modulerc/modules3.2.10/ompi-defaults.out, .../modulerc/modules3.2.10/ompi-loads1.out, .../modulerc/modules3.2.10/ompi-switch.out, .../modulerc/modules4.3.1/bar-defaults.out, .../modulerc/modules4.3.1/bar-loads.out, .../modulerc/modules4.3.1/bar-switch.out, .../modulerc/modules4.3.1/foo-avail1.out, .../modulerc/modules4.3.1/foo-avail2.out, .../modulerc/modules4.3.1/foo-defaults.out, .../modulerc/modules4.3.1/foo-loads.out, .../modulerc/modules4.3.1/foo-switch.out, .../modulerc/modules4.3.1/modavail.out, .../modulerc/modules4.3.1/modversion.out, .../modulerc/modules4.3.1/ompi-defaults.out, .../modulerc/modules4.3.1/ompi-loads1.out, .../modulerc/modules4.3.1/ompi-switch.out, .../example-sessions/modversion.sh, .../example-sessions/ompi-defaults.sh, .../example-sessions/ompi-loads1.sh, .../example-sessions/ompi-switch.sh, .../example-sessions/ompi-switch.sh.m431, .../fake-sw-root/bar/4.7/1/README.txt, .../fake-sw-root/bar/4.7/1/gnu-8.2.0-simd-avx, .../fake-sw-root/bar/4.7/1/gnu-8.2.0-simd-sse4.1, .../fake-sw-root/bar/4.7/gcc/8.2.0/avx/bin/bar, .../fake-sw-root/bar/4.7/gcc/8.2.0/sse4.1/bin/bar, .../fake-sw-root/bar/5.4/1/README.txt, .../fake-sw-root/bar/5.4/1/gnu-9.1.0-simd-avx, .../fake-sw-root/bar/5.4/1/gnu-9.1.0-simd-avx2, .../fake-sw-root/bar/5.4/gcc/9.1.0/avx/bin/bar, .../fake-sw-root/bar/5.4/gcc/9.1.0/avx2/bin/bar, .../fake-sw-root/foo/1.1/1/README.txt, .../fake-sw-root/foo/1.1/1/gnu-8.2.0, .../fake-sw-root/foo/1.1/1/gnu-8.2.0-mvapich-2.1, .../fake-sw-root/foo/1.1/1/gnu-8.2.0-openmpi-3.1, .../fake-sw-root/foo/1.1/1/intel-2018, .../foo/1.1/1/intel-2018-intelmpi-default, .../fake-sw-root/foo/1.1/1/intel-2018-mvapich-2.1, .../fake-sw-root/foo/1.1/1/intel-2018-openmpi-3.1, .../fake-sw-root/foo/1.1/1/pgi-18.4, .../fake-sw-root/foo/1.1/1/pgi-18.4-mvapich-2.1, .../fake-sw-root/foo/1.1/1/pgi-18.4-openmpi-3.1, .../foo/1.1/gcc/8.2.0/mvapich/2.1/bin/foo, .../fake-sw-root/foo/1.1/gcc/8.2.0/nompi/bin/foo, .../foo/1.1/gcc/8.2.0/openmpi/3.1/bin/foo, .../foo/1.1/intel/2018/intelmpi/bin/foo, .../foo/1.1/intel/2018/mvapich/2.1/bin/foo, .../fake-sw-root/foo/1.1/intel/2018/nompi/bin/foo, .../foo/1.1/intel/2018/openmpi/3.1/bin/foo, .../foo/1.1/pgi/18.4/mvapich/2.1/bin/foo, .../fake-sw-root/foo/1.1/pgi/18.4/nompi/bin/foo, .../foo/1.1/pgi/18.4/openmpi/3.1/bin/foo, .../fake-sw-root/foo/2.4/1/README.txt, .../fake-sw-root/foo/2.4/1/gnu-9.1.0, .../fake-sw-root/foo/2.4/1/gnu-9.1.0-mvapich-2.3.1, .../fake-sw-root/foo/2.4/1/gnu-9.1.0-openmpi-4.0, .../fake-sw-root/foo/2.4/1/intel-2019, .../foo/2.4/1/intel-2019-intelmpi-default, .../foo/2.4/1/intel-2019-mvapich-2.3.1, .../fake-sw-root/foo/2.4/1/intel-2019-openmpi-4.0, .../fake-sw-root/foo/2.4/1/pgi-19.4, .../fake-sw-root/foo/2.4/1/pgi-19.4-openmpi-3.1, .../foo/2.4/gcc/9.1.0/mvapich/2.3.1/bin/foo, .../fake-sw-root/foo/2.4/gcc/9.1.0/nompi/bin/foo, .../foo/2.4/gcc/9.1.0/openmpi/4.0/bin/foo, .../foo/2.4/intel/2019/intelmpi/bin/foo, .../foo/2.4/intel/2019/mvapich/2.3.1/bin/foo, .../fake-sw-root/foo/2.4/intel/2019/nompi/bin/foo, .../foo/2.4/intel/2019/openmpi/4.0/bin/foo, .../fake-sw-root/foo/2.4/pgi/19.4/nompi/bin/foo, .../foo/2.4/pgi/19.4/openmpi/3.1/bin/foo, .../fake-sw-root/gcc/8.2.0/bin/gcc, .../fake-sw-root/gcc/9.1.0/bin/gcc, .../fake-sw-root/intel/2018/bin/icc, .../fake-sw-root/intel/2019/bin/icc, .../fake-sw-root/mvapich/2.1/1/README.txt, .../fake-sw-root/mvapich/2.1/1/gnu-8.2.0, .../fake-sw-root/mvapich/2.1/1/gnu-9.1.0, .../fake-sw-root/mvapich/2.1/1/intel-2018, .../fake-sw-root/mvapich/2.1/1/intel-2019, .../fake-sw-root/mvapich/2.1/1/pgi-18.4, .../fake-sw-root/mvapich/2.1/1/pgi-19.4, .../fake-sw-root/mvapich/2.1/gcc/8.2.0/bin/mpirun, .../fake-sw-root/mvapich/2.1/gcc/9.1.0/bin/mpirun, .../fake-sw-root/mvapich/2.1/intel/2018/bin/mpirun, .../fake-sw-root/mvapich/2.1/intel/2019/bin/mpirun, .../fake-sw-root/mvapich/2.1/pgi/18.4/bin/mpirun, .../fake-sw-root/mvapich/2.1/pgi/19.4/bin/mpirun, .../fake-sw-root/mvapich/2.3.1/1/README.txt, .../fake-sw-root/mvapich/2.3.1/1/gnu-9.1.0, .../fake-sw-root/mvapich/2.3.1/1/intel-2019, .../fake-sw-root/mvapich/2.3.1/1/pgi-19.4, .../mvapich/2.3.1/gcc/9.1.0/bin/mpirun, .../mvapich/2.3.1/intel/2019/bin/mpirun, .../fake-sw-root/mvapich/2.3.1/pgi/19.4/bin/mpirun, .../fake-sw-root/openmpi/3.1/1/README.txt, .../fake-sw-root/openmpi/3.1/1/gnu-8.2.0, .../fake-sw-root/openmpi/3.1/1/gnu-9.1.0, .../fake-sw-root/openmpi/3.1/1/intel-2018, .../fake-sw-root/openmpi/3.1/1/intel-2019, .../fake-sw-root/openmpi/3.1/1/pgi-18.4, .../fake-sw-root/openmpi/3.1/1/pgi-19.4, .../fake-sw-root/openmpi/3.1/gcc/8.2.0/bin/mpirun, .../fake-sw-root/openmpi/3.1/gcc/9.1.0/bin/mpirun, .../fake-sw-root/openmpi/3.1/intel/2018/bin/mpirun, .../fake-sw-root/openmpi/3.1/intel/2019/bin/mpirun, .../fake-sw-root/openmpi/3.1/pgi/18.4/bin/mpirun, .../fake-sw-root/openmpi/3.1/pgi/19.4/bin/mpirun, .../fake-sw-root/openmpi/4.0/1/README.txt, .../fake-sw-root/openmpi/4.0/1/gnu-9.1.0, .../fake-sw-root/openmpi/4.0/1/intel-2019, .../fake-sw-root/openmpi/4.0/1/pgi-19.4, .../fake-sw-root/openmpi/4.0/gcc/9.1.0/bin/mpirun, .../fake-sw-root/openmpi/4.0/intel/2019/bin/mpirun, .../fake-sw-root/openmpi/4.0/pgi/19.4/bin/mpirun, .../fake-sw-root/pgi/18.4/bin/pgcc, .../fake-sw-root/pgi/19.4/bin/pgcc, .../compiler-etc-dependencies/flavours/bar/4.7, .../compiler-etc-dependencies/flavours/bar/5.4, .../compiler-etc-dependencies/flavours/bar/common, .../compiler-etc-dependencies/flavours/foo/1.1, .../compiler-etc-dependencies/flavours/foo/2.4, .../compiler-etc-dependencies/flavours/foo/common, .../compiler-etc-dependencies/flavours/gnu/8.2.0, .../compiler-etc-dependencies/flavours/gnu/9.1.0, .../compiler-etc-dependencies/flavours/gnu/common, .../compiler-etc-dependencies/flavours/intel/2018, .../compiler-etc-dependencies/flavours/intel/2019, .../flavours/intel/common, .../flavours/intelmpi/default, .../compiler-etc-dependencies/flavours/mvapich/2.1, .../flavours/mvapich/2.3.1, .../flavours/mvapich/common, .../compiler-etc-dependencies/flavours/openmpi/3.1, .../compiler-etc-dependencies/flavours/openmpi/4.0, .../flavours/openmpi/common, .../compiler-etc-dependencies/flavours/pgi/18.4, .../compiler-etc-dependencies/flavours/pgi/19.4, .../compiler-etc-dependencies/flavours/pgi/common, .../compiler-etc-dependencies/flavours/simd/avx, .../compiler-etc-dependencies/flavours/simd/avx2, .../compiler-etc-dependencies/flavours/simd/common, .../compiler-etc-dependencies/flavours/simd/sse4.1, .../compiler-etc-dependencies/homebrewed/bar/4.7, .../compiler-etc-dependencies/homebrewed/bar/5.4, .../homebrewed/bar/common, .../compiler-etc-dependencies/homebrewed/foo/1.1, .../compiler-etc-dependencies/homebrewed/foo/2.4, .../homebrewed/foo/common, .../compiler-etc-dependencies/homebrewed/gcc/8.2.0, .../compiler-etc-dependencies/homebrewed/gcc/9.1.0, .../homebrewed/gcc/common, .../homebrewed/intel/2018, .../homebrewed/intel/2019, .../homebrewed/intel/common, .../homebrewed/intelmpi/default, .../homebrewed/mvapich/2.1, .../homebrewed/mvapich/2.3.1, .../homebrewed/mvapich/common, .../homebrewed/openmpi/3.1, .../homebrewed/openmpi/4.0, .../homebrewed/openmpi/common, .../compiler-etc-dependencies/homebrewed/pgi/18.4, .../compiler-etc-dependencies/homebrewed/pgi/19.4, .../homebrewed/pgi/common, .../compiler-etc-dependencies/homebrewed/simd/avx, .../compiler-etc-dependencies/homebrewed/simd/avx2, .../homebrewed/simd/common, .../homebrewed/simd/sse4.1, .../modrc_common/modulerc.default_lowest_simd, .../modrc_common/modulerc.select_compiler_family, .../modrc_common/modulerc.select_compiler_version, .../modrc_common/modulerc.select_mpi_family, .../modrc_common/modulerc.select_mpi_version, .../Compiler/gcc/8.2.0/bar/4.7/.modulerc, .../modulepath/Compiler/gcc/8.2.0/bar/4.7/avx, .../modulepath/Compiler/gcc/8.2.0/bar/4.7/sse4.1, .../modulepath/Compiler/gcc/8.2.0/bar/common, .../modulepath/Compiler/gcc/8.2.0/foo/1.1, .../modulepath/Compiler/gcc/8.2.0/foo/common, .../modulepath/Compiler/gcc/8.2.0/mvapich/2.1, .../modulepath/Compiler/gcc/8.2.0/mvapich/common, .../modulepath/Compiler/gcc/8.2.0/openmpi/3.1, .../modulepath/Compiler/gcc/8.2.0/openmpi/common, .../Compiler/gcc/9.1.0/bar/5.4/.modulerc, .../modulepath/Compiler/gcc/9.1.0/bar/5.4/avx, .../modulepath/Compiler/gcc/9.1.0/bar/5.4/avx2, .../modulepath/Compiler/gcc/9.1.0/bar/common, .../modulepath/Compiler/gcc/9.1.0/foo/2.4, .../modulepath/Compiler/gcc/9.1.0/foo/common, .../modulepath/Compiler/gcc/9.1.0/mvapich/2.1, .../modulepath/Compiler/gcc/9.1.0/mvapich/2.3.1, .../modulepath/Compiler/gcc/9.1.0/mvapich/common, .../modulepath/Compiler/gcc/9.1.0/openmpi/3.1, .../modulepath/Compiler/gcc/9.1.0/openmpi/4.0, .../modulepath/Compiler/gcc/9.1.0/openmpi/common, .../modulepath/Compiler/intel/2018/foo/1.1, .../modulepath/Compiler/intel/2018/foo/common, .../modulepath/Compiler/intel/2018/intelmpi/common, .../Compiler/intel/2018/intelmpi/default, .../modulepath/Compiler/intel/2018/mvapich/2.1, .../modulepath/Compiler/intel/2018/mvapich/common, .../modulepath/Compiler/intel/2018/openmpi/3.1, .../modulepath/Compiler/intel/2018/openmpi/common, .../modulepath/Compiler/intel/2019/foo/2.4, .../modulepath/Compiler/intel/2019/foo/common, .../modulepath/Compiler/intel/2019/intelmpi/common, .../Compiler/intel/2019/intelmpi/default, .../modulepath/Compiler/intel/2019/mvapich/2.1, .../modulepath/Compiler/intel/2019/mvapich/2.3.1, .../modulepath/Compiler/intel/2019/mvapich/common, .../modulepath/Compiler/intel/2019/openmpi/3.1, .../modulepath/Compiler/intel/2019/openmpi/4.0, .../modulepath/Compiler/intel/2019/openmpi/common, .../modulepath/Compiler/pgi/18.4/foo/1.1, .../modulepath/Compiler/pgi/18.4/foo/common, .../modulepath/Compiler/pgi/18.4/mvapich/2.1, .../modulepath/Compiler/pgi/18.4/mvapich/common, .../modulepath/Compiler/pgi/18.4/openmpi/3.1, .../modulepath/Compiler/pgi/18.4/openmpi/common, .../modulepath/Compiler/pgi/19.4/foo/2.4, .../modulepath/Compiler/pgi/19.4/foo/common, .../modulepath/Compiler/pgi/19.4/mvapich/2.1, .../modulepath/Compiler/pgi/19.4/mvapich/2.3.1, .../modulepath/Compiler/pgi/19.4/mvapich/common, .../modulepath/Compiler/pgi/19.4/openmpi/3.1, .../modulepath/Compiler/pgi/19.4/openmpi/4.0, .../modulepath/Compiler/pgi/19.4/openmpi/common, .../CompilerMPI/gcc/8.2.0/mvapich/2.1/foo/1.1, .../CompilerMPI/gcc/8.2.0/mvapich/2.1/foo/common, .../CompilerMPI/gcc/8.2.0/openmpi/3.1/foo/1.1, .../CompilerMPI/gcc/8.2.0/openmpi/3.1/foo/common, .../CompilerMPI/gcc/9.1.0/mvapich/2.3.1/foo/2.4, .../CompilerMPI/gcc/9.1.0/mvapich/2.3.1/foo/common, .../CompilerMPI/gcc/9.1.0/openmpi/4.0/foo/2.4, .../CompilerMPI/gcc/9.1.0/openmpi/4.0/foo/common, .../intel/2018/intelmpi/default/foo/1.1, .../intel/2018/intelmpi/default/foo/common, .../CompilerMPI/intel/2018/mvapich/2.1/foo/1.1, .../CompilerMPI/intel/2018/mvapich/2.1/foo/common, .../CompilerMPI/intel/2018/openmpi/3.1/foo/1.1, .../CompilerMPI/intel/2018/openmpi/3.1/foo/common, .../intel/2019/intelmpi/default/foo/2.4, .../intel/2019/intelmpi/default/foo/common, .../CompilerMPI/intel/2019/mvapich/2.3.1/foo/2.4, .../intel/2019/mvapich/2.3.1/foo/common, .../CompilerMPI/intel/2019/openmpi/4.0/foo/2.4, .../CompilerMPI/intel/2019/openmpi/4.0/foo/common, .../CompilerMPI/pgi/18.4/mvapich/2.1/foo/1.1, .../CompilerMPI/pgi/18.4/mvapich/2.1/foo/common, .../CompilerMPI/pgi/18.4/openmpi/3.1/foo/1.1, .../CompilerMPI/pgi/18.4/openmpi/3.1/foo/common, .../CompilerMPI/pgi/19.4/openmpi/3.1/foo/2.4, .../CompilerMPI/pgi/19.4/openmpi/3.1/foo/common, .../CompilerMPI/pgi/19.4/openmpi/4.0/REAMDE.txt, .../modulepath/Core/gcc/8.2.0, .../modulepath/Core/gcc/9.1.0, .../modulepath/Core/gcc/common, .../modulepath/Core/intel/2018, .../modulepath/Core/intel/2019, .../modulepath/Core/intel/common, .../modulepath/Core/pgi/18.4, .../modulepath/Core/pgi/19.4, .../modulepath/Core/pgi/common, .../modulepath/common/bar/common, .../modulepath/common/foo/common, .../modulepath/common/intelmpi/common, .../modulepath/common/mvapich/common, .../modulepath/common/openmpi/common, .../modulerc3/bar/.modulerc, .../modulerc3/bar/4.7/.modulerc, .../modulerc3/bar/4.7/gcc/.modulerc, .../modulerc3/bar/4.7/gcc/8.2.0/.modulerc, .../modulerc3/bar/4.7/gcc/8.2.0/avx, .../modulerc3/bar/4.7/gcc/8.2.0/sse4.1, .../modulerc3/bar/5.4/.modulerc, .../modulerc3/bar/5.4/gcc/.modulerc, .../modulerc3/bar/5.4/gcc/9.1.0/avx, .../modulerc3/bar/5.4/gcc/9.1.0/avx2, .../modulerc3/bar/avx/.modulerc, .../modulerc3/bar/avx/gcc/.modulerc, .../modulerc3/bar/avx/gcc/8.2.0/4.7, .../modulerc3/bar/avx/gcc/9.1.0/5.4, .../modulerc3/bar/avx2/.modulerc, .../modulerc3/bar/avx2/gcc/.modulerc, .../modulerc3/bar/avx2/gcc/9.1.0/5.4, .../compiler-etc-dependencies/modulerc3/bar/common, .../modulerc3/bar/gcc/.modulerc, .../modulerc3/bar/gcc/8.2.0/.modulerc, .../modulerc3/bar/gcc/8.2.0/avx/4.7, .../modulerc3/bar/gcc/8.2.0/sse4.1/4.7, .../modulerc3/bar/gcc/9.1.0/.modulerc, .../modulerc3/bar/gcc/9.1.0/avx/5.4, .../modulerc3/bar/gcc/9.1.0/avx2/5.4, .../modulerc3/bar/sse4.1/.modulerc, .../modulerc3/bar/sse4.1/gcc/.modulerc, .../modulerc3/bar/sse4.1/gcc/8.2.0/4.7, .../modulerc3/foo/.modulerc, .../modulerc3/foo/1.1/.modulerc, .../modulerc3/foo/1.1/gcc/.modulerc, .../modulerc3/foo/1.1/gcc/8.2.0/.modulerc, .../modulerc3/foo/1.1/gcc/8.2.0/mvapich/.modulerc, .../modulerc3/foo/1.1/gcc/8.2.0/mvapich/2.1, .../modulerc3/foo/1.1/gcc/8.2.0/nompi, .../modulerc3/foo/1.1/gcc/8.2.0/openmpi/.modulerc, .../modulerc3/foo/1.1/gcc/8.2.0/openmpi/3.1, .../modulerc3/foo/1.1/intel/.modulerc, .../modulerc3/foo/1.1/intel/2018/.modulerc, .../modulerc3/foo/1.1/intel/2018/intelmpi, .../modulerc3/foo/1.1/intel/2018/mvapich/.modulerc, .../modulerc3/foo/1.1/intel/2018/mvapich/2.1, .../modulerc3/foo/1.1/intel/2018/nompi, .../modulerc3/foo/1.1/intel/2018/openmpi/.modulerc, .../modulerc3/foo/1.1/intel/2018/openmpi/3.1, .../modulerc3/foo/1.1/pgi/.modulerc, .../modulerc3/foo/1.1/pgi/18.4/.modulerc, .../modulerc3/foo/1.1/pgi/18.4/mvapich/.modulerc, .../modulerc3/foo/1.1/pgi/18.4/mvapich/2.1, .../modulerc3/foo/1.1/pgi/18.4/nompi, .../modulerc3/foo/1.1/pgi/18.4/openmpi/.modulerc, .../modulerc3/foo/1.1/pgi/18.4/openmpi/3.1, .../modulerc3/foo/2.4/.modulerc, .../modulerc3/foo/2.4/gcc/.modulerc, .../modulerc3/foo/2.4/gcc/9.1.0/.modulerc, .../modulerc3/foo/2.4/gcc/9.1.0/mvapich/.modulerc, .../modulerc3/foo/2.4/gcc/9.1.0/mvapich/2.3.1, .../modulerc3/foo/2.4/gcc/9.1.0/nompi, .../modulerc3/foo/2.4/gcc/9.1.0/openmpi/.modulerc, .../modulerc3/foo/2.4/gcc/9.1.0/openmpi/4.0, .../modulerc3/foo/2.4/intel/.modulerc, .../modulerc3/foo/2.4/intel/2019/.modulerc, .../modulerc3/foo/2.4/intel/2019/intelmpi, .../modulerc3/foo/2.4/intel/2019/mvapich/.modulerc, .../modulerc3/foo/2.4/intel/2019/mvapich/2.3.1, .../modulerc3/foo/2.4/intel/2019/nompi, .../modulerc3/foo/2.4/intel/2019/openmpi/.modulerc, .../modulerc3/foo/2.4/intel/2019/openmpi/4.0, .../modulerc3/foo/2.4/pgi/.modulerc, .../modulerc3/foo/2.4/pgi/19.4/.modulerc, .../modulerc3/foo/2.4/pgi/19.4/nompi, .../modulerc3/foo/2.4/pgi/19.4/openmpi/.modulerc, .../modulerc3/foo/2.4/pgi/19.4/openmpi/3.1, .../compiler-etc-dependencies/modulerc3/foo/common, .../modulerc3/foo/gcc/.modulerc, .../modulerc3/foo/gcc/8.2.0/.modulerc, .../modulerc3/foo/gcc/8.2.0/mvapich/.modulerc, .../modulerc3/foo/gcc/8.2.0/mvapich/2.1/1.1, .../modulerc3/foo/gcc/8.2.0/nompi/1.1, .../modulerc3/foo/gcc/8.2.0/openmpi/.modulerc, .../modulerc3/foo/gcc/8.2.0/openmpi/3.1/1.1, .../modulerc3/foo/gcc/9.1.0/.modulerc, .../modulerc3/foo/gcc/9.1.0/mvapich/.modulerc, .../modulerc3/foo/gcc/9.1.0/mvapich/2.3.1/2.4, .../modulerc3/foo/gcc/9.1.0/nompi/2.4, .../modulerc3/foo/gcc/9.1.0/openmpi/.modulerc, .../modulerc3/foo/gcc/9.1.0/openmpi/4.0/2.4, .../modulerc3/foo/intel/.modulerc, .../modulerc3/foo/intel/2018/.modulerc, .../modulerc3/foo/intel/2018/intelmpi/1.1, .../modulerc3/foo/intel/2018/mvapich/.modulerc, .../modulerc3/foo/intel/2018/mvapich/2.1/1.1, .../modulerc3/foo/intel/2018/nompi/1.1, .../modulerc3/foo/intel/2018/openmpi/.modulerc, .../modulerc3/foo/intel/2018/openmpi/3.1/1.1, .../modulerc3/foo/intel/2019/.modulerc, .../modulerc3/foo/intel/2019/intelmpi/2.4, .../modulerc3/foo/intel/2019/mvapich/.modulerc, .../modulerc3/foo/intel/2019/mvapich/2.3.1/2.4, .../modulerc3/foo/intel/2019/nompi/2.4, .../modulerc3/foo/intel/2019/openmpi/.modulerc, .../modulerc3/foo/intel/2019/openmpi/4.0/2.4, .../modulerc3/foo/pgi/.modulerc, .../modulerc3/foo/pgi/18.4/.modulerc, .../modulerc3/foo/pgi/18.4/mvapich/.modulerc, .../modulerc3/foo/pgi/18.4/mvapich/2.1/1.1, .../modulerc3/foo/pgi/18.4/nompi/1.1, .../modulerc3/foo/pgi/18.4/openmpi/.modulerc, .../modulerc3/foo/pgi/18.4/openmpi/3.1/1.1, .../modulerc3/foo/pgi/19.4/.modulerc, .../modulerc3/foo/pgi/19.4/nompi/2.4, .../modulerc3/foo/pgi/19.4/openmpi/.modulerc, .../modulerc3/foo/pgi/19.4/openmpi/3.1/2.4, .../compiler-etc-dependencies/modulerc3/gcc/8.2.0, .../compiler-etc-dependencies/modulerc3/gcc/9.1.0, .../compiler-etc-dependencies/modulerc3/gcc/common, .../compiler-etc-dependencies/modulerc3/intel/2018, .../compiler-etc-dependencies/modulerc3/intel/2019, .../modulerc3/intel/common, .../modulerc3/mvapich/.modulerc, .../modulerc3/mvapich/2.1/.modulerc, .../modulerc3/mvapich/2.1/gcc/.modulerc, .../modulerc3/mvapich/2.1/gcc/8.2.0, .../modulerc3/mvapich/2.1/gcc/9.1.0, .../modulerc3/mvapich/2.1/intel/.modulerc, .../modulerc3/mvapich/2.1/intel/2018, .../modulerc3/mvapich/2.1/intel/2019, .../modulerc3/mvapich/2.1/pgi/.modulerc, .../modulerc3/mvapich/2.1/pgi/18.4, .../modulerc3/mvapich/2.1/pgi/19.4, .../modulerc3/mvapich/2.3.1/.modulerc, .../modulerc3/mvapich/2.3.1/gcc/.modulerc, .../modulerc3/mvapich/2.3.1/gcc/9.1.0, .../modulerc3/mvapich/2.3.1/intel/.modulerc, .../modulerc3/mvapich/2.3.1/intel/2019, .../modulerc3/mvapich/2.3.1/pgi/.modulerc, .../modulerc3/mvapich/2.3.1/pgi/19.4, .../modulerc3/mvapich/common, .../modulerc3/mvapich/gcc/.modulerc, .../modulerc3/mvapich/gcc/8.2.0/2.1, .../modulerc3/mvapich/gcc/9.1.0/2.1, .../modulerc3/mvapich/gcc/9.1.0/2.3.1, .../modulerc3/mvapich/intel/.modulerc, .../modulerc3/mvapich/intel/2018/2.1, .../modulerc3/mvapich/intel/2019/2.1, .../modulerc3/mvapich/intel/2019/2.3.1, .../modulerc3/mvapich/pgi/.modulerc, .../modulerc3/mvapich/pgi/18.4/2.1, .../modulerc3/mvapich/pgi/19.4/2.1, .../modulerc3/mvapich/pgi/19.4/2.3.1, .../modulerc3/openmpi/.modulerc, .../modulerc3/openmpi/3.1/.modulerc, .../modulerc3/openmpi/3.1/gcc/.modulerc, .../modulerc3/openmpi/3.1/gcc/8.2.0, .../modulerc3/openmpi/3.1/gcc/9.1.0, .../modulerc3/openmpi/3.1/intel/.modulerc, .../modulerc3/openmpi/3.1/intel/2018, .../modulerc3/openmpi/3.1/intel/2019, .../modulerc3/openmpi/3.1/pgi/.modulerc, .../modulerc3/openmpi/3.1/pgi/18.4, .../modulerc3/openmpi/3.1/pgi/19.4, .../modulerc3/openmpi/4.0/.modulerc, .../modulerc3/openmpi/4.0/gcc/.modulerc, .../modulerc3/openmpi/4.0/gcc/9.1.0, .../modulerc3/openmpi/4.0/intel/.modulerc, .../modulerc3/openmpi/4.0/intel/2019, .../modulerc3/openmpi/4.0/pgi/.modulerc, .../modulerc3/openmpi/4.0/pgi/19.4, .../modulerc3/openmpi/common, .../modulerc3/openmpi/gcc/.modulerc, .../modulerc3/openmpi/gcc/8.2.0/3.1, .../modulerc3/openmpi/gcc/9.1.0/3.1, .../modulerc3/openmpi/gcc/9.1.0/4.0, .../modulerc3/openmpi/intel/.modulerc, .../modulerc3/openmpi/intel/2018/3.1, .../modulerc3/openmpi/intel/2019/3.1, .../modulerc3/openmpi/intel/2019/4.0, .../modulerc3/openmpi/pgi/.modulerc, .../modulerc3/openmpi/pgi/18.4/3.1, .../modulerc3/openmpi/pgi/19.4/3.1, .../modulerc3/openmpi/pgi/19.4/4.0, .../compiler-etc-dependencies/modulerc3/pgi/18.4, .../compiler-etc-dependencies/modulerc3/pgi/19.4, .../compiler-etc-dependencies/modulerc3/pgi/common, .../modulerc4/bar/.modulerc, .../modulerc4/bar/4.7/.modulerc, .../modulerc4/bar/4.7/gcc/.modulerc, .../modulerc4/bar/4.7/gcc/8.2.0/.modulerc, .../modulerc4/bar/4.7/gcc/8.2.0/avx, .../modulerc4/bar/4.7/gcc/8.2.0/sse4.1, .../modulerc4/bar/5.4/.modulerc, .../modulerc4/bar/5.4/gcc/.modulerc, .../modulerc4/bar/5.4/gcc/9.1.0/avx, .../modulerc4/bar/5.4/gcc/9.1.0/avx2, .../modulerc4/bar/avx/.modulerc, .../modulerc4/bar/avx/gcc/.modulerc, .../modulerc4/bar/avx/gcc/8.2.0/4.7, .../modulerc4/bar/avx/gcc/9.1.0/5.4, .../modulerc4/bar/avx2/.modulerc, .../modulerc4/bar/avx2/gcc/.modulerc, .../modulerc4/bar/avx2/gcc/9.1.0/5.4, .../compiler-etc-dependencies/modulerc4/bar/common, .../modulerc4/bar/gcc/.modulerc, .../modulerc4/bar/gcc/8.2.0/.modulerc, .../modulerc4/bar/gcc/8.2.0/avx/4.7, .../modulerc4/bar/gcc/8.2.0/sse4.1/4.7, .../modulerc4/bar/gcc/9.1.0/.modulerc, .../modulerc4/bar/gcc/9.1.0/avx/5.4, .../modulerc4/bar/gcc/9.1.0/avx2/5.4, .../modulerc4/bar/sse4.1/.modulerc, .../modulerc4/bar/sse4.1/gcc/.modulerc, .../modulerc4/bar/sse4.1/gcc/8.2.0/4.7, .../modulerc4/foo/.modulerc, .../modulerc4/foo/1.1/.modulerc, .../modulerc4/foo/1.1/gcc/.modulerc, .../modulerc4/foo/1.1/gcc/8.2.0/.modulerc, .../modulerc4/foo/1.1/gcc/8.2.0/mvapich/.modulerc, .../modulerc4/foo/1.1/gcc/8.2.0/mvapich/2.1, .../modulerc4/foo/1.1/gcc/8.2.0/nompi, .../modulerc4/foo/1.1/gcc/8.2.0/openmpi/.modulerc, .../modulerc4/foo/1.1/gcc/8.2.0/openmpi/3.1, .../modulerc4/foo/1.1/intel/.modulerc, .../modulerc4/foo/1.1/intel/2018/.modulerc, .../modulerc4/foo/1.1/intel/2018/intelmpi, .../modulerc4/foo/1.1/intel/2018/mvapich/.modulerc, .../modulerc4/foo/1.1/intel/2018/mvapich/2.1, .../modulerc4/foo/1.1/intel/2018/nompi, .../modulerc4/foo/1.1/intel/2018/openmpi/.modulerc, .../modulerc4/foo/1.1/intel/2018/openmpi/3.1, .../modulerc4/foo/1.1/pgi/.modulerc, .../modulerc4/foo/1.1/pgi/18.4/.modulerc, .../modulerc4/foo/1.1/pgi/18.4/mvapich/.modulerc, .../modulerc4/foo/1.1/pgi/18.4/mvapich/2.1, .../modulerc4/foo/1.1/pgi/18.4/nompi, .../modulerc4/foo/1.1/pgi/18.4/openmpi/.modulerc, .../modulerc4/foo/1.1/pgi/18.4/openmpi/3.1, .../modulerc4/foo/2.4/.modulerc, .../modulerc4/foo/2.4/gcc/.modulerc, .../modulerc4/foo/2.4/gcc/9.1.0/.modulerc, .../modulerc4/foo/2.4/gcc/9.1.0/mvapich/.modulerc, .../modulerc4/foo/2.4/gcc/9.1.0/mvapich/2.3.1, .../modulerc4/foo/2.4/gcc/9.1.0/nompi, .../modulerc4/foo/2.4/gcc/9.1.0/openmpi/.modulerc, .../modulerc4/foo/2.4/gcc/9.1.0/openmpi/4.0, .../modulerc4/foo/2.4/intel/.modulerc, .../modulerc4/foo/2.4/intel/2019/.modulerc, .../modulerc4/foo/2.4/intel/2019/intelmpi, .../modulerc4/foo/2.4/intel/2019/mvapich/.modulerc, .../modulerc4/foo/2.4/intel/2019/mvapich/2.3.1, .../modulerc4/foo/2.4/intel/2019/nompi, .../modulerc4/foo/2.4/intel/2019/openmpi/.modulerc, .../modulerc4/foo/2.4/intel/2019/openmpi/4.0, .../modulerc4/foo/2.4/pgi/.modulerc, .../modulerc4/foo/2.4/pgi/19.4/.modulerc, .../modulerc4/foo/2.4/pgi/19.4/nompi, .../modulerc4/foo/2.4/pgi/19.4/openmpi/.modulerc, .../modulerc4/foo/2.4/pgi/19.4/openmpi/3.1, .../compiler-etc-dependencies/modulerc4/foo/common, .../modulerc4/foo/gcc/.modulerc, .../modulerc4/foo/gcc/8.2.0/.modulerc, .../modulerc4/foo/gcc/8.2.0/mvapich/.modulerc, .../modulerc4/foo/gcc/8.2.0/mvapich/2.1/1.1, .../modulerc4/foo/gcc/8.2.0/nompi/1.1, .../modulerc4/foo/gcc/8.2.0/openmpi/.modulerc, .../modulerc4/foo/gcc/8.2.0/openmpi/3.1/1.1, .../modulerc4/foo/gcc/9.1.0/.modulerc, .../modulerc4/foo/gcc/9.1.0/mvapich/.modulerc, .../modulerc4/foo/gcc/9.1.0/mvapich/2.3.1/2.4, .../modulerc4/foo/gcc/9.1.0/nompi/2.4, .../modulerc4/foo/gcc/9.1.0/openmpi/.modulerc, .../modulerc4/foo/gcc/9.1.0/openmpi/4.0/2.4, .../modulerc4/foo/intel/.modulerc, .../modulerc4/foo/intel/2018/.modulerc, .../modulerc4/foo/intel/2018/intelmpi/1.1, .../modulerc4/foo/intel/2018/mvapich/.modulerc, .../modulerc4/foo/intel/2018/mvapich/2.1/1.1, .../modulerc4/foo/intel/2018/nompi/1.1, .../modulerc4/foo/intel/2018/openmpi/.modulerc, .../modulerc4/foo/intel/2018/openmpi/3.1/1.1, .../modulerc4/foo/intel/2019/.modulerc, .../modulerc4/foo/intel/2019/intelmpi/2.4, .../modulerc4/foo/intel/2019/mvapich/.modulerc, .../modulerc4/foo/intel/2019/mvapich/2.3.1/2.4, .../modulerc4/foo/intel/2019/nompi/2.4, .../modulerc4/foo/intel/2019/openmpi/.modulerc, .../modulerc4/foo/intel/2019/openmpi/4.0/2.4, .../modulerc4/foo/pgi/.modulerc, .../modulerc4/foo/pgi/18.4/.modulerc, .../modulerc4/foo/pgi/18.4/mvapich/.modulerc, .../modulerc4/foo/pgi/18.4/mvapich/2.1/1.1, .../modulerc4/foo/pgi/18.4/nompi/1.1, .../modulerc4/foo/pgi/18.4/openmpi/.modulerc, .../modulerc4/foo/pgi/18.4/openmpi/3.1/1.1, .../modulerc4/foo/pgi/19.4/.modulerc, .../modulerc4/foo/pgi/19.4/nompi/2.4, .../modulerc4/foo/pgi/19.4/openmpi/.modulerc, .../modulerc4/foo/pgi/19.4/openmpi/3.1/2.4, .../compiler-etc-dependencies/modulerc4/gcc/8.2.0, .../compiler-etc-dependencies/modulerc4/gcc/9.1.0, .../compiler-etc-dependencies/modulerc4/gcc/common, .../compiler-etc-dependencies/modulerc4/intel/2018, .../compiler-etc-dependencies/modulerc4/intel/2019, .../modulerc4/intel/common, .../modulerc4/mvapich/.modulerc, .../modulerc4/mvapich/2.1/.modulerc, .../modulerc4/mvapich/2.1/gcc/.modulerc, .../modulerc4/mvapich/2.1/gcc/8.2.0, .../modulerc4/mvapich/2.1/gcc/9.1.0, .../modulerc4/mvapich/2.1/intel/.modulerc, .../modulerc4/mvapich/2.1/intel/2018, .../modulerc4/mvapich/2.1/intel/2019, .../modulerc4/mvapich/2.1/pgi/.modulerc, .../modulerc4/mvapich/2.1/pgi/18.4, .../modulerc4/mvapich/2.1/pgi/19.4, .../modulerc4/mvapich/2.3.1/.modulerc, .../modulerc4/mvapich/2.3.1/gcc/.modulerc, .../modulerc4/mvapich/2.3.1/gcc/9.1.0, .../modulerc4/mvapich/2.3.1/intel/.modulerc, .../modulerc4/mvapich/2.3.1/intel/2019, .../modulerc4/mvapich/2.3.1/pgi/.modulerc, .../modulerc4/mvapich/2.3.1/pgi/19.4, .../modulerc4/mvapich/common, .../modulerc4/mvapich/gcc/.modulerc, .../modulerc4/mvapich/gcc/8.2.0/2.1, .../modulerc4/mvapich/gcc/9.1.0/2.1, .../modulerc4/mvapich/gcc/9.1.0/2.3.1, .../modulerc4/mvapich/intel/.modulerc, .../modulerc4/mvapich/intel/2018/2.1, .../modulerc4/mvapich/intel/2019/2.1, .../modulerc4/mvapich/intel/2019/2.3.1, .../modulerc4/mvapich/pgi/.modulerc, .../modulerc4/mvapich/pgi/18.4/2.1, .../modulerc4/mvapich/pgi/19.4/2.1, .../modulerc4/mvapich/pgi/19.4/2.3.1, .../modulerc4/openmpi/.modulerc, .../modulerc4/openmpi/3.1/.modulerc, .../modulerc4/openmpi/3.1/gcc/.modulerc, .../modulerc4/openmpi/3.1/gcc/8.2.0, .../modulerc4/openmpi/3.1/gcc/9.1.0, .../modulerc4/openmpi/3.1/intel/.modulerc, .../modulerc4/openmpi/3.1/intel/2018, .../modulerc4/openmpi/3.1/intel/2019, .../modulerc4/openmpi/3.1/pgi/.modulerc, .../modulerc4/openmpi/3.1/pgi/18.4, .../modulerc4/openmpi/3.1/pgi/19.4, .../modulerc4/openmpi/4.0/.modulerc, .../modulerc4/openmpi/4.0/gcc/.modulerc, .../modulerc4/openmpi/4.0/gcc/9.1.0, .../modulerc4/openmpi/4.0/intel/.modulerc, .../modulerc4/openmpi/4.0/intel/2019, .../modulerc4/openmpi/4.0/pgi/.modulerc, .../modulerc4/openmpi/4.0/pgi/19.4, .../modulerc4/openmpi/common, .../modulerc4/openmpi/gcc/.modulerc, .../modulerc4/openmpi/gcc/8.2.0/3.1, .../modulerc4/openmpi/gcc/9.1.0/3.1, .../modulerc4/openmpi/gcc/9.1.0/4.0, .../modulerc4/openmpi/intel/.modulerc, .../modulerc4/openmpi/intel/2018/3.1, .../modulerc4/openmpi/intel/2019/3.1, .../modulerc4/openmpi/intel/2019/4.0, .../modulerc4/openmpi/pgi/.modulerc, .../modulerc4/openmpi/pgi/18.4/3.1, .../modulerc4/openmpi/pgi/19.4/3.1, .../modulerc4/openmpi/pgi/19.4/4.0, .../compiler-etc-dependencies/modulerc4/pgi/18.4, .../compiler-etc-dependencies/modulerc4/pgi/19.4, .../compiler-etc-dependencies/modulerc4/pgi/common, .../tcllib/ChildModules.tcl, .../tcllib/CompilerFromPath.tcl, .../tcllib/CompilerUtils.tcl, .../compiler-etc-dependencies/tcllib/GetFamVer.tcl, .../tcllib/LoadedCompMatches.tcl, .../tcllib/LoadedModules.tcl, .../tcllib/LoadedMpiMatches.tcl, .../compiler-etc-dependencies/tcllib/MpiUtils.tcl, .../tcllib/WarningUtils.tcl, .../tcllib/common_utilities.tcl, .../compiler-etc-dependencies/tcllib/temp.tcl, doc/source/cookbook/compiler-etc-dependencies.rst: doc: add compiler-etc-dependencies cookbook recipe New cookbook discussing various strategies for creating modulefiles for packages with multiple builds depending on previously loaded compiler, MPI libraries etc. (E.g. handling different "flavors" of packages) 2020-02-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * script/createmodule.sh: script: fix path deduplication in createmodule.sh Fixes #316 2020-02-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/006-procs.exp: ts: adapt perl code which sets _mlstatus * modulecmd.tcl.in: Lift perl variable strictness for _mlstatus Declaration of $_mlstatus (evaluation status variable) cannot be done as part of generated code passed to `eval` statement. If $_mlstatus is declared or re-declared as part of evaluated code, defined value cannot be retrieved afterward in `module` subroutine. To be able to retrieve the value of $_mlstatus set within generated code evaluation yet avoiding warnings of a 'use strict;' mode, temporarily disable variable strictness. 2020-02-10 Andrey Maslennikov <andrew.maslennikov@gmail.com> * modulecmd.tcl.in: Add "my" for perl's $_mlstatus Since this variable is always rendered it might be evaluated in a strict scope and fail with the following error: `Global symbol "$_mlstatus" requires explicit package name (did you forget to declare "my $_mlstatus"?)` 2020-02-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/040-subshell.exp, testsuite/install.00-init/050-crossshell.exp: ts: adapt (again) err msg and code for fish 3.1 2020-02-17 Armin Wehrfritz <armin.wehrfritz@unsw.edu.au> * script/createmodule.py.in: script: fix createmodule.py for python3 Fixes #315 2020-02-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitignore: git: ignore dir used for local tests 2020-02-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/040-subshell.exp: ts: adapt err msg for fish 3.1 2020-02-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * configure: install: pass --with-python option to compat configure 2020-02-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/rpm/environment-modules.spec.in: rpm: use configure option --with-python to set shebang * Makefile: install: build and install createmodule.py in bindir * Makefile: install: ensure all built scripts have exec perms * INSTALL.rst, configure: install: add --with-python configure option Enable to pass a specific Python interpreter command name or location at configure step with `--with-python` option. Specified command name or location should be found on build system only if building from git repository. * .gitignore, INSTALL.rst, Makefile, Makefile.inc.in, configure, script/{createmodule.py => createmodule.py.in}, .../{gitlog2changelog.py => gitlog2changelog.py.in}: install: build createmodule.py/gitlog2changelog.py to set shebang Adapt configure script and Makefile to detect `python` command location and set it as shebang for `createmodule.py` and `gitlog2changelog.py`. If python command is not found python3 then python2 are searched. 2020-02-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml: travis: fix configuration warnings * .travis.yml: travis: replace a CentOS 6 test case by a CentOS 8 * Makefile, configure: install: %D git-log placeholder by not be supported * .travis.yml, Makefile: install/travis: add rules to build rpm and test it * testsuite/modules.00-init/005-init_ts.exp: ts: output detected tty col number 2020-02-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/375-deps6.exp, testsuite/modules.50-cmds/376-switch.exp: ts: fix msg block err tests with regexp special chars 2020-02-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/006-procs.exp, testsuite/modules.60-initx/010-init_ts.exp: ts: output test error details whatever verbose value 2020-02-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitignore, Makefile, script/mt: install/script: abort auxiliary tools download after few seconds Abort download of icdiff, nagelfar or tclsh83 after 2 timeouts of 5 seconds and record download failure for icdiff to avoid mt script to attempt a new download tentative every time it is called. 2020-02-03 Andrey Portnoy <aportnoy@fastmail.com> * script/add.modules.in: Fix typo in add.modules.in 2020-02-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles.path1/loc_dv10/.version, testsuite/modulefiles.path1/loc_dv10/1.1, testsuite/modulefiles.path2/loc_dv10/.version, testsuite/modulefiles.path2/loc_dv10/1.2, testsuite/modules.20-locate/069-cross.exp: Fix sym version targetting mod version with space in name Correctly handle symbolic version target including a whitespace in their name. 2020-02-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc. git archive build and createmodule script fixes in NEWS 2020-02-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * script/createmodule.py, script/createmodule.sh: script: fix createmodule.{sh,py} for script outputting text Inhibit output generated by scripts evaluated by createmodule.sh and createmodule.py to ensure these outputs will not get in the way when analyzing the environment change done by the evaluated scripts. Fixes #309 * script/createmodule.sh: script: avoid shell func defs in createmodule.sh Fix createmodule.sh script to correctly analyses environment when shell functions are found defined in it. These shell function definitions are skipped. 2020-01-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst: doc: need more tools to install from a git archive export 2020-01-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, configure, doc/Makefile, testsuite/install.00-init/030-options.exp: install: need sphinx if dist does not contain prebuilt doc Check at configure step if pre-built documents are available, if found Sphinx-related makefile rules are inhibited. Otherwise Sphinx availability is tested and documentation build is disabled if not found. * .gitignore, Makefile: install: no txt version of docs at dist root * Makefile: install: no need to pre-build README file in dist * README.md: doc: update core dev list in README * .gitattributes, Makefile, doc/Makefile: install: no exclude of doc files from git archive dist No more exclusion of project-related or installation documents from git archive distribution. Enable makefile rules relative to Sphinx documentation build even if not building from git repository. With release distribution tarballs nothing changes as document is pre-built in these archives. When working from a `git archive` export, these Sphinx rules will help to build docs. 2020-01-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/Makefile: install: do not clean ml.1 on 'make clean' if pre-built * Makefile: install: add missing ml.1 pre-built doc in dist * .gitattributes, Makefile: install: build empty changelog if not building from git In case Modules is built from a `git archive` distribution, generate a bare ChangeLog file only referring to the NEWS document. Always include gitlog2changelog.py tool in distributions, but do not run it if not building from a git repository. * configure: install: auto disable compat build if no src and not in git 2020-01-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitattributes, Makefile, configure, version.inc.in: install: enable version.inc build outside git repository Make `git archive` substitute .version.inc.in with commit hash, date and refs. Compute MODULES_BUILD and MODULES_BUILD_DATE from these informations in ./configure and Makefile if not working from git repository. 2020-01-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst: doc: desc. Improved Windows support in NEWS/MIGRATING 2020-01-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * README.md: doc: add ref to ml(1) man page in README 2020-01-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .appveyor.yml: appveyor: add native windows installation test case 2020-01-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, script/TESTINSTALL.bat: script: add TESTINSTALL.bat script and ship it in dist-win * script/ml.cmd, script/module.cmd: script: ensure relevant exit code is set at end of win scripts 2020-01-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, INSTALL.bat => script/INSTALL.bat, UNINSTALL.bat => script/UNINSTALL.bat: script: move INSTALL.bat & UNINSTALL.bat in script dir 2020-01-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.bat, UNINSTALL.bat: install: set session PATH in INSTALL/UNINSTALL win scripts * INSTALL.bat: install: fix location of Windows find command 2020-01-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/FAQ.rst, doc/source/index.rst: doc: reorganize documentation index 2020-01-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/howto/using_on_windows.pdf: doc: remove now deprecated using_on_windows howto * Makefile, UNINSTALL.bat: install: provide a basic uninstall script for Windows 2020-01-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/cmd.cmd, script/ml.cmd, script/module.cmd: script/init: quote path variables in win-specific scripts To handle installation path containing whitespaces like "C:\Program Files\Environment Modules". * INSTALL.bat, Makefile: install: provide a basic install script for Windows * .gitignore, Makefile, init/Makefile: install: add dist-win rule to build win-specific dist zip ball * Makefile, NEWS.rst, script/ml.cmd, testsuite/install.00-init/030-options.exp: install: add ml.cmd wrapper on Windows installation * .gitattributes, .gitignore, INSTALL-win.rst, INSTALL-win.txt, Makefile, doc/Makefile, doc/source/INSTALL-win.rst, doc/source/index.rst: doc: transform INSTALL-win.txt into INSTALL-win.rst 2020-01-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst, NEWS.rst: doc: desc --enable-windows-support in NEWS/INSTALL * .travis.yml, site.exp.in, testsuite/install.00-init/030-options.exp: ts: add test to check win-specific file install * script/module.cmd: script: simplify module.cmd batch file Execute initialization script if MODULES_CMD environment variable is not found defined. * init/cmd.cmd: init: simplify cmd init file Always define Modules-specific environment variables when running `cmd` initialization file. * Makefile, {windows => script}/module.cmd: script: move win-specific module.cmd file in script dir * Makefile, init/Makefile, windows/moduleinit.cmd => init/cmd.cmd, windows/module.cmd: init: move windows/moduleinit.cmd as init/cmd.cmd file 2019-05-21 Jacques Raphanel <dvp@crabisoft.fr> * Makefile, Makefile.inc.in, configure: Install: add --enable-windows-support configure option Provide new `--enable-windows-support` option for configure to automatically install windows batch file to bin directory during install step. This new option is not enabled by default. 2019-05-08 Jacques Raphanel <dvp@crabisoft.fr> * windows/module.cmd, windows/moduleinit.cmd: Add support for portable/standalone install on Windows Update moduleinit.cmd file to set Modules-specific environment variables according to the script directory and the file existence for: * MODULESHOME if not defined yet and if `..\libexec\modulecmd.tcl` exists * add `..\bin` directory to PATH if `module.cmd` is not available from PATH and available from `..\bin` * add `..\bin` directory to PATH if `tclsh.exe` is not available from PATH and available from `..\bin` Automatically call `moduleinit.cmd` from `module.cmd` if modules is not initialized yet (based on environment variables) Fixes #272 2020-01-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml: travis: increase testsuite timeout to 25mins * Makefile: install: use newer version of nagelfar (1.3.1) * Makefile: install: use newer version of icdiff (1.9.5) * .gitattributes, contrib/pre-commit: contrib: remove not-used-anymore pre-commit script * .gitattributes, .gitignore: git: remove refs to deleted www-specific stuff * .appveyor.yml, .cirrus.yml, .gitattributes, .gitignore, .travis.yml, Makefile, NEWS.rst, contrib/readme.txt, contrib/rpm/environment-modules.spec.in, {contrib/scripts => script}/add.modules.in, {contrib/scripts => script}/createmodule.py, {contrib/scripts => script}/createmodule.sh, {contrib => script}/envml, {contrib => script}/gitlog2changelog.py, {contrib => script}/mb, {contrib/scripts => script}/mkroot, {contrib => script}/mlprof, {contrib/scripts => script}/modulecmd.in, {contrib => script}/mt, {contrib => script}/mtreview, {contrib => script}/nglfar2ccov, {contrib => script}/playdemo: script: move all dist. and maint. scripts in a script dir * .gitignore, Makefile, NEWS.rst, contrib/{mb.in => mb}, contrib/{mlprof.in => mlprof}, contrib/mt, contrib/{mtreview.in => mtreview}, contrib/{playdemo.in => playdemo}: script: remove need to build project management-specific tools Make mb, mlprof, mtreview and playdemo use `/usr/bin/env tclsh` shebang rather applying there TCLSH location defined by `./configure` process. 2019-12-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.2/NaN, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/045-listlong.exp, testsuite/modules.70-maint/290-json.exp, testsuite/modules.90-avail/070-full.exp: ts: test json output in 70/290 2019-12-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Make -j/-t/-l mutually exclusive Use of --json command line switch automatically disables previous enablement of -t or -l. Same goes for --terse and --long switches. * modulecmd.tcl.in: Save err msg if json output to render them all together Record error messages in a g_report_erralist global array list rather output them directly in order to output all of them together in a JSON structure right before exiting. * modulecmd.tcl.in: Render final error message through reportError Use regular reportError procedure to also render the last error message before exiting. Re-enable error report prior this call in case it was previously inhibited. Also clear all record message ids to ensure last error will be rendered at top level. 2019-12-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Enable JSON output only on supported sub-cmd 2019-12-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst: doc: desc -j/--json in NEWS/MIGRATING * doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: desc. -j/--json option in diff/man * modulecmd.tcl.in: Add support for JSON output on whatis/search subcmds 2019-12-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add support for JSON output on savelist subcmd * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module: init: add -j/--json options to completion scripts * modulecmd.tcl.in: Add support for JSON output on list subcmd 2019-12-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add support for JSON output on avail subcmd Fixes #303 * modulecmd.tcl.in: Add --json/-j command-line switches * modulecmd.tcl.in: Handle output report done in JSON format * modulecmd.tcl.in: Add modfile pathname to result returned by findModules 2019-12-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, modulecmd.tcl.in, testsuite/modulefiles.2/loc, testsuite/modulefiles.2/unloc, testsuite/modules.00-init/070-command.exp, testsuite/modules.70-maint/280-ml.exp: Fix mod subcmd abbrev match Fix module sub-command abbreviation match to ensure passed abbreviated form fully match sub-command, not only its minimal abbreviated form. As an example, ``lod`` or ``loda`` do not match anymore the ``load`` sub-command, ``lo`` or ``loa`` still do. * modulecmd.tcl.in, testsuite/modulefiles.2/f, testsuite/modulefiles.2/t, testsuite/modules.70-maint/280-ml.exp: Filter-out all known cmd line switches when parsing ml args To accurately determine specified module sub-command or list of modules to load or unload. 2019-12-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst: doc: desc ml in NEWS/MIGRATING 2019-12-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/Makefile, init/bash.in, init/sh.in: init: ensure ml is defined in bash/ksh subshells * .travis.yml: travis: disable ml on a CI case * testsuite/example/modulerc-1.in, testsuite/modules.70-maint/120-autoinit.exp: ts: adapt autoinit output test for 'ml' * testsuite/bin/install_test_cmake, testsuite/bin/install_test_perl, testsuite/bin/install_test_python, testsuite/bin/install_test_r, testsuite/bin/install_test_ruby, testsuite/bin/install_test_tcl, testsuite/install.00-init/024-ml.exp, testsuite/install.00-init/025-autoinit.exp, testsuite/install.00-init/040-subshell.exp, testsuite/install.00-init/080-args.exp: ts: test 'ml' over Modules installation 2019-11-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.2/bar/0.1, testsuite/modulefiles.2/bar/0.2, testsuite/modulefiles.2/bar/1, testsuite/modulefiles.2/bar/2, testsuite/modulefiles.2/baz/1, testsuite/modulefiles.2/baz/2, testsuite/modulefiles.2/foo/0.1, testsuite/modulefiles.2/foo/0.2, testsuite/modulefiles.2/foo/1, testsuite/modulefiles.2/foo/2, testsuite/modulefiles.2/load, testsuite/modulefiles.2/mlinmod, testsuite/modulefiles.2/modemptyarg/swap, testsuite/modulefiles.2/modemptyarg/swap2, testsuite/modulefiles.2/qux/1, testsuite/modulefiles.2/qux/2, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.70-maint/280-ml.exp: ts: add test for 'ml' command * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.50-cmds/301-interp-command.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/045-listlong.exp, testsuite/modules.70-maint/230-verbosity.exp: ts: set global var for cur loaded msg header * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/080-begenv.exp, testsuite/modules.00-init/150-access-init.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.70-maint/043-listno.exp, testsuite/modules.70-maint/048-listlongno.exp: ts: set in a common var the no loaded msg * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/015-version.exp, testsuite/modules.00-init/100-pager.exp, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/150-access-init.exp, testsuite/modules.70-maint/220-config.exp: ts: set a common var for Modules version report msg 2019-11-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add ml procedure 2019-11-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/example/siteconfig.tcl-1: Adapt parseModuleVersionSpecifier proc mlspec Add a 'mlspec' argument to the parseModuleVersionSpecifier procedure to indicate module specification comes or not from the 'ml' command. A slightly different processing is applied in this case as module name may be prefixed by a '-' character when specified over the 'ml' command to indicate this module should be unloaded. When mlspec is enabled two lists are returned by parseModuleVersionSpecifier: one for the list of the module to load and another for the modules to unload. 2019-11-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Define ml func/alias if enabled in renderAutoinit * modulecmd.tcl.in: Add cmdMlHelp proc to output ml usage msg * modulecmd.tcl.in: Adapt main to call 'ml' procs when ml is called cmd 2019-11-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Resolve and check module command in parseModuleCommandName Add parseModuleCommandName procedure to handle the name check and resolution (in case of aliased name) of the command supplied to the module procedure. 2019-11-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/rpm/environment-modules.spec.in, doc/Makefile, doc/source/conf.py, doc/source/index.rst, doc/source/ml.rst, doc/source/module.rst: doc/rpm: add ml man page * INSTALL.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst, doc/source/modulefile.rst: doc: desc ml in man/diff/INSTALL * testsuite/modules.70-maint/220-config.exp: ts: adapt existing tests to ml cfg opt * Makefile, Makefile.inc.in, configure, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, site.exp.in: Introduce ml configuration option Add the ability to control whether or not a ``ml`` command should be defined at Modules initialization time. `ml` is a handy frontend to the module command: it reduces the number of characters to type to trigger module. Enablement is managed throught a new configuration option named `ml` (which defines `MODULES_ML` environment variable when set). It may be enabled by default in `modulecmd.tcl` script with option `--enable-ml` passed to `./configure` script. 2019-11-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../design/default-latest-version-specifiers.rst: doc: add default-latest-version-specifiers design notes 2020-01-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc. doc improvements in NEWS 2020-01-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst: doc: alphabetically sort sub-cmds, opts and envar in module.1 * doc/source/modulefile.rst: doc: alphabetically sort modulefile cmds in modulefile.4 * doc/source/diff_v3_v4.rst: doc: apply same markup on diff doc than man pages * doc/source/module.rst, doc/source/modulefile.rst: doc: split lines larger than 78 cols in man pages * doc/source/modulefile.rst: doc: desc. modulefile cmd version addition in modulefile.4 2020-01-08 Colin Marquardt <cmarqu42@gmail.com> * doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: desc. env var version addition in module.1 * doc/source/module.rst: doc: desc. sub-cmds version addition in module.1 2020-01-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst: doc: desc. cmd line switches version addition in module.1 2020-01-08 Colin Marquardt <cmarqu42@gmail.com> * doc/source/module.rst, doc/source/modulefile.rst: doc: markup code with double backticks in man pages 2020-01-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst, doc/source/modulefile.rst: doc: fix missing ref link in or between man pages 2020-01-07 Colin Marquardt <cmarqu42@gmail.com> * doc/source/module.rst, doc/source/modulefile.rst: doc: markup modulefile cmd with :mfcmd: in man pages * doc/source/modulefile.rst: doc: markup modulefile cmd sections with .. mfcmd:: in man pages * doc/source/module.rst, doc/source/modulefile.rst: doc: markup subcmd with :subcmd: in man pages * doc/source/module.rst: doc: markup subcmd sections with .. subcmd:: in man pages 2020-01-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/conf.py: doc: add sphinx directives/roles for sub-cmd and modulefile cmd 2020-01-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/conf.py, doc/source/module.rst: doc: markup autogen files with :file: in man pages 2020-01-06 Colin Marquardt <cmarqu42@gmail.com> * doc/source/module.rst: doc: markup option sections with .. option:: in man pages * doc/source/module.rst, doc/source/modulefile.rst: doc: markup cmd opt with :option: in man pages * doc/source/module.rst, doc/source/modulefile.rst: doc: markup env var with :envvar: in man pages * doc/source/module.rst, doc/source/modulefile.rst: doc: markup env var sections with .. envar:: in man pages * doc/source/module.rst, doc/source/modulefile.rst: doc: markup cmds with :command: in man pages 2020-01-05 Colin Marquardt <cmarqu42@gmail.com> * doc/source/modulefile.rst: doc: markup man page ref with :manpage: in man pages * doc/source/module.rst, doc/source/modulefile.rst: doc: markup files with :file: in man pages * doc/source/module.rst, doc/source/modulefile.rst: doc: fix ref link to Locating Modulefiles section * doc/example/modulepaths-persist-over-sudo/rc, doc/example/test-modulefiles/modulefiles/test_dir_and_file, doc/source/cookbook/ensure-user-qualify-modules.rst, doc/source/cookbook/inhibit-report-info.rst, doc/source/cookbook/log-module-commands.rst, doc/source/cookbook/module-info-name-return-basename.rst, doc/source/cookbook/modulepaths-persist-over-sudo.rst, doc/source/cookbook/test-modulefiles.rst, doc/source/cookbook/unload-firstly-loaded.rst: doc: highlight code included in cookbook recipes Specify language directive for included Tcl script files in cookbook recipes to get their code highlighted in resulting HTML documents. As Pygment Tcl lexer used by Sphinx does not support the whole Tcl syntax, scripts of modulepaths-persist-over-sudo and test-modulefiles recipes have been adapted to enable highlighting. Change has not been performed over the expose-procs-vars-to-modulefiles and top-priority-values recipes as their code cannot be adapted to match lexer needs. * doc/source/diff_v3_v4.rst, doc/source/module.rst, doc/source/modulefile.rst: doc: fix some typos and grammar across documents 2020-01-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .cirrus.yml: cirrus: update python requirement on FreeBSD test env 2020-01-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version 4.4.1 * doc/source/design/advanced-module-version-specifiers.rst: doc: clarify adv vers spec does not support identification context * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: ts: add tests to improve on-the-fly proc define coverage * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp, .../modules.70-maint/260-extended_default.exp, .../272-adv_version_spec-range.exp, testsuite/modules.90-avail/080-noindepth.exp: ts: add tests to improve modEq procs coverage * modulecmd.tcl.in: Remove useless getModuleFromVersSpec proc 2020-01-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/mlprof.in, doc/source/conf.py, modulecmd.tcl.in: New year (2020) copyright mention update * contrib/mlprof.in: contrib/mlprof: keep proc stats even if redefined 2019-12-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles/loc_sym/exec2, testsuite/modulefiles/loc_sym/exec3, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/090-memcache.exp: Cache getModules results Introduce a memory cache for the results build up by getModules procedure. Done in order to reuse these results if next searches are identical, which happens in whatis/search context. As a side effect a module resolution cannot be changed by the evaluation of a modulefile sharing same root name, as the initial module resolution to find this modulefile to evaluation has cached resolution result. This side effect should not however impact more than the project testsuite as module resolution should not be defined within a modulefile but within modulerc files. 2019-12-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Use modEqStatic proc in findModules * modulecmd.tcl.in: Introduce doesModMatchAtDepth procedure When defining modMatchAtDepth procedure also define the doesModMatchAtDepth procedure, similar to modMatchAtDepth but only receiving one module name as argument and returning a boolean. * modulecmd.tcl.in: Hardwire modMatchAtDepth procedure Redefine the modMatchAtDepth to hardwire indepth and test argument directly at procedure definition time to optimize performances. * modulecmd.tcl.in: Introduce modEqStatic procedure Introduce the modEqStatic procedure, a more static version of the modEq procedure to use in repetitive comparison contexts like done in getModules and modMatchAtDepth. In modEqStatic, search query is hard wired which removes the need to call getModuleVersSpec each time the procedure is called. Instead getModuleVersSpec is called when the modEqStatic procedure is defined to get the hard wire elements. Doing so saves a lot of time in the getModules routine. 2019-12-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/mb.in: contrib: adapt 'mb' script to profile rather bench module Adapt `mb` script to profile modulecmd test runs rather bench them when `profile` argument is passed to the script. * .gitignore, Makefile, contrib/mlprof.in: contrib: add 'mlprof' script Add the 'mlprof' script which wraps modulecmd.tcl to collect profiling information on its execution. 2019-12-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/140-color.exp: Highlight avail/whatis res matching adv vers spec query Improve highlighting of module avail and whatis search result by coloring module names matching search query expressed with the advanced version specifiers. A name@1,3 or name@1:3 queries now highlight name/1 and name/3 strings found in search result. 2019-12-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.70-maint/260-extended_default.exp, testsuite/modules.70-maint/270-adv_version_spec.exp, .../modules.70-maint/272-adv_version_spec-range.exp: Fix avail search for default vers when not matching query Fix module avail --default queries when modulefile default version does not match query: select latest version from modulefiles matching query unless implicit_default configuration is disabled in which case no default version is returned. * modulecmd.tcl.in, testsuite/modules.70-maint/270-adv_version_spec.exp, testsuite/modules.70-maint/271-adv_version_spec-in.exp: Fix avail queries in no-depth mode when res is a virtual mod When a module avail query performed in no-indepth mode and targets a virtual module, fix result to filter-out the directory holding the virtual module from result. * testsuite/modulefiles.indepth/deepA/1/notamod, testsuite/modulefiles.indepth/deepA/2/1/notamod, testsuite/modulefiles.indepth/deepA/4/.modulerc, testsuite/modulefiles.indepth/deepA/4/1/1/notamod, testsuite/modulefiles.indepth/deepA/4/1/2/1, testsuite/modulefiles.indepth/deepA/4/1/2/3, testsuite/modulefiles.indepth/deepA/4/1/3/.modulerc, testsuite/modulefiles.indepth/deepA/4/1/3/1, testsuite/modulefiles.indepth/deepA/4/1/3/2, testsuite/modules.70-maint/260-extended_default.exp, testsuite/modules.70-maint/270-adv_version_spec.exp, testsuite/modules.70-maint/272-adv_version_spec-range.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/080-noindepth.exp: ts: add tests for avail dir and filtering fixes * modulecmd.tcl.in: Fix avail queries when dirs in result in no-indepth mode In case a module avail query performed in a no-indepth mode with --latest/-L or --default/-d flags either enabled or disabled, fix query processing to return directory elements if they are part of result. 2019-12-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Fix -L/-d queries when upper dir not matching query In case module avail query does not match a directory but only its contained elements (for instance `module av mod/7` matches mod/7.1 and mod/7.2 but not mod/), fix query processing to correctly return latest or default element in case --latest/-L or --default/-d flags are set. Add an ext_filter argument to getModules procedure to indicate that directories of elements matching query should be part of the result list even if these directories does not match query. This ext_filter argument is enabled by listModules procedure when latest or default filters are enabled. These directories are used when filtering is enabled to determine what element should be displayed. 2019-12-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml: travis: no more need for md5sha1sum pkg on OSX md5sum is now provided by coreutils 2019-12-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../design/advanced-module-version-specifiers.rst, doc/source/design/extended-default.rst, doc/source/design/insensitive-case.rst, doc/source/design/module-selection-contexts.rst: doc: fix rst bullet lists in design docs Conform to RST docutils standard [1] that express bullet lists and nested bullet lists should be separated by a blank line before and after them. Fixes #306. [1] https://docutils.sourceforge.io/docs/ref/rst/r estructuredtext.html#bullet-lists 2019-12-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/rpm/environment-modules.spec.in: rpm: fix spec file for el8 build Remove Modules compat version build dependency on tclx-devel package as TclX is not provided anymore in el8. Convert shebang of createmodule.py tool from python to python3. 2019-11-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml: travis: explicitly install wget on osx to fix libssl dep issue 2019-11-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst: doc: add anchor for each module sub-cmd and env var * doc/source/modulefile.rst: doc: add anchor for each modulefile command 2019-11-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.2/advvers10/1, testsuite/modulefiles.2/advvers10/2, testsuite/modulefiles.2/advvers10/3, testsuite/modulefiles.2/advvers10/4, testsuite/modulefiles.2/advvers10/5, testsuite/modulefiles.2/advvers10/6, testsuite/modulefiles.2/advvers10/7, testsuite/modulefiles.2/advvers10/8, testsuite/modulefiles.2/advvers8/1, testsuite/modulefiles.2/advvers8/2, testsuite/modulefiles.2/advvers8/3, testsuite/modulefiles.2/advvers9/.modulerc, testsuite/modulefiles.2/advvers9/1, testsuite/modulefiles.2/advvers9/2, testsuite/modulefiles.2/advvers9/3, testsuite/modulefiles.deps/haa, testsuite/modulefiles.deps/hab, testsuite/modulefiles.deps/hac/.modulerc, testsuite/modulefiles.deps/hac/1, testsuite/modulefiles.deps/hac/2, testsuite/modulefiles.deps/had, testsuite/modulefiles.deps/hae, testsuite/modules.50-cmds/378-sametarget.exp, .../modules.70-maint/271-adv_version_spec-in.exp, .../272-adv_version_spec-range.exp: ts: check load/prereq handle loaded non-default the same Add test to check dependency resolution applies the same against a non default version loaded whether module load/prereq is used to declared and whatever the auto_handling module enabled. Handling was different between module load and prereq prior c50e2ba7d3a03ecd2baa933a5ce8991835f3feb1. Which fixes #228. Added tests also check behavior against advanced module version specifier. 2019-11-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitignore, doc/demo/Makefile: doc/demo: add Makefile to build imgs from session cast * .gitignore, Makefile, contrib/playdemo.in: contrib: add 'playdemo' script 2019-11-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/demo/sc19/01welcome.cast, doc/demo/sc19/02config.cast, doc/demo/sc19/03auto_handling.cast, doc/demo/sc19/04icase.cast, doc/demo/sc19/05extended_default.cast, doc/demo/sc19/06advanced_version_spec.cast, doc/demo/sc19/07thanks.cast, doc/demo/sc19/script, doc/example/sc19/modulefiles/appA/1.0, doc/example/sc19/modulefiles/appA/2.0, doc/example/sc19/modulefiles/appB/1.0, doc/example/sc19/modulefiles/appC/.modulerc, doc/example/sc19/modulefiles/appC/1.0, doc/example/sc19/modulefiles/appC/2.0, doc/example/sc19/modulefiles/appC/2.2.10, doc/example/sc19/modulefiles/appC/2.2.2, doc/example/sc19/modulefiles/appC/2.4, doc/example/sc19/modulefiles/appC/3.6, doc/example/sc19/modulefiles/appD/1.2, doc/example/sc19/modulefiles/appD/2.1, doc/example/sc19/modulefiles/libX/1.0, doc/example/sc19/modulefiles/libX/2.0, doc/example/sc19/modulefiles/libY/.modulerc, doc/example/sc19/modulefiles/libY/1.0, doc/example/sc19/modulefiles/libY/2.0, doc/example/sc19/modulefiles/toolchain/a, doc/example/sc19/modulefiles/toolchain/b: doc: add sc19 demo 2019-11-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Skip mod loading msg if mod already loaded Skip output of module loading message if module is already loaded. * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp: Enclose in quote dep spec in error/warning mesg Fix error and warning messages relative to dependency management to enclose dependency specification in single quotes to clearly distinguish specification from each other. 2019-11-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version 4.4.0 2019-11-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc. conflict fix/design notes/MODULESHOME in NEWS * doc/source/diff_v3_v4.rst, doc/source/module.rst, doc/source/modulefile.rst: doc: desc. advanced_version_spec in diff/man * INSTALL.rst, configure: doc: desc. advanced_version_spec in configure/INSTALL * MIGRATING.rst, NEWS.rst: doc: desc. advanced_version_spec in NEWS 2019-11-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst: doc: desc. advanced_version_spec in MIGRATING 2019-11-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module: init: fix missing -i/--icase in completion scripts * testsuite/example/modulerc-1.in, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/220-config.exp: ts: adapt tests to new config option home * INSTALL.rst, Makefile, Makefile.inc.in, configure, doc/source/module.rst, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, site.exp.in: Introduce home configuration option Make MODULESHOME environment variable controllable through the `config` sub-command with `home` configuration option. A `--with-moduleshome` argument is also added to the ./configure script to set specific default value for this option at installation time. Fixes #292 2019-11-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../design/advanced-module-version-specifiers.rst: doc: refine again advanced_version_spec design * testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/020-module.exp, testsuite/modulefiles.2/advvers6/3.0, testsuite/modulefiles.2/advvers6/3.1, testsuite/modulefiles.2/advvers6/3.2, .../272-adv_version_spec-range.exp: ts: additionnal adv_vers_spec in 70/272 and install ts * .cirrus.yml: cirrus: install openmp to satisfy R needs 2019-11-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.2/advvers6/1.2, testsuite/modulefiles.2/advvers6/1.3, testsuite/modulefiles.2/advvers6/1.4, testsuite/modulefiles.2/advvers6/1.5.1, testsuite/modulefiles.2/advvers6/1.5.2, testsuite/modulefiles.2/advvers6/1.6, testsuite/modulefiles.2/advvers6/1.7, testsuite/modulefiles.2/advvers6/1.8, testsuite/modulefiles.2/advvers6/2.0, testsuite/modulefiles.2/advvers6/2.1, testsuite/modulefiles.2/advvers7/.modulerc, testsuite/modulefiles.2/advvers7/0.9, testsuite/modulefiles.2/advvers7/1.0, testsuite/modulefiles.2/advvers7/1.1, testsuite/modulefiles.2/advvers7/1.2, testsuite/modulefiles.2/advvers7/1.3.1, testsuite/modulefiles.2/advvers7/1.3.2, testsuite/modulefiles.2/advvers7/2.0, testsuite/modulefiles.2/advvers7/2.1, testsuite/modulefiles.2/advvers7/2.2, testsuite/modulefiles.2/advvers7/3.0, testsuite/modulefiles.2/advvers7/3.1, testsuite/modulefiles.2/advvers7/3.2, testsuite/modulefiles.2/advvers7/3.3, testsuite/modulefiles.2/advvers7/4.0, testsuite/modulefiles.2/advvers7/4.1, testsuite/modulefiles.2/advvers7/4.2, testsuite/modulefiles.2/advvers7/5.0, testsuite/modulefiles.2/advvers7/5.1, testsuite/modulefiles.2/advvers7/5.2, testsuite/modulefiles.2/advvers7/5.3, testsuite/modulefiles.2/advvers7/6.0, testsuite/modulefiles.2/advvers7/6.1, testsuite/modulefiles.2/advvers7/6.2, testsuite/modulefiles.2/advvers7/6.3, testsuite/modulefiles.2/advvers7/6.4, testsuite/modulefiles.2/advvers7/6.5, testsuite/modulefiles.2/advvers7/6.6, testsuite/modulefiles.2/advvers7/6.7, testsuite/modulefiles.2/advvers7/7.0, testsuite/modulefiles.2/advvers7/8.1.1, testsuite/modulefiles.2/advvers7/8.1.2, testsuite/modulefiles.2/advvers7/8.2.1, testsuite/modulefiles.2/advvers7/8.2.2, testsuite/modulefiles.2/advvers7/8.3.1, testsuite/modulefiles.2/advvers7/8.3.2, testsuite/modulefiles.2/advvers7/8.4.1, testsuite/modulefiles.2/advvers7/8.4.2, testsuite/modulefiles.2/advvers7/8.5.1, testsuite/modulefiles.2/advvers7/8.5.2, testsuite/modulefiles.2/advvers7/9.0, testsuite/modules.00-init/006-procs.exp, .../272-adv_version_spec-range.exp: ts: vers range spec compat check mod ctx tests 2019-11-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../272-adv_version_spec-range.exp: ts: vers range spec select one mod ctx tests 2019-11-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Serialize version range specifier in MODULES_{LMPREREQ,LMCONFLICT} When saving current loaded prereq and conflict through MODULES_LMPREREQ and MODULES_LMCONFLICT environment variable, translate version range specifier `:` into `<` character to distinguish it from path separator character. * testsuite/modulefiles.2/extdfl7/.modulerc, testsuite/modulefiles.2/extdfl7/10a, testsuite/modulefiles.2/extdfl7/10foo, testsuite/modulefiles.2/extdfl7/10g, testsuite/modulefiles.2/extdfl8/1.3.1, testsuite/modulefiles.2/extdfl8/1.3.7, testsuite/modulefiles.2/extdfl8/1.33, testsuite/modulefiles.2/extdfl8/1.4.5, testsuite/modules.00-init/005-init_ts.exp, .../272-adv_version_spec-range.exp: ts: vers range spec basic and search-specific ctx tests 2019-11-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Introduce range of version in mod version spec A range of version may be specified after '@' with the help of ':' character to express *greater or equal* (ex: `1.2:`), *lower or equal* (ex: `:1.2`) or *between or equal* (ex: `1.1:1.2`) conditions. Adapt procedures that parse module version specifier or compare module version. Error is raised if version specified for range are not versions or higher version is lower than lower version. Non 'xdigit' character in higher part of version number is considered as a non version number. It avoids symbols like `default`, `new` and so on to get in the version range way. 2019-11-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.70-maint/240-icase.exp, .../modules.70-maint/270-adv_version_spec.exp, .../modules.70-maint/271-adv_version_spec-in.exp: ts: skip icase tests if underlying fs is case-insensitive 2019-11-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/378-sametarget.exp: One conflict statement may match multiple loaded mod Conflict defined with a generic module name or an advanced version specifier may match multiple loaded modules (generally in case multiple loaded modules share same root name). Loaded environment analysis has been fixed to bound conflict to all loaded modules matching it. As a result the dependent reload mechanism is not triggered when one loaded module matching conflict is removed if another loaded module still match the conflict. * testsuite/modulefiles.2/advvers4/1.1, testsuite/modulefiles.2/advvers4/1.2, testsuite/modulefiles.2/advvers4/1.3, testsuite/modulefiles.2/advvers4/1.4, testsuite/modulefiles.2/advvers4/1.5.1, testsuite/modulefiles.2/advvers4/1.5.2, testsuite/modulefiles.2/advvers4/1.6, testsuite/modulefiles.2/advvers4/1.7, testsuite/modulefiles.2/advvers4/1.8, testsuite/modulefiles.2/advvers4/2.0, testsuite/modulefiles.2/advvers4/2.1, testsuite/modulefiles.2/advvers5/.modulerc, testsuite/modulefiles.2/advvers5/0.9, testsuite/modulefiles.2/advvers5/1.0, testsuite/modulefiles.2/advvers5/1.1, testsuite/modulefiles.2/advvers5/1.2, testsuite/modulefiles.2/advvers5/1.3.1, testsuite/modulefiles.2/advvers5/1.3.2, testsuite/modulefiles.2/advvers5/2.0, testsuite/modulefiles.2/advvers5/2.1, testsuite/modulefiles.2/advvers5/2.2, testsuite/modulefiles.2/advvers5/3.0, testsuite/modulefiles.2/advvers5/3.1, testsuite/modulefiles.2/advvers5/3.2, testsuite/modulefiles.2/advvers5/3.3, testsuite/modulefiles.2/advvers5/4.0, testsuite/modulefiles.2/advvers5/4.1, testsuite/modulefiles.2/advvers5/4.2, testsuite/modulefiles.2/advvers5/5.0, testsuite/modulefiles.2/advvers5/5.1, testsuite/modulefiles.2/advvers5/5.2, testsuite/modulefiles.2/advvers5/5.3, testsuite/modulefiles.2/advvers5/6.0, testsuite/modulefiles.2/advvers5/6.1, testsuite/modulefiles.2/advvers5/6.2, testsuite/modulefiles.2/advvers5/6.3, testsuite/modulefiles.2/advvers5/6.4, testsuite/modulefiles.2/advvers5/6.5, testsuite/modulefiles.2/advvers5/6.6, testsuite/modulefiles.2/advvers5/6.7, testsuite/modulefiles.2/advvers5/7.0, testsuite/modulefiles.2/advvers5/8.1.1, testsuite/modulefiles.2/advvers5/8.1.2, testsuite/modulefiles.2/advvers5/8.2.1, testsuite/modulefiles.2/advvers5/8.2.2, testsuite/modulefiles.2/advvers5/8.3.1, testsuite/modulefiles.2/advvers5/8.3.2, testsuite/modulefiles.2/advvers5/8.4.1, testsuite/modulefiles.2/advvers5/8.4.2, testsuite/modulefiles.2/advvers5/8.5.1, testsuite/modulefiles.2/advvers5/8.5.2, testsuite/modulefiles.2/advvers5/9.0, .../modules.70-maint/271-adv_version_spec-in.exp: ts: vers list spec compat check mod ctx tests 2019-10-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Record mod vers spec with setModuleVersSpec proc * doc/source/design/insensitive-case.rst: doc: desc avail/load corner case for icase design * .../design/advanced-module-version-specifiers.rst: doc: refine advanced_version_spec design * testsuite/modulefiles.2/extdfl/.1.3.3, .../modules.70-maint/271-adv_version_spec-in.exp: ts: vers list spec select one mod ctx tests 2019-10-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.2/ICASE3/1.1, testsuite/modulefiles.2/ICASE3/VERS.1, testsuite/modulefiles.2/ICASE3/vers.1, testsuite/modulefiles.2/advvers@2.2, testsuite/modulefiles.2/iCaSe3/1.3, testsuite/modulefiles.2/iCaSe3/1.4, testsuite/modulefiles.2/icase3/1.2, testsuite/modulefiles.2/nocase/deep/2, testsuite/modules.70-maint/240-icase.exp, .../modules.70-maint/271-adv_version_spec-in.exp: ts: vers list spec basic and search-specific ctx tests 2019-10-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles.deps/con1/1.1, testsuite/modulefiles.deps/con1/1.2, testsuite/modulefiles.deps/con2/2.1, testsuite/modulefiles.deps/con2/2.2, testsuite/modulefiles.deps/con2/2.3, testsuite/modules.50-cmds/131-conflict-module.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/380-altname.exp, testsuite/modules.70-maint/240-icase.exp, .../modules.70-maint/260-extended_default.exp, .../modules.70-maint/270-adv_version_spec.exp: Handle complex mod vers spec in isModuleEvaluated Rework whole isModuleEvaluated procedure to check all names of loaded or loadind module attempt against module version specifiers passed as argument. Add the 'exclmod' argument to the procedure to exclude from tested list the currently evaluated module: avoid this way detecting self on reflexive conflict definition. As a result just loaded or currently loading conflicting modules are better detected when conflict is expressed against an alias name or a module generic name. * modulecmd.tcl.in: Rename arrayKeyMatch into getEqArrayKey As procedure returns key string, not a boolean value. * modulecmd.tcl.in: Rename arrayKeyEq into getArrayKey And remove call to module version specifier translation: procedure only receive regular module/version specification. * modulecmd.tcl.in: Improve extdfl check in modVersCmp 2019-10-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, .../modules.70-maint/260-extended_default.exp: Adapt mod ext dfl check in modEq if contains *? When query's module contains globbing wildcard characters (? or *) adapt extended default match test to use an escaped version of module designation when modEq is called for an equal test. 2019-10-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.20-locate/030-defvers.exp, .../modules.70-maint/270-adv_version_spec.exp: Makes arrayKeyMatch rely on modEq Call modEq to check mod name passed matches array elements, so arrayKeyMatch procedure does not need to be specialized to match icase and extended_default setup, which is now deleguated to modEq. * modulecmd.tcl.in: Makes modMatchAtDepth rely on modEq Call modEq to check mod name passed in modMatchAtDepth, so this procedure does not need to handle the icase check which is deleguated to modEq. * modulecmd.tcl.in: Fix modEq for empty mod name Test empty module name against simple module name/vers test branch. 2019-10-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add support for contains test in modEq By setting test argument of modEq procedure to 'matchin', perform contains-style match test. 2019-10-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Adapt modname check in modEq if contains *? When query's module name contains globbing wildcard characters (? or *) adapt test to check module names match and then extract module version in modEq. * testsuite/modulefiles.2/e+t.fl/1.3.1, testsuite/modulefiles.2/e+t.fl/1.3.7, testsuite/modulefiles.2/e+t.fl/1.4.5, testsuite/modules.70-maint/260-extended_default.exp, testsuite/modules.70-maint/270-adv_version_spec.exp: ts: test wildcard chars in mod name on 70/{260,270} 2019-10-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Handle version list spec on modEq Adapt modEq procedure to handle version list specifier (ex: @1,2). Introduce modVersCmp procedure to handle version comparison. * modulecmd.tcl.in: Introduce list of version in mod version spec A list of version may be specified after '@' by joining the multiple versions to set with the ',' character (ex: @1.2,1.3). Parse this syntax and store version specification information in parseModuleVersionSpecifier procedure and adapt procedures that handle the version specification information like getOneModuleFromVersSpec and getAllModuleFromVersSpec. * modulecmd.tcl.in: Rework storage of mod version specifier Change internal storage structure to hold module version specifier with 4 fields: complete module name version, module name, version comparison set, and module version. * modulecmd.tcl.in: Rework getModuleVersSpec into getModuleFromVersSpec Change getModuleVersSpec procedure into getModuleFromVersSpec to extract just specified module (name and version) from module name and version specifier. 2019-10-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Get one mod name from spec with getOneModuleFromVersSpec Introduce getOneModuleFromVersSpec procedure to extract one module name from module name version specification. * modulecmd.tcl.in: Test all mod mentionned in spec on isModuleSpecHidden Add a getAllModulesFromVersSpec procedure that parses module name version specification to return a list of all the module mentionned in specification. Use this new helper procedure in isModuleSpecHidden to check if one module from returned list is an hidden module. * modulecmd.tcl.in: Adapt modEq to include modMatch test Refactor modEq procedure to include modMatch-kind test. * modulecmd.tcl.in: Define mod cmp procs in getModules instead findModules Define the module name and version comparison procedures at the beginning of the getModules procedure so it is not needed to define the modMatch procedure in findModules as findModules is only called by getModules. 2019-10-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Adapt modEq to include modStartEq test Add a 'test' argument to modEq procedure to only check if passed module name matches pattern on pattern length when it equals to 'eqstart'. So modStartEq procedure is not needed anymore, calls are replaced with [modEq $pattern $mod eqstart]. * modulecmd.tcl.in: Makes modStartNb rely on modStartEq Call modStartEq to check full name passed in modStartNb, so modStartNb does not need to handle the extended_default check which is then deleguated to modStartEq. Introduce getModuleNameFromVersSpec to extract module name from module name version specification. 2019-10-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, .../modules.70-maint/270-adv_version_spec.exp: Module version specifier cannot contain / char No deep version specification to ease version comparison. * modulecmd.tcl.in: Translate vers spec directly in arrayKeyEq Pass the module version specification toward arrayKeyEq to translate it there for module matching. * modulecmd.tcl.in: Translate vers spec directly in modStartNb Pass the module version specification toward modStartNb to translate it there for module matching. 2019-10-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Translate vers spec directly in modStartEq Pass the module version specification toward modStartEq to translate it there for module matching. * modulecmd.tcl.in: Translate vers spec directly in arrayKeyMatch Pass the module version specification toward arrayKeyMatch to translate it there for module matching. * modulecmd.tcl.in: Get one module name from vers spec in getPathToModule Translate module name version specification in getPathToModule to extract one module version name from it. Use that to determine the module name root to find. * modulecmd.tcl.in: Get one module name from vers spec in listModules Translate module name version specification in listModules to extract one module version name from it. Use that to determine the no-indepth search properties. * modulecmd.tcl.in: Get one module name from vers spec in getModules Translate module name version specification in getModules to extract one module version name from it. Use that to determine the module name root to find and no-indepth search properties. * modulecmd.tcl.in: Translate vers spec directly in modMatch Pass the module version specification toward modMatch procedure to translate it there for module matching. modMatch procedure is adapted to apply the translation only if a 'trspec' argument is set to 1. A pattern suffix 'psuf' argument is also added to give the ability to append a suffix string to translated module name version. * modulecmd.tcl.in: Add isModuleSpecHidden to translate vers spec Introduce the isModuleSpecHidden procedure to pass it the module version specification which is there translated to check if corresponding module names are hidden or not. * modulecmd.tcl.in: Translate vers spec directly in modMatchAtDepth Pass the module version specification toward modMatchAtDepth to translate it there for module matching. Also pass the 'contains' mode toward this procedure to adapt module name version once translated. 2019-10-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles.2/extdfl2/.modulerc, testsuite/modulefiles.2/extdfl7/.modulerc, testsuite/modules.70-maint/240-icase.exp, .../modules.70-maint/260-extended_default.exp, .../modules.70-maint/270-adv_version_spec.exp: Adapt modEq proc to icase and extended_default config 2019-10-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.70-maint/270-adv_version_spec.exp: No need to translate mod vers spec in conflict proc Get error message reflecting way conflict is defined. * modulecmd.tcl.in, .../modules.70-maint/270-adv_version_spec.exp: Introduce a modEq proc for cmdModuleSearch/getModules Check 2 module names are equal with a dedicated proc called 'modEq' that translates one name argument against recorded module version specifiers. Use this procedure in cmdModuleSearch, thus this procedure does not need to translate module name it receives against recorded module version specifiers. Also use modEq for a comparison in getModules procedure. 2019-10-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.2/.modulerc, testsuite/modulefiles.2/advvers/1.3, testsuite/modulefiles.2/advvers/1.4, testsuite/modulefiles.2/advvers/1.5, testsuite/modulefiles.2/advvers/1.6, testsuite/modulefiles.2/advvers/1.7, testsuite/modulefiles.2/advvers/1.8, testsuite/modulefiles.2/advvers2/1.0, testsuite/modulefiles.2/advvers2/1.1, testsuite/modulefiles.2/advvers2/1.2, testsuite/modulefiles.2/advvers2/1.3, testsuite/modulefiles.2/advvers2/2.0, testsuite/modulefiles.2/advvers2/2.1, testsuite/modulefiles.2/advvers2/2.2, testsuite/modulefiles.2/advvers2/3.0, testsuite/modulefiles.2/advvers2/3.1, testsuite/modulefiles.2/advvers2/3.2, testsuite/modulefiles.2/advvers2/3.3, testsuite/modulefiles.2/advvers2/4.0, testsuite/modulefiles.2/advvers2/4.1, testsuite/modulefiles.2/advvers2/4.2, testsuite/modulefiles.2/advvers2/5.0, testsuite/modulefiles.2/advvers2/5.1, testsuite/modulefiles.2/advvers2/5.2, testsuite/modulefiles.2/advvers2/5.3, testsuite/modulefiles.2/advvers2/6.0, testsuite/modulefiles.2/advvers2/6.1, testsuite/modulefiles.2/advvers2/6.2, testsuite/modulefiles.2/advvers2/6.3, testsuite/modulefiles.2/advvers2/6.4, testsuite/modulefiles.2/advvers2/6.5, testsuite/modulefiles.2/advvers2/6.6, testsuite/modulefiles.2/advvers2/6.7, testsuite/modulefiles.2/advvers2/7.0, testsuite/modulefiles.2/advvers2/8.1.1, testsuite/modulefiles.2/advvers2/8.1.2, testsuite/modulefiles.2/advvers2/8.2.1, testsuite/modulefiles.2/advvers2/8.2.2, testsuite/modulefiles.2/advvers2/8.3.1, testsuite/modulefiles.2/advvers2/8.3.2, testsuite/modulefiles.2/advvers2/8.4.1, testsuite/modulefiles.2/advvers2/8.4.2, testsuite/modulefiles.2/advvers2/8.5.1, testsuite/modulefiles.2/advvers2/8.5.2, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.70-maint/240-icase.exp, .../modules.70-maint/270-adv_version_spec.exp: ts: add adv vers spec tests for check compat mod ctx 2019-10-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.2/advvers/1.2, .../modules.70-maint/270-adv_version_spec.exp: ts: add adv vers spec tests for select one mod ctx 2019-10-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.2/advvers/deep/1/1.2, testsuite/modulefiles.2/advvers@2.1, testsuite/modulefiles.2/extdfl/.1.3.4, testsuite/modules.00-init/005-init_ts.exp, .../modules.70-maint/270-adv_version_spec.exp: ts: add basic adv vers spec test + search-specific ctx 2019-10-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Fetch translated vers spec in 'check compat' contexts * modulecmd.tcl.in: Fetch translated vers spec in 'select one' contexts * modulecmd.tcl.in: Fetch translated vers spec in 'return all' contexts 2019-10-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Parse mod vers specifier where mod could be specified Introduce parseModuleVersionSpecifier procedure to parse module specification and extract from it module name and version specifier. Call this new procedure in all procedures receiving module specification: module, conflict, prereq and is-loaded. * modulecmd.tcl.in: Rework error mngt in module proc Do not catch error in procedure, let it flow upstream and catch it at top level. 2019-09-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml, testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.70-maint/220-config.exp: ts/travis: adapt existing tests to advanced_version_spec cfg opt * Makefile, Makefile.inc.in, configure, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, site.exp.in: Introduce advanced_version_spec configuration option Add the advanced_version_spec configuration option that will control the activation of advanced module version specifier syntax. 2019-08-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../design/advanced-module-version-specifiers.rst: doc: add advanced-module-version-specifiers design spec 2019-11-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst: doc: desc extended_default in NEWS/MIGRATING 2019-11-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: mention module-info-name-return-basename recipe add in NEWS 2019-09-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst, doc/source/design/extended-default.rst, doc/source/module.rst, doc/source/modulefile.rst, modulecmd.tcl.in, .../modules.70-maint/260-extended_default.exp: Remove '-' from list of ext dfl separator char Remove the '-' character from the list of extended default separator characters, as it is not feasible to determine in all cases the highest version specified after this character (to determine an implicit default). This removal means that only '.' is taken into account as extended default separator. 2019-09-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Apply extended_default to compatibility check context 2019-09-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Rework def of modStartNb alternatives Expand procedure alternatives as individual procedures. The one to activate is renamed 'modStartNb' by defineModStartNbProc. * modulecmd.tcl.in: Rework def of modStartEq alternatives Expand procedure alternatives as individual procedures. The one to activate is renamed 'modStartEq' by defineModStartEqProc. 2019-09-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.2/extdfl/.modulerc, testsuite/modulefiles.2/extdfl/1.0.0-alpha.1, testsuite/modulefiles.2/extdfl/1.0.0-alpha.beta, testsuite/modulefiles.2/extdfl/1.0.0-beta, testsuite/modulefiles.2/extdfl/1.0.2, testsuite/modulefiles.2/extdfl/1.1.0, testsuite/modulefiles.2/extdfl/1.1.0-beta, testsuite/modulefiles.2/extdfl/1.2.10, testsuite/modulefiles.2/extdfl/1.2.3, testsuite/modulefiles.2/extdfl/1.3.1, testsuite/modulefiles.2/extdfl/1.3.7, testsuite/modulefiles.2/extdfl/1.4.5, testsuite/modulefiles.2/extdfl/2.0, testsuite/modulefiles.2/extdfl/2.0.1, testsuite/modulefiles.2/extdfl2/2.rc.1, testsuite/modulefiles.2/extdfl2/2.rc.2, testsuite/modulefiles.2/extdfl2/3.0.0, testsuite/modulefiles.2/extdfl2/3.0.15, testsuite/modulefiles.2/extdfl2/3.0.2, testsuite/modulefiles.2/extdfl2/3.010.1, testsuite/modulefiles.2/extdfl2/3.09.3, testsuite/modulefiles.2/extdfl2/3.1.3, testsuite/modulefiles.2/extdfl2/3.1.7, testsuite/modulefiles.2/extdfl2/3.10.2, testsuite/modulefiles.2/extdfl2/3.9.2, testsuite/modulefiles.2/extdfl3/.modulerc, testsuite/modulefiles.2/extdfl3/1.0, testsuite/modulefiles.2/extdfl3/1.1/3, testsuite/modulefiles.2/extdfl3/1.3/4, testsuite/modulefiles.2/extdfl6/conflict, testsuite/modulefiles.2/extdfl6/conflict2, testsuite/modulefiles.2/extdfl6/conflicta, testsuite/modulefiles.2/extdfl6/conflicts, testsuite/modulefiles.2/extdfl6/info, testsuite/modulefiles.2/extdfl6/info2, testsuite/modulefiles.2/extdfl6/isloaded, testsuite/modulefiles.2/extdfl6/isloaded2, testsuite/modulefiles.2/extdfl6/load, testsuite/modulefiles.2/extdfl6/load2, testsuite/modulefiles.2/extdfl6/load3, testsuite/modulefiles.2/extdfl6/prereq, testsuite/modulefiles.2/extdfl6/prereq2, testsuite/modulefiles.2/extdfl6/prereqc, testsuite/modulefiles.2/extdfl6/prereqi, testsuite/modulefiles.2/extdfl6/prereqi2, testsuite/modulefiles.2/extdfl6/unload, testsuite/modulefiles.2/extdfl6/unload2, testsuite/modulefiles.2/extdfl7/.modulerc, testsuite/modulefiles.2/extdfl7/1.1, testsuite/modulefiles.2/extdfl7/2.1, testsuite/modulefiles.2/extdfl7/2.10, testsuite/modulefiles.2/extdfl7/3.1, testsuite/modulefiles.2/extdfl7/4.1, testsuite/modulefiles.2/extdfl7/5.1, testsuite/modulefiles.2/extdfl7/6.1, testsuite/modulefiles.2/extdfl7/7.0, testsuite/modulefiles.2/extdfl7/7.1, testsuite/modulefiles.2/extdflb.4.0, testsuite/modulefiles.2/extdflb.4.1/1, testsuite/modulefiles.2/extdflc-4/1, testsuite/modulefiles.2/extdflc-5/1, .../modules.70-maint/260-extended_default.exp: ts: cover extended_default with tests 2019-09-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Rework def of arrayKeyMatch alternatives Expand procedure alternatives as individual procedures. The one to activate is renamed 'arrayKeyMatch' by defineArrayKeyMatchProc. * modulecmd.tcl.in: Rework def of modMatch alternatives Expand procedure alternatives as individual procedures. The one to activate is renamed 'modMatch' by defineModMatchProc. * modulecmd.tcl.in: Rework def of modMatchAtDepth alternatives Expand procedure alternatives as individual procedures. The one to activate is renamed 'modMatchAtDepth' by defineModMatchAtDepthProc. * modulecmd.tcl.in: Apply extended_default to return all matching mod context Only update modMatch. No need to update modMatchAtDepth procedure to take into account extended_default, as all match tests going through this procedures are already appended with a wildcard character (*). 2019-09-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/extended-default.rst: doc: refine extended_default design 2019-09-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Apply extended_default to single module selection context 2019-09-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst, doc/source/modulefile.rst: doc: desc extended_default in man/diff/INSTALL * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.70-maint/220-config.exp: ts: adapt existing tests to extended_default cfg opt * Makefile, Makefile.inc.in, configure, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, site.exp.in: Introduce extended_default configuration option Add the ability to select a module when its version is partially specified. Enable this behavior through a new configuration option named `extended_default` (which defines `MODULES_EXTENDED_DEFAULT` environment variable when set). When extended_default mechanism is enabled a module version may be specified by its starting portion, part separated from the rest of the version string by a `.` or `-` character. When multiple versions match partial version specified and only one module should be returned, default version (implicit or explicit) among matches is returned. In case `implicit_default` is disabled and no explicit default is found among matches, an error is returned. Mechanism may be enabled by default in `modulecmd.tcl` script with option `--enable-extended-default` passed to `./configure` script. 2019-11-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: add in NEWS issue ref and contrib. name for icase feature 2019-09-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/250-nan.exp: ts: ensure icase is disabled for 70/250 tests 2019-09-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/insensitive-case.rst: doc: desc corner cases in icase design 2019-09-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/152-module-emptyarg.exp: ts: adapt 50/152 tests due to whatis changes in ts/modpath.2 * modulecmd.tcl.in: Introduce arrayKeyEq help proc Search array keys for an insensitive case match if icase mode is enabled and no sensitive case match is found. 2019-09-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Resolve vers or alias specified with different case When insensitive case match is enabled for module version specification to select one module context, if no case sensitive exact match is found when trying to resolve a symbolic version or a module alias, then select highest case insensitive matching version if any. This change enables a case insensitive match only for direct alias or symbol resolution. In case an alias or symbolic version icase matches another alias or symbolic version which in turn also icase matches a modulefile, resolution will currently fail. * modulecmd.tcl.in: Define modStartNb proc on the fly Make getLoadedWithClosestName procedure relies on a modStartNb procedure to compare how many starting parts between both names passed as argument are equivalent. This modStartNb is defined on the fly by the defineModStartNbProc procedure to adapt its code to the current icase enabled mode. 2019-09-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Define modStartEq proc on the fly Make doesModuleMatchesName, doesLoadingModuleMatchesName and getAllModuleResolvedName procedures rely on a modStartEq procedure to compare if both names passed as argument have the same starting parts. This modStartEq is defined on the fly by the defineModStartEqProc procedure to adapt its code to the current icase enabled mode. * modulecmd.tcl.in: Get path to module specified with different case When insensitive case match is enabled for module version specification to select one module context, if no case sensitive exact match is found then select highest case insensitive matching version. 2019-09-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Define modMatchAtDepth procedure on the fly Add a defineModMatchAtDepthProc procedure that defines modMatchAtDepth procedure with code adapted to the current indepth and icase configuration. On the fly procedure definition helps to improve performance as defined procedure is finely tuned. * modulecmd.tcl.in: Define modMatch procedure on the fly Add a defineModMatchProc procedure that defines modMatch procedure with code adapted to the current icase configuration. On the fly procedure definition helps to improve performance as defined procedure is finely tuned. 2019-09-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.2/.modulerc, testsuite/modulefiles.2/ICASE/1, testsuite/modulefiles.2/ICASE2/1, testsuite/modulefiles.2/IcAsE/1, testsuite/modulefiles.2/iCaSe/1, testsuite/modulefiles.2/iCaSe2/1, testsuite/modulefiles.2/icASE/1, testsuite/modulefiles.2/icase/1, testsuite/modulefiles.2/icase/conflict, testsuite/modulefiles.2/icase/conflicta, testsuite/modulefiles.2/icase/conflictp, testsuite/modulefiles.2/icase/conflicts, testsuite/modulefiles.2/icase/info, testsuite/modulefiles.2/icase/infoloaded, testsuite/modulefiles.2/icase/isloaded, testsuite/modulefiles.2/icase/load, testsuite/modulefiles.2/icase/loadi, testsuite/modulefiles.2/icase/prereq, testsuite/modulefiles.2/icase/prereqc, testsuite/modulefiles.2/icase/unload, testsuite/modulefiles.2/icase/z, testsuite/modulefiles.2/nocase/.hidden, testsuite/modulefiles.2/nocase/.modulerc, testsuite/modulefiles.2/nocase/1, testsuite/modulefiles.2/nocase/deep/3, testsuite/modulefiles.2/nocase/deep2/notamodule, testsuite/modulefiles.2/nocase/regular, testsuite/modulefiles.2/nocase2, testsuite/modulefiles.2/nocase7/conflictim1, testsuite/modulefiles.2/nocase7/conflictim2, testsuite/modulefiles.2/nocase7/prereqim1, testsuite/modulefiles.2/nocase7/prereqim2, testsuite/modules.70-maint/220-config.exp, testsuite/modules.70-maint/240-icase.exp: ts: add tests for icase config * doc/source/module.rst: doc: search sub-cmd is always performed icase Clarify on search sub-command that search query string is always matched in a case insensitive manner. * modulecmd.tcl.in: Mention -i/--icase in help message 2019-09-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module: init: add 'icase' option to completion scripts 2019-09-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, Makefile.inc.in, configure, modulecmd.tcl.in, site.exp.in: Rework avail_icase into icase option Rework avail_icase configuration option in a generic icase option which defines the contexts where to apply a case insensitive match for search query string and module specification: never, only on search-related sub-commands or always. * modulecmd.tcl.in: Migrate 'avail_icase' cfg option retrieval to getConf * INSTALL.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: desc icase in man/diff/INSTALL Fixes #212 * doc/source/module.rst: doc: fix typo in MODULES_SEARCH_MATCH section of module.1 2019-09-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst: doc: desc icase in NEWS/MIGRATING 2019-05-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Match module name in case or nocase mode with modMatch * testsuite/modules.00-init/090-switches.exp, testsuite/modules.70-maint/060-apropos.exp: ts: adapt existing tests to reintroduced icase mode 2019-04-15 Eric Deveaud <edeveaud@pasteur.fr> * modulecmd.tcl.in: icase search only when argument provided * Makefile, Makefile.inc.in, configure, modulecmd.tcl.in: control icase module av at configure time * modulecmd.tcl.in: poc for case insensitive search//avail 2019-08-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/design/extended-default.rst: doc: add extended-default design spec * doc/source/design/insensitive-case.rst: doc: add insensitive-case design spec * doc/source/design.rst, doc/source/design/module-selection-contexts.rst, doc/source/index.rst: doc: add module-selection-contexts design spec 2019-09-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/example/ensure-user-qualify-modules/siteconfig.tcl, .../ensure-user-qualify-modules/siteconfig.tcl-4.3, doc/source/cookbook/ensure-user-qualify-modules.rst: doc: adapt ensure-user-qualify-modules recipe to config rework 2019-09-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst: doc: desc. conf opt internal rework in NEWS/MIGRATING 2019-08-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * siteconfig.tcl, testsuite/example/siteconfig.tcl-1: Update siteconfig.tcl files with new int config setup ways Use the lappendConf procedure to set the locked_configs option and the setConf procedure to set the avail_report_dir_sym and avail_report_mfile_sym options. * modulecmd.tcl.in: Introduce setConf/unsetConf/lappendConf Add the setConf, unsetConf and lappendConf procedures to provide unified ways to set the value of configuration option. 2019-08-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/100-pager.exp, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/140-color.exp, testsuite/modules.00-init/150-access-init.exp, testsuite/modules.70-maint/220-config.exp: ts: adapt tests to match new getConf debugging output * modulecmd.tcl.in: Rework config option val retrieval in cmdModuleConfig 2019-09-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Migrate 'wa_277' cfg option retrieval to getConf 2019-08-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, modulecmd.tcl.in, site.exp.in: Migrate 'pager' cfg option retrieval to getConf Introduce on the way the @pagercmd@ configuration pattern which is the concatenation of the @pager@ and @pageropts@ patterns with a whitespace joining the two when @pageropts@ is not empty. * modulecmd.tcl.in: Migrate 'colors' cfg option retrieval to getConf * Makefile, modulecmd.tcl.in: Migrate 'color' cfg option retrieval to getConf Use an 'initConfColor' procedure to specifically initialize this 'color' configuration option. Adapt value set for this option from the configure script or through the command-line switches to use the valid public names (never, auto and always) to ensure convertion to the internal value only occurs in the initConfColor procedure. 2019-08-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Migrate 'tcl_ext_lib' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'siteconfig' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'run_quarantine' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'rcfile' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'silent_shell_debug' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'collection_target' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'collection_pin_version' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'avail_report_mfile_sym' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'avail_report_dir_sym' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'extra_siteconfig' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'locked_configs' cfg option retrieval to getConf 2019-08-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Migrate 'verbosity' cfg option retrieval to getConf * modulecmd.tcl.in: Make isVerbosityLevel rely on g_config_defs To get existing verbosity levels * modulecmd.tcl.in: Migrate 'set_shell_startup' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'search_match' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'implicit_default' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'unload_match_order' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'term_background' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'avail_indepth' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'auto_handling' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'ignored_dirs' cfg option retrieval to getConf * modulecmd.tcl.in: Migrate 'contact' cfg option retrieval to getConf 2019-07-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Introduce 'getConf' proc Add getConf procedure that retrieves any configuration option value and set the value of this option if not yet defined. * modulecmd.tcl.in: Store all configs in a g_configs array * modulecmd.tcl.in, testsuite/modules.00-init/100-pager.exp, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/150-access-init.exp: Rework pager config internal variable Use only one global variable to store pager command configuration and its associated command-line options rather using one variable for the command name and a second one for its options. * modulecmd.tcl.in: Rework colors initialization code Use ::g_colors_list list variable as primary configuration variable rather ::g_colors array variable. Sync array value on list value. * modulecmd.tcl.in: Auto guess config option cmd-line overridde Check if a '::asked_$option' exists, if true it means configuration option has been overridden from the command-line. * modulecmd.tcl.in: Store conf opt props in g_config_defs global array Define a global array named 'g_config_defs' to store the properties of all configuration options. For each option, a list is set to indicate associated superseding environment variable, default value if any, is configuration option lockable to default value, valid value list, internal value representation and procedure to call to initialize option value. 2019-10-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../modulefiles/info/name, .../siteconfig.tcl, .../cookbook/module-info-name-return-basename.rst, doc/source/diff_v3_v4.rst: doc: add module-info-name-return-basename recipe Fixes #297. 2019-09-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version 4.3.1 * modulecmd.tcl.in, testsuite/modulefiles.2/NaN, testsuite/modulefiles.2/nanbar/1, testsuite/modulefiles.2/nanbar/2, testsuite/modulefiles.2/nanbar/nan, testsuite/modulefiles.2/nanfoo/.modulerc, testsuite/modulefiles.2/nanfoo/1, testsuite/modules.70-maint/250-nan.exp: Rework ternary operator expr if res may equal 'nan' Rework all the ternary operator expressions (eg. [expr {cond ? true : false}] if their true or false result may be equal to the nan string (whatever the case used to write it). When a 'nan' value is returned from such an expression an error is raised, which breaks Modules as soon as a modulefile, an alias or a symbolic version is named 'nan'. These expressions are rewritten as bare if/then/else blocks. Fixes #296. 2019-09-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deep/modulerc/.modulerc, testsuite/modulefiles/loc_rc3/.modulerc, testsuite/modulefiles/loc_rc3/0.0/.notmodfile, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.80-deep/010-init_ts.exp, testsuite/modules.80-deep/030-display.exp, testsuite/modules.80-deep/050-whatis.exp, testsuite/modules.80-deep/068-transitive-deep.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/070-full.exp: ts: adapt tests for #294 and #295 fixes * modulecmd.tcl.in: Fix alias over dir when implicit_default is disabled Fix the whatis and paths sub-command results for module aliases targeting a directory when implicit_default configuration option is disabled. No error is returned and same result is now obtained whether the alias name or its target is used as argument for those two sub-commands. Fixes #295. * modulecmd.tcl.in: Fix sym over dir when implicit_default is disabled Fix the whatis and paths sub-command results for module symbolic versions targeting a directory when implicit_default configuration option is disabled. No error is returned and same result is now obtained whether the symbolic name or its target is used as argument for those two sub-commands. Fixes #294. 2019-09-16 Tom Payerle <payerle@umd.edu> * doc/example/tips-for-code-reuse/bar/1.0/nothreads, doc/example/tips-for-code-reuse/bar/1.0/openmp, doc/example/tips-for-code-reuse/bar/1.0/pthreads, doc/example/tips-for-code-reuse/bar/2.0/nothreads, doc/example/tips-for-code-reuse/bar/2.0/openmp, doc/example/tips-for-code-reuse/bar/2.0/pthreads, doc/example/tips-for-code-reuse/bar/common, doc/example/tips-for-code-reuse/foo/1.0, doc/example/tips-for-code-reuse/foo/2.0, doc/example/tips-for-code-reuse/fooA/1.0, doc/example/tips-for-code-reuse/fooA/2.0, doc/example/tips-for-code-reuse/fooA/common, doc/example/tips-for-code-reuse/fooB/.generic, doc/example/tips-for-code-reuse/fooB/1.0, doc/example/tips-for-code-reuse/fooB/2.0, doc/example/tips-for-code-reuse/fooB/common, doc/source/cookbook/tips-for-code-reuse.rst: doc: Adding cookbook page "tips-for-code-reuse" 2019-09-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: desc wa_277 in man/diff/INSTALL 2019-09-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml, testsuite/install.00-init/020-module.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/220-config.exp: ts/travis: adapt tests to wa_277 cfg * Makefile, Makefile.inc.in, configure, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, site.exp.in: Workaround for Tcsh history issue with wa_277 conf opt Introduce the wa_277 configuration option to workaround an issue with Tcsh history described on ticket #277. When option is enabled (which sets the MODULES_WA_277 environment variable to 1), an alternative module alias is defined which fixes the history mechanism issue. However the alternative definition of the module alias weakens shell evaluation of the code produced by modulefiles. Characters with special meaning for Tcsh shell (like { and }) may not be used anymore in shell alias definition elsewhere the evaluation of the code produced by modulefiles will return a syntax error. Fixes #277. 2019-09-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/example/ensure-user-qualify-modules/initrc, .../modulefiles/softa/1, .../modulefiles/softa/2, .../modulefiles/softb/.modulerc, .../modulefiles/softb/1, .../modulefiles/softb/2, .../ensure-user-qualify-modules/siteconfig.tcl, .../cookbook/ensure-user-qualify-modules.rst: doc: add ensure-user-qualify-modules recipe to cookbook * contrib/etc/rc-modulepath, doc/example/modulepaths-persist-over-sudo/rc, .../cookbook/modulepaths-persist-over-sudo.rst: doc: add modulepaths-persist-over-sudo recipe to cookbook Rework global RC file proposed in contrib/etc/rc-modulepath, for use case described at [1], as a cookbook recipe. [1] https://bugzilla.redhat.com/show_bug.cgi?id=1139165 2019-09-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../modulefiles/bar/1, .../modulefiles/foo/1, .../siteconfig.tcl, .../cookbook/expose-procs-vars-to-modulefiles.rst: doc: add expose-procs-vars-to-modulefiles recipe to cookbook 2019-09-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/example/log-module-commands/siteconfig.tcl, doc/source/cookbook/log-module-commands.rst: doc: add log-module-commands recipe to cookbook Fixes #283. * doc/source/cookbook/inhibit-report-info.rst, doc/source/cookbook/top-priority-values.rst, doc/source/cookbook/unload-firstly-loaded.rst: doc: desc way to find siteconfig script location in recipes In cookbook recipes implying the installation of a site-specific configuration script, instructions are provided to help to find the expected location of this script on the current setup. Fixes #266. 2019-09-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.80-deep/022-switch.exp: Load current env info prior match switch one-name-rule When looking at the closest match among loaded modules when switching module with just a single module argument specified, load the informations on the currently set environment to get the alternative names of loaded modules prior to look at closest module match. Fixes #290. 2019-09-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/modulefile.rst: doc: attempt to clarify eval mode in modulefile man Fixes #289 2019-08-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/bin/install_test_csh, testsuite/home/.module/.target, testsuite/home/.module/coll1, testsuite/home/.module/coll2, testsuite/home/.module/coll3, testsuite/home/.module/coll4.target, testsuite/home/coll5, testsuite/install.00-init/060-quar.exp, testsuite/install.00-init/080-args.exp, testsuite/{modulefiles.other => modulefiles.2}/1.1/version, testsuite/{modulefiles.other => modulefiles.2}/1.2/version, testsuite/{modulefiles.other => modulefiles.2}/1.3/version, .../{modulefiles.other2 => modulefiles.2}/clear/.modulerc, testsuite/{modulefiles.other2 => modulefiles.2}/clear/1, testsuite/{modulefiles.other2 => modulefiles.2}/clear/2, testsuite/{modulefiles.other2 => modulefiles.2}/clear/3, testsuite/{modulefiles.other => modulefiles.2}/longerrword, .../{modulefiles.other => modulefiles.2}/modemptyarg/aliases, .../{modulefiles.other => modulefiles.2}/modemptyarg/apropos, .../{modulefiles.other => modulefiles.2}/modemptyarg/avail, .../{modulefiles.other => modulefiles.2}/modemptyarg/display, .../{modulefiles.other => modulefiles.2}/modemptyarg/list, .../{modulefiles.other => modulefiles.2}/modemptyarg/load, .../{modulefiles.other => modulefiles.2}/modemptyarg/purge, .../{modulefiles.other => modulefiles.2}/modemptyarg/reload, .../{modulefiles.other => modulefiles.2}/modemptyarg/restore, .../{modulefiles.other => modulefiles.2}/modemptyarg/save, .../modemptyarg/savelist, .../{modulefiles.other => modulefiles.2}/modemptyarg/saverm, .../modemptyarg/saveshow, .../{modulefiles.other => modulefiles.2}/modemptyarg/source, .../{modulefiles.other => modulefiles.2}/modemptyarg/swap, .../{modulefiles.other => modulefiles.2}/modemptyarg/swap2, .../{modulefiles.other => modulefiles.2}/modemptyarg/swap3, .../{modulefiles.other => modulefiles.2}/modemptyarg/test, .../{modulefiles.other => modulefiles.2}/modemptyarg/unload, .../{modulefiles.other => modulefiles.2}/modemptyarg/unuse, .../{modulefiles.other => modulefiles.2}/modemptyarg/use, .../{modulefiles.other => modulefiles.2}/modemptyarg/whatis, testsuite/{modulefiles.other => modulefiles.2}/putsvar, testsuite/{modulefiles.other => modulefiles.2}/quar, testsuite/{modulefiles.other => modulefiles.2}/restore, .../veryveryveryveryveryveryveryverylong/.modulerc, .../veryveryveryveryveryveryveryverylong/name, testsuite/modulefiles.other/README, testsuite/modulefiles/info/isused, testsuite/modulefiles/use/1.0, testsuite/modulefiles/use/2.0, testsuite/modulefiles/use/2.1, testsuite/modulefiles/use/2.2, testsuite/modulefiles/use/3.0, testsuite/modulefiles/use/3.1, testsuite/modulefiles/use/3.2, testsuite/modulefiles/use/4.1, testsuite/modules.00-init/110-quar.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/032-prepend.exp, testsuite/modules.10-use/040-load-use.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.70-maint/045-listlong.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.70-maint/153-is-loaded.exp, testsuite/modules.70-maint/200-errdisp.exp, testsuite/modules.70-maint/210-clear.exp, testsuite/modules.90-avail/050-long.exp, testsuite/modules.95-version/010-init_ts.exp, testsuite/modules.95-version/050-fullpathentry.exp: ts: add modulefiles.2 test modulepath repository And make it a repository for additional test modulefiles that do not need to take part in the global avail tests made over the main repository (modulefiles) and who could mixed with others (like other and other2). 2019-08-27 Per Persson <md2perpe+github@gmail.com> * README.md: doc: use quote instead of code for links in README Inside a code block URLs are not converted to links when the Markdown is rendered as HTML. In a quote they do. The other differences are minor both for the raw text and for the rendered text. 2019-08-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/120-autoinit.exp: ts: check precedence of etc/modulespath over init/.modulespath * testsuite/modules.70-maint/120-autoinit.exp: ts: check precedence of etc/initrc over init/modulerc * .gitignore, .travis.yml, Makefile, testsuite/example/initrc.in, testsuite/modules.70-maint/120-autoinit.exp: ts: test initrc eval output during autoinit 2019-08-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/home/coll14, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/999-cleanup.exp: ts: check urequn mech when restoring collection * modulecmd.tcl.in: Remove useless dir content cleanup in getModules proc No need to remove purged entries from directory content list as elements are added to these list only if valid for the search performed (they are not removed later on, so no need to update directory content). 2019-08-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Remove useless var test in mod reload helper procs * testsuite/modules.70-maint/230-verbosity.exp: ts: add more verbosity tests in 70/230 2019-08-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * lib/configure.ac: lib: bump Envmodules lib version to 1.0.1 Bump version of Envmodules library after the small changes made: - directly return result of Envmodules_Init last operation - Tcl_GetBooleanFromObj already set error message, no need to rewrite an error message in case boolean argument is not boolean * lib/envmodules.c, lib/envmodules.h: lib: bump copyright year mention * Makefile, lib/.gitignore, lib/Makefile.in, lib/configure.ac, lib/testutil-closedir.c, testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/120-siteconfig.exp: ts/lib: test tcl ext lib against a failed closedir call Add an utility library that supersedes the closedir function from libc. The closedir function from this added library always returns an error (-1). It is used for coverage test of the closedir call made withing the Envmodules_GetFilesInDirectoryObjCmd function of the Tcl extension library. 2019-08-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: ts: test tcl ext lib procedures against erroneous calls * .travis.yml: travis: add a tcl8.4 build to the matrix to check testsiteconfig-1 * lib/envmodules.c: lib: Tcl_GetBooleanFromObj already set err msg No need to craft an error message when a non-boolean value is passed to procedures as the Tcl_GetBooleanFromObj function already set the accurate message when it returns non-OK. 2019-08-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: ts: load tcl ext lib by tclsh83 in 00/120 * .gitignore, .travis.yml, Makefile: install/ts: fetch & install old Tcl interp for coverage Add directives into Makefile to install a Tcl8.3 interpreter in order to unlock some additional non-regression tests to improve code coverage tests. 2019-08-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * lib/envmodules.c: lib: directly return res of Envmodules_Init last op 2019-08-05 Felix Neumärker <xdch47@posteo.de> * lib/Makefile.in: install: fix typo on CFLAGS definition in lib/Makefile Fixes #287. 2019-08-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml: travis: increase testsuite run wait time As 15 minutes has become not enough on OSX. * testsuite/install.00-init/050-crossshell.exp: ts: fix not found error msg for mksh New version of mksh returns a 'inaccessible or not found' error message: https://github.com/MirBSD/mksh/commit/64918da0043974fe07450e99427c 5f276d1b6ea0 2019-07-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/150-access-init.exp: Fix error report when Tcl ext lib fails to load Correct modulecmd.tcl script startup to correctly report error in case Tcl extension library fails to load. Fixes #284. 2019-07-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitignore, Makefile, contrib/mb.in: contrib: add 'mb' script to bench modules versions 2019-07-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version 4.3.0 * MIGRATING.rst, NEWS.rst, doc/source/module.rst, modulecmd.tcl.in, testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.00-init/140-color.exp: Honor CLICOLOR/CLICOLOR_FORCE env var to set color mode Add support for standard variables CLICOLOR and CLICOLOR_FORCE to define color mode. Implement specification for these variables described at https://bixense.com/clicolors/. Fixes #279. 2019-07-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/230-verbosity.exp: ts: add tests for verbosity cfg 2019-07-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst: doc: desc verbosity in NEWS/MIGRATING * INSTALL.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: desc verbosity in man/diff/INSTALL * doc/source/cookbook/inhibit-report-info.rst: doc: update inhibit-report-info recipe with verbosity cfg * configure, modulecmd.tcl.in, testsuite/modules.70-maint/220-config.exp: Introduce 'concise' verbosity level Introduce the ``concise`` verbosity level to get slightly less messages than under normal verbosity mode. Concise mode disables informational messages, like additional module evaluation triggered by a module load or unload, aborted evaluation issues or module evaluation report occurring on ``restore`` or ``source`` sub-commands. The ``module`` command could be set concise at ``./configure`` time with ``--with-verbosity`` option. ``MODULES_VERBOSITY`` environment variable supersedes this setting and it could be set with ``config`` module sub-command through the ``verbosity`` option. Fixes #204. * modulecmd.tcl.in: Report every mod load/unload on source sub-cmd When verbosity level is normal or at an higher level, reports every module loads or unloads performed to ``source`` a scriptfile, even if there is no specific message to output for these module evaluations. Clarifies what module evaluations have been triggered to source the scriptfile. * modulecmd.tcl.in, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/080-access-coll.exp: Report every mod load/unload on restore sub-cmd When verbosity level is normal or at an higher level, reports every module loads or unloads performed to ``restore`` a collection, even if there is no specific message to output for these module evaluations. Clarifies what module evaluations have been triggered to restore the collection. 2019-07-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * configure, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, testsuite/modules.00-init/090-switches.exp, testsuite/modules.70-maint/220-config.exp: Reintroduce 'verbose' verbosity level Reintroduce the ``verbose`` verbosity level and associated ``--verbose`` and ``-v`` command-line switches, which were available on Modules v3. Verbose mode adds additional informational messages, like a systematic report of the loading or unloading module evaluations. The ``module`` command could be set verbose by default at ``./configure`` time with ``--with-verbosity`` option. ``MODULES_VERBOSITY`` environment variable supersedes this setting and it could be set with ``config`` module sub-command through the ``verbosity`` option. * configure, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, testsuite/modules.00-init/090-switches.exp, testsuite/modules.70-maint/220-config.exp: Reintroduce 'silent' verbosity level Reintroduce the ``silent`` verbosity level and associated ``--silent`` and ``-s`` command-line switches, which were available on Modules v3. Silent mode turns off error, warning and informational messages. The ``module`` command could be set silent by default at ``./configure`` time with ``--with-verbosity`` option. ``MODULES_VERBOSITY`` environment variable supersedes this setting and it could be set with ``config`` module sub-command through the ``verbosity`` option. 2019-07-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, Makefile.inc.in, configure, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, site.exp.in, testsuite/example/siteconfig.tcl-1, testsuite/example/siteconfig.tcl-2, testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.00-init/100-pager.exp, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/150-access-init.exp, testsuite/modules.70-maint/220-config.exp: Add ability to control message verbosity Add a ``verbosity`` configuration option to define the default message verbosity level (between a ``normal`` and a ``debug`` level). This option could be set at ``./configure`` time with ``--with-verbosity`` option. It could be superseded with the ``MODULES_VERBOSITY`` environment variable, that could be set with ``config`` module sub-command through the ``verbosity`` option. Defining a ``debug`` verbosity level at the command-line level is still achieved by using the ``-D`` or ``--debug`` command-line switches. 2019-07-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/376-deps7.exp: Inhibit UreqUn when performing purge/reload/restore sub-cmd When unloading a module that contains a ``module load`` or ``module switch`` modulefile command, inhibit the unload performed of the useless requirement when auto_handling mode is disabled if currently performing a purge, reload or restore sub-command. As the unload sequence is determined and managed from these top commands. * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/080-access-coll.exp: No message block for restore sub-cmd Remove the message block display output for the ``restore`` sub-command as this output style is reserved for modulefile evaluation mode (load, unload and switch) to clarify understanding. * modulecmd.tcl.in: Remove msg record set for purge sub-cmd No the message block display output for the ``purge`` sub-command as this output style is reserved for modulefile evaluation mode (load, unload and switch) to clarify understanding. * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/375-deps6.exp, testsuite/modules.50-cmds/377-cyclic.exp, testsuite/modules.50-cmds/377-error.exp: No message block for reload sub-cmd Remove the message block display output for the ``reload`` sub-command as this output style is reserved for modulefile evaluation mode (load, unload and switch) to clarify understanding. 2019-07-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Dissociate an eval id from a record msg id Adapt the pushMsgRecordId and popMsgRecordId procedures to set and evaluation id in addition to a record message id. These evaluation ids will track successful and failed module evaluation to distinguish these evaluation results from output message recording. A setmsgid argument is added to both procedures to optionally set this record message id, which is unwanted on global actions not outputing their results under some message block. 2019-07-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/360-restoreenv.exp, testsuite/modules.50-cmds/370-deps-bis.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-error.exp: Report load/unload evaluation break Report an error when a module load or unload evaluation aborts due to the use of the ``break`` or ``exit`` modulefile commands. This error notification clarifies that module evaluation failed. Fixes #267. 2019-07-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/050-crossshell.exp: ts: fix ksh err msg change in install/050 tests * .cirrus.yml: cirrus: install readline to satisfy R needs 2019-07-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst: doc: clarifies usage of config sub-cmd in init RC * MIGRATING.rst, NEWS.rst: doc: desc init conf alt naming in NEWS/MIGRATING 2019-07-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/rpm/environment-modules.spec.in: rpm: use /etc/environment-modules as etcdir And store Modules initialization configurations in it. * contrib/rpm/environment-modules.spec.in: rpm: disable set_shell_startup 2019-07-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst, doc/source/diff_v3_v4.rst: doc: desc init conf alt naming in diff/INSTALL * .travis.yml, testsuite/install.00-init/005-init_ts.exp, testsuite/modules.70-maint/120-autoinit.exp: ts: adapt tests to --with-initconf-in=etcdir * configure: install: add --enable-modulespath configure opt Add the ``--enable-modulespath`` configure option, which is an alias for the ``--enable-dotmodulespath`` option as ``.modulespath`` configuration file is named ``modulespath`` when installed in ``etcdic``. * testsuite/modules.70-maint/220-config.exp: ts: fix regexp char escaping in 70/220 * Makefile, Makefile.inc.in, configure, init/Makefile, site.exp.in: install: add --with-initconf-in configure opt Introduce the ability to install the Modules initialization configuration files in the ``etcdir`` rather than in the ``initdir``. A new configure option is introduced for this task: ``--with-initconf-in``. Accepted values for this option are: ``etcdir`` or ``initdir`` (default). 2019-07-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash.in, init/cmake.in, init/csh.in, init/fish.in, init/ksh.in, init/python.py.in, init/r.R.in, init/ruby.rb.in, init/sh.in, init/tcl.in, init/zsh.in, modulecmd.tcl.in: Use initconf in etcdir rather initdir if it exists Take into account Modules initialization configurations found in ``etc`` directory if they exist rather in ``init`` directory. If ``initrc`` configuration file is found in ``etcdir`` then it is preferred over ``modulerc`` file in ``initdir``. Following the same trend, ``modulespath`` configuration file is found in ``etcdir`` then it is preferred over ``.modulespath`` file in ``initdir``. * Makefile, doc/source/module.rst, modulecmd.tcl.in, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/081-access-rc.exp: Set global RC file in @etcdir@ instead @prefix@/etc Fix location of ``etc/rc`` global RC file to ``@etcdir@/rc`` instead of ``@prefix@/etc/rc`` to cope with ``@etcdir@`` specific setup (defaults to ``@prefix@/etc``). 2019-07-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, contrib/rpm/environment-modules.spec.in: doc/rpm: merge release of version 4.2.5 * modulecmd.tcl.in, testsuite/modulefiles.deps/m10, testsuite/modulefiles.deps/m11, testsuite/modulefiles.deps/m12, testsuite/modules.50-cmds/376-deps7.exp: Fix 'module load a b' in modfiles when a or b is loaded Fix automatic loading of modulefiles when multiple module names are set on a single ``module load`` modulefile command. When auto_handling mode was disabled, the load of not loaded modules was not achieved as soon as some modules on this list were already loaded. Fixes #281. 2019-07-04 Colin Marquardt <cmarqu42@gmail.com> * NEWS.rst, .../test-modulefiles/modulefiles/test_dir_and_file, doc/source/cookbook/test-modulefiles.rst: doc: add cookbook recipe for ModulesTest Fixes #182. 2019-07-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml: travis: fix opensuse/leap docker container install 2019-07-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitignore, .travis.yml, Makefile, testsuite/example/modulerc-1.in, testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/030-options.exp, testsuite/install.00-init/050-crossshell.exp, testsuite/modules.70-maint/120-autoinit.exp: ts: test init modulerc that disables set_shell_startup * modulecmd.tcl.in: Clear cached config value when setting config During a ``config`` sub-command, config values are fetched which leads for some of the configuration options to the cache of their value. When ``config`` sub-command is called to set a configuration option value, unsets any cached value for this option (as value has just been updated). 2019-07-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/modulerc.in, testsuite/example/modulerc.in: init: mention possible config set in modulerc * modulecmd.tcl.in: Enable 'config' sub-cmd from source/autoinit eval Allow ``config`` sub-command to be called from a modulefile if this modulefile is evaluated by the ``autoinit`` or ``source`` sub-commands called at a top-level module context. 2019-07-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst: doc: desc search_match in NEWS/MIGRATING * .travis.yml, testsuite/install.00-init/010-environ.exp, testsuite/install.00-init/050-crossshell.exp, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/220-config.exp: ts/travis: adapt tests to set_shell_startup cfg * contrib/mt: contrib: fix array init issue on 'mt' script * INSTALL.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: desc set_shell_startup in man/diff/INSTALL 2019-07-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, Makefile.inc.in, configure, init/bash.in, init/bash_completion.in, init/csh.in, init/fish.in, init/fish_completion, init/ksh.in, init/sh.in, init/tcsh_completion.in, init/zsh-functions/_module, init/zsh.in, modulecmd.tcl.in, site.exp.in: Add ability to disable shell startup file set Introduce the ability not to set the shell startup file that ensure ``module`` command is defined once shell has been initialized. Setting shell startup file currently means defining ``ENV`` and ``BASH_ENV`` environment variable to the Modules bourne shell initialization script. ``./configure`` options ``--enable-set-shell-startup`` and ``--disable-set-shell-startup`` define if shell startup should be set or not by default. It could be superseded with the ``MODULES_SET_SHELL_STARTUP`` environment variable, that could be set with ``config`` module sub-command through the ``set_shell_startup`` option. 2019-07-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/140-color.exp, testsuite/modules.70-maint/220-config.exp: ts: correctly escape exp res in 00/140 and 70/220 * contrib/mt: contrib: fix var unbound issue on 'mt' with older bash * .travis.yml: travis: optionally change clone dir To launch tests from path containing specific chars (with special meaning in regular expressions) to ensure expected results from test cases are correctly escaped. 2019-06-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml, testsuite/modulefiles.indepth/modv/.common, testsuite/modulefiles.indepth/modv/.modulerc, testsuite/modules.00-init/140-color.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.20-locate/090-memcache.exp, testsuite/modules.70-maint/220-config.exp, testsuite/modules.80-deep/068-transitive-deep.exp, testsuite/modules.90-avail/020-single.exp, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/050-long.exp, testsuite/modules.90-avail/080-noindepth.exp, testsuite/modules.91-sort/020-avail.exp: ts/travis: adapt tests to search_match cfg 2019-06-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst: doc: desc search_match in NEWS/MIGRATING * INSTALL.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: desc search_match in man/diff/INSTALL * Makefile, Makefile.inc.in, configure, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, site.exp.in: Add ability to control module search match Introduce the ability to control the module search match. Search query string should match module name start or any part of module fully qualified name. Default search match behavior is set at ``./configure`` time with the ``--with-search-match`` option. It could be superseded with the ``MODULES_SEARCH_MATCH`` environment variable, that could be set with ``config`` module sub-command through the ``search_match`` option. Command-line switches ``--starts-with`` (``-S``) and ``--contains`` (``-C``) for ``avail`` module sub-command enable to supersede defined search match configuration. 2019-07-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Rework no-indepth mod match in getModules Match search query at corresponding search depth level when indepth mode is disabled without implying that search query matches beginning of module names. This is a preparatory work to a search match option where query could be contained in module name and not only be the start of module name. As some results from findModules are removed through the process of getModules, update element list of directories to fit results. 2019-06-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, modulecmd.tcl.in, testsuite/modulefiles/append/1.8, testsuite/modulefiles/prepend/1.10, testsuite/modulefiles/remove/1.8, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.90-avail/070-full.exp: Args after var name are values on {append,prepend,remove}-path Fix argument parsing for the `append-path`, `prepend-path` and `remove-path` modulefile commands to consider every arguments found after the variable name as variable values and not command option even if argument starts with `-` character. Fixes #278. * modulecmd.tcl.in, testsuite/modules.20-locate/057-mcookie.exp: Trim modfile magic cookie string from # chars Right trim '#' characters from the fetched modulefile magic cookie string to ensure a correct compatibility version comparison. Useful when modulefile first line is equal to '#%Module4.3##############'. Thanks to Eric Deveaud for the issue report. 2019-06-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst, modulecmd.tcl.in, testsuite/modules.70-maint/220-config.exp: Report locked config option value with a locked mention * doc/source/module.rst, modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.70-maint/220-config.exp: Raise error when setting locked config option Raise an error and exit if module 'config' sub-command attempts to modify a configuration option which is locked. 2019-06-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml, INSTALL.rst, MIGRATING.rst, NEWS.rst, configure, doc/source/module.rst, modulecmd.tcl.in, siteconfig.tcl, testsuite/modules.00-init/140-color.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/090-memcache.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/378-sametarget.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.70-maint/100-path.exp, testsuite/modules.70-maint/170-contact.exp, testsuite/modules.70-maint/220-config.exp, testsuite/modules.91-sort/040-load-sort.exp: install: enable implicit_default in locked_configs Makes implicit_default configuration option lockable through locked_configs option. * .travis.yml, INSTALL.rst, MIGRATING.rst, Makefile, Makefile.inc.in, NEWS.rst, configure, doc/source/module.rst, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, site.exp.in, siteconfig.tcl, testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/100-pager.exp, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/150-access-init.exp, testsuite/modules.70-maint/220-config.exp: install: replaces --enable-extra-siteconfig with --with-locked-configs Add to the configure script the --with-locked-configs option to ignore environment variable superseding of Modules configurations defined in modulecmd.tcl script. Lockable configuration option are extra_siteconfig. Currently locked options are reported through the locked_configs option on the config sub-command. This new configure option replces --enable-extra-siteconfig which was dedicated to the control over the MODULES_SITECONFIG variable. 2019-06-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst: doc: clarify source sub-cmd in module.1 man Talk about scriptfile on `source` sub-command rather modulefile to clarify a bit usage. 2019-06-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst: doc: desc implicit_default in NEWS/MIGRATING 2019-06-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml, testsuite/home/coll13, testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.00-init/140-color.exp, testsuite/modules.20-locate/030-defvers.exp, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/035-defname.exp, testsuite/modules.20-locate/038-defcontext.exp, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/055-locrcerrs.exp, testsuite/modules.20-locate/057-mcookie.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.20-locate/075-symlink.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.20-locate/090-memcache.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/322-is-avail.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/378-sametarget.exp, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.61-coll/080-access-coll.exp, testsuite/modules.61-coll/999-cleanup.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.70-maint/100-path.exp, testsuite/modules.70-maint/156-is-avail.exp, testsuite/modules.70-maint/170-contact.exp, testsuite/modules.70-maint/220-config.exp, testsuite/modules.80-deep/020-load-deep.exp, testsuite/modules.80-deep/022-switch.exp, testsuite/modules.80-deep/030-display.exp, testsuite/modules.80-deep/068-transitive-deep.exp, testsuite/modules.80-deep/080-access-deep.exp, testsuite/modules.90-avail/080-noindepth.exp, testsuite/modules.91-sort/020-avail.exp, testsuite/modules.91-sort/040-load-sort.exp: ts/travis: adapt tests to implicit_default cfg 2019-05-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Force implicit_default enablement during 'restore' When performing a 'module restore', forcibly enable the implicit_default option to correctly match current state against the collection to restore, even if this collection was saved with implicit_default enabled and current setup at restore time has this option disabled. implicit_default is then restored to its defined value once the match is over. So the load of a module to restore from the collection may fail when implicit_default is disabled if this module is an implicit default and collection was saved with implicit_default enabled. 2019-05-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst, doc/source/modulefile.rst: doc: desc implicit_default in man/diff/INSTALL * Makefile, Makefile.inc.in, configure, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, site.exp.in: Control whether an implicit default should be selected Add the ability to configure whether an implicit default version should be defined for modules with no default version explicitly defined. When enabled, which stays the default behavior, a module version is automatically selected (latest one) when the generic name of the module is passed. When implicit default selection is disabled, the name of modules to evaluate should be fully qualified elsewhere an error is returned. This option is set at `./configure` time with the `--enable-implicit-default` and `--disable-implicit-default` options. It could be superseded with the `MODULES_IMPLICIT_DEFAULT` environment variable, that could be set with `config` module sub-command throught the `implicit_default` option. When implicit_default is disabled: - module implicit default versions are excluded from 'module avail -d' results. - false is returned when argument passed to the 'is-avail' sub-command is a directory without an explicit default set in it. - and auto_handling is enabled, the requirement load mechanism will fail on requirement relying on module implicit default version Fixes #179. 2019-05-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add report_issue arg to getPathToModule proc Add the report_issue argument to the getPathToModule procedure to inhibit the report of issue raised during the search and resolution of a passed module name. Issue report is unwanted when performing a reverse lookup of the module names resolving to a known modulefile (like done in procedures getSimplifiedLoadedModuleList and getAllModuleResolvedName). Issue report is also disabled in cmdModuleSearch, as found issues are reported later on through the list returned by the getPathToModule call. 2019-05-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml, testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/375-deps6.exp, testsuite/modules.50-cmds/375-order.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/378-sametarget.exp, testsuite/modules.50-cmds/379-module-unload.exp, testsuite/modules.70-maint/220-config.exp, testsuite/modules.80-deep/021-unload.exp: ts/travis: adapt tests to unload_match_order cfg 2019-05-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst: doc: desc unload_match_order in NEWS/MIGRATING * doc/source/cookbook/unload-firstly-loaded.rst: doc: update unload-firstly-loaded recipe with unload_match_order cfg 2019-05-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: desc unload_match_order in man/diff/INSTALL * Makefile, Makefile.inc.in, configure, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, site.exp.in: Add the ability to configure of unload match order Add the ability to configure when unloading a module and multiple loaded modules match request if firstly loaded module should be choosen or lastly loaded module. Default behavior is set at the `./configure` time with the `--with-unload-match-order` switch. This default could be superseded with the `MODULES_UNLOAD_MATCH_ORDER` environment variable, that could be set with `config` module sub-command throught the `unload_match_order` option. This change allows to restore behavior of Modules compatibility version where first matching module in loaded module list were unloaded in such situation. By default, lastly loaded module is set for unload (like it was before this change) to limit impact on the loaded module list when dependencies are woven between these loaded modules. Even if this change enables to change the default behavior, it is highly recommanded to keep it as soon your modulefiles express dependencies between each other. Fixes #198. 2019-05-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc fix for #270 in NEWS 2019-05-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp: ts: clean any automated handling mode configuration 2019-05-08 Jacques Raphanel <dvp@crabisoft.fr> * contrib/scripts/createmodule.py: contrib: add support for creating module file skeleton from MSDOS prompt Update createmodule.py to provide support for cmd shell to use `set` instead of `env`. Fixes #270. 2019-05-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst: doc: desc config cmd in NEWS/MIGRATING 2019-05-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * site.exp.in, testsuite/modulefiles/modbad/config, testsuite/modules.00-init/071-args.exp, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.70-maint/220-config.exp, testsuite/modules.90-avail/070-full.exp: ts: test 'config' sub-command * contrib/mt, contrib/mtreview.in: ts: outputs full log in 'mt' if testsuite failed but no failure found 2019-01-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst: doc: desc config cmd in man module.1 2019-05-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Reword configuration 'key' into configuration 'option' 2019-05-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, NEWS.rst, contrib/rpm/environment-modules.spec.in, siteconfig.tcl: install: provide a bare siteconfig.tcl Provide a bare siteconfig.tcl in designated etcdir at installation time if no pre-existing site-specific configuration file is found at designated location. 2019-05-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml, INSTALL.rst, MIGRATING.rst, Makefile, Makefile.inc.in, NEWS.rst, configure, doc/source/module.rst, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, site.exp.in, testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/150-access-init.exp: Add ability to disallow MODULES_SITECONFIG Add to the configure script the `--enable-extra-siteconfig` and `--disable-extra-siteconfig` options to allow or forbid the definition of a site-specific configuration script controlled with the `MODULES_SITECONFIG` environment variable. These options control the default value of the `g_extrasiteconfig` variable in `modulecmd.tcl`. If this variable is true (by default), MODULES_SITECONFIG is looked at the siteconfig sourcing time. Thus the primary siteconfig.tcl can set the variable to false to ensure the extra siteconfig is disabled whatever the option passed at ./configure time. 2019-05-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_v3_v4.rst: doc: desc config sub-cmd in diff_v3_v4 * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in: Report and set 'extra_siteconfig' on 'config' sub-command Report and be able to set the 'extra_siteconfig' configuration, linked to the MODULES_SITECONFIG environment variable, on the 'config' sub-command. 2019-01-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/140-color.exp: Fix block report line split when output color 2019-01-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst: doc: desc. MODULECONTACT/MODULERCFILE in module.1 * CONTRIBUTING.rst: doc: provide 'config --dump-state' result when reporting issue * modulecmd.tcl.in: Dump machine/os/tcl_version state on 'config' sub-cmd 2019-01-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in: Report and set 'rcfile' on 'config' sub-command Report and be able to set the 'rcfile' configuration, linked to the MODULERCFILE environment variable, on the 'config' sub-command. * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module: init: add 'config' sub-cmd to shell comp scripts * modulecmd.tcl.in: Rework cmdModuleConfig argument parsing To handle the definition of empty value. * modulecmd.tcl.in: Add the ability to report one config on 'config' sub-cmd When just a configuration key name is passed to the 'config' sub-command (and no value associated to it) just report this configuration key value rather reporting all configuration keys. * modulecmd.tcl.in: Add ability to unset conf from 'config' sub-cmd When the '--reset' command-line switch and a configuration key name is passed to the 'config' sub-cmd, unset the relative environment variable. Ensure this configuration key could be altered. * modulecmd.tcl.in: Reword cmdModuleConfig data structure Split details in multiple arrays for modularity. * modulecmd.tcl.in: Rework displayConfig procedure Pass configuration value directly and re-order arguments. * modulecmd.tcl.in: Add ability to set conf from 'config' sub-cmd When a configuration key name and value is passed to the 'config' sub-command, set the relative environment variable with passed value. Ensure on the way that configuration key name can be altered with an environment variable and that passed value is valid. 2019-01-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Report Modules env variable on config --dump-state Report the list of the environment variables related to Modules in an additionnal table displayed on the --dump-state action of the 'config' sub-command. * modulecmd.tcl.in: Report in state list global RC files loaded Track the global RC files that are loaded and report this information on a 'config' sub-command among the current state information. * modulecmd.tcl.in: Report in state list if siteconfig/tcl_ext_lib have been loaded Track if a site configuration has been sourced and if the Tcl extension library has been loaded. This information is reported on a 'config' sub-command among the current state information. * modulecmd.tcl.in: Dump Modules state on 'config' sub-cmd with --dump-state Add the --dump-state command-line switch to the 'config' module sub-cmd. Add a second report table that displays each state value of the current modulecmd.tcl execution. Take this opportunity to move 'path_separator', 'term_columns', 'debug', 'force' and 'paginate' from the config table to the state table. * modulecmd.tcl.in: Report runenv configs set for modulecmd run-time execution Report the environment variable set for modulecmd run-time execution configuration on 'module config' sub-command. * modulecmd.tcl.in: Report avail_report_{dir,mfile}_sym/ignored_dirs configs Report the avail_report_dir_sym, avail_report_mfile_sym and ignored_dirs configuration on 'module config' sub-command. 2019-01-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Define global 'ignored_dirs' at first use Instead of initializing ignored dirs in modulecmd.tcl main script body, introduce a 'getIgnoredDirs' procedure that will initialize this information at first call. * modulecmd.tcl.in: Define global 'contact' at first use Instead of initializing 'contact' address in modulecmd.tcl main script body, introduce a 'getContact' procedure that will initialize this information at first call. * modulecmd.tcl.in: Report if config has been overridden on 'config' sub-cmd Introduce a displayConfig helper procedure that checks if a given configuration parameter has been overridden from its default value by command-line switch or environment variable. Report configuration value and from where it has eventually been overridden. * modulecmd.tcl.in: Register use_pager as a global variable To get access to this value, on which the paginate option is based, when reporting configuration. * modulecmd.tcl.in: Also register colors as a global list To get access to this value, on which the color table is based, when reporting configuration. 2019-01-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Introduce 'config' sub-command Add the 'config' sub-command to report all the different parameter set for the tool. 2019-05-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc. fixes for #274 and #275 in NEWS * modulecmd.tcl.in, testsuite/modules.90-avail/090-dup-modpath.exp, .../modules.95-version/090-dup-modpath-version.exp: No duplicate entry in resolved modulepath list When resolving the enabled list of modulepaths, ensure resolved path entries are unique. Fixes #274. * testsuite/modules.10-use/999-cleanup.exp, testsuite/modules.61-coll/999-cleanup.exp, testsuite/modules.90-avail/999-cleanup.exp: ts: ensure a correct 999-cleanup exist for every ts parts * modulecmd.tcl.in, testsuite/install.00-init/020-module.exp, testsuite/modulefiles/alias/3.0, testsuite/modules.00-init/006-procs.exp, testsuite/modules.50-cmds/076-alias-sub.exp: Fix escaping of '?' character in shell alias Fixes #275. 2019-05-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/siteconfig.tcl-2, testsuite/modules.00-init/120-siteconfig.exp: ts: superseded defs between siteconfig files * testsuite/modules.00-init/150-access-init.exp: ts: test restricted access to siteconfig and MODULERCFILE 2019-05-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, doc/source/module.rst: doc: desc etcdir/siteconfig.tcl in FILES sect. of module.1 * doc/source/module.rst: doc: desc. MODULERCFILE var in module.1 man page 2019-05-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst, testsuite/example/siteconfig.tcl-2, testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.00-init/100-pager.exp, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.00-init/150-access-init.exp: adding documentation and tests for MODULES_SITECONFIG 2019-03-06 Ben Bowers <nanobowers@gmail.com> * modulecmd.tcl.in: adding MODULES_SITECONFIG env. variable support Add the ability to define a site-specific configuration file with an environment variable: MODULES_SITECONFIG. When set, the script file pointed by the variable is sourced (if readable) after the site-specific configuration file initially defined in modulecmd.tcl. Fixes #234. 2019-05-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst: doc: fix typo in migrating guide for v4.3 * .travis.yml: travis: add CentOS 7 test case where extlib is disabled Add a CentOS 7 test case with compat version disabled and Tcl extension library disabled. Helps to compare performances between 2 test cases where the only difference is the enablement of the Tcl extension library. 2019-05-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, init/bash.in, init/ksh.in, init/profile-compat.sh.in, init/sh.in, init/zsh.in: init: improve readability of var definition operations Improve readability of variable definition operations by writing one definition operation per line rather having multiple commands on a single line like 'VAR=val; export VAR'. Fixes #225. 2019-05-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, testsuite/modules.70-maint/210-clear.exp: Leverage --force cmd-line switch on 'clear' sub-cmd Leverage --force command-line switch on 'clear' sub-command to skip confirmation dialog. Fixes #268. 2019-05-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/150-access-init.exp: ts: test tclextlib restricted read access * modulecmd.tcl.in: Remove useless var exist test in __getFilesInDirectory * testsuite/modules.10-use/{040-load.exp => 040-load-use.exp}, testsuite/modules.10-use/{080-access.exp => 080-access-use.exp}, testsuite/modules.20-locate/{095-cleanup.exp => 999-cleanup.exp}, testsuite/modules.60-initx/{005-init.exp => 010-init_ts.exp}, testsuite/modules.60-initx/{010-list.exp => 015-list.exp}, testsuite/modules.60-initx/{080-access.exp => 080-access-initx.exp}, testsuite/modules.60-initx/{095-cleanup.exp => 999-cleanup.exp}, testsuite/modules.61-coll/{080-access.exp => 080-access-coll.exp}, testsuite/modules.80-deep/{020-load.exp => 020-load-deep.exp}, testsuite/modules.80-deep/{040-list.exp => 040-list-deep.exp}, testsuite/modules.80-deep/{068-transitive.exp => 068-transitive-deep.exp}, testsuite/modules.80-deep/{080-access.exp => 080-access-deep.exp}, testsuite/modules.91-sort/{040-load.exp => 040-load-sort.exp}, testsuite/modules.95-version/{020-load.exp => 020-load-version.exp}: ts: ensure test file name are unique To ensure test file selection done in 'mt' script will not end up with test file collision. * Makefile, contrib/mt: ts: rework way 'mt' pass test list to runtest Instead of removing read access to test files that should not be run in 'mt' script, transmits to 'runtest' the list of test files to run via a RUNTESTFILES environment variable appended to 'runtest' command line in Makefile targets. * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: ts: check clear cmd confirmation msg * testsuite/config/unix.exp, testsuite/modules.00-init/006-procs.exp: ts: improve test launch procedures 2019-05-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/140-color.exp: ts: test calling color initialization procedures twice * .travis.yml: travis: set coverage on 2 cases where extlib is enabled Enable code coverage on 2 existing test cases where the Modules Tcl extension library is enabled. 2019-05-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml, lib/.gitignore, lib/Makefile.in: install/ts: enable gcov on Modules Tcl ext lib When coverage is asked (COVERAGE=y) also check lib/envmodules.c (Modules Tcl extension library) and report obtained coverage result (Codecov script automatically finds Gcov coverage results). 2019-05-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml, CONTRIBUTING.rst, Makefile, contrib/mt: install/ts: trigger coverage with var instead of make target Instead of running test coverage with 'make testcoverage', use COVERAGE variable to trigger this run ('make test COVERAGE=y'). * CONTRIBUTING.rst: doc: adapt name of coverage annoted script in CONTRIBUTING Annoted script generated by test coverage process has changed following to the introduction of the Modules Tcl extension library. 2019-01-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/config/unix.exp, testsuite/modulefiles.other2/clear/.modulerc, testsuite/modulefiles.other2/clear/1, testsuite/modulefiles.other2/clear/2, testsuite/modulefiles.other2/clear/3, testsuite/modulefiles/modbad/clear, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/006-procs.exp, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.70-maint/210-clear.exp, testsuite/modules.90-avail/070-full.exp: ts: test 'clear' sub-command * MIGRATING.rst, NEWS.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, testsuite/modules.00-init/100-pager.exp: Re-introduce 'clear' sub-command With same behavior than on compatibility version. The list of the environmet variables that are cleared by this sub-command has been updated to match the recent development (MODULES_LMPREREQ, ...) Fixes #203. 2019-05-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Fix colors init against badly formed MODULES_COLORS Seems that 'array set' could partially set values to an array in case the list passed to it is badly formed (odd number of element). This situation has been witnessed on FreeBSD. So unset the array variable to ensure it will not be found set at all by the remaining code of the initColors procedure. 2019-01-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_v3_v4.rst: doc: desc color mode in diff_v3_v4 2019-01-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/140-color.exp: ts: test colored output * modulecmd.tcl.in: Buffer reportError calls before initErrorReport To produce first warning and error messages (triggered during argument parse) with expected pager and color mode. 2019-01-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst, MIGRATING.rst, NEWS.rst, configure, doc/source/module.rst: doc: desc color mode in man/NEWS/INSTALL/MIGRATING 2019-01-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, .../veryveryveryveryveryveryveryverylong/.modulerc, .../veryveryveryveryveryveryveryverylong/name, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.70-maint/045-listlong.exp, testsuite/modules.90-avail/050-long.exp: Adapt padding for long modulename on long-mode reporting Fix some tests that were assuming at least one whitespace between list long output fields. 2019-01-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Highlight table column title When displaying a report table, list when doing a module list or module avail in --long mode, highlight each column title with the 'hi' SGR code. 2019-01-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Pass each col len as arg to displayTableHeader Change displayTableHeader procedure to pass each column length after each column title. 2019-01-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/siteconfig.tcl-1, testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.00-init/100-pager.exp, testsuite/modules.00-init/120-siteconfig.exp: ts: adapt existing tests for color 2019-01-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Show caller name of bootstrap reportDebug Like for the regular reportDebug procedure, report the name of the calling procedure of the bootstrap reportDebug (procedure set prior paging initialization). So both bootstrap and regular reportDebug behave and report the same way. 2019-01-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, Makefile.inc.in, configure, modulecmd.tcl.in, site.exp.in: Define a light and dark background default color set Define by default a color set for dark background and a color set for light background. These color sets can be define at configure time with the --with-dark-background-colors and --with-dark-background-colors options respectively. Terminal background color kind can be defined to 'light' or 'dark'. This value can be set at configure time with the --with-terminal-background option or with the environment variable MODULES_TERM_BACKGROUND. If the default color set is not superseded by the MODULES_COLORS environment variable, the dark background colors will apply if terminal background is set to dark. If the terminal background is set to light, the light background colors will apply instead. 2018-12-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module: init: add --color opt to bash/fish/tcsh/zsh comp scripts Add both the --color and --color= forms of the colorize output command-line switch to the shell completion scripts. * modulecmd.tcl.in: Color module cmd reported by 'saveshow' cmd Graphically enhance the 'module' command reported on a 'module saveshow' command. As for modulefile commands use the 'cm' SGR key. * modulecmd.tcl.in: Color modfile cmd reported by 'display' cmd Graphically enhance the modulefile commands reported on a 'module display' command. Introduce the 'cm' SGR key for these modulefile commands. * modulecmd.tcl.in: Highlight modfile/collfile name on display/help/test/saveshow Hightlight the modulefile header name reported on the display, help and test commands. Following the same trend, highlight the collection file header name reported on the saveshow command. * modulecmd.tcl.in: Hightlight matched module whatis/search query string Hightlight in each module whatis module name result or in each module search whatis string result the substring matching the search query string following the same process than for module avail search query hightlight. * modulecmd.tcl.in: Hightlight matched module avail search query string Hightlight in each module avail result the substring matching the search query string in which the wildcard characters have been right trimmed off. No hightlight is performed if color mode is disabled or if some wildcard characters persist after the right trim. 2018-12-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Graphically represent 'default' symbol Instead of outputing the 'default' symbol among the whole symbol list, represent it graphically with the 'de' SGR key applied to the module name. If color mode is disabled or no specific 'de' SGR key is defined, output 'default' symbol like any other symbol. * modulecmd.tcl.in: Color sym and its separator differently Use 'sy' sgr key to color symbols and 'se' sgr key to color the separator characters surrounding these symbols '(', ':' and ')'. * modulecmd.tcl.in: No '@' tag added to aliases when they are colored Do not add a '@' tag, to indicate element reported is an alias, when alias are colored (which already indicates the entry is an alias) * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module: init: run module in --color=never mode in shell comp scripts Ensure color mode is disabled when calling module command in the bash, fish, tcsh and zsh completion scripts. * modulecmd.tcl.in: Color sym reported by 'list' cmd Graphically enhance symbols on 'module list' command like done for 'module avail'. Make use of formatListEltToLongDisplay and formatListEltToDisplay procedure to format the elements to output in the same way than 'module avail'. * modulecmd.tcl.in: Color alias/sym reported by 'aliases' cmd Graphically enhance aliases and symbols on 'module aliases' command like done for 'module avail'. * modulecmd.tcl.in: Color dir/alias/syms reported by 'avail' cmd Graphically enhance directories, aliases and symbols on 'module avail' reports (regular, terse and long). Introduce the 'di', 'al' and 'sy' SGR keys respectively for directories, aliases and symbols). 2018-12-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Pass elts length to displayElementList proc Externalize from the displayElementList procedure the computation of the length of each element to display. This is done to prepare the output of graphically enhanced elements from this procedure. Element lengths are computed in each procedure building the display list. This is where the graphical enhancement will take place so it is the right spot to learn the real length (without SGR code) of these elements to output. Take this opportunity to also change displayElementList procedure to pass it the display list as a list argument rather as "args" which requires to 'eval' the procedure call. * modulecmd.tcl.in: Highlight displayed list header When reporting list elements, hightlight passed header, mainly with the 'hi' sgr key except if header is a modulepath, in this case 'mp' sgr key is used. * modulecmd.tcl.in: Color modulepaths reported by module use Graphically render modulepaths reported on 'module use' and 'module unuse' with 'mp' sgr key. * modulecmd.tcl.in: Highlight named element of msg record Highlight named element passed as header to reportMsgRecord procedure (using 'hi' sgr key). * modulecmd.tcl.in: Color DEBUG/ERROR/Module ERROR/WARNING/INFO msgs Make use of sgr procedure to graphically render header of ERROR, Module ERROR, WARNING and INFO messages (respectively with 'er', 'me', 'wa' and 'in' sgr keys). Graphically render the whole DEBUG message (header + message text) with 'db' sgr key. 2018-12-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml, Makefile, Makefile.inc.in, configure, modulecmd.tcl.in, site.exp.in: Introduce colored output Add the ability to graphically enhance some part of the produced output to improve result readability. Colored output enablement could be controlled at configure time with the --enable-color option, or with the MODULES_COLOR environment variable or with the command-line switch --color. MODULES_COLOR variable and --color switch accepts the following values: never, auto and always. With the --enable-color configure option, the 'auto' color mode is applied. When color mode is set to 'auto', output is colored if a terminal is attached to stderr. Colors to apply to each elements can be controlled at configure time with the --with-colors option or with the MODULES_COLORS environment variable. A color set consists of a list of key=value separated by colon where each key represents an output element that can be colored and each value represents a SGR code applied to this element to color it. Thanks to [1] for the detailled description of the Select Graphic Rendition (SGR) codes. [1] https://stackoverflow.com/questions/4842424/list-of-ansi-color-e scape-sequences 2019-01-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_v3_v4.rst: doc: desc avail in depth mode in diff_v3_v4 2018-12-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst, doc/source/module.rst: doc: desc avail in depth mode in man/NEWS/MIGRATING * testsuite/modulefiles.indepth/mod30/.1, testsuite/modulefiles.indepth/mod30/2, testsuite/modulefiles.indepth/mod9/3/.version, testsuite/modulefiles.indepth/mod9/3/2, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/080-noindepth.exp: ts: more tests for avail --no-indepth mode Add situations to check optimisations made to findModules procedure when no in depth mode is enabled. * modulecmd.tcl.in: Optimize findModules when no in depth search is asked Cut down some I/O operations in findModules procedure when a no in depth search is performed as it is not required to check in depth existing modulefiles, only those matching query depth level. .modulerc files are still searched in depth, as they can produce virtual modules and in the future they may invalidate modulefiles. All files at the search query depth level are analyze. And for the directories below this depth level modulefiles are analyzed until one is found valid (other modulefiles are skipped as we only want to determine if directory holds at least one valid modulefile and should be reported). 2018-12-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/zsh-functions/_module: init: zsh completes avail mods in no in depth mode * init/fish_completion: init: fish completes avail mods in no in depth mode 2018-12-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash_completion.in: init: bash completes avail mods in no in depth mode Take advantage of the no in depth mode of the module avail command to only get available choices for the current query file depth level. * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module: init: add support for --indepth/--no-indepth avail opts 2018-12-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.90-avail/040-wild.exp: ts: test avail in depth mode with wildcard chars * testsuite/modulefiles.indepth/mod0, testsuite/modulefiles.indepth/mod1/1, testsuite/modulefiles.indepth/mod1/2, testsuite/modulefiles.indepth/mod10, testsuite/modulefiles.indepth/mod11/.modulerc, testsuite/modulefiles.indepth/mod11/1, testsuite/modulefiles.indepth/mod11/2, testsuite/modulefiles.indepth/mod2/.modulerc, testsuite/modulefiles.indepth/mod2/1, testsuite/modulefiles.indepth/mod2/2, testsuite/modulefiles.indepth/mod3/.modulerc, testsuite/modulefiles.indepth/mod4/.1, testsuite/modulefiles.indepth/mod5/.common, testsuite/modulefiles.indepth/mod5/.modulerc, testsuite/modulefiles.indepth/mod6/1/notamod, testsuite/modulefiles.indepth/mod6/2/1/notamod, testsuite/modulefiles.indepth/mod6/3/1/1/notamod, testsuite/modulefiles.indepth/mod6/3/1/2/1, testsuite/modulefiles.indepth/mod7/1/notamod, testsuite/modulefiles.indepth/mod7/2/1/notamod, testsuite/modulefiles.indepth/mod7/3/1/1/notamod, testsuite/modulefiles.indepth/mod7/3/1/2/notamod, testsuite/modulefiles.indepth/mod7/4/1, testsuite/modulefiles.indepth/mod8/1/notamod, testsuite/modulefiles.indepth/mod8/2/1/notamod, testsuite/modulefiles.indepth/mod8/3/1/1/notamod, testsuite/modulefiles.indepth/mod8/3/1/2/notamod, testsuite/modulefiles.indepth/mod8/4/.modulerc, testsuite/modulefiles.indepth/mod9/1/notamod, testsuite/modulefiles.indepth/mod9/2/1/notamod, testsuite/modulefiles.indepth/mod9/3/1/1/notamod, testsuite/modulefiles.indepth/mod9/3/1/2/notamod, testsuite/modulefiles.indepth/mod9/4/.common, testsuite/modulefiles.indepth/mod9/4/.modulerc, testsuite/modulefiles.indepth/notmod1/notamod, testsuite/modulefiles.indepth/notmod2/1/notamod, testsuite/modulefiles.indepth/notmod3/1/1/.notamod, testsuite/modulefiles.indepth/notmod3/1/2, .../modulefiles.indepth/notmod4/1/1/1/notamod, testsuite/modulefiles.indepth/notmod4/2, testsuite/modules.90-avail/080-noindepth.exp: ts: test avail --no-indepth mode 2018-12-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/035-defname.exp, testsuite/modules.20-locate/038-defcontext.exp, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.20-locate/090-memcache.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.80-deep/080-access.exp, testsuite/modules.90-avail/020-single.exp, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/050-long.exp, testsuite/modules.90-avail/070-full.exp, testsuite/modules.91-sort/020-avail.exp: ts: ensure existing avail tests use 'in depth' mode * modulecmd.tcl.in: Adapt getModules/listModules to --no-indepth mode Remove in getModules the result entries collected within the procedure where more filename path separator are found than in search query string. This way entries related to the content of directories matching query are removed. Only entries matching search query at its very same depth level are kept + the matching directories holding those entries. This or these matching directories holding entries matching search query are kept to get access to the default or the latest entries in these directories if -d (default) or -L (latest) filters are enabled. The directories holding entries are then excluded from display output in listModules procedure to keep this --no-indepth mode displaying only entries lying at the same directory depth level. When the -d (default) or -L (latest) filters are enabled and the --no-indepth mode is enabled too, if search query targets the root content of the modulepath, do not apply the output filter. In this situation every elements at the root of a modulepath can be considered a default of a latest entry. 2018-12-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml, INSTALL.rst, Makefile, Makefile.inc.in, configure, modulecmd.tcl.in, site.exp.in: Introduce --indepth/--no-indepth avail mode Add the ability to perform non-recursive avail search by limiting results to the elements matching search query and not including elements contained in the directories part of the result. Default behavior is unchanged: in depth search is performed. --indepth and --no-indepth command-line switches are introduced to control behavior as well as an environment variable: MODULES_AVAIL_INDEPTH. Default behavior may also be controlled at ./configure time with the --enable-avail-indepth and --disable-avail-indepth switches. The --no-indepth mode is pretty useful to provide an efficient glance at the available packages when a lot of different versions exist for each of them. Shell completion scripts also benefit from the non-recursive view to propose choices corresponding to the current depth level only. Moreover I/O operations are reduced on this --no-indepth mode as the full modulefile tree is not entirely walked through. This commit introduces the new configure script and modulecmd options and it lays the ground for the changes on the module find and the result display that will be made in the next commits. Fixes #150. 2018-12-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.80-deep/068-transitive.exp, testsuite/modules.90-avail/070-full.exp, testsuite/modules.91-sort/020-avail.exp: Append / char to dir results of avail command Append a forward slash character to any directory result of an avail command to better distinguish these directories from regular files. Will also help shell completion scripts to more efficienlty guide users to the directory entries (no need to type this forward slash character to look deeper in directory). 2018-12-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.91-sort/020-avail.exp: Fix -d/-L avail search when arg ends with trailing slash Correctly get available default (-d) and latest (-L) version whether search pattern is passed with an ending forward slash character or not or if it contains '*' wildcard character. * modulecmd.tcl.in: Fix listModules to display dir tags if any only 2018-12-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Make all findModules proc args mandatory * modulecmd.tcl.in: Make all listModules proc args mandatory 2018-12-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, NEWS.rst, doc/source/modulefile.rst: doc: desc Modulepath rc file in man/NEWS/MIGRATING 2018-12-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.rc/.modulerc, testsuite/modulefiles.rc/.version, testsuite/modulefiles.rc/bar/.modulerc, testsuite/modulefiles.rc/bar/1, testsuite/modulefiles.rc/bar/2, testsuite/modulefiles.rc/foo/.common, testsuite/modulefiles.rc/foo/.modulerc, testsuite/modulefiles.rc/plain, testsuite/modules.20-locate/066-modulepath-rc.exp, testsuite/modules.20-locate/081-access-rc.exp: ts: test usage of modulepath rc file * lib/envmodules.c, modulecmd.tcl.in, .../.modulerc => etc/modulerc.depsaltname}, testsuite/modules.50-cmds/377-deps8.exp, testsuite/modules.50-cmds/377-opposite.exp: Take .modulerc at modulepath root into account When looking for modulefiles in enabled modulepaths, take .modulerc file found at the root of a modulepath directory into account. Which means these RC files are now evaluated like global rc files and can be used to define module aliases targeting modulefiles stored in the underlying file tree. findModules procedure has been adapted to return any .modulerc file found at the root of the directory. Code that look at modulepath root has been adapted to use the getFilesInDirectory procedure or command. A fetch_dotversion argument is added to the getFilesInDirectory Tcl procedure and its libtclenvmodules counterpart. This argument is disabled when looking at modulepath root content to avoid returning eventual .version file stored there. Shorthand version notation (ex: /1.0) cannot be used in a modulepath rc file as a module name cannot be determined from this location. * MIGRATING.rst, NEWS.rst: doc: desc. I/O optim work in NEWS and MIGRATING 2018-12-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst: doc: refer to Modules Tcl extension lib in INSTALL 2018-12-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * lib/configure.ac, lib/envmodules.c, lib/envmodules.h, modulecmd.tcl.in: Implement getFilesInDirectory in Tcl extension library Add function in libtclenvmodules to implement getFilesInDirectory as a command, which provides a more IO-optimized way than native Tcl commands perform by avoiding specific additional queries to get hidden files like .modulerc and .version. As a result 1 stat and 2 access syscalls are saved per directory read. 2018-12-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Introduce getFilesInDirectory proc to get dir elt list Extract code from findModules procedure that analyzes and returns the content of a given directory to define a dedicate procedure for that job: getFilesInDirectory. This getFilesInDirectory procedure will also be made available as a command defined in the Tcl extension library to reduce the IO calls made to achieve the task. 2018-12-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * lib/Makefile.in: install: fix lib/Makefile to ensure CFLAGS is applied Which is required on FreeBSD to pass include location directives. * testsuite/modules.00-init/100-pager.exp, testsuite/modules.00-init/120-siteconfig.exp: ts: fix tests confused by ext lib load debug msg * lib/envmodules.c: lib: adapt error report to support Tcl8.4 Add code to Tcl extension library to report error specifically when built against Tcl8.4. This version of Tcl does not propose a Tcl_ObjPrintf function, so the Tcl_AppendResult function is used instead when the library is built against this version. * .gitignore, .travis.yml, Makefile, contrib/nglfar2ccov, testsuite/config/unix.exp: install/ts: run ts against currently built ext lib Adapt Makefile and testsuite initialization to set then use a specific modulecmd.tcl script tuned to load the libtclenvmodules.so currently built in 'lib' directory. 2018-12-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Init error report when rendering top main error When an error is caught during modulecmd.tcl first initialization steps, ensure the error report facility is initialized to render error message. On main procedure when an error raised, attempt to initialize error report before rendering catched error message, as error may have occurred prior regular error report init. Adapt initErrorReport procedure to ensure its content is run only once even if called multiple times. * lib/Makefile.in, lib/configure.ac: install: adapt lib makefile to build with Tcl8.5 Add @TCL_SHLIB_CFLAGS@ flag to the CFLAGS_DEFAULT to ensure to obtain the '-fPIC' directive on the resulting compiling command. 2018-12-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .appveyor.yml, .travis.yml, INSTALL.rst, Makefile, Makefile.inc.in, configure, contrib/rpm/environment-modules.spec.in, modulecmd.tcl.in, site.exp.in: install: configure/build/install lib from main scripts Call configure script and Makefile of 'lib' directory from main configure and Makefile to configure/build/install/clean libtclenvmodules from top-level scripts. Add '--libdir', '--enable-libtclenvmodules', '--with-tcl' and '--with-tclinclude' options to main configure script to control libtclenvmodules build and installation. Documentation of these new options has been added to INSTALL guide. When '--enable-libtclenvmodules' option is set (default) code in modulecmd.tcl is enabled to load compiled libtclenvmodules shared library. Update RPM spec file to take into account libtclenvmodules. Update Travis and AppVeyor configurations to check libtclenvmodules enablement and disablement over the various test cases. 2018-12-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile: install: improve Makefile install/test target prereqs spec 2018-11-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * lib/.gitignore, lib/Makefile.in, lib/aclocal.m4, lib/configure.ac, lib/tcl.m4: Add autotools configs to build libtclenvmodules Build this extension library against Tcl stub library to be able to 'load' it in modulecmd.tcl script. * lib/envmodules.c, lib/envmodules.h: Introduce Modules Tcl extension library Introduce Modules Tcl extension library (written in C) to extend Tcl language in order to provide more optimized I/O commands than native Tcl commands do. This library first provides a 'readFile' command which performs an open, read, close of a given modulefile to fetch its content. Compared to the Tcl native open, read, close commands it saves 1 ioctl + 1 fcntl + N lstat system calls per modulefile. 2018-11-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Introduce readFile proc to read a file Adapt all procedures reading file (modulefile, shell init file, collection file) to use the readFile procedure for that reading job. This readFile command is defined as a Tcl procedure if not found defined (by the load of the upcoming C extension). * modulecmd.tcl.in: Always read full modfile on most module cmds Except for path, paths, list, avail and aliases module commands always fully read a modulefile whether its full content is needed or just its header to verify its validity. Proceed this way to only read file once on commands that first just check modulefile validity then read again valid files to get their full content. The path, paths, list, avail and aliases module commands are excluded from this 'always read full modulefile' mechanism as they never need to get the full modulefile content. Most files found within modulepaths are intended to be modulefiles so always reading full file content even for invalid modulefiles should not harm much performances compared to the gain of reading every valid modulefiles only once instead of two. * modulecmd.tcl.in: Cache modfile content read to minimize file ops If modulefile is fully read, cache the content read and the file header computed to avoid another file read if the same modulefile need to be read multiple times. 2018-11-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Call readModuleContent in checkValidModule proc To read a modulefile so the code to read file and analyze its header to check it is a valid modulefile is just written once. readModuleContent procedure has been adapted to proceed like checkValidModule did when it is called in a only_check_validity mode. In this mode, only the first line of the file is read as we just want to parse the header of the file (as it was done previously in checkValidModule procedure). 2019-04-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst, NEWS.rst: doc: desc. Vim addons in NEWS and INSTALL * .appveyor.yml, .cirrus.yml: appveyor/cirrus: test 'make uninstall' 2019-04-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/rpm/environment-modules.spec.in: rpm: install modulefile vim syntax addons 2019-04-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, Makefile.inc.in, configure: install: rename vim addons configure options For disambiguation with Vim plugins and for letting room for further improvements in this area, rename '--enable-vimplugin' configure option into '--enable-vim-addons' and '--vimplugindir' into '--vimdatadir'. 2018-12-08 Felix Neumärker <xdch47@posteo.de> * Makefile, Makefile.inc.in, configure, contrib/vim/ftdetect/modulefile.vim, contrib/vim/ftplugin/modulefile.vim, contrib/vim/syntax/modulefile.vim: add vim syntax support 2019-04-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version 4.2.4 * testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.50-cmds/065-remove-undo.exp: ts: correctly escape exp res in 50/{042,047,052,057,062,065} 2019-04-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * README.md: doc: provide short install guideline in README Fixes #230. * init/zsh.in: init: init MANPATH on zsh if empty to preserve man sysconfig Zsh initializes by default the MANPATH environment variable to an empty value when it starts. To preserve manpath system configuration even after addition to this variable by modulefiles, set MANPATH variable to ':' if found empty. Fixes #224. * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: ts: improve getDiffBetweenList proc test coverage * modulecmd.tcl.in, testsuite/modulefiles/append/8.0, testsuite/modulefiles/prepend/8.0, testsuite/modulefiles/remove/8.0, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.90-avail/070-full.exp: Raise error when bad option passed to {append,prepend,remove}-path Raise an error when an invalid option is set on append-path, prepend-path or remove-path modulefile command. Fixes #249. * .appveyor.yml: Revert "appveyor: stop testing R in Cygwin platform" This reverts commit 48624f9d11e3f118b7a6f7d31a16614597e179cf. AppVeyor Cygwin environment has been updated, which fixed the R issue. See appveyor/ci#2898. * modulecmd.tcl.in, testsuite/modules.50-cmds/377-error.exp: Inhibit 'module load' in DepRe context When reloading modules through the *Dependent Reload* automated mechanism, disable the automated loading of modules by other modules with the 'module load' modulefile command as done for the 'prereq' command. It saves the mechanism from the reload of modules that have just been unloaded (and asked by the user to be unloaded from instance when performing a 'switch' command). Fixes #265. 2019-04-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/374-deps5.exp: No req load suggestion msg as soon as one has been tried Instead of requiring that all possibilities need be tried to consider the requirement load or the conflict unload has been tried, consider it tried as soon as one module choice has been evaluated. * modulecmd.tcl.in, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/377-error.exp, testsuite/modules.61-coll/040-restore.exp: Do not re-evaluate a failing module Skip load or unload evaluation of a module whose respectively load or unload was already attempted but failed. If this second evaluation attempt occurs within the same main evaluation frame. Fixes #264. * modulecmd.tcl.in: Refactor eval context change for switch cmd in modfile * modulecmd.tcl.in, testsuite/modules.50-cmds/377-opposite.exp: No load attempt of already loaded mod in no-auto mode When the automated module handling mode is disabled, do not attempt to load a requirement expressed in a modulefile with a 'module load' command, if this requirement is already loaded or loading. 2019-04-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/006-procs.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-cyclic.exp, testsuite/modules.50-cmds/377-error.exp: Distinguish DepRe load/unload phases in msgs Adapt warning, error and info messages relative to the Dependent Reload mechanism to distinguish the unload phase from the load (reload) phase of this mechanism. In the automated module handling summary report, unloaded modules via this mechanism are reported in the *Unloading dependent* list and modules reloaded afterward are reported against the "Reloading dependent* list. Fixes #263. 2019-04-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/370-deps-bis.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/377-opposite.exp, testsuite/modules.50-cmds/380-altname.exp: Correctly report loading state of conflicting module Fixes #262. * testsuite/modulefiles.deps/alt/.modulerc, testsuite/modulefiles.deps/alt/8, testsuite/modulefiles.deps/i3b, testsuite/modulefiles.deps/i4b, testsuite/modules.50-cmds/380-altname.exp: ts: test issue with prereq using alt name in 50/380 2019-04-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/380-altname.exp: Resolve mod name passed to isModuleEvaluated To check if actual module has been evaluated based on its aliased or symbolic name. 2019-04-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Register modfile eval attempt in addition to modname Helps to find a given module has been evaluated when a conflict/prereq statement is sometimes done on the module name and other times on the modulefile. * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/370-deps-bis.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/375-deps6.exp, testsuite/modules.50-cmds/376-deps7.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-cyclic.exp, testsuite/modules.50-cmds/377-deps8.exp, testsuite/modules.50-cmds/377-error.exp, testsuite/modules.50-cmds/377-opposite.exp, testsuite/modules.50-cmds/378-sametarget.exp, testsuite/modules.50-cmds/379-module-unload.exp, testsuite/modules.50-cmds/380-altname.exp, testsuite/modules.61-coll/040-restore.exp: ts: adapt text msgs to fixed loaded conflict report 2019-04-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Report loaded conflict on corresp. module msg block When loading a module, report any loaded conflict on the message reporting block corresponding to this module load. This warning or error message comes in addition to the eventual conflict unload message reported under the message block of the main evaluation. When a module load is forced and a conflict of this module is loaded, report this conflict with the same concise message (no hint) whether an unload of this conflicting module was attempted or not. Fixes #261. 2019-04-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Raise ConUn err/warn msg to top level message block When a conflicting module is seen loaded but the unload of this module was attempted, report a conflict unload error or warning message toward the main evaluation message block. Fixes #261. * modulecmd.tcl.in: Refactor error raising code in conflict proc 2019-04-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/370-deps-bis.exp, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/375-deps6.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-error.exp, testsuite/modules.50-cmds/377-opposite.exp: Clearer error/warn msg when unloading a required mod When unloading a module which has some dependent module still loaded, produce a more specific error or warning message if an evaluation of these dependent modules has been realized or if the unload of the required module is forced. Fixes #259. 2019-04-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-opposite.exp: Also register unload evaluation attempt In addition to load evaluation attempt, also register the various unload evaluation attempt to get a more appropriate warning or error message regarding the missing requirement during a module load. When these requirements are unloaded due to a conflict or a dependent unload/reload mechanism, it seems better not to advise user to load this requirement (as the dependency management system has unloaded it). * modulecmd.tcl.in: Use distinctive context for main load and unload 2019-04-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/375-deps6.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-cyclic.exp, testsuite/modules.50-cmds/377-deps8.exp, testsuite/modules.50-cmds/377-error.exp, testsuite/modules.50-cmds/377-opposite.exp: Same req missing warn msg in force mode whatever the auto mode When a module load is forced and a requirement of this module is missing, report this miss with the same concise message (no hint) whether a load of this requirement was attempted or not. * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/370-deps-bis.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/377-error.exp, testsuite/modules.61-coll/040-restore.exp: Report missing req on corresponding module msg block When loading a module, report any missing requirement on the message reporting block corresponding to this module load. This warning or error message comes in addition to the eventual requirement load message reported under the message block of the main evaluation. Fixes #258. * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/370-deps-bis.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/377-error.exp, testsuite/modules.61-coll/040-restore.exp: Raise failed ReqLo msg to top level message block 2019-04-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/370-deps-bis.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/376-deps7.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-error.exp, testsuite/modules.50-cmds/377-opposite.exp, testsuite/modules.50-cmds/379-module-unload.exp, testsuite/modules.50-cmds/380-altname.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.70-maint/140-multiargs.exp: More appropriate warn/err msg for failed ReqLo When a module requirement is seen missing but the load of this module was attempted, report a more specific error or warning message to let user understand that the load of the requirement was attempted but failed. Thus distinction is made between missing requirements where a load tentative was made and those were the no load attempt was performed (when the automated module handling mode is disabled for instance). Fixes #257. 2019-04-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Refactor cmdModule{Load,Unload} error catch code 2019-04-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/376-deps7.exp, testsuite/modules.50-cmds/376-switch.exp: Report failed {load,unload} of switched-{off,on} module When switching modules, report failure of switched-off module unload or switched-on module load under the message block of the switch action. A failed switched-off module unload is reported as an error, as it aborts the switch evaluation, whereas a failed switched-on module load is reported as a warning. Fixes #255. 2019-04-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/376-switch.exp: Rely on cmdModuleUnload error catch mech for prereq report When attempting to unload a module, if this module has dependent loaded it cannot be unloaded if auto_handling mode is disabled. Treat that situation through the cmdModuleUnload error catch rather just with a reportError call. In case this situation happens through a 'module unload' command in a modulefile evaluated in load mode, no error return code should be set. However in other situations, cmdModuleUnload command should return an error code. So this change fixes 'switch' sub-command when the switched-off module cannot be unloaded as it has some dependent module loaded. Now it fails the whole switch process and no load of the switched-on module is not tried. Fixes #251. * modulecmd.tcl.in: Rely on cmdModuleLoad error catch mech for conflict report * modulecmd.tcl.in, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/376-switch.exp: Move 'module switch' deps set in cmdModuleSwitch Used for 'module switch' commands is set in modulefile. In order to get finer control on the dependency definition and error report when the unload of the switched-off module or the load of the switched-on module fail. 2019-04-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/373-deps4.exp: Drop output of failed ReqLo eval if one succeed When multiple modules are listed on a prereq command, drop the output of those modules that fails to load (by the requirement load automated mechanism) to only keep the output of the module whose load succeed. Introduces procedures and variables to hold reports until all requirement choices are tried to be loaded, then release held output (drop or print). Exception is made for debug output which is always immediately printed. Fixes #254. * testsuite/modules.50-cmds/376-deps7.exp: ts: clarify comment on no-auto urequn report in 50/376 2019-04-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-error.exp: Warn if useless requirement unload fails on no-auto mode During the unload of a module when the automated module handling mode is disabled, report a warning message foreach unload of a useless requirement that fails as done when the automated module handling mode is enabled. Fixes #253. 2019-03-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Remove useless priorlmlist var from cmdModule{Load,Unload} * doc/example/inhibit-report-info/siteconfig.tcl, modulecmd.tcl.in, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-error.exp: Report auto mech warn/err to top level message block During an additional evaluation triggered by an automated module handling mechanism, ensure warning and error messages are reported under the message block of the main evaluation. Add a 'recordtop' argument to the reportWarning and reportError procedures in order to indicate that the message should be recorded under the top-level message block instead of the currently active message block. Fixes #252. 2019-04-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/040-list.exp: ts: add specific term width tests for list subcommand 2019-04-15 Jesper Dahlberg <jesper@ludd.ltu.se> * modulecmd.tcl.in: Fix hanging 'list' command Bug correction of the list command for the case when the terminal width is equal to the text width to be printed when only a single column is used. Without the correction, the 'moudule list' command hangs. 2019-04-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .appveyor.yml: appveyor: stop testing R in Cygwin platform On Cygwin platform, R installation seems currently broken under the AppVeyor CI environment (see https://github.com/appveyor/ci/issues/2913). So for the time being, remove R installation to avoid failing test results. 2019-04-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/conf.py: doc: improve code that disable smart quotes With contribution from @volans- for the Sphinx version test code. * doc/source/conf.py: doc: preserve quotes and dashes when making html docs Restrain Sphinx from converting quotes and dashes to lang-specific entities with either the html_use_smartypants or smartquotes options. Fixes #250 2019-03-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/370-deps-bis.exp, testsuite/modules.50-cmds/377-error.exp: ts: report UReqUn eval in accurate order in --no-auto mode * testsuite/modules.50-cmds/377-error.exp: ts: no auto mech summary report when top eval fails * testsuite/modules.50-cmds/376-deps7.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-cyclic.exp, testsuite/modules.50-cmds/377-error.exp, testsuite/modules.61-coll/040-restore.exp: ts: detect mod eval in accurate context on sumup lists 2019-03-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-error.exp: ts: failed eval are not part of auto mech summary lists 2019-03-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/377-error.exp: ts: auto mech msg summary always after err/warn msgs * modulecmd.tcl.in: Rely on context arg of to know if switch is ongoing * modulecmd.tcl.in: Register and report each evaluation and assoc context Better track each module evaluation and the context associated to it in order to report a more accurate information on the additional modules loaded or unloaded when proceeding the main evaluation request. When calling for a module load or unload, pass a context name to either the cmdModuleLoad or cmdModuleUnload procedure called to let it register the module evaluation and its associated context into a global structure gathering all these informations per top-level evaluation. Report messages on the additional evaluation occuring during a main one are now based on these registered information rather on computed list of elements passed to the cmdModuleLoad or cmdModuleUnload procedures. As a result a more reliable information is obtained, especially during a main load evaluation, where previously some unload/load additional evaluation were not seen or were reported against another automated mechanism. Additional evaluation messages are only reported if the main evaluation goes to its end, which means that if some event forces it to rollback the summary list of actions will not be seen to let users better understand the resulting situation (nothing was unloaded or loaded) and focus on the error message. Previously finished auto mechanisms were immediatly reported which confused people as an error occuring after the mechanism leads to a full rollback. In case an additional evaluation fails, the corresponding module is removed from the list of modules on which the auto mechanism triggered a load or an unload evaluation. When unloading useless requirements in no-auto mode, these unloads are now reported in their correct evaluation order (order of definition found in modulefiles). Fixes #244, fixes #245, fixes #246, fixes #247 and fixes #248 2019-03-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version 4.2.3 * testsuite/modules.50-cmds/375-deps6.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.61-coll/040-restore.exp: ts: correctly escape exp res in 50/{375,376} and 61/041 * .gitattributes: install: exclude CI confs from dist tarballs 2019-03-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitattributes, .gitignore, Makefile, doc/Makefile: install: fix CONTRIBUTING guide build and install 2019-03-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Fix useless conditions on reloadModuleList{Load,Unload}Phase * testsuite/modules.50-cmds/377-error.exp: ts: add force mode tests in 50-377-error 2019-03-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/mtreview.in, testsuite/install.00-init/006-procs.exp, testsuite/modules.00-init/006-procs.exp: ts: add distinctive mark at end of res/exp string To distinguish the end of the output or expected result from the output or expected result content. 'mtreview' tool better catches the content it has to compare. 2019-03-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile: install: fix md5sum passed argument To perform correctly on OS X. 2019-03-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .cirrus.yml, .gitignore, .travis.yml, Makefile, contrib/mt, contrib/mtreview.in: install: fetch 'icdiff' to process test res throught it * contrib/mt: contrib: mt calls mtreview to process test results * testsuite/modulefiles.deps/rfa, testsuite/modulefiles.deps/rfb, testsuite/modulefiles.deps/rfc, testsuite/modulefiles.deps/rfd, testsuite/modulefiles.deps/rfe, testsuite/modulefiles.deps/rff, testsuite/modulefiles.deps/rfg, testsuite/modulefiles.deps/rfh, testsuite/modulefiles.deps/rfi, testsuite/modulefiles.deps/rfj, testsuite/modulefiles.deps/rfk, testsuite/modulefiles.deps/rfl, testsuite/modulefiles.deps/rfm, testsuite/modulefiles.deps/rfn, testsuite/modulefiles.deps/rga, testsuite/modulefiles.deps/rgb, testsuite/modulefiles.deps/rgc, testsuite/modulefiles.deps/rgd, testsuite/modulefiles.deps/rge, testsuite/modulefiles.deps/rgf, testsuite/modulefiles.deps/rgg, testsuite/modulefiles.deps/rgh, testsuite/modulefiles.deps/rgi, testsuite/modulefiles.deps/rgj, testsuite/modulefiles.deps/rgk, testsuite/modulefiles.deps/rgl, testsuite/modulefiles.deps/rgm, testsuite/modulefiles.deps/rgn, testsuite/modules.50-cmds/377-error.exp: ts: add situations in 50/377-error where crashes occur on multiple auto mech 2019-03-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .appveyor.yml, .cirrus.yml, .travis.yml, contrib/mt: travis,appveyor,cirrus: launch tests throught 'mt' * .gitignore, Makefile, contrib/mtreview.in: contrib: add 'mtreview' script to highlight failed tests * modulecmd.tcl.in, testsuite/modulefiles.deps/raam, testsuite/modulefiles.deps/rabm, testsuite/modulefiles.deps/racm, testsuite/modulefiles.deps/radm, testsuite/modulefiles.deps/raem, testsuite/modulefiles.deps/rafm, testsuite/modulefiles.deps/ragm, testsuite/modulefiles.deps/rahm, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/377-error.exp: In no-auto mode one UReqUn failure should not fail whole unload During the unload of a module with auto_handling mode disabled, if the unload of one of its useless requirements (by the useless requirement unload mechanism triggered in --no-auto mode when requirements are declared with the 'module load' modulefile command) fails, it should not fail the whole unload process like when auto_handling mode is enabled. Fixes #238 2019-03-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deps/rea, testsuite/modulefiles.deps/reb, testsuite/modulefiles.deps/rec, testsuite/modulefiles.deps/red, testsuite/modulefiles.deps/ree, testsuite/modulefiles.deps/ref, testsuite/modulefiles.deps/reg, testsuite/modulefiles.deps/reh, testsuite/modulefiles.deps/rei, testsuite/modulefiles.deps/rej, testsuite/modulefiles.deps/rek, testsuite/modulefiles.deps/rel, testsuite/modulefiles.deps/rem, testsuite/modulefiles.deps/ren, testsuite/modules.50-cmds/377-error.exp: ts: add DepRe tests in 50/377-error 2019-03-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles.deps/rdc, testsuite/modulefiles.deps/rdd, testsuite/modulefiles.deps/rde, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/375-deps6.exp, testsuite/modules.50-cmds/377-cyclic.exp, testsuite/modules.50-cmds/377-error.exp: On reload cmd, stop if one unloading/loading mod fails When reloading all loaded modules with the 'reload' sub-command, if one reloading module fails to unload or load abort the whole reload process to preserve environment sanity. Add a sum-up message group for reload sub-command to clearly get all errors related to this command under the same message block. Fixes #237 2019-03-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/376-switch.exp: Stop if one DepRe load fails except if force mode set During the load or the unload of a module, if the load of one of its dependent (by the dependent reload mechanism) fails abort the whole unload/load process. Exception made if the force mode is enabled. In this case failing module stays loaded and Dependent Unload mechanism continues with next module to load. When applying DepRe load phase during a switch command, consider force mode a default since here we are trying to reload the dependent modules found when unloading switched-off module. Switch action does not guarantee to find all DepRe modules still loaded at the end of process. Fixes #241 2019-03-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Stop if one DepRe unload fails except if force mode set During the load or the unload of a module, if the unload of one of its dependent (by the dependent reload mechanism) fails abort the whole unload/load process. Exception made if the force mode is enabled. In this case failing module stays loaded and Dependent Unload mechanism continues with next module to unload. This failing module is removed from the Dependent Reload list, so it will not take part of the load phrase of the mechanism. Fixes #239 2019-03-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deps/rca, testsuite/modulefiles.deps/rcb, testsuite/modulefiles.deps/rcc, testsuite/modulefiles.deps/rcd, testsuite/modulefiles.deps/rce, testsuite/modules.50-cmds/377-error.exp: ts: add purge/reload tests in 50/377-error * modulecmd.tcl.in: Add debug msgs to {push,pop,restore}Settings procs 2019-03-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/376-switch.exp, testsuite/modules.50-cmds/377-error.exp: If one UReqUn fails removes its requirements from UReqUn list During the unload of a module, if the unload of one of its useless requirements (by the useless requirement unload mechanism) fails, removes the requirements of this failing module from the useless requirement list so they are kept loaded as failing module will still be loaded. Such error is reported as a warning and it does not stop the whole unload process as main module to unload and its dependent are able to unload, just its requirements automatically loaded cannot be unloaded. So the job has been done, not perfectly but main task is successful and resulting user environment is coherent. A getRequiredLoadedModuleList procedure is introduced to get all the loaded modules required by a list of modules passed to the procedure. Fixes #240 2019-03-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/377-error.exp: Stop unload if one DepUn fails except if force mode set During the unload of a module, if the unload of one of its dependent (by the dependent unload mechanism) fails abort the whole unload process. Exception made if the force mode is enabled. In this case failing module stays loaded and Dependent Unload mechanism continues with next module to unload. 2019-03-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Rework cmdModuleLoad code with break/continue commands To improve clarity of the cmdModuleLoad procedure replace large if/then/else conditional blocks by break or continue abortion commands. A catch statement is set around the evaluation parts of the procedure and if a break happens, saved settings are restored (which means some evaluation went wrong and previous settings are rolled back). * modulecmd.tcl.in: Remove useless rollback in cmdModuleLoad Now push/pop/restoreSettings procedures correctly handle the conflict, prereq and alternative names information, there is no need to specificly clear their relative structures in cmdModuleLoad when setup must be rolled back. * modulecmd.tcl.in: Rework cmdModuleUnload code with break/continue commands To improve clarity of the cmdModuleUnload procedure replace large if/then/else conditional blocks by break or continue abortion commands. A catch statement is set around the evaluation parts of the procedure and if a break happens, saved settings are restored (which means some evaluation went wrong and previous settings are rolled back). 2019-03-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/example/flavored-modules/modulefiles/.common, .../modulefiles/flavor/gromacs/plumed, .../modulefiles/flavor/gromacs/standard, .../modulefiles/flavor/hdf5/parallel, .../modulefiles/flavor/hdf5/serial, .../modulefiles/flavor/netcdf-fortran/.modulerc, .../modulefiles/flavor/netcdf/.modulerc, doc/example/flavored-modules/modulefiles/gcc/4.8, doc/example/flavored-modules/modulefiles/gcc/8, doc/example/flavored-modules/modulefiles/gromacs/5, doc/example/flavored-modules/modulefiles/hdf5/1.10, doc/example/flavored-modules/modulefiles/hdf5/1.8, doc/example/flavored-modules/modulefiles/intel/15, doc/example/flavored-modules/modulefiles/intel/17, .../flavored-modules/modulefiles/intelmpi/17, .../flavored-modules/modulefiles/jasper/1.900, .../modulefiles/netcdf-fortran/4.4, .../flavored-modules/modulefiles/netcdf/4.6, .../flavored-modules/modulefiles/openmpi/2.0, doc/example/flavored-modules/modulefiles/pgi/18, doc/example/flavored-modules/modulefiles/wrf/3.9: doc: add example modulefiles for 'flavored-modules' recipe 2019-03-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deps/ibm, testsuite/modules.50-cmds/375-order.exp, testsuite/modules.50-cmds/376-switch.exp: ts: test reverting 'module load/switch' when req loaded after 2019-03-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/378-sametarget.exp: Set requirement from closest match When computing dependencies between loaded or loading modules, if multiple candidates match a requirement, the closest one to the requiring module is selected instead of the farest one. This change makes dependency selection consistent with loaded module selection which selects lastly loaded module when multiple modules match search. * modulecmd.tcl.in: Add a 'isModuleUnloadable' helper procedure isModuleUnloadable checks whether a given loaded module could be automatically unloaded or not (it can if it has been automatically loaded and no other loaded module requires it). Use this new procedure in getUnloadableLoadedModuleList and cmdModuleUnload procedures. For the latter it simplifies the treatment when 'onlyureq' argment is enabled * modulecmd.tcl.in, testsuite/modules.50-cmds/375-order.exp, testsuite/modules.50-cmds/376-switch.exp: Correct unloadable mod search when reverting 'module load/switch' Select unload candidate from loaded module list excluding modules loaded after the current unloading module. So only module loaded prior dependent module are taken into account. Then pass this candidate, if any, to cmdModuleUnload and rely on this procedure to unload module only if it is unloadable. Previous commit was relying on the list of unloadable modules, obtained from getUnloadableLoadedModuleList procedure, which sometimes led to corner cases especially if dependency information were not set somehow (no module would be unloaded in that case as getUnloadableLoadedModuleList relies only on these dependency information). As the candidate is selected to be the closest one from the module requiring it, it changes unloading result when multiple candidates are found prior requiring module (previously firstly loaded module was unloaded). 2019-03-06 Ben Bowers <nanobowers@gmail.com> * CONTRIBUTING.rst: Adding emacs settings useful for adhering to coding conventions Fixes #233 2019-03-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .cirrus.yml: cirrus: fix custom clone script for pull request 2019-03-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles.deps/ih/0, testsuite/modulefiles.deps/iim, testsuite/modulefiles.deps/swg/0, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/375-order.exp, testsuite/modules.50-cmds/376-switch.exp: Fix mod selection for 'module load/switch' in modfile when unloading When unloading a loaded module that contains 'module load' or 'module switch' commands in its modulefile, loaded required module should be unloaded if it has been automatically loaded. This commit fixes the selection of this module to unload automatically when evaluating in unload mode the 'module load' or 'module switch' commands used in modulefiles. If a loaded module matches the 'module load' or 'module switch' statement but was loaded after the module making these statements, it should not be selected as the module to automatically unload. Fixes #232 2019-03-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deps/swi, testsuite/modulefiles.deps/swj, testsuite/modulefiles.deps/swk, testsuite/modulefiles.deps/swl, testsuite/modulefiles.deps/swm, testsuite/modulefiles.deps/swn, testsuite/modules.50-cmds/376-switch.exp: ts: add 'module switch' in modfile erroneous situation With switched-off or switched-on or both modules targeted by 'module switch' fail to load/unload. 2019-02-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.80-deep/068-transitive.exp: Find alt names of mod coming from distant dirs If an alias is set on a directory and this directory default element is an alias toward a modulefile. When this modulefile is loaded, it holds no reference to first alias. For default elements in a directory that points to a modulefile, when this modulefile is loaded, it should receive the eventual aliases set on the distant directory as alternative names. Fixes #231 2019-02-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Remove unneeded control prior reporting info when unloading No need to check if we are on main unload action prior reporting lists of additionnally loaded or unloaded modules in cmdModuleUnload procedure, as these code sections could only be reached from the main unload action. * modulecmd.tcl.in: Remove unneeded recordId push/pop in switch context No need to adapt message record id for a switch action for code sections that are never reached when a switch action is ongoing. * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: ts: check getLoadedConflict proc in non-serialized mode * testsuite/cmd.exe, testsuite/modules.50-cmds/140-system.exp: ts: check 'system' cmd in a Windows simulated context 2019-02-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.other/restore, testsuite/modules.61-coll/040-restore.exp: ts: check load msg report when modfile use restore cmd * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: ts: check getModuleFromLoadingModulefile proc in 00/120 Call procedure against a not loaded modulefile. * testsuite/modulefiles.deps/msf, testsuite/modulefiles.deps/mtf, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/375-deps6.exp: ts: basic conflict/prereq test on fully qualified module name * modulecmd.tcl.in: Rewrite evaluation mode test in 'system' proc * testsuite/modules.50-cmds/375-deps6.exp: ts: test an is-loading conflict check in force mode 2019-02-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deps/swa, testsuite/modulefiles.deps/swb, testsuite/modulefiles.deps/swc, testsuite/modulefiles.deps/swd, testsuite/modulefiles.deps/swe, testsuite/modulefiles.deps/swf, testsuite/modulefiles.deps/swg/1, testsuite/modulefiles.deps/swg/2, testsuite/modulefiles.deps/swh, testsuite/modules.50-cmds/376-switch.exp: ts: add 'module switch' in modfile dep tests * modulecmd.tcl.in, testsuite/modulefiles.other/modemptyarg/swap3, testsuite/modules.50-cmds/152-module-emptyarg.exp: Revert 'module switch' in modfile when unloading modfile No distinction were made previously for 'module switch' command used in modulefile regarding modulefile evaluation mode. This was a mistake as an unload evaluation of a modulefile should revert what has been set at load time. During an unload evaluation, a 'module switch' command is converted to a 'module unload' of the switched-on module, like for 'module load' command. Nothing is done for switched-off module, like for 'module unload' command. CAUTION: it is not recommended to use the `switch` sub-command in modulefiles as this command is intended for the command-line for a 2in1 operation. Could be removed from the modulefile scope in a future release. Use `module unload` and `module load` commands in modulefiles instead. Fixes #226 2019-02-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/152-module-emptyarg.exp: Track deps defined by 'module switch' in modfile When 'module switch' commands are found in modulefiles, track switched-off modulefile as a conflict and switched-to modulefile as a requirement to apply same behaviors than for 'module load' and 'module unload' commands in modulefiles. If 'switch' sub-command has only one argument, do not define any conflict, only a requirement on the defined switched-to argument. CAUTION: it is not recommended to use the `switch` sub-command in modulefiles as this command is intended for the command-line for a 2in1 operation. Could be removed from the modulefile scope in a future release. Use `module unload` and `module load` commands in modulefiles instead. Fixes #229 * testsuite/modules.95-version/050-fullpathentry.exp: ts: add use/unuse tests in 95/050 Demonstrate correct addition or removal to MODULEPATH of entry composed of a bare variable reference. 2019-02-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/example/modulefiles-in-git/modulefiles/localmodules: doc: mention author of modulefiles-in-git examples 2019-02-24 Scott Johnson <scottjohnsoninsf@gmail.com> * .../modulefiles-in-git/modulefiles/localmodules, doc/source/cookbook/modulefiles-in-git.rst: New cookbook entry for versioning Modulefiles with Git Originally developed at: https://github.com/scottj97/environment-modules-in-git 2019-02-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.95-version/050-fullpathentry.exp: Accept a variable reference as a full MODULEPATH entry Enable to define a path entry to the MODULEPATH variable which corresponds to a variable reference only (not a variable reference mixed in a path string). Was previously prefixing this variable reference with current working directory path as variable reference was detected as a relative path. Fixes #223 * init/bash.in, init/csh.in, init/fish.in, init/ksh.in, init/sh.in, init/zsh.in: init: init MANPATH if not set to preserve man sysconfig In shell initialization scripts, initialize MANPATH if not set with a value that preserves manpath system configuration even after addition of paths to this variable by modulefiles Fixes #224 * contrib/rpm/environment-modules.spec.in: rpm: add CONTRIBUTING guide to %doc 2019-02-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deps/ra, testsuite/modulefiles.deps/raa, testsuite/modulefiles.deps/rab, testsuite/modulefiles.deps/rac, testsuite/modulefiles.deps/rad, testsuite/modulefiles.deps/rae, testsuite/modulefiles.deps/raf, testsuite/modulefiles.deps/rag, testsuite/modulefiles.deps/rah, testsuite/modulefiles.deps/rb, testsuite/modulefiles.deps/rba, testsuite/modulefiles.deps/rbb, testsuite/modulefiles.deps/rbc, testsuite/modulefiles.deps/rbd, testsuite/modulefiles.deps/rbe, testsuite/modulefiles.deps/rbf, testsuite/modulefiles.deps/rbg, testsuite/modulefiles.deps/rbh, testsuite/modulefiles.deps/rc, testsuite/modulefiles.deps/rd, testsuite/modulefiles.deps/re, testsuite/modulefiles.deps/rf, testsuite/modulefiles.deps/rg, testsuite/modulefiles.deps/rh, testsuite/modulefiles.deps/ri, testsuite/modulefiles.deps/rj, testsuite/modulefiles.deps/rk, testsuite/modulefiles.deps/rl, testsuite/modulefiles.deps/rm, testsuite/modulefiles.deps/rn, testsuite/modulefiles.deps/ro, testsuite/modulefiles.deps/rq, testsuite/modulefiles.deps/rr, testsuite/modulefiles.deps/rs, testsuite/modules.50-cmds/377-error.exp: ts: test mod eval crash during auto handling mechs 2019-02-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add dep-related internal structs to settings save/restore In order to correctly restore internal information state when a modulefile evaluation fails, add all the dependency-related internal arrays to the list of variables saved prior modulefile evaluation, then restored in case modulefile evaluation fails. 2019-02-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/375-order.exp: ts: clear unneeded comment in 50/375-order 2019-02-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version 4.2.2 2019-02-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deps/ie, testsuite/modulefiles.deps/if, testsuite/modulefiles.deps/ig, testsuite/modulefiles.deps/ih/1, testsuite/modulefiles.deps/ih/2, testsuite/modulefiles.deps/ii, testsuite/modulefiles.deps/ij, testsuite/modules.50-cmds/375-order.exp: ts: check requirement loading order in 50/375-order 2019-02-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Use NPO deps to compute DepUn list if it heals loaded mods Compute Dependent Unload module list with regular or "No Particular Order" dependency structures. Compare both list to choose the accurate one. Result list obtained from the "No Particular Order" stuctures is chosen if the loaded environment could be healed after unloading asked module with dependencies loaded after the modules requiring them. This is guessed from the length of the obtained lists: less element in NPO list means NPO dependencies could save some loaded modules from being unloaded by the Dependent Unload mechanism. 2019-02-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/040-subshell.exp, testsuite/install.00-init/050-crossshell.exp: ts: adapt err msg for fish 3.0 * modulecmd.tcl.in: No dep struct exist check in areModuleConstraintsSatisfied No need to test existence of the requirement list for a loaded module in g_moduleDepend or g_moduleNPODepend structure, as all loaded modules get an array key in these arrays whether they have requirements or not. 2019-02-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Clarify auto handled mods in debug msgs * modulecmd.tcl.in: Clarify debug msgs on {set,unset}ModuleDependency 2019-02-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles.deps/go, testsuite/modulefiles.deps/gp, testsuite/modulefiles.deps/gq, testsuite/modulefiles.deps/gr, testsuite/modulefiles.deps/gs, testsuite/modules.50-cmds/377-cyclic.exp: Update NPO dep structs to break dep cycle Update the setModuleDependency and unsetModuleDependency procedures to break any dependency cycle spotted in the No Particular Order dependency structures. 2019-02-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Use NPO deps struct to compute DepUn/DepRe on unload Use the No Particular Order dependency structures to get the modules to handle via the Dependent Unload and the Dependend Reload mechanisms at unload time. Using these No Particular Order dependency structures help to "heal" the loaded environment after an unload batch as some dependent modules loaded before their requirements could be reloaded to get an unloaded requirement replaced by another loaded after dependent. This change mainly adds the 'nporeq' argument to the getDependentLoadedModuleList procedure to use the NPO structures rather the order-dependent ones. Then the sortModulePerLoadedAndDepOrder, areModuleConstraintsSatisfied and getDirectDependentList procedures are updated in turns to use these NPO structures when called by getDependentLoadedModuleList in nporeq mode. * modulecmd.tcl.in: Add structs to manipulate NPO requirements In addition to the g_moduleDepend, g_dependHash and g_prereqViolation structures that hold requirement state of loaded modules, taking into account loading order, introduce the g_moduleNPODepend, g_dependNPOHash and g_prereqNPOViolation structures that hold requirements between loaded modules whatever their loading order (No Particular Order taken into account), which means a requirement loaded after its dependent module will be found in the *NPO* structures but not in the regular ones. 2019-02-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/375-deps6.exp: ts: adapt test res for only PRE req are valid * modulecmd.tcl.in: Only PRE requirement are considered valid When looking at the dependency of a loaded module, only consider requirement loaded before dependent (holding a prior position in the loaded module list) as valid, those loaded after dependent module are considered as an unmet dependency. 2019-02-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add getUnmetDependentLoadedModuleList for load DepRe Compute the Dependent Reload module list when loading a module with the introduced getUnmetDependentLoadedModuleList procedure. Instead of faking new module is already loaded to get the dependent list able to be reloaded, missing requirement over new module is just silenced to determine these Dependent Reload modules. Also take into account requirements loaded after dependent that help to solve a requirement constraint with upcoming loaded mod. 2019-01-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles.deps/refcon/1, testsuite/modulefiles.deps/refcon/2, testsuite/modules.50-cmds/375-deps6.exp: Fix warn msg when forcing a reflexive conflict Message appeared twice (one for generic name at conflict command evaluation and one during persistent conflict check at end of load). 2019-01-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/tcsh_completion.in: init: fix tcsh completion when 'noclobber' var is set Fix _module_not_yet_loaded alias in tcsh completion script to handle situation when 'noclobber' variable is set (should force to write to the fifo files). Also ensure actual 'rm' command is called and not an alias that may ask for confirmation. Fixes #219 2019-01-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .cirrus.yml, README.md: Introduce Cirrus CI config file for FreeBSD CI * .appveyor.yml: appveyor: exclude compat branches from ci 2019-01-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst: doc: up MIGRATING for 'eval then check if conflict' 2019-01-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deps/un/1, testsuite/modulefiles.deps/un/2, testsuite/modulefiles.deps/un/3, testsuite/modulefiles.deps/una, testsuite/modulefiles.deps/unb, testsuite/modulefiles.deps/unc, testsuite/modulefiles.deps/und, testsuite/modules.50-cmds/379-module-unload.exp: ts: add tests for 'eval then check if conflict' 2019-01-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/370-deps-bis.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/376-deps7.exp, testsuite/modules.50-cmds/377-cyclic.exp, testsuite/modules.50-cmds/377-opposite.exp, testsuite/modules.50-cmds/378-sametarget.exp, testsuite/modules.50-cmds/380-altname.exp: ts: fix for 'eval then check if conflict' Adapt existing tests according to the modulefile evaluation that now occurs even if a conflict toward modulefile is set prior load. There is no change to the output shell code (output order may vary as some rollback may occur after a load tentative if a conflict violation is detected afterward). Also some stderr output messages may change since a load tentative is made (so messages outputed within modulefile will be seen). If evaluation attempt fails on something else than a conflict violation, this error will take precedence over the conflict error (prereq not found, modulefile syntax error, etc). If modulefile declares multiple conflicts which are currently violated, there will be an error message for each of them as evaluation is going through the whole modulefile before raising conflict errors. 2019-01-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Evaluate mod then check conflict violation Give the chance to the 'module unload' statements in modulefile to solve conflict that were registered prior the load attempt of this modulefile by evaluating modulefile then check afterward if a conflict violation is there rather checking if a conflict violation exists (and shout error if there is) before evaluating modulefile. So modulefile is evaluated even if a conflict is registered against him prior its evaluation. If a conflict is still set after its evaluation (and the evaluation of its requirements) everything is rolled back. The 'module unload' commands could solve these already registered conflicts. 'conflict' commands used in the loading modulefile will however still break the load immediately if the conflict is seen violated to maintain same behavior. With this change, behavior of these 'module unload' modulefile commands is restored to what it was able to do prior conflict consistency changes, yet this consistency is maintained as everything is rolled back in the end if conflict is still there. doesModuleConflict procedure has also been changed to look at loading modules in addition to loaded modules, since the conflict check triggered by 'module unload' will not raise an error (error is now raised based on the result of the doesModuleConflict call. Fixes #216 * testsuite/modules.50-cmds/095-uname.exp: ts: escape (, ) and + in 'uname -v' res 2019-01-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * README.md: doc: add repology packaging status badge in README 2019-01-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/conf.py, modulecmd.tcl.in: New year (2019) copyright mention update 2019-01-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml: travis: fix OSX brew install Ensure homebrew is up-to-date to avoid consistency issue 2018-12-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/zsh-functions/_module: init: recognize --{auto,no-auto,force,paginate,no-pager} opts in zsh comp Add recognition of the --auto, --no-auto, --force, --paginate and --no-pager command-line switches in zsh shell completion script. * init/fish_completion: init: recognize --{auto,no-auto,force} opts in fish comp Add recognition of the --auto, --no-auto and --force command-line switches in fish shell completion script. * modulecmd.tcl.in, testsuite/modulefiles/function/1.0, testsuite/modules.50-cmds/390-function.exp, testsuite/modules.50-cmds/391-function-undo.exp: Trim function body passed to set-function cmd Trim any whitespace, newline or ';' characters at the beginning or end of the function body passed to set-function modulefile command to correctly define shell function whatever the writing style used. 2018-12-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/FAQ.rst: doc: add a FAQ entry to desc. use of module from Makefile Thanks to Robert McLay for the hint. * doc/source/module.rst: doc: fix typo in Python init example in module man page 2018-11-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/guide/get_started/03-first_module-bar.sh, contrib/guide/get_started/13-datadir-common.sh: contrib: fix mkdir in get_started guide scripts 2018-11-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * CONTRIBUTING.rst, doc/source/CONTRIBUTING.rst, doc/source/index.rst: doc: add CONTRIBUTING guide 2018-11-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/example/inhibit-report-info/modulefiles/bar, doc/example/inhibit-report-info/modulefiles/foo, .../example}/inhibit-report-info/siteconfig.tcl, .../example}/top-priority-values/modulefiles/bar/1, .../example}/top-priority-values/modulefiles/foo/1, .../example}/top-priority-values/siteconfig.tcl, .../unload-firstly-loaded/modulefiles/foo/1, .../unload-firstly-loaded/modulefiles/foo/2, .../example}/unload-firstly-loaded/siteconfig.tcl, doc/source/cookbook.rst, doc/source/cookbook/inhibit-report-info.rst, doc/source/cookbook/top-priority-values.rst, doc/source/cookbook/unload-firstly-loaded.rst, doc/source/index.rst: doc: introduce cookbook Add a cookbook section in the documentation and port there the 3 pre-existing recipes: inhibit-report-info, top-priority-values and unload-firstly-loaded. Move the examples files of these recipes from contrib/cookbook to doc/example directory. 2018-11-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles.deps/ia, testsuite/modulefiles.deps/ib, testsuite/modulefiles.deps/ic, testsuite/modulefiles.deps/id, testsuite/modules.50-cmds/373-deps4.exp: Fix DepUn when all mods from an opt list are unloaded Correct the Dependent Unload mechanism when it triggers the unload of 2 modules making together a requirement from another module. This module is now also added to the dependent modules to unload as both modules from its requirement definition are unloaded. 2018-11-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version 4.2.1 2018-11-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.70-maint/152-remove-path.exp: Rework ref counter handling and relative error mngt No more disturbing warning messages when reference counter variable is not coherent with its relative environment variable. Erroneous value will raise a debug message only and relative reference counter is ignored (which means a count of 1 is applied). Now environment variable is trusted and if its path elements are found in a reference counter variable, this counter is taken into account. Elsewhere, a reference counter of 1 is applied. Which means a value found in reference counter variable but not in variable is ignored. A value found in variable but not in reference counter (or with a bad reference counter value) gets a count of 1 applied. Adapt existing tests in 70/152 and 50/40 and add some unload command tests in 50/040. Fixes #206 2018-11-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash.in, init/csh.in, init/fish.in, init/ksh.in, init/sh.in, init/zsh.in: init: skip shell env alteration if autoinit cmd failed Fixes #208 2018-11-07 Satya Mishra <satya.devel@gmail.com> * init/csh.in, testsuite/modules.70-maint/120-autoinit.exp: use :q to quote prompt to accomodate prompts with embedded newlines * modulecmd.tcl.in: use :q to quote prompt to accomodate prompts with embedded newlines 2018-11-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deps/ha/1, testsuite/modulefiles.deps/ha/2, testsuite/modulefiles.deps/ha/3, testsuite/modulefiles.deps/hb, testsuite/modulefiles.deps/hc, testsuite/modulefiles.deps/hd, testsuite/modulefiles.deps/he, testsuite/modulefiles.deps/hf, testsuite/modulefiles.deps/hg, testsuite/modules.50-cmds/378-sametarget.exp: ts: tests multiple deps targeting same mod in 50/378 * modulecmd.tcl.in: Fix dep computation when opt prereq list target same mod Ensure a loaded module matching multiple entries of a same 'or' prereq will just be considered as one module matching prereq. * modulecmd.tcl.in, testsuite/modulefiles.deps/fia, testsuite/modules.50-cmds/377-deps8.exp: Fix dep computation when unloading for multi ref Some dependencies expressed may target same module so it is important to safely unset dependency reference (in case unset has already been performed) 2018-11-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deps/ga, testsuite/modulefiles.deps/gb, testsuite/modulefiles.deps/gc, testsuite/modulefiles.deps/gd, testsuite/modulefiles.deps/ge, testsuite/modulefiles.deps/gf, testsuite/modulefiles.deps/gg, testsuite/modulefiles.deps/gh, testsuite/modulefiles.deps/gi, testsuite/modulefiles.deps/gj, testsuite/modulefiles.deps/gk, testsuite/modulefiles.deps/gl, testsuite/modulefiles.deps/gm, testsuite/modulefiles.deps/gn, testsuite/modulefiles.deps/gw, testsuite/modulefiles.deps/gx, testsuite/modulefiles.deps/gy, testsuite/modulefiles.deps/gz, testsuite/modules.50-cmds/377-cyclic.exp: ts: tests cyclic dep situations in 50/377-cyclic 2018-11-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Check 'module load' mod not already loading before loading it Useful in case of cyclic dependencies to avoid an infinite loading loop. 2018-10-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Compute loaded mod dependency relations without cycle When computing dependency relations between loaded modules and a freshly loaded one, do not launch a refresh of those unmet relations for an already loaded module with the new one if this relation closes a dependency cycle. When parsing the already loaded environment, the loaded module dependency relations are computed giving each module only the visibility of modules loaded prior it. Modules loaded after one module are not taken into account as they have not taken part of its requirements. 2018-11-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Check prereq mod is not already loading before loading it Useful in case of cyclic dependencies to avoid an infinite loading loop. 2018-10-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/373-deps4.exp: ts: clarify test in 50/373 with a UreqUn mod found after dependent 2018-10-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/mt: contrib: select between files at same ts num in 'mt' 2018-11-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_v3_v4.rst, modulecmd.tcl.in, testsuite/etc/modulerc.altname, testsuite/etc/rc, testsuite/modulefiles.deps/alt/9, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.50-cmds/380-altname.exp: Enable 'is-loaded' for modulerc eval Make 'is-loaded' modulefile command callable from a modulerc interpretation. Restore this way the behavior of compatibility version. Update diff doc and add some specific non-regression tests in 20/060 and 50/380. Fixes #207 2018-10-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deps/faa, testsuite/modulefiles.deps/fab, testsuite/modulefiles.deps/fac, testsuite/modulefiles.deps/fad, testsuite/modulefiles.deps/fae, testsuite/modulefiles.deps/faf, testsuite/modulefiles.deps/fai, testsuite/modulefiles.deps/faj, testsuite/modulefiles.deps/fak, testsuite/modulefiles.deps/fal, testsuite/modulefiles.deps/fam, testsuite/modulefiles.deps/fan, testsuite/modules.50-cmds/377-deps8.exp, testsuite/modules.50-cmds/377-opposite.exp: ts: test opposite defs using diff cmds and alt names 50/377 2018-10-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/380-altname.exp: ts: test empty/bad elt in MODULES_LMALTNAME in 50/380 * testsuite/modules.50-cmds/120-prereq-full.exp: ts: test empty elt in MODULES_LMNOTUASKED in 50/120 * testsuite/modules.50-cmds/130-conflict-full.exp: ts: test empty/bad elt in MODULES_LMCONFLICT in 50/130 * testsuite/modules.50-cmds/120-prereq-full.exp: ts: test empty/bad elt in MODULES_LMPREREQ in 50/120 * testsuite/home/coll12, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/999-cleanup.exp: ts: restore coll holding incompat modfiles in 61/040 * testsuite/home/coll11, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/999-cleanup.exp: ts: save/restore coll with mod using 'module load' cmd 2018-10-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deps/.modulerc, testsuite/modulefiles.deps/fr, testsuite/modulefiles.deps/fs, testsuite/modulefiles.deps/ft, testsuite/modulefiles.deps/fu, testsuite/modules.50-cmds/377-deps8.exp: ts: test similar defs using diff cmds and alt names 50/377 * testsuite/modulefiles.deps/i6, testsuite/modulefiles.deps/i7, testsuite/modules.50-cmds/380-altname.exp: ts: test module {unload,load} cmds on alt names in 50/380 * testsuite/modulefiles.deps/.modulerc, testsuite/modulefiles.deps/fn, testsuite/modulefiles.deps/fo, testsuite/modulefiles.deps/fp, testsuite/modulefiles.deps/fq, testsuite/modules.50-cmds/377-deps8.exp: ts: test dup dep set with diff cmds and alt names in 50/377 2018-10-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deps/fj, testsuite/modulefiles.deps/fk, testsuite/modulefiles.deps/fl, testsuite/modulefiles.deps/fm, testsuite/modules.50-cmds/377-deps8.exp: ts: test dup dep set with diff cmds in 50/377 * testsuite/modulefiles.deps/fi, testsuite/modules.50-cmds/377-deps8.exp: ts: test dependency reordered dup defs in 50/377 * testsuite/modulefiles.deps/fa, testsuite/modulefiles.deps/fb, testsuite/modulefiles.deps/fc, testsuite/modulefiles.deps/fd, testsuite/modulefiles.deps/fe, testsuite/modulefiles.deps/ff, testsuite/modulefiles.deps/fg, testsuite/modulefiles.deps/fh, testsuite/modules.50-cmds/377-deps8.exp: ts: test dependency exact duplicate defs in 50/377 2018-10-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deps/ma, testsuite/modulefiles.deps/mb, testsuite/modulefiles.deps/mbs, testsuite/modulefiles.deps/mbt, testsuite/modulefiles.deps/mbu, testsuite/modulefiles.deps/mc, testsuite/modulefiles.deps/md, testsuite/modulefiles.deps/me, testsuite/modulefiles.deps/mf, testsuite/modulefiles.deps/mg, testsuite/modulefiles.deps/mh, testsuite/modulefiles.deps/mi, testsuite/modulefiles.deps/mj, testsuite/modulefiles.deps/mk, testsuite/modulefiles.deps/ml, testsuite/modulefiles.deps/mm, testsuite/modulefiles.deps/mn, testsuite/modulefiles.deps/mo, testsuite/modulefiles.deps/mp, testsuite/modulefiles.deps/mq, testsuite/modulefiles.deps/mr, testsuite/modules.50-cmds/370-deps-bis.exp: ts: duplicate 50/370 tests with module {load,unload} cmds Instead of prereq/conflict commands. * modulecmd.tcl.in, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/375-deps6.exp: Check mod to unload is not required by a loading mod Adapt getDependentLoadedModuleList and getDirectDependentList procedure to be able to take currently loading modules into account when looking for modules requiring a given module. Help to refrain a "module unload" order set within a modulefile to unload a module required by a loading module evaluated deeper in the stack. Adapt exiting tests working on inconsistent situations. 2018-10-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash_completion.in: init: fix unload/switch cmd completion on bash * modulecmd.tcl.in, testsuite/modules.20-locate/090-memcache.exp, testsuite/modules.50-cmds/310-puts.exp, testsuite/modules.70-maint/080-help.exp: Add details on active interp on debug msg * testsuite/modulefiles.deps/u, testsuite/modules.50-cmds/370-deps.exp: ts: no spread of broken mod dep defs to next eval mod * testsuite/modules.70-maint/070-display.exp: ts: auto/no-auto/force args are ignored on other cmd 2018-10-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles/puts/9, testsuite/modules.50-cmds/310-puts.exp, testsuite/modules.90-avail/070-full.exp: ts: check puts is linked to correct interp * testsuite/etc/rc, testsuite/modules.20-locate/060-rc.exp: ts: check 'module-info command' resolution from global rc 2018-10-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Use Tcl 'if' or 'expr' ternary operator * modulecmd.tcl.in: Correctly filter a wild findModules cache When it is used in a non-wild case later on. 2018-10-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.memcache/foo/1, testsuite/modulefiles.memcache/foo/2, testsuite/modulefiles.memcache/foo1/1, testsuite/modulefiles.memcache/foo1/2, testsuite/modulefiles.memcache/look/1, testsuite/modulefiles.memcache/look/2, testsuite/modulefiles.memcache/look/3, testsuite/modulefiles.memcache/look/4, testsuite/modulefiles.memcache/look/5, testsuite/modulefiles.memcache/look/6, testsuite/modulefiles.memcache/look/7, testsuite/modulefiles.memcache/look/8, testsuite/modulefiles.memcache/sp cial/1, testsuite/modules.20-locate/090-memcache.exp: ts: add 20/090 to test findModules cache * modulecmd.tcl.in: Adopt Tcl minimal escaping style (fix additional strs) * modulecmd.tcl.in: Remove useless msg prefix from some reportDebug calls * modulecmd.tcl.in: Brace value of default path separator on Win As ';' is elsewhere interpreted as a Tcl syntax keyword * modulecmd.tcl.in: Brace g_pager setting as it can be empty If Modules is configured with --without-pager for instance. * testsuite/modulefiles/alias/3.0, testsuite/modulefiles/function/2.0, testsuite/modules.50-cmds/076-alias-sub.exp, testsuite/modules.50-cmds/390-function.exp: ts: fix tests based on modulecmd.tcl content As 'adopt minimal escaping style' change the piece of string searched by some tests. 2018-10-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Adopt Tcl minimal escaping style See https://wiki.tcl.tk/41378 * doc/source/modulefile.rst, modulecmd.tcl.in, testsuite/modulefiles/system/2.0, testsuite/modules.50-cmds/140-system.exp, testsuite/systest1: Fix 'system' to run cmd through shell system modulefile command is intended to the command passed to it trough shell, like done on compatibility version. So update system procedure to find correct shell on the current platform and run command through it. Doing so, shell commands with backticks for instance are correctly run. Fixes #205 * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module: init: fix saved coll listing in bash/zsh/tcsh/fish completions When no collection is currently found. * init/fish_completion, init/tcsh_completion.in: init: fix loaded modules listing in tcsh/fish completions 2018-10-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../cookbook/top-priority-values/siteconfig.tcl: cookbook: port 'top-priority-values' to v4.2 * contrib/cookbook/unload-firstly-loaded/siteconfig.tcl: cookbook: port 'unload-firstly-loaded' to v4.2 * .../cookbook/inhibit-report-info/siteconfig.tcl: cookbook: add 'inhibit-report-info' recipe Helpful for #204 2018-10-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version 4.2.0 * MIGRATING.rst: doc: add cross-ref for each v4.2 new feature in MIGRATING 2018-10-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/151-module-onlytop.exp: ts: fix 50/151 for new block report style * MIGRATING.rst: doc: desc. new modfile cmds for v4.2 in MIGRATING * .travis.yml: travis: increase again git clone depth to catch last tag 2018-09-09 Ben Bowers <nanobowers@gmail.com> * doc/source/diff_v3_v4.rst, doc/source/modulefile.rst, modulecmd.tcl.in, testsuite/modulefiles/function/1.0, testsuite/modulefiles/function/2.0, testsuite/modules.50-cmds/390-function.exp, testsuite/modules.50-cmds/391-function-undo.exp, testsuite/modules.90-avail/070-full.exp: added set-function and unset-function commands fixed linelength and tabs/spaces adding set-function/unset-function documentation adding tests for set-function/unset-function fixed failing test for function modulefile additions 2018-10-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/mt: contrib: add 'mt' utility Helps to run just a specific part of the test suite * modulecmd.tcl.in, testsuite/modulefiles/system/2.0, testsuite/modules.50-cmds/140-system.exp, testsuite/systest: Fix args pass on 'system' modfile command Correctly transmit the arguments along with the command to execute. Need to use 'eval' for the underlying command to get its multiple args and not one joined string. Fixes #201 2018-10-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, testsuite/modules.50-cmds/180-unload.exp: Support 'remove' as an alias on 'unload' command As compatibility version does Fixes #200 * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, testsuite/modules.50-cmds/180-unload.exp: Support 'del' as an alias on 'unload' command Like compatibility version does. Fixes #200 2018-10-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.20-locate/057-mcookie.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/310-puts.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/359-allin-env.exp, testsuite/modules.50-cmds/360-restoreenv.exp, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/999-cleanup.exp: ts: fix tests when ts path includes spec chars 2018-10-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst: doc: desc. improved message report in MIGRATING * testsuite/modules.50-cmds/310-puts.exp: ts: fix 50/310 for block output rendering Transform load tests in non-regexp test to avoid re escaping chars to count in line split mechanism. 2018-10-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/130-auto_handling.exp, testsuite/modules.20-locate/040-alias.exp, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.20-locate/047-symerrs.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/100-loglevel.exp, testsuite/modules.50-cmds/101-badfac.exp, testsuite/modules.50-cmds/105-trace.exp, testsuite/modules.50-cmds/110-verbose.exp, testsuite/modules.50-cmds/115-verbose-msg.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp, .../modules.50-cmds/132-conflict-fullpath.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/195-load-recurs.exp, testsuite/modules.50-cmds/240-chdir.exp, testsuite/modules.50-cmds/250-x-resource.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.50-cmds/284-info-others.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.50-cmds/310-puts.exp, testsuite/modules.50-cmds/330-source.exp, testsuite/modules.50-cmds/340-modvar.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/371-deps2.exp, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/375-deps6.exp, testsuite/modules.50-cmds/376-deps7.exp, testsuite/modules.50-cmds/380-altname.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/080-access.exp, testsuite/modules.70-maint/140-multiargs.exp, testsuite/modules.70-maint/190-emptyarg.exp, testsuite/modules.80-deep/022-switch.exp: ts: adapt tests to new block report style * modulecmd.tcl.in: Set a rec msg id for reload action Create a record message id during the reload action to let underlying unload and load actions to know they are not the top-level action. May be use later on to provide sum-up information resulting from this reload action. * modulecmd.tcl.in: Set a rec msg id for purge action Create a record message id during the purge action to let underlying unload actions to know they are not the top-level action. May be use later on to provide sum-up information resulting from this purge action. 2018-10-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Report unload/load made during a module restore Report for the top level module restore all the modules that have been unloaded and loaded during this restore action. * modulecmd.tcl.in: Inhibit DepRe load phase on load if switch ongoing If a switch action is ongoing, inhibit the DepRe load phase when loading switched to module. Instead add the DepRe module list to the already gathered DepRe list from the unload action of the switched out module. * modulecmd.tcl.in: Report additional load/unload during a module switch Report for the top level module switch all the additional modules that have been automatically unloaded or loaded during this main switch. Report record is still enabled on the top unload/load actions part of switch action, but additional unload/load sumup information is recorded against switch report. This way errors popping during these main unload or load actions are reported against their relative unload/load record like if an unload or load has just occured. 2018-10-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Report additional load/unload during a module unload Report for the top level module unload all the additional modules that have been automatically unloaded or loaded during this main unload When auto handling is disabled but some extra modules have been unloaded during the unload process (due to module load commands in modulefile) then report these extra unloads as Useless Requirement Unload (UReqUn) * modulecmd.tcl.in: Report additional load/unload during a module load On a top level module load (main load action), report all the additional modules that have been unload or loaded for this main load process to succeed. Three helper procedures are added for this change: reportInfo, getDiffBetweenList and isMsgRecordIdTop. * modulecmd.tcl.in: Clear all modlist arg from getUnloadableLoadedModuleList res 2018-10-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.other/longerrword, testsuite/modules.70-maint/200-errdisp.exp: ts: add 70-maint/200-errdisp tests * modulecmd.tcl.in, testsuite/modules.00-init/120-siteconfig.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.70-maint/060-apropos.exp: Ask for a blankline prior next content with reportSeparateNextContent Update displayElementList procedure to use this new reportSeparateNextContent procedure rather handling its own global flag (g_eltlist_disp). Adapt testsuite related to displayElementList output 2018-10-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Split line if too wide in reportMsgRecord * modulecmd.tcl.in: Add procs to format conflict/prereq err msgs 2018-09-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Record messages to report them by block on load/unload Save warning, error and internal bug message produced during a cmdModuleLoad or cmdModuleUnload evaluation for a module to report all these messages as a dedicated "Loading <module>" or "Unloading <module>" block after evaluation. A recording ID is set when preparing a load or an unload evaluation. If a recording ID is found when running reportError, the message is recorded in a global structure rather reported immediately. Once evaluation is finished, all messages are rendered under a block. Improve this way readability of those messages when evaluating mode may cascade a lot of stuff. * modulecmd.tcl.in, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/376-deps7.exp, testsuite/modules.50-cmds/380-altname.exp: Neat prereq/conflict err msg when called from cmdModule procs Remove useless 'WARNING: ' prefix as message goes to reportError. * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/090-uname-proc.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.70-maint/060-apropos.exp: Report global error raised from modfile eval as error Was reported as WARNING previously which was confusing as these errors are fatal for modulefile evaluation. Use prefix code "GLOBALERR " when raising error to catch them in execute-modulefile and distinguish the global errors from the Module internal bug. As a side nice effect, these kind of evaluation error are now reported through reportError, which makes them automatically silent on global evaluation (like avail or search). Adapt testsuite * modulecmd.tcl.in: Make report{Warning,InternalBug} rely on reportError * modulecmd.tcl.in: Handle nonewline report arg as boolean Instead of a string. Remove this nonewline arg from reportDebug, reportWarning and reportError as it was unused. 2018-09-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../cookbook/unload-firstly-loaded/siteconfig.tcl: cookbook: add 'unload-firstly-loaded' recipe Helpful for #198 * doc/source/diff_v3_v4.rst: doc: desc. unload diff when multiple loaded mods match Helpful for #198 * doc/source/diff_v3_v4.rst, modulecmd.tcl.in, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.80-deep/021-unload.exp, testsuite/modules.80-deep/068-transitive.exp: Only look at loaded modules when unloading Adapt getPathToModule procedure to only look at the loaded module list when searching a module to unload. If passed module not found in this situation does not produce an "Unable to locate modulefile" issue. So unloading an unexistent modulefile does not produce an error anymore, as it was the case on compatibility version. Moreover switching from an unexistent modulefile to another modulefile does not produce the "Unable to locate modulefile" error and new module load is attempted. Compatibility version does not walk in this situation as on this version module to unload must be loaded elsewhere an error is triggered. Adapt testsuite and diff document. Fixes #199 2018-09-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst: doc: desc. module load/unload consistency in MIGRATING 2018-09-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: From warn/nuasked to onlyureq/onlyndep args on cmdModuleUnload Change warn and nuasked arguments previously added to cmdModuleUnload procedure by onlyureq and onlyndep to better cope needs. 'onlyureq' indicates only the not required anymore modules should be unloaded (not user asked modules or those not required by another loaded module). This flag is enabled when dealing with 'module load' commands in modulefiles interpreted in unload mode. If a module cannot be unloaded because it is required, then no error message is produced. So 'onlyureq' argument replaces both 'warn' and 'nuasked' arguments. 'onlyndep' indicates that only modules not required by other modules should be unloaded. It is used when dealing with 'module unload' commands in modulefiles interpreted in load mode. This is useful when force mode is enabled to avoid breaking the dependency of a loaded module when trying to load a module declaring this dependency as a module to unload (acts like for conflicts). 2018-09-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Return err if conflicts found in cmdModuleLoad When passed module cannot be loaded due to a conflict, set cmdModuleLoad to return an error code. Which may be interpreted as a sub-interpretation failure if this load was triggered by a 'module load' command in modulefile. * modulecmd.tcl.in, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.70-maint/140-multiargs.exp: Raise prereq error if 'module load' not satisfied Call prereq procedure rather just bare setLoadedPrereq when interpreting 'module load' commands found in modulefiles. When auto_handling mode is enabled, prereq will also handle the cmdModuleLoad call. This call is still done in module procedure if auto_handling is disabled. In case load is not satisfied, prereq error message will be obtained. 2018-09-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deps/m1, testsuite/modulefiles.deps/m2, testsuite/modulefiles.deps/m3, testsuite/modulefiles.deps/m4, testsuite/modulefiles.deps/m5, testsuite/modulefiles.deps/m6, testsuite/modulefiles.deps/m7, testsuite/modules.50-cmds/376-deps7.exp: ts: add tests for module load/unload & auto_handling 2018-09-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.allin/allin/1, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/375-deps6.exp: ts: adapt to modfile 'module unload' auto handling * testsuite/modules.20-locate/069-cross.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/195-load-recurs.exp, testsuite/modules.50-cmds/197-load-lots.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp: ts: adapt to modfile 'module load' auto/no-auto handling More test case adaptation to follow the new 'module load' commands handling when the auto_handling mechanisms are enabled or disabled. The tests changed here show different behavior whether auto_handling is enabled or not. Due to the fact that module unloads is not cascaded when auto_handling is enabled and UReqUn modules ares unloaded in reverse loaded order, not in the order specified within modulefile. These 2 behavior changes lead to different result: command order change, unwind process when a module to unload is erroneous, or variable resulting value when unloading modules compete over same variable to set. 2018-09-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Auto handling and 'module unload' commands in modulefile 'module unload' commands in modulefiles may impact the auto handling mode, so a few things need to be adapted: - on 'load' mode, proceed with the unload which may raise error if the module is required by another loaded module. - on 'load' mode, set a conflict toward modules to unload to ensure they will not be loaded afterward. If module has not been correctly unloaded prior the conflict definition, modulefile defining the 'module unload' command will not be loaded. - on 'unload' mode, does nothing as the defined conflict ensure environment consistency and will forbid conflicting module load. If conflicting module has been loaded, it means this situation has been forced so there is no expectation this module who defines a 'module unload' effectively unloads this module which is required by the user. 2018-09-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.20-locate/069-cross.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/195-load-recurs.exp, testsuite/modules.50-cmds/197-load-lots.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.50-cmds/340-modvar.exp, testsuite/modules.80-deep/020-load.exp: ts: adapt to modfile 'module load' auto handling * modulecmd.tcl.in: Auto handling and 'module load' commands in modulefile 'module load' commands in modulefiles may impact the auto handling mode, so a few things need to be adapted: - on a 'load' mode, register each module passed to the module load command as a prereq of evaluated modulefile. This way the dependency will correctly be tracked - on an 'unload' mode, proceed to the unload action when evaluating the 'module load' statement only if auto handling is disabled. Do nothing when evaluating the statement if auto handling is enabled, as these modules will be unloaded as part of the UReqUn mechanism. This way all unload/reload are triggered from the top unload action to ensure nothing will get in the way of the DepUn/DepRe/UReqUn processed from there. Note that on an unload mode, modules are unloaded only if no other loaded modules require them and they have not been asked by user, elsewhere no unload is made to ensure the consistency of the loaded environment (as these modules are explicitely required by user or by another loaded module) Treating these modules to unload through UReqUn mechanism leads to some behavior changes: - unload interpretation is not cascaded anymore in this case and every module to unload are processed sequentially - a consequence of the previous point is that an error happening when processing the unload of a UReqUn module, will not unwinds the whole unload process as it does when auto_handling is disabled - unload happens in the reverse loaded order, not in the order defined by the 'module load' commands in the modulefile - as a consequence of this previous point, environment change after the whole unload may be different if the unloaded modules compete over a variable to set when unloading (last module to be unloaded will not be the same) 2018-09-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add 'nuasked' arg to cmdModuleUnload proc Add a 'nuasked' argument to the cmdModuleUnload procedure to control whether or not only the non-user-asked modules should be unloaded. 2018-09-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Remove useless global var in cmdModuleUnload * modulecmd.tcl.in: Add 'warn' arg to cmdModuleUnload proc Add a 'warn' argument to the cmdModuleUnload procedure to control whether or not display the warning message when a module cannot be unloaded because it is still required by other loaded module. This argument is equal to true every time except for the interpretation of 'module load' commands in modulefile when mode is 'unload'. In this situation module unload may not be performed if module is still required but it is a normal situation like the UReqUn mechanism (only the useless modulefiles are automatically unloaded). * modulecmd.tcl.in: Avoid unloading mods from getDependentLoadedModuleList res Excludes modules currently being unloaded from the result of getDependentLoadedModuleList procedure. This situation may appear when unloading a module containing itself a "module load" commands, which is translated into a "module unload" command on unload module. When in turns this modulefile targetted by the "module load" command is unloaded, it should not found its dependent modulefile who is currently being unloaded into its dependent result list to avoid UReqUn/DepUn infinite loop. 2018-09-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: Fix uninitialized 'rows' var in displayElementList proc Add test case in 00-init/120-siteconfig to demonstrate a setup that falls in the uninitialized 'rows' pit. Fixes #195 2018-09-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, doc/source/modulefile.rst, modulecmd.tcl.in, testsuite/modulefiles/mcookie/1, testsuite/modulefiles/mcookierc/.modulerc, testsuite/modulefiles/mcookierc/1, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.20-locate/057-mcookie.exp: Check version set in modulefile magic cookie Magic cookie at the beginning of modulefiles may sometimes set a version number, for instance '#Module1.0'. Until now this version number was about a modulefile standard version. However there is no known modulefile API versioning and new modulefile commands are added along new Modules releases. So the idea here is to match this version number optionally set on magic cookie and compare it to the modulecmd.tcl release version. If modulefile sets a version number greater than modulecmd.tcl version, this modulefile is not evaluated like when no magic cookie is set at all. Add specific tests in 20-locate suite and adapt modulefile man page and MIGRATING doc. Fixes #171 2018-09-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml, INSTALL.rst, Makefile, Makefile.inc.in, configure, init/Makefile, init/bash.in, init/cmake.in, init/fish.in, init/ksh.in, init/perl.pm.in, init/python.py.in, init/r.R.in, init/ruby.rb.in, init/sh.in, init/tcl.in, init/zsh.in, modulecmd.tcl.in, site.exp.in, testsuite/install.00-init/060-quar.exp, testsuite/modules.00-init/110-quar.exp, testsuite/modules.70-maint/120-autoinit.exp: install: add --enable-quarantine-support configure opt Add the ability to control whether or not code to support quarantine mechanism should be added to the module function and initialization scripts. Enabled by default Fixes #167 2018-09-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml, INSTALL.rst, Makefile, Makefile.inc.in, configure, init/Makefile, init/bash.in, init/ksh.in, init/sh.in, init/zsh.in, modulecmd.tcl.in, site.exp.in, testsuite/install.00-init/030-options.exp, testsuite/modules.70-maint/120-autoinit.exp: install: add --enable-silent-shell-debug-support configure opt Add the ability to control whether or not code to support silent shell debug should be added to the module function and sh-kind initialization scripts. Enabled by default Fixes #166 2018-09-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash.in, init/ksh.in, init/sh.in, init/zsh.in, modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: init: split unset of shdbg and quar-related vars * .travis.yml, INSTALL.rst, configure: install: add --with-bin-search-path configure opt Get in control of the path list used to search the tools required to build and configure Modules. Default value: /usr/bin:/bin:/usr/local/bin Adapt one travis scenario to test the setup of a specific value for this configure option. Fixes #164 * MIGRATING.rst: doc: desc. alt name consistency in MIGRATING 2018-09-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_v3_v4.rst, doc/source/module.rst, doc/source/modulefile.rst: doc: desc. alt name in manpages and diff doc Also fix some typos found on the way and clarifies commands where symbolic versions and aliases where already supported. * testsuite/modules.50-cmds/350-allin.exp: ts: skip allin tests if domainname tool not there 2018-08-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/etc/modulerc.altname, testsuite/modulefiles.deps/alt/.modulerc, testsuite/modulefiles.deps/alt/1, testsuite/modulefiles.deps/alt/7, testsuite/modulefiles.deps/alt/8, testsuite/modulefiles.deps/alt/dir/.modulerc, testsuite/modulefiles.deps/alt/dir/2, testsuite/modulefiles.deps/alt/dir/3, testsuite/modulefiles.deps/alt/dir/4, testsuite/modulefiles.deps/alt/dir/5, testsuite/modulefiles.deps/alt/dir/6, testsuite/modulefiles.deps/alt2/1, testsuite/modulefiles.deps/i1, testsuite/modulefiles.deps/i2, testsuite/modulefiles.deps/i3, testsuite/modulefiles.deps/i4, testsuite/modulefiles.deps/i5/1, testsuite/modulefiles.deps/i5/2, testsuite/modules.50-cmds/380-altname.exp: ts: add alt name specific tests * modulecmd.tcl.in: Match alt names on is-loading query Look at all names resolving to loading modules for is-loading queries. * modulecmd.tcl.in, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.80-deep/010-init_ts.exp, testsuite/modules.80-deep/020-load.exp, testsuite/modules.80-deep/068-transitive.exp, testsuite/modules.80-deep/999-cleanup.exp: Mod inherits alt names of its parent directories Improve correlation especially on unload actions. A module alias set on a parent directory of a module will be added to the list of module alternative names, thus it will be matched when attempting an unload on this alias name. 2018-08-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.80-deep/068-transitive.exp: ts: adapt resolution warning test with alt name These warning messages are not displayed anymore as alternative names registered in environment are used instead of triggering a modulefile resolution through the modulepaths. * testsuite/modules.70-maint/153-is-loaded.exp, testsuite/modules.70-maint/157-info-loaded.exp: ts: adapt env consistency test results with alt name Alternative name match leads to loaded environment correlation test. So this test is now performed most of the time. 2018-08-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Check mod alt names when comparing mod to names When checking if a loaded module name matches a given string, also checks if match happens with any of the alternative names of mod. Add doesModuleMatchesName procedure to check mod main and alternative names. Then replace 'string first' tests by a call to this new procedure in conflict, getLoadedWithClosestName, getLoadedMatchingName, doesModuleConflict and setModuleDependency procedures. Register alternative names of module prior its modulefile evaluation as this information is required before any query of matching conflict (call to doesModuleConflict procedure or call to conflict procedure during modulefile evaluation). Fixes #143 2018-08-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.00-init/071-args.exp, testsuite/modules.10-use/040-load.exp, testsuite/modules.10-use/080-access.exp, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/038-defcontext.exp, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.20-locate/075-symlink.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/197-load-lots.exp, testsuite/modules.50-cmds/280-info-specified.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/080-access.exp, testsuite/modules.61-coll/999-cleanup.exp, testsuite/modules.80-deep/010-init_ts.exp, testsuite/modules.80-deep/020-load.exp, testsuite/modules.80-deep/021-unload.exp, testsuite/modules.80-deep/022-switch.exp, testsuite/modules.80-deep/068-transitive.exp, testsuite/modules.80-deep/080-access.exp, testsuite/modules.80-deep/999-cleanup.exp: ts: adapt existing tests to MODULES_LMALTNAME 2018-08-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Register loaded module alt names in MODULES_LMALTNAME A module may have alternate names resulting from the module alias or symbolic version set through the resolution of its modulefile. Here we start to keep track of these alternative names for every loaded modules by using an environment variable: MODULES_LMALTNAME. It follows the same tracking principle than used for keeping track of conflicts or prereqs between modules. Helper procedures are introduced to get/set module alternative names. Right after loading modulefile, its alternative names are retrieved from the ::g_resolvedHash resolving array and set to the g_loadedModuleAltname array wich is then used to get and set alternative names value without dependency to the alias/symbol global resolving process. * MIGRATING.rst: doc: cite Flavours for AMHM in MIGRATING doc * MIGRATING.rst, doc/source/module.rst: doc: add DepUn + clarify UReqUn,DepRe Especially regarding the inter-dependencies between these mechanisms and the specificities of the switch sub-command. 2018-08-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, doc/source/module.rst, modulecmd.tcl.in, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/374-deps5.exp, testsuite/modules.50-cmds/375-deps6.exp: Brand auto handling mechanisms * Requirement Load (ReqLo) * Dependent Reload (DepRe) * Useless Requirement Unload (UReqUn) * Dependent Unload (DepUn) Mention these mechanism titles in MIGRATION and module man page documentations. Reword code and tests that where previously using the DU/DR/URU short names. 2018-08-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/FAQ.rst, doc/source/conf.py: doc: mention createmodule.{sh,py} scripts in FAQ Fixes #189 * modulecmd.tcl.in: No prereq violation set for dependent on getDependentLoadedModuleList Modules strongly requiring mods where previously set in prereq violation state as mod where unloaded. Remove that since these modules requiring mod during an unload (the DU modules) are now part of the list of modules passed as argument to getDependentLoadedModuleList. So this part of the code will not be run anymore. * modulecmd.tcl.in: Move remaining 'lsearch -exact == -1' to notInList 2018-08-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/375-deps6.exp: No prereq violation warn msg for DR mech or purge During a purge or the unload phase of the DR mechanism do not warn about the unload process violating a prereq constraint. In these situation, violation is due to the dependent module not being able to also unload or to unload prior its requirement. All of this because this dependent module is its in a violation state. * testsuite/modules.50-cmds/374-deps5.exp: ts: add DU/DR/URU tests on switch action 2018-08-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: No getPathToModule call in cmdModuleSwitch Simplify code of cmdModuleSwitch which now relies more on cmdModuleUnload. There is no more need to resolve module to unload within cmdModuleSwitch as it is perfectly handled with its related modules to unload within cmdModuleUnload. * modulecmd.tcl.in: Rely on cmdModuleUnload DU/URU/DR during switch Rely on the DU/URU mechanisms of cmdModuleUnload during a switch action and also the unload part of the DR mechanism. cmdModuleUnload transmit the DR module list to cmdModuleSwitch for this procedure to be able to handle the reload phase of the DR mechanism once the newly switched-to module is loaded. This change makes useless the being_reload argument of the getDependentLoadedModuleList procedure, as module candidates are now found when looking for DU modules in cmdModuleSwitch. being_reload argument is thus removed from getDependentLoadedModuleList proc. 2018-08-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deps/h50, testsuite/modulefiles.deps/h51, testsuite/modulefiles.deps/h52, testsuite/modulefiles.deps/h53, testsuite/modulefiles.deps/h54, testsuite/modulefiles.deps/h55, testsuite/modulefiles.deps/h56, testsuite/modulefiles.deps/h57, testsuite/modulefiles.deps/h58, testsuite/modulefiles.deps/h60, testsuite/modulefiles.deps/h61, testsuite/modulefiles.deps/h62, testsuite/modulefiles.deps/h63, testsuite/modulefiles.deps/h64, testsuite/modulefiles.deps/h65, testsuite/modulefiles.deps/h66, testsuite/modulefiles.deps/h67, testsuite/modulefiles.deps/h68, testsuite/modulefiles.deps/h69, testsuite/modulefiles.deps/h70, testsuite/modulefiles.deps/h71, testsuite/modulefiles.deps/h72, testsuite/modulefiles.deps/h73, testsuite/modulefiles.deps/h74, testsuite/modules.50-cmds/373-deps4.exp: ts: add new tests DU mechanism-specific 2018-08-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/372-deps3.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/375-deps6.exp: Introduce "Dependent Unload" (DU) mechanism Add the ability when auto handling is enabled to unload modules requiring the module asked for unload rather shouting an error. Dependent Unload (DU) mechanism builds list of all modules actively requiring (not optionaly requiring it) the module set for unload or actively requiring modules part of this DU batch. These DU modules are then unloaded prior main module unload, not to be there anymore once module asked for unload is in turn unloaded. These DU modules also contributes to determine the list of Useless Requirement Unload (URU) modules. As unloading the DU modules may also add new URU modules. These DU modules also contributes to determine the list of Dependent Reload (DR) modules. As unloading the DU modules may also add new DR modules. Take this opportunity to clarify comments around Dependent Reload (DR) and Useless Requirement Unload (URU) mechanisms in cmdModuleUnload procedure. Update "deps" test expectations now the DU mechanism is in place. * modulecmd.tcl.in: Pass a module list to getUnloadableLoadedModuleList Like for getDependentLoadedModuleList procedure makes getUnloadableLoadedModuleList able to process a module list passed as argument. 2018-08-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Compute 'drmodlist' only if auto enabled in cmdModuleLoad * modulecmd.tcl.in: Rename 'depmod' in 'drmodlist' in cmdModule{Load,Unload} Rename local variable 'depmod' into 'drmodlist' (dependent reload module list) for clarification. * modulecmd.tcl.in: Treat list of elt in appendNoDupToList Adapt appendNoDupToList to treat list of elements rather just a single element * modulecmd.tcl.in: Work over 1 list in getDependentLoadedModuleList Only use 'fulllist' as 'testlist' could be merged into 'fulllist'. * modulecmd.tcl.in: Work over 1 list in getUnloadableLoadedModuleList Only use 'fulllist' as 'unmodlist' could be deduced from it in the end. * modulecmd.tcl.in: Add appendNoDupToList helper proc Add procedure to append to a list an element if this element is not already part of this list * modulecmd.tcl.in: Add isInList/notInList helper procs Introduce two helper procedures to check existence of an element in a list: isInList and notInList. When this script compatibility will moved from Tcl>=8.4 to Tcl>=8.5, will change these helper procs in 'in' and 'ni'. * modulecmd.tcl.in: Add getDirectDependentList helper procedure Add a getDirectDependentList procedure in charge of querying ::g_dependHash array to return list of dependent modules, stronly or weakly attached to passed mod. 2018-08-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles.deps/h30, testsuite/modulefiles.deps/h31, testsuite/modulefiles.deps/h32, testsuite/modulefiles.deps/h33, testsuite/modulefiles.deps/h34, testsuite/modulefiles.deps/h35, testsuite/modulefiles.deps/h36, testsuite/modulefiles.deps/h37, testsuite/modulefiles.deps/h38, testsuite/modulefiles.deps/h39, testsuite/modulefiles.deps/h40, testsuite/modules.50-cmds/373-deps4.exp: Pass a module list to getDependentLoadedModuleList Adapt getDependentLoadedModuleList procedure to get a module list as argument rather a single module name. Helps to get in one call all the dependent modules of those passed as argument. Also improve correctness as sometimes multiple modules may violate constraint of another one. To get this module freed, all conflicting modules may set unloaded. So if all of these conflicting modules are passed as argument to getDependentLoadedModuleList, the dependent module will be seen freed and will be part of the procedure result list. 2018-08-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles.deps/h10, testsuite/modulefiles.deps/h11, testsuite/modulefiles.deps/h12, testsuite/modulefiles.deps/h20, testsuite/modulefiles.deps/h21, testsuite/modulefiles.deps/h22, testsuite/modulefiles.deps/h23, testsuite/modulefiles.deps/h24, testsuite/modulefiles.deps/h25, testsuite/modules.50-cmds/373-deps4.exp: Trigger full useless prereqs unload from main unload Call from the main unload action the automatic unload of prereq modules that became useless due to main module unload. To achieve that, getUnloadableLoadedModuleList procedure now returns to the tree of unloadable modules. Then cmdModuleUnload calls over this unloadable module list is made in a --no-auto mode not to deviate from what was computed before unload/load processing. * modulecmd.tcl.in, testsuite/modulefiles.deps/h1, testsuite/modulefiles.deps/h2, testsuite/modulefiles.deps/h3, testsuite/modulefiles.deps/h4, testsuite/modules.50-cmds/373-deps4.exp: Compute list of unloadable required modules prior unload When unloading a module, its requirements that have been automatically loaded and are not required by any other module will automatically be unloaded when their dependent module is unloaded. Compute the list of these unloadable required modules prior to the unload of their dependent module, not to be confused by currently being reloaded dependent module that may hold a requirement on these potentially unloadable modules. Merge getRequiredLoadedModuleList procedure into getUnloadableLoadedModuleList that now takes the name of the module being unloaded as argument. Call getUnloadableLoadedModuleList prior any module change so determine that a required module will be useless after module unload if this required module has only one dependent (module currently being unloaded) * modulecmd.tcl.in: Add 'direct' arg to getDependentLoadedModuleList proc Split meaning of 'strong' argument into a new argument named 'direct'. Now strong means active dependency (not an optional one). And direct means only first-level dependent, when equals to 0 it means the full dependency tree should be returned. 2018-08-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/373-deps4.exp: Ensure --no-auto mode on load phase of dependent reload Ensure dependent modules reload do not deviate from previously loaded list. Like already done during a "switch" action. Here now also applies to "load" and "unload" actions. * modulecmd.tcl.in, testsuite/modulefiles.deps/g1, testsuite/modulefiles.deps/g2, testsuite/modulefiles.deps/g3, testsuite/modulefiles.deps/g4, testsuite/modulefiles.deps/g5, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/373-deps4.exp, testsuite/modules.50-cmds/375-deps6.exp: Split dependent reload process around main action When reloading dependent module during a module load or a module unload, split this reload process into an unload phase, prior main action, than a load phase after main action. Performing this way helps dependent module to get refreshed accurately with an unload phase in same situation than their last load. Then load phase of the reload process will be able to correctly adapt with new dependency loaded or unloaded. Proceeding this way enables modulefiles to adapt their variable definitions based on their loaded requirements. However when prereq or conflict violation constraint appear, unload stage of a dependent module may not correctly unset variable as described in nonreg tests. 2018-08-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add reloadModuleList{Unload,Load}Phase procs Split module reload process into 2 procedures: reloadModuleListUnloadPhase that unloads module list and reloadModuleListLoadPhase that load it again after. Adapt cmdModuleReload and cmdModuleSwitch to take advantage of these new procedures. 2018-08-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Handle uasked flag on cmdModuleSwitch proc Add a 'uasked' argument to the cmdModuleSwitch procedure to determine if the module to load during the switch action is asked by user (called on the command line or in a first level sourced file) or not. 2018-08-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * README.md: doc: fix cea-hpc/modules appveyor weblink 2018-08-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/rpm/environment-modules.spec.in: rpm: add gcc in build requirements for compat version Reference: https://fedoraproject.org/wiki/Changes/Remove_GCC_from_BuildRoot 2018-08-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version 4.1.4 * doc/source/modulefile.rst, modulecmd.tcl.in, testsuite/modulefiles.deep/badmodvers/.version, testsuite/modulefiles.deep/badmodvers/dir1/2.0, testsuite/modulefiles.deep/badmodvers/foo, testsuite/modules.80-deep/010-init_ts.exp, testsuite/modules.80-deep/020-load.exp, testsuite/modules.80-deep/021-unload.exp, testsuite/modules.80-deep/030-display.exp, testsuite/modules.80-deep/050-whatis.exp, testsuite/modules.80-deep/999-cleanup.exp, testsuite/modules.90-avail/070-full.exp: ModulesVersion can only refer to modfile in same dir Clarify modulefile man page and .version modulerc interpretation about ModulesVersion variable which can only refer to modulefile located in the same directory than where this .version modulerc file is located. Report error if a nested ModulesVersion value is detected. This value is ignored. Add tests in 80-deep suite on that change. Clarifies RH#979787 [1] Fixes #176 [1] https://bugzilla.redhat.com/show_bug.cgi?id=979787 2018-08-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../cookbook/top-priority-values/modulefiles/bar/1, .../cookbook/top-priority-values/modulefiles/foo/1, .../cookbook/top-priority-values/siteconfig.tcl: cookbook: add 'top-priority-values' recipe 2018-08-16 Jan Synacek <jsynacek@redhat.com> * contrib/scripts/createmodule.py: contrib: createmodule.py: fix typo * contrib/scripts/createmodule.py: contrib: createmodule.py: open pipes in text mode Otherwise, pipes are opened in binary mode and there are type errors further down the code. * contrib/scripts/createmodule.py: contrib: createmodule.py: fix tab indentation 2018-08-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * README.md: doc: add appveyor build badge in README * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Fix exec() usage in module func on Python3 Need to pass a variable namespace to exec() function to get the value of the '_mlstatus' variable generated by modulecmd. This change enables to return correct status on Python3, as exec() function behaves differently between Python2 and 3 [1]. [1] https:// stackoverflow.com/questions/15086040/behavior-of-exec-function-in-python-2-a nd-python-3 * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.20-locate/081-access-rc.exp, testsuite/modules.60-initx/080-access.exp, testsuite/modules.61-coll/080-access.exp, testsuite/modules.80-deep/080-access.exp: ts: skip 08?-access tests if locked dir/file are still readable * testsuite/modules.10-use/080-access.exp: ts: skip tests in 10/080 when file readable in locked dir * contrib/gitlog2changelog.py: Fix gitlog2changelog.py script for python3 * testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/050-crossshell.exp: ts: sh and ksh shells on MSYS2 behaves like on CYGWIN 2018-08-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.61-coll/020-savelist.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.90-avail/070-full.exp: ts: skip tty cols nb test if cols nb cannot be changed * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/090-uname-proc.exp, testsuite/modules.50-cmds/099-uname-cleanup.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.70-maint/060-apropos.exp: ts: adapt expected results when 'domainname' not avail On MSYS2, domainname is not available, which produces error message on 'uname/domain' modulefile. This message shows up on every 'module search' queries. Here all impacted test cases are updated to expect this error message on all module search queries. * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.20-locate/075-symlink.exp, testsuite/modules.70-maint/130-aliases.exp: ts: skip mod symlink tests if no fs support 2018-08-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .appveyor.yml: Introduce AppVeyor config file for Windows CI * configure: install: look for 'make' on MSYS2 2018-08-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml: travis: help compat configure to locate tclConfig.sh on osx * testsuite/modulefiles.deps/dh, testsuite/modulefiles.deps/ea, testsuite/modulefiles.deps/eb, testsuite/modulefiles.deps/ec, testsuite/modulefiles.deps/ed, testsuite/modulefiles.deps/ee, testsuite/modulefiles.deps/ef, testsuite/modulefiles.deps/eg, testsuite/modules.50-cmds/374-deps5.exp: ts: add complex deps tests on switch command 2018-08-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/373-deps4.exp: ts: add more missing prereq tests in 50/373 * testsuite/modules.50-cmds/130-conflict-full.exp: ts: --{no-,}auto switch tests on conflict situations 2018-07-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp: ts: --{no-,}auto switch tests on prereq situations 2018-08-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: No auto_handling when reloading dependent during a switch Disable auto handling mode during a switch command when reloading the modules dependent on "old" after "new" being loaded. Proceed this way to avoid unsatisfied requirements, now "old" is unloaded to be solved automatically against user will. As a result, some of the dependent modules may not be reloaded if "new" module does not satisfy their constraint. 2018-07-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/375-deps6.exp: Reload dependent and not conflicting anymore on switch When switching a module by another, add to the list of module to reload, those modules dependent of unloaded module and those modules that were in conflict with unloaded module that can take advantage of this unload to be reloaded. 2018-07-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deps/mv, testsuite/modules.50-cmds/375-deps6.exp: ts: warning when --force used in modulefile 2018-07-31 Colin Marquardt <github@marquardt-home.de> * modulecmd.tcl.in: Ignore dirs .SYNC/ (DesignSync) and .sos/ (SOS). 2018-07-28 Colin Marquardt <github@marquardt-home.de> * doc/source/FAQ.rst: Fix small typo. 2018-07-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst: doc: desc. conflict& prereq consistency/auto/force in MIGRATING 2018-07-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst: doc: desc. env var change in MIGRATING * doc/source/diff_v3_v4.rst: doc: desc. conflict& prereq consistency/auto/force in diff 2018-07-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst, doc/source/modulefile.rst: doc: desc. --force in module.1 2018-07-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst, doc/source/modulefile.rst: doc: desc. --auto/--no-auto/MODULES_AUTO_HANDLING in module.1 2018-07-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/130-conflict-full.exp: ts: --force over unsatisfied conflict when --no-auto * testsuite/modules.50-cmds/120-prereq-full.exp: ts: --force over unsatisfied prereq when --no-auto 2018-07-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.61-coll/030-save.exp: ts: check saving collection when constraint not satisfied 2018-07-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/375-deps6.exp: ts: add reload tests to 50-cmds/375-deps6 * modulecmd.tcl.in: No reload of all loaded mods if constraints are violated * testsuite/modules.50-cmds/375-deps6.exp: ts: add purge tests to 50-cmds/375-deps6 * modulecmd.tcl.in: Reload dependent if auto=1 on cmdModuleUnload Makes 'auto' argument of cmdModuleUnload procedure also control the reload of all dependent modules once passed mod has been unloaded. 'auto' argument was already controlling the automatic unload or modules required by passed mod to unload if these required modules have been loaded without being asked by users. As a consequence the unloading phase of a purge or reload command or event the unload phase of the dependent modules of a switch command do not attempt to reload the dependent modules. (as these dependent modules will be handled through the same unload phase). 2018-07-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deps/f1, testsuite/modulefiles.deps/f10, testsuite/modulefiles.deps/f11, testsuite/modulefiles.deps/f12, testsuite/modulefiles.deps/f13, testsuite/modulefiles.deps/f14, testsuite/modulefiles.deps/f15, testsuite/modulefiles.deps/f16, testsuite/modulefiles.deps/f17, testsuite/modulefiles.deps/f18, testsuite/modulefiles.deps/f19, testsuite/modulefiles.deps/f2, testsuite/modulefiles.deps/f20, testsuite/modulefiles.deps/f21, testsuite/modulefiles.deps/f22/1, testsuite/modulefiles.deps/f22/2, testsuite/modulefiles.deps/f23, testsuite/modulefiles.deps/f24, testsuite/modulefiles.deps/f25, testsuite/modulefiles.deps/f26, testsuite/modulefiles.deps/f27, testsuite/modulefiles.deps/f28, testsuite/modulefiles.deps/f29, testsuite/modulefiles.deps/f3, testsuite/modulefiles.deps/f4, testsuite/modulefiles.deps/f5, testsuite/modulefiles.deps/f6, testsuite/modulefiles.deps/f7, testsuite/modulefiles.deps/f8, testsuite/modulefiles.deps/f9, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/375-deps6.exp: ts: add deps tests when constraints are violated * modulecmd.tcl.in: Take disapearing prereq in account on getDependentLoadedModuleList When 'being_unload' argument is set, which means passed mod is currently being unloaded, exclude from result list the loaded modules requiring passed mod. As this module is being unloaded, these dependend modules are entering in a violation state, so they cannot be reloaded. This is achieved by temporarily defining the dependent modules in prereq violation state, for the time of the getDependentLoadedModuleList procedure execution. 2018-07-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Change sortPerModuleLoadedOrder into sortModulePerLoadedAndDepOrder Rename sortPerModuleLoadedOrder proc into sortModulePerLoadedAndDepOrder. Sort is now refined to take dependencies into account: a dependent module should be placed prior the loaded module requiring it. This refinement is made to avoid reloading multiple times the same loaded module when dependent module is set after module requiring it in list. 2018-07-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add 'being_unload' arg to getDependentLoadedModuleList Indicate to getDependentLoadedModuleList procedure that targeting module is being unloaded. In this case the procedure will return loaded modules conflicting with passed mod and the dependent modules of these conflicting module. These loaded modules are added to the dependent loaded module list since passed mod is being unloaded, they can be reloaded now the conflict violation is fixed. This reload garanties the modules previously in conflict are now correctly loaded and in an expected loaded order. 2018-07-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Introduce a 'force' arg to cmdModuleUnload Add the ability to by-pass requiring modules check when unloading a module with an argument on the cmdModuleUnload procedure. This new 'force' argument is enabled when reloading modules as the requirement by-pass will immediately be fixed once the required modules are loaded again. Happens when reloading dependent modules on load, unload and switch actions. Some of the dependent modules may be excluded from reloading module list as they are in a prereq/conflict violation state so the remaining modules to reload may face some requiring modules still loaded, thus their reload need to be forced. Also enabled when purging loaded modules as all modules should be unloaded even if some violations make unloading prereqs before the module requiring them. * modulecmd.tcl.in: Rename 'autounload' cmdModuleUnload arg into 'auto' 2018-06-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: No collection save if mod constraints unsatisfied Raise error on a save sub-command is some module constraint is not satisfied. * modulecmd.tcl.in: Update getDependentLoadedModuleList to return sane deps Add a sat_constraint argument to getDependentLoadedModuleList procedure to ask for dependent loaded modules whose constraints are satisfied. This argument is enabled when reloading dependent modules in load, unload and switch actions. A areModuleConstraintsSatisfied procedure is introduced and getDependentLoadedModuleList relies on it to determine if a given loaded module has its constraints (prereq and conflict) satisfied as well as all loaded modules whose given loaded module depends on. When no module name is passed to areModuleConstraintsSatisfied, this procedure returns if all loaded module satisfy their loading constraints. 2018-06-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Track loaded mod violating their prereq/conflict def Update setModuleDependency and unsetModuleDependency procedures to register/unregister in a ::g_prereqViolation array loaded modules violating their prereq definition (means they have been loaded in force mode or their prereq was unloaded in force mode). Proceed in a similar way for conflicts with a ::g_conflictViolation array, still in setModuleDependency and unsetModuleDependency procedures. For prereq violation, updates of dependent loaded module eventual violation is obtained by the re-compute of the dependency chain performed in setModuleDependency and unsetModuleDependency. For conflict violation, updates of violation state is done for loaded modules conflicting with module processed by setModuleDependency or unsetModuleDependency. To achieve that list of conflicting-with loaded modules is set in ::g_conflictViolation array. This array is handled by setModuleConflictViolation and unsetModuleConflictViolation procedures. doesModuleConflict procedure is updated on the way to skip from its result eventual own reflexive conflict, as this procedure is now called once mod is effectively loaded and not anymore prior mod load (as when it is called from cmdModuleLoad). Also check conflicting modules declared by current module are loaded or not. 2018-06-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash_completion.in, init/tcsh_completion.in, modulecmd.tcl.in, testsuite/modules.00-init/090-switches.exp: By-pass conflict/prereq issue with -f/--force cmd-line switches Add -f/--force command-line switches to by-pass dependency consistency in case of * load of a module conflicting with another loaded module * load of a module where its declared requirements cannot be loaded * unload of a module required by other loaded module These options are only useful for the load, unload and switch module sub-commands. When a dependency is actually by-passed, still produce a warning message to help user learn that something has effectively been forced. Warning messages will be improved later-on to let user better understand what happens Update shell completion scripts. 2018-06-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/example/siteconfig.tcl-1, testsuite/modules.50-cmds/130-conflict-full.exp: Remove g_force with path ref counting meaning As a consequence a loaded module cannot be loaded a second time in force mode. So the check of this situation in conflict procedure is not useful anymore as the TESTSUITE_ENABLE_SITECONFIG_DEBUG non-regression test. * modulecmd.tcl.in, testsuite/modulefiles.deps/mu, testsuite/modules.50-cmds/372-deps3.exp: Ignore --auto/--no-auto opt when called from modulefile 2018-06-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst: doc: desc. MODULES_LM{CONFLICT,NOTUASKED,PREREQ} in module.1 2018-06-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash_completion.in, init/fish_completion, init/tcsh_completion.in: init: add pager opts in shell completion scripts * testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/371-deps2.exp, testsuite/modules.50-cmds/373-deps4.exp: ts: always test auto handling in 50-cmds Adapt tests relying on an enabled auto_handling mode in 50-cmds suite to set in any cases MODULES_AUTO_HANDLING environment variable to perform the tests whatever the auto_handling mode set at configure time. Also update prereq tests in 50-cmds/12* to check behaviors when auto_handling is disabled and when it is enabled. * init/bash_completion.in, init/tcsh_completion.in, modulecmd.tcl.in, testsuite/modules.00-init/130-auto_handling.exp: Add --auto/--no-auto command-line switches Add the ability to control from the command-line whether the auto_hanling mode should be enabled or disabled. Command-line option override auto_handling enablement value set with MODULES_AUTO_HANDLING environment variable or set at configure time. Update tests and shell completion scripts. * modulecmd.tcl.in, testsuite/modules.00-init/130-auto_handling.exp: Introduce MODULES_AUTO_HANDLING Add the ability to control whether the auto_handling mode should be enabled or disabled with an environment variable: MODULES_AUTO_HANDLING. When set to 0 or 1, this environment variable overrides value set for auto_handling mode at configure time. 2018-06-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deps/da, testsuite/modulefiles.deps/db, testsuite/modulefiles.deps/dc, testsuite/modulefiles.deps/dd, testsuite/modulefiles.deps/de, testsuite/modulefiles.deps/df, testsuite/modulefiles.deps/dg, testsuite/modules.50-cmds/373-deps4.exp: ts: add broken prereq in list tests * testsuite/home/coll10, testsuite/home/coll9, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/999-cleanup.exp: ts: add coll tests for --notuasked flag 2018-06-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deps/ca, testsuite/modulefiles.deps/cb, testsuite/modulefiles.deps/cc, testsuite/modulefiles.deps/cd, testsuite/modulefiles.deps/ce, testsuite/modulefiles.deps/cf, testsuite/modulefiles.deps/cg, testsuite/modules.50-cmds/373-deps4.exp: ts: add dependent module handling checks * testsuite/modulefiles.deps/ms, testsuite/modulefiles.deps/mt, testsuite/modulefiles.deps/s, testsuite/modulefiles.deps/t, testsuite/modules.50-cmds/372-deps3.exp: ts: add prereq/conflict consistency checks 2018-06-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/372-deps3.exp: ts: add tests for is-loading conflict check Introduce 372-deps3 tests to check dependency consistency whatever the auto_handling state. 2018-06-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Rework is-loading to get closer to is-loaded handling Rework is-loading procedure to call getLoadedMatchingName procedure like is-loaded. Adapt getLoadedMatchingName to work on loading modules rather loaded modules. To achieve that, isModulefileLoading, getModuleFromLoadingModulefile, getLoadingModuleFileList and getLoadingModuleList procedures are introduced to be called instead of their 'loaded' counterpart when getLoadedMatchingName is called to look at loading modules. Remove is-loading procedure from aliases set for modulefile interpreter as there is no current need to acces such kind of procedure during a modulefile evaluation context. 2018-06-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Check unloading mod prereq violation whatever auto_handling state Ensure unloading module does not violate a registered prereq set by an already loaded module whatever the auto_handling state as it does not relate to an automatic handling mechanism. * modulecmd.tcl.in: Check loading mod conflict violation whatever auto_handling state Ensure loading module does not violate a registered conflict set by an already loaded module whatever the auto_handling state as it does not relate to an automatic handling mechanism. * modulecmd.tcl.in: Raise is-loading conflict error whatever auto_handling state Ensure conflict statement is satisfied even against modules currently being loaded. This error raise is not related to an automatic handling mechanism so it is triggered whatever the auto_handling state. 2018-06-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Loads from a top source cmd are considered user asked If module load orders are made from a 'module source' or during the source of an autoinit commands, consider these 'module load' orders found during evaluation as user asked orders. 2018-06-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/006-procs.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.00-init/071-args.exp, testsuite/modules.10-use/040-load.exp, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/035-defname.exp, testsuite/modules.20-locate/038-defcontext.exp, testsuite/modules.20-locate/040-alias.exp, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.20-locate/046-getsym.exp, testsuite/modules.20-locate/047-symerrs.exp, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.20-locate/075-symlink.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/020-setenv.exp, testsuite/modules.50-cmds/022-setenv-eschars.exp, testsuite/modules.50-cmds/025-setenv-undo.exp, testsuite/modules.50-cmds/028-setenv-refcount.exp, testsuite/modules.50-cmds/029-setenv-env.exp, testsuite/modules.50-cmds/030-unsetenv.exp, testsuite/modules.50-cmds/035-unsetenv-undo.exp, testsuite/modules.50-cmds/036-unsetenv-x.exp, .../modules.50-cmds/038-unsetenv-refcount.exp, testsuite/modules.50-cmds/039-unsetenv-env.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/049-append-env.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/059-prepend-env.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/069-remove-env.exp, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/076-alias-sub.exp, testsuite/modules.50-cmds/077-alias-undo.exp, testsuite/modules.50-cmds/078-refresh.exp, testsuite/modules.50-cmds/080-info-name.exp, testsuite/modules.50-cmds/081-info-user.exp, testsuite/modules.50-cmds/082-info-user-exp.exp, testsuite/modules.50-cmds/083-info-mode.exp, testsuite/modules.50-cmds/084-info-mode-exp.exp, testsuite/modules.50-cmds/085-info-flags.exp, testsuite/modules.50-cmds/086-info-shells.exp, testsuite/modules.50-cmds/087-info-shells-exp.exp, testsuite/modules.50-cmds/088-info-isloaded.exp, testsuite/modules.50-cmds/089-info-type.exp, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/100-loglevel.exp, testsuite/modules.50-cmds/101-badfac.exp, testsuite/modules.50-cmds/105-trace.exp, testsuite/modules.50-cmds/110-verbose.exp, testsuite/modules.50-cmds/115-verbose-msg.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp, .../modules.50-cmds/132-conflict-fullpath.exp, testsuite/modules.50-cmds/140-system.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/172-swap-app-delim.exp, testsuite/modules.50-cmds/173-swap-app-delim.exp, testsuite/modules.50-cmds/175-swap2.exp, testsuite/modules.50-cmds/177-swap-prep-delim.exp, testsuite/modules.50-cmds/178-swap-prep-delim.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/195-load-recurs.exp, testsuite/modules.50-cmds/197-load-lots.exp, testsuite/modules.50-cmds/200-break.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/220-continue.exp, testsuite/modules.50-cmds/230-loop.exp, testsuite/modules.50-cmds/240-chdir.exp, testsuite/modules.50-cmds/250-x-resource.exp, testsuite/modules.50-cmds/260-getenv.exp, testsuite/modules.50-cmds/269-getenv-env.exp, testsuite/modules.50-cmds/280-info-specified.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.50-cmds/285-info-loaded.exp, testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.50-cmds/301-interp-command.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.50-cmds/310-puts.exp, testsuite/modules.50-cmds/320-is-saved.exp, testsuite/modules.50-cmds/321-is-used.exp, testsuite/modules.50-cmds/322-is-avail.exp, testsuite/modules.50-cmds/330-source.exp, testsuite/modules.50-cmds/340-modvar.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/359-allin-env.exp, testsuite/modules.50-cmds/360-restoreenv.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/371-deps2.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/080-access.exp, testsuite/modules.70-maint/020-update.exp, testsuite/modules.70-maint/030-purge.exp, testsuite/modules.70-maint/050-whatis-load.exp, testsuite/modules.70-maint/140-multiargs.exp, testsuite/modules.70-maint/180-reload.exp, testsuite/modules.70-maint/190-emptyarg.exp, testsuite/modules.80-deep/020-load.exp, testsuite/modules.80-deep/021-unload.exp, testsuite/modules.80-deep/022-switch.exp, testsuite/modules.80-deep/068-transitive.exp, testsuite/modules.80-deep/080-access.exp, testsuite/modules.91-sort/040-load.exp, testsuite/modules.95-version/020-load.exp, testsuite/modules.95-version/020-unload.exp, testsuite/modules.95-version/022-load2.exp, testsuite/modules.95-version/022-unload2.exp, testsuite/modules.95-version/040-xgetenv.exp: Record not user asked mod rather user asked For better and simpler compatibility with previous modulecmd version and also for using same approach for both loaded environment and saved collections, track in the user environment the loaded modules that have not been asked by user (modules that have been automatically loaded as dependency of another loaded module) instead of tracking those loaded modules directly asked by user. As a consequence MODULES_LMUASKED is transformed in MODULES_LMNOTUASKED and modulecmd.tcl code is adapted to determine the 'user asked' state from this negated record. Adapt the whole testsuite consequently. 2018-06-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Rely on isModuleUserAsked rather getLoadedModuleUserAskedList Use isModuleUserAsked procedure rather checking list result returned by getLoadedModuleUserAskedList procedure to determine a loaded module has been asked by user. * modulecmd.tcl.in: Replace reloadDepLoadedModuleList by cmdModuleReload Drop reloadDepLoadedModuleList procedure to make use of cmdModuleReload in cmdModuleLoad and cmdModuleUnload to reload dependent modules. Adapt cmdModuleReload procedure to pass it a module list. If no list provided, proc falls back to the full currently loaded module list. * modulecmd.tcl.in: Unload/load dep mod one by one in cmdModuleSwitch Like for reload command, change cmdModuleSwitch to unload then reload dependent module list one by one rather unloading/loading user asked modules only and rely on the dependency mechanism. Doing so, the loaded module list that need to be reloaded is kept as it is exactly reloaded one by one. * modulecmd.tcl.in, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/197-load-lots.exp, testsuite/modules.50-cmds/340-modvar.exp, testsuite/modules.50-cmds/370-deps.exp, testsuite/modules.50-cmds/371-deps2.exp: Unload/load dep mod one by one in reloadDepLoadedModuleList Like for reload command, change reloadDepLoadedModuleList to unload then reload dependent module list one by one rather unloading/loading user asked modules only and rely on the dependency mechanism. Doing so, the loaded module list that need to be reloaded is kept as it is exactly reloaded one by one. No more need to mark currently loaded module as 'user asked' to avoid it to be reloaded during reloadDepLoadedModuleList, since we now proceed one by one. Remove setModuleUserAsked and unsetModuleUserAsked procedures now they are useless. 2018-06-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: No auto unload/load on restore/purge/reload Call cmdModuleUnload with autounload of leaf dependencies disabled when performing a restore, purge or reload command. So it gets same unload behavior (processing each module one by one in specified order) whatever the auto_handling state. Then reload module one by one on restore and reload commands whatever the auto_handling state to follow the same principle. * modulecmd.tcl.in: Add autounload arg to cmdModuleUnload Control the automatic unload attempt of leaf requirements, once mod has been unloaded, with an 'autounload' argument on cmdModuleUnload proc. * testsuite/modulefiles.deps/aa, testsuite/modulefiles.deps/ab, testsuite/modulefiles.deps/ac, testsuite/modulefiles.deps/ad, testsuite/modulefiles.deps/ae, testsuite/modulefiles.deps/af, testsuite/modulefiles.deps/ag, testsuite/modulefiles.deps/ah, testsuite/modulefiles.deps/ai, testsuite/modulefiles.deps/aj, testsuite/modulefiles.deps/ak, testsuite/modulefiles.deps/bf, testsuite/modulefiles.deps/bi, testsuite/modulefiles.deps/bj, testsuite/modulefiles.deps/bk, testsuite/modules.50-cmds/371-deps2.exp: ts: add 50-cmds/371-deps2 tests 2018-06-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add sortPerModuleLoadedOrder proc Add sortPerModuleLoadedOrder procedure to sort passed module list following the module loaded order. * modulecmd.tcl.in: Rework code to get unload autoloaded mods when no more req Add getRequiredLoadedModuleList proc to return all loaded modules in the requirement list of passed mod. This proc is called once mod has been unloaded, prior to the deletion of these requirement info in cmdModuleUnload. Add getUnloadableLoadedModuleList proc, to return the modules that have been automatically loaded and could now be automatically unloaded, as no more modules requires them (mandatory or optionaly). This proc takes the result of getRequiredLoadedModuleList as input. 2018-06-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Gets dep modules with getDependentLoadedModuleList proc Introduce the 'getDependentLoadedModuleList' procedure to retrieve the currently loaded modules that require the mod passed as argument. By default only strong dependencies are returned (loaded modules directly depending on passed mod and not having an alternative module loaded to satisfy their prereq). When non-strong dependencies are asked, 'depended by' dependencies are searched recursively to return all loaded modules linked to passed module. This new 'getDependentLoadedModuleList' procedure relies on the global arrays managed by setModuleDependency procedure. It replaces both getDepLoadedModuleList and getActiveDepLoadedModuleList procedures. 2018-05-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Move deps-related procs near similar oth procs * modulecmd.tcl.in: Build and maintain dep chain between loaded mod Introduce setModuleDependency and unsetModuleDependency procedures to build and maintain global arrays representing the dependency chain between loaded modulefiles based on the prereqs defined by each of these modules. setModuleDependency is called when module is loaded or current environment state is analyzed (called by setLoadedModule). unsetModuleDependency is called when module is unloaded (called by unsetLoadedModule). The g_moduleDepend array is set for each loaded module as a mirror of their relative definition in g_loadedModulePrereq, where module reference in the prereq definition is replaced by the name of the actual loaded modulefile matching the module reference. When a module reference of a prereq definition has no match among the currently loaded modulefiles, this unmet dependency is registered instead in the g_moduleUnmetDep global array. This situation happens when an optional dependency is not satisfied or if the load of a module has been forced (no dependency loaded prior to the load of the asked module). Reverse arrays are also set (g_dependHash and g_unmetDepHash) to easy the search of registered elements. When a new module is loaded, setModuleDependency looks if this new module was previously set as an unmet dependency. If it is the case, update dependent loaded modules dependency definition now the unmet dep is satisfied. 2018-05-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.deps/a, testsuite/modulefiles.deps/b, testsuite/modulefiles.deps/c, testsuite/modulefiles.deps/d, testsuite/modulefiles.deps/e, testsuite/modulefiles.deps/f, testsuite/modulefiles.deps/g, testsuite/modulefiles.deps/h, testsuite/modulefiles.deps/i, testsuite/modulefiles.deps/j, testsuite/modulefiles.deps/k, testsuite/modulefiles.deps/l, testsuite/modulefiles.deps/m, testsuite/modulefiles.deps/n, testsuite/modulefiles.deps/o, testsuite/modulefiles.deps/p, testsuite/modulefiles.deps/q, testsuite/modulefiles.deps/r, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/370-deps.exp: ts: add 50-cmds/370-deps tests * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp, .../modules.50-cmds/132-conflict-fullpath.exp: ts: add procs to format conflict/prereq err msg * .travis.yml: travis: enable autohandling on one test config * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp: ts: clean new MODULES_LM* env vars at ts startup * testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp: ts: adapt prereq tests if autohandling is enabled 2018-05-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Rework mod user asked internal handling Change module user asked internal handling (registering/unregistering in global structures) to get similar handling than loaded module list. Rename g_lmUasked into g_loadedModuleUasked to get closer to the name used for conflicts and prereqs registration. Primarily sets g_loadedModuleUasked through setLoadedModule procedure and unsets through unsetLoadedModule. Add isModuleUserAsked procedure to check if passed mod has been asked by user. Temporarily add setModuleUserAsked and unsetModuleUserAsked procedures to set/unset g_loadedModuleUasked array, for use around reloadDepLoadedModuleList call in cmdModuleLoad. * modulecmd.tcl.in: Clean currentModule var from cmdModule{Load,Unload} procs 2018-05-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: No uasked found on current env means all are uasked When looking at the current environement state in cacheCurrentModules procedure, if no user asked modules are found then all loaded modules are user asked modules. Helps transition between a Modules version not knowing about 'user asked' modules and a newer Modules version introducting this tracking feature. Environment setup on the previous Modules version will still be functionnal if newer Modules version is upgraded live. * modulecmd.tcl.in: Ignore '--notuasked' flag in case it is passed on module load --notuasked flag enables to keep track of the user asked state in saved collection (by flagging those not directly asked by user). Ignore it if passed directly to a 'module load' command (do not raise error) in case a collection file is sourced like a shell script. Do not advertise this new flag as it has no effect and should be kept internal as user asked mechanism is automatically controlled from the location the module load command is issued. * modulecmd.tcl.in: No uasked found in collection means all are usaked If none of the loaded modules found in collection is marked 'user asked', this means all modules saved are user asked to make collections saved prior to the user asked change still valid on new Modules version. * modulecmd.tcl.in: Track user asked loaded modules whatever auto_handling state Keep track of the loaded modules asked by user whether the auto_handling option is enabled or disabled. A loaded module has been asked by user when its load order is coming from the user not from the evaluation of a modulefile. Keeping track of this state in any cases will help to introduce per-module command automatic handling. Also saved collections do not break when auto_handling is enabled or disabled on Modules installation afterward. An 'uasked' first position argument is set on cmdModuleLoad procedure to pass the user asked state. cmdModuleReload is reworked to correctly restore the user asked state for each module unloaded in its first operation phase. cmdModuleSwitch always sets the module it loads as user asked. Should be discussed later on in conjunction with the behavior of this sub-command when called from a modulefile. Collections sub-commands and related utility procedures have been reworked to save and restore the non-'user asked' state of the loaded modules. Non-'user asked' state is recorded rather 'user asked' state to fit collection saved prior to this change were every modules mentionned in collection are considered 'user asked'. When restoring a collection currently loaded modules are unloaded to be loaded again even if they got same loading position than in collection but a different user asked state. Non-user asked state is saved in collection by adding the '--notuasked' argument on recorded module load lines. 2018-05-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Register conflict/prereq/usaked whatever auto_handling state Get, set and export in environment loaded modules declared conflicts, prereqs and their 'user asked' state whether the auto_handling option is enabled or not. Keep g_auto_handling to control automated actions but information registering is perfomed in any cases. Will help to introduce per-module command automatic handling and by-pass mechanism, still keeping a consistent intel. * modulecmd.tcl.in: Initial rework of mod prereq internal handling Change module prereq internal handling (registering/unregistering in global structures) to get similar handling than loaded module list. Rename g_lmPrereq into g_loadedModulePrereq. Remove ModulesCurrentPrereq global list, that were registering the prereq list of the currently evaluated module. Now directly registers into g_loadedModulePrereq. If evaluation goes wrong and is aborted, then prereqs registered in g_loadedModulePrereq are unregistered to correctly restore state prior evaluation. Introduce set, unset and get accessors for the g_modulesPrereq array. getLoadedPrereq is also able to return its result serialized to manage MODULES_LMPREREQ environment variable. 2018-05-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Rework mod conflict internal handling Change module conflict internal handling (registering/unregistering in global structures) to get similar handling than loaded module list. Rename g_lmConflict into g_loadedModuleConflict. Remove ModulesCurrentConflict global list, that were registering the conflict list of the currently evaluated module. Now directly registers into g_loadedModuleConflict, to be able to check only one structure to get both loaded and loading defined conflicts. If evaluation goes wrong and is aborted, then conflicts registered in g_loadedModuleConflict are unregistered to correctly restore state prior evaluation. Introduce set, unset and get accessors for the g_loadedModuleConflict array. getLoadedConflict is also able to return its result serialized to manage MODULES_LMCONFLICT environment variable. A doesModuleConflict procedure is also added to return whether or not passed module conflicts with currently defined rules. 2018-05-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Parse MODULES_LMUASKED with getLoadedModuleUserAskedList proc * modulecmd.tcl.in: Parse MODULES_LMPREREQ with getLoadedModulePrereqList proc * modulecmd.tcl.in: Parse MODULES_LMCONFLICT with getLoadedModuleConflictList proc * modulecmd.tcl.in: Rename g_def_separator_lvl{2,3} in g_sub{1,2}_separator And normalize access to these global variables (using $::varname). 2018-05-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst, Makefile, Makefile.inc.in, configure, modulecmd.tcl.in, site.exp.in: install: add --enable-auto-handling configure opt Enable or disable the automatic modulefile handling at configure time with '--enable-auto-handling' option. Disabled by default, will be set enbaled by default in next major release (v5). Throw this configure information to the testsuite to adapt result depending of feature enablement. 2018-05-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Set g_auto_handling as g_orig_load_control+g_auto_resolve_dep Gather all automatic module handling features enablement under a single g_auto_handling global variable, rather g_orig_load_control and g_auto_resolve_dep. Automated actions are all enabled or all disabled to simplify tests and configurations. * testsuite/modules.00-init/006-procs.exp, testsuite/modules.00-init/071-args.exp, testsuite/modules.10-use/040-load.exp, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/035-defname.exp, testsuite/modules.20-locate/038-defcontext.exp, testsuite/modules.20-locate/040-alias.exp, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.20-locate/046-getsym.exp, testsuite/modules.20-locate/047-symerrs.exp, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.20-locate/075-symlink.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/020-setenv.exp, testsuite/modules.50-cmds/022-setenv-eschars.exp, testsuite/modules.50-cmds/025-setenv-undo.exp, testsuite/modules.50-cmds/028-setenv-refcount.exp, testsuite/modules.50-cmds/029-setenv-env.exp, testsuite/modules.50-cmds/030-unsetenv.exp, testsuite/modules.50-cmds/035-unsetenv-undo.exp, testsuite/modules.50-cmds/036-unsetenv-x.exp, .../modules.50-cmds/038-unsetenv-refcount.exp, testsuite/modules.50-cmds/039-unsetenv-env.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/049-append-env.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/059-prepend-env.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/069-remove-env.exp, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/076-alias-sub.exp, testsuite/modules.50-cmds/077-alias-undo.exp, testsuite/modules.50-cmds/078-refresh.exp, testsuite/modules.50-cmds/080-info-name.exp, testsuite/modules.50-cmds/081-info-user.exp, testsuite/modules.50-cmds/082-info-user-exp.exp, testsuite/modules.50-cmds/083-info-mode.exp, testsuite/modules.50-cmds/084-info-mode-exp.exp, testsuite/modules.50-cmds/085-info-flags.exp, testsuite/modules.50-cmds/086-info-shells.exp, testsuite/modules.50-cmds/087-info-shells-exp.exp, testsuite/modules.50-cmds/088-info-isloaded.exp, testsuite/modules.50-cmds/089-info-type.exp, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/100-loglevel.exp, testsuite/modules.50-cmds/101-badfac.exp, testsuite/modules.50-cmds/105-trace.exp, testsuite/modules.50-cmds/110-verbose.exp, testsuite/modules.50-cmds/115-verbose-msg.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp, .../modules.50-cmds/132-conflict-fullpath.exp, testsuite/modules.50-cmds/140-system.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/172-swap-app-delim.exp, testsuite/modules.50-cmds/173-swap-app-delim.exp, testsuite/modules.50-cmds/175-swap2.exp, testsuite/modules.50-cmds/177-swap-prep-delim.exp, testsuite/modules.50-cmds/178-swap-prep-delim.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/195-load-recurs.exp, testsuite/modules.50-cmds/197-load-lots.exp, testsuite/modules.50-cmds/200-break.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/220-continue.exp, testsuite/modules.50-cmds/230-loop.exp, testsuite/modules.50-cmds/240-chdir.exp, testsuite/modules.50-cmds/250-x-resource.exp, testsuite/modules.50-cmds/260-getenv.exp, testsuite/modules.50-cmds/269-getenv-env.exp, testsuite/modules.50-cmds/280-info-specified.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.50-cmds/285-info-loaded.exp, testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.50-cmds/301-interp-command.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.50-cmds/310-puts.exp, testsuite/modules.50-cmds/320-is-saved.exp, testsuite/modules.50-cmds/321-is-used.exp, testsuite/modules.50-cmds/322-is-avail.exp, testsuite/modules.50-cmds/330-source.exp, testsuite/modules.50-cmds/340-modvar.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/359-allin-env.exp, testsuite/modules.50-cmds/360-restoreenv.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/080-access.exp, testsuite/modules.70-maint/020-update.exp, testsuite/modules.70-maint/030-purge.exp, testsuite/modules.70-maint/050-whatis-load.exp, testsuite/modules.70-maint/140-multiargs.exp, testsuite/modules.70-maint/180-reload.exp, testsuite/modules.70-maint/190-emptyarg.exp, testsuite/modules.80-deep/020-load.exp, testsuite/modules.80-deep/021-unload.exp, testsuite/modules.80-deep/022-switch.exp, testsuite/modules.80-deep/068-transitive.exp, testsuite/modules.80-deep/080-access.exp, testsuite/modules.91-sort/040-load.exp, testsuite/modules.95-version/020-load.exp, testsuite/modules.95-version/020-unload.exp, testsuite/modules.95-version/022-load2.exp, testsuite/modules.95-version/022-unload2.exp, testsuite/modules.95-version/040-xgetenv.exp: ts: adapt test results for asked mod registration 2018-05-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Register module asked for load in MODULES_LMUASKED Change name of the environment variable used to register the names of modules explicitely asked for load by user (not loaded automatically as dependency): from _LMSTICKY_ to MODULES_LMUASKED in order to get a MODULES_ common prefix for all Modules-specific environment variables. 2014-05-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Introducing automatic module dependency resolution Introduce an automatic module dependency resolution by attempting during a "module load" to load modules declared as prereq and attempting during a "module unload" to unload modules declared as prereq if they have been loaded automatically. To distinguish between modules loaded upon user request or automatically for dependency resolution, module load requested by user are registered as "sticky" in _LMSTICKY_ environment variable. Additionnally all switched modules are considered sticky. Module commands managing the whole set of loaded modules (save, restore, purge and reload) have been adapted to only work over the sticky modules to take benefit from the dependency resolution. Moreover, when reloading modules declaring a prereq during a switch, load or unload action, only sticky modules are reloaded. Original dependency management behavior is preserved by default. Automatic dependency resolution can be enabled by setting to 0 the g_auto_resolve_dep variable in modulecmd.tcl script. 2018-04-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/006-procs.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/350-allin.exp: ts: adapt test results for prereq registration 2018-04-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Register declared prereq in MODULES_LMPREREQ Change name of the environment variable used to register prereqs declared by loaded modules: from _LMPREREQ_ to MODULES_LMPREREQ in order to get a MODULES_ common prefix for all Modules-specific environment variables. 2014-04-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Registering prereq of loaded modules to ensure they are satisfied When defining a prereq with module "b" in module "a", this prereq is not satisfied when module "b" is unloaded whereas module "a" is still loaded. It seems interesting to guaranty that prereq modules cannot be unloaded if modules requiring them are still loaded. To do so, this patch introduces the registration of the prereq declared by loaded modules in _LMPREREQ_ environment variable. Checks have been added to cmdModuleUnload procedure to forbid the unload of modules targeted by a registered prereq. In case of a switch action, all modules declaring a prereq on the switched module are reloaded. cmdModuleSwitch procedure first unloads the modules declaring prereq, then proceed switch as usual and after that loads again the modules declaring prereq. Similarly to switch action, modules declaring an optional prereq on a module are reloaded when this module is loaded or unloaded. cmdModuleLoad and cmdModuleUnload procedures reload the modules declaring prereq after their main load/unload process to avoid reloading modules whereas prereq-module fails to load/unload. Original load control behavior is preserved by default. New behavior can be enabled by setting to 0 the g_orig_load_control variable in modulecmd.tcl script. 2018-04-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/006-procs.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp, testsuite/modules.50-cmds/132-conflict-fullpath.exp, testsuite/modules.50-cmds/195-load-recurs.exp, testsuite/modules.80-deep/020-load.exp, testsuite/modules.80-deep/022-switch.exp, testsuite/modules.80-deep/080-access.exp: ts: adapt test results for conflict registration * modulecmd.tcl.in: Register declared conflict in MODULES_LMCONFLICT Change name of the environment variable used to register conflicts declared by loaded modules: from _LMCONFLICT_ to MODULES_LMCONFLICT in order to get a MODULES_ common prefix for all Modules-specific environment variables. 2014-03-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Registering conflict of loaded modules to ensure they are satisfied When defining a conflict with module "b" in module "a", this conflict is not satisfied when loading module "b" unless this module defines a conflict with "a". Since it happens that modules "a" and "b" are not managed by the same people, it seems interesting to guaranty that conflicts defined by loaded modules are always satisfied. To do so, this patch introduces the registration of the conflict declared by loaded modules in _LMCONFLICT_ environment variable. Checks have been added to cmdModuleLoad procedure to forbid the load of modules targeted by a registered conflict. Since modulefile may directly call module load, an is-loading procedure has been introduced to also ensure that current module will not be loaded if it defines a conflict toward a module which is currently loading. Original load control behavior is preserved by default. New behavior can be enabled by setting to 0 the g_orig_load_control variable in modulecmd.tcl script. 2018-07-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile: install: simplify RPM release number generation Just append current build number to previous RPM release number, rather making a complex and too much specific computation. Thanks to Michael Sternberg (@mgsternberg) for challenging the way this numbering generation worked. Fixes #175 2018-07-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst, Makefile, configure: install: use sed rather grep and cut Use sed command rather a combination of grep and cut in 'configure' and 'Makefile' scripts. As a result grep and cut commands are not required anymore to install new Modules releases. However, grep is still required to install compatibility version. Big thanks to Michael Sternberg (@mgsternberg) for crafting the right sed commands to achieve a more efficient installation process. Fixes #175 * init/ksh.in: init: fix ksh script for ksh88 compatibility Fix a ksh88 incompatible assignment and use '.' rather 'source' to source external script. Fixes #159 * modulecmd.tcl.in, testsuite/modulefiles/loc_rc010/.1.0, testsuite/modulefiles/loc_rc010/.modulerc, testsuite/modulefiles/loc_rc010/2.0, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.90-avail/070-full.exp: Handle default version sets on an hidden modulefile When looking for the default version of a given modulefile, if this default is set on an hidden modulefile, this hidden modulefile were not found as the initial modulefile search were not looking for hidden modulefiles. When this situation is now spotted, modulefile search is started again with inclusion of hidden files. Add a test for this situation in 20-locate/067-hidden. Fixes #177 * init/bash_completion.in, init/zsh-functions/_module: init: enable ERE on sed with '-E' argument rather '-r' When enabling Extended Regular Expression (ERE) on sed command, use the '-E' argument (rather '-r') for compatibility with OS X's and BSDs' sed. 'sed -E' is used in bash and zsh completion scripts. ERE are required to interpret alternation character '|'. Fixes #178 2018-07-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/modulefile.rst: doc: state in modulefile(4) getenv should be pref. over ::env 2018-06-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, Makefile.inc.in, configure: install: relax GNU grep requirement constraint Rely on regular grep options rather grep -P to better cope with OSes where BSD grep is available by default. 2018-06-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version 4.1.3 2018-06-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/profile.sh.in: Detect shell with variables in profile.sh script To improve shell detection code that until now was relying on a parent process name check, some shell variables will be used to determine the current shell name. $BASH and $ZSH_NAME variables will be looked at if defined to determine calling shell name. Doing so will avoid some external command call when running bash or zsh. Also if people source /etc/profile script in their own bash or zsh script it will correctly determine calling shell name, as parent process in this case is the script name. Cannot determine shell name on ksh with a variable due to the lack of a consistent detection mechanism across all ksh flavors [1]. Fixes #173 [1] https://books.google.fr/books?id=53zaxy423xcC&pg=PA161 2018-05-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_v3_v4.rst: doc: env var definition during a whatis mode eval 2018-05-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles.deep/moddalias/.modulerc, testsuite/modulefiles.deep/moddalias/dir1/1, testsuite/modulefiles.deep/moddalias/dir2/.ignored, testsuite/modules.80-deep/010-init_ts.exp, testsuite/modules.80-deep/020-load.exp, testsuite/modules.80-deep/021-unload.exp, testsuite/modules.80-deep/030-display.exp, testsuite/modules.80-deep/050-whatis.exp, testsuite/modules.80-deep/999-cleanup.exp, testsuite/modules.90-avail/070-full.exp: If subdir is empty do not update parent dir if overwritten During a modulefile lookup in getModules, directory definitions are updated if some empty directories are found in them. Do not attempt this directory definition update when finding an empty directory if parent directory has been overwritten by an alias definition for instance. Fixes #170 2018-05-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles.allin/allenvchg/1, testsuite/modulefiles.allin/allenvchg/2, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/359-allin-env.exp: Setenv on unload mode set var to val in interp context Interpreting a setenv modulefile order during an unload evaluation, variable is still set to be unset in generated shell code but it is set to the value defined on the setenv order in the interpreter context instead of being cleared. This change is made to recover and improve behavior of compat version and previous version of modulecmd.tcl where variable's value found in environment were not touch in interpreater context. This is useful when using environment variable value to append/prepend-path another variable. This change enables to correctly unset this other variable on an unload evaluation. Was previously not unset since the first variable used to edit the second was found cleared. This change is currently limited to the setenv order and does not apply to the prepend-path and append-path, where during an unload evaluation variable value part is removed from variable also in interpreter context. Need to distinguish value in interpreter context from value to set in shell output code to also apply this mechanism to path edition modulefile orders. 2018-05-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/bin/install_test_sh, testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/020-module.exp, testsuite/modulefiles/alias/3.0, testsuite/modules.00-init/006-procs.exp, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/076-alias-sub.exp, testsuite/modules.90-avail/070-full.exp: Define shell alias with special chars escaped When producing code to output shell alias definition, escaping of special characters was missing until now in renderSettings procedure. Code to bake shell alias has been fixed to work in a similar way than for environment variable with full range of shell special characters escaped. Translation of $n/$* in !!:n/!* on csh-like shells is maintained for compatibility with v3. To improve this compatibility, a \ prior to $ disables translation on csh (like with v3), then after \$ is translated in $ for all shells. Adapt testsuite to use value escaping over expected output result for shell alias (like done for environment variable). Adapt consequently all shell alias tests in 50-cmds/07*. Add test in 50-cmds/076-alias-sub to demonstrate escaping of complex shell alias. Use modulefile from this new test within install testsuite to garanty shell alias produce is effective on shell sessions. Check availability of tools used by this alias (grep, tr, awk) to determine if install test can be launched on current system. Fixes #165 * testsuite/modules.00-init/006-procs.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/150-append-path.exp, testsuite/modules.70-maint/151-prepend-path.exp, testsuite/modules.70-maint/152-remove-path.exp: ts: fix special chars escaping code in values Add more special characters to the escaping list for regular shells. And fix code to over escape special characters relative to regular expression when regexp mode is enabled. * testsuite/bin/install_test_sh, testsuite/install.00-init/040-subshell.exp: ts: fix word splitting for zsh test in install suite 2018-05-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Quote csh generated code to pass it to eval Brace modulecmd.tcl call in module csh alias with quotes to pass quoted content to the shell evaluation. Use :q modifier on !* to escape quotes passed as arguments to the module command * init/bash.in, init/ksh.in, init/sh.in, init/zsh.in: init: init/export _module_raw if stderr attached to term To get coherent with the test made by modulecmd.tcl to determine if autoinit sub-command has to produce code for the '_module_raw' shell function, export this function (or initialize it on compat mode) if stderr is attached to a terminal. Was previously testing stdout, whereas modulecmd.tcl is checking stderr, which led to inconsistencies as described in [1]. Fixes #169 [1] https://bugzilla.redhat.com/show_bug.cgi?id=1575479 2018-05-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/guide/get_started/00-cleanup.sh, contrib/guide/get_started/01-modulepath-modulerc.sh, .../guide/get_started/02-first_module-install.sh, contrib/guide/get_started/03-first_module-bar.sh, contrib/guide/get_started/04-second_modulefile.sh, contrib/guide/get_started/05-more_modulefile-foo.sh, .../guide/get_started/06-more_modulefile-share.sh, .../guide/get_started/07-guide_modulefile_search.sh, .../get_started/08-guide_modulefile_search-alias.sh, contrib/guide/get_started/09-global_modulerc.sh, contrib/guide/get_started/10-restrict_visibility.sh, contrib/guide/get_started/11-restore_visibility.sh, contrib/guide/get_started/12-datadir-create.sh, contrib/guide/get_started/13-datadir-common.sh, contrib/guide/get_started/14-datadir-versions.sh, contrib/guide/get_started/15-datadir-virtual.sh, contrib/guide/get_started/16-conflict.sh, contrib/guide/get_started/17-prereq.sh, contrib/guide/get_started/18-collection-target.sh, contrib/guide/get_started/19-siteconfig.sh, contrib/guide/get_started/README, contrib/guide/get_started/test.py: contrib: add scripts from upcoming 'get started' guide 2018-05-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * MIGRATING.rst, doc/source/module.rst, modulecmd.tcl.in, testsuite/config/unix.exp, testsuite/modules.00-init/071-args.exp: Args should be passed as list not single string Update documentation for module usage on scripting language like Perl or Python to provide examples where arguments are passed as a list of string rather a single string. For compatibility with previously advertised examples, first argument is splitted if multiple word are detected in it. 2018-05-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Clean unneeded global variable set in slave interp * modulecmd.tcl.in: Pass cur itrp ref in initInterpCommands to aliases needing it Sets in initInterpCommands procedure interpreter reference as first argument to interpreter alias requiring it, rather doing it in initModfileModeAliases where actual interpreter reference is not known (as this procedure is called at first time a mode-specific interp is created, but not on subsequent times when another interp of same mode but working in a nested level is build up). Now initModfileModeAliases defines a specific __itrp__ keyword to let initInterpCommands know that the argument to pass to the alias to define is the actual interp reference. * modulecmd.tcl.in, testsuite/modules.70-maint/080-help.exp: Add getEvalModuleStackDepth to learn nb of mod in eval Get the number of either modulerc/modulefile currently being evaluated (nested evaluation) with a new procedure called getEvalModuleStackDepth, relying on the number of element of the g_moduleNameStack global list. Use this new procedure rather [info level] to determine if module procedure is called at top level or not and to determine the slave interpreter to use (an interpreter is reused to evaluate a modulefile from same evaluation nested level). Gives a more precise information on modulefile evaluation depth level than [info level] which reflects Tcl procedure call stack depth. * .travis.yml: travis: test --enable-append-{bin,man}path configure opts * INSTALL.rst, Makefile.inc.in, configure, init/Makefile, init/bash.in, init/csh.in, init/fish.in, init/ksh.in, init/sh.in, init/zsh.in: install: add --enable-append-{bin,man}path configure opts Add the ability to append rather prepend the man or bin directory when adding these directory to the relative environment variable is enabled (with --enable-set-manpath or --enable-set-binpath). Takes the form of 2 new configure options: --enable-append-manpath and --enable-append-binpath. No effect if set but relative --enable-set-{bin,man}path option is unset or disabled. 2018-05-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash.in, init/ksh.in, init/sh.in, init/zsh.in, modulecmd.tcl.in, testsuite/install.00-init/010-environ.exp, testsuite/modules.70-maint/120-autoinit.exp: Rename _moduleraw shell func in _module_raw To use a common _module_ prefix for all module-related internal shell functions as suggested by Paul FM [1]. [1] https://sourceforge.net/p/modules/mailman/message/36230667/ * modulecmd.tcl.in: Call runModulerc within module proc at top level Call runModulerc, to find and execute any global rc file found, within module procedure once module sub-command is known and registered. This way global rc file can learn the current command processed. 2018-05-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Use getModuleNameVersion in execute-modulerc to get mod details * modulecmd.tcl.in: Track sourced rc files in getModules rather execute-modulerc Handle g_rcfilesSourced global array that track sourced rc files in getModules procedure rather execute-modulerc procedure. This way only call execute-modulerc procedure if rc file has not yet been sourced. It saves a lot of procedure call especially in case of global query command like whatis, where initial global findModules result is re-used for each sub-query raised during modulefile evaluation. 2018-03-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Cache findModules results Introduce a memory cache for the results build up by findModules procedure. Done in order to reuse these results if next searches are compatible instead of re-walking the filesystem. A cached result may be used by a search looking for a subset of this result. For instance searching for modules 'foo' in '/path/to/dir' may use the cache result saved after the search of '*' modules in 'path/to/dir'. This superset result is then filtered-out whithin the getModules procedure. 2018-04-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Fix resetInterpState to restore empty string value Useful to restore initial value of ::errorCode and ::errorInfo. * modulecmd.tcl.in: Set reportDebug as nop proc when debug is disabled Define in initErrorReport the reportDebug procedure as a no-operation procedure to optimize operations whether debugging is enabled or not. * modulecmd.tcl.in, testsuite/modules.50-cmds/359-allin-env.exp: Set *setenv cmds as init-if-undef proc on whatis mode Define a specific procedure for the setenv and unsetenv commands on a whatis evaluation mode: setenv-wh. This procedure checks the environment variable targeted by the command and initialize it as an empty string if undefined. Proceed this way to reduce the total amount of time of a whatis query but still initializing variables if undefined to avoid 'undefined variable' errors during evaluation if environment variable value are referred to later in modulefile. Value set to variable are not the correct one (no value set if variable defined, empty string set if variable is undefined) but it should not affect the whatis query as only the 'module-whatis' commands are valuable in this mode. * modulecmd.tcl.in, testsuite/modules.50-cmds/359-allin-env.exp: Set *-path cmds as init-if-undef proc on whatis mode Define a specific procedure for the append-path, prepend-path and remove-path commands on a whatis evaluation mode: edit-path-wh. This procedure checks the environment variable targeted by the command and initialize it as an empty string if undefined. Proceed this way to reduce the total amount of time of a whatis query but still initializing variables if undefined to avoid 'undefined variable' errors during evaluation if environment variable value are referred to later in modulefile. Value set to variable are not the correct one (no value set if variable defined, empty string set if variable is undefined) but it should not affect the whatis query as only the 'module-whatis' commands are valuable in this mode. 2018-04-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Fallback on split/join in psplit/pjoin if no sep char found Achieve better performances in most cases (as separator character is usualy not used) 2018-04-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Remove unneeded g_inhibit_dispreport As modulefile commands do not handle anymore their display-mode report, display report inhibition for modulerc evaluation is not needed anymore. * modulecmd.tcl.in, testsuite/modulefiles.allin/allin/1, testsuite/modulefiles.allin/allin/3, testsuite/modulefiles.allin/allin/4, testsuite/modulefiles.other/modemptyarg/apropos, testsuite/modulefiles.other/modemptyarg/avail, testsuite/modulefiles.other/modemptyarg/whatis, testsuite/modulefiles/modbad/append-path, testsuite/modulefiles/modbad/autoinit, testsuite/modulefiles/modbad/empty, testsuite/modulefiles/modbad/foo, testsuite/modulefiles/modbad/help, testsuite/modulefiles/modbad/info-loaded, testsuite/modulefiles/modbad/is-avail, testsuite/modulefiles/modbad/is-loaded, testsuite/modulefiles/modbad/is-saved, testsuite/modulefiles/modbad/is-used, testsuite/modulefiles/modbad/path, testsuite/modulefiles/modbad/paths, testsuite/modulefiles/modbad/prepend-path, testsuite/modulefiles/modbad/remove-path, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.50-cmds/330-source.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.80-deep/030-display.exp: Move 'module' to the per-mode evaluation interp 'module' modulefile command targets module procedure on load and unload modes of modulefile evaluation. reportCmd is targeted on display mode. For other modes a nop is targeted. 'module' command is now disabled on help, test and whatis mode which stabilizes evaluation on these modes. On Modules v3, module command was also disabled on all these query evaluation modes. 2018-04-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/350-allin.exp: Move 'x-resource' to the per-mode evaluation interp 'x-resource' modulefile command targets x-resource procedure on load and unload modes of modulefile evaluation. reportCmd is targeted on display mode. For other modes a nop is targeted. * modulecmd.tcl.in: Move 'module-virtual' to the per-mode evaluation interp 'module-virtual' modulefile command targets module-virtual procedure on every mode of modulefile evaluation. * modulecmd.tcl.in: Move 'module-alias' to the per-mode evaluation interp 'module-alias' modulefile command targets module-alias procedure on every mode of modulefile evaluation. * modulecmd.tcl.in: Move 'module-version' to the per-mode evaluation interp 'module-version' modulefile command targets module-version procedure on every mode of modulefile evaluation. * modulecmd.tcl.in, testsuite/modules.20-locate/035-defname.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/140-multiargs.exp, testsuite/modules.70-maint/170-contact.exp: Brace empty or whitespace-containing arg on reportCmd reportCmd processes the argument list of the called command to brace empty arguments or arguments containing whitespace character. Makes visible for a human eye the limit of each parameter (especially for empty strings). * modulecmd.tcl.in, testsuite/modules.50-cmds/039-unsetenv-env.exp, testsuite/modules.50-cmds/069-remove-env.exp, testsuite/modules.50-cmds/140-system.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/359-allin-env.exp, testsuite/modules.70-maint/140-multiargs.exp: Trace exec to reportCmd on display mode enabled cmds For those commands enables on display mode (commands that are also run on this mode, not only reported, like */*-path commands): use an execution trace (at leave step) to call for the report commands after running the enabled procedure. With this change these enabled-on-display commands do not have to handle their display reporting anymore. Current evaluation mode can now be ignored by these procedures. The reportCmdTrace procedure is introduced to be set as the execution trace procedure in case alias command for modulefile interp is not set to reportCmd on a display evaluation mode. As a side effect of this change, commands are reported even if their execution raise an error (helps to see the command line along with raised error message). 2018-04-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Refactor code of getenv command Same kind of debug message or mode test than used in other modulefile command procedures. g_inhibit_dispreport test is not needed as getenv cannot be reached from a modulerc evaluation 2018-04-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.70-maint/070-display.exp: Move '*-path' to the per-mode evaluation interp 'append-path' modulefile command targets append-path procedure on every mode of modulefile evaluation except unload mode where remove-path is targeted. append-path procedure is called on all these modes to perform variable set for later use of this variable during the modulefile evaluation. 'prepend-path' modulefile command targets prepend-path procedure on every mode of modulefile evaluation except unload mode where remove-path is targeted. prepend-path procedure is called on all these modes to perform variable set for later use of this variable during the modulefile evaluation. 'remove-path' modulefile command targets remove-path procedure on every mode of modulefile evaluation except unload mode where remove-path-un is targeted. remove-path procedure is called on all these modes to perform variable set/unset for later use of this variable during the modulefile evaluation. remove-path-un procedure is used on unload mode to clear variable if currently unset for later use of this variable during eval. * modulecmd.tcl.in, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/055-locrcerrs.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.20-locate/075-symlink.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.20-locate/081-access-rc.exp, testsuite/modules.50-cmds/029-setenv-env.exp, testsuite/modules.50-cmds/039-unsetenv-env.exp, testsuite/modules.50-cmds/049-append-env.exp, testsuite/modules.50-cmds/059-prepend-env.exp, testsuite/modules.50-cmds/069-remove-env.exp, testsuite/modules.50-cmds/140-system.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/260-getenv.exp, testsuite/modules.50-cmds/269-getenv-env.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.50-cmds/310-puts.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/359-allin-env.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/170-contact.exp, testsuite/modules.80-deep/080-access.exp: Move '*setenv' to the per-mode evaluation interp 'setenv' modulefile command targets setenv procedure on every mode of modulefile evaluation except unload mode where setenv-un is targeted. setenv procedure is called on all these modes to perform variable set for later use of this variable during the modulefile evaluation. setenv-un procedure is used on unload mode to call unsetenv with the correct argument list. 'unsetenv' modulefile command targets unsetenv procedure on every mode of modulefile evaluation except unload mode where unsetenv-un is targeted. unsetenv procedure is called on all these modes to perform variable set/unset for later use of this variable during the modulefile evaluation. unsetenv-un procedure is used on unload mode to call setenv or unsetenv depending on the value passed or not as argument. 2018-04-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.70-maint/070-display.exp: Move '*set-alias' to the per-mode evaluation interp 'set-alias' modulefile command targets set-alias procedure on load mode of modulefile evaluation. set-alias-un is targeted on unload mode. reportCmd is targeted on display mode. For other modes a nop is targeted. set-alias-un procedure is used on unload mode to call unset-alias with the correct argument list. 'unset-alias' modulefile command targets unset-alias procedure on load mode of modulefile evaluation. reportCmd is targeted on display mode. For other modes a nop is targeted. * modulecmd.tcl.in: Move 'conflict' to the per-mode evaluation interp 'conflict' modulefile command targets conflict procedure on load mode of modulefile evaluation. reportCmd is targeted on display mode. For other modes a nop is targeted. * modulecmd.tcl.in: Move 'prereq' to the per-mode evaluation interp 'prereq' modulefile command targets prereq procedure on load mode of modulefile evaluation. reportCmd is targeted on display mode. For other modes a nop is targeted. * modulecmd.tcl.in: Move 'module-whatis' to the per-mode evaluation interp 'module-whatis' modulefile command targets module-whatis procedure on whatis mode of modulefile evaluation. reportCmd is targeted on display mode. For other modes a nop is targeted. * modulecmd.tcl.in: Move 'chdir' to the per-mode evaluation interp 'chdir' modulefile command targets chdir procedure on load mode of modulefile evaluation. reportCmd is targeted on display mode. For other modes a nop is targeted. * modulecmd.tcl.in, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp: Move 'module-{log,trace,user,verb}' to the per-mode evaluation interp module-log, module-trace, module-user and module-verbosity modulefile commands target 'nimp' procedure on load and unload modes of modulefile evaluation. reportCmd is targeted on display mode. For other modes a nop is targeted. * modulecmd.tcl.in: Add 'nimp' proc to get a dummy 'not implemented' target * modulecmd.tcl.in: Disable chdir,module{,-trace,-log,-user,-verbosity} from modulerc eval Make chdir, module, module-trace, module-verbosity, module-user and module-log commands target the 'nop' procedure on modulerc interpreter. These commands were declared for modulerc evaluation but this did not make any sense as their action only concern modulefile evaluation. * modulecmd.tcl.in: Move 'system' to the per-mode evaluation interp 'system' modulefile command targets system procedure on load and unload modes of modulefile evaluation. reportCmd is targeted on display mode. For other modes a nop is targeted. 'system' can also currently be called from a modulerc evaluation when load or unload mode is detected. Kept as is for the moment. May/should change for next major release. * modulecmd.tcl.in: Add 'reportCmd' proc to use as target for display mode If interpreter alias command targets the reportCmd procedure, make sure command name is passed as first argument. * modulecmd.tcl.in: Define arg to pass to interp aliases in initModfileModeAliases Transform g_modfileAliasesPassItrp, array listing aliases where the interpreter name should be passed as alias command first argument, into g_modfile${mode}AliasesPassArg, array listing first argument to pass to particular aliases. The new structure is defined per evaluation mode (a specific alias/argument list per mode). So its definition is moved from execute-modulefile to initModfileModeAliases. 2018-04-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add 'nop' proc to get a dummy target for certain eval mode * modulecmd.tcl.in: Adapt interp alias commands to the evaluation mode Make interpreter alias command targets vary depending on the evaluation mode to adapt behavior of modulefile commands to the currently run module command. For instance a 'setenv' command is evaluation as an 'unsetenv' command when unloading a modulefile. This commit lays the groundwork to adapt modulefile commands to the evaluation mode. All commands are kept for the moment in the situation where the same procedure is applied to all evaluation modes. * modulecmd.tcl.in: Define slave interp cmds in initInterpCommands proc * modulecmd.tcl.in, testsuite/modulefiles/spread/2.0, testsuite/modulefiles/spreadrc/dir2/1.0, testsuite/modules.70-maint/080-help.exp: Dedicate a modfile interp for each evaluation mode * modulecmd.tcl.in, testsuite/modules.70-maint/080-help.exp: Use same dump state for same kind of interp Share same dump state between interpreters of the same kind (modfile or modrc) but working at different levels. * modulecmd.tcl.in: Clarify interp name and reportDebug their creation * modulecmd.tcl.in: Push/pop modname and specified in execute-mod* procs 2018-04-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.70-maint/080-help.exp: Automatically prefix debug msgs by calling proc name 2018-03-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Harmonize/reduce execute-module{rc,file} debug msg 2018-04-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_v3_v4.rst: doc: remove-path applied when unloading on compat vers * doc/source/diff_v3_v4.rst: doc: desc. MANPATH special treatment on compat version Describe the difference behavior between Modules 4+ and compatibility version regarding how append-path/prepend-path commands handle the MANPATH environment variable when unset. Helps clarify [1]. [1] https://bugzilla.redhat.com/show_bug.cgi?id=1564899 * modulecmd.tcl.in, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/069-remove-env.exp: Make remove-path clear ::env(var) on unload mode if unset Clears the variable passed to 'remove-path' procedure in ::env() array on unload mode and if this variable is unset for later use during the modulefile evaluation. Helps producing same variable evaluation behavior whatever the evaluation mode, avoiding access to undefined references by defining a cleared but set value to these undefined variables. As a side effect as remove-path command is now evaluated on unload mode, invalid argument on this command will raise error. Previously arguments were not parsed so no error raised on unload mode. 2018-04-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Get env var set value or fallback value with get-env Add a 'get-env' procedure to read values from 'env' array, like what is done with 'set-env' for setting value. Distinguish set environment variable from cleared one with help of g_clearedEnvVars array. * modulecmd.tcl.in, testsuite/modulefiles/getenv/0.6, testsuite/modules.50-cmds/269-getenv-env.exp, testsuite/modules.50-cmds/359-allin-env.exp: Keep track of cleared env var in g_clearedEnvVars When unsetting (clearing) an environment variable in 'unset-env' procedure, keep track of it in a g_clearedEnvVars array to be able to distinguish later on, in 'getenv' procedure, if variable is equal to an empty string or if it has been unset (cleared). * testsuite/modulefiles.allin/allenvchg/1, testsuite/modulefiles.allin/allenvchg/2, testsuite/modules.50-cmds/359-allin-env.exp: ts: add 50-cmds/359-allin-env tests Check environment variable change commands all together over the different modulefile evaluation modes. * doc/source/modulefile.rst, modulecmd.tcl.in, testsuite/modulefiles/getenv/1.0, testsuite/modules.50-cmds/260-getenv.exp: Add valifundef arg to getenv procedure Allow to define value to return if variable name passed to the getenv procedure is undef. Add a description of 'getenv' command in the modulefile man page. * modulecmd.tcl.in, testsuite/modulefiles/getenv/0.6, testsuite/modules.50-cmds/269-getenv-env.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.90-avail/070-full.exp: Make getenv return value on help/test/whatis modes 2018-04-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/029-setenv-env.exp, testsuite/modules.50-cmds/039-unsetenv-env.exp, testsuite/modules.50-cmds/049-append-env.exp, testsuite/modules.50-cmds/059-prepend-env.exp, testsuite/modules.50-cmds/069-remove-env.exp, testsuite/modules.50-cmds/350-allin.exp: Clear env var even if not set on unset-env On 'unset-env' procedure, clears environment variable whether it is set or not to get consistent behavior whatever the current environment setup on later references of this variable during modulefile evaluation. Adapt 029-setenv-env, 039-unsetenv-env, 049-append-env, 059-prepend-env and 069-remove-env test cases: no more 'no such variable' errors. * modulecmd.tcl.in, testsuite/modulefiles.allin/allin/1, testsuite/modulefiles/unsetenv/0.6, testsuite/modules.50-cmds/039-unsetenv-env.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/070-full.exp: Make unsetenv alter ::env() on display/help/test/whatis modes Like previously done for 'remove-path', set the variable passed to 'unsetenv' procedure in ::env() array to make accurate value available for later use during the modulefile evaluation. Add 50-cmds/039-unsetenv-env test to check this ::env() array change over all evaluation mode. Adapt 50-cmds/350-allin to check this change against 'whatis' mode. 2018-04-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles/remove/5.0, testsuite/modules.50-cmds/069-remove-env.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.90-avail/070-full.exp: Make remove-path alter ::env() on display/help/test/whatis modes Like previously done for 'append-path', set the variable passed to 'remove-path' procedure in ::env() array to make accurate value available for later use during the modulefile evaluation. As a side effect as remove-path command is now evaluated on help, test, display and whatis modes, invalid argument on this command will raise error. Previously arguments were not parsed so no error raised. Add 50-cmds/069-remove-env test to check this ::env() array change over all evaluation mode. Adapt 50-cmds/350-allin to check this change against 'whatis' mode. * testsuite/modulefiles/setenv/0.7.1, testsuite/modulefiles/setenv/0.7.2, testsuite/modules.50-cmds/028-setenv-refcount.exp, testsuite/modules.90-avail/070-full.exp: ts: add tests to 50-cmds/028-setenv-refcount Test load and unload mode on modulefiles where setenv and append-path commands play on same variable. Check both ways: setenv then append-path or appen-path then setenv. 2018-04-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Set env var and propagate creation with set-env Make use of the 'set-env' procedure to set an environment variable and propagate creation to the running shell (outputing set command to stdout). Creation is propagated only if currently in 'load' or 'unload' evaluation mode. 2018-04-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/049-append-env.exp, testsuite/modules.50-cmds/180-unload.exp: Unset any ref cnt var on setenv/unsetenv in any mode Whatever the evaluation mode, unset any existing reference counter variable when running setenv/unsetenv commands. Adapt and add tests to put in light behaviors when unloading a standardly-set variable going through append-path/prepend-path. The standardly-set variable is transformed into a path-like variable through the evaluation, resulting in the end in the definition of a reference counter variable (if variable is not setenv/unsetenv during evaluation) or in the deletion of this reference counter variable (if setenv/unsetenv during evaluation). 2018-04-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.70-maint/152-remove-path.exp, testsuite/modules.70-maint/190-emptyarg.exp: Delete env var and propagate deletion with unset-env Make use of the 'unset-env' procedure to delete an environment variable and propagate deletion to the running shell (outputing deletion command to stdout). Deletion is propagated only if currently in 'load' or 'unload' evaluation mode. unset-env procedure distinguishes environment variables from those set for Modules internal use, like path reference counter variables. Internal variables are purely unset whereas other environment variables are just cleared, not unset, to avoid breaking later reference to these variables in modulefiles. In case of environment variable for internal use, variable deletion is propagated to shell only if variable was found set. Aligning all unsets on this rule gives no unset of reference counter variable on unload mode if the variable is not found defined at that time. Adapt expected test results for the above side effect. 2018-04-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/029-setenv-env.exp, testsuite/modules.50-cmds/049-append-env.exp, testsuite/modules.50-cmds/059-prepend-env.exp, testsuite/modules.70-maint/152-remove-path.exp: ts: use helper procs to set env vars on env var set tests 2018-04-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/050-modpath.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/032-prepend.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.10-use/080-access.exp, testsuite/modules.10-use/090-bad.exp, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.50-cmds/010-init_ts.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, .../modules.50-cmds/132-conflict-fullpath.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/321-is-used.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/360-restoreenv.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/055-whatis.exp, testsuite/modules.70-maint/056-whatis-nullpath.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/100-path.exp, testsuite/modules.70-maint/110-paths.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.70-maint/153-is-loaded.exp, testsuite/modules.70-maint/155-is-used.exp, testsuite/modules.70-maint/190-emptyarg.exp, testsuite/modules.80-deep/010-init_ts.exp, testsuite/modules.80-deep/021-unload.exp, testsuite/modules.80-deep/999-cleanup.exp, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/070-full.exp, testsuite/modules.91-sort/010-init_ts.exp, testsuite/modules.91-sort/020-avail.exp, testsuite/modules.95-version/010-init_ts.exp, testsuite/modules.95-version/999-cleanup.exp: ts: use helper procs to set MODULEPATH env var 2018-04-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/006-procs.exp, testsuite/modules.20-locate/038-defcontext.exp, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/025-setenv-undo.exp, testsuite/modules.50-cmds/029-setenv-env.exp, testsuite/modules.50-cmds/035-unsetenv-undo.exp, testsuite/modules.50-cmds/036-unsetenv-x.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/049-append-env.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/059-prepend-env.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/077-alias-undo.exp, testsuite/modules.50-cmds/078-refresh.exp, testsuite/modules.50-cmds/083-info-mode.exp, testsuite/modules.50-cmds/084-info-mode-exp.exp, testsuite/modules.50-cmds/085-info-flags.exp, testsuite/modules.50-cmds/088-info-isloaded.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/130-conflict-full.exp, .../modules.50-cmds/132-conflict-fullpath.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/172-swap-app-delim.exp, testsuite/modules.50-cmds/173-swap-app-delim.exp, testsuite/modules.50-cmds/175-swap2.exp, testsuite/modules.50-cmds/177-swap-prep-delim.exp, testsuite/modules.50-cmds/178-swap-prep-delim.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/195-load-recurs.exp, testsuite/modules.50-cmds/197-load-lots.exp, testsuite/modules.50-cmds/200-break.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/220-continue.exp, testsuite/modules.50-cmds/230-loop.exp, testsuite/modules.50-cmds/240-chdir.exp, testsuite/modules.50-cmds/250-x-resource.exp, testsuite/modules.50-cmds/280-info-specified.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.50-cmds/285-info-loaded.exp, testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.50-cmds/301-interp-command.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.50-cmds/330-source.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.50-cmds/360-restoreenv.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.70-maint/020-update.exp, testsuite/modules.70-maint/030-purge.exp, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/045-listlong.exp, testsuite/modules.70-maint/055-whatis.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/140-multiargs.exp, testsuite/modules.70-maint/153-is-loaded.exp, testsuite/modules.70-maint/157-info-loaded.exp, testsuite/modules.70-maint/180-reload.exp, testsuite/modules.70-maint/190-emptyarg.exp, testsuite/modules.80-deep/021-unload.exp, testsuite/modules.80-deep/022-switch.exp, testsuite/modules.80-deep/068-transitive.exp, testsuite/modules.90-avail/020-single.exp, testsuite/modules.95-version/020-unload.exp, testsuite/modules.95-version/022-load2.exp, testsuite/modules.95-version/022-unload2.exp, testsuite/modules.95-version/040-xgetenv.exp: ts: add helper procs to set env for tests Add new procedures (unsetenv_loaded_module, setenv_loaded_module, setenv_path_var, unsetenv_path_var, unsetenv_var, setenv_var) to set environment for tests in a consistent way (defining reference counter variable for path-like variables). Adapt all test files to set LOADEDMODULES and _LMFILES_ (and relative reference counter variables) with these new helper procedures. 2018-04-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/350-allin.exp: Clear var in evaluation context on unload mode of setenv To get a more accurate (empty) value when using variable later on during the evaluation of the modulefile. Previously set value (prior to unset) was retrieved and used. * modulecmd.tcl.in: No env var unset on unload-path in evaluation context Do not unset-env in unload-path proc (called by *-path commands) like setenv to avoid breaking later reference to the variable in modulefile. Value is cleared instead. 2018-04-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles.allin/allin/1, testsuite/modulefiles/append/7.0, testsuite/modulefiles/prepend/4.0, testsuite/modules.50-cmds/049-append-env.exp, testsuite/modules.50-cmds/059-prepend-env.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.70-maint/140-multiargs.exp, testsuite/modules.90-avail/070-full.exp: Make append/prepend-path alter ::env() on display/help/test/whatis modes Like previously done for 'setenv', set the variable passed to 'append-path' and 'prepend-path' procedures in ::env() array to make it available for later use during the modulefile evaluation. As a side effect as append-path/prepend-path commands are now evaluated on help, test, display and whatis modes, invalid argument on these commands will raise error. Previously arguments were not parsed so no error raised. Add 50-cmds/049-append-env and 50-cmds/059-prepend-env tests to check this ::env() array change over all evaluation mode. Adapt 50-cmds/350-allin to check this change against 'whatis' mode. * modulecmd.tcl.in: Pass full ref cnt inconsistency msg to reportWarning To inhibit full message in case 'g_inhibit_errreport' is enabled. 2018-04-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles.allin/allin/1, testsuite/modulefiles/setenv/0.6, testsuite/modules.50-cmds/029-setenv-env.exp, testsuite/modules.50-cmds/350-allin.exp, testsuite/modules.90-avail/070-full.exp: Make setenv alter ::env() on help/test/whatis modes Set the variable passed to 'setenv' procedure in ::env() array to make it available for later use during the modulefile evaluation. Add 50-cmds/029-setenv-env tests to check this ::env() array change over all evaluation mode. Adapt 50-cmds/350-allin to check this change against 'whatis' mode. Fixes #160 * testsuite/modulefiles.allin/restoreenv/1, testsuite/modulefiles.allin/restoreenv/2, testsuite/modules.50-cmds/360-restoreenv.exp: ts: add 50-cmds/360-restoreenv tests Test all kind of environment change (variable, alias, chdir, xres, puts) in case the evaluation of a modulefile fails: previous environment context should be restored. * modulecmd.tcl.in: Correctly save/restore x-resource env settings Fix typo on x-resource setting array names 2018-04-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add chdir/puts env settings to the per-mod saved env stack Add the g_changeDir, g_stdoutPuts and g_return_text global variable to the saved environment context. Restore stacked value of these variable in case a load failed for instance, like for env and g_Aliases array variable. * testsuite/modulefiles.allin/allin/1, testsuite/modulefiles.allin/allin/2, testsuite/modulefiles.allin/allin/3, testsuite/modulefiles.allin/allin/4, testsuite/modulefiles.allin/allin/5, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/250-x-resource.exp, testsuite/modules.50-cmds/350-allin.exp: ts: add 50-cmds/350-allin tests Gather all Tcl modulefile commands in few modulefiles and test them against all the existing modes. This commit is a record of the current situation where many inconsistencies can be seen especially on descriptive modes where too many commands are evaluated. 2018-04-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Factorize cmd switch in module proc * modulecmd.tcl.in: Treat list-related options within module proc Handle the options related to list commands (list, savelist and avail) within the module procedure instead of the main procedure. Makes possible to pass these options to the module commands when called from a modulefile or scriptfile. * modulecmd.tcl.in: Remove unused show_flags arg on listModules proc And simplify related display option management. * modulecmd.tcl.in: Handle arg list within cmdModuleAvail proc * modulecmd.tcl.in: Add debug msg at the start of module proc 2018-04-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/060-quar.exp, testsuite/install.00-init/070-stderrtty.exp: ts: fix tests where cmd arg separator were missing * testsuite/modulefiles.other/modemptyarg/aliases, testsuite/modulefiles.other/modemptyarg/apropos, testsuite/modulefiles.other/modemptyarg/avail, testsuite/modulefiles.other/modemptyarg/display, testsuite/modulefiles.other/modemptyarg/list, testsuite/modulefiles.other/modemptyarg/load, testsuite/modulefiles.other/modemptyarg/purge, testsuite/modulefiles.other/modemptyarg/reload, testsuite/modulefiles.other/modemptyarg/restore, testsuite/modulefiles.other/modemptyarg/save, testsuite/modulefiles.other/modemptyarg/savelist, testsuite/modulefiles.other/modemptyarg/saverm, testsuite/modulefiles.other/modemptyarg/saveshow, testsuite/modulefiles.other/modemptyarg/source, testsuite/modulefiles.other/modemptyarg/swap, testsuite/modulefiles.other/modemptyarg/swap2, testsuite/modulefiles.other/modemptyarg/test, testsuite/modulefiles.other/modemptyarg/unload, testsuite/modulefiles.other/modemptyarg/unuse, testsuite/modulefiles.other/modemptyarg/use, testsuite/modulefiles.other/modemptyarg/whatis, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/152-module-emptyarg.exp, testsuite/modules.50-cmds/330-source.exp, testsuite/modules.70-maint/190-emptyarg.exp: ts: add 50-cmds/152-module-emptyarg tests Check module commands set in modulefiles with an empty string argument passed to these commands. This is the "within modulefile" counterpart of 70-maint/190-emptyarg which is targetting command-line test. Check the module commands (with their empty string argument) on every existing mode (load, unload, display, help, test and whatis). Reveal many inconsistencies, especially on the descriptive modes (display, help and test), that should be fixed in future commits. 2018-04-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles/modbad/empty, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.90-avail/070-full.exp: ts: empty mod cmd call check in 50/151-module-onlytop * modulecmd.tcl.in: Handle empty cmd name in module proc only 2018-03-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version 4.1.2 * testsuite/modules.10-use/070-unuse.exp, testsuite/modules.50-cmds/140-system.exp, testsuite/modules.80-deep/080-access.exp: testsuite: fix some re tests for special ts dir 2018-03-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/bin/install_test_sh: testsuite: correct IFS setup in install_test_sh for dash The IFS=$';' notation on dash makes $ character part of field separator list. 2018-03-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/bin/install_test_csh, testsuite/install.00-init/080-args.exp, testsuite/modulefiles.other/putsvar: testsuite: add 080-args test to install suite Add install non-regression tests to check handling of arguments passed on the command line of shell langs of passed to the module function on other langs. Test pass of empty string, string containing space, variable reference, espace stuff and so on. Hardwire some test in install_test_csh script to correctly pass single quote to the tested module command. * testsuite/modules.70-maint/120-autoinit.exp: testsuite: adapt 70/120-autoinit tests to recent changes 2018-03-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/006-procs.exp, testsuite/modules.70-maint/120-autoinit.exp: Add '\' to the escape char list for R "Unless it's escaped, \ is interpreted as a special character that identifies sectioning and mark-up macros." [1] Also temporary fix escaping code for 70-maint/120-autoinit tests: no re escaping for R (need re escaping to better cope with lang escaping). [1] https://developer.r-project.org/parseRd.pdf * testsuite/bin/install_test_cmake: testsuite: fix cmake test install script for args >2 * modulecmd.tcl.in: Fix parameter expansion on sh-shells in quar mode Protect "$@" from the 'eval' command added when quarantine mode is activated. 2018-03-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/bin/install_test_cmake, testsuite/bin/install_test_perl, testsuite/bin/install_test_python, testsuite/bin/install_test_r, testsuite/bin/install_test_ruby, testsuite/bin/install_test_tcl: testsuite: check no arg or empty string arg Adapt tests of install suite to be able to call module function with no passed arg if tested command equals to "NOARG". Also adapt these tests to call module with an empty string argument if tested command equals to empty string. * modulecmd.tcl.in: Fix Python module func to accept no arg Adapt module function for Python to accept being called with no argument. * modulecmd.tcl.in: Empty module cmd clears arg list If an empty command name is passed, it is interpreted as "help" command. For more consistency argument list (after command name) is cleared in this situation to always get the general usage message rather triggering the help mode of an arbitrary modulefile. 2018-03-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/bin/install_test_cmake, testsuite/bin/install_test_perl, testsuite/bin/install_test_python, testsuite/bin/install_test_r, testsuite/bin/install_test_ruby, testsuite/bin/install_test_tcl, testsuite/install.00-init/020-module.exp, testsuite/install.00-init/022-module-compat.exp, testsuite/install.00-init/030-options.exp, testsuite/install.00-init/060-quar.exp, testsuite/install.00-init/070-stderrtty.exp: testsuite: separate cmd args with ',' Adapt tests of install suite to use ',' character as argument separator (on same command) for non-pure shell languages (Tcl, Perl, Python, Ruby, Cmake and R). Help to distinguish a separator between args from a whitespace within an arg. * modulecmd.tcl.in: Fix module func parameter expansion on Perl To correctly handle parameter containing whitespace character or empty string parameter. 2018-03-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Fix module func parameter expansion on CMake To correctly handle parameter containing whitespace character or empty elements. For the latter case, command definition must be adapted to the number of args to be able to pass, to some extend (<5 args) empty string element to modulecmd. There is no other way to achieve empty string element argument as empty strings are skipped from ${ARGV}. [1] [1] https://gitlab.kitware.com/cmake/cmake/issues/16341 2018-03-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Fix module func parameter expansion on R To correctly handle parameter containing whitespace character. 2018-03-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Fix module func parameter expansion on Ruby To correctly handle no passed parameter or parameter containing whitespace character. * modulecmd.tcl.in: Fix module func parameter expansion on fish-shell To correctly handle parameter containing whitespace, quote, escape characters. * modulecmd.tcl.in: Fix module func parameter expansion on sh-shells To correctly handle parameter containing whitespace character. 2018-03-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.70-maint/190-emptyarg.exp: testsuite: add 70-maint/190-emptyarg tests Test all module commands called from cmdline with an empty string argument. Move pre-existing empty-string-argument tests in this new test file. 2018-03-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Return empty res if mod name empty on getLoadedMatchingName * modulecmd.tcl.in: Report error if path is empty string on cmdModuleUnuse Like done on cmdModuleUse. * modulecmd.tcl.in: Return empty res if path empty on getAbsolutePath * modulecmd.tcl.in: Raise error if coll name is empty Add check in getCollectionFilename procedure to raise error if passed collection name is an empty string. Makes collection-related commands quit in error if empty collection name is provided (save, restore, saverm, saveshow, is-saved). No collection name provided still activate default collection, thus no error raise. * modulecmd.tcl.in: Fix default arg for cmdModule{Save*,Restore} procs Default collection name set as default 'coll' argument value is 'default'. Change default value of argument, was '', to directly match default collection name. It enables to distinguish between an empty string argument and default argument value. 2018-03-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Fix handling of empty list on Tcl8.4 lreverse proc Was previously returned a list with 1 empty element instead of a list with 0 element. 2018-03-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: No skip of empty arg on cmdModuleHelp Will be handled by getPathToModule procedure, who will raise error on empty module name. * modulecmd.tcl.in, testsuite/modulefiles/module/empty, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.90-avail/070-full.exp: Report error when empty name passed to getPathToModule Triggered with 'module load ""' call in modulefile. Helps to know what is going on. 2018-03-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: testsuite: fake win platform to check path var handling Separator ';' is used instead of ':' on Windows platform. Add a test leveraging siteconfig.tcl-1 to check path variable handling on a fake Windows platform. Set/get default path variable separator with new getPathSeparator procedure. This way, global variable g_def_separator is defined after parsing the siteconfig.tcl. * testsuite/modulefiles/info/shellsexp, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/006-procs.exp, testsuite/modules.50-cmds/076-alias-sub.exp, testsuite/modules.70-maint/120-autoinit.exp: testsuite: add 'cmd' to the test shell list * modulecmd.tcl.in: Improve Windows cmd shell support * modulecmd.tcl.in, testsuite/example/siteconfig.tcl-1, testsuite/mode, testsuite/modules.90-avail/070-full.exp: Fetch terminal width on Windows with 'mode' cmd Add test with fake 'mode' command to run on Linux. 2018-03-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.61-coll/020-savelist.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.90-avail/070-full.exp: testsuite: check stty can change width before tests * testsuite/modules.00-init/006-procs.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/032-prepend.exp, testsuite/modules.50-cmds/040-append.exp: testsuite: fix tests when value contains parenthesis Escape the environment value like modulecmd does when producing shell code. Careful when test is performed in regexp mode. 2018-03-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/022-module-compat.exp, testsuite/install.00-init/030-options.exp: testsuite: adapt install suite for compat on Cygwin * modulecmd.tcl.in: Rewrite if/return tests in return/expr * Makefile, Makefile.inc.in, configure: install: handle modulecmd exe ext on Cygwin Add EXEEXT Makefile variable in configure/Makefile process to append on Cygwin a '.exe' extension to modulecmd binary built. * modulecmd.tcl.in: Remove unneeded dir 'reglob' for Cygwin in findModules As tested, glob on Cygwin does not change symlink involved in $dir so it does not seem useful anymore to 'reglob' $dir on findModules procedure. * modulecmd.tcl.in: Remove unneeded symlink transformation for Cygwin Symlink created on Cygwin does not get an automatic ".lnk" suffix extension. ".lnk" shortcut made on Windows cannot be interpreted as a symlink either on Cygwin or Windows cmd. Tcl will not recognize a directory or a modulefile when looking at these ".lnk" shortcut. Remove the .lnk file name transformation as it is not useful. In addition, 'isWin' returns false on a Cygwin environment as detected platform on this tool equals to 'unix' not 'windows'. 2018-03-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.10-use/080-access.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.20-locate/081-access-rc.exp, testsuite/modules.60-initx/080-access.exp, testsuite/modules.61-coll/080-access.exp, testsuite/modules.80-deep/080-access.exp: testsuite: fix access tests for Cygwin Check file permission can be edited and check a file in a locked directory is readable or not. Adapt access tests depending on these check results. No access test is perfomed if file permission cannot be edited. * testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/050-crossshell.exp: testsuite: adapt install suite for Cygwin * testsuite/bin/install_test_csh: testsuite: fix csh empty string cmp in install_test_csh * testsuite/modules.50-cmds/040-append.exp: testsuite: fix truncated csh test for escaped content 2018-03-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/095-uname.exp: testsuite: fix uname test for Cygwin * testsuite/modules.10-use/030-use.exp: testsuite: use modules-specific vars for tests in 10-use/030-use * configure: install: look for 'make' on Cygwin 2018-03-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/home/.module/.target: Rm uneeded coll name test in cmdModuleSavelist * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: testsuite: test lm accessor in 00-init/120-siteconfig 2018-03-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/180-reload.exp: testsuite: add 'reload' cmd tests in 70-maint * testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.60-initx/020-add.exp, testsuite/modules.60-initx/050-rm.exp, testsuite/modules.70-maint/030-purge.exp, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/055-whatis.exp, testsuite/modules.70-maint/060-apropos.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.90-avail/020-single.exp: testsuite: check command nicknames * modulecmd.tcl.in: Process mod info before any content output on 'list' cmd * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.70-maint/030-purge.exp, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/055-whatis.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/153-is-loaded.exp, testsuite/modules.70-maint/157-info-loaded.exp, testsuite/modules.90-avail/020-single.exp: Detect inconsistent loaded environment state When needing to correlate the information from the LOADEDMODULES and the _LMFILES_ environment variables. Does not affect module commands not requiring correlation of these informations, like whatis/avail. Error raised on load, unload, switch, reload, purge, list, save and restore commands. May affect info-loaded or is-loaded commands if module passed as argument to these command is specified as a full path modulefile. 2018-03-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Set/get accessors for g_loadedModules{,Files} arrays Define set/get accessor procedures to handle the g_loadedModules and g_loadedModuleFiles arrays. Trigger in the get accessors the load of currently defined information in LOADEDMODULES and _LMFILES_ in the two arrays, by calling the cacheCurrentModules procedure. Make this loading procedure perform its work only once by using a global g_lm_info_cached flag. cacheCurrentModules is not called anymore at the start of the modulecmd execution but only once and when needed. 2018-03-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/071-args.exp: Refactor cmd arg nb test in module proc * modulecmd.tcl.in: Refactor command name setup in module proc * modulecmd.tcl.in: Refactor calling level check for cmd in module proc * modulecmd.tcl.in: Resolve module cmd alias/shortcut prior running cmd * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: testsuite: file read w/o err report in 00/120-siteconfig * testsuite/modules.80-deep/080-access.exp: testsuite: test dfl res when sibbling dir locked Add test in 80-deep/080-access to remove access to a modulefile from a sibbling directory than implicit default for this module. Check that implicit default is not impacted by its sibbling change. 2018-03-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.70-maint/030-purge.exp, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/153-is-loaded.exp: Ignore empty path element in _LMFILES_ If _LMFILES_ environment variable contains empty module element (for instance when it equals to '/path/to/mod1::/path/to/mod2'), this empty element is ignored. This way it ensures all elements from the _LMFILES_ variable are non-empty string. Add tests to check module commands against a _LMFILES_ variable containing empty element. * Makefile: install/testsuite: dl nagelfar from alt. location If primary link is not ok. 2018-03-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.70-maint/030-purge.exp, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/153-is-loaded.exp: Ignore empty path element in LOADEDMODULES If LOADEDMODULES environment variable contains empty module element (for instance when it equals to 'mod1::mod2'), this empty element is ignored. This way it ensures all elements from the LOADEDMODULES variable are non-empty string. Add tests to check module commands against a LOADEDMODULES variable containing empty element. * modulecmd.tcl.in, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/055-whatis.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/100-path.exp, testsuite/modules.70-maint/110-paths.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.70-maint/155-is-used.exp, testsuite/modules.90-avail/070-full.exp: Ignore empty path element in MODULEPATH If MODULEPATH environment variable contains empty path element (for instance when it equals to '/path/to/dir1::/path/to/dir2'), this empty element is ignored. This way it ensures all elements from the MODULEPATH variable are non-empty string. Add tests to check module commands against a MODULEPATH variable containing empty element. 2018-03-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst, init/bash.in, init/ksh.in, init/sh.in, init/zsh.in, testsuite/bin/install_test_sh, testsuite/install.00-init/070-stderrtty.exp: init: shield autoinit res from param expansion on sh-shells Quote autoinit result for eval interpretation on SH-kind shells to avoid parameter expansion to randomly occur on generated code depending on file or directory names of current working directory. Test basic module commands in install testsuite with a 'something (test)' file existing in current working directory. Fixes bug reported at [1]. [1] https://bugzilla.redhat.com/show_bug.cgi?id=1549664 * modulecmd.tcl.in: Fix whatis result on empty dir name * modulecmd.tcl.in, testsuite/modulefiles/puts/8, testsuite/modules.50-cmds/310-puts.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.90-avail/070-full.exp: Call real 'puts' command in caller context To be able to 'puts' content on opened channels, the 'puts' command should be executed from the modulefile interpreter context. Elsewhere, master interpreter does not know about the channels opened in its sub-interpreters. Adapt interpreter setup to add a command renaming step, to avoid the puts modulefile alias to overwrite the original puts command. puts modulefile alias now also pass the caller interpreter reference as first argument to be able to execute the original puts command, renamed _puts, within context of this caller interpreter. Handle wrong argument number error in putsModfileCmd to report an error for 'puts' command rather '_puts' which should not be known by users. Add non-regression test to check puts command against opened channel. Fixes #157 2018-02-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/siteconfig.tcl-1, testsuite/modules.50-cmds/130-conflict-full.exp: testsuite: load again conflict test in 50/130-conflict-full * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: testsuite: terse+numbered disp test in 00/120-siteconfig * modulecmd.tcl.in: Rely on elt count in displayElementList Do not check element count before calling displayElementList, rely on element count made by displayElementList procedure to return if no element has to be displayed. * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: testsuite: parseAccessIssue custom msg in 00/120-siteconfig * testsuite/modules.70-maint/120-autoinit.exp: testsuite: MODULE_VERSION set prior autoinit test * modulecmd.tcl.in, testsuite/home/coll7, testsuite/home/coll8, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.61-coll/999-cleanup.exp: Handle full path mod in collection Enable to save and restore collections containing full path modulefiles eventually with no modulepath defined. Valid collection test is changed from 'no modulepath saved' to 'no modulepath AND no loaded module saved'. * modulecmd.tcl.in, testsuite/home/.module/coll6.target, testsuite/modulefiles.path1/novercross, testsuite/modulefiles.path2/novercross, testsuite/modulefiles.path3/novercross, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/020-savelist.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/080-access.exp, testsuite/modules.61-coll/999-cleanup.exp: Rewrite getSimplifiedLoadedModuleList proc Use helper list if it is provided rather than only in case no MODULEPATH is defined. Rework name simplification code to make use of getPathToModule procedure instead of listModules. Loop around as long as parent name matches tested modulefile, so "foo/bar/version" can returned "foo" if "foo/bar/version" is default version of "foo". Add non-regression tests mixing deep and virtual modulefiles whose definitions are spread through multiple modulepaths. Help checking default versions are correctly detected in complex situation. 2018-02-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/home/coll5, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.61-coll/999-cleanup.exp: testsuite: prepended modulepath tests in 61-coll * modulecmd.tcl.in, testsuite/modulefiles/append/6.0, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.90-avail/070-full.exp: testsuite: bad ref counter tests in 50-cmds/040-append * .travis.yml: travis: remove already installed deps on OS X Which led to error when an upgrade is available for an already installed brew package. * testsuite/modules.10-use/030-use.exp: testsuite: test path with extra ./.. in 10-use/030-use * testsuite/example/siteconfig.tcl-1, testsuite/modules.90-avail/070-full.exp, testsuite/stty: testsuite: simulate solaris stty in 90-avail/070-full * modulecmd.tcl.in, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/020-savelist.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/050-saverm.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.61-coll/999-cleanup.exp, testsuite/modules.70-maint/154-is-saved.exp: Check HOME var exists before using in findCollections Add a test for every collection-related commands to check behavior when HOME variable is not defined. * testsuite/modules.10-use/070-unuse.exp: testsuite: unuse with ref>1 in 10-use/070-unuse * testsuite/example/siteconfig.tcl-1, testsuite/modules.90-avail/070-full.exp: testsuite: no flag report test in 90-avail/070-full 2018-02-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.70-maint/040-list.exp: testsuite: regular output test in 70-maint/040-list * testsuite/modulefiles/system/1.0, testsuite/modules.50-cmds/140-system.exp, testsuite/modules.90-avail/070-full.exp, testsuite/systest0: testsuite: display/exit 0 tests in 50-cmds/140-system * testsuite/modulefiles/append/5.0, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.90-avail/070-full.exp: testsuite: large val append test in 50-cmds/040-append * testsuite/modules.90-avail/070-full.exp: testsuite: small term width test in 90-avail/070-full * testsuite/modules.00-init/010-environ.exp, testsuite/modules.70-maint/170-contact.exp: testsuite: add 70-maint/170-contact test Check error message of a broken modulefile when MODULECONTACT environment variable is set. * modulecmd.tcl.in: Switch over state env vars rather if/elseif 2018-02-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles/loc_sym/alias11, testsuite/modules.20-locate/040-alias.exp, testsuite/modules.90-avail/070-full.exp: testsuite: alias def loop test in 20-locate/040-alias * modulecmd.tcl.in, testsuite/modules.10-use/030-use.exp: testsuite: test modpath var ref in 10-use/030-use * contrib/etc/rc-modulepath: contrib: add example global rc file Ensuring MODULEPATH definition, if found empty or undefined. This configuration helps fixing [1]. [1] https://bugzilla.redhat.com/show_bug.cgi?id=1139165 * testsuite/modulefiles/loc_sym/alias10, testsuite/modules.20-locate/040-alias.exp, testsuite/modules.90-avail/070-full.exp: testsuite: test 'module-info alias' on non-alias mod 2018-02-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles/uname/cache, testsuite/modulefiles/uname/unk, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/070-full.exp: testsuite: add uname tests in 50-cmds/095-uname Check uname internal cache value mechanism and result obtained when an unknown sub-command is passed to uname. * testsuite/modules.00-init/100-pager.exp: testsuite: 'puts stderr' test in 00-init/100-pager Test that stderr output made during modulefile evaluation comes in correct order regarding other debugging information when pager is enabled. 2018-02-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/120-siteconfig.exp: testsuite: add 120-siteconfig tests in 00-init suite * testsuite/modules.00-init/100-pager.exp: testsuite: check bad cmd set as pager Add tests to 100-pager in 00-init suite to check situation where defined pager command refers to a non-existent file. * testsuite/install.00-init/070-stderrtty.exp: testsuite: check args handling in 070-stderrtty Set a directory with name starting by '$' to check if shell arguments are correctly escaped. Complements #154. * testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/070-stderrtty.exp: testsuite: add 070-stderrtty tests to install suite Check installed Modules version when STDERR channel is attached to a TTY. * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Improve passed args protection on _moduleraw As suggested by @degremont on #154, $@ is better suited than $* when surrounded by double-quotes to escape passed arguments. Improve fix for #154. 2018-02-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml, Makefile, testsuite/example/siteconfig.tcl-1, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/100-pager.exp, testsuite/modules.70-maint/120-autoinit.exp: testsuite/travis: add cases forcing term attach state 2018-02-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/006-procs.exp, testsuite/modules.70-maint/120-autoinit.exp: Change 'global var' to '::var' Work on global variables in procedure with '::var' syntax rather declaring them with 'global' command. Linking global variable to local scope with 'global' command is expensive in terms of performance and only useful if variable is accessed more than 15 times [1]. [1] https://wiki.tcl.tk/1177 2018-02-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: fix typo in v4.1.1 release notes * MIGRATING.rst, NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version 4.1.1 * contrib/rpm/environment-modules.spec.in: rpm: add procps in build requirements As 'ps' is now checked at ./configure time. 2018-02-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst, modulecmd.tcl.in, testsuite/modules.00-init/100-pager.exp: Ignore LESS env var for pager configuration As for the PAGER environment variable, do not consider anymore the LESS environment variable for Modules pager configuration in order to avoid side effects coming from a general pager configuration not compatible with Modules pager handling. Previously when LESS was spotted defined, default paging command options were blanked if default pager was 'less'. With this change, even if LESS environment variable is defined, default paging command options are still taken into account. Adapt doc and tests accordingly. Complements #146 * contrib/rpm/environment-modules.spec.in: rpm: move hostname requirement to compat subpackage As suggested by RH#1545369 [1] [1] https://bugzilla.redhat.com/show_bug.cgi?id=1545369 2018-02-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml: travis: add OS X test cases Cannot install R currently on OS X image (homebrew issue with gcc install). Should be added later on. * modulecmd.tcl.in: Zero tty cols equals cols not found 'stty size' on OS X Travis-CI environment returns '0 0' * modulecmd.tcl.in: Protect args passed to _moduleraw SH function Avoid current working directory content to interfere with the arguments to pass from module to _moduleraw function on SH-kind shells when shell is attached to a terminal. Fixes #154 2018-02-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/Makefile: install: workaround Linux+Make 3.81 '\\\n' issue Was affecting tests on Ubuntu Trusty 2018-02-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/060-quar.exp, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.70-maint/150-append-path.exp, testsuite/modules.70-maint/152-remove-path.exp: DYLD/LD vars cannot be path-updated on OSX if SIP-enabled Path-variable handling is not effective on OSX for DYLD and LD variables in case System Integrity Protection (SIP) id enabled: in this situation these variables are not exported in subshell context, so they appear undefined to modulecmd.tcl. Nullify modshare variable content for the moment, do not print warning message. Adapt the DYLD/LD test cases when running on OSX if SIP is detected enabled. * init/Makefile: install: more portable \n to build init/modulerc That also works on OS X. 2018-02-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/050-crossshell.exp: testsuite: fix sh/ksh sub/cross shell tests on OSX * testsuite/modules.50-cmds/095-uname.exp: testsuite: escape ';' in 'uname -v' res on OSX * configure: install: fix configure script for OSX On Darwin, 'make' is a GNU make, GNU grep is called 'ggrep' and autopoint is installed in a gettext-specific bin directory. * doc/source/module.rst, modulecmd.tcl.in, testsuite/modules.00-init/100-pager.exp: Ignore PAGER env var for pager configuration Do not consider anymore the PAGER environment variable for Modules pager configuration in order to avoid side effects coming from a general pager configuration not compatible with Modules pager handling. This change makes Modules pager implementation moving away from Git pager implementation (which was taken as reference to model configuration behavior of Modules pager). Git is able to withstand any pager configuration, especially to quit pager if content fits in one screen. Not the case with our implementation currently, so it is safer to only take into account pager configuration that is specific to Modules. Adapt doc and tests accordingly. Fixes #146 2018-02-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Start pager only if some text has to be printed Start pager if enabled at first message to print on stderr. No pager is started anymore when nothing need to be outputted on stderr. To achieve that pager setup is split on a configuration and enablement initialization (initPager procedure) and startup (startPager procedure). Split in two procedures is required to report debug messages on pager configuration that will be printed through the started pager. Partially fix #146. * modulecmd.tcl.in: Split report procedures in pre and post init err report Define 2 procedures for reportDebug, reportErrorAndExit and report. First to use before error report being initialized, to bufferize messages. The second one to be used to effectively report messages once error report being initialized. initErrorReport procedure handles the procedure switch by use of 'rename' Tcl command. g_init_errreport variable is removed as the procedure split make it useless. No performance change is observed. 2018-02-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.70-maint/150-append-path.exp, testsuite/modules.70-maint/152-remove-path.exp: Use specific modshare var name for DYLD-specific vars Name modshare variable for DYLD-specific variables MODULES_MODSHARE_<var> rather <var>_modshare to avoid warning messages due to DYLD detecting unknown variables when using _modshare suffix. A getModshareVarName procedure has been created to determine the variable name to use for reference counter variables. Maybe all modshare variables will move to a MODULES_MODSHARE prefix fashion in the future. Fixes #153 * modulecmd.tcl.in, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/045-listlong.exp: Harden list cmd against unexistent mod Check loaded module is found before outputing stats on it. * modulecmd.tcl.in, testsuite/modulefiles/info/isused, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/055-whatis.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/100-path.exp, testsuite/modules.70-maint/110-paths.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.90-avail/070-full.exp: Clean MODULEPATH content before using it Improve getModulePathList procedure to pass each directory element part of the MODULEPATH env variable through getAbsolutePath. Ensure this way each directory has correct form to work with afterward. A 'set_abs' argument is added to getModulePathList procedure, enabled by default, to apply this new cleanup behavior. Not applied for cmdModuleUse and cmdModuleUnuse who will need extra work to detect relative/full paths already set in MODULEPATH. Add bunch of tests to check the various commands when modulepath directory has trailing slash at its end. Fixes #152 2018-02-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/csh.in: init: no call to manpath if MANPATH defined on csh * INSTALL.rst: doc: clarify use of 'gmake' to install on non-Linux * init/csh.in: init: correct switchml def for Solaris pure csh 2018-02-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/040-subshell.exp, testsuite/install.00-init/050-crossshell.exp: testsuite: fix sh sub/cross shell tests on Solaris 2018-02-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/csh.in, testsuite/bin/install_test_csh: init/testsuite: need quotes for eval arg on pure csh 2018-02-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/bin/install_test_csh, testsuite/bin/install_test_fish, testsuite/bin/install_test_sh, testsuite/install.00-init/005-init_ts.exp: testsuite: detect ksh93 if ksh not found Useful on FreeBSD where ksh is not there only ksh93 binary. 2018-02-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/bin/install_test_csh: testsuite: use pure csh syntax in install_test_csh * testsuite/install.00-init/010-environ.exp: testsuite: setup basic locale for install tests * init/Makefile: install: portable newline echo in Makefile * Makefile, Makefile.inc.in, configure, init/Makefile: install: check rmdir '--ignore-fail-on-non-empty' exists * Makefile, Makefile.inc.in, configure: install: check for GNU grep on Solaris * testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/040-subshell.exp, testsuite/install.00-init/050-crossshell.exp: testsuite: fix sh sub/cross shell tests on FreeBSD * init/Makefile: install: fix multi modulepath build in init/modulerc * init/Makefile: install: define a portable \n to build init/modulerc 2018-01-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile.inc.in, configure, init/Makefile, init/bash.in, init/csh.in, init/fish.in, init/ksh.in, init/sh.in, init/zsh.in: install/init: use MANPATH if manpath cmd not there * Makefile, Makefile.inc.in, configure: install: save 'git worktree' avail for Makefile * configure: install: check for 'gmake' cmd on non-Linux systems 2018-01-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * configure, contrib/envml: Use 'env' to start 'bash' in shebang Adapt configure and envml scripts to call bash interpreter through env utility, as bash is not installed under /bin on some systems like FreeBSD. Would be a lot more better if 'configure' script were a /bin/sh script. 2018-01-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.61-coll/020-savelist.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.90-avail/070-full.exp: Specific code to query tty col num on SunOS * testsuite/install.00-init/005-init_ts.exp: testsuite: use tclsh found at configuration time For install testsuite, do not try to find tclsh, use location found at configure time. * configure: install: detect tclsh8.{4,5,6} if no tclsh found Adapt configure script to be able to test multiple variant of a command name. Use that to detect if a version-specific of tclsh is available in case no generic 'tclsh' binary exists. * testsuite/modules.20-locate/043-virtual.exp: testsuite: no illegal dir op on FreeBSD 2018-01-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash.in, init/ksh.in, init/sh.in, init/zsh.in, modulecmd.tcl.in, testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/030-options.exp, testsuite/install.00-init/050-crossshell.exp, testsuite/modules.70-maint/120-autoinit.exp: init: use default value on undef var in sh shells To avoid unbound variables on bash '-eu' mode for instance, use a default value on undefined variable. Adapt SH init scripts and autoinit code. Add 'bash -eu' to the list of tested shells on 'testinstall' suite. Fixes #151 2018-01-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: No local var used in sh shell autoinit code Considering the diversity of ways local variables are handled through the sh-variants ('local' known everywhere except on ksh, 'typeset' known everywhere except on pure-sh, and on some systems the pure-sh is in fact a 'ksh'), no local variables are defined and these variables that should have been local are unset at the beginning and the end. Fixes #147 * init/Makefile: install: portable symlink copy with '-R -P' Make symlink copy portable with 'cp -R -P' (to support SunOS) * configure: install: check automake/aclocal bef. compat configure * init/Makefile: install: 'cp --remove-destination' is not portable Adapt 'cp --remove-destination' into rm + cp commands as the --remove-destination is not understood everywhere (not known on SunOS for instance). 2018-01-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, Makefile.inc.in, configure, doc/Makefile, site.exp.in, testsuite/install.00-init/030-options.exp: install: give ability to install without doc built If no sphinx-build found, warn user but still make it possible to build and install Modules (without the documentation). Enables to install Modules from git repository for test purpose on systems where python-sphinx is not available in regular pakage repositories. * Makefile.inc.in, configure, init/Makefile, init/profile-compat.sh.in, init/profile.sh.in: install: get 'ps' and 'basename' loc in configure Check paths in configure script to detect the location of the 'ps' and 'basename' commands. Then use this found location in profile.sh scripts. First part of #147 is solved here. 2018-01-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Write once all elt list in terse mode * modulecmd.tcl.in, testsuite/modules.70-maint/070-display.exp: Make separator line fit small screen width 2018-01-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/Makefile: doc/Makefile: Use $(MAKE) variable for recursive cmds 2018-01-19 Felix Neumärker <xdch47@posteo.de> * Makefile: Makefile: Use $(MAKE) variable for recursive cmds 2018-01-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version 4.1.0 * MIGRATING.rst: doc: describe v4.1 in MIGRATING 2018-01-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/rpm/environment-modules.spec.in: rpm: add 'less' to build requirements To pass configure step as 'less' is defined as default pager and build enables paging capabilities in module. * modulecmd.tcl.in, testsuite/modulefiles.deep/modvirt/.common, testsuite/modulefiles.deep/modvirt/.modulerc, testsuite/modulefiles.deep/modvirt/dir1/.modulerc, testsuite/modulefiles.path1/dvcross/.base, testsuite/modulefiles.path1/dvcross/.modulerc, testsuite/modulefiles.path2/dvcross/.base, testsuite/modulefiles.path2/dvcross/.modulerc, testsuite/modulefiles.path3/dvcross/.base, testsuite/modulefiles.path3/dvcross/.modulerc, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.80-deep/010-init_ts.exp, testsuite/modules.80-deep/020-load.exp, testsuite/modules.80-deep/021-unload.exp, testsuite/modules.80-deep/022-switch.exp, testsuite/modules.80-deep/030-display.exp, testsuite/modules.80-deep/050-whatis.exp, testsuite/modules.80-deep/080-access.exp, testsuite/modules.80-deep/999-cleanup.exp: Correctly handle deep virtual modules Fix getModules procedure to correctly handle virtual modules when the sub-directories they refer to does not exist on the filesystem. For instance 'modvirt/dir0/sub1/1.0' may be a virtual module defined with module-virtual modvirt/dir0/sub1/1.0 .common in 'modvirt/.modulerc' where modvirt/dir0 and modvirt/dir0/sub1 do not correspond to existing directories on the filesystem. Now getModules will define among its result virtual directory entries to make the deep virtual modules findable when, for instance searching a default version. Add non-regression tests in 20-locate and 80-deep suites for the deep virtual module use-case. 2018-01-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.20-locate/043-virtual.exp: testsuite: less _modshare checks in 043-virtual Simplify test code and protect it from Tcl array to list sorting issue. * NEWS.rst, doc/source/diff_v3_v4.rst, doc/source/modulefile.rst: doc: desc. module-virtual command * testsuite/modulefiles/loc_sym/exec3, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.90-avail/070-full.exp: testsuite: check module-virtual cmd in display mode * doc/source/conf.py, modulecmd.tcl.in: New year copyright mention update * modulecmd.tcl.in, testsuite/modulefiles/loc_virt2/.modulerc, testsuite/modulefiles/loc_virt2/2.0, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.90-avail/070-full.exp: Virtual module target may be loaded as is Adapt similar loaded module detection code and add tests to check behavior when the target of a virtual module is loaded as is and a virtual module targeting it is loaded/unloaded/switched/etc. Also set test cases on module mixing regular and virtual versions, playing with short or full path name representation. * modulecmd.tcl.in, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.50-cmds/170-swap.exp: Update g_loadedModuleFiles arrays in load/unload cmds Update the content of the g_loadedModuleFiles cache array right after loading or unloading a module. Helps subsequent actions to learn the exact current state, especially in case of single command implying multiple actions (switch or load/unload of multiple modules) 2018-01-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.20-locate/043-virtual.exp: Handle _LMFILES_ path var in duplicates mode Multiple loaded virtual modules may target same file so handling of the _LMFILES_ path variable is changed to a 'duplicates' mode to ensure a file entry will always correspond to a module entry in LOADEDMODULES. Adapt entry removal in _LMFILES_ variable to delete the entry at the index corresponding to the index of the entry removed in LOADEDMODULES. Add new test cases to check this duplicate mode entries in all situation where _LMFILES_ content is involved. 2018-01-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles/loc_virt1/.common, testsuite/modulefiles/loc_virt1/.modulerc, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.20-locate/043-virtual.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.90-avail/070-full.exp, testsuite/virttargets/loc_virt: testsuite: add module-virtual cmd tests 2018-01-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/etc/rc, testsuite/modulefiles.path1/vcross/.base, testsuite/modulefiles.path1/vcross/.modulerc, testsuite/modulefiles.path2/vcross/.base, testsuite/modulefiles.path2/vcross/.modulerc, testsuite/modulefiles.path3/vcross/.base, testsuite/modulefiles.path3/vcross/.modulerc, testsuite/modulefiles/dirmodvirt/.modulerc, testsuite/modulefiles/dirmodvirt/1.0, testsuite/modulefiles/loc_dvv1/.common, testsuite/modulefiles/loc_dvv1/.modulerc, testsuite/modulefiles/loc_dvv1/.version, testsuite/modulefiles/loc_rcv1/.base, testsuite/modulefiles/loc_rcv1/.common, testsuite/modulefiles/loc_rcv1/.modulerc, testsuite/modulefiles/loc_rcv2/.common, testsuite/modulefiles/loc_rcv2/.modulerc, testsuite/modulefiles/loc_sym/.common, testsuite/modulefiles/loc_sym/alias8, testsuite/modulefiles/loc_sym/alias9, testsuite/modulefiles/loc_sym/getvers10, testsuite/modulefiles/loc_sym/getvers9, testsuite/modulefiles/loc_sym/version24, testsuite/modulefiles/loc_sym/version25, testsuite/modulefiles/loc_sym/version26, testsuite/modules.20-locate/030-defvers.exp, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/040-alias.exp, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.20-locate/046-getsym.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.20-locate/080-access.exp, testsuite/virttargets/loc_rcv: testsuite: add virtual modules location tests 2018-01-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Cache modulefile validity check result Add in checkValidModule procedure a 'g_modfileValid' global array to save validity check result of a modulefile at first query, then reuse this cached result on subsequent queries on same modulefile. * modulecmd.tcl.in: Cache file mtime query results Add 'getFileMtime' to query file modification time. On first call, cache the result then use cache on subsequent calls for the same file. * modulecmd.tcl.in: Find modulepath of virtual module on 'search' cmd Add 'findModulepathFromModulefile' procedure to get the modulepath corresponding to a passed modulefile (or modulerc). Adapt 'search' cmd when looking at module alias target, to correctly handle virtual modules. Modulepath directory is retrieved, when detecting a virtual module, from the modulerc file that has defined this virtual module. * modulecmd.tcl.in: Handle loaded virtual modules on 'list' cmd Introduce 'isModuleVirtual' procedure to detect a module is virtual based on its name and modulefile. A module is stated virtual if its name cannot be found at end of its modulefile name. When looking at loaded modules during a 'list' command, treat specifically virtual modules, almost like full path modules. Tags on loaded virtual module are not search as once loaded we do not know anymore from what modulepath directory the virtual module was coming from. 2018-01-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles/source/1.1, testsuite/modulefiles/source/1.2, testsuite/modules.50-cmds/330-source.exp, testsuite/modules.90-avail/070-full.exp: Treat file relative to cwd in source/unsource So a relative file to source from a modulefile or modulerc, is relative starting from the directory of the modulefile/modulerc sourcing it. Add a specific case to treat empty file name by the way. * modulecmd.tcl.in, testsuite/modules.10-use/030-use.exp, testsuite/modules.50-cmds/015-use.exp: Specific err on cmdModuleUse when empty dir name * modulecmd.tcl.in, testsuite/modulefiles/conflict/relpath, testsuite/modulefiles/info/isused, testsuite/modulefiles/module/relpath, testsuite/modulefiles/prereq/relpath, testsuite/modulefiles/use/4.1, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, .../modules.50-cmds/132-conflict-fullpath.exp, testsuite/modules.50-cmds/150-module.exp: Cwd during interp corresponds to modfile dir Now getAbsolutePath procedure, which make a path passed as argument an absolute path, check the current path of the interpreted modulefile or modulerc rather always taking the current path of the module command execution. So a modulefile or modulerc can use relative paths based on a determistic way as it is now based on their location. Previously it was not possible as relative paths were dependent of the location from where the module command was executed. If ModulesCurrentModulefile variable is not empty, getAbsolutePath nows it is called during a modulefile/modulerc interpretation, so it takes the directory name of this ModulesCurrentModulefile as current working directory. * modulecmd.tcl.in, testsuite/modulefiles/modvar/modfile, testsuite/modulefiles/modvar/submodfile, testsuite/modules.50-cmds/340-modvar.exp, testsuite/modules.90-avail/070-full.exp: Handle ModulesCurrentModulefile in a push/pop fashion Refactor handling of the ModulesCurrentModulefile public global variable to get same treatment like ModuleName with a push/pop mechanism. Then call to the new pushModuleFile and popModuleFile procedures is gathered in the execute-modulefile and execute-modulerc procedures to push filename before interpretation and popping it when interpretation is done. Change is that ModulesCurrentModulefile is reset after interpretation, so when this variable is queried in a master interpretation context it is possible to know if some file is currently being interpreted or not (value restored to the empty string). 2018-01-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Introduce 'module-virtual' modulefile command Introduce the virtual module concept with the 'module-virtual' modulefile command. This new command takes a module name as first argument and a modulefile location as second argument. A virtual module stands for this module name associated to a modulefile. The modulefile is the script interpreted when loading or unloading the virtual module which appears or can be found with its virtual name. Like a module aliases, virtual modules are expected to be defined within modulerc files (at whatever rc level). Virtual modules can be targeted by aliases or symbolic versions. They also compete with aliases and regular modules for the implicit default version of a module. Multiple virtual modules may target the same modulefile, which can distinguish between these various virtual names by use of the "[module-info name]" command. A virtual module cannot be loaded using a full path name (merge of its module path and its module name) as this file does not exist. Based on a proof of concept made by Bert Wesarg [1]. [1] https://github.com/bertwesarg/modules-tcl/commit/545e9f 2018-01-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, modulecmd.tcl.in, testsuite/modulefiles/spread/1.0, testsuite/modulefiles/spread/2.0, testsuite/modulefiles/spread/3.0, testsuite/modulefiles/spread/4.0, testsuite/modulefiles/spread/5.0, testsuite/modulefiles/spread/6.0, testsuite/modulefiles/spread/7.0, testsuite/modulefiles/spread/8.0, testsuite/modulefiles/spreadrc/dir1/.modulerc, testsuite/modulefiles/spreadrc/dir1/1.0, testsuite/modulefiles/spreadrc/dir2/.modulerc, testsuite/modulefiles/spreadrc/dir2/1.0, testsuite/modulefiles/spreadrc/dir3/.modulerc, testsuite/modulefiles/spreadrc/dir3/1.0, testsuite/modulefiles/spreadrc/dir4/.modulerc, testsuite/modulefiles/spreadrc/dir4/1.0, testsuite/modulefiles/spreadrc/dir5/.modulerc, testsuite/modulefiles/spreadrc/dir5/1.0, testsuite/modulefiles/spreadrc/dir6/.modulerc, testsuite/modulefiles/spreadrc/dir6/1.0, testsuite/modulefiles/spreadrc/dir7/.modulerc, testsuite/modulefiles/spreadrc/dir7/1.0, testsuite/modulefiles/spreadrc/dir8/.modulerc, testsuite/modulefiles/spreadrc/dir8/1.0: Correctly handle list var when reset interp When restoring an initial interpreter variable which was a list, issue occured as the 'slave eval set' was given more than one value argument. Passing values enclosed in a 'list' fixes the issue. Improve non-regression tests to ensure expected handling will persist over times. Closes #145 2018-01-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/030-options.exp: testsuite: check modulecmd on compat only if inst. * NEWS.rst, doc/source/diff_v3_v4.rst, doc/source/module.rst: doc: desc MODULES_CMD var and modulecmd wrapper * testsuite/install.00-init/030-options.exp: testsuite: check modulecmd in install suite * .gitignore, Makefile, contrib/rpm/environment-modules.spec.in, contrib/scripts/modulecmd.in: install: introduce modulecmd wrapper script Which execute the module command bin corresponding to active flavor. 2018-01-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash.in, init/cmake.in, init/csh.in, init/ksh.in, init/perl.pm.in, init/python.py.in, init/ruby.rb.in, init/sh.in, init/zsh.in, modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Expose current modulecmd with MODULES_CMD env var 2018-01-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst, init/cmake.in, modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Fix removal of tmp moduleinit.cmake.XXXXXXXXXXXX * NEWS.rst: doc: dsc versioning, Tcl {} and .modspath parse in NEWS * testsuite/modules.00-init/100-pager.exp: testsuite: esc install path for pager regexp tests 2017-12-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/modulefiles/version.in: install: reinit module code in version modfile Adapt version modulefile, which is deployed in versioning installation mode, to re-initialize module command during its unload, to restore the command of the previously loaded version. Goes through a full re-initialization to overcome incompatible definition of the module command between version 3 and 4. This full re-initialization cannot be attempted on scripting shells, like Perl or Python, as function re-definition is not a common practice on these languages. 2017-12-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_v3_v4.rst: doc: update diff_v3_v4 with 4.1 changes so far * NEWS.rst, doc/source/module.rst: doc: desc. variable ref support in MODULEPATH * testsuite/install.00-init/060-quar.exp, testsuite/modules.50-cmds/122-prereq-fullpath.exp, testsuite/modules.50-cmds/132-conflict-fullpath.exp, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.50-cmds/330-source.exp: testsuite: fix regexp-tests not escaping modfile paths * site.exp.in, testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/030-options.exp: testsuite: check versioning-specific modfile install * testsuite/bin/install_test_cmake: testsuite: support 3-arg cmd on cmake test script 2017-12-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, Makefile.inc.in, configure, init/Makefile, site.exp.in: install: add @VERSION@ pattern Introduce the '@VERSION@' pattern, combination of Modules release and build information, for building files to install. Still rely on @MODULES_RELEASE@ and @MODULES_BUILD@ when these information are needed prior to ./configure call (dist-related stuff) or are expected to change after ./configure call (modulecmd.tcl in dev environment). * .travis.yml: travis: enable versioning install on some test cases * Makefile, testsuite/example/.modulespath.in, testsuite/example/modulerc.in, testsuite/modules.00-init/006-procs.exp, testsuite/modules.70-maint/120-autoinit.exp: testsuite/travis: adapt modpath in ex cfg if versioning Adapt defined modulepaths in example testsuite configuration file (modulerc and .modulespath) depending if versioning installation mode is enabled or not. 2017-12-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml, Makefile, testsuite/example/.modulespath-empty: testsuite/travis: add an empty .modulespath example Check behavior when .modulespath exists but does not hold any path to add to MODULEPATH. * modulecmd.tcl.in: Correct parsing of init/.modulespath lines w/o comment * modulecmd.tcl.in: Fix MODULEPATH init when init/.modulespath empty * init/ksh.in: init: change 'string contains' tests for ksh Adapt the 'string contains' tests in ksh init script (used to setup FPATH, PATH and MANPATH without duplicates) to correctly handle paths containing '+' character, which is detected as a pattern-specific character on the '=~' test condition previously used. * INSTALL.rst, configure, init/Makefile, site.exp.in, testsuite/install.00-init/030-options.exp: install: adapt default modpath if versioning set If --enable-versioning configure option is set, default modulepath option is changed from '$prefix/modulefiles' to '$baseprefix/$MODULE_VERSION/modulefiles'. Adapt installation process to handle modulepath containing special '$' character. Adapt also install testsuite to correctly check these modulepaths containing variable references. 2017-12-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/006-procs.exp: Set env var on Tcl with val enclosed in {} Produce environment variable set code for Tcl shell with value enclosed in curly braces {} rather double-quote "". Curly braces are more effective to protect value from interpretation, like if it contains a dollar character. 2017-12-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitignore, INSTALL.rst, Makefile, Makefile.inc.in, configure, contrib/modulefiles/modules.in, contrib/modulefiles/version.in, init/Makefile, modulecmd.tcl.in, site.exp.in, testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.70-maint/120-autoinit.exp: install: deploy MODULE_VERSION and version modfile When --enable-versioning is set at configure time, deploy the setup of the MODULE_VERSION and MODULE_VERSION_STACK environment variables in modulecmd.tcl and in a version-specific modulefile. This version-specific modulefile is deployed in a @baseprefix@/versions modulepath directory, which is also created specifically for versioning installation mode. MODULE_VERSION and MODULE_VERSION_STACK environment variables setup in modulecmd.tcl is commented if versioning installation mode is not enabled rather deleted to guaranty consistency across code coverage tests (same code line numbering whatever the installation options set). version-specific modulefile is a bit different than the one used before <4.0 as now module version is initialized when loading this module by calling the autoinit action on the modulecmd.tcl script. These version-specific modulefiles enable to switch from one module version to another but there is an incompatibility of initialization between Modules 3.2 and Modules >=4. Switching from Modules 3.2 to Modules >4 will be possible, but not going back from >4 to version 3.2. 2017-12-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.95-version/040-xgetenv.exp: Solve env var reference in MODULEPATH Restore the ability of C-version to resolve environment variable reference put in MODULEPATH elements. Path element is registered in MODULEPATH variable with its variable references. When path entry is used, variable references are solved to get real path. Add a 'resolvStringWithEnv' procedure to handle resolution of environment variable references set in string. Re-enable non-regression tests of 95-version suite. 2017-12-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst, configure: install: add --enable-versioning Add '--enable-versioning' configure option to append Modules version to the chosen installation prefix. * init/Makefile: testsuite/travis: fix testconfig removal of etcdir 2017-12-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc. siteconfig.tcl in NEWS * .travis.yml, Makefile, init/Makefile, testsuite/example/siteconfig.tcl: testsuite/travis: add an example siteconfig.tcl Add 'install-testsiteconfig' make target to setup a dummy siteconfig.tcl file in install_etcdir. Link that to some of the travis checks to run testsuite with an existing siteconfig.tcl * modulecmd.tcl.in, testsuite/modules.00-init/100-pager.exp: Transparently bufferize err report before pager init Define a global g_init_errreport flag to know within report or reportErrorAndExit procedure if error reporting has been initialized or not. If not yet initialized, call to output message is saved in a buffer list. A 'initErrorReport' procedure is added to switch 'g_init_errreport' flag and output every messages saved in buffer list. With this change, it is possible to use reportDebug, reportWarning, reportErrorAndExit, etc procedures transparently without having to know if error reporting has been enabled or not. The report procedures can then be used in siteconfig.tcl extension without messing paging output. Regarding reportDebug, g_init_errreport enables to know if call has to be saved since if error report is not initialized, debug mode status is not yet known. 2017-12-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst, Makefile, Makefile.inc.in, configure, doc/Makefile, doc/source/conf.py, doc/source/module.rst, init/Makefile, modulecmd.tcl.in, site.exp.in: Introduce @etcdir@/siteconfig.tcl script Add the possibility to setup a site-specific configuration Tcl script which will be sourced at the start of modulecmd.tcl. This site-specific Tcl script enables to supersede global variable and procedure definition made in modulecmd.tcl. This way local adaptations can be made without editing the modulecmd.tcl script. '--etcdir' configure option is added to specify the location of the site-specific configuration script. * NEWS.rst: doc: desc work on *-path commands in NEWS 2017-12-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Improve getReferenceCountArray proc debug message * modulecmd.tcl.in, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.70-maint/152-remove-path.exp: Always set/unset var when removing path in it Even if no change on variable value, always set (or unset) this variable as its relative counter reference variable is always set (or unset). 2017-12-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst, doc/source/modulefile.rst, init/bash_completion.in, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, testsuite/modulefiles/append/4.1, testsuite/modulefiles/remove/4.0, testsuite/modulefiles/remove/4.1, testsuite/modulefiles/remove/4.2, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.70-maint/150-append-path.exp, testsuite/modules.70-maint/152-remove-path.exp, testsuite/modules.90-avail/070-full.exp: Add --index opt to remove-path Remove path entry in environment variable by passing an index rather a string. String at specified index in content list is removed if coherent with relative reference counter. 2017-12-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst, doc/source/modulefile.rst, init/bash_completion.in, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, testsuite/modulefiles/append/4.0, testsuite/modulefiles/remove/3.0, testsuite/modulefiles/remove/3.1, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.70-maint/150-append-path.exp, testsuite/modules.70-maint/151-prepend-path.exp, testsuite/modules.70-maint/152-remove-path.exp, testsuite/modules.90-avail/070-full.exp: Introduce --duplicates opt to {append,prepend}-path Let the possibility to append or prepend path element entry to a variable even if this entry is already registered into the variable which introduces duplicates element within the variable value. Entries are added with eventual duplication by the use of the --duplicate option on append-path and prepend-path commands. These additions increment the reference counter as usual. Removal of duplicated path entry depends on the reference counter value. Entries are not removed unless reference counter value is lesser than the number of duplicated entries. 2017-12-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst, doc/source/modulefile.rst, modulecmd.tcl.in, testsuite/modulefiles/append/1.7, testsuite/modulefiles/append/2.4, testsuite/modulefiles/prepend/1.9, testsuite/modulefiles/prepend/2.4, testsuite/modulefiles/remove/1.7, testsuite/modulefiles/remove/2.4, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.70-maint/150-append-path.exp, testsuite/modules.70-maint/151-prepend-path.exp, testsuite/modules.70-maint/152-remove-path.exp, testsuite/modules.90-avail/070-full.exp: Pass multi paths in multi strs on {append,prepend,remove}-path Enable append-path, prepend-path and remove-path to receive multiple path value arguments. Add some non-regression tests for modulefile or sub-command cases. Update modulefile.4 and module.1 docs. Closes #141 * doc/source/modulefile.rst, modulecmd.tcl.in, testsuite/modulefiles/append/1.6, testsuite/modulefiles/append/2.3, testsuite/modulefiles/prepend/1.8, testsuite/modulefiles/prepend/2.3, testsuite/modulefiles/remove/1.6, testsuite/modulefiles/remove/2.3, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.70-maint/150-append-path.exp, testsuite/modules.70-maint/151-prepend-path.exp, testsuite/modules.70-maint/152-remove-path.exp, testsuite/modules.90-avail/070-full.exp: Pass multiple paths in 1 str on {append,prepend,remove}-path Detect if path string passed to append-path, prepend-path or remove-path commands is composed of multiple path entries (separated by specified or default delimiter string). In this situation add/remove each path separately to correctly update relative reference counter. Add some non-regression tests for modulefile or sub-command cases. Update modulefile.4 doc. Closes #142 2017-12-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Simplify check of add-path pos arg (prepend/append) If not 'prepend' then it is 'append', no third choice. * modulecmd.tcl.in: Rely on add-path rather append-path internally Do not use append-path, prepend-path, remove-path in internal procedures not to depend on current mode (load or unload). * modulecmd.tcl.in: Improve readability of cmdModuleUse proc * modulecmd.tcl.in, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.70-maint/150-append-path.exp, testsuite/modules.70-maint/151-prepend-path.exp, testsuite/modules.70-maint/152-remove-path.exp: Move path cmd arg parse in {add,unload}-path Move path commands (append-path, prepend-path and remove-path) argument check and parse in internal unload-path and add-path procedures. So it can benefit for both external and internal calls and gather all checks in parsePathCommandArgs. Update all 'unload-path' and 'add-path' calls for new argument order. In addition it is not needed anymore to pass a separator character to these 2 procedures as it set to the default value through parsePathCommandArgs. Adapt non-regression tests. * modulecmd.tcl.in, testsuite/modules.50-cmds/050-prepend.exp: Distinguish cleared var from bare empty path entry Sometimes a variable is cleared by defining it empty instead of unsetting it. This is perticulary the case with LOADEDMODULES which is often set empty in init script to say nothing loaded. So this situation need to be distinguished from a path variable set to an empty path entry. To distinguish both situations, relative reference counter variable is used to check if an empty path entry is registered. * modulecmd.tcl.in, testsuite/modulefiles/prepend/3.0, testsuite/modulefiles/prepend/3.1, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.90-avail/070-full.exp: Fix reference counter handling of empty path entry 2017-12-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles/prepend/1.1, testsuite/modulefiles/prepend/1.6, testsuite/modulefiles/prepend/1.7, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.70-maint/150-append-path.exp, testsuite/modules.70-maint/151-prepend-path.exp, testsuite/modules.70-maint/152-remove-path.exp, testsuite/modules.90-avail/070-full.exp: Add support for --delim=C arg syntax on *-path cmds Closes #140 * modulecmd.tcl.in, testsuite/modulefiles/append/0.5, testsuite/modulefiles/append/1.5, testsuite/modulefiles/prepend/0.5, testsuite/modulefiles/prepend/1.5, testsuite/modulefiles/remove/0.5, testsuite/modulefiles/remove/1.5, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.70-maint/150-append-path.exp, testsuite/modules.70-maint/151-prepend-path.exp, testsuite/modules.70-maint/152-remove-path.exp, testsuite/modules.90-avail/070-full.exp: Check env var name not empty for *-path commands * modulecmd.tcl.in: Catch/report error in cmdModuleResurface and return false 2017-12-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles/append/0.3, testsuite/modulefiles/append/0.4, testsuite/modulefiles/append/1.3, testsuite/modulefiles/append/1.4, testsuite/modulefiles/prepend/0.3, testsuite/modulefiles/prepend/0.4, testsuite/modulefiles/prepend/1.3, testsuite/modulefiles/prepend/1.4, testsuite/modulefiles/remove/0.3, testsuite/modulefiles/remove/0.4, testsuite/modulefiles/remove/1.3, testsuite/modulefiles/remove/1.4, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.70-maint/150-append-path.exp, testsuite/modules.70-maint/151-prepend-path.exp, testsuite/modules.70-maint/152-remove-path.exp, testsuite/modules.90-avail/070-full.exp: Improve {append,prepend,remove}-path arg check Detect missing environment variable name or value when calling append-path, prepend-path or remove-path procedures. Raise error in this situation. Introduce a 'parsePathCommandArgs' to check args for the 3 *-path commands. Add non-regression tests in 050-cmds and 070-maint suites to check bad argument situations. Closes #139 * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/070-command.exp, testsuite/modules.00-init/071-args.exp, testsuite/modules.00-init/090-switches.exp, testsuite/modules.70-maint/020-update.exp: testsuite: set type help message as global var 2017-12-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc coll. pinning and @prefix@/etc/rc in NEWS * .travis.yml, Makefile, init/Makefile, modulecmd.tcl.in, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/065-rcerrs.exp, testsuite/modules.20-locate/081-access-rc.exp: @prefix@/etc/rc does not depend on MODULESHOME anymore Avoid dependency to the MODULESHOME environment variable when looking for the etc/rc global RC file. To define an environment dynamic global RC file the MODULERCFILE variable may be used. By not relying on an environment variable we ensure this etc/rc will always be read, if it exists, whatever the current environment state. Location of this etc/rc is based on @prefix@ defined at configure time which is also the basis for the MODULESHOME value, so this change should not have an impact if MODULESHOME variable were not manipulated afterward. This change is useful when using module through commands resetting the environment like 'sudo' (see RH#1443124, RH#1139165 [1]) module.1 man page is already mentionning @prefix@/etc/rc, no change needed there. Adapt testsuite to provide a way to test the use of a @prefix@/etc/rc file for the whole 'make test' duration, with 'make install-testetcrc'. [1] https://bugzilla.redhat.com/show_bug.cgi?id=1139165 2017-12-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/home/.module/default, testsuite/modules.00-init/010-environ.exp, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.61-coll/999-cleanup.exp: testsuite: check MODULES_COLLECTION_PIN_VERSION 2017-12-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst, modulecmd.tcl.in: Introduce MODULES_COLLECTION_PIN_VERSION Add the ability to always record module name + version even if this version corresponds to the default one. By default, version number is omitted if it corresponds to the implicit or explicitly set default version. If MODULES_COLLECTION_PIN_VERSION environment variable is set to 1, version number is always recorded. When restoring a collection, we do not know for sure if it was saved with pinned versions or not, so module load and unload movements are determined on both simplified or raw module list. Results with less module to load or unload (means with more matches between module lists) are kept. Acknowledgment: this development has been made and funded within the framework of the PRACE Fifth Implementation Phase (PRACE-5IP) project (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's Horizon 2020 research and innovation programme (2014-2020) under grant agreement no. 730913. Closes #89 2017-12-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * configure: install: change git repo clone detection threshold Relative to travis git clone depth increase * .travis.yml: travis: increase git clone depth to catch last tag * NEWS.rst: doc: desc work on full path name modfile in NEWS * testsuite/modules.50-cmds/310-puts.exp: testsuite: fix puts 3-arg bad case test for Tcl<8.6 * testsuite/modulefiles/puts/7, testsuite/modules.50-cmds/310-puts.exp, testsuite/modules.90-avail/070-full.exp: testsuite: add 3-arg bad case test for putsModfileCmd 2017-12-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Full to short name cmp in getLoadedWithClosestName * testsuite/modules.50-cmds/170-swap.exp: testsuite: one name swap with full path modfile 2017-12-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles/conflict/fullpath, .../modules.50-cmds/132-conflict-fullpath.exp, testsuite/modules.90-avail/070-full.exp: testsuite: test conflict will full path modulefile * NEWS.rst: doc: desc unload mode 'module source' in NEWS * testsuite/modulefiles/prereq/fullpath, testsuite/modules.50-cmds/122-prereq-fullpath.exp: testsuite: test prereq will full path modulefile 2017-12-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/030-shells.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.70-maint/153-is-loaded.exp, testsuite/modules.80-deep/021-unload.exp: Correlate mod to already loaded full path mod Check if a passed modulefile correspond to an already loaded full path module (passed as full path name when it was loaded) thank to set modulepath. This is done to detect this modulefile is-loaded, should not be loaded a second time (with a different name) or should be unloaded. Add a 'findModuleNameFromModulefile' procedure to get corresponding modulefile name from a full path name based on currently enabled modulepaths. Adapt 'getLoadedWithClosestName' and 'getLoadedMatchingName' procedures to make use of 'findModuleNameFromModulefile' when a loaded module is detected to be full path. Make cmdModuleLoad use 'getLoadedMatchingName' after 'getPathToModule' to check whether returned module is already loaded or not (checking short or full path name combinations) Add tests on load, unload, swap and is-loaded actions. * doc/source/module.rst: doc: fix info-loaded section layout in module.1 2017-12-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.70-maint/153-is-loaded.exp: Correlate full path mod to already loaded mod Check if a passed full path modulefile correspond to an already loaded module (passed as short name when it was loaded). To detect this full path modulefile is-loaded, should not be loaded a second time (with a different name), should be unloaded. Add tests on load, unload, swap and is-loaded actions. 2017-12-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp: testsuite: new tests to check full path mod support * modulecmd.tcl.in, testsuite/modules.00-init/050-modpath.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp: Modulefile starting with '(.|..)/' are full path Consider modulefile passed with name starting by './' or '../' a full path name modulefile, like those starting by '/'. Convert them to an absolute path after detection to always register full path modulefiles with their absolute path name. Adapt existing full path load and unload tests. Complements #132 * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.20-locate/075-symlink.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp: testsuite: def 'err_file' for 'no such file...' msg 2017-12-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: putsModfileCmd call 'report' to send stderr content To better handle content sent to stderr, which should sometimes go through a pager process, pass it to the 'report' procedure rather calling the real 'puts' command in putsModfileCmd procedure (which acts as the puts command in a modulefile context) * testsuite/bin/install_test_tcl: testsuite: fix install_test_tcl for Tcl8.5 compat * testsuite/modulefiles/source/0.9, testsuite/modulefiles/source/1.0, testsuite/modules.50-cmds/330-source.exp, testsuite/modules.90-avail/070-full.exp: testsuite: check 'module source' when called from modfile * modulecmd.tcl.in: Ensure false is rendered only once If a false statement has already been rendered, do not render it again even if renderFalse procedure is called a second time. Useful in case within a modulefile interpretation a command ends up with a reportErrorAndExit statement, then renderSettings is called. * modulecmd.tcl.in: Handle 'source' command in unload and display mode Report command call in display mode and change source in unsource on unload mode. Also reverse order of script to interpret on unload. Closes #137 2017-12-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/050-modpath.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.20-locate/040-alias.exp, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.20-locate/046-getsym.exp, testsuite/modules.20-locate/047-symerrs.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.50-cmds/010-init_ts.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/020-setenv.exp, testsuite/modules.50-cmds/022-setenv-eschars.exp, testsuite/modules.50-cmds/025-setenv-undo.exp, testsuite/modules.50-cmds/028-setenv-refcount.exp, testsuite/modules.50-cmds/030-unsetenv.exp, testsuite/modules.50-cmds/035-unsetenv-undo.exp, testsuite/modules.50-cmds/036-unsetenv-x.exp, .../modules.50-cmds/038-unsetenv-refcount.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/076-alias-sub.exp, testsuite/modules.50-cmds/077-alias-undo.exp, testsuite/modules.50-cmds/078-refresh.exp, testsuite/modules.50-cmds/080-info-name.exp, testsuite/modules.50-cmds/081-info-user.exp, testsuite/modules.50-cmds/082-info-user-exp.exp, testsuite/modules.50-cmds/086-info-shells.exp, testsuite/modules.50-cmds/087-info-shells-exp.exp, testsuite/modules.50-cmds/088-info-isloaded.exp, testsuite/modules.50-cmds/089-info-type.exp, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/100-loglevel.exp, testsuite/modules.50-cmds/101-badfac.exp, testsuite/modules.50-cmds/105-trace.exp, testsuite/modules.50-cmds/110-verbose.exp, testsuite/modules.50-cmds/115-verbose-msg.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp, testsuite/modules.50-cmds/140-system.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/172-swap-app-delim.exp, testsuite/modules.50-cmds/173-swap-app-delim.exp, testsuite/modules.50-cmds/175-swap2.exp, testsuite/modules.50-cmds/177-swap-prep-delim.exp, testsuite/modules.50-cmds/178-swap-prep-delim.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/195-load-recurs.exp, testsuite/modules.50-cmds/197-load-lots.exp, testsuite/modules.50-cmds/200-break.exp, testsuite/modules.50-cmds/220-continue.exp, testsuite/modules.50-cmds/230-loop.exp, testsuite/modules.50-cmds/240-chdir.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/080-access.exp, testsuite/modules.70-maint/020-update.exp, testsuite/modules.70-maint/030-purge.exp, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/050-whatis-load.exp, testsuite/modules.70-maint/100-path.exp, testsuite/modules.70-maint/110-paths.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.80-deep/010-init_ts.exp, testsuite/modules.80-deep/021-unload.exp, testsuite/modules.91-sort/010-init_ts.exp, testsuite/modules.95-version/010-init_ts.exp, testsuite/modules.95-version/020-load.exp, testsuite/modules.95-version/020-unload.exp, testsuite/modules.95-version/022-load2.exp, testsuite/modules.95-version/022-unload2.exp, testsuite/modules.95-version/040-xgetenv.exp, testsuite/modules.95-version/999-cleanup.exp: testsuite: use 'modpath' rather 'env(MODULEPATH)' * NEWS.rst: doc: desc path/info-loaded/no-arg-case in NEW * doc/source/module.rst, doc/source/modulefile.rst, modulecmd.tcl.in, testsuite/modules.00-init/071-args.exp, testsuite/modules.50-cmds/321-is-used.exp, testsuite/modules.70-maint/155-is-used.exp: Handle no argument case on 'is-used' Returns true when no argument is passed to 'is-used' if any directory is used, whatever it is. Adapt docs and test cases to this new behavior. Acknowledgment: this development has been made and funded within the framework of the PRACE Fifth Implementation Phase (PRACE-5IP) project (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's Horizon 2020 research and innovation programme (2014-2020) under grant agreement no. 730913. Closes #144 * doc/source/module.rst, doc/source/modulefile.rst, modulecmd.tcl.in, testsuite/modules.00-init/071-args.exp, testsuite/modules.50-cmds/320-is-saved.exp, testsuite/modules.70-maint/154-is-saved.exp: Handle no argument case on 'is-saved' Returns true when no argument is passed to 'is-saved' if any collection matching currently set collection target exists whatever this collection is. Adapt docs and test cases to this new behavior. Acknowledgment: this development has been made and funded within the framework of the PRACE Fifth Implementation Phase (PRACE-5IP) project (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's Horizon 2020 research and innovation programme (2014-2020) under grant agreement no. 730913. * modulecmd.tcl.in: Extract findCollections proc from cmdModuleSavelist Add an independent procedure to find all collections saved corresponding to enabled collection target. * doc/source/module.rst, doc/source/modulefile.rst, modulecmd.tcl.in, testsuite/modules.00-init/071-args.exp, testsuite/modules.50-cmds/088-info-isloaded.exp, testsuite/modules.70-maint/153-is-loaded.exp: Handle no argument case on 'is-loaded' Returns true when no argument is passed to 'is-loaded' if any modulefile is loaded, whatever it is. Adapt docs and test cases to this new behavior. Acknowledgment: this development has been made and funded within the framework of the PRACE Fifth Implementation Phase (PRACE-5IP) project (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's Horizon 2020 research and innovation programme (2014-2020) under grant agreement no. 730913. * testsuite/modules.70-maint/153-is-loaded.exp: testsuite: improve coverage for is-loaded sub-cmds * modulecmd.tcl.in: Fix 'is-loaded' to handle list of mods as arg Align behavior on other is-* commands and man-page: return 1 if at least one arg matches, return 0 elsewhere. * modulecmd.tcl.in: Make 'is-loaded' relies on 'getLoadedMatchingName' Add a 'returnfirst' return type to the getLoadedMatchingName procedure then make is-loaded use getLoadedMatchingName rather than redoing it. * testsuite/modulefiles/info/isloaded, testsuite/modules.50-cmds/088-info-isloaded.exp: testsuite: improve coverage of 'is-loaded' tests 2017-11-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/bin/install_test_cmake, testsuite/bin/install_test_perl, testsuite/bin/install_test_python, testsuite/bin/install_test_r, testsuite/bin/install_test_ruby, testsuite/bin/install_test_tcl, testsuite/install.00-init/020-module.exp: testsuite: check info-loaded on install suite Adapt install test scripts to output obtained result text. * modulecmd.tcl.in, testsuite/modules.00-init/006-procs.exp, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.20-locate/075-symlink.exp, testsuite/modules.70-maint/100-path.exp, testsuite/modules.70-maint/110-paths.exp: Returning text sub-cmds always returns text In case of error, message is displayed on stderr but commands will still return text, an empty string. If no result are found, an empty string is also set as returning value. Text is returned as result if 'g_return_text' global variable is defined. It has the priority over error/false/true returns. This way text can always be expected as the returned value of a module sub-command returning text in normal cases. Adapt non-regression test cases for 'path' and 'paths'. * doc/source/module.rst, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, testsuite/modulefiles/modbad/info-loaded, testsuite/modules.00-init/071-args.exp, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.70-maint/157-info-loaded.exp, testsuite/modules.90-avail/070-full.exp: Introduce 'info-loaded' as module sub-command Like for 'is-loaded', register 'module-info loaded' modulefile Tcl command as a module sub-command to make it reachable from the command line. Sub-command is named 'info-loaded' for sake of efficiency (not 'module-info-loaded'). Add the new command to the existing shell completion scripts (bash, tcsh fish, zsh). Document new command in the module.1 man page. Check 'info-loaded' command argument error in 071-args tests of 00-init suite. Test 'module info-loaded' cannot be called from a modulefile with 151-module-onlytop in 50-cmds suite. Add 156-info-loaded tests in 70-maint suite to validate new sub-command. Acknowledgment: this development has been made and funded within the framework of the PRACE Fifth Implementation Phase (PRACE-5IP) project (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's Horizon 2020 research and innovation programme (2014-2020) under grant agreement no. 730913. Closes #3 * doc/source/modulefile.rst, modulecmd.tcl.in, testsuite/modulefiles/info/loaded, testsuite/modules.50-cmds/285-info-loaded.exp, testsuite/modules.90-avail/070-full.exp: Introduce 'module-info loaded' modulefile command Add 'loaded' sub-command to the 'module-info' modulefile Tcl command. This new sub-command returns name of the modules currently loaded corresponding to the name passed as argument. May return multiple modules if passed name matches more than one loaded modules. Document new command in modulefile.4 and test it with a 285-info-loaded tests in 50-cmds suite. Acknowledgment: this development has been made and funded within the framework of the PRACE Fifth Implementation Phase (PRACE-5IP) project (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's Horizon 2020 research and innovation programme (2014-2020) under grant agreement no. 730913. * testsuite/modules.00-init/006-procs.exp: testsuite: remove shell_echo helper proc Not used anymore as tests using shell_echo moved to shell_text. * modulecmd.tcl.in, testsuite/modules.00-init/006-procs.exp, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/038-defcontext.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.20-locate/075-symlink.exp, testsuite/modules.70-maint/110-paths.exp, testsuite/modules.80-deep/068-transitive.exp: Paths sub-commands now returns text Adapt 'paths' module sub-commands to return text result like 'path' sub-command, rather printing text result. 'paths' may return multiple values as a result, so these values are returned as words in a space separated string. Exception made to real shells where each words is returned(printed as it is real shells) separately, like previously done. As a side effect also, if an error occur a 'false' boolean will be returned rather resulting text. Adapt non-regression tests to align 'paths' test on shell_text procedure rather shell_echo. 2017-11-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles/modbad/path, testsuite/modulefiles/modbad/paths, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.90-avail/070-full.exp: 'path' and 'paths' are only avail from command line * modulecmd.tcl.in, testsuite/modules.00-init/006-procs.exp, testsuite/modules.20-locate/038-defcontext.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.70-maint/100-path.exp: Make sub-commands return text rather printing text Introduce renderText procedure to return a text string rather a true/false boolean. On regular shells, it still echoes text, but on scripting languages a string text value is returned. Apply this new mechanism to the 'path' sub-command. Adapt non-regression tests with the new return code for this sub-command. * modulecmd.tcl.in: Change test to detect something has been sent to stdout Test something has been rendered by looking at the settings arrays or lists rather checking stdout channel. (which does not seem to work, as it returns -1. 2017-11-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc is-{saved,used,avail} in NEWS * testsuite/install.00-init/005-init_ts.exp: testsuite: fix sh_family specific install tests Was broken if one sh shell was not installed. * doc/source/module.rst, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, testsuite/modulefiles/modbad/is-avail, testsuite/modules.00-init/071-args.exp, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.70-maint/156-is-avail.exp, testsuite/modules.90-avail/070-full.exp: Introduce 'is-avail' as module sub-command Like for 'append-path', register 'is-avail' modulefile Tcl command as a module sub-command to make it reachable from the command line. Add the new command to the existing shell completion scripts (bash, tcsh fish, zsh). Document new command in the module.1 man page. Check 'is-avail' command argument error in 071-args tests of 00-init suite. Test 'module is-avail' cannot be called from a modulefile with 151-module-onlytop in 50-cmds suite. Add 155-is-avail tests in 70-maint suite to validate new sub-command. Acknowledgment: this development has been made and funded within the framework of the PRACE Fifth Implementation Phase (PRACE-5IP) project (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's Horizon 2020 research and innovation programme (2014-2020) under grant agreement no. 730913. * doc/source/modulefile.rst, modulecmd.tcl.in, testsuite/modulefiles/info/isavail, testsuite/modules.50-cmds/322-is-avail.exp: Add 'is-avail' modulefile command Introduce 'is-avail' modulefile command to check, following the same spirit than 'is-loaded', if any of the passed modulefiles exists in enabled in MODULEPATH. Document new command in modulefile.4 and test it with a 322-is-avail tests in 50-cmds suite. Acknowledgment: this development has been made and funded within the framework of the PRACE Fifth Implementation Phase (PRACE-5IP) project (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's Horizon 2020 research and innovation programme (2014-2020) under grant agreement no. 730913. * doc/source/module.rst, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, testsuite/modulefiles/modbad/is-used, testsuite/modules.00-init/071-args.exp, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.70-maint/155-is-used.exp, testsuite/modules.90-avail/070-full.exp: Introduce 'is-used' as module sub-command Like for 'append-path', register 'is-used' modulefile Tcl command as a module sub-command to make it reachable from the command line. Add the new command to the existing shell completion scripts (bash, tcsh fish, zsh). Document new command in the module.1 man page. Check 'is-used' command argument error in 071-args tests of 00-init suite. Test 'module is-used' cannot be called from a modulefile with 151-module-onlytop in 50-cmds suite. Add 154-is-used tests in 70-maint suite to validate new sub-command. Acknowledgment: this development has been made and funded within the framework of the PRACE Fifth Implementation Phase (PRACE-5IP) project (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's Horizon 2020 research and innovation programme (2014-2020) under grant agreement no. 730913. * doc/source/modulefile.rst, modulecmd.tcl.in, testsuite/modulefiles/info/isused, testsuite/modules.50-cmds/321-is-used.exp: Add 'is-used' modulefile command Introduce 'is-used' modulefile command to check, following the same spirit than 'is-loaded', if any of the passed directories has been enabled in MODULEPATH. Document new command in modulefile.4 and test it with a 321-is-used tests in 50-cmds suite. Acknowledgment: this development has been made and funded within the framework of the PRACE Fifth Implementation Phase (PRACE-5IP) project (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's Horizon 2020 research and innovation programme (2014-2020) under grant agreement no. 730913. 2017-11-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, testsuite/modulefiles/modbad/is-saved, testsuite/modules.00-init/071-args.exp, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.70-maint/154-is-saved.exp, testsuite/modules.90-avail/070-full.exp: Introduce 'is-saved' as module sub-command Like for 'append-path', register 'is-saved' modulefile Tcl command as a module sub-command to make it reachable from the command line. Add the new command to the existing shell completion scripts (bash, tcsh fish, zsh). Document new command in the module.1 man page. Check 'is-saved' command argument error in 071-args tests of 00-init suite. Test 'module is-saved' cannot be called from a modulefile with 151-module-onlytop in 50-cmds suite. Add 154-is-saved tests in 70-maint suite to validate new sub-command. Acknowledgment: this development has been made and funded within the framework of the PRACE Fifth Implementation Phase (PRACE-5IP) project (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's Horizon 2020 research and innovation programme (2014-2020) under grant agreement no. 730913. * doc/source/modulefile.rst, modulecmd.tcl.in, testsuite/modulefiles/info/issaved, testsuite/modules.50-cmds/320-is-saved.exp, testsuite/modules.90-avail/070-full.exp: Add 'is-saved' modulefile command Introduce 'is-saved' modulefile command to check, following the same spirit than 'is-loaded', if any of the passed collections exists. Document new command in modulefile.4 and test it with a 320-is-saved tests in 50-cmds suite. Acknowledgment: this development has been made and funded within the framework of the PRACE Fifth Implementation Phase (PRACE-5IP) project (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's Horizon 2020 research and innovation programme (2014-2020) under grant agreement no. 730913. 2017-11-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/020-module.exp: testsuite: use unk mod to ensure !is-loaded test * NEWS.rst: doc: desc *-path and is-loaded cmds in NEWS * testsuite/bin/install_test_tcl, testsuite/install.00-init/020-module.exp: testsuite: test a command return false in install suite Add tests in install testsuite to check commands returning true or false as result. Use new sub-command 'is-loaded' for test. * doc/source/module.rst, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in, testsuite/modulefiles/modbad/is-loaded, testsuite/modules.00-init/071-args.exp, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.70-maint/153-is-loaded.exp, testsuite/modules.90-avail/070-full.exp: Introduce 'is-loaded' as module sub-command Like for 'append-path', register 'is-loaded' modulefile Tcl command as a module sub-command to make it reachable from the command line. Improve 'cmdModuleResurface' procedure to set a global 'g_return_false' flag when 'is-loaded' command returns 0. If 'g_return_false' flag is set shell code rendering will end with a false value returned. Add the new command to the existing shell completion scripts (bash, tcsh fish, zsh). Document new command in the module.1 man page. Check 'is-loaded' command argument error in 071-args tests of 00-init suite. Test 'module is-loaded' cannot be called from a modulefile with 151-module-onlytop in 50-cmds suite. Add 153-is-loaded tests in 70-maint suite to validate new sub-command. Acknowledgment: this development has been made and funded within the framework of the PRACE Fifth Implementation Phase (PRACE-5IP) project (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's Horizon 2020 research and innovation programme (2014-2020) under grant agreement no. 730913. Closes #116 * testsuite/modules.00-init/071-args.exp: testsuite: tests bad arg number for *-path cmds * testsuite/modules.70-maint/150-append-path.exp, testsuite/modules.70-maint/151-prepend-path.exp, testsuite/modules.70-maint/152-remove-path.exp: testsuite: add *-path tests in 70-maint Add 150-append-path, 151-prepend-path and 152-remove-path tests to the 70-maint suite to check these new module sub-command. 2017-11-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles/modbad/append-path, testsuite/modulefiles/modbad/autoinit, testsuite/modulefiles/modbad/foo, testsuite/modulefiles/modbad/help, testsuite/modulefiles/modbad/prepend-path, testsuite/modulefiles/modbad/remove-path, testsuite/modules.50-cmds/151-module-onlytop.exp, testsuite/modules.90-avail/070-full.exp: testsuite: add 151-module-onlytop in 50-cmds suite Check module sub-commands that cannot be called within modulefile. * doc/source/module.rst, init/bash_completion.in, init/fish_completion, init/tcsh_completion.in, init/zsh-functions/_module, modulecmd.tcl.in: Improve new {append,prepend,remove}-path commands Refactor code to call from the module command line modulefile-specific commands. These commands can only be called from the command line, not when calling 'module' procedure from a modulefile, to avoid any ambiguity. When parsing command line arguments, check context to know if '-d' means '--default' (avail command) or '--delim' (*-path commands). Add the new commands to the existing shell completion scripts (bash, tcsh, fish, zsh). Document new commands in the module.1 man page. Acknowledgment: this development has been made and funded within the framework of the PRACE Fifth Implementation Phase (PRACE-5IP) project (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's Horizon 2020 research and innovation programme (2014-2020) under grant agreement no. 730913. 2017-03-02 Bert Wesarg <bert.wesarg@googlemail.com> * modulecmd.tcl.in: New subcommands to run (prepend|append|remove)-path directly from the command line. 2017-11-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: desc module function return and stdout spool * modulecmd.tcl.in, testsuite/modulefiles/puts/1, testsuite/modulefiles/puts/2, testsuite/modulefiles/puts/3, testsuite/modulefiles/puts/4, testsuite/modulefiles/puts/5, testsuite/modulefiles/puts/6, testsuite/modules.00-init/006-procs.exp, testsuite/modules.50-cmds/083-info-mode.exp, testsuite/modules.50-cmds/084-info-mode-exp.exp, testsuite/modules.50-cmds/085-info-flags.exp, testsuite/modules.50-cmds/310-puts.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.90-avail/070-full.exp: Spool puts stdout command to render after env changes Supersede 'puts' command to catch content sent to stdout within modulefile in order to postpone content channel send after rendering on stdout the relative environment changes required by the modulefile. By doing so, environment variable set within modulefile will be available when outputing directly command to the stdout channel. A 'putsModfileCmd' procedure is added to catch all 'puts' call in a modulefile interpretation. This procedure analyzes if the puts command targets the stdout channel. If so, command argument is saved in a 'g_stdoutPuts' global list to be then processed during renderSettings. If no, the real puts is called (for stderr send for instance). Add 50-cmds/310-puts non-regression tests to garanty all kind of puts command are well processed. Closes #113 2017-11-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/cmake.in, init/perl.pm.in, init/python.py.in, init/ruby.rb.in: Return dummy true on compat module function Make compatibility module function to always return a value to be able to check function result either new main version or compat version is called. Adapt cmake, perl, python and ruby compat module function to return a true value. Always true is returned as compat version does not handle returning error exit code. * modulecmd.tcl.in, testsuite/install.00-init/020-module.exp, testsuite/modules.00-init/006-procs.exp: Protect sensitive unsetenv on Tcl shell When rendering an unsetenv modulefile command, protect the corresponding "unset env(VAR)" with a 'catch' Tcl command as unset will raise an error if env(VAR) does not exist prior to unset it. * modulecmd.tcl.in, testsuite/modules.00-init/006-procs.exp, testsuite/modules.20-locate/050-locrc.exp: Render 'true' only if something output already Optimize content sent to stdout by only sending 'true' statement if something else was sent before that. Nothing written on stdout means everything is fine and the module function defined for all shells already take that into account, as assigned result status is set to true before calling for modulecmd.tcl. With this change, stdout channel is left empty for sub-commands not outputing shell code like avail, help, ... * modulecmd.tcl.in, testsuite/modules.00-init/006-procs.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.50-cmds/083-info-mode.exp, testsuite/modules.50-cmds/084-info-mode-exp.exp, testsuite/modules.50-cmds/085-info-flags.exp: Align 'true' rendering of sh/csh/fish with other shells When calling for a 'true' statement at the end of shell code rendering, also express a true statement for sh/csh/fish as it is the case for other shells. True statement will also be produced even if something has already been sent to stdout channel. To ensure in all cases that shell code will finish on a true statement if code is correctly generated. 2017-11-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/006-procs.exp, testsuite/modules.70-maint/120-autoinit.exp: Render true/false with a variable assignment Set a local variable on shells to return true or false status, like already done on cmake and python. This way shells treat the return status in the same way. For other shells that cmake and python, it does not change behavior as the variable assignement returns the value assigned, so it still returns a boolean as last rendered operation. 'real' shells are not touched as they already return in all cases a boolean status without any specific assignment. Prior to modulecmd.tcl execution, the variable used for returned status assignement is initialized to 'true'. This way we are sure the variable will always be set and with a default 'true' value we may optimize rendering as no rendering means true. 2017-11-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.70-maint/070-display.exp: Rename renderError/Ok in renderFalse/True * modulecmd.tcl.in, testsuite/modules.00-init/030-shells.exp, testsuite/modules.00-init/071-args.exp, testsuite/modules.00-init/090-switches.exp, testsuite/modules.10-use/080-access.exp, testsuite/modules.10-use/090-bad.exp, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/035-defname.exp, testsuite/modules.20-locate/038-defcontext.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.50-cmds/301-interp-command.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.60-initx/010-list.exp, testsuite/modules.60-initx/020-add.exp, testsuite/modules.60-initx/030-switch.exp, testsuite/modules.60-initx/040-prepend.exp, testsuite/modules.60-initx/050-rm.exp, testsuite/modules.60-initx/060-2nd.exp, testsuite/modules.60-initx/080-access.exp, testsuite/modules.61-coll/020-savelist.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/050-saverm.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.61-coll/080-access.exp, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/043-listno.exp, testsuite/modules.70-maint/045-listlong.exp, testsuite/modules.70-maint/048-listlongno.exp, testsuite/modules.70-maint/056-whatis-nullpath.exp, testsuite/modules.70-maint/060-apropos.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.80-deep/068-transitive.exp, testsuite/modules.80-deep/080-access.exp, testsuite/modules.90-avail/020-single.exp, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/050-long.exp, testsuite/modules.90-avail/060-empty.exp, testsuite/modules.90-avail/070-full.exp, testsuite/modules.91-sort/020-avail.exp: Render 'true' or 'false' at end of all sub-commands Until now some module sub-commands did not finish their run with an ok statement when everything goes well. It was the case for avail, aliases, list, apropos/search/keyword, save*, init* and help (without arg). However when some errors occurred on these commands, they were returning an error statement. To apply same behavior to all commands whatever the result is (error occurred or not) a call to renderSettings is made after all commands which will produce a true or false statement sent to stdout. As a consequence the return value of all module sub-command call can be checked against a true/false value. Even if modulecmd.tcl should now return a true/false statement, keep checks on the intermediate variable required on python and cmake shells to guaranty a false boolean return in case very bad stuff happened within modulecmd.tcl not producing the intermediate variable statement. Adapt all non-reg tests to get correct return code (OK or ERR). Note that when apropos/search/keyword hit a modulefile error when interpreting, it will return a 'false' statement even if result output seem correct (as these kind of error are not hidden to better read obtained result). 2017-11-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/006-procs.exp, testsuite/modules.70-maint/120-autoinit.exp: Rename _mlret var to _mlstatus in autoinit To better distinguish this internal variable from the _mlre variable used for quarantine mechanism. * testsuite/bin/install_test_cmake, testsuite/bin/install_test_perl, testsuite/bin/install_test_python, testsuite/bin/install_test_r, testsuite/bin/install_test_ruby, testsuite/bin/install_test_tcl: testsuite: adapt install scripts to check ret value Adapt tcl, perl, python, ruby, cmake and R install test scripts to check module command result based on new boolean return value system. * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Adapt perl/python/cmake/r autoinit to return status Change module function defined for perl, python, cmake and R, to return the status (true or false) obtained at rendering end. Also drop on perl the carp error handling, to get same error handling for all shells. * modulecmd.tcl.in, testsuite/modules.00-init/006-procs.exp, testsuite/modules.70-maint/070-display.exp: Make shells return 'false' rather raising exception Use an expression for each supported shell to say 'false' when error occurred during modulecmd.tcl process. This was already the behavior for the sh/csh/fish shells but a change is made to the other lang shells where previously an exception was raised in case of error. Moving from a raised exception to a boolean return seem to be more appropriate for the calling scripts, which will not explode anymore each time a modulefile is not found for instance. Boolean return opens the path to a return value check on all supported shells (was only possible on sh/csh/fish before that). Now all shells are aligned with a 'true' value returned in case of success rendering and a 'false' value returned in case of error. * modulecmd.tcl.in, testsuite/modules.00-init/006-procs.exp: Make shells return 'true' when rendering ok Add an expression for each supported shell to say 'true' when code rendering is perfomed and things are ok. A 'renderOk' procedure is added following same principle than 'renderError'. These code additions keep the ability for the rendering to be called from the shell module function or from a direct execution. To achieve that instead of using a 'return true' statement, which would had no meaning outside of a module function, a true statement is expressed. Most of the shells will return the result from the last evaluated statement. For shells not returning result from the last evaluated statement (python, cmake), a variable is set to true. This variable will be used in module function to return the status value. For the sh/csh/fish shells, no code is rendered if something has already been sent to stdout, as in this case the last lines will return 'true' by itself. 2017-11-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/030-shells.exp, testsuite/modules.00-init/080-begenv.exp, testsuite/modules.00-init/090-switches.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/032-prepend.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.20-locate/020-fqual.exp, testsuite/modules.20-locate/030-defvers.exp, testsuite/modules.20-locate/035-defname.exp, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/055-locrcerrs.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/065-rcerrs.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.20-locate/075-symlink.exp, testsuite/modules.50-cmds/083-info-mode.exp, testsuite/modules.50-cmds/084-info-mode-exp.exp, testsuite/modules.50-cmds/085-info-flags.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/260-getenv.exp, testsuite/modules.50-cmds/280-info-specified.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.50-cmds/284-info-others.exp, testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.50-cmds/301-interp-command.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.60-initx/010-list.exp, testsuite/modules.60-initx/020-add.exp, testsuite/modules.60-initx/030-switch.exp, testsuite/modules.60-initx/040-prepend.exp, testsuite/modules.60-initx/050-rm.exp, testsuite/modules.60-initx/060-2nd.exp, testsuite/modules.60-initx/080-access.exp, testsuite/modules.61-coll/020-savelist.exp, testsuite/modules.70-maint/020-update.exp, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/043-listno.exp, testsuite/modules.70-maint/045-listlong.exp, testsuite/modules.70-maint/048-listlongno.exp, testsuite/modules.70-maint/055-whatis.exp, testsuite/modules.70-maint/056-whatis-nullpath.exp, testsuite/modules.70-maint/060-apropos.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.90-avail/020-single.exp, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/050-long.exp, testsuite/modules.90-avail/060-empty.exp, testsuite/modules.90-avail/070-full.exp, testsuite/modules.91-sort/020-avail.exp, testsuite/modules.91-sort/030-whatis.exp: testsuite: check out and err channels for all tests Always use testouterr* procedures to check both stdout and stderr channels output. * modulecmd.tcl.in: Move autoinit code in a renderAutoinit proc Move it out of renderSettings to improve overall readability. * modulecmd.tcl.in: No render struct change during display mode setenv 2017-11-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/006-procs.exp, testsuite/modules.70-maint/120-autoinit.exp: Interpret Tcl rendered code in proc context When using module interface in a Tcl script, previous code was upleveling generated modules code to render environment changes. Now that env array is declared withing proc, eval can be used rather uplevel to render. By the way, if things are ok, do not exec true. Does not have sense in a Tcl script context. 2017-11-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/006-procs.exp: Express true or false on sh/csh/fish with test Use the buildins 'test' function to express true or false value on sh-kind, csh-kind or fish shells rather making a call to an external command (/bin/true and /bin/false). * NEWS.rst, doc/source/module.rst: doc: desc MODULES_SILENT_SHELL_DEBUG in module.1 and NEWS * INSTALL.rst: doc: add --with-quarantine-vars in INSTALL * testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/030-options.exp: testsuite: check MODULES_SILENT_SHELL_DEBUG Simple tests to verify MODULES_SILENT_SHELL_DEBUG environment variable does not break module command. 2017-11-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/010-environ.exp, testsuite/install.00-init/060-quar.exp, testsuite/modulefiles.other/quar, testsuite/modules.00-init/110-quar.exp: testsuite: shield quar tests against cur env * init/bash.in, init/ksh.in, init/sh.in, init/zsh.in, modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Silent sh-shells debug if MODULES_SILENT_SHELL_DEBUG Introduce MODULES_SILENT_SHELL_DEBUG environment variable to silent the xtrace and verbose output on sh-kind shells. When set (means MODULES_SILENT_SHELL_DEBUG=1), current xtrace and verbose flags are saved then these shell properties are disabled. Once execution is finished, saved setup is restored. This mechanism is defined on initialization scripts, at the beginning to silent, at the end to restore defined behavior. It is also defined within the module function following exact same principle. By default, xtrace and verbose shell properties are applied to module function and initialization script if enabled in calling shell script or interactive session. These properties are disabled in module context only if MODULES_SILENT_SHELL_DEBUG is set to '1'. Notice that if xtrace/verbose properties are set, shell code that leads to disable them when MODULES_SILENT_SHELL_DEBUG is set will be outputed as debugging is set during these operations. The mechanism only applies to the SH-shell family. Closes #121 * NEWS.rst: doc: describe quarantine mechanism in NEWS 2017-11-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst: doc: reorder env var in module.1 * doc/source/module.rst: doc: describe quar-related variables in module.1 2017-11-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml: travis: revert array handling of CONFIGURE_OPTS Array set is not understood on travis env setup. Revert to single-quote string set. Just check a simpler quarantine configuration for the moment. * .travis.yml: travis: handle CONFIGURE_OPTS as shell array * .travis.yml: travis: check quarantine configuration in some builds * testsuite/install.00-init/060-quar.exp: testsuite: adapt install suite for quar config Add a specific test in 060-quar in case quarantine has been configured at build time, to check chosen configuration is correctly applied in shells. This test replaces all other quarantine tests, as init script is set with quarantine-related variables and the regular tests cannot supersede that. * contrib/rpm/environment-modules.spec.in: rpm: define LD_LIBRARY_PATH as quarantine var * Makefile.inc.in, configure, init/Makefile, init/bash.in, init/cmake.in, init/fish.in, init/ksh.in, init/perl.pm.in, init/python.py.in, init/r.R.in, init/ruby.rb.in, init/sh.in, init/tcl.in, init/zsh.in, site.exp.in: install: add --with-quarantine-vars Add --with-quarantine-vars configure option to define quarantine mechanism configuration at build time. Value passed to the configure option will be used by Makefile to initialize in the various initialization scripts the MODULES_RUN_QUARANTINE variable and eventual MODULES_RUNENV_<VAR>. * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Use _ml-prefixed var name to return code on sh shells 2017-11-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash.in, init/ksh.in, init/sh.in, init/zsh.in, modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Handle IFS in a sh-compatible way On sh shell like dash, IFS cannot be local var. Also when setting IFS with the "IFS=$' ';" syntax $ character is also added to the IFS value. * testsuite/install.00-init/060-quar.exp, testsuite/modules.00-init/110-quar.exp: testsuite: check quar mech with ' ' and '"' val Adapt quarantine mechanism tests to check variable values containing space and double-quote. Single quote currently leads to issue. Should not be an immediate problem due to the kind of variables and relative values this mechanism will handle (LD_LIBRARY_PATH, LD_PRELOAD, etc). * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Put autoinit code in braces as much as possible Use braces for the different shell autoinit code to avoid special character espacing as much as we can in these complex piece of shell code. In some cases, braces cannot be used: when variable value should be replaced and when a beginning brace does not match a close brace in the same string). * testsuite/install.00-init/060-quar.exp: testsuite: test bad libpath setup in install/060-quar Check fake LD_LIBRARY_PATH setup is taken into account in 060-quar test of install testsuite before running test. Skip test if tclsh does not rise to the bait. 2017-11-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash.in, init/ksh.in, init/sh.in, init/zsh.in, modulecmd.tcl.in, testsuite/install.00-init/060-quar.exp, testsuite/modules.70-maint/120-autoinit.exp: Ensure correct IFS on sh-kind script or func With quarantine mechanism sh-kind init scripts or module function are sensitive to IFS value. If space character is not part of IFS, eval command will not be able to understand command-line string. This commit add code in init scripts and module function to guaranty correct value for IFS. * testsuite/install.00-init/060-quar.exp: testsuite: check runenv in install.00-init/060-quar Add test in 060-quar of install suite to check runtime environment value for quarantine variable are effectively set. Test is made by providing a bad LD_LIBRARY_PATH that will crash all execs. 2017-11-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/r.R.in, modulecmd.tcl.in, testsuite/install.00-init/060-quar.exp, testsuite/modules.70-maint/120-autoinit.exp: Add quarantine mechanism support to r * init/cmake.in, modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Add quarantine mechanism support to cmake * init/ruby.rb.in, modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Add quarantine mechanism support to ruby 2017-11-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/python.py.in, modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Add quarantine mechanism support to python * init/perl.pm.in, modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Add quarantine mechanism support to perl * init/tcl.in, modulecmd.tcl.in, testsuite/install.00-init/060-quar.exp, testsuite/modules.70-maint/120-autoinit.exp: Add quarantine mechanism support to tcl 2017-11-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/fish.in, modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Add quarantine mechanism support to fish * modulecmd.tcl.in, testsuite/install.00-init/060-quar.exp, testsuite/modules.00-init/110-quar.exp: No quarantine mechanism support on CSH-kind shells Tried to make it fit within the 'module' alias, with no success. 'foreach' and nested 'if' do not cope with csh alias. Tests have been adapted to skip csh/tcsh shells. Also MODULES_RUN_QUARANTINE variable is purely ignored if detected shell is from CSH family. 2017-11-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Improve generation of csh autoinit code 2017-11-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash.in, init/ksh.in, init/sh.in, init/zsh.in, modulecmd.tcl.in, testsuite/install.00-init/060-quar.exp, testsuite/modules.00-init/110-quar.exp, testsuite/modules.70-maint/120-autoinit.exp: Improve variable name check in MODULES_RUN_QUARANTINE A variable name cannot start with a [0-9] character. * testsuite/modules.70-maint/120-autoinit.exp: testsuite: fix autoinit test in coverage mode * init/bash.in, init/ksh.in, init/sh.in, init/zsh.in, modulecmd.tcl.in, testsuite/install.00-init/060-quar.exp, testsuite/modules.00-init/110-quar.exp, testsuite/modules.70-maint/120-autoinit.exp: Validate variable names set in MODULES_RUN_QUARANTINE Test that the names of the environment variable defined in MODULES_RUN_QUARANTINE are valid names. Add test in quarantine setup code within init scripts (silent check) and also test in modulecmd.tcl. The latter reports a warning if a bad name is detected. Add a non-regression test in modules.00-init and install.00-init test suites. 2017-11-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/010-environ.exp, testsuite/install.00-init/050-crossshell.exp, testsuite/install.00-init/060-quar.exp: testsuite: add 060-quar to install.00-init suite Check real operation of the quarantine mechanism at the initialization stage and during call of module commands. Setup a fake libtcl .so library to verify quarantine is correctly protecting tclsh at runtime. * init/bash.in, init/ksh.in, init/sh.in, init/zsh.in: init: setup quarantine before autoinit for SH shells As now a call to modulecmd.tcl defines the module function and surrounding initial environment, this execution should also be shield against bad environment with quarantine mechanism. 2017-11-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.other/quar, testsuite/modules.00-init/010-environ.exp, testsuite/modules.00-init/110-quar.exp, testsuite/modules.70-maint/120-autoinit.exp: testsuite: add 110-quar tests in 00-init suite Check handling of environment variables related to the quarantine runtime feature Adapt tests in 70-maint/120-autoinit to new module function code. * modulecmd.tcl.in: Introduce quarantine runtime (sh shells only) Introduce a mechanism set within module function definition to modify modulecmd.tcl runtime environment in order to protect it from side-effect coming from the current user environment definition. For instance, if modulecmd.tcl is installed to work with a tclsh version 8.4 but current environment has enabled a libtcl8.6.so in LD_LIBRARY_PATH, this environment will not be able to run modulecmd.tcl anymore. Quarantine runtime mechanism helps to define a sane LD_LIBRARY_PATH value which will be set for modulecmd.tcl to guaranty correct operations. The mechanism is piloted by environment variables. First of all MODULES_RUN_QUARANTINE, a space-separated list of environment variable names. Every variable found in MODULES_RUN_QUARANTINE will be set in quarantine during the modulecmd.tcl runtime. Their value will be set empty or set to the value of the corresponding MODULES_RUNENV_<VAR> environment variable if defined. The initial value these variables have will be passed to modulecmd.tcl via the '<VAR>_modquar' variable. Then once modulecmd.tcl is started it restores <VAR> to the content found in <VAR>_modquar (its original value). This commit adds the feature for the SH-kind shells only (sh, bash, ksh and zsh). Some complex shell code was required to distinguish an unset variable from a variable set empty: `eval 'echo ${'$var'+x}'`. Code is also slightly different for sh shell than other sh-kind shells due to a different supported syntax to define local variable. No 'typeset' builtin is found on a pure sh shell, like dash. 'ksh' on its side does not understand 'local' builtin. So code for 'sh' shell uses 'local' builtin and other sh-kind shells use 'typeset'. Zsh code has a difference compared to the other sh shells, as word splitting need to be explicitly enabled with a '${=var}' syntax. Space is used as variable name separator in MODULES_RUN_QUARANTINE variable, as it is the most convenient separator to work with in SH-kind shells (no need to adapt IFS). * site.exp.in, testsuite/modules.70-maint/120-autoinit.exp: testsuite: add 'install_tclsh' var in site.exp 2017-11-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/Makefile: install: fix use of ifeq/wildcard in Makefile Prefer 'rmdir --ignore-fail-on-non-empty' which is evaluated at runtime. ifeq is evaluated at Makefile read. * doc/source/conf.py: Fix no branch name for version release on RTD builds * Makefile, doc/source/conf.py: Correct version release tag in Makefile and Sphinx * INSTALL.rst, NEWS.rst: doc: describe pager support in NEWS * .travis.yml: travis: test various pager configure setup * modulecmd.tcl.in: A 'cat' pager value set in script means disabling * modulecmd.tcl.in: --paginate enables paging only not disabled from script * modulecmd.tcl.in: Detect use of less/cat pager even if set as full path 2017-10-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.rst, Makefile, Makefile.inc.in, configure, contrib/rpm/environment-modules.spec.in, modulecmd.tcl.in, site.exp.in, testsuite/modules.00-init/100-pager.exp: install: add --with-pager and --with-pager-opts Add --with-pager and --with-pager-opts configure options to choose at build time pager setup. * modulecmd.tcl.in: Remove g_use_pager, redundant with g_pager Set g_pager to the empty value to disable message output paging by default. 2017-10-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/010-environ.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.00-init/100-pager.exp: testsuite: add 100-pager tests in 00-init suite Check handling of options related to pager feature. 2017-10-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add '-K' option to less pager Quit less pager on interupt (^C typed) instead of trapping it. As module is set as a shell function, SIGINT signal is first send to this function and its underlying children (modulecmd + less pager). If less trap this interput it will remain alone after end of module function and modulecmd process, but not in direct interaction with terminal. So it seems preferable to end pager at the same time its parent process vanish. Without option '-K', less continues until reading all its remaining stdin buffer. An alternative would be to trap signal within modulecmd, but it implies using the TclX extension to get access to the 'signal' procedure. Moreover, after effect will quite be the same, as shell function is terminated and remaining processed are not in direct interaction with terminal. For the record, trapping signal in modulecmd makes this process able to finish right after the pager command. Procedure designated to trap signal will be run once currently blocking IO is processed. Then close of pipe descriptor will finished once pager finish in turns to process it remaining stdin buffer. Instead of using TclX, Expect extension may be used to trap signal but with exact same handling behavior than TclX. Another lead would be to trap/untrap signal within shell function, but signal is then completely ignored. * modulecmd.tcl.in: Increase pager fd buffer size to 64k More aligned with the buffer size 'less' is setting-up. Should be sufficent to handle most kind of output content in one pass. * modulecmd.tcl.in: Handle case when pager is ended (killed or quit) Catch cases when pager is ended before all messages are reported to it ('q' pressed or process killed). Error raised from 'puts' call are ignored with 'catch'. As we handle here informational messages, do not end the full modulecmd process when message channel is dead. Also protect pager fd operations in cleanupAndExit, in case pipe is not operational anymore. 2017-10-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Fetch tty cols only if needed via getTtyColumns proc * modulecmd.tcl.in: Report release nb & info via reportVersion proc * modulecmd.tcl.in: Report usage message in a single output call * modulecmd.tcl.in: Enable pager during first report call Instead of always setting-up pager if enabled, configure and start it only if reporting message. This way, module commands not reporting anything will not got the overhead of the pager setup. 2017-10-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.rst, modulecmd.tcl.in: Introduce pager support Paginate stderr output into paging command, using 'less' by default, following the same fashion and behavior than 'git' command. Pager is enabled by default in modulecmd script. New global variables 'g_use_pager', 'g_pager' and 'g_pager_opts' control default behavior of module command. Pager is enabled only if stderr stream is attached to a terminal. Pager setup can then be superseeded by environment variables. If LESS variable is set and paging command is set to 'less', default pager options are cleared to use those defined in LESS variable. If MODULES_PAGER variable is defined, its value superseeds paging activation, command and options. If this variable is empty, paging is disabled. If PAGER variable is defined and MODULES_PAGER is unset, PAGER value superseeds paging activation, command and options. If this variable is empty, paging is disabled. Default behavior and MODULES_PAGER or PAGER environment variables can be superseeded by command-line options: --paginate to enable paging and --no-pager to disable it. When pager is enabled, a pipe file descripted is ignited to the paging command and option for stderr stream. Once set, this file descriptor is used by all report procedures to output message content, rather using stderr. modulecmd command-line parse has been revised not to output message during argument treatment. Debug, warning and error messages are saved to then be displayed once pager setup is achieved. An 'initPager' procedure is introduced to configure then start paging. A 'cleanupAndExit' is added to close pager before exiting if pager has been started. 2017-10-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS.rst: doc: describe work around autoinit command in NEWS * .gitignore, .travis.yml, Makefile, init/Makefile, .../example/{.modulespath => .modulespath.in}, testsuite/example/{modulerc => modulerc.in}, testsuite/modules.70-maint/120-autoinit.exp: testsuite/travis: rework tests with ex. init config Use make for test config setup rather direct commands in travis configuration. 2017-10-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml: travis: fix install/cmake/R issues * testsuite/install.00-init/010-environ.exp: testsuite: fix bash func cleaning in install suite * modulecmd.tcl.in, testsuite/install.00-init/020-module.exp, testsuite/modules.00-init/006-procs.exp, testsuite/modules.70-maint/120-autoinit.exp: Same kind of error raise code for Tcl than other langs In case of error, an error exit code will be returned (1 instead of 0). * .travis.yml: travis: add other lang pkgs for testinstall 2017-10-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Remove extra newline on Perl autoinit code * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Messages should go to stderr on Tcl autoinit code 2017-10-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/bin/install_test_cmake, testsuite/bin/install_test_perl, testsuite/bin/install_test_python, testsuite/bin/install_test_r, testsuite/bin/install_test_ruby, testsuite/bin/install_test_tcl, testsuite/config/unix.exp, testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/020-module.exp, testsuite/install.00-init/022-module-compat.exp, testsuite/install.00-init/030-options.exp: testsuite: check all langs in install testsuite * init/Makefile: install: skip initdir rmdir if not empty on uninstall 2017-10-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml, testsuite/example/.modulespath, testsuite/example/modulerc, testsuite/modules.70-maint/120-autoinit.exp: testsuite: check various autoinit setup Add example modulerc and .modulespath configuration and test autoinit behavior when these examples are installed in init directory. * modulecmd.tcl.in: Deprecated @prefix@/modulerc in autoinit Keep behavior of init script where only one modulerc file is sourced if it exists (in @initdir@). 2017-10-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash.in, init/cmake.in, init/csh.in, init/fish.in, init/ksh.in, init/perl.pm.in, init/python.py.in, init/r.R.in, init/ruby.rb.in, init/sh.in, init/tcl.in, init/zsh.in: init: shell scripts now rely on autoinit command Make use of autoinit module command to initialize module command and its initial surrounding environment (default value for MODULESHOME, MODULEPATH, LOADEDMODULES and parse of init/.modulespath). Then if compatibility version is currently activated redefined the module command to point to the compat binary. But the compat version will benefit from the surrounding environment initialization made by autoinit. With this change, activated compatibility version will also get its environment initialized by the init/modulerc file whereas before this change only the main version was affected by this setup file. * modulecmd.tcl.in, site.exp.in, testsuite/modules.70-maint/120-autoinit.exp: Use configure tags to set dir locations in autoinit Define in autoinit command the value of MODULESHOME based on @prefix@ configure tag and initialization directory based on @initdir@ rather guessing them from modulecmd.tcl location. Same location approach that initialization scripts this way. 2017-10-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, modulecmd.tcl.in: Parse init/.modulespath in autoinit Parse init/.modulespath like done in initialization script. Call cmdModuleUse for each path entry. This way, relative paths are solved before being registered in MODULEPATH variable. Now reference counter for MODULESPATH is also set when enabling the configured paths. * modulecmd.tcl.in: Define empty MODULEPATH/LOADEDMODULES in autoinit If not previously defined, set an empty MODULEPATH and LOADEDMODULES like done in init script. Do not source modulerc scripts if MODULEPATH or LOADEDMODULES are non-empty. * modulecmd.tcl.in: Define autoinit surrounding env vars in cmdModuleAutoinit Rather in renderSettings where only the module command is defined depending of current shell. Enables to make use of 'setenv' to define surrounding variables like MODULESHOME and call to 'module source' before the rendering stage. * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Make autoinit shell code fit init script definitions Use contribution from Thomas Zeiser for CSH autoinit code (Thomas Zeiser). 2017-10-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.70-maint/120-autoinit.exp: Produce redirect function code on autoinit for sh/fish Integrate the generation of the _moduleraw function on sh-kind and fish shells when calling 'autoinit' command. As for initialization scripts, stderr output redirection is set when a terminal is attached to stderr channel. A 'isATty' procedure is introduced to detect terminal attachement. 2017-10-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash.in, init/fish.in, init/ksh.in, init/sh.in, init/zsh.in: init: redirect stderr msg on stdout if terminal Change from previous behavior where redirection were set if shell was interactive. With this change, a 'sh script' command launched from a terminal session will setup module stderr redirection whereas previously it was not the case as script was not ran in interactive mode. Shell interactive mode is useful to know that interaction will occur on stdin (interesting for completion setup). Knowing session is attached to a terminal seems to be the good pivot to adapt stdout or stderr functioning (help to determine if PAGER mode can be enabled or not on 'git') 2017-10-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, NEWS.rst, contrib/rpm/environment-modules.spec.in: Release of version 4.0.0 2017-10-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/index.rst: doc: add intro and refine toc of index page * configure: travis: fix full git repo detection in configure * .travis.yml: travis: increase git clone depth to catch last tag * contrib/rpm/environment-modules.spec.in: rpm: add 'modules-tcl' provides for auto-upgrade When a previous 'modules-tcl' package is installed, the new 'environment-modules' package will automatically be found as an upgrade candidate. * NEWS.rst: doc: reference last additions for v4.0 to NEWS * INSTALL.rst: doc: describe compat version requirements in INSTALL * README.md: doc: add 'Transition from v3.2' section in README * INSTALL.rst, README.md: doc: describe sphinx requirement at install time 2017-10-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, contrib/doc2www, www/.htaccess, www/Makefile, www/c/INSTALL.html, www/c/NEWS.html, www/c/README.html, www/c/module.html, www/c/modulefile.html, www/index.html, www/modules.css: www: remove website content Website content is simplified now docs are built with sphinx and hosted on Read The Docs. Remaining website content is moved from master branch to gh-pages branch. * .travis.yml: travis: fix manpath install on centos6 container * INSTALL.rst, MIGRATING.rst, NEWS.rst: doc: fix typo and layout in INSTALL/MIGRATING/NEWS * .gitattributes, .gitignore, Makefile, NEWS, NEWS.rst, contrib/rpm/environment-modules.spec.in, doc/Makefile, doc/source/NEWS.rst, doc/source/index.rst: doc: migrate NEWS doc from TXT to RST * .gitattributes, .gitignore, INSTALL.rst, INSTALL.txt, Makefile, doc/Makefile, doc/source/INSTALL.rst, doc/source/index.rst: doc: migrate INSTALL doc from TXT to RST 2017-10-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitattributes, .gitignore, MIGRATING.md => MIGRATING.rst, Makefile, contrib/rpm/environment-modules.spec.in, doc/Makefile, doc/source/MIGRATING.rst, doc/source/index.rst: doc: migrate MIGRATING doc from MD to RST To integrate it into sphinx process and make it available on the Web. * doc/source/conf.py: doc: define sphinx required minimal version in conf 2017-10-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * www/index.html: www: reshape index for new project structure Put download, docs and community information right after introduction section. Simplify content and link to Read The Docs for documentation material. 2017-10-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/install.00-init/030-options.exp: testsuite: fix utilities install test on csh shells * doc/source/module.rst, doc/source/modulefile.rst: doc: detail path variable elt counter in man-pages * MIGRATING.md, doc/source/diff_v3_v4.rst: doc: mention output redirection in migrate and diff 2017-10-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * site.exp.in, testsuite/install.00-init/022-module-compat.exp, testsuite/install.00-init/030-options.exp: testsuite: test compat version installation * .travis.yml: travis: add 'make srpm' test on centos * doc/Makefile: install: use rm rather sphinx to clean built docs 2017-10-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/rpm/environment-modules.spec.in: rpm: fix diff doc location in spec * testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/030-options.exp, testsuite/modules.00-init/006-procs.exp, testsuite/modules.00-init/050-modpath.exp, testsuite/modules.00-init/090-switches.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/032-prepend.exp, testsuite/modules.20-locate/010-init_ts.exp, testsuite/modules.20-locate/020-fqual.exp, testsuite/modules.20-locate/030-defvers.exp, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/035-defname.exp, testsuite/modules.20-locate/038-defcontext.exp, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/055-locrcerrs.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.20-locate/069-cross.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.20-locate/075-symlink.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.20-locate/095-cleanup.exp, testsuite/modules.50-cmds/083-info-mode.exp, testsuite/modules.50-cmds/084-info-mode-exp.exp, testsuite/modules.50-cmds/085-info-flags.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/250-x-resource.exp, testsuite/modules.50-cmds/260-getenv.exp, testsuite/modules.50-cmds/280-info-specified.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.50-cmds/284-info-others.exp, testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.50-cmds/301-interp-command.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.61-coll/080-access.exp, testsuite/modules.61-coll/999-cleanup.exp, testsuite/modules.70-maint/045-listlong.exp, testsuite/modules.70-maint/055-whatis.exp, testsuite/modules.70-maint/060-apropos.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.70-maint/140-multiargs.exp, testsuite/modules.80-deep/010-init_ts.exp, testsuite/modules.80-deep/030-display.exp, testsuite/modules.80-deep/050-whatis.exp, testsuite/modules.80-deep/068-transitive.exp, testsuite/modules.80-deep/080-access.exp, testsuite/modules.80-deep/999-cleanup.exp, testsuite/modules.90-avail/020-single.exp, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/050-long.exp, testsuite/modules.90-avail/070-full.exp, testsuite/modules.91-sort/010-init_ts.exp, testsuite/modules.91-sort/020-avail.exp, testsuite/modules.91-sort/030-whatis.exp, testsuite/modules.91-sort/999-cleanup.exp: testsuite: re modpath string if regexp test Transform modulepath for regexp enabled tests (escape characters having a meaning in regexp like '+') * testsuite/modules.00-init/006-procs.exp, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.20-locate/075-symlink.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.80-deep/022-switch.exp: testsuite: pass err number on shell_err Migrate some ERR test cases to a non '_re' test if they do not require regexp. * testsuite/modules.00-init/006-procs.exp, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/040-alias.exp, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.20-locate/046-getsym.exp, testsuite/modules.20-locate/047-symerrs.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/065-rcerrs.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.20-locate/075-symlink.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/020-setenv.exp, testsuite/modules.50-cmds/030-unsetenv.exp, testsuite/modules.50-cmds/036-unsetenv-x.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/086-info-shells.exp, testsuite/modules.50-cmds/087-info-shells-exp.exp, testsuite/modules.50-cmds/089-info-type.exp, testsuite/modules.50-cmds/101-badfac.exp, testsuite/modules.50-cmds/131-conflict-module.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/230-loop.exp, testsuite/modules.50-cmds/284-info-others.exp, testsuite/modules.80-deep/021-unload.exp, testsuite/modules.80-deep/068-transitive.exp, testsuite/modules.91-sort/040-load.exp, testsuite/modules.95-version/040-xgetenv.exp: testsuite: no _re tests if regexp not needed * .gitattributes, .gitignore, Makefile, ...nt-modules.spec => environment-modules.spec.in}: install: genereate RPM spec to ajust source0 and release 2017-10-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/FAQ.rst, doc/source/index.rst: doc: add FAQ imported from SF wiki * www/.htaccess: www: add .htaccess file to redirect some docs to RTD * INSTALL.txt, Makefile, configure, contrib/rpm/environment-modules.spec, doc/Makefile, init/Makefile: install: use sed rather perl for substitutions Use sed instead of perl in configure and Makefile scripts as perl is not required anymore to build documentation. sed is a lighter requirement to build and install software. * README.md: doc: mention RTD in README * Makefile, doc/source/conf.py: install: no mention of master git branch in vers num * Makefile, doc/Makefile: install: broader usage of makefile translate-in-script * doc/Makefile: install: rm doc BUILD_DIR if exists only 2017-10-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitignore, .travis.yml, INSTALL.txt, Makefile, Makefile.inc.in, README.md, configure, contrib/rpm/environment-modules.spec, doc/Makefile, doc/html/common.css, doc/source/version.py.in: install: adapt doc build process to sphinx Change makefile to build doc with sphinx rather pod. Docs are now pregenerated in dist-tarball, to avoid requiring documentation build tool when installing from these dist-tarball. Adapt travis conf & RPM spec file to the new documentation build process. 2017-10-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/conf.py, doc/source/index.rst: doc: introduce sphinx configuration To build existing manpages and diff_v3_v4 document. 2017-10-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_v3_v4.pod, doc/source/diff_v3_v4.rst, doc/source/module.pod.in, doc/source/module.rst, doc/source/modulefile.pod, doc/source/modulefile.rst: doc: migrate from pod to rst Transform source documents from POD format to reStructuredText to then benefit from Sphinx documentation framework and Read The Docs publishing capabilities. 2017-09-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/Makefile: install: set manpage date to modules build date * modulecmd.tcl.in: Remove license information on help/usage message * doc/Makefile: install: make doc only install man and txt No install of HTML files, so no need to build them at make install. * .gitattributes, .gitignore, Makefile, doc/Makefile, init/Makefile, modulecmd.tcl.in, version.inc.in: install: handle version number through git tags Introduce a version.inc file sourced by Makefiles, that holds release number and build information. Makefiles use these information to set correct version number in manpages and modulecmd.tcl script. version.inc is present in dist tarball. This file is generated from version.inc.in file by main Makefile when working in git repository. Release information are retrieved from the tags of the git repository. Release number corresponds to last git tag set. Build number is the result of the 'git describe' command: this information helps to know from what git branch and commit the current build is made of. 2017-09-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/rpm/environment-modules.spec: rpm: add version to modules-tcl Obsoletes statement Comply with: https://fedoraproject.org/wiki/Packaging:G uidelines#Renaming.2FReplacing_Existing_Packages Thanks to Aurelien Degremont for spotting this. Fixes #133 * doc/source/module.pod.in: doc: add EXIT STATUS section in module.1 * MIGRATING.md, doc/source/diff_v3_v4.pod: doc: describe modulefiles hiding feature In MIGRATING guide and diff reference doc. * testsuite/modules.50-cmds/180-unload.exp: testsuite: test unload of full pathname modulefile Add test in 180-unload of 50-cmds suite to check a loaded module specified as full pathname correctly unloads. 2017-09-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/045-listlong.exp: Fix 'list' when full path mod is loaded When a modulefile has been loaded using its full file path name, not its name relative to a modulepath, skip property search on 'list' command. Previously the property search applied to full path module were checking the whole current path tree to find modulefiles. Introduces a isModuleFullPath procedure to help determine a given module name is specified as a full pathname or not. Add tests to 70-maint suite to check 'module list' behavior with full path name loaded modules. Fixes #132 * MIGRATING.md: doc: link to v4.0 closed issues in MIGRATING 2017-09-28 ebagrenrut <ebagrenrut@gmail.com> * contrib/rpm/environment-modules.spec: contrib/rpm/environment-modules.spec: Now Obsoletes: modules-tcl. Results in modules-tcl being removed by yum when environment-modules is installed. 2017-09-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles/prereq/orlist, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.90-avail/070-full.exp: testsuite: add OR-list test for prereq Ensure correct error message report in case of OR-list of prereq. Clarifies #79 and #123. 2017-09-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles.path1/fodcross/2.7.13/sub-13, testsuite/modulefiles.path2/fodcross/2.7.13, testsuite/modules.20-locate/069-cross.exp: testsuite: mod corresp. to file or dir in diff modpath Add location test for modulefiles spread in different modulepath directories where modulefile name corresponds to a file in one modulepath and corresponds to a directory in another modulepath. Ensure correct support for #63. * doc/source/diff_v3_v4.pod, doc/source/module.pod.in: doc: avail/apropos/whatis support glob patterns * MIGRATING.md, doc/source/diff_v3_v4.pod: doc: clarify submod unload during switch command 2017-09-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitignore, Makefile: install: add dist-tar, dist-gzip and dist-bzip2 targets Add dist tarball variants to provide dist-bzip2 file required by RPM spec file. Source RPM can now be built with either: $ make srpm or $ make dist-bzip2 $ rpmbuild -ts modules-*.tar.bz2 Fixes #129 * contrib/rpm/environment-modules.spec, contrib/scripts/createmodule.py, contrib/scripts/createmodule.sh: contrib: import createmodule.{sh,py} scripts These scripts developed by Orion E. Poplawski are referenced by the environment-modules.spec file. Include them in repository to be able to generate RPM from the tarball. Fixes #130 2017-09-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, contrib/rpm/environment-modules.spec, doc/Makefile, init/Makefile, modulecmd.tcl.in, testsuite/install.00-init/020-module.exp, testsuite/install.00-init/025-autoinit.exp, testsuite/install.00-init/040-subshell.exp, testsuite/install.00-init/050-crossshell.exp, testsuite/modules.00-init/015-version.exp: Release of version 4.0.0-beta Adapt testsuite to take new release name in account. 2017-09-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitignore, NEWS, contrib/rpm/environment-modules.spec, doc/Makefile, doc/source/{diff_with_c-version.pod => diff_v3_v4.pod}: doc: rename diff_with_c-version to diff_v3_v4 * .gitignore, MIGRATING.md, Makefile, contrib/rpm/environment-modules.spec: doc: add MIGRATING guide 2017-09-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_with_c-version.pod: doc: improve diff doc with more changes between 3.2 & 4 2017-09-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_with_c-version.pod: doc: rephrase diff to talk about Modules 3.2 and 4 * doc/source/module.pod.in: doc: describe MODULES_USE_COMPAT_VERSION in module.1 * init/bash.in, init/bash_completion.in, init/cmake.in, init/csh.in, init/ksh.in, init/perl.pm.in, init/profile-compat.csh.in, init/profile-compat.sh.in, init/python.py.in, init/ruby.rb.in, init/sh.in, init/zsh.in: init: rename use compat var in MODULES_USE_COMPAT_VERSION Use a distinguishable prefix for environment variables relative to the Modules software: 'MODULES_'. 2017-09-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS: Add release notes for 4.0.0 in NEWS 2017-09-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/Makefile, init/fish_completion, init/fish_completion.in: init: fix and normalize fish_completion * remove incorrect references to apt-get * use space instead of tabs * normalize description messages reusing short sentences already made for zsh completion * fix function to filter module command output and only return modulefile list not mixed with files * simplify install process by removing need for a '.in' file (and fix bash_completion install on the way) 2017-09-21 BEFH <fultonh1@gmail.com> * init/Makefile, init/fish_completion.in: fish_completion Created an initial fish_completion script and added to Makefile. 2017-09-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/rpm/environment-modules.spec, ...cros.modules-tcl => macros.environment-modules}, ...les-tcl-1.923-fix-uname-nodename-when-dns.patch, .../modules-tcl-1.923-fix-uname-release-test.patch, ...ules-tcl-1.923-fix-uname-release-with-lsb.patch, .../modules-tcl-1.923-no-etc-rc-as-rc-file.patch, ...dules-tcl-1.923-skip-access-tests-if-root.patch, ...dules-tcl-1.923-unneeded-manpath-q-option.patch, contrib/rpm/modules-tcl.spec: rpm: adapt spec for 4.0.0-beta Base new environment-modules.spec on Fedora specfile made by Orion Poplawski. Adapt content to build on either Fedora and EL systems. * contrib/scripts/add.modules.in, contrib/scripts/mkroot: contrib: add proper header for add.modules and mkroot * .gitignore, Makefile, contrib/scripts/add.modules.in, contrib/scripts/{mkroot.in => mkroot}: install: add add.modules and mkroot to bindir * contrib/scripts/add.modules.in, contrib/scripts/mkroot.in: contrib: import add.modules and mkroot from c branch These scripts are usually part of a regular environment-modules installation * init/profile.sh.in: init: use . instead of source in sh-kind profile script 2017-09-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * www/index.html: www: update bug tracker url 2017-09-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/doc2www, www/c/INSTALL.html, www/c/NEWS.html, www/c/README.html, www/c/module.html, www/c/modulefile.html, www/index.html: www: update repository url And be more forge neutral in footer disclaimer of all pages. * testsuite/install.00-init/030-options.exp: testsuite: fix test relative to installed contrib mods * .gitignore, contrib/modulefiles/module-info, contrib/modulefiles/modules.in, init/Makefile: install: add 'modules' modfile to example modfiles * .gitignore, .travis.yml, INSTALL-win.txt, INSTALL.txt, Makefile, NEWS, configure, contrib/modulefiles/module-git, doc/Makefile: Rename Modules-Tcl > Modules in docs and install scripts 2017-09-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * README.md: doc: speak about Modules rather Modules-Tcl in README 2017-09-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile: install: add ChangeLog-compat and NEWS-compat Build and install ChangeLog and NEWS files relative to compatibility version in %docdir. * configure: install: fetch compat git branch in configure If install is attempted from a git repository, try to get compat branch is not already available in local repository. Handle various cases like truncated repository. * .travis.yml: travis: fix build requirements for compat version * .travis.yml: travis: exclude compat branches from ci 2017-09-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/.gitignore, init/Makefile, init/profile-compat.csh.in, init/profile-compat.sh.in: init: add profile scripts enabling compat vers by default 2017-09-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile: install: add compat src to dist tarball 2017-09-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitignore, init/.gitignore: git: fix location of ignored files * init/Makefile: install: remove any preexisting ksh-functions switchml In case we reinstall with this time C version installation disabled. * init/perl.pm.in: init: normalize perl.pm hash key syntax * init/.gitignore, init/Makefile, init/bash.in, init/{bash_completion => bash_completion.in}, init/cmake.in, init/csh.in, init/fish.in, init/ksh.in, init/perl.pm.in, init/python.py.in, init/ruby.rb.in, init/sh.in, init/zsh.in: init: adapt scripts to --enable-compat-version build Introduce MODULE_USE_COMPAT_VERSION environment variable to control the activation of the compatibility version rather main version in case of --enable-compat-version installation. The initialization script of the shells supporting compatibility version are adapted to define the 'module' command based on the modulecmd-compat binary if MODULE_USE_COMPAT_VERSION is set to 1. Elsewhere module is based on modulecmd.tcl. 'switchml' function of alias is reintroduced to switch between main and compatibility version based on the state of the MODULE_USE_COMPAT_VERSION environment variable. Acknowledgment: this development has been made and funded within the framework of the PRACE Fifth Implementation Phase (PRACE-5IP) project (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's Horizon 2020 research and innovation programme (2014-2020) under grant agreement no. 730913. 2017-09-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitignore, .travis.yml, INSTALL.txt, Makefile, Makefile.inc.in, configure, doc/Makefile, init/Makefile, site.exp.in, testsuite/install.00-init/030-options.exp: install: --enable-compat-version to build compat vers Introduce '--enable-compat-version' configure argument to configure and build compatibility (C) version in addition to main version. This compatibility version is located in the 'compat' directory, which is automatically populated with 'c-master' git branch if we work in the git repository. 'configure' script is adapted to run the compatibility version relative configure script. Unknown command-line arguments are passed down to this script, which raise error if these arguments are not known there either. Some compatibility version configure script argument are also incompatible in this dual installation mode, so an error is raised (--enable-versioning for instance). Build process will generate and install modulecmd-compat, module-compat.1 and modulefile-compat.4 from this compatibility version. 'compat' suffix enables clear distinction with main version files. Acknowledgment: this development has been made and funded within the framework of the PRACE Fifth Implementation Phase (PRACE-5IP) project (http://www.prace-ri.eu/). PRACE-5IP receives funding from the EU's Horizon 2020 research and innovation programme (2014-2020) under grant agreement no. 730913. 2017-09-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.txt, Makefile.inc.in, configure, contrib/rpm/modules-tcl.spec, init/Makefile, init/bash.in, init/csh.in, init/ksh.in, init/sh.in, init/zsh.in: install: remove features linking to external C version Remove the --enable-set-switchml, --enable-use-cver-dotmodulespath, --with-cver-initdir, --with-cver-bindir and --with-cver-mandir configure option that previously enabled to link Modules-Tcl installation to an external Modules-C installation. This change is an initial step toward a bundled installation of Tcl/C versions, so the external linking support will transform into a dual flavor installation. 2017-09-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash.in, init/csh.in, init/fish.in, init/ksh.in, init/sh.in, init/zsh.in: init: module source @initdir@/modulerc rather shell source Like for other lang init scripts. 2017-09-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.80-deep/022-switch.exp: No swap-on if swap-off failed During a 'switch' command, if the unloading part fails the loading part will not be tried. Unloading part fails if module to unload does not exist or its unload interpretation raise error. If module to unload exist and is not loaded, unload is considered successful. * modulecmd.tcl.in: Debug on 'nothing to do' cond of load/unload Add a debug message when load command has nothing because module to load is already loaded. Add a debug message when unload command has nothing to do because module unload exists but is not loaded. 2017-09-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles/module/bad, testsuite/modulefiles/module/err, testsuite/modulefiles/module/lbad, testsuite/modulefiles/module/lerr, testsuite/modulefiles/module/lunk, testsuite/modulefiles/module/unk, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.70-maint/140-multiargs.exp, testsuite/modules.90-avail/070-full.exp: Failed load/unload if submod load/unload fails When a modulefile loads or unloads another modulefile, load or unload issue did not previously led to upper module load or unload failure. As a result, the upper modulefile appeared loaded or unloaded whereas its dependent sub-modulefile were not loaded or respectively still loaded. This commit makes cmdModuleLoad and cmdModuleUnload procedure return an exit code to let know if load or unload action performed correctly. In case of a 'module load' or 'module unload' call within a modulefile, the module procedure will raise an error with the dummy message 'SUB_FAILED'. This message is caught at the result of the modulefile interpretation to return an error code, without raising error count or message as it has already been handled at the root of the issue. * modulecmd.tcl.in: Fix popSettings stack handling popSettings were cleaning 2 levels of stack instead of 1, resulting in bad environment restore when issue occurred in a nested modulefile interpretation. * testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.70-maint/090-source.exp: testsuite: add tests for unknown or broken mod Add tests to check behavior for commands performing modulefile interpretation when modulefile is unknown or has broken Tcl code inside. 2017-09-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.50-cmds/301-interp-command.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp: Only one sep line between 2 mods on display/help/test Print only one separator line (---) between the interpretation of 2 modules on the display, help and test commands to improve readability of the results displayed. To do so, cmdModuleDisplay and cmdModuleTest procedures have been adapted to receive the full list of modules to work on, like it was already done on cmdModuleHelp. Adapt non-regression tests output to this change. * modulecmd.tcl.in, testsuite/modulefiles/bad2/body, testsuite/modules.00-init/006-procs.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/284-info-others.exp, testsuite/modules.70-maint/060-apropos.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.70-maint/140-multiargs.exp, testsuite/modules.80-deep/021-unload.exp, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/070-full.exp: Do not exit if internal error occurs in interp mod Previously an internal error occurring during the interpretation of a modulefile (like broken Tcl code) was leading to an immediate exit of the whole module execution. So the end of the ongoing command was skipped (like printing separator line '---' on display command or interpreting next modulefile passed argument on load command). With this change, an internal error occurring during the interpretation of a modulefile will be treated as any other error raised by modulefile Tcl commands (like prereq, conflict, append-path, etc). Interpretation will be considered as failed but ongoing command will get this failed status and will continue. As a result, when this kind of error occurs now display, help, load, unload, whatis and source commands will end treatment of the failed modulefile and then proceed with the following modulefiles passed as arguments. Add 140-multiargs non-regression tests in 70-maint suite to check behavior of module commands running with multiple modulefiles passed as argument. 2017-08-31 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.10-use/080-access.exp, testsuite/modules.10-use/090-bad.exp, testsuite/modules.20-locate/010-init_ts.exp, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/065-rcerrs.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.20-locate/081-access-rc.exp, testsuite/modules.20-locate/095-cleanup.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/284-info-others.exp, testsuite/modules.70-maint/055-whatis.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.70-maint/100-path.exp, testsuite/modules.80-deep/021-unload.exp, testsuite/modules.80-deep/022-switch.exp, testsuite/modules.80-deep/080-access.exp: Print more readable messages on reportInternalBug Improve readability of error messages encountered during modulefile execution by putting Tcl error message first after the 'Module ERROR' prefix. To achieve this improvement, modulefile is passed to reportInternalBug procedure as a separate argument. Procedures getting and manipulating error information have been adapted to add modulefile as an element of the error information to be able to transmit it to reportInternalBug. In addition, this commit change error reporting kind when facing access error on readModuleContent. Previously access issues were reported with reportInternalBug whereas these issues were not relative to modulefile content. reportError is now used to report access issue as when this kind of error is encountered when checking file is valid modulefile. Adapt relative non-regression tests and take opportunity to centralize common error messages at start of the testsuite. 2017-08-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, doc/Makefile, init/Makefile: install: avoid make to rebuild Makefile.inc 2017-08-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Add getModuleNameFromModulepath helper proc * modulecmd.tcl.in: Add getModulepathFromModuleName helper proc * modulecmd.tcl.in, testsuite/modules.70-maint/130-aliases.exp: Add blank line between displayed list of elements When reporting results per category or modulepaths like during an 'avail' or 'whatis' command, add a blank line between categories or modulepaths to get a clearer separation between them. With this change, behavior is align with C-version and standard tools like 'ls'. * modulecmd.tcl.in, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.90-avail/060-empty.exp: No table header display if no avail result Do not print the table header line in --long mode on an 'avail' command if no result are returned. Take opportunity of this change to introduce the displayTableHeader procedure in order to get an homogeneous code to produce such kind of header in the various command procedures requiring it. 2017-08-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/modulefile.pod, modulecmd.tcl.in, testsuite/modulefiles/.hidden/1.0, testsuite/modulefiles/loc_rc8/.2.0, testsuite/modulefiles/loc_rc8/.modulerc, testsuite/modulefiles/loc_rc8/.subdir/4.0, testsuite/modulefiles/loc_rc8/1.0, testsuite/modulefiles/loc_rc9/.1.0, testsuite/modules.20-locate/067-hidden.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.90-avail/070-full.exp: Add support for hidden 'dot' modulefiles Modulefiles with part of their name starting with a '.' dot character are considered as hidden modulefiles, like dot files on Unix-kind filesystems. After introduction of the getModules/findModules procedures hidden modulefiles where automatically discarded. So this commit re-introduce the support to locate these dot modulefiles. Add a 'fetch_hidden' argument to the findModules procedure to enable an extra lookup on walked directories to gather the dot modulefiles. The getModules procedures now looks at the passed mod and if named module correspond to a dot modulefile findModules 'fetch_hidden' argument is turned on. Since getPathToModule call to getModules for broad search (with just passed mod root name), this procedure also makes the 'is hidden module' test to order getModules to do the hidden search. A hidden modulefile does not appear in case of wild search, it is only returned when search is about its exact name. When a symbolic version targets a hidden modulefile, this modulefile will also be returned in case search is about symbol exact name. A module alias targeting a hidden modulefile is returned as any other aliases. Add 067-hidden non-regression tests in 20-locate suite. 2017-08-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Look for alias/sym tgt in all path on cmdModuleSearch Introduce a second search round in cmdModuleSearch to solve module alias or symbolic version that were not solved by looking at modules in the modulepath where they have been defined. During initial search round across modulepaths, these aliases or symbols which return an 'Unable to locate' issue from getPathToModule are stored in an extra_search array which gathers all elements to look at during the extra search round. Extra search round will attempt to solve these aliases or symbol in all defined modulepaths, except the path already looked at. Due to this second search round, results are not processed immediately for each modulepath but once when all location searches are finished. So user will get one full output rather progressive results modulepath after modulepath. This behavior change in outputing results is required as an alias or symbol solved globally may alter the result list of a modulepath already processed. So when these kind of alias or symbol are searched, their target modulefile will be appended to the list of files to interpret of the modulepath they are coming from. To optimize alias/symbol resolution process the 'full_list' array is introduced to store all the module names added to each modulepath arrays, so before asking getPathToModule for resoltution, look if defined target has not already been found and saved in 'full_list'. 2017-08-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Look for alias/sym tgt in all path on cmdModulePaths Resolve alias or symbolic version by looking in all modulepaths, rather just current modulepath, in order to match alias or symbol targeting a module in a different modulepath. Resolution is made first in current modulepath directory, if not solved there the other modulepaths will be looked at following their precedence order. Previously only alias and symbolic version targeting module in same modulepath were found. * doc/source/modulefile.pod, modulecmd.tcl.in: Handle alias/sym pt. to another path in getPathToModule When searching for a module in a given modulepath directory, if a module alias or a symbolic version matches searched module but the target of this alias or symbol is not found in current modulepath directory, search for this target restarting search from the first modulepath in list to ensure modulepath priority. Previously this kind of alias or symbol targeting a module in a different modulepath were only found if this path was set after the modulepath where the alias or symbol is defined. Clarify alias and symbolic version modulepath resolution steps in modulefile man page. 2017-08-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/etc/modulerc.cross, testsuite/modulefiles.path1/cross/.modulerc, testsuite/modulefiles.path1/cross/3.0, testsuite/modulefiles.path1/cross/4.0, testsuite/modulefiles.path1/dcross/.modulerc, testsuite/modulefiles.path1/dcross/4.0, testsuite/modulefiles.path1/dcross/dir1/1.0, testsuite/modulefiles.path1/lcross/1, testsuite/modulefiles.path1/lcross/10, testsuite/modulefiles.path1/lcross/6, testsuite/modulefiles.path1/othcross/.modulerc, testsuite/modulefiles.path1/othcross/1.0, testsuite/modulefiles.path2/cross/.modulerc, testsuite/modulefiles.path2/cross/1.0, testsuite/modulefiles.path2/cross/6.0, testsuite/modulefiles.path2/dcross/dir1/.modulerc, testsuite/modulefiles.path2/dcross/dir1/2.0, testsuite/modulefiles.path2/dcross/dir2/1.0, testsuite/modulefiles.path2/lcross/11, testsuite/modulefiles.path2/lcross/2, testsuite/modulefiles.path2/lcross/4, testsuite/modulefiles.path2/lcross/5, testsuite/modulefiles.path2/lcross/7, testsuite/modulefiles.path3/cross/.modulerc, testsuite/modulefiles.path3/cross/2.0, testsuite/modulefiles.path3/cross/5.0, testsuite/modulefiles.path3/dcross/.modulerc, testsuite/modulefiles.path3/dcross/5.0, testsuite/modulefiles.path3/dcross/dir1/3.0, testsuite/modulefiles.path3/dcross/dir3/1.0, testsuite/modulefiles.path3/lcross/12, testsuite/modulefiles.path3/lcross/3, testsuite/modulefiles.path3/lcross/8, testsuite/modulefiles.path3/othcross/.modulerc, testsuite/modulefiles.path3/othcross/2.0, testsuite/modules.20-locate/069-cross.exp: testsuite: add tests for mods spread across paths Add location tests for module, aliases and symbolic versions whose definition are spread across multiple modulepaths. * testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.80-deep/068-transitive.exp: testsuite: add unload tests mentioning sym or alias 2017-08-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/install.00-init/030-options.exp, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/035-defname.exp, testsuite/modules.20-locate/038-defcontext.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.80-deep/068-transitive.exp, testsuite/modules.80-deep/080-access.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/050-long.exp, testsuite/modules.91-sort/020-avail.exp: Parsable modulepath header when -l/-t enabled Do not ship modulepath header in a separator line in terse or long output on module avail command. With this change, behavior is aligned with C-version. * modulecmd.tcl.in, testsuite/modules.61-coll/020-savelist.exp, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/045-listlong.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/050-long.exp: Make -l/-t switches mutually exclusive Last switch mentionned on command-line is honored * modulecmd.tcl.in: Remove useless g_loadedModulesGeneric structure Registering the loaded module name in the g_loadedModulesGeneric global array to look for loaded module information is now useless following the addition of the getLoadedWithClosestName and getLoadedMatchingName mechanisms. * modulecmd.tcl.in, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.80-deep/022-switch.exp: Enable getPathToModule to return closest loaded mod If 'look_loaded' argument of getPathToModule procedure is set to 'match' look at matching loaded modules to get result (unload behavior). Enable to return the closest loaded modules (not module expressed in mod but sharing at least the same root name) by setting look_loaded argument to 'close'. With this change, cmdModuleUnload is adapted to call getPathToModule in 'match' look_loaded mode most of the time, but in case of 'module switch' with a single argument, cmdModuleUnload will call getPathToModule in 'close' look_loaded mode. As a consequence, cmdModuleSwitch does not need anymore to work on module resolution and rely entirely on cmdModuleLoad and cmdModuleUnload which in turn rely on getPathToModule. Add complementary tests in 50-cmds/170-swap and 80-deep/022-switch to ensure closest loaded module is not returned in case of 'switch old new' command (not 'switch new'). * modulecmd.tcl.in, testsuite/modules.50-cmds/180-unload.exp, testsuite/modules.80-deep/021-unload.exp: Unload deep mod with just root name passed as arg Enable to unload 'mod/dir/subdir/vers' when unload of 'mod' or 'mod/dir' asked. Was previously working only if deep module to unload was also the default version for these root names. Introduce getLoadedMatchingName procedure to check passed name is equal to or is a subpart of a loaded module. This new procedure is then used in getPathToModule when look_loaded is enabled (so when unloading module). Add 021-unload tests in 80-deep suite to check unload of deep modules using sub names. Add also new tests in 180-unload of 50-cmds suite to check behavior when multiple loaded modules match searched name. * modulecmd.tcl.in, testsuite/modulefiles.deep/plain/dir1/1.0, testsuite/modulefiles.deep/plain/dir1/2.0, testsuite/modulefiles.deep/plain/dir2/1.0, testsuite/modulefiles.deep/plain/dir2/2.0, testsuite/modules.80-deep/022-switch.exp, testsuite/modules.80-deep/030-display.exp, testsuite/modules.80-deep/080-access.exp: Fix getLoadedWithClosestName search Algorithm were matching middle or end part of module even if no match on root element. Add 022-switch tests in 80-deep to test getLoadedWithClosestName on deep module names. 2017-08-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modules.50-cmds/180-unload.exp: Remove dummy code on cmdModuleUnload Clean code in cmdModuleUnload procedure that were used as fallback treatment in case a module loaded were not found by getPathToModule (relative modulepath unconfigured?). Nowadays getPathToModule procedure also look at the loaded module information and return in case of an 'unload' action registered loaded modulefile, whatever configured modulepath. Take this opportunity to add 180-unload tests in 50-cmds suite to check unload behavior with different name condition and when the modulepath relative to the loaded module to unload is not set anymore. * modulecmd.tcl.in, testsuite/modulefiles/loc_dv1/1.0, testsuite/modulefiles/loc_dv1/2.0, testsuite/modulefiles/loc_dv2/2.0, testsuite/modules.20-locate/030-defvers.exp, testsuite/modules.20-locate/038-defcontext.exp: Locate module using loaded context only on 'unload' When searching for a modulefile corresponding to a given name, the getPathToModule procedure was previously looking by default at the list of loaded modulefiles to find a match. This behavior lead to different result depending on the loaded environment context for all module commands relying on modulefile location. For instance, if 'mod' had 2 versions '1' and '2', the latter being default version, if 'mod/1' were loaded it was this version that were answered when asking for 'mod'. This commit restore a predictable and idempotent behavior where the loaded modules context is only use when working on this loaded context. Same behavior than C-version is now encountered. As a result, only the 'unload' command now looks at loaded modules to find location of modules passed as argument. Load, display and help commands do not look anymore at loaded modules to locate their module arguments. Non-regression tests 038-defcontext in 20-locate have been introduced to ensure correct behavior will persist over time. 2017-08-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles/loc_sym/version23, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.90-avail/070-full.exp: Do not alter resolution path when spreading sym When spreading symbol along resolution path, do not update this resolution path. Exception made when overwriting a pre-existing symbol (used for instance in case default version set in .version file superseeds a default an already set via .modulerc file) Protected resolution path helps to spread symbol all along the path without missing intermediate resolution. * testsuite/modulefiles.deep/modtr/.modulerc, testsuite/modulefiles.deep/trmod/.modulerc, testsuite/modulefiles/loc_sym/version22, testsuite/modulefiles/loc_tr/.modulerc, testsuite/modulefiles/tr2_loc/.modulerc, testsuite/modulefiles/tr_loc/.modulerc, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.80-deep/068-transitive.exp, testsuite/modules.90-avail/070-full.exp: testsuite: check 'default' symbol spread Add non-regression tests in 20-locate/045-symvers, 20-locate/068-transitive and 80-deep/068-transitive to ensure that 'default' symbol has same spreading properties than other symbols. * modulecmd.tcl.in, testsuite/modulefiles/loc_sym/version21, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.90-avail/070-full.exp: Fix symbol spread when set on alias before their def Propagate symbols set on aliases before the definition of these aliases. Previously, a symbol set on a not-yet-defined alias were lost and not applied to the alias target once set. With this change setting a symbol on an alias gives same result either this symbol is set before or after the alias definition. 2017-08-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Remove 'default_is_special' from getModuleNameVersion New "default" treatment in setModuleResolution procedure permits to remove the 'default_is_special' hack from getModuleNameVersion procedure. One exception still needed for the 'module-info symbols' command, which may be called for 'modname/default' with no default symbol necessary registered but symbols set on bare module name. * modulecmd.tcl.in, testsuite/modulefiles/loc_sym/version17, testsuite/modulefiles/loc_sym/version18, testsuite/modulefiles/loc_sym/version19, testsuite/modulefiles/loc_sym/version20, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.80-deep/068-transitive.exp, testsuite/modules.90-avail/070-full.exp: Register step-by-step resolution path Register a step-by-step resolution path with help of g_resolvedPath array in order to be able propagating symbols all along this resolution path. Previously intermediate steps were skipped during symbol spread leading to different results depending on module-version statement order. Add tests in 045-symvers of 20-locate suite to check new behavior. Also correct tests in 068-transitive of 20-locate and 80-deep suites. 2017-08-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in, testsuite/modulefiles/loc_dv2/1.0, testsuite/modulefiles/loc_dv7/2.0/1.0, testsuite/modulefiles/loc_dv9/1.0, testsuite/modulefiles/loc_sym/alias7, testsuite/modulefiles/loc_sym/version15, testsuite/modulefiles/loc_sym/version16, testsuite/modules.20-locate/030-defvers.exp, testsuite/modules.20-locate/031-defvers2.exp, testsuite/modules.20-locate/040-alias.exp, testsuite/modules.20-locate/045-symvers.exp: Resolve 'mod/default' when 'default' symbol set Resolve the 'default' symbolic version as any other symbolic version when passed as module name on commands performing module resolution like load, display, help and test. Previously 'default' symbolic version used in module name was only found on search-like commands like avail, whatis and paths. With this change same behavior than C-version is achieve. setModuleResolution procedure has been reworked to register resolution and symbols on 'modulename/default' in addition to just 'modulename'. So resolution or symbol querying now find a match on 'modulename/default'. Introduce 031-defvers2 non-regression tests in 20-locate suite to test usage of 'default' symbol in module name passed on command-line. Also add tests in 040-alias and 045-symvers of 20-locate suite to check module-alias and module-version behavior when targeting default module. 2017-08-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl.in: Avoid empty-string on unload when running Tcl8.4 * .gitignore, Makefile, contrib/nglfar2ccov, doc/Makefile, modulecmd.tcl => modulecmd.tcl.in: More standard shebang for modulecmd.tcl Make use of './configure' information to set a precise tclsh shebang on modulecmd.tcl script. This change requires to move modulecmd.tcl to modulecmd.tcl.in within repository. Shebang is set to '@TCLSHDIR@/tclsh' rather just '@TCLSH@' in modulecmd.tcl.in to help forge code determines that this file is a Tcl script. * testsuite/modules.20-locate/080-access.exp: testsuite: check access on symlink module Add non-regression tests in 080-access of 20-locate suite to control behavior of filesystem symlink module when symlink target directory or its content has a restricted accessed. * modulecmd.tcl: Skip module-version registration if invalid modname 2017-08-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modulefiles.deep/modtr/.modulerc, testsuite/modulefiles.deep/modtr/dir4/.modulerc, testsuite/modulefiles.deep/tr2mod/.modulerc, testsuite/modulefiles.deep/tr2mod/dir3/.modulerc, testsuite/modulefiles.deep/trmod/.modulerc, testsuite/modulefiles.deep/trmod/dir3/.modulerc, testsuite/modulefiles/tr2_loc/.modulerc, testsuite/modulefiles/tr_loc/.modulerc, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.80-deep/068-transitive.exp, testsuite/modules.90-avail/070-full.exp: Include all kind of symvers target in getModules res When parsing symbolic version targets in getModules procedures, these targets were previously included in search result only if they were found on the filesystem (file or directory). But sometimes, these targets may be module alias and not a consistent file or directory. This situation happens when a module-version is set on an alias which in turns targets a modulefile in a different directory. When you query the symbolic version in the end-point modulefile directory, you get the modulefile as a result, but if you query the symbol in the alias directory, this alias will be returned. Adapt non-regression tests in 060-rc of 20-locate suite and in 068-transitive of 80-deep suite. Improve especially the 068-transitive tests with aliases and symbols set from different module. * .gitignore: git: ignore vim swap files 2017-08-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modulefiles.deep/modtr/.modulerc, testsuite/modulefiles.deep/modtr/3.0, testsuite/modulefiles.deep/modtr/dir1/1.0, testsuite/modulefiles.deep/modtr/dir2/2.0, testsuite/modulefiles.deep/modtr/dir3/.modulerc, testsuite/modulefiles.deep/modtr/dir4/.modulerc, testsuite/modulefiles.deep/modtr/dir4/mod4.0, .../modulefiles.deep/modtr/dir5/subdir/mod5.0, testsuite/modulefiles/loc_tr/.modulerc, testsuite/modulefiles/loc_tr/1.0, testsuite/modulefiles/loc_tr/2.0, testsuite/modulefiles/loc_tr/3.0, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/068-transitive.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.80-deep/068-transitive.exp, testsuite/modules.90-avail/070-full.exp: Let setModuleResolution handle g_moduleVersion Register all symbolic module version in g_moduleVersion array by letting setModuleResolution procedure handle this array. So now module-version procedure deleguates g_moduleVersion handling to setModuleResolution. With this change all symbols are now registered in g_moduleVersion which enables to search on these names during an 'avail' command. It was previously possible to match these symbols only if they were explicitely defined on a 'module-version' statement and were not about the 'default' symbol. Symbols inherited by transitivity are now also registered in g_moduleVersion and resolution structure by recursive call to setModuleResolution procedure. setModuleResolution procedure has also been adapted to withdraw its 'override_default' argument. When called, setModuleResolution will now always override an already defined symbolic version, but 'module-version' procedure will refrain from calling setModuleResolution if this symbol is already set in g_moduleVersion. Introduce non-regression tests 068-transitive in 20-locate and 80-deep suites and add new tests in 060-rc in 20-locate suite to check transitive definitions in various conditions. 2017-08-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles/symlink, testsuite/modulefiles/symlink2, testsuite/modulefiles/symlink3, testsuite/modules.20-locate/075-symlink.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/070-full.exp: testsuite: check behavior with fs symlink Add 075-symlink non-regression tests in 20-locate suite to validate behavior when module is a filesystem symlink. Adapt tests in 70-maint/130-aliases, 90-avail/040-wild and 90-avail/070-full for the addition of the 'symlink*' modules. * testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/055-prepend-undo.exp: testsuite: add prepend tests for leading colon case Add a load test in 050-prepend and an unload test in 055-prepend-undo of 50-cmds suite to validate behavior when a PATH-like variable is initially set when a prefixing colon. Load should treat it as an empty path element. Unload restore this prefixing colon. 2017-08-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitignore, Makefile.in => Makefile, Makefile.inc.in, configure, doc/{Makefile.in => Makefile}, init/.gitignore, init/{Makefile.in => Makefile}: install: fix Makefile generation flaws Generate a shared 'Makefile.inc' file rather all 'Makefile's at configure time. Avoid init/Makefile being rebuilt by initscript '%.in' rules. Correct 'all' rule typo in doc/Makefile. Enforce '.modulespath' symlink creation when usecverdotmodulespath is enabled. * doc/source/diff_with_c-version.pod, doc/source/module.pod.in, doc/source/modulefile.pod, init/.gitignore, init/Makefile.in, init/r.R.in, modulecmd.tcl, testsuite/modulefiles/info/shellsexp, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/006-procs.exp, testsuite/modules.70-maint/120-autoinit.exp: Support for R "shell" And adapt documentation, installation and testsuite. 2015-11-21 Roy Storey <roy.storey@plantandfood.co.nz> * init/r.R.in: init: script for R support 2017-08-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/rpm/modules-tcl.spec, doc/source/diff_with_c-version.pod, doc/source/module.pod.in, doc/source/modulefile.pod, init/.gitignore, init/Makefile.in, init/ruby.rb.in, modulecmd.tcl, testsuite/modulefiles/info/shellsexp, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/006-procs.exp, testsuite/modules.70-maint/120-autoinit.exp: Support for Ruby "shell" And adapt documentation, installation and testsuite. 2011-10-17 Tammo Tjarks <tammo@tammo-tjarks.de> * init/ruby.rb.in: init: script for Ruby support 2017-08-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.pod.in, init/.gitignore, init/Makefile.in, init/{perl.in => perl.pm.in}, init/{python.in => python.py.in}: Use file extension for perl/python init script Rename 'perl' in 'perl.pm' and 'python' into 'python.py' to get same init script filename than C-version. * modulecmd.tcl, testsuite/modules.00-init/006-procs.exp: Properly set preliminary code for x-res stuff 2017-08-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.20-locate/030-defvers.exp: Ignore extra '/' on module name for loc * doc/source/diff_with_c-version.pod, doc/source/module.pod.in, doc/source/modulefile.pod, init/.gitignore, init/Makefile.in, init/cmake.in, modulecmd.tcl, testsuite/modulefiles/info/shellsexp, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/006-procs.exp, testsuite/modules.70-maint/120-autoinit.exp: Support for CMake "shell" And adapt documentation, installation and testsuite. * modulecmd.tcl, testsuite/modules.00-init/006-procs.exp, testsuite/modules.50-cmds/090-uname-proc.exp, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/099-uname-cleanup.exp, testsuite/modules.50-cmds/250-x-resource.exp: Improve check and run of external command Add 'getCommandPath' procedure to find path of command and cache this location using 'auto_execok' Tcl command. Add 'runCommand' procedure to get command location from getCommandPath then execute command if found. An error is raised if not found. Plug 'uname' and 'x-resource' procedures on these new mechanisms to handle their external command run. Especially 'x-resource' now checks if X11 environment is editable by running 'xrdb -query'. If this command produces error, then X11 resources cannot be edited and x-resource procedure will raise an error. Adapt non-regression tests 09x-uname and 250-x-resource of 50-cmds suite consequently. 2017-08-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/rpm/modules-tcl.spec: rpm: adapt environment-modules provides to distrib 2017-08-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml: travis: add test variants for openSUSE * .travis.yml, testsuite/modules.00-init/006-procs.exp, testsuite/modules.50-cmds/250-x-resource.exp: testsuite: fix xres orders production Use same mechanism than in modulecmd.tcl to get exact same ordering of x-resource directives to test results. Enable use of a virtual display server on CentOS test environment with Xvfb to test behavior of x-resource on this distribution. Thanks to Gabe Turner for reporting the issues on the x-resource test that were due to the rewrite of the non-regression testsuite. * ...ules-tcl-1.923-fix-uname-release-with-lsb.patch, contrib/rpm/modules-tcl.spec: rpm: fix %license use on el6 and bad patch4 %license macro does not exist on el6 environment and cannot be set as attempted as we need a %files-macro. So use %doc instead of %license on el6 and below. Also fix patch #4 were testsuite update was previously missing to fix the uname/release issue when an /etc/lsb-release file exists. Thanks to Gabe Turner for reporting this issue 2017-08-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile.in, modulecmd.tcl: Add 'testsyntax' makefile rule Adapt by the way some code lines that were too long (>78). * modulecmd.tcl: Always mention channelid on 'puts' statement * modulecmd.tcl: Harmonize and optimize write of 'switch' statement * modulecmd.tcl, testsuite/modules.00-init/006-procs.exp, testsuite/modules.70-maint/120-autoinit.exp: Fix some typos on shell code rendering * modulecmd.tcl, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/055-prepend-undo.exp: Raise and render error once on unload During an 'unload' action, an error occuring on a loaded module will not affect the unload of the other modules passed on the command line. This commit remove the additional error message that were displayed in this situation: only the message raised from the modulefile interpretation is useful. Also only render error once, so 'renderError' procedure will do nothing if it has already been called. 2017-08-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/015-version.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.91-sort/030-whatis.exp: testsuite: harden tests using '.*' regexp * testsuite/modulefiles/dirmodalias/1.0, testsuite/modules.00-init/006-procs.exp, testsuite/modules.00-init/015-version.exp, testsuite/modules.00-init/090-switches.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/032-prepend.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.20-locate/020-fqual.exp, testsuite/modules.20-locate/030-defvers.exp, testsuite/modules.20-locate/035-defname.exp, testsuite/modules.20-locate/047-symerrs.exp, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/055-locrcerrs.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/260-getenv.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.50-cmds/284-info-others.exp, testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.50-cmds/301-interp-command.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.61-coll/020-savelist.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/080-access.exp, testsuite/modules.70-maint/055-whatis.exp, testsuite/modules.70-maint/060-apropos.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.70-maint/120-autoinit.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.80-deep/030-display.exp, testsuite/modules.80-deep/050-whatis.exp, testsuite/modules.80-deep/080-access.exp, testsuite/modules.90-avail/020-single.exp, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/050-long.exp, testsuite/modules.90-avail/060-empty.exp, testsuite/modules.91-sort/020-avail.exp, testsuite/modules.91-sort/030-whatis.exp: testsuite: imply ^$ for match str on re-enabled tests Automatically prefix matching string with '^' and suffix it with '$' in case of regexp-enabled non-regression tests. Adapt all regexp-enabled tests requiring it for this change. * .../modules-tcl-1.923-fix-uname-nodename-when-dns.patch, contrib/rpm/modules-tcl.spec, modulecmd.tcl: Use 'uname -n' for 'uname nodename' To avoid involment of DNS resolution base the result of the 'uname nodename' modulefile command on 'uname -n' system command rather on '[info hostname]'. With this fix same behavior than C-version is achieved for 'uname nodename'. 2017-08-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/006-procs.exp, testsuite/modules.00-init/080-begenv.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/032-prepend.exp, testsuite/modules.10-use/040-load.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.10-use/080-access.exp, testsuite/modules.10-use/090-bad.exp, testsuite/modules.20-locate/010-init_ts.exp, testsuite/modules.20-locate/035-defname.exp, testsuite/modules.20-locate/040-alias.exp, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.20-locate/046-getsym.exp, testsuite/modules.20-locate/047-symerrs.exp, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.20-locate/095-cleanup.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/020-setenv.exp, testsuite/modules.50-cmds/022-setenv-eschars.exp, testsuite/modules.50-cmds/025-setenv-undo.exp, testsuite/modules.50-cmds/028-setenv-refcount.exp, testsuite/modules.50-cmds/030-unsetenv.exp, testsuite/modules.50-cmds/035-unsetenv-undo.exp, testsuite/modules.50-cmds/036-unsetenv-x.exp, .../modules.50-cmds/038-unsetenv-refcount.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/076-alias-sub.exp, testsuite/modules.50-cmds/077-alias-undo.exp, testsuite/modules.50-cmds/078-refresh.exp, testsuite/modules.50-cmds/080-info-name.exp, testsuite/modules.50-cmds/081-info-user.exp, testsuite/modules.50-cmds/082-info-user-exp.exp, testsuite/modules.50-cmds/083-info-mode.exp, testsuite/modules.50-cmds/084-info-mode-exp.exp, testsuite/modules.50-cmds/085-info-flags.exp, testsuite/modules.50-cmds/086-info-shells.exp, testsuite/modules.50-cmds/087-info-shells-exp.exp, testsuite/modules.50-cmds/088-info-isloaded.exp, testsuite/modules.50-cmds/089-info-type.exp, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/100-loglevel.exp, testsuite/modules.50-cmds/101-badfac.exp, testsuite/modules.50-cmds/105-trace.exp, testsuite/modules.50-cmds/110-verbose.exp, testsuite/modules.50-cmds/115-verbose-msg.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp, testsuite/modules.50-cmds/140-system.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/172-swap-app-delim.exp, testsuite/modules.50-cmds/173-swap-app-delim.exp, testsuite/modules.50-cmds/175-swap2.exp, testsuite/modules.50-cmds/177-swap-prep-delim.exp, testsuite/modules.50-cmds/178-swap-prep-delim.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/195-load-recurs.exp, testsuite/modules.50-cmds/197-load-lots.exp, testsuite/modules.50-cmds/200-break.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/220-continue.exp, testsuite/modules.50-cmds/230-loop.exp, testsuite/modules.50-cmds/240-chdir.exp, testsuite/modules.50-cmds/250-x-resource.exp, testsuite/modules.50-cmds/260-getenv.exp, testsuite/modules.50-cmds/280-info-specified.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.50-cmds/301-interp-command.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/080-access.exp, testsuite/modules.70-maint/020-update.exp, testsuite/modules.70-maint/030-purge.exp, testsuite/modules.70-maint/050-whatis-load.exp, testsuite/modules.70-maint/090-source.exp, testsuite/modules.70-maint/100-path.exp, testsuite/modules.70-maint/110-paths.exp, testsuite/modules.80-deep/020-load.exp, testsuite/modules.80-deep/080-access.exp, testsuite/modules.91-sort/040-load.exp, testsuite/modules.95-version/020-load.exp, testsuite/modules.95-version/020-unload.exp, testsuite/modules.95-version/022-load2.exp, testsuite/modules.95-version/022-unload2.exp, testsuite/modules.95-version/040-xgetenv.exp: testsuite: refactor tests with code output Adapt test*out* procedures to call for 'shell_out' procedure if passed code output is a code order list rather than an output string. 'shell_out' procedure in turn calls for specific procedure to parse shell commands and transform them in the appropriate shell code. This way shell code is handled in a central location and tests do not need anymore to handle the particularity of each supported shells. 2017-07-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/030-shells.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.50-cmds/284-info-others.exp, testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.50-cmds/301-interp-command.exp, testsuite/modules.61-coll/020-savelist.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/050-saverm.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.61-coll/080-access.exp, testsuite/modules.70-maint/045-listlong.exp, testsuite/modules.70-maint/055-whatis.exp, testsuite/modules.70-maint/060-apropos.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.80-deep/050-whatis.exp, testsuite/modules.90-avail/020-single.exp, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/050-long.exp, testsuite/modules.90-avail/060-empty.exp, testsuite/modules.91-sort/020-avail.exp, testsuite/modules.91-sort/030-whatis.exp: testsuite: rely more on global definitions * testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/006-procs.exp, testsuite/modules.00-init/030-shells.exp, testsuite/modules.00-init/070-command.exp, testsuite/modules.00-init/071-args.exp, testsuite/modules.00-init/090-switches.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/032-prepend.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/250-x-resource.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/050-saverm.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.70-maint/100-path.exp, testsuite/modules.70-maint/110-paths.exp: testsuite: refactor ALL shell tests Adapt test* procedure to call test for each supported shell when test_shell argument is set to 'ALL'. Transform all tests set for all shells with a common output to use this new 'ALL' test_shell argument. 2017-07-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Rework python and perl shell code for error or nop No output of 'import os' for Python shell when there is only an error message to render. No double output of '1;' for Perl shell for a no-operation situation. * testsuite/modules.00-init/006-procs.exp, testsuite/modules.00-init/070-command.exp, testsuite/modules.00-init/071-args.exp, testsuite/modules.00-init/090-switches.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.10-use/080-access.exp, testsuite/modules.10-use/090-bad.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.20-locate/081-access-rc.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/250-x-resource.exp, testsuite/modules.50-cmds/284-info-others.exp, testsuite/modules.60-initx/005-init.exp, testsuite/modules.60-initx/020-add.exp, testsuite/modules.60-initx/030-switch.exp, testsuite/modules.60-initx/040-prepend.exp, testsuite/modules.60-initx/050-rm.exp, testsuite/modules.60-initx/060-2nd.exp, testsuite/modules.60-initx/080-access.exp, testsuite/modules.60-initx/095-cleanup.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/050-saverm.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.61-coll/080-access.exp, testsuite/modules.70-maint/055-whatis.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.70-maint/090-source.exp, testsuite/modules.70-maint/100-path.exp, testsuite/modules.70-maint/110-paths.exp, testsuite/modules.80-deep/080-access.exp: testsuite: refactor shell OK and ERR code Pass 'OK' or 'ERR' string to test procedure, then these procedures will use the new internal 'shell_ok' and 'shell_err' procedures to translate these bare OK/ERR strings in the appropriate code for the given shell. 2017-08-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * ...dules-tcl-1.923-fix-uname-release-with-lsb.patch, contrib/rpm/modules-tcl.spec, modulecmd.tcl, testsuite/modules.50-cmds/090-uname-proc.exp: Always use tcl_platform(osVersion) as 'uname release' When querying 'uname release' always use value of the 'osVersion' field of 'tcl_platform' array to get the real 'uname --kernel-release' value. Remove specific behavior when /etc/lsb-release file is found as it was too specific and led to different behavior depending of the Linux distribution. 2017-07-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../modules-tcl-1.923-fix-uname-release-test.patch, .../modules-tcl-1.923-no-etc-rc-as-rc-file.patch, ...dules-tcl-1.923-skip-access-tests-if-root.patch, ...dules-tcl-1.923-unneeded-manpath-q-option.patch, contrib/rpm/modules-tcl.spec: rpm: fix spec and patches for 1.923-2 build * .travis.yml: travis: add test variants for CentOS * modulecmd.tcl: Never take /etc/rc as a module rc file * init/csh.in: init: remove unneeded manpath '-q' option for csh * testsuite/modules.10-use/080-access.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.20-locate/081-access-rc.exp, testsuite/modules.60-initx/080-access.exp, testsuite/modules.61-coll/080-access.exp, testsuite/modules.80-deep/080-access.exp: testsuite: skip access tests if run by root 2017-07-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_with_c-version.pod, doc/source/modulefile.pod, testsuite/modules.50-cmds/076-alias-sub.exp: doc: clarify 'set-alias' command * modulecmd.tcl, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/076-alias-sub.exp, testsuite/modules.50-cmds/077-alias-undo.exp: No alias handling for 'tcl' shell Remove code that were handling aliases for the 'tcl' shell. Aliases are only effective for 'real' shells not script programming language shells. 2017-07-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_with_c-version.pod, modulecmd.tcl, testsuite/modules.60-initx/050-rm.exp, testsuite/modules.60-initx/060-2nd.exp: Keep 'module load' lines after init{rm,clear} Instead of removing the whole line when no more module specified on it during an 'initrm' command or during an 'initclear', keep the line with 'module load' to be able to reuse this line on next 'initadd' command. Adapt non-regression tests in 050-rm and 060-2nd of 60-initx suite and diff doc. * doc/source/diff_with_c-version.pod, modulecmd.tcl, testsuite/modules.00-init/090-switches.exp, testsuite/modules.70-maint/060-apropos.exp: Warning rather error on C-version specific switches Report an 'unsupported option' warning message when C-version specific command-line switches are passed rather than producing an 'invalid option' error. Adapt non-regression tests of 00-init/090-switches and 70-maint/060-apropos and diff doc. 2017-07-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_with_c-version.pod, modulecmd.tcl, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/043-listno.exp, testsuite/modules.70-maint/045-listlong.exp, testsuite/modules.70-maint/048-listlongno.exp, testsuite/modules.70-maint/050-whatis-load.exp, testsuite/modules.70-maint/055-whatis.exp, testsuite/modules.70-maint/080-help.exp: Relax constraint on cmd line args position Look the full argument list to find options or command switches, so options may be passed after the command name and command switches may be found before the command name. With this behavior commad-line argument position constraint is aligned with C-version. Adapt non-regression tests in 70-maint suite and diff doc. 2017-07-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/rpm/modules-tcl.spec, testsuite/modules.50-cmds/095-uname.exp: testsuite: fix uname release test in 50-cmds suite Update RPM spec file by the way to fix Koji build under 'armhfp' architecture. 2017-07-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * www/Makefile: www: fix README.html build in Makefile * NEWS, contrib/rpm/modules-tcl.spec, doc/source/diff_with_c-version.pod, modulecmd.tcl, www/index.html: Release of version 1.923 * testsuite/modules.61-coll/020-savelist.exp, testsuite/modules.90-avail/070-full.exp: testsuite: skip term width tests if cannot query term * testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.50-cmds/301-interp-command.exp: testsuite: fix cmp string in 50-cmds suite When converting an array to a string list, the order of its element cannot be determined. 2017-07-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.70-maint/130-aliases.exp: Call for getModules in any cases in cmdModuleAliases Previously getModules was only called when g_moduleAlias and g_moduleVersion global arrays were both empty, but in case of a global or user RC file that set an alias or a symbolic version, no more alias and version are looked for in module paths. To fix that, getModules is called for all defined module paths in any cases as it is done for cmdModuleAvail. Add relative non-regression test in 130-aliases of 70-maint suite. * testsuite/modules.00-init/010-environ.exp: testsuite: clean MODULESHOME env var before start 2017-07-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Rework error handling in cmdModuleSearch Take benefit of changes made on getPathToModule to return error information through the result list to avoid extra call to getPathToModule in cmdModuleSearch if nothing was found. Now through the parsing of getModules results and getPathToModule alias resolution results, all the error information are gathered and registered if element name matches search string. At the end of the cmdModuleSearch procedure, all the registered errors are printed. Add a 'reportIssue' procedure to help reporting error messages depending of their kind, useful for getPathToModule and cmdModuleSearch procedures. 2017-07-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Return error info as result from getPathToModule Rework getPathToModule procedure to return error information through the result structure. 2017-07-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Rework registering of access/invalid file error Integrate modulefile or directory access issue or invalidity directly in the result array produced by findModules/getModules procedures. By doing so access to the error information is straigthforward for getPathToModule procedure. To achieve this integration, the checkValidModule procedure has been revised to return any error message in addition to the check status. 2017-07-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.20-locate/060-rc.exp: Same res for version than alias on getPath/search/paths Take symbolic version into accounts like done for alias when attempting to find out the modulefile targeted by a given module name. Symbolic versions were until now left away from this resolution treatment as their modulefile target were automatically part of the mod_list result returned by getModules procedure. But in some cases, a symbolic version may be hold on an alias, so the target modulefile of this symbol does not hold the same module name than this symbolic module and thus is not part of the result list. This change is useful for resolution procedures like getPathToModule, cmdModuleSearch and cmdModulePaths. It also helps to localize the element in error, if any, as the availability of the symbolic version information will help to determine if the error concerns the search made by the user or not. Add relative non-regression tests in 060-rc of 20-locate suite. * modulecmd.tcl, testsuite/modules.20-locate/060-rc.exp: Include global/user rc defs in search/whatis/paths Ask getModules procedure to include global or user RC definitions when called in cmdModuleSearch and cmdModulePaths. By doing so aliases or symbolic versions defined in these global or user RC will be found and solved if specified as module to search on these commands. To do so, make 'search' argument of getModules procedure a list rather a string to be able to precise multiple search keywords like done by cmdModuleSearch. Add non-regression tests in 060-rc of 20-locate suite. * modulecmd.tcl, testsuite/modules.20-locate/050-locrc.exp: Look at loaded mods in getPathToModule if asked only Add 'look_loaded' argument to getPathToModule procedure in order to look at the loaded modules to get path for specified 'mod' only if this new argument is enabled. 'look_loaded' argument is enabled by default. Disable this behavior when getPathToModule recursively call itself to solve aliases or when cmdModuleSearch or cmdModulePaths also attempt to solve alias in the middle of their own search. Add non-regression tests in 050-locrc of 20-locate suite. * modulecmd.tcl: Constraint module resolution to specific dir if set If 'indir' argument is set for getPathToModule procedure, look to find modulefile corresponding to 'mod' argument only in modulepath directory specified. Rely on this feature in cmdModuleSearch and cmdModulePaths for alias resolution, where result has to belong to the current modulepath directory being searched. 2017-07-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Rework getPathToModule to fully rely on getModules * modulecmd.tcl: Rework handling of global/user rc defs in getModules Introduce a 'g_rcVersion' array to handle symbolic versions set from a global or a user RC the same way than aliases with the 'g_rcAlias' array. Then in getModules procedure treat these definitions from global or user RC with a 'add_rc_defs' flag. If set and if aliases or symbolic versions match passed mod, these aliases or versions from global or user RC are added to the result array. If search in getModules is set to 'rc_defs_included', the aliases and symbolic versions set from global or user RC added to the result array in addition to the search result from the passed directory. 2017-07-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.91-sort/020-avail.exp: Register in getModules dir default even if broken Register a default set for a given module in the corresponding 'directory' entry in the result consolidated by the getModules procedure, even if this default does not correspond to a valid entry. This way it is up to the procedure treating the result provided by getModules to handle the verification of the default correctness and display any error. As a consequence, a bad default will lead to no result displayed for the corresponding module in case of 'onlydefault' avail display. Add tests in 020-avail of 91-sort suite to check behavior. * modulecmd.tcl: Register sym versions in getModules result array Add tracking of the source file that defined a given symbolic module version in order to add in getModules these symbloc versions to the 'mod_list' result array if they match searched modulepath directory and module. Symbolic versions are added to 'mod_list' array as 'version' entries so they can be ignored by treatment not requiring them (like display procedures that get symbols not independently but through the relative modulefile). 2017-07-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Take benefit of new dir handling in getPathToModule Rework code in getPathToModule procedure to use the information that is now stored in the mod_list structure (result of the getModules procedure call). With this information it is now easier to get directory default element. Also empty directories are not part of mod_list result, so less tests are required in getPathToModule. 2017-07-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, .../emptydeepdir/emptydir/.ignored, testsuite/modulefiles.deep/modalias/dir3/.ignored, testsuite/modulefiles/emptydir/.ignored, testsuite/modules.91-sort/020-avail.exp: Handle empty dir in getModules dir consolidation When consolidating directory content information in getModules procedure, handle empty directories so they are removed from the result array. When an empty directory is removed and its parent directory becomes empty after child removal, remove also this directory and so on. Moreover when an empty directory is removed and if it was the default version of this parent directory, default is changed to last element in parent directory. Add and adapt tests in 020-avail of 91-sort suite. 2017-07-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modulefiles/dirmodalias/.modulerc, testsuite/modulefiles/dirmodalias/1.0, testsuite/modules.70-maint/130-aliases.exp, testsuite/modules.90-avail/070-full.exp, testsuite/modules.91-sort/020-avail.exp: Fix default/latest avail when alias override dir When an alias is set and overrides name of existing directory, take this alias in account for default and latest choice and ignore directory content. Add and adapt tests in 020-avail of 91-sort suite. 2017-07-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.91-sort/020-avail.exp: Rework default/latest avail version search Improve getModules procedure to register for each directory the default element in this dir (implicitly or explicitly set) and the list of all elements dictionarily sorted. Then base the code in listModules procedure that look for default or latest versions only on the information stored in getModules array result rather than comparing every result names between each other. As a side effect, default or latest available version printing does not confuse output anymore when at a given level a sub-directory element is last element in directory among modulefiles. Previously sub-directory was printed but last file among modulefiles was also printed (2 latests version at the same level). Also to simplify behavior, and understand a directory tagged "default" does not appear anymore in default listing result as its content (the default version found in that dir) will be displayed. Remove stringDictionaryCompare procedure that is not used anymore due to the code rework. Add and adapt tests in 020-avail of 91-suite. * modulecmd.tcl, testsuite/modules.90-avail/030-multiple.exp: Correct inclusion of aliases in getModules res Fix inclusion of aliases in getModules procedure results not to include these aliases if they are not part of the exact same path than path of the search. Previously if alias source path and search path were similar, aliases were wrongly included in results. Add test in 030-multiple of 90-avail to check correct behavior. 2017-07-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Rework way getCollectionFilename proc pass descr Return collection filename and description as a list result in getCollectionFilename procedure rather passing a variable name altered in procedure with 'upvar' call. * modulecmd.tcl, testsuite/modules.61-coll/080-access.exp: Distinguish collection found from read test Previsously cmdModuleRestore and cmdModuleSaveshow procedures were directly calling for 'file readable' so existence and readability were tested in a single call. To be able to distinguish an exist issue from a read issue these two procedures now only test existence and readability is tested by the readCollectionContent procedure. As a result, if a collection exists but is not readable a different message will now appear. 2017-07-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.60-initx/080-access.exp: testsuite: add 080-access tests in 60-initx suite Test behaviors when shell init script cannot be accessed or written with 080-access tests added to 60-initx suite. * modulecmd.tcl: Change init* cmds write behavior Previously initadd, initprepend, initswitch, initrm and initclear commands were altering shell initialization file by writing a new file then copying this new file to replace the existing init file. This commit tries to simplify init file re-write by first consolidating new file content in a list variable, then when shell init file read is finished and new content is established, the shell init file is opened in write mode and its content is replaced with the new content. In addition new behavior only re-writes shell init file if its content need to be altered. Take this opportunity to also change name of some local variables to make them shorter. * modulecmd.tcl, testsuite/home/.modules.savenull, testsuite/modules.60-initx/005-init.exp, testsuite/modules.60-initx/010-list.exp, testsuite/modules.60-initx/020-add.exp, testsuite/modules.60-initx/030-switch.exp, testsuite/modules.60-initx/040-prepend.exp, testsuite/modules.60-initx/050-rm.exp, testsuite/modules.60-initx/060-2nd.exp, testsuite/modules.60-initx/095-cleanup.exp: Raise error on init* cmds when no 'module load' found When no 'module load' line has been found in shell init file raise an error on initadd, initprepend, initswitch, initrm and initclear commands as action requested was not performed. 2017-06-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.20-locate/081-access-rc.exp: testsuite: add 081-access-rc tests in 20-loc suite Check behavior when global RC files cannot be read. * testsuite/etc/rc, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/065-rcerrs.exp: testsuite: more tests for global RC in 20-loc suite Test behaviors when global RC is not set at all, or is set at $MODULESHOME/etc/rc or is both set at $MODULESHOME/etc/rc and $MODULERCFILE. 2017-06-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.61-coll/040-restore.exp: testsuite: add tests restoring bad coll in 61-coll * modulecmd.tcl, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/050-saverm.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.61-coll/080-access.exp: Normalize collection access issue error message Test behaviors when collection cannot be accessed with 080-access tests added to 61-coll suite. Normalize error messages for the various collection-related commands when collection cannot be accessed. Catch also error when trying to access the collection directory but access rights on this directory does not allow for listing its content. 2017-06-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modulefiles/setenv/0.8, testsuite/modulefiles/unsetenv/0.8, testsuite/modules.50-cmds/028-setenv-refcount.exp, .../modules.50-cmds/038-unsetenv-refcount.exp, testsuite/modules.90-avail/020-single.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/050-long.exp, testsuite/modules.90-avail/070-full.exp: Clean any previous ref count array on setenv/unsetenv When manpulating path list with append-path/prepend-path/etc commands a _modshare variable is set to keep track of how many times each reference has been loaded. But if after these commands a setenv/unsetenv command is used, the _modshare variable is left alone whereas the path list variable is entirely replaced by a new value or destroyed. To sanitize this kind of situation, any existing _modshare variable is cleaned-up when the associated variable is targeted by a setenv or an unsetenv command. Non-regression tests 028-setenv-refcount and 038-unsetenv-refcount in 50-cmds suite have been added to check new behavior. 2017-03-24 Bert Wesarg <bert.wesarg@googlemail.com> * init/bash.in, init/fish.in, init/ksh.in, init/sh.in, init/zsh.in, testsuite/install.00-init/010-environ.exp: init: Do not pollute tab-completion with `moduleraw` command. 2017-06-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modulefiles/spread/5.0, testsuite/modulefiles/spread/6.0, testsuite/modulefiles/spread/7.0, testsuite/modulefiles/spread/8.0, testsuite/modulefiles/spreadrc/dir5/.modulerc, testsuite/modulefiles/spreadrc/dir5/1.0, testsuite/modulefiles/spreadrc/dir6/.modulerc, testsuite/modulefiles/spreadrc/dir6/1.0, testsuite/modulefiles/spreadrc/dir7/.modulerc, testsuite/modulefiles/spreadrc/dir7/1.0, testsuite/modulefiles/spreadrc/dir8/.modulerc, testsuite/modulefiles/spreadrc/dir8/1.0, testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.50-cmds/302-interp-cascaded.exp, testsuite/modules.90-avail/070-full.exp: Dedicate an interp per interpretation level Have a separate interpreter per level of interpretation in case of nested interpretations. By doing so a module loaded by another does not influence the interpretation of the module loading it. Non-regression tests 302-interp-cascaded have been added to 50-cmds suite. 2017-06-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modulefiles/spread/3.0, testsuite/modulefiles/spread/4.0, testsuite/modulefiles/spreadrc/dir3/.modulerc, testsuite/modulefiles/spreadrc/dir3/1.0, testsuite/modulefiles/spreadrc/dir4/.modulerc, testsuite/modulefiles/spreadrc/dir4/1.0, testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.50-cmds/301-interp-command.exp, testsuite/modules.90-avail/070-full.exp: Renew interp when command list is altered Delete/recreate the interpreter when a native Tcl command is altered by a previous modulerc or modulefile interpretation. When a Tcl native command is overriden it appears in the defined procedure list. This procedure not part of the initial list is unset at the reset time which makes also disappear the Tcl command. List of Tcl commands is dumped at initial interpreter creation time and compared after each procedure reset. If command lists differ, interpreter is deleted then recreated to ensure proper functioning. Non-regression tests 301-interp-command have been added to 50-cmds suite. 2017-06-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modulefiles/spread/1.0, testsuite/modulefiles/spread/2.0, testsuite/modulefiles/spreadrc/.modulerc, testsuite/modulefiles/spreadrc/dir1/.modulerc, testsuite/modulefiles/spreadrc/dir1/1.0, testsuite/modulefiles/spreadrc/dir2/.modulerc, testsuite/modulefiles/spreadrc/dir2/1.0, testsuite/modules.50-cmds/300-interp.exp, testsuite/modules.90-avail/070-full.exp: Reset interp state from one interp to another When creating interpreter, dump its variable and procedure content so before each usage of this interpreter for another modulerc or modulefile the initial variable and procedure state is restored to avoid spread of definitions from one interpretation to another. Variables are removed if they are not part of the initial state or restored if their value has changed. Procedures are removed if they are not part of the initial state. Nothing is done if procedures part of the initial state have been changed during an interpretation as there is no vital procedure in this list. Interpreter aliases are redefined before each interpretation to clear any potential override of these aliased procedures. dumpInterpState and resetInterpState procedures are introduced to handle the dump/reset mechanism of the interpreter. Non regression tests 300-interp in 50-cmds suite have been added to test the correct behavior of interpreters when running a list of modulerc and modulefiles. 2017-06-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Reuse interp rather creating new one each time Make use of the same Tcl interp for each modulefile interpreation and use another one for each modulerc (but the same for each modulerc). By doing so we proceed like on C-version where same interpreter is used across modulefile or modulerc interpretation. Huge performance improvement is achievied with this change on commands making intensive use of interp like 'avail'. Change code to use a static name for those interpreter: '__modulefile' for the interp dedicated to modulefile interpretation and '__modulerc' for the interp dedicated to the RC interpretation. 2017-06-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Workaround 'glob -nocomplain' for perms issue on Tcl8.4 On Tcl 8.4, 'glob -nocomplain' also silent permission errors. So to handle access issue to directory in findModules we workaround that by not using the '-nocomplain' option of glob but handling case where glob raise an error when directory is empty. 2017-06-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_with_c-version.pod, modulecmd.tcl, testsuite/modules.20-locate/047-symerrs.exp: Revise alias and symbolic version internal registering Register alias and symbolic version deep resolution at definition time through a new 'setModuleResolution' procedure called by 'module-version' and 'module-alias' procedures. Make use of new global array 'g_moduleResolved' and its reverse structure 'g_resolvedHash' to keep registered resolution at hand. Also introduce 'g_symbolHash' global array to register and easily get the list of all symbols for a given module. As resolution is now computed at definition time, the 'getVersAliasList' and 'resolveModuleVersionOrAlias' procedures can be greatly simplified and just need to return the value of the 'g_symbolHash' or 'g_moduleResolved' arrays for the module name passed as argument. This change saves lot of time especially on commands heavily relying on these procedures like 'avail'. The global arrays 'g_versionHash', 'g_moduleDefault' and 'g_aliasHash' become useless with this change so they have been removed. As a side effect of resolving alias and symbolic version at definition time, resolution loop are not registered anymore and produce an error message when spotted. 2017-05-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Try/catch rather test/try in findModules When reading the content of a modulefile directory, try access then catch any issue rather testing access before trying. By doing so we reduce the number of 'access' system call. Getting an access error at the 'open' time is a bit more costly than at 'stat' time but most modulefile directories should not raise access issue, only some. If any issue occur, register it in the g_access_mod_info global array as done in checkValidModule procedure. A unified procedure called registerAccessIssue has been setup for both checkValidModule and findModules procedures to share same code. 2017-06-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.00-init/071-args.exp: No error raise on empty arg list for load To cope with initadd behavior that require at least an empty 'module load' line in startup files. (fix SF bug#88) * modulecmd.tcl, testsuite/home/.modules.saveempty, testsuite/modules.60-initx/020-add.exp: Fix initadd to handle load line w/o trailing space Was previously expecting load directive to be written 'module load ' to get a match. With fix, 'module load' line will also be matched. Add test in 020-add of 60-initx suite to check that. 2017-06-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modulefiles/break/5.0, testsuite/modulefiles/break/6.0, testsuite/modulefiles/continue/5.0, testsuite/modulefiles/continue/6.0, testsuite/modulefiles/exit/4.0, testsuite/modules.50-cmds/200-break.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/220-continue.exp, testsuite/modules.50-cmds/230-loop.exp, testsuite/modules.90-avail/070-full.exp: Fix use of break/exit/continue outside of a loop Like C-version catch raised error when break or continue are called from outside of a loop to handle them as when they are called from modulefile main body. Add non-regression tests in 200-break, 210-exit, 220-continue and 230-loop of 50-cmds to check behavior when break, exit and continue are called from within a procedure. 2017-05-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.10-use/090-bad.exp: testsuite: add 090-bad tests in 10-use suite * modulecmd.tcl, testsuite/modulefiles/use/4.0, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/032-prepend.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.90-avail/070-full.exp: Add tests for use/unuse of empty path name Adapt cmdModuleUse to handle empty path name "" as any other path string, so an error is returned when file type is cheked. Add tests in 10-use and 50-cmds suites to check behavior of use and unuse commands with an empty path passed as argument. Add by the way tests that were missing for bash shell in 10-use suite. * testsuite/modulefiles/use/3.0, testsuite/modulefiles/use/3.1, testsuite/modulefiles/use/3.2, testsuite/modules.10-use/032-prepend.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.90-avail/070-full.exp: testsuite: add test for use --prepend Introduce new tests for 'use --prepend' command in 10-use and 50-cmds suites. * testsuite/modulefiles/RCS/1.0: testsuite: add modulefile part of ignored list * modulecmd.tcl: No modpath dir checks in cmdModule{Avail,Aliases} Rely on checks already made in findModules procedures which trap bad directories (type, access rights, etc) by calling glob under the catch umbrella. Make cmdModuleAliases use getModules procedure by the way rather listModules to trigger aliases and versions search. * testsuite/modules.00-init/006-procs.exp, testsuite/modules.10-use/080-access.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.80-deep/080-access.exp: testsuite: add 080-access tests in 10-use suite Test behaviors when modulepath cannot be accessed. Centralize by the way the change_file_perms and restore_file_perms procedures that are now used in different parts of the testsuite. 2017-05-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles/loc_dv9/.version, testsuite/modulefiles/loc_dv9/1.0, testsuite/modulefiles/loc_dv9/2.0, testsuite/modules.20-locate/030-defvers.exp, testsuite/modules.90-avail/070-full.exp: testsuite: test module-version use in .version file Add test to 030-defvers in 20-locate suite to check that default version is correctly resolved when it is declared with module-version command in a .version rc file. 2017-05-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles/remove/1.0, testsuite/modules.50-cmds/062-remove-delim.exp, testsuite/modules.90-avail/070-full.exp: testsuite: add 062-remove-delim tests in 50-cmds suite * testsuite/modules.70-maint/130-aliases.exp: testsuite: add 130-aliases tests in 70-maint suite 2017-05-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles/module/.ignored, testsuite/modulefiles/module/ignored~: testsuite: add test modfiles that should be hidden Ensure modulefiles starting with a dot or finishing with a tilde are not reported in global 'module avail' results. * testsuite/modules.61-coll/020-savelist.exp: testsuite: test all 'savelist' display options 2017-05-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Fix loop in lreverse proc provided for Tcl<8.5 * modulecmd.tcl: Workaround min and max funcs not avail in Tcl<8.5 * .travis.yml: travis: use version specific-tclsh on the diff. builds * INSTALL.txt, Makefile.in, configure, testsuite/config/unix.exp, testsuite/modules.70-maint/120-autoinit.exp: install: add --with-tclsh config opt package Add the ability to choose the Tcl interpreter shell to setup in initialization scripts and to use when running the testsuite. 2017-05-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles/help/2.0, testsuite/modulefiles/trace/all_on, testsuite/modules.50-cmds/105-trace.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp: Add tests for deprecated 'module-trace' cmd * testsuite/modulefiles/info/others, testsuite/modules.50-cmds/284-info-others.exp, testsuite/modules.90-avail/070-full.exp: Add tests for bad or deprecated 'module-info' cmds * modulecmd.tcl, testsuite/modulefiles/bad2/proc, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/085-test.exp, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/070-full.exp: Put call to Modules{Display,Help,Test} procs under catch Put the ModulesDisplay, ModulesHelp and ModulesTest procedures call under the same catch than used for the evaludation of the modulefile content. Doing so an error found within these procedures will be handled the same way than if the error is triggered from the main body of the modulefile. As a consequence, the ModulesDisplay, ModulesHelp and ModulesTest procedures are not anymore called when an error has been raised during the modulefile main evaluation, since the same catch is shared. Some existing test results have been adapted for this change and new tests have been added to check this specific behavior in 070-display, 080-help and 085-test in 70-maint suite. 2017-05-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.70-maint/060-apropos.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp: Harmonize and test '--debug' option 2017-05-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.00-init/071-args.exp: Remove 'debug' module command This hidden command produces output that is hard to process. So as it does not seem to be useful and as it is not tested, I prefer to remove it. If a need raise again on this 'debug' topic, a new command will be introduced. 2017-05-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_with_c-version.pod, doc/source/module.pod.in, site.exp.in, testsuite/bin/install_test_csh, testsuite/bin/install_test_fish, testsuite/bin/install_test_sh, testsuite/config/unix.exp, testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/006-procs.exp, testsuite/install.00-init/025-autoinit.exp, testsuite/modules.70-maint/120-autoinit.exp: Test and document 'autoinit' module command 2017-05-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_with_c-version.pod, doc/source/module.pod.in, modulecmd.tcl, testsuite/modules.70-maint/110-paths.exp: Fix, test and document 'paths' module command * doc/source/diff_with_c-version.pod, doc/source/module.pod.in, modulecmd.tcl, testsuite/modules.70-maint/100-path.exp, .../{095-cleanup.exp => 999-cleanup.exp}: Test and document 'path' module command 2017-05-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/070-unuse.exp: testsuite: cover use/unuse with no args Add non-regression tests in 10-use suite for the 'use' and 'unuse' commands when no arg are passed to them (print list of enabled module paths). * testsuite/modules.90-avail/070-full.exp: testsuite: add 070-full test to 90-avail suite Validate output of all modules from a test modulepath with a specific terminal width setup. * .travis.yml: travis: coverage on each Tcl rel + x-server init For a more complete coverage, run it on each Tcl releases, also enable a x-server on a test case to validate x-resource modulefile command. To optimize builds, when MAKE_TESTCOVERAGE is enabled run 'testcoverage' instead of 'test'. * modulecmd.tcl, testsuite/modules.50-cmds/250-x-resource.exp: Correct use of xrdb tool when not in default path 2017-05-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_with_c-version.pod, modulecmd.tcl, testsuite/modules.00-init/071-args.exp, testsuite/modules.60-initx/005-init.exp, testsuite/modules.60-initx/010-list.exp, testsuite/modules.60-initx/020-add.exp, testsuite/modules.60-initx/030-switch.exp, testsuite/modules.60-initx/040-prepend.exp, testsuite/modules.60-initx/050-rm.exp, testsuite/modules.60-initx/060-2nd.exp, testsuite/modules.60-initx/095-cleanup.exp: Fix 'init*' commands to behave more like C-version Adapt tests from 60-initx to match results produced by this module flavor. Clarify differences with C-version on these module commands in diff_with_c-version documentation. 2006-01-12 R.K. Owen <rk@owen.sj.ca.us> * testsuite/home/.modules, testsuite/modules.60-initx/005-init.exp, testsuite/modules.60-initx/010-list.exp, testsuite/modules.60-initx/020-add.exp, testsuite/modules.60-initx/030-switch.exp, testsuite/modules.60-initx/040-prepend.exp, testsuite/modules.60-initx/050-rm.exp, testsuite/modules.60-initx/060-2nd.exp, testsuite/modules.60-initx/095-cleanup.exp: testsuite: added suite for the "module init*" cmds 2017-05-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml: travis: test 'make uninstall' * .gitattributes, .gitignore, Makefile.in, README.txt => README.md: Move to README.md to embed build and coverage status * .gitignore, .travis.yml, Makefile.in, contrib/nglfar2ccov: Integrate to codecov.io code coverage service Add nglfar2ccov contrib script to translate Nagelfar coverage result for Codecov report. Append publication of coverage report to codecov.io service. 2017-05-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitignore, Makefile.in, testsuite/config/unix.exp: Add makefile rules to produce code coverage Instrument modulecmd.tcl, then run testsuite and produce a coverage report based on code coverage analysis of Nagelfar toolkit [1]. Include retrieval and installation of Nagelfar within Makefile. [1] http://nagelfar.sourceforge.net/codecoverage.html 2017-05-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.txt, configure: install: clarify that 'configure' is a bash script * init/sh.in: init: make sh init script closer to POSIX spec Provide support for /bin/sh flavors different than bash or zsh (dash for instance). 2017-05-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/bin/install_test_sh, testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/030-options.exp, testsuite/install.00-init/040-subshell.exp, testsuite/install.00-init/050-crossshell.exp: testsuite: adapt 'install' suite for dash sh-shell 2017-05-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .travis.yml: Introduce travis-ci configuration file 2017-05-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.50-cmds/090-uname-proc.exp: testsuite: adapt 'uname release' test for Ubuntu * modulecmd.tcl: Adapt sep and col display for very short width term When terminal width is found too short to handle one a single line separator title or one column of content, set a minimal number of '-' for separator line and set column number to 1. 2017-05-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitignore, INSTALL.txt, Makefile.in, README.txt, configure, site.exp.in, testsuite/bin/install_test_csh, testsuite/bin/install_test_fish, testsuite/bin/install_test_sh, testsuite/config/unix.exp, testsuite/install.00-init/005-init_ts.exp, testsuite/install.00-init/006-procs.exp, testsuite/install.00-init/010-environ.exp, testsuite/install.00-init/020-module.exp, testsuite/install.00-init/030-options.exp, testsuite/install.00-init/040-subshell.exp, testsuite/install.00-init/050-crossshell.exp: Introduce 'install' non-regression testsuite This new non-regression testsuite is triggered by the 'make testinstall' command and checks modules-tcl installation is operational. 2017-05-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.txt: doc: fix reference to 'make test' in INSTALL 2017-05-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/fish.in: init: fix modulerc load test on 'fish' init script 2017-05-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/sh.in: init: fix interactive shell test on 'sh' init script 2017-05-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile.in: install: add notice at end of install for next steps * INSTALL.txt, Makefile.in, configure, contrib/rpm/modules-tcl.spec, init/Makefile.in: install: add --enable-example-modulefiles config opt Install by default some modulefiles provided as example in the system modulefiles directory. * Makefile.in, init/Makefile.in: install: skip modulefilesdir removal if not empty * contrib/modulefiles/dot, contrib/modulefiles/module-git, contrib/modulefiles/module-info, contrib/modulefiles/null, contrib/modulefiles/use.own: contrib: import and adapt example modulefiles Get and adapt regular set of example modulefiles provided with environment-modules. 2017-05-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/Makefile.in, init/zsh-functions/_module, init/zsh.in: Add completion script for Zsh 2017-04-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_with_c-version.pod, doc/source/module.pod.in, doc/source/modulefile.pod, init/bash_completion, init/tcsh_completion.in, modulecmd.tcl, testsuite/modulefiles/info/command, testsuite/modulefiles/info/commandexp, testsuite/modulefiles/info/mode1, testsuite/modulefiles/info/mode2, testsuite/modulefiles/info/mode3, testsuite/modulefiles/info/mode4, testsuite/modulefiles/info/mode5, testsuite/modulefiles/info/mode6, testsuite/modulefiles/info/specified, testsuite/modulefiles/inforc/1.0, testsuite/modulefiles/inforc/2.0, testsuite/modulefiles/test/1.0, testsuite/modulefiles/test/1.2, testsuite/modulefiles/test/2.0, testsuite/modules.00-init/071-args.exp, testsuite/modules.50-cmds/083-info-mode.exp, testsuite/modules.50-cmds/084-info-mode-exp.exp, testsuite/modules.50-cmds/085-info-flags.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/280-info-specified.exp, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/085-test.exp: Introduce 'test' command and mode Add 'module test' command to trigger when called execution of a ModulesTest procedure in target modulefile following same kind of mechanism than 'module help'. If ModulesTest procedure is missing from modulefile, a 'Unable to find ModulesTest proc' message is displayed but no error code is set. If ModulesTest procedure returns 1 (true), test is considered successful and message 'Test result: PASS' is displayed. If ModulesTest returns no or any other value, test is considered failed and message 'Test result: FAIL' is displayed. In this case, module command exit in error. Adapt bash and tcsh completion scripts for the new command. Describe new command and new mode in docs. Adapt existing non-regression tests and relative test modulefiles for new command and new mode in 00-init, 50-cmds and 70-maint suites. Add 085-test tests in 70-maint to check coherent behavior of new command. 2017-04-29 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS, contrib/rpm/modules-tcl.spec, doc/source/diff_with_c-version.pod, modulecmd.tcl, www/index.html: Release of version 1.832 2017-04-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modulefiles/getenv/1.0, testsuite/modules.50-cmds/260-getenv.exp: Fix getenv proc to correctly return env variable Add 260-getenv non-regression test in 50-cmds suite. Thanks to Roberto Beccherle for reporting this issue. * contrib/rpm/modules-tcl.spec: rpm: make use of alternatives for man pages on Fedora * contrib/rpm/modules-tcl.spec: rpm: use rpm macro file provided in source tarball 2017-04-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * INSTALL.txt, Makefile.in, configure, contrib/rpm/modules-tcl.spec, doc/Makefile.in: install: add --enable-doc-install config opt feature With this doc install can be disabled for package manager like rpm that handles by itself this kind of doc. * Makefile.in: install: add a 'srpm' make target * doc/source/diff_with_c-version.pod, doc/source/modulefile.pod: doc: clarify mgmt of file access issue * doc/source/diff_with_c-version.pod: doc: load in modfile unload in reserve order 2017-04-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_with_c-version.pod, doc/source/module.pod.in, doc/source/modulefile.pod: doc: clarify version/alias handling in avail and loc 2017-04-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Reset got mod list between each dir in getPathToModule * testsuite/modulefiles.deep/moddef/dir2/.modulerc, testsuite/modulefiles.deep/moddef/dir2/1.0, testsuite/modulefiles.deep/moddef/dir2/2.0, testsuite/modules.80-deep/080-access.exp: Add access issue non-reg tests in 80-deep suite Add non-regression tests in 080-access of 80-deep suite to guaranty correct behavior when some access issues happen on modulefile or modulerc or directory in case of deep modulefiles. * modulecmd.tcl: Mention not found alias target in cmdModuleSearch For a given mod search, if an alias corresponds to this search but the associated modulefile cannot be located, report locate error on this not found target. * modulecmd.tcl: Stop mod dir resolution as soon as we get an issue When looking to a directory content in order to resolve a modulefile in the getPathToModule procedure, stop this resolution as soon as we get an issue on a mod to return (invalid or access issue). 2017-04-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Adapt cmdModuleSearch to raise access error message If searching for a given mod and no modulefile to interpret found, call for a resolution of this mod after re-enabling error report. If there are some access issues, they will be echoed via this call to getPathToModule. * modulecmd.tcl: Add indir arg to getPathToModule proc Be able to optionally precise in what module directory to search for mod instead of looking for mod in every directory set in MODULEPATH. If 'indir' arg is set, do not raise the 'cannot locate mod' error. Also build return list with module found status when a modulefile cannot be returned. Modulefile is then empty string and instead of module name boolean is set depending if a module has been found for search or not. * modulecmd.tcl, testsuite/modules.70-maint/060-apropos.exp: Display all whatis line when search matches one Instead of displaying only the whatis line matching the apropos search, all whatis line are now displayed to get the full description of the module. Add non-regression test in 060-apropos of 70-maint suite to check this specific behavior. 2017-04-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/080-access.exp, testsuite/modules.80-deep/050-whatis.exp, testsuite/modules.91-sort/030-whatis.exp: Match alias but report modulefile on whatis/apropos cmds As whatis/apropos commands make interpretation of modulefiles like load/unload, always report the module under their modulefile name not their alias name. Of course, alias and symbolic version may still be used to query whatis content, but displayed result will mention the relative modulefile targetted by this alias or symbol. Adapt existing non-regression tests in 20-locate, 80-deep and 91-sort suites. 2017-04-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Plug cmdModuleSearch on getModules rather listModules Change cmdModuleSearch procedure to make use of getModules rather calling for listModules then running getPathToModule on each result return. With getModules, getPathToModule only need to be called on alias result, not on modulefile, which saves a lot of time. * modulecmd.tcl, testsuite/modules.50-cmds/190-load.exp: Rely more on checkValidModule for full pathname module Rather checking existence and readability within getPathToModule procedure, better rely on the checkValidModule procedure then analyse global arrays for error information. 2017-04-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Register then display modulefile access issue When checking validity of a modulefile in checkValidModule procedure, register any access issue within a new global array g_access_mod_info. Then when looking for a specific module, if an access issue occured during its check, display returned error code message. * modulecmd.tcl: Check found vers valid before using in getPathToModule Last element in a directory may be an alias whose target modulefile may be not be readable, so we need to check this target is available on our list of valid modulefiles before using it. * modulecmd.tcl: Check last elt in dir before use in getPathToModule Handle cases where directory is empty or none of its elements can be accessed. * testsuite/modulefiles/loc_rc6/0.9, testsuite/modules.20-locate/080-access.exp, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/050-long.exp: Add access issue non-reg tests in 20-locate suite Add non-regression tests in 080-access of 20-locate suite to guaranty correct behavior when some access issues happen on modulefile or modulerc or directory. As a loc_rc6/0.9 module is added for the purpose of the new tests, adapt non-regression tests working with loc_rc6 in 90-avail suite. 2017-04-15 Jason Travis <jtravis@tgen.org> * doc/example.txt: doc: fix typo 2017-04-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modulefiles/module/meta, testsuite/modules.50-cmds/150-module.exp: Reverse load command mod list on unload mode When mode is set to unload, 'module load' commands in modulefile are interpreted as 'module unload' commands. To guaranty correct behavior regarding requirements, the module list passed to the load command is reversed to get and unload of the modulefiles in the reverse order than load. This is the same behavior than applied on purge or restore commands, where loaded module list is reversed to be unloaded. Add non-regression tests in 150-module of 50-cmds suite to check load and unload of meta-module works correctly over time. * init/modulerc.in, modulecmd.tcl, testsuite/home/rcnomagic, testsuite/home/rctosource, testsuite/modules.70-maint/090-source.exp: Relax magic cookie constraint on source command As files sourced by a 'module source' command may be managed outside of the modulefile environment, relax the constraint of having a specific magic cookie at the start of the file to get required clearance before evaluation. This is typicaly helpful for the initialization modulerc file that may loose its magic cookie after some manual edits. Add non-regression tests in 090-source of 70-maint suite. * INSTALL-win.txt, doc/howto/using_on_windows.pdf, doc/readme.txt, windows/module-tcl-win.chm: doc: Transform windows how-to from CHM to PDF Change "Using modules-tcl on Windows" how-to document from a CHM format to a PDF format, as CHM is a proprietary format that does not cope well with open-source project. Document has been moved to 'doc' directory, a new 'howto' sub-directory has been created to host this file. * .gitattributes, contrib/template/.gconf/apps/%gconf.xml, contrib/template/.gconf/apps/evolution/%gconf.xml, .../.gconf/apps/evolution/calendar/%gconf.xml, .../apps/evolution/calendar/notify/%gconf.xml, .../template/.gconf/apps/gconf-editor/%gconf.xml, contrib/template/.gconf/apps/gedit-2/%gconf.xml, .../.gconf/apps/gedit-2/plugins/%gconf.xml, .../apps/gedit-2/plugins/filebrowser/%gconf.xml, .../gedit-2/plugins/filebrowser/on_load/%gconf.xml, .../.gconf/apps/gedit-2/preferences/%gconf.xml, .../.gconf/apps/gedit-2/preferences/ui/%gconf.xml, .../gedit-2/preferences/ui/statusbar/%gconf.xml, .../.gconf/apps/gnome-power-manager/%gconf.xml, .../apps/gnome-power-manager/buttons/%gconf.xml, .../.gconf/apps/gnome-screensaver/%gconf.xml, .../template/.gconf/apps/gnome-settings/%gconf.xml, .../apps/gnome-settings/gnome-panel/%gconf.xml, .../template/.gconf/apps/gnome-terminal/%gconf.xml, .../.gconf/apps/gnome-terminal/profiles/%gconf.xml, .../gnome-terminal/profiles/Default/%gconf.xml, .../.gconf/apps/nautilus-open-terminal/%gconf.xml, contrib/template/.gconf/apps/panel/%gconf.xml, .../template/.gconf/apps/panel/applets/%gconf.xml, .../apps/panel/applets/clock_screen0/%gconf.xml, .../panel/applets/clock_screen0/prefs/%gconf.xml, .../applets/indicator_applet_screen0/%gconf.xml, .../apps/panel/applets/mixer_screen0/%gconf.xml, .../applets/notification_area_screen0/%gconf.xml, .../applets/show_desktop_button_screen0/%gconf.xml, .../panel/applets/trashapplet_screen0/%gconf.xml, .../panel/applets/window_list_screen0/%gconf.xml, .../applets/window_list_screen0/prefs/%gconf.xml, .../applets/workspace_switcher_screen0/%gconf.xml, .../workspace_switcher_screen0/prefs/%gconf.xml, .../template/.gconf/apps/panel/general/%gconf.xml, .../template/.gconf/apps/panel/objects/%gconf.xml, .../objects/browser_launcher_screen0/%gconf.xml, .../objects/clock_separator_screen0/%gconf.xml, .../apps/panel/objects/menu_bar_screen0/%gconf.xml, .../.gconf/apps/panel/objects/object_0/%gconf.xml, .../.gconf/apps/panel/objects/object_1/%gconf.xml, .../.gconf/apps/panel/objects/object_2/%gconf.xml, .../panel/objects/yelp_launcher_screen0/%gconf.xml, .../.gconf/apps/panel/toplevels/%gconf.xml, .../toplevels/bottom_panel_screen0/%gconf.xml, .../bottom_panel_screen0/background/%gconf.xml, .../panel/toplevels/top_panel_screen0/%gconf.xml, .../top_panel_screen0/background/%gconf.xml, contrib/template/.gconf/desktop/%gconf.xml, contrib/template/.gconf/desktop/gnome/%gconf.xml, .../.gconf/desktop/gnome/accessibility/%gconf.xml, .../gnome/accessibility/keyboard/%gconf.xml, .../.gconf/desktop/gnome/applications/%gconf.xml, .../gnome/applications/window_manager/%gconf.xml, .../.gconf/desktop/gnome/lockdown/%gconf.xml, contrib/template/.vim/colors/herald.vim, contrib/template/.vim/colors/moria.vim, contrib/template/.vim/colors/xoria256.vim, contrib/template/.vim/perl-support.zip, .../template/.vim/perlsupport/README.perlsupport, .../.vim/perlsupport/autoload/perlsupportgui.vim, .../perlsupport/autoload/perlsupportprofiling.vim, .../.vim/perlsupport/autoload/perlsupportregex.vim, .../template/.vim/perlsupport/doc/perlsupport.txt, .../template/.vim/perlsupport/ftplugin/perl.vim, .../codesnippets/SmallProf-variables.pl, .../perl-support/codesnippets/dot.SmallProf, .../codesnippets/free-software-comment, .../perl-support/codesnippets/module-interface.pl, .../perlsupport/perl-support/codesnippets/new.pl, .../codesnippets/pod-template-application.pl, .../codesnippets/pod-template-module.pl, .../print-data-structure-with-Dumper.pl, .../perl-support/codesnippets/print-hash-sorted.pl, .../perl-support/codesnippets/print-hash.pl, ...process-all-files-in-a-directory-recursively.pl, .../perl-support/codesnippets/slurp-file.pl, .../.vim/perlsupport/perl-support/doc/ChangeLog, .../perlsupport/perl-support/doc/perl-hot-keys.pdf, .../perlsupport/perl-support/doc/perl-hot-keys.tex, .../.vim/perlsupport/perl-support/doc/pmdesc3.text, .../perl-support/modules/perl-modules.list, .../perl-support/rc/customization.ctags, .../perl-support/rc/customization.gvimrc, .../perl-support/rc/customization.perltidyrc, .../perl-support/rc/customization.smallprof, .../perl-support/rc/customization.vimrc, .../perlsupport/perl-support/scripts/csv2err.pl, .../perlsupport/perl-support/scripts/efm_perl.pl, .../perlsupport/perl-support/scripts/pmdesc3.pl, .../perlsupport/perl-support/scripts/wrapper.sh, .../perlsupport/perl-support/templates/Templates, .../perl-support/templates/comments.template, .../perl-support/templates/idioms.template, .../perl-support/templates/pod.template, .../perl-support/templates/statements.template, .../perlsupport/perl-support/wordlists/perl.list, .../.vim/perlsupport/plugin/perl-support.vim, contrib/template/.vim/plugin/matrix.vim, contrib/template/.vim/syntax/fluxkeys.vim, contrib/template/.vim/syntax/perl.vim: Remove .gconf/.vim dirs from profile template example These two directories were big with very site-specific content. With this removal profile template example can now be integrated into distribution tarball releases. * modulecmd.tcl, testsuite/modules.20-locate/020-fqual.exp, testsuite/modules.20-locate/030-defvers.exp, testsuite/modules.20-locate/035-defname.exp, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/055-locrcerrs.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.80-deep/030-display.exp: Disable modulerc command report on display-mode Introduce a g_inhibit_dispreport global variable to be able to inhibit the report of command set within a modulerc file when mode is set to 'display'. This way a 'display' of a modulefile only outputs stuff from this modulefile and not from the various .modulerc on the path toward this modulefile. Adapt most display-related non-regression tests to correctly check returned output from start to end. 2017-04-16 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash_completion, init/tcsh_completion.in: Eliminates sym from avail res in completion scripts Previously only '(default)' symbol was wiped from avail result in bash and tcsh completion scripts. Adapt sed rules to clean up every potential symbols. * testsuite/modulefiles/loc_rc1/1.0, testsuite/modulefiles/loc_rc1/2.0, testsuite/modulefiles/loc_rc2/1.0, testsuite/modulefiles/loc_rc2/2.0, testsuite/modulefiles/loc_rc3/1.0, testsuite/modulefiles/loc_rc3/2.0, testsuite/modulefiles/loc_rc3/3.0, testsuite/modulefiles/loc_rc4/1.0, testsuite/modulefiles/loc_rc4/2.0, testsuite/modulefiles/loc_rc4/3.0, testsuite/modulefiles/loc_rc5/1.0, testsuite/modulefiles/loc_rc5/2.0, testsuite/modulefiles/loc_rc6/1.2, testsuite/modulefiles/loc_rc7/0.9, testsuite/modulefiles/loc_rc7/1.2, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/055-locrcerrs.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.80-deep/050-whatis.exp: Add non-reg tests for whatis cmd on alias or sym Add bunch of tests in 050-locrc of 20-locate suite and 050-whatis of 80-deep suite to guaranty over time correct behavior of whatis command on module aliases or symbolic module version. * testsuite/modulefiles.deep/modsym/.modulerc, testsuite/modulefiles.deep/modsym/dir1/1.0, testsuite/modulefiles.deep/modsym/dir2/.modulerc, testsuite/modulefiles.deep/modsym/dir2/2.0, testsuite/modules.80-deep/010-init_ts.exp, testsuite/modules.80-deep/020-load.exp, testsuite/modules.80-deep/030-display.exp, testsuite/modules.80-deep/999-cleanup.exp: Non-reg tests for symbol on deep modules Add non-regression tests in 80-deep suite to ensure correct behavior of module-version symbols on deep modulefiles. * testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.91-sort/020-avail.exp: Symbols are avoided when looking for implicit default Add non-regression tests in 050-locrc of 20-locate suite and in 020-avail of 91-sort suite to clarify that symbolic versions do not take part of the choice made when looking for an implicit version or a latest version (only aliases and modulefiles can be returned). * modulecmd.tcl, testsuite/modules.90-avail/020-single.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/050-long.exp: Add symbolic version target to res list on getModules When looking for modules, after looking at paths contents and module aliases set within the current dir, look at symbolic versions set with module-version to see if some match searched mod. If so, add the modulefile target of these symbolic version to the result list if found in path previously but not yet added to the result list. With this new behavior a 'module avail mod/sym' will display the relative 'mod/vers'. Previously nothing was returned. Add non-regression tests in 020-single, 040-wild and 050-long of 90-avail suite to check this new behavior persist over time. * modulecmd.tcl, testsuite/modulefiles.deep/modalias/.modulerc, testsuite/modulefiles.deep/modalias/3.0, testsuite/modulefiles.deep/modalias/dir1/.modulerc, testsuite/modulefiles.deep/modalias/dir1/1.0, testsuite/modulefiles.deep/modalias/dir2/.modulerc, testsuite/modulefiles.deep/modalias/dir2/2.0, testsuite/modules.80-deep/010-init_ts.exp, testsuite/modules.80-deep/020-load.exp, testsuite/modules.80-deep/030-display.exp, testsuite/modules.80-deep/999-cleanup.exp: Optimize getPathToModule when solved alias is upper-mod Improve getPathToModule procedure to be able to solve any-kind of module aliases within a single call rather than restarting new searches when solved aliases are on the upper part (elt1/) of a current search (elt1/elt2/) sharing same module root. Add isSameModuleRoot procedure on the way to be able to check two modules share the same base name. Add non-regression tests in 020-load and 030-display of 80-deep suite to guaranty that sub or upper aliases are correctly found. * modulecmd.tcl: Change default search value of listModules to 'wild' Previously set default value for 'search' argument was deprecated so change it to 'wild' which will result when passed to getModules in the addition of a wildcard to look at modules. This way the wildcard is only added in conjunction of listModules searches as getPathToModule searches should search for exact things. * modulecmd.tcl: Move deep mod lookup logic from findModules to getModules When a deep module is asked for searched to getModules (elt1/elt2/vers) call findModules to search on upper element (elt1) in order to return every modulerc or modulefiles related to this module. Then getModules parses the array returned by findModules to build its results with only the directories, modulefiles and aliases that correspond to the asked search. By doing so, some modulerc search logic can be eliminated from findModules, as we will now always look at the whole deep module content. 2017-04-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.50-cmds/190-load.exp: Rework handling of error raised by checkValidModule In checkValidModule procedure, register an entry in a g_invalid_mod_info global array when a modulefile does not correctly set the magic cookie. By doing so we are able to state during a modulefile search in getPathToModule procedure that the modulefile was found but it was not correctly defined. This mechanism may be extended to other kind of modulefile error (like access issues). Add new non-regression tests to 190-load in 50-cmds suite for modulefile specified as full path as new error handling better detect issues on this use-case. 2017-04-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Optimize getPathToModule when solved alias is sub-mod In case an alias resolution leads to a subsequent modulefile (modulefile part of the current searched tree), go further in that searched tree rather restarting search with a new getPathToModule call. 2017-04-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modulefiles/loc_rc7/.modulerc, testsuite/modulefiles/loc_rc7/0.9, testsuite/modulefiles/loc_rc7/1.2, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.91-sort/020-avail.exp: Add aliases to dir list of elements in getModules When looking for an implicit default in a directory, now aliases are part of the directory items so it can be returned as the last element in it (highest numerically sorted version). Add tests in 050-locrc of 20-locate suite to guaranty this behavior on load command and tests in 020-avail of 91-sort suite to guaranty this behavior on avail command. 2017-04-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.70-maint/045-listlong.exp: Consider upper dir .version file in findModules If searched mod is found next to a .version file (in same directory), add this rc file to the list of those to interpret (like any modulerc files found on the path between the modulepath dir and the dir of the search mod). With this fix 'module list' will correctly display the 'default' tag along loaded modules when set via a .version file. Adapt 045-listlong test in 70-maint suite to check this. * modulecmd.tcl, testsuite/modules.70-maint/045-listlong.exp: Plug cmdModuleList on getModules rather getPathToModule Call for getPathToModule for each loaded modules to retrieve their tag list and modulefile modification time in case of long output. Also fix long output to display tag list if any. Add a non-reg test in 045-listlong of 70-maint suite to check that. * modulecmd.tcl, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.90-avail/020-single.exp: Plug getPathToModule on findModules/getModules Make getPathToModule procedure relying on findModules and getModules procedures for module search and rc file interpretation, as listModules now does. findModules and getModules have been adapted to also handle getPathToModule use-cases. Code to look for modules is now merged in a common set of procedures which will help both search sides (getPathToModule/listModules) to get immediate benefit from enhancement made on this code area. As a side effect a 'module avail' on a module name which is an alias will now correctly return this alias module. A test has been added in 020-single of 90-avail suite to check that. * modulecmd.tcl: Introduce getLoadedModuleFileList proc Add a getLoadedModuleFileList procedure to return a list corresponding to the content of the _LMFILES_ environment variable (like getLoadedModuleList for LOADEDMODULES). Take this opportunity to register modulefile path in g_loadedModules global array, to be able to easily determine what file correspond to what loaded module. 2017-04-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.91-sort/020-avail.exp: Separate file search from display treatment in listModules Introduce findModules and getModules procedures to handle file search for modulefiles and rc files interpretation. findModules is in charge of searching paths for module-related files. getModules calls findModules to get file list, then interprets any rc files found to consolidate a list of modules to return. listModules procedure now calls for getModules to get an array of modules corresponding to the directory passed as argument. So focus of listModules is now to prepare results for display. This new methodolidy also corrects way directory where handled in case of '--default' and '--latest' listing. On a '--default' listing, a modulefile does not appear anymore if a dir is set default at the same level. On a '--latest' listing: a dir does not appear anymore if set default but not the latest. Non-regression tests have been added in 020-avail of 91-sort suite to ensure a correct behavior will be maintained over time. 2017-03-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Protect read/close under catch in checkValidModule Improve code of checkValidModule procedure to put read and close calls under catch protection. Also, only read 8 characters at the beginning of file to check header is valid. * modulecmd.tcl: Read then eval rather source module content Replace source of modulefile and modulerc content by a file read then an evaluation of its content to optimize open/read/close operations of a 'module avail' command. By doing so, a modulerc is only read once during avail rather twice (once for validity check, then for sourcing content). Now validity check is performed at the same time the content is read to be passed for evaluation. In terms of Tcl C code, read+eval is equivalent to source. Only 'info script' has to be adapted with read file name in order to get same behavior during module code evaluation. 2017-03-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Call report only once per list to display * modulecmd.tcl: Optimize grid size computation in displayElementList Change algorithm strategy to compute the optimized number of column that can be used to display in column-fashion a list of elements. Previous algorithm was starting with a number of column equals to the number of element in list. New algorithm starts closer to the solution with a number of column equals to the basic solution where each column width is the same (equals to the length of biggest element in list). This approach reduces the number of iteration needed to reach best solution. Also when a column width is changed currently computed row widths is adapted only for this column and not entirely reset. All these optimizations drastically improve grid size computation time. New algorithm is approximatelly 12 time faster than the previous one. There is no more an overhead for this display mode. 2017-03-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modulefiles.deep/dir2/.modulerc, testsuite/modulefiles.deep/dir2/1.0, testsuite/modulefiles.deep/dir2/3.0, testsuite/modulefiles.deep/modload/dir2/.modulerc, testsuite/modulefiles.deep/modload/dir2/1.0, testsuite/modulefiles.deep/modload/dir2/3.0, testsuite/modules.80-deep/010-init_ts.exp, testsuite/modules.80-deep/020-load.exp, testsuite/modules.80-deep/030-display.exp, testsuite/modules.80-deep/999-cleanup.exp: Fix getModuleNameVersion to translate mod name on demand only Translate module name to currently interpreted module name when name correspond to the last part this interpreted module only if translation is enabled (was previously done in all cases). Translation is enabled when usage of symbolic modulefile names are allowed, which means it is enabled from 'module-version', 'module-alias' and 'module-info version' and 'module-info symbols'. Add non-reg tests in 020-load and 030-display of 80-deep suite to check that. 2017-03-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Add license and copyright header to modulecmd.tcl Take also this opportunity to correct the version number which should be equal to the number of commits but which was commit number+1 * contrib/doc2www, www/c/INSTALL.html, www/c/NEWS.html, www/c/README.html, www/c/module.html, www/c/modulefile.html, www/index.html: Append myself to the copyright list 2017-03-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/rpm/macros.modules-tcl, contrib/rpm/modules-tcl.spec: install: add initial RPM specfile * init/Makefile.in, init/bash.in, init/csh.in, init/ksh.in, init/sh.in, init/zsh.in: install: fix reset of regular path in switchml Avoid resetting regular path (/usr/bin) or manpath (/usr/share/man) when switching from Tcl to C version in switchml utility. 2017-03-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.50-cmds/250-x-resource.exp: Raise error on x-resource if DISPLAY not set X11 resource changes cannot occur if DISPLAY environment variable is not set. So raise an error in x-resource procedure if we detect that DISPLAY is not defined. Adapt 250-x-resource tests in 50-cmds to change expected results in case testsuite is ran with no DISPLAY set (like during rpm build). 2017-03-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile.in: testsuite: remove runtest verbose mode Remove testsuite verbose mode as it is now sucessfull. No need to always get full details of the test run. Replace it by the RUNTESTFLAGS make variable to be able to set verbository on demand from the command-line. * INSTALL.txt, Makefile.in, configure, doc/Makefile.in: install: do not build html doc as not installed HTML documentation is not included in the install process so do not build it and remove strong requirement of pod2html. 2017-03-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/lisp.in: init: fix lisp script for env-change actions 2017-03-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * NEWS, modulecmd.tcl: Release of version 1.775 * modulecmd.tcl: Fix MODULESHOME setup in autoinit for libexec install * contrib/doc2www, www/Makefile, www/c/INSTALL.html, www/c/NEWS.html, www/c/README.html, www/c/module.html, www/c/modulefile.html, www/index.html: www: add README and INSTALL files for Tcl and C 2017-03-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Remove use of untested var in runModulerc * testsuite/modules.50-cmds/088-info-isloaded.exp, testsuite/modules.50-cmds/150-module.exp: testsuite: be resilient to _modshare fluctuation '_modshare' variables are get and set as an array so order of elements is not guaranteed. Multiple elements set in a _modshare variable may be ordered differently depending of the current system or the path they represents. 150-module and 088-info-isloaded tests from 50-cmds have been adapted to be resilient to _modshare variable fluctuation. 2017-03-03 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/LICENSE.GPL => COPYING.GPLv2, INSTALL-win.txt, INSTALL.txt, Makefile.in, README.txt, doc/Makefile.in, doc/example.txt, doc/install.txt, doc/installwin.txt, doc/readme.txt, init/README.txt, readme.txt: doc: Adapt and harmonize INSTALL and README files Change documents markup to improve readability and extend content to fit the new installation process. INSTALL*, README and LICENSE documents have been moved/renamed in order to be found at the root directory to conform with open-source project standards and let people easily find these files once they retrieve either a distribution tarball or a clone of git repository. README.txt in init dir has been deleted as INSTALL.txt in root directory now integrates its content. INSTALL.txt and example.txt are now installed in 'docdir' at 'make install' time. 2017-03-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/diff_with_c-version.pod: doc: add tcl specific stuff to diff_with_c-version Improve diff_with_c-version document to describe the features of the Tcl-version that are not supported on the C-version. Also state that the diff takes C version 3.2.10 against Tcl version 1.729 as a basis. Differences appearing past these versions will be flagged with the release number of appearance. * configure, init/Makefile.in, init/bash.in, init/csh.in, init/fish.in, init/ksh.in, init/perl.in, init/python.in, init/sh.in, init/tcl.in, init/zsh.in: init: do not load modulerc config is env already set If MODULEPATH or LOADEDMODULES is already set, do not source the modulerc configuration file in init scripts. As a consequence, if .modulespath sets a module path, then modulerc will be ignored which clarifies how default configuration is loaded: if both .modulespath and modulerc are defined, .modulespath takes precedence over modulerc. So if .modulespath sets a module path, all loaded modules defined in the modulerc file will be ignored. 2017-02-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Introduce release date to display next to version 2017-02-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile.in, doc/Makefile.in, init/Makefile.in: install: add 'DESTDIR' support * .gitignore, Makefile, Makefile.in, configure, doc/{Makefile => Makefile.in}, init/.gitignore, init/{Makefile => Makefile.in}: install: introduce a 'configure' step Add a 'configure' shell script to generate Makefiles, rather than choosing installtion directories or enabled features a the 'make' step. By doing so, installation process is clearer and closer to build conventions. Use a custom 'configure' shell script rather than using autoconf and automake tool suites in order to keep good readability of Makefiles. Moreover our build use case is relatively small since nothing is complied so there is no real benefit of using autoconf/automake. Adapt Makefiles to this 'configure' change and add 'distclean' target. 2017-02-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, init/Makefile: init: add make option to bind on C ver .modulespath Add the 'usecverdotmodulespath' make argument to generate init/.modulespath config file as a symlink on C version installed .modulespath configuration (by doing so both C and Tcl versions installed on the same environment can share the same MODULEPATH initialization setup). 'cverinitdir' must be known for 'usecverdotmodulespath' to be taken in account. * Makefile, init/Makefile, init/bash.in, init/csh.in, init/fish.in, init/ksh.in, init/sh.in, init/zsh.in: init: define switchml tool in shell init scripts Introduce 'switchml' tool, a shell function (or alias for csh or tcsh shells) that swap currently enabled Modules version (C or Tcl) by the other version (C or Tcl). In case a swapped version was defining specific PATH or MANPATH entries, these specific entries are removed when switching to the other version to avoid still relying on the binaries and man pages of the swapped-out version. 2017-02-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitattributes, .gitignore, Makefile, doc/Makefile: install: add a 'dist' make target Build a distribution tarball from the git repository content with the 'dist' make target. Add gitattributes to exclude git-specific and website-specific content in distribution tarball. Also exclude user home directory template from dist tarball as its content has a very large size and may not apply to everybody. Adapt parts of Makefiles to behave correctly when ran from a distribution tarball, not from the git repository. 2017-02-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, doc/Makefile, init/Makefile: install: add an 'uninstall' make target * Makefile, init/.modulespath.in, init/Makefile, init/modulerc.examp, init/modulerc.in: init: generate modulerc and .modulespath configs Add makefile rules to generate the modulerc and .modulespath configuration files. modulerc is generated in any case. By default it hosts the MODULEPATH and LOADEDMODULES definition passed to the Makefile with the 'modulepath' and 'loadedmodules' argument. The 'setdotmodulespath' Makefile argument is also introduced. When set to 'y', the .modulespath is generated and hosts the MODULEPATH definition. In this case, modulerc config file only gets the LOADEDMODULES definition or is set empty if no value is passed to the 'loadedmodules' argument. 2017-02-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, doc/Makefile, doc/source/module.pod.in, init/Makefile: install: add modulefilesdir configuration option @modulefilesdir@ enables to set the default system-wide modulefiles directory as described in module.1 man page. * Makefile, init/Makefile, init/bash.in, init/csh.in, init/fish.in, init/ksh.in, init/sh.in, init/zsh.in: init: set PATH and MANPATH in shell init scripts Add the possibility to set PATH and MANPATH in shell init scripts (sh-like, csh-like and fish scripts) if specific option are enabled in makefile (enabled by default). With this, bin directory and man directory of the modules-tcl installation are prepended to the MANPATH and PATH environment variables. Prepending is required for PATH as manpath utility in its default Linux setup will automatically set MANPATH from PATH change, so if we want MANPATH to be prepended, PATH has to be prepended. 2017-02-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitignore, Makefile, doc/Makefile, doc/source/{module.pod => module.pod.in}: doc: adapt module doc to path used for install Use same process than init scripts to translate module documentation from configure-like pattern (@prefix@, @initdir@, etc) to the path name chosen for installation. * .gitignore, doc/Makefile: doc: make a txt version of diff_with_c-version doc And include this txt version in the documentation directory made for installation. * .gitignore, Makefile, doc/Makefile, init/.gitignore, init/Makefile, init/bash.in, init/csh.in, init/fish.in, init/ksh.in, init/lisp.in, init/perl.in, init/profile.csh.in, init/profile.sh.in, init/python.in, init/sh.in, init/tcl.in, init/tcsh_completion.in, init/zsh.in: Introduce an installation process Introduce an 'install' target in makefiles to provide an installation process for modules-tcl. Defines installation paths with Makefile variables in order to avoid having a ./configure step. Install paths are set during the 'make' step by passing 'prefix', 'libexecdir', 'mandir', etc arguments to the make command. If no path definitions are passed to the 'make' command, installation will be made in '/usr/local/modules-tcl' by default. Installation paths provided (or set from the default value found in Makefile) are saved at the 'make' step in a .makeinstallpath file. Then at the 'make install' step, this .makeinstallpath file is read and make knows where to install modules-tcl. These paths definitions are also used to translate *.in init script to their installed version. modulecmd.tcl script is by default set to be installed in the libexec directory to follow FHS specification (as this script is an executable but not directly accessed by users). * init/csh.in: init: throw module exit code on csh-like script Also takes this opportunity to refactor code of this init script. 2017-02-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/.gitignore, init/Makefile, init/profile.csh.in, init/profile.sh.in: init: add /etc/profile.d scripts * init/.gitignore, init/Makefile, init/bash.in, init/csh.in, init/fish.in, init/ksh.in, init/sh.in, init/zsh.in: init: ensure module definition in sh-like sub-shells Adapt shell init scripts (sh-like, csh-like and fish) to get module defined in sh-like sub-shells. The method to define the module function in interactive or non-interactive sh-like sub-shells vary according to the shell flavor. The below table is an attempt to summarize the method to use to get 'module' function defined in sub-shell depending of the SH-shell kind and if the sub-shell is in interactive mode or not. +-----+----------+-----------+-------+ | ENV | BASH_ENV | export -f | FPATH | +-------------+-------------------+-----+----------+-----------+-------+ | |inter sub-shell | | | X | | |BASH +-------------------+-----+----------+-----------+-------+ | |non-inter sub-shell| | X | X | | +-------------+-------------------+-----+----------+-----------+-------+ | |inter sub-shell | X | | X | | |SH +-------------------+-----+----------+-----------+-------+ |(BASH-compat)|non-inter sub-shell| | | X | | +-------------+-------------------+-----+----------+-----------+-------+ | |inter sub-shell | X | | | X(*)| |SH +-------------------+-----+----------+-----------+-------+ |(ZSH-compat) |non-inter sub-shell| X | | | X(*)| +-------------+-------------------+-----+----------+-----------+-------+ | |inter sub-shell | X | | | X | |KSH +-------------------+-----+----------+-----------+-------+ | |non-inter sub-shell| | | | X | +-------------+-------------------+-----+----------+-----------+-------+ | |inter sub-shell | X | | | X(*)| |KSH +-------------------+-----+----------+-----------+-------+ |(ZSH-compat) |non-inter sub-shell| X | | | X(*)| +-------------+-------------------+-----+----------+-----------+-------+ | |inter sub-shell | | | | X(*)| |ZSH +-------------------+-----+----------+-----------+-------+ | |non-inter sub-shell| | | | X(*)| +-------------+-------------------+-----+----------+-----------+-------+ (*) autoload required Shell init scripts have been adapted to implement these different method to cover most of the initialization cases. Note that 'zsh' requires to declare with autoload the functions put in FPATH directory so there is no gain to configure FPATH for 'zsh' compare to a bare source of the 'zsh' init script. * init/.gitignore, init/bash.in, init/csh.in, init/fish.in, init/ksh.in, init/perl.in, init/python.in, init/sh.in, init/tcl.in, init/zsh.in: init: set MODULEPATH if not defined Initialize MODULEPATH variable if not defined, with an empty string or with the content of the init/.modulespath file if it exists and it is readable. This file contains a list of module paths, one per line or many per line separated by colon character. This way of initializing MODULEPATH has been retrieved from C version init scripts in order for sysadmins to keep a familiar concept to set default MODULEPATH. * init/bash.in, init/csh.in, init/fish.in, init/ksh.in, init/perl.in, init/python.in, init/sh.in, init/tcl.in, init/zsh.in: init: set empty LOADEDMODULES if not defined 2017-02-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/Makefile, init/bash.in, init/csh.in, init/tcsh.in: init: introduce SHELLNAME var to replace in script With SHELLNAME replacement variable, tcsh init script is derivated from csh init script. * init/bash.in, init/csh.in, init/fish.in, init/ksh.in, init/perl.in, init/python.in, init/sh.in, init/tcl.in, init/tcsh.in, init/zsh.in: init: do not source init/modulerc if not readable * doc/source/module.pod: doc: fix python init example for python3 compat * init/.gitignore, init/Makefile, init/{tcsh_completion => tcsh_completion.in}: init: replace tclsh and MODULESHOME in tcsh_completion * init/Makefile, init/bash.in, init/csh.in, init/fish.in, init/ksh.in, init/lisp.in, init/perl.in, init/python.in, init/sh.in, init/tcl.in, init/tcsh.in, init/zsh.in: init: get and set TCLSH in init scripts As for MODULESHOME, get 'tclsh' location from Makefile then replace '@TCLSH@' pattern in shell init scripts with found location rather than guessing it in the init scripts. By doing so, same 'tclsh' location search is applied to all init scripts. Search is performed with 'command' to look at a predefined list of PATHs in order to be resilient to the current PATH content. * init/Makefile, init/bash.in, init/csh.in, init/fish.in, init/ksh.in, init/lisp.in, init/perl.in, init/python.in, init/sh.in, init/tcl.in, init/tcsh.in, init/zsh.in: init: normalize use and replacement of MODULESHOME Simplify guess of MODULESHOME location by more relying on 'make' capabilities than 'perl'. Adapt init scripts for the different shells to use the MODULESHOME variable that is replaced during the 'make' process rather than ${MODULESHOME}, $env(MODULESHOME), etc. By the way, use a replacement pattern closer to what 'configure' is using with '@MODULESHOME@' rather than '$MODULESHOME' which was confusing in shell scripts. * init/zsh.debug: init: remove unused zsh.debug 2017-02-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Fix MODULESHOME setup in autoinit Set modulecmd.tcl script directory absolute then guess MODULESHOME from it. Adapt this setup if modulecmd.tcl is located in a 'bin' directory as in this case MODULESHOME is set to the upper directory (as 'init' directory will be located at the same level than the 'bin' dir not inside the 'bin' dir). By the way, fix perl autoinit code to simply use 'argv0' rather than 'MODULESHOME' in order to set the module function as for the other languages. 2017-03-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modulefiles/loc_rc6/.modulerc, testsuite/modulefiles/loc_rc6/1.2, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/050-long.exp: Correct alias/version resolution on avail command List of version symbols was erroneous on an avail command in case a modulefile held symbols like default and was targeted by aliases. Avail output was showing the aliases holding the symbols instead of the modulefile. getVersAliasList procedure was fixed to perform the alias resolution attempt in a second phase of the procedure, to let chance to retrieve symbols for the initial module name passed to the procedure. 030-multiple, 040-wild and 050-long tests of the 90-avail suite has been enhanced with new tests to check this behavior. loc_rc6 modulefile has been added to the testsuite modulefiles to reproduce this use case. Thanks to Bert Wesarg and Levi Morrison for reporting this issue. 2017-02-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/doc2www, www/Makefile, www/c/NEWS.html, www/{man => c}/module.html, www/{man => c}/modulefile.html, www/index.html: www: include NEWS files on website Include the NEWS file of C and Tcl versions to the documentation portal of Environment Modules. Move C documentation to a 'c' directory to better distinguish from the Tcl documentation that is stored in the 'tcl' directory. Hard links are maintained on the Website not to break URL to man/module.html and man/modulefile.html pages. * NEWS: Add NEWS file to desc changes in modules-tcl rel 2017-02-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/doc2www, www/index.html, www/man/module.html, www/man/modulefile.html: www: add Mark Lakata to the copyright list * .gitignore, Makefile, contrib/gitlog2changelog.py: Add gitlog2changelog.py contrib script Import gitlog2changelog.py GPL script to generate a ChangeLog file based on the commits of the git repository. Add a 'ChangeLog' rule to the Makefile. * contrib/doc2www, www/index.html, www/man/module.html, www/man/modulefile.html: www: update lic/copyright and version order Adapt pages as suggested by R.K. and Kent: * update copyright for the recent years * add reference to LGPL as C version has some parts using this lic * reword C and Tcl version presentation * put C version first 2017-02-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitignore, Makefile, contrib/doc2www, www/Makefile: www: Include Tcl version docs and papers/talk to website Introduce 'doc2www' script to convert Tcl version documents to the website format, with usage of the 'bootstrap' web toolkit. Makefiles have been adapted to be able to generate these www documents from the source pod files and to copy existing txt and pdf files in the website tree. * www/index.html, www/man/module.html, www/man/modulefile.html, www/modules.css: www: Change website look and feel with Bootstrap Adapt web pages to make use of the Bootstrap toolkit in order to get a modern and easy to maintain web style and content. Bootstrap also helps to get a responsive design so the website will adapt to the terminal used to read it. Thanks to Aurelien Degremont for pointing me to the right tool for this task. * www/man/module.html, www/man/modulefile.html: www: Import and adapt last version of C manpages 2017-02-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * www/index.html, www/maillist.html: www: Refresh content all on single page 2017-02-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/paper/MC2_whitney_paper.pdf, doc/paper/Modules-Paper.pdf, doc/paper/absmod.pdf, doc/paper/user-setup.pdf, doc/talk/CSE-IT_modules_talk.pdf: doc: Import papers and talk avail on www 2017-02-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * www/index.html, www/maillist.html, www/man/module.html, www/man/modulefile.html, www/modules.css: www: Import current website 2017-02-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Fix use of pwd in renderSettings proc renderSettings was using the 'pwd' binary instead of the 'pwd' Tcl call, which cause issue when PATH is empty. Code has been adapted to reuse the value of the 'cwd' global variable or set its value by calling the 'pwd' Tcl function. * doc/source/module.pod: doc: Describe collection stuff 2017-01-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/Makefile, doc/source/diff_with_c-version.pod: doc: Introduce diff_with_c-version.pod document * doc/source/module.pod, doc/source/modulefile.pod: doc: use itemized-list for ENV and FILES sections Adapt module.pod and modulefile.pod to use itemized-list rather than head2 for the content of their ENVIRONMENT and FILES sections. HTML rendering is clearer with a list than h2. * .gitignore, doc/Makefile, doc/html/common.css: doc: add a minimal css file to render html docs 2017-01-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Improve shebang to only search tclsh once if in PATH 2017-01-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/modulefile.pod, modulecmd.tcl, testsuite/modulefiles/info/mode3, testsuite/modules.50-cmds/084-info-mode-exp.exp, testsuite/modules.95-version/020-unload.exp, testsuite/modules.95-version/022-unload2.exp: Add module-info mode check against 'remove' and switch' value For compatibility with C-version, enable to check current 'module-info mode' against the 'remove' and 'switch' value. To achieve this change 'remove' is considered an alias of the 'unload' value. 'switch' is checked against the current 'module-info command'. 084-info-mode-exp tests of 50-cmds suite have been adapted. In addition 020-unload and 022-unload2 tests of 95-version suite have also been adapted as the modulefiles they check are using a 'module-info mode remove' test. 2017-01-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Handle sep line on avail/help/display with a proc * doc/source/modulefile.pod, modulecmd.tcl, testsuite/home/.module/infocmd, testsuite/home/.module/infocmdexp, testsuite/modulefiles/info/command, testsuite/modulefiles/info/commandexp, testsuite/modulefiles/inforc/.modulerc, testsuite/modules.50-cmds/281-info-modulerc.exp, testsuite/modules.50-cmds/282-info-command.exp, testsuite/modules.50-cmds/283-info-command-exp.exp, testsuite/modules.61-coll/020-savelist.exp: Introduce 'module-info command' Introduce g_commandNameStack variable, currentCommandName, pushCommandName and popCommandName procedures to implement a 'module-info command' that returns the name of the currently running module command. This new mechanism enables to distinguish complex 'load' or 'unload' commands that cannot be determined with 'module-info mode' alone. For instance a modulefile can now be aware that a 'switch', a 'restore' or a 'purge' command is currently being run. Add description of this new command to the modulefile documentation. Add 282-info-command and 283-info-command-exp tests in 50-cmds and adapt 281-info-modulerc in 50-cmds and 020-savelist in 61-coll. * doc/source/module.pod: doc: add missing 'aliases' and 'source' sub-commands 2017-01-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modulefiles/inforc/.modulerc, testsuite/modulefiles/inforc/1.0, testsuite/modulefiles/inforc/2.0, testsuite/modules.50-cmds/281-info-modulerc.exp: Enable use of 'module-info' from modulerc Give access to the 'module-info' procedure in slave interp when executing .modulerc or .version file. Adapt push/pop mode calls to surround procedure calls that can execute a modulerc file to get there a coherent 'module-info mode' value. Add 281-info-modulerc tests to the 50-cmds suite. 2017-01-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modulefiles/info/.modulerc, testsuite/modulefiles/info/specified, testsuite/modules.50-cmds/280-info-specified.exp: Fix 'module-info specified' Introduce g_specifiedNameStack variable, currentSpecifiedName, pushSpecifiedName and popSpecifiedName procedures to implement a 'module-info specified' that returns the modulefile name as specified on the command-line. Add 280-info-specified tests to the 50-cmds suite. * modulecmd.tcl: Simplify code of cur/push/pop mode and modname procs * doc/source/module.pod: doc: add missing 'search' module sub-command 2017-01-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Display system command with no extra space if no arg * modulecmd.tcl: Display unsetenv command with 1 tab sep instead of 2 To get result aligned with the other commands. * modulecmd.tcl, testsuite/modules.70-maint/055-whatis.exp, testsuite/modules.70-maint/060-apropos.exp, testsuite/modules.90-avail/030-multiple.exp: No exit raise on modfile error for avail/whatis cmds Do not exit on an error raised by one modulerc or one modulefile for global commands avail, whatis or search that parse the content of all modulefile/modulerc found in the defined module paths. By doing so results from these global commands will not be harmed if error exists in a few modulefiles. The content of these modulefiles will be ignored after the erroneous line. So in a whatis/search case if the module-whatis definition is set before the erroneous line, the modulefile will be taken into account. If the module-whatis definition is set after the erroneous line, the modulefile will be ignored. To achieve this goal a 'exit_on_error' argument has been added to the 'execute-modulerc' and 'execute-modulefile' procedures. By default this argument is enabled but calls made from 'listModules' and 'cmdModuleSearch' disable it. Add non-regression test to 055-whatis and 060-apropos in 70-maint suite and to 030-multiple in 90-avail suite. * modulecmd.tcl, testsuite/modulefiles/bad/.modulerc, testsuite/modulefiles/bad/after, testsuite/modulefiles/bad/before, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp: Non-zero exit code when exiting from execute-mod procs When a critical error is encountered when interpreting a modulefile or a modulerc from execute-modulefile or execute-modulerc procedures, exit as done elsewhere. Means call for error code rendering and raise error to top level, where exit command is called. A new procedure called 'exitOnError' is added and it is called by execute-modulefile and execute-modulerc procedures. Top level error management code now does not always print an error message as in this situation error message has already been displayed when the reportInternalBug procedure was called. Add non-regression tests to 190-load in 50-cmds suite and to 070-display and 080-help in 70-maint suite. * modulecmd.tcl: Refactor exit and ModulesVersion set of execute-modulerc Refactor the execute-modulerc procedure to handle exit in case of critical error as it is done on execute-modulefile procedure with the slave interp evaluation returning an errorVal. Then this errorVal is treated to check if a critical error as been encountered (errorVal=2). To achieve this goal the way the ModulesVersion variable is set need to be changed as the slave interp now returns errorVal not ModulesVersion. A setModulesVersion procedure is added to enable the slave interp to pass the value of the ModulesVersion variable in the master interp context. 2017-01-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Retrieve help mode from module-info on execute-modulefile Remove the 'help' argument on the execute-modulefile procedure that was used to know the execution is made on a 'help' mode. Now that 'help' mode is pushed to the 'mode' stack, 'help' mode can be retrieved from 'module-info mode'. 2017-01-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Inhibit non-critical error report on avail/whatis Introduce the g_inhibit_errreport variable to inhibit the stderr display of non-critical error aka error reported through the reportWarning, reportError or reportInternalBug procedures. inhibitErrorReport and reenableErrorReport procedures are added to enable or disable g_inhibit_errreport. This new mechanism has been deployed on the 'avail', 'aliases' and 'whatis/search' commands, in order to avoid error flood when parsing all modulefiles or modulercs. This way, results from these commands will appear clearly to the user. 2017-01-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.50-cmds/210-exit.exp: Handle multiple lines of module-whatis for same modfile Treat g_whatis as a list where each module-whatis text-line is appended to the previous lines. In case of search, these lines are displayed only if they match the search pattern (to get same behavior as on C-version) As a side effect, if no 'module-whatis' directive are found in a modulefile, this modulefile is never displayed on a 'module whatis' call (same behavior as on C-version). Adapt 210-exit whatis test in 50-cmds suite. * modulecmd.tcl: Handle multiple args passed to module-whatis cmd When multiple arguments are provided to the module-whatis module command, join them with " " to get a line of text. * modulecmd.tcl: Return error on whatis if searched modfile not found If 'module whatis' command gets modulefiles as argument, if this or these modulefiles do not match any existing modulefile in the defined module path, then raise error as done on 'module load'. 2017-01-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles/coll/a, testsuite/modulefiles/coll/b, testsuite/modulefiles/coll/c, testsuite/modulefiles/coll/d, testsuite/modulefiles/help/2.0, testsuite/modules.70-maint/010-init_ts.exp, testsuite/modules.70-maint/020-update.exp, testsuite/modules.70-maint/030-purge.exp, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/043-listno.exp, testsuite/modules.70-maint/045-listlong.exp, testsuite/modules.70-maint/048-listlongno.exp, testsuite/modules.70-maint/050-whatis-load.exp, testsuite/modules.70-maint/055-whatis.exp, testsuite/modules.70-maint/056-whatis-nullpath.exp, testsuite/modules.70-maint/060-apropos.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/095-cleanup.exp: testsuite: import and adapt 70-maint suite Also adapt 'coll' modulefiles to better cope with whatis/search commands. 2017-01-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Set a ref count of 1 for path without ref count When a path is used in a variable but does not own a reference count assume this count is 1 rather than 999999999 to be able to unload it afterward which would not be possible if this path is referred 999999999 times. 2015-06-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * contrib/envml: Introducing envml utility Add a 'envml' script tool which act as an application launcher where module commands are instancied to setup environment before launching the given application. 2017-01-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/010-environ.exp: testsuite: clean _modshare env vars before start Unset any *_modshare environment variable before test start to get independent from the current environment situation. * Makefile: Ask for pwd physical resolution in Makefile Use physical resolution (pwd -P) rather than logical resolution to be able to match result returned by the 'pwd' Tcl command. 2017-01-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/999-cleanup.exp: Always register paths as absolute paths Convert paths provided to be part of MODULEPATH environment variable in order to always register the corresponding absolute path. This way these paths become independent from the current working directory, which can be modified afterward by the user. Use 'file join [pwd]' method rather than 'file normalize' to get aboslute paths in order to preserve potential symlink used in the relative path hierarchy. Convertion also strips any extra '/' character and resolive "." and ".." components. readCollectionContent and cmdModuleUnuse procedures have also been adapted to keep compatibility with previous behavior where relative paths were able to be registered in MODULEPATH. Adapt 61-coll suite and improve 030-use and 070-unuse tests of 10-use suite. 2017-01-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.50-cmds/210-exit.exp: Inhibit next modfiles interp with 'exit' only if mode is load Do not impact with 'exit' calls the remaining modulefiles to interpret in case of global non-load action like whatis, display or help. Some tests have been added to 210-exit in order to check this behavior. * doc/source/modulefile.pod, modulecmd.tcl, testsuite/modules.50-cmds/087-info-shells-exp.exp: Add arg to test current {shell,shelltype}' in module-info Add the possibility to pass a string to 'module-info shell' and 'module-info shelltype' to get a boolean test on currently used shell or shelltype. This kind of behavior is already available on 'module-info mode' to test module current mode. These features are supported by C-version even if not documented. modulefile documentation and 087-info-shells-exp tests in 50-cmds suite have been adapted accordingly. 2017-01-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/modulefile.pod: doc: clarify 'module-info {symbols,version}' commands 2017-01-10 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modulefiles/loc_def/default, testsuite/modulefiles/loc_def/truedef, testsuite/modules.20-locate/035-defname.exp: Do not always treat 'default' version-name as a symbol Do not always treat 'default' version-name as a symbol where 'module/default' is equal to 'module'. Sometimes 'module/default' can be a real modulefile thus it should be treated like that. To do so a 'default_is_special' argument has been added to the 'getModuleNameVersion' procedure in order to treat 'default' as a special version-name only when working with 'module-version', 'module-info version' and 'module-info symbols' commands. Add 035-defname tests to 50-cmds suite to check this behavior. 2017-01-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp: Escape ':' in modshare var when used as path element in var Some list variable may contain element with ':' in it, like for URL, separated by a character different than ':'. However corresponding modshare variable always use colon character as separator so we need to escape colon used as variable content in modshare variable to avoid issue. To achieve that psplit and pjoin procedures are introduced as well as a charUnescaped procedure, which is the reverse of the already existing charEscaped procedure. With these new procedures path-like variable escape or unescape $g_def_separator character used in element of the variable when splitting or joining the whole variable. Adapt 042-append-delim, 047-app-del-undo, 052-prepend-delim and 057-pre-del-undo tests in 50-cmds suite to check colon character is correctly escaped in modshare variable. * modulecmd.tcl: Introduce charEscaped proc to escape char passed as arg Replace multiEscaped, doubleQuoteEscaped and singleQuoteEscaped procs by a single procedure that can escape any set of characters passed as argument. 2017-01-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/modulefile.pod: doc: adapt descrition of 'x-resource' * doc/source/modulefile.pod: doc: adapt calls used by 'system' and 'uname' * doc/source/modulefile.pod: doc: adapt list of mode returned by 'module-info mode' * doc/source/module.pod: doc: add refresh alias on reload sub-command 2017-01-05 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.pod: doc: case when MODULERCFILE points to a directory * doc/source/module.pod, doc/source/modulefile.pod: doc: add --default and --latest avail switches * doc/source/module.pod: doc: add --help, --version and --debug switches * doc/source/module.pod: doc: switch command accepts only one argument * doc/source/module.pod: doc: reference newly supported shells (fish, tcl, lisp) * init/python.in: init: fix TCLSH typo in python script 2016-12-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/source/module.pod, doc/source/modulefile.pod: doc: improve docs readability Adopt and apply writing conventions found especially in man-manpages(7) to improve documents readability: * always refer to 'modulefile' or 'modulefiles' with I<> pod code * refer to other manpages with B<> pod code * refer to filename or pathname with F<> pod code * refer to environment variable with B<> pod code * no '$' before environment variable except if its value is referred * no escaping '{}' of environment variable * use item list to describe ordered list * use item list to describe all command-line switches, all module sub-commands and all modules-specific Tcl commands * refer to command-line switches, module sub-commands, modules-specific Tcl commands, Modules variables and Modules subroutines with B<> pod code * use normal font for arguments on item list * refer to arguments of current command-line switch, module sub-command or modules-specific Tcl command with I<> pod code * express 1+ arguments with a 'arg...' syntax * format pod source with 'fmt' to set maximum line witdh to 78 chars * fix double spaces ' ' or end of line extra space found in paragraphs * doc/source/module.pod, doc/source/modulefile.pod: doc: remove stuff specific to C-version Changes made on module.pl: * remove text related to the 'modulesbeginenv' feature * remove 'clear' sub-command * change 'update' sub-command into 'reload and adapt description Changes made on modulefile.pl: * remove 'module-info flags' modules-specific Tcl command * remove 'module-trace' modules-specific Tcl command * remove 'module-user' modules-specific Tcl command * remove 'module-log' modules-specific Tcl command * remove 'module-verbosity' modules-specific Tcl command * doc/source/module.pod, doc/source/modulefile.pod: doc: syntax fixes and import recent changes on C doc 2017-01-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * doc/Makefile, doc/source/{module.pl => module.pod}, doc/source/{modulefile.pl => modulefile.pod}: doc: use .pod extension for POD documents This way these files are automatically recognized as POD files and the appropriate syntax highlight mode is automatically set. 2017-01-02 Xavier Delaruelle <xavier.delaruelle@cea.fr> * Makefile, doc/Makefile: Create a doc-specific Makefile Separate documentation generation in a dedicated Makefile put in the doc directory. Generate documentation in a more 'Makefile' fashion, with a target per document file. 2017-01-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .gitignore, doc/html/module.html, doc/html/modulefile.html, doc/man/man1/module.1, doc/man/man4/modulefile.4: Remove generated documents from git repository Clear HTML and MAN pages from the repository as they are generated content from POD files. This way git commits on documentation are clearer as they only contain changes on POD files. Add rules to .gitignore to stop tracking generated HTML and MAN documents in repository. 2016-12-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, notdone/modules.50-cmds/170-swap.exp, notdone/modules.50-cmds/175-swap2.exp, testsuite/modulefiles/append/1.1, testsuite/modulefiles/prepend/1.1, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/172-swap-app-delim.exp, testsuite/modules.50-cmds/173-swap-app-delim.exp, testsuite/modules.50-cmds/175-swap2.exp, testsuite/modules.50-cmds/177-swap-prep-delim.exp, testsuite/modules.50-cmds/178-swap-prep-delim.exp: Make 'switch' command handle a single argument On a 'module switch [mod1] mod2', If 'mod1' is not specified, then it is assumed to be the currently loaded module with the same root name as 'mod2'. Introduce a 'getLoadedWithClosestName' procedure to look at currently loaded modules and return the one with the closest name to the name passed as argument. Import and adapt 170-swap, 172-swap-app-delim, 173-swap-app-delim, 175-swap2, 177-swap-prep-delim and 178-swap-prep-delim tests to the 50-cmds suite. 2016-12-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Make 'switch' command consistent Switch command were previsouly setting 'new' as 'old' and 'old' as 'new' when 'new' is detected loaded. This behavior led to inconsistency especially when the same 'module switch old new' command is called twice. First time 'old' is loaded and 'new' is unloaded. Then for the second call 'old' is unloaded and 'new' is loaded, and so on. In this case, the result of the switch command depends on the current situation which confuses most persons using it. This commit makes the switch command idempotent by always ending up with 'old' unloaded and 'new' loaded, whatever the starting situation is. 2016-12-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, notdone/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/210-exit.exp: Add support for 'exit' command in modulefile Add support for use of 'exit' command within modulefile as described in modulefile(4) man page. This command will cause the immediate cessation of this module and any additional ones on the command line. This module and the subsequent modules will not be listed as loaded. No environment commands will be performed in the current module. To achieve that a 'exitModfileCmd' procedure is added to superseed the 'exit' command during modulefile interpretation. When called this procedure sets a flag that inhibit further modulefile interpretation. Import and adapt 210-exit tests in 50-cmds suite. * init/bash_completion, init/tcsh_completion, modulecmd.tcl, notdone/modules.50-cmds/078-refresh.exp, testsuite/modules.50-cmds/078-refresh.exp: Add 'refresh' command as alias on 'reload' command Add a 'refresh' command as available on C-version but instead of reloading the volatile components (ie. shell aliases) only, here we unload then reload all the currently loaded modules. This behavior is different than on C-version but it ends with same results : shell aliases are refreshed in sub-shells. Import and adapt 07-refresh tests in 50-cmds suite. 2016-12-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, .../modules.50-cmds/100-loglevel.exp, .../modules.50-cmds/101-badfac.exp, .../modules.50-cmds/110-verbose.exp, .../modules.50-cmds/115-verbose-msg.exp: Add dummy module-{log,trace,user,verbosity} procs Add dummy procedures for the module-log, module-trace, module-user and module-verbosity commands available on C-version. These commands do not seem relevant to be implemented on Tcl-version of module, but having dummy procedure for them enable support for modulefiles using these commands. Without dummy procedures these modulefiles raise error as the commands are not known. The 4 dummy procedures report a warning message to let the user know that even if the modulefile has been loaded/unloaded/etc, the module-log, module-trace, module-user or module-verbosity calls were not interpreted. Import and adapt 100-loglevel, 101-badfac, 110-verbose and 115-verbose-msg tests in 50-cmds suite. 2016-12-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.50-cmds/140-system.exp: Adapt 'system' to behave like described on manpage Previously the 'system' modulefile command was adding the specified string to the list of things to interpret on stdout. This commit aligns the behavior of the 'system' command on the one implemented on Modules C-version which is documented on modulefile(4) man page. Now 'system' passes string to the 'exec' Tcl procedure with stdout redirected to stderr since stdout would be parsed by the evaluating shell. The exit status of the executed command is returned. Adapt '140-system' test in 50-cmds suite accordingly. 2016-12-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * notdone/modules.50-cmds/120-prereq-full.exp, notdone/modules.50-cmds/130-conflict-full.exp, notdone/modules.50-cmds/131-conflict-module.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp: testsuite: import 'conflict' and 'prereq' tests in 50-cmds suite * modulecmd.tcl, notdone/modules.50-cmds/190-load.exp, .../modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/190-load.exp: Fix 'module list' when module loaded with full path On Tcl-version, modulefile loaded by giving its full path has its name equal to its full path since module name and version cannot be distinguished from the path. On C-version, module name equals to the tail of the full path. Also import and adapt 'module' and 'load' tests in 50-cmds suite. 2016-12-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Disable g_force to avoid loading already loaded mod In order to get closer to C-version, disable g_force by default to avoid loading a modulefile already loaded. This behavior also avoid path element reference counting to get increased when the same module is asked twice for load. Thus with cleaner path element reference count, automatic modulefile dependency management is made possible. 2016-12-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * notdone/modules.50-cmds/080-info-name.exp, notdone/modules.50-cmds/088-info-isloaded.exp, testsuite/modules.50-cmds/080-info-name.exp, testsuite/modules.50-cmds/088-info-isloaded.exp: testsuite: import module-info name/isloaded in 50-cmds suite * modulecmd.tcl, testsuite/modulefiles/info/mode1, testsuite/modulefiles/info/mode3, .../modules.50-cmds/083-info-mode.exp, .../modules.50-cmds/084-info-mode-exp.exp: Clarify module-info 'mode' option Fix mode setup during a 'help' command and import info-mode relative tests in 50-cmds suite. module-info non-regression tests have been adapted to match behavior of Tcl-version: * during a 'help' command, stdout output of ModulesHelp procedure is not redirected to stderr as done on C-version * on an 'unload' command, module-info mode is equal to 'unload' and not 'remove' * on a 'switch' command, module-info mode is equal to 'unload' then 'load' and not 'switch1', 'switch2' and 'switch3' * on a 'switch' command, module-info mode never equals to 'switch' 2016-12-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modulefiles/info/mode5, .../modules.50-cmds/081-info-user.exp, .../modules.50-cmds/082-info-user-exp.exp, .../modules.50-cmds/085-info-flags.exp: Clarify module-info 'flags' and 'user' options 'flags' and 'user' are C-version specific options and they are not relevant for Tcl-version. So they are present on Tcl-version to avoid breaking modulefile using them but always return false or an empty string to reflect the fact that these options are unmanaged here. Import and adapt info-user and info-flags non-regression tests in 50-cmds suite. 2016-12-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, notdone/modules.50-cmds/042-append-delim.exp, notdone/modules.50-cmds/045-append-undo.exp, notdone/modules.50-cmds/047-app-del-undo.exp, notdone/modules.50-cmds/050-prepend.exp, notdone/modules.50-cmds/052-prepend-delim.exp, notdone/modules.50-cmds/055-prepend-undo.exp, notdone/modules.50-cmds/057-pre-del-undo.exp, notdone/modules.50-cmds/060-remove.exp, notdone/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/065-remove-undo.exp: Handle empty or separator path on add-path/unload-path Improve add-path and unload-path to handle empty path {}, that can be added or removed from a path list like on C-version. Also if provided path is equal to the separator string, like ":", an error is raised as this kind of path cannot be handled in path list variables. This behavior here is different than on C-version where path equals to ":" can be added or removed to path list variables. Import or adapt add-path and unload-path relative tests (04*-append, 05*-prepend and 06*-remove) in 50-cmds suite. 2016-12-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, notdone/modules.50-cmds/025-setenv-undo.exp, notdone/modules.50-cmds/035-unsetenv-undo.exp, notdone/modules.50-cmds/036-unsetenv-x.exp, testsuite/modules.50-cmds/025-setenv-undo.exp, testsuite/modules.50-cmds/035-unsetenv-undo.exp, testsuite/modules.50-cmds/036-unsetenv-x.exp: Improve unsetenv for unload and display modes On unload mode, delete environment variable targeted by an unsetenv directive if no value has been provided along. On display mode, print environment variable value if any has been passed to unsetenv directive. Import 025-setenv-undo, 035-unsetenv-undo and 036-unsetenv-x tests in 50-cmds suite. 2016-12-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/040-load.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/020-setenv.exp, testsuite/modules.50-cmds/022-setenv-eschars.exp, testsuite/modules.50-cmds/030-unsetenv.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/076-alias-sub.exp, testsuite/modules.50-cmds/086-info-shells.exp, testsuite/modules.50-cmds/089-info-type.exp, testsuite/modules.50-cmds/195-load-recurs.exp, testsuite/modules.50-cmds/197-load-lots.exp, testsuite/modules.50-cmds/200-break.exp, testsuite/modules.50-cmds/220-continue.exp, testsuite/modules.50-cmds/230-loop.exp, testsuite/modules.50-cmds/240-chdir.exp, testsuite/modules.50-cmds/250-x-resource.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.91-sort/040-load.exp, testsuite/modules.95-version/020-load.exp, testsuite/modules.95-version/020-unload.exp, testsuite/modules.95-version/022-load2.exp, testsuite/modules.95-version/022-unload2.exp, testsuite/modules.95-version/040-xgetenv.exp: Enclose tcl variable set within double quotes When modules is used within Tcl code, value to set to a variable were previously "double quote escaped" but not enclosed by double quotes at set time. By enclosing values with double quotes, complex values can be managed like for instance those including whitespaces. Fix all Tcl-relative non-regression tests in testsuite. * modulecmd.tcl, notdone/modules.50-cmds/022-setenv-eschars.exp, testsuite/modules.50-cmds/022-setenv-eschars.exp: Fix perl quoting style for variable set Import 'setenv-eschars' test in 50-cmds suite and by the way fix quoting style for perl when setting variable. Single quotes are used to set variable, so single quotes should be escaped rather than double quote. 2016-12-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, notdone/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/017-use-undo.exp: Call unuse instead of use on module unload When modulefiles define 'module use' calls, 'module unuse' is called when current mode is 'unload'. No change made to 'module unuse' calls, 'module unuse' is also called when mode is 'unload' (same behavior as 'module unload'). On 'display' mode, 'module use' and 'module unuse' calls are now reported (displayed). Import 'use-undo' tests in 50-cmds suite. * notdone/modules.50-cmds/070-alias-proc.exp, notdone/modules.50-cmds/075-alias.exp, notdone/modules.50-cmds/076-alias-sub.exp, notdone/modules.50-cmds/077-alias-undo.exp, notdone/modules.50-cmds/140-system.exp, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/076-alias-sub.exp, testsuite/modules.50-cmds/077-alias-undo.exp: testsuite: import 'alias' tests in 50-cmds suite 2016-12-04 Xavier Delaruelle <xavier.delaruelle@cea.fr> * notdone/modules.50-cmds/090-uname-proc.exp, testsuite/modules.50-cmds/090-uname-proc.exp, .../modules.50-cmds/095-uname.exp, .../modules.50-cmds/099-uname-cleanup.exp: testsuite: import 'uname' tests in 50-cmds suite 2016-11-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, notdone/modules.50-cmds/220-continue.exp, notdone/modules.50-cmds/230-loop.exp, testsuite/modules.50-cmds/220-continue.exp, testsuite/modules.50-cmds/230-loop.exp: Fix use of 'continue' command in modulefile This commit also add continue-specific non-regression tests in modules.50-cmds suite. * modulecmd.tcl, notdone/modules.50-cmds/240-chdir.exp, testsuite/modules.50-cmds/240-chdir.exp: Add support for 'chdir' command in modulefile This commit also add chdir-specific non-regression tests in modules.50-cmds suite. * modulecmd.tcl, notdone/modules.50-cmds/200-break.exp, testsuite/modules.50-cmds/200-break.exp: Fix use of 'break' command in modulefile This commit also add break-specific non-regression tests in modules.50-cmds suite. 2016-11-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modulefiles/averssort/.modulerc, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/050-long.exp, testsuite/modules.90-avail/060-empty.exp, testsuite/modules.91-sort/010-init_ts.exp, testsuite/modules.91-sort/020-avail.exp, testsuite/modules.91-sort/030-whatis.exp, testsuite/modules.91-sort/999-cleanup.exp: testsuite: improve 90-avail and 91-sort for alias/version Add tests to 90-avail and 91-sort suites to check correct display of aliases and versions on module avail command. 2016-11-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: No display of modulepath header if no module found in it On module avail, search and aliases commands the header for modulepath where no module has been found (because there is no module, alias or version in them or nothing matches current search expression) is not displayed anymore. 2016-10-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Remove call to cmdModuleAliases when asked for avail Module aliases are now displayed along regular modulefiles when cmdModuleAvail is processed. Thus call to cmdModuleAliases is now useless when avail action is asked. 2016-10-26 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Display aliases set in global/user modulerc on avail Fill a g_rcAlias array with all aliases defined from the global or user modulerc. Then adapt listModules procedure to be able to display only the aliases defined from the global or user modulerc (no directory lookup) when search argument is set to "rc_alias_only". cmdModuleAvail now starts by displaying aliases set in the global or user-specific modulerc in a dedicated "global/user modulerc" list. By doing so all aliases defined are now displayed on module avail output (even those defined in the global or user modulerc). 2016-10-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.90-avail/050-long.exp: Include aliases as part of listModules results Adapt listModules procedure to include to the results returned all the module aliases defined through the analyzed directory. By doing so a module avail or search commands automatically return all the aliases defined in addition to regular modulefiles to get a complete view of what is available. In module-alias procedure the full path name of the file that declared an alias is registered in a g_sourceAlias array. In listModules this array is looked at to distinguish the aliases coming from the currently analyzed directory. Aliases are displayed from the module path where they are defined. A "@" symbol is appended to the alias name, in the same way module-version are displayed, in order to be able to distinguish an alias from a regular modulefile. "@" has been retained as symbol to qualify module aliases as this symbol is used by "ls" command to qualify symbolic links. When --long display format is asked, the target of the alias is printed after the alias name. No last modification time is displayed as it has no meaning for a module alias. 2016-10-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Fix default module test based on '(default)' tag As default tag may not be the only one tag applying to a module (other versions may also be part of the tag list), default version tests, that were only comparing the '(default)' string, have been adapted to correctly handle cases where multiple tags apply to a default module. On resolveModuleVersionOrAlias procedure, test on '(default)' string has simply been removed since name passed to the procedure does not contain anymore tags in any situation. On getSimplifiedLoadedModuleList procedure, call to listModules procedure has been revised to only ask for default versions, this way there is no need to test a '(default)' string since all results returned are default versions. 2016-10-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.90-avail/050-long.exp: Handle show_modtimes directly in listModules Adapt cmdModuleAvail and listModules procedures to handle show_modtimes treatment directly within listModules rather than in cmdModuleAvail. This way there is no need to loop over listModules results and call getPathToModule on each of them. File location is already known by listModules, so file modification time query is easy to make there. As a consequence avail long output is directly managed by listModules. This output structure has been improved to let more space to display module tag list. Moreover when terse mode is used, tag list is no more separated by a space from module name (same behavior as C-version). Align list and savelist long output the improved output structure applied to avail long output. 2016-10-12 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Make listModules show_flags even when filter set Previous listModules code was not complying with the show_flags directives when a filter were set like "onlydefaults" or "onlylastest". This commit improves this by centralizing the code handling the show_flags directives. 2016-10-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Merge listModules proc flag_default_* args Simplify management of flag_default_dir and flag_default_mf arguments of listModules procedure by merging both args in a show_flags argument and set local value for reporting flags of directories or modulefiles based on the value of this show_flags argument and global variables flag_default_dir and flag_default_mf. * modulecmd.tcl: Remove listModules proc full_path argument Simplify listModules procedure by removing the full_path argument that was in all cases disabled. 2016-10-08 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Render error on display/help command Add error rendering directive when calling display or help commands as they can hit a magic cookie or a not found errors when processing name passed as argument. 2016-09-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Fix module-info symbols resolution Return all symbols defined by calling the getVersAliasList procedure. This procedure has been enhanced to first attempt an alias resolution on the name passed to it. Then each time a version or a default is found a recursive call is made on this new name to get all versions or default linked to the initial name. getVersAliasList has also been enhanced to pass and get a list of already resolved symbols for the current resolution in order to detect infinite resolution loop. Results returned by getVersAliasList are now sorted using the dictionnary-style sort as already performed by listModules. All these improvements made to the getVersAliasList will benefit to the listModules procedure so "avail" command will return more accurate versions and default information. 2016-09-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Improve .modulerc/.version handling in getPathToModule Adapt getPathToModule to parse .modulerc file at each level of the specified module in order to be able to resolve any alias that may be defined within the module directories. Means if module name "mod/sub1/sub2" is passed to getPathToModule, the procedure will parse any .modulerc file in "mod", "mod/sub1" and "mod/sub1/sub2" directories (if these dirs exist) then it will attempt to resolve module name with aliases and version found. To behave like Modules-C, if both a .modulerc and a .version file exist for the module name passed to getPathToModule, .modulerc is parsed then .version. In this situation a default value set from .version will win over a default value set in .modulerc. Same kind of change has been applied to the listModules procedure. A new argument named "search" has been added to the listModules procedure to be able when called by getPathToModule with a "no_depth" value to only get the content of a directory and not its sub elements as sub-directory resolution, .modulerc and .version are handled within getPathToModule. 2016-09-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Fix module-info version resolution Call for resolveModuleVersionOrAlias procedure to deeply resolve name provided by recursively looking at alias or version structures. Also improve module-version procedure to raise a warning message in case of duplicate version symbol is found. 2016-09-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Fix module-info alias resolution Call for resolveModuleVersionOrAlias procedure to deeply resolve name provided by recursively looking at alias structures. Improvement is made here to the resolveModuleVersionOrAlias procedure in order to be able to only look for alias (and not alias and version) when attempting resolution. A g_aliasHash array is introduced here to be able to reversely look at alias definition as Modules-C does. module-alias procedure has been adapted to fill this new structure and resolveModuleVersionOrAlias makes use of it if alias is searched and not found in g_moduleAlias array. 2016-09-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Register alias and version by the short module name Store aliases and versions by the short module name rather than full module path to get closer to the Modules-C behavior on alias and version management. As a consequence an alias defined in a module path can apply to a module stored in another module path. But this behavior is required to make alias defined in global modulerc functional. A getModuleNameVersion procedure is introduced to determine with a name provided as argument the corresponding module name, version and name/version. Module name is guessed from current module name when shorthand version notation is used. Both name and version are guessed from current module if name provided is empty. 2016-09-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Improve resolveModuleVersionOrAlias proc to detect loop Adapt resolveModuleVersionOrAlias procedure to resolve only one name at a time and pass a list of already resolved symbols for the current resolution in order to detect infinite resolution loop. When infinite resolution loop is detected error message is raised and returned value is set to "*undef*" to behave like Modules C-version. 2016-09-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Remove useless alias/version resolution in module proc Aliases and versions are solved when getPathToModule proc is called and getPathToModule is called by all command proc that need to resolve an alias or a version. So alias and version resolution is not required at the beginning of the module procedure. Resolving any argument to the module procedure as alias or version was also potentially erroneous. 2016-09-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Source $MODULERCFILE/modulerc when $MODULERCFILE is dir In order to behave like C-version, if the $MODULERCFILE variable is set and points to a directory, source the "modulerc" file in it instead of trying to source the directory (which led to error). 2016-09-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * .../modules.20-locate/010-init_ts.exp, .../modules.20-locate/020-fqual.exp, .../modules.20-locate/030-defvers.exp, .../modules.20-locate/040-alias.exp, .../modules.20-locate/045-symvers.exp, .../modules.20-locate/046-getsym.exp, .../modules.20-locate/047-symerrs.exp, .../modules.20-locate/048-symexec.exp, .../modules.20-locate/050-locrc.exp, .../modules.20-locate/055-locrcerrs.exp, .../modules.20-locate/060-rc.exp, .../modules.20-locate/065-rcerrs.exp, .../modules.20-locate/070-homerc.exp, .../modules.20-locate/095-cleanup.exp: testsuite: import and adapt 20-locate tests Import the 20-locate test directory in use in Modules-C testsuite, that was previously put aside for Modules-TCL. Adapt syntax of tests and results to fit the output of Modules-TCL which sometimes slightly differ from the C version. At this stage, most of the tests from this 20-locate directory are failling as aliases and versions support in Modules-TCL is not as complete as it is in C version. Next commits will close the gap between the two Modules flavors. 2016-09-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.80-deep/020-load.exp, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/040-wild.exp: testsuite: fixing deep/020, avail/030 and avail/040 * Fix typo error on 80-deep/020-load test (incorrect result were expected) * Adapt 90-avail/030-multiple result syntax not to conflict with regular expression special character like '(' * Adapt 90-avail/040-wild to use terse mode to not be dependent of local terminal size 2016-11-11 Kent Mein <mein@cs.umn.edu> * modulecmd.tcl, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/040-wild.exp: Make it so you can do module avail un Also fixed a couple of test cases. 2016-11-03 Kent Mein <mein@cs.umn.edu> * init/.gitignore, init/Makefile, modulecmd.tcl, testsuite/not_installed: Added missing fish shell to init Makefile In the process saw a typo in not_installed fixed that as well. Also updated the .gitignore file. This bug was found by Michael Gooch. 2016-08-27 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Compare strings with 'eq' instead of '==' in execute-modulefile '==' operator is meant for numerical comparison so it is more correct and faster to use 'eq' operator when comparing strings. * modulecmd.tcl, testsuite/modules.00-init/071-args.exp: Check each command receives the correct number of arg Improve module procedure to check for each module command that the correct number of argument are provided. If an unexpected number of argument is provided an error is raised as when an invalid command name is specified. This way module exit with an error code and an error is rendered in order to be checked from the shell. 2016-08-21 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.90-avail/020-single.exp: Improve column-mode in displayElementList Change way to compute rows*cols display grid in order to maximize the number of column to display per line. To do so a width is computed for each column instead of having each column width based on the largest one. The new code takes a bit more time to proceed (as there is more stuff to compute) but the additionnal time taken is not really discernable from the user perspective: on a 'module avail' containing ~10 paths and ~400 modulefiles, there is less than 0.1 second extra time. As display is now denser, two spaces are now used instead of one to separate elements. Thanks to Aurelien Degremont for crafting the right algorithm for this. * modulecmd.tcl, testsuite/modules.91-sort/030-whatis.exp: Merge list printing codes under displayElementList Set a common procedure to manage the display of list of elements: displayElementList. Lists can be displayed in a column fashion or with only one element per line. Elements displayed may be prefixed by their number. Also a header can be printed on top of the list. Adapt cmdModuleList, cmdModuleSavelist, cmdModuleSearch, cmdModuleAvail and cmdModuleAliases to use this new procedure. With a single set of code to manage this aspect it will be easier to improve it and all commands calling it will automatically benefit from these improvements. 2016-08-20 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.00-init/015-version.exp, testsuite/modules.00-init/090-switches.exp: Put all command-line parsing under catch protection Make command-line option parsing benefit from the catch (+reportError +exit 1) applied to command parsing and running. This way it produces same kind of error behavior when an invalid option is typed as when an invalid command is typed. Also put shell name parsing first in order to be able to renderError appropriately when an invalid option is typed. Elsewhere the puts of /bin/false on stdout was not made as no shell were set. An invalid option containing only one '-' as first character will now also produces an error. Before that only invalid options starting with '--' were treated as error. Improve testsuite on option treatment. Test long and short versions of these options and test the returned output. 2016-08-19 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.00-init/070-command.exp, testsuite/modules.00-init/090-switches.exp: Merge main command handling in module proc Make module command handling appear in a single location, the module procedure, rather than having a duplication of code in the main section. This modification simplifies the addition of new commands or the adaptation of existing commands as everything has to be done only once. Now calling module from a modulefile or a modulerc benefits from the same command shortcuts than when it is called from the command line. Moreover do not print anymore the module usage message when an invalid command is typed, as this large message often hide the error printed on the first line. An advice to type "module --help" is printed instead. * modulecmd.tcl: Simplify parsing of command switch arguments * modulecmd.tcl: Harmonize usage of exit when error occurs When error occurs and exit is called, always quit with the same error code: 1. Add a call to "exit 1" when error is caught in main section when processing module command. Remove use of exit in cmdModuleInit procedure, replaced by call to reportErrorAndExit, which will be caught at top level and go through the "exit 1" added above. End main section with an "exit 0" to explicit everything went well. * modulecmd.tcl: Harmonize reportErrorAndExit messages As done for the other report* procedures, here we harmonize some reportErrorAndExit messages to something simpler and clearer. There is no need to make reportErrorAndExit call to reportError instead of using "error" build-in proc since error proc raise a message which is caught and output by reportError in the end. 2016-08-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Standardize reportInternalBug procedure Adapt reportInternalBug procedure to make it call "report" rather than re-implementing a "puts stderr" procedure. This way all messages printed to stderr pass through the "report" procedure. Take also this opportunity to standardize some messages to something simpler and clearer. * modulecmd.tcl, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp: Standardize reportError procedure Add an "ERROR: " prefix to all messages put through reportError to make these error messages look similar. Take also this opportunity to standardize all error messages to this new single prefix, moving away from the inherited "+(0):ERROR:0: " prefix to something simpler and clearer. * modulecmd.tcl: Standardize reportWarning procedure Adapt reportWarning procedure to make it call "report" rather than re-implementing a "puts stderr" procedure. Also add a "WARNING: " prefix to all messages put through reportWarning to make this procedure different from the report procedure. Take also this opportunity to standardize some warning messages and to change some 'reportError "WARNING' calls into reportWarning calls where it was not necessary to raise the error counter (as it is warnings not errors). * modulecmd.tcl: Remove setup of global variables not accessed in procs * modulecmd.tcl: Add short option -d for --delim on prepend-path 2016-08-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.00-init/030-shells.exp: Introduce getModulePathList proc Defines a getModulePathList procedure that returns a list of the module paths by parsing the MODULEPATH environment variable. This new procedure enables to gather in a single location the code to parse MODULEPATH, thus it removes the need for many procedures to know about "env" and "g_def_separator" global variables. getModulePathList procedure also enables with its "behavior" parameter to directly exit on error when MODULEPATH is not set. By default, it returns an empty list. The "exiterronundef" behavior allows to closely match previous behavior, when $env(MODULEPATH) were accessed without being defined. * modulecmd.tcl: Introduce getLoadedModuleList proc Defines a getLoadedModuleList procedure that returns a list of the loaded modules by parsing the LOADEDMODULES environment variable. This new procedure enables to gather in a single location the code to parse LOADEDMODULES, thus it removes the need for many procedures to know about "env" and "g_def_separator" global variables. * modulecmd.tcl: Remove separator optional parameter where useless An optional parameter named "separator" was specified on many procedures but calls to these procedures never set this parameter. This commit removes these unused "separator" parameters to improve code clarity and it will help to provide in further commits generic procedures to access environment state. 2016-08-16 Romain Fihue <romain.fihue@cea.fr> * modulecmd.tcl, testsuite/home/.module/{coll4 => coll4.target}, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/020-savelist.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/050-saverm.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.61-coll/999-cleanup.exp: Introduce collection target concept Collection directory may sometimes be shared on multiple machines which may use different modules setup. For instance modules users may access with the same HOME directory multiple systems using different OS versions. When it happens a collection made on machine 1 may be erroneous on machine 2. To handle this use case, we introduce here the concept of target for module collections. By setting the MODULES_COLLECTION_TARGET environment variable to something that can make a distinction between machines that are incompatible with each other, only collections matching this target will be valid on it. When a target is set, only the collections made for that target will be available to restore, list, show, rm, and saving will register the target footprint (collection filename will be suffixed with ".$env(MODULES_COLLECTION_TARGET)". Collection target is not involved when collection is specified as file path on show, restore and save commands. For example, the MODULES_COLLECTION_TARGET variable may be set with results from commands like lsb_release, hostname, dnsdomainname, etc. 2016-08-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash_completion, init/tcsh_completion, modulecmd.tcl, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/060-saveshow.exp, testsuite/modules.61-coll/999-cleanup.exp: Introduce saveshow command Gives the ability to display the content of a given collection. 61-coll testsuite is adapted to test this new command. 2016-08-10 Romain Fihue <romain.fihue@cea.fr> * modulecmd.tcl, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/050-saverm.exp, testsuite/modules.61-coll/999-cleanup.exp: Save and restore collection specified as file path Until now, it was only possible to save and restore a collection located in default collection directory (under $HOME/.module). With this commit, a file path can be specified to the save and restore commands. On the contrary, saverm command has been enforced to use a name to target the collection to remove in order to avoid this command to be able to delete any file. 61-coll testsuite is adapted to test this new use case. 2016-08-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash_completion, init/tcsh_completion, modulecmd.tcl, testsuite/modules.61-coll/050-saverm.exp: Introduce saverm command Gives the ability to remove a given collection (it deletes corresponding file) 61-coll testsuite is adapted to test this new command. 2016-08-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Refactor collection code a little bit Introduce a getCollectionFilename procedure to query collection filename and simplify error management code in cmdModuleSave and cmdModuleRestore to improve code readability. Also set separate procedures to generate the content of a collection (formatCollectionContent procedure) and to read a collection file (readCollectionContent procedure) in order to prepare further enhancements on module collections. 2016-08-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Make use of lassign build-in proc lassign build-in procedure has been introduced in Tcl8.5 and provides an easier way to manage list results like those returned by getPathToModule and getMovementBetweenList. For compatibility with Tcl8.4 and earlier, a lassign procedure is provided here (set if not defined). See [1] for an overview of lassign implementations and performances. [1] http://wiki.tcl.tk/1530 2016-08-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/home/.module/coll2: Restore collection with multiple mods specified on single line Sometimes people manually edit their collection and may be tempted to specify multiple modules to load or multiple paths to use on a single line, for instance: module use --append path1 path2 module load mod1 mod2 mod3 This commit makes this use case possible by splitting content read from collection file. 61-coll testsuite has been adapted to test this use case (collection "coll2" has been changed to use this kind of syntax). 2016-08-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/home/.module/coll4, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/020-savelist.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/999-cleanup.exp: Fix restore when there is no module to load in collection Some uninitialized variable was causing issue when trying to restore a collection not defining any module to load. modules.61-coll testsuite has been adapted accordingly by introducing a "coll4" collection that only set paths to use, no module to load. Thanks to Nicolas Wiart for pointing this out. 2016-08-07 Aurelien Cedeyn <aurelien.cedeyn@cea.fr> * modulecmd.tcl, testsuite/home/.module/coll3, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/020-savelist.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/999-cleanup.exp: Fix restore when collection fully rewind module paths When restoring a collection which requires to unuse all currently set module paths before adding new ones, it previously raised error trying to access the empty env(MODULEPATH) variable. Fix that and work-around getSimplifiedLoadedModuleList procedure with helper list provided as argument to be able to compute simplified version of loaded modules even if there is no MODULEPATH set to look at all existing versions for a module. modules.61-coll testsuite has been adapted accordingly by introducing a "coll3" collection that requires to unuse all previously loaded paths when restoring. 2016-08-07 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/home/.module/coll1, testsuite/home/.module/coll2, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/999-cleanup.exp: Correctly restore multiple paths with order preservation cmdModuleUse prepends paths by default so cmdModuleRestore command was previously prepending new paths instead of appending them. To guaranty path order cmdModuleRestore now calls cmdModuleUse with --append flag by default. To keep the ability to directly source a collection file from a shell, now cmdModuleSave adds --append flag to the 'module use' lines it records. cmdModuleRestore treats this flag if present, but adds --append if no flag found to keep compatibility with previously generated collections. modules.61-coll testsuite is adapted accordingly to test collections containing more than one module path and to test previous and new style of 'module use' recorded lines. 2016-08-06 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modules.61-coll/030-save.exp: Raise error if try to save an empty environment * testsuite/home/.module/coll1, testsuite/home/.module/coll2, testsuite/home/.module/default, testsuite/modulefiles/coll/a, testsuite/modulefiles/coll/b, testsuite/modulefiles/coll/c, testsuite/modulefiles/coll/d, testsuite/modules.00-init/006-procs.exp, testsuite/modules.61-coll/010-init_ts.exp, testsuite/modules.61-coll/020-savelist.exp, testsuite/modules.61-coll/030-save.exp, testsuite/modules.61-coll/040-restore.exp, testsuite/modules.61-coll/999-cleanup.exp: testsuite: add tests for collection management Introduce modules.61-coll testsuite to guaranty that savelist, save and restore commands behave appropriately. Add testoutfile_cmd procedure to 00-init/006-procs to get the ability to check module command output and specified file content. This new procedure enables to check content of collection generated by a 'save' command. 2016-07-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modulefiles/info/shellsexp, testsuite/modules.00-init/030-shells.exp, testsuite/modules.00-init/080-begenv.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/040-load.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/020-setenv.exp, testsuite/modules.50-cmds/030-unsetenv.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/086-info-shells.exp, testsuite/modules.50-cmds/087-info-shells-exp.exp, testsuite/modules.50-cmds/089-info-type.exp, testsuite/modules.50-cmds/195-load-recurs.exp, testsuite/modules.50-cmds/197-load-lots.exp, testsuite/modules.50-cmds/250-x-resource.exp, testsuite/modules.91-sort/040-load.exp, testsuite/modules.95-version/020-load.exp, testsuite/modules.95-version/020-unload.exp, testsuite/modules.95-version/022-load2.exp, testsuite/modules.95-version/022-unload2.exp, testsuite/modules.95-version/040-xgetenv.exp: testsuite: add tests for fish shell * init/fish.in, modulecmd.tcl: Support for fish shell 2016-07-28 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/030-shells.exp, testsuite/modules.00-init/080-begenv.exp, testsuite/modules.10-use/040-load.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/020-setenv.exp, testsuite/modules.50-cmds/030-unsetenv.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.91-sort/040-load.exp, testsuite/modules.95-version/020-load.exp, testsuite/modules.95-version/020-unload.exp, testsuite/modules.95-version/022-load2.exp, testsuite/modules.95-version/022-unload2.exp, testsuite/modules.95-version/040-xgetenv.exp: testsuite: add tests for tcl/python/lisp where perl is tested 2016-07-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * notdone/modules.50-cmds/086-info-shells.exp, notdone/modules.50-cmds/087-info-shells-exp.exp, testsuite/modulefiles/info/shellsexp, testsuite/modules.50-cmds/086-info-shells.exp, testsuite/modules.50-cmds/087-info-shells-exp.exp, .../modules.50-cmds/121-prereq-module.exp: testsuite: adapt 50-cmds/info-shells and 50-cmds/121-prereq tests * testsuite/modulefiles/info/type, testsuite/modulefiles/load/.version, testsuite/modulefiles/load/00, testsuite/modulefiles/load/10, testsuite/modulefiles/load/11, testsuite/modulefiles/load/12, testsuite/modulefiles/load/13, testsuite/modulefiles/load/14, testsuite/modulefiles/load/15, testsuite/modulefiles/load/16, testsuite/modulefiles/load/17, testsuite/modulefiles/load/18, testsuite/modulefiles/load/19, testsuite/modulefiles/load/20, testsuite/modulefiles/load/21, testsuite/modulefiles/load/22, testsuite/modulefiles/load/23, testsuite/modulefiles/load/24, testsuite/modulefiles/load/25, testsuite/modulefiles/load/26, testsuite/modulefiles/load/27, testsuite/modulefiles/load/28, testsuite/modulefiles/load/29, testsuite/modulefiles/load/30, testsuite/modulefiles/load/all, testsuite/modulefiles/recurs/modA, testsuite/modulefiles/recurs/modB, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.50-cmds/089-info-type.exp, testsuite/modules.50-cmds/195-load-recurs.exp, testsuite/modules.50-cmds/197-load-lots.exp: testsuite: import tests recently added to C-version * modulecmd.tcl: Add short option -d for --delim on append-path/remove-path 2016-07-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/home/.Xresources, testsuite/modulefiles/x-resource/1, testsuite/modules.50-cmds/250-x-resource.exp: testsuite: add tests and relative configs for x-resource Add 250-x-resource tests in 50-cmds serie to check x-resource commands in modulefile are correctly interpreted at load and unload times for the various shells. A x-resource/1 modulefile and a .Xresources config files are added to test various setting conditions (single resource string, complex string content, resource file to load). * modulecmd.tcl: Implement unload of x-resources and fix load Implement unload action of x-resources defined for all shells. Unload of x-resources is done by clearing string resource values with "xrdb -merge" since there is no xrdb command that can clear one property (xrdb -remove clears everything). For resources loaded from file, file content is parsed with "xrdb -load" and each property it defines is also cleared. This commit also corrects the way x-resource value is parsed. Sometimes x-resource value may be provided within resource name as the "x-resource {Ileaf.popup.saveUnder: True}" example provided in manpage. So if no value is provided, resource name is looked at to check if a value is provided within string (space or colon are looked at). Load of x-resources is also fixed by this commit for sh, csh and tcl to handle resource name and value containing wildcard characters and fixed for sh and csh to output well-behaving code to execute ("echo | xrdb -merge" instead of "xrdb -merge <<EOF") 2016-07-22 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/python.in, modulecmd.tcl: Fix Python autoinit, error and x-resource rendering Python code used to define the module command (autoinit action) was broken (syntax errors) and not Python3-compatible. Error rendering is also fixed here for Python3 compliance. Code used to process x-resource is adapted to comply with Python recommendation [1] (subprocess.Popen should be used instead of os.popen). Python init script is also modified by this commit to use same code as the one generated by autoinit action with call to subprocess.Popen rather than os.popen. [1] https://docs.python.org/2/library/os.html#os.popen 2016-07-18 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Replace reverseList proc by lreverse build-in proc lreverse build-in procedure has been introduced in Tcl8.5 and provides best performances. For compatibility with Tcl8.4 and earlier, a lreverse procedure is provided here (set if not defined). See [1] for an overview of lreverse implementations and performances. [1] http://wiki.tcl.tk/17188 * modulecmd.tcl: Fix dollar sign usage on XRDBPIPE variable * .gitignore: Ignore runtest result files in git repository 2016-07-17 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Use 'eq'/'ne' in place of '=='/'!=' to compare strings '==' and '!=' operators are meant for numerical comparison so it is more correct and faster to use 'eq' or 'ne' operators when comparing strings. This was found using the 'ttclcheck' utility [1] over the modulecmd.tcl complete code. [1] http://www.xdobry.de/ttclcheck 2016-07-15 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Remove code regarding undefined g_aliasHash array Some code where present in module-alias proc regarding a g_aliasHash global array. But this array variable is not defined nor used anywhere else in script. * modulecmd.tcl: Remove unused spaceEscaped proc 2016-07-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Introduce reportDebug proc Add a reportDebug procedure to simplify and harmonize debug report management. With this new procedure, the way to test if debug is enabled or not is found only in one place (and g_debug variable does not have to be known in every procedures). * testsuite/modules.50-cmds/140-system.exp, testsuite/modules.95-version/040-xgetenv.exp: testsuite: comment cmds/140-system and version/040-xgetenv Skip both cmds/140-system and version/040-xgetenv tests since pure-Tcl version of module does not behave like C version for "system" procedure and "live" resolution of variables set within paths. 2016-07-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Add hints for vim to correctly set tabs when developping * Makefile, testsuite/config/unix.exp: testsuite: fix MODULECMD initialization Update way MODULECMD is defined to let a chance for modulecmd.tcl to be found before looking at PATH for modulecmd binary. This way on systems where modulecmd is installed in default paths, tests can still be run on modulecmd.tcl. Remove MODULECMD env variable setup in Makefile for "make test" since environment variables are not looked at to initialize MODULECMD tcl variable when tests are configured. 2016-01-30 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl, testsuite/modulefiles/verssort/1, testsuite/modulefiles/verssort/1.10, testsuite/modulefiles/verssort/1.2.1, testsuite/modulefiles/verssort/1.2.4, testsuite/modulefiles/verssort/1.8-2015-12-01, testsuite/modulefiles/verssort/1.8-2016-02-01, testsuite/modules.91-sort/010-init_ts.exp, testsuite/modules.91-sort/020-avail.exp, testsuite/modules.91-sort/030-whatis.exp, testsuite/modules.91-sort/040-load.exp, testsuite/modules.91-sort/999-cleanup.exp: Always dictionary-sort list of modules or collections Dictionary sort of Tcl enables to determine that a version 1.10 is greater that a version 1.8, for instance. This useful kind of sort was in use in modules-tcl previously but not for every sort. For instance load command was correctly able to find the greatest version of a module whereas avail and whatis commands did not sort existing versions accordingly. This patch applies the dictionary sort everywhere to ensure the exact same sort is applied everywhere. Dictionary sort appears to be the most appropriate kind of sort to work with software versions. So the sort_order argument of listModules procedure is removed to always get the same sort applied. Also a stringDictionaryCompare procedure is added in order to compare two strings with dictionary-sort (useful to know what string is greater than the other). In addition, modules.91-sort testsuite is introduced to guaranty that avail, whatis and load commands behave appropriately regarding sort. 2016-02-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * testsuite/modules.00-init/030-shells.exp, testsuite/modules.50-cmds/040-append.exp: testsuite: fixing init/030-shells and cmds/040-append * Adapt error message when MODULEPATH is empty (message differ on this module implementation) on 00-init/030-shells testsuite * Adapt 50-cmds/040-append testsuite since adding a bare colon to a path does not produce a path change on this module implementation 2015-04-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash_completion: Fixing bash completion to be posix compliant Bash Process Substitution is not known by posix sh so _module_not_yet_loaded function has been adapted to behave correctly when bash is launched in --posix mode. 2016-03-25 Kent Mein <mein@cs.umn.edu> * init/python.in: Make things work with python3. 2016-02-05 Kent Mein <mein@cs.umn.edu> * modulecmd.tcl: Remove unneeded code that was causing an issue. Thanks to Andy Barber for pointing this out. 2014-12-24 Kent Mein <mein@cs.umn.edu> * modulecmd.tcl: Small tweak for OSX. Uname is in a different location. * Makefile, doc/html/module.html, doc/html/modulefile.html, doc/man/man1/module.1, doc/man/man4/modulefile.4, doc/source/module.pl, doc/source/modulefile.pl: More doc work. 2014-11-12 Kent Mein <mein@cs.umn.edu> * doc/html/module.html, doc/html/modulefile.html, doc/man/man1/module.1, doc/man/man4/modulefile.4, doc/source/module.pl, doc/source/modulefile.pl: Fix some warnings in the documentation from podchecker. 2014-07-16 Kent Mein <mein@cs.umn.edu> * doc/html/module.html, doc/man/man1/module.1, doc/source/module.pl: Some work on documentation. * init/sh.in: Fix the check for interactive vs non interactive mode for some shells. 2014-06-05 Kent Mein <mein@cs.umn.edu> * doc/LICENSE.LGPL, doc/readme.txt: I talked to R.K. Owen and he cleared up why we had the LGPL there. It turns out specific files in the C version of modules are under the LGPL, since those files are not in the tcl only version of modules I'm removing the LGPL just to clean things up. Kent 2014-06-03 Kent Mein <mein@cs.umn.edu> * Makefile, doc/html/module.html, doc/html/modulefile.html, doc/man/man1/module.1, doc/man/man4/modulefile.4, doc/readme.txt, doc/source/module.pl, doc/source/modulefile.pl, man/man1/module.1, man/man4/modulefile.4: Create source docs for man pages. This is still a work in progress, but I've converted the current man pages over to pod (perl documentation format) The idea being that it's easier to edit and can be converted to various formats. The manpages are very out of date, but this at least will encourage me to keep them upto date and make it much easier to work with. 2014-05-21 Kent Mein <mein@cs.umn.edu> * modulecmd.tcl: Rename some vars used for a named pipe This affects both tcl and perl, and picks a more standard name between the two. * testsuite/modules.00-init/090-switches.exp: Update the test for the --help option since things have changed. 2014-05-20 Kent Mein <mein@cs.umn.edu> * init/.gitignore, init/Makefile, init/tcl.in, modulecmd.tcl: Patch from Yao-Ting Chiu This adds the tcl shell as an option. 2014-05-01 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Clarify prereq error message when multiple modules are specified 2014-04-25 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Managing settings to save as a stack with push/pop procedures Manage settings to save as a stack to have a separate set of settings for each module loaded or unloaded in order to be able to restore the correct set in case of failure. 2014-04-24 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Fixing restoreSettings to clear current arrays Clear current arrays before restoring saved values to remove potential new variables set before the issue occurs which lead to restoreSettings procedure call. 2014-03-14 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Improving save/restore command when saving module default version Save the modulename minus the module version if loaded version to save is module default version. 2014-03-13 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Fixing saveSettings to clear pre-existing saved arrays Clear pre-existing saved arrays in saveSettings to guaranty that multiple load/unload sequence will restore correct settings when a failure occurs. 2014-03-11 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: Improving restore command behavior Move from a Purge+Unuse+Source approach to a smoother way with Unload+Unuse+Use+Load of just the modules and modulepaths needed to migrate from currently loaded environment to collection with preservation of the load order. * modulecmd.tcl: Reorganizing help page with groups of command and short descriptions 2014-03-07 Kent Mein <mein@cs.umn.edu> * modulecmd.tcl: Updating the version # wasn't done in the last commit. 2014-02-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * init/bash_completion, init/tcsh_completion, modulecmd.tcl: Introduction of save/restore/savelist commands for collection management Add module collection management to enable dump and reload of multiple module environment states. 2014-02-14 Kent Mein <mein@cs.umn.edu> * contrib/pre-commit, modulecmd.tcl: Added a hook script to automatically bump the version # Of modules to the next commit # so that next time we commit changes it will be updated. This is a little bit tricky because of the way pre-commit's work. (It's making the change for the next commit not the current one). 2014-02-12 Kent Mein <mein@cs.umn.edu> * contrib/modulefiles/HOME, contrib/modulefiles/dot, contrib/modulefiles/module-info, contrib/modulefiles/null, init/modulerc.examp: Added in a couple of the default modules I removed before. Also modified the comments in the example modulerc file a little. * doc/install.txt, doc/installwin.txt, init/Makefile, init/modulerc.examp, modulefiles/.gitignore, modulefiles/HOME, modulefiles/dot, modulefiles/module-cvs, modulefiles/module-info, modulefiles/modules, modulefiles/notavail, modulefiles/null, modulefiles/use.own, modulefiles/version: Change make so it does not create a default modulerc And update the documentation so things flow a little better. 2014-02-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: modify list command show_modtimes behavior to match behavior of avail command same specific header and module reporting format. gives show_modtimes more priority over show_oneperline. 2014-01-23 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: fix help usage message to correctly align switches 2014-02-09 Xavier Delaruelle <xavier.delaruelle@cea.fr> * modulecmd.tcl: fix show_modtimes to correctly display day number 2014-01-16 Kent Mein <mein@cs.umn.edu> * modulecmd.tcl: Small patch by Trey Greer Fixes it so LOADEDMODULES env var is initalized correctly when it's set to "". * modulecmd.tcl: Fixed a typo. I introduced a typo in the last commit this fixes it. * modulecmd.tcl: Fix up the formating a little. * init/bash_completion: Another patch from Xavier Delaruelle, Tweak to the bash completion so it works around some extra spacing. * init/csh.in, init/tcsh.in, init/tcsh_completion: Another patch by Xavier Delaruelle, This one reworks the patch from Joshua Randall to define tcsh completion for the c version so it works with this one. * init/bash_completion, modulecmd.tcl: More patches from Xavier Delaruelle, Added -D option (short form of --debug) Added -d or --default to only show default modules when doing module avail Added -L or --latest to only show latest version of modules when doing avail * init/bash.in, init/ksh.in, init/sh.in, init/zsh.in: Patch from Xavier Delaruelle, Now only redirect module from stderr to stdout in interactive mode to avoid breaking non interactive sessions (scp, sftp, etc). * init/bash_completion, modulecmd.tcl: 3 patches from Xavier Delaruelle Add --long and --terse options to help. Fix ModulesDisplay so it works. Fix ModulesAlias function so it works as well. 2013-11-06 Kent Mein <mein@cs.umn.edu> * contrib/readme.txt, doc/{install => install.txt}, doc/installwin.txt, readme.txt: Updated the documentation a bit. 2013-11-04 Kent Mein <mein@cs.umn.edu> * init/bash.in, init/ksh.in, init/sh.in, init/zsh.in: Added redirect stderr to stdout for shells that support it. * init/tcsh.in: Fix a site specific bit that snuck in awhile back. This shouldn't have been here, now it is fixed though. * init/bash.in: source the bash_completion script by default. This is for the tcl native version of modules and it just starts using the bash_completion script that has been supplied so that it's actually used. 2013-10-19 Kent Mein <mein@cs.umn.edu> * doc/example.txt: Some small tweaks to example setup documentation. 2013-08-01 Kent Mein <mein@cs.umn.edu> * testsuite/modules.50-cmds/040-append.exp: Fix one of the tests. * modulecmd.tcl: Simplify the csh autoinit code. If this is a problem we can add it back in but I'm guessing no one will even notice. 2013-06-06 Kent Mein <mein@cs.umn.edu> * modulecmd.tcl: A few patches from Xavier Delaruel to adjust exit codes when an error appears. 2013-03-25 Kent Mein <mein@cs.umn.edu> * modulecmd.tcl: Introduce MODULECONTACT var, Patch from Xavier Delaruelle So you can set the contact info with an environement variable instead of altering the modulecmd.tcl file directly. 2013-03-21 Kent Mein <mein@cs.umn.edu> * modulecmd.tcl: Clean up some dead code and a little reformating. * init/bash_completion: Patch by Xavier Delaruelle to add bash completion. You need to source the file in addition to the init/bash file to get it to work. * modulecmd.tcl: Fixing module help. Thanks to Xavier Delaruelle for the fix. 2013-03-13 Kent Mein <mein@cs.umn.edu> * notdone/modules.20-locate/010-init_ts.exp, notdone/modules.20-locate/020-fqual.exp, notdone/modules.20-locate/030-defvers.exp, notdone/modules.20-locate/040-alias.exp, notdone/modules.20-locate/045-symvers.exp, notdone/modules.20-locate/046-getsym.exp, notdone/modules.20-locate/047-symerrs.exp, notdone/modules.20-locate/048-symexec.exp, notdone/modules.20-locate/050-locrc.exp, notdone/modules.20-locate/055-locrcerrs.exp, notdone/modules.20-locate/060-rc.exp, notdone/modules.20-locate/065-rcerrs.exp, notdone/modules.20-locate/070-homerc.exp, notdone/modules.20-locate/095-cleanup.exp, notdone/modules.50-cmds/017-use-undo.exp, notdone/modules.50-cmds/022-setenv-eschars.exp, notdone/modules.50-cmds/025-setenv-undo.exp, notdone/modules.50-cmds/035-unsetenv-undo.exp, notdone/modules.50-cmds/036-unsetenv-x.exp, notdone/modules.50-cmds/042-append-delim.exp, notdone/modules.50-cmds/045-append-undo.exp, notdone/modules.50-cmds/047-app-del-undo.exp, notdone/modules.50-cmds/050-prepend.exp, notdone/modules.50-cmds/052-prepend-delim.exp, notdone/modules.50-cmds/055-prepend-undo.exp, notdone/modules.50-cmds/057-pre-del-undo.exp, notdone/modules.50-cmds/060-remove.exp, notdone/modules.50-cmds/065-remove-undo.exp, notdone/modules.50-cmds/070-alias-proc.exp, notdone/modules.50-cmds/075-alias.exp, notdone/modules.50-cmds/076-alias-sub.exp, notdone/modules.50-cmds/077-alias-undo.exp, notdone/modules.50-cmds/078-refresh.exp, notdone/modules.50-cmds/080-info-name.exp, notdone/modules.50-cmds/081-info-user.exp, notdone/modules.50-cmds/082-info-user-exp.exp, notdone/modules.50-cmds/083-info-mode.exp, notdone/modules.50-cmds/084-info-mode-exp.exp, notdone/modules.50-cmds/085-info-flags.exp, notdone/modules.50-cmds/086-info-shells.exp, notdone/modules.50-cmds/087-info-shells-exp.exp, notdone/modules.50-cmds/088-info-isloaded.exp, notdone/modules.50-cmds/090-uname-proc.exp, notdone/modules.50-cmds/095-uname.exp, notdone/modules.50-cmds/099-uname-cleanup.exp, notdone/modules.50-cmds/100-loglevel.exp, notdone/modules.50-cmds/101-badfac.exp, notdone/modules.50-cmds/110-verbose.exp, notdone/modules.50-cmds/115-verbose-msg.exp, notdone/modules.50-cmds/120-prereq-full.exp, notdone/modules.50-cmds/121-prereq-module.exp, notdone/modules.50-cmds/130-conflict-full.exp, notdone/modules.50-cmds/131-conflict-module.exp, notdone/modules.50-cmds/140-system.exp, notdone/modules.50-cmds/150-module.exp, notdone/modules.50-cmds/170-swap.exp, notdone/modules.50-cmds/175-swap2.exp, notdone/modules.50-cmds/190-load.exp, notdone/modules.50-cmds/200-break.exp, notdone/modules.50-cmds/210-exit.exp, notdone/modules.50-cmds/220-continue.exp, notdone/modules.50-cmds/230-loop.exp, notdone/modules.50-cmds/240-chdir.exp: Added a bunch of test cases that are not put in yet that probably should be. * contrib/scripts/createmodule.sh: Add a contributed script to help creating inital modules. 2013-03-04 Kent Mein <mein@cs.umn.edu> * init/.gitignore: Add modulerc to .gitignore. * init/modulerc: Remove the modulerc file because it's built by make and its location dependant. * doc/example.txt: More work on the example document. * modulecmd.tcl: Added module-info type so it returns "Tcl" * modulecmd.tcl: Fix a small problem pointed out by Sergiy Khan Bug #49 in the tracker. * doc/example.txt, readme.txt: Small tweaks to the readme and added the example document. * contrib/modulefiles/compilers/.version, contrib/modulefiles/compilers/compilers, contrib/modulefiles/dot, contrib/modulefiles/gnu, contrib/modulefiles/java/.version, contrib/modulefiles/java/6/.version, contrib/modulefiles/java/6/35, contrib/modulefiles/java/6/38, contrib/modulefiles/java/7/.version, contrib/modulefiles/java/7/07, contrib/modulefiles/java/7/11, contrib/modulefiles/local, contrib/modulefiles/math/mathematica/.version, contrib/modulefiles/math/mathematica/7.0.1, contrib/modulefiles/math/mathematica/8.0.1, contrib/modulefiles/null, contrib/modulefiles/openwin, contrib/modulefiles/perl/.version, contrib/modulefiles/perl/5.14.1, contrib/modulefiles/perl/5.8.7, contrib/modulefiles/scheme/.version, contrib/modulefiles/scheme/drscheme/.version, contrib/modulefiles/scheme/drscheme/410, contrib/modulefiles/scheme/drscheme/425, contrib/modulefiles/scheme/mit, contrib/modulefiles/scheme/racket/.version, contrib/modulefiles/scheme/racket/5.0.2, contrib/modulefiles/scheme/racket/5.1.1, contrib/modulefiles/soft/gcc/.version, contrib/modulefiles/soft/gcc/4.5.2, contrib/modulefiles/soft/gcc/4.7.2, contrib/modulefiles/system, contrib/modulefiles/user, contrib/scripts/resetenv, contrib/scripts/resetgnome, contrib/template/.aliases, contrib/template/.bash_profile, contrib/template/.bashrc, contrib/template/.cshrc, contrib/template/.fvwm2rc, contrib/template/.gconf/apps/%gconf.xml, contrib/template/.gconf/apps/evolution/%gconf.xml, .../.gconf/apps/evolution/calendar/%gconf.xml, .../apps/evolution/calendar/notify/%gconf.xml, .../template/.gconf/apps/gconf-editor/%gconf.xml, contrib/template/.gconf/apps/gedit-2/%gconf.xml, .../.gconf/apps/gedit-2/plugins/%gconf.xml, .../apps/gedit-2/plugins/filebrowser/%gconf.xml, .../gedit-2/plugins/filebrowser/on_load/%gconf.xml, .../.gconf/apps/gedit-2/preferences/%gconf.xml, .../.gconf/apps/gedit-2/preferences/ui/%gconf.xml, .../gedit-2/preferences/ui/statusbar/%gconf.xml, .../.gconf/apps/gnome-power-manager/%gconf.xml, .../apps/gnome-power-manager/buttons/%gconf.xml, .../.gconf/apps/gnome-screensaver/%gconf.xml, .../template/.gconf/apps/gnome-settings/%gconf.xml, .../apps/gnome-settings/gnome-panel/%gconf.xml, .../template/.gconf/apps/gnome-terminal/%gconf.xml, .../.gconf/apps/gnome-terminal/profiles/%gconf.xml, .../gnome-terminal/profiles/Default/%gconf.xml, .../.gconf/apps/nautilus-open-terminal/%gconf.xml, contrib/template/.gconf/apps/panel/%gconf.xml, .../template/.gconf/apps/panel/applets/%gconf.xml, .../apps/panel/applets/clock_screen0/%gconf.xml, .../panel/applets/clock_screen0/prefs/%gconf.xml, .../applets/indicator_applet_screen0/%gconf.xml, .../apps/panel/applets/mixer_screen0/%gconf.xml, .../applets/notification_area_screen0/%gconf.xml, .../applets/show_desktop_button_screen0/%gconf.xml, .../panel/applets/trashapplet_screen0/%gconf.xml, .../panel/applets/window_list_screen0/%gconf.xml, .../applets/window_list_screen0/prefs/%gconf.xml, .../applets/workspace_switcher_screen0/%gconf.xml, .../workspace_switcher_screen0/prefs/%gconf.xml, .../template/.gconf/apps/panel/general/%gconf.xml, .../template/.gconf/apps/panel/objects/%gconf.xml, .../objects/browser_launcher_screen0/%gconf.xml, .../objects/clock_separator_screen0/%gconf.xml, .../apps/panel/objects/menu_bar_screen0/%gconf.xml, .../.gconf/apps/panel/objects/object_0/%gconf.xml, .../.gconf/apps/panel/objects/object_1/%gconf.xml, .../.gconf/apps/panel/objects/object_2/%gconf.xml, .../panel/objects/yelp_launcher_screen0/%gconf.xml, .../.gconf/apps/panel/toplevels/%gconf.xml, .../toplevels/bottom_panel_screen0/%gconf.xml, .../bottom_panel_screen0/background/%gconf.xml, .../panel/toplevels/top_panel_screen0/%gconf.xml, .../top_panel_screen0/background/%gconf.xml, contrib/template/.gconf/desktop/%gconf.xml, contrib/template/.gconf/desktop/gnome/%gconf.xml, .../.gconf/desktop/gnome/accessibility/%gconf.xml, .../gnome/accessibility/keyboard/%gconf.xml, .../.gconf/desktop/gnome/applications/%gconf.xml, .../gnome/applications/window_manager/%gconf.xml, .../.gconf/desktop/gnome/lockdown/%gconf.xml, contrib/template/.login, contrib/template/.logout, contrib/template/.mailcap, contrib/template/.mime.types, contrib/template/.vim/colors/herald.vim, contrib/template/.vim/colors/moria.vim, contrib/template/.vim/colors/xoria256.vim, contrib/template/.vim/perl-support.zip, .../template/.vim/perlsupport/README.perlsupport, .../.vim/perlsupport/autoload/perlsupportgui.vim, .../perlsupport/autoload/perlsupportprofiling.vim, .../.vim/perlsupport/autoload/perlsupportregex.vim, .../template/.vim/perlsupport/doc/perlsupport.txt, .../template/.vim/perlsupport/ftplugin/perl.vim, .../codesnippets/SmallProf-variables.pl, .../perl-support/codesnippets/dot.SmallProf, .../codesnippets/free-software-comment, .../perl-support/codesnippets/module-interface.pl, .../perlsupport/perl-support/codesnippets/new.pl, .../codesnippets/pod-template-application.pl, .../codesnippets/pod-template-module.pl, .../print-data-structure-with-Dumper.pl, .../perl-support/codesnippets/print-hash-sorted.pl, .../perl-support/codesnippets/print-hash.pl, ...process-all-files-in-a-directory-recursively.pl, .../perl-support/codesnippets/slurp-file.pl, .../.vim/perlsupport/perl-support/doc/ChangeLog, .../perlsupport/perl-support/doc/perl-hot-keys.pdf, .../perlsupport/perl-support/doc/perl-hot-keys.tex, .../.vim/perlsupport/perl-support/doc/pmdesc3.text, .../perl-support/modules/perl-modules.list, .../perl-support/rc/customization.ctags, .../perl-support/rc/customization.gvimrc, .../perl-support/rc/customization.perltidyrc, .../perl-support/rc/customization.smallprof, .../perl-support/rc/customization.vimrc, .../perlsupport/perl-support/scripts/csv2err.pl, .../perlsupport/perl-support/scripts/efm_perl.pl, .../perlsupport/perl-support/scripts/pmdesc3.pl, .../perlsupport/perl-support/scripts/wrapper.sh, .../perlsupport/perl-support/templates/Templates, .../perl-support/templates/comments.template, .../perl-support/templates/idioms.template, .../perl-support/templates/pod.template, .../perl-support/templates/statements.template, .../perlsupport/perl-support/wordlists/perl.list, .../.vim/perlsupport/plugin/perl-support.vim, contrib/template/.vim/plugin/matrix.vim, contrib/template/.vim/syntax/fluxkeys.vim, contrib/template/.vim/syntax/perl.vim, contrib/template/README.dotfiles, contrib/template/resetenv.conf, man/man1/module.1, man/man4/modulefile.4: Added really old man pages, and a bunch of example things. Still need to write some documentation for the contrib stuff and update the man pages. * LICENSE.GPL => doc/LICENSE.GPL, LICENSE.LGPL => doc/LICENSE.LGPL, README-EMACS.txt => doc/emacs.txt, README.txt => doc/install, doc/installwin.txt, readme.txt: Setup some more complicated documentation and move existing docs to new dir. 2013-01-22 Kent Mein <mein@cs.umn.edu> * modulefiles/{HOME.in => HOME}, modulefiles/Makefile.am, modulefiles/{dot.in => dot}, modulefiles/lang/.gitignore, modulefiles/lang/.mklang, modulefiles/{module-cvs.in => module-cvs}, modulefiles/{module-info.in => module-info}, modulefiles/{modules.in => modules}, modulefiles/{notavail.in => notavail}, modulefiles/{null.in => null}, modulefiles/{use.own.in => use.own}, modulefiles/{version.in => version}: Clean up the default modulefiles a bit. Kent * .gitattributes, doc/.gitignore, doc/Makefile.am, doc/Modules-Paper.doc, doc/Modules-Paper.pdf, doc/module.1.in, doc/modulefile.4.in: Removed the documentation, no need to have it twice. Maybe will work on a way to add it back in later... Kent * xref/ModuleCmd_Avail.c.html, xref/ModuleCmd_Avail.c.src.html, xref/ModuleCmd_Clear.c.html, xref/ModuleCmd_Clear.c.src.html, xref/ModuleCmd_Display.c.html, xref/ModuleCmd_Display.c.src.html, xref/ModuleCmd_Help.c.html, xref/ModuleCmd_Help.c.src.html, xref/ModuleCmd_Init.c.html, xref/ModuleCmd_Init.c.src.html, xref/ModuleCmd_List.c.html, xref/ModuleCmd_List.c.src.html, xref/ModuleCmd_Load.c.html, xref/ModuleCmd_Load.c.src.html, xref/ModuleCmd_Purge.c.html, xref/ModuleCmd_Purge.c.src.html, xref/ModuleCmd_Refresh.c.html, xref/ModuleCmd_Refresh.c.src.html, xref/ModuleCmd_Switch.c.html, xref/ModuleCmd_Switch.c.src.html, xref/ModuleCmd_Update.c.html, xref/ModuleCmd_Update.c.src.html, xref/ModuleCmd_Use.c.html, xref/ModuleCmd_Use.c.src.html, xref/ModuleCmd_Whatis.c.html, xref/ModuleCmd_Whatis.c.src.html, xref/cmdAlias.c.html, xref/cmdAlias.c.src.html, xref/cmdChdir.c.html, xref/cmdChdir.c.src.html, xref/cmdConflict.c.html, xref/cmdConflict.c.src.html, xref/cmdInfo.c.html, xref/cmdInfo.c.src.html, xref/cmdIsLoaded.c.html, xref/cmdIsLoaded.c.src.html, xref/cmdLog.c.html, xref/cmdLog.c.src.html, xref/cmdMisc.c.html, xref/cmdMisc.c.src.html, xref/cmdModule.c.html, xref/cmdModule.c.src.html, xref/cmdPath.c.html, xref/cmdPath.c.src.html, xref/cmdSetenv.c.html, xref/cmdSetenv.c.src.html, xref/cmdUlvl.c.html, xref/cmdUlvl.c.src.html, xref/cmdUname.c.html, xref/cmdUname.c.src.html, xref/cmdVerbose.c.html, xref/cmdVerbose.c.src.html, xref/cmdVersion.c.html, xref/cmdVersion.c.src.html, xref/cmdWhatis.c.html, xref/cmdWhatis.c.src.html, xref/cmdXResource.c.html, xref/cmdXResource.c.src.html, xref/config.h.html, xref/config.h.src.html, xref/cxref.apdx.html, xref/cxref.css, xref/cxref.function, xref/cxref.html, xref/cxref.include, xref/cxref.typedef, xref/cxref.variable, xref/error.c.html, xref/error.c.src.html, xref/getopt.c.html, xref/getopt.c.src.html, xref/getopt.h.html, xref/getopt.h.src.html, xref/index.html, xref/init.c.html, xref/init.c.src.html, xref/locate_module.c.html, xref/locate_module.c.src.html, xref/main.c.html, xref/main.c.src.html, xref/modules_def.h.html, xref/modules_def.h.src.html, xref/utility.c.html, xref/utility.c.src.html, xref/utilmem.c.html, xref/utilmem.c.src.html, xref/utilobj.c.html, xref/utilobj.c.src.html, xref/uvec.c.html, xref/uvec.c.src.html, xref/version.c.html, xref/version.c.src.html: Removing more stuff that was c version specific. Kent 2013-01-10 Kent Mein <mein@cs.umn.edu> * tcl/Makefile => Makefile, tcl/README-EMACS.txt => README-EMACS.txt, tcl/README.txt => README.txt, {tcl/init => init}/.gitignore, {tcl/init => init}/Makefile, {tcl/init => init}/README.txt, {tcl/init => init}/bash.in, {tcl/init => init}/csh.in, {tcl/init => init}/ksh.in, {tcl/init => init}/lisp.in, {tcl/init => init}/modulerc, {tcl/init => init}/perl.in, {tcl/init => init}/python.in, {tcl/init => init}/sh.in, {tcl/init => init}/tcsh.in, {tcl/init => init}/zsh.debug, {tcl/init => init}/zsh.in, tcl/modulecmd.tcl => modulecmd.tcl, {tcl/testsuite => testsuite}/config/unix.exp, {tcl/testsuite => testsuite}/etc/bad, {tcl/testsuite => testsuite}/etc/empty, {tcl/testsuite => testsuite}/etc/modulerc, {tcl/testsuite => testsuite}/home/.modulerc, {tcl/testsuite => testsuite}/home/.modules, {tcl/testsuite => testsuite}/home/.modules.save, .../modulefiles.deep/modulerc/.modulerc, .../modulefiles.deep/modulerc/dir1/.modulerc, .../modulefiles.deep/modulerc/dir1/1.0, .../modulefiles.deep/modulerc/dir1/2.0, .../modulefiles.deep/modulerc/dir2/.modulerc, .../modulefiles.deep/modulerc/dir2/1.0/.modulerc, .../modulefiles.deep/modulerc/dir2/1.0/rc1, .../modulefiles.deep/modulerc/dir2/1.0/rc2, .../modulefiles.deep/modulerc/dir2/2.0, .../modulefiles.deep/modulerc/dir2/3.0, .../testsuite => testsuite}/modulefiles.deep/plain/dir1/1.0, .../testsuite => testsuite}/modulefiles.deep/plain/dir1/2.0, .../testsuite => testsuite}/modulefiles.deep/plain/dir2/1.0, .../testsuite => testsuite}/modulefiles.deep/plain/dir2/2.0, .../modulefiles.deep/version/.version, .../modulefiles.deep/version/dir1/.version, .../modulefiles.deep/version/dir1/1.0, .../modulefiles.deep/version/dir1/2.0, .../modulefiles.deep/version/dir2/.version, .../modulefiles.deep/version/dir2/1.0, .../modulefiles.deep/version/dir2/2.0/.version, .../modulefiles.deep/version/dir2/2.0/rc1, .../modulefiles.deep/version/dir2/2.0/rc2, .../modulefiles.deep/version/dir2/3.0, {tcl/testsuite => testsuite}/modulefiles.other/1.1/version, {tcl/testsuite => testsuite}/modulefiles.other/1.2/version, {tcl/testsuite => testsuite}/modulefiles.other/1.3/version, {tcl/testsuite => testsuite}/modulefiles.other/README, {tcl/testsuite => testsuite}/modulefiles/README, {tcl/testsuite => testsuite}/modulefiles/alias/1.0, {tcl/testsuite => testsuite}/modulefiles/alias/2.0, {tcl/testsuite => testsuite}/modulefiles/append/0.1, {tcl/testsuite => testsuite}/modulefiles/append/0.2, {tcl/testsuite => testsuite}/modulefiles/append/1.0, {tcl/testsuite => testsuite}/modulefiles/append/2.0, {tcl/testsuite => testsuite}/modulefiles/append/2.1, {tcl/testsuite => testsuite}/modulefiles/append/2.2, {tcl/testsuite => testsuite}/modulefiles/break/1.0, {tcl/testsuite => testsuite}/modulefiles/break/2.0, {tcl/testsuite => testsuite}/modulefiles/break/3.0, {tcl/testsuite => testsuite}/modulefiles/break/4.0, {tcl/testsuite => testsuite}/modulefiles/chdir/1.0, {tcl/testsuite => testsuite}/modulefiles/chdir/2.0, {tcl/testsuite => testsuite}/modulefiles/chdir/3.0, {tcl/testsuite => testsuite}/modulefiles/chdir/4.0, {tcl/testsuite => testsuite}/modulefiles/conflict/full, {tcl/testsuite => testsuite}/modulefiles/conflict/module, {tcl/testsuite => testsuite}/modulefiles/continue/1.0, {tcl/testsuite => testsuite}/modulefiles/continue/2.0, {tcl/testsuite => testsuite}/modulefiles/continue/3.0, {tcl/testsuite => testsuite}/modulefiles/continue/4.0, {tcl/testsuite => testsuite}/modulefiles/empty/1.0, {tcl/testsuite => testsuite}/modulefiles/eschars/1.0, {tcl/testsuite => testsuite}/modulefiles/exit/1.0, {tcl/testsuite => testsuite}/modulefiles/exit/2.0, {tcl/testsuite => testsuite}/modulefiles/exit/3.0, {tcl/testsuite => testsuite}/modulefiles/help/2.0, {tcl/testsuite => testsuite}/modulefiles/info/isloaded, {tcl/testsuite => testsuite}/modulefiles/info/mode1, {tcl/testsuite => testsuite}/modulefiles/info/mode2, {tcl/testsuite => testsuite}/modulefiles/info/mode3, {tcl/testsuite => testsuite}/modulefiles/info/mode4, {tcl/testsuite => testsuite}/modulefiles/info/mode5, {tcl/testsuite => testsuite}/modulefiles/info/mode6, {tcl/testsuite => testsuite}/modulefiles/info/name, {tcl/testsuite => testsuite}/modulefiles/info/shells, {tcl/testsuite => testsuite}/modulefiles/info/shellsexp, {tcl/testsuite => testsuite}/modulefiles/info/user, {tcl/testsuite => testsuite}/modulefiles/info/userexp, {tcl/testsuite => testsuite}/modulefiles/loc_dv1/1.0, {tcl/testsuite => testsuite}/modulefiles/loc_dv1/2.0, {tcl/testsuite => testsuite}/modulefiles/loc_dv1/3.0, {tcl/testsuite => testsuite}/modulefiles/loc_dv2/.version, {tcl/testsuite => testsuite}/modulefiles/loc_dv2/1.0, {tcl/testsuite => testsuite}/modulefiles/loc_dv2/2.0, {tcl/testsuite => testsuite}/modulefiles/loc_dv3/.version, {tcl/testsuite => testsuite}/modulefiles/loc_dv3/1.0, {tcl/testsuite => testsuite}/modulefiles/loc_dv3/2.0, {tcl/testsuite => testsuite}/modulefiles/loc_dv4/.version, {tcl/testsuite => testsuite}/modulefiles/loc_dv4/1.0, {tcl/testsuite => testsuite}/modulefiles/loc_dv4/2.0, {tcl/testsuite => testsuite}/modulefiles/loc_dv6/1.0, {tcl/testsuite => testsuite}/modulefiles/loc_dv6/2.0/1.0, {tcl/testsuite => testsuite}/modulefiles/loc_dv7/.version, {tcl/testsuite => testsuite}/modulefiles/loc_dv7/1.0, {tcl/testsuite => testsuite}/modulefiles/loc_dv7/2.0/1.0, {tcl/testsuite => testsuite}/modulefiles/loc_dv7/3.0, {tcl/testsuite => testsuite}/modulefiles/loc_dv8/.version, {tcl/testsuite => testsuite}/modulefiles/loc_dv8/1.0, {tcl/testsuite => testsuite}/modulefiles/loc_dv8/2.0, {tcl/testsuite => testsuite}/modulefiles/loc_fq/1.0, {tcl/testsuite => testsuite}/modulefiles/loc_fq/2.0, {tcl/testsuite => testsuite}/modulefiles/loc_rc1/.modulerc, {tcl/testsuite => testsuite}/modulefiles/loc_rc1/1.0, {tcl/testsuite => testsuite}/modulefiles/loc_rc1/2.0, {tcl/testsuite => testsuite}/modulefiles/loc_rc2/.modulerc, {tcl/testsuite => testsuite}/modulefiles/loc_rc2/1.0, {tcl/testsuite => testsuite}/modulefiles/loc_rc2/2.0, {tcl/testsuite => testsuite}/modulefiles/loc_rc3/.modulerc, {tcl/testsuite => testsuite}/modulefiles/loc_rc3/1.0, {tcl/testsuite => testsuite}/modulefiles/loc_rc3/2.0, {tcl/testsuite => testsuite}/modulefiles/loc_rc3/3.0, {tcl/testsuite => testsuite}/modulefiles/loc_rc4/.modulerc, {tcl/testsuite => testsuite}/modulefiles/loc_rc4/.version, {tcl/testsuite => testsuite}/modulefiles/loc_rc4/1.0, {tcl/testsuite => testsuite}/modulefiles/loc_rc4/2.0, {tcl/testsuite => testsuite}/modulefiles/loc_rc4/3.0, {tcl/testsuite => testsuite}/modulefiles/loc_rc5/.modulerc, {tcl/testsuite => testsuite}/modulefiles/loc_rc5/1.0, {tcl/testsuite => testsuite}/modulefiles/loc_rc5/2.0, {tcl/testsuite => testsuite}/modulefiles/loc_sym/1.0, {tcl/testsuite => testsuite}/modulefiles/loc_sym/alias1, {tcl/testsuite => testsuite}/modulefiles/loc_sym/alias2, {tcl/testsuite => testsuite}/modulefiles/loc_sym/alias3, {tcl/testsuite => testsuite}/modulefiles/loc_sym/alias4, {tcl/testsuite => testsuite}/modulefiles/loc_sym/alias5, {tcl/testsuite => testsuite}/modulefiles/loc_sym/alias6, {tcl/testsuite => testsuite}/modulefiles/loc_sym/exec1, {tcl/testsuite => testsuite}/modulefiles/loc_sym/exec2, {tcl/testsuite => testsuite}/modulefiles/loc_sym/getvers1, {tcl/testsuite => testsuite}/modulefiles/loc_sym/getvers2, {tcl/testsuite => testsuite}/modulefiles/loc_sym/getvers3, {tcl/testsuite => testsuite}/modulefiles/loc_sym/getvers4, {tcl/testsuite => testsuite}/modulefiles/loc_sym/getvers5, {tcl/testsuite => testsuite}/modulefiles/loc_sym/getvers6, {tcl/testsuite => testsuite}/modulefiles/loc_sym/getvers7, {tcl/testsuite => testsuite}/modulefiles/loc_sym/getvers8, {tcl/testsuite => testsuite}/modulefiles/loc_sym/versinf1, {tcl/testsuite => testsuite}/modulefiles/loc_sym/versinf2, {tcl/testsuite => testsuite}/modulefiles/loc_sym/versinf3, {tcl/testsuite => testsuite}/modulefiles/loc_sym/versinf4, {tcl/testsuite => testsuite}/modulefiles/loc_sym/versinf5, {tcl/testsuite => testsuite}/modulefiles/loc_sym/versinf6, {tcl/testsuite => testsuite}/modulefiles/loc_sym/versinf7, {tcl/testsuite => testsuite}/modulefiles/loc_sym/version1, {tcl/testsuite => testsuite}/modulefiles/loc_sym/version10, {tcl/testsuite => testsuite}/modulefiles/loc_sym/version11, {tcl/testsuite => testsuite}/modulefiles/loc_sym/version12, {tcl/testsuite => testsuite}/modulefiles/loc_sym/version13, {tcl/testsuite => testsuite}/modulefiles/loc_sym/version14, {tcl/testsuite => testsuite}/modulefiles/loc_sym/version2, {tcl/testsuite => testsuite}/modulefiles/loc_sym/version3, {tcl/testsuite => testsuite}/modulefiles/loc_sym/version4, {tcl/testsuite => testsuite}/modulefiles/loc_sym/version5, {tcl/testsuite => testsuite}/modulefiles/loc_sym/version6, {tcl/testsuite => testsuite}/modulefiles/loc_sym/version7, {tcl/testsuite => testsuite}/modulefiles/loc_sym/version8, {tcl/testsuite => testsuite}/modulefiles/loc_sym/version9, {tcl/testsuite => testsuite}/modulefiles/log/badfac, {tcl/testsuite => testsuite}/modulefiles/log/err_both_1, {tcl/testsuite => testsuite}/modulefiles/log/err_both_2, {tcl/testsuite => testsuite}/modulefiles/log/err_file, {tcl/testsuite => testsuite}/modulefiles/log/err_syslog, {tcl/testsuite => testsuite}/modulefiles/module/2.0, {tcl/testsuite => testsuite}/modulefiles/prepend/0.1, {tcl/testsuite => testsuite}/modulefiles/prepend/0.2, {tcl/testsuite => testsuite}/modulefiles/prepend/1.0, {tcl/testsuite => testsuite}/modulefiles/prepend/2.0, {tcl/testsuite => testsuite}/modulefiles/prepend/2.1, {tcl/testsuite => testsuite}/modulefiles/prepend/2.2, {tcl/testsuite => testsuite}/modulefiles/prereq/full, {tcl/testsuite => testsuite}/modulefiles/prereq/module, {tcl/testsuite => testsuite}/modulefiles/remove/2.0, {tcl/testsuite => testsuite}/modulefiles/setenv/1.0, {tcl/testsuite => testsuite}/modulefiles/system/2.0, {tcl/testsuite => testsuite}/modulefiles/trace/all_off, {tcl/testsuite => testsuite}/modulefiles/trace/all_on, {tcl/testsuite => testsuite}/modulefiles/uname/domain, {tcl/testsuite => testsuite}/modulefiles/uname/machine, {tcl/testsuite => testsuite}/modulefiles/uname/nodename, {tcl/testsuite => testsuite}/modulefiles/uname/release, {tcl/testsuite => testsuite}/modulefiles/uname/sysname, {tcl/testsuite => testsuite}/modulefiles/uname/version, {tcl/testsuite => testsuite}/modulefiles/unsetenv/0.9, {tcl/testsuite => testsuite}/modulefiles/unsetenv/1.0, {tcl/testsuite => testsuite}/modulefiles/use/.version, {tcl/testsuite => testsuite}/modulefiles/use/1.0, {tcl/testsuite => testsuite}/modulefiles/use/2.0, {tcl/testsuite => testsuite}/modulefiles/use/2.1, {tcl/testsuite => testsuite}/modulefiles/use/2.2, {tcl/testsuite => testsuite}/modulefiles/user/adv, {tcl/testsuite => testsuite}/modulefiles/user/advanced, {tcl/testsuite => testsuite}/modulefiles/user/exp, {tcl/testsuite => testsuite}/modulefiles/user/expert, {tcl/testsuite => testsuite}/modulefiles/user/nov, {tcl/testsuite => testsuite}/modulefiles/user/novice, {tcl/testsuite => testsuite}/modulefiles/user/undef, {tcl/testsuite => testsuite}/modulefiles/verbose/msg, {tcl/testsuite => testsuite}/modulefiles/verbose/off, {tcl/testsuite => testsuite}/modulefiles/verbose/on, {tcl/testsuite => testsuite}/modulefiles/verbose/undef, {tcl/testsuite => testsuite}/modulefiles/versions/1.1, {tcl/testsuite => testsuite}/modulefiles/versions/1.2, {tcl/testsuite => testsuite}/modulefiles/versions/1.3, {tcl/testsuite => testsuite}/modulefiles/whatis/lines, {tcl/testsuite => testsuite}/modulefiles/whatis/multiple, {tcl/testsuite => testsuite}/modulefiles/whatis/none, {tcl/testsuite => testsuite}/modulefiles/whatis/single, {tcl/testsuite => testsuite}/modulefiles/whatis/string, .../testsuite => testsuite}/modules.00-init/005-init_ts.exp, {tcl/testsuite => testsuite}/modules.00-init/006-procs.exp, .../testsuite => testsuite}/modules.00-init/010-environ.exp, .../testsuite => testsuite}/modules.00-init/015-version.exp, {tcl/testsuite => testsuite}/modules.00-init/030-shells.exp, .../testsuite => testsuite}/modules.00-init/050-modpath.exp, {tcl/testsuite => testsuite}/modules.00-init/080-begenv.exp, .../modules.00-init/090-switches.exp, {tcl/testsuite => testsuite}/modules.10-use/010-init_ts.exp, {tcl/testsuite => testsuite}/modules.10-use/030-use.exp, {tcl/testsuite => testsuite}/modules.10-use/031-append.exp, {tcl/testsuite => testsuite}/modules.10-use/040-load.exp, {tcl/testsuite => testsuite}/modules.10-use/070-unuse.exp, .../testsuite => testsuite}/modules.50-cmds/010-init_ts.exp, {tcl/testsuite => testsuite}/modules.50-cmds/015-use.exp, {tcl/testsuite => testsuite}/modules.50-cmds/020-setenv.exp, .../modules.50-cmds/030-unsetenv.exp, {tcl/testsuite => testsuite}/modules.50-cmds/040-append.exp, {tcl/testsuite => testsuite}/modules.50-cmds/140-system.exp, .../testsuite => testsuite}/modules.50-cmds/999-cleanup.exp, .../testsuite => testsuite}/modules.80-deep/010-init_ts.exp, {tcl/testsuite => testsuite}/modules.80-deep/020-load.exp, .../testsuite => testsuite}/modules.80-deep/030-display.exp, {tcl/testsuite => testsuite}/modules.80-deep/040-list.exp, .../testsuite => testsuite}/modules.80-deep/999-cleanup.exp, .../modules.90-avail/010-init_ts.exp, .../testsuite => testsuite}/modules.90-avail/020-single.exp, .../modules.90-avail/030-multiple.exp, {tcl/testsuite => testsuite}/modules.90-avail/040-wild.exp, {tcl/testsuite => testsuite}/modules.90-avail/050-long.exp, {tcl/testsuite => testsuite}/modules.90-avail/060-empty.exp, .../modules.95-version/010-init_ts.exp, .../testsuite => testsuite}/modules.95-version/020-load.exp, .../modules.95-version/020-unload.exp, .../modules.95-version/022-load2.exp, .../modules.95-version/022-unload2.exp, .../modules.95-version/040-xgetenv.exp, .../modules.95-version/999-cleanup.exp, {tcl/testsuite => testsuite}/not_installed, {tcl/testsuite => testsuite}/systest, {tcl/windows => windows}/module-tcl-win.chm, {tcl/windows => windows}/module.cmd, {tcl/windows => windows}/moduleinit.cmd: Moved things out of the tcl directory. Kent * .cxref, .ftp, .gitignore, .indent.pro, .spec.in, ChangeLog, INSTALL, INSTALL.RH7x, MACHINES, Makefile.am, ModuleCmd_Avail.c, ModuleCmd_Clear.c, ModuleCmd_Display.c, ModuleCmd_Help.c, ModuleCmd_Init.c, ModuleCmd_List.c, ModuleCmd_Load.c, ModuleCmd_Purge.c, ModuleCmd_Refresh.c, ModuleCmd_Switch.c, ModuleCmd_Update.c, ModuleCmd_Use.c, ModuleCmd_Whatis.c, NEWS, PROBLEMS, README, README.perl, TODO, acinclude.m4, cmdAlias.c, cmdChdir.c, cmdConflict.c, cmdInfo.c, cmdIsLoaded.c, cmdLog.c, cmdMisc.c, cmdModule.c, cmdPath.c, cmdSetenv.c, cmdUlvl.c, cmdUname.c, cmdVerbose.c, cmdVersion.c, cmdWhatis.c, cmdXResource.c, config/.gitignore, config/emtcl.m4, config/tcl.m4, configure.ac, contrib/modules.ebuild, cvs2cl.pl, error.c, etc/.gitignore, etc/Makefile.am, etc/README, etc/add.modules.in, etc/global/.gitignore, etc/global/bashrc.in, etc/global/csh.cshrc.in, etc/global/csh.login.in, etc/global/csh.modules.in, etc/global/profile.in, etc/global/profile.modules.in, etc/mkroot.in, etc/skel/.cshrc.in, etc/skel/.gitignore, etc/skel/.kshenv.in, etc/skel/.login.in, etc/skel/.profile.in, ext/.gitignore, ext/Makefile.am, ext/README, ext/add.ext.in, ext/common/.cshrc.in, ext/common/.gitignore, ext/common/.kshenv.in, ext/common/.login.in, ext/common/.profile.in, ext/mkroot.in, ext/skel/.cshrc.ext, ext/skel/.kshenv.ext, ext/skel/.login.ext, ext/skel/.modules, ext/skel/.profile.ext, getopt.c, getopt.h, init.c, init/.gitignore, init/.modulespath.in, init/Makefile.am, init/bash.in, init/bash_completion.in, init/cmake.in, init/csh.in, init/ksh.in, init/perl.pm.in, init/python.py.in, init/ruby.rb.in, init/sh.in, init/zsh.in, locate_module.c, main.c, modules.lsm.in, modules_def.h, ovec.c, ovec.h, po/.cvsignore, po/ChangeLog, po/LINGUAS, po/Makevars, po/POTFILES.in, testsuite/.gitignore, testsuite/config/unix.exp, testsuite/etc/.gitignore, testsuite/etc/bad, testsuite/etc/empty, testsuite/etc/modulerc, testsuite/home/.gitignore, testsuite/home/.modulerc, testsuite/home/.modules.save, testsuite/modulefiles.deep/modulerc/.modulerc, testsuite/modulefiles.deep/modulerc/dir1/.modulerc, testsuite/modulefiles.deep/modulerc/dir1/1.0, testsuite/modulefiles.deep/modulerc/dir1/2.0, testsuite/modulefiles.deep/modulerc/dir2/.modulerc, .../modulefiles.deep/modulerc/dir2/1.0/.modulerc, testsuite/modulefiles.deep/modulerc/dir2/1.0/rc1, testsuite/modulefiles.deep/modulerc/dir2/1.0/rc2, testsuite/modulefiles.deep/modulerc/dir2/2.0, testsuite/modulefiles.deep/modulerc/dir2/3.0, testsuite/modulefiles.deep/plain/dir1/1.0, testsuite/modulefiles.deep/plain/dir1/2.0, testsuite/modulefiles.deep/plain/dir2/1.0, testsuite/modulefiles.deep/plain/dir2/2.0, testsuite/modulefiles.deep/version/.version, testsuite/modulefiles.deep/version/dir1/.version, testsuite/modulefiles.deep/version/dir1/1.0, testsuite/modulefiles.deep/version/dir1/2.0, testsuite/modulefiles.deep/version/dir2/.version, testsuite/modulefiles.deep/version/dir2/1.0, .../modulefiles.deep/version/dir2/2.0/.version, testsuite/modulefiles.deep/version/dir2/2.0/rc1, testsuite/modulefiles.deep/version/dir2/2.0/rc2, testsuite/modulefiles.deep/version/dir2/3.0, testsuite/modulefiles.other/1.1/version, testsuite/modulefiles.other/1.2/version, testsuite/modulefiles.other/1.3/version, testsuite/modulefiles.other/README, testsuite/modulefiles/README, testsuite/modulefiles/alias/1.0, testsuite/modulefiles/alias/2.0, testsuite/modulefiles/append/0.1, testsuite/modulefiles/append/0.2, testsuite/modulefiles/append/1.0, testsuite/modulefiles/append/1.1, testsuite/modulefiles/append/2.0, testsuite/modulefiles/append/2.1, testsuite/modulefiles/append/2.2, testsuite/modulefiles/break/1.0, testsuite/modulefiles/break/2.0, testsuite/modulefiles/break/3.0, testsuite/modulefiles/break/4.0, testsuite/modulefiles/chdir/1.0, testsuite/modulefiles/chdir/2.0, testsuite/modulefiles/chdir/3.0, testsuite/modulefiles/chdir/4.0, testsuite/modulefiles/conflict/full, testsuite/modulefiles/conflict/module, testsuite/modulefiles/continue/1.0, testsuite/modulefiles/continue/2.0, testsuite/modulefiles/continue/3.0, testsuite/modulefiles/continue/4.0, testsuite/modulefiles/empty/1.0, testsuite/modulefiles/eschars/1.0, testsuite/modulefiles/exit/1.0, testsuite/modulefiles/exit/2.0, testsuite/modulefiles/exit/3.0, testsuite/modulefiles/help/2.0, testsuite/modulefiles/info/isloaded, testsuite/modulefiles/info/mode1, testsuite/modulefiles/info/mode2, testsuite/modulefiles/info/mode3, testsuite/modulefiles/info/mode4, testsuite/modulefiles/info/mode5, testsuite/modulefiles/info/mode6, testsuite/modulefiles/info/name, testsuite/modulefiles/info/shells, testsuite/modulefiles/info/shellsexp, testsuite/modulefiles/info/user, testsuite/modulefiles/info/userexp, testsuite/modulefiles/loc_dv1/1.0, testsuite/modulefiles/loc_dv1/2.0, testsuite/modulefiles/loc_dv1/3.0, testsuite/modulefiles/loc_dv2/.version, testsuite/modulefiles/loc_dv2/1.0, testsuite/modulefiles/loc_dv2/2.0, testsuite/modulefiles/loc_dv3/.version, testsuite/modulefiles/loc_dv3/1.0, testsuite/modulefiles/loc_dv3/2.0, testsuite/modulefiles/loc_dv4/.version, testsuite/modulefiles/loc_dv4/1.0, testsuite/modulefiles/loc_dv4/2.0, testsuite/modulefiles/loc_dv6/1.0, testsuite/modulefiles/loc_dv6/2.0/1.0, testsuite/modulefiles/loc_dv7/.version, testsuite/modulefiles/loc_dv7/1.0, testsuite/modulefiles/loc_dv7/2.0/1.0, testsuite/modulefiles/loc_dv7/3.0, testsuite/modulefiles/loc_dv8/.version, testsuite/modulefiles/loc_dv8/1.0, testsuite/modulefiles/loc_dv8/2.0, testsuite/modulefiles/loc_fq/1.0, testsuite/modulefiles/loc_fq/2.0, testsuite/modulefiles/loc_rc1/.modulerc, testsuite/modulefiles/loc_rc1/1.0, testsuite/modulefiles/loc_rc1/2.0, testsuite/modulefiles/loc_rc2/.modulerc, testsuite/modulefiles/loc_rc2/1.0, testsuite/modulefiles/loc_rc2/2.0, testsuite/modulefiles/loc_rc3/.modulerc, testsuite/modulefiles/loc_rc3/1.0, testsuite/modulefiles/loc_rc3/2.0, testsuite/modulefiles/loc_rc3/3.0, testsuite/modulefiles/loc_rc4/.modulerc, testsuite/modulefiles/loc_rc4/.version, testsuite/modulefiles/loc_rc4/1.0, testsuite/modulefiles/loc_rc4/2.0, testsuite/modulefiles/loc_rc4/3.0, testsuite/modulefiles/loc_rc5/.modulerc, testsuite/modulefiles/loc_rc5/1.0, testsuite/modulefiles/loc_rc5/2.0, testsuite/modulefiles/loc_sym/1.0, testsuite/modulefiles/loc_sym/alias1, testsuite/modulefiles/loc_sym/alias2, testsuite/modulefiles/loc_sym/alias3, testsuite/modulefiles/loc_sym/alias4, testsuite/modulefiles/loc_sym/alias5, testsuite/modulefiles/loc_sym/alias6, testsuite/modulefiles/loc_sym/exec1, testsuite/modulefiles/loc_sym/exec2, testsuite/modulefiles/loc_sym/getvers1, testsuite/modulefiles/loc_sym/getvers2, testsuite/modulefiles/loc_sym/getvers3, testsuite/modulefiles/loc_sym/getvers4, testsuite/modulefiles/loc_sym/getvers5, testsuite/modulefiles/loc_sym/getvers6, testsuite/modulefiles/loc_sym/getvers7, testsuite/modulefiles/loc_sym/getvers8, testsuite/modulefiles/loc_sym/versinf1, testsuite/modulefiles/loc_sym/versinf2, testsuite/modulefiles/loc_sym/versinf3, testsuite/modulefiles/loc_sym/versinf4, testsuite/modulefiles/loc_sym/versinf5, testsuite/modulefiles/loc_sym/versinf6, testsuite/modulefiles/loc_sym/versinf7, testsuite/modulefiles/loc_sym/version1, testsuite/modulefiles/loc_sym/version10, testsuite/modulefiles/loc_sym/version11, testsuite/modulefiles/loc_sym/version12, testsuite/modulefiles/loc_sym/version13, testsuite/modulefiles/loc_sym/version14, testsuite/modulefiles/loc_sym/version2, testsuite/modulefiles/loc_sym/version3, testsuite/modulefiles/loc_sym/version4, testsuite/modulefiles/loc_sym/version5, testsuite/modulefiles/loc_sym/version6, testsuite/modulefiles/loc_sym/version7, testsuite/modulefiles/loc_sym/version8, testsuite/modulefiles/loc_sym/version9, testsuite/modulefiles/log/badfac, testsuite/modulefiles/log/err_both_1, testsuite/modulefiles/log/err_both_2, testsuite/modulefiles/log/err_file, testsuite/modulefiles/log/err_syslog, testsuite/modulefiles/module/2.0, testsuite/modulefiles/prepend/0.1, testsuite/modulefiles/prepend/0.2, testsuite/modulefiles/prepend/1.0, testsuite/modulefiles/prepend/1.1, testsuite/modulefiles/prepend/2.0, testsuite/modulefiles/prepend/2.1, testsuite/modulefiles/prepend/2.2, testsuite/modulefiles/prereq/full, testsuite/modulefiles/prereq/module, testsuite/modulefiles/recurs/modA, testsuite/modulefiles/recurs/modB, testsuite/modulefiles/remove/2.0, testsuite/modulefiles/setenv/1.0, testsuite/modulefiles/system/2.0, testsuite/modulefiles/trace/all_off, testsuite/modulefiles/trace/all_on, testsuite/modulefiles/uname/domain, testsuite/modulefiles/uname/machine, testsuite/modulefiles/uname/nodename, testsuite/modulefiles/uname/release, testsuite/modulefiles/uname/sysname, testsuite/modulefiles/uname/version, testsuite/modulefiles/unsetenv/0.9, testsuite/modulefiles/unsetenv/1.0, testsuite/modulefiles/use/.version, testsuite/modulefiles/use/1.0, testsuite/modulefiles/use/2.0, testsuite/modulefiles/use/2.1, testsuite/modulefiles/use/2.2, testsuite/modulefiles/user/adv, testsuite/modulefiles/user/advanced, testsuite/modulefiles/user/exp, testsuite/modulefiles/user/expert, testsuite/modulefiles/user/nov, testsuite/modulefiles/user/novice, testsuite/modulefiles/user/undef, testsuite/modulefiles/verbose/msg, testsuite/modulefiles/verbose/off, testsuite/modulefiles/verbose/on, testsuite/modulefiles/verbose/undef, testsuite/modulefiles/versions/1.1, testsuite/modulefiles/versions/1.2, testsuite/modulefiles/versions/1.3, testsuite/modulefiles/whatis/lines, testsuite/modulefiles/whatis/multiple, testsuite/modulefiles/whatis/none, testsuite/modulefiles/whatis/single, testsuite/modulefiles/whatis/string, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/006-procs.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.00-init/015-version.exp, testsuite/modules.00-init/030-shells.exp, testsuite/modules.00-init/050-modpath.exp, testsuite/modules.00-init/080-begenv.exp, testsuite/modules.00-init/090-switches.exp, testsuite/modules.10-use/010-init_ts.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/040-load.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.20-locate/010-init_ts.exp, testsuite/modules.20-locate/020-fqual.exp, testsuite/modules.20-locate/030-defvers.exp, testsuite/modules.20-locate/040-alias.exp, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.20-locate/046-getsym.exp, testsuite/modules.20-locate/047-symerrs.exp, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/055-locrcerrs.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/065-rcerrs.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.20-locate/095-cleanup.exp, testsuite/modules.30-userlvl/010-init_ts.exp, testsuite/modules.30-userlvl/030-novice.exp, testsuite/modules.30-userlvl/035-nov.exp, testsuite/modules.30-userlvl/040-advanced.exp, testsuite/modules.30-userlvl/045-adv.exp, testsuite/modules.30-userlvl/050-expert.exp, testsuite/modules.30-userlvl/055-exp.exp, testsuite/modules.30-userlvl/090-undef.exp, testsuite/modules.50-cmds/010-init_ts.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/020-setenv.exp, testsuite/modules.50-cmds/022-setenv-eschars.exp, testsuite/modules.50-cmds/025-setenv-undo.exp, testsuite/modules.50-cmds/030-unsetenv.exp, testsuite/modules.50-cmds/035-unsetenv-undo.exp, testsuite/modules.50-cmds/036-unsetenv-x.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/070-alias-proc.exp, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/076-alias-sub.exp, testsuite/modules.50-cmds/077-alias-undo.exp, testsuite/modules.50-cmds/078-refresh.exp, testsuite/modules.50-cmds/080-info-name.exp, testsuite/modules.50-cmds/081-info-user.exp, testsuite/modules.50-cmds/082-info-user-exp.exp, testsuite/modules.50-cmds/083-info-mode.exp, testsuite/modules.50-cmds/084-info-mode-exp.exp, testsuite/modules.50-cmds/085-info-flags.exp, testsuite/modules.50-cmds/086-info-shells.exp, testsuite/modules.50-cmds/087-info-shells-exp.exp, testsuite/modules.50-cmds/088-info-isloaded.exp, testsuite/modules.50-cmds/090-uname-proc.exp, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/099-uname-cleanup.exp, testsuite/modules.50-cmds/100-loglevel.exp, testsuite/modules.50-cmds/101-badfac.exp, testsuite/modules.50-cmds/110-verbose.exp, testsuite/modules.50-cmds/115-verbose-msg.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp, testsuite/modules.50-cmds/140-system.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/172-swap-app-delim.exp, testsuite/modules.50-cmds/173-swap-app-delim.exp, testsuite/modules.50-cmds/175-swap2.exp, testsuite/modules.50-cmds/177-swap-prep-delim.exp, testsuite/modules.50-cmds/178-swap-prep-delim.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/195-load-recurs.exp, testsuite/modules.50-cmds/200-break.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/220-continue.exp, testsuite/modules.50-cmds/230-loop.exp, testsuite/modules.50-cmds/240-chdir.exp, testsuite/modules.50-cmds/999-cleanup.exp, testsuite/modules.60-initx/005-init.exp, testsuite/modules.60-initx/010-list.exp, testsuite/modules.60-initx/020-add.exp, testsuite/modules.60-initx/030-switch.exp, testsuite/modules.60-initx/040-prepend.exp, testsuite/modules.60-initx/050-rm.exp, testsuite/modules.60-initx/060-2nd.exp, testsuite/modules.60-initx/095-cleanup.exp, testsuite/modules.70-maint/010-init_ts.exp, testsuite/modules.70-maint/020-update.exp, testsuite/modules.70-maint/030-purge.exp, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/043-listno.exp, testsuite/modules.70-maint/045-listlong.exp, testsuite/modules.70-maint/048-listlongno.exp, testsuite/modules.70-maint/050-whatis-load.exp, testsuite/modules.70-maint/055-whatis.exp, testsuite/modules.70-maint/060-apropos.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/095-cleanup.exp, testsuite/modules.80-deep/010-init_ts.exp, testsuite/modules.80-deep/020-load.exp, testsuite/modules.80-deep/030-display.exp, testsuite/modules.80-deep/040-list.exp, testsuite/modules.80-deep/999-cleanup.exp, testsuite/modules.90-avail/010-init_ts.exp, testsuite/modules.90-avail/020-single.exp, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/050-long.exp, testsuite/modules.90-avail/060-empty.exp, testsuite/modules.95-version/010-init_ts.exp, testsuite/modules.95-version/020-load.exp, testsuite/modules.95-version/020-unload.exp, testsuite/modules.95-version/022-load2.exp, testsuite/modules.95-version/022-unload2.exp, testsuite/modules.95-version/040-xgetenv.exp, testsuite/modules.95-version/999-cleanup.exp, testsuite/not_installed, testsuite/systest, utility.c, utilmem.c, utilobj.c, uvec.c, uvec.h, version.c: Removed all of the non tcl version stuff. Or most of it anyway. Kent 2012-11-30 Kent Mein <mein@cs.umn.edu> * tcl/init/Makefile: Remove some unneeded complication to the Makefile since were not using cvs anymore. Kent 2012-11-19 R.K. Owen <rk@owen.sj.ca.us> * LICENSE.GPL, LICENSE.LGPL, NEWS: Rolled in the recent LICENSE.GPL address change, and the same to the the LICENSE.LGPL. 2012-11-12 R.K. Owen <rk@owen.sj.ca.us> * ModuleCmd_Init.c, NEWS, cmdXResource.c, utility.c: Rolled in the following patch * Fixed the segfault problem with Tcl_RegExpCompile() (Kenneth Hoste, Tyson Whitehead) 2012-11-08 R.K. Owen <rk@owen.sj.ca.us> * ModuleCmd_Avail.c, NEWS, configure.ac, doc/module.1.in, doc/modulefile.4.in: Rolled in the increased Update buffer and using the locale for Avail. 2012-11-05 R.K. Owen <rk@owen.sj.ca.us> * ModuleCmd_Update.c, NEWS: * Increased the "update" buffer (Leon Kos) rolled into main branch. 2012-11-01 R.K. Owen <rk@owen.sj.ca.us> * ovec.h, uvec.h: Remove the $Id$ lines from the header files. * .gitattributes, Makefile.am, ModuleCmd_Avail.c, ModuleCmd_Clear.c, ModuleCmd_Display.c, ModuleCmd_Help.c, ModuleCmd_Init.c, ModuleCmd_List.c, ModuleCmd_Load.c, ModuleCmd_Purge.c, ModuleCmd_Refresh.c, ModuleCmd_Switch.c, ModuleCmd_Update.c, ModuleCmd_Use.c, ModuleCmd_Whatis.c, cmdAlias.c, cmdChdir.c, cmdConflict.c, cmdInfo.c, cmdIsLoaded.c, cmdLog.c, cmdMisc.c, cmdModule.c, cmdPath.c, cmdSetenv.c, cmdUlvl.c, cmdUname.c, cmdVerbose.c, cmdVersion.c, cmdWhatis.c, cmdXResource.c, configure.ac, error.c, etc/Makefile.am, etc/add.modules.in, ext/Makefile.am, ext/add.ext.in, getopt.c, init.c, init/.modulespath.in, init/Makefile.am, locate_module.c, main.c, modulefiles/Makefile.am, ovec.c, utility.c, utilmem.c, utilobj.c, uvec.c: Changing to the git $Id$ 2012-10-30 R.K. Owen <rk@owen.sj.ca.us> * .cvsignore => .gitignore, NEWS, TODO, cmdPath.c, config/{.cvsignore => .gitignore}, doc/{.cvsignore => .gitignore}, etc/{.cvsignore => .gitignore}, etc/global/{.cvsignore => .gitignore}, etc/skel/{.cvsignore => .gitignore}, ext/{.cvsignore => .gitignore}, ext/common/{.cvsignore => .gitignore}, init/{.cvsignore => .gitignore}, modulefiles/{.cvsignore => .gitignore}, modulefiles/lang/{.cvsignore => .gitignore}, tcl/init/{.cvsignore => .gitignore}, testsuite/{.cvsignore => .gitignore}, testsuite/etc/{.cvsignore => .gitignore}, testsuite/home/{.cvsignore => .gitignore}, testsuite/modulefiles/append/1.1, testsuite/modulefiles/prepend/1.1, testsuite/modulefiles/recurs/modA, testsuite/modulefiles/recurs/modB, testsuite/modules.50-cmds/085-info-flags.exp, testsuite/modules.50-cmds/172-swap-app-delim.exp, testsuite/modules.50-cmds/173-swap-app-delim.exp, testsuite/modules.50-cmds/177-swap-prep-delim.exp, testsuite/modules.50-cmds/178-swap-prep-delim.exp, testsuite/modules.50-cmds/195-load-recurs.exp: Rolled in the fix by Tyson Whitehead for the "module swap" with the --delim option 2012-10-29 R.K. Owen <rk@owen.sj.ca.us> * testsuite/modules.50-cmds/172-seap-app-delim.exp: Bad file name. * .gitignore, NEWS, cmdPath.c, testsuite/modulefiles/append/1.1, testsuite/modulefiles/prepend/1.1, testsuite/modules.50-cmds/172-seap-app-delim.exp, testsuite/modules.50-cmds/172-swap-app-delim.exp, testsuite/modules.50-cmds/173-swap-app-delim.exp, testsuite/modules.50-cmds/177-swap-prep-delim.exp, testsuite/modules.50-cmds/178-swap-prep-delim.exp: * Fix the module swap with the --delim option (Tyson Whitehead) 2012-10-25 R.K. Owen <rk@owen.sj.ca.us> * .cvsignore => .gitignore, config/{.cvsignore => .gitignore}, doc/{.cvsignore => .gitignore}, etc/{.cvsignore => .gitignore}, etc/global/{.cvsignore => .gitignore}, etc/skel/{.cvsignore => .gitignore}, ext/{.cvsignore => .gitignore}, ext/common/{.cvsignore => .gitignore}, init/{.cvsignore => .gitignore}, modulefiles/{.cvsignore => .gitignore}, tcl/init/{.cvsignore => .gitignore}, testsuite/{.cvsignore => .gitignore}, testsuite/etc/{.cvsignore => .gitignore}, testsuite/home/{.cvsignore => .gitignore}: Moved the .cvsignore files to .gitignore * version.c: Check whether the bash shell is interactive or not Fixed a typo in the perl init script Trivial change to the version variable. * version.c: Trivial change to the version variable. 2012-09-10 sirdude <sirdude> * tcl/modulecmd.tcl: A couple of small patches by Thomas Zeiser thomas.zeiser@rrze.uni-erlangen.de The first one adds some checks to make sure a directory is readable before trying to read it. The second reverses the order of perging modules so that they are removed last to first, which maybe seems more intuitive? Kent 2012-05-17 rkowen <rkowen> * ModuleCmd_Load.c, NEWS, modules_def.h, testsuite/modulefiles/recurs/modA, testsuite/modulefiles/recurs/modB, testsuite/modules.50-cmds/085-info-flags.exp, testsuite/modules.50-cmds/195-load-recurs.exp: * Fix the flags with regards to recursive load/unload 2012-04-11 rkowen <rkowen> * configure.ac: Fixed syntax error. 2012-03-20 sirdude <sirdude> * tcl/modulecmd.tcl: Modify getenv so it returns _UNDEFINED_ instead of erroring if the environment variable is not defined. Also changed the display option so it returns $varname instead of [getenv $varname] Kent 2012-03-19 sirdude <sirdude> * tcl/init/.cvsignore, tcl/modulecmd.tcl: Added a getenv function on the suggestion of a few people on the mailing list. Thanks go to: Mark Lakata, Paul FM and Roberto Beccer Let me know if there are any problems with it. I also snuck in a ignore line for .gitignore so I can use git locally, and fixed some minor whitespace issues. Kent Mein 2011-12-13 rkowen <rkowen> * ModuleCmd_Update.c, testsuite/modules.70-maint/020-update.exp: Fixed the update test, and cleaned up the update code a bit. 2011-12-01 rkowen <rkowen> * main.c, utility.c: Fixed some memory issues. * ModuleCmd_Purge.c, ModuleCmd_Update.c, ModuleCmd_Use.c, cmdPath.c, cmdSetenv.c, configure.ac, testsuite/modules.00-init/080-begenv.exp, utility.c: Rolled in the recent 3-2-9 changes with regard to checks of the EMGetEnv resulting pointers. 2011-11-29 rkowen <rkowen> * ModuleCmd_Whatis.c: Fixed a memory error in the whatis part. 2011-11-28 rkowen <rkowen> * utility.c: Make sure a char *ptr is initialized to NULL. * ModuleCmd_Purge.c, ModuleCmd_Update.c, ModuleCmd_Use.c, NEWS, cmdPath.c, cmdSetenv.c, testsuite/modules.00-init/080-begenv.exp, utility.c, version.c: Test ptrs yielded by EMGetEnv. 2011-11-22 rkowen <rkowen> * testsuite/modules.00-init/010-environ.exp, utility.c: Found why the --with-split-size option was producing extra "unsetenv _LMFILES_000". 2011-11-21 rkowen <rkowen> * testsuite/modules.00-init/010-environ.exp, testsuite/modules.10-use/040-load.exp, testsuite/modules.20-locate/040-alias.exp, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.20-locate/046-getsym.exp, testsuite/modules.20-locate/047-symerrs.exp, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.30-userlvl/040-advanced.exp, testsuite/modules.30-userlvl/045-adv.exp, testsuite/modules.30-userlvl/050-expert.exp, testsuite/modules.30-userlvl/055-exp.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/020-setenv.exp, testsuite/modules.50-cmds/022-setenv-eschars.exp, testsuite/modules.50-cmds/030-unsetenv.exp, testsuite/modules.50-cmds/036-unsetenv-x.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/076-alias-sub.exp, testsuite/modules.50-cmds/080-info-name.exp, testsuite/modules.50-cmds/086-info-shells.exp, testsuite/modules.50-cmds/087-info-shells-exp.exp, testsuite/modules.50-cmds/088-info-isloaded.exp, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/110-verbose.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp, testsuite/modules.50-cmds/140-system.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/175-swap2.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/200-break.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/220-continue.exp, testsuite/modules.50-cmds/230-loop.exp, testsuite/modules.50-cmds/240-chdir.exp, testsuite/modules.70-maint/050-whatis-load.exp, testsuite/modules.80-deep/020-load.exp, testsuite/modules.95-version/020-load.exp, testsuite/modules.95-version/020-unload.exp, testsuite/modules.95-version/022-load2.exp, testsuite/modules.95-version/022-unload2.exp, testsuite/modules.95-version/040-xgetenv.exp, testsuite/modules.95-version/999-cleanup.exp: Have the testsuite handle when configured with --with-split-size, but it's assumed large enough to not split _LMFILES_ in the tests. * utility.c: Further checks for empty environment variables from EMGetEnv() for _LMFILES_%d 2011-11-15 rkowen <rkowen> * utility.c: Fixed --with-split-size problem with _LMFILES_NNN. 2011-11-11 rkowen <rkowen> * ChangeLog: Updated * ModuleCmd_List.c, ModuleCmd_Purge.c, ModuleCmd_Refresh.c, ModuleCmd_Update.c, ModuleCmd_Use.c, NEWS, cmdPath.c, cmdSetenv.c, init.c, modules_def.h, utility.c: Merged in the TclGetEnv/TclSetEnv fix from 3.2.9. * version.c: Reset version to 3.2.9 not 3.2.9a. * ChangeLog: Updated. * ModuleCmd_Purge.c, ModuleCmd_Update.c, ModuleCmd_Use.c, NEWS, cmdPath.c, cmdSetenv.c, init.c, modules_def.h, utility.c, version.c: Crucial bug fix ... TclGetEnv/TclSetEnv are Tcl routines, so renamed these to EMGetEnv/EMSetEnv. Fix due to Orion Poplawski. 2011-11-10 rkowen <rkowen> * ChangeLog, NEWS: Updated with current 3.2.9 info. * ChangeLog: Update for distribution. * ChangeLog, NEWS, version.c: Preparation for distribution. 2011-10-24 rkowen <rkowen> * NEWS, cmdPath.c: * Removed the RegExp code from cmdPath.c (Poor Yorick) 2011-10-17 rkowen <rkowen> * Makefile.am, NEWS, init.c, init/Makefile.am, init/ruby.rb.in, utility.c: Rolled in the ruby addition from Tammo Tjarks. * Makefile.am, NEWS, init.c, init/Makefile.am, init/ruby.rb.in, utility.c: * Added support for Ruby (Tammo Tjarks) 2011-10-13 rkowen <rkowen> * ModuleCmd_List.c, ModuleCmd_Load.c, ModuleCmd_Refresh.c, ModuleCmd_Switch.c, NEWS, cmdConflict.c, cmdIsLoaded.c, cmdSetenv.c, init.c, modulefiles/module-info.in, modules_def.h, utility.c: * Fixed unload & load of same module problem (Bug 3211669). 2011-10-13 sirdude <sirdude> * tcl/testsuite/modules.10-use/030-use.exp, tcl/testsuite/modules.10-use/031-append.exp, tcl/testsuite/modules.10-use/040-load.exp, tcl/testsuite/modules.10-use/070-unuse.exp, tcl/testsuite/modules.50-cmds/015-use.exp, tcl/testsuite/modules.50-cmds/020-setenv.exp, tcl/testsuite/modules.50-cmds/030-unsetenv.exp, tcl/testsuite/modules.50-cmds/040-append.exp, tcl/testsuite/modules.50-cmds/140-system.exp, tcl/testsuite/modules.80-deep/020-load.exp, tcl/testsuite/modules.80-deep/030-display.exp, tcl/testsuite/modules.90-avail/020-single.exp, tcl/testsuite/modules.90-avail/030-multiple.exp, tcl/testsuite/modules.90-avail/040-wild.exp, tcl/testsuite/modules.90-avail/050-long.exp, tcl/testsuite/modules.90-avail/060-empty.exp, tcl/testsuite/modules.95-version/020-load.exp, tcl/testsuite/modules.95-version/020-unload.exp, tcl/testsuite/modules.95-version/022-load2.exp, tcl/testsuite/modules.95-version/022-unload2.exp, tcl/testsuite/modules.95-version/040-xgetenv.exp: Added a couple of other tests Also added terminators to the end of the regex tests... Kent 2011-10-11 sirdude <sirdude> * tcl/modulecmd.tcl: Remove outer loop for aliases in csh/sh type shells and fix it so sh shells us unalias Kent 2011-10-10 rkowen <rkowen> * cmdInfo.c: Even though "trace" is no longer used ... should still have module-info still respond with "*undef*", so older modulefiles can still be processed without a Tcl error. 2011-10-07 sirdude <sirdude> * tcl/testsuite/modules.50-cmds/020-setenv.exp, tcl/testsuite/modules.50-cmds/030-unsetenv.exp: Added some additional tests that I have converted. Still a lot of tests to add... Kent * tcl/testsuite/modules.90-avail/050-long.exp: Fix this test for the tcl version. Kent * tcl/modulecmd.tcl: This is a patch provided by Wilson Snyder to fix up the regsub statements I also silenced a few warnings produced by nagelfar(a syntax checker for tcl) Basically it simplified a couple of the if statements by using a temp variable. Kent 2011-10-06 rkowen <rkowen> * cmdConflict.c: Fixed bug-3300132 prereq error format problem. * cmdConflict.c: Fixed bug-3300132 prereq error format problem. * ModuleCmd_Display.c, ModuleCmd_Help.c, ModuleCmd_Load.c, ModuleCmd_Purge.c, ModuleCmd_Refresh.c, ModuleCmd_Update.c, ModuleCmd_Use.c, ModuleCmd_Whatis.c, NEWS, cmdPath.c, cmdSetenv.c, init.c, modules_def.h, utility.c, utilmem.c: * Fixed the "module purge" memory corruption (Poor Yorick). * Isolated calls to the new interpreter and get & set env.vars. * NEWS, cmdPath.c, utility.c: * Fixed the module purge corruption (Poor Yorick) * NEWS: Updated with module purge fix 2011-10-03 rkowen <rkowen> * cmdPath.c, utility.c: Rolled in Poor Yorick's changes to Remove_Path() which fixes the memory corruption of "module purge". * ModuleCmd_Avail.c, ModuleCmd_Update.c, NEWS, cmdLog.c, cmdVersion.c, cmdWhatis.c, error.c, locate_module.c, modules_def.h, utility.c: * Optionally use Tcl memory check routines for malloc/realloc. * ModuleCmd_Display.c, ModuleCmd_Help.c, ModuleCmd_Load.c, ModuleCmd_Purge.c, ModuleCmd_Refresh.c, ModuleCmd_Update.c, ModuleCmd_Use.c, ModuleCmd_Whatis.c, NEWS, cmdPath.c, cmdSetenv.c, init.c, modules_def.h, utility.c: * Isolated calls to the new interpreter and get & set env.vars. 2011-09-29 rkowen <rkowen> * testsuite/config/unix.exp: Simplified the comp_output procedure ... due to Poor Yorick. * cmdPath.c: Change the strcpy to memmove because of possible memory overlap. 2011-09-19 rkowen <rkowen> * configure.ac: Removed the explicit call to AM_PO_SUBDIRS, which is already invoked by the AM_GNU_GETTEXT. Patch thanks to "Poor Yorick". 2011-09-13 sirdude <sirdude> * tcl/modulecmd.tcl: Patch from Andy Wettstein so that aliases work again with bash and other sh like shells. Kent 2011-08-12 sirdude <sirdude> * tcl/modulecmd.tcl: Fix provided by Thomas Zeiser. ( A missing ; ) Kent 2011-06-17 sirdude <sirdude> * tcl/modulecmd.tcl: Patch by Larry Baker to bring the tcl version more inline with the c version. Kent 2011-05-13 sirdude <sirdude> * tcl/modulecmd.tcl: Patch by Larry Baker to add a 'module aliases' command. Kent 2011-05-10 sirdude <sirdude> * tcl/Makefile, tcl/README.txt, tcl/init/Makefile, tcl/windows/module-tcl-win.chm, tcl/windows/module.cmd, tcl/windows/moduleinit.cmd: This commit is for the tcl version of modules, it does some additional work on windows It updates the README file which was pretty sparse It also redoes the Makefiles so that it will build a default modulerc file if it doesn't exist. Kent * tcl/modulecmd.tcl: This should fix bug# 3097451 I haven't tested it to make sure and the code needs more work but it's a start. Kent 2011-04-27 sirdude <sirdude> * tcl/modulecmd.tcl: Patch from Kwee Heong Tan This provides better support under windows. There is still more work to do here. Kent 2011-04-06 sirdude <sirdude> * tcl/testsuite/modules.10-use/040-load.exp, tcl/testsuite/modules.50-cmds/010-init_ts.exp, tcl/testsuite/modules.50-cmds/015-use.exp, tcl/testsuite/modules.50-cmds/999-cleanup.exp, tcl/testsuite/modules.95-version/010-init_ts.exp, tcl/testsuite/modules.95-version/020-load.exp, tcl/testsuite/modules.95-version/020-unload.exp, tcl/testsuite/modules.95-version/022-load2.exp, tcl/testsuite/modules.95-version/022-unload2.exp, tcl/testsuite/modules.95-version/040-xgetenv.exp, tcl/testsuite/modules.95-version/999-cleanup.exp: More test files for tcl version of modules. Kent 2011-03-22 sirdude <sirdude> * tcl/modulecmd.tcl: Small patch from Wilson Snyder to improve python support. Kent 2011-03-15 sirdude <sirdude> * tcl/init/csh.in, tcl/init/tcsh.in: Fix up the calls to the command so its not doing variable substitution all of the time. Kent * tcl/Makefile, tcl/testsuite/config/unix.exp, tcl/testsuite/etc/bad, tcl/testsuite/etc/empty, tcl/testsuite/etc/modulerc, tcl/testsuite/home/.modulerc, tcl/testsuite/home/.modules, tcl/testsuite/home/.modules.save, tcl/testsuite/modulefiles.deep/modulerc/.modulerc, .../modulefiles.deep/modulerc/dir1/.modulerc, tcl/testsuite/modulefiles.deep/modulerc/dir1/1.0, tcl/testsuite/modulefiles.deep/modulerc/dir1/2.0, .../modulefiles.deep/modulerc/dir2/.modulerc, .../modulefiles.deep/modulerc/dir2/1.0/.modulerc, .../modulefiles.deep/modulerc/dir2/1.0/rc1, .../modulefiles.deep/modulerc/dir2/1.0/rc2, tcl/testsuite/modulefiles.deep/modulerc/dir2/2.0, tcl/testsuite/modulefiles.deep/modulerc/dir2/3.0, tcl/testsuite/modulefiles.deep/plain/dir1/1.0, tcl/testsuite/modulefiles.deep/plain/dir1/2.0, tcl/testsuite/modulefiles.deep/plain/dir2/1.0, tcl/testsuite/modulefiles.deep/plain/dir2/2.0, tcl/testsuite/modulefiles.deep/version/.version, .../modulefiles.deep/version/dir1/.version, tcl/testsuite/modulefiles.deep/version/dir1/1.0, tcl/testsuite/modulefiles.deep/version/dir1/2.0, .../modulefiles.deep/version/dir2/.version, tcl/testsuite/modulefiles.deep/version/dir2/1.0, .../modulefiles.deep/version/dir2/2.0/.version, .../modulefiles.deep/version/dir2/2.0/rc1, .../modulefiles.deep/version/dir2/2.0/rc2, tcl/testsuite/modulefiles.deep/version/dir2/3.0, tcl/testsuite/modulefiles.other/1.1/version, tcl/testsuite/modulefiles.other/1.2/version, tcl/testsuite/modulefiles.other/1.3/version, tcl/testsuite/modulefiles.other/README, tcl/testsuite/modulefiles/README, tcl/testsuite/modulefiles/alias/1.0, tcl/testsuite/modulefiles/alias/2.0, tcl/testsuite/modulefiles/append/0.1, tcl/testsuite/modulefiles/append/0.2, tcl/testsuite/modulefiles/append/1.0, tcl/testsuite/modulefiles/append/2.0, tcl/testsuite/modulefiles/append/2.1, tcl/testsuite/modulefiles/append/2.2, tcl/testsuite/modulefiles/break/1.0, tcl/testsuite/modulefiles/break/2.0, tcl/testsuite/modulefiles/break/3.0, tcl/testsuite/modulefiles/break/4.0, tcl/testsuite/modulefiles/chdir/1.0, tcl/testsuite/modulefiles/chdir/2.0, tcl/testsuite/modulefiles/chdir/3.0, tcl/testsuite/modulefiles/chdir/4.0, tcl/testsuite/modulefiles/conflict/full, tcl/testsuite/modulefiles/conflict/module, tcl/testsuite/modulefiles/continue/1.0, tcl/testsuite/modulefiles/continue/2.0, tcl/testsuite/modulefiles/continue/3.0, tcl/testsuite/modulefiles/continue/4.0, tcl/testsuite/modulefiles/empty/1.0, tcl/testsuite/modulefiles/eschars/1.0, tcl/testsuite/modulefiles/exit/1.0, tcl/testsuite/modulefiles/exit/2.0, tcl/testsuite/modulefiles/exit/3.0, tcl/testsuite/modulefiles/help/2.0, tcl/testsuite/modulefiles/info/isloaded, tcl/testsuite/modulefiles/info/mode1, tcl/testsuite/modulefiles/info/mode2, tcl/testsuite/modulefiles/info/mode3, tcl/testsuite/modulefiles/info/mode4, tcl/testsuite/modulefiles/info/mode5, tcl/testsuite/modulefiles/info/mode6, tcl/testsuite/modulefiles/info/name, tcl/testsuite/modulefiles/info/shells, tcl/testsuite/modulefiles/info/shellsexp, tcl/testsuite/modulefiles/info/user, tcl/testsuite/modulefiles/info/userexp, tcl/testsuite/modulefiles/loc_dv1/1.0, tcl/testsuite/modulefiles/loc_dv1/2.0, tcl/testsuite/modulefiles/loc_dv1/3.0, tcl/testsuite/modulefiles/loc_dv2/.version, tcl/testsuite/modulefiles/loc_dv2/1.0, tcl/testsuite/modulefiles/loc_dv2/2.0, tcl/testsuite/modulefiles/loc_dv3/.version, tcl/testsuite/modulefiles/loc_dv3/1.0, tcl/testsuite/modulefiles/loc_dv3/2.0, tcl/testsuite/modulefiles/loc_dv4/.version, tcl/testsuite/modulefiles/loc_dv4/1.0, tcl/testsuite/modulefiles/loc_dv4/2.0, tcl/testsuite/modulefiles/loc_dv6/1.0, tcl/testsuite/modulefiles/loc_dv6/2.0/1.0, tcl/testsuite/modulefiles/loc_dv7/.version, tcl/testsuite/modulefiles/loc_dv7/1.0, tcl/testsuite/modulefiles/loc_dv7/2.0/1.0, tcl/testsuite/modulefiles/loc_dv7/3.0, tcl/testsuite/modulefiles/loc_dv8/.version, tcl/testsuite/modulefiles/loc_dv8/1.0, tcl/testsuite/modulefiles/loc_dv8/2.0, tcl/testsuite/modulefiles/loc_fq/1.0, tcl/testsuite/modulefiles/loc_fq/2.0, tcl/testsuite/modulefiles/loc_rc1/.modulerc, tcl/testsuite/modulefiles/loc_rc1/1.0, tcl/testsuite/modulefiles/loc_rc1/2.0, tcl/testsuite/modulefiles/loc_rc2/.modulerc, tcl/testsuite/modulefiles/loc_rc2/1.0, tcl/testsuite/modulefiles/loc_rc2/2.0, tcl/testsuite/modulefiles/loc_rc3/.modulerc, tcl/testsuite/modulefiles/loc_rc3/1.0, tcl/testsuite/modulefiles/loc_rc3/2.0, tcl/testsuite/modulefiles/loc_rc3/3.0, tcl/testsuite/modulefiles/loc_rc4/.modulerc, tcl/testsuite/modulefiles/loc_rc4/.version, tcl/testsuite/modulefiles/loc_rc4/1.0, tcl/testsuite/modulefiles/loc_rc4/2.0, tcl/testsuite/modulefiles/loc_rc4/3.0, tcl/testsuite/modulefiles/loc_rc5/.modulerc, tcl/testsuite/modulefiles/loc_rc5/1.0, tcl/testsuite/modulefiles/loc_rc5/2.0, tcl/testsuite/modulefiles/loc_sym/1.0, tcl/testsuite/modulefiles/loc_sym/alias1, tcl/testsuite/modulefiles/loc_sym/alias2, tcl/testsuite/modulefiles/loc_sym/alias3, tcl/testsuite/modulefiles/loc_sym/alias4, tcl/testsuite/modulefiles/loc_sym/alias5, tcl/testsuite/modulefiles/loc_sym/alias6, tcl/testsuite/modulefiles/loc_sym/exec1, tcl/testsuite/modulefiles/loc_sym/exec2, tcl/testsuite/modulefiles/loc_sym/getvers1, tcl/testsuite/modulefiles/loc_sym/getvers2, tcl/testsuite/modulefiles/loc_sym/getvers3, tcl/testsuite/modulefiles/loc_sym/getvers4, tcl/testsuite/modulefiles/loc_sym/getvers5, tcl/testsuite/modulefiles/loc_sym/getvers6, tcl/testsuite/modulefiles/loc_sym/getvers7, tcl/testsuite/modulefiles/loc_sym/getvers8, tcl/testsuite/modulefiles/loc_sym/versinf1, tcl/testsuite/modulefiles/loc_sym/versinf2, tcl/testsuite/modulefiles/loc_sym/versinf3, tcl/testsuite/modulefiles/loc_sym/versinf4, tcl/testsuite/modulefiles/loc_sym/versinf5, tcl/testsuite/modulefiles/loc_sym/versinf6, tcl/testsuite/modulefiles/loc_sym/versinf7, tcl/testsuite/modulefiles/loc_sym/version1, tcl/testsuite/modulefiles/loc_sym/version10, tcl/testsuite/modulefiles/loc_sym/version11, tcl/testsuite/modulefiles/loc_sym/version12, tcl/testsuite/modulefiles/loc_sym/version13, tcl/testsuite/modulefiles/loc_sym/version14, tcl/testsuite/modulefiles/loc_sym/version2, tcl/testsuite/modulefiles/loc_sym/version3, tcl/testsuite/modulefiles/loc_sym/version4, tcl/testsuite/modulefiles/loc_sym/version5, tcl/testsuite/modulefiles/loc_sym/version6, tcl/testsuite/modulefiles/loc_sym/version7, tcl/testsuite/modulefiles/loc_sym/version8, tcl/testsuite/modulefiles/loc_sym/version9, tcl/testsuite/modulefiles/log/badfac, tcl/testsuite/modulefiles/log/err_both_1, tcl/testsuite/modulefiles/log/err_both_2, tcl/testsuite/modulefiles/log/err_file, tcl/testsuite/modulefiles/log/err_syslog, tcl/testsuite/modulefiles/module/2.0, tcl/testsuite/modulefiles/prepend/0.1, tcl/testsuite/modulefiles/prepend/0.2, tcl/testsuite/modulefiles/prepend/1.0, tcl/testsuite/modulefiles/prepend/2.0, tcl/testsuite/modulefiles/prepend/2.1, tcl/testsuite/modulefiles/prepend/2.2, tcl/testsuite/modulefiles/prereq/full, tcl/testsuite/modulefiles/prereq/module, tcl/testsuite/modulefiles/remove/2.0, tcl/testsuite/modulefiles/setenv/1.0, tcl/testsuite/modulefiles/system/2.0, tcl/testsuite/modulefiles/trace/all_off, tcl/testsuite/modulefiles/trace/all_on, tcl/testsuite/modulefiles/uname/domain, tcl/testsuite/modulefiles/uname/machine, tcl/testsuite/modulefiles/uname/nodename, tcl/testsuite/modulefiles/uname/release, tcl/testsuite/modulefiles/uname/sysname, tcl/testsuite/modulefiles/uname/version, tcl/testsuite/modulefiles/unsetenv/0.9, tcl/testsuite/modulefiles/unsetenv/1.0, tcl/testsuite/modulefiles/use/.version, tcl/testsuite/modulefiles/use/1.0, tcl/testsuite/modulefiles/use/2.0, tcl/testsuite/modulefiles/use/2.1, tcl/testsuite/modulefiles/use/2.2, tcl/testsuite/modulefiles/user/adv, tcl/testsuite/modulefiles/user/advanced, tcl/testsuite/modulefiles/user/exp, tcl/testsuite/modulefiles/user/expert, tcl/testsuite/modulefiles/user/nov, tcl/testsuite/modulefiles/user/novice, tcl/testsuite/modulefiles/user/undef, tcl/testsuite/modulefiles/verbose/msg, tcl/testsuite/modulefiles/verbose/off, tcl/testsuite/modulefiles/verbose/on, tcl/testsuite/modulefiles/verbose/undef, tcl/testsuite/modulefiles/versions/1.1, tcl/testsuite/modulefiles/versions/1.2, tcl/testsuite/modulefiles/versions/1.3, tcl/testsuite/modulefiles/whatis/lines, tcl/testsuite/modulefiles/whatis/multiple, tcl/testsuite/modulefiles/whatis/none, tcl/testsuite/modulefiles/whatis/single, tcl/testsuite/modulefiles/whatis/string, tcl/testsuite/modules.00-init/005-init_ts.exp, tcl/testsuite/modules.00-init/006-procs.exp, tcl/testsuite/modules.00-init/010-environ.exp, tcl/testsuite/modules.00-init/015-version.exp, tcl/testsuite/modules.00-init/030-shells.exp, tcl/testsuite/modules.00-init/050-modpath.exp, tcl/testsuite/modules.00-init/080-begenv.exp, tcl/testsuite/modules.00-init/090-switches.exp, tcl/testsuite/modules.10-use/010-init_ts.exp, tcl/testsuite/modules.10-use/030-use.exp, tcl/testsuite/modules.10-use/031-append.exp, tcl/testsuite/modules.10-use/040-load.exp, tcl/testsuite/modules.10-use/070-unuse.exp, tcl/testsuite/modules.80-deep/010-init_ts.exp, tcl/testsuite/modules.80-deep/020-load.exp, tcl/testsuite/modules.80-deep/030-display.exp, tcl/testsuite/modules.80-deep/040-list.exp, tcl/testsuite/modules.80-deep/999-cleanup.exp, tcl/testsuite/modules.90-avail/010-init_ts.exp, tcl/testsuite/modules.90-avail/020-single.exp, tcl/testsuite/modules.90-avail/030-multiple.exp, tcl/testsuite/modules.90-avail/040-wild.exp, tcl/testsuite/modules.90-avail/050-long.exp, tcl/testsuite/modules.90-avail/060-empty.exp, tcl/testsuite/not_installed, tcl/testsuite/systest: Finally got testfiles working with the tcl version of modules. There is still lots of work to be done but there are a good number of tests that are working. Currently 80 of 90 are passing. At this point I want to commit before fixing issues which involve modifying the main application. Kent * tcl/modulecmd.tcl: This commit does a couple of things. Bring back the auto determine shell to call(needed for the next commit testsuite) It also removes the need for using a temp file This commit also has a couple of small fixes to make it more like the standard version of modules as far as output to the screen goes. Kent 2011-02-28 sirdude <sirdude> * tcl/modulecmd.tcl: This commit does a few things to modulecmd.tcl It cleans up some unused global vars Fixes some spacing in some report statements as well as fixes some debugging statements adds a ubuntu specific bit of code to uname so uname release returns the codename of an ubuntu install Finally in getPathToModule I commented out the Check for aliases bit of code This is already done at the top level so no need to do it again. (If someone finds a case where this is needed let me know and I'll add it back in) Kent 2010-11-12 rkowen <rkowen> * doc/module.1.in: Updated the man page with regards to the package modulefile directories. * NEWS, doc/module.1.in, doc/modulefile.4.in, init/bash.in, init/cmake.in, init/csh.in, init/ksh.in, init/perl.pm.in, init/python.py.in, init/sh.in, init/zsh.in, main.c, modulefiles/modules.in, modules_def.h: * Removed the $MODULESHOME env.var. which is not used at all. * ChangeLog, Makefile.am, NEWS, configure.ac, doc/module.1.in, init/.modulespath.in, init/Makefile.am, init/bash.in, init/bash_completion.in, init/cmake.in, init/csh.in, init/ksh.in, init/perl.pm.in, init/python.py.in, init/sh.in, init/zsh.in, main.c, modulefiles/Makefile.am: * Reworked configuration and Makefile for fine-grain control of certain paths and config files. 2010-11-11 rkowen <rkowen> * ModuleCmd_Load.c, NEWS: Rolled in the Modules 3.2.9 version. * Fix the coexistence of load/remove flags (Martin Siegert) * ModuleCmd_Load.c, NEWS: * Fix the coexistence of load/remove flags (due to Martin Siegert) * ChangeLog, Makefile.am, ModuleCmd_Avail.c, ModuleCmd_Clear.c, ModuleCmd_Display.c, ModuleCmd_Help.c, ModuleCmd_Init.c, ModuleCmd_List.c, ModuleCmd_Load.c, ModuleCmd_Purge.c, ModuleCmd_Refresh.c, ModuleCmd_Switch.c, ModuleCmd_Update.c, ModuleCmd_Use.c, ModuleCmd_Whatis.c, NEWS, TODO, cmdAlias.c, cmdConflict.c, cmdInfo.c, cmdIsLoaded.c, cmdLog.c, cmdMisc.c, cmdModule.c, cmdPath.c, cmdSetenv.c, cmdTrace.c, cmdUlvl.c, cmdUname.c, cmdVerbose.c, cmdVersion.c, cmdWhatis.c, cmdXResource.c, config/emtcl.m4, config/tcl.m4, configure.ac, doc/.cvsignore, doc/module.1.in, doc/modulefile.4.in, error.c, etc/add.modules.in, etc/global/bashrc.in, etc/global/csh.modules.in, etc/global/profile.modules.in, etc/mkroot.in, ext/add.ext.in, ext/mkroot.in, init.c, init/.modulespath.in, init/Makefile.am, init/bash.in, init/cmake.in, init/csh.in, init/ksh.in, init/perl.pm.in, init/python.py.in, init/sh.in, init/zsh.in, locate_module.c, main.c, modulefiles/Makefile.am, modulefiles/dot.in, modulefiles/module-cvs.in, modulefiles/module-info.in, modulefiles/modules.in, modulefiles/null.in, modulefiles/use.own.in, modulefiles/version.in, modules.lsm.in, modules_def.h, testsuite/config/unix.exp, testsuite/modulefiles.deep/modulerc/.modulerc, testsuite/modulefiles.deep/modulerc/dir1/.modulerc, testsuite/modulefiles.deep/modulerc/dir1/1.0, testsuite/modulefiles.deep/modulerc/dir1/2.0, testsuite/modulefiles.deep/modulerc/dir2/.modulerc, .../modulefiles.deep/modulerc/dir2/1.0/.modulerc, testsuite/modulefiles.deep/modulerc/dir2/1.0/rc1, testsuite/modulefiles.deep/modulerc/dir2/1.0/rc2, testsuite/modulefiles.deep/modulerc/dir2/2.0, testsuite/modulefiles.deep/modulerc/dir2/3.0, testsuite/modulefiles.deep/plain/dir1/1.0, testsuite/modulefiles.deep/plain/dir1/2.0, testsuite/modulefiles.deep/plain/dir2/1.0, testsuite/modulefiles.deep/plain/dir2/2.0, testsuite/modulefiles.deep/version/.version, testsuite/modulefiles.deep/version/dir1/.version, testsuite/modulefiles.deep/version/dir1/1.0, testsuite/modulefiles.deep/version/dir1/2.0, testsuite/modulefiles.deep/version/dir2/.version, testsuite/modulefiles.deep/version/dir2/1.0, .../modulefiles.deep/version/dir2/2.0/.version, testsuite/modulefiles.deep/version/dir2/2.0/rc1, testsuite/modulefiles.deep/version/dir2/2.0/rc2, testsuite/modulefiles.deep/version/dir2/3.0, testsuite/modulefiles/break/2.0, testsuite/modulefiles/info/shellsexp, testsuite/modules.00-init/006-procs.exp, testsuite/modules.00-init/030-shells.exp, testsuite/modules.00-init/080-begenv.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.35-trace/010-init_ts.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/020-setenv.exp, testsuite/modules.50-cmds/022-setenv-eschars.exp, testsuite/modules.50-cmds/025-setenv-undo.exp, testsuite/modules.50-cmds/030-unsetenv.exp, testsuite/modules.50-cmds/035-unsetenv-undo.exp, testsuite/modules.50-cmds/036-unsetenv-x.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/077-alias-undo.exp, testsuite/modules.50-cmds/078-refresh.exp, testsuite/modules.50-cmds/080-info-name.exp, testsuite/modules.50-cmds/086-info-shells.exp, testsuite/modules.50-cmds/087-info-shells-exp.exp, testsuite/modules.50-cmds/088-info-isloaded.exp, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/100-loglevel.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/175-swap2.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/200-break.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/220-continue.exp, testsuite/modules.50-cmds/230-loop.exp, testsuite/modules.70-maint/045-listlong.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.80-deep/010-init_ts.exp, testsuite/modules.80-deep/020-load.exp, testsuite/modules.80-deep/030-display.exp, testsuite/modules.80-deep/040-list.exp, testsuite/modules.80-deep/999-cleanup.exp, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/050-long.exp, testsuite/modules.95-version/020-load.exp, testsuite/modules.95-version/020-unload.exp, testsuite/modules.95-version/022-load2.exp, testsuite/modules.95-version/022-unload2.exp, testsuite/modules.95-version/040-xgetenv.exp, utility.c, version.c, xref/ModuleCmd_Avail.c.html, xref/ModuleCmd_Avail.c.src.html, xref/ModuleCmd_Clear.c.html, xref/ModuleCmd_Clear.c.src.html, xref/ModuleCmd_Display.c.html, xref/ModuleCmd_Display.c.src.html, xref/ModuleCmd_Help.c.html, xref/ModuleCmd_Help.c.src.html, xref/ModuleCmd_Init.c.html, xref/ModuleCmd_Init.c.src.html, xref/ModuleCmd_List.c.html, xref/ModuleCmd_List.c.src.html, xref/ModuleCmd_Load.c.html, xref/ModuleCmd_Load.c.src.html, xref/ModuleCmd_Purge.c.html, xref/ModuleCmd_Purge.c.src.html, xref/ModuleCmd_Refresh.c.html, xref/ModuleCmd_Refresh.c.src.html, xref/ModuleCmd_Switch.c.html, xref/ModuleCmd_Switch.c.src.html, xref/ModuleCmd_Update.c.html, xref/ModuleCmd_Update.c.src.html, xref/ModuleCmd_Use.c.html, xref/ModuleCmd_Use.c.src.html, xref/ModuleCmd_Whatis.c.html, xref/ModuleCmd_Whatis.c.src.html, xref/cmdAlias.c.html, xref/cmdAlias.c.src.html, xref/cmdChdir.c.html, xref/cmdChdir.c.src.html, xref/cmdConflict.c.html, xref/cmdConflict.c.src.html, xref/cmdInfo.c.html, xref/cmdInfo.c.src.html, xref/cmdIsLoaded.c.html, xref/cmdIsLoaded.c.src.html, xref/cmdLog.c.html, xref/cmdLog.c.src.html, xref/cmdMisc.c.html, xref/cmdMisc.c.src.html, xref/cmdModule.c.html, xref/cmdModule.c.src.html, xref/cmdPath.c.html, xref/cmdPath.c.src.html, xref/cmdSetenv.c.html, xref/cmdSetenv.c.src.html, xref/cmdTrace.c.html, xref/cmdTrace.c.src.html, xref/cmdUlvl.c.html, xref/cmdUlvl.c.src.html, xref/cmdUname.c.html, xref/cmdUname.c.src.html, xref/cmdVerbose.c.html, xref/cmdVerbose.c.src.html, xref/cmdVersion.c.html, xref/cmdVersion.c.src.html, xref/cmdWhatis.c.html, xref/cmdWhatis.c.src.html, xref/cmdXResource.c.html, xref/cmdXResource.c.src.html, xref/cxref.apdx.html, xref/cxref.function, xref/cxref.html, xref/cxref.include, xref/cxref.typedef, xref/cxref.variable, xref/error.c.html, xref/error.c.src.html, xref/getopt.c.html, xref/getopt.c.src.html, xref/init.c.html, xref/init.c.src.html, xref/locate_module.c.html, xref/locate_module.c.src.html, xref/main.c.html, xref/main.c.src.html, xref/utility.c.html, xref/utility.c.src.html, xref/version.c.html, xref/version.c.src.html: Setting up the modules-3-2-9 branch. 2010-11-04 rkowen <rkowen> * locate_module.c: Using a const char * to remove a compiler warning message. 2010-10-18 rkowen <rkowen> * NEWS, cmdVersion.c, doc/modulefile.4.in, testsuite/modulefiles.deep/modulerc/.modulerc, testsuite/modulefiles.deep/modulerc/dir1/.modulerc, .../modulefiles.deep/modulerc/dir2/1.0/.modulerc, testsuite/modulefiles/loc_rc3/.modulerc, testsuite/modulefiles/loc_rc4/.modulerc: * Let the "module-version" command use a "name" of '.' for "this" module directory ... useful for deep modulefile directories. 2010-10-18 sirdude <sirdude> * tcl/modulecmd.tcl: small fixes to module-info Kent 2010-10-14 rkowen <rkowen> * ModuleCmd_Avail.c, configure.ac, init.c, locate_module.c, main.c, modules_def.h: Added in a skipdirs object with the name of source code management directories to skip, unless the directory has a module dot file (.version or .modulerc). Fixed problem with the po/Makefile.* 2010-10-11 rkowen <rkowen> * cmdVersion.c, locate_module.c, modules_def.h: Rolled in some changes from the mfiles branch. 2010-10-08 rkowen <rkowen> * ModuleCmd_Avail.c, ModuleCmd_Init.c, ModuleCmd_Load.c, ModuleCmd_Purge.c, ModuleCmd_Switch.c, ModuleCmd_Update.c, ModuleCmd_Whatis.c, cmdConflict.c, cmdInfo.c, cmdIsLoaded.c, cmdModule.c, cmdPath.c, cmdUname.c, cmdVersion.c, cmdWhatis.c, cmdXResource.c, init.c, locate_module.c, main.c, utility.c, utilmem.c: Simplified the conditional tests for NULL. * ModuleCmd_Use.c, ModuleCmd_Whatis.c, cmdChdir.c, cmdConflict.c, locate_module.c, modules_def.h, utility.c: Hid most of the stat() calls behind is_(), an internal function. 2010-10-07 rkowen <rkowen> * cmdVersion.c, doc/modulefile.4.in, locate_module.c, testsuite/modulefiles.deep/modulerc/.modulerc, testsuite/modulefiles.deep/modulerc/dir1/.modulerc, testsuite/modulefiles.deep/modulerc/dir1/1.0, testsuite/modulefiles.deep/modulerc/dir1/2.0, testsuite/modulefiles.deep/modulerc/dir2/.modulerc, .../modulefiles.deep/modulerc/dir2/1.0/.modulerc, testsuite/modulefiles.deep/modulerc/dir2/1.0/rc1, testsuite/modulefiles.deep/modulerc/dir2/1.0/rc2, testsuite/modulefiles.deep/modulerc/dir2/2.0, testsuite/modulefiles.deep/modulerc/dir2/3.0, testsuite/modulefiles.deep/plain/dir1/1.0, testsuite/modulefiles.deep/plain/dir1/2.0, testsuite/modulefiles.deep/plain/dir2/1.0, testsuite/modulefiles.deep/plain/dir2/2.0, testsuite/modulefiles.deep/version/.version, testsuite/modulefiles.deep/version/dir1/.version, testsuite/modulefiles.deep/version/dir1/1.0, testsuite/modulefiles.deep/version/dir1/2.0, testsuite/modulefiles.deep/version/dir2/.version, testsuite/modulefiles.deep/version/dir2/1.0, .../modulefiles.deep/version/dir2/2.0/.version, testsuite/modulefiles.deep/version/dir2/2.0/rc1, testsuite/modulefiles.deep/version/dir2/2.0/rc2, testsuite/modulefiles.deep/version/dir2/3.0, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.80-deep/010-init_ts.exp, testsuite/modules.80-deep/020-load.exp, testsuite/modules.80-deep/030-display.exp, testsuite/modules.80-deep/040-list.exp, testsuite/modules.80-deep/999-cleanup.exp: Rolled in the deep modulefile changes from version 3.2.8. * modulefiles/module-cvs.in, modulefiles/modules.in: Rolled in the modulefile changes from version 3.2.8. * ChangeLog, Makefile.am: Rolled in the Makefile.am / library order fix from version 3.2.8. 2010-10-05 rkowen <rkowen> * doc/module.1.in: Updated with sections on initializing modules for perl and python from version 3.2.8. * ModuleCmd_Purge.c: Merged the fix for multiple module purge from version 3.2.8. * ChangeLog, NEWS, config/emtcl.m4, config/tcl.m4, configure.ac, testsuite/modules.70-maint/070-display.exp: Rolled in from version 3.2.8 the configure --with-man-path option and the fixed emtcl.m4 which corrects the --with-tcl and related options, and the --without-x test variance. 2010-10-04 rkowen <rkowen> * cmdConflict.c, doc/module.1.in, init.c, init/Makefile.am, init/cmake.in, init/{perl.in => perl.pm.in}, init/python.in, init/python.py.in, testsuite/modulefiles/info/shellsexp, testsuite/modules.00-init/030-shells.exp, testsuite/modules.00-init/080-begenv.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/020-setenv.exp, testsuite/modules.50-cmds/022-setenv-eschars.exp, testsuite/modules.50-cmds/025-setenv-undo.exp, testsuite/modules.50-cmds/030-unsetenv.exp, testsuite/modules.50-cmds/035-unsetenv-undo.exp, testsuite/modules.50-cmds/036-unsetenv-x.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/077-alias-undo.exp, testsuite/modules.50-cmds/080-info-name.exp, testsuite/modules.50-cmds/086-info-shells.exp, testsuite/modules.50-cmds/087-info-shells-exp.exp, testsuite/modules.50-cmds/088-info-isloaded.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/175-swap2.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/200-break.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/220-continue.exp, testsuite/modules.50-cmds/230-loop.exp, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.95-version/020-load.exp, testsuite/modules.95-version/020-unload.exp, testsuite/modules.95-version/022-load2.exp, testsuite/modules.95-version/022-unload2.exp, testsuite/modules.95-version/040-xgetenv.exp, utility.c: Rolled in the cmake addition from version 3.2.8, and the new perl.pm & python.py init files. 2010-10-01 sirdude <sirdude> * tcl/modulecmd.tcl: Patches from John Tseng, Fixes an issue with perl autoinit by adding tclsh to the call Updates to module-version. Kent 2010-07-27 rkowen <rkowen> * cmdChdir.c, init/bash_completion.in, testsuite/modulefiles/alias/1.0, testsuite/modulefiles/append/0.1, testsuite/modulefiles/append/0.2, testsuite/modulefiles/append/1.0, testsuite/modulefiles/append/2.1, testsuite/modulefiles/append/2.2, testsuite/modulefiles/break/4.0, testsuite/modulefiles/continue/1.0, testsuite/modulefiles/continue/2.0, testsuite/modulefiles/continue/3.0, testsuite/modulefiles/continue/4.0, testsuite/modulefiles/exit/1.0, testsuite/modulefiles/exit/2.0, testsuite/modulefiles/exit/3.0, testsuite/modulefiles/prepend/0.1, testsuite/modulefiles/prepend/0.2, testsuite/modulefiles/prepend/1.0, testsuite/modulefiles/prepend/2.1, testsuite/modulefiles/prepend/2.2, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp, testsuite/modules.50-cmds/076-alias-sub.exp, testsuite/modules.50-cmds/175-swap2.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/220-continue.exp, testsuite/modules.50-cmds/230-loop.exp, testsuite/modules.50-cmds/999-cleanup.exp: Base version is 3-2-0, then merged to 3-2-7. 2010-05-28 sirdude <sirdude> * tcl/modulecmd.tcl: Last patch from Gerrit Renker This one makes it so module switch tries to swap the order if the user messed it up. If you type: module switch new old instead of: module switch old new it will attempt to correct it. Kent * tcl/modulecmd.tcl: Another patch by Gerrit Renker This one makes module display/show more similar to the c version of modules. Kent * tcl/modulecmd.tcl: Two more patches by Gerrit Renker These two clean up the "version" info and makes the startup files more compatable with the c version of modules. Kent * tcl/modulecmd.tcl: This is patch #6 from Gerrit Renker This patch increased the CSH_LIMIT to the same as linux's default. (This seams reasonable, if people have older machines that have issues they can always drop it back down to a lower value) Kent * tcl/modulecmd.tcl: This is patch #5 from Gerrit Renker This one improves escaping of special symbols Kent * tcl/modulecmd.tcl: Patch #4 from Gerrit Renker This one cleans up dynamic columns and makes it autodetect Kent 2010-05-27 sirdude <sirdude> * tcl/modulecmd.tcl: small typo in last patch was missing a $ Kent * tcl/modulecmd.tcl: Patch #3 submitted by Gerrit Renker This one fixes a heck of a lot of typo's. (Spelling isn't my strong suit) :) Kent * tcl/modulecmd.tcl: Two patches by Gerrit Renker The first one fixes an issue with sourcing a .versin/.modulerc over and over the second one fixes up listModules so that it behaves better. (Gerrit has submitted a number of patches, this is just two of them) Kent 2010-05-24 sirdude <sirdude> * tcl/modulecmd.tcl: This is a patch by Gerrit Renker to fix an issue with _LMFILES_ not having correct data when nesting module load/unload commands inside of other modules. Kent 2009-10-15 rkowen <rkowen> * modulefiles/.cvsignore: Ignore the generated notavail modulefile * NEWS, configure.ac, modulefiles/Makefile.am, modulefiles/notavail.in: * Added the "notavail" modulefile (as shown in man page) * init.c, locate_module.c, main.c: Resolved some minor warnings. * Makefile.am, ModuleCmd_Avail.c, ModuleCmd_Init.c, ModuleCmd_List.c, ModuleCmd_Load.c, ModuleCmd_Refresh.c, ModuleCmd_Switch.c, ModuleCmd_Whatis.c, NEWS, PROBLEMS, cmdConflict.c, cmdInfo.c, cmdIsLoaded.c, cmdLog.c, cmdVersion.c, configure.ac, error.c, init.c, locate_module.c, main.c, modules_def.h, ovec.c, ovec.h, testsuite/etc/{rc => modulerc}, testsuite/modules.20-locate/060-rc.exp, utility.c, utilobj.c, uvec.c: Allow loading and unloading the .modulerc & .version files Removed the Tcl intrepretor from many of the locate_modulefile utility routines. Simplified the error code with uvec. Added "tag" to MHash object for existence testing. Passes all tests but 2 generate "duplicate version symbol ... found". Merged in from the mfiles branch. 2009-10-12 rkowen <rkowen> * ChangeLog: Updated with 'mpath' merge. * ModuleCmd_Avail.c, ModuleCmd_Use.c, ModuleCmd_Whatis.c, NEWS, cmdConflict.c, cmdIsLoaded.c, locate_module.c, main.c, modules_def.h, testsuite/modules.10-use/040-load.exp, utility.c: Merged in the 'mpath' branch changes. 2009-09-22 rkowen <rkowen> * init/.modulespath.in, init/Makefile.am, init/bash.in, init/csh.in, init/ksh.in, init/python.in, init/sh.in, init/zsh.in: Merged in the final of the 3.2.7b changes to the init/ files. * Makefile.am: Added init/bash_completion.in into the distribution list. * init/bash.in, init/csh.in, init/ksh.in, init/python.in, init/sh.in, init/zsh.in: Changed the sed '\t' to a tab char so it would work on Solaris. 2009-09-02 rkowen <rkowen> * ChangeLog, cmdConflict.c, cmdLog.c, error.c, testsuite/modules.50-cmds/100-loglevel.exp, utility.c, xref/ModuleCmd_Avail.c.html, xref/ModuleCmd_Avail.c.src.html, xref/ModuleCmd_Clear.c.html, xref/ModuleCmd_Clear.c.src.html, xref/ModuleCmd_Display.c.html, xref/ModuleCmd_Display.c.src.html, xref/ModuleCmd_Help.c.html, xref/ModuleCmd_Help.c.src.html, xref/ModuleCmd_Init.c.html, xref/ModuleCmd_Init.c.src.html, xref/ModuleCmd_List.c.html, xref/ModuleCmd_List.c.src.html, xref/ModuleCmd_Load.c.html, xref/ModuleCmd_Load.c.src.html, xref/ModuleCmd_Purge.c.html, xref/ModuleCmd_Purge.c.src.html, xref/ModuleCmd_Refresh.c.html, xref/ModuleCmd_Refresh.c.src.html, xref/ModuleCmd_Switch.c.html, xref/ModuleCmd_Switch.c.src.html, xref/ModuleCmd_Update.c.html, xref/ModuleCmd_Update.c.src.html, xref/ModuleCmd_Use.c.html, xref/ModuleCmd_Use.c.src.html, xref/ModuleCmd_Whatis.c.html, xref/ModuleCmd_Whatis.c.src.html, xref/cmdAlias.c.html, xref/cmdAlias.c.src.html, xref/cmdChdir.c.html, xref/cmdChdir.c.src.html, xref/cmdConflict.c.html, xref/cmdConflict.c.src.html, xref/cmdInfo.c.html, xref/cmdInfo.c.src.html, xref/cmdIsLoaded.c.html, xref/cmdIsLoaded.c.src.html, xref/cmdLog.c.html, xref/cmdLog.c.src.html, xref/cmdMisc.c.html, xref/cmdMisc.c.src.html, xref/cmdModule.c.html, xref/cmdModule.c.src.html, xref/cmdPath.c.html, xref/cmdPath.c.src.html, xref/cmdSetenv.c.html, xref/cmdSetenv.c.src.html, xref/cmdUlvl.c.html, xref/cmdUlvl.c.src.html, xref/cmdUname.c.html, xref/cmdUname.c.src.html, xref/cmdVerbose.c.html, xref/cmdVerbose.c.src.html, xref/cmdVersion.c.html, xref/cmdVersion.c.src.html, xref/cmdWhatis.c.html, xref/cmdWhatis.c.src.html, xref/cmdXResource.c.html, xref/cmdXResource.c.src.html, xref/config.h.html, xref/config.h.src.html, xref/cxref.apdx.html, xref/cxref.function, xref/cxref.html, xref/cxref.include, xref/cxref.typedef, xref/cxref.variable, xref/error.c.html, xref/error.c.src.html, xref/getopt.c.html, xref/getopt.c.src.html, xref/init.c.html, xref/init.c.src.html, xref/locate_module.c.html, xref/locate_module.c.src.html, xref/main.c.html, xref/main.c.src.html, xref/modules_def.h.html, xref/modules_def.h.src.html, xref/utility.c.html, xref/utility.c.src.html, xref/version.c.html: Merged in the mlist code clean up changes. 2009-09-01 rkowen <rkowen> * ChangeLog, xref/ModuleCmd_Avail.c.html, xref/ModuleCmd_Avail.c.src.html, xref/ModuleCmd_Clear.c.html, xref/ModuleCmd_Clear.c.src.html, xref/ModuleCmd_Display.c.html, xref/ModuleCmd_Display.c.src.html, xref/ModuleCmd_Help.c.html, xref/ModuleCmd_Help.c.src.html, xref/ModuleCmd_Init.c.html, xref/ModuleCmd_Init.c.src.html, xref/ModuleCmd_List.c.html, xref/ModuleCmd_List.c.src.html, xref/ModuleCmd_Load.c.html, xref/ModuleCmd_Load.c.src.html, xref/ModuleCmd_Purge.c.html, xref/ModuleCmd_Purge.c.src.html, xref/ModuleCmd_Refresh.c.html, xref/ModuleCmd_Refresh.c.src.html, xref/ModuleCmd_Switch.c.html, xref/ModuleCmd_Switch.c.src.html, xref/ModuleCmd_Update.c.html, xref/ModuleCmd_Update.c.src.html, xref/ModuleCmd_Use.c.html, xref/ModuleCmd_Use.c.src.html, xref/ModuleCmd_Whatis.c.html, xref/ModuleCmd_Whatis.c.src.html, xref/cmdAlias.c.html, xref/cmdAlias.c.src.html, xref/cmdChdir.c.html, xref/cmdChdir.c.src.html, xref/cmdConflict.c.html, xref/cmdConflict.c.src.html, xref/cmdInfo.c.html, xref/cmdInfo.c.src.html, xref/cmdIsLoaded.c.html, xref/cmdIsLoaded.c.src.html, xref/cmdLog.c.html, xref/cmdLog.c.src.html, xref/cmdMisc.c.html, xref/cmdMisc.c.src.html, xref/cmdModule.c.html, xref/cmdModule.c.src.html, xref/cmdPath.c.html, xref/cmdPath.c.src.html, xref/cmdSetenv.c.html, xref/cmdSetenv.c.src.html, xref/cmdTrace.c.html, xref/cmdTrace.c.src.html, xref/cmdUlvl.c.html, xref/cmdUlvl.c.src.html, xref/cmdUname.c.html, xref/cmdUname.c.src.html, xref/cmdVerbose.c.html, xref/cmdVerbose.c.src.html, xref/cmdVersion.c.html, xref/cmdVersion.c.src.html, xref/cmdWhatis.c.html, xref/cmdWhatis.c.src.html, xref/cmdXResource.c.html, xref/cmdXResource.c.src.html, xref/config.h.html, xref/config.h.src.html, xref/cxref.apdx.html, xref/cxref.function, xref/cxref.html, xref/cxref.include, xref/cxref.typedef, xref/cxref.variable, xref/error.c.html, xref/error.c.src.html, xref/getopt.c.html, xref/getopt.c.src.html, xref/init.c.html, xref/init.c.src.html, xref/locate_module.c.html, xref/locate_module.c.src.html, xref/main.c.html, xref/main.c.src.html, xref/modules_def.h.html, xref/modules_def.h.src.html, xref/utility.c.html, xref/utility.c.src.html, xref/utilmem.c.html, xref/utilmem.c.src.html, xref/utilobj.c.html, xref/utilobj.c.src.html, xref/uvec.c.html, xref/uvec.c.src.html, xref/version.c.html: Updated the cxref pages. * LICENSE.LGPL, Makefile.am, ModuleCmd_Avail.c, ModuleCmd_Clear.c, ModuleCmd_Init.c, ModuleCmd_List.c, ModuleCmd_Load.c, ModuleCmd_Use.c, ModuleCmd_Whatis.c, NEWS, cmdAlias.c, cmdChdir.c, cmdConflict.c, cmdInfo.c, cmdIsLoaded.c, cmdLog.c, cmdModule.c, cmdPath.c, cmdSetenv.c, cmdUlvl.c, cmdUname.c, cmdVerbose.c, cmdVersion.c, cmdWhatis.c, cmdXResource.c, configure.ac, error.c, init.c, locate_module.c, main.c, modulefiles/.cvsignore, modulefiles/HOME.in, modulefiles/Makefile.am, modules_def.h, utility.c, utilmem.c, utilobj.c, uvec.c, uvec.h: Merging in the changes from the mlist branch. 2009-08-24 rkowen <rkowen> * cmdConflict.c: Lost value of notloaded_flag in conversion to objv. 2009-08-23 rkowen <rkowen> * ChangeLog: Updated. * ModuleCmd_Avail.c, ModuleCmd_Clear.c, ModuleCmd_Display.c, ModuleCmd_Help.c, ModuleCmd_Init.c, ModuleCmd_List.c, ModuleCmd_Load.c, ModuleCmd_Purge.c, ModuleCmd_Refresh.c, ModuleCmd_Switch.c, ModuleCmd_Update.c, ModuleCmd_Use.c, ModuleCmd_Whatis.c, NEWS, cmdAlias.c, cmdChdir.c, cmdConflict.c, cmdInfo.c, cmdIsLoaded.c, cmdLog.c, cmdMisc.c, cmdModule.c, cmdPath.c, cmdSetenv.c, cmdUlvl.c, cmdUname.c, cmdVerbose.c, cmdVersion.c, cmdWhatis.c, cmdXResource.c, configure.ac, error.c, getopt.c, init.c, locate_module.c, main.c, modules_def.h, utility.c, utilobj.c: Merged the nodeb branch into the main trunk. * ChangeLog: Updated. * .indent.pro, ChangeLog, Makefile.am, ModuleCmd_Avail.c, ModuleCmd_Clear.c, ModuleCmd_Display.c, ModuleCmd_Help.c, ModuleCmd_Load.c, ModuleCmd_Refresh.c, ModuleCmd_Update.c, ModuleCmd_Use.c, ModuleCmd_Whatis.c, NEWS, cmdAlias.c, cmdChdir.c, cmdConflict.c, cmdInfo.c, cmdIsLoaded.c, cmdLog.c, cmdMisc.c, cmdModule.c, cmdPath.c, cmdSetenv.c, cmdUlvl.c, cmdUname.c, cmdVerbose.c, cmdVersion.c, cmdWhatis.c, cmdXResource.c, error.c, init.c, locate_module.c, main.c, modules_def.h, testsuite/modulefiles/chdir/1.0, testsuite/modulefiles/chdir/2.0, testsuite/modulefiles/chdir/3.0, testsuite/modulefiles/chdir/4.0, testsuite/modules.50-cmds/240-chdir.exp, utility.c, utilobj.c: Merged in the btclobj1 branch changes to the main trunk - converted the module commands to Tcl dual-ported objects. 2009-08-18 rkowen <rkowen> * xref/cmdChdir.c.html, xref/cmdChdir.c.src.html: cmdChdir is now part of the xref mix. 2009-08-14 rkowen <rkowen> * Makefile.am, xref/ModuleCmd_Avail.c.html, xref/ModuleCmd_Avail.c.src.html, xref/ModuleCmd_Clear.c.html, xref/ModuleCmd_Clear.c.src.html, xref/ModuleCmd_Display.c.html, xref/ModuleCmd_Display.c.src.html, xref/ModuleCmd_Help.c.html, xref/ModuleCmd_Help.c.src.html, xref/ModuleCmd_Init.c.html, xref/ModuleCmd_Init.c.src.html, xref/ModuleCmd_List.c.html, xref/ModuleCmd_List.c.src.html, xref/ModuleCmd_Load.c.html, xref/ModuleCmd_Load.c.src.html, xref/ModuleCmd_Purge.c.html, xref/ModuleCmd_Purge.c.src.html, xref/ModuleCmd_Refresh.c.html, xref/ModuleCmd_Refresh.c.src.html, xref/ModuleCmd_Switch.c.html, xref/ModuleCmd_Switch.c.src.html, xref/ModuleCmd_Update.c.html, xref/ModuleCmd_Update.c.src.html, xref/ModuleCmd_Use.c.html, xref/ModuleCmd_Use.c.src.html, xref/ModuleCmd_Whatis.c.html, xref/ModuleCmd_Whatis.c.src.html, xref/cmdAlias.c.html, xref/cmdAlias.c.src.html, xref/cmdConflict.c.html, xref/cmdConflict.c.src.html, xref/cmdInfo.c.html, xref/cmdInfo.c.src.html, xref/cmdIsLoaded.c.html, xref/cmdIsLoaded.c.src.html, xref/cmdLog.c.html, xref/cmdLog.c.src.html, xref/cmdMisc.c.html, xref/cmdMisc.c.src.html, xref/cmdModule.c.html, xref/cmdModule.c.src.html, xref/cmdPath.c.html, xref/cmdPath.c.src.html, xref/cmdSetenv.c.html, xref/cmdSetenv.c.src.html, xref/cmdUlvl.c.html, xref/cmdUlvl.c.src.html, xref/cmdUname.c.html, xref/cmdUname.c.src.html, xref/cmdVerbose.c.html, xref/cmdVerbose.c.src.html, xref/cmdVersion.c.html, xref/cmdVersion.c.src.html, xref/cmdWhatis.c.html, xref/cmdWhatis.c.src.html, xref/cmdXResource.c.html, xref/cmdXResource.c.src.html, xref/config.h.html, xref/config.h.src.html, xref/cxref.apdx.html, xref/cxref.function, xref/cxref.html, xref/cxref.include, xref/cxref.typedef, xref/cxref.variable, xref/error.c.html, xref/error.c.src.html, xref/getopt.c.html, xref/getopt.c.src.html, xref/getopt.h.html, xref/getopt.h.src.html, xref/init.c.html, xref/init.c.src.html, xref/locate_module.c.html, xref/locate_module.c.src.html, xref/main.c.html, xref/main.c.src.html, xref/modules_def.h.html, xref/modules_def.h.src.html, xref/utility.c.html, xref/utility.c.src.html, xref/version.c.html, xref/version.c.src.html: Got cxref running and regenerated the cross references. * locate_module.c: Cleaned up a memory error and redundant code. 2009-08-13 rkowen <rkowen> * ChangeLog, ModuleCmd_Avail.c, ModuleCmd_Init.c, ModuleCmd_Purge.c, ModuleCmd_Refresh.c, ModuleCmd_Update.c, NEWS, cmdChdir.c, cmdModule.c, cmdVersion.c, cmdWhatis.c, cmdXResource.c, configure.ac, locate_module.c, main.c, modules_def.h, utility.c: * All string allocation is performed by a common internal routine * --disable-beginenv is now the configuration default 2009-08-11 rkowen <rkowen> * ModuleCmd_Avail.c, ModuleCmd_Clear.c, ModuleCmd_Display.c, ModuleCmd_Help.c, ModuleCmd_Init.c, ModuleCmd_List.c, ModuleCmd_Load.c, ModuleCmd_Purge.c, ModuleCmd_Refresh.c, ModuleCmd_Switch.c, ModuleCmd_Update.c, ModuleCmd_Use.c, ModuleCmd_Whatis.c, NEWS, README, TODO, cmdAlias.c, cmdChdir.c, cmdConflict.c, cmdInfo.c, cmdIsLoaded.c, cmdLog.c, cmdMisc.c, cmdModule.c, cmdPath.c, cmdSetenv.c, cmdUlvl.c, cmdUname.c, cmdVerbose.c, cmdVersion.c, cmdWhatis.c, cmdXResource.c, configure.ac, doc/module.1.in, error.c, getopt.c, init.c, locate_module.c, main.c, modules_def.h, testsuite/modulefiles/.moduleavailcache, testsuite/modulefiles/.moduleavailcache.202, testsuite/modulefiles/.moduleavailcachedir, testsuite/modulefiles/.moduleavailcachedir.202, testsuite/modules.00-init/090-switches.exp, testsuite/modules.70-maint/060-apropos.exp, utility.c: Merged in the bnocache branch to the main source tree. 2009-08-10 rkowen <rkowen> * ChangeLog: Updated. * ModuleCmd_Display.c, NEWS, cmdLog.c, configure.ac, error.c, modules_def.h: Merged the syslogging changes from the bsyslog branch. 2009-08-03 rkowen <rkowen> * ChangeLog: Updated. * Makefile.am, NEWS, cmdInfo.c, cmdLog.c, cmdModule.c, cmdTrace.c, configure.ac, doc/modulefile.4.in, init.c, modulefiles/module-info.in, modules_def.h, testsuite/modulefiles/help/2.0, testsuite/modulefiles/trace/all_off, testsuite/modulefiles/trace/all_on, testsuite/modulefiles/trace/colon, testsuite/modulefiles/trace/dilo_onoff, testsuite/modulefiles/trace/disp_onoff, testsuite/modulefiles/trace/disptrac, testsuite/modulefiles/trace/load_all1, testsuite/modulefiles/trace/load_all2, testsuite/modulefiles/trace/load_on, testsuite/modulefiles/trace/load_onoff, testsuite/modulefiles/trace/load_ovr, testsuite/modules.35-trace/010-init_ts.exp, testsuite/modules.35-trace/020-default.exp, testsuite/modules.35-trace/030-all-on.exp, testsuite/modules.35-trace/031-all-off.exp, testsuite/modules.35-trace/040-load-all.exp, testsuite/modules.35-trace/041-load-all.exp, testsuite/modules.35-trace/042-load-on.exp, testsuite/modules.35-trace/043-load-onoff.exp, testsuite/modules.35-trace/044-load-ovr.exp, testsuite/modules.35-trace/050-disp-onoff.exp, testsuite/modules.35-trace/060-dilo-onoff.exp, testsuite/modules.35-trace/070-colon.exp, testsuite/modules.35-trace/095-cleanup.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.70-maint/070-display.exp: Merged in the bnotrace branch changes ... essentially removing the module-trace command. * init/bash_completion.in: Added bash_completion init * ChangeLog: Updated. * Makefile.am, ModuleCmd_Avail.c, ModuleCmd_Clear.c, ModuleCmd_Display.c, ModuleCmd_Help.c, ModuleCmd_Init.c, ModuleCmd_List.c, ModuleCmd_Purge.c, ModuleCmd_Refresh.c, ModuleCmd_Switch.c, ModuleCmd_Update.c, ModuleCmd_Use.c, ModuleCmd_Whatis.c, cmdAlias.c, cmdChdir.c, cmdConflict.c, cmdInfo.c, cmdIsLoaded.c, cmdLog.c, cmdMisc.c, cmdModule.c, cmdPath.c, cmdSetenv.c, cmdTrace.c, cmdUlvl.c, cmdUname.c, cmdVerbose.c, cmdVersion.c, cmdWhatis.c, cmdXResource.c, configure.ac, doc/module.1.in, doc/modulefile.4.in, error.c, etc/global/bashrc.in, etc/global/csh.modules.in, etc/global/profile.modules.in, init.c, init/.modulespath.in, init/Makefile.am, init/bash.in, init/csh.in, init/filter, init/ksh.in, init/perl.in, init/python.in, init/sh.in, init/zsh.in, locate_module.c, modulefiles/Makefile.am, modules_def.h, utility.c, version.c: Rolled in the remaining 3.2.7 changes to the main branch. 2009-07-31 rkowen <rkowen> * ChangeLog: Updated main branch with 3.2.7 changes. * NEWS: Updated 3.2.7 changes. 2009-04-09 sirdude <sirdude> * tcl/modulecmd.tcl: This is a patch by John Tseng, It adds the ability to support Dynamic columns using stty you just setenv DYNAMIC_COLUMNS 1 and it will start using them. Kent * tcl/modulecmd.tcl: Fleshed out the debugging statements so most functions have them now. Kent 2009-02-24 sirdude <sirdude> * tcl/modulecmd.tcl: Some more cruft removal. Kent * tcl/Makefile, tcl/init/modulerc, tcl/modulecmd.tcl: added synonym of search for apropos/keyword Partialy contributed by Hunter Matthews. There is still an issue with it though. If you have a malformed module it will die. Probably there are other commands that die as well. Need to look at it more. Kent * tcl/modulecmd.tcl: Cleaned up some stuff that wasn't used and also fixed some minor formating issues. Kent * tcl/modulecmd.tcl: Updated the help dialog so its a bit more organized an easier to read. Kent * tcl/modulecmd.tcl: Patch by Hunter Matthews to clean up the output of module avail a little bit. Kent * tcl/modulecmd.tcl: Some patches submitted by Hunter Matthews adds --help as a commandline option. fixes issues with modulerc file getting sourced twice in sh and tcsh shells. Kent 2008-09-17 sirdude <sirdude> * tcl/modulecmd.tcl: Small patch for differences in glob on various platforms. Contributed by Thomas Zeiser Kent 2008-02-20 rkowen <rkowen> * NEWS, cmdPath.c, configure.ac, init/bash.in, testsuite/modulefiles/append/2.1, testsuite/modulefiles/append/2.2, testsuite/modulefiles/prepend/2.1, testsuite/modulefiles/prepend/2.2, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/175-swap2.exp: Rolled in the 3.2.7 changes so far. 2007-10-29 rkowen <rkowen> * ModuleCmd_Avail.c, NEWS: Rolled in the skip .git version control dirs in modulefile dirs. 2007-10-23 sirdude <sirdude> * tcl/modulecmd.tcl: updated ignored directories to include .svn and .git Thanks to John Tseng. Kent 2007-09-05 sirdude <sirdude> * tcl/modulecmd.tcl: Made it so that module use and module unuse work the same way, I also added a little debugging info for both of them. Kent 2007-05-16 sirdude <sirdude> * tcl/modulecmd.tcl: update to replaceFromList patch from Olly. adds a fix for when item2 is empty. Kent * tcl/modulecmd.tcl: Another great little patch by Olly Stephens, This one makes it so that if a module has an error message in it module help (modulefile) will still attempt to call the help function for that module. Kent * tcl/modulecmd.tcl: Another patch by Olly, This one extends some of the shortcuts accepted. example module lo blah now works just like module load blah Its not perfect but again better than what is there currently. Kent * tcl/modulecmd.tcl: Another patch by Olly, This one makes it so that help is displayed if a user types an invalid module command (Example: module blah) or if a user just types module with no args. Kent * tcl/modulecmd.tcl: Patch by Olly, Forces 0600 mode on the tmpfile when opening it. Really we need to figure out how to remove the need for a tmpfile, until then though this is still better than it was. Kent 2007-02-22 rkowen <rkowen> * NEWS, locate_module.c: Rolled in 3.2.6 realloc() fix. 2007-02-14 rkowen <rkowen> * NEWS, testsuite/modules.50-cmds/095-uname.exp: Rolled in 3.2.5 changes to the uname test * ModuleCmd_Avail.c, ModuleCmd_Update.c, ModuleCmd_Whatis.c, cmdConflict.c, cmdLog.c, cmdModule.c, cmdTrace.c, cmdVersion.c, cmdWhatis.c, cmdXResource.c, error.c, init.c, locate_module.c, modules_def.h, utility.c: Rolled in the 3.2.5 module_malloc() wrapper. 2007-02-09 rkowen <rkowen> * contrib/modules.ebuild: Gentoo ebuild script for modules, contributed by Peter Fischer <peter.fischer@terrasel.de> 2006-12-19 sirdude <sirdude> * tcl/modulecmd.tcl: updated module list so it skips modules with no name for -l and -t (it now handles them like module list without options) Kent 2006-12-13 sirdude <sirdude> * tcl/modulecmd.tcl: Fix provied by Eric Mastromarc reference counting was not working for unload-path now it is again. Kent 2006-12-12 sirdude <sirdude> * tcl/modulecmd.tcl: Modified prereq so its a logical OR for multiple modulefies on one command line. example: prereq foo bar If you want it foo AND bar do: prereq foo prereq bar Patch done by Chris Pruett Kent 2006-12-07 sirdude <sirdude> * tcl/modulecmd.tcl: Patch provided by Thomas Zeiser, better fix for reverting header to find dynamically what version of tclsh to use. It also now sorts output of module avail. Kent * tcl/modulecmd.tcl: reverting commit 1.75 where I removed the header section that finds tclsh. Kent 2006-09-13 sirdude <sirdude> * tcl/modulecmd.tcl: Changed (VAR)_modshare back to use g_def_seperator instead of user defined variable. Currently there is an issue with doing something like append-path -delem " " PATH /usr/bin append-path -delem " " PATH /usr/local/bin append-path -delem ":" PATH /usr/sbin then loading that module and unloading it... Because of the mixed delimiters the unload does not work properly. It at least works for the basic case now though. Kent 2006-09-07 sirdude <sirdude> * tcl/modulecmd.tcl: changed syntax of specifying a delimitor to match c version of modules and also made sure you can use " " and { } as a delimitor. Thanks go to Dr Reinhold Bader for this fix.... Kent 2006-08-23 sirdude <sirdude> * tcl/modulecmd.tcl: "module use" (without args) was broken, now its fixed again. Kent * tcl/modulecmd.tcl: fixed revision variable stuff. Kent * tcl/modulecmd.tcl: Added in cvs revision variables so that module help prints out what version of cvs file was checked out. Kent 2006-08-16 sirdude <sirdude> * tcl/modulecmd.tcl: this is a pathetic commit ;) Modified the comment for g_user so that it says the right thing. Kent 2006-08-15 sirdude <sirdude> * tcl/modulecmd.tcl: This commit removes the remaining warnings generated by nagelfar redid a couple of calls to interp eval recoded the replaceFromList function so it uses lreplace removed the removeFromList function and made it call replaceFromList instead... I also added _LMFILES_ environment variable haven't done anything with it yet though. (intent is to use it in unloading a module) Kent * tcl/modulecmd.tcl: removed all of the hardcoded default path seperators ":" and replaced with a variable. Kent 2006-08-14 sirdude <sirdude> * tcl/init/.cvsignore: added scripts that get created so that they don't show up in cvs update... Kent * tcl/modulecmd.tcl: fixed a few calls to catch and made sure they called it in a similar manor... (there are two more left that are slightly different but I didn't take the time to figure them out) one of the fixes was posted by Chris Pruett, and I just applied it where it needed it... :) Kent * tcl/modulecmd.tcl: added an else statement that I dropped by accident when merging module command and module command help slave functions... Also reran frink so it looks pretty again... Kent 2006-08-13 sirdude <sirdude> * tcl/modulecmd.tcl: more work on seperator specification. (removing hardcoded ":"'s Kent * tcl/modulecmd.tcl: combined a couple of duplicate statements in a switch. Kent * tcl/modulecmd.tcl: Start of allowing a spwcified seperator for commands. Still needs a lot of work... Kent * tcl/modulecmd.tcl: made module switch behave like it use to... (Sorry it took so long to switch it back) now it does not recursively unload and reload modules... This way seems more flexable and more intunitive to users. Kent 2006-08-12 sirdude <sirdude> * tcl/modulecmd.tcl: by accident shut off showing default module files.... Turning it back on. Kent * tcl/modulecmd.tcl: module avail with flag_default_dir was broken This fixes it. Kent * tcl/modulecmd.tcl: Null module was causing problems with module avail -l There were some odd settings for null which I just changed to "" everything seems to work better this way so going to commit it. Kent * tcl/modulecmd.tcl: Updated the help section so its more like the binary module command... Kent * tcl/init/bash.in, tcl/init/ksh.in, tcl/init/zsh.in: fix up bash's friends so they work properly... Kent * tcl/modulecmd.tcl: updated module-info so that it works with the module-info module for the most part. There is still some work here. Patch submitted by Mark Moraes Kent 2006-08-11 sirdude <sirdude> * tcl/Makefile, tcl/modulecmd.tcl, testsuite/config/unix.exp: updated Make test so it "works" again... combined functions for looking at .version and modulerc files... Kent * tcl/modulecmd.tcl: This one has been on my todo list for awhile now. Reduced redundant code and made the slave for module help and executing a module one function. Kent * tcl/modulecmd.tcl: removed the following functions: module-log module-verbosity module-user module-trace they were empty, if anyone ever decides to do them they can add them back in. just trying to make this thing a little leaner ;) Kent * tcl/modulecmd.tcl: ran frink -e to make things look pretty again ;) Kent * tcl/modulecmd.tcl: I used nagelfar.tcl (http://nagelfar.berlios.de/) a tcl syntax checker and cleaned up most warnings from it. found a couple of typos as well because of it.... Kent * tcl/modulecmd.tcl: another typo. (was missing a $ for a variable) Kent * tcl/modulecmd.tcl: Removed the code to find tclsh since its in the init scripts no reason to duplicate it and probably will speed things up a bit keeping it in the init files. Kent * tcl/modulecmd.tcl: On irix with an older version of tclsh I was getting errors with reportWarning and reportInternalBug not being defined when there was a malformed module... made it so they were copied over to the slave where needed. Kent * tcl/modulecmd.tcl: missed some prints to stderr and I also fixed some typos... Kent * tcl/modulecmd.tcl: made $contact = emailaddress and modified reportInternalError so it prints out the contact email address. Kent * tcl/modulecmd.tcl: moved all puts stderr's to one of the report functions. This could still use some cleaning up. (not really sure we need 3 report functions) but its at least a little nicer. (Was thinking about changing it to echo "$msg" instead of sending it to stderr... that way you could do things like module avail | more and it would work... Need to do some more testing on it though :) Kent * tcl/init/csh.in, tcl/init/tcsh.in: removed extra quotes that didn't need to be there. Kent 2006-06-15 rkowen <rkowen> * locate_module.c: Rolled in 3.2.4 graceful handling of empty MODULEPATH dirs. 2006-06-02 rkowen <rkowen> * ChangeLog: update main. 2006-06-01 rkowen <rkowen> * NEWS, doc/module.1.in, doc/modulefile.4.in, etc/add.modules.in, etc/mkroot.in, ext/add.ext.in, ext/mkroot.in, init/.modulespath.in, init/Makefile.am, init/bash.in, init/ksh.in, init/sh.in, init/zsh.in, modulefiles/dot.in, modulefiles/module-cvs.in, modulefiles/module-info.in, modulefiles/modules.in, modulefiles/null.in, modulefiles/use.own.in, modulefiles/version.in: Rolled in the 3.2.3 top_builddir and @configure_input\@ changes. * NEWS, cmdPath.c, doc/modulefile.4.in, locate_module.c, modules_def.h, testsuite/modulefiles/append/1.0, testsuite/modulefiles/prepend/1.0, testsuite/modules.50-cmds/042-append-delim.exp, testsuite/modules.50-cmds/047-app-del-undo.exp, testsuite/modules.50-cmds/052-prepend-delim.exp, testsuite/modules.50-cmds/057-pre-del-undo.exp: Rolled in the 3.2.3 prepend-path/append-path --delim changes. * ModuleCmd_Init.c, cmdConflict.c, cmdIsLoaded.c, cmdPath.c, locate_module.c, main.c, modules_def.h: Rolled in the pre-changes for handling arbitrary delimiters for lists (instead of ':'). 2006-05-31 sirdude <sirdude> * tcl/modulecmd.tcl: * minor typos in error output fixed * support for modules which are known to have no dependencies. Presently a module switch foo/4 foo/5 will reload all modules which have been loaded after foo. But sometimes this may be a nuisance, especially if module files implement their own reloading mechanism. Hence the modules entered as a ":" separated list into the environment variable MODULE_NORELOAD will not be reloaded during a module switch. The "module reload" command however still reloads the complet e module set. This is upward compatible since the original functionality is re tained if MODULE_RELOAD is left empty. patch provided by Dr. Reinhold Bader Kent 2006-05-25 rkowen <rkowen> * ChangeLog, modules.lsm.in: Merged in the working LSM from 3.2.2 * ChangeLog, NEWS, testsuite/modulefiles/alias/1.0, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/076-alias-sub.exp, testsuite/modules.50-cmds/078-refresh.exp, utility.c: Rolled in the 3.2.3 changes * the set-alias command will for Bourne shell derivatives substitute the safe ${1+"$@"} for $*. 2006-05-19 rkowen <rkowen> * Makefile.am, NEWS, init.c: Rolled in the TclX changes from 3-2-2. 2006-05-15 rkowen <rkowen> * NEWS, error.c, main.c, testsuite/modules.35-trace/010-init_ts.exp, testsuite/modules.50-cmds/100-loglevel.exp: Rolled in the syslog related changes from 3.2.3 2006-05-12 rkowen <rkowen> * NEWS: Added a section for 3.3.x * NEWS, cmdVersion.c: Folded in dgoldendias patch. * ChangeLog, modules.lsm.in: Added the Title line, which must have gotten lost in previous edits. 2006-05-04 rkowen <rkowen> * ChangeLog, NEWS, config/emtcl.m4, config/tcl.m4, configure.ac, main.c: Rolled in the 3.2.2 configure changes to the main development trunk. 2006-05-01 rkowen <rkowen> * ModuleCmd_List.c, ModuleCmd_Refresh.c, ModuleCmd_Update.c, ModuleCmd_Whatis.c, cmdLog.c, configure.ac, error.c, locate_module.c, modules_def.h, testsuite/modulefiles/append/0.1, testsuite/modulefiles/append/0.2, testsuite/modulefiles/prepend/0.1, testsuite/modulefiles/prepend/0.2, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, utility.c: Rolled in the xstrtok changes and tests from modules-3-2-2. 2006-04-10 rkowen <rkowen> * ChangeLog, init/Makefile.am: Change from using . & .. to $(srcdir) and $(top_srcdir) respectively. (Thanks to suggestion from Boris Boesler <boesler.AT.ifn.et.tu-dresden.de>) 2006-03-23 rkowen <rkowen> * init/csh.in: Rolled in init csh fix from 3.2.1 * ChangeLog: update. * init/csh.in, testsuite/modules.00-init/006-procs.exp, testsuite/modules.70-maint/045-listlong.exp, testsuite/modules.90-avail/050-long.exp, version.c: Merged in the 3.2.1 changes. 2006-03-07 rkowen <rkowen> * ModuleCmd_Load.c, NEWS, cmdModule.c, doc/modulefile.4.in, main.c, modules_def.h, testsuite/config/unix.exp, testsuite/modulefiles/break/2.0, testsuite/modulefiles/break/4.0, testsuite/modulefiles/continue/1.0, testsuite/modulefiles/continue/2.0, testsuite/modulefiles/continue/3.0, testsuite/modulefiles/continue/4.0, testsuite/modulefiles/exit/1.0, testsuite/modulefiles/exit/2.0, testsuite/modulefiles/exit/3.0, testsuite/modules.00-init/006-procs.exp, testsuite/modules.50-cmds/210-exit.exp, testsuite/modules.50-cmds/220-continue.exp, testsuite/modules.50-cmds/230-loop.exp, testsuite/modules.50-cmds/999-cleanup.exp, utility.c: Rolled in the 3.2.0 exit changes. 2006-02-09 rkowen <rkowen> * init/Makefile.am: Fixed the tcsh target. 2006-02-06 rkowen <rkowen> * cmdModule.c, cmdPath.c, init.c, modules_def.h: Rolled in the Tcl_GetStringResult() changes from 3.2.0 * modulefiles/lang/.mklang: Fine-tuned the logic of dealing with $LANG and $LANG_STACK. Added some target language verbage. * .cvsignore, ChangeLog, Makefile.am, modulefiles/Makefile.am, modulefiles/lang/.cvsignore, modulefiles/lang/.mklang, po/.cvsignore, po/ChangeLog, po/LINGUAS, po/Makevars, po/POTFILES.in: Added the lang modulefiles and upgraded the Makefile.am-s to create a working distribution tar ball. 2006-02-05 rkowen <rkowen> * Makefile.am: After 'gettextize'. * configure.ac: The changes of 'gettextize', note that autopoint is not too smart with AC_CONFIG_AUX_DIR ... it appends on any text after macro to the directory name. So do not add 'dnl' for comments or to escape the \n. 2006-02-04 rkowen <rkowen> * ChangeLog: Updated. * version.c: The current version for the i18n mods is 3.3 alpha * main.c: Alert translators to the "common" strings. * error.c: Fixed grammar error. * utility.c: [ 730293 ] remove-path won't remove paths with a $ in it. Made the change and the tests ran fine. I'm not sure what cleanse_path() is supposed to do. * init.c: [ 672612 ] Tcl command execution failed and modules use pointed out the use of the deprecated Tcl fn Tcl_VarEval(). Replaced this with Tcl_Eval() and added some Tcl logic to handle when $auto_path is not set. * init/perl.in: Fixed where it needs to reference $ENV{...} [ 705033 ] Bug in init/perl * init/perl.in: Added 1 at end so perl/init can be used by the perl require. * cmdConflict.c: Removed i18n from the debugging statements ... not necessary. * Makefile.am, utility.c: Rolled in the changes from 3-2-0 patch1 2006-01-31 rkowen <rkowen> * ModuleCmd_Avail.c, ModuleCmd_Help.c, ModuleCmd_Init.c, ModuleCmd_List.c, ModuleCmd_Update.c, ModuleCmd_Use.c, ModuleCmd_Whatis.c, cmdConflict.c, cmdModule.c, cmdUname.c, cmdVersion.c, cmdXResource.c, configure.ac, error.c, getopt.c, init.c, locate_module.c, main.c, modules_def.h, utility.c: First pass through tagging all the translateable text with _(...), etc. for easy extraction by xgettext. Passes all tests. 2006-01-26 rkowen <rkowen> * Makefile.am, configure.ac, main.c, modules_def.h: Setting up autoconf for handling i18n & l10n. * configure.ac: The AC_AIX check needs to be before any compiler tests. Added the AM_GNU_GETTEXT macro for i18n & l10n. 2006-01-23 rkowen <rkowen> * Makefile.am, modules.lsm.in: Updated for LSM version 4 2006-01-19 rkowen <rkowen> * ChangeLog, Makefile.am, modules.lsm.in: Changed from sunsite to ibiblio (same thing though). * modules.lsm.in: Can't ftp into the SourceForge.net site. 2006-01-18 rkowen <rkowen> * version.c: Ready for the 3.2.0 release * ChangeLog, xref/config.h.html, xref/config.h.src.html: Updated. * xref/cmdModule.c.html, xref/cmdModule.c.src.html, xref/cmdPath.c.html, xref/cmdXResource.c.html, xref/cmdXResource.c.src.html, xref/cxref.apdx.html, xref/cxref.function, xref/modules_def.h.src.html, xref/utility.c.html, xref/utility.c.src.html: Updated. * MACHINES, NEWS: News about eliminating --with-force-path. 2006-01-17 rkowen <rkowen> * ChangeLog, README, cmdModule.c, configure.ac, modules_def.h, utility.c: Removed the --with-force-path option ... which basically makes sure that PATH and LD_LIBRARY_PATH have some minimum values, given by a couple of MODULE_*_SACRED env.vars. If you need something like this, then you've probably written your modulefiles wrong! * cmdXResource.c: Eliminated the C++ style commented lines. * config/emtcl.m4: Shortened option to --with-tcl-ver and fixed some minor problems with it. * configure.ac: Fixed what happens when no /bin/csh and the split_size is not set. * utility.c: Add some casts to eliminate warning messages. 2006-01-12 rkowen <rkowen> * ChangeLog: Updated * cvs2cl.pl: Don't need to track xref/ changes. * ChangeLog: Updated. * xref/cxref.variable, xref/main.c.html, xref/main.c.src.html, xref/modules_def.h.html, xref/modules_def.h.src.html, xref/version.c.html, xref/version.c.src.html: Updated the cxref docs * ChangeLog: Updated. * ChangeLog, version.c: Updated version date. * main.c, modules_def.h: Have --version list out the version date also. * testsuite/home/.cvsignore: Ignore the test generated file. * testsuite/home/.modules: This gets made when a test is performed. * xref/ModuleCmd_Avail.c.html, xref/ModuleCmd_Avail.c.src.html, xref/ModuleCmd_Clear.c.html, xref/ModuleCmd_Clear.c.src.html, xref/ModuleCmd_Display.c.html, xref/ModuleCmd_Display.c.src.html, xref/ModuleCmd_Help.c.html, xref/ModuleCmd_Help.c.src.html, xref/ModuleCmd_Init.c.html, xref/ModuleCmd_Init.c.src.html, xref/ModuleCmd_List.c.html, xref/ModuleCmd_List.c.src.html, xref/ModuleCmd_Load.c.html, xref/ModuleCmd_Load.c.src.html, xref/ModuleCmd_Purge.c.html, xref/ModuleCmd_Purge.c.src.html, xref/ModuleCmd_Refresh.c.src.html, xref/ModuleCmd_Switch.c.html, xref/ModuleCmd_Switch.c.src.html, xref/ModuleCmd_Update.c.src.html, xref/ModuleCmd_Use.c.html, xref/ModuleCmd_Use.c.src.html, xref/ModuleCmd_Whatis.c.html, xref/ModuleCmd_Whatis.c.src.html, xref/cmdAlias.c.html, xref/cmdAlias.c.src.html, xref/cmdConflict.c.html, xref/cmdConflict.c.src.html, xref/cmdInfo.c.html, xref/cmdInfo.c.src.html, xref/cmdIsLoaded.c.html, xref/cmdIsLoaded.c.src.html, xref/cmdLog.c.html, xref/cmdLog.c.src.html, xref/cmdMisc.c.html, xref/cmdMisc.c.src.html, xref/cmdModule.c.html, xref/cmdModule.c.src.html, xref/cmdPath.c.html, xref/cmdPath.c.src.html, xref/cmdSetenv.c.html, xref/cmdSetenv.c.src.html, xref/cmdTrace.c.html, xref/cmdTrace.c.src.html, xref/cmdUlvl.c.html, xref/cmdUlvl.c.src.html, xref/cmdUname.c.html, xref/cmdUname.c.src.html, xref/cmdVerbose.c.html, xref/cmdVerbose.c.src.html, xref/cmdVersion.c.html, xref/cmdVersion.c.src.html, xref/cmdWhatis.c.html, xref/cmdWhatis.c.src.html, xref/cmdXResource.c.html, xref/cmdXResource.c.src.html, xref/config.h.html, xref/config.h.src.html, xref/error.c.html, xref/error.c.src.html, xref/getopt.c.html, xref/getopt.c.src.html, xref/init.c.html, xref/init.c.src.html, xref/locate_module.c.html, xref/locate_module.c.src.html, xref/main.c.html, xref/main.c.src.html, xref/modules_def.h.html, xref/modules_def.h.src.html, xref/utility.c.html, xref/utility.c.src.html, xref/version.c.src.html: Updated the cxref docs to 3.2.0rc4 * .cvsignore, doc/.cvsignore, etc/.cvsignore, init/.cvsignore: More things to ignore. * ModuleCmd_Init.c, NEWS, version.c: Reworked the "module init*" subcommand to handle dot files with multiple "module load" lines. * INSTALL: Added the documentation related to --with-tcl-*. * config/emtcl.m4, config/tcl.m4, configure.ac: Reintroduced (or added) the configure options --with-tcl-{versions|lib|include} to allow the user to specify any values which may be missing from the tclConfig.sh script. * testsuite/home/.modules, testsuite/home/.modules.save, testsuite/modules.60-initx/005-init.exp, testsuite/modules.60-initx/010-list.exp, testsuite/modules.60-initx/020-add.exp, testsuite/modules.60-initx/030-switch.exp, testsuite/modules.60-initx/040-prepend.exp, testsuite/modules.60-initx/050-rm.exp, testsuite/modules.60-initx/060-2nd.exp, testsuite/modules.60-initx/095-cleanup.exp: Added a test suite for the "module init*" subcommands. * testsuite/modules.50-cmds/070-alias-proc.exp: Use the "native" Tcl file remove command. * utility.c: Minor formatting changes. * modules_def.h: Minor reformatting. * Makefile.am: Added INSTALL.RH7x to the distribution pkg. 2005-12-15 rkowen <rkowen> * ChangeLog: Update ChangeLog * ChangeLog, INSTALL: Updating the INSTALL doc for 3.2.0 * version.c: Time for the 3.2.0 release 2005-12-14 sirdude <sirdude> * tcl/modulecmd.tcl: Added the system command. Kent 2005-12-13 sirdude <sirdude> * tcl/modulecmd.tcl: Fix by Marcus Wagner. Makes it so module unload works the same way module load does. Specifically for the break command. Kent 2005-12-12 sirdude <sirdude> * tcl/modulecmd.tcl: Fix provided by Mark Moraes. Prevents modulefilename collisions by prepending slaves with __ before commit if you had a module file named: module-info and tried to do a module show module-info you would get: bad option "mode": must be alias, aliases, eval, expose, hide, hidden, issafe, invokehidden, or marktrusted invoked from within "module-info mode whatis " Now it works. Kent * tcl/modulecmd.tcl: removed unused variable junk from 3 places in the code. (was just setting it to "" in all 3 places) Kent 2005-12-06 rkowen <rkowen> * ChangeLog: Updated. 2005-12-05 rkowen <rkowen> * ChangeLog, cvs2cl.pl: Changed the ChangeLog script to not record changes about itself to itself. * testsuite/modules.50-cmds/170-swap.exp: Added more single argument "swap" tests. * ChangeLog, Makefile.am, NEWS, cvs2cl.pl, stripmkf, version.c: Added the cvs2cl.pl perl script for generating the ChangeLog semi-automatically. Removed stripmkf - an artifact from older releases. * ChangeLog, etc/Makefile.am, ext/Makefile.am: Put the add.modules/add.ext & mkroot scripts under the --prefix bin directory since those scripts are platform independent, and the modules modulefile will point to these scripts. 2005-12-02 rkowen <rkowen> * ChangeLog, configure.ac, init/Makefile.am, modulefiles/Makefile.am: Put the init/ scripts under the --exec-prefix directory, because they point to the platform specific modulecmd. 2005-11-30 rkowen <rkowen> * ChangeLog, cmdSetenv.c, configure.ac, init/.modulespath.in, modulefiles/Makefile.am, modules_def.h, utility.c, version.c: * Eliminated any warnings caused by using Tcl 8.4 * Fixed any mixed size differences when using ints and pointers. (Only an issue with 64 bit machines.) 2005-11-29 rkowen <rkowen> * ModuleCmd_Avail.c, ModuleCmd_Clear.c, ModuleCmd_Display.c, ModuleCmd_Help.c, ModuleCmd_List.c, ModuleCmd_Load.c, ModuleCmd_Switch.c, ModuleCmd_Whatis.c, cmdAlias.c, cmdConflict.c, cmdInfo.c, cmdIsLoaded.c, cmdLog.c, cmdMisc.c, cmdTrace.c, cmdUlvl.c, cmdUname.c, cmdVerbose.c, cmdVersion.c, cmdWhatis.c, error.c, getopt.c, init.c, locate_module.c, main.c, utility.c: Made all the 'First Edition' years to be 4 digits. * ModuleCmd_Clear.c, ModuleCmd_Init.c, ModuleCmd_Purge.c, ModuleCmd_Refresh.c, ModuleCmd_Update.c, ModuleCmd_Use.c, cmdAlias.c, cmdConflict.c, cmdInfo.c, cmdIsLoaded.c, cmdLog.c, cmdMisc.c, cmdModule.c, cmdPath.c, cmdSetenv.c, cmdTrace.c, cmdUlvl.c, cmdUname.c, cmdVerbose.c, cmdVersion.c, cmdWhatis.c, cmdXResource.c, init.c, locate_module.c, main.c, modules_def.h, utility.c, version.c: Added the CONST84 qualifier to eliminate compiler warnings, and the side effects. 2005-11-27 rkowen <rkowen> * config/tcl.m4: It's not an error (exit) if it can't find tclxConfig.sh! 2005-11-26 rkowen <rkowen> * Makefile.am: Should read the sf.net file-release-system notes before changing the ftp-sourceforge target. * Makefile.am, configure.ac, modules.lsm.in: Updated the LSM and the creation and handling of distribution tarballs. * Makefile.am, modulefiles/Makefile.am: Rolled in the Make versioning install fragment from the predeep branch. 2005-11-25 rkowen <rkowen> * xref/ModuleCmd_Avail.c.html, xref/ModuleCmd_Display.c.html, xref/ModuleCmd_Refresh.c.html, xref/ModuleCmd_Refresh.c.src.html, xref/ModuleCmd_Update.c.html, xref/ModuleCmd_Update.c.src.html, xref/cmdConflict.c.html, xref/cmdConflict.c.src.html, xref/cmdInfo.c.src.html, xref/cmdModule.c.html, xref/cmdModule.c.src.html, xref/cmdPath.c.html, xref/cmdPath.c.src.html, xref/cmdSetenv.c.html, xref/cmdSetenv.c.src.html, xref/cmdTrace.c.html, xref/cmdTrace.c.src.html, xref/cmdUlvl.c.html, xref/cmdUlvl.c.src.html, xref/cmdWhatis.c.html, xref/config.h.html, xref/config.h.src.html, xref/cxref.apdx.html, xref/cxref.css, xref/cxref.function, xref/cxref.html, xref/cxref.include, xref/cxref.variable, xref/error.c.html, xref/init.c.html, xref/main.c.html, xref/main.c.src.html, xref/modules_def.h.html, xref/modules_def.h.src.html, xref/utility.c.html, xref/version.c.html, xref/version.c.src.html: Updated the cxref docs with the "refresh" changes. * Makefile.am: Need to include ./docs in SUBDIRS * configure.ac, testsuite/modules.50-cmds/070-alias-proc.exp, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/078-refresh.exp: Finished the alias/refresh tests for sourcing a tmpfile, and also the special case for the Bourne shell where funcs and no aliases. 2005-11-22 rkowen <rkowen> * ModuleCmd_Refresh.c, ModuleCmd_Update.c, main.c, testsuite/modules.00-init/006-procs.exp, testsuite/modules.50-cmds/070-alias-proc.exp, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/077-alias-undo.exp, testsuite/modules.50-cmds/078-refresh.exp: Cleaned up the test proc code, and normalized the "refresh" code to the existing standard. 2005-11-21 rkowen <rkowen> * ChangeLog, Makefile.am, ModuleCmd_Refresh.c, cmdConflict.c, cmdInfo.c, cmdModule.c, cmdPath.c, cmdSetenv.c, cmdTrace.c, cmdUlvl.c, doc/module.1.in, main.c, modules_def.h: * ModuleCmd_Refresh.c: Like "update" but refreshes only the non-persistent attributes of the currently loaded modules, regardless of the state of the loaded modules (i.e. refresh aliases). (still needs some test code) * ChangeLog, cmdConflict.c, version.c: * cmdConflict.c: Fixed memory allocation bug in cmdPrereq(). When there is more than 1 argument to the prereq command, both savedlens and savedlists were indexed past what the initial malloc allowed. 2005-11-15 sirdude <sirdude> * tcl/modulecmd.tcl: Updated alias function so that it also works on ksh. I tested it on a couple of different sh shells and everything seems to work this way, and it wasn't working on some of them before. Kent 2005-11-15 rkowen <rkowen> * .cxref, Makefile.am, xref/ModuleCmd_Avail.c.html, xref/ModuleCmd_Avail.c.src.html, xref/ModuleCmd_Clear.c.html, xref/ModuleCmd_Clear.c.src.html, xref/ModuleCmd_Display.c.html, xref/ModuleCmd_Display.c.src.html, xref/ModuleCmd_Help.c.html, xref/ModuleCmd_Help.c.src.html, xref/ModuleCmd_Init.c.html, xref/ModuleCmd_Init.c.src.html, xref/ModuleCmd_List.c.html, xref/ModuleCmd_List.c.src.html, xref/ModuleCmd_Load.c.html, xref/ModuleCmd_Load.c.src.html, xref/ModuleCmd_Purge.c.html, xref/ModuleCmd_Purge.c.src.html, xref/ModuleCmd_Switch.c.html, xref/ModuleCmd_Switch.c.src.html, xref/ModuleCmd_Update.c.html, xref/ModuleCmd_Update.c.src.html, xref/ModuleCmd_Use.c.html, xref/ModuleCmd_Use.c.src.html, xref/ModuleCmd_Whatis.c.html, xref/ModuleCmd_Whatis.c.src.html, xref/cmdAlias.c.html, xref/cmdAlias.c.src.html, xref/cmdConflict.c.html, xref/cmdConflict.c.src.html, xref/cmdInfo.c.html, xref/cmdInfo.c.src.html, xref/cmdIsLoaded.c.html, xref/cmdIsLoaded.c.src.html, xref/cmdLog.c.html, xref/cmdLog.c.src.html, xref/cmdMisc.c.html, xref/cmdMisc.c.src.html, xref/cmdModule.c.html, xref/cmdModule.c.src.html, xref/cmdPath.c.html, xref/cmdPath.c.src.html, xref/cmdSetenv.c.html, xref/cmdSetenv.c.src.html, xref/cmdTrace.c.html, xref/cmdTrace.c.src.html, xref/cmdUlvl.c.html, xref/cmdUlvl.c.src.html, xref/cmdUname.c.html, xref/cmdUname.c.src.html, xref/cmdVerbose.c.html, xref/cmdVerbose.c.src.html, xref/cmdVersion.c.html, xref/cmdVersion.c.src.html, xref/cmdWhatis.c.html, xref/cmdWhatis.c.src.html, xref/cmdXResource.c.html, xref/cmdXResource.c.src.html, xref/config.h.html, xref/config.h.src.html, xref/cxref.apdx.html, xref/cxref.function, xref/cxref.html, xref/cxref.include, xref/cxref.typedef, xref/cxref.variable, xref/error.c.html, xref/error.c.src.html, xref/getopt.c.html, xref/getopt.c.src.html, xref/getopt.h.html, xref/getopt.h.src.html, xref/index.html, xref/init.c.html, xref/init.c.src.html, xref/locate_module.c.html, xref/locate_module.c.src.html, xref/main.c.html, xref/main.c.src.html, xref/modules_def.h.html, xref/modules_def.h.src.html, xref/utility.c.html, xref/utility.c.src.html, xref/version.c.html, xref/version.c.src.html: Updated the cxref docs 2005-11-14 rkowen <rkowen> * ChangeLog, Makefile.am, ModuleCmd_Avail.c, ModuleCmd_Bootstrap.c, ModuleCmd_Init.c, ModuleCmd_List.c, ModuleCmd_Update.c, ModuleCmd_Use.c, README, acinclude.m4, cmdConflict.c, cmdInfo.c, cmdIsLoaded.c, cmdModule.c, cmdPath.c, cmdTrace.c, cmdUlvl.c, cmdVersion.c, config/tcl.m4, configure.ac, doc/module.1.in, error.c, init.c, lib/.cvsignore, lib/Makefile.am, lib/avec.h, lib/avec.man, lib/avec/.cvsignore, lib/avec/avec_.c, lib/avec/avec_.h, lib/avec/avec_accessor.c, lib/avec/avec_alloc.c, lib/avec/avec_close.c, lib/avec/avec_ctor.c, lib/avec/avec_dealloc.c, lib/avec/avec_decrease.c, lib/avec/avec_delete.c, lib/avec/avec_dtor.c, lib/avec/avec_increase.c, lib/avec/avec_init.c, lib/avec/avec_insert.c, lib/avec/avec_keys.c, lib/avec/avec_lookup.c, lib/avec/avec_remove.c, lib/avec/avec_resize.c, lib/avec/avec_resize_percentage.c, lib/avec/avec_set_fns.c, lib/avec/avec_values.c, lib/avec/avec_walk.c, lib/avec/avec_walk_r.c, lib/configure.ac, lib/iprime.h, lib/iprime.man, lib/iprime/.cvsignore, lib/iprime/chprime.c, lib/iprime/hprime.c, lib/iprime/iprime.c, lib/iprime/iprime_.h, lib/iprime/iprime_lut.c, lib/iprime/lprime.c, lib/iprime/scprime.c, lib/iprime/ucprime.c, lib/iprime/uhprime.c, lib/iprime/uiprime.c, lib/iprime/ulprime.c, lib/isqrt.h, lib/isqrt.man, lib/isqrt/.cvsignore, lib/isqrt/chsqrt.c, lib/isqrt/hsqrt.c, lib/isqrt/isqrt.c, lib/isqrt/isqrt_.h, lib/isqrt/isqrt_lut.c, lib/isqrt/lsqrt.c, lib/isqrt/scsqrt.c, lib/isqrt/ucsrt.c, lib/isqrt/uhsqrt.c, lib/isqrt/uisqrt.c, lib/isqrt/ulsqrt.c, lib/list.h, lib/list.man, lib/list/.cvsignore, lib/list/list_.c, lib/list/list_.h, lib/list/list_append.c, lib/list/list_ctor.c, lib/list/list_delete.c, lib/list/list_dtor.c, lib/list/list_exists.c, lib/list/list_first.c, lib/list/list_insert.c, lib/list/list_last.c, lib/list/list_number.c, lib/list/list_pop.c, lib/list/list_push.c, lib/list/list_qsort.c, lib/list/list_shift.c, lib/list/list_sizeof.c, lib/list/list_swap.c, lib/list/list_unshift.c, lib/memdebug.c, lib/memdebug.h, lib/memdebug.man, lib/strmalloc.c, lib/strmalloc.h, lib/strmalloc.man, lib/tests/.cvsignore, lib/tests/Makefile.am, lib/tests/tavec.c, lib/tests/tiprime.c, lib/tests/tisqrt.c, lib/tests/tstrmalloc.c, lib/tests/tuvec.c, lib/uvec.h, lib/uvec.man, lib/uvec/.cvsignore, lib/uvec/str2uvec.c, lib/uvec/uvec2str.c, lib/uvec/uvec2uvec.c, lib/uvec/uvec_accessor.c, lib/uvec/uvec_add.c, lib/uvec/uvec_alloc.c, lib/uvec/uvec_close.c, lib/uvec/uvec_copy.c, lib/uvec/uvec_copy_str.c, lib/uvec/uvec_copy_vec.c, lib/uvec/uvec_count_tok.c, lib/uvec/uvec_ctor.c, lib/uvec/uvec_dealloc.c, lib/uvec/uvec_dtor.c, lib/uvec/uvec_init.c, lib/uvec/uvec_insert.c, lib/uvec/uvec_push.c, lib/uvec/uvec_randomize.c, lib/uvec/uvec_reverse.c, lib/uvec/uvec_shift.c, lib/uvec/uvec_sort.c, lib/uvec/uvec_strfns.c, lib/uvec/uvec_strfree.c, lib/uvec/vec2uvec.c, locate_module.c, main.c, modulefiles/module-cvs.in, modules_def.h, testsuite/.cvsignore, testsuite/config/unix.exp, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/006-procs.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.00-init/015-version.exp, testsuite/modules.00-init/030-shells.exp, testsuite/modules.00-init/050-modpath.exp, testsuite/modules.00-init/080-begenv.exp, testsuite/modules.20-locate/040-alias.exp, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.20-locate/046-getsym.exp, testsuite/modules.20-locate/047-symerrs.exp, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.30-userlvl/040-advanced.exp, testsuite/modules.30-userlvl/045-adv.exp, testsuite/modules.30-userlvl/050-expert.exp, testsuite/modules.30-userlvl/055-exp.exp, testsuite/modules.35-trace/010-init_ts.exp, testsuite/modules.35-trace/020-default.exp, testsuite/modules.35-trace/030-all-on.exp, testsuite/modules.35-trace/031-all-off.exp, testsuite/modules.35-trace/040-load-all.exp, testsuite/modules.35-trace/041-load-all.exp, testsuite/modules.35-trace/042-load-on.exp, testsuite/modules.35-trace/043-load-onoff.exp, testsuite/modules.35-trace/044-load-ovr.exp, testsuite/modules.35-trace/050-disp-onoff.exp, testsuite/modules.35-trace/060-dilo-onoff.exp, testsuite/modules.35-trace/070-colon.exp, testsuite/modules.35-trace/095-cleanup.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/020-setenv.exp, testsuite/modules.50-cmds/022-setenv-eschars.exp, testsuite/modules.50-cmds/025-setenv-undo.exp, testsuite/modules.50-cmds/030-unsetenv.exp, testsuite/modules.50-cmds/035-unsetenv-undo.exp, testsuite/modules.50-cmds/036-unsetenv-x.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/070-alias-proc.exp, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/077-alias-undo.exp, testsuite/modules.50-cmds/080-info-name.exp, testsuite/modules.50-cmds/081-info-user.exp, testsuite/modules.50-cmds/082-info-user-exp.exp, testsuite/modules.50-cmds/083-info-mode.exp, testsuite/modules.50-cmds/084-info-mode-exp.exp, testsuite/modules.50-cmds/085-info-flags.exp, testsuite/modules.50-cmds/086-info-shells.exp, testsuite/modules.50-cmds/087-info-shells-exp.exp, testsuite/modules.50-cmds/088-info-isloaded.exp, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/101-badfac.exp, testsuite/modules.50-cmds/110-verbose.exp, testsuite/modules.50-cmds/115-verbose-msg.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp, testsuite/modules.50-cmds/140-system.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/200-break.exp, testsuite/modules.70-maint/020-update.exp, testsuite/modules.70-maint/030-purge.exp, testsuite/modules.70-maint/050-whatis-load.exp, testsuite/modules.70-maint/060-apropos.exp, testsuite/modules.70-maint/095-cleanup.exp, testsuite/modules.95-version/020-load.exp, testsuite/modules.95-version/020-unload.exp, testsuite/modules.95-version/022-load2.exp, testsuite/modules.95-version/022-unload2.exp, testsuite/modules.95-version/040-xgetenv.exp, testsuite/modules.95-version/999-cleanup.exp, utility.c, version.c: Merged in the modules_3_2_predeep_branch branch to the main trunk. Removed the hash library. 2005-07-21 sirdude <sirdude> * tcl/modulecmd.tcl: Made it so g_debug is passed to the module files. 2005-05-09 sirdude <sirdude> * tcl/modulecmd.tcl: Removed error message that shouldn't be print there. It was printing an error complaining it couldn't find a module even though it could. 2005-05-05 sirdude <sirdude> * tcl/modulecmd.tcl: Added a space between columns in module list command. Kent 2005-04-27 sirdude <sirdude> * tcl/modulecmd.tcl: Fix so module swap perl perl works the same as module swap perl (before was different if you had a different version than the default loaded) Kent * tcl/modulecmd.tcl: Ran modulecmd.tcl through frink since no one complained about doing it. Kent * tcl/modulecmd.tcl: added lazy find for module switch Example: Say you have the following modules perl/5.6 perl/5.8(default) and you have perl/5.6 loaded currently. Now you can do module switch perl perl and it will unload perl/5.6 and load perl/5.8 before it would error saying the perl module is not loaded. Kent 2005-04-19 sirdude <sirdude> * tcl/modulecmd.tcl: I added -l and -t options for module list and module avail also fixed resolveModuleVersionOrAlias up a bit so it deals with module(default) Kent 2005-04-15 sirdude <sirdude> * tcl/modulecmd.tcl: fix (default) display on modules that are "deep" soft/xemacs/21.4 etc.... Kent * tcl/modulecmd.tcl: made reload unload all modules then load them all in the proper order. Similar to module swap. Kent 2005-04-14 sirdude <sirdude> * tcl/modulecmd.tcl: Modified module switch so it unloaded last module first down to the module its swapping out and then reloaded everything in order. Before it was unloading them starting at the module to be swapped out to the end and then loading them in the same order. Probably not a big deal but code is actually shorter now and is probably more correct. I also added -a and -append as alternatives to --append and --prepend for module use. (There were comments saying it would be nice to have that) Kent * tcl/modulecmd.tcl: fixes module whatis problem with (default) before it wasn't able to find modules that had a .version file. Kent * tcl/modulecmd.tcl: Added two more globals DEF_COLUMNS and MODULES_CURRENT_VERSION and removed hardcoded bits relating to them. Also removed some misc code that was commented out and no longer used. Kent 2005-04-08 sirdude <sirdude> * tcl/modulecmd.tcl: Fix module swap so that it unloads old module and everything after it then loads new and everything that was after old. Kent * tcl/modulecmd.tcl: Fix up module init(cmds) I made them behave like the c versions example before the initadd added a module to every module load line now it just does the first. I have a ~/.modules directory and before this caused the init(cmds) to fail. Also made it so it only changes one file not all . files it goes through. Kent 2005-04-07 sirdude <sirdude> * tcl/modulecmd.tcl: Moved some global variables up to the top of the file. Kent 2005-04-06 sirdude <sirdude> * tcl/modulecmd.tcl: Modified patch for prereq's I also fixed a small problem in the module show for prereq's Kent * tcl/modulecmd.tcl: Rodney Mach's unalias fix Kent 2004-11-18 lakata <lakata> * tcl/README-EMACS.txt, tcl/init/.cvsignore, tcl/init/lisp.in: submitted by tbennett@nvidia.com * tcl/init/Makefile, tcl/modulecmd.tcl: patch for Emacs from tbennett@nvidia.com 2004-11-05 lakata <lakata> * tcl/modulecmd.tcl: added more error checking to init/modulerc. probably should change this yet again to standardize the naming convention * tcl/modulecmd.tcl: changed hardcoded path to /home/Mark etc to $MODULESHOME 2004-10-22 lakata <lakata> * tcl/init/README.txt: added instructions on using the new autoinit feature * tcl/modulecmd.tcl: added autoinit feature. not documented until we get some feedback 2004-10-22 harlan <harlan> * locate_module.c: cleanup/refactor * configure.ac: cleanup * ModuleCmd_Avail.c: USE_COLCOMP -> DEF_COLLATE_BY_NUMBER * Makefile.am: Alphabetize... 2004-10-15 lakata <lakata> * tcl/modulecmd.tcl: * made compatibility changes with tcl < 8.1. string equal changed to string match and changes to regular expressions. There is now a caveat: module init* commands won't work if there are tabs in your startup file around the module commands if tcl < 8.1. * Fixed display so that setenv values don't give an error if used later in the module during display * Fixed bug with Perl. rendersetting output now ends with "1;" for perl so that the require command works correctly * Changed noexistent path error to warning in cmdModuleUse. Otherwise, if you gave more than one path, some of the other legal paths may not get added. This is a revert back to how modulecmd was originally and probably breaks compatability with the C version in this regard 2004-10-13 lakata <lakata> * tcl/modulecmd.tcl: * Fixed ModulesHelp so that it doesn't error out when not present * Added module-verision,module-alias, module-trace, module-user, module-verbosity, and module-log to module file execution. All but module-version and module-alias give a warning that it is not implemented * Added module-trace, module-user, module-verbosity, and module-log to modulerc execution. All give warnings that the funcionatlity is not implemented * Added #%Module checking on .version and .modulerc files * execute-version will now add version defaults to the global defaults array like .modulerc files do * .version files are no longer executed if a .modulerc is executed in the same directory * module-info symbols command implemented (could use more testing) * module-info version command implemented (could use more testing) * moduule-info alias command implemented * module-version - fixed problem of adding duplicate version aliases to global hash * module-alias updated to keep track of aliases by module name in global hash * Fix unload-path so that setenv-path followed by prepend-path works during unload * fixed bug in is-loaded. It took a list of modules as an argument but would return true if only one of the arguments was loaded. Now all arguments have to be loaded to return true. * Added getVersAliasList function. Returns list of default and version aliases given a modulename/version * Added default and version alias information to avail and list output * Added a few more "----" to the module list output * tcl/modulecmd.tcl: modulecmd.tcl 2004-10-07 lakata <lakata> * tcl/modulecmd.tcl: (1) Andrew Barbers changes to fix some bugs. (2) Mark Lakatas change to sym links under cygwin. removed check for MODULEPATH, since you can use "module use ..." to set it 2004-10-05 lakata <lakata> * tcl/modulecmd.tcl: from Andrew Barber: Here is another update. This one has some tricky changes. Most of it was done to try and get the testsuite to pass. I added a few more features too. The biggest changes were in: getPathToModule - now it can resolve aliases found in .modulerc and .version files , runModulerc - now this is responsible for finding and executing the global .modulerc files (new feature for tcl version) * tcl/modulecmd.tcl: patch from Tony Bennett. need for gentoo system 2004-10-01 lakata <lakata> * tcl/modulecmd.tcl: Andrew Barbers changes: * added module-verision and module-alias commands, * added automatic of execution .modulerc files found in module directories, * added switch processing and -debug switch for debug messages 2004-09-30 lakata <lakata> * tcl/modulecmd.tcl: (1) added more commands to the internal "module" command (2) added all of the init* commands, like initadd (3) changed the help message slightly 2004-09-23 sirdude <sirdude> * tcl/modulecmd.tcl: David Mores patch so that first module in module list is shown again. Sorry about that I should have caught that before... Kent * tcl/modulecmd.tcl: Mark Moe's patch to prevent infinate loop when you have module a loading module b where module b has a .version that points to unavailable version of module b Kent 2004-09-21 sirdude <sirdude> * tcl/modulecmd.tcl: David Mores, patches to the COLUMNS stuff. Kent * tcl/modulecmd.tcl: Mark Moe's patch for skipping 0 length modules in module list and adding the printing of: "Currently Loaded Modulesfiles:" Kent 2004-09-16 sirdude <sirdude> * tcl/modulecmd.tcl: Harlan Stenn's Patch from Phong Nguyen, It basically wraps the openning of a tmpfile in a catch command I also updated the error message after it to use the tmpfile var instead of hardcoding it... Kent 2004-05-25 sirdude <sirdude> * tcl/init/bash.in, tcl/init/csh.in, tcl/init/ksh.in, tcl/init/perl.in, tcl/init/python.in, tcl/init/sh.in, tcl/init/tcsh.in, tcl/init/zsh.in: tcl version of modules now looks at environment var TCLSH if it exits and uses that first. Suggested by David Astrom. Kent * tcl/modulecmd.tcl: Use env(COLUMNS) if its defined instead of a hard coded number. submitted by David Astrom through Mark Lakata. Kent 2004-04-21 sirdude <sirdude> * tcl/modulecmd.tcl: David Mores patch to prevent tcl version from hanging with a .version file that does not set the ModulesVersion correctly. Kent 2004-01-16 sirdude <sirdude> * tcl/Makefile: removed clean and test from the default make. Kent * tcl/Makefile, testsuite/config/unix.exp: Made it so that the testsuite works with the tcl version of modules. Current stats for the tcl version are: # of expected passes 146 # of unexpected failures 376 Not too shabby, I'm guessing it will be fairly straight forward to increase this by quite a bit. Kent 2004-01-15 sirdude <sirdude> * tcl/init/bash.in, tcl/init/csh.in, tcl/init/ksh.in, tcl/init/perl.in, tcl/init/python.in, tcl/init/sh.in, tcl/init/tcsh.in, tcl/init/zsh.in: Modified the tcl init files so that they try to find tclsh, this should make them quite a bit faster assuming they find it. (This way it locates the shell just once instead of for every single command.) Kent * tcl/modulecmd.tcl: Improved module help functionatlity for the tcl version of modules. now you can type module help (module) also commiting the patch someone submitted to the board that allows for .version files in directorys other than the top level. (for tcl version only) Kent Mein 2003-10-30 harlan <harlan> * tcl/modulecmd.tcl: bash requires a space after the { on function definitions. * tcl/modulecmd.tcl: Remove the /tmp file early. Use the "function" keyword when creating sh functions; otherwise if the function already exists the name gets expanded on some shells. 2003-10-28 lakata <lakata> * tcl/modulecmd.tcl: prevent "break" from generating an error message 2003-10-27 lakata <lakata> * tcl/modulecmd.tcl: 1) module-info shell and shelltype would generate an TCL error when used (FIXED) 2) remove-path had two typos in it (FIXED) 3) Added detection of full path in getPathToModule procedure 2003-10-20 lakata <lakata> * tcl/modulecmd.tcl: 1) Add support for the other shells that the C version includes 2) Add support for prereq command 3) Replace the "/bin/uname" calls to use the tcl_platform variable and "info hostname" command Enclosed are my latest modulecmd.tcl updates. I have added most of the features that I thought it needed and implemented the slave interpreter to execute modulefile in. I have tested it to some degree but not very seriously. Richard.M.Born@seagate.com 2003-10-15 lakata <lakata> * tcl/modulecmd.tcl: fixed two bugs in the display command 2003-10-07 lakata <lakata> * tcl/modulecmd.tcl: cleaned up the mode and modulename settings that used to be access via the upvar. also changed the calling convention for getPathToModule, which now does not throw an exception for minor warnings * tcl/modulecmd.tcl: fixed a bug where the result of the catch is either an error or the last command 2003-10-06 lakata <lakata> * tcl/modulecmd.tcl: fixed a bug in the popMode command and made it backward compatible with tcl 8.0 * tcl/modulecmd.tcl: 1. pulled all references to puts stderr to report/reportWarnings/reportInternalBug. 2. changed the way the g_mode variable is handled. Instead of relying on the call stack, it now uses an explicit stack, which should solve any problems with using other namespaces 3. removed a bunch of debugging statements. 4. fixed the way errors are handled, giving more meaningful responses. 5. if an error is caught in load, the env/alias settings are NOT updated and restored to a previous state. for instance, in a conflict this is important. * tcl/modulecmd.tcl: fixed bug in listModules that was failing on cygwin 2003-10-03 lakata <lakata> * tcl/modulecmd.tcl: Proxy check in for Richard.M.Born@seagate.com. He wrote: 1) It didn't handle modulefiles in the main directory for commands like module avail 2) It didn't define the ModulesCurrentModulefile variable 3) It didn't ignore certain temp files (*~, #*#) 4) It didn't look for the Modulefile MagicCookie to filter out non-modulefiles I have updated modulecmd.tcl to address these issues. I have removed lsHack and replaced it with listModules procedure. I am not familiar with the glob issue that you noted for Cygwin so you may want to run a few test cases to see if the new function still works for you. I also updated the module paths command to what I think you were intending. 2003-08-08 harlan <harlan> * tcl/modulecmd.tcl: Changes to lsHack for cmdModulePath and friends. 2003-08-07 harlan <harlan> * tcl/modulecmd.tcl: Typo * tcl/modulecmd.tcl: Add $Revision$ to the version * tcl/modulecmd.tcl: Initial support for "module path". 2003-08-02 harlan <harlan> * tcl/modulecmd.tcl: /bin/sh has no shell functions. Avoid an extra call to getPathToModule 2003-08-01 harlan <harlan> * tcl/modulecmd.tcl: whitespace cleanup, lose cruft. 2003-07-30 lakata <lakata> * tcl/README.txt, tcl/modulecmd.tcl: version 0.98: fixed a bug in the error_count (missing closing brace). also implemented check to abort the tempfile sourcing if the tempfile is empty. this is to be more blackboxish, avoiding relying on the shell to do a clean up. one of our users is not using the module command correctly, and it is created a whole bunch of empty /tmp/modulescript files in the /tmp dir. 2003-07-15 harlan <harlan> * tcl/modulecmd.tcl: Begin to handle errors. 2003-07-10 harlan <harlan> * ChangeLog, tcl/modulecmd.tcl: * tcl/modulecmd.tcl: If g_force is set, ignore *_modshare. When we produce a shell function, preface the definition with "function" in case it's already defined. Default g_force to 1 now. 2003-06-26 harlan <harlan> * tcl/modulecmd.tcl: ModuleTcl: 0.97 Aliases: add/load, rm/inload, nodename/node We need to eval more "cmdModule{Unl,L}oad $arg" lines to: Implement --append (and --prepend) for cmdModuleUse Use -dictionary lsorts to provide an easy substitute for colcomp(). Added SCCS and RCS to the ignoreDir list. Moved ignoreDir processing to lsHack to fix a problem. Make sure an empty modulefile direcoty doesn't cause an error. 2003-06-02 harlan <harlan> * tcl/init/README.txt: Reformat some long lines. 2003-05-30 lakata <lakata> * tcl/init/README.txt, tcl/init/bash.in, tcl/init/csh.in, tcl/init/ksh.in, tcl/init/modulerc, tcl/init/perl.in, tcl/init/sh.in, tcl/init/tcsh.in, tcl/init/zsh.in: changed the way MODULEPATH is set up. since this is another environment variable like all the others, it is now set using the module command itself. pretty sneaky, huh? * tcl/modulecmd.tcl: 1. added the "source" command (experimental) 2. added sanity checking to verify that something external did not muck with path and path_modshare variables. 3. fixed a bug if you use tcsh and your paths get longer than 1024 characters. Previously, it was truncating the path, but this can get you into trouble if important things like /usr/bin or /usr/local/bin are truncated. The real solution is to STOP USING TCSH... use zsh instead. 2003-03-28 lakata <lakata> * tcl/README.txt, tcl/modulecmd.tcl: changes for cygwin. files should not have cr/lf (DOS) endings. * tcl/init/Makefile, tcl/init/README.txt, tcl/init/bash, tcl/init/bash.in, tcl/init/{csh => csh.in}, tcl/init/ksh, tcl/init/ksh.in, tcl/init/{perl => perl.in}, tcl/init/{python => python.in}, tcl/init/sh, tcl/init/sh.in, tcl/init/{tcsh => tcsh.in}, tcl/init/zsh, tcl/init/zsh.in: made init files more general 2003-01-22 lakata <lakata> * tcl/init/perl: error checking if something goes wrong in perl * tcl/modulecmd.tcl: fixed bugs with corrupted env vars, improved the reliability of _modshare variables 2002-11-29 lakata <lakata> * tcl/modulecmd.tcl: changed help message * tcl/README.txt, tcl/init/bash, tcl/init/csh, tcl/init/ksh, tcl/init/perl, tcl/init/python, tcl/init/sh, tcl/init/tcsh, tcl/init/zsh, tcl/init/zsh.debug, tcl/modulecmd.tcl: first check in 2002-09-18 harlan <harlan> * ChangeLog, Makefile.am, lib/.cvsignore, lib/Makefile.am, lib/tests/Makefile.am: * Makefile.am (modulecmd_CFLAGS): Use X_CFLAGS and TCL_INCLUDES. * lib/tests/Makefile.am (EXTRA_PROGRAMS): Renamed from noinst_PROGRAMS. Lose the .x suffixes. * lib/Makefile.am (ACLOCAL_AMFLAGS): Look in ../config/ . 2002-09-16 rkowen <rkowen> * ChangeLog, Makefile.am, ModuleCmd_List.c, TODO, colcomp.c, configure.ac, lib/uvec.man, locate_module.c, main.c, modules_def.h, utility.c: 2002-09-16 R.K. Owen <rk@owen.sj.ca.us> * colcomp.c: removed * utility.c: added colcomp.c contents * Makefile.am: removed colcomp.c * main.c: Added DEF_COLLATE_BY_NUMBER output for --version * configure.ac: changed USE_COLCOMP to DEF_COLLATE_BY_NUMBER, and added memdebug * locate_module.c: changed USE_COLCOMP and GetModuleName for deep dirs. * modules_def.h: check for HAVE_CONFIG_H, and added memdebug * ModuleCmd_List.c: Simplified using uvec objects 2002-09-13 rkowen <rkowen> * ChangeLog, config/.cvsignore, init/.cvsignore: 2002-09-12 R.K. Owen <rk@owen.sj.ca.us> * config/.cvsignore: New File: Ignore autogenerated files. * init/.cvsignore: Ignore autogenerated files. * .cvsignore, ChangeLog, doc/.cvsignore, etc/.cvsignore, ext/.cvsignore, lib/.cvsignore, lib/tests/.cvsignore, lib/tests/Makefile.am, modulefiles/.cvsignore: 2002-09-12 R.K. Owen <rk@owen.sj.ca.us> * .cvsignore: Ignore autogenerated files. * doc/.cvsignore: Ignore autogenerated files. * etc/.cvsignore: Ignore autogenerated files. * ext/.cvsignore: Ignore autogenerated files. * lib/.cvsignore: Ignore autogenerated files. * lib/tests/.cvsignore: Ignore autogenerated files. * modulefiles/.cvsignore: Ignore autogenerated files. * lib/tests/Makefile.am: Tweeked for autoreconf * ChangeLog, README, lib/Makefile.am, lib/aclocal.m4, lib/configure.ac, lib/tests/tuvec.c, lib/uvec.h, lib/uvec/uvec_copy_str.c, lib/uvec/uvec_strfree.c: 2002-09-12 R.K. Owen <rk@owen.sj.ca.us> * README: Updated the anonymous CVS invocation. * lib/aclocal.m4: Deleted auto* generated file. * lib/configure.ac: Tweeked to autoreconf * lib/Makefile.am: Tweeked to autoreconf * lib/uvec.h: Added uvec_strfree * lib/uvec/uvec_copy_str.c: Uses uvec string fns * lib/uvec/uvec_copy_vec.c: Uses uvec string fns * lib/uvec/uvec_strfree.c: New file: to dealloc uvec2str() generated strings * lib/tests/tuvec.c: Updated for uvec changes 2002-09-12 harlan <harlan> * doc/Makefile.am, lib/config.h.in, lib/configure: * doc/Makefile.am: Added file. * lib/configure: Remove auto*-generated file. * lib/config.h.in: Ditto. * ChangeLog, Makefile.in, README, aclocal.m4, config.h.in, config/compile, config/depcomp, config/install-sh, config/missing, config/mkinstalldirs, configure, doc/Makefile.in, etc/Makefile.in, ext/Makefile.in, init/Makefile.in, lib/Makefile.in, lib/tests/Makefile.in, modulefiles/Makefile.in: * README: Update the instructions for using the CVS version of modules. * modulefiles/Makefile.in: Deleted auto* generated file. * lib/tests/Makefile.in: Ditto. * lib/Makefile.in: Ditto. * init/Makefile.in: Ditto. * ext/Makefile.in: Ditto. * etc/Makefile.in: Ditto. * doc/Makefile.in: Ditto. * config/mkinstalldirs: Ditto. * config/missing: Ditto. * config/install-sh: Ditto. * config/depcomp: Ditto. * config/compile: Ditto. * configure: Ditto. * config.h.in: Ditto. * aclocal.m4: Ditto. * Makefile.in: Ditto. * ChangeLog: Renamed ChangeLog to NEWS, started a new ChangeLog. * Makefile.am, ModuleCmd_Avail.c, NEWS, colcomp.c, configure.ac, lib/Makefile, locate_module.c: * colcomp.c: New file. Alternative collating algorithm that sorts numeric substrings numerically (mostly). * lib/Makefile: Remove auto*-generated file. * locate_module.c (SortedDirList): Ignore SCCS/ subdirs, too. * configure.ac: Disable our "look" for RUNTEST; it drives auto* crazy. Added the --with-file-collate={string,number} test, which provides a way to enable USE_COLCOMP. * ModuleCmd_Avail.c (fi_ent_cmp): USE_COLCOMP when told to do so. * locate_module.c (filename_compare): Ditto. * Makefile.am (modulecmd_LDFLAGS): lib is in the builddir, not the srcdir. (modulecmd_SOURCES): Added colcomp.c . * ChangeLog => NEWS: Rename ChangeLog to NEWS. 2002-08-27 rkowen <rkowen> * lib/Makefile, lib/Makefile.am, lib/Makefile.in, lib/memdebug.c, lib/memdebug.h, lib/memdebug.man, lib/tests/Makefile.in: Added the memdebug headerfile and sources. 2002-08-22 rkowen <rkowen> * cmdVersion.c, locate_module.c, modules_def.h: Fixed up GetDefault to handle .modulerc and .version files, where the latter will read the env.var. defined in .version and do a module-version so that the modlist data can be updated. These mods handle deep dirs on "module load" ... now need to fix up the rest! There's also now an amazing amount of cruft to weed out. 2002-08-14 lakata <lakata> * README: updated docs to reflect new configure (TCL paths) * locate_module.c, modules_def.h: removed compiler warnings about const char* * configure, configure.ac: added hack for linux that cant do -lX11 with -L/usr/X11R6/lib * cmdInfo.c, cmdVersion.c: removed compiler warnings * Makefile.in: fixed LDFLAGS build problem when not building in orig dist. directory 2002-08-02 rkowen <rkowen> * Makefile.am, Makefile.in, ModuleCmd_Avail.c, ModuleCmd_Display.c, ModuleCmd_Init.c, ModuleCmd_Load.c, ModuleCmd_Switch.c, aclocal.m4, cmdConflict.c, cmdInfo.c, cmdIsLoaded.c, cmdPath.c, cmdVersion.c, configure, configure.ac, error.c, etc/Makefile.in, ext/Makefile.in, init/Makefile.in, locate_module.c, main.c, modulefiles/Makefile.in, modules_def.h, testsuite/modules.00-init/080-begenv.exp, utility.c: A whole slew of changes progressing to deap modulefile directories. The current is not usuable, but will eventually be. These changes are checked in for safe keeping while R.K.Owen is on vacation. * xref/ModuleCmd_Avail.c.html, xref/ModuleCmd_Clear.c.html, xref/ModuleCmd_Display.c.html, xref/ModuleCmd_Help.c.html, xref/ModuleCmd_Init.c.html, xref/ModuleCmd_List.c.html, xref/ModuleCmd_Load.c.html, xref/ModuleCmd_Purge.c.html, xref/ModuleCmd_Switch.c.html, xref/ModuleCmd_Update.c.html, xref/ModuleCmd_Use.c.html, xref/ModuleCmd_Whatis.c.html, xref/cmdAlias.c.html, xref/cmdConflict.c.html, xref/cmdInfo.c.html, xref/cmdIsLoaded.c.html, xref/cmdLog.c.html, xref/cmdMisc.c.html, xref/cmdModule.c.html, xref/cmdPath.c.html, xref/cmdSetenv.c.html, xref/cmdTrace.c.html, xref/cmdUlvl.c.html, xref/cmdUname.c.html, xref/cmdVerbose.c.html, xref/cmdVersion.c.html, xref/cmdWhatis.c.html, xref/cxref.apdx.html, xref/cxref.function, xref/cxref.html, xref/cxref.include, xref/cxref.typedef, xref/cxref.variable, xref/error.c.html, xref/getopt.c.html, xref/init.c.html, xref/locate_module.c.html, xref/main.c.html, xref/utility.c.html, xref/version.c.html: Updated the xref html, but not current. * lib/Makefile, lib/Makefile.in, lib/uvec.h, lib/uvec.man, lib/uvec/uvec_copy_str.c, lib/uvec/uvec_copy_vec.c, lib/uvec/uvec_strfns.c: Changed how uvec sets/gets the uvec_strfns. 2002-07-29 rkowen <rkowen> * lib/Makefile.am, lib/list.h, lib/list.man, lib/list/.cvsignore, lib/list/list_.c, lib/list/list_.h, lib/list/list_append.c, lib/list/list_ctor.c, lib/list/list_delete.c, lib/list/list_dtor.c, lib/list/list_exists.c, lib/list/list_first.c, lib/list/list_insert.c, lib/list/list_last.c, lib/list/list_number.c, lib/list/list_pop.c, lib/list/list_push.c, lib/list/list_qsort.c, lib/list/list_shift.c, lib/list/list_sizeof.c, lib/list/list_swap.c, lib/list/list_unshift.c: Added the list object for doubly linked lists. 2002-07-18 rkowen <rkowen> * lib/config.h.in: Need this also. * lib/Makefile.in: Forgot this one. * lib/Makefile, lib/Makefile.am, lib/aclocal.m4, lib/configure, lib/configure.ac, lib/tests/.cvsignore, lib/tests/Makefile.am, lib/tests/Makefile.in: Adding in the automake/autoconf files for the modules library. * lib/strmalloc.c, lib/strmalloc.h, lib/strmalloc.man, lib/tests/tstrmalloc.c: Added the strmalloc code to the modules library, this will be useful for creating new strings with aliases expanded. * lib/.cvsignore, lib/tests/tuvec.c, lib/uvec.h, lib/uvec.man, lib/uvec/.cvsignore, lib/uvec/str2uvec.c, lib/uvec/uvec2str.c, lib/uvec/uvec2uvec.c, lib/uvec/uvec_accessor.c, lib/uvec/uvec_add.c, lib/uvec/uvec_alloc.c, lib/uvec/uvec_close.c, lib/uvec/uvec_copy.c, lib/uvec/uvec_copy_str.c, lib/uvec/uvec_copy_vec.c, lib/uvec/uvec_count_tok.c, lib/uvec/uvec_ctor.c, lib/uvec/uvec_dealloc.c, lib/uvec/uvec_dtor.c, lib/uvec/uvec_init.c, lib/uvec/uvec_insert.c, lib/uvec/uvec_push.c, lib/uvec/uvec_randomize.c, lib/uvec/uvec_reverse.c, lib/uvec/uvec_shift.c, lib/uvec/uvec_sort.c, lib/uvec/uvec_strfns.c, lib/uvec/vec2uvec.c: Added the uvec code, which provides basic unix vector capabilities. A unix vector is a NULL terminated array of char * strings. An example of this is *argv[] or *environ[]. * lib/isqrt.h, lib/isqrt.man, lib/isqrt/.cvsignore, lib/isqrt/chsqrt.c, lib/isqrt/hsqrt.c, lib/isqrt/isqrt.c, lib/isqrt/isqrt_.h, lib/isqrt/isqrt_lut.c, lib/isqrt/lsqrt.c, lib/isqrt/scsqrt.c, lib/isqrt/ucsrt.c, lib/isqrt/uhsqrt.c, lib/isqrt/uisqrt.c, lib/isqrt/ulsqrt.c, lib/tests/tisqrt.c: Adding in the isqrt code to the modules library, this is needed by iprime (which is needed by avec). * lib/iprime.h, lib/iprime.man, lib/iprime/.cvsignore, lib/iprime/chprime.c, lib/iprime/hprime.c, lib/iprime/iprime.c, lib/iprime/iprime_.h, lib/iprime/iprime_lut.c, lib/iprime/lprime.c, lib/iprime/scprime.c, lib/iprime/ucprime.c, lib/iprime/uhprime.c, lib/iprime/uiprime.c, lib/iprime/ulprime.c, lib/tests/tiprime.c: Added the iprime code to the modules library. This is needed by avec to compute the optimal hash size. * lib/avec.h, lib/avec.man, lib/avec/.cvsignore, lib/avec/avec_.c, lib/avec/avec_.h, lib/avec/avec_accessor.c, lib/avec/avec_alloc.c, lib/avec/avec_close.c, lib/avec/avec_ctor.c, lib/avec/avec_dealloc.c, lib/avec/avec_decrease.c, lib/avec/avec_delete.c, lib/avec/avec_dtor.c, lib/avec/avec_increase.c, lib/avec/avec_init.c, lib/avec/avec_insert.c, lib/avec/avec_keys.c, lib/avec/avec_lookup.c, lib/avec/avec_remove.c, lib/avec/avec_resize.c, lib/avec/avec_resize_percentage.c, lib/avec/avec_set_fns.c, lib/avec/avec_values.c, lib/avec/avec_walk.c, lib/avec/avec_walk_r.c, lib/tests/tavec.c: Added an associative vector object to the modules library. 2002-06-17 rkowen <rkowen> * RKOConfigure, locate_module.c: Minor changes in preparation for big ones. * ChangeLog, ModuleCmd_Avail.c, ModuleCmd_Update.c, ModuleCmd_Use.c, config.h.in, configure, configure.ac, doc/module.1.in, error.c, init.c, main.c, modules_def.h, testsuite/config/unix.exp, testsuite/modules.00-init/006-procs.exp, testsuite/modules.00-init/080-begenv.exp, testsuite/modules.70-maint/020-update.exp: * Made the .modulesbeginenv facility optional (default is not to have it) * default for cache is now "no" * Added version_test() to testsuite to make some of the tests conditional on the values generated by --version. - the configure options help is formatted with AC_HELP_STRING 2002-06-14 rkowen <rkowen> * .cvsignore, ChangeLog, Makefile.am, Makefile.in, config.h.in, config/compile, configure, configure.ac, doc/Makefile.in, etc/.cvsignore, etc/Makefile.am, etc/Makefile.in, ext/.cvsignore, ext/Makefile.am, ext/Makefile.in, init/Makefile.am, init/Makefile.in, init/filter, init/zsh.in, modulefiles/Makefile.am, modulefiles/Makefile.in, testsuite/etc/.cvsignore: * Reworked every configure-based file - uses automake to generate most of the Makefile.in - renamed configure.in to configure.ac per autoconf - Versioning is optional now with a configure option - reworked the init scripts for versioning or not - eliminated acconfig.h and put templates in configure.ac - make install now honors the DESTDIR variable for package builds - honors bindir for modulecmd location (but the init scripts are only correct if no versioning) * Collected the usage info and now it can be displayed with the --help or -H option (same as help) * --version now gives most of the optional configure parameters for easy debugging of problems * Fixed bootstrap to just source the appropriate init script * Makefile.am, Makefile.in, acconfig.h, config.h.in, configure, configure.ac, etc/Makefile.am, etc/Makefile.in, etc/add.modules.in, etc/global/bashrc.in, etc/global/csh.cshrc.in, etc/skel/.cshrc.in, etc/skel/.kshenv.in, ext/Makefile.am, ext/Makefile.in, ext/add.ext.in, ext/common/.cshrc.in, ext/common/.kshenv.in, init/.modulespath.in, init/bash.in, init/csh.in, init/ksh.in, init/perl.in, init/python.in, init/sh.in, init/zsh.in: Removed the acconfig.h file since it's essentially in the configure.ac now. Reworked all the init,skel,add.* files to handle versioning or no. Added Makefile.am to ./etc/ and ./ext/ for cleaner installs. 2002-06-13 rkowen <rkowen> * Makefile.am, Makefile.in, ModuleCmd_Help.c, acconfig.h, config.h.in, doc/module.1.in, main.c, modules_def.h, testsuite/modules.00-init/015-version.exp: The version info displays some of the configuration options. Moved the usage info into module_usage() that can be displayed with the --help or -H switch. * Makefile.am, Makefile.in, ModuleCmd_Whatis.c, acconfig.h, config.h.in, configure, configure.ac, main.c: Renamed INSTPATH to PREFIX and is no longer passed as a compiler -D argument, but is now entered directly into the config.h header. 2002-06-12 rkowen <rkowen> * Makefile.am, Makefile.in, ModuleCmd_Bootstrap.c, init.c, main.c, modules_def.h, utility.c: Converted the configure scripts over to automake,autoconf generation. Modified "module bootstrap" to source the init files. Put the shell properties and moved set_derelict and renamed it set_shell_properties into init.c . Created a matrix of shell properties { name, derelict, init, cmd separator }. * testsuite/etc/apropos.cache, testsuite/modules.50-cmds/095-uname.exp: Fixed test syntax - it didn't like "dangling" ('s and )'s in regexp string. Just escaped them. Removed apropos.cache - it gets regenerated with each test. * ModuleCmd_Switch.c, testsuite/modules.50-cmds/170-swap.exp: Fixed up "module switch" one argument form (use stringer alloc) and added more tests (one for each of the major shells). 2002-06-11 rkowen <rkowen> * acconfig.h, config.h.in, configure, configure.ac: Added MODULES_INIT_DIR to the configure files. 2002-06-10 rkowen <rkowen> * Makefile.am, Makefile.in, ModuleCmd_Bootstrap.c, acconfig.h, acinclude.m4, aclocal.m4, config.h.in, configure, configure.ac: Upgraded the auto-configuration to use automake/1.6 and autoconf/2.53 to auto-generate some of the files. * init/bash.in, init/csh.in, init/ksh.in, init/perl.in, init/sh.in, init/zsh.in: Re-introduced the init files with versioning. * config/depcomp, config/install-sh, config/install.sh, config/missing, config/mkinstalldirs: Upgraded install scripts to automake/1.6 autoconf/2.53 standards. 2002-06-06 rkowen <rkowen> * configure.in => configure.ac: configure.ac is actually the continuation of configure.in. do "cvs log configure.in" for a history. ---------------------------- revision 1.11 (of configure.in) date: 2002/04/29 21:16:48; author: rkowen; state: Exp; lines: +145 -116 * Upgraded configure.in to autoconf 2.52. * Changed the configure to search for libTcl.sh to acquire all it's necessary Tcl env.vars from it. 2002-05-06 rkowen <rkowen> * .cvsignore, doc/.cvsignore, etc/.cvsignore, etc/global/.cvsignore, etc/skel/.cvsignore, ext/.cvsignore, ext/common/.cvsignore, init/.cvsignore, modulefiles/.cvsignore, testsuite/.cvsignore: Added a bunch of .cvsignore files to avoid CVS in listing the known (but made) files. 2002-05-03 rkowen <rkowen> * testsuite/modulefiles/eschars/1.0, testsuite/modules.35-trace/010-init_ts.exp, testsuite/modules.35-trace/030-all-on.exp, testsuite/modules.35-trace/031-all-off.exp, testsuite/modules.35-trace/040-load-all.exp, testsuite/modules.35-trace/041-load-all.exp, testsuite/modules.35-trace/042-load-on.exp, testsuite/modules.35-trace/043-load-onoff.exp, testsuite/modules.35-trace/044-load-ovr.exp, testsuite/modules.35-trace/050-disp-onoff.exp, testsuite/modules.35-trace/060-dilo-onoff.exp, testsuite/modules.35-trace/070-colon.exp, testsuite/modules.50-cmds/022-setenv-eschars.exp, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, utility.c: Added EscapePerlString to utility.c, added '*' to list of csh special chars. Fixed up tests to reflect these changes. Added testsuite/modules.50-cmds/022-setenv-eschars.exp to test out escaping special chars. 2002-04-30 rkowen <rkowen> * install.sh, version.c: Moved install.sh to config/ and updated the version to 3.2.0a . 2002-04-30 lakata <lakata> * ModuleCmd_Bootstrap.c: fixed getexecname() problem. 2002-04-29 rkowen <rkowen> * RKOConfigure: Eliminated a lot of the extraneous options now that configure/tclConfig.sh . * ChangeLog, Makefile.in, ModuleCmd_Avail.c, ModuleCmd_Init.c, ModuleCmd_Load.c, ModuleCmd_Purge.c, ModuleCmd_Switch.c, ModuleCmd_Update.c, ModuleCmd_Whatis.c, aclocal.m4, cmdConflict.c, cmdLog.c, cmdModule.c, cmdPath.c, cmdTrace.c, cmdVersion.c, cmdXResource.c, config/install.sh, config/tcl.m4, configure, configure.in, error.c, init.c, locate_module.c, main.c, modules_def.h, utility.c: * Upgraded configure.in to autoconf 2.52. * Changed the configure to search for libTcl.sh to acquire all it's necessary Tcl env.vars from it. * created a utility function stringer() to handle most of the strcpy/strcat operations and to automatically allocate string memory. * Mostly changed the memory malloc/free to use stringer/null_free. * rewrote some of the code logic to have a single point of exit with unwinding of memory allocations. 2002-04-29 lakata <lakata> * ModuleCmd_Bootstrap.c: fixed bug with binary_name without an absolute path * ModuleCmd_Help.c: fixed help for swap|switch, to reflect optional first modulefile1 * ModuleCmd_Bootstrap.c, config.h.in, configure, configure.in: added PREFIX to config.h and propagated to bootstrap code as MODULESHOME * doc/module.1.in: updated docs regarding "switch" and MODULESHOME * ChangeLog: "module switch foo/1.3" change log * ModuleCmd_Bootstrap.c, ModuleCmd_Switch.c, error.c, modules_def.h: added support for 1-arg form of "swap/switch" command * ModuleCmd_List.c: sanity check added in case _LMFILES_ and LOADEDMODULES env vars get corrupted externally * testsuite/modules.50-cmds/170-swap.exp: added test for one-argument form of swap/switch command 2002-04-27 lakata <lakata> * ChangeLog, Makefile.in, ModuleCmd_Bootstrap.c, cmdModule.c, cmdTrace.c, config.h.in, doc/module.1.in, init/bash.in, init/csh.in, init/ksh.in, init/perl.in, init/sh.in, init/zsh.in, main.c, modules_def.h, utility.c: added the bootstrap command 2002-04-24 lakata <lakata> * ChangeLog: more stuff * init/tcsh.in: tcsh is now generated from csh, not tcsh.in * init/Makefile.in: tcsh script is copy of csh script * init/csh.in: fixed csh init script to deal with funny shell chars like * and {} * utility.c: (1) removed unset -f for zsh unaliasing (2) removed single quotes for quoting env vars. This breaks if the env var itself has single quotes. The more robust method is to individually escape all the dangerous characters. Old method: setenv foo 'bar bar' New method: setenv foo bar\ bar (3) removed tmpnam and tempname stuff, replacing with safer tmpfile_mod() * config.h.in, configure, configure.in: added TMP_DIR define * cmdXResource.c: suppress warning if DISPLAY is not set * cmdModule.c: fixed help message * aclocal.m4: fixed problem with finding tcl lib using glob * testsuite/modules.00-init/080-begenv.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.20-locate/040-alias.exp, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.20-locate/046-getsym.exp, testsuite/modules.20-locate/047-symerrs.exp, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.30-userlvl/040-advanced.exp, testsuite/modules.30-userlvl/045-adv.exp, testsuite/modules.30-userlvl/050-expert.exp, testsuite/modules.30-userlvl/055-exp.exp, testsuite/modules.35-trace/010-init_ts.exp, testsuite/modules.35-trace/020-default.exp, testsuite/modules.35-trace/030-all-on.exp, testsuite/modules.35-trace/031-all-off.exp, testsuite/modules.35-trace/040-load-all.exp, testsuite/modules.35-trace/041-load-all.exp, testsuite/modules.35-trace/042-load-on.exp, testsuite/modules.35-trace/043-load-onoff.exp, testsuite/modules.35-trace/044-load-ovr.exp, testsuite/modules.35-trace/050-disp-onoff.exp, testsuite/modules.35-trace/060-dilo-onoff.exp, testsuite/modules.35-trace/070-colon.exp, testsuite/modules.35-trace/095-cleanup.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.50-cmds/020-setenv.exp, testsuite/modules.50-cmds/030-unsetenv.exp, testsuite/modules.50-cmds/035-unsetenv-undo.exp, testsuite/modules.50-cmds/036-unsetenv-x.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/077-alias-undo.exp, testsuite/modules.50-cmds/080-info-name.exp, testsuite/modules.50-cmds/081-info-user.exp, testsuite/modules.50-cmds/082-info-user-exp.exp, testsuite/modules.50-cmds/083-info-mode.exp, testsuite/modules.50-cmds/084-info-mode-exp.exp, testsuite/modules.50-cmds/085-info-flags.exp, testsuite/modules.50-cmds/086-info-shells.exp, testsuite/modules.50-cmds/087-info-shells-exp.exp, testsuite/modules.50-cmds/088-info-isloaded.exp, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/101-badfac.exp, testsuite/modules.50-cmds/110-verbose.exp, testsuite/modules.50-cmds/115-verbose-msg.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp, testsuite/modules.50-cmds/140-system.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.50-cmds/170-swap.exp, testsuite/modules.50-cmds/190-load.exp, testsuite/modules.50-cmds/200-break.exp, testsuite/modules.70-maint/020-update.exp, testsuite/modules.70-maint/050-whatis-load.exp, testsuite/modules.95-version/020-load.exp, testsuite/modules.95-version/020-unload.exp, testsuite/modules.95-version/022-load2.exp, testsuite/modules.95-version/022-unload2.exp, testsuite/modules.95-version/040-xgetenv.exp: changed tests to match new syntax for setting env vars. rather than quoting, special characters are escaped 2002-04-09 lakata <lakata> * Makefile.in: simplified installation of deep directories 2002-03-18 rkowen <rkowen> * Makefile.in: Un-escaped the --srcdir $$TESTSUITEDIR, because it caused problems on Linux dejagnu 1.4.1 . The variable is being interpolated before the runtest command is executed. 2002-03-11 lakata <lakata> * aclocal.m4, configure, configure.in: more TCL smarts, if tclsh does not exist on path * INSTALL: added hints on how to recognize a bad TCL install * ChangeLog: updates for release 3.1.6++ * testsuite/modules.00-init/015-version.exp.in, testsuite/modules.50-cmds/100-loglevel.exp.in: removed *.in versions (configure processed) * testsuite/modules.00-init/015-version.exp, testsuite/modules.50-cmds/100-loglevel.exp: renamed from *.in versions (configure processed) * testsuite/config/unix.exp, testsuite/modulefiles/system/2.0, testsuite/modulefiles/use/{1.0.in => 1.0}, testsuite/modulefiles/use/{2.0.in => 2.0}, testsuite/modulefiles/use/{2.1.in => 2.1}, testsuite/modulefiles/use/{2.2.in => 2.2}, testsuite/modules.00-init/010-environ.exp, testsuite/modules.00-init/015-version.exp.in, testsuite/modules.00-init/050-modpath.exp, testsuite/modules.00-init/080-begenv.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/065-rcerrs.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/017-use-undo.exp, testsuite/modules.70-maint/010-init_ts.exp, testsuite/modules.70-maint/020-update.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.95-version/010-init_ts.exp: (a) updated testsuite by centering source on TESTSUITEDIR, rather than rely on "pwd" or relative paths, which prohibit running the testsuite from a different dir (b) removed autoconf/configure processing of testsuite * INSTALL: Added more information about configuring TCL and a few other prerequisites. * configure: reran autoconf. see configure.in log * probetcl: probetcl functionality is now in aclocal.m4 * configure.in: (a) reordered configuration, so that critical things are done first (aids in debugging to get the hardstuff done first). (b) removed some of the testsuite configuration (c) added -with-tcl-library configuration (d) changed the help messages * config.h.in: removed redundant lines * cmdXResource.c: (a) fixed regular expression for XRDB parsing (b) fixed spelling of "resource" (i think it was using the French spelling before) * Makefile.in: (a) change the way testsuite is configured, so "clean" was updated (b) changed -I include path to point to cwd instead .. * aclocal.m4: fixed the way TCL was configured 2002-03-10 rkowen <rkowen> * init/csh.in: Fixed bug in init/csh script, which only affected those that changed their history character. Found by Barb Mauzy of Cray Inc. * Makefile.in: Updated the dist tarball upload targets. * modulefiles/module-cvs.in: Fixed up module-ftp alias to reflect the current SourceForge.Net ftp situation. * version.c: Preparing the version move to 3.1.7 * .ftp: Made the tarball ftp uploading script more generic. * modules.lsm.in: Changed the primary & alternate ftp site to the current SourceForge.Net set up. 2002-03-09 lakata <lakata> * ModuleCmd_Avail.c: Fixed bug in mkdirnm. There was a check to see if the dir eq ".", but was done using a char comparison, not string comparison. Caused severe problems if dir was "..", since only first character was used. 2002-03-08 lakata <lakata> * INSTALL: Simplified docs by removing details of RKOConfigure and describing a typical install on a standard unix box 2002-01-04 rkowen <rkowen> * version.c: Minor change to date. * ChangeLog, ModuleCmd_Load.c, PROBLEMS, RKOConfigure, doc/modulefile.4.in, init.c, testsuite/modulefiles/break/1.0, testsuite/modulefiles/break/2.0, testsuite/modulefiles/break/3.0, testsuite/modules.50-cmds/200-break.exp: * A 'break' in a modulefile will cause the modulefile to not be added to $LOADEDMODULES, but will be considered a successful execution to not affect other modulefiles being loaded concurrently (Patch due to Scott Gaskins). * Tests and docs added for the above. 2001-12-20 rkowen <rkowen> * TODO: Added Harlan Stenn's suggestions, and cleaned it up a bit. 2001-11-05 rkowen <rkowen> * ChangeLog, Makefile.in, PROBLEMS, RKOConfigure, configure, configure.in, doc/Modules-Paper.pdf, locate_module.c, probetcl, testsuite/modules.50-cmds/190-load.exp, version.c: * Fixed problem with module load when the full path is given (patch due to Scott Gaskins). * Added tests for the above problem. * Added the Modules-Paper in PDF format (thanks to Philip Kearns and Leo Butler for raising the issue). * Modified probetcl to avoid using the -c option (patch due to Philip Kearns). * Modified probetcl to use tclsh first then tcl * Added TCL_VERSION to configure and use it in the Makefile to use the -ltcl@TCL_VERSION@ library. 2001-08-18 rkowen <rkowen> * ChangeLog, version.c: Release 3.1.5 2001-08-17 rkowen <rkowen> * ChangeLog, ModuleCmd_Load.c, cmdPath.c, version.c: * Fixed up cmdPath to remove individual items from a path (patch due to Eric Stanley). 2001-08-03 rkowen <rkowen> * .ftp, Makefile.in, version.c: Minor fixes for distribution uploading. * Makefile.in: Fixed the ftp-local bz2 patch target. * .spec.in, ChangeLog, Makefile.in, version.c: * Added bz2 files to distribution mix. 2001-07-26 rkowen <rkowen> * ChangeLog, cmdPath.c, testsuite/modulefiles/info/isloaded, testsuite/modulefiles/loc_dv1/1.0, testsuite/modulefiles/loc_dv1/2.0, testsuite/modules.50-cmds/088-info-isloaded.exp, testsuite/modules.50-cmds/170-swap.exp, version.c: * Fixed "module swap" to put the substituted module in the same path location as the old. Also added a number of tests for this feature. (Bug was pointed out by Leo Butler <lbutler@brocade.com>) * Added tests for the "is-loaded" modulefile command introduced back in 3.0.8-rko. 2001-07-16 rkowen <rkowen> * version.c: Testing to see if a really minor update could be done. * INSTALL.RH7x, etc/global/bashrc.in, etc/global/profile.in: Fixed some embarrassing typos and editting mistakes. 2001-07-11 rkowen <rkowen> * testsuite/modulefiles/versions/1.1, testsuite/modulefiles/versions/1.2, testsuite/modulefiles/versions/1.3: More test stragglers for 3.1.3 * testsuite/modulefiles.other/1.1/version, testsuite/modulefiles.other/1.2/version, testsuite/modulefiles.other/1.3/version, testsuite/modulefiles/unsetenv/0.9: Forgot some straggler test files for 3.1.3 * ChangeLog, README.perl, configure, configure.in, modulefiles/Makefile.in, modulefiles/module-cvs.in, modulefiles/modules.in, modulefiles/use.own.in, testsuite/modules.50-cmds/017-use-undo.exp, version.c, xref/ModuleCmd_Use.c.html, xref/cxref.function: * Added module-cvs modulefile for easy CVS/ftp access to the modules CVS repository. * Added README.perl describing Ron Isaacson's Env::Modulecmd perl module (Ron.Isaacson@morganstanley.com). * Added further tests for modulefile "module use dir_path" * Fixed bug of unloading a modulefile with a "module use dir_path" * cmdModule.c: Was forcing a "use" even when the "use" was embedded in modulefile, which was being unloaded. * version.c: Changed the version to 3.1.3a to note that this is not a release. 2001-07-09 rkowen <rkowen> * ChangeLog, INSTALL, INSTALL.RH7x, ModuleCmd_Use.c, cmdPath.c, cmdSetenv.c, configure, configure.in, doc/modulefile.4.in, etc/Makefile.in, etc/global/bashrc.in, etc/global/csh.cshrc.in, etc/global/csh.login.in, etc/global/csh.modules.in, etc/global/profile.in, etc/global/profile.modules.in, etc/skel/.kshenv.in, etc/skel/.profile.in, modulefiles/use.own.in, modulefiles/version.in, testsuite/modulefiles/use/.version, testsuite/modulefiles/use/1.0.in, testsuite/modulefiles/use/2.0.in, testsuite/modulefiles/use/2.1.in, testsuite/modulefiles/use/2.2.in, testsuite/modules.00-init/080-begenv.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.20-locate/040-alias.exp, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.20-locate/046-getsym.exp, testsuite/modules.20-locate/047-symerrs.exp, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.30-userlvl/030-novice.exp, testsuite/modules.30-userlvl/035-nov.exp, testsuite/modules.30-userlvl/040-advanced.exp, testsuite/modules.30-userlvl/045-adv.exp, testsuite/modules.30-userlvl/050-expert.exp, testsuite/modules.30-userlvl/055-exp.exp, testsuite/modules.30-userlvl/090-undef.exp, testsuite/modules.35-trace/020-default.exp, testsuite/modules.35-trace/030-all-on.exp, testsuite/modules.35-trace/031-all-off.exp, testsuite/modules.35-trace/040-load-all.exp, testsuite/modules.35-trace/041-load-all.exp, testsuite/modules.35-trace/042-load-on.exp, testsuite/modules.35-trace/043-load-onoff.exp, testsuite/modules.35-trace/044-load-ovr.exp, testsuite/modules.35-trace/050-disp-onoff.exp, testsuite/modules.35-trace/060-dilo-onoff.exp, testsuite/modules.35-trace/070-colon.exp, testsuite/modules.50-cmds/010-init_ts.exp, testsuite/modules.50-cmds/015-use.exp, testsuite/modules.50-cmds/020-setenv.exp, testsuite/modules.50-cmds/025-setenv-undo.exp, testsuite/modules.50-cmds/030-unsetenv.exp, testsuite/modules.50-cmds/035-unsetenv-undo.exp, testsuite/modules.50-cmds/036-unsetenv-x.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/080-info-name.exp, testsuite/modules.50-cmds/081-info-user.exp, testsuite/modules.50-cmds/082-info-user-exp.exp, testsuite/modules.50-cmds/083-info-mode.exp, testsuite/modules.50-cmds/084-info-mode-exp.exp, testsuite/modules.50-cmds/085-info-flags.exp, testsuite/modules.50-cmds/086-info-shells.exp, testsuite/modules.50-cmds/087-info-shells-exp.exp, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/101-badfac.exp, testsuite/modules.50-cmds/110-verbose.exp, testsuite/modules.50-cmds/115-verbose-msg.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp, testsuite/modules.50-cmds/140-system.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.70-maint/020-update.exp, testsuite/modules.70-maint/050-whatis-load.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.95-version/010-init_ts.exp, testsuite/modules.95-version/020-load.exp, testsuite/modules.95-version/020-unload.exp, testsuite/modules.95-version/022-load2.exp, testsuite/modules.95-version/022-unload2.exp, testsuite/modules.95-version/040-xgetenv.exp, testsuite/modules.95-version/999-cleanup.exp, utility.c, version.c: * Added document file INSTALL.RH7x which explains how to set up an modules environment for all users through the system shell files. Is specific to Linux/RedHat 7.x, but is of general applicability. * Added further tests for modulefile "module use dir_path" (found an unload bug that will be fixed before release) * Environment variable contents are now quoted to preserve any embedded environment variables. (Needed for versioning) * Added over 50 tests specific to module versioning, and testing xgetenv. * Fixed the unsetenv on unload function, the feature added in 3.0.6-rko was supposed to set the env.var. to the optional third argument. This was to allow old env.var. values to be recovered by unraveling a stack set in an other env.var. Added tests for this feature. This is used by the version modulefile. * Fixed and updated the version modulefile to allow stacked versions to be removed the stack. * Removed an annoying spurious stderr newline. 2001-06-22 rkowen <rkowen> * ModuleCmd_Help.c: Spurious fprintf(stderr,...) was adding anomalous blank lines to the tests. 2001-06-10 rkowen <rkowen> * Makefile.in, testsuite/modulefiles.other/README: Fixed the way a distribution tar ball is made. It makes only one CVS connection instead of one per file. 2001-06-09 rkowen <rkowen> * Makefile.in: Added targets to aid sending the tarball to the ftp sites. * ChangeLog, Makefile.in, ModuleCmd_Avail.c, ModuleCmd_Display.c, ModuleCmd_Help.c, ModuleCmd_Init.c, ModuleCmd_Load.c, ModuleCmd_Switch.c, ModuleCmd_Use.c, ModuleCmd_Whatis.c, cmdAlias.c, cmdConflict.c, cmdInfo.c, cmdIsLoaded.c, cmdLog.c, cmdMisc.c, cmdModule.c, cmdPath.c, cmdSetenv.c, cmdTrace.c, cmdUlvl.c, cmdVerbose.c, cmdVersion.c, cmdWhatis.c, cmdXResource.c, doc/module.1.in, error.c, getopt.c, locate_module.c, main.c, modules.lsm.in, modules_def.h, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/070-unuse.exp, utility.c, version.c, xref/ModuleCmd_Avail.c.html, xref/ModuleCmd_Display.c.html, xref/ModuleCmd_Help.c.html, xref/ModuleCmd_Init.c.html, xref/ModuleCmd_Load.c.html, xref/ModuleCmd_Switch.c.html, xref/ModuleCmd_Use.c.html, xref/ModuleCmd_Whatis.c.html, xref/cmdAlias.c.html, xref/cmdConflict.c.html, xref/cmdInfo.c.html, xref/cmdIsLoaded.c.html, xref/cmdLog.c.html, xref/cmdMisc.c.html, xref/cmdModule.c.html, xref/cmdPath.c.html, xref/cmdSetenv.c.html, xref/cmdTrace.c.html, xref/cmdUlvl.c.html, xref/cmdVerbose.c.html, xref/cmdVersion.c.html, xref/cmdWhatis.c.html, xref/cmdXResource.c.html, xref/cxref.apdx.html, xref/cxref.function, xref/cxref.variable, xref/error.c.html, xref/init.c.html, xref/locate_module.c.html, xref/main.c.html, xref/utility.c.html: * Fixed the "module use --append" feature, and fixed the tests for "module use", "module use --append", and "module unuse". * Changed the global variable names (flags,current_module) to (g_flags, g_current_module) to identify their ubiquity in the module source. 2001-03-22 rminsk <rminsk> * init/python.in: Was not setting the environment variable MODULESHOME * ChangeLog: Comment added about mel support * configure: Added python 2001-02-15 rminsk <rminsk> * version.c: Retracted new version * version.c: Bumped version for mel addition * utility.c: Added mel (Maya Extension Language) support 2001-02-01 rminsk <rminsk> * Makefile.in: Removed other references to "-rko" in version numbers. * Makefile.in: Fixed tag rule to use the cvs module "module" instead of "module-3.1rko" * ChangeLog: Updated for 3.1.1 release. * configure.in: Added init/python * Makefile.in: Updated version number of 3.0 to 3.1. * version.c: Bumped up version number for new release 2001-01-16 rminsk <rminsk> * init/python.in: Removing blank lines * init/Makefile.in, init/python.in: Fixing typeo's * init/Makefile.in, init/python.in: Adding python init files. * utility.c: Fixing bug the the _LMFILES_ environment variable. As the _LMFILES_ shrink in size the extra _LMFILES%03d_ were not being unset. Made sure extra _LMFILES%03d_ are removed each time _LMFILES_ is set. Added initial support for scheme (scm, guile). Made output of ksh (bash, zsh) aliases recognize the escape charater ("\"). This was important to be able to escape "$". Anytime an alias had a "$" in it a function was always output. Fixed a bug in search of the LOADEDMODULES environment variable. Would not correctly find a module if only a partial module name was given. For example "maya/3.0" would be found but "maya" would not. In the process of fixing this bug a possible memory corruption was also fixed. * init/csh.in: Removed variable histchar. It was not being used. Modified to store the current prompt and unset prompt while modules is running. A bug in csh will cause and eval of an eval (eval `eval ...`) to output a prompt. This cause the first eval to try to execute the prompt. * init.c: Fixing bug the the _LMFILES_ environment variable. If the user is using csh and _LMFILES_ is large than LMSPLIT_SIZE it gets split into _LMFILES.%03d_. For modules to work correctly the split _LMFILES.%03d_ must be joined to make _LMFILES_. 2000-11-03 rk <rk> * xref/cmdModule.c.html: * Fixed the changed *interpter->result return value with Tcl8.3+ (patch due to Jens Hamisch). And some document changes. * ChangeLog, INSTALL, cmdModule.c: * Fixed the changed *interpter->result return value with Tcl8.3+ (patch due to Jens Hamisch). And some document changes. 2000-06-28 rk <rk> * ChangeLog, Makefile.in, ModuleCmd_Load.c, README, ccc.h.in, xref/ModuleCmd_Avail.c.html, xref/ModuleCmd_Clear.c.html, xref/ModuleCmd_Display.c.html, xref/ModuleCmd_Help.c.html, xref/ModuleCmd_Init.c.html, xref/ModuleCmd_List.c.html, xref/ModuleCmd_Load.c.html, xref/ModuleCmd_Purge.c.html, xref/ModuleCmd_Switch.c.html, xref/ModuleCmd_Update.c.html, xref/ModuleCmd_Use.c.html, xref/ModuleCmd_Whatis.c.html, xref/cmdAlias.c.html, xref/cmdConflict.c.html, xref/cmdInfo.c.html, xref/cmdIsLoaded.c.html, xref/cmdLog.c.html, xref/cmdMisc.c.html, xref/cmdModule.c.html, xref/cmdPath.c.html, xref/cmdSetenv.c.html, xref/cmdTrace.c.html, xref/cmdUlvl.c.html, xref/cmdUname.c.html, xref/cmdVerbose.c.html, xref/cmdVersion.c.html, xref/cmdWhatis.c.html, xref/cmdXResource.c.html, xref/error.c.html, xref/init.c.html, xref/locate_module.c.html, xref/main.c.html, xref/utility.c.html: * Removed warning message for unloading a module that's not loaded. * Added source code cross-referencing via cxref-1.5b(patched) * .cxref, Makefile.in, xref/ModuleCmd_Avail.c.html, xref/ModuleCmd_Clear.c.html, xref/ModuleCmd_Display.c.html, xref/ModuleCmd_Help.c.html, xref/ModuleCmd_Init.c.html, xref/ModuleCmd_List.c.html, xref/ModuleCmd_Load.c.html, xref/ModuleCmd_Purge.c.html, xref/ModuleCmd_Switch.c.html, xref/ModuleCmd_Update.c.html, xref/ModuleCmd_Use.c.html, xref/ModuleCmd_Whatis.c.html, xref/cmdAlias.c.html, xref/cmdConflict.c.html, xref/cmdInfo.c.html, xref/cmdIsLoaded.c.html, xref/cmdLog.c.html, xref/cmdMisc.c.html, xref/cmdModule.c.html, xref/cmdPath.c.html, xref/cmdSetenv.c.html, xref/cmdTrace.c.html, xref/cmdUlvl.c.html, xref/cmdUname.c.html, xref/cmdVerbose.c.html, xref/cmdVersion.c.html, xref/cmdWhatis.c.html, xref/cmdXResource.c.html, xref/cxref.apdx.html, xref/cxref.function, xref/cxref.html, xref/cxref.include, xref/cxref.typedef, xref/cxref.variable, xref/error.c.html, xref/getopt.c.html, xref/index.html, xref/init.c.html, xref/locate_module.c.html, xref/main.c.html, xref/utility.c.html, xref/version.c.html: Added cxref-1.5b(patched) generated HTML files showing the source code cross-referencing relations. * Makefile.in, configure, configure.in, version.c: Minor updates. * .cxref, .ftp, .spec.in, ChangeLog, INSTALL, LICENSE.GPL, MACHINES, Makefile.in, ModuleCmd_Avail.c, ModuleCmd_Clear.c, ModuleCmd_Display.c, ModuleCmd_Help.c, ModuleCmd_Init.c, ModuleCmd_List.c, ModuleCmd_Load.c, ModuleCmd_Purge.c, ModuleCmd_Switch.c, ModuleCmd_Update.c, ModuleCmd_Use.c, ModuleCmd_Whatis.c, PROBLEMS, README, RKOConfigure, TODO, acconfig.h, aclocal.m4, ccc.h.in, cmdAlias.c, cmdConflict.c, cmdInfo.c, cmdIsLoaded.c, cmdLog.c, cmdMisc.c, cmdModule.c, cmdPath.c, cmdSetenv.c, cmdTrace.c, cmdUlvl.c, cmdUname.c, cmdVerbose.c, cmdVersion.c, cmdWhatis.c, cmdXResource.c, config.h.in, configure, configure.in, doc/Makefile.in, doc/Modules-Paper.doc, doc/module.1.in, doc/modulefile.4.in, error.c, etc/Makefile.in, etc/README, etc/add.modules.in, etc/global/csh.login.in, etc/global/csh.modules.in, etc/global/profile.in, etc/global/profile.modules.in, etc/mkroot.in, etc/skel/.cshrc.in, etc/skel/.kshenv.in, etc/skel/.login.in, etc/skel/.profile.in, ext/Makefile.in, ext/README, ext/add.ext.in, ext/common/.cshrc.in, ext/common/.kshenv.in, ext/common/.login.in, ext/common/.profile.in, ext/mkroot.in, ext/skel/.cshrc.ext, ext/skel/.kshenv.ext, ext/skel/.login.ext, ext/skel/.modules, ext/skel/.profile.ext, getopt.c, getopt.h, init.c, init/.modulespath.in, init/Makefile.in, init/bash.in, init/csh.in, init/ksh.in, init/perl.in, init/sh.in, init/tcsh.in, init/zsh.in, install.sh, locate_module.c, main.c, modulefiles/Makefile.in, modulefiles/dot.in, modulefiles/module-info.in, modulefiles/modules.in, modulefiles/null.in, modulefiles/use.own.in, modulefiles/version.in, modules.lsm.in, modules_def.h, probetcl, stripmkf, testsuite/config/unix.exp, testsuite/etc/apropos.cache, testsuite/etc/bad, testsuite/etc/empty, testsuite/etc/rc, testsuite/home/.modulerc, testsuite/modulefiles/.moduleavailcache, testsuite/modulefiles/.moduleavailcache.202, testsuite/modulefiles/.moduleavailcachedir, testsuite/modulefiles/.moduleavailcachedir.202, testsuite/modulefiles/README, testsuite/modulefiles/alias/2.0, testsuite/modulefiles/append/2.0, testsuite/modulefiles/conflict/full, testsuite/modulefiles/conflict/module, testsuite/modulefiles/empty/1.0, testsuite/modulefiles/help/2.0, testsuite/modulefiles/info/mode1, testsuite/modulefiles/info/mode2, testsuite/modulefiles/info/mode3, testsuite/modulefiles/info/mode4, testsuite/modulefiles/info/mode5, testsuite/modulefiles/info/mode6, testsuite/modulefiles/info/name, testsuite/modulefiles/info/shells, testsuite/modulefiles/info/shellsexp, testsuite/modulefiles/info/user, testsuite/modulefiles/info/userexp, testsuite/modulefiles/loc_dv1/1.0, testsuite/modulefiles/loc_dv1/2.0, testsuite/modulefiles/loc_dv1/3.0, testsuite/modulefiles/loc_dv2/.version, testsuite/modulefiles/loc_dv2/1.0, testsuite/modulefiles/loc_dv2/2.0, testsuite/modulefiles/loc_dv3/.version, testsuite/modulefiles/loc_dv3/1.0, testsuite/modulefiles/loc_dv3/2.0, testsuite/modulefiles/loc_dv4/.version, testsuite/modulefiles/loc_dv4/1.0, testsuite/modulefiles/loc_dv4/2.0, testsuite/modulefiles/loc_dv6/1.0, testsuite/modulefiles/loc_dv6/2.0/1.0, testsuite/modulefiles/loc_dv7/.version, testsuite/modulefiles/loc_dv7/1.0, testsuite/modulefiles/loc_dv7/2.0/1.0, testsuite/modulefiles/loc_dv7/3.0, testsuite/modulefiles/loc_dv8/.version, testsuite/modulefiles/loc_dv8/1.0, testsuite/modulefiles/loc_dv8/2.0, testsuite/modulefiles/loc_fq/1.0, testsuite/modulefiles/loc_fq/2.0, testsuite/modulefiles/loc_rc1/.modulerc, testsuite/modulefiles/loc_rc1/1.0, testsuite/modulefiles/loc_rc1/2.0, testsuite/modulefiles/loc_rc2/.modulerc, testsuite/modulefiles/loc_rc2/1.0, testsuite/modulefiles/loc_rc2/2.0, testsuite/modulefiles/loc_rc3/.modulerc, testsuite/modulefiles/loc_rc3/1.0, testsuite/modulefiles/loc_rc3/2.0, testsuite/modulefiles/loc_rc3/3.0, testsuite/modulefiles/loc_rc4/.modulerc, testsuite/modulefiles/loc_rc4/.version, testsuite/modulefiles/loc_rc4/1.0, testsuite/modulefiles/loc_rc4/2.0, testsuite/modulefiles/loc_rc4/3.0, testsuite/modulefiles/loc_rc5/.modulerc, testsuite/modulefiles/loc_rc5/1.0, testsuite/modulefiles/loc_rc5/2.0, testsuite/modulefiles/loc_sym/1.0, testsuite/modulefiles/loc_sym/alias1, testsuite/modulefiles/loc_sym/alias2, testsuite/modulefiles/loc_sym/alias3, testsuite/modulefiles/loc_sym/alias4, testsuite/modulefiles/loc_sym/alias5, testsuite/modulefiles/loc_sym/alias6, testsuite/modulefiles/loc_sym/exec1, testsuite/modulefiles/loc_sym/exec2, testsuite/modulefiles/loc_sym/getvers1, testsuite/modulefiles/loc_sym/getvers2, testsuite/modulefiles/loc_sym/getvers3, testsuite/modulefiles/loc_sym/getvers4, testsuite/modulefiles/loc_sym/getvers5, testsuite/modulefiles/loc_sym/getvers6, testsuite/modulefiles/loc_sym/getvers7, testsuite/modulefiles/loc_sym/getvers8, testsuite/modulefiles/loc_sym/versinf1, testsuite/modulefiles/loc_sym/versinf2, testsuite/modulefiles/loc_sym/versinf3, testsuite/modulefiles/loc_sym/versinf4, testsuite/modulefiles/loc_sym/versinf5, testsuite/modulefiles/loc_sym/versinf6, testsuite/modulefiles/loc_sym/versinf7, testsuite/modulefiles/loc_sym/version1, testsuite/modulefiles/loc_sym/version10, testsuite/modulefiles/loc_sym/version11, testsuite/modulefiles/loc_sym/version12, testsuite/modulefiles/loc_sym/version13, testsuite/modulefiles/loc_sym/version14, testsuite/modulefiles/loc_sym/version2, testsuite/modulefiles/loc_sym/version3, testsuite/modulefiles/loc_sym/version4, testsuite/modulefiles/loc_sym/version5, testsuite/modulefiles/loc_sym/version6, testsuite/modulefiles/loc_sym/version7, testsuite/modulefiles/loc_sym/version8, testsuite/modulefiles/loc_sym/version9, testsuite/modulefiles/log/badfac, testsuite/modulefiles/log/err_both_1, testsuite/modulefiles/log/err_both_2, testsuite/modulefiles/log/err_file, testsuite/modulefiles/log/err_syslog, testsuite/modulefiles/module/2.0, testsuite/modulefiles/prepend/2.0, testsuite/modulefiles/prereq/full, testsuite/modulefiles/prereq/module, testsuite/modulefiles/remove/2.0, testsuite/modulefiles/system/2.0, testsuite/modulefiles/trace/all_off, testsuite/modulefiles/trace/all_on, testsuite/modulefiles/trace/colon, testsuite/modulefiles/trace/dilo_onoff, testsuite/modulefiles/trace/disp_onoff, testsuite/modulefiles/trace/disptrac, testsuite/modulefiles/trace/load_all1, testsuite/modulefiles/trace/load_all2, testsuite/modulefiles/trace/load_on, testsuite/modulefiles/trace/load_onoff, testsuite/modulefiles/trace/load_ovr, testsuite/modulefiles/uname/domain, testsuite/modulefiles/uname/machine, testsuite/modulefiles/uname/nodename, testsuite/modulefiles/uname/release, testsuite/modulefiles/uname/sysname, testsuite/modulefiles/uname/version, testsuite/modulefiles/unsetenv/1.0, testsuite/modulefiles/user/adv, testsuite/modulefiles/user/advanced, testsuite/modulefiles/user/exp, testsuite/modulefiles/user/expert, testsuite/modulefiles/user/nov, testsuite/modulefiles/user/novice, testsuite/modulefiles/user/undef, testsuite/modulefiles/verbose/msg, testsuite/modulefiles/verbose/off, testsuite/modulefiles/verbose/on, testsuite/modulefiles/verbose/undef, testsuite/modulefiles/whatis/lines, testsuite/modulefiles/whatis/multiple, testsuite/modulefiles/whatis/none, testsuite/modulefiles/whatis/single, testsuite/modulefiles/whatis/string, testsuite/modules.00-init/005-init_ts.exp, testsuite/modules.00-init/006-procs.exp, testsuite/modules.00-init/010-environ.exp, testsuite/modules.00-init/015-version.exp.in, testsuite/modules.00-init/030-shells.exp, testsuite/modules.00-init/050-modpath.exp, testsuite/modules.00-init/080-begenv.exp, testsuite/modules.00-init/090-switches.exp, testsuite/modules.10-use/010-init_ts.exp, testsuite/modules.10-use/030-use.exp, testsuite/modules.10-use/031-append.exp, testsuite/modules.10-use/070-unuse.exp, testsuite/modules.20-locate/010-init_ts.exp, testsuite/modules.20-locate/020-fqual.exp, testsuite/modules.20-locate/030-defvers.exp, testsuite/modules.20-locate/040-alias.exp, testsuite/modules.20-locate/045-symvers.exp, testsuite/modules.20-locate/046-getsym.exp, testsuite/modules.20-locate/047-symerrs.exp, testsuite/modules.20-locate/048-symexec.exp, testsuite/modules.20-locate/050-locrc.exp, testsuite/modules.20-locate/055-locrcerrs.exp, testsuite/modules.20-locate/060-rc.exp, testsuite/modules.20-locate/065-rcerrs.exp, testsuite/modules.20-locate/070-homerc.exp, testsuite/modules.20-locate/095-cleanup.exp, testsuite/modules.30-userlvl/010-init_ts.exp, testsuite/modules.30-userlvl/030-novice.exp, testsuite/modules.30-userlvl/035-nov.exp, testsuite/modules.30-userlvl/040-advanced.exp, testsuite/modules.30-userlvl/045-adv.exp, testsuite/modules.30-userlvl/050-expert.exp, testsuite/modules.30-userlvl/055-exp.exp, testsuite/modules.30-userlvl/090-undef.exp, testsuite/modules.35-trace/010-init_ts.exp, testsuite/modules.35-trace/020-default.exp, testsuite/modules.35-trace/030-all-on.exp, testsuite/modules.35-trace/031-all-off.exp, testsuite/modules.35-trace/040-load-all.exp, testsuite/modules.35-trace/041-load-all.exp, testsuite/modules.35-trace/042-load-on.exp, testsuite/modules.35-trace/043-load-onoff.exp, testsuite/modules.35-trace/044-load-ovr.exp, testsuite/modules.35-trace/050-disp-onoff.exp, testsuite/modules.35-trace/060-dilo-onoff.exp, testsuite/modules.35-trace/070-colon.exp, testsuite/modules.35-trace/095-cleanup.exp, testsuite/modules.50-cmds/010-init_ts.exp, testsuite/modules.50-cmds/020-setenv.exp, testsuite/modules.50-cmds/025-setenv-undo.exp, testsuite/modules.50-cmds/030-unsetenv.exp, testsuite/modules.50-cmds/035-unsetenv-undo.exp, testsuite/modules.50-cmds/040-append.exp, testsuite/modules.50-cmds/045-append-undo.exp, testsuite/modules.50-cmds/050-prepend.exp, testsuite/modules.50-cmds/055-prepend-undo.exp, testsuite/modules.50-cmds/060-remove.exp, testsuite/modules.50-cmds/065-remove-undo.exp, testsuite/modules.50-cmds/070-alias-proc.exp, testsuite/modules.50-cmds/075-alias.exp, testsuite/modules.50-cmds/077-alias-undo.exp, testsuite/modules.50-cmds/080-info-name.exp, testsuite/modules.50-cmds/081-info-user.exp, testsuite/modules.50-cmds/082-info-user-exp.exp, testsuite/modules.50-cmds/083-info-mode.exp, testsuite/modules.50-cmds/084-info-mode-exp.exp, testsuite/modules.50-cmds/085-info-flags.exp, testsuite/modules.50-cmds/086-info-shells.exp, testsuite/modules.50-cmds/087-info-shells-exp.exp, testsuite/modules.50-cmds/090-uname-proc.exp, testsuite/modules.50-cmds/095-uname.exp, testsuite/modules.50-cmds/099-uname-cleanup.exp, testsuite/modules.50-cmds/100-loglevel.exp.in, testsuite/modules.50-cmds/101-badfac.exp, testsuite/modules.50-cmds/110-verbose.exp, testsuite/modules.50-cmds/115-verbose-msg.exp, testsuite/modules.50-cmds/120-prereq-full.exp, testsuite/modules.50-cmds/121-prereq-module.exp, testsuite/modules.50-cmds/130-conflict-full.exp, testsuite/modules.50-cmds/131-conflict-module.exp, testsuite/modules.50-cmds/140-system.exp, testsuite/modules.50-cmds/150-module.exp, testsuite/modules.70-maint/010-init_ts.exp, testsuite/modules.70-maint/020-update.exp, testsuite/modules.70-maint/030-purge.exp, testsuite/modules.70-maint/040-list.exp, testsuite/modules.70-maint/043-listno.exp, testsuite/modules.70-maint/045-listlong.exp, testsuite/modules.70-maint/048-listlongno.exp, testsuite/modules.70-maint/050-whatis-load.exp, testsuite/modules.70-maint/055-whatis.exp, testsuite/modules.70-maint/060-apropos.exp, testsuite/modules.70-maint/070-display.exp, testsuite/modules.70-maint/080-help.exp, testsuite/modules.70-maint/095-cleanup.exp, testsuite/modules.90-avail/010-init_ts.exp, testsuite/modules.90-avail/020-single.exp, testsuite/modules.90-avail/030-multiple.exp, testsuite/modules.90-avail/040-wild.exp, testsuite/modules.90-avail/050-long.exp, testsuite/modules.90-avail/060-empty.exp, testsuite/not_installed, testsuite/systest, utility.c, version.c: modules is a shell tool for setting-up the user environment on the fly, as it were. It's a powerful mechanism for dynamically changing environment variables, aliases, X11 resources, etc. It uses an embedded Tcl intrepretor, with a few extensions. Therefore, it has a well defined language syntax. Version 3.1 is GPL, and includes many improvements over the 3.0beta. 1998-12-11 rk <rk> * testsuite/modulefiles/setenv/1.0: modules is a shell tool for setting-up the user environment on the fly, as it were. It's a powerful mechanism for dynamically changing environment variables, aliases, X11 resources, etc. It uses an embedded Tcl intrepretor, with a few extensions. Therefore, it has a well defined language syntax. Version 3.1 is GPL, and includes many improvements over the 3.0beta.