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 20 include(FindGit) 21 22 macro(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() 66 endmacro() 67