1# - Returns a version string from Git tags 2# 3# This function inspects the annotated git tags for the project and returns a string 4# into a CMake variable 5# 6# get_git_version(<var>) 7# 8# - Example 9# 10# include(GetGitVersion) 11# get_git_version(GIT_VERSION) 12# 13# Requires CMake 2.8.11+ 14find_package(Git) 15if(__get_git_version) 16 return() 17endif() 18set(__get_git_version INCLUDED) 19function(get_git_version var) 20 if(GIT_EXECUTABLE) 21 execute_process(COMMAND ${GIT_EXECUTABLE} describe --match "v[0-9]*.[0-9]*.[0-9]*" --abbrev=8 22 RESULT_VARIABLE status 23 OUTPUT_VARIABLE GIT_VERSION 24 ERROR_QUIET) 25 if(${status}) 26 set(GIT_VERSION "v0.0.0") 27 else() 28 string(STRIP ${GIT_VERSION} GIT_VERSION) 29 string(REGEX REPLACE "-[0-9]+-g" "-" GIT_VERSION ${GIT_VERSION}) 30 endif() 31 # Work out if the repository is dirty 32 execute_process(COMMAND ${GIT_EXECUTABLE} update-index -q --refresh 33 OUTPUT_QUIET 34 ERROR_QUIET) 35 execute_process(COMMAND ${GIT_EXECUTABLE} diff-index --name-only HEAD -- 36 OUTPUT_VARIABLE GIT_DIFF_INDEX 37 ERROR_QUIET) 38 string(COMPARE NOTEQUAL "${GIT_DIFF_INDEX}" "" GIT_DIRTY) 39 if (${GIT_DIRTY}) 40 set(GIT_VERSION "${GIT_VERSION}-dirty") 41 endif() 42 else() 43 set(GIT_VERSION "v0.0.0") 44 endif() 45 message("-- git Version: ${GIT_VERSION}") 46 set(${var} ${GIT_VERSION} PARENT_SCOPE) 47endfunction() 48