Skip to content

Commit 4e5ed73

Browse files
authored
Merge pull request #7 from amytnyk/pvs_multiple_targets
fixed pvs multiple targets issue, fixed some readme typos
2 parents 2cdbd99 + 2fdccc2 commit 4e5ed73

3 files changed

Lines changed: 61 additions & 53 deletions

File tree

cmake/PVS-Studio-conf.cmake

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@ if (ENABLE_PVS_STUDIO)
22
message("- UCU.APPS.CS: PVS Studio enabled in CMakeLists.txt")
33
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
44
include(cmake/extra/PVS-Studio.cmake)
5+
set(ANALYZED_FILES "" CACHE INTERNAL "ANALYZED_FILES")
56
foreach(TARGET ${ALL_TARGETS})
67
pvs_studio_add_target(TARGET ${TARGET}.analyze ALL
78
OUTPUT FORMAT errorfile
89
ANALYZE ${TARGET}
9-
LOG target.err)
10+
LOG target_${TARGET}.err)
1011
endforeach()
1112

1213
else ()

cmake/extra/PVS-Studio.cmake

Lines changed: 57 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
#
44
# Version 12
55

6-
cmake_minimum_required(VERSION 2.8.12)
6+
cmake_minimum_required(VERSION 3.16)
77
cmake_policy(SET CMP0054 NEW)
88

99
if (PVS_STUDIO_AS_SCRIPT)
@@ -31,16 +31,16 @@ if (PVS_STUDIO_AS_SCRIPT)
3131
endif ()
3232
endif ()
3333
endforeach ()
34-
34+
3535
execute_process(COMMAND ${PVS_STUDIO_COMMAND} ${additional_args}
36-
RESULT_VARIABLE result
37-
OUTPUT_VARIABLE output
38-
ERROR_VARIABLE error)
36+
RESULT_VARIABLE result
37+
OUTPUT_VARIABLE output
38+
ERROR_VARIABLE error)
3939

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

@@ -124,7 +124,7 @@ endfunction ()
124124
function (pvs_studio_set_target_flags TARGET CXX C)
125125
set(CXX_FLAGS "${${CXX}}")
126126
set(C_FLAGS "${${C}}")
127-
127+
128128
if (NOT MSVC)
129129
list(APPEND CXX_FLAGS "$<$<BOOL:${CMAKE_SYSROOT}>:--sysroot=${CMAKE_SYSROOT}>")
130130
list(APPEND C_FLAGS "$<$<BOOL:${CMAKE_SYSROOT}>:--sysroot=${CMAKE_SYSROOT}>")
@@ -183,9 +183,16 @@ function (pvs_studio_analyze_file SOURCE SOURCE_DIR BINARY_DIR)
183183
pvs_studio_join_path(SOURCE "${SOURCE_DIR}" "${SOURCE}")
184184

185185
set(LOG "${BINARY_DIR}/PVS-Studio/${SOURCE_RELATIVE}.plog")
186+
186187
get_filename_component(LOG "${LOG}" REALPATH)
187188
get_filename_component(PARENT_DIR "${LOG}" DIRECTORY)
188189

190+
if (${LOG} IN_LIST ANALYZED_FILES)
191+
return()
192+
endif()
193+
list(APPEND ANALYZED_FILES ${LOG})
194+
set(ANALYZED_FILES "${ANALYZED_FILES}" CACHE INTERNAL "ANALYZED_FILES")
195+
189196
if (EXISTS "${SOURCE}" AND NOT TARGET "${LOG}" AND NOT "${PVS_STUDIO_LANGUAGE}" STREQUAL "")
190197
# A workaround to support implicit dependencies for ninja generators.
191198
set(depPvsArg)
@@ -201,29 +208,29 @@ function (pvs_studio_analyze_file SOURCE SOURCE_DIR BINARY_DIR)
201208
#
202209
# It is a workaround to expand generator expressions.
203210
set(cmdline "${PVS_STUDIO_BIN}" analyze
204-
--output-file "${LOG}"
205-
--source-file "${SOURCE}"
206-
${depPvsArg}
207-
${PVS_STUDIO_ARGS}
208-
--cl-params "${PVS_STUDIO_CL_PARAMS}" "${SOURCE}")
211+
--output-file "${LOG}"
212+
--source-file "${SOURCE}"
213+
${depPvsArg}
214+
${PVS_STUDIO_ARGS}
215+
--cl-params "${PVS_STUDIO_CL_PARAMS}" "${SOURCE}")
209216

