| #! /bin/sh |
| |
| # usage: |
| # |
| # make \ |
| # REAL_CC=gcc-mine \ |
| # CC=extra/scripts/cppcheck.sh \ |
| # CPPCHECK_FLAGS="--enable=style,performance,portability,information,missingInclude --max-configs=256 -j $(($(getconf _NPROCESSORS_ONLN)-1))" \ |
| # CPPCHECK_LIMIT="yes" |
| |
| # CPPCHECK_FLAGS are optional and are not set per default. |
| # CPPCHECK_LIMIT limits cppcheck to the -D and -U that would be passed to CC. |
| # Setting CPPCHECK_LIMIT greatly improves the check-time but obviously |
| # just checks a small subset of the defines found in a file. |
| |
| : ${REAL_CC:=gcc} |
| ${REAL_CC} $@ |
| args="" |
| limits="" |
| next_arg=0 |
| next_limit=0 |
| |
| for i in $@ |
| do |
| if [ $next_arg -eq 1 ] ; then |
| next_arg=0 |
| case "/$i" in |
| /-*) exit 0 ;; |
| esac |
| [ "x$args" = "x" ] && args="$i" || args="$args $i" |
| continue |
| fi |
| if [ $next_limit -eq 1 ] ; then |
| next_limit=0 |
| [ "x$limits" = "x" ] && limits="$i" || limits="$limits $i" |
| continue |
| fi |
| case "/$i" in |
| /-c) next_arg=1 ;; |
| /-isystem) |
| next_arg=1; |
| [ "x$args" = "x" ] && args="-I" || args="$args -I" ;; |
| /-I) |
| next_arg=1; |
| [ "x$args" = "x" ] && args="$i" || args="$args $i" ;; |
| /-I*) [ "x$args" = "x" ] && args="$i" || args="$args $i" ;; |
| /-D|/-U) |
| next_limit=1; |
| [ "x$limit" = "x" ] && limit="$i" || limit="$limit $i" ;; |
| /-D*) [ "x$limits" = "x" ] && limits="$i" || limits="$limits $i" ;; |
| /-s|/-S|/-dump*|/--print*|/-print*) exit 0 ;; |
| *) ;; |
| esac |
| done |
| [ -z "${CPPCHECK_LIMIT}" ] && limits="" |
| [ -z "${args}" ] || exec cppcheck ${CPPCHECK_FLAGS} ${args} ${limits} |