[git commit] buildsys: add cppcheck wrapper script (correct one)
Bernhard Reutner-Fischer
rep.dot.nop at gmail.com
Fri Jan 27 12:12:40 UTC 2012
commit: http://git.uclibc.org/uClibc/commit/?id=7f02033e13b1633d83403664749c1daf0ab98840
branch: http://git.uclibc.org/uClibc/commit/?id=refs/heads/master
Also incooperate vapier's suggestion on how to set REAL_CC once
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop at gmail.com>
---
extra/scripts/cppcheck.sh | 53 ++++++++++++++++++++++++++++++++++++--------
1 files changed, 43 insertions(+), 10 deletions(-)
diff --git a/extra/scripts/cppcheck.sh b/extra/scripts/cppcheck.sh
index 7484e09..127c509 100755
--- a/extra/scripts/cppcheck.sh
+++ b/extra/scripts/cppcheck.sh
@@ -1,23 +1,56 @@
#! /bin/sh
-${REAL_CC-gcc} $*
+# 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=""
-add_next=0
+limits=""
+next_arg=0
+next_limit=0
-for i in $*
+for i in $@
do
- if [ $add_next -eq 1 ] ; then
+ if [ $next_arg -eq 1 ] ; then
+ next_arg=0
+ case "/$i" in
+ /-*) exit 0 ;;
+ esac
[ "x$args" = "x" ] && args="$i" || args="$args $i"
- add_next=0
+ 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) add_next=1 ;;
- /-D*|/-I*|/-inc) [ "x$args" = "x" ] && args="$i" || args="$args $i" ;;
- /-dumpversion|/--print*) ${CC-gcc} $i ; exit 0 ;;
+ /-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
-
-cppcheck $args
+[ -z "${CPPCHECK_LIMIT}" ] && limits=""
+[ -z "${args}" ] || exec cppcheck ${CPPCHECK_FLAGS} ${args} ${limits}
More information about the uClibc-cvs
mailing list