1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#!/bin/sh 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtrap 'rm $test.valgrind-errors; exit 1' INT QUIT 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgusage () 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org cat <<EOF 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgUsage: glcpp [options...] 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgRun the test suite for mesa's GLSL pre-processor. 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgValid options include: 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org --valgrind Run the test suite a second time under valgrind 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEOF 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org# Parse command-line options 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgfor option; do 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if [ "${option}" = '--help' ] ; then 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org usage 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org exit 0 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org elif [ "${option}" = '--valgrind' ] ; then 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org do_valgrind=yes 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org echo "Unrecognized option: $option" >&2 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org echo >&2 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org usage 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org exit 1 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org fi 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgdone 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtotal=0 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgpass=0 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclean=0 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgecho "====== Testing for correctness ======" 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgfor test in *.c; do 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org echo -n "Testing $test..." 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ../glcpp < $test > $test.out 2>&1 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org total=$((total+1)) 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if cmp $test.expected $test.out >/dev/null 2>&1; then 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org echo "PASS" 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pass=$((pass+1)) 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org echo "FAIL" 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org diff -u $test.expected $test.out 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org fi 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgdone 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgecho "" 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgecho "$pass/$total tests returned correct results" 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgecho "" 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgif [ "$do_valgrind" = "yes" ]; then 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org echo "====== Testing for valgrind cleanliness ======" 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for test in *.c; do 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org echo -n "Testing $test with valgrind..." 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org valgrind --error-exitcode=31 --log-file=$test.valgrind-errors ../glcpp < $test >/dev/null 2>&1 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if [ "$?" = "31" ]; then 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org echo "ERRORS" 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org cat $test.valgrind-errors 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org echo "CLEAN" 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org clean=$((clean+1)) 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org rm $test.valgrind-errors 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org fi 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org done 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org echo "" 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org echo "$pass/$total tests returned correct results" 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org echo "$clean/$total tests are valgrind-clean" 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgfi 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgif [ "$pass" = "$total" ] && [ "$do_valgrind" != "yes" ] || [ "$pass" = "$total" ]; then 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org exit 0 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgelse 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org exit 1 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgfi 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 81