blob: 127c5096d1f838f14cd5cc6e751def39a4136b5e [file] [log] [blame]
yuezonghe824eb0c2024-06-27 02:32:26 -07001#! /bin/sh
2
3# usage:
4#
5# make \
6# REAL_CC=gcc-mine \
7# CC=extra/scripts/cppcheck.sh \
8# CPPCHECK_FLAGS="--enable=style,performance,portability,information,missingInclude --max-configs=256 -j $(($(getconf _NPROCESSORS_ONLN)-1))" \
9# CPPCHECK_LIMIT="yes"
10
11# CPPCHECK_FLAGS are optional and are not set per default.
12# CPPCHECK_LIMIT limits cppcheck to the -D and -U that would be passed to CC.
13# Setting CPPCHECK_LIMIT greatly improves the check-time but obviously
14# just checks a small subset of the defines found in a file.
15
16: ${REAL_CC:=gcc}
17${REAL_CC} $@
18args=""
19limits=""
20next_arg=0
21next_limit=0
22
23for i in $@
24do
25 if [ $next_arg -eq 1 ] ; then
26 next_arg=0
27 case "/$i" in
28 /-*) exit 0 ;;
29 esac
30 [ "x$args" = "x" ] && args="$i" || args="$args $i"
31 continue
32 fi
33 if [ $next_limit -eq 1 ] ; then
34 next_limit=0
35 [ "x$limits" = "x" ] && limits="$i" || limits="$limits $i"
36 continue
37 fi
38 case "/$i" in
39 /-c) next_arg=1 ;;
40 /-isystem)
41 next_arg=1;
42 [ "x$args" = "x" ] && args="-I" || args="$args -I" ;;
43 /-I)
44 next_arg=1;
45 [ "x$args" = "x" ] && args="$i" || args="$args $i" ;;
46 /-I*) [ "x$args" = "x" ] && args="$i" || args="$args $i" ;;
47 /-D|/-U)
48 next_limit=1;
49 [ "x$limit" = "x" ] && limit="$i" || limit="$limit $i" ;;
50 /-D*) [ "x$limits" = "x" ] && limits="$i" || limits="$limits $i" ;;
51 /-s|/-S|/-dump*|/--print*|/-print*) exit 0 ;;
52 *) ;;
53 esac
54done
55[ -z "${CPPCHECK_LIMIT}" ] && limits=""
56[ -z "${args}" ] || exec cppcheck ${CPPCHECK_FLAGS} ${args} ${limits}