File tree Expand file tree Collapse file tree 3 files changed +70
-0
lines changed Expand file tree Collapse file tree 3 files changed +70
-0
lines changed Original file line number Diff line number Diff line change @@ -33,6 +33,10 @@ endif()
3333# Top level project, doesn't really affect anything.
3434project (genzh LANGUAGES C CXX)
3535
36+ # Set up a format target to do automated clang format checking.
37+ find_package (ClangFormat)
38+ include (ClangFormat)
39+
3640# This file handles extra settings wanted/needed for different compilers.
3741include (cmake/compilers.cmake)
3842
Original file line number Diff line number Diff line change 1+ if (CLANG_FORMAT_FOUND)
2+ if (CLANG_FORMAT_VERSION VERSION_LESS "19.0.0" )
3+ message (WARNING "clang-format ${CLANG_FORMAT_VERSION} is older than 19.0.0, formatting may yield unexpected results" )
4+ elseif (CLANG_FORMAT_VERSION VERSION_GREATER "19.1.1" )
5+ message (WARNING "clang-format ${CLANG_FORMAT_VERSION} is newer than 19.1.4, formatting may yield unexpected results" )
6+ else ()
7+ message (STATUS "Found clang-format ${CLANG_FORMAT_VERSION} , 'format' target enabled" )
8+ endif ()
9+
10+ set (GLOB_PATTERNS
11+ Core/*.c
12+ Core/*.cpp
13+ Core/*.h
14+ Generals/*.c
15+ Generals/*.cpp
16+ Generals/*.h
17+ GeneralsMD/*.c
18+ GeneralsMD/*.cpp
19+ GeneralsMD/*.h
20+ )
21+
22+ file (GLOB_RECURSE ALL_SOURCE_FILES RELATIVE ${CMAKE_SOURCE_DIR} ${GLOB_PATTERNS} )
23+
24+ add_custom_target (format)
25+ foreach (SOURCE_FILE ${ALL_SOURCE_FILES} )
26+ add_custom_command (
27+ TARGET format
28+ PRE_BUILD
29+ COMMAND ${CLANG_FORMAT_EXECUTABLE} -style=file -i --verbose \"${SOURCE_FILE} \"
30+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} )
31+ endforeach ()
32+ else ()
33+ message (WARNING "clang-format not found, 'format' target unavailable" )
34+ endif ()
35+
36+ add_feature_info(ClangFormat CLANG_FORMAT_FOUND "Clang Format target" )
37+
Original file line number Diff line number Diff line change 1+ find_program (CLANG_FORMAT_EXECUTABLE
2+ NAMES clang-format-19
3+ clang-format
4+ DOC "clang-format executable" )
5+ mark_as_advanced (CLANG_FORMAT_EXECUTABLE)
6+
7+ if (CLANG_FORMAT_EXECUTABLE)
8+ if (NOT CLANG_FORMAT_FOUND)
9+ execute_process (COMMAND ${CLANG_FORMAT_EXECUTABLE} -version
10+ OUTPUT_VARIABLE clang_format_version
11+ ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
12+
13+ if (clang_format_version MATCHES "^.*clang-format version .*" )
14+ string (REGEX
15+ REPLACE ".*clang-format version ([.0-9]+).*"
16+ "\\ 1"
17+ clang_format_version_parsed
18+ "${clang_format_version} " )
19+
20+ set (CLANG_FORMAT_VERSION ${clang_format_version_parsed} CACHE INTERNAL "clang-format executable version" )
21+ set (CLANG_FORMAT_FOUND TRUE CACHE INTERNAL "clang-format executable found" )
22+ endif ()
23+
24+ unset (clang_format_version)
25+ unset (clang_format_version_parsed)
26+ endif ()
27+ else ()
28+ set (CLANG_FORMAT_FOUND FALSE CACHE INTERNAL "clang-format executable found" )
29+ endif ()
You can’t perform that action at this time.
0 commit comments