diff options
author | Lukas Rusak <lorusak@gmail.com> | 2021-12-31 11:24:16 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-12-31 11:24:16 -0800 |
commit | 8734320bc1785a6e23efedeb8c2040f5076bc0ce (patch) | |
tree | 187e6e957acd37bb60f2d13f799045d5989418b4 | |
parent | 5b380ce240c1e8f8b29571d5b316a20ecd875647 (diff) | |
parent | b93c915cfd875c6c0cdb53385a7eb19ab02b9bb8 (diff) |
Merge pull request #17820 from lrusak/compiler-warnings
[cmake] add targets for cppcheck and clang-tidy
-rw-r--r-- | CMakeLists.txt | 6 | ||||
-rw-r--r-- | cmake/scripts/common/Macros.cmake | 4 | ||||
-rw-r--r-- | cmake/scripts/common/ProjectMacros.cmake | 33 | ||||
-rw-r--r-- | cmake/scripts/common/StaticAnalysis.cmake | 41 | ||||
-rwxr-xr-x | cmake/scripts/linux/clang-check-test.sh.in | 24 | ||||
-rwxr-xr-x | cmake/scripts/linux/cppcheck-test.sh.in | 28 |
6 files changed, 43 insertions, 93 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 3abd1b6a63..d0b08b8551 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -274,7 +274,6 @@ add_compile_options(${ARCH_DEFINES} "${SYSTEM_DEFINES}" ${DEP_DEFINES} ${PATH_DE set(core_DEPENDS "" CACHE STRING "" FORCE) set(test_archives "" CACHE STRING "" FORCE) set(test_sources "" CACHE STRING "" FORCE) -set(sca_sources "" CACHE STRING "" FORCE) mark_as_advanced(core_DEPENDS) mark_as_advanced(test_archives) mark_as_advanced(test_sources) @@ -405,9 +404,6 @@ if(CORE_HOST_IS_TARGET AND ENABLE_TESTING) # Enable unit-test related targets enable_testing() gtest_add_tests(${APP_NAME_LC}-test "" ${test_sources}) - if(NOT WIN32) - sca_add_tests() - endif() add_custom_target(check ${CMAKE_CTEST_COMMAND} WORKING_DIRECTORY ${PROJECT_BINARY_DIR}) add_dependencies(check ${APP_NAME_LC}-test) @@ -426,6 +422,8 @@ if(CORE_HOST_IS_TARGET AND ENABLE_TESTING) -DCMAKE_BINARY_DIR=${CMAKE_BINARY_DIR}) set_target_properties(check-commits PROPERTIES FOLDER "Build Utilities") + include(${CMAKE_SOURCE_DIR}/cmake/scripts/common/StaticAnalysis.cmake) + # code coverage if(CMAKE_BUILD_TYPE STREQUAL Coverage) if(EXISTS ${CMAKE_SOURCE_DIR}/cmake/scripts/${CORE_SYSTEM_NAME}/CodeCoverage.cmake) diff --git a/cmake/scripts/common/Macros.cmake b/cmake/scripts/common/Macros.cmake index 27d7d40de7..4bbb03bf95 100644 --- a/cmake/scripts/common/Macros.cmake +++ b/cmake/scripts/common/Macros.cmake @@ -93,10 +93,6 @@ function(core_add_library name) target_sources(lib${APP_NAME_LC} PRIVATE ${FILES}) set(CORE_LIBRARY lib${APP_NAME_LC} PARENT_SCOPE) endif() - foreach(src ${SOURCES}) - list(APPEND sca_sources ${CMAKE_CURRENT_SOURCE_DIR}/${src}) - endforeach() - set(sca_sources ${sca_sources} CACHE STRING "" FORCE) endfunction() # Add a test library, and add sources to list for gtest integration macros diff --git a/cmake/scripts/common/ProjectMacros.cmake b/cmake/scripts/common/ProjectMacros.cmake index 67920c5f4d..3a1910caa6 100644 --- a/cmake/scripts/common/ProjectMacros.cmake +++ b/cmake/scripts/common/ProjectMacros.cmake @@ -75,39 +75,6 @@ function(GTEST_ADD_TESTS executable extra_args) endforeach() endfunction() -function(sca_add_tests) - find_program(CLANGCHECK_COMMAND clang-check) - find_program(CPPCHECK_EXECUTABLE cppcheck) - if(CLANGCHECK_COMMAND AND CMAKE_EXPORT_COMPILE_COMMANDS) - configure_file(${PROJECT_SOURCE_DIR}/cmake/scripts/linux/clang-check-test.sh.in - ${CORE_BUILD_DIR}/clang-check-test.sh) - endif() - if(CPPCHECK_EXECUTABLE) - configure_file(${PROJECT_SOURCE_DIR}/cmake/scripts/linux/cppcheck-test.sh.in - ${CORE_BUILD_DIR}/cppcheck-test.sh) - set(CPPCHECK_INCLUDES) - foreach(inc ${INCLUDES}) - list(APPEND CPPCHECK_INCLUDES -I ${inc}) - endforeach() - endif() - foreach(src ${sca_sources}) - file(RELATIVE_PATH name ${PROJECT_SOURCE_DIR} ${src}) - get_filename_component(EXT ${src} EXT) - if(EXT STREQUAL .cpp) - if(CLANGCHECK_COMMAND AND CMAKE_EXPORT_COMPILE_COMMANDS) - add_test(NAME clang-check+${name} - COMMAND ${CORE_BUILD_DIR}/clang-check-test.sh ${CLANGCHECK_COMMAND} ${src} - CONFIGURATIONS analyze clang-check) - endif() - if(CPPCHECK_EXECUTABLE) - add_test(NAME cppcheck+${name} - COMMAND ${CORE_BUILD_DIR}/cppcheck-test.sh ${CPPCHECK_EXECUTABLE} ${src} ${CPPCHECK_INCLUDES} - CONFIGURATIONS analyze cppcheck) - endif() - endif() - endforeach() -endfunction() - function(whole_archive output) if(CMAKE_CXX_COMPILER_ID STREQUAL GNU OR CMAKE_CXX_COMPILER_ID STREQUAL Clang) set(${output} -Wl,--whole-archive ${ARGN} -Wl,--no-whole-archive PARENT_SCOPE) diff --git a/cmake/scripts/common/StaticAnalysis.cmake b/cmake/scripts/common/StaticAnalysis.cmake new file mode 100644 index 0000000000..c776961ac8 --- /dev/null +++ b/cmake/scripts/common/StaticAnalysis.cmake @@ -0,0 +1,41 @@ +include(ProcessorCount) +ProcessorCount(CPU_CORES) + +find_program(CPPCHECK_EXECUTABLE cppcheck) + +if(CPPCHECK_EXECUTABLE) + add_custom_target(analyze-cppcheck + DEPENDS ${APP_NAME_LC} ${APP_NAME_LC}-test + COMMAND ${CPPCHECK_EXECUTABLE} + --template="${CMAKE_SOURCE_DIR}/xbmc/\{file\}\(\{line\}\)\: \{severity\} \(\{id\}\): \{message\}" + -j${CPU_CORES} + --project=${CMAKE_BINARY_DIR}/compile_commands.json + --std=c++${CMAKE_CXX_STANDARD} + --enable=all + --verbose + --quiet + --xml + --xml-version=2 + --language=c++ + --output-file=${CMAKE_BINARY_DIR}/cppcheck-result.xml + xbmc + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + COMMENT "Static code analysis using cppcheck") +endif() + +find_program(CLANG_TIDY_EXECUTABLE NAMES clang-tidy) +find_program(RUN_CLANG_TIDY NAMES run-clang-tidy.py run-clang-tidy + PATHS /usr/share/clang /usr/bin) + +if(RUN_CLANG_TIDY AND CLANG_TIDY_EXECUTABLE) + add_custom_target(analyze-clang-tidy + DEPENDS ${APP_NAME_LC} ${APP_NAME_LC}-test + COMMAND ${RUN_CLANG_TIDY} + -j${CPU_CORES} + -clang-tidy-binary=${CLANG_TIDY_EXECUTABLE} + -p=${CMAKE_BINARY_DIR} + -header-filter='${CMAKE_BINARY_DIR}/.*/include/.*' + | tee ${CMAKE_BINARY_DIR}/clangtidy-result.xml + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + COMMENT "Static code analysis using clang-tidy") +endif() diff --git a/cmake/scripts/linux/clang-check-test.sh.in b/cmake/scripts/linux/clang-check-test.sh.in deleted file mode 100755 index 12e9a0e62d..0000000000 --- a/cmake/scripts/linux/clang-check-test.sh.in +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash - -# This script performs a single analysis using clang-check -# It is used by the 'make test' target in the buildsystems -# Usually you should use 'ctest -C clang-check' rather than calling this script directly -# -# Parameters: $1 = Application binary -# $2 = Source file to process - -clangcheck_cmd=$1 -source_file=$2 - -tmpfil=`mktemp` -$clangcheck_cmd -p @CMAKE_BINARY_DIR@ -analyze $source_file &> $tmpfil -nerr=`cat $tmpfil | grep -v "warning: .*: 'linker' input unused" | wc -l` -if test $nerr -gt 0 -then - cat $tmpfil - rm $tmpfil - exit 1 -fi - -rm $tmpfil -exit 0 diff --git a/cmake/scripts/linux/cppcheck-test.sh.in b/cmake/scripts/linux/cppcheck-test.sh.in deleted file mode 100755 index 08cb672636..0000000000 --- a/cmake/scripts/linux/cppcheck-test.sh.in +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash - -# This script performs a single analysis using cppcheck -# It is used by the 'make test' target in the buildsystems -# Usually you should use 'ctest -C cppcheck' rather than calling this script directly -# -# Parameters: $1 = Application binary -# $2 = Source file to process -# $3..$N = include path parameters (-I dir1 -I dir2 ...) - -cppcheck_cmd=$1 -source_file=$2 -shift 2 - -tmpfil=`mktemp` -$cppcheck_cmd $@ --force --enable=all --suppress=unusedFunction $source_file &> $tmpfil -nmatch=`cat $tmpfil | grep "\[.*\]" | wc -l` -nnone=`cat $tmpfil | grep "\[\\*]" | wc -l` -let "nval=$nmatch-$nnone" -if test $nval -gt 0 -then - cat $tmpfil - rm $tmpfil - exit 1 -fi - -rm $tmpfil -exit 0 |