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