@@ -28,22 +28,82 @@ if(CLANG_FORMAT_FOUND)
2828
2929 set (CLANG_FORMAT_EXCLUDE_PATTERNS ${CLANG_FORMAT_EXCLUDE_PATTERNS} "/CMakeFiles/" "cmake" "/build/" "/vendor/" "/third_party/" "cassandra.h" "dse.h" )
3030
31- foreach (SOURCE_FILE ${CLANG_FORMAT_ALL_SOURCE_FILES} )
32- foreach (EXCLUDE_PATTERN ${CLANG_FORMAT_EXCLUDE_PATTERNS} )
31+ foreach (SOURCE_FILE ${CLANG_FORMAT_ALL_SOURCE_FILES} )
32+ foreach (EXCLUDE_PATTERN ${CLANG_FORMAT_EXCLUDE_PATTERNS} )
3333 string (FIND ${SOURCE_FILE} ${EXCLUDE_PATTERN} EXCLUDE_FOUND)
34- if (NOT ${EXCLUDE_FOUND} EQUAL -1)
34+ if (NOT ${EXCLUDE_FOUND} EQUAL -1)
3535 list (REMOVE_ITEM CLANG_FORMAT_ALL_SOURCE_FILES ${SOURCE_FILE} )
36- endif ()
37- endforeach ()
38- endforeach ()
36+ endif ()
37+ endforeach ()
38+ endforeach ()
3939
40- add_custom_target (format
41- COMMENT "Format source files using clang-format"
42- COMMAND ${CLANG_FORMAT_EXE} -i -fallback-style=none -style=file ${CLANG_FORMAT_ALL_SOURCE_FILES} )
40+ if (WIN32 )
41+ set (CLANG_FORMAT_FILENAME "clang-format.files" )
42+ set (CLANG_FORMAT_ABSOLUTE_FILENAME "${CMAKE_BINARY_DIR} /${CLANG_FORMAT_FILENAME} " )
43+ if (EXISTS ${CLANG_FORMAT_ABSOLUTE_FILENAME} )
44+ file (REMOVE ${CLANG_FORMAT_ABSOLUTE_FILENAME} )
45+ endif ()
4346
44- add_custom_target (format-check
45- COMMENT "Verify source files formatting using clang-format"
46- COMMAND ! ${CLANG_FORMAT_EXE} -output-replacements-xml -fallback-style=none -style=file ${CLANG_FORMAT_ALL_SOURCE_FILES} | tee replacements.xml | grep -q "replacement offset" )
47+ set (COUNT 1)
48+ file (TO_NATIVE_PATH ${CMAKE_BINARY_DIR} CMAKE_WINDOWS_BINARY_DIR )
49+ foreach (SOURCE_FILE ${CLANG_FORMAT_ALL_SOURCE_FILES} )
50+ file (RELATIVE_PATH RELATIVE_SOURCE_FILE ${CMAKE_BINARY_DIR} ${SOURCE_FILE} )
51+ file (TO_NATIVE_PATH ${RELATIVE_SOURCE_FILE} NATIVE_RELATIVE_SOURCE_FILE )
52+
53+ if (COUNT EQUAL 50)
54+ file (APPEND ${CLANG_FORMAT_ABSOLUTE_FILENAME} " ${NATIVE_RELATIVE_SOURCE_FILE} \n " )
55+ set (COUNT 1)
56+ else ()
57+ file (APPEND ${CLANG_FORMAT_ABSOLUTE_FILENAME} " ${NATIVE_RELATIVE_SOURCE_FILE} " )
58+ MATH (EXPR COUNT "${COUNT} + 1" )
59+ endif ()
60+ endforeach ()
61+
62+ file (TO_NATIVE_PATH ${CLANG_FORMAT_EXE} CLANG_FORMAT_EXE )
63+ file (WRITE "${CMAKE_BINARY_DIR} /clang-format-windows.bat"
64+ "@REM Generated clang-format script for Windows\r\n "
65+ "@ECHO OFF\r\n "
66+ "SETLOCAL ENABLEDELAYEDEXPANSION\r\n "
67+ "SET IS_FAILED_CHECK=0\r\n "
68+ "PUSHD ${CMAKE_WINDOWS_BINARY_DIR} >NUL\r\n "
69+ "FOR /F \" TOKENS=*\" %%A IN (${CLANG_FORMAT_FILENAME} ) do (\r\n "
70+ " IF %1 EQU 1 (\r\n "
71+ " \" ${CLANG_FORMAT_EXE} \" -i -fallback-style=none -style=file %%A\r\n "
72+ " IF NOT !ERRORLEVEL! EQU 0 (\r\n "
73+ " SET IS_FAILED_CHECK=1\r\n "
74+ " )\r\n "
75+ " )\r\n "
76+ " IF %1 EQU 2 (\r\n "
77+ " \" ${CLANG_FORMAT_EXE} \" -output-replacements-xml -fallback-style=none -style=file %%A 2>&1 | FINDSTR /C:\" replacement offset\" >NUL\r\n "
78+ " IF !ERRORLEVEL! EQU 0 (\r\n "
79+ " SET IS_FAILED_CHECK=1\r\n "
80+ " )\r\n "
81+ " )\r\n "
82+ ")\r\n "
83+ "IF NOT !IS_FAILED_CHECK! EQU 0 (\r\n "
84+ " POPD\r\n "
85+ " EXIT /B 1\r\n "
86+ ")\r\n "
87+ "POPD\r\n "
88+ "ENDLOCAL\r\n "
89+ "EXIT /B 0\r\n " )
90+
91+ add_custom_target (format
92+ COMMENT "Format source files using clang-format"
93+ COMMAND "${CMAKE_WINDOWS_BINARY_DIR} \\ clang-format-windows.bat" 1 )
94+
95+ add_custom_target (format-check
96+ COMMENT "Verify source files formatting using clang-format"
97+ COMMAND "${CMAKE_WINDOWS_BINARY_DIR} \\ clang-format-windows.bat" 2 )
98+ else ()
99+ add_custom_target (format
100+ COMMENT "Format source files using clang-format"
101+ COMMAND ${CLANG_FORMAT_EXE} -i -fallback-style=none -style=file ${CLANG_FORMAT_ALL_SOURCE_FILES} )
102+
103+ add_custom_target (format-check
104+ COMMENT "Verify source files formatting using clang-format"
105+ COMMAND ! ${CLANG_FORMAT_EXE} -output-replacements-xml -fallback-style=none -style=file ${CLANG_FORMAT_ALL_SOURCE_FILES} | tee replacements.xml | grep -q "replacement offset" )
106+ endif ()
47107else ()
48108 message (STATUS "Unable to find clang-format. Not creating format targets." )
49109endif ()
0 commit comments