@@ -27,7 +27,7 @@ EXTRA_DIST=RELEASE_VERSION @CONFIGURECUSTOM@
27
27
# Versions of cppcheck below 1.8 perform poorly and the test is
28
28
# skipped if those versions are installed.
29
29
#
30
- CPPCHECK_NG_VERSION = -e \^0\\. -e \^1\\.[0-7]
30
+ CPPCHECK_NG_VER = -e \^0\\. -e \^1\\.[0-7]
31
31
CPPCHECK_CMD = cppcheck
32
32
CPPCHECK_TARGET = $(SUBDIRS )
33
33
CPPCHECK_BUILD_DIR = /tmp/cppcheck
@@ -39,19 +39,38 @@ CPPCHECK_BASE_OPT = --quiet \
39
39
--xml
40
40
CPPCHECK_ENABLE_OPT = --enable=warning,style,information,missingInclude
41
41
CPPCHECK_IGNORE_OPT = --suppress=unmatchedSuppression
42
+ CPPCHECK_INCDIR_OPT = -I . -I lib
42
43
CPPCHECK_DEFINE_OPT =
43
44
45
+ # [NOTE] Switch options
46
+ # The options available vary depending on the version.
47
+ # There are cases where you use options that do not exist in older
48
+ # versions.
49
+ #
50
+ CPPCHECK_GT207_VER = 2007
51
+ CPPCHECK_GT207_ADD_OPT = --suppress=ctuOneDefinitionRuleViolation
52
+ CPPCHECK_GE211_VER = 2011
53
+ CPPCHECK_GE211_ADD_OPT = --check-level=exhaustive \
54
+ --suppress=missingIncludeSystem
55
+
44
56
cppcheck :
45
- @if command -v $(CPPCHECK_CMD ) > /dev/null 2>&1 ; then \
46
- if ($( CPPCHECK_CMD) --version | sed -e ' s|Cppcheck[[:space:]]*||gi' | grep -q $( CPPCHECK_NG_VERSION) ); then \
57
+ @set -e; \
58
+ if command -v $( CPPCHECK_CMD) > /dev/null 2>&1 ; then \
59
+ if ($( CPPCHECK_CMD) --version | sed -e ' s|Cppcheck[[:space:]]*||gi' | grep -q $( CPPCHECK_NG_VER) ); then \
47
60
echo " *** [INFO] cppcheck version below 1.8, so skip to run cppcheck." ; \
48
61
else \
49
62
echo " *** Check all files with CppCheck" ; \
50
63
if [ -d $( CPPCHECK_BUILD_DIR) ]; then \
51
64
rm -rf $(CPPCHECK_BUILD_DIR ) ; \
52
65
fi ; \
53
66
mkdir -p $(CPPCHECK_BUILD_DIR ) ; \
54
- $(CPPCHECK_CMD ) $(CPPCHECK_BASE_OPT ) $(CPPCHECK_DEFINE_OPT ) $(CPPCHECK_ENABLE_OPT ) $(CPPCHECK_IGNORE_OPT ) --cppcheck-build-dir=$(CPPCHECK_BUILD_DIR ) $(CPPCHECK_TARGET ) ; \
67
+ if test ` $( CPPCHECK_CMD) --version | sed -e ' s/\./ /g' | awk ' {print ($$2 * 1000 + $$3)}' ` -le $( CPPCHECK_GT207_VER) ; then \
68
+ $(CPPCHECK_CMD ) $(CPPCHECK_BASE_OPT ) $(CPPCHECK_DEFINE_OPT ) $(CPPCHECK_INCDIR_OPT ) $(CPPCHECK_ENABLE_OPT ) $(CPPCHECK_IGNORE_OPT ) --cppcheck-build-dir=$(CPPCHECK_BUILD_DIR ) $(CPPCHECK_TARGET ) ; \
69
+ elif test ` $( CPPCHECK_CMD) --version | sed -e ' s/\./ /g' | awk ' {print ($$2 * 1000 + $$3)}' ` -lt $(CPPCHECK_GE211_VER ) ; then \
70
+ $(CPPCHECK_CMD ) $(CPPCHECK_BASE_OPT ) $(CPPCHECK_DEFINE_OPT ) $(CPPCHECK_INCDIR_OPT ) $(CPPCHECK_ENABLE_OPT ) $(CPPCHECK_IGNORE_OPT ) $(CPPCHECK_GT207_ADD_OPT ) --cppcheck-build-dir=$(CPPCHECK_BUILD_DIR ) $(CPPCHECK_TARGET ) ; \
71
+ else \
72
+ $(CPPCHECK_CMD ) $(CPPCHECK_BASE_OPT ) $(CPPCHECK_DEFINE_OPT ) $(CPPCHECK_INCDIR_OPT ) $(CPPCHECK_ENABLE_OPT ) $(CPPCHECK_IGNORE_OPT ) $(CPPCHECK_GT207_ADD_OPT ) $(CPPCHECK_GE211_ADD_OPT ) --cppcheck-build-dir=$(CPPCHECK_BUILD_DIR ) $(CPPCHECK_TARGET ) ; \
73
+ fi ; \
55
74
rm -rf $(CPPCHECK_BUILD_DIR ) ; \
56
75
fi ; \
57
76
else \
@@ -75,16 +94,17 @@ SHELLCHECK_FILES_SH = `grep -ril '^\#!/bin/sh' . | grep '\.sh' | grep -v '\
75
94
SHELLCHECK_FILES_INCLUDE_SH = ` grep -Lir ' ^\#!/bin/sh' . | grep ' \.sh' | grep -v ' \.log' | grep -v ' /\.git/' | grep -v ' /rpmbuild/' | grep -v ' /debian_build/' | grep -v ' /autom4te.cache/' | grep -v ' /m4/' | grep -v ' /install-sh' | grep -v ' /ltmain.sh' | tr ' \n' ' ' `
76
95
77
96
shellcheck :
78
- @if type shellcheck > /dev/null 2>&1 ; then \
97
+ @set -e; \
98
+ if type shellcheck > /dev/null 2>&1 ; then \
79
99
echo " *** Check all files with ShellCheck" ; \
80
100
if [ -n " $( SHELLCHECK_FILES_NO_SH) " ]; then \
81
- LC_ALL=C.UTF-8 $(SHELLCHECK_CMD ) $(SHELLCHECK_BASE_OPT ) $(SHELLCHECK_IGN_OPT ) $(SHELLCHECK_FILES_NO_SH ) || exit 1 ; \
101
+ LC_ALL=C.UTF-8 $(SHELLCHECK_CMD ) $(SHELLCHECK_BASE_OPT ) $(SHELLCHECK_IGN_OPT ) $(SHELLCHECK_FILES_NO_SH ) ; \
82
102
fi ; \
83
103
if [ -n " $( SHELLCHECK_FILES_SH) " ]; then \
84
- LC_ALL=C.UTF-8 $(SHELLCHECK_CMD ) $(SHELLCHECK_BASE_OPT ) $(SHELLCHECK_IGN_OPT ) $(SHELLCHECK_FILES_SH ) || exit 1 ; \
104
+ LC_ALL=C.UTF-8 $(SHELLCHECK_CMD ) $(SHELLCHECK_BASE_OPT ) $(SHELLCHECK_IGN_OPT ) $(SHELLCHECK_FILES_SH ) ; \
85
105
fi ; \
86
106
if [ -n " $( SHELLCHECK_FILES_INCLUDE_SH) " ]; then \
87
- LC_ALL=C.UTF-8 $(SHELLCHECK_CMD ) $(SHELLCHECK_BASE_OPT ) $(SHELLCHECK_INCLUDE_IGN_OPT ) $(SHELLCHECK_FILES_INCLUDE_SH ) || exit 1 ; \
107
+ LC_ALL=C.UTF-8 $(SHELLCHECK_CMD ) $(SHELLCHECK_BASE_OPT ) $(SHELLCHECK_INCLUDE_IGN_OPT ) $(SHELLCHECK_FILES_INCLUDE_SH ) ; \
88
108
fi ; \
89
109
echo " -> No error was detected." ; \
90
110
echo " " ; \
0 commit comments