Get configure.ac version values from git
authorRicardo Mones <ricardo@mones.org>
Tue, 19 Mar 2013 23:10:58 +0000 (00:10 +0100)
committerRicardo Mones <ricardo@mones.org>
Tue, 19 Mar 2013 23:10:58 +0000 (00:10 +0100)
Computes the VERSION, MAJOR_VERSION, MINOR_VERSION and MICRO_VERSION
values in configure.ac from 'git describe' output.

Adds new HASH_VERSION and GIT_VERSION, available as VERSION_GIT_HASH
and VERSION_GIT_FULL defines. On releases HASH_VERSION is empty and
GIT_VERSION is equal to VERSION (modulo EXTRA values). Full git version
is shown in about.

Requires latest release version to be tagged with an annotated tag.

Untested on win32 platforms, but should work as long as git and cut
binaries are on %PATH%.

configure.ac
src/common/version.h.in
src/gtk/about.c

index 2669bdc6907ed3495fd05b180997699c1bc8ac66..cb318b6001426dce506452a209eded61f0c48942 100644 (file)
@@ -7,19 +7,36 @@ AC_CONFIG_MACRO_DIR([m4])
 PACKAGE=claws-mail
 
 dnl version number
-MAJOR_VERSION=3
-MINOR_VERSION=9
-MICRO_VERSION=0
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=128
 EXTRA_RELEASE=
 EXTRA_GTK2_VERSION=
 
-if test \( $EXTRA_VERSION -eq 0 \) -o \( "x$EXTRA_RELEASE" != "x" \); then
-    VERSION=${MAJOR_VERSION}.${MINOR_VERSION}.${MICRO_VERSION}${EXTRA_RELEASE}${EXTRA_GTK2_VERSION}
+GIT_VERSION=`git describe --abbrev=6 --dirty --always`
+MAJOR_VERSION=`echo $GIT_VERSION | cut -f1 -d- | cut -f1 -d.`
+MINOR_VERSION=`echo $GIT_VERSION | cut -f1 -d- | cut -f2 -d.`
+MICRO_VERSION=`echo $GIT_VERSION | cut -f1 -d- | cut -f3 -d.`
+EXTRA_VERSION=`echo $GIT_VERSION | cut -f2 -d-`
+HASH_VERSION=`echo $GIT_VERSION | cut -f3 -d-`
+DIRTY_VERSION=`echo $GIT_VERSION | cut -f4 -d-`
+
+if test \( "x$EXTRA_VERSION" != "x" \); then
+    VERSION=${MAJOR_VERSION}.${MINOR_VERSION}.${MICRO_VERSION}git${EXTRA_VERSION}
 else
-    VERSION=${MAJOR_VERSION}.${MINOR_VERSION}.${MICRO_VERSION}cvs${EXTRA_VERSION}${EXTRA_GTK2_VERSION}
+    VERSION=${MAJOR_VERSION}.${MINOR_VERSION}.${MICRO_VERSION}
+    EXTRA_VERSION=0
+fi
+
+if test \( "x$HASH_VERSION" != "x" \); then
+    if test \( "x$DIRTY_VERSION" != "x" \); then
+        VERSION=${VERSION}+${HASH_VERSION}+local
+    else
+        VERSION=${VERSION}+${HASH_VERSION}
+    fi
+fi
+
+if test \( "x$EXTRA_RELEASE" != "x" \); then
+    VERSION=${VERSION}${EXTRA_RELEASE}${EXTRA_GTK2_VERSION}
 fi
 
 dnl set $target
@@ -35,6 +52,8 @@ AC_SUBST(MAJOR_VERSION)
 AC_SUBST(MINOR_VERSION)
 AC_SUBST(MICRO_VERSION)
 AC_SUBST(EXTRA_VERSION)
+AC_SUBST(GIT_VERSION)
+AC_SUBST(HASH_VERSION)
 
 AC_CHECK_PROG(HAVE_GTK_ICON_CACHE, gtk-update-icon-cache, yes, no)
 AM_CONDITIONAL(UPDATE_GTK_ICON_CACHE, test x"$HAVE_GTK_ICON_CACHE" = xyes)
index 00e88c7896a2e1fb66dda22730f5cc05a65eedbe..071b2066471818a30ed5c5ec0a59400a95bce720 100644 (file)
@@ -30,5 +30,7 @@
 #define PROG_VERSION           "Claws Mail "VERSION
 #define VERSION_NUMERIC                MAKE_NUMERIC_VERSION(@MAJOR_VERSION@, @MINOR_VERSION@, \
                                                     @MICRO_VERSION@, @EXTRA_VERSION@)
+#define VERSION_GIT_FULL       "@GIT_VERSION@"
+#define VERSION_GIT_HASH       "@HASH_VERSION@"
 
 #endif /* __VERSION_H__ */
index 441064f5cadc24c727471ecab406f589f3dd5e53..02aca16881b69a66a01b5b1781b154c340441486 100644 (file)
@@ -821,7 +821,7 @@ static void about_create(void)
        gtk_box_pack_start(GTK_BOX(vbox2), label, FALSE, FALSE, 0);
        markup = g_markup_printf_escaped
                ("<span weight=\"bold\" size=\"xx-large\">Claws Mail</span>\nversion %s",
-                VERSION);
+                VERSION_GIT_FULL);
        gtk_label_set_markup(GTK_LABEL(label), markup);
        g_free(markup);