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) 15 16if(__get_git_version) 17 return() 18endif() 19set(__get_git_version INCLUDED) 20 21function(get_git_version var) 22 if(GIT_EXECUTABLE) 23 execute_process(COMMAND ${GIT_EXECUTABLE} describe --match "v[0-9]*.[0-9]*.[0-9]*" --abbrev=8 24 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} 25 RESULT_VARIABLE status 26 OUTPUT_VARIABLE GIT_VERSION 27 ERROR_QUIET) 28 if(${status}) 29 set(GIT_VERSION "v0.0.0") 30 else() 31 string(STRIP ${GIT_VERSION} GIT_VERSION) 32 string(REGEX REPLACE "-[0-9]+-g" "-" GIT_VERSION ${GIT_VERSION}) 33 endif() 34 35 # Work out if the repository is dirty 36 execute_process(COMMAND ${GIT_EXECUTABLE} update-index -q --refresh 37 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} 38 OUTPUT_QUIET 39 ERROR_QUIET) 40 execute_process(COMMAND ${GIT_EXECUTABLE} diff-index --name-only HEAD -- 41 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} 42 OUTPUT_VARIABLE GIT_DIFF_INDEX 43 ERROR_QUIET) 44 string(COMPARE NOTEQUAL "${GIT_DIFF_INDEX}" "" GIT_DIRTY) 45 if (${GIT_DIRTY}) 46 set(GIT_VERSION "${GIT_VERSION}-dirty") 47 endif() 48 else() 49 set(GIT_VERSION "v0.0.0") 50 endif() 51 52 message(STATUS "git Version: ${GIT_VERSION}") 53 set(${var} ${GIT_VERSION} PARENT_SCOPE) 54endfunction() 55