64 lines
2.3 KiB
CMake
64 lines
2.3 KiB
CMake
if(CMAKE_EXPORT_COMPILE_COMMANDS)
|
|
find_program(PVS_STUDIO_ANALYZER_EXE NAMES pvs-studio-analyzer)
|
|
include(PVS-Studio)
|
|
else()
|
|
message(STATUS "MyxCMake: CMAKE_EXPORT_COMPILE_COMMANDS is not set. PVS checks will be disabled.")
|
|
endif()
|
|
|
|
function(myx_cmake_pvs_studio_analyze target)
|
|
if(PVS_STUDIO_ANALYZER_EXE)
|
|
if(NOT TARGET myx-cmake-pvs-studio-analyze)
|
|
add_custom_target(myx-cmake-pvs-studio-analyze)
|
|
endif()
|
|
|
|
set(PVS_STUDIO_CONFIG "${CMAKE_BINARY_DIR}/PVS-Studio-${target}.cfg")
|
|
set(PVS_STUDIO_CONFIG_COMMAND "${CMAKE_COMMAND}" -E echo "sourcetree-root=${CMAKE_SOURCE_DIR}" > "${PVS_STUDIO_CONFIG}")
|
|
|
|
add_custom_command(OUTPUT "${PVS_STUDIO_CONFIG}"
|
|
COMMAND ${PVS_STUDIO_CONFIG_COMMAND}
|
|
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
|
|
COMMENT "Generating PVS-Studio.cfg")
|
|
|
|
set(PVS_STUDIO_HEADER "${CMAKE_BINARY_DIR}/include/pvs_studio_suppression_${target}.hpp")
|
|
file(WRITE ${PVS_STUDIO_HEADER}
|
|
"#ifndef PVS_STUDIO_HPP_\n"
|
|
"#define PVS_STUDIO_HPP_\n"
|
|
"#pragma once\n"
|
|
"//-V813_MINSIZE=33\n"
|
|
"#endif // PVS_STUDIO_HPP_\n"
|
|
)
|
|
|
|
get_target_property(__sources ${target} SOURCES)
|
|
list(FILTER __sources EXCLUDE REGEX "qrc_.*\\.cpp$")
|
|
list(FILTER __sources EXCLUDE REGEX "moc_.*\\.cpp$")
|
|
list(FILTER __sources EXCLUDE REGEX "ui_.*\\.h$")
|
|
|
|
pvs_studio_add_target(
|
|
TARGET ${target}-pvs-studio-analyze
|
|
CONFIG ${PVS_STUDIO_CONFIG}
|
|
DEPENDS ${PVS_STUDIO_CONFIG}
|
|
LOG "${CMAKE_BINARY_DIR}/PVS-Studio-${target}.log"
|
|
SOURCES ${__sources}
|
|
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)
|
|
|
|
add_dependencies(myx-cmake-pvs-studio-analyze ${target}-pvs-studio-analyze)
|
|
|
|
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()
|
|
else()
|
|
message(STATUS "MyxCMake: PVS-Studio analyzer is not found")
|
|
endif()
|
|
endfunction()
|