Skip to content

Instantly share code, notes, and snippets.

@lighta
Last active January 20, 2018 20:09
Show Gist options
  • Save lighta/612498d70eea3c6a9bc672041bfffcd5 to your computer and use it in GitHub Desktop.
Save lighta/612498d70eea3c6a9bc672041bfffcd5 to your computer and use it in GitHub Desktop.
# - Returns a version string from Git tags
#
# This function inspects the annotated git tags for the project and returns a string
# into a CMake variable
# higly adapted from https://raw.githubusercontent.com/google/benchmark/master/cmake/GetGitVersion.cmake
# lighta
#
# get_git_version()
#
# - Example
#
# include(GetGitVersion)
# get_git_version(GIT_VERSION)
# return
# - GIT_VERSION : remote tracking sha of master
# - GIT_HEAD_VERSION : current sha of current branch
#
# Requires CMake 2.8.11+
find_package(Git)
if(__get_git_version)
return()
endif()
set(__get_git_version INCLUDED)
function(get_git_version)
if(GIT_EXECUTABLE)
#determine remote tracking master sha
set (git_cmd "${GIT_EXECUTABLE}") #fix space in path issue
file(TO_NATIVE_PATH ${PROJECT_SOURCE_DIR} NATIVE_PROJECT_SOURCE_DIR)
file(TO_CMAKE_PATH ${PROJECT_SOURCE_DIR} CMAKE_PROJECT_SOURCE_DIR)
message( STATUS "Git Determining remote tracking master sha, PROJECT_SOURCE_DIR =${PROJECT_SOURCE_DIR},${NATIVE_PROJECT_SOURCE_DIR}")
execute_process(COMMAND ${git_cmd} rev-parse origin/master
WORKING_DIRECTORY ${CMAKE_PROJECT_SOURCE_DIR}
RESULT_VARIABLE status
OUTPUT_VARIABLE GIT_VERSION)
if(${status})
message( STATUS "status=${status}")
set(GIT_VERSION "unknow GIT_VERSION=${GIT_VERSION}")
else()
message( STATUS "GIT_VERSION=${GIT_VERSION} status=${status}")
string(STRIP ${GIT_VERSION} GIT_VERSION)
endif()
#determine current head sha
message( STATUS "Git Determining current head sha")
execute_process(COMMAND ${git_cmd} rev-parse --verify HEAD
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
RESULT_VARIABLE status
OUTPUT_VARIABLE GIT_HEAD_VERSION
)
if(${status})
message( STATUS "status=${status}")
set(GIT_HEAD_VERSION "unknow GIT_HEAD_VERSION=${GIT_HEAD_VERSION}")
else()
message( STATUS "GIT_HEAD_VERSION=${GIT_HEAD_VERSION} status=${status}")
string(STRIP ${GIT_HEAD_VERSION} GIT_HEAD_VERSION)
endif()
endif()
message("-- git Version: ${GIT_VERSION}, ${GIT_HEAD_VERSION}")
set(GIT_VERSION ${GIT_VERSION} PARENT_SCOPE)
set(GIT_HEAD_VERSION ${GIT_HEAD_VERSION} PARENT_SCOPE)
endfunction()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment