]> rtime.felk.cvut.cz Git - l4.git/blobdiff - l4/pkg/uclibc/lib/contrib/uclibc/extra/scripts/cppcheck.sh
update
[l4.git] / l4 / pkg / uclibc / lib / contrib / uclibc / extra / scripts / cppcheck.sh
diff --git a/l4/pkg/uclibc/lib/contrib/uclibc/extra/scripts/cppcheck.sh b/l4/pkg/uclibc/lib/contrib/uclibc/extra/scripts/cppcheck.sh
new file mode 100755 (executable)
index 0000000..127c509
--- /dev/null
@@ -0,0 +1,56 @@
+#! /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}