summary refs log tree commit diff
path: root/noarch/scripting_utils
diff options
context:
space:
mode:
Diffstat (limited to 'noarch/scripting_utils')
-rwxr-xr-xnoarch/scripting_utils149
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"