1MACRO(CREATE_QGSVERSION)
2  IF (EXISTS ${CMAKE_SOURCE_DIR}/.git/index)
3    FIND_PROGRAM(GITCOMMAND git PATHS c:/cygwin/bin)
4    IF(GITCOMMAND)
5      IF(WIN32 AND NOT CMAKE_CROSS_COMPILING)
6        IF(USING_NINJA)
7         SET(ARG %a)
8        ELSE(USING_NINJA)
9         SET(ARG %%a)
10        ENDIF(USING_NINJA)
11        ADD_CUSTOM_COMMAND(
12          OUTPUT ${CMAKE_BINARY_DIR}/qgsversion.h ${CMAKE_BINARY_DIR}/qgsversion.inc
13          COMMAND for /f \"usebackq tokens=1\" ${ARG} in "(`\"${GITCOMMAND}\" log -n1 --oneline`)" do echo \#define QGSVERSION \"${ARG}\" >${CMAKE_BINARY_DIR}/qgsversion.h.temp
14          COMMAND for /f \"usebackq tokens=1\" ${ARG} in "(`\"${GITCOMMAND}\" log -n1 --oneline`)" do echo PROJECT_NUMBER = \"${COMPLETE_VERSION}-${RELEASE_NAME} \(${ARG}\)\" >${CMAKE_BINARY_DIR}/qgsversion.inc
15          COMMAND ${CMAKE_COMMAND} -DSRC=${CMAKE_BINARY_DIR}/qgsversion.h.temp -DDST=${CMAKE_BINARY_DIR}/qgsversion.h -P ${CMAKE_SOURCE_DIR}/cmake/CopyIfChanged.cmake
16          MAIN_DEPENDENCY ${CMAKE_SOURCE_DIR}/.git/index
17          WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
18        )
19      ELSE(WIN32 AND NOT CMAKE_CROSS_COMPILING)
20        ADD_CUSTOM_COMMAND(
21          OUTPUT ${CMAKE_BINARY_DIR}/qgsversion.h ${CMAKE_BINARY_DIR}/qgsversion.inc
22          COMMAND ${GITCOMMAND} log -n1 --pretty=\#define\\ QGSVERSION\\ \\"%h\\" >${CMAKE_BINARY_DIR}/qgsversion.h.temp
23          COMMAND ${GITCOMMAND} log -n1 --pretty='PROJECT_NUMBER = \"${COMPLETE_VERSION}-${RELEASE_NAME} \(%h\)\"' >${CMAKE_BINARY_DIR}/qgsversion.inc
24          COMMAND ${GITCOMMAND} config remote.$$\(${GITCOMMAND} config branch.$$\(${GITCOMMAND} name-rev --name-only HEAD\).remote\).url | sed -e 's/^/\#define QGS_GIT_REMOTE_URL \"/' -e 's/$$/\"/' >>${CMAKE_BINARY_DIR}/qgsversion.h.temp
25          COMMAND ${CMAKE_COMMAND} -DSRC=${CMAKE_BINARY_DIR}/qgsversion.h.temp -DDST=${CMAKE_BINARY_DIR}/qgsversion.h -P ${CMAKE_SOURCE_DIR}/cmake/CopyIfChanged.cmake
26          MAIN_DEPENDENCY ${CMAKE_SOURCE_DIR}/.git/index
27          WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
28        )
29      ENDIF(WIN32 AND NOT CMAKE_CROSS_COMPILING)
30    ELSE(GITCOMMAND)
31      MESSAGE(STATUS "git marker, but no git found - version will be unknown")
32      IF(NOT SHA)
33        SET(SHA "unknown")
34      ENDIF(NOT SHA)
35      FILE(WRITE ${CMAKE_BINARY_DIR}/qgsversion.h "#define QGSVERSION \"${SHA}\"\n")
36      FILE(WRITE ${CMAKE_BINARY_DIR}/qgsversion.inc "PROJECT_NUMBER = \"${COMPLETE_VERSION}-${RELEASE_NAME} (${SHA})\"\n")
37    ENDIF(GITCOMMAND)
38  ELSE (EXISTS ${CMAKE_SOURCE_DIR}/.git/index)
39    IF(NOT SHA)
40      SET(SHA "exported")
41    ENDIF(NOT SHA)
42    FILE(WRITE ${CMAKE_BINARY_DIR}/qgsversion.h "#define QGSVERSION \"${SHA}\"\n")
43    FILE(WRITE ${CMAKE_BINARY_DIR}/qgsversion.inc "PROJECT_NUMBER = \"${COMPLETE_VERSION}-${RELEASE_NAME} (${SHA})\"\n")
44  ENDIF (EXISTS ${CMAKE_SOURCE_DIR}/.git/index)
45
46  ADD_CUSTOM_TARGET(version ALL DEPENDS ${CMAKE_BINARY_DIR}/qgsversion.h)
47ENDMACRO(CREATE_QGSVERSION)
48