forked from apache/cassandra-cpp-driver
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathClangFormat.cmake
More file actions
109 lines (93 loc) · 4.27 KB
/
ClangFormat.cmake
File metadata and controls
109 lines (93 loc) · 4.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#
# Format and verify formatting using clang-format
#
cmake_minimum_required(VERSION 3.10)
include(FindPackageHandleStandardArgs)
if(NOT CLANG_FORMAT_EXE_NAME)
set(CLANG_FORMAT_EXE_NAME clang-format)
endif()
if(CLANG_FORMAT_ROOT_DIR)
find_program(CLANG_FORMAT_EXE
NAMES ${CLANG_FORMAT_EXE_NAME}
PATHS ${CLANG_FORMAT_ROOT_DIR}
NO_DEFAULT_PATH)
endif()
find_program(CLANG_FORMAT_EXE NAMES ${CLANG_FORMAT_EXE_NAME})
find_package_handle_standard_args(CLANG_FORMAT DEFAULT_MSG CLANG_FORMAT_EXE)
mark_as_advanced(CLANG_FORMAT_EXE)
if(CLANG_FORMAT_FOUND)
set(CLANG_FORMAT_FILE_EXTENSIONS ${CLANG_FORMAT_CXX_FILE_EXTENSIONS} *.cpp *.hpp *.c *.h)
file(GLOB_RECURSE CLANG_FORMAT_ALL_SOURCE_FILES ${CLANG_FORMAT_FILE_EXTENSIONS})
set(CLANG_FORMAT_EXCLUDE_PATTERNS ${CLANG_FORMAT_EXCLUDE_PATTERNS} "/CMakeFiles/" "cmake" "/build/" "/vendor/" "/third_party/" "cassandra.h" "dse.h")
foreach(SOURCE_FILE ${CLANG_FORMAT_ALL_SOURCE_FILES})
foreach(EXCLUDE_PATTERN ${CLANG_FORMAT_EXCLUDE_PATTERNS})
string(FIND ${SOURCE_FILE} ${EXCLUDE_PATTERN} EXCLUDE_FOUND)
if(NOT ${EXCLUDE_FOUND} EQUAL -1)
list(REMOVE_ITEM CLANG_FORMAT_ALL_SOURCE_FILES ${SOURCE_FILE})
endif()
endforeach()
endforeach()
if(WIN32)
set(CLANG_FORMAT_FILENAME "clang-format.files")
set(CLANG_FORMAT_ABSOLUTE_FILENAME "${CMAKE_BINARY_DIR}/${CLANG_FORMAT_FILENAME}")
if (EXISTS ${CLANG_FORMAT_ABSOLUTE_FILENAME})
file(REMOVE ${CLANG_FORMAT_ABSOLUTE_FILENAME})
endif()
set(COUNT 1)
file(TO_NATIVE_PATH ${CMAKE_BINARY_DIR} CMAKE_WINDOWS_BINARY_DIR)
foreach(SOURCE_FILE ${CLANG_FORMAT_ALL_SOURCE_FILES})
file(RELATIVE_PATH RELATIVE_SOURCE_FILE ${CMAKE_BINARY_DIR} ${SOURCE_FILE})
file(TO_NATIVE_PATH ${RELATIVE_SOURCE_FILE} NATIVE_RELATIVE_SOURCE_FILE)
if(COUNT EQUAL 50)
file(APPEND ${CLANG_FORMAT_ABSOLUTE_FILENAME} " ${NATIVE_RELATIVE_SOURCE_FILE}\n")
set(COUNT 1)
else()
file(APPEND ${CLANG_FORMAT_ABSOLUTE_FILENAME} " ${NATIVE_RELATIVE_SOURCE_FILE}")
MATH(EXPR COUNT "${COUNT} + 1")
endif()
endforeach()
file(TO_NATIVE_PATH ${CLANG_FORMAT_EXE} CLANG_FORMAT_EXE)
file(WRITE "${CMAKE_BINARY_DIR}/clang-format-windows.bat"
"@REM Generated clang-format script for Windows\r\n"
"@ECHO OFF\r\n"
"SETLOCAL ENABLEDELAYEDEXPANSION\r\n"
"SET IS_FAILED_CHECK=0\r\n"
"PUSHD ${CMAKE_WINDOWS_BINARY_DIR}>NUL\r\n"
"FOR /F \"TOKENS=*\" %%A IN (${CLANG_FORMAT_FILENAME}) do (\r\n"
" IF %1 EQU 1 (\r\n"
" \"${CLANG_FORMAT_EXE}\" -i -fallback-style=none -style=file %%A\r\n"
" IF NOT !ERRORLEVEL! EQU 0 (\r\n"
" SET IS_FAILED_CHECK=1\r\n"
" )\r\n"
" )\r\n"
" IF %1 EQU 2 (\r\n"
" \"${CLANG_FORMAT_EXE}\" -output-replacements-xml -fallback-style=none -style=file %%A 2>&1 | FINDSTR /C:\"replacement offset\">NUL\r\n"
" IF !ERRORLEVEL! EQU 0 (\r\n"
" SET IS_FAILED_CHECK=1\r\n"
" )\r\n"
" )\r\n"
")\r\n"
"IF NOT !IS_FAILED_CHECK! EQU 0 (\r\n"
" POPD\r\n"
" EXIT /B 1\r\n"
")\r\n"
"POPD\r\n"
"ENDLOCAL\r\n"
"EXIT /B 0\r\n")
add_custom_target(format
COMMENT "Format source files using clang-format"
COMMAND "${CMAKE_WINDOWS_BINARY_DIR}\\clang-format-windows.bat" 1)
add_custom_target(format-check
COMMENT "Verify source files formatting using clang-format"
COMMAND "${CMAKE_WINDOWS_BINARY_DIR}\\clang-format-windows.bat" 2)
else()
add_custom_target(format
COMMENT "Format source files using clang-format"
COMMAND ${CLANG_FORMAT_EXE} -i -fallback-style=none -style=file ${CLANG_FORMAT_ALL_SOURCE_FILES})
add_custom_target(format-check
COMMENT "Verify source files formatting using clang-format"
COMMAND ! ${CLANG_FORMAT_EXE} -output-replacements-xml -fallback-style=none -style=file ${CLANG_FORMAT_ALL_SOURCE_FILES} | tee replacements.xml | grep -q "replacement offset")
endif()
else()
message(STATUS "Unable to find clang-format. Not creating format targets.")
endif()