Files
MX_Pmodule/lib/lib.bash
Achim Gsell eb33dc1991 lib.bash, libpmodules.bash:
- function names refactored with namespace prefix 'std::'
2015-09-17 11:06:32 +02:00

141 lines
2.3 KiB
Bash

#!/bin/bash
#
# We need GNU versions of the following utilities. This code works
# well on Linux and Mac OS X with MacPorts.
# :FIXME: implement a smarter, portable solution.
#
shopt -s expand_aliases
unalias -a
__path=$(which gdate 2>/dev/null)
if [[ $__path ]]; then
alias date=$__path
else
alias date=$(which date 2>/dev/null)
fi
__path=$(which ginstall 2>/dev/null)
if [[ $__path ]]; then
alias install=$__path
else
alias install=$(which install 2>/dev/null)
fi
__path=$(which greadlink 2>/dev/null)
if [[ $__path ]]; then
alias readlink=$__path
else
alias readlink=$(which readlink 2>/dev/null)
fi
__path=$(which gsed 2>/dev/null)
if [[ $__path ]]; then
alias sed=$__path
else
alias sed=$(which sed 2>/dev/null)
fi
#
# set an error handler. If a function _exit() exists, it will be called
# with the passed exit code.
#
# $1 exit code
#
set -o errexit
trap "std::error_handler" ERR
std::error_handler() {
local -i ec=$?
[[ typeset -F _exit >/dev/null 2>&1 ]] && _exit "${ec}"
exit ${ec}
}
#
# logging/message functions
#
std::log() {
local -ri fd=$1
local -r fmt="$2\n"
shift 2
printf -- "$fmt" "$@" >> /dev/fd/$fd
}
std::info() {
std::log 2 "$1\n" "${@:2}"
}
std::error() {
std::log 2 "$1\n" "${@:2}"
}
std::debug() {
[[ ${PMODULES_DEBUG} ]] || return 0
std::log 2 "$@"
}
std::die() {
local -ri ec=$1
shift
local cout
if (( ec == 0)); then
cout='1'
else
cout='2'
fi
if [[ -n $@ ]]; then
local -r fmt=$1
shift
std::log $cout "$fmt" "$@"
fi
exit $ec
}
std::abspath () {
readlink -f "$1"
}
std::append_path () {
local -r P=$1
local -r d=$2
if ! egrep -q "(^|:)${d}($|:)" <<<${!P} ; then
if [[ -z ${!P} ]]; then
eval $P=${d}
else
eval $P=${!P}:${d}
fi
fi
}
std::prepend_path () {
local -r P=$1
local -r d=$2
if ! egrep -q "(^|:)${d}($|:)" <<<${!P} ; then
if [[ -z ${!P} ]]; then
eval $P=${d}
else
eval $P="${d}:${!P}"
fi
fi
}
read_versions() {
local -r fname="$1"
local varname=''
while read _name _version; do
[[ -z ${_name} ]] && continue
[[ -z ${_version} ]] && continue
[[ "${_name:0:1}" == '#' ]] && continue
var_name=$(echo ${_name} | tr [:lower:] [:upper:])_VERSION
# don't set version, if already set
if [[ -z ${!var_name} ]]; then
eval ${var_name}="${_version}"
fi
done < "${fname}"
}