From 239e8c0e3227a59df5c637e47e19d6b0c6ef64af Mon Sep 17 00:00:00 2001 From: ClausKlein Date: Sat, 15 Feb 2020 17:07:06 +0100 Subject: [PATCH] Changes according to review We need first clang-tidy for all If found, we should find run-clang-tidy.py for the check taget Then we need a compile_commands.json created by cmake or mesonbuild. And this has to be linkd to the source tree, if the binary tree is outsite the source tree. That must be true for ninja generator to generate absolute pathes at compile_commands.json! --- cmake/clang-tidy.cmake | 41 +++++++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/cmake/clang-tidy.cmake b/cmake/clang-tidy.cmake index a7573ed0..ce61faad 100644 --- a/cmake/clang-tidy.cmake +++ b/cmake/clang-tidy.cmake @@ -1,15 +1,18 @@ -option(ENABLE_CLANG_TIDY "Add run-clang-tidy automatically to builds" OFF) +option(SPDLOG_ENABLE_TIDY "Add clang-tidy automatically as prebuild step" OFF) + find_program(CLANG_TIDY_EXE - NAMES run-clang-tidy.py run-clang-tidy run-clang-tidy-7 - HINTS ${CMAKE_CURRENT_SOURCE_DIR}/scripts + NAMES clang-tidy clang-tidy-7 DOC "Path to clang-tidy executable") +find_program(CLANG_TIDY_RUNNER + NAMES run-clang-tidy run-clang-tidy-7 run-clang-tidy.py + HINTS ${CMAKE_CURRENT_SOURCE_DIR}/scripts) if(CLANG_TIDY_EXE) message(STATUS "clang-tidy found: ${CLANG_TIDY_EXE}") set(DCMAKE_EXPORT_COMPILE_COMMANDS ON) set(CLANG_TIDY_CMD ${CLANG_TIDY_EXE}) message(STATUS "cmake source dir: ${CMAKE_CURRENT_SOURCE_DIR}") - if(ENABLE_CLANG_TIDY) + if(SPDLOG_ENABLE_TIDY) # NOTE: the project config file .clang-tidy is not found if the # binary tree is not part of the source tree! CK set(CMAKE_CXX_CLANG_TIDY ${CLANG_TIDY_CMD} CACHE STRING "" FORCE) @@ -17,20 +20,22 @@ if(CLANG_TIDY_EXE) set(CMAKE_CXX_CLANG_TIDY "" CACHE STRING "" FORCE) # delete it endif() - if(NOT TARGET check) - add_custom_target(check) - message(STATUS "check target added") - set_target_properties(check PROPERTIES EXCLUDE_FROM_ALL TRUE) - endif() + if(CLANG_TIDY_RUNNER) + if(NOT TARGET check) + add_custom_target(check) + message(STATUS "check target added") + set_target_properties(check PROPERTIES EXCLUDE_FROM_ALL TRUE) + endif() - add_custom_command(TARGET check PRE_BUILD - # -p BUILD_PATH Path used to read a compile command database (compile_commands.json). - # NOTE: we use defaults checks from .clang-tidy and examples only! - COMMAND ${CLANG_TIDY_EXE} -p ${CMAKE_CURRENT_BINARY_DIR} ### ${CMAKE_CURRENT_SOURCE_DIR}/example - WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" # location of compile_commands.json - COMMENT "Running check on targets at ${CMAKE_CURRENT_SOURCE_DIR} ..." - VERBATIM - ) + add_custom_command(TARGET check PRE_BUILD + # -p BUILD_PATH Path used to read a compile command database (compile_commands.json). + # NOTE: we use defaults checks from .clang-tidy and examples only! + COMMAND ${CLANG_TIDY_RUNNER} -p ${CMAKE_CURRENT_BINARY_DIR} ### ${CMAKE_CURRENT_SOURCE_DIR}/example + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" # location of compile_commands.json + COMMENT "Running check on targets at ${CMAKE_CURRENT_SOURCE_DIR} ..." + VERBATIM + ) + endif() else() - message(AUTHOR_WARNING "run-clang-tidy not found!") + message(AUTHOR_WARNING "clang-tidy not found!") endif()