1 #!/bin/bash
   2 
   3 function usage {
   4     echo "Usage:  $0 [--sparse][--valgrind][--debug] path/to/file.c"
   5     exit 1
   6 }
   7 
   8 SCRIPT_DIR=$(dirname $0)
   9 if [ -e $SCRIPT_DIR/../smatch ] ; then
  10     CMD=$SCRIPT_DIR/../smatch
  11 elif which smatch | grep smatch > /dev/null ; then
  12     CMD=smatch
  13 else
  14     echo "Smatch binary not found."
  15     exit 1
  16 fi
  17 
  18 while 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
  51 done
  52 if echo $CMD | grep -q smatch ; then
  53     POST="--project=kernel --succeed $POST"
  54 fi
  55 
  56 cname=$1
  57 cname=$(echo ${cname/.o/.c})
  58 if [[ "$cname" == "" ]] ; then
  59     usage
  60 fi
  61 if ! test -e $cname ; then
  62     usage
  63 fi
  64 
  65 oname=$(echo ${cname/.c/.o})
  66 if ! echo $oname | grep -q .o$ && ! echo $oname | grep -q /$ ; then
  67     usage
  68 fi
  69 if  echo $oname | grep -q .o$ ; then
  70     rm -f $oname
  71 fi
  72 
  73 make C=2 $ENDIAN CHECK="$PRE $CMD $POST" $oname