@@ -0,0 +1,167 | |||
|
1 | # - try to find cppcheck tool | |
|
2 | # | |
|
3 | # Cache Variables: | |
|
4 | # CPPCHECK_EXECUTABLE | |
|
5 | # | |
|
6 | # Non-cache variables you might use in your CMakeLists.txt: | |
|
7 | # CPPCHECK_FOUND | |
|
8 | # CPPCHECK_POSSIBLEERROR_ARG | |
|
9 | # CPPCHECK_UNUSEDFUNC_ARG | |
|
10 | # CPPCHECK_STYLE_ARG | |
|
11 | # CPPCHECK_QUIET_ARG | |
|
12 | # CPPCHECK_INCLUDEPATH_ARG | |
|
13 | # CPPCHECK_FAIL_REGULAR_EXPRESSION | |
|
14 | # CPPCHECK_WARN_REGULAR_EXPRESSION | |
|
15 | # CPPCHECK_MARK_AS_ADVANCED - whether to mark our vars as advanced even | |
|
16 | # if we don't find this program. | |
|
17 | # | |
|
18 | # Requires these CMake modules: | |
|
19 | # FindPackageHandleStandardArgs (known included with CMake >=2.6.2) | |
|
20 | # | |
|
21 | # Original Author: | |
|
22 | # 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net> | |
|
23 | # http://academic.cleardefinition.com | |
|
24 | # Iowa State University HCI Graduate Program/VRAC | |
|
25 | # | |
|
26 | # Copyright Iowa State University 2009-2010. | |
|
27 | # Distributed under the Boost Software License, Version 1.0. | |
|
28 | # (See accompanying file LICENSE_1_0.txt or copy at | |
|
29 | # http://www.boost.org/LICENSE_1_0.txt) | |
|
30 | ||
|
31 | file(TO_CMAKE_PATH "${CPPCHECK_ROOT_DIR}" CPPCHECK_ROOT_DIR) | |
|
32 | set(CPPCHECK_ROOT_DIR | |
|
33 | "${CPPCHECK_ROOT_DIR}" | |
|
34 | CACHE | |
|
35 | PATH | |
|
36 | "Path to search for cppcheck") | |
|
37 | ||
|
38 | # cppcheck app bundles on Mac OS X are GUI, we want command line only | |
|
39 | set(_oldappbundlesetting ${CMAKE_FIND_APPBUNDLE}) | |
|
40 | set(CMAKE_FIND_APPBUNDLE NEVER) | |
|
41 | ||
|
42 | if(CPPCHECK_EXECUTABLE AND NOT EXISTS "${CPPCHECK_EXECUTABLE}") | |
|
43 | set(CPPCHECK_EXECUTABLE "notfound" CACHE PATH FORCE "") | |
|
44 | endif() | |
|
45 | ||
|
46 | # If we have a custom path, look there first. | |
|
47 | if(CPPCHECK_ROOT_DIR) | |
|
48 | find_program(CPPCHECK_EXECUTABLE | |
|
49 | NAMES | |
|
50 | cppcheck | |
|
51 | cli | |
|
52 | PATHS | |
|
53 | "${CPPCHECK_ROOT_DIR}" | |
|
54 | PATH_SUFFIXES | |
|
55 | cli | |
|
56 | NO_DEFAULT_PATH) | |
|
57 | endif() | |
|
58 | ||
|
59 | find_program(CPPCHECK_EXECUTABLE NAMES cppcheck) | |
|
60 | ||
|
61 | # Restore original setting for appbundle finding | |
|
62 | set(CMAKE_FIND_APPBUNDLE ${_oldappbundlesetting}) | |
|
63 | ||
|
64 | # Find out where our test file is | |
|
65 | get_filename_component(_cppcheckmoddir ${CMAKE_CURRENT_LIST_FILE} PATH) | |
|
66 | set(_cppcheckdummyfile "${_cppcheckmoddir}/Findcppcheck.cpp") | |
|
67 | if(NOT EXISTS "${_cppcheckdummyfile}") | |
|
68 | message(FATAL_ERROR | |
|
69 | "Missing file ${_cppcheckdummyfile} - should be alongside Findcppcheck.cmake, can be found at https://github.com/rpavlik/cmake-modules") | |
|
70 | endif() | |
|
71 | ||
|
72 | function(_cppcheck_test_arg _resultvar _arg) | |
|
73 | if(NOT CPPCHECK_EXECUTABLE) | |
|
74 | set(${_resultvar} NO) | |
|
75 | return() | |
|
76 | endif() | |
|
77 | execute_process(COMMAND | |
|
78 | "${CPPCHECK_EXECUTABLE}" | |
|
79 | "${_arg}" | |
|
80 | "--quiet" | |
|
81 | "${_cppcheckdummyfile}" | |
|
82 | RESULT_VARIABLE | |
|
83 | _cppcheck_result | |
|
84 | OUTPUT_QUIET | |
|
85 | ERROR_QUIET) | |
|
86 | if("${_cppcheck_result}" EQUAL 0) | |
|
87 | set(${_resultvar} YES PARENT_SCOPE) | |
|
88 | else() | |
|
89 | set(${_resultvar} NO PARENT_SCOPE) | |
|
90 | endif() | |
|
91 | endfunction() | |
|
92 | ||
|
93 | function(_cppcheck_set_arg_var _argvar _arg) | |
|
94 | if("${${_argvar}}" STREQUAL "") | |
|
95 | _cppcheck_test_arg(_cppcheck_arg "${_arg}") | |
|
96 | if(_cppcheck_arg) | |
|
97 | set(${_argvar} "${_arg}" PARENT_SCOPE) | |
|
98 | endif() | |
|
99 | endif() | |
|
100 | endfunction() | |
|
101 | ||
|
102 | if(CPPCHECK_EXECUTABLE) | |
|
103 | ||
|
104 | # Check for the two types of command line arguments by just trying them | |
|
105 | _cppcheck_set_arg_var(CPPCHECK_STYLE_ARG "--enable=style") | |
|
106 | _cppcheck_set_arg_var(CPPCHECK_STYLE_ARG "--style") | |
|
107 | if("${CPPCHECK_STYLE_ARG}" STREQUAL "--enable=style") | |
|
108 | ||
|
109 | _cppcheck_set_arg_var(CPPCHECK_UNUSEDFUNC_ARG | |
|
110 | "--enable=unusedFunction") | |
|
111 | _cppcheck_set_arg_var(CPPCHECK_INFORMATION_ARG "--enable=information") | |
|
112 | _cppcheck_set_arg_var(CPPCHECK_MISSINGINCLUDE_ARG | |
|
113 | "--enable=missingInclude") | |
|
114 | _cppcheck_set_arg_var(CPPCHECK_POSIX_ARG "--enable=posix") | |
|
115 | _cppcheck_set_arg_var(CPPCHECK_POSSIBLEERROR_ARG | |
|
116 | "--enable=possibleError") | |
|
117 | _cppcheck_set_arg_var(CPPCHECK_POSSIBLEERROR_ARG "--enable=all") | |
|
118 | ||
|
119 | if(MSVC) | |
|
120 | set(CPPCHECK_TEMPLATE_ARG --template vs) | |
|
121 | set(CPPCHECK_FAIL_REGULAR_EXPRESSION "[(]error[)]") | |
|
122 | set(CPPCHECK_WARN_REGULAR_EXPRESSION "[(]style[)]") | |
|
123 | elseif(CMAKE_COMPILER_IS_GNUCXX) | |
|
124 | set(CPPCHECK_TEMPLATE_ARG --template gcc) | |
|
125 | set(CPPCHECK_FAIL_REGULAR_EXPRESSION " error: ") | |
|
126 | set(CPPCHECK_WARN_REGULAR_EXPRESSION " style: ") | |
|
127 | else() | |
|
128 | set(CPPCHECK_TEMPLATE_ARG --template gcc) | |
|
129 | set(CPPCHECK_FAIL_REGULAR_EXPRESSION " error: ") | |
|
130 | set(CPPCHECK_WARN_REGULAR_EXPRESSION " style: ") | |
|
131 | endif() | |
|
132 | elseif("${CPPCHECK_STYLE_ARG}" STREQUAL "--style") | |
|
133 | # Old arguments | |
|
134 | _cppcheck_set_arg_var(CPPCHECK_UNUSEDFUNC_ARG "--unused-functions") | |
|
135 | _cppcheck_set_arg_var(CPPCHECK_POSSIBLEERROR_ARG "--all") | |
|
136 | set(CPPCHECK_FAIL_REGULAR_EXPRESSION "error:") | |
|
137 | set(CPPCHECK_WARN_REGULAR_EXPRESSION "[(]style[)]") | |
|
138 | else() | |
|
139 | # No idea - some other issue must be getting in the way | |
|
140 | message(STATUS | |
|
141 | "WARNING: Can't detect whether CPPCHECK wants new or old-style arguments!") | |
|
142 | endif() | |
|
143 | ||
|
144 | set(CPPCHECK_QUIET_ARG "--quiet") | |
|
145 | set(CPPCHECK_INCLUDEPATH_ARG "-I") | |
|
146 | ||
|
147 | endif() | |
|
148 | ||
|
149 | set(CPPCHECK_ALL | |
|
150 | "${CPPCHECK_EXECUTABLE} ${CPPCHECK_POSSIBLEERROR_ARG} ${CPPCHECK_UNUSEDFUNC_ARG} ${CPPCHECK_STYLE_ARG} ${CPPCHECK_QUIET_ARG} ${CPPCHECK_INCLUDEPATH_ARG} some/include/path") | |
|
151 | ||
|
152 | include(FindPackageHandleStandardArgs) | |
|
153 | find_package_handle_standard_args(cppcheck | |
|
154 | DEFAULT_MSG | |
|
155 | CPPCHECK_ALL | |
|
156 | CPPCHECK_EXECUTABLE | |
|
157 | CPPCHECK_POSSIBLEERROR_ARG | |
|
158 | CPPCHECK_UNUSEDFUNC_ARG | |
|
159 | CPPCHECK_STYLE_ARG | |
|
160 | CPPCHECK_INCLUDEPATH_ARG | |
|
161 | CPPCHECK_QUIET_ARG) | |
|
162 | ||
|
163 | if(CPPCHECK_FOUND OR CPPCHECK_MARK_AS_ADVANCED) | |
|
164 | mark_as_advanced(CPPCHECK_ROOT_DIR) | |
|
165 | endif() | |
|
166 | ||
|
167 | mark_as_advanced(CPPCHECK_EXECUTABLE) |
@@ -0,0 +1,16 | |||
|
1 | /** | |
|
2 | * \file Findcppcheck.cpp | |
|
3 | * \brief Dummy C++ source file used by CMake module Findcppcheck.cmake | |
|
4 | * | |
|
5 | * \author | |
|
6 | * Ryan Pavlik, 2009-2010 | |
|
7 | * <rpavlik@iastate.edu> | |
|
8 | * http://academic.cleardefinition.com/ | |
|
9 | * | |
|
10 | */ | |
|
11 | ||
|
12 | ||
|
13 | ||
|
14 | int main(int argc, char* argv[]) { | |
|
15 | return 0; | |
|
16 | } |
General Comments 0
You need to be logged in to leave comments.
Login now