GenerateVersion.cmake (1655B)
1 set(NVIM_VERSION 2 "v${NVIM_VERSION_MAJOR}.${NVIM_VERSION_MINOR}.${NVIM_VERSION_PATCH}${NVIM_VERSION_PRERELEASE}") 3 4 execute_process( 5 COMMAND git --git-dir=${NVIM_SOURCE_DIR}/.git --work-tree=${NVIM_SOURCE_DIR} describe --first-parent --dirty --always 6 OUTPUT_VARIABLE GIT_TAG 7 OUTPUT_STRIP_TRAILING_WHITESPACE 8 ERROR_QUIET 9 RESULT_VARIABLE RES) 10 if(RES) 11 message(STATUS "Using NVIM_VERSION: ${NVIM_VERSION}") 12 file(WRITE "${OUTPUT}" "") 13 return() 14 endif() 15 16 # Extract build info: "v0.9.0-145-g0f9113907" => "g0f9113907" 17 string(REGEX REPLACE ".*\\-" "" NVIM_VERSION_BUILD "${GIT_TAG}") 18 19 # `git describe` annotates the most recent tagged release; for pre-release 20 # builds we append that to the dev version. 21 if(NVIM_VERSION_PRERELEASE) 22 # Extract pre-release info: "v0.8.0-145-g0f9113907" => "145-g0f9113907" 23 string(REGEX REPLACE "^v[0-9]+.[0-9]+.[0-9]+-" "" NVIM_VERSION_GIT "${GIT_TAG}") 24 # Replace "-" with "+": "145-g0f9113907" => "145+g0f9113907" 25 string(REGEX REPLACE "^([0-9]+)-([a-z0-9]+)" "\\1+\\2" NVIM_VERSION_GIT "${NVIM_VERSION_GIT}") 26 set(NVIM_VERSION "${NVIM_VERSION}-${NVIM_VERSION_GIT}") 27 endif() 28 29 set(NVIM_VERSION_STRING "#define NVIM_VERSION_MEDIUM \"${NVIM_VERSION}\"\n#define NVIM_VERSION_BUILD \"${NVIM_VERSION_BUILD}\"\n") 30 31 string(SHA1 CURRENT_VERSION_HASH "${NVIM_VERSION_STRING}") 32 if(EXISTS ${OUTPUT}) 33 file(SHA1 "${OUTPUT}" NVIM_VERSION_HASH) 34 endif() 35 36 if(NOT "${NVIM_VERSION_HASH}" STREQUAL "${CURRENT_VERSION_HASH}") 37 message(STATUS "Using NVIM_VERSION: ${NVIM_VERSION}") 38 file(WRITE "${OUTPUT}" "${NVIM_VERSION_STRING}") 39 if(WIN32) 40 configure_file("${OUTPUT}" "${OUTPUT}" NEWLINE_STYLE UNIX) 41 endif() 42 endif()