210217
string(REPLACE ";" "$<SEMICOLON>" cmdline "${cmdline}")
211218
set(pvscmd "${CMAKE_COMMAND}"
212-
-D PVS_STUDIO_AS_SCRIPT=TRUE
213-
-D "PVS_STUDIO_COMMAND=${cmdline}"
214-
-P "${PVS_STUDIO_SCRIPT}"
215-
)
219+
-D PVS_STUDIO_AS_SCRIPT=TRUE
220+
-D "PVS_STUDIO_COMMAND=${cmdline}"
221+
-P "${PVS_STUDIO_SCRIPT}"
222+
)
216223

217224
add_custom_command(OUTPUT "${LOG}"
218-
COMMAND "${CMAKE_COMMAND}" -E make_directory "${PARENT_DIR}"
219-
COMMAND "${CMAKE_COMMAND}" -E remove_directory "${LOG}"
220-
COMMAND ${pvscmd}
221-
WORKING_DIRECTORY "${BINARY_DIR}"
222-
DEPENDS "${SOURCE}" "${PVS_STUDIO_SUPPRESS_BASE}" "${PVS_STUDIO_DEPENDS}"
223-
IMPLICIT_DEPENDS "${PVS_STUDIO_LANGUAGE}" "${SOURCE}"
224-
${depCommandArg}
225-
VERBATIM
226-
COMMENT "Analyzing ${PVS_STUDIO_LANGUAGE} file ${SOURCE_RELATIVE}")
225+
COMMAND "${CMAKE_COMMAND}" -E make_directory "${PARENT_DIR}"
226+
COMMAND "${CMAKE_COMMAND}" -E remove_directory "${LOG}"
227+
COMMAND ${pvscmd}
228+
WORKING_DIRECTORY "${BINARY_DIR}"
229+
DEPENDS "${SOURCE}" "${PVS_STUDIO_SUPPRESS_BASE}" "${PVS_STUDIO_DEPENDS}"
230+
IMPLICIT_DEPENDS "${PVS_STUDIO_LANGUAGE}" "${SOURCE}"
231+
${depCommandArg}
232+
VERBATIM
233+
COMMENT "Analyzing ${PVS_STUDIO_LANGUAGE} file ${SOURCE_RELATIVE}")
227234
list(APPEND PLOGS "${LOG}")
228235
endif ()
229236
set(PVS_STUDIO_PLOGS "${PLOGS}" PARENT_SCOPE)
@@ -382,13 +389,13 @@ function (pvs_studio_add_target)
382389

383390
if ("${PVS_STUDIO_CONFIG}" STREQUAL "" AND NOT "${PVS_STUDIO_CFG_TEXT}" STREQUAL "")
384391
set(PVS_STUDIO_CONFIG "${CMAKE_BINARY_DIR}/PVS-Studio.cfg")
385-
392+
386393
set(PVS_STUDIO_CONFIG_COMMAND "${CMAKE_COMMAND}" -E echo "${PVS_STUDIO_CFG_TEXT}" > "${PVS_STUDIO_CONFIG}")
387394

388395
add_custom_command(OUTPUT "${PVS_STUDIO_CONFIG}"
389-
COMMAND ${PVS_STUDIO_CONFIG_COMMAND}
390-
WORKING_DIRECTORY "${BINARY_DIR}"
391-
COMMENT "Generating PVS-Studio.cfg")
396+
COMMAND ${PVS_STUDIO_CONFIG_COMMAND}
397+
WORKING_DIRECTORY "${BINARY_DIR}"
398+
COMMENT "Generating PVS-Studio.cfg")
392399

393400
list(APPEND PVS_STUDIO_DEPENDS "${PVS_STUDIO_CONFIG}")
394401
endif ()
@@ -408,7 +415,7 @@ function (pvs_studio_add_target)
408415
endif ()
409416

410417
list(APPEND PVS_STUDIO_ARGS --platform "${PVS_STUDIO_PLATFORM}"
411-
--preprocessor "${PVS_STUDIO_PREPROCESSOR}")
418+
--preprocessor "${PVS_STUDIO_PREPROCESSOR}")
412419

