mirror of
https://github.com/ichmagmaus111/ghostgram.git
synced 2026-07-16 04:27:18 +02:00
79 lines
3.3 KiB
CMake
79 lines
3.3 KiB
CMake
# Redistribution and use is allowed according to the terms of the BSD license.
|
|
#
|
|
# Copyright (c) 2011 Peter Johnson
|
|
|
|
macro (VERSION_GEN _version _version_file _default_version)
|
|
set (_vn "v${_default_version}")
|
|
|
|
# First see if there is a version file (included in release tarballs),
|
|
# then try git-describe, then default.
|
|
if (EXISTS "${CMAKE_SOURCE_DIR}/version")
|
|
file (STRINGS "${CMAKE_SOURCE_DIR}/version" _version_strs LIMIT_COUNT 1)
|
|
list (GET _version_strs 0 _version_strs0)
|
|
if (NOT (${_version_strs0} STREQUAL ""))
|
|
set (_vn "v${_version_strs0}")
|
|
endif (NOT (${_version_strs0} STREQUAL ""))
|
|
elseif (EXISTS "${CMAKE_SOURCE_DIR}/.git")
|
|
execute_process (COMMAND git describe --match "v[0-9]*" --abbrev=4 HEAD
|
|
RESULT_VARIABLE _git_result
|
|
OUTPUT_VARIABLE _git_vn
|
|
ERROR_QUIET
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
|
|
if (_git_result EQUAL 0)
|
|
# Special handling until we get a more recent tag on the master
|
|
# branch
|
|
if (_git_vn MATCHES "^v0[.]1[.]0")
|
|
execute_process (COMMAND git merge-base v${_default_version} HEAD
|
|
OUTPUT_VARIABLE _merge_base
|
|
ERROR_QUIET
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
#message (STATUS "Merge base: ${_merge_base}")
|
|
|
|
execute_process (COMMAND git rev-list ${_merge_base}..HEAD
|
|
OUTPUT_VARIABLE _rev_list
|
|
ERROR_QUIET)
|
|
string (REGEX MATCHALL "[^\n]*\n" _rev_list_lines "${_rev_list}")
|
|
#message (STATUS "Rev list: ${_rev_list_lines}")
|
|
list (LENGTH _rev_list_lines _vn1)
|
|
|
|
execute_process (COMMAND git rev-list --max-count=1 --abbrev-commit --abbrev=4 HEAD
|
|
OUTPUT_VARIABLE _vn2
|
|
ERROR_QUIET
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
|
|
set (_git_vn "v${_default_version}-${_vn1}-g${_vn2}")
|
|
endif (_git_vn MATCHES "^v0[.]1[.]0")
|
|
|
|
# Append -dirty if there are local changes
|
|
execute_process (COMMAND git update-index -q --refresh)
|
|
execute_process (COMMAND git diff-index --name-only HEAD --
|
|
OUTPUT_VARIABLE _git_vn_dirty)
|
|
if (_git_vn_dirty)
|
|
set (_git_vn "${_git_vn}-dirty")
|
|
endif (_git_vn_dirty)
|
|
|
|
# Substitute . for - in the result
|
|
string (REPLACE "-" "." _vn "${_git_vn}")
|
|
endif (_git_result EQUAL 0)
|
|
endif (EXISTS "${CMAKE_SOURCE_DIR}/version")
|
|
|
|
# Strip leading "v" from version
|
|
#message (STATUS "_vn: ${_vn}")
|
|
string (REGEX REPLACE "^v*(.+)" "\\1" _vn "${_vn}")
|
|
|
|
# Update version file if required
|
|
if (EXISTS ${_version_file})
|
|
file (STRINGS ${_version_file} _version_strs LIMIT_COUNT 1)
|
|
list (GET _version_strs 0 _vc)
|
|
else (EXISTS ${_version_file})
|
|
set (_vc "unset")
|
|
endif (EXISTS ${_version_file})
|
|
if (NOT ("${_vn}" STREQUAL "${_vc}"))
|
|
file (WRITE ${_version_file} "${_vn}")
|
|
endif (NOT ("${_vn}" STREQUAL "${_vc}"))
|
|
|
|
# Set output version variable
|
|
set (${_version} ${_vn})
|
|
endmacro (VERSION_GEN)
|