diff --git a/CMakeLists.txt b/CMakeLists.txt index 82948dd6..63404bae 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -327,4 +327,26 @@ else() endif() message(STATUS " ${BWhite}docs${CR} ${docs_summary}") message(STATUS " ") +if(RUN_STATIC_ANALYSIS) + list(LENGTH PROJECT_STATIC_ANALYSERS size) + unset(analyser_list) + set(count 0) + foreach(analyser IN LISTS PROJECT_STATIC_ANALYSERS) + if(${analyser}_FOUND) + set(${analyser}_status "${analyser} ${BGreen}YES${CR}") + else() + set(${analyser}_status "${analyser} ${BRed}NO${CR}") + endif() + math(EXPR count "${count} + 1") + string(APPEND analyser_list "${${analyser}_status}") + if(count LESS size) + string(APPEND analyser_list "${BWhite},${CR} ") + endif() + endforeach() + set(static_ana_summary "${BWhite}(${CR}${analyser_list}${BWhite})${CR} (disable with ${BMagenta}-DRUN_STATIC_ANALYSIS=OFF${CR})") +else() + set(static_ana_summary "${BRed}OFF${CR} (default, enable with ${BMagenta}-DRUN_STATIC_ANALYSIS=ON${CR})") +endif() +message(STATUS " ${Cyan}RUN STATIC ANALYSIS ${static_ana_summary}") +message(STATUS " ") ################################################################################ diff --git a/cmake/FairMQLib.cmake b/cmake/FairMQLib.cmake index 258fcac1..a2d9d732 100644 --- a/cmake/FairMQLib.cmake +++ b/cmake/FairMQLib.cmake @@ -166,6 +166,34 @@ macro(set_fairmq_defaults) else() set(PROJECT_VERSION_HOTFIX ${PROJECT_VERSION_TWEAK}) endif() + + if(NOT DEFINED RUN_STATIC_ANALYSIS) + set(RUN_STATIC_ANALYSIS OFF) + endif() + + unset(PROJECT_STATIC_ANALYSERS) + if(RUN_STATIC_ANALYSIS) + set(analyser "clang-tidy") + find_program(${analyser}_FOUND "${analyser}") + if(${analyser}_FOUND) + set(CMAKE_CXX_CLANG_TIDY "${${analyser}_FOUND}" "-color") + endif() + list(APPEND PROJECT_STATIC_ANALYSERS "${analyser}") + + set(analyser "iwyu") + find_program(${analyser}_FOUND "${analyser}") + if(${analyser}_FOUND) + set(CMAKE_CXX_IWYU "${${analyser}_FOUND}") + endif() + list(APPEND PROJECT_STATIC_ANALYSERS "${analyser}") + + set(analyser "cpplint") + find_program(${analyser}_FOUND "${analyser}") + if(${analyser}_FOUND) + set(CMAKE_CXX_CPPLINT "${${analyser}_FOUND}") + endif() + list(APPEND PROJECT_STATIC_ANALYSERS "${analyser}") + endif() endmacro() function(join VALUES GLUE OUTPUT)