33#
44# Version 12
55
6- cmake_minimum_required (VERSION 2.8.12 )
6+ cmake_minimum_required (VERSION 3.16 )
77cmake_policy (SET CMP0054 NEW )
88
99if (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.\n Stdout:\n ${output} \n Stderr:\n ${error} \n " )
4242 endif ()
43-
43+
4444 return ()
4545endif ()
4646
@@ -124,7 +124,7 @@ endfunction ()
124124function (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} " )
0 commit comments