#!/bin/sh
#
# Common routines for docker test scripts.
#
# 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.

# This might be set by ENV of a docker container... it is always
# overridden by TARGET_LIST if the user sets it. We special case
# "none" to allow for other options like --disable-tcg to restrict the
# builds we eventually do.
if test "$DEF_TARGET_LIST" = "none"; then
    DEF_TARGET_LIST=""
else
    DEF_TARGET_LIST=${DEF_TARGET_LIST:-"x86_64-softmmu,aarch64-softmmu"}
fi

requires_binary()
{
    found=0
    for c in $@; do
        for d in /bin /usr/bin /usr/local/bin
        do
            if test -f "$d/$c"
            then
                found=1
            fi
        done
    done
    if test "$found" != "1"
    then
        echo "Prerequisite '$c' not present, skip"
        exit 0
    fi
}

configure_qemu()
{
    config_opts="--enable-werror \
                 ${TARGET_LIST:+--target-list=${TARGET_LIST}} \
                 --prefix=$INSTALL_DIR \
                 $QEMU_CONFIGURE_OPTS $EXTRA_CONFIGURE_OPTS \
                 $@"
    echo "Configure options:"
    echo $config_opts
    $QEMU_SRC/configure $config_opts || \
        { cat config.log && test_fail "Failed to run 'configure'"; }
}

build_qemu()
{
    configure_qemu $@
    make $MAKEFLAGS
}

check_qemu()
{
    # default to make check unless the caller specifies
    if [ $# = 0 ]; then
        INVOCATION="${TEST_COMMAND:-make $MAKEFLAGS check}"
    else
        INVOCATION="make $MAKEFLAGS $@"
    fi

    $INVOCATION
}

test_fail()
{
    echo "$@"
    exit 1
}

prep_fail()
{
    echo "$@"
    exit 2
}

install_qemu()
{
    make install $MAKEFLAGS DESTDIR=$PWD/=destdir
    ret=$?
    rm -rf $PWD/=destdir
    return $ret
}
