summaryrefslogtreecommitdiff
path: root/cmake/version.cmake
blob: 41c654d33250389ff600037c6e5ff9ccb045825c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
FIND_PROGRAM(GIT_EXECUTABLE NAMES git git.exe DOC "git command line client")
FIND_PROGRAM(DATE_EXECUTABLE NAMES date DOC "unix date command")

get_filename_component(SOURCE_DIR ${SRC} PATH)

if (GIT_EXECUTABLE)
   EXECUTE_PROCESS(
      COMMAND ${GIT_EXECUTABLE} log "--format=%ct" # output as unix timestamp
      WORKING_DIRECTORY "${SOURCE_DIR}"
      OUTPUT_VARIABLE GIT_OUTPUT_DATE
      ERROR_VARIABLE GIT_ERROR
      OUTPUT_STRIP_TRAILING_WHITESPACE
      ERROR_STRIP_TRAILING_WHITESPACE
   )
   if(NOT GIT_OUTPUT_DATE)
      message(STATUS "Cannot determine current git commit - git error: '${GIT_ERROR}'")
      set(GIT_OUTPUT_DATE "0000000000")
   else()
      EXECUTE_PROCESS(
         COMMAND ${GIT_EXECUTABLE} log "--format='%h'"
         WORKING_DIRECTORY "${SOURCE_DIR}"
         OUTPUT_VARIABLE GIT_OUTPUT_HASH
         ERROR_VARIABLE GIT_ERROR
         OUTPUT_STRIP_TRAILING_WHITESPACE
         ERROR_STRIP_TRAILING_WHITESPACE
      )
      if(NOT GIT_OUTPUT_HASH)
         message(STATUS "Cannot determine current git commit - git error: '${GIT_ERROR}'")
         set(GIT_OUTPUT_HASH "xdevxgitxnotxfound")
      endif(NOT GIT_OUTPUT_HASH)
   endif(NOT GIT_OUTPUT_DATE)
else()
   message(STATUS "git not found, cannot record git commit")
   set(GIT_OUTPUT_DATE "0000000000") # To match length of android versionCode
   set(GIT_OUTPUT_HASH "xdevxgitxnotxfound")
endif(GIT_EXECUTABLE)

string(REGEX MATCH "^[0-9]+" VERSION_NUM ${GIT_OUTPUT_DATE} )

EXECUTE_PROCESS(
   COMMAND ${DATE_EXECUTABLE} "+%y%m%d%H%M" "-d \@${VERSION_NUM}" # output as unix timestamp
   WORKING_DIRECTORY "${SOURCE_DIR}"
   OUTPUT_VARIABLE DATE_CONVERT_OUTPUT
   ERROR_VARIABLE DATE_CONVERT_ERROR
   OUTPUT_STRIP_TRAILING_WHITESPACE
   ERROR_STRIP_TRAILING_WHITESPACE
)
if(NOT DATE_CONVERT_ERROR)
   string(REGEX MATCH "[0-9]+" VERSION_CODE ${DATE_CONVERT_OUTPUT})
else(NOT DATE_CONVERT_ERROR)
   message(FATAL_ERROR "Date convert not working\nError message:\n${DATE_CONVERT_ERROR}")
endif(NOT DATE_CONVERT_ERROR)

string(REGEX MATCH "[a-z0-9]+" VERSION ${GIT_OUTPUT_HASH} )

if (STRIP_M)
   set(VERSION ${VERSION_CODE})
endif()

set(NAVIT_VARIANT "-")
set(GIT_VERSION VERSION)

set(${NAME} ${VERSION})

message (STATUS "Git commit: ${VERSION}")
message (STATUS "Git   date: ${VERSION_CODE}")
CONFIGURE_FILE(${SRC} ${DST} @ONLY)