clang-format: Add version validation

Prevents corrupt or bad setups from suddenly failing by simply checking if the version is compatible.
This commit is contained in:
Michael Fabian 'Xaymar' Dirks
2020-01-22 11:02:51 +01:00
parent d42910da18
commit 9166c8a575
+26 -2
View File
@@ -5,7 +5,7 @@ function(clang_format)
PARSE_ARGV 0 PARSE_ARGV 0
_CLANG_FORMAT _CLANG_FORMAT
"DEPENDENCY;GLOBAL" "DEPENDENCY;GLOBAL"
"REGEX" "REGEX;VERSION"
"TARGETS" "TARGETS"
) )
@@ -25,14 +25,38 @@ function(clang_format)
bin32 bin32
) )
if(NOT CLANG_FORMAT_BIN) if(NOT CLANG_FORMAT_BIN)
message(WARNING "Clang: Could not find clang-format at path '${CLANG_FORMAT_BIN}'. Disabling clang-format...") message(WARNING "Clang: Could not find clang-format at path '${CLANG_FORMAT_BIN}', disabling clang-format...")
return() return()
endif() endif()
# Validate Version
if (_CLANG_FORMAT_VERSION)
set(_VERSION_RESULT "")
set(_VERSION_OUTPUT "")
execute_process(
COMMAND "${CLANG_FORMAT_BIN}" --version
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
RESULT_VARIABLE _VERSION_RESULT
OUTPUT_VARIABLE _VERSION_OUTPUT
OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_STRIP_TRAILING_WHITESPACE ERROR_QUIET
)
if(NOT _VERSION_RESULT EQUAL 0)
message(WARNING "Clang: Could not discover version, disabling clang-format...")
return()
endif()
string(REGEX MATCH "([0-9]+\.[0-9]+\.[0-9]+)" _VERSION_MATCH ${_VERSION_OUTPUT})
if(NOT ${_VERSION_MATCH} VERSION_GREATER_EQUAL ${_CLANG_FORMAT_VERSION})
message(WARNING "Clang: Old version discovered, disabling clang-format...")
return()
endif()
endif()
# Default Filter
if(NOT _CLANG_FORMAT_FILTER) if(NOT _CLANG_FORMAT_FILTER)
set(_CLANG_FORMAT_FILTER "\.(h|hpp|c|cpp)$") set(_CLANG_FORMAT_FILTER "\.(h|hpp|c|cpp)$")
endif() endif()
# Go through each target
foreach(_target ${_CLANG_FORMAT_TARGETS}) foreach(_target ${_CLANG_FORMAT_TARGETS})
# get_target_property(target_name ${_target} NAME) # get_target_property(target_name ${_target} NAME)