1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
|
###############################################################################
# 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
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()
#-------------------------------------------------------------------------------
|