413420
if (NOT "${PVS_STUDIO_SUPPRESS_BASE}" STREQUAL "")
414421
pvs_studio_join_path(PVS_STUDIO_SUPPRESS_BASE "${CMAKE_CURRENT_SOURCE_DIR}" "${PVS_STUDIO_SUPPRESS_BASE}")
@@ -422,7 +429,7 @@ function (pvs_studio_add_target)
422429
if (NOT "${CMAKE_C_COMPILER}" STREQUAL "")
423430
list(APPEND PVS_STUDIO_ARGS --cc "${CMAKE_C_COMPILER}")
424431
endif ()
425-
432+
426433
if (PVS_STUDIO_KEEP_INTERMEDIATE_FILES)
427434
list(APPEND PVS_STUDIO_ARGS --dump-files)
428435
endif()
@@ -490,13 +497,13 @@ function (pvs_studio_add_target)
490497
message(FATAL_ERROR "You should set CMAKE_EXPORT_COMPILE_COMMANDS to TRUE")
491498
endif ()
492499
add_custom_command(
493-
OUTPUT "${COMPILE_COMMANDS_LOG}"
494-
COMMAND "${PVS_STUDIO_BIN}" analyze -i
495-
--output-file "${COMPILE_COMMANDS_LOG}.always"
496-
${PVS_STUDIO_ARGS}
497-
COMMENT "Analyzing with PVS-Studio"
498-
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
499-
DEPENDS "${PVS_STUDIO_SUPPRESS_BASE}" "${PVS_STUDIO_DEPENDS}"
500+
OUTPUT "${COMPILE_COMMANDS_LOG}"
501+
COMMAND "${PVS_STUDIO_BIN}" analyze -i
502+
--output-file "${COMPILE_COMMANDS_LOG}.always"
503+
${PVS_STUDIO_ARGS}
504+
COMMENT "Analyzing with PVS-Studio"
505+
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
506+
DEPENDS "${PVS_STUDIO_SUPPRESS_BASE}" "${PVS_STUDIO_DEPENDS}"
500507
)
501508
list(APPEND PVS_STUDIO_PLOGS_LOGS "${COMPILE_COMMANDS_LOG}.always")
502509
list(APPEND PVS_STUDIO_PLOGS_DEPENDENCIES "${COMPILE_COMMANDS_LOG}")
@@ -519,13 +526,13 @@ function (pvs_studio_add_target)
519526
endif ()
520527
set(converter_no_help "")
521528
if (PVS_STUDIO_HIDE_HELP)
522-
set(converter_no_help "--noHelpMessages")
529+
set(converter_no_help "--noHelpMessages")
523530
endif()
524531
list(APPEND COMMANDS
525-
COMMAND "${CMAKE_COMMAND}" -E remove -f "${PVS_STUDIO_LOG}.pvs.raw"
526-
COMMAND "${CMAKE_COMMAND}" -E rename "${PVS_STUDIO_LOG}" "${PVS_STUDIO_LOG}.pvs.raw"
527-
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}"
528-
)
532+
COMMAND "${CMAKE_COMMAND}" -E remove -f "${PVS_STUDIO_LOG}.pvs.raw"
533+
COMMAND "${CMAKE_COMMAND}" -E rename "${PVS_STUDIO_LOG}" "${PVS_STUDIO_LOG}.pvs.raw"
534+
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}"
535+
)
529536
if(NOT PVS_STUDIO_KEEP_COMBINED_PLOG)
530537
list(APPEND COMMANDS COMMAND "${CMAKE_COMMAND}" -E remove -f "${PVS_STUDIO_LOG}.pvs.raw")
531538
endif()
@@ -540,10 +547,10 @@ function (pvs_studio_add_target)
540547
endif ()
541548

542549
add_custom_command(OUTPUT "${PVS_STUDIO_LOG}"
543-
${COMMANDS}
544-
COMMENT "${COMMENT}"
545-
DEPENDS ${PVS_STUDIO_PLOGS} ${PVS_STUDIO_PLOGS_DEPENDENCIES}
546-
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}")
550+
${COMMANDS}
551+
COMMENT "${COMMENT}"
552+
DEPENDS ${PVS_STUDIO_PLOGS} ${PVS_STUDIO_PLOGS_DEPENDENCIES}
553+
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}")
547554

548555
if (PVS_STUDIO_ALL)
549556
set(ALL "ALL")
@@ -561,9 +568,9 @@ function (pvs_studio_add_target)
561568
set(COMMANDS "")
562569
endif ()
563570

564-
add_custom_target("${PVS_STUDIO_TARGET}" ${ALL} ${COMMANDS}
565-
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
566-
DEPENDS ${PVS_STUDIO_DEPENDS} "${PVS_STUDIO_LOG}")
571+
add_custom_target("${PVS_STUDIO_TARGET}" ${ALL} ${COMMANDS}
572+
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
573+
DEPENDS ${PVS_STUDIO_DEPENDS} "${PVS_STUDIO_LOG}")
567574

568575
# A workaround to add implicit dependencies of source files from include directories
569576
set_target_properties("${PVS_STUDIO_TARGET}" PROPERTIES INCLUDE_DIRECTORIES "${inc_path}")

readme.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ Variant: <mark>VARIANT SHOULD BE HERE</mark>
99

1010
### Compilation
1111

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

1414
### Installation
1515

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

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

2121
### Usage

0 commit comments

Comments
 (0)