#!/bin/bash
#
# Docker test runner
#
# Copyright (c) 2016 Red Hat Inc.
#
# Authors:
#  Fam Zheng <famz@redhat.com>
#
# This work is licensed under the terms of the GNU GPL, version 2
# or (at your option) any later version. See the COPYING file in
# the top-level directory.

if test -n "$V"; then
    set -x
fi

BASE="$(dirname $(readlink -e $0))"

# Prepare the environment
export PATH=/usr/lib/ccache:/usr/lib64/ccache:$PATH

if test -n "$J"; then
    export MAKEFLAGS="$MAKEFLAGS -j$J"
fi

# We are in the container so the whole file system belong to us
export TEST_DIR=/tmp/qemu-test
mkdir -p $TEST_DIR/{src,build,install}

# Extract the source tarballs
tar -C $TEST_DIR/src -xf $BASE/qemu.tar || { echo "Failed to untar source"; exit 2; }
if test -f $TEST_DIR/src/Makefile; then
    export FEATURES="$FEATURES dtc"
fi

if test -n "$SHOW_ENV"; then
    if test -f /packages.txt; then
        echo "Packages installed:"
        cat /packages.txt
        echo
    fi
    echo "Environment variables:"
    env
    echo
fi

export QEMU_SRC="$TEST_DIR/src"
export BUILD_DIR="$TEST_DIR/build"
export INSTALL_DIR="$TEST_DIR/install"

cd "$QEMU_SRC/tests/docker"

CMD="./$@"

if test -z "$DEBUG"; then
    exec $CMD
fi

# DEBUG workflow
echo "* Prepared to run command:"
echo "  $CMD"
echo "* Hit Ctrl-D to continue, or type 'exit 1' to abort"
echo
env bash --noprofile --norc

if "$CMD"; then
    exit 0
elif test -n "$DEBUG"; then
    echo "* Command failed:"
    echo "  $CMD"
    echo "* Hit Ctrl-D to exit"
    echo
    # Force error after shell exits
    env bash --noprofile --norc && exit 1
else
    exit 1
fi
