@@ -61,34 +61,70 @@ function(clang_tidy_header HEADER TARGET)
61
61
add_dependencies (clang-tidy "${CT_NAME} " )
62
62
endfunction ()
63
63
64
- function (clang_tidy_interface)
65
- if (${ARGC} EQUAL 1)
66
- set (CT_TARGET ${ARGV0} )
67
- else ()
68
- set (options "" )
69
- set (oneValueArgs TARGET )
70
- set (multiValueArgs EXCLUDE_DIRS EXCLUDE_FILES)
71
- cmake_parse_arguments (CT "${options} " "${oneValueArgs} "
72
- "${multiValueArgs} " ${ARGN} )
73
- endif ()
74
-
75
- get_target_property (DIRS ${CT_TARGET} INTERFACE_INCLUDE_DIRECTORIES )
76
- get_target_property (SYSTEM_DIRS ${CT_TARGET}
64
+ function (clang_tidy_dirs TARGET EXCLUDE_DIRS EXCLUDE_FILES)
65
+ get_target_property (DIRS ${TARGET} INTERFACE_INCLUDE_DIRECTORIES )
66
+ get_target_property (SYSTEM_DIRS ${TARGET}
77
67
INTERFACE_SYSTEM_INCLUDE_DIRECTORIES)
78
68
foreach (DIR ${DIRS} )
79
69
if (NOT DIR IN_LIST SYSTEM_DIRS)
80
70
file (GLOB_RECURSE HEADERS "${DIR} /*.hpp" )
81
71
foreach (HEADER ${HEADERS} )
82
72
file (RELATIVE_PATH CT_NAME ${CMAKE_SOURCE_DIR} ${HEADER} )
83
- if (NOT CT_NAME IN_LIST CT_EXCLUDE_FILES)
73
+ if (NOT CT_NAME IN_LIST EXCLUDE_FILES)
74
+ get_filename_component (HEADER_DIR ${CT_NAME} DIRECTORY )
75
+ if (NOT HEADER_DIR IN_LIST EXCLUDE_DIRS)
76
+ clang_tidy_header(${HEADER} ${TARGET} )
77
+ endif ()
78
+ endif ()
79
+ endforeach ()
80
+ endif ()
81
+ endforeach ()
82
+ endfunction ()
83
+
84
+ function (clang_tidy_header_sets TARGET EXCLUDE_DIRS EXCLUDE_FILES
85
+ EXCLUDE_FILESETS)
86
+ get_target_property (HEADER_SETS ${TARGET} INTERFACE_HEADER_SETS)
87
+ foreach (SET ${HEADER_SETS} )
88
+ if (NOT SET IN_LIST EXCLUDE_FILESETS)
89
+ get_target_property (HEADERS ${TARGET} HEADER_SET_${SET} )
90
+ foreach (HEADER ${HEADERS} )
91
+ file (RELATIVE_PATH CT_NAME ${CMAKE_SOURCE_DIR} ${HEADER} )
92
+ if (NOT CT_NAME IN_LIST EXCLUDE_FILES)
84
93
get_filename_component (HEADER_DIR ${CT_NAME} DIRECTORY )
85
- if (NOT HEADER_DIR IN_LIST CT_EXCLUDE_DIRS )
86
- clang_tidy_header(${HEADER} ${CT_TARGET } )
94
+ if (NOT HEADER_DIR IN_LIST EXCLUDE_DIRS )
95
+ clang_tidy_header(${HEADER} ${TARGET } )
87
96
endif ()
88
97
endif ()
89
98
endforeach ()
90
99
endif ()
91
100
endforeach ()
101
+ endfunction ()
102
+
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 ()
92
128
93
129
compute_branch_diff(clang-tidy ".hpp" )
94
130
endfunction ()
0 commit comments