#!/bin/bash set -e # It is not a good idea to include inc/releng_getopts.inc with the # master script as it calls the subordinate scripts and they include # this file too, and we want to avoid sharing variable with subshells SELF=$(basename "$0") GEN_DATA_DIR=releng_generated_data CLOG=${GEN_DATA_DIR}/log.${SELF} PASSED_OPTIONS="$@" RELENG_XORRISO= CLEANUP_LOG=0 ############################################# while getopts “x:k:c:f:h” OPT do case $OPT in x) RELENG_XORRISO=$OPTARG ;; c) CLEANUP_LOG=1 ;; *) ;; esac done if [ ! "${1}" ]; then cat << HLP ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ${SELF} runs executables from CWD starting with releng_*, passing them its own options. stdout/stderr output stored in: ${CLOG} ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ self generated data are stored in ${GEN_DATA_DIR}. required space for these data is about 300 megabytes. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ examples: # run xorriso and keep the self generated data $ ./${SELF} -x path/to/xorriso [-k1] # clean up self generated data from previous run $ ./${SELF} -c1 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ HLP exit 31 fi ######################################################## if [ -f "${CLOG}" ]; then mv "${CLOG}" "${CLOG}".prev fi > ${CLOG} if [ -x "${RELENG_XORRISO}" ]; then echo -e "_OVERVIEW_______________________________________________________________" >> ${CLOG} ${RELENG_XORRISO} --version >> ${CLOG} echo -e "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" >> ${CLOG} fi DSTART=`date --utc` printf "\n${SELF}: Started at ${DSTART}" E1=`date '+%s'` # require ^releng_, avoid running (your)self explicitly for s in `ls | grep ^releng_ | grep -v ${SELF} | sort -n`; do if [ -x ${s} -a ! -d ${s} ]; then # tee(1) does trailing \n, which is unwanted in that case printf "\n${SELF}: Running ./${s} ${PASSED_OPTIONS}..." echo -e "\n" >> ${CLOG} echo -e "_NEW_TEST_______________________________________________________________" >> ${CLOG} echo -e "${SELF}: Running ./${s} ${PASSED_OPTIONS}..." >> ${CLOG} echo -e "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" >> ${CLOG} T1=`date '+%s'` set +e ./${s} ${PASSED_OPTIONS} &>> ${CLOG} RET=$? T2=`date '+%s'` let TS="${T2} - ${T1}" case ${RET} in 0) printf "done in ${TS} sec. ok." ;; *) printf "done in ${TS} sec. " which tput >/dev/null 2>&1 && tput smso printf "FAIL -> EXIT CODE $RET" which tput >/dev/null 2>&1 && tput rmso ;; esac set -e fi done DEND=`date --utc` printf "\n${SELF}: Stopped at ${DEND}." if [ "${CLEANUP_LOG}" -eq 1 ]; then if [ -f "${CLOG}" ]; then printf "\n${SELF}: Removed my own log ${CLOG}." rm -f "${CLOG}" fi if [ -f "${CLOG}".prev ]; then printf "\n${SELF}: Removed my own log ${CLOG}.prev." rm -f "${CLOG}".prev fi else E2=`date '+%s'` if [ ${E2} -eq ${E1} ]; then printf " Total elapsed 0 sec." else let ES="${E2} - ${E1}" printf " Total elapsed ${ES} sec." fi ##### printf "\n${SELF}: Trivial log examination: ${CLOG}" printf "\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" # severity classes of libdax_msgs.h in libburn and libisofs # List of boring keywords: # 'UPDATE' A pacifier message during long running operations. # List of interesting keywords: # thrown by xorriso and underlying libraries LIST_KWD="(NEVER|ABORT|FATAL|FAILURE|MISHAP|SORRY|WARNING|HINT|NOTE|DEBUG|ALL" # thrown by others LIST_KWD+="|FAIL|ERROR|WRONG)" if [ -f "${CLOG}" ]; then set +e # lines, perl regex, leading tabs grep -n -PT "${LIST_KWD}" "${CLOG}" RET_GREP="$?" case ${RET_GREP} in 0) # found ;; 1) # not found printf "\n${SELF}: Log file looks clear.\n" ;; *) # printf "\n${SELF}: grep returned EXIT CODE: ${RET_GREP}.\n" ;; esac set -e fi printf "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" ##### TODO: work out a less noisy diff'ing technique! if [ -f "${CLOG}".prev -a -f "${CLOG}" ]; then printf "${SELF}: See diff against previous log file (might be long):\n" printf "diff -Naur ${CLOG}.prev ${CLOG} | less" fi fi # which tput >/dev/null 2>&1 && tput smso printf "\n${SELF}: Leaving the following cruft in ${GEN_DATA_DIR}:\n" which tput >/dev/null 2>&1 && tput rmso ls -lth "${GEN_DATA_DIR}" # Fin exit 0