xref: /kvm-unit-tests/scripts/mkstandalone.sh (revision 2800cc922a2dfd7862c27655a0cc8447e5ba775d)
12b30b764SAndrew Jones#!/bin/bash
22b30b764SAndrew Jones
32b30b764SAndrew Jonesif [ ! -f config.mak ]; then
42b30b764SAndrew Jones	echo "run ./configure && make first. See ./configure -h"
52b30b764SAndrew Jones	exit
62b30b764SAndrew Jonesfi
72b30b764SAndrew Jonessource config.mak
82b30b764SAndrew Jonessource scripts/functions.bash
92b30b764SAndrew Jones
1007a07ffeSRadim Krčmářescape ()
1107a07ffeSRadim Krčmář{
1207a07ffeSRadim Krčmář	for arg in "${@}"; do
1307a07ffeSRadim Krčmář		printf "%q " "$arg"; # XXX: trailing whitespace
1407a07ffeSRadim Krčmář	done
1507a07ffeSRadim Krčmář}
1607a07ffeSRadim Krčmář
17ba4a6fcfSRadim Krčmářtemp_file ()
18ba4a6fcfSRadim Krčmář{
19ba4a6fcfSRadim Krčmář	local var="$1"
20ba4a6fcfSRadim Krčmář	local file="$2"
21ba4a6fcfSRadim Krčmář
22ba4a6fcfSRadim Krčmář	echo "$var=\`mktemp\`"
23ba4a6fcfSRadim Krčmář	echo "cleanup=\"\$$var \$cleanup\""
24ba4a6fcfSRadim Krčmář	echo "base64 -d << 'BIN_EOF' | zcat > \$$var || exit 1"
25ba4a6fcfSRadim Krčmář
26ba4a6fcfSRadim Krčmář	gzip - < $file | base64
27ba4a6fcfSRadim Krčmář
28ba4a6fcfSRadim Krčmář	echo "BIN_EOF"
29ba4a6fcfSRadim Krčmář	echo "chmod +x \$$var"
30ba4a6fcfSRadim Krčmář}
31ba4a6fcfSRadim Krčmář
32eec22c7cSRadim Krčmářgenerate_test ()
332b30b764SAndrew Jones{
3407a07ffeSRadim Krčmář	local args=( $(escape "${@}") )
352b30b764SAndrew Jones
36949e210fSRadim Krčmář	echo "#!/bin/bash"
37f5738f77SRadim Krčmář	grep '^ARCH=' config.mak
38560cd30bSRadim Krčmář
392b30b764SAndrew Jones	if [ ! -f $kernel ]; then
4007a07ffeSRadim Krčmář		echo 'echo "skip '"$testname"' (test kernel not present)"'
41d4c68647SRadim Krčmář		echo 'exit 1'
42eec22c7cSRadim Krčmář		return 1
43eec22c7cSRadim Krčmář	fi
44d4c68647SRadim Krčmář
45949e210fSRadim Krčmář	echo "trap 'rm -f \$cleanup' EXIT"
46ba4a6fcfSRadim Krčmář
47ba4a6fcfSRadim Krčmář	temp_file bin "$kernel"
4807a07ffeSRadim Krčmář	args[3]='$bin'
4907a07ffeSRadim Krčmář
507e35f25aSRadim Krčmář	temp_file RUNTIME_arch_run "$TEST_DIR/run"
51ba4a6fcfSRadim Krčmář
5207a07ffeSRadim Krčmář	cat scripts/runtime.bash
532b30b764SAndrew Jones
5407a07ffeSRadim Krčmář	echo "run ${args[@]}"
5507a07ffeSRadim Krčmář	echo "exit 0"
56eec22c7cSRadim Krčmář}
57eec22c7cSRadim Krčmář
58eec22c7cSRadim Krčmářfunction mkstandalone()
59eec22c7cSRadim Krčmář{
60eec22c7cSRadim Krčmář	local testname="$1"
61eec22c7cSRadim Krčmář
62eec22c7cSRadim Krčmář	if [ -z "$testname" ]; then
63eec22c7cSRadim Krčmář		return 1
642b30b764SAndrew Jones	fi
65d4c68647SRadim Krčmář
66eec22c7cSRadim Krčmář	if [ -n "$one_testname" ] && [ "$testname" != "$one_testname" ]; then
67eec22c7cSRadim Krčmář		return 1
68eec22c7cSRadim Krčmář	fi
69eec22c7cSRadim Krčmář
70eec22c7cSRadim Krčmář	standalone=tests/$testname
71eec22c7cSRadim Krčmář
72eec22c7cSRadim Krčmář	generate_test "$@" > $standalone
73eec22c7cSRadim Krčmář
742b30b764SAndrew Jones	chmod +x $standalone
75560cd30bSRadim Krčmář
762b30b764SAndrew Jones	return 0
772b30b764SAndrew Jones}
782b30b764SAndrew Jones
792b30b764SAndrew Jonestrap 'rm -f $cfg' EXIT
802b30b764SAndrew Jonescfg=$(mktemp)
812b30b764SAndrew Jones
82*2800cc92SRadim Krčmářunittests=$TEST_DIR/unittests.cfg
83*2800cc92SRadim Krčmářone_kernel="$1"
84*2800cc92SRadim Krčmář
85*2800cc92SRadim Krčmářif [ "$one_kernel" ]; then
86*2800cc92SRadim Krčmář	[ ! -f $one_kernel ] && {
87*2800cc92SRadim Krčmář		echo "$one_kernel doesn't exist"
88*2800cc92SRadim Krčmář		exit 1
89*2800cc92SRadim Krčmář	}
90*2800cc92SRadim Krčmář
91*2800cc92SRadim Krčmář	one_kernel_base=$(basename $one_kernel)
92*2800cc92SRadim Krčmář	one_testname="${2:-${one_kernel_base%.*}}"
93*2800cc92SRadim Krčmář
942b30b764SAndrew Jones	if grep -q "\[$one_testname\]" $unittests; then
952b30b764SAndrew Jones		sed -n "/\\[$one_testname\\]/,/^\\[/p" $unittests \
962b30b764SAndrew Jones			| awk '!/^\[/ || NR == 1' > $cfg
972b30b764SAndrew Jones	else
982b30b764SAndrew Jones		echo "[$one_testname]" > $cfg
992b30b764SAndrew Jones		echo "file = $one_kernel_base" >> $cfg
1002b30b764SAndrew Jones	fi
1012b30b764SAndrew Joneselse
1022b30b764SAndrew Jones	cp -f $unittests $cfg
1032b30b764SAndrew Jonesfi
1042b30b764SAndrew Jones
105*2800cc92SRadim Krčmářmkdir -p tests
106*2800cc92SRadim Krčmář
1072b30b764SAndrew Jonesfor_each_unittest $cfg mkstandalone
108