summaryrefslogtreecommitdiff
path: root/cmake/Findcppcheck.cmake
diff options
context:
space:
mode:
authorTeus Benschop <teusjannette@gmail.com>2018-10-28 11:51:26 +0100
committerTeus Benschop <teusjannette@gmail.com>2018-10-28 11:51:26 +0100
commit1d0ff54794b5edea7cdf1d2d66710a0fa885bcc5 (patch)
tree8ece5f9ef437fbb151f2b22ed0c6e1a714879c7c /cmake/Findcppcheck.cmake
parentc7dbdc9161a7c460526b80fe01af49d714856126 (diff)
New upstream version 1.8.1
Diffstat (limited to 'cmake/Findcppcheck.cmake')
-rw-r--r--cmake/Findcppcheck.cmake167
1 files changed, 167 insertions, 0 deletions
diff --git a/cmake/Findcppcheck.cmake b/cmake/Findcppcheck.cmake
new file mode 100644
index 0000000..2dcf799
--- /dev/null
+++ b/cmake/Findcppcheck.cmake
@@ -0,0 +1,167 @@
+# - try to find cppcheck tool
+#
+# Cache Variables:
+# CPPCHECK_EXECUTABLE
+#
+# Non-cache variables you might use in your CMakeLists.txt:
+# CPPCHECK_FOUND
+# CPPCHECK_POSSIBLEERROR_ARG
+# CPPCHECK_UNUSEDFUNC_ARG
+# CPPCHECK_STYLE_ARG
+# CPPCHECK_QUIET_ARG
+# CPPCHECK_INCLUDEPATH_ARG
+# CPPCHECK_FAIL_REGULAR_EXPRESSION
+# CPPCHECK_WARN_REGULAR_EXPRESSION
+# CPPCHECK_MARK_AS_ADVANCED - whether to mark our vars as advanced even
+# if we don't find this program.
+#
+# Requires these CMake modules:
+# FindPackageHandleStandardArgs (known included with CMake >=2.6.2)
+#
+# Original Author:
+# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright Iowa State University 2009-2010.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+file(TO_CMAKE_PATH "${CPPCHECK_ROOT_DIR}" CPPCHECK_ROOT_DIR)
+set(CPPCHECK_ROOT_DIR
+ "${CPPCHECK_ROOT_DIR}"
+ CACHE
+ PATH
+ "Path to search for cppcheck")
+
+# cppcheck app bundles on Mac OS X are GUI, we want command line only
+set(_oldappbundlesetting ${CMAKE_FIND_APPBUNDLE})
+set(CMAKE_FIND_APPBUNDLE NEVER)
+
+if(CPPCHECK_EXECUTABLE AND NOT EXISTS "${CPPCHECK_EXECUTABLE}")
+ set(CPPCHECK_EXECUTABLE "notfound" CACHE PATH FORCE "")
+endif()
+
+# If we have a custom path, look there first.
+if(CPPCHECK_ROOT_DIR)
+ find_program(CPPCHECK_EXECUTABLE
+ NAMES
+ cppcheck
+ cli
+ PATHS
+ "${CPPCHECK_ROOT_DIR}"
+ PATH_SUFFIXES
+ cli
+ NO_DEFAULT_PATH)
+endif()
+
+find_program(CPPCHECK_EXECUTABLE NAMES cppcheck)
+
+# Restore original setting for appbundle finding
+set(CMAKE_FIND_APPBUNDLE ${_oldappbundlesetting})
+
+# Find out where our test file is
+get_filename_component(_cppcheckmoddir ${CMAKE_CURRENT_LIST_FILE} PATH)
+set(_cppcheckdummyfile "${_cppcheckmoddir}/Findcppcheck.cpp")
+if(NOT EXISTS "${_cppcheckdummyfile}")
+ message(FATAL_ERROR
+ "Missing file ${_cppcheckdummyfile} - should be alongside Findcppcheck.cmake, can be found at https://github.com/rpavlik/cmake-modules")
+endif()
+
+function(_cppcheck_test_arg _resultvar _arg)
+ if(NOT CPPCHECK_EXECUTABLE)
+ set(${_resultvar} NO)
+ return()
+ endif()
+ execute_process(COMMAND
+ "${CPPCHECK_EXECUTABLE}"
+ "${_arg}"
+ "--quiet"
+ "${_cppcheckdummyfile}"
+ RESULT_VARIABLE
+ _cppcheck_result
+ OUTPUT_QUIET
+ ERROR_QUIET)
+ if("${_cppcheck_result}" EQUAL 0)
+ set(${_resultvar} YES PARENT_SCOPE)
+ else()
+ set(${_resultvar} NO PARENT_SCOPE)
+ endif()
+endfunction()
+
+function(_cppcheck_set_arg_var _argvar _arg)
+ if("${${_argvar}}" STREQUAL "")
+ _cppcheck_test_arg(_cppcheck_arg "${_arg}")
+ if(_cppcheck_arg)
+ set(${_argvar} "${_arg}" PARENT_SCOPE)
+ endif()
+ endif()
+endfunction()
+
+if(CPPCHECK_EXECUTABLE)
+
+ # Check for the two types of command line arguments by just trying them
+ _cppcheck_set_arg_var(CPPCHECK_STYLE_ARG "--enable=style")
+ _cppcheck_set_arg_var(CPPCHECK_STYLE_ARG "--style")
+ if("${CPPCHECK_STYLE_ARG}" STREQUAL "--enable=style")
+
+ _cppcheck_set_arg_var(CPPCHECK_UNUSEDFUNC_ARG
+ "--enable=unusedFunction")
+ _cppcheck_set_arg_var(CPPCHECK_INFORMATION_ARG "--enable=information")
+ _cppcheck_set_arg_var(CPPCHECK_MISSINGINCLUDE_ARG
+ "--enable=missingInclude")
+ _cppcheck_set_arg_var(CPPCHECK_POSIX_ARG "--enable=posix")
+ _cppcheck_set_arg_var(CPPCHECK_POSSIBLEERROR_ARG
+ "--enable=possibleError")
+ _cppcheck_set_arg_var(CPPCHECK_POSSIBLEERROR_ARG "--enable=all")
+
+ if(MSVC)
+ set(CPPCHECK_TEMPLATE_ARG --template vs)
+ set(CPPCHECK_FAIL_REGULAR_EXPRESSION "[(]error[)]")
+ set(CPPCHECK_WARN_REGULAR_EXPRESSION "[(]style[)]")
+ elseif(CMAKE_COMPILER_IS_GNUCXX)
+ set(CPPCHECK_TEMPLATE_ARG --template gcc)
+ set(CPPCHECK_FAIL_REGULAR_EXPRESSION " error: ")
+ set(CPPCHECK_WARN_REGULAR_EXPRESSION " style: ")
+ else()
+ set(CPPCHECK_TEMPLATE_ARG --template gcc)
+ set(CPPCHECK_FAIL_REGULAR_EXPRESSION " error: ")
+ set(CPPCHECK_WARN_REGULAR_EXPRESSION " style: ")
+ endif()
+ elseif("${CPPCHECK_STYLE_ARG}" STREQUAL "--style")
+ # Old arguments
+ _cppcheck_set_arg_var(CPPCHECK_UNUSEDFUNC_ARG "--unused-functions")
+ _cppcheck_set_arg_var(CPPCHECK_POSSIBLEERROR_ARG "--all")
+ set(CPPCHECK_FAIL_REGULAR_EXPRESSION "error:")
+ set(CPPCHECK_WARN_REGULAR_EXPRESSION "[(]style[)]")
+ else()
+ # No idea - some other issue must be getting in the way
+ message(STATUS
+ "WARNING: Can't detect whether CPPCHECK wants new or old-style arguments!")
+ endif()
+
+ set(CPPCHECK_QUIET_ARG "--quiet")
+ set(CPPCHECK_INCLUDEPATH_ARG "-I")
+
+endif()
+
+set(CPPCHECK_ALL
+ "${CPPCHECK_EXECUTABLE} ${CPPCHECK_POSSIBLEERROR_ARG} ${CPPCHECK_UNUSEDFUNC_ARG} ${CPPCHECK_STYLE_ARG} ${CPPCHECK_QUIET_ARG} ${CPPCHECK_INCLUDEPATH_ARG} some/include/path")
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(cppcheck
+ DEFAULT_MSG
+ CPPCHECK_ALL
+ CPPCHECK_EXECUTABLE
+ CPPCHECK_POSSIBLEERROR_ARG
+ CPPCHECK_UNUSEDFUNC_ARG
+ CPPCHECK_STYLE_ARG
+ CPPCHECK_INCLUDEPATH_ARG
+ CPPCHECK_QUIET_ARG)
+
+if(CPPCHECK_FOUND OR CPPCHECK_MARK_AS_ADVANCED)
+ mark_as_advanced(CPPCHECK_ROOT_DIR)
+endif()
+
+mark_as_advanced(CPPCHECK_EXECUTABLE)