From 8d01c5859ca507950d2c3ec65b59707a5cd4556b Mon Sep 17 00:00:00 2001 From: Axel Sommerfeldt <86113864+axelsommerfeldt@users.noreply.github.com> Date: Wed, 24 Aug 2022 18:28:52 +0200 Subject: [PATCH] CMake project version detection made more robust (#7473) This fixes two problems: 1. The project could be build when using own tags which does not follow the pattern v... 2. The case "tag points to the commit" will be handled correctly by setting VERSION_COMMIT to 0. This commit resolves https://github.com/google/flatbuffers/issues/7472 Co-authored-by: Axel Sommerfeldt --- CMake/Version.cmake | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/CMake/Version.cmake b/CMake/Version.cmake index a35a1e4e7..0a5661f74 100644 --- a/CMake/Version.cmake +++ b/CMake/Version.cmake @@ -14,10 +14,19 @@ if(GIT AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git") ) if(GIT_DESCRIBE_RESULT EQUAL 0) - string(REGEX REPLACE "^v([0-9]+)\\..*" "\\1" VERSION_MAJOR "${GIT_DESCRIBE_DIRTY}") - string(REGEX REPLACE "^v[0-9]+\\.([0-9]+).*" "\\1" VERSION_MINOR "${GIT_DESCRIBE_DIRTY}") - string(REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" VERSION_PATCH "${GIT_DESCRIBE_DIRTY}") - string(REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.[0-9]+\\-([0-9]+).*" "\\1" VERSION_COMMIT "${GIT_DESCRIBE_DIRTY}") + # Test if the most recent Git tag matches the pattern "v..*" + if(GIT_DESCRIBE_DIRTY MATCHES "^v[0-9]+\\.[0-9]+\\.[0-9]+.*") + string(REGEX REPLACE "^v([0-9]+)\\..*" "\\1" VERSION_MAJOR "${GIT_DESCRIBE_DIRTY}") + string(REGEX REPLACE "^v[0-9]+\\.([0-9]+).*" "\\1" VERSION_MINOR "${GIT_DESCRIBE_DIRTY}") + string(REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" VERSION_PATCH "${GIT_DESCRIBE_DIRTY}") + string(REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.[0-9]+\\-([0-9]+).*" "\\1" VERSION_COMMIT "${GIT_DESCRIBE_DIRTY}") + # If the tag points to the commit, then only the tag is shown in "git describe" + if(VERSION_COMMIT STREQUAL GIT_DESCRIBE_DIRTY) + set(VERSION_COMMIT 0) + endif() + else() + message(WARNING "\"${GIT_DESCRIBE_DIRTY}\" does not match pattern v..-") + endif() else() message(WARNING "git describe failed with exit code: ${GIT_DESCRIBE_RESULT}") endif()