1#!/usr/bin/env bash 2 3if [ ! -f config.mak ]; then 4 echo "run ./configure && make first. See ./configure -h" 5 exit 1 6fi 7source config.mak 8source scripts/common.bash 9 10escape () 11{ 12 for arg in "${@}"; do 13 printf "%q " "$arg"; # XXX: trailing whitespace 14 done 15} 16 17temp_file () 18{ 19 local var="$1" 20 local file="${2:--}" 21 22 echo "$var=\`mktemp\`" 23 echo "cleanup=\"\$$var \$cleanup\"" 24 echo "base64 -d << 'BIN_EOF' | zcat > \$$var || exit 2" 25 26 gzip -c "$file" | base64 27 28 echo "BIN_EOF" 29 echo "chmod +x \$$var" 30} 31 32config_export () 33{ 34 echo "export $(grep ^${1}= config.mak)" 35} 36 37generate_test () 38{ 39 local args=( $(escape "${@}") ) 40 41 echo "#!/usr/bin/env bash" 42 echo "export STANDALONE=yes" 43 echo "export HOST=\$(uname -m | sed -e 's/i.86/i386/;s/arm.*/arm/;s/ppc64.*/ppc64/')" 44 echo "export PRETTY_PRINT_STACKS=no" 45 46 config_export ARCH 47 config_export ARCH_NAME 48 config_export PROCESSOR 49 50 echo "echo BUILD_HEAD=$(cat build-head)" 51 52 if [ ! -f $kernel ]; then 53 echo 'echo "skip '"$testname"' (test kernel not present)"' 54 echo 'exit 2' 55 return 56 fi 57 58 echo "trap 'rm -f \$cleanup' EXIT" 59 60 if [ "$FIRMWARE" ]; then 61 temp_file FIRMWARE "$FIRMWARE" 62 echo 'export FIRMWARE' 63 fi 64 65 temp_file bin "$kernel" 66 args[3]='$bin' 67 68 (echo "#!/usr/bin/env bash" 69 cat scripts/arch-run.bash "$TEST_DIR/run") | temp_file RUNTIME_arch_run 70 71 echo "exec {stdout}>&1" 72 echo "RUNTIME_log_stdout () { cat >&\$stdout; }" 73 echo "RUNTIME_log_stderr () { cat >&2; }" 74 75 cat scripts/runtime.bash 76 77 echo "run ${args[@]}" 78} 79 80function mkstandalone() 81{ 82 local testname="$1" 83 84 if [ -z "$testname" ]; then 85 return 86 fi 87 88 if [ -n "$one_testname" ] && [ "$testname" != "$one_testname" ]; then 89 return 90 fi 91 92 standalone=tests/$testname 93 94 generate_test "$@" > $standalone 95 96 chmod +x $standalone 97 echo Written $standalone. 98} 99 100trap 'rm -f $cfg' EXIT 101cfg=$(mktemp) 102 103unittests=$TEST_DIR/unittests.cfg 104one_kernel="$1" 105 106if [ "$one_kernel" ]; then 107 [ ! -f $one_kernel ] && { 108 echo "$one_kernel doesn't exist" 109 exit 1 110 } 111 112 one_kernel_base=$(basename $one_kernel) 113 one_testname="${2:-${one_kernel_base%.*}}" 114 115 if grep -q "\[$one_testname\]" $unittests; then 116 sed -n "/\\[$one_testname\\]/,/^\\[/p" $unittests \ 117 | awk '!/^\[/ || NR == 1' > $cfg 118 else 119 echo "[$one_testname]" > $cfg 120 echo "file = $one_kernel_base" >> $cfg 121 fi 122else 123 cp -f $unittests $cfg 124fi 125 126mkdir -p tests 127 128for_each_unittest $cfg mkstandalone 129