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")
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])
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
tincd.c \
utils.c utils.h \
xalloc.h \
- version.c version.h \
+ version.c version.h version_git.h \
$(ed25519_SOURCES) \
$(chacha_poly1305_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)
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;
}
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"
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"
*/
#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;
extern const char* const BUILD_DATE;
extern const char* const BUILD_TIME;
+extern const char* const BUILD_VERSION;
#endif /* __TINC_VERSION_H__ */