From 8189076cd2263c0065459c976e2eb7cc01098720 Mon Sep 17 00:00:00 2001 From: Michael Fabian 'Xaymar' Dirks Date: Tue, 23 Mar 2021 20:41:20 +0100 Subject: [PATCH] cmake: Fix version detection code When the CMake script was rewritten, not much attention was put into the versioning code, resulting in odd behavior which was never found or fixed. For example, the automatic splitting of the suffix from the number never worked, and the build number was being stored in the wrong variable. --- CMakeLists.txt | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a511371c..9639ce2c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -78,12 +78,12 @@ if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/.git") list(GET GIT_OUTPUT 0 VERSION_MAJOR) list(GET GIT_OUTPUT 1 VERSION_MINOR) list(GET GIT_OUTPUT 2 VERSION_PATCH) - list(GET GIT_OUTPUT 3 VERSION_BUILD) + list(GET GIT_OUTPUT 3 VERSION_TWEAK) list(GET GIT_OUTPUT 4 VERSION_COMMIT) # Patch needs additional parsing. # This may be a [0-9]*[a-z]*[0-9]+ string. - string(REGEX MATCHALL "([0-9]+)([a-z0-9]+)" T_MATCHES "${VERSION_PATCH}") + string(REGEX MATCHALL "^([0-9]+)([a-z]+[0-9]+)?" T_MATCHES "${VERSION_PATCH}") set(VERSION_PATCH "${CMAKE_MATCH_1}") if(CMAKE_MATCH_2) set(VERSION_SUFFIX "${CMAKE_MATCH_2}") @@ -94,11 +94,13 @@ if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/.git") message(WARNING "${LOGPREFIX} Failed to detect version, using default instead.") endif() endif() +else() + message(STATUS "${LOGPREFIX} Not a git repository, automatic version detection disabled.") endif() # Allow manual overrides of the detected version. set(${PREFIX}VERSION "" CACHE STRING "Override StreamFX version with this string. Format: Major.Minor.Patch[Suffix][-Tweak[-Commit8c]]") -if(${PREFIX}VERSION) +if(NOT (${PREFIX}VERSION STREQUAL "")) string(REPLACE "-" "." T_VERSION "${${PREFIX}VERSION}") string(REPLACE "." ";" T_VERSION "${${PREFIX}VERSION}") @@ -107,19 +109,19 @@ if(${PREFIX}VERSION) list(GET T_VERSION 1 VERSION_MINOR) list(GET T_VERSION 2 VERSION_PATCH) if (T_VERSIONLEN GREATER_EQUAL 3) - list(GET T_VERSION 3 VERSION_BUILD) + list(GET T_VERSION 3 VERSION_TWEAK) else() set(VERSION_BUILD 0) endif() if (T_VERSIONLEN GREATER_EQUAL 4) list(GET T_VERSION 4 VERSION_COMMIT) else() -# set(VERSION_COMMIT "00000000") + set(VERSION_COMMIT "") endif() # Patch needs additional parsing. # This may be a [0-9]*[a-z]*[0-9]+ string. - string(REGEX MATCHALL "([0-9]+)([a-z0-9]+)" T_MATCHES "${VERSION_PATCH}") + string(REGEX MATCHALL "^([0-9]+)([a-z]+[0-9]+)?" T_MATCHES "${VERSION_PATCH}") set(VERSION_PATCH "${CMAKE_MATCH_1}") if(CMAKE_MATCH_2) set(VERSION_SUFFIX "${CMAKE_MATCH_2}") @@ -129,7 +131,7 @@ if(${PREFIX}VERSION) endif() # Generate Version String -if(VERSION_COMMIT) +if(NOT (VERSION_COMMIT STREQUAL "")) set(VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}.${VERSION_TWEAK}${VERSION_SUFFIX}-${VERSION_COMMIT}") else() set(VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}.${VERSION_TWEAK}${VERSION_SUFFIX}")