diff --git a/Pmodules/modulecmd.bash.in b/Pmodules/modulecmd.bash.in index ba2e66b..f3efa93 100644 --- a/Pmodules/modulecmd.bash.in +++ b/Pmodules/modulecmd.bash.in @@ -105,8 +105,8 @@ export_env() { declare g_env_must_be_saved='no' save_env() { - [[ "$1" == 'no' ]] && return 0 - local vars=( GroupDepths UsedReleases UseFlags UsedGroups ) + [[ $1 == 'no' ]] && return 0 + local vars=( Version GroupDepths UsedReleases UseFlags UsedGroups ) vars+=( PMODULES_DEFAULT_GROUPS PMODULES_DEFINED_RELEASES ) vars+=( PMODULES_DEFAULT_RELEASES ) vars+=( OverlayList ) @@ -1791,6 +1791,47 @@ reset_modulepath() { done } +reset_used_groups() { + UsedGroups='' + local group + for group in ${PMODULES_DEFAULT_GROUPS}; do + std::prepend_path UsedGroups "${group}" + done + g_env_must_be_saved='yes' +} + +reset_used_releases() { + declare -g UsedReleases='' + for r in ${PMODULES_DEFAULT_RELEASES//:/ }; do + std::append_path UsedReleases "${r}" + done + g_env_must_be_saved='yes' +} + +init_path() { + std::replace_path PATH "${PMODULES_HOME%/*}/.*" + std::prepend_path PATH "${PMODULES_HOME}/bin" +} + +init_manpath() { + std::replace_path MANPATH "${PMODULES_HOME%/*}/.*" + + if [[ -r /etc/man.config ]]; then + declare _manconf='/etc/man.config' + elif [[ -r /etc/man.conf ]]; then + declare _manconf='/etc/man.conf' + fi + if [[ -n ${_manconf} ]]; then + while read name value rest; do + std::append_path MANPATH "${value}" + done < <(grep "^MANPATH\s" "${_manconf}") + unset _manconf + else + std::append_path MANPATH "${PMODULES_HOME}/share/man" + std::append_path MANPATH "/usr/share/man" + fi +} + pmodules_init() { declare -gx LOADEDMODULES='' declare -gx _LMFILES_='' @@ -1800,49 +1841,10 @@ pmodules_init() { declare -g UsedGroups='' declare -gx MODULEPATH='' declare -Ag GroupDepths='()' + unset UseFlags declare -Ag UseFlags=() - - reset_used_groups() { - UsedGroups='' - local group - for group in ${PMODULES_DEFAULT_GROUPS}; do - std::prepend_path UsedGroups "${group}" - done - g_env_must_be_saved='yes' - } - - reset_used_releases() { - declare -g UsedReleases='' - for r in ${PMODULES_DEFAULT_RELEASES//:/ }; do - std::append_path UsedReleases "${r}" - done - g_env_must_be_saved='yes' - } - - init_path() { - std::replace_path PATH "${PMODULES_HOME%/*}/.*" - std::prepend_path PATH "${PMODULES_HOME}/bin" - } - - init_manpath() { - std::replace_path MANPATH "${PMODULES_HOME%/*}/.*" - - if [[ -r /etc/man.config ]]; then - declare _manconf='/etc/man.config' - elif [[ -r /etc/man.conf ]]; then - declare _manconf='/etc/man.conf' - fi - if [[ -n ${_manconf} ]]; then - while read name value rest; do - std::append_path MANPATH "${value}" - done < <(grep "^MANPATH\s" "${_manconf}") - unset _manconf - else - std::append_path MANPATH "${PMODULES_HOME}/share/man" - std::append_path MANPATH "/usr/share/man" - fi - } - + declare -g Version="${PMODULES_VERSION}" + reset_used_groups reset_modulepath reset_used_releases @@ -2722,10 +2724,8 @@ _init_overlay_vars() { if [[ -n ${PMODULES_ENV} ]]; then eval "$("${base64}" -d <<< "${PMODULES_ENV}" 2>/dev/null)" - # if we load a Pmodules version with overlay support, - # OverlayList might not be set. Since libmodules.tcl - # reads PMODULES_ENV we have to save the environment. - if [[ -z "${OverlayList}" ]]; then + if [[ -z ${Version} ]] || [[ ${Version} != ${PMODULES_VERSION} ]]; then + pmodules_init _init_overlay_vars fi else