dmd/compiler/test/tools/sh_do_test.sh
2022-07-09 18:53:07 +02:00

61 lines
1.5 KiB
Bash
Executable file

#!/usr/bin/env bash
set -euo pipefail
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
################################################################################
# Exported variables
################################################################################
source "$DIR/exported_vars.sh"
source "$DIR/common_funcs.sh"
################################################################################
# Generated variables
_script_name="${TEST_DIR}/${TEST_NAME}.sh"
_output_file="${RESULTS_DIR}/${_script_name}.out"
echo " ... ${_script_name}"
rm -f "${_output_file}"
mkdir -p ${RESULTS_TEST_DIR}
function finish {
# reset output stream
set +x
exec 1>&40
exec 2>&41
if [ "$1" -ne 0 ]; then
echo "=============================="
echo "Test ${_script_name} failed. The logged output:"
cat "${_output_file}"
echo "=============================="
echo "Test ${_script_name} failed. The xtrace output:"
cat "${_output_file}.log"
rm -rf "${_output_file}"
exit $1
fi
}
trap 'finish $?' INT TERM EXIT
# redirect stdout + stderr to the output file + keep a reference to the std{out,err} streams for later
exec 40>&1
exec 41>&2
exec 1> "${_output_file}"
exec 2>&1
# log all a verbose xtrace to a temporary file which is only displayed when an error occurs
exec 42> "${_output_file}.log"
export BASH_XTRACEFD=42
# fail on errors and undefined variables
set -euo pipefail
# activate xtrace logging for the to-be-called shell script
set -x
source "${_script_name}"