From 120e0567cba17eeb57c12a34686fddbbb491b62f Mon Sep 17 00:00:00 2001 From: Etienne Dechamps Date: Sun, 29 Jun 2014 15:22:10 +0100 Subject: [PATCH] Use git description as the tinc version. Instead of using the 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 makes tinc version output more useful, as 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 will look 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") If git describe fails (for example when building from a release tarball), the build automatically falls back to the autoconf-provided VERSION macro (i.e. the old behavior). --- src/Makefile.am | 13 ++++++++----- src/process.c | 2 +- src/tincctl.c | 2 +- src/tincd.c | 2 +- src/version.c | 7 +++++++ src/version.h | 1 + 6 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/Makefile.am b/src/Makefile.am index beb71cdf..cc512b1c 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -2,9 +2,12 @@ sbin_PROGRAMS = tincd tinc sptps_test sptps_keypair -## Make sure version.c is always rebuilt -.PHONY: version.c -version.c: +## Make sure version.c is always rebuilt with the latest git information +.PHONY: version.c version_git.h +version_git.h: + echo >$@ + -GIT_DESCRIPTION="`cd $(@D) && git describe`" && echo "#define GIT_DESCRIPTION \"$$GIT_DESCRIPTION\"" >$@ +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/ecdh.c \ ed25519/ecdsa.c \ $(ed25519_SOURCES) \ @@ -113,7 +116,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/ecdh.c \ ed25519/ecdsa.c \ ed25519/ecdsagen.c \ diff --git a/src/process.c b/src/process.c index 51bd902f..cbc816be 100644 --- a/src/process.c +++ b/src/process.c @@ -223,7 +223,7 @@ bool detach(void) { openlogger(identname, logmode); 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; } diff --git a/src/tincctl.c b/src/tincctl.c index 91f63eff..047aab4f 100644 --- a/src/tincctl.c +++ b/src/tincctl.c @@ -88,7 +88,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-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" diff --git a/src/tincd.c b/src/tincd.c index d497bccc..226f4f5e 100644 --- a/src/tincd.c +++ b/src/tincd.c @@ -343,7 +343,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" diff --git a/src/version.c b/src/version.c index fc62c8a3..325a6f09 100644 --- a/src/version.c +++ b/src/version.c @@ -18,7 +18,14 @@ */ #include "version.h" +#include "version_git.h" +#include "../config.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__; +#ifdef GIT_DESCRIPTION +const char* const BUILD_VERSION = GIT_DESCRIPTION; +#else +const char* const BUILD_VERSION = VERSION; +#endif diff --git a/src/version.h b/src/version.h index d3e4a1f2..9cbecb6e 100644 --- a/src/version.h +++ b/src/version.h @@ -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__ */ -- 2.20.1