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()