diff options
Diffstat (limited to 'noarch/scripting_utils')
-rwxr-xr-x | noarch/scripting_utils | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/noarch/scripting_utils b/noarch/scripting_utils new file mode 100755 index 0000000..92d3943 --- /dev/null +++ b/noarch/scripting_utils @@ -0,0 +1,149 @@ +# +# This file contains 'scripting' run-time support utility functions. +# +# NOTE: This file must be "sourced" (not executed). +# + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +# +# Low level developer's support utility functions. +# +# WARNING: No NLS support here. +# + +# +# Outputs arguments to "stderr". +# +_report() { + >&2 echo "$@" +} + +_report_error() { + _report "INTERNAL ERROR:" "$@" +} + +# +# Aborts execution printing diagnostic message. +# +_abort_execution() { + if [ $# -ne 0 ] ; then + _report_error "ABORT: '$@', execution aborted" + else + _report_error "ABORT: execution aborted" + fi + exit 1 +} + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +# +# Scripts debugging support. +# + +# +# Outputs arguments to "stderr" if "DEBUG_STDERR" environment variable is not +# empty. +# +# Appends arguments to "${DEBUG_LOG_FILE}" file if "DEBUG_LOG_FILE" environment +# variable is not empty. +# +# Appends arguments to "${SCRIPT_LOG_FILE}" file if "SCRIPT_LOG_FILE" +# environment variable is not empty. +# +# Appends arguments to "${PACKAGE_LOG_FILE}" file if "PACKAGE_LOG_FILE" +# environment variable is not empty. +# +log_message() { + local LOG_MSG + local PID + + PID="$$" + LOG_MSG="${PID} $@" + + if [ -n "${DEBUG_STDERR}" ] ; then + >&2 echo "DEBUG: ${LOG_MSG}" + fi + + if [ -n "${DEBUG_LOG_FILE}" ] ; then + >>"${DEBUG_LOG_FILE}" echo "${LOG_MSG}" + fi + + if [ -n "${SCRIPT_LOG_FILE}" ] ; then + >>"${SCRIPT_LOG_FILE}" echo "${LOG_MSG}" + fi + + if [ -n "${PACKAGE_LOG_FILE}" ] ; then + >>"${PACKAGE_LOG_FILE}" echo "${LOG_MSG}" + fi +} + +# +# Depending on enabled debug outputs copies everything from "stdin" into one of +# "${PACKAGE_LOG_FILE}", "${SCRIPT_LOG_FILE}", "${DEBUG_LOG_FILE}", "stderr" or +# simply discards everything. +# +log_redirected_output() { + #log_message "vvvvv redirected_output vvvvv" + if [ -n "${PACKAGE_LOG_FILE}" ] ; then + >>"${PACKAGE_LOG_FILE}" cat + elif [ -n "${SCRIPT_LOG_FILE}" ] ; then + >>"${SCRIPT_LOG_FILE}" cat + elif [ -n "${DEBUG_LOG_FILE}" ] ; then + >>"${DEBUG_LOG_FILE}" cat + elif [ -n "${DEBUG_STDERR}" ] ; then + >&2 cat + else + >/dev/null cat + fi + #log_message "^^^^^ redirected_output ^^^^^" +} + +# +# Outputs variable name and value to debug log. +# +log_variable() { + if [ -z "$1" ] ; then _abort_execution "variable name unspecified" ; fi + #log_message $(eval echo "${1}=\${${1}}") + log_message $(eval echo "\"${1}='\${${1}}'\"") +} + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +# +# If "sh" is "bash" then debugging can be a bit more comfortable. +# +# "${SCRIPTS_DIR}/bash_debugging" contains "bash"-specific +# "_abort_execution()", "log_message()", "log_redirected_output()", +# "log_variable()" implementations. +# +if [ -n "${BASH_VERSION}" ] && [ -n "${SCRIPTS_DIR}" ] && [ -r "${SCRIPTS_DIR}/bash_debugging" ] ; then + . "${SCRIPTS_DIR}/bash_debugging" +fi + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +script_log_init() { + local SCRIPT + local USER_NAME + + SCRIPT="$1" ; if [ -z "${SCRIPT}" ] ; then _abort_execution "'SCRIPT' is unspecified" ; fi + log_variable SCRIPT + USER_NAME="$(id -un)" + + SCRIPT_LOG_FILE="/tmp/${SCRIPT}_${USER_NAME}.log" + log_variable SCRIPT_LOG_FILE + export SCRIPT_LOG_FILE + rm -f "${SCRIPT_LOG_FILE}" +} + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +# Converts possibly relative directory path into absolute form +absolute_dir_path() { + (cd "$1" && pwd) +} + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +log_message "EOF" |