Commit b129a8d0 authored by gsell's avatar gsell

- em.xyz renamed to pmodules.xxy

- underscore removed as prefix of function names
- keyword function removed
parent e26a9fae
......@@ -34,7 +34,7 @@ set -o errexit
trap "error_handler" ERR
function error_handler() {
error_handler() {
local -i ec=$?
exit ${ec}
......
......@@ -56,7 +56,7 @@ declare -x DYLD_LIBRARY_PATH
##############################################################################
#
function usage() {
usage() {
error "
Usage: $0 [OPTIONS..] [VERSION] [ENV=VALUE...]
......@@ -104,28 +104,24 @@ is_release () {
##############################################################################
#
# test whether a module is loaded or not
# set supported OS
#
# $1: module name
# $1: OS (as printed by 'uname -s')
#
em.is_loaded() {
[[ :${LOADEDMODULES}: =~ :$1: ]]
}
function em.set_release() {
is_release "$1" || die 1 "$P: unknown release type: $1"
[[ "$1" == "deprecated" ]] && die 0 "$P: is deprecated, we don't rebuild it."
MODULE_RELEASE="$1"
}
function em.supported_os() {
pmodules.supported_os() {
for os in "$@"; do
[[ ${os} == ${OS} ]] && return 0
done
die 0 "${P}: Not available for ${OS}."
}
function em.add_to_group() {
##############################################################################
#
# install module in given group
#
# $1: group
#
pmodules.add_to_group() {
if [[ -z ${1} ]]; then
die 42 "${FUNCNAME}: Missing group argument."
fi
......@@ -135,31 +131,36 @@ function em.add_to_group() {
MODULE_GROUP=$1
}
em.add_to_family() {
em.add_to_group "$@"
}
function em.set_build_dependencies() {
##############################################################################
#
# install module in given group
#
# $1: group
#
pmodules.set_build_dependencies() {
MODULE_BUILD_DEPENDENCIES=("$@")
}
function em.set_runtime_dependencies() {
MODULE_DEPENDENCIES=("$@")
pmodules.set_docfiles() {
MODULE_DOCFILES=("$@")
}
function em.set_supported_compilers() {
MODULE_SUPPORTED_COMPILERS=("$@")
module_is_available() {
[[ -n $("${MODULECMD}" bash avail "$1" 2>&1 1>/dev/null) ]]
}
function em.set_docfiles() {
MODULE_DOCFILES=("$@")
##############################################################################
#
# test whether a module is loaded or not
#
# $1: module name
#
is_loaded() {
[[ :${LOADEDMODULES}: =~ :$1: ]]
}
function module_is_available() {
[[ -n $("${MODULECMD}" bash avail "$1" 2>&1 1>/dev/null) ]]
}
function _load_build_dependencies() {
load_build_dependencies() {
for m in "${MODULE_BUILD_DEPENDENCIES[@]}"; do
[[ -z $m ]] && continue
if [[ ! $m =~ "*/*" ]]; then
......@@ -170,7 +171,7 @@ function _load_build_dependencies() {
echo "$m: warning: No version set, loading default ..."
fi
fi
em.is_loaded "$m" && continue
is_loaded "$m" && continue
if ! module_is_available "$m"; then
debug "${m}: module not available"
local rels=( ${releases//:/ } )
......@@ -240,12 +241,12 @@ function _load_build_dependencies() {
}
if [[ ${bootstrap} == yes ]]; then
function _load_build_dependencies() {
load_build_dependencies() {
:
}
fi
function _write_runtime_dependencies() {
write_runtime_dependencies() {
local -r fname="${PREFIX}/.dependencies"
info "Writing run-time dependencies to ${fname}"
local dep
......@@ -260,7 +261,7 @@ function _write_runtime_dependencies() {
done
}
function _write_build_dependencies() {
write_build_dependencies() {
local -r fname="${PREFIX}/.build_dependencies"
info "Writing build dependencies to ${fname}"
local dep
......@@ -279,7 +280,7 @@ function _write_build_dependencies() {
#
# cleanup environment
#
em.cleanup_env() {
pmodules.cleanup_env() {
C_INCLUDE_PATH=''
CPLUS_INCLUDE_PATH=''
......@@ -320,7 +321,7 @@ em.cleanup_env() {
# $2: name without version
# $3: version
#
function find_tarball() {
find_tarball() {
local -r dir=$1
local -r name=$2
local -r version=$3
......@@ -346,7 +347,7 @@ function find_tarball() {
}
#setup module specific environment
function _setup_env2() {
setup_env2() {
if [[ -z ${MODULE_GROUP} ]]; then
die 1 "$P: group not set."
fi
......@@ -499,7 +500,7 @@ function _setup_env2() {
}
# redefine function for bootstrapping
function _setup_env2_bootstrap() {
setup_env2_bootstrap() {
if [[ -z ${MODULE_GROUP} ]]; then
die 1 "$P: group not set."
fi
......@@ -538,7 +539,7 @@ function _setup_env2_bootstrap() {
PATH+=":${PREFIX}/bin"
}
function _prep() {
prep() {
# untar sources
if [[ ! -d ${MODULE_SRCDIR} ]]; then
......@@ -551,34 +552,34 @@ function _prep() {
}
function em.pre_configure() {
pmodules.pre_configure() {
:
}
function em.configure() {
pmodules.configure() {
${MODULE_SRCDIR}/configure \
--prefix="${PREFIX}"
}
function em.build() {
pmodules.build() {
make -j${JOBS}
}
function em.install() {
pmodules.install() {
make install
}
function em.post_install() {
pmodules.post_install() {
:
}
function em.install_doc() {
pmodules.install_doc() {
info "Installing documentation to ${DOCDIR}"
install -m 0755 -d "${DOCDIR}"
install -m0444 "${MODULE_DOCFILES[@]/#/${MODULE_SRCDIR}/}" "${BUILDSCRIPT}" "${DOCDIR}"
}
function _set_legacy_link() {
set_legacy_link() {
local -r link_name="${PMODULES_ROOT}/${PMODULES_MODULEFILES_DIR}/${MODULE_GROUP}/${MODULE_NAME}"
local -r dir_name=${link_name%/*}
local -r release_file="${dir_name}/.release-${MODULE_NAME##*/}"
......@@ -598,7 +599,7 @@ function _set_legacy_link() {
echo "${MODULE_RELEASE}" > "${release_file}"
}
function _set_link() {
set_link() {
local -r link_name="${PMODULES_ROOT}/${MODULE_GROUP}/${PMODULES_MODULEFILES_DIR}/${MODULE_NAME}"
local -r dir_name=${link_name%/*}
local -r release_file="${dir_name}/.release-${MODULE_NAME##*/}"
......@@ -618,7 +619,7 @@ function _set_link() {
echo "${MODULE_RELEASE}" > "${release_file}"
}
function em.cleanup_build() {
pmodules.cleanup_build() {
[[ -n "${MODULE_BUILDDIR}" ]] \
|| die 1 "Oops: internal error: MODULE_BUILDDIR is set to empty string..."
[[ "${MODULE_BUILDDIR}" == "/" ]] \
......@@ -629,7 +630,7 @@ function em.cleanup_build() {
rm -rf "/${MODULE_BUILDDIR}"
}
function em.cleanup_src() {
pmodules.cleanup_src() {
(
[[ -d /${MODULE_SRCDIR} ]] || return 0
cd "/${MODULE_SRCDIR}/..";
......@@ -641,7 +642,7 @@ function em.cleanup_src() {
return 0
}
function _check_compiler() {
check_compiler() {
test -z ${MODULE_SUPPORTED_COMPILERS} && return 0
for cc in ${MODULE_SUPPORTED_COMPILERS[@]}; do
if [[ ${COMPILER}/${COMPILER_VERSION} =~ ${cc} ]]; then
......@@ -652,62 +653,62 @@ function _check_compiler() {
}
# unfortunatelly we need sometime an OS depended post-install
function _post_install_linux() {
post_install_linux() {
cd "${PREFIX}"
# solve multilib problem with LIBRARY_PATH on 64bit Linux
[[ -d "lib" ]] && [[ ! -d "lib64" ]] && ln -s lib lib64
return 0
}
function _post_install() {
post_install() {
info "Run post-installation for ${OS} ..."
[[ "${OS}" == "Linux" ]] && _post_install_linux
[[ "${OS}" == "Linux" ]] && post_install_linux
info "Post-installation done ..."
return 0
}
function em.make_all() {
pmodules.make_all() {
local building='no'
echo "${P}:"
_setup_env1
_load_build_dependencies
load_build_dependencies
# setup module specific environment
if [[ ${bootstrap} == no ]]; then
_setup_env2
setup_env2
else
_setup_env2_bootstrap
setup_env2_bootstrap
fi
if [[ ! -d "${PREFIX}" ]] || [[ ${force_rebuild} == 'yes' ]]; then
building='yes'
echo "Building $P/$V ..."
[[ ${dry_run} == yes ]] && die 0 ""
_check_compiler
_prep
check_compiler
prep
cd "${MODULE_SRCDIR}"
em.pre_configure
pmodules.pre_configure
cd "${MODULE_BUILDDIR}"
em.configure
em.build
em.install
em.post_install
em.install_doc
_post_install
pmodules.configure
pmodules.build
pmodules.install
pmodules.post_install
pmodules.install_doc
post_install
if [[ ${bootstrap} == 'no' ]]; then
_write_runtime_dependencies
_write_build_dependencies
write_runtime_dependencies
write_build_dependencies
fi
[[ ${enable_cleanup_build} == yes ]] && em.cleanup_build
[[ ${enable_cleanup_src} == yes ]] && em.cleanup_src
[[ ${enable_cleanup_build} == yes ]] && pmodules.cleanup_build
[[ ${enable_cleanup_src} == yes ]] && pmodules.cleanup_src
else
echo "Not rebuilding $P/$V ..."
fi
if [[ ${bootstrap} == 'no' ]]; then
if [[ -d "${PMODULES_ROOT}/${PMODULES_MODULEFILES_DIR}" ]]; then
_set_legacy_link
set_legacy_link
fi
_set_link
set_link
fi
return 0
}
......@@ -722,7 +723,7 @@ bootstrap='no'
enable_cleanup_build='yes'
enable_cleanup_src='no'
em.cleanup_env
pmodules.cleanup_env
# array collecting all modules specified on the command line via '--with=module'
with_modules=()
......
#!/bin/bash
#set -o functrace
source "$(dirname $0)/../../../lib/libem.bash"
source "$(dirname $0)/../../../lib/libpmodules.bash"
TCL_DIR="${PMODULES_ROOT}/Tools/Pmodules/${PMODULES_VERSION}"
PATH="${TCL_DIR}/bin:${PATH}"
function em.configure() {
pmodules.configure() {
case ${OS} in
Linux )
declare -x LIBS="-lz -lpthread"
......@@ -25,7 +25,7 @@ function em.configure() {
|| exit 1
}
function em.post_install() {
pmodules.post_install() {
rm -v ${PREFIX}/Modules/bin/add.modules
rm -v ${PREFIX}/Modules/bin/mkroot
rm -rfv ${PREFIX}/Modules/modulefiles
......@@ -47,8 +47,8 @@ module() {
# use system gcc to compile
declare -rx CC=gcc
em.add_to_family 'Tools'
em.make_all
pmodules.add_to_group 'Tools'
pmodules.make_all
# Local Variables:
# mode: sh
......
......@@ -108,7 +108,7 @@ prepend_path () {
# Based on solution published here:
# https://stackoverflow.com/questions/273909/how-do-i-manipulate-path-elements-in-shell-scripts
#
function replace_path () {
replace_path () {
local -r path=$1
local -r removepat=$2
local -r replacestr=$3
......
......@@ -13,7 +13,7 @@ declare -A fmmap # module name to family member mapping
declare -a relmap # module info index to release mapping
declare tempfile # temporary dialog results
function set_difference() { # $1 \ $2
set_difference() { # $1 \ $2
local -a operand1=($1)
local -a operand2=($2)
local -A members
......@@ -27,7 +27,7 @@ function set_difference() { # $1 \ $2
echo ${!members[@]}
}
function set_merge() { # $1 U $2 (where $1 and $2 are disjoint)
set_merge() { # $1 U $2 (where $1 and $2 are disjoint)
if [[ -z "$1" ]]; then
echo "$2"
elif [[ -z "$2" ]]; then
......@@ -37,7 +37,7 @@ function set_merge() { # $1 U $2 (where $1 and $2 are disjoint)
fi
}
function set_union() { # $1 U $2 (sorted)
set_union() { # $1 U $2 (sorted)
local -a operand1=($1)
local -a operand2=($2)
local -A members
......@@ -49,7 +49,7 @@ function set_union() { # $1 U $2 (sorted)
}
# unique id for a module
function unique_id() { # $1: module info index
unique_id() { # $1: module info index
local -a minfo=( ${modlist[$1]} )
if (( ${#minfo[@]} < 4 )); then
echo ${minfo[0]}
......@@ -58,7 +58,7 @@ function unique_id() { # $1: module info index
fi
}
function mod_path() { # $1: module info index
mod_path() { # $1: module info index
local -i i
local -a m=(${modlist[$1]})
local res="$PMODULES_ROOT/${fmmap[${m[0]%%/*}]}/${m[0]}"
......@@ -68,7 +68,7 @@ function mod_path() { # $1: module info index
echo "$res"
}
function calc_deps() { # $1: module info index
calc_deps() { # $1: module info index
local dpath="$(mod_path $1)/.dependencies"
[[ ! -r "$dpath" ]] && return
local -a d=( $(< "$dpath") ) # dependencies as versioned module names
......@@ -96,7 +96,7 @@ function calc_deps() { # $1: module info index
echo "${deps[@]}"
}
function update_deps() { # $1: 1-add dependency, -1-remove dependency $2: set of module info indices
update_deps() { # $1: 1-add dependency, -1-remove dependency $2: set of module info indices
[[ -z "$2" ]] && return
local -a q=($2) # work queue
local deps="" # set of dependencies
......@@ -117,7 +117,7 @@ function update_deps() { # $1: 1-add dependency, -1-remove dependency $2: set
}
# "$1": source module environment
function find_modules() {
find_modules() {
# construct modlist/modmap/uidmap/depcnt/fmmap/relmap arrays from module search output
local -a mc # module info components
local -i i=0
......@@ -144,7 +144,7 @@ function find_modules() {
}
# "$1": source module environment
function find_families() {
find_families() {
# construct fdmap
local -a t # tcl file components
local l s n
......@@ -159,7 +159,7 @@ function find_families() {
done < <(grep -R set-family "$1/*/${PMODULES_MODULEFILES_DIR}")
}
function select_uid() { # $1: module uid
select_uid() { # $1: module uid
local -a uidc=($1) # uid components
local name=${uidc[-1]%%/*} # module name
local midx=${uidmap["$1"]} # module info index
......@@ -168,7 +168,7 @@ function select_uid() { # $1: module uid
update_deps 1 "$midx"
}
function preselect() { # "$1": prefix for preselected modules
preselect() { # "$1": prefix for preselected modules
# module paths must not contain white space
[[ -z "$1" ]] && return
local -a mpc # module path components
......@@ -193,7 +193,7 @@ function preselect() { # "$1": prefix for preselected modules
trap - EXIT
}
function is_dependency() { # $1: module name
is_dependency() { # $1: module name
local -a map=(${modmap[$1]})
local -i m
for ((m=0; m<${#map[@]}; m++)); do
......@@ -202,7 +202,7 @@ function is_dependency() { # $1: module name
return 1
}
function dialog_1() {
dialog_1() {
local -a input
local marker
local m
......@@ -220,15 +220,15 @@ function dialog_1() {
return $?
}
function module_id() { # $@: module info components
module_id() { # $@: module info components
echo "$1 ${@:4}"
}
function module_release() { # $@: module info components
module_release() { # $@: module info components
echo "$2"
}
function dialog_2() { # $1: module name
dialog_2() { # $1: module name
local -a map=(${modmap[$1]})
local -a sel=(${selected[$1]})
local -i j # mapping index
......@@ -250,14 +250,14 @@ function dialog_2() { # $1: module name
}
# final dialog output
function module_out() { # $1: module info index
module_out() { # $1: module info index
local -a args=(${modlist[$1]})
echo "${args[@]}"
}
# "$1": prefix for preselected modules (destination module environment)
# "$2": prefix for selectable modules (source module environment)
function module_picker() {
module_picker() {
find_families "$2"
find_modules "$2"
preselect "$1"
......
......@@ -476,7 +476,7 @@ subcommand_sync() {
# Redefine module_out to append modules to the selected_modules variable
local -a selected_modules
function module_out() {
module_out() {
local -a args=(${modlist[$1]})
local path=""
IFS=/
......@@ -495,7 +495,7 @@ subcommand_sync() {
local -a destination_modules=( $(cd "${dst_prefix}/${PMODULES_MODULEFILES_DIR}"; find -L . -type f | while read f; do n=${f##*/}; [[ "${n:0:1}" == "." ]] || echo ${f#./}; done) )
# redefine set difference, the version in dialog.bash only handles integers
function set_difference() { # $1 \ $2
set_difference() { # $1 \ $2
local -a operand1=($1)
local -a operand2=($2)
local -A members
......
......@@ -3,7 +3,7 @@
declare -r DEFAULT_SRC="/afs/psi.ch/sys/psi.@sys"
declare -r DEFAULT_DST="/opt/psi.local"
function usage() {
usage() {
echo "
$0 [--from=<source>] [--to=<destination>] [--dryrun] [--delete]
--from source module installation (default: $DEFAULT_SRC)
......@@ -17,13 +17,13 @@ $0 [--from=<source>] [--to=<destination>] [--dryrun] [--delete]
(destination cleanup)" >&2
}
function die() {
die() {
echo "$1" >&2
exit 1
}
# check if directory $1 is a valid prefix
function is_module_prefix() {
is_module_prefix() {
if [[ -d "$1" ]] &&
[[ -d "$1/$PMODULES_CONFIG_DIR" ]] &&
[[ -d "$1/$PMODULES_MODULEFILES_DIR" ]]
......@@ -34,7 +34,7 @@ function is_module_prefix() {
}
# set the source and destination module installations
function get_options() {
get_options() {
local src_dir="$DEFAULT_SRC"
local dst_dir="$DEFAULT_DST"
local dryrun=false
......@@ -82,7 +82,7 @@ function get_options() {
# Derive the relative module installation path
# from the relative module file path
# $1 relative module file path
function get_modpath() {
get_modpath() {
local -a comp=( ${1//\// } ) # split rel.path into components
local -a path # result path
local -i i
......@@ -98,14 +98,14 @@ function get_modpath() {
# Derive the relative module release file path
# from the relative module file path
# $1 relative module file path
function get_release_path() {
get_release_path() {
echo "$(dirname "$1")/.release-$(basename "$1")"
}
# $1 dryrun=(true|false)
# $2 relative module file path of destination module to be deleted
# $3 destination prefix
function delete_module() {
delete_module() {
if [[ "$1" != "false" ]]; then
echo "(dryrun) delete: $2 at $3" 1>&2
return 0
......@@ -126,7 +126,7 @@ function delete_module() {
# $2 relative module file path of source module to be copied to the destination
# $3 source prefix
# $4 destination prefix
function copy_module() {
copy_module() {
if [[ "$1" != "false" ]]; then
echo "(dryrun) copy: $2 from $3 to $4" 1>&2
return 0
......@@ -147,7 +147,7 @@ function copy_module() {
# destination module installations
# --from=<source> default: /afs/psi.ch/sys/psi.@sys
# --to=<destination> default: /opt/psi.local
function sync_modules() {
sync_modules() {
local -a options=( $(get_options "$@") )
[[ -z "$options" ]] && exit 1
local src_dir="${options[0]}"
......@@ -177,7 +177,7 @@ function sync_modules() {
local -a selected_modules
# Redefine module_out to append modules to the selected_modules variable
function module_out() {
module_out() {
local -a args=(${modlist[$1]})
local path=""
IFS=/
......@@ -191,7 +191,7 @@ function sync_modules() {
local -a destination_modules=( $(cd "$dst_dir/$PMODULES_MODULEFILES_DIR"; find -L . -type f | while read f; do echo ${f#./}; done) )
# redefine set difference, the version in dialog.bash only handles integers
function set_difference() { # $1 \ $2
set_difference() { # $1 \ $2
local -a operand1=($1)
local -a operand2=($2)
local -A members
......
#!/bin/bash
source "$(dirname $0)/../../../lib/libem.bash"
source "$(dirname $0)/../../../lib/libpmodules.bash"
function em.configure() {
pmodules.configure() {
case ${OS} in
Linux )
srcdir="${MODULE_SRCDIR}/unix"
......@@ -17,10 +17,10 @@ function em.configure() {
|| exit 1
}
function em.post_install() {
pmodules.post_install() {
{ cd "${PREFIX}"/bin && rm -f tclsh && ln -fs tclsh${V%.*} tclsh; };
}
em.add_to_family 'Tools'
em.set_docfiles 'license.terms' 'README'
em.make_all
pmodules.add_to_group 'Tools'
pmodules.set_docfiles 'license.terms' 'README'
pmodules.make_all
#!/bin/bash
source "$(dirname $0)/../../../lib/libem.bash"
source "$(dirname $0)/../../../lib/libpmodules.bash"