Files
build_infra/0_cmake_library/Development_Quality_Infrastructure/Cppcheck/main.cmake
T
2026-08-03 12:41:26 +08:00

61 lines
3.0 KiB
CMake

include_guard(GLOBAL)
include("${CMAKE_CURRENT_LIST_DIR}/../Common/internal.cmake")
function(psc_add_cppcheck_target target_name)
set(options NO_DEFAULT_ENABLE NO_DEFAULT_SUPPRESSIONS)
set(one_value_args OUTPUT_DIR COMPILE_COMMANDS EXECUTABLE CHECK_LEVEL JOBS STANDARD)
set(multi_value_args INPUT_DIRS EXCLUDE_DIRS ENABLE SUPPRESSIONS DEPENDS)
cmake_parse_arguments(ARG "${options}" "${one_value_args}" "${multi_value_args}" ${ARGN})
_psc_validate_target_call(psc_add_cppcheck_target "${target_name}" ARG)
if (NOT ARG_OUTPUT_DIR)
set(ARG_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/metrics/${target_name}/cppcheck")
endif()
if (NOT ARG_COMPILE_COMMANDS)
set(ARG_COMPILE_COMMANDS "${CMAKE_CURRENT_BINARY_DIR}/compile_commands.json")
endif()
if (NOT ARG_CHECK_LEVEL)
set(ARG_CHECK_LEVEL normal)
endif()
if (NOT ARG_STANDARD)
set(ARG_STANDARD c++20)
endif()
if ("${ARG_JOBS}" STREQUAL "")
set(ARG_JOBS 8)
endif()
if (NOT ARG_INPUT_DIRS)
set(ARG_INPUT_DIRS "${CMAKE_CURRENT_SOURCE_DIR}")
endif()
if (NOT ARG_ENABLE AND NOT ARG_NO_DEFAULT_ENABLE)
set(ARG_ENABLE warning style performance portability)
endif()
if (NOT ARG_SUPPRESSIONS AND NOT ARG_NO_DEFAULT_SUPPRESSIONS)
set(ARG_SUPPRESSIONS missingIncludeSystem unmatchedSuppression)
endif()
_psc_absolute_path(output_dir "${ARG_OUTPUT_DIR}" "${CMAKE_CURRENT_BINARY_DIR}")
_psc_absolute_path(compile_commands "${ARG_COMPILE_COMMANDS}" "${CMAKE_CURRENT_BINARY_DIR}")
_psc_absolute_paths(input_dirs "${CMAKE_CURRENT_SOURCE_DIR}" ${ARG_INPUT_DIRS})
_psc_absolute_paths(exclude_dirs "${CMAKE_CURRENT_SOURCE_DIR}" ${ARG_EXCLUDE_DIRS})
_psc_resolve_executable(pwsh "" "${PSC_PWSH_EXECUTABLE}" "PowerShell 7")
_psc_resolve_executable(cppcheck "${ARG_EXECUTABLE}" "${PSC_CPPCHECK_EXECUTABLE}" "Cppcheck")
_psc_ps_array(PSC_CPPCHECK_INPUT_DIRS ${input_dirs})
_psc_ps_array(PSC_CPPCHECK_EXCLUDE_DIRS ${exclude_dirs})
_psc_ps_array(PSC_CPPCHECK_ENABLE ${ARG_ENABLE})
_psc_ps_array(PSC_CPPCHECK_SUPPRESSIONS ${ARG_SUPPRESSIONS})
set(PSC_CPPCHECK_OUTPUT_DIR "${output_dir}")
set(PSC_CPPCHECK_COMPILE_COMMANDS "${compile_commands}")
set(PSC_CPPCHECK_EXECUTABLE "${cppcheck}")
set(PSC_CPPCHECK_CHECK_LEVEL "${ARG_CHECK_LEVEL}")
set(PSC_CPPCHECK_JOBS "${ARG_JOBS}")
set(PSC_CPPCHECK_STANDARD "${ARG_STANDARD}")
set(script_dir "${CMAKE_CURRENT_BINARY_DIR}/psc_metrics_scripts/${target_name}")
file(MAKE_DIRECTORY "${script_dir}")
set(script "${script_dir}/${target_name}_cppcheck.ps1")
configure_file("${CMAKE_CURRENT_FUNCTION_LIST_DIR}/Cppcheck.ps1.in" "${script}" @ONLY)
add_custom_target("${target_name}"
COMMAND "${pwsh}" -NoProfile -File "${script}"
DEPENDS ${ARG_DEPENDS}
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
VERBATIM
)
_psc_set_quality_target_properties("${target_name}" cppcheck "${output_dir}")
endfunction()