Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fixed pvs multiple targets issue, fixed some readme typos #7

Merged
merged 1 commit into from
Nov 30, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion cmake/PVS-Studio-conf.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,12 @@ if (ENABLE_PVS_STUDIO)
message("- UCU.APPS.CS: PVS Studio enabled in CMakeLists.txt")
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
include(cmake/extra/PVS-Studio.cmake)
set(ANALYZED_FILES "" CACHE INTERNAL "ANALYZED_FILES")
foreach(TARGET ${ALL_TARGETS})
pvs_studio_add_target(TARGET ${TARGET}.analyze ALL
OUTPUT FORMAT errorfile
ANALYZE ${TARGET}
LOG target.err)
LOG target_${TARGET}.err)
endforeach()

else ()
Expand Down
107 changes: 57 additions & 50 deletions cmake/extra/PVS-Studio.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
#
# Version 12

cmake_minimum_required(VERSION 2.8.12)
cmake_minimum_required(VERSION 3.16)
cmake_policy(SET CMP0054 NEW)

if (PVS_STUDIO_AS_SCRIPT)
Expand Down Expand Up @@ -31,16 +31,16 @@ if (PVS_STUDIO_AS_SCRIPT)
endif ()
endif ()
endforeach ()

execute_process(COMMAND ${PVS_STUDIO_COMMAND} ${additional_args}
RESULT_VARIABLE result
OUTPUT_VARIABLE output
ERROR_VARIABLE error)
RESULT_VARIABLE result
OUTPUT_VARIABLE output
ERROR_VARIABLE error)

if (result AND NOT output MATCHES "^No compilation units were found\\.")
message(FATAL_ERROR "PVS-Studio exited with non-zero code.\nStdout:\n${output}\nStderr:\n${error}\n")
endif()

return()
endif ()

Expand Down Expand Up @@ -124,7 +124,7 @@ endfunction ()
function (pvs_studio_set_target_flags TARGET CXX C)
set(CXX_FLAGS "${${CXX}}")
set(C_FLAGS "${${C}}")

if (NOT MSVC)
list(APPEND CXX_FLAGS "$<$<BOOL:${CMAKE_SYSROOT}>:--sysroot=${CMAKE_SYSROOT}>")
list(APPEND C_FLAGS "$<$<BOOL:${CMAKE_SYSROOT}>:--sysroot=${CMAKE_SYSROOT}>")
Expand Down Expand Up @@ -183,9 +183,16 @@ function (pvs_studio_analyze_file SOURCE SOURCE_DIR BINARY_DIR)
pvs_studio_join_path(SOURCE "${SOURCE_DIR}" "${SOURCE}")

set(LOG "${BINARY_DIR}/PVS-Studio/${SOURCE_RELATIVE}.plog")

get_filename_component(LOG "${LOG}" REALPATH)
get_filename_component(PARENT_DIR "${LOG}" DIRECTORY)

if (${LOG} IN_LIST ANALYZED_FILES)
return()
endif()
list(APPEND ANALYZED_FILES ${LOG})
set(ANALYZED_FILES "${ANALYZED_FILES}" CACHE INTERNAL "ANALYZED_FILES")

if (EXISTS "${SOURCE}" AND NOT TARGET "${LOG}" AND NOT "${PVS_STUDIO_LANGUAGE}" STREQUAL "")
# A workaround to support implicit dependencies for ninja generators.
set(depPvsArg)
Expand All @@ -201,29 +208,29 @@ function (pvs_studio_analyze_file SOURCE SOURCE_DIR BINARY_DIR)
#
# It is a workaround to expand generator expressions.
set(cmdline "${PVS_STUDIO_BIN}" analyze
--output-file "${LOG}"
--source-file "${SOURCE}"
${depPvsArg}
${PVS_STUDIO_ARGS}
--cl-params "${PVS_STUDIO_CL_PARAMS}" "${SOURCE}")
--output-file "${LOG}"
--source-file "${SOURCE}"
${depPvsArg}
${PVS_STUDIO_ARGS}
--cl-params "${PVS_STUDIO_CL_PARAMS}" "${SOURCE}")

