Merge branch '32-overlay-implementation' of gitlab.psi.ch:Pmodules/src into 32-overlay-implementation

This commit is contained in:
2021-10-28 14:45:06 +02:00
19 changed files with 918 additions and 577 deletions
+8
View File
@@ -0,0 +1,8 @@
# set groups which should be available after initialization
DefaultGroups='Tools Programming'
# define available release stages
ReleaseStages=':unstable:stable:deprecated:'
# set releases which should be available after initialization
DefaultReleaseStages='stable'
+5
View File
@@ -35,6 +35,11 @@ unset MODULE_VERSION_STACK
unset MODULESHOME
unset PMODULES_ENV
declare -x PMODULES_MODULEFILES_DIR='modulefiles'
declare -x PMODULES_CONFIG_DIR='config'
declare -x PMODULES_DIR="${PMODULES_HOME}"
#############################################################################
# implement module comand as shell function
#
+2 -2
View File
@@ -39,9 +39,9 @@ _module() {
COMPREPLY=()
cmds="add apropos avail clear dependencies display help\
cmds="add apropos avail clear display help\
initadd initclear initlist initprepend initrm initswitch\
keyword list load purge refresh rm search show swap switch sync\
keyword list load purge refresh rm search show swap switch \
unload unuse update use whatis"
opts="-c -f -h -i -l -s -t -u -v -H -V\
+1 -1
View File
@@ -35,7 +35,7 @@ unset prefix
unset postfix
setenv MODULEPATH
foreach group ( ${PMODULES_DEFAULT_GROUPS} )
foreach group ( ${DefaultGroups} )
if ( "${MODULEPATH}" == "" ) then
setenv MODULEPATH "${PMODULES_ROOT}/${group}/${PMODULES_MODULEFILES_DIR}"
else
+52 -38
View File
@@ -3,7 +3,7 @@
# switch/swap
# unload modules if parent removed
#
package require base64
if {[info exists env(PMODULES_DEBUG)] && $env(PMODULES_DEBUG)} {
proc debug {msg} {
@@ -21,17 +21,33 @@ if {[info exists env(PMODULES_DEBUG)] && $env(PMODULES_DEBUG)} {
proc debug {msg} {}
}
puts stderr "loading libmodules"
debug "loading libmodules"
package require base64
set ::MODULEFILES_DIR "modulefiles"
set ::ol_replacing "r"
proc _pmodules_parse_pmodules_env { } {
debug "enter"
foreach line [split [base64::decode $::env(PMODULES_ENV)] "\n"] {
if { ![regexp -- {.* -[aA] (.*)=\((.*)\)} $line -> name value] } {
if { ![regexp -- {.* -[aAx]* (.*)=\((.*)\)} $line -> name value] } {
continue
}
switch $name {
Overlays {
array set ::Overlays [regsub -all {[]=[]} $value " "]
OverlayDict {
array set ::OverlayDict [regsub -all {[]=[]} $value " "]
}
OverlayList {
array set tmp [regsub -all {[]=[]} $value " "]
set ::OverlayList {}
set l [lsort [array names tmp]]
foreach k $l {
lappend ::OverlayList $tmp($k)
}
}
UsedGroups {
set ::UsedGroups $value
}
}
}
@@ -53,33 +69,31 @@ proc module-addgroup { group } {
set ::${group} $name
set ::${group}_version $version
debug "mode=[module-info mode]"
if { [module-info mode load] } {
array set overlayed_groups {}
foreach overlay [lreverse_n $::PmodulesOverlays 1] {
set overlays_to_add {}
foreach overlay $::OverlayList {
lappend overlays_to_add $overlay
debug $overlay
if { [string compare $::OverlayDict($overlay) $::ol_replacing] == 0 } {
break
}
}
foreach overlay [lreverse_n $overlays_to_add 1] {
debug "overlay=$overlay"
if {![info exists overlayed_groups($group)]} {
set dir [file join \
$overlay \
$group \
$::PmodulesModulfilesDir \
{*}$::variant]
if { [file isdirectory $dir] } {
prepend-path MODULEPATH $dir
}
debug "group=$group"
debug "::variant=$::variant"
set dir [file join \
$overlay \
$group \
$::MODULEFILES_DIR \
{*}$::variant]
if { [file isdirectory $dir] } {
debug "prepend $dir to MODULEPATH "
prepend-path MODULEPATH $dir
}
# don't add if overlayed
if { [string compare $::Overlays($overlay) "g"] == 0 } {
# get groups in this overlay
set dirs [glob -directory $overlay -type d {[A-Z]*}]
foreach dir $dirs {
set overlayed_groups([lindex [file split $dir] end]) 1
}
}
}
}
debug "end foreach"
prepend-path UsedGroups $group
debug "mode=load: new MODULEPATH=$env(MODULEPATH)"
debug "mode=load: new UsedGroups=$env(UsedGroups)"
} elseif { [module-info mode remove] } {
set GROUP [string toupper $group]
debug "mode=remove: hierarchical group '${GROUP}'"
@@ -100,12 +114,13 @@ proc module-addgroup { group } {
debug "mode=remove: no orphan modules to unload"
}
debug "mode=remove: $env(MODULEPATH)"
foreach overlay $::PmodulesOverlays {
foreach overlay $::OverlayList {
set dir [file join \
$overlay \
$group \
$::PmodulesModulfilesDir \
$::MODULEFILES_DIR \
{*}$::variant]
debug "remove $dir"
remove-path MODULEPATH $dir
}
remove-path UsedGroups $group
@@ -137,7 +152,6 @@ proc lreverse_n { list n } {
set res
}
debug "test"
#
# set standard environment variables
#
@@ -292,15 +306,15 @@ proc ModulesHelp { } {
# intialize global vars
# Modulefile is something like
#
# ${PMODULES_ROOT}/group/${PMODULES_MODULEFILES_DIR}/name/version
# ${PMODULES_ROOT}/group/modulefiles/name/version
# or
# ${PMODULES_ROOT}/group/${PMODULES_MODULEFILES_DIR}/X1/Y1/name/version
# ${PMODULES_ROOT}/group/modulefiles/X1/Y1/name/version
# or
# ${PMODULES_ROOT}/group/${PMODULES_MODULEFILES_DIR}/X1/Y1//X2/Y2/name/version
# ${PMODULES_ROOT}/group/modulefiles/X1/Y1//X2/Y2/name/version
#
proc _find_overlay { modulefile_components } {
debug "_is_in_overlay"
foreach overlay $::PmodulesOverlays {
debug "_find_overlay()"
foreach overlay $::OverlayList {
debug "$overlay"
if { [string range $overlay end end] == "/" } {
set overlay [string range $overlay 0 end-1]
@@ -315,6 +329,7 @@ proc _find_overlay { modulefile_components } {
return $overlay_components
}
}
debug "not found"
return {}
}
@@ -333,8 +348,6 @@ proc _pmodules_init_global_vars { } {
global variant
global PREFIX # prefix of package
set ::PmodulesOverlays [split $::env(PMODULES_OVERLAYS) ':']
set ::PmodulesModulfilesDir $::env(PMODULES_MODULEFILES_DIR)
set modulefile_components [file split $::ModulesCurrentModulefile]
set overlay_components [_find_overlay ${modulefile_components}]
@@ -361,6 +374,7 @@ proc _pmodules_init_global_vars { } {
debug "group of module $name: $group"
}
if { [info exists ::whatis] } {
module-whatis "$whatis"
}
+6 -6
View File
@@ -90,7 +90,7 @@ pbuild::version_lt() {
pbuild::version_le() {
pbuild::version_compare "$1" "$2"
local -i exit_code=$?
(( exit_code == 0 || exit_code = 2 ))
(( exit_code == 0 || exit_code == 2 ))
}
@@ -98,7 +98,7 @@ pbuild::version_gt() {
pbuild::version_compare "$1" "$2"
(( $? == 1 ))
local -i exit_code=$?
(( exit_code == 0 || exit_code = 1 ))
(( exit_code == 0 || exit_code == 1 ))
}
pbuild::version_eq() {
@@ -764,12 +764,12 @@ pbuild::make_all() {
fi
modulefile_dir=$(join_by '/' \
"${overlay}/${GROUP}/${PMODULES_MODULEFILES_DIR}" \
"${overlay_dir}/${GROUP}/${PMODULES_MODULEFILES_DIR}" \
"${names[@]}" \
"${module_name}")
modulefile_name="${modulefile_dir}/${module_version}"
PREFIX="${overlay}/${GROUP}/${module_name}/${module_version}"
PREFIX="${overlay_dir}/${GROUP}/${module_name}/${module_version}"
local -i i=0
for ((i=${#names[@]}-1; i >= 0; i--)); do
PREFIX+="/${names[i]}"
@@ -1303,7 +1303,7 @@ pbuild.build_module() {
build_dependency() {
local -r m=$1
std::debug "${m}: module not available"
local rels=( ${PMODULES_DEFINED_RELEASES//:/ } )
local rels=( ${ReleaseStages//:/ } )
[[ ${dry_run} == yes ]] && \
std::die 1 \
"%s " \
@@ -1479,7 +1479,7 @@ pbuild.bootstrap() {
MODULECMD=$(which true)
GROUP='Tools'
PREFIX="${overlay}/${GROUP}/Pmodules/${PMODULES_VERSION}"
PREFIX="${overlay_dir}/${GROUP}/Pmodules/${PMODULES_VERSION}"
C_INCLUDE_PATH="${PREFIX}/include"
CPLUS_INCLUDE_PATH="${PREFIX}/include"
+29 -2
View File
@@ -220,8 +220,8 @@ std.get_os_release_linux() {
fi
case "${ID}" in
RedHatEnterpriseServer | RedHatEnterprise | Scientific | rhel | centos | fedora )
echo "rhel${VERSION_ID%.*}"
RedHatEnterpriseServer | RedHatEnterprise | Scientific | rhel | centos | CentOS | fedora )
echo "rhel${VERSION_ID%%.*}"
;;
Ubuntu )
echo "Ubuntu${VERSION_ID%.*}"
@@ -244,6 +244,33 @@ std::get_os_release() {
${func_map[${OS}]}
}
std::get_type() {
local -a signature=$(typeset -p "$1")
case ${signature[1]} in
-Ai* )
echo 'int dict'
;;
-A* )
echo 'dict'
;;
-ai* )
echo 'int array'
;;
-a* )
echo 'array'
;;
-i* )
echo 'integer'
;;
-- )
echo 'string'
;;
* )
echo 'none'
return 1
esac
}
# Local Variables:
# mode: sh
# sh-basic-offset: 8
+60 -8
View File
@@ -154,7 +154,7 @@ declare opt_verbose='no'
# array collecting all modules specified on the command line via '--with=module'
declare -a opt_with_modules=()
declare overlay=''
declare opt_overlay_name_or_dir=''
parse_args() {
@@ -259,10 +259,10 @@ parse_args() {
opt_update_modulefiles='yes'
;;
--overlay )
overlay=$2
opt_overlay_name_or_dir=$2
;;
--overlay=* )
overlay=${1/*=}
opt_overlay_name_or_dir=${1/*=}
;;
-- )
:
@@ -366,7 +366,6 @@ build_modules() {
fi
done
local variants=()
local variants_files=()
for f in "${files[@]}"; do
@@ -408,15 +407,70 @@ build_modules() {
done
}
declare -r OVERLAY_CONF="${PMODULES_ROOT}/${PMODULES_CONFIG_DIR}/overlays.conf"
#
# Return overlay name *and* directory for an overlay given
# by name *or* directory. Search in the config file ${OVERLAY_CONF}.
#
get_overlay_name_and_dir() {
local "$1" # upvar for overlay name
local "$2" # upvar for overlay directory
if [[ -r "${OVERLAY_CONF}" ]]; then
local toks=()
while read -a toks; do
if [[ ${toks[0]} == $3 ]] || [[ ${toks[1]} == $3 ]]; then
std::upvar $1 "${toks[0]}"
std::upvar $2 "${toks[1]}"
return 0
fi
done < "${OVERLAY_CONF}"
fi
return 1
}
#.............................................................................
# main
parse_args "$@"
if [[ -z "${opt_system}" ]]; then
opt_system=$(std::get_os_release)
#
# set overlay_name, overlay_dir and opt_system
#
# --overlay=name
# lookup overlay directory, system name equivalent to overlay name
# --overlay=name --system=sysname
# lookup name, use given system name
# --overlay=dir
# use given overlay dir and default system name
# --system=name
# lookup name, set overlay_dir of found config
declare overlay_name=''
declare overlay_dir=''
if [[ -n "${opt_overlay_name_or_dir}" ]]; then
if ! get_overlay_name_and_dir overlay_name overlay_dir "${opt_overlay_name_or_dir}"; then
# not found in config
if [[ ${opt_overlay_name_or_dir:0:1} == / ]]; then
overlay_dir="${opt_overlay_name_or_dir}"
else
std::die 1 "Invalid overlay name -- ${opt_overlay_name_or_dir}"
fi
fi
if [[ -z "${opt_system}" ]] && [[ -n "${overlay_name}" ]]; then
opt_system="${overlay_name}"
fi
elif [[ -n "${opt_system}" ]]; then
get_overlay_name_and_dir overlay_name overlay_dir "${opt_system}" || :
fi
[[ -z "${overlay_name}" ]] && overlay_name='unknown'
[[ -z "${overlay_dir}" ]] && overlay_dir="${PMODULES_ROOT}"
[[ -z "${opt_system}" ]] && opt_system=$(std::get_os_release)
echo overlay_name=$overlay_name
echo overlay_dir=$overlay_dir
echo opt_system=$opt_system
pbuild.jobs "${opt_jobs}"
pbuild.force_rebuild "${opt_force_rebuild}"
pbuild.build_target "${opt_build_target}"
@@ -441,8 +495,6 @@ fi
source "${opt_build_config}" || \
std::die 3 "Oops: Cannot source configuration file -- '$_'"
[[ -z "${overlay}" ]] && overlay=${PMODULES_ROOT}
# :FIXME: should go dist files to
# ${PMODULES_ROOT}/var/distfiles
# or
+62 -34
View File
@@ -1,22 +1,42 @@
#!@PMODULES_HOME@/sbin/bash
#!@BASH@ --noprofile
# we have to unset CDPATH, otherwise 'cd' prints the directoy!
unset CDPATH
# used for some output only
declare -r CMD=$(basename "$0")
declare -r CMD='modmanage'
declare -r mydir=$(cd $(dirname "$0") && pwd)
declare -r prefix=$(dirname "${mydir}")
dirname=$(PATH=/bin:/usr/bin which dirname)
declare -r dirname
uname=$(PATH=/bin:/usr/bin which uname)
declare -r uname
mkdir=$(PATH=/bin:/usr/bin which mkdir)
declare -r mkdir
rsync=$(PATH=/bin:/usr/bin which rsync)
declare -r rsync
rm=$(PATH=/bin:/usr/bin /usr/bin/which rm)
declare -r rm
if [[ $(${uname} -s) == 'Darwin' ]]; then
declare -r getopt="${libexecdir}/getopt"
declare -r find="${libexecdir}/find"
else
getopt=$(PATH=/bin:/usr/bin /usr/bin/which getopt)
declare -r getopt
find=$(PATH=/bin:/usr/bin /usr/bin/which find)
declare -r find
fi
declare -r mydir=$(cd $(${dirname} "$0") && pwd)
declare -r prefix=$(${dirname} "${mydir}")
declare -r bindir="${prefix}/bin"
declare -r sbindir="${prefix}/sbin"
declare -r libdir="${prefix}/lib"
declare -r libexecdir="${prefix}/libexec"
source "${libdir}/libstd.bash"
source "${libdir}/libpmodules.bash"
PATH="${sbindir}:${bindir}:${PATH}"
source "${libdir}/libstd.bash"
_exit () {
std::die 1 "Interrupted..."
@@ -205,7 +225,7 @@ get_module_prefix() {
# $1: relative module file path
#
get_releasefile_name() {
echo "$(dirname "$1")/.release-$(basename "$1")"
echo "$(${dirname} "$1")/.release-$(basename "$1")"
}
##############################################################################
@@ -234,8 +254,8 @@ sync_module() {
# install/update module
if [[ ! -d "${target_prefix}/${rel_module_prefix}" ]] || [[ "${force}" == 'yes' ]]; then
$DRY mkdir -p "${target_prefix}/${rel_module_prefix}" || return $?
$DRY rsync --links --perms --recursive --delete \
$DRY ${mkdir} -p "${target_prefix}/${rel_module_prefix}" || return $?
$DRY ${rsync} --links --perms --recursive --delete \
"${src_prefix}/${rel_module_prefix}/" \
"${target_prefix}/${rel_module_prefix}/" || exit $?
fi
@@ -246,8 +266,8 @@ sync_module() {
# create target directory for module- and release-file
if [[ -e "${src_modulefile}" ]] || [[ -e "${src_releasefile}" ]]; then
local dir=$( dirname "${target_modulefile}" )
$DRY mkdir -p "${dir}" || return $?
local dir=$( ${dirname} "${target_modulefile}" )
$DRY ${mkdir} -p "${dir}" || return $?
fi
# copy modulefile template
@@ -260,20 +280,20 @@ sync_module() {
local -r src_template="${src_prefix}/${template}"
local -r target_template="${target_prefix}/${template}"
if [[ -e "${src_template}" ]]; then
$DRY mkdir -p "${target_template}"
$DRY rsync --links --perms --recursive \
$DRY ${mkdir} -p "${target_template}"
$DRY ${rsync} --links --perms --recursive \
"${src_template}" "${target_template}" || exit $?
fi
# copy modulefile
if [[ -e "${src_modulefile}" ]]; then
$DRY rsync --links --perms --recursive \
$DRY ${rsync} --links --perms --recursive \
"${src_modulefile}" "${target_modulefile}" || exit $?
fi
# copy release-file
if [[ -e "${src_releasefile}" ]]; then
$DRY rsync --links --perms --recursive \
$DRY ${rsync} --links --perms --recursive \
"${src_releasefile}" "${target_releasefile}" || exit $?
fi
@@ -290,9 +310,8 @@ sync_module() {
sync_config() {
src="$1/${PMODULES_CONFIG_DIR}/"
dst="$2/${PMODULES_CONFIG_DIR}/"
$DRY rsync --recursive --links --perms --delete \
$DRY ${rsync} --recursive --links --perms --delete \
"${src}" "${dst}" 2>/dev/null || return $?
sed -i.bak "s/PMODULES_VERSION=\(.*\)/PMODULES_VERSION=${PMODULES_VERSION}/" "${dst}/environment.bash"
echo
}
@@ -326,11 +345,26 @@ delete_module() {
# Initialize a new module environment in this directory-
#
subcommand_init() {
check_env() {
[[ -n "${PMODULES_ROOT}" ]] &&
[[ -d "${PMODULES_ROOT}" ]] &&
[[ -n "${PMODULES_HOME}" ]] &&
[[ -n "${PMODULES_VERSION}" ]] || \
std::die 1 "
Error: the module environment you are going to use as so urce has not been
initialized properly!"
[[ -d "${src_prefix}/${PMODULES_CONFIG_DIR}" ]] &&
[[ -d "${src_prefix}/Tools/Pmodules/${PMODULES_VERSION}" ]] || \
std::die 1 "
Error: the module environment '${src_prefix}' has not been initialized properly!"
}
local src=''
local target_prefixes=()
local user=''
local opts=''
opts=$(pmodules::get_options -o h -l src: -l user: -l help -l version: -- "$@")
opts=$(${getopt} -o h -l src: -l user: -l help -l version: -- "$@")
if [[ $? != 0 ]]; then
subcommand_help_init
exit 1
@@ -388,7 +422,7 @@ subcommand_init() {
std::die 1 "Error: --user option is only allowed if running as root!"
fi
pmodules::check_env || \
check_env || \
std::die 1 "Giving up..."
echo "
@@ -416,7 +450,7 @@ environment at '${PMODULES_ROOT}'
fi
force='yes'
echo "Creating target directory '${target_prefix}'..."
$DRY mkdir -p "${target_prefix}" || \
$DRY ${mkdir} -p "${target_prefix}" || \
std::die 1 "Error: make directory failed!"
echo
@@ -430,13 +464,7 @@ environment at '${PMODULES_ROOT}'
"${src_prefix}" \
"${target_prefix}" || \
std::die 1 "Error: sync Pmodules failed!"
mkdir -p "${target_prefix}/Tools/${PMODULES_MODULEFILES_DIR}"
echo
dst="${target_prefix}/${PMODULES_CONFIG_DIR}/environment.bash"
echo "Adding installation source '${src_prefix}' to '${dst}'..."
sed -i.bak '/PMODULES_INSTALL_SOURCE/d' "${dst}"
echo "declare -x PMODULES_INSTALL_SOURCE=\"${src_prefix}\"" >> "${dst}"
${mkdir} -p "${target_prefix}/Tools/${PMODULES_MODULEFILES_DIR}"
echo
if [[ -n "${user}" ]]; then
@@ -505,7 +533,7 @@ get_group_depths () {
cd "${root}"
local group
for group in "${Groups[@]}"; do
local fname=$(find "${group}/${modulefiles_dir}" \
local fname=$(${find} "${group}/${modulefiles_dir}" \
-depth \( -type f -o -type l \) -print -quit)
[[ -n ${fname} ]] || continue
local -a tmp
@@ -591,7 +619,7 @@ subcommand_install() {
[[ -z ${dep} ]] && continue
# search for module with current modulepath and remember
local modulename=$(find "${modulepath[@]}" -path "*/${dep}" \
local modulename=$(${find} "${modulepath[@]}" -path "*/${dep}" \
2>/dev/null | head -n 1 )
[[ -n ${modulename} ]] || \
std::die 3 "Oops: required module '${dep}' not found!"
@@ -606,7 +634,7 @@ subcommand_install() {
modulepath+=( "${path}" )
fi
done < "${tmpfile}"
rm "${tmpfile}"
${rm} "${tmpfile}"
}
#......................................................................
@@ -649,7 +677,7 @@ subcommand_install() {
std::info ""
}
opts=$(pmodules::get_options -o hf -l dry-run -l force -l with: -l release: -l help -l src: -- "$@")
opts=$(${getopt} -o hf -l dry-run -l force -l with: -l release: -l help -l src: -- "$@")
if [[ $? != 0 ]]; then
subcommand_help_install
exit 1
@@ -729,7 +757,7 @@ subcommand_install() {
map_to_family[$_key]=${_family}
fi
done < <({ cd "${src_prefix}" && \
find */"${PMODULES_MODULEFILES_DIR}" \
${find} */"${PMODULES_MODULEFILES_DIR}" \
\( -type l -o -type f \) \! -name ".*"; } 2>/dev/null )
#
+648 -435
View File
File diff suppressed because it is too large Load Diff
+14
View File
@@ -8,3 +8,17 @@ module-maintainer "Achim Gsell <achim.gsell@psi.ch>"
module-help "
Pmodules are a hierarchical module environment based on Environment Modules.
"
#
# It might be that '${PMODULES_ROOT}/Tools/Pmodules/VERSION' is in PATH.
# Why? With older version the PATH might have been set without loading
# a module.
#
if { [module-info mode load] } {
set PATH ":$::env(PATH):"
if { [regexp -- {.*:(.*/Pmodules/[^:]*):} $PATH -> str] } {
if { [string compare $str $PREFIX/bin] != 0 } {
remove-path PATH $str
}
}
}
-25
View File
@@ -3,36 +3,11 @@
# The following settings are system defaults. They can be (re-)defined
# in a system wide profile or in a user's profile.
# set groups which should be available after initialization
: ${PMODULES_DEFAULT_GROUPS:='Tools Programming'}
# set releases which should be available after initialization
: ${PMODULES_DEFAULT_RELEASES:='stable'}
# set default version
: ${PMODULES_VERSION:=@PMODULES_VERSION@}
#############################################################################
# N O C H A N G E S B E L O W T H I S L I N E ! #
#
# Notes:
# - PMODULES_ROOT is derived from the location of this file.
# - Some for PMODULES_CONFIG_DIR.
# - The Pmodules software must be installed in
# ${PMODULES_ROOT}/Tools/Pmodules/${PMODULES_VERSION}
#
export PMODULES_DEFAULT_GROUPS
export PMODULES_DEFAULT_RELEASES
export PMODULES_VERSION
declare -x PMODULES_MODULEFILES_DIR='modulefiles'
declare -x PMODULES_DEFINED_RELEASES=':unstable:stable:deprecated:'
declare -x PMODULES_ROOT=$(cd $(dirname "${BASH_SOURCE}")/.. && pwd)
declare -x PMODULES_CONFIG_DIR=$(basename $(cd $(dirname "${BASH_SOURCE}") && pwd))
declare -x PMODULES_HOME="${PMODULES_ROOT}/Tools/Pmodules/${PMODULES_VERSION}"
declare -x PMODULES_DIR="${PMODULES_HOME}"
test -r "${PMODULES_HOME}/init/bash" && source "$_"
+3 -3
View File
@@ -1,7 +1,7 @@
#!/bin/tcsh
setenv PMODULES_DEFAULT_GROUPS 'Tools Programming'
setenv PMODULES_DEFAULT_RELEASES 'stable'
setenv DefaultGroups 'Tools Programming'
setenv DefaultReleaseStages 'stable'
if ( ! $?PMODULES_VERSION ) then
setenv PMODULES_VERSION "@PMODULES_VERSION@"
endif
@@ -14,7 +14,7 @@ endif
#############################################################################
setenv PMODULES_MODULEFILES_DIR 'modulefiles'
setenv PMODULES_DEFINED_RELEASES ':unstable:stable:deprecated:'
setenv ReleaseStages ':unstable:stable:deprecated:'
setenv PMODULES_ROOT "@PMODULES_ROOT@"
setenv PMODULES_CONFIG_DIR 'config'
+5 -5
View File
@@ -7,12 +7,12 @@
# ${PMODULES_ROOT}/Tools/Pmodules/${PMODULES_VERSION}
#
declare -xa PMODULES_DEFAULT_GROUPS
declare -xa PMODULES_DEFAULT_RELEASES
declare -xa DefaultGroups
declare -xa DefaultReleaseStages
declare -x PMODULES_VERSION
: ${PMODULES_DEFAULT_GROUPS:=(Tools Programming)}
: ${PMODULES_DEFAULT_RELEASES:=(stable)}
: ${DefaultGroups:=(Tools Programming)}
: ${DefaultReleaseStages:=(stable)}
: ${PMODULES_VERSION:=@PMODULES_VERSION@}
#############################################################################
@@ -20,7 +20,7 @@ declare -x PMODULES_VERSION
#############################################################################
declare -x PMODULES_MODULEFILES_DIR='modulefiles'
declare -x PMODULES_DEFINED_RELEASES=':unstable:stable:deprecated:'
declare -x ReleaseStages=':unstable:stable:deprecated:'
declare -x PMODULES_ROOT=$(cd $(dirname "${(%):-%N}")/.. && pwd)
declare -x PMODULES_CONFIG_DIR=$(basename $(cd $(dirname "${(%):-%N}") && pwd))
+6 -6
View File
@@ -70,7 +70,7 @@ declare -x _LMFILES_=''
# build initial MODULEPATH
declare -x MODULEPATH=''
typeset -T MODULEPATH modulepath
for group in ${PMODULES_DEFAULT_GROUPS[@]}; do
for group in ${DefaultGroups[@]}; do
dir="${PMODULES_ROOT}/${group}/${PMODULES_MODULEFILES_DIR}"
modulepath=( "${dir}" ${(m)modulepath:#${dir}} )
done
@@ -78,16 +78,16 @@ done
# build initial list of used releases
declare -x UsedReleases=''
typeset -T UsedReleases usedreleases
for r in ${PMODULES_DEFAULT_RELEASES[@]}; do
for r in ${DefaultReleaseStages[@]}; do
usedreleases=( "${r}" ${(m)usedreleases:#${r}} )
done
eval $(save_env UsedReleases PMODULES_DEFAULT_RELEASES PMODULES_DEFAULT_GROUPS PMODULES_DEFINED_RELEASES)
eval $(save_env UsedReleases DefaultReleaseStages DefaultGroups ReleaseStages)
unset UsedReleases
unset PMODULES_DEFAULT_RELEASES
unset PMODULES_DEFAULT_GROUPS
unset PMODULES_DEFINED_RELEASES
unset DefaultReleaseStages
unset DefaultGroups
unset ReleaseStages
# initialize MANPATH with output of `man --path` if not set
[[ -z "${MANPATH}" ]] && manpath=$( man --path )
+5
View File
@@ -0,0 +1,5 @@
#!/usr/bin/env modbuild
pbuild::set_download_url "https://core.tcl-lang.org/tcllib/uv/$P-$V.tar.xz"
+7 -8
View File
@@ -338,10 +338,6 @@ pmodules::compile() {
echo " root of Pmodules environment: ${prefix}"
echo " Pmodule prefix: ${PMODULES_HOME}"
#if [[ ! -f "${PMODULES_HOME}/${UTILBIN_DIR}/base64" ]] || [[ ${opt_force} == 'yes' ]]; then
# build coreutils
#fi
if [[ "${OS}" == 'Darwin' ]]; then
if [[ ! -f "${PMODULES_HOME}/${UTILBIN_DIR}/getopt" ]] || [[ ${opt_force} == 'yes' ]]; then
build getopt
@@ -356,12 +352,12 @@ pmodules::compile() {
build bash
fi
if [[ ! -f "${PMODULES_HOME}/sbin/find" ]] || [[ ${opt_force} == 'yes' ]]; then
build findutils
if [[ ! -e "${PMODULES_HOME}/${UTILBIN_DIR}/tclsh" ]] || [[ ${opt_force} == 'yes' ]]; then
build Tcl
fi
if [[ ! -e "${PMODULES_HOME}/sbin/tclsh" ]] || [[ ${opt_force} == 'yes' ]]; then
build Tcl
if [[ ! -e "${PMODULES_HOME}/lib/tcllib1.20" ]] || [[ ${opt_force} == 'yes' ]]; then
build tcllib
fi
if [[ ! -e "${PMODULES_HOME}/libexec/modulecmd.bin" ]] || [[ ${opt_force} == 'yes' ]]; then
@@ -499,6 +495,9 @@ pmodules::install() {
sed "${sed_cmd}" "${SRC_DIR}/modmanage.bash.in" > "${PMODULES_HOME}/libexec/modmanage.bash"
chmod 0755 "${PMODULES_HOME}/libexec/modmanage.bash"
test -e "${PMODULES_ROOT}/${CONFIG_DIR}/Pmodules.conf" || \
install -m 0644 "${SRC_DIR}/Pmodules.conf" "${PMODULES_ROOT}/${CONFIG_DIR}"
install -m 0644 "${SRC_DIR}/bash" "${PMODULES_HOME}/init"
install -m 0644 "${SRC_DIR}/bash_completion" "${PMODULES_HOME}/init"
install -m 0644 "${SRC_DIR}/csh" "${PMODULES_HOME}/init"
+3 -3
View File
@@ -12,7 +12,7 @@ declare -x PMODULES_MODULEFILES_DIR='modulefiles'
declare -x PMODULES_HOME="${PMODULES_ROOT}/Tools/Pmodules/${PMODULES_VERSION}"
declare -x PMODULES_DEFAULT_GROUPS='Tools Programming'
declare -x PMODULES_DEFINED_RELEASES=':unstable:stable:deprecated:'
declare -x PMODULES_DEFAULT_RELEASES='stable'
declare -x DefaultGroups='Tools Programming'
declare ReleaseStages=':unstable:stable:deprecated:'
declare DefaultReleaseStages='stable'
+2 -1
View File
@@ -4,5 +4,6 @@ findutils 4.7.0
getopt 1.1.6
gettext 0.21
modules 3.2.10.1
Pmodules 1.1.0
Pmodules 1.1.2
Tcl 8.6.10
tcllib 1.20