1#!/bin/bash 2 3function usage { 4 echo "Usage: $0 [--sparse][--valgrind][--debug] path/to/file.c" 5 exit 1 6} 7 8SCRIPT_DIR=$(dirname $0) 9if [ -e $SCRIPT_DIR/../smatch ] ; then 10 CMD=$SCRIPT_DIR/../smatch 11elif which smatch | grep smatch > /dev/null ; then 12 CMD=smatch 13else 14 echo "Smatch binary not found." 15 exit 1 16fi 17 18while true ; do 19 if [[ "$1" == "--sparse" ]] ; then 20 CMD="sparse" 21 shift 22 elif [[ "$1" == "--test-parsing" ]] ; then 23 CMD="$SCRIPT_DIR/../test-parsing -no-lineno" 24 shift 25 elif echo "$1" | grep -q -- "--outfile=" ; then 26 outfile=$(echo "$1" | cut -d '=' -f 2) 27 if [ "outfile" != "" ] ; then 28 POST="$POST > $outfile" 29 fi 30 shift 31 elif [[ "$1" == "--valgrind" ]] ; then 32 PRE="valgrind" 33 shift 34 elif [[ "$1" == "--endian" ]] ; then 35 ENDIAN="CF=-D__CHECK_ENDIAN__" 36 shift 37 elif [[ "$1" == "" ]] ; then 38 break 39 else 40 if [[ "$1" == "--help" ]] ; then 41 $CMD --help 42 exit 1 43 fi 44 if echo $1 | grep -q ^- ; then 45 POST="$1 $POST" 46 else 47 break 48 fi 49 shift 50 fi 51done 52if echo $CMD | grep -q smatch ; then 53 POST="--project=kernel --succeed $POST" 54fi 55 56cname=$1 57cname=$(echo ${cname/.o/.c}) 58if [[ "$cname" == "" ]] ; then 59 usage 60fi 61if ! test -e $cname ; then 62 usage 63fi 64 65oname=$(echo ${cname/.c/.o}) 66if ! echo $oname | grep -q .o$ && ! echo $oname | grep -q /$ ; then 67 usage 68fi 69if echo $oname | grep -q .o$ ; then 70 rm -f $oname 71fi 72 73make C=2 $ENDIAN CHECK="$PRE $CMD $POST" $oname 74