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.
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.
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.
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.
Transform source documents from POD format to reStructuredText to then
benefit from Sphinx documentation framework and Read The Docs publishing
capabilities.
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.
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.
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.
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.
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.
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.
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.
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.
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.