From 06f701327388306f1b035e3b5d5f99eefb7966f8 Mon Sep 17 00:00:00 2001 From: Andrey Astafyev Date: Fri, 8 Apr 2022 08:06:02 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D1=8F=20PVS?= =?UTF-8?q?-Studio?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MyxCMake/thirdparty/PVS-Studio.cmake | 48 +++++++++++++++++++++------- 1 file changed, 36 insertions(+), 12 deletions(-) diff --git a/MyxCMake/thirdparty/PVS-Studio.cmake b/MyxCMake/thirdparty/PVS-Studio.cmake index 1a095a7..441cefc 100644 --- a/MyxCMake/thirdparty/PVS-Studio.cmake +++ b/MyxCMake/thirdparty/PVS-Studio.cmake @@ -3,7 +3,7 @@ # # Version 12 -cmake_minimum_required(VERSION 2.8.12) +cmake_minimum_required(VERSION 3.0.0) cmake_policy(SET CMP0054 NEW) if (PVS_STUDIO_AS_SCRIPT) @@ -31,7 +31,8 @@ if (PVS_STUDIO_AS_SCRIPT) endif () endif () endforeach () - + + file(REMOVE "${PVS_STUDIO_LOG_FILE}") execute_process(COMMAND ${PVS_STUDIO_COMMAND} ${additional_args} RESULT_VARIABLE result OUTPUT_VARIABLE output @@ -58,13 +59,17 @@ function (pvs_studio_log TEXT) endfunction () function (pvs_studio_relative_path VAR ROOT FILEPATH) + if (WIN32) + STRING(REGEX REPLACE "\\\\" "/" ROOT ${ROOT}) + STRING(REGEX REPLACE "\\\\" "/" FILEPATH ${FILEPATH}) + endif() set("${VAR}" "${FILEPATH}" PARENT_SCOPE) - if ("${FILEPATH}" MATCHES "^/.*$" OR "${FILEPATH}" MATCHES "^.:/.*$") + if (IS_ABSOLUTE "${FILEPATH}") file(RELATIVE_PATH RPATH "${ROOT}" "${FILEPATH}") - if (NOT "${RPATH}" MATCHES "^\\.\\..*$") + if (NOT IS_ABSOLUTE "${RPATH}") set("${VAR}" "${RPATH}" PARENT_SCOPE) - endif () - endif () + endif() + endif() endfunction () function (pvs_studio_join_path VAR DIR1 DIR2) @@ -96,7 +101,7 @@ macro (pvs_studio_append_flags_from_property CXX C DIR PREFIX) endmacro () macro (pvs_studio_append_standard_flag FLAGS STANDARD) - if ("${STANDARD}" MATCHES "^(99|11|14|17)$") + if ("${STANDARD}" MATCHES "^(99|11|14|17|20)$") if ("${PVS_STUDIO_PREPROCESSOR}" MATCHES "gcc|clang") list(APPEND "${FLAGS}" "-std=c++${STANDARD}") endif () @@ -205,8 +210,9 @@ function (pvs_studio_analyze_file SOURCE SOURCE_DIR BINARY_DIR) string(REPLACE ";" "$" cmdline "${cmdline}") set(pvscmd "${CMAKE_COMMAND}" - -D PVS_STUDIO_AS_SCRIPT=TRUE + -D "PVS_STUDIO_AS_SCRIPT=TRUE" -D "PVS_STUDIO_COMMAND=${cmdline}" + -D "PVS_STUDIO_LOG_FILE=${LOG}" -P "${PVS_STUDIO_SCRIPT}" ) @@ -513,10 +519,14 @@ function (pvs_studio_add_target) if ("${PVS_STUDIO_FORMAT}" STREQUAL "") set(PVS_STUDIO_FORMAT "errorfile") endif () + set(converter_no_help "") + if (PVS_STUDIO_HIDE_HELP) + set(converter_no_help "--noHelpMessages") + endif() list(APPEND COMMANDS COMMAND "${CMAKE_COMMAND}" -E remove -f "${PVS_STUDIO_LOG}.pvs.raw" COMMAND "${CMAKE_COMMAND}" -E rename "${PVS_STUDIO_LOG}" "${PVS_STUDIO_LOG}.pvs.raw" - COMMAND "${PVS_STUDIO_CONVERTER}" "${PVS_STUDIO_CONVERTER_ARGS}" -t "${PVS_STUDIO_FORMAT}" "${PVS_STUDIO_LOG}.pvs.raw" -o "${PVS_STUDIO_LOG}" -a "${PVS_STUDIO_MODE}" + COMMAND "${PVS_STUDIO_CONVERTER}" "${PVS_STUDIO_CONVERTER_ARGS}" ${converter_no_help} -t "${PVS_STUDIO_FORMAT}" "${PVS_STUDIO_LOG}.pvs.raw" -o "${PVS_STUDIO_LOG}" -a "${PVS_STUDIO_MODE}" ) if(NOT PVS_STUDIO_KEEP_COMBINED_PLOG) list(APPEND COMMANDS COMMAND "${CMAKE_COMMAND}" -E remove -f "${PVS_STUDIO_LOG}.pvs.raw") @@ -544,9 +554,7 @@ function (pvs_studio_add_target) endif () if (PVS_STUDIO_OUTPUT) - if (PVS_STUDIO_HIDE_HELP AND NOT WIN32) - set(COMMANDS COMMAND grep -v " error: Help:" ${PVS_STUDIO_LOG} 1>&2 || exit 0) - elseif (WIN32) + if (WIN32) set(COMMANDS COMMAND type "${PVS_STUDIO_LOG}" 1>&2) else () set(COMMANDS COMMAND cat "${PVS_STUDIO_LOG}" 1>&2) @@ -555,9 +563,25 @@ function (pvs_studio_add_target) set(COMMANDS "") endif () + set(props_file "${CMAKE_BINARY_DIR}/${PVS_STUDIO_TARGET}.user.props") + file(WRITE "${props_file}" [=[ + + + + + + + + true + + + +]=]) + add_custom_target("${PVS_STUDIO_TARGET}" ${ALL} ${COMMANDS} WORKING_DIRECTORY "${CMAKE_BINARY_DIR}" DEPENDS ${PVS_STUDIO_DEPENDS} "${PVS_STUDIO_LOG}") + set_target_properties("${PVS_STUDIO_TARGET}" PROPERTIES VS_USER_PROPS "${props_file}") # A workaround to add implicit dependencies of source files from include directories set_target_properties("${PVS_STUDIO_TARGET}" PROPERTIES INCLUDE_DIRECTORIES "${inc_path}")