Function ( GitGetVersion GIT_ROOT OUT_MAJOR OUT_MINOR OUT_PATCH OUT_BUILD OUT_HASH ) If ( NOT EXISTS "${GIT_ROOT}/.git" ) Return ( ) EndIf ( ) Message ( "" ) # Execute process to get git revisions Execute_Process ( COMMAND bash -c "git -C ${GIT_ROOT} show-ref --tags | egrep 'refs\/tags\/v?[0-9]+\.[0-9]+(\.[0-9]+(\.[0-9]+))' | head -1" RESULT_VARIABLE GIT_RET OUTPUT_VARIABLE GIT_REV ERROR_VARIABLE GIT_ERR ) If ( NOT ${GIT_RET} EQUAL 0 ) Message ( FATAL_ERROR "Unable to get git revisions! ${GIT_RET}" ) EndIf ( ) If ( "${GIT_REV}" STREQUAL "" ) Return () EndIf () # Split the git revision string String ( REPLACE " " ";" SPLIT ${GIT_REV} ) List ( LENGTH SPLIT COUNT ) If ( NOT ${COUNT} EQUAL 2 ) Return ( ) EndIf ( ) List ( GET SPLIT 0 HASH ) List ( GET SPLIT 1 VERSION ) # Split the version String ( STRIP "${VERSION}" SPLIT ) String ( REGEX REPLACE "refs?\/tags?\/v?" "" SPLIT ${SPLIT} ) String ( REPLACE "." ";" SPLIT ${SPLIT} ) List ( LENGTH SPLIT COUNT ) If ( ${COUNT} LESS 2 ) Message ( FATAL_ERROR "Unable to parse version string!" ) EndIf ( ) # major List ( GET SPLIT 0 TMP ) Set ( ${OUT_MAJOR} ${TMP} PARENT_SCOPE ) # minor List ( GET SPLIT 1 TMP ) Set ( ${OUT_MINOR} ${TMP} PARENT_SCOPE ) # patch If ( ${COUNT} GREATER 2 ) List ( GET SPLIT 2 TMP ) Set ( ${OUT_PATCH} ${TMP} PARENT_SCOPE ) EndIf ( ) # build If ( ${COUNT} GREATER 3 ) List ( GET SPLIT 3 TMP ) Set ( ${OUT_BUILD} ${TMP} PARENT_SCOPE ) EndIf ( ) # hash Set ( ${OUT_HASH} ${HASH} PARENT_SCOPE ) EndFunction ( )