|
1 | 1 | # Generated from git-describe.cmake.in |
2 | 2 | set(DFHACK_BUILD_ID "@DFHACK_BUILD_ID@") |
3 | 3 |
|
4 | | -if(NOT(EXISTS "${GIT_EXECUTABLE}")) |
5 | | - message(FATAL_ERROR "git-describe failed: could not find git at ${GIT_EXECUTABLE}") |
6 | | -endif() |
| 4 | +# Fallbacks used when the source tree is not a git checkout or when revision |
| 5 | +# information cannot be obtained. |
| 6 | +set(DFHACK_GIT_DESCRIPTION "@DFHACK_VERSION@-unknown") |
| 7 | +set(DFHACK_GIT_COMMIT "unknown") |
| 8 | +set(DFHACK_GIT_XML_EXPECTED_COMMIT "unknown") |
| 9 | +set(DFHACK_GIT_XML_COMMIT "unknown") |
| 10 | +set(DFHACK_GIT_TAGGED FALSE) |
| 11 | +set(DFHACK_GIT_XML_MATCH FALSE) |
7 | 12 |
|
8 | | -execute_process(COMMAND ${GIT_EXECUTABLE} describe --tags --abbrev=8 --long |
9 | | - WORKING_DIRECTORY "${dfhack_SOURCE_DIR}" |
10 | | - OUTPUT_VARIABLE DFHACK_GIT_DESCRIPTION |
11 | | - OUTPUT_STRIP_TRAILING_WHITESPACE |
12 | | - RESULT_VARIABLE DFHACK_GIT_DESCRIPTION_RESULT) |
13 | | -execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse HEAD |
14 | | - WORKING_DIRECTORY "${dfhack_SOURCE_DIR}" |
15 | | - OUTPUT_VARIABLE DFHACK_GIT_COMMIT |
16 | | - OUTPUT_STRIP_TRAILING_WHITESPACE) |
17 | | -execute_process(COMMAND ${GIT_EXECUTABLE} describe --tags --abbrev=8 --exact-match |
18 | | - WORKING_DIRECTORY "${dfhack_SOURCE_DIR}" |
19 | | - RESULT_VARIABLE DFHACK_GIT_TAGGED_RESULT |
20 | | - OUTPUT_QUIET ERROR_QUIET) |
| 13 | +if(EXISTS "${dfhack_SOURCE_DIR}/.git") |
| 14 | + if(NOT GIT_EXECUTABLE OR NOT EXISTS "${GIT_EXECUTABLE}") |
| 15 | + message(WARNING "git-describe: could not find git; version information will be unavailable") |
| 16 | + else() |
| 17 | + execute_process(COMMAND ${GIT_EXECUTABLE} describe --tags --abbrev=8 --long |
| 18 | + WORKING_DIRECTORY "${dfhack_SOURCE_DIR}" |
| 19 | + OUTPUT_VARIABLE DFHACK_GIT_DESCRIPTION |
| 20 | + OUTPUT_STRIP_TRAILING_WHITESPACE |
| 21 | + RESULT_VARIABLE DFHACK_GIT_DESCRIPTION_RESULT) |
| 22 | + execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse HEAD |
| 23 | + WORKING_DIRECTORY "${dfhack_SOURCE_DIR}" |
| 24 | + OUTPUT_VARIABLE DFHACK_GIT_COMMIT |
| 25 | + OUTPUT_STRIP_TRAILING_WHITESPACE) |
| 26 | + execute_process(COMMAND ${GIT_EXECUTABLE} describe --tags --abbrev=8 --exact-match |
| 27 | + WORKING_DIRECTORY "${dfhack_SOURCE_DIR}" |
| 28 | + RESULT_VARIABLE DFHACK_GIT_TAGGED_RESULT |
| 29 | + OUTPUT_QUIET ERROR_QUIET) |
21 | 30 |
|
22 | | -# Check library/xml for matching commits |
23 | | -execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse HEAD:library/xml |
24 | | - WORKING_DIRECTORY "${dfhack_SOURCE_DIR}" |
25 | | - OUTPUT_VARIABLE DFHACK_GIT_XML_EXPECTED_COMMIT |
26 | | - OUTPUT_STRIP_TRAILING_WHITESPACE) |
27 | | -execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse HEAD |
28 | | - WORKING_DIRECTORY "${dfhack_SOURCE_DIR}/library/xml" |
29 | | - OUTPUT_VARIABLE DFHACK_GIT_XML_COMMIT |
30 | | - OUTPUT_STRIP_TRAILING_WHITESPACE) |
| 31 | + # Check library/xml for matching commits |
| 32 | + execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse HEAD:library/xml |
| 33 | + WORKING_DIRECTORY "${dfhack_SOURCE_DIR}" |
| 34 | + OUTPUT_VARIABLE DFHACK_GIT_XML_EXPECTED_COMMIT |
| 35 | + OUTPUT_STRIP_TRAILING_WHITESPACE) |
| 36 | + if(EXISTS "${dfhack_SOURCE_DIR}/library/xml/.git") |
| 37 | + execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse HEAD |
| 38 | + WORKING_DIRECTORY "${dfhack_SOURCE_DIR}/library/xml" |
| 39 | + OUTPUT_VARIABLE DFHACK_GIT_XML_COMMIT |
| 40 | + OUTPUT_STRIP_TRAILING_WHITESPACE) |
| 41 | + endif() |
31 | 42 |
|
32 | | -if(NOT(${DFHACK_GIT_DESCRIPTION_RESULT} EQUAL 0)) |
33 | | - message(FATAL_ERROR "git-describe failed: ${DFHACK_GIT_DESCRIPTION_RESULT}") |
34 | | -endif() |
| 43 | + if(DFHACK_GIT_TAGGED_RESULT STREQUAL "0") |
| 44 | + set(DFHACK_GIT_TAGGED TRUE) |
| 45 | + endif() |
35 | 46 |
|
36 | | -if(${DFHACK_GIT_TAGGED_RESULT} EQUAL 0) |
37 | | - set(DFHACK_GIT_TAGGED TRUE) |
38 | | -else() |
39 | | - set(DFHACK_GIT_TAGGED FALSE) |
40 | | -endif() |
| 47 | + if(NOT "${DFHACK_GIT_XML_COMMIT}" STREQUAL "" |
| 48 | + AND NOT "${DFHACK_GIT_XML_COMMIT}" STREQUAL "unknown" |
| 49 | + AND "${DFHACK_GIT_XML_COMMIT}" STREQUAL "${DFHACK_GIT_XML_EXPECTED_COMMIT}") |
| 50 | + set(DFHACK_GIT_XML_MATCH TRUE) |
| 51 | + endif() |
41 | 52 |
|
42 | | -if(${DFHACK_GIT_XML_COMMIT} STREQUAL ${DFHACK_GIT_XML_EXPECTED_COMMIT}) |
43 | | - set(DFHACK_GIT_XML_MATCH TRUE) |
44 | | -else() |
45 | | - set(DFHACK_GIT_XML_MATCH FALSE) |
| 53 | + if(NOT DFHACK_GIT_DESCRIPTION_RESULT STREQUAL "0") |
| 54 | + # e.g. a clone with no reachable tags; fall back to the commit hash |
| 55 | + message(WARNING "git-describe: 'git describe' failed; using commit hash as description") |
| 56 | + set(DFHACK_GIT_DESCRIPTION "${DFHACK_GIT_COMMIT}") |
| 57 | + endif() |
| 58 | + endif() |
46 | 59 | endif() |
47 | 60 |
|
48 | 61 | configure_file(${dfhack_SOURCE_DIR}/library/include/git-describe.h.in ${dfhack_SOURCE_DIR}/library/include/git-describe.h) |
0 commit comments