You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
183 lines
4.8 KiB
183 lines
4.8 KiB
# Copyright 2011 George Danchev <danchev@spnet.net> |
|
# Copyright 2011 Thomas Schmitt <scdbackup@gmx.net> |
|
# Licensed under GNU GPL version 2 or later |
|
|
|
SELF=$(basename $0) |
|
RELENG_XORRISO=0 |
|
SIMULATE_FAILURE=0 |
|
CLEANUP=1 |
|
SPECIFIC_HELP=0 |
|
|
|
START_DIR_DONT_CHANGE=`pwd` |
|
GEN_DATA_DIR=releng_generated_data/${SELF} |
|
|
|
############################################# |
|
print_help() { |
|
cat << EOF |
|
|
|
Usage: $SELF -x path/to/xorriso [-k] [-f] [-c] [-h] |
|
[-- ...test specific options...] |
|
General options: |
|
-x absolute or relative path to xorriso binary to be run. |
|
-k keep self-generated data. |
|
-c cleanup self-generated data kept from previous run and exit. |
|
-f simulate failure. |
|
-h print this help text |
|
-- end of general options, begin of test specific options. |
|
EOF |
|
} |
|
|
|
boldify() { |
|
if which tput >/dev/null 2>&1; then tput smso; fi |
|
} |
|
|
|
unboldify() { |
|
if which tput >/dev/null 2>&1; then tput rmso; fi |
|
} |
|
|
|
############################################# |
|
cleanup() { |
|
if [ ${CLEANUP} -eq 1 ]; then |
|
# safety net, just in case -> we want to be in the starting |
|
# directory before removing whatever self-generated stuff |
|
if [ -d "${GEN_DATA_DIR}" ]; then |
|
cd "${START_DIR_DONT_CHANGE}" || exit 2 |
|
|
|
# Verify once again we are in the releng_generated_data directory |
|
# Check for both returned code of grep and returned matching string |
|
# There is no "readlink -e" on FreeBSD |
|
READ_CANON_EXISTS=`cd "${GEN_DATA_DIR}" 2>/dev/null && pwd` |
|
DIR_NAME_GEN_DATA=`dirname "${READ_CANON_EXISTS}"` |
|
set +e |
|
# There is no "grep -P" on FreeBSD |
|
RET_NON_EMPTY_STRING=`echo "${DIR_NAME_GEN_DATA}" | grep "[a-zA-Z0-9_][a-zA-Z0-9_]*/releng_generated_data$"` |
|
GREP_RET_GEN_DATA="$?" |
|
case "${GREP_RET_GEN_DATA}" in |
|
0) |
|
if [ x"${RET_NON_EMPTY_STRING}" != x"" ]; then |
|
# now call the nastiness |
|
chmod -R +w ${GEN_DATA_DIR} |
|
rm -rf ${GEN_DATA_DIR} |
|
# boldify |
|
printf "${SELF}: Removed (self-generated) %s\n" ${GEN_DATA_DIR} |
|
# unboldify |
|
else |
|
printf "FAIL : ${SELF} : Safety check for being in releng_generated_data directory.\n" |
|
printf "FAIL : ${SELF} : GREP returned empty string: ${RET_NON_EMPTY_STRING}.\n" |
|
printf "FAIL : ${SELF} : Skipped trying to remove ${GEN_DATA_DIR} directory. Exiting.\n" |
|
fi |
|
;; |
|
*) |
|
printf "FAIL : ${SELF} : Safety check for being in releng_generated_data directory.\n" |
|
printf "FAIL : ${SELF} : GREP returned code: ${GREP_RET_GEN_DATA}.\n" |
|
printf "FAIL : ${SELF} : Skipped trying to remove ${GEN_DATA_DIR} directory. Exiting.\n" |
|
exit 30 |
|
;; |
|
esac |
|
else |
|
printf "${SELF}: ${GEN_DATA_DIR} does not exist. Nothing to clean.\n" |
|
fi |
|
else |
|
# boldify |
|
printf "${SELF}: Leaving (self-generated) %s\n" ${GEN_DATA_DIR} |
|
# unboldify |
|
fi |
|
} |
|
|
|
############################################# |
|
|
|
check_for_xorriso() { |
|
# $1: if "-x" then check executability |
|
|
|
if test -z "$RELENG_XORRISO" -o "$RELENG_XORRISO" = "0" |
|
then |
|
print_help |
|
# print_specific_help |
|
echo |
|
echo "${SELF}: Need -x absolute or relative path to xorriso binary." |
|
echo |
|
exit 31 |
|
fi |
|
if [ x"$1" = x"-x" -a ! -x "$RELENG_XORRISO" ] |
|
then |
|
print_help |
|
# print_specific_help |
|
echo |
|
echo "${SELF}: Path given by option -x does not lead to an executable file." |
|
echo "Given is: '$RELENG_XORRISO'" |
|
if test "$RELENG_XORRISO" = "xorriso" |
|
then |
|
xorriso=$(type -p xorriso) |
|
if test -n "xorriso" |
|
then |
|
echo "Hint: Try '$xorriso'" |
|
fi |
|
fi |
|
echo |
|
exit 31 |
|
fi |
|
} |
|
|
|
|
|
############################################# |
|
|
|
# To catch the exit value of a command in a pipe |
|
return_value_file="$GEN_DATA_DIR"/wrapper_"$$"_return_value |
|
return_wrapper() |
|
{ |
|
cmd="$1" |
|
shift 1 |
|
"$cmd" "$@" |
|
RET="$?" |
|
echo "$RET" >"$return_value_file" |
|
return "$RET" |
|
} |
|
|
|
############################################# |
|
|
|
next_is= |
|
for i in "$@" |
|
do |
|
if test "$next_is" = "ignore" |
|
then : |
|
elif test "$next_is" = "x" |
|
then |
|
RELENG_XORRISO="$i" |
|
next_is= |
|
elif test x"$i" = x"-x" |
|
then |
|
next_is="x" |
|
elif test x"$i" = x"-k" |
|
then |
|
CLEANUP=0 |
|
elif test x"$i" = x"-c" |
|
then |
|
CLEANUP=1 |
|
cleanup |
|
exit 0 |
|
elif test x"$i" = x"-f" |
|
then |
|
SIMULATE_FAILURE=1 |
|
elif test x"$i" = x"-h" |
|
then |
|
print_help |
|
SPECIFIC_HELP=1 |
|
elif test x"$i" = x"--" |
|
then |
|
# Begin of private arguments for caller |
|
next_is="ignore" |
|
else |
|
echo >&2 |
|
echo "Unknown general option: $i" >&2 |
|
print_help |
|
exit 31 |
|
fi |
|
done |
|
|
|
if test "$next_is" = x |
|
then |
|
echo >&2 |
|
echo "Option -x expects an argument (the path to the xorriso program)" >&2 |
|
print_help |
|
exit 31 |
|
fi
|
|
|