string(REPLACE ";" "$<SEMICOLON>" cmdline "${cmdline}")
set(pvscmd "${CMAKE_COMMAND}"
-D PVS_STUDIO_AS_SCRIPT=TRUE
-D "PVS_STUDIO_COMMAND=${cmdline}"
-P "${PVS_STUDIO_SCRIPT}"
)
-D PVS_STUDIO_AS_SCRIPT=TRUE
-D "PVS_STUDIO_COMMAND=${cmdline}"
-P "${PVS_STUDIO_SCRIPT}"
)

add_custom_command(OUTPUT "${LOG}"
COMMAND "${CMAKE_COMMAND}" -E make_directory "${PARENT_DIR}"
COMMAND "${CMAKE_COMMAND}" -E remove_directory "${LOG}"
COMMAND ${pvscmd}
WORKING_DIRECTORY "${BINARY_DIR}"
DEPENDS "${SOURCE}" "${PVS_STUDIO_SUPPRESS_BASE}" "${PVS_STUDIO_DEPENDS}"
IMPLICIT_DEPENDS "${PVS_STUDIO_LANGUAGE}" "${SOURCE}"
${depCommandArg}
VERBATIM
COMMENT "Analyzing ${PVS_STUDIO_LANGUAGE} file ${SOURCE_RELATIVE}")
COMMAND "${CMAKE_COMMAND}" -E make_directory "${PARENT_DIR}"
COMMAND "${CMAKE_COMMAND}" -E remove_directory "${LOG}"
COMMAND ${pvscmd}
WORKING_DIRECTORY "${BINARY_DIR}"
DEPENDS "${SOURCE}" "${PVS_STUDIO_SUPPRESS_BASE}" "${PVS_STUDIO_DEPENDS}"
IMPLICIT_DEPENDS "${PVS_STUDIO_LANGUAGE}" "${SOURCE}"
${depCommandArg}
VERBATIM
COMMENT "Analyzing ${PVS_STUDIO_LANGUAGE} file ${SOURCE_RELATIVE}")
list(APPEND PLOGS "${LOG}")
endif ()
set(PVS_STUDIO_PLOGS "${PLOGS}" PARENT_SCOPE)
Expand Down Expand Up @@ -382,13 +389,13 @@ function (pvs_studio_add_target)

if ("${PVS_STUDIO_CONFIG}" STREQUAL "" AND NOT "${PVS_STUDIO_CFG_TEXT}" STREQUAL "")
set(PVS_STUDIO_CONFIG "${CMAKE_BINARY_DIR}/PVS-Studio.cfg")

set(PVS_STUDIO_CONFIG_COMMAND "${CMAKE_COMMAND}" -E echo "${PVS_STUDIO_CFG_TEXT}" > "${PVS_STUDIO_CONFIG}")

add_custom_command(OUTPUT "${PVS_STUDIO_CONFIG}"
COMMAND ${PVS_STUDIO_CONFIG_COMMAND}
WORKING_DIRECTORY "${BINARY_DIR}"
COMMENT "Generating PVS-Studio.cfg")
COMMAND ${PVS_STUDIO_CONFIG_COMMAND}
WORKING_DIRECTORY "${BINARY_DIR}"
COMMENT "Generating PVS-Studio.cfg")

list(APPEND PVS_STUDIO_DEPENDS "${PVS_STUDIO_CONFIG}")
endif ()
Expand All @@ -408,7 +415,7 @@ function (pvs_studio_add_target)
endif ()

list(APPEND PVS_STUDIO_ARGS --platform "${PVS_STUDIO_PLATFORM}"
--preprocessor "${PVS_STUDIO_PREPROCESSOR}")
--preprocessor "${PVS_STUDIO_PREPROCESSOR}")

if (NOT "${PVS_STUDIO_SUPPRESS_BASE}" STREQUAL "")
pvs_studio_join_path(PVS_STUDIO_SUPPRESS_BASE "${CMAKE_CURRENT_SOURCE_DIR}" "${PVS_STUDIO_SUPPRESS_BASE}")
Expand All @@ -422,7 +429,7 @@ function (pvs_studio_add_target)
if (NOT "${CMAKE_C_COMPILER}" STREQUAL "")
list(APPEND PVS_STUDIO_ARGS --cc "${CMAKE_C_COMPILER}")
endif ()

if (PVS_STUDIO_KEEP_INTERMEDIATE_FILES)
list(APPEND PVS_STUDIO_ARGS --dump-files)
endif()
Expand Down Expand Up @@ -490,13 +497,13 @@ function (pvs_studio_add_target)
message(FATAL_ERROR "You should set CMAKE_EXPORT_COMPILE_COMMANDS to TRUE")
endif ()
add_custom_command(
OUTPUT "${COMPILE_COMMANDS_LOG}"
COMMAND "${PVS_STUDIO_BIN}" analyze -i
--output-file "${COMPILE_COMMANDS_LOG}.always"
${PVS_STUDIO_ARGS}
COMMENT "Analyzing with PVS-Studio"
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
DEPENDS "${PVS_STUDIO_SUPPRESS_BASE}" "${PVS_STUDIO_DEPENDS}"
OUTPUT "${COMPILE_COMMANDS_LOG}"
COMMAND "${PVS_STUDIO_BIN}" analyze -i
--output-file "${COMPILE_COMMANDS_LOG}.always"
${PVS_STUDIO_ARGS}
COMMENT "Analyzing with PVS-Studio"
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
DEPENDS "${PVS_STUDIO_SUPPRESS_BASE}" "${PVS_STUDIO_DEPENDS}"
)
list(APPEND PVS_STUDIO_PLOGS_LOGS "${COMPILE_COMMANDS_LOG}.always")
list(APPEND PVS_STUDIO_PLOGS_DEPENDENCIES "${COMPILE_COMMANDS_LOG}")
Expand All @@ -519,13 +526,13 @@ function (pvs_studio_add_target)
endif ()
set(converter_no_help "")
if (PVS_STUDIO_HIDE_HELP)
set(converter_no_help "--noHelpMessages")
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}" ${converter_no_help} -t "${PVS_STUDIO_FORMAT}" "${PVS_STUDIO_LOG}.pvs.raw" -o "${PVS_STUDIO_LOG}" -a "${PVS_STUDIO_MODE}"
)
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}" ${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")
endif()
Expand All @@ -540,10 +547,10 @@ function (pvs_studio_add_target)
endif ()

add_custom_command(OUTPUT "${PVS_STUDIO_LOG}"
${COMMANDS}
COMMENT "${COMMENT}"
DEPENDS ${PVS_STUDIO_PLOGS} ${PVS_STUDIO_PLOGS_DEPENDENCIES}
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}")
${COMMANDS}
COMMENT "${COMMENT}"
DEPENDS ${PVS_STUDIO_PLOGS} ${PVS_STUDIO_PLOGS_DEPENDENCIES}
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}")

if (PVS_STUDIO_ALL)
set(ALL "ALL")
Expand All @@ -561,9 +568,9 @@ function (pvs_studio_add_target)
set(COMMANDS "")
endif ()

add_custom_target("${PVS_STUDIO_TARGET}" ${ALL} ${COMMANDS}
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
DEPENDS ${PVS_STUDIO_DEPENDS} "${PVS_STUDIO_LOG}")
add_custom_target("${PVS_STUDIO_TARGET}" ${ALL} ${COMMANDS}
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
DEPENDS ${PVS_STUDIO_DEPENDS} "${PVS_STUDIO_LOG}")

# A workaround to add implicit dependencies of source files from include directories
set_target_properties("${PVS_STUDIO_TARGET}" PROPERTIES INCLUDE_DIRECTORIES "${inc_path}")
Expand Down
4 changes: 2 additions & 2 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@ Variant: <mark>VARIANT SHOULD BE HERE</mark>

### Compilation

<mark>HOW TO COMPILE YOUR PROGRAM? (RECOMMENDED: ./comile.sh)</mark>
<mark>HOW TO COMPILE YOUR PROGRAM? (RECOMMENDED: ./compile.sh)</mark>

### Installation

<mark>DESCRIBE THE INSTALLATION PROCESS (USE ./dependencies FOLDER)</mark>

<mark>Note: For Python scripts, You must add `requirenments.txt`
<mark>Note: For Python scripts, You must add `requirements.txt`
file and add your env to the `.gitignore` file!</mark>

### Usage
Expand Down
Loading