Use git description as the tinc version.
authorEtienne Dechamps <etienne@edechamps.fr>
Sun, 29 Jun 2014 14:22:10 +0000 (15:22 +0100)
committerEtienne Dechamps <etienne@edechamps.fr>
Mon, 4 May 2015 20:38:23 +0000 (21:38 +0100)
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
src/process.c
src/tincctl.c
src/tincd.c
src/version.c
src/version.h

index beb71cdfbd01aa39e90b1ac7e8592712663e356b..cc512b1c0cc0d87810beb62d6c67c016a637bdab 100644 (file)
@@ -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 \
index 51bd902fb13a104e070f35c6493f244b8246bf32..cbc816be5b5667c2100e07f671929cffe7d2c8fc 100644 (file)
@@ -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;
 }
index 91f63effb08f16789595ea364603f70bb0597d99..047aab4f7473dcbc2a3ec21efc4684839ed1c967 100644 (file)
@@ -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"
index d497bccc063132bb10b3f03070f4b2a615ae1207..226f4f5e9911ac23e3deb0694bb7d8ae94cd72e2 100644 (file)
@@ -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"
index fc62c8a399f5d5d64646a7de8a197edf7b493dd1..325a6f09d8370eeeca958abe0abccc911fa58bf3 100644 (file)
 */
 
 #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
index d3e4a1f2753b4cb49af8c305876279d40053c9e3..9cbecb6e51e62d56d6bc5479529c9454211fe059 100644 (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__ */