]> git.donarmstrong.com Git - qmk_firmware.git/blob - protocol/lufa/LUFA-120730/LUFA/Build/lufa_cppcheck.mk
Squashed 'tmk_core/' content from commit 05caacc
[qmk_firmware.git] / protocol / lufa / LUFA-120730 / LUFA / Build / lufa_cppcheck.mk
1 #\r
2 #             LUFA Library\r
3 #     Copyright (C) Dean Camera, 2012.\r
4 #\r
5 #  dean [at] fourwalledcubicle [dot] com\r
6 #           www.lufa-lib.org\r
7 #\r
8 \r
9 LUFA_BUILD_MODULES         += CPPCHECK\r
10 LUFA_BUILD_TARGETS         += cppcheck cppcheck-config\r
11 LUFA_BUILD_MANDATORY_VARS  += SRC\r
12 LUFA_BUILD_OPTIONAL_VARS   += CPPCHECK_INCLUDES CPPCHECK_EXCLUDES CPPCHECK_MSG_TEMPLATE CPPCHECK_ENABLE \\r
13                               CPPCHECK_SUPPRESS CPPCHECK_FAIL_ON_WARNING CPPCHECK_QUIET CPPCHECK_FLAGS\r
14 LUFA_BUILD_PROVIDED_VARS   += \r
15 LUFA_BUILD_PROVIDED_MACROS += \r
16 \r
17 # -----------------------------------------------------------------------------\r
18 #                LUFA CPPCheck Buildsystem Makefile Module.\r
19 # -----------------------------------------------------------------------------\r
20 # DESCRIPTION:\r
21 #   Provides a set of targets to scan a project with the free "cppcheck" static\r
22 #   analysis tool, to check for code errors at runtime (see http://cppcheck.sourceforge.net).\r
23 # -----------------------------------------------------------------------------\r
24 # TARGETS:\r
25 #\r
26 #    cppcheck                  - Scan the project with CPPCheck\r
27 #    cppcheck-config           - Use CPPCheck to look for missing include files\r
28 #\r
29 # MANDATORY PARAMETERS:\r
30 #\r
31 #    SRC                       - List of source files to statically analyze\r
32 #\r
33 # OPTIONAL PARAMETERS:\r
34 #\r
35 #    CPPCHECK_INCLUDES         - Extra include paths to search for missing\r
36 #                                header files\r
37 #    CPPCHECK_EXCLUDES         - Source file paths to exclude checking (can be\r
38 #                                a path fragment if desired)\r
39 #    CPPCHECK_MSG_TEMPLATE     - Template for cppcheck error and warning output\r
40 #    CPPCHECK_ENABLE           - General cppcheck category checks to enable\r
41 #    CPPCHECK_SUPPRESS         - Specific cppcheck warnings to disable by ID\r
42 #    CPPCHECK_FAIL_ON_WARNING  - Set to Y to fail the build on cppcheck\r
43 #                                warnings, N to continue even if warnings occur\r
44 #    CPPCHECK_QUIET            - Enable cppcheck verbose or quiet output mode\r
45 #    CPPCHECK_FLAGS            - Additional flags to pass to cppcheck\r
46 #\r
47 # PROVIDED VARIABLES:\r
48 #\r
49 #    (None)\r
50 #\r
51 # PROVIDED MACROS:\r
52 #\r
53 #    (None)\r
54 #\r
55 # -----------------------------------------------------------------------------\r
56 \r
57 SHELL = /bin/sh\r
58 \r
59 ERROR_IF_UNSET   ?= $(if $(filter undefined, $(origin $(strip $(1)))), $(error Makefile $(strip $(1)) value not set))\r
60 ERROR_IF_EMPTY   ?= $(if $(strip $($(strip $(1)))), , $(error Makefile $(strip $(1)) option cannot be blank))\r
61 ERROR_IF_NONBOOL ?= $(if $(filter Y N, $($(strip $(1)))), , $(error Makefile $(strip $(1)) option must be Y or N))\r
62 \r
63 # Default values of optionally user-supplied variables\r
64 CPPCHECK_INCLUDES            ?=\r
65 CPPCHECK_EXCLUDES            ?=\r
66 CPPCHECK_MSG_TEMPLATE        ?= {file}:{line}: {severity} ({id}): {message}\r
67 CPPCHECK_ENABLE              ?= all\r
68 CPPCHECK_SUPPRESS            ?= variableScope missingInclude\r
69 CPPCHECK_FAIL_ON_WARNING     ?= Y\r
70 CPPCHECK_QUIET               ?= Y\r
71 CPPCHECK_FLAGS               ?= \r
72 \r
73 # Sanity check user supplied values\r
74 $(foreach MANDATORY_VAR, $(LUFA_BUILD_MANDATORY_VARS), $(call ERROR_IF_UNSET, $(MANDATORY_VAR)))\r
75 $(call ERROR_IF_EMPTY, SRC)\r
76 $(call ERROR_IF_EMPTY, CPPCHECK_MSG_TEMPLATE)\r
77 $(call ERROR_IF_EMPTY, CPPCHECK_ENABLE)\r
78 $(call ERROR_IF_NONBOOL, CPPCHECK_FAIL_ON_WARNING)\r
79 $(call ERROR_IF_NONBOOL, CPPCHECK_QUIET)\r
80 \r
81 # Build a default argument list for cppcheck\r
82 BASE_CPPCHECK_FLAGS := --template="$(CPPCHECK_MSG_TEMPLATE)" $(CPPCHECK_INCLUDES:%=-I%) $(CPPCHECK_EXCLUDES:%=-i%) --inline-suppr --force --std=c99\r
83 \r
84 # Sanity check parameters and construct additional command line arguments to cppcheck\r
85 ifeq ($(CPPCHECK_FAIL_ON_WARNING), Y)\r
86    BASE_CPPCHECK_FLAGS += --error-exitcode=1\r
87 endif\r
88 ifeq ($(CPPCHECK_QUIET), Y)\r
89    BASE_CPPCHECK_FLAGS += --quiet\r
90 endif\r
91 \r
92 # Output Messages\r
93 MSG_CPPCHECK_CMD         := ' [CPPCHECK]:'\r
94 \r
95 cppcheck-config:\r
96         @echo $(MSG_CPPCHECK_CMD) Checking cppcheck configuration check on source files\r
97         cppcheck $(BASE_CPPCHECK_FLAGS) --check-config $(CPPCHECK_FLAGS) $(SRC)\r
98 \r
99 cppcheck:\r
100         @echo $(MSG_CPPCHECK_CMD) Performing static analysis on source files\r
101         cppcheck $(BASE_CPPCHECK_FLAGS) --enable=$(CPPCHECK_ENABLE) $(CPPCHECK_SUPPRESS:%=--suppress=%) $(CPPCHECK_FLAGS) $(SRC)\r
102 \r
103 # Phony build targets for this module\r
104 .PHONY: cppcheck-config cppcheck\r