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