From d1685694edeaababe9ecb29380a0e68e25106f09 Mon Sep 17 00:00:00 2001 From: Andrey Astafyev Date: Sun, 19 Apr 2020 10:37:01 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D1=91=D0=BD=20?= =?UTF-8?q?=D0=B0=D0=BB=D0=B3=D0=BE=D1=80=D0=B8=D1=82=D0=BC=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D0=BF=D1=80=D0=B8=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=BF=D1=80=D0=B0=D0=B2=D0=BE=D0=BA=20clazy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMLibCodeAnalysisClazy.cmake | 158 ++++++++++++++++++++--------------- 1 file changed, 91 insertions(+), 67 deletions(-) diff --git a/CMLibCodeAnalysisClazy.cmake b/CMLibCodeAnalysisClazy.cmake index f992dc0..16a03f8 100644 --- a/CMLibCodeAnalysisClazy.cmake +++ b/CMLibCodeAnalysisClazy.cmake @@ -1,81 +1,105 @@ +find_program( + CLANG_APPLY_REPLACEMENTS_EXE + NAMES + clang-apply-replacements-10 + clang-apply-replacements-9 + clang-apply-replacements) + +find_program(CLAZY_EXE NAMES clazy-standalone) + +if(CLAZY_EXE AND CLANG_APPLY_REPLACEMENTS_EXE) + option(CMLIB_CLAZY_FIX "Perform fixes for Clazy" OFF) +endif() + function(add_clazy_check target) - find_program(CLAZY_EXE NAMES clazy-standalone) + set(options) + set(oneValueArgs CHECKS) + set(multiValueArgs) + + cmake_parse_arguments(_CLAZY "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + set(_sources ${ARGN}) - set(_clazy_checks - "container-inside-loop,heap-allocated-small-trivial-type,inefficient-qlist,isempty-vs-count,qt-keywords,unneeded-cast" - ) - set(_args -checks=level2,${_clazy_checks} -extra-arg="-Wno-unknown-warning-option" -export-fixes=clazy-fixes-file.yaml) + if(NOT _CLAZY_CHECKS) + set(_CLAZY_CHECKS "level2,container-inside-loop,heap-allocated-small-trivial-type,inefficient-qlist,isempty-vs-count,qt-keywords,unneeded-cast") + endif() + set(_args -checks=${_CLAZY_CHECKS} -extra-arg="-Wno-unknown-warning-option" -export-fixes=clazy-fixes-file.yaml) if(CLAZY_EXE) if(NOT TARGET clazy-check) add_custom_target(clazy-check) endif() - add_custom_target(clazy-check-${target} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + if(CMLIB_CLAZY_FIX) + add_custom_target(clazy-check-${target} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMAND ${CLAZY_EXE} ${_args} -p ${CMAKE_BINARY_DIR} ${_sources} + COMMAND ${CLANG_APPLY_REPLACEMENTS_EXE} ${CMAKE_BINARY_DIR}) + else() + add_custom_target(clazy-check-${target} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ${CLAZY_EXE} ${_args} -p ${CMAKE_BINARY_DIR} ${_sources}) + endif() add_dependencies(clazy-check-${target} ${target}) add_dependencies(clazy-check clazy-check-${target}) - option(CMLIB_CLAZY_FIX_QT_KEYWORDS "Fix Qt keywords" OFF) - option(CMLIB_CLAZY_FIX_RANGE_LOOP_ADD_REF "Fix range loop add reference" OFF) - option(CMLIB_CLAZY_FIX_RANGE_LOOP_ADD_QASCONST "Fix range loop add qAsConst" OFF) - option(CMLIB_CLAZY_FIX_FUNCTION_ARGS_BY_REF "Fix function args by reference" OFF) - option(CMLIB_CLAZY_FIX_OLD_STYLE_CONNECT "Fix old style connect" OFF) - option(CMLIB_CLAZY_FIX_STRING_ALLOCATIONS "Fix string allocations" OFF) - - if(CMLIB_CLAZY_FIX_QT_KEYWORDS OR - CMLIB_CLAZY_FIX_RANGE_LOOP_ADD_REF OR - CMLIB_CLAZY_FIX_RANGE_LOOP_ADD_QASCONST OR - CMLIB_CLAZY_FIX_FUNCTION_ARGS_BY_REF OR - CMLIB_CLAZY_FIX_OLD_STYLE_CONNECT OR - CMLIB_CLAZY_FIX_STRING_ALLOCATIONS) - if(NOT TARGET clazy-fix) - add_custom_target(clazy-fix) - endif() - if(CMLIB_CLAZY_FIX_QT_KEYWORDS) - add_custom_target(clazy-fix-qt-keywords-${target} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - COMMAND ${CMAKE_COMMAND} -E env "CLAZY_FIXIT=fix-qt-keywords" - ${CLAZY_EXE} ${_args} -p ${CMAKE_BINARY_DIR} ${_sources}) - add_dependencies(clazy-fix-qt-keywords-${target} ${target}) - add_dependencies(clazy-fix clazy-fix-qt-keywords-${target}) - endif() - if(CMLIB_CLAZY_FIX_RANGE_LOOP_ADD_REF) - add_custom_target(clazy-fix-range-loop-add-ref-${target} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - COMMAND ${CMAKE_COMMAND} -E env "CLAZY_FIXIT=fix-range-loop-add-ref" - ${CLAZY_EXE} ${_args} -p ${CMAKE_BINARY_DIR} ${_sources}) - add_dependencies(clazy-fix-range-loop-add-ref-${target} ${target}) - add_dependencies(clazy-fix clazy-fix-range-loop-add-ref-${target}) - endif() - if(CMLIB_CLAZY_FIX_RANGE_LOOP_ADD_QASCONST) - add_custom_target(clazy-fix-range-loop-add-qasconst-${target} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - COMMAND ${CMAKE_COMMAND} -E env "CLAZY_FIXIT=fix-range-loop-add-qasconst" - ${CLAZY_EXE} ${_args} -p ${CMAKE_BINARY_DIR} ${_sources}) - add_dependencies(clazy-fix-range-loop-add-qasconst-${target} ${target}) - add_dependencies(clazy-fix clazy-fix-range-loop-add-qasconst-${target}) - endif() - if(CMLIB_CLAZY_FIX_FUNCTION_ARGS_BY_REF) - add_custom_target(clazy-fix-function-args-by-ref-${target} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - COMMAND ${CMAKE_COMMAND} -E env "CLAZY_FIXIT=fix-function-args-by-ref" - ${CLAZY_EXE} ${_args} -p ${CMAKE_BINARY_DIR} ${_sources}) - add_dependencies(clazy-fix-function-args-by-ref-${target} ${target}) - add_dependencies(clazy-fix clazy-fix-function-args-by-ref-${target}) - endif() - if(CMLIB_CLAZY_FIX_OLD_STYLE_CONNECT) - add_custom_target(clazy-fix-old-style-connect-${target} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - COMMAND ${CMAKE_COMMAND} -E env "CLAZY_FIXIT=fix-old-style-connect" - ${CLAZY_EXE} ${_args} -p ${CMAKE_BINARY_DIR} ${_sources}) - add_dependencies(clazy-fix-old-style-connect-${target} ${target}) - add_dependencies(clazy-fix clazy-fix-old-style-connect-${target}) - endif() - # "fix-qlatin1string-allocations", "qstring-allocations"); - # "fix-fromLatin1_fromUtf8-allocations", "qstring-allocations"); - # "fix-fromCharPtrAllocations", "qstring-allocations"); - if(CMLIB_CLAZY_FIX_STRING_ALLOCATIONS) - add_custom_target(clazy-fix-string-${target} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - COMMAND ${CMAKE_COMMAND} -E env "CLAZY_FIXIT=fix-qlatin1string-allocations" - ${CLAZY_EXE} ${_args} -p ${CMAKE_BINARY_DIR} ${_sources}) - add_dependencies(clazy-fix-string-${target} ${target}) - add_dependencies(clazy-fix clazy-fix-string-${target}) - endif() +# option(CMLIB_CLAZY_FIX_QT_KEYWORDS "Fix Qt keywords" OFF) +# option(CMLIB_CLAZY_FIX_RANGE_LOOP_ADD_REF "Fix range loop add reference" OFF) +# option(CMLIB_CLAZY_FIX_RANGE_LOOP_ADD_QASCONST "Fix range loop add qAsConst" OFF) +# option(CMLIB_CLAZY_FIX_FUNCTION_ARGS_BY_REF "Fix function args by reference" OFF) +# option(CMLIB_CLAZY_FIX_OLD_STYLE_CONNECT "Fix old style connect" OFF) +# option(CMLIB_CLAZY_FIX_STRING_ALLOCATIONS "Fix string allocations" OFF) +# +# if(CMLIB_CLAZY_FIX_QT_KEYWORDS OR +# CMLIB_CLAZY_FIX_RANGE_LOOP_ADD_REF OR +# CMLIB_CLAZY_FIX_RANGE_LOOP_ADD_QASCONST OR +# CMLIB_CLAZY_FIX_FUNCTION_ARGS_BY_REF OR +# CMLIB_CLAZY_FIX_OLD_STYLE_CONNECT OR +# CMLIB_CLAZY_FIX_STRING_ALLOCATIONS) +# if(NOT TARGET clazy-fix) +# add_custom_target(clazy-fix) +# endif() +# if(CMLIB_CLAZY_FIX_QT_KEYWORDS) +# add_custom_target(clazy-fix-qt-keywords-${target} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} +# COMMAND ${CMAKE_COMMAND} -E env "CLAZY_FIXIT=fix-qt-keywords" +# ${CLAZY_EXE} ${_args} -p ${CMAKE_BINARY_DIR} ${_sources}) +# add_dependencies(clazy-fix-qt-keywords-${target} ${target}) +# add_dependencies(clazy-fix clazy-fix-qt-keywords-${target}) +# endif() +# if(CMLIB_CLAZY_FIX_RANGE_LOOP_ADD_REF) +# add_custom_target(clazy-fix-range-loop-add-ref-${target} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} +# COMMAND ${CMAKE_COMMAND} -E env "CLAZY_FIXIT=fix-range-loop-add-ref" +# ${CLAZY_EXE} ${_args} -p ${CMAKE_BINARY_DIR} ${_sources}) +# add_dependencies(clazy-fix-range-loop-add-ref-${target} ${target}) +# add_dependencies(clazy-fix clazy-fix-range-loop-add-ref-${target}) +# endif() +# if(CMLIB_CLAZY_FIX_RANGE_LOOP_ADD_QASCONST) +# add_custom_target(clazy-fix-range-loop-add-qasconst-${target} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} +# COMMAND ${CMAKE_COMMAND} -E env "CLAZY_FIXIT=fix-range-loop-add-qasconst" +# ${CLAZY_EXE} ${_args} -p ${CMAKE_BINARY_DIR} ${_sources}) +# add_dependencies(clazy-fix-range-loop-add-qasconst-${target} ${target}) +# add_dependencies(clazy-fix clazy-fix-range-loop-add-qasconst-${target}) +# endif() +# if(CMLIB_CLAZY_FIX_FUNCTION_ARGS_BY_REF) +# add_custom_target(clazy-fix-function-args-by-ref-${target} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} +# COMMAND ${CMAKE_COMMAND} -E env "CLAZY_FIXIT=fix-function-args-by-ref" +# ${CLAZY_EXE} ${_args} -p ${CMAKE_BINARY_DIR} ${_sources}) +# add_dependencies(clazy-fix-function-args-by-ref-${target} ${target}) +# add_dependencies(clazy-fix clazy-fix-function-args-by-ref-${target}) +# endif() +# if(CMLIB_CLAZY_FIX_OLD_STYLE_CONNECT) +# add_custom_target(clazy-fix-old-style-connect-${target} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} +# COMMAND ${CMAKE_COMMAND} -E env "CLAZY_FIXIT=fix-old-style-connect" +# ${CLAZY_EXE} ${_args} -p ${CMAKE_BINARY_DIR} ${_sources}) +# add_dependencies(clazy-fix-old-style-connect-${target} ${target}) +# add_dependencies(clazy-fix clazy-fix-old-style-connect-${target}) +# endif() +# # "fix-qlatin1string-allocations", "qstring-allocations"); +# # "fix-fromLatin1_fromUtf8-allocations", "qstring-allocations"); +# # "fix-fromCharPtrAllocations", "qstring-allocations"); +# if(CMLIB_CLAZY_FIX_STRING_ALLOCATIONS) +# add_custom_target(clazy-fix-string-${target} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} +# COMMAND ${CMAKE_COMMAND} -E env "CLAZY_FIXIT=fix-qlatin1string-allocations" +# ${CLAZY_EXE} ${_args} -p ${CMAKE_BINARY_DIR} ${_sources}) +# add_dependencies(clazy-fix-string-${target} ${target}) +# add_dependencies(clazy-fix clazy-fix-string-${target}) +# endif() endif() else() message(STATUS "CMLIB warning:")