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