mirror of
https://github.com/Pmodules/Pmodules.git
synced 2026-07-05 13:20:50 +02:00
Merge branch '32-overlay-implementation' of gitlab.psi.ch:Pmodules/src into 32-overlay-implementation
This commit is contained in:
@@ -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'
|
||||
@@ -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
|
||||
#
|
||||
|
||||
@@ -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
@@ -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
@@ -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"
|
||||
}
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 "$_"
|
||||
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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
@@ -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 )
|
||||
|
||||
Executable
+5
@@ -0,0 +1,5 @@
|
||||
#!/usr/bin/env modbuild
|
||||
|
||||
pbuild::set_download_url "https://core.tcl-lang.org/tcllib/uv/$P-$V.tar.xz"
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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'
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user