1# This module defines the following variables utilizing 2# git to determine the parent tag. And if found the macro 3# will attempt to parse them in the github tag fomat 4# 5# Useful for auto-versioning in our CMakeLists 6# 7# EVENT_GIT___VERSION_MAJOR - Major version. 8# EVENT_GIT___VERSION_MINOR - Minor version 9# EVENT_GIT___VERSION_STAGE - Stage version 10# 11# Example usage: 12# 13# event_fuzzy_version_from_git() 14# message("Libvent major=${EVENT_GIT___VERSION_MAJOR}") 15# message(" minor=${EVENT_GIT___VERSION_MINOR}") 16# message(" patch=${EVENT_GIT___VERSION_PATCH}") 17# message(" stage=${EVENT_GIT___VERSION_STAGE}") 18# endif() 19 20include(FindGit) 21 22macro(event_fuzzy_version_from_git) 23 # set our defaults. 24 set(EVENT_GIT___VERSION_MAJOR 2) 25 set(EVENT_GIT___VERSION_MINOR 1) 26 set(EVENT_GIT___VERSION_PATCH 12) 27 set(EVENT_GIT___VERSION_STAGE "stable") 28 29 find_package(Git) 30 31 if (GIT_FOUND) 32 execute_process( 33 COMMAND 34 ${GIT_EXECUTABLE} describe --abbrev=0 --always 35 WORKING_DIRECTORY 36 ${PROJECT_SOURCE_DIR} 37 RESULT_VARIABLE 38 GITRET 39 OUTPUT_VARIABLE 40 GITVERSION 41 OUTPUT_STRIP_TRAILING_WHITESPACE 42 ) 43 44 string(REGEX REPLACE "[\\._-]" ";" VERSION_LIST "${GITVERSION}") 45 if(VERSION_LIST) 46 list(LENGTH VERSION_LIST VERSION_LIST_LENGTH) 47 endif() 48 49 if ((GITRET EQUAL 0) AND (VERSION_LIST_LENGTH EQUAL 5)) 50 list(GET VERSION_LIST 1 _MAJOR) 51 list(GET VERSION_LIST 2 _MINOR) 52 list(GET VERSION_LIST 3 _PATCH) 53 list(GET VERSION_LIST 4 _STAGE) 54 55 set(_DEFAULT_VERSION "${EVENT_GIT___VERSION_MAJOR}.${EVENT_GIT___VERSION_MINOR}.${EVENT_GIT___VERSION_PATCH}-${EVENT_GIT___VERSION_STAGE}") 56 set(_GIT_VERSION "${_MAJOR}.${_MINOR}.${_PATCH}-${_STAGE}") 57 58 if (${_DEFAULT_VERSION} VERSION_LESS ${_GIT_VERSION}) 59 set(EVENT_GIT___VERSION_MAJOR ${_MAJOR}) 60 set(EVENT_GIT___VERSION_MINOR ${_MINOR}) 61 set(EVENT_GIT___VERSION_PATCH ${_PATCH}) 62 set(EVENT_GIT___VERSION_STAGE ${_STAGE}) 63 endif() 64 endif() 65 endif() 66endmacro() 67