xref: /kvm-unit-tests/scripts/mkstandalone.sh (revision eec22c7c88238abc84d0a4b38b003875dad1c2c6)
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
102b30b764SAndrew Jonesone_kernel="$1"
112b30b764SAndrew Jones[ "$one_kernel" ] && one_kernel_base=$(basename $one_kernel)
122b30b764SAndrew Jonesone_testname="$2"
132b30b764SAndrew Jonesif [ -n "$one_kernel" ] && [ ! -f $one_kernel ]; then
142b30b764SAndrew Jones	echo "$one_kernel doesn't exist"
152b30b764SAndrew Jones	exit 1
162b30b764SAndrew Joneselif [ -n "$one_kernel" ] && [ -z "$one_testname" ]; then
172b30b764SAndrew Jones	one_testname="${one_kernel_base%.*}"
182b30b764SAndrew Jonesfi
192b30b764SAndrew Jones
202b30b764SAndrew Jonesunittests=$TEST_DIR/unittests.cfg
212b30b764SAndrew Jonesmkdir -p tests
222b30b764SAndrew Jones
2307a07ffeSRadim Krčmářescape ()
2407a07ffeSRadim Krčmář{
2507a07ffeSRadim Krčmář	for arg in "${@}"; do
2607a07ffeSRadim Krčmář		printf "%q " "$arg"; # XXX: trailing whitespace
2707a07ffeSRadim Krčmář	done
2807a07ffeSRadim Krčmář}
2907a07ffeSRadim Krčmář
30ba4a6fcfSRadim Krčmářtemp_file ()
31ba4a6fcfSRadim Krčmář{
32ba4a6fcfSRadim Krčmář	local var="$1"
33ba4a6fcfSRadim Krčmář	local file="$2"
34ba4a6fcfSRadim Krčmář
35ba4a6fcfSRadim Krčmář	echo "$var=\`mktemp\`"
36ba4a6fcfSRadim Krčmář	echo "cleanup=\"\$$var \$cleanup\""
37ba4a6fcfSRadim Krčmář	echo "base64 -d << 'BIN_EOF' | zcat > \$$var || exit 1"
38ba4a6fcfSRadim Krčmář
39ba4a6fcfSRadim Krčmář	gzip - < $file | base64
40ba4a6fcfSRadim Krčmář
41ba4a6fcfSRadim Krčmář	echo "BIN_EOF"
42ba4a6fcfSRadim Krčmář	echo "chmod +x \$$var"
43ba4a6fcfSRadim Krčmář}
44ba4a6fcfSRadim Krčmář
45*eec22c7cSRadim Krčmářgenerate_test ()
462b30b764SAndrew Jones{
4707a07ffeSRadim Krčmář	local args=( $(escape "${@}") )
482b30b764SAndrew Jones
49949e210fSRadim Krčmář	echo "#!/bin/bash"
50f5738f77SRadim Krčmář	grep '^ARCH=' config.mak
51560cd30bSRadim Krčmář
522b30b764SAndrew Jones	if [ ! -f $kernel ]; then
5307a07ffeSRadim Krčmář		echo 'echo "skip '"$testname"' (test kernel not present)"'
54d4c68647SRadim Krčmář		echo 'exit 1'
55*eec22c7cSRadim Krčmář		return 1
56*eec22c7cSRadim Krčmář	fi
57d4c68647SRadim Krčmář
58949e210fSRadim Krčmář	echo "trap 'rm -f \$cleanup' EXIT"
59ba4a6fcfSRadim Krčmář
60ba4a6fcfSRadim Krčmář	temp_file bin "$kernel"
6107a07ffeSRadim Krčmář	args[3]='$bin'
6207a07ffeSRadim Krčmář
637e35f25aSRadim Krčmář	temp_file RUNTIME_arch_run "$TEST_DIR/run"
64ba4a6fcfSRadim Krčmář
6507a07ffeSRadim Krčmář	cat scripts/runtime.bash
662b30b764SAndrew Jones
6707a07ffeSRadim Krčmář	echo "run ${args[@]}"
6807a07ffeSRadim Krčmář	echo "exit 0"
69*eec22c7cSRadim Krčmář}
70*eec22c7cSRadim Krčmář
71*eec22c7cSRadim Krčmářfunction mkstandalone()
72*eec22c7cSRadim Krčmář{
73*eec22c7cSRadim Krčmář	local testname="$1"
74*eec22c7cSRadim Krčmář
75*eec22c7cSRadim Krčmář	if [ -z "$testname" ]; then
76*eec22c7cSRadim Krčmář		return 1
772b30b764SAndrew Jones	fi
78d4c68647SRadim Krčmář
79*eec22c7cSRadim Krčmář	if [ -n "$one_testname" ] && [ "$testname" != "$one_testname" ]; then
80*eec22c7cSRadim Krčmář		return 1
81*eec22c7cSRadim Krčmář	fi
82*eec22c7cSRadim Krčmář
83*eec22c7cSRadim Krčmář	standalone=tests/$testname
84*eec22c7cSRadim Krčmář
85*eec22c7cSRadim Krčmář	generate_test "$@" > $standalone
86*eec22c7cSRadim Krčmář
872b30b764SAndrew Jones	chmod +x $standalone
88560cd30bSRadim Krčmář
892b30b764SAndrew Jones	return 0
902b30b764SAndrew Jones}
912b30b764SAndrew Jones
922b30b764SAndrew Jonestrap 'rm -f $cfg; exit 1' HUP INT TERM
932b30b764SAndrew Jonestrap 'rm -f $cfg' EXIT
942b30b764SAndrew Jonescfg=$(mktemp)
952b30b764SAndrew Jones
962b30b764SAndrew Jonesif [ -n "$one_testname" ]; then
972b30b764SAndrew Jones	if grep -q "\[$one_testname\]" $unittests; then
982b30b764SAndrew Jones		sed -n "/\\[$one_testname\\]/,/^\\[/p" $unittests \
992b30b764SAndrew Jones			| awk '!/^\[/ || NR == 1' > $cfg
1002b30b764SAndrew Jones	else
1012b30b764SAndrew Jones		echo "[$one_testname]" > $cfg
1022b30b764SAndrew Jones		echo "file = $one_kernel_base" >> $cfg
1032b30b764SAndrew Jones	fi
1042b30b764SAndrew Joneselse
1052b30b764SAndrew Jones	cp -f $unittests $cfg
1062b30b764SAndrew Jonesfi
1072b30b764SAndrew Jones
1082b30b764SAndrew Jonesfor_each_unittest $cfg mkstandalone
109