diff options
Diffstat (limited to 'cmake/SetupPVSStudio.cmake')
-rw-r--r-- | cmake/SetupPVSStudio.cmake | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/cmake/SetupPVSStudio.cmake b/cmake/SetupPVSStudio.cmake new file mode 100644 index 000000000..92fa560f0 --- /dev/null +++ b/cmake/SetupPVSStudio.cmake @@ -0,0 +1,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() |