File: cppcheck.cmake

package info (click to toggle)
snapcast 0.34.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 4,252 kB
  • sloc: cpp: 40,067; python: 3,260; sh: 455; makefile: 16
file content (77 lines) | stat: -rw-r--r-- 2,478 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
if(CMAKE_VERSION VERSION_EQUAL "3.19.0" OR CMAKE_VERSION VERSION_GREATER
                                           "3.19.0")

  find_program(CPPCHECK_BINARY cppcheck NAMES cppcheck)

  # If CppCheck executable found
  if(CPPCHECK_BINARY)
    if(NOT DEFINED ENV{CPPCHECK_CACHE_DIR})
      file(REAL_PATH "~/.cache/cppcheck" cache_dir EXPAND_TILDE)
      set(ENV{CPPCHECK_CACHE_DIR} ${cache_dir})
    endif()

    set(CPPCHECK_CACHE_DIR
        $ENV{CPPCHECK_CACHE_DIR}
        CACHE STRING "cppcheck cache directory")

    # Check CppCheck version
    set(CPP_CHECK_CMD ${CPPCHECK_BINARY} --version)
    execute_process(
      COMMAND ${CPP_CHECK_CMD}
      WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
      RESULT_VARIABLE CPP_CHECK_RESULT
      OUTPUT_VARIABLE CPP_CHECK_VERSION
      ERROR_VARIABLE CPP_CHECK_ERROR)

    include(ProcessorCount)
    ProcessorCount(CPU_CORES)

    # Check if version could be extracted
    if(CPP_CHECK_RESULT EQUAL 0)

      # Append desired arguments to CppCheck
      list(
        APPEND
        CPPCHECK_BINARY
        # Use all the available CPU cores
        "-j 4"
        # ${CPU_CORES}"
        "--std=c++17"
        "--enable=all"
        "--cppcheck-build-dir=${CPPCHECK_CACHE_DIR}"
        "--project=${CMAKE_BINARY_DIR}/compile_commands.json"
        "--error-exitcode=10"
        "--inline-suppr"
        "--suppress=*:${CMAKE_BINARY_DIR}/*"
        "--suppress=unusedFunction"
        "--suppress=noExplicitConstructor"
        "--suppress=missingInclude"
        "--suppress=missingIncludeSystem"
        "--suppress=useInitializationList"
        "--suppress=shadowFunction"
        "--suppress=shadowVariable"
        "--suppress=stlIfStrFind"
        "--suppress=useStlAlgorithm"
        "--suppress=unmatchedSuppression"
        "--suppress=virtualCallInConstructor")

      if(CPPCHECK_ARGS)
        set(CPPCHECK_ARGS_LIST ${CPPCHECK_ARGS})
        separate_arguments(CPPCHECK_ARGS_LIST)
        list(APPEND CPPCHECK_BINARY ${CPPCHECK_ARGS_LIST})
      endif()

      add_custom_command(
        OUTPUT create-cache-dir
        COMMAND ${CMAKE_COMMAND} -E make_directory ${CPPCHECK_CACHE_DIR}
        COMMENT "Creating cppcheck cache dir: '${CPPCHECK_CACHE_DIR}'")

      add_custom_target(
        cppcheck
        COMMAND ${CPPCHECK_BINARY}
        WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
        COMMENT "Static code analysis using ${CPP_CHECK_VERSION}"
        DEPENDS create-cache-dir)
    endif()
  endif()
endif()