-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* refs/pull/31579/head: cmake: add cppcheck and iwyu static analysis targets Reviewed-by: Brad Hubbard <[email protected]>
- Loading branch information
Showing
3 changed files
with
60 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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() |