myxx/MyxxCMake/lib/AnalyzePvsStudio.cmake

60 lines
1.8 KiB
CMake
Raw Normal View History

2022-10-06 04:57:47 +00:00
find_program(PVS_STUDIO_ANALYZER_EXE pvs-studio-analyzer)
find_program(PVS_STUDIO_CONVERTER_EXE plog-converter)
2022-10-06 18:07:22 +00:00
if(${CMAKE_VERSION} VERSION_LESS "3.17.0")
set(MYXX_CMAKE_LIB_PVS_DIR_BACKPORT ${CMAKE_CURRENT_LIST_DIR})
endif()
2022-10-06 04:57:47 +00:00
function(myxx_analyze_pvs_studio target)
2022-10-06 18:07:22 +00:00
if(${CMAKE_VERSION} VERSION_LESS "3.17.0")
set(CMAKE_CURRENT_FUNCTION_LIST_DIR ${MYXX_CMAKE_LIB_PVS_DIR_BACKPORT})
endif()
if(NOT PVS_STUDIO_ANALYZER_EXE)
2022-10-06 04:57:47 +00:00
message(STATUS "MyxxCMake: pvs-studio-analyzer not found.")
return()
endif()
2022-10-06 18:07:22 +00:00
if(NOT PVS_STUDIO_CONVERTER_EXE)
2022-10-06 04:57:47 +00:00
message(STATUS "MyxxCMake: pvs-studio-converter not found.")
return()
endif()
2022-10-06 18:07:22 +00:00
if(NOT TARGET myxx-analyze-pvs-studio)
add_custom_target(myxx-analyze-pvs-studio)
2022-10-06 04:57:47 +00:00
endif()
set(options)
2022-10-06 18:07:22 +00:00
set(oneValueArgs HEADER MODE)
set(multiValueArgs ARGS)
2022-10-06 04:57:47 +00:00
cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
2022-10-06 18:07:22 +00:00
if(NOT ARG_HEADER)
set(ARG_HEADER ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/pvs-studio/pvs_studio.hpp.in)
endif()
if(NOT ARG_MODE)
set(ARG_MODE "GA:1,2,3;64:1,2,3;OP:1,2,3;CS:1,2,3;OWASP:1,2,3")
endif()
pvs_studio_add_target(TARGET ${target}-analyze-pvs-studio
2022-10-07 08:22:07 +00:00
ANALYZE ${target}
2022-10-06 04:57:47 +00:00
HIDE_HELP
2022-10-06 18:07:22 +00:00
OUTPUT
FORMAT errorfile
ARGS --exclude-path ${CMAKE_CURRENT_BINARY_DIR} ${ARG_ARGS}
MODE ${ARG_MODE})
2022-10-06 04:57:47 +00:00
2022-10-06 18:07:22 +00:00
get_target_property(target_type ${target} TYPE)
if(${target_type} STREQUAL INTERFACE_LIBRARY)
set(target_type INTERFACE)
2022-10-06 04:57:47 +00:00
else()
2022-10-06 18:07:22 +00:00
set(target_type PRIVATE)
2022-10-06 04:57:47 +00:00
endif()
if(MSVC)
2022-10-06 18:07:22 +00:00
target_compile_options(${target} BEFORE ${target_type} /FI ${ARG_HEADER})
2022-10-06 04:57:47 +00:00
else() # GCC/Clang
2022-10-06 18:07:22 +00:00
target_compile_options(${target} BEFORE ${target_type} -include ${ARG_HEADER})
2022-10-06 04:57:47 +00:00
endif()
2022-10-06 18:07:22 +00:00
add_dependencies(${target}-analyze-pvs-studio ${target})
add_dependencies(myxx-analyze-pvs-studio ${target}-analyze-pvs-studio)
2022-10-06 04:57:47 +00:00
endfunction()