#!/bin/bash

set -e

SELF=$(basename "$0")
GEN_DATA_DIR=releng_generated_data
CLOG=${GEN_DATA_DIR}/log.${SELF}

PASSED_OPTIONS=""

if   [ "${1}" == "-cleanup" ]; then
 PASSED_OPTIONS="-cleanup"
elif [ "${1}" == "-rc" -a "${2}" == "-keep" ]; then
 PASSED_OPTIONS="-rc -keep"
elif [ "${1}" == "-rc" ]; then
 PASSED_OPTIONS="-rc"
else
cat << HLP

${SELF} runs executables from CWD starting with releng_*.
stdout/stderr output stored in ${CLOG}

 ${SELF} -rc [-keep]
 ${SELF} -cleanup

HLP
 exit 101
fi

########################################################
 > ${CLOG}
 DSTART=`date --utc`
 printf "\n${SELF}: Started at ${DSTART}"
 E1=`date '+%s'`
 # require ^releng_, avoid running (your)self explcitly
 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${SELF}: Running ./${s} ${PASSED_OPTIONS}..." >> ${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. FAIL. EXIT CODE: $RET;"
           ;;
    esac
    set -e
  fi
 done

 DEND=`date --utc`
 printf "\n${SELF}: Stopped at ${DEND}.\n"
 
 if   [ "${1}" == "-cleanup" ]; then
  rm -f "${CLOG}"
 else
  E2=`date '+%s'`
  let ES="${E2} - ${E1}"
  printf "\n${SELF}: Total time elapsed ${ES} sec."
  printf "\n${SELF}: stdout&stderr saved in ${CLOG}.\n"
 fi

 exit 0