Skip to content

Commit de51204

Browse files
committed
Misc minor improvements
Signed-off-by: Juan Cruz Viotti <[email protected]>
1 parent 7344164 commit de51204

File tree

2 files changed

+28
-41
lines changed

2 files changed

+28
-41
lines changed

cmake/common/clang-tidy.cmake

Lines changed: 27 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -77,53 +77,41 @@ function(sourcemeta_clang_tidy_attempt_install)
7777
endfunction()
7878

7979
function(sourcemeta_clang_tidy_attempt_enable)
80-
cmake_parse_arguments(PARSE_ARGV 0 SOURCEMETA_CLANG_TIDY "" "TARGET_NAME" "")
81-
if(NOT SOURCEMETA_CLANG_TIDY_TARGET_NAME)
82-
message(STATUS "ClangTidy runs at target level. TARGET_NAME is required.")
83-
return()
80+
cmake_parse_arguments(SOURCEMETA_TARGET_CLANG_TIDY_ATTEMPT_ENABLE "" "TARGET" "" ${ARGN})
81+
if(NOT SOURCEMETA_TARGET_CLANG_TIDY_ATTEMPT_ENABLE_TARGET)
82+
message(FATAL_ERROR "You must pass the target name using the TARGET option")
8483
endif()
8584

8685
# TODO: Support other platforms too, like Linux
87-
if(NOT APPLE)
88-
message(STATUS "Ignoring ClangTidy setup on OS other than APPLE for target ${SOURCEMETA_CLANG_TIDY_TARGET_NAME}")
89-
return()
90-
endif()
91-
92-
93-
if(SOURCEMETA_COMPILER_LLVM)
94-
message(STATUS "Enabling ClangTidy alongside compilation for target ${SOURCEMETA_CLANG_TIDY_TARGET_NAME}")
86+
if(APPLE AND SOURCEMETA_COMPILER_LLVM)
87+
message(STATUS "Enabling ClangTidy alongside compilation for target ${SOURCEMETA_TARGET_CLANG_TIDY_ATTEMPT_ENABLE_TARGET}")
9588
else()
96-
message(STATUS "Ignoring ClangTidy setup on a compiler other than LLVM for target ${SOURCEMETA_CLANG_TIDY_TARGET_NAME}")
9789
return()
9890
endif()
9991

100-
101-
sourcemeta_clang_tidy_attempt_install(
102-
OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin")
103-
104-
if(SOURCEMETA_CXX_CLANG_TIDY)
105-
set_target_properties("${SOURCEMETA_CLANG_TIDY_TARGET_NAME}"
106-
PROPERTIES CXX_CLANG_TIDY "${SOURCEMETA_CXX_CLANG_TIDY}")
107-
return()
92+
# We rely on this cache variable to not pre-compute the ClangTidy
93+
# setup over and over again for every single target
94+
if(NOT SOURCEMETA_CXX_CLANG_TIDY)
95+
sourcemeta_clang_tidy_attempt_install(
96+
OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin")
97+
find_program(CLANG_TIDY_BIN NAMES clang-tidy
98+
NO_DEFAULT_PATH
99+
PATHS "${PROJECT_BINARY_DIR}/bin"
100+
REQUIRED)
101+
set(CLANG_TIDY_CONFIG "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/clang-tidy.config")
102+
execute_process(COMMAND xcrun --show-sdk-path
103+
OUTPUT_VARIABLE MACOSX_SDK_PATH OUTPUT_STRIP_TRAILING_WHITESPACE)
104+
execute_process(COMMAND "${CMAKE_CXX_COMPILER}" -print-resource-dir
105+
OUTPUT_VARIABLE MACOSX_RESOURCE_PATH OUTPUT_STRIP_TRAILING_WHITESPACE)
106+
set(SOURCEMETA_CXX_CLANG_TIDY
107+
"${CLANG_TIDY_BIN};--config-file=${CLANG_TIDY_CONFIG};-header-filter=${PROJECT_SOURCE_DIR}/src/*"
108+
"--extra-arg=-std=c++${CMAKE_CXX_STANDARD}"
109+
"--extra-arg=-isysroot"
110+
"--extra-arg=${MACOSX_SDK_PATH}"
111+
"--extra-arg=-resource-dir=${MACOSX_RESOURCE_PATH}"
112+
CACHE STRING "CXX_CLANG_TIDY")
108113
endif()
109114

110-
find_program(CLANG_TIDY_BIN NAMES clang-tidy
111-
NO_DEFAULT_PATH
112-
PATHS "${PROJECT_BINARY_DIR}/bin"
113-
REQUIRED)
114-
115-
set(CLANG_TIDY_CONFIG "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/clang-tidy.config")
116-
execute_process(COMMAND xcrun --show-sdk-path
117-
OUTPUT_VARIABLE MACOSX_SDK_PATH OUTPUT_STRIP_TRAILING_WHITESPACE)
118-
execute_process(COMMAND "${CMAKE_CXX_COMPILER}" -print-resource-dir
119-
OUTPUT_VARIABLE MACOSX_RESOURCE_PATH OUTPUT_STRIP_TRAILING_WHITESPACE)
120-
set(SOURCEMETA_CXX_CLANG_TIDY
121-
"${CLANG_TIDY_BIN};--config-file=${CLANG_TIDY_CONFIG};-header-filter=${PROJECT_SOURCE_DIR}/src/*"
122-
"--extra-arg=-std=c++${CMAKE_CXX_STANDARD}"
123-
"--extra-arg=-isysroot"
124-
"--extra-arg=${MACOSX_SDK_PATH}"
125-
"--extra-arg=-resource-dir=${MACOSX_RESOURCE_PATH}")
126-
127-
set_target_properties("${SOURCEMETA_CLANG_TIDY_TARGET_NAME}"
115+
set_target_properties("${SOURCEMETA_TARGET_CLANG_TIDY_ATTEMPT_ENABLE_TARGET}"
128116
PROPERTIES CXX_CLANG_TIDY "${SOURCEMETA_CXX_CLANG_TIDY}")
129117
endfunction()

cmake/common/targets/library.cmake

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,8 +116,7 @@ function(sourcemeta_library)
116116
PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>")
117117
endif()
118118

119-
sourcemeta_clang_tidy_attempt_enable(TARGET_NAME "${TARGET_NAME}")
120-
119+
sourcemeta_clang_tidy_attempt_enable(TARGET "${TARGET_NAME}")
121120
endfunction()
122121

123122
function(sourcemeta_library_install)

0 commit comments

Comments
 (0)