61 lines
3.0 KiB
CMake
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()
|