OXYGENHUB
◆ main enhanced-x16-emulator / GetGitRevision.cmake.in
1.4 KiB · last changed chore(): initial commit 25 days ago source blame history raw
1
# GetGitRevision.cmake.in
2
3
set(HEAD_DIR "@CMAKE_SOURCE_DIR@")
4
set(OUTPUT_FILE "@GIT_REV_HEADER@")
5
set(GIT_EXECUTABLE "@GIT_EXECUTABLE@")
6
7
if(GIT_EXECUTABLE)
8
    # Check for dirty repo
9
    execute_process(
10
        COMMAND ${GIT_EXECUTABLE} diff-index --quiet HEAD --
11
        WORKING_DIRECTORY ${HEAD_DIR}
12
        RESULT_VARIABLE GIT_DIFF_EXIT_CODE
13
        ERROR_QUIET
14
    )
15
16
    # 0 = Clean, 1 = Dirty
17
    if(GIT_DIFF_EXIT_CODE EQUAL 0)
18
        set(HASH_LEN 8)
19
        set(REV_SUFFIX "")
20
    else()
21
        set(HASH_LEN 7)
22
        set(REV_SUFFIX "+")
23
    endif()
24
25
    # Get the hash
26
    execute_process(
27
        COMMAND ${GIT_EXECUTABLE} rev-parse --short=${HASH_LEN} HEAD
28
        WORKING_DIRECTORY ${HEAD_DIR}
29
        OUTPUT_VARIABLE GIT_REV
30
        OUTPUT_STRIP_TRAILING_WHITESPACE
31
        ERROR_QUIET
32
    )
33
    if(GIT_REV)
34
        string(APPEND GIT_REV "${REV_SUFFIX}")
35
    endif()
36
else()
37
    # If the git package wasn't found
38
    set(GIT_REV "00000000")
39
endif()
40
41
# fallback if the git command failed to find a repo or commit hash
42
if(NOT GIT_REV)
43
    set(GIT_REV "00000000")
44
endif()
45
46
set(GIT_REV_CONTENT "#define GIT_REV \"${GIT_REV}\"\n")
47
48
if(EXISTS "${OUTPUT_FILE}")
49
    file(READ "${OUTPUT_FILE}" OLD_CONTENT)
50
else()
51
    set(OLD_CONTENT "")
52
endif()
53
54
if(NOT "${GIT_REV_CONTENT}" STREQUAL "${OLD_CONTENT}")
55
    file(WRITE "${OUTPUT_FILE}" "${GIT_REV_CONTENT}")
56
    message(STATUS "Git revision updated to: ${GIT_REV}")
57
endif()