2.0.2
This commit is contained in:
14
MyxxCMake/lib/AnalyzeApplyReplacements.cmake
Normal file
14
MyxxCMake/lib/AnalyzeApplyReplacements.cmake
Normal file
@ -0,0 +1,14 @@
|
||||
include_guard(GLOBAL)
|
||||
|
||||
if(NOT CLANG_APPLY_REPLACEMENTS_NAME)
|
||||
set(CLANG_APPLY_REPLACEMENTS_NAMES clang-apply-replacements)
|
||||
foreach(V RANGE 9 18)
|
||||
list(INSERT CLANG_APPLY_REPLACEMENTS_NAMES 0 "clang-apply-replacements-${V}")
|
||||
endforeach()
|
||||
unset(V)
|
||||
else()
|
||||
set(CLANG_APPLY_REPLACEMENTS_NAMES ${CLANG_APPLY_REPLACEMENTS_NAME})
|
||||
endif()
|
||||
|
||||
find_program(CLANG_APPLY_REPLACEMENTS_EXE NAMES ${CLANG_APPLY_REPLACEMENTS_NAMES})
|
||||
unset(CLANG_APPLY_REPLACEMENTS_NAMES)
|
52
MyxxCMake/lib/AnalyzeClangCheck.cmake
Normal file
52
MyxxCMake/lib/AnalyzeClangCheck.cmake
Normal file
@ -0,0 +1,52 @@
|
||||
include_guard(GLOBAL)
|
||||
|
||||
if(NOT CLANG_CHECK_NAME)
|
||||
set(CLANG_CHECK_NAMES clang-check)
|
||||
foreach(V RANGE 9 18)
|
||||
list(INSERT CLANG_CHECK_NAMES 0 "clang-check-${V}")
|
||||
endforeach()
|
||||
unset(V)
|
||||
else()
|
||||
set(CLANG_CHECK_NAMES ${CLANG_CHECK_NAME})
|
||||
endif()
|
||||
|
||||
find_program(CLANG_CHECK_EXE NAMES ${CLANG_CHECK_NAMES})
|
||||
unset(CLANG_CHECK_NAMES)
|
||||
|
||||
function(myxx_analyze_clang_check target)
|
||||
if(NOT CLANG_CHECK_EXE)
|
||||
message(STATUS "MyxCMake: Clang Check analyzer is not found")
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(TARGET ${target}-analyze-clang-check)
|
||||
message(STATUS "MyxxCMake: target ${target}-analyze-clang-check already exists")
|
||||
return()
|
||||
endif()
|
||||
|
||||
set(options FIX)
|
||||
set(oneValueArgs)
|
||||
set(multiValueArgs EXTRA_ARGS)
|
||||
cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
||||
|
||||
set(args --analyze --extra-arg=-Wno-unknown-warning-option ${EXTRA_ARGS})
|
||||
get_target_property(sources ${target} SOURCES)
|
||||
foreach(iter ${sources})
|
||||
string(FIND ${iter} ${CMAKE_BINARY_DIR} pos)
|
||||
if(pos EQUAL -1)
|
||||
list(APPEND srcs ${iter})
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
if(ARG_FIX)
|
||||
list(APPEND args "--fixit")
|
||||
endif()
|
||||
if(NOT TARGET myxx-analyze-clang-check)
|
||||
add_custom_target(myxx-analyze-clang-check)
|
||||
endif()
|
||||
add_custom_target(${target}-analyze-clang-check
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||
COMMAND ${CLANG_CHECK_EXE} ${args} -p ${CMAKE_BINARY_DIR} ${srcs})
|
||||
add_dependencies(${target}-analyze-clang-check ${target})
|
||||
add_dependencies(myxx-analyze-clang-check ${target}-analyze-clang-check)
|
||||
endfunction()
|
56
MyxxCMake/lib/AnalyzeClazy.cmake
Normal file
56
MyxxCMake/lib/AnalyzeClazy.cmake
Normal file
@ -0,0 +1,56 @@
|
||||
include_guard(GLOBAL)
|
||||
|
||||
find_program(CLAZY_EXE NAMES clazy-standalone)
|
||||
|
||||
if(CLAZY_EXE AND CLANG_APPLY_REPLACEMENTS_EXE)
|
||||
option(MYX_CMAKE_CLAZY_FIX "MyxCMake: perform fixes for Clazy" OFF)
|
||||
endif()
|
||||
|
||||
function(myxx_analyze_clazy target)
|
||||
if(NOT CLAZY_EXE)
|
||||
message(STATUS "MyxCMake: Clazy standalone analyzer is not found")
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(TARGET ${target}-analyze-clazy)
|
||||
message(STATUS "MyxxCMake: target ${target}-analyze-clazy already exists")
|
||||
return()
|
||||
endif()
|
||||
|
||||
set(options FIX)
|
||||
set(oneValueArgs CHECKS)
|
||||
set(multiValueArgs)
|
||||
cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
||||
|
||||
if(NOT ARG_CHECKS)
|
||||
set(ARG_CHECKS "level2,container-inside-loop,heap-allocated-small-trivial-type,inefficient-qlist,isempty-vs-count,qt-keywords,unneeded-cast")
|
||||
endif()
|
||||
|
||||
set(args -checks=${ARG_CHECKS}
|
||||
-extra-arg=-Wno-unknown-warning-option
|
||||
-export-fixes=clazy-fixes-file.yaml)
|
||||
get_target_property(sources ${target} SOURCES)
|
||||
foreach(iter ${sources})
|
||||
string(FIND ${iter} ${CMAKE_BINARY_DIR} pos)
|
||||
if(pos EQUAL -1)
|
||||
list(APPEND srcs ${iter})
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
if(NOT TARGET myxx-analyze-clazy)
|
||||
add_custom_target(myxx-analyze-clazy)
|
||||
endif()
|
||||
|
||||
if(ARG_FIX)
|
||||
add_custom_target(${target}-analyze-clazy
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||
COMMAND ${CLAZY_EXE} ${args} -p ${CMAKE_BINARY_DIR} ${srcs}
|
||||
COMMAND ${CLANG_APPLY_REPLACEMENTS_EXE} ${CMAKE_BINARY_DIR})
|
||||
else()
|
||||
add_custom_target(${target}-analyze-clazy
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||
COMMAND ${CLAZY_EXE} ${args} -p ${CMAKE_BINARY_DIR} ${srcs})
|
||||
endif()
|
||||
add_dependencies(${target}-analyze-clazy ${target})
|
||||
add_dependencies(myxx-analyze-clazy ${target}-analyze-clazy)
|
||||
endfunction()
|
54
MyxxCMake/lib/AnalyzePvsStudio.cmake
Normal file
54
MyxxCMake/lib/AnalyzePvsStudio.cmake
Normal file
@ -0,0 +1,54 @@
|
||||
find_program(PVS_STUDIO_ANALYZER_EXE pvs-studio-analyzer)
|
||||
find_program(PVS_STUDIO_CONVERTER_EXE plog-converter)
|
||||
|
||||
function(myxx_analyze_pvs_studio target)
|
||||
if(PVS_STUDIO_ANALYZER_EXE)
|
||||
message(STATUS "MyxxCMake: pvs-studio-analyzer not found.")
|
||||
return()
|
||||
endif()
|
||||
if(PVS_STUDIO_CONVERTER_EXE)
|
||||
message(STATUS "MyxxCMake: pvs-studio-converter not found.")
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(TARGET myx-cmake-analyze-pvs-studio)
|
||||
return()
|
||||
endif()
|
||||
|
||||
set(options)
|
||||
set(oneValueArgs CHECKS)
|
||||
set(multiValueArgs)
|
||||
cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
||||
|
||||
set(PVS_STUDIO_HEADER "${CMAKE_BINARY_DIR}/include/myx_cmake_pvs_studio_header_p.hpp")
|
||||
file(WRITE ${PVS_STUDIO_HEADER}
|
||||
"#ifndef MYX_CMAKE_PVS_STUDIO_HEADER_HPP_\n"
|
||||
"#define MYX_CMAKE_PVS_STUDIO_HEADER_HPP_\n"
|
||||
"#pragma once\n"
|
||||
"//-V813_MINSIZE=33\n"
|
||||
"#endif // MYX_CMAKE_PVS_STUDIO_HEADER_HPP_\n")
|
||||
|
||||
pvs_studio_add_target(TARGET myx-cmake-analyze-pvs-studio
|
||||
LOG
|
||||
COMPILE_COMMANDS
|
||||
HIDE_HELP
|
||||
OUTPUT FORMAT errorfile
|
||||
ARGS --exclude-path ${CMAKE_CURRENT_BINARY_DIR}/${target}_autogen
|
||||
MODE GA:1,2,3;64:1;OP:1,2;CS:1,2)
|
||||
|
||||
get_target_property(__target_type ${target} TYPE)
|
||||
if(${__target_type} STREQUAL INTERFACE_LIBRARY)
|
||||
set(__target_type INTERFACE)
|
||||
else()
|
||||
set(__target_type PRIVATE)
|
||||
endif()
|
||||
if(MSVC)
|
||||
target_compile_options(${target} BEFORE ${__target_type} /FI ${PVS_STUDIO_HEADER})
|
||||
else() # GCC/Clang
|
||||
target_compile_options(${target} BEFORE ${__target_type} -include ${PVS_STUDIO_HEADER})
|
||||
endif()
|
||||
|
||||
add_dependencies(myx-cmake-analyze-pvs-studio ${target})
|
||||
get_target_property(__target_source_dir "${target}" SOURCE_DIR)
|
||||
pvs_studio_analyze_target("${target}" "${__target_source_dir}")
|
||||
endfunction()
|
46
MyxxCMake/lib/Coverage.cmake
Normal file
46
MyxxCMake/lib/Coverage.cmake
Normal file
@ -0,0 +1,46 @@
|
||||
option(MYXX_CODE_COVERAGE "MyxxCMake: enable code coverage" OFF)
|
||||
|
||||
if(MYXX_CODE_COVERAGE)
|
||||
find_program(LCOV_EXE NAMES lcov)
|
||||
find_program(GENHTML_EXE NAMES genhtml)
|
||||
endif()
|
||||
|
||||
function(myxx_code_coverage target)
|
||||
if(NOT MYXX_CODE_COVERAGE)
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(CMAKE_CXX_COMPILER_IS_GCC)
|
||||
target_compile_options(${target} PUBLIC "--coverage")
|
||||
set_property(
|
||||
TARGET ${target}
|
||||
APPEND_STRING
|
||||
PROPERTY LINK_FLAGS " --coverage")
|
||||
endif()
|
||||
if(CMAKE_CXX_COMPILER_IS_CLANG)
|
||||
target_compile_options(${target} PUBLIC "-fprofile-instr-generate -fcoverage-mapping")
|
||||
set_property(
|
||||
TARGET ${target}
|
||||
APPEND_STRING
|
||||
PROPERTY LINK_FLAGS " --coverage")
|
||||
endif()
|
||||
|
||||
if(LCOV_EXE)
|
||||
add_custom_target(${target}-coverage
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||
COMMAND ${LCOV_EXE} --test-name ${target} --output "${target}.lcov" --capture
|
||||
--no-external
|
||||
--base-directory ${CMAKE_SOURCE_DIR}
|
||||
--directory ${CMAKE_BINARY_DIR})
|
||||
--exclude "/usr/\\\*"
|
||||
--exclude "${CMAKE_BINARY_DIR}/\\\*"
|
||||
add_dependencies(${target}-coverage ${target})
|
||||
|
||||
if(GENHTML_EXE)
|
||||
add_custom_target(${target}-coverage-report
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||
COMMAND ${GENHTML_EXE} --output-directory "${target}-coverage-html" "${target}.lcov")
|
||||
add_dependencies(${target}-coverage-report ${target}-coverage)
|
||||
endif()
|
||||
endif()
|
||||
endfunction()
|
Reference in New Issue
Block a user