1execute_process(COMMAND git log --pretty=format:'%h' -n 1
2                OUTPUT_VARIABLE GIT_REV
3                WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
4                ERROR_QUIET)
5
6# Check whether we got any revision (which isn't
7# always the case, e.g. when someone downloaded a zip
8# file instead of a checkout)
9if ("${GIT_REV}" STREQUAL "")
10    set(GIT_REV "N/A")
11    set(GIT_DIFF "")
12    set(GIT_TAG "N/A")
13    set(GIT_BRANCH "N/A")
14else()
15    execute_process(
16        COMMAND git diff --quiet --exit-code
17        WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
18        RESULT_VARIABLE GIT_DIFF)
19
20    execute_process(
21        COMMAND git rev-parse --abbrev-ref HEAD
22        WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
23        OUTPUT_VARIABLE GIT_BRANCH)
24
25    execute_process(
26        COMMAND git describe --tags --dirty
27        WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
28        OUTPUT_VARIABLE GIT_TAG ERROR_QUIET)
29
30    string(STRIP "${GIT_REV}" GIT_REV)
31
32    string(SUBSTRING "${GIT_REV}" 1 7 GIT_REV)
33    if (GIT_DIFF)
34        set(GIT_DIFF "-dirty")
35    else()
36        set(GIT_DIFF "")
37    endif()
38
39    string(STRIP "${GIT_TAG}" GIT_TAG)
40    if (NOT GIT_TAG)
41        set(GIT_TAG "${GIT_REV}${GIT_DIFF}")
42    endif()
43
44    string(STRIP "${GIT_BRANCH}" GIT_BRANCH)
45endif()
46
47set(VERSION_STRING
48)
49set(VERSION "
50namespace Dotfield {
51const char* GetVersionInfo() { return \"GIT_TAG: ${GIT_TAG} GIT_REVISION: ${GIT_REV}${GIT_DIFF} GIT_BRANCH: ${GIT_BRANCH}\"; }
52}
53")
54
55if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/version.cpp)
56    file(READ ${CMAKE_CURRENT_SOURCE_DIR}/version.cpp VERSION_)
57else()
58    set(VERSION_ "")
59endif()
60
61if (NOT "${VERSION}" STREQUAL "${VERSION_}")
62    file(WRITE ${CMAKE_CURRENT_SOURCE_DIR}/version.cpp "${VERSION}")
63    message(${VERSION})
64endif()