Skip to content

Commit fead1de

Browse files
committed
👷 Add clang-tidy canary
Problem: - `clang-tidy` exits with success if the `.clang-tidy` file is ill-formed. Solution: - Add a clang-tidy-canary target which tests if `clang-tidy` has any error output when run with `--verify-config`.
1 parent 6fff2cb commit fead1de

File tree

1 file changed

+12
-28
lines changed

1 file changed

+12
-28
lines changed

cmake/clang-tidy.cmake

Lines changed: 12 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -100,31 +100,15 @@ function(clang_tidy_header_sets TARGET EXCLUDE_DIRS EXCLUDE_FILES
100100
endforeach()
101101
endfunction()
102102

103-
function(clang_tidy_interface)
104-
if(${ARGC} EQUAL 1)
105-
set(CT_TARGET ${ARGV0})
106-
else()
107-
set(options "")
108-
set(oneValueArgs TARGET)
109-
set(multiValueArgs EXCLUDE_DIRS EXCLUDE_FILES EXCLUDE_FILESETS)
110-
cmake_parse_arguments(CT "${options}" "${oneValueArgs}"
111-
"${multiValueArgs}" ${ARGN})
112-
endif()
113-
114-
get_target_property(HEADER_SETS ${CT_TARGET} INTERFACE_HEADER_SETS)
115-
if(HEADER_SETS)
116-
message(
117-
STATUS "Using INTERFACE_HEADER_SETS to clang-tidy ${CT_TARGET}.")
118-
clang_tidy_header_sets(${CT_TARGET} "${CT_EXCLUDE_DIRS}"
119-
"${CT_EXCLUDE_FILES}" "${CT_EXCLUDE_FILESETS}")
120-
else()
121-
message(
122-
NOTICE
123-
"${CT_TARGET} has no INTERFACE_HEADER_SETS, using INTERFACE_INCLUDE_DIRECTORIES instead. "
124-
"Use `target_sources` instead of `target_include_directories` to specify header sets for better control."
125-
)
126-
clang_tidy_dirs(${CT_TARGET} "${CT_EXCLUDE_DIRS}" "${CT_EXCLUDE_FILES}")
127-
endif()
128-
129-
compute_branch_diff(clang-tidy ".hpp")
130-
endfunction()
103+
if(NOT TARGET clang-tidy-canary)
104+
message(STATUS "Adding clang-tidy-canary target for ${CMAKE_SOURCE_DIR}")
105+
add_custom_command(
106+
OUTPUT clang_tidy_canary.alive
107+
COMMAND ${CLANG_TIDY_PROGRAM} "--verify-config" 2>clang_tidy.log
108+
COMMAND "!" "[" "-s" "clang_tidy.log" "]"
109+
COMMAND ${CMAKE_COMMAND} "-E" "touch" "clang_tidy_canary.alive"
110+
DEPENDS ${CMAKE_SOURCE_DIR}/.clang-tidy)
111+
add_custom_target(clang-tidy-canary DEPENDS clang_tidy_canary.alive)
112+
add_dependencies(clang-tidy clang-tidy-canary)
113+
add_dependencies(clang-tidy-branch-diff clang-tidy-canary)
114+
endif()

0 commit comments

Comments
 (0)