Solvespace
35 строк · 1.3 Кб
1function(get_git_commit_hash)
2get_filename_component(GIT_DESCRIBE_CMAKE_DIR ${CMAKE_CURRENT_LIST_FILE} PATH)
3get_filename_component(GIT_ROOT ${GIT_DESCRIBE_CMAKE_DIR} PATH)
4set(GIT_DIR "${GIT_ROOT}/.git")
5
6# Add a CMake configure dependency to the currently checked out revision.
7set(GIT_DEPENDS ${GIT_DIR}/HEAD)
8file(READ ${GIT_DIR}/HEAD HEAD_REF)
9if(HEAD_REF MATCHES "ref: (.+)\n")
10set(HEAD_REF ${CMAKE_MATCH_1})
11if(EXISTS "${GIT_DIR}/${HEAD_REF}")
12list(APPEND GIT_DEPENDS ${GIT_DIR}/${HEAD_REF})
13file(READ ${GIT_DIR}/${HEAD_REF} HEAD_REF)
14elseif(EXISTS "${GIT_DIR}/packed-refs")
15list(APPEND GIT_DEPENDS ${GIT_DIR}/packed-refs)
16file(READ "${GIT_DIR}/packed-refs" PACKED_REFS)
17if(${PACKED_REFS} MATCHES "([0-9a-z]*) ${HEAD_REF}")
18set(HEAD_REF ${CMAKE_MATCH_1})
19else()
20set(HEAD_REF "")
21endif()
22else()
23set(HEAD_REF "")
24endif()
25endif()
26set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${GIT_DEPENDS})
27
28string(STRIP ${HEAD_REF} HEAD_REF)
29if(HEAD_REF STREQUAL "")
30message(WARNING "Cannot determine git HEAD")
31else()
32set(GIT_COMMIT_HASH ${HEAD_REF} PARENT_SCOPE)
33endif()
34endfunction()
35get_git_commit_hash()
36