lufa.cppcheck.in 3.77 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
#
#             LUFA Library
#     Copyright (C) Dean Camera, 2012.
#
#  dean [at] fourwalledcubicle [dot] com
#           www.lufa-lib.org
#

LUFA_BUILD_MODULES        += CPPCHECK
LUFA_BUILD_TARGETS        += cppcheck cppcheck-config
LUFA_BUILD_MANDATORY_VARS += 
LUFA_BUILD_OPTIONAL_VARS  += CPPCHECK_PATH CPPCHECK_INCLUDES CPPCHECK_EXCLUDES CPPCHECK_MSG_TEMPLATE \
13
14
                             CPPCHECK_ENABLE CPPCHECK_SUPPRESS CPPCHECK_FAIL_ON_WARNING CPPCHECK_QUIET \
                             CPPCHECK_FLAGS
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44

# -----------------------------------------------------------------------------
#                LUFA CPPCheck Buildsystem Makefile Module.
# -----------------------------------------------------------------------------
# DESCRIPTION:
#   Provides a set of targets to scan a project with the free "cppcheck" static
#   analysis tool, to check for code errors at runtime (see http://cppcheck.sourceforge.net).
# -----------------------------------------------------------------------------
# TARGETS:
#
#    cppcheck                  - Scan the project with CPPCheck
#    cppcheck-config           - Use CPPCheck to look for missing include files
#
# MANDATORY PARAMETERS:
#
#    (None)
#
# OPTIONAL PARAMETERS:
#
#    CPPCHECK_PATH             - Path of the files to statically analyze
#    CPPCHECK_INCLUDES         - Extra include paths to search for missing
#                                header files
#    CPPCHECK_EXCLUDES         - Source file paths to exclude checking (can be
#                                a path fragment if desired)
#    CPPCHECK_MSG_TEMPLATE     - Template for cppcheck error and warning output
#    CPPCHECK_ENABLE           - General cppcheck category checks to enable
#    CPPCHECK_SUPPRESS         - Specific cppcheck warnings to disable by ID
#    CPPCHECK_FAIL_ON_WARNING  - Set to Y to fail the build on cppcheck
#                                warnings, N to continue even if warnings occur
#    CPPCHECK_QUIET            - Enable cppcheck verbose or quiet output mode
45
#    CPPCHECK_FLAGS            - Additional flags to pass to cppcheck
46
47
48
49
50
51
52
53
54
55
56
57
#
# -----------------------------------------------------------------------------

# Default values of optionally user-supplied variables
CPPCHECK_PATH                ?= .
CPPCHECK_INCLUDES            ?=
CPPCHECK_EXCLUDES            ?=
CPPCHECK_MSG_TEMPLATE        ?= {file}:{line}: {severity} ({id}): {message}
CPPCHECK_ENABLE              ?= all
CPPCHECK_SUPPRESS            ?= variableScope missingInclude
CPPCHECK_FAIL_ON_WARNING     ?= Y
CPPCHECK_QUIET               ?= Y
58
CPPCHECK_FLAGS               ?= 
59
60

# Build a default argument list for cppcheck
61
BASE_CPPCHECK_FLAGS := --template="$(CPPCHECK_MSG_TEMPLATE)" $(CPPCHECK_INCLUDES:%=-I%) $(CPPCHECK_EXCLUDES:%=-i%) --inline-suppr --force --std=c99
62
63

# Sanity check parameters and construct additional command line arguments to cppcheck
64

65
ifeq ($(CPPCHECK_FAIL_ON_WARNING), Y)
66
   BASE_CPPCHECK_FLAGS += --error-exitcode=1
67
68
69
70
else ifneq ($(CPPCHECK_FAIL_ON_WARNING), N)
	$(error CPPCHECK_FAIL_ON_WARNING must be Y or N)
endif
ifeq ($(CPPCHECK_QUIET), Y)
71
   BASE_CPPCHECK_FLAGS += --quiet
72
else ifneq ($(CPPCHECK_QUIET), N)
73
   $(error CPPCHECK_QUIET must be Y or N)
74
75
76
77
78
79
80
endif

# Output Messages
MSG_CPPCHECK_CMD         := ' [CPPCHECK]:'

cppcheck-config:
	@echo $(MSG_CPPCHECK_CMD) Checking cppcheck configuration for path \"$(CPPCHECK_PATH)\"
81
	cppcheck $(BASE_CPPCHECK_FLAGS) --check-config $(CPPCHECK_FLAGS) $(CPPCHECK_PATH)
82
83
84

cppcheck:
	@echo $(MSG_CPPCHECK_CMD) Performing cppcheck analysis on path \"$(CPPCHECK_PATH)\"
85
	cppcheck $(BASE_CPPCHECK_FLAGS) --enable=$(CPPCHECK_ENABLE) $(CPPCHECK_SUPPRESS:%=--suppress=%) $(CPPCHECK_FLAGS) $(CPPCHECK_PATH)
86
87
88

# Phony build targets for this module
.PHONY: cppcheck-config cppcheck