myxx/MyxxCMake/lib/AnalyzePvsStudio.cmake

55 lines
1.7 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)
function(myxx_analyze_pvs_studio target)
if(PVS_STUDIO_ANALYZER_EXE)
message(STATUS "MyxxCMake: pvs-studio-analyzer not found.")
return()
endif()
if(PVS_STUDIO_CONVERTER_EXE)
message(STATUS "MyxxCMake: pvs-studio-converter not found.")
return()
endif()
if(TARGET myx-cmake-analyze-pvs-studio)
return()
endif()
set(options)
set(oneValueArgs CHECKS)
set(multiValueArgs)
cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
set(PVS_STUDIO_HEADER "${CMAKE_BINARY_DIR}/include/myx_cmake_pvs_studio_header_p.hpp")
file(WRITE ${PVS_STUDIO_HEADER}
"#ifndef MYX_CMAKE_PVS_STUDIO_HEADER_HPP_\n"
"#define MYX_CMAKE_PVS_STUDIO_HEADER_HPP_\n"
"#pragma once\n"
"//-V813_MINSIZE=33\n"
"#endif // MYX_CMAKE_PVS_STUDIO_HEADER_HPP_\n")
pvs_studio_add_target(TARGET myx-cmake-analyze-pvs-studio
LOG
COMPILE_COMMANDS
HIDE_HELP
OUTPUT FORMAT errorfile
ARGS --exclude-path ${CMAKE_CURRENT_BINARY_DIR}/${target}_autogen
MODE GA:1,2,3;64:1;OP:1,2;CS:1,2)
get_target_property(__target_type ${target} TYPE)
if(${__target_type} STREQUAL INTERFACE_LIBRARY)
set(__target_type INTERFACE)
else()
set(__target_type PRIVATE)
endif()
if(MSVC)
target_compile_options(${target} BEFORE ${__target_type} /FI ${PVS_STUDIO_HEADER})
else() # GCC/Clang
target_compile_options(${target} BEFORE ${__target_type} -include ${PVS_STUDIO_HEADER})
endif()
add_dependencies(myx-cmake-analyze-pvs-studio ${target})
get_target_property(__target_source_dir "${target}" SOURCE_DIR)
pvs_studio_analyze_target("${target}" "${__target_source_dir}")
endfunction()