1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
# SetupPVSStudio.cmake
# Configures PVS-Studio static code analysis if available
function(SetupPVSStudio)
# Try to find PVS-Studio analyzer
find_program(_PVS_STUDIO "pvs-studio-analyzer")
if (_PVS_STUDIO)
message(STATUS "Found PVS-Studio analyzer: ${_PVS_STUDIO}")
# Include the PVS-Studio module
include(PVS-Studio)
# Get a list of source directories to analyze
set(_ANALYZE_TARGETS
${PROJECT_NAME} # Main project
rspamd-server # Server component
rspamadm # Admin utility
rspamc # Client utility
)
# Setup analysis target
pvs_studio_add_target(
TARGET ${PROJECT_NAME}.analyze # Target name for running analysis
ANALYZE ${_ANALYZE_TARGETS} # What to analyze
OUTPUT FORMAT errorfile # Output format
LOG target_${PROJECT_NAME}.err # Log file path
ARGS
# Additional pvs-studio-analyzer arguments
--exclude-path "${CMAKE_SOURCE_DIR}/contrib" # Exclude third-party code
)
# Add a help message for the target
add_custom_command(
TARGET ${PROJECT_NAME}.analyze
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E echo "PVS-Studio analysis complete. Results in target_${PROJECT_NAME}.err"
)
# Create a report target that converts the error file to a more readable format
add_custom_target(${PROJECT_NAME}.analyze-report
COMMAND ${CMAKE_COMMAND} -E echo "Generating HTML report from PVS-Studio results..."
COMMAND plog-converter -a GA:1,2,3 -t fullhtml -o pvs-report target_${PROJECT_NAME}.err
COMMAND ${CMAKE_COMMAND} -E echo "Report generated in pvs-report/ directory"
DEPENDS ${PROJECT_NAME}.analyze
COMMENT "Converting PVS-Studio output to HTML report"
VERBATIM
)
message(STATUS "PVS-Studio targets added:")
message(STATUS " - ${PROJECT_NAME}.analyze: Run the analysis")
message(STATUS " - ${PROJECT_NAME}.analyze-report: Generate HTML report from analysis results")
else ()
message(STATUS "PVS-Studio analyzer not found. Static analysis disabled.")
endif ()
endfunction()
|