FindCPPCHECK.cmake 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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_ENABLEALL_ARG
  9. # CPPCHECK_WARNINGS_ARG
  10. # CPPCHECK_STYLE_ARG
  11. # CPPCHECK_PERFORMANCE_ARG
  12. # CPPCHECK_PORTABILITY_ARG
  13. # CPPCHECK_INFORMATION_ARG
  14. # CPPCHECK_UNUSEDFUNC_ARG
  15. # CPPCHECK_MISSINGINCLUDE_ARG
  16. # CPPCHECK_QUIET_ARG
  17. # CPPCHECK_INCLUDEPATH_ARG
  18. # CPPCHECK_MARK_AS_ADVANCED - whether to mark our vars as advanced even
  19. # if we don't find this program.
  20. file(TO_CMAKE_PATH "${CPPCHECK_ROOT_DIR}" CPPCHECK_ROOT_DIR)
  21. set(CPPCHECK_ROOT_DIR
  22. "${CPPCHECK_ROOT_DIR}"
  23. CACHE
  24. PATH
  25. "Path to search for cppcheck")
  26. # cppcheck app bundles on Mac OS X are GUI, we want command line only
  27. set(_oldappbundlesetting ${CMAKE_FIND_APPBUNDLE})
  28. set(CMAKE_FIND_APPBUNDLE NEVER)
  29. if(CPPCHECK_EXECUTABLE AND NOT EXISTS "${CPPCHECK_EXECUTABLE}")
  30. set(CPPCHECK_EXECUTABLE "notfound" CACHE PATH FORCE "")
  31. endif()
  32. # If we have a custom path, look there first.
  33. if(CPPCHECK_ROOT_DIR)
  34. find_program(CPPCHECK_EXECUTABLE
  35. NAMES
  36. cppcheck
  37. cli
  38. PATHS
  39. "${CPPCHECK_ROOT_DIR}"
  40. PATH_SUFFIXES
  41. cli
  42. NO_DEFAULT_PATH)
  43. endif()
  44. find_program(CPPCHECK_EXECUTABLE NAMES cppcheck)
  45. # Restore original setting for appbundle finding
  46. set(CMAKE_FIND_APPBUNDLE ${_oldappbundlesetting})
  47. function(_cppcheck_set_arg_var _argvar _arg)
  48. set(${_argvar} "${_arg}" PARENT_SCOPE)
  49. endfunction()
  50. if(CPPCHECK_EXECUTABLE)
  51. set(CPPCHECK_ENABLEALL_ARG "--enable=all")
  52. set(CPPCHECK_WARNINGS_ARG "--enable=warning")
  53. set(CPPCHECK_STYLE_ARG "--enable=style")
  54. set(CPPCHECK_PERFORMANCE_ARG "--enable=performance")
  55. set(CPPCHECK_PORTABILITY_ARG "--enable=portability")
  56. set(CPPCHECK_INFORMATION_ARG "--enable=information")
  57. set(CPPCHECK_UNUSEDFUNC_ARG "--enable=unusedFunction")
  58. set(CPPCHECK_MISSINGINCLUDE_ARG "--enable=missingInclude")
  59. set(CPPCHECK_TEMPLATE_ARG "--template='{file}|{line}|{severity}|{id}|{message}'")
  60. set(CPPCHECK_QUIET_ARG "--quiet")
  61. set(CPPCHECK_INCLUDEPATH_ARG "-I")
  62. endif(CPPCHECK_EXECUTABLE)
  63. #just test
  64. set(CPPCHECK_ALL
  65. "${CPPCHECK_EXECUTABLE} ${CPPCHECK_ENABLEALL_ARG} ${CPPCHECK_UNUSEDFUNC_ARG} ${CPPCHECK_STYLE_ARG} ${CPPCHECK_QUIET_ARG} ${CPPCHECK_INCLUDEPATH_ARG} some/include/path")
  66. include(FindPackageHandleStandardArgs)
  67. FIND_PACKAGE_HANDLE_STANDARD_ARGS(
  68. CPPCHECK
  69. DEFAULT_MSG
  70. CPPCHECK_ALL
  71. CPPCHECK_EXECUTABLE
  72. CPPCHECK_ENABLEALL_ARG
  73. CPPCHECK_UNUSEDFUNC_ARG
  74. CPPCHECK_STYLE_ARG
  75. CPPCHECK_INCLUDEPATH_ARG
  76. CPPCHECK_QUIET_ARG)
  77. if(CPPCHECK_FOUND OR CPPCHECK_MARK_AS_ADVANCED)
  78. mark_as_advanced(CPPCHECK_ROOT_DIR)
  79. endif()
  80. mark_as_advanced(CPPCHECK_EXECUTABLE)