#!/bin/bash
NOTFOUND=1
TESTDEVNOTSUPP=2

qemubinarysearch="${QEMU:-qemu-kvm qemu-system-x86_64}"

for qemucmd in ${qemubinarysearch}
do
	unset QEMUFOUND
	unset qemu
	if ! [ -z "${QEMUFOUND=$(${qemucmd} --help 2>/dev/null | grep "QEMU")}" ] &&
			${qemucmd} -device '?' 2>&1 | grep -F -e \"testdev\" -e \"pc-testdev\" > /dev/null;
	then
		qemu="${qemucmd}"
		break
	fi
done

if      [ -z "${QEMUFOUND}" ]
then
	echo "A QEMU binary was not found, You can set a custom location by using the QEMU=<path> environment variable "
	exit ${NOTFOUND}
elif    [ -z "${qemu}" ]
then
	echo "No Qemu test device support found"
	exit ${TESTDEVNOTSUPP}
fi

if
	${qemu} -device '?' 2>&1 | grep -F "pci-testdev" > /dev/null;
then
	pci_testdev="-device pci-testdev"
else
	pci_testdev=""
fi

if
	${qemu} -device '?' 2>&1 | grep -F "pc-testdev" > /dev/null;
then
	pc_testdev="-device pc-testdev -device isa-debug-exit,iobase=0xf4,iosize=0x4"
else
	pc_testdev="-device testdev,chardev=testlog -chardev file,id=testlog,path=msr.out"
fi

command="${qemu} -enable-kvm $pc_testdev -vnc none -serial stdio $pci_testdev -kernel"
echo ${command} "$@"
${command} "$@"
ret=$?
echo Return value from qemu: $ret
exit $ret
