Files
he/process/tools/mbpoll/mbpoll-master/cmake/GitVersion.cmake
T
2026-06-22 15:35:18 +08:00

151 lines
5.0 KiB
CMake

###############################################################################
# Copyright © 2017 epsilonRT, All rights reserved. #
# This software is governed by the CeCILL license <http://www.cecill.info> #
###############################################################################
# GitVersion.cmake
# Dépendances: git
# Variables en sortie :
# ${_prefix}_FOUND
# Si ${_prefix}_FOUND = TRUE:
# ${_prefix}_STRING
# ${_prefix}_SHORT
# ${_prefix}_TINY
# ${_prefix}_MAJOR
# ${_prefix}_MINOR
# ${_prefix}_PATCH
# ${_prefix}_SHA1
find_package(Git)
#-------------------------------------------------------------------------------
function(GetGitVersion _prefix)
set (${_prefix}_FOUND FALSE PARENT_SCOPE)
set (ret 1)
if(GIT_FOUND)
execute_process(COMMAND ${GIT_EXECUTABLE} describe --tags
RESULT_VARIABLE ret OUTPUT_VARIABLE str OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET)
endif()
if(NOT ret EQUAL 0)
set(str v1.0-0)
set(ret 0)
endif()
#message("GetGitVersion:str=${str}")
#message("GetGitVersion:ret=${ret}")
if (ret EQUAL 0 AND str)
string(REGEX MATCH "^[vV][0-9]\\.[0-9].*" str ${str})
#message("GetGitVersion:version=${version}")
if (str)
set (${_prefix}_FOUND TRUE PARENT_SCOPE)
string(LENGTH "${str}" len)
math(EXPR len ${len}-1)
#message("GetGitVersion:len=${len}")
string(SUBSTRING "${str}" 1 ${len} version_string)
#message("GetGitVersion:version_string=${version_string}")
string(REGEX REPLACE "[\\.\\-]" ";" version_list "${version_string}")
#message("GetGitVersion:version_list=${version_list}")
list(LENGTH version_list len)
#message("GetGitVersion:len=${len}")
if (${len} GREATER 0)
list(GET version_list 0 major)
else(${len} GREATER 0)
set(major 1)
endif(${len} GREATER 0)
#message("GetGitVersion:major=${major}")
if (${len} GREATER 1)
list(GET version_list 1 minor)
else(${len} GREATER 1)
set(minor 0)
endif(${len} GREATER 1)
#message("GetGitVersion:minor=${minor}")
set(version_tiny "${major}.${minor}")
if (${len} GREATER 2)
list(GET version_list 2 patch)
set(version_short "${version_tiny}-${patch}")
else(${len} GREATER 2)
set(patch 0)
set(version_short "${version_tiny}")
endif(${len} GREATER 2)
#message("GetGitVersion:patch=${patch}")
if (${len} GREATER 3)
list(GET version_list 3 str)
string(REPLACE "g" "0x" sha1 "${str}")
else(${len} GREATER 3)
set(sha1 "0x0")
endif(${len} GREATER 3)
#message("GetGitVersion:sha1=${sha1}")
#message("GetGitVersion:version_string=${version_string}")
#message("GetGitVersion:version_short=${version_short}")
#message("GetGitVersion:version_tiny=${version_tiny}")
set (${_prefix}_STRING ${version_string} PARENT_SCOPE)
set (${_prefix}_SHORT ${version_short} PARENT_SCOPE)
set (${_prefix}_TINY ${version_tiny} PARENT_SCOPE)
set (${_prefix}_MAJOR ${major} PARENT_SCOPE)
set (${_prefix}_MINOR ${minor} PARENT_SCOPE)
set (${_prefix}_PATCH ${patch} PARENT_SCOPE)
set (${_prefix}_SHA1 ${sha1} PARENT_SCOPE)
unset(version_list)
unset(version_string)
unset(version_short)
unset(version_tiny)
unset(major)
unset(minor)
unset(patch)
unset(sha1)
unset(str)
unset(ret)
unset(len)
else (str)
message(FATAL_ERROR "Unable to find current project version !")
endif (str)
else (ret EQUAL 0 AND str)
message(FATAL_ERROR "Unable to find current project version !")
endif (ret EQUAL 0 AND str)
endfunction()
#-------------------------------------------------------------------------------
function(WriteGitVersionFile _filename)
GetGitVersion(WRITE_GIT_VERSION)
get_filename_component(ext ${_filename} EXT)
#message("WriteGitVersionFile:ext=${ext}")
if (${ext} STREQUAL ".h")
file(WRITE ${_filename} "#define VERSION \"${WRITE_GIT_VERSION_STRING}\"\n")
file(APPEND ${_filename} "#define VERSION_SHORT \"${WRITE_GIT_VERSION_SHORT}\"\n")
file(APPEND ${_filename} "#define VERSION_TINY \"${WRITE_GIT_VERSION_TINY}\"\n")
file(APPEND ${_filename} "#define VERSION_MAJOR ${WRITE_GIT_VERSION_MAJOR}\n")
file(APPEND ${_filename} "#define VERSION_MINOR ${WRITE_GIT_VERSION_MINOR}\n")
file(APPEND ${_filename} "#define VERSION_PATCH ${WRITE_GIT_VERSION_PATCH}\n")
file(APPEND ${_filename} "#define VERSION_SHA1 ${WRITE_GIT_VERSION_SHA1}\n")
elseif (${ext} STREQUAL ".mk")
if (${WRITE_GIT_VERSION_PATCH} EQUAL 0)
file(WRITE ${_filename} "${WRITE_GIT_VERSION_MAJOR}.${WRITE_GIT_VERSION_MINOR}\n")
else()
file(WRITE ${_filename} "${WRITE_GIT_VERSION_MAJOR}.${WRITE_GIT_VERSION_MINOR}.${WRITE_GIT_VERSION_PATCH}\n")
endif()
else()
message(WARNING "unsupported file type ${ext}")
endif()
endfunction()
#-------------------------------------------------------------------------------