xref: /netbsd-src/external/apache2/llvm/dist/libcxx/utils/google-benchmark/cmake/GetGitVersion.cmake (revision 4d6fc14bc9b0c5bf3e30be318c143ee82cadd108)
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