Use git description as the tinc version.

Instead of using a hardcoded version number in configure.ac, this makes
tinc use the live version reported by "git describe", queried on-the-fly
during the build process and regenerated for every build.

This provides several advantages:
 - Less redundancy: git is now the source of truth for version
   information, no need to store it in the repository itself.
 - Simpler release process: just creating a git tag automatically
   updates the version. No need to change files.
 - More useful version information: tinc will now display the number of
   commits since the last tag as well as the commit the binary is built
   from, following the format described in git-describe(1).

Here's an example of tincd --version output:

  tinc version release-1.1pre10-48-gc149315 (built Jun 29 2014 15:21:10, protocol 17.3)

When building directly from a release tag, this would like the following:

  tinc version release-1.1pre10 (built Jun 29 2014 15:21:10, protocol 17.3)

(Note that the format is slightly different - because of the way the
tags are named, it says "release-1.1pre10" instead of just "1.1pre10")
This commit is contained in:
Etienne Dechamps 2014-06-29 15:22:10 +01:00
parent aec82bb1c9
commit e024b7a2c5
7 changed files with 14 additions and 8 deletions

View file

@ -1,7 +1,7 @@
dnl Process this file with autoconf to produce a configure script.
AC_PREREQ(2.61)
AC_INIT([tinc], [1.1pre10])
AC_INIT([tinc], [GIT])
AC_CONFIG_SRCDIR([src/tincd.c])
AC_GNU_SOURCE
AM_INIT_AUTOMAKE([check-news std-options subdir-objects -Wall])

View file

@ -2,8 +2,11 @@
sbin_PROGRAMS = tincd tinc sptps_test sptps_keypair
## Make sure version.c is always rebuilt
.PHONY: version.c
## Make sure version.c is always rebuilt with the latest git information
.PHONY: version.c version_git.h
version_git.h:
echo "#define GIT_DESCRIPTION \"`cd $(@D) && git describe || echo UNKNOWN`\"" >$@
version.c: version_git.h
if LINUX
sbin_PROGRAMS += sptps_speed
@ -91,7 +94,7 @@ tincd_SOURCES = \
tincd.c \
utils.c utils.h \
xalloc.h \
version.c version.h \
version.c version.h version_git.h \
$(ed25519_SOURCES) \
$(chacha_poly1305_SOURCES)
@ -110,7 +113,7 @@ tinc_SOURCES = \
tincctl.c tincctl.h \
top.c top.h \
utils.c utils.h \
version.c version.h \
version.c version.h version_git.h \
$(ed25519_SOURCES) \
$(chacha_poly1305_SOURCES)

View file

@ -224,7 +224,7 @@ bool detach(void) {
openlogger(identname, use_logfile?LOGMODE_FILE:(do_detach?LOGMODE_SYSLOG:LOGMODE_STDERR));
logger(DEBUG_ALWAYS, LOG_NOTICE, "tincd %s (%s %s) starting, debug level %d",
VERSION, BUILD_DATE, BUILD_TIME, debug_level);
BUILD_VERSION, BUILD_DATE, BUILD_TIME, debug_level);
return true;
}

View file

@ -86,7 +86,7 @@ static struct option const long_options[] = {
static void version(void) {
printf("%s version %s (built %s %s, protocol %d.%d)\n", PACKAGE,
VERSION, BUILD_DATE, BUILD_TIME, PROT_MAJOR, PROT_MINOR);
BUILD_VERSION, BUILD_DATE, BUILD_TIME, PROT_MAJOR, PROT_MINOR);
printf("Copyright (C) 1998-2012 Ivo Timmermans, Guus Sliepen and others.\n"
"See the AUTHORS file for a complete list.\n\n"
"tinc comes with ABSOLUTELY NO WARRANTY. This is free software,\n"

View file

@ -320,7 +320,7 @@ int main(int argc, char **argv) {
if(show_version) {
printf("%s version %s (built %s %s, protocol %d.%d)\n", PACKAGE,
VERSION, BUILD_DATE, BUILD_TIME, PROT_MAJOR, PROT_MINOR);
BUILD_VERSION, BUILD_DATE, BUILD_TIME, PROT_MAJOR, PROT_MINOR);
printf("Copyright (C) 1998-2014 Ivo Timmermans, Guus Sliepen and others.\n"
"See the AUTHORS file for a complete list.\n\n"
"tinc comes with ABSOLUTELY NO WARRANTY. This is free software,\n"

View file

@ -18,7 +18,9 @@
*/
#include "version.h"
#include "version_git.h"
/* This file is always rebuilt (even if there are no changes) so that the following is updated */
const char* const BUILD_DATE = __DATE__;
const char* const BUILD_TIME = __TIME__;
const char* const BUILD_VERSION = GIT_DESCRIPTION;

View file

@ -22,5 +22,6 @@
extern const char* const BUILD_DATE;
extern const char* const BUILD_TIME;
extern const char* const BUILD_VERSION;
#endif /* __TINC_VERSION_H__ */