prod/native/building/cmake/elastic_get_git_version.cmake (62 lines of code) (raw):
find_package(Git)
function(elastic_get_git_version PROJECT_VERSION SIMPLE_VERSION GIT_REVISION_HASH)
#PROJECT_VERSION MAJOR.MINOR.PATCH
#SIMPLE_VERSION MAJOR.MINOR.PATCH-dirty
block(SCOPE_FOR VARIABLES)
execute_process(COMMAND ${GIT_EXECUTABLE} describe --tags --match "v*" --dirty --abbrev=0
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE GIT_VERSION
RESULT_VARIABLE GIT_RESULT
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(${GIT_RESULT})
message(FATAL_ERROR "Could not get version from git. Git error code: ${GIT_RESULT}. Output: ${GIT_VERSION}")
endif()
# strip leading v
string(SUBSTRING ${GIT_VERSION} 1 -1 TMP_SIMPLE_VERSION)
# remove -dirty if exists
string(REPLACE "-dirty" "" TMP_PROJECT_VERSION ${TMP_SIMPLE_VERSION})
execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse HEAD
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE GIT_REVISION
RESULT_VARIABLE GIT_RESULT
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(${GIT_RESULT})
message(FATAL_ERROR "Could not get revision from git. Git error code: ${GIT_RESULT}. Output: ${GIT_REVISION}")
endif()
set(${GIT_REVISION_HASH} ${GIT_REVISION})
set(${PROJECT_VERSION} ${TMP_PROJECT_VERSION})
set(${SIMPLE_VERSION} ${TMP_SIMPLE_VERSION})
return(PROPAGATE ${PROJECT_VERSION} ${SIMPLE_VERSION} ${GIT_REVISION_HASH})
endblock()
endfunction()
function(elastic_git_get_hash OUTPUT_HASH)
block(SCOPE_FOR VARIABLES)
set(IS_DIRTY false)
execute_process(COMMAND ${GIT_EXECUTABLE} diff-index --quiet HEAD --
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
RESULT_VARIABLE GIT_RESULT
)
if(${GIT_RESULT})
set(IS_DIRTY true)
endif()
execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE GIT_VERSION
RESULT_VARIABLE GIT_RESULT
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(${GIT_RESULT})
message(FATAL_ERROR "Could not get revision from git. Git error code: ${GIT_RESULT}. Output: ${GIT_VERSION}")
endif()
if(IS_DIRTY)
set(TMP_OUTPUT_HASH "${GIT_VERSION}-dirty")
else()
set(TMP_OUTPUT_HASH "${GIT_VERSION}")
endif()
# message(STATUS "elastic_git_get_hash = ${TMP_OUTPUT_HASH}")
set(${OUTPUT_HASH} "${TMP_OUTPUT_HASH}")
return(PROPAGATE ${OUTPUT_HASH})
endblock()
endfunction()