# Obtain version string from git tags via git_describe and parse result into
# convenient version variables.
#
-# Tags have to be in the format .*([0-9]+)\.([0-9]+)\.([0-9]+)-(.*), as in
-# v1.2.3-rc5, where the expressions in parentheses are interpreted as major,
+# Tags have to match the regex ^[^0-9]*([0-9]+)\.([0-9]+)\.([0-9]+)-([0-9a-zA-Z]+),
+# as in v1.2.3-rc5, where the expressions in parentheses are interpreted as major,
# minor, patch and extra (package release) version numbers.
#
# Usage:
string(REGEX REPLACE
"^[^0-9]*[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" VERSION_PATCH "${GIT_DESCRIPTION}")
string(REGEX REPLACE
- "^[^0-9]*[0-9]+\\.[0-9]+\\.[0-9]+-(.*)" "\\1" VERSION_EXTRA "${GIT_DESCRIPTION}")
+ "^[^0-9]*[0-9]+\\.[0-9]+\\.[0-9]+-([0-9a-zA-Z-]+).*" "\\1" VERSION_EXTRA "${GIT_DESCRIPTION}")
string(REGEX REPLACE
"([^-]*-g)" "r\\1" VERSION_EXTRA "${VERSION_EXTRA}")
string(REGEX REPLACE
"-" "." VERSION_EXTRA "${VERSION_EXTRA}")
+
+ set(VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}-${VERSION_EXTRA}")
+ if(NOT "${VERSION}" MATCHES
+ "^[0-9]+\\.[0-9]+\\.[0-9]+-[0-9a-zA-Z]+\\.?r?[0-9]*\\.?g?[0-9a-zA-Z]*$")
+
+ message(FATAL_ERROR
+ "\nCOULD NOT EXTRACT VALID VERSION STRING FROM git_describe!"
+ "\n git_describe returned: \"${GIT_DESCRIPTION}\""
+ "\n Extracted invalid version string: \"${VERSION}\"\n")
+
+ endif(NOT "${VERSION}" MATCHES
+ "^[0-9]+\\.[0-9]+\\.[0-9]+-[0-9a-zA-Z]+\\.?r?[0-9]*\\.?g?[0-9a-zA-Z]*$")
+
+ set(${_gitversionprefix} "${VERSION}" PARENT_SCOPE)
set(${_gitversionprefix}_MAJOR "${VERSION_MAJOR}" PARENT_SCOPE)
set(${_gitversionprefix}_MINOR "${VERSION_MINOR}" PARENT_SCOPE)
set(${_gitversionprefix}_PATCH "${VERSION_PATCH}" PARENT_SCOPE)
set(${_gitversionprefix}_EXTRA "${VERSION_EXTRA}" PARENT_SCOPE)
-
- set(${_gitversionprefix}
- "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}-${VERSION_EXTRA}" PARENT_SCOPE)
endfunction()