FindCPPCHECK.cmake 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  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_LANGUAGE_ARG "--language=c++")
  61. set(CPPCHECK_LIBRARY_STANDARD_ARG "--library=std")
  62. if(MSVC)
  63. set(CPPCHECK_LIBRARY_ARG "--library=windows")
  64. elseif(CMAKE_COMPILER_IS_GNUCXX)
  65. set(CPPCHECK_LIBRARY_ARG "")
  66. else()
  67. set(CPPCHECK_LIBRARY_ARG "")
  68. endif()
  69. set(CPPCHECK_QUIET_ARG "--quiet")
  70. set(CPPCHECK_INCLUDEPATH_ARG "-I")
  71. endif(CPPCHECK_EXECUTABLE)
  72. #just test
  73. set(CPPCHECK_ALL
  74. "${CPPCHECK_EXECUTABLE} ${CPPCHECK_ENABLEALL_ARG} ${CPPCHECK_UNUSEDFUNC_ARG} ${CPPCHECK_STYLE_ARG} ${CPPCHECK_QUIET_ARG} ${CPPCHECK_INCLUDEPATH_ARG} some/include/path")
  75. include(FindPackageHandleStandardArgs)
  76. FIND_PACKAGE_HANDLE_STANDARD_ARGS(
  77. CPPCHECK
  78. DEFAULT_MSG
  79. CPPCHECK_ALL
  80. CPPCHECK_EXECUTABLE
  81. CPPCHECK_ENABLEALL_ARG
  82. CPPCHECK_UNUSEDFUNC_ARG
  83. CPPCHECK_STYLE_ARG
  84. CPPCHECK_INCLUDEPATH_ARG
  85. CPPCHECK_QUIET_ARG)
  86. if(CPPCHECK_FOUND OR CPPCHECK_MARK_AS_ADVANCED)
  87. mark_as_advanced(CPPCHECK_ROOT_DIR)
  88. endif()
  89. mark_as_advanced(CPPCHECK_EXECUTABLE)