1#! /bin/sh 2# Validate gperf's operation on a given input file. 3# Usage: validate languages input.gperf [more gperf options] 4# Uses the environment variables GPERF, CC, CFLAGS, CXX, CXXFLAGS. 5# Supposes gcc and g++. 6 7# Exit on error 8set -e 9 10verbose () { 11 echo "$@" 12 "$@" 13} 14 15languages=$1 16shift 17 18# On old systems, it's worth trying gcc -traditional. 19# On glibc-2.1 systems, gcc -traditional doesn't work any more. 20use_traditional=false 21 22for lang in `echo $languages | sed -e 's/,/ /g'`; do 23 case "$lang" in 24 KR-C ) 25 echo "${GPERF} -I -L KR-C $@ > valitest.c" 26 ${GPERF} -I -L KR-C "$@" > valitest.c 27 grep -n ' const ' valitest.c /dev/null && exit 1 28 if test $use_traditional = true; then 29 verbose ${CC} ${CFLAGS} -traditional valitest.c -o valitest 30 ./valitest 31 fi 32 verbose ${CC} ${CFLAGS} -ansi -pedantic valitest.c -o valitest 33 ./valitest 34 ;; 35 C ) 36 echo "${GPERF} -I -L C $@ > valitest.c" 37 ${GPERF} -I -L C "$@" > valitest.c 38 if test $use_traditional = true; then 39 verbose ${CC} ${CFLAGS} -traditional -Dconst= valitest.c -o valitest 40 ./valitest 41 fi 42 verbose ${CC} ${CFLAGS} -ansi -pedantic -pedantic-errors valitest.c -o valitest 43 ./valitest 44 ;; 45 ANSI-C ) 46 echo "${GPERF} -I -L ANSI-C $@ > valitest.c" 47 ${GPERF} -I -L ANSI-C "$@" > valitest.c 48 verbose ${CC} ${CFLAGS} -ansi -pedantic -pedantic-errors valitest.c -o valitest 49 ./valitest 50 verbose ${CXX} ${CXXFLAGS} -ansi -pedantic -pedantic-errors valitest.c -o valitest 51 ./valitest 52 ;; 53 "C++" ) 54 echo "${GPERF} -I -L C++ $@ > valitest.c" 55 ${GPERF} -I -L C++ "$@" > valitest.c 56 verbose ${CXX} ${CXXFLAGS} -ansi -pedantic -pedantic-errors -DCPLUSPLUS_TEST valitest.c -o valitest 57 ./valitest 58 ;; 59 esac 60done 61 62exit 0 63