aboutsummaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2015-11-01 17:08:38 -0500
committerJustin M. Keyes <justinkz@gmail.com>2015-11-01 21:31:29 -0500
commitd0401b04a4ed6a1684091a84bfd262b2b2cb560f (patch)
tree758526fcc63bc9fa1970c5de80155c0c95077064 /CMakeLists.txt
parentc4826c300340a9e4df20964a14650caf64fc1b58 (diff)
downloadrneovim-d0401b04a4ed6a1684091a84bfd262b2b2cb560f.tar.gz
rneovim-d0401b04a4ed6a1684091a84bfd262b2b2cb560f.tar.bz2
rneovim-d0401b04a4ed6a1684091a84bfd262b2b2cb560f.zip
build: Use `git describe` for version strings.
When building in a git repo: - If HEAD corresponds to an annotated tag, (i.e. git_get_exact_tag() returns truthy) the current build is considered a "release" build: NVIM_VERSION_MEDIUM is directly assigned the tagged version name, and NVIM_VERSION_* defines are ignored. - If HEAD is not a tagged release, then NVIM_VERSION_MEDIUM is directly assigned the result of `git describe`. If git (or the repo) is not available: - The NVIM_VERSION_* defines are used to define NVIM_VERSION_MEDIUM. Sample outputs for `nvim --version` and `nvim +version`: Building with git @ non-tagged commit e66df14: NVIM v0.1.0-1-ge66df14 (compiled Nov 1 2015 19:10:30) Commit: e66df148f9401be17adab324a6e41d927aae20b3 Building with git @ v0.1.1 tag: NVIM v0.1.1 (compiled Nov 1 2015 19:03:52) [no "Commit:" line] Building this commit _not_ in a git repo: NVIM 0.1.0-dev (compiled Nov 1 2015 19:16:11) [no "Commit:" line]
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt24
1 files changed, 13 insertions, 11 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4e43bbcd41..f11b9995c0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -47,24 +47,26 @@ if(NOT CMAKE_BUILD_TYPE)
endif()
# Version tokens
+# - In a git repo, these tokens are _ignored_.
+# - If the current HEAD is tagged, the tag name is used.
+# - Otherwise the result of `git describe` is used.
+# - If not in a git repo (e.g. a tarball) these tokens set the version string.
set(NVIM_VERSION_MAJOR 0)
set(NVIM_VERSION_MINOR 1)
set(NVIM_VERSION_PATCH 0)
+set(NVIM_VERSION_PRERELEASE "-dev")
file(TO_CMAKE_PATH ${CMAKE_CURRENT_LIST_DIR}/.git FORCED_GIT_DIR)
include(GetGitRevisionDescription)
-if(NVIM_VERSION_PRERELEASE)
- get_git_head_revision(GIT_REFSPEC NVIM_VERSION_COMMIT)
-
- # TODO(justinmk): UTC time would be nice here #1071
- git_timestamp(GIT_TIMESTAMP)
- if(GIT_TIMESTAMP)
- set(NVIM_VERSION_BUILD "+${GIT_TIMESTAMP}")
+get_git_head_revision(GIT_REFSPEC NVIM_VERSION_COMMIT)
+if(NVIM_VERSION_COMMIT) # is a git repo
+ git_get_exact_tag(NVIM_VERSION_MEDIUM)
+ if(NVIM_VERSION_MEDIUM) # is a tagged release
+ unset(NVIM_VERSION_COMMIT)
+ else() # is a dev build
+ git_describe(NVIM_VERSION_MEDIUM)
+ get_git_head_revision(GIT_REFSPEC NVIM_VERSION_COMMIT)
endif()
-else()
- # If possible, get the Git tag for the current revision.
- git_get_exact_tag(NVIM_VERSION_COMMIT)
- set(NVIM_VERSION_BUILD "")
endif()
set(NVIM_VERSION_BUILD_TYPE "${CMAKE_BUILD_TYPE}")