mirror of
https://github.com/ceph/ceph
synced 2025-02-21 01:47:25 +00:00
Merge PR #31579 into master
* refs/pull/31579/head: cmake: add cppcheck and iwyu static analysis targets Reviewed-by: Brad Hubbard <bhubbard@redhat.com>
This commit is contained in:
commit
0e0a3853c9
@ -648,3 +648,6 @@ add_tags(ctags
|
||||
EXCLUDE_OPTS ${CTAG_EXCLUDES}
|
||||
EXCLUDES "*.js" "*.css")
|
||||
add_custom_target(tags DEPENDS ctags)
|
||||
|
||||
find_package(CppCheck)
|
||||
find_package(IWYU)
|
||||
|
30
cmake/modules/FindCppCheck.cmake
Normal file
30
cmake/modules/FindCppCheck.cmake
Normal file
@ -0,0 +1,30 @@
|
||||
unset(CPPCHECK_BIN CACHE)
|
||||
find_program(CPPCHECK_BIN cppcheck)
|
||||
|
||||
if(CPPCHECK_BIN)
|
||||
find_file(PROJECT_FILE compile_commands.json PATH .)
|
||||
if(NOT PROJECT_FILE)
|
||||
message(STATUS "Found cppcheck, but no \"compile_commands.json\" file. To enable cppcheck, set CMAKE_EXPORT_COMPILE_COMMANDS to \"ON\" and build again.")
|
||||
return()
|
||||
endif()
|
||||
|
||||
include(ProcessorCount)
|
||||
ProcessorCount(N)
|
||||
|
||||
execute_process(COMMAND cppcheck --version OUTPUT_VARIABLE CPPCHECK_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
separate_arguments(CPPCHECK_VERSION)
|
||||
list(GET CPPCHECK_VERSION 1 VERSION_NUMBER)
|
||||
if(VERSION_NUMBER VERSION_GREATER_EQUAL 1.88)
|
||||
set(CPP_STD_VERSION "c++17")
|
||||
else()
|
||||
set(CPP_STD_VERSION "c++14")
|
||||
endif()
|
||||
|
||||
add_custom_target(cppcheck
|
||||
COMMAND ${CPPCHECK_BIN} --verbose -j${N} --std=${CPP_STD_VERSION} --inline-suppr --project=${PROJECT_FILE} 2> cppcheck.txt | grep done
|
||||
)
|
||||
|
||||
message(STATUS "Found cppcheck. To perform static analysis using cppcheck, use: \"make cppcheck\". Results will be stored in \"cppcheck.txt\".")
|
||||
else()
|
||||
message(STATUS "Could not find cppcheck. To perform static analysis using cppcheck install the tool (e.g. \"yum install cppcheck\").")
|
||||
endif()
|
27
cmake/modules/FindIWYU.cmake
Normal file
27
cmake/modules/FindIWYU.cmake
Normal file
@ -0,0 +1,27 @@
|
||||
unset(IWYU_BIN CACHE)
|
||||
find_program(IWYU_BIN iwyu_tool.py)
|
||||
|
||||
if(IWYU_BIN)
|
||||
find_file(PROJECT_FILE compile_commands.json PATH .)
|
||||
if(NOT PROJECT_FILE)
|
||||
message(STATUS "Found IWYU, but no \"compile_commands.json\" file. To enable IWYU, set CMAKE_EXPORT_COMPILE_COMMANDS to \"ON\" and build again.")
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(NOT CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
||||
message(STATUS "Found IWYU, but clang++ is not used used. To enable IWYU, set CMAKE_C_COMPILER to \"clang\" and CMAKE_CXX_COMPILER to \"clang++\" and build again.")
|
||||
return()
|
||||
endif()
|
||||
|
||||
include(ProcessorCount)
|
||||
ProcessorCount(N)
|
||||
|
||||
add_custom_target(iwyu
|
||||
COMMAND echo "IWYU is analyzing includes - this may take a while..."
|
||||
COMMAND ${IWYU_BIN} -j${N} -p . > iwyu.txt
|
||||
)
|
||||
|
||||
message(STATUS "Found IWYU. To perform header analysis using IWYU, use: \"make iwyu\". Results will be stored in \"iwyu.txt\".")
|
||||
else()
|
||||
message(STATUS "Could not find IWYU. To perform header analysis using IWYU install the tool (e.g. \"yum install iwyu\").")
|
||||
endif()
|
Loading…
Reference in New Issue
Block a user