Browse code

build: add git revision to --version output if build from git repository

If source is located at git repository, acquire branch and revision
of head to be printed at --version output.

Signed-off-by: Alon Bar-Lev <alon.barlev@gmail.com>
Acked-by: David Sommerseth <davids@redhat.com>
Message-Id: 1336199983-9916-1-git-send-email-alon.barlev@gmail.com
URL: http://article.gmane.org/gmane.network.openvpn.devel/6431
Signed-off-by: David Sommerseth <davids@redhat.com>

Alon Bar-Lev authored on 2012/05/05 15:39:42
Showing 6 changed files
... ...
@@ -51,3 +51,4 @@ doc/openvpn.8.html
51 51
 distro/rpm/openvpn.spec
52 52
 tests/t_client.sh
53 53
 src/openvpn/openvpn
54
+config-version.h
... ...
@@ -40,10 +40,20 @@ MAINTAINERCLEANFILES = \
40 40
 	$(srcdir)/depcomp $(srcdir)/aclocal.m4 \
41 41
 	$(srcdir)/config.guess $(srcdir)/config.sub
42 42
 
43
+CLEANFILES = \
44
+	config-version.h
45
+
43 46
 EXTRA_DIST = \
44 47
 	contrib \
45 48
 	debug
46 49
 
50
+.PHONY: config-version.h
51
+
52
+if GIT_CHECKOUT
53
+BUILT_SOURCES = \
54
+	config-version.h
55
+endif
56
+
47 57
 SUBDIRS = build distro include src sample doc tests
48 58
 
49 59
 dist_doc_DATA = \
... ...
@@ -56,6 +66,7 @@ dist_doc_DATA = \
56 56
 dist_noinst_DATA = \
57 57
 	.gitignore \
58 58
 	.gitattributes \
59
+	config-version.h.in \
59 60
 	PORTS \
60 61
 	README.IPv6 TODO.IPv6 \
61 62
 	README.polarssl \
... ...
@@ -78,3 +89,13 @@ if WIN32
78 78
 rootdir=$(prefix)
79 79
 root_DATA = version.sh
80 80
 endif
81
+
82
+config-version.h:
83
+	@CONFIGURE_GIT_REVISION="`GIT_DIR=\"$(top_srcdir)/.git\" $(GIT) rev-parse --symbolic-full-name HEAD`/`GIT_DIR=\"$(top_srcdir)/.git\" $(GIT) rev-parse --short=16 HEAD`"; \
84
+		$(SED) "s#@CONFIGURE_GIT_REVISION[@]#$${CONFIGURE_GIT_REVISION}#g" "$(srcdir)/config-version.h.in" > config-version.h.tmp
85
+	@if ! [ -f config-version.h ] || ! cmp -s config-version.h.tmp config-version.h; then \
86
+		echo "replacing config-version.h"; \
87
+		mv config-version.h.tmp config-version.h; \
88
+	else \
89
+		rm -f config-version.h.tmp; \
90
+	fi
... ...
@@ -43,6 +43,11 @@ ifdef(
43 43
 	[AC_DEFUN([AC_USE_SYSTEM_EXTENSIONS], [GNU_SOURCE])]
44 44
 )
45 45
 ifdef(
46
+	[AC_PROG_SED],
47
+	,
48
+	[AC_DEFUN([AC_PROG_SED], [AC_CHECK_PROGS([SED], [sed])])]
49
+)
50
+ifdef(
46 51
 	[AC_TYPE_INT8_T],
47 52
 	,
48 53
 	[
49 54
new file mode 100644
... ...
@@ -0,0 +1 @@
0
+#define CONFIGURE_GIT_REVISION "@CONFIGURE_GIT_REVISION@"
... ...
@@ -300,6 +300,7 @@ PKG_PROG_PKG_CONFIG
300 300
 AC_PROG_CPP
301 301
 AC_PROG_INSTALL
302 302
 AC_PROG_LN_S
303
+AC_PROG_SED
303 304
 AC_PROG_MAKE_SET
304 305
 
305 306
 AC_ARG_VAR([IFCONFIG], [full path to ipconfig utility])
... ...
@@ -307,11 +308,13 @@ AC_ARG_VAR([ROUTE], [full path to route utility])
307 307
 AC_ARG_VAR([IPROUTE], [full path to ip utility])
308 308
 AC_ARG_VAR([NETSTAT], [path to netstat utility]) # tests
309 309
 AC_ARG_VAR([MAN2HTML], [path to man2html utility])
310
+AC_ARG_VAR([GIT], [path to git utility])
310 311
 AC_PATH_PROGS([IFCONFIG], [ifconfig],, [$PATH:/usr/local/sbin:/usr/sbin:/sbin])
311 312
 AC_PATH_PROGS([ROUTE], [route],, [$PATH:/usr/local/sbin:/usr/sbin:/sbin])
312 313
 AC_PATH_PROGS([IPROUTE], [ip],, [$PATH:/usr/local/sbin:/usr/sbin:/sbin])
313 314
 AC_CHECK_PROGS([NETSTAT], [netstat], [netstat], [$PATH:/usr/local/sbin:/usr/sbin:/sbin:/etc]) # tests
314 315
 AC_CHECK_PROGS([MAN2HTML], [man2html])
316
+AC_CHECK_PROGS([GIT], [git]) # optional
315 317
 AC_DEFINE_UNQUOTED([IFCONFIG_PATH], ["$IFCONFIG"], [Path to ifconfig tool])
316 318
 AC_DEFINE_UNQUOTED([IPROUTE_PATH], ["$IPROUTE"], [Path to iproute tool])
317 319
 AC_DEFINE_UNQUOTED([ROUTE_PATH], ["$ROUTE"], [Path to route tool])
... ...
@@ -802,6 +805,14 @@ PKG_CHECK_MODULES(
802 802
 	[]
803 803
 )
804 804
 
805
+AC_MSG_CHECKING([git checkout])
806
+GIT_CHECKOUT="no"
807
+if test -n "${GIT}" -a -d "${srcdir}/.git"; then
808
+	AC_DEFINE([HAVE_CONFIG_VERSION_H], [1], [extra version available in config-version.h])
809
+	GIT_CHECKOUT="yes"
810
+fi
811
+AC_MSG_RESULT([${GIT_CHECKOUT}])
812
+
805 813
 if test -n "${SP_PLATFORM_WINDOWS}"; then
806 814
 	AC_DEFINE_UNQUOTED([PATH_SEPARATOR], ['\\\\'], [Path separator]) #"
807 815
 	AC_DEFINE_UNQUOTED([PATH_SEPARATOR_STR], ["\\\\"], [Path separator]) #"
... ...
@@ -949,6 +960,7 @@ AC_SUBST([OPTIONAL_PKCS11_HELPER_CFLAGS])
949 949
 AC_SUBST([OPTIONAL_PKCS11_HELPER_LIBS])
950 950
 
951 951
 AM_CONDITIONAL([WIN32], [test "${WIN32}" = "yes"])
952
+AM_CONDITIONAL([GIT_CHECKOUT], [test "${GIT_CHECKOUT}" = "yes"])
952 953
 
953 954
 sampledir="\$(docdir)/sample"
954 955
 AC_SUBST([sampledir])
... ...
@@ -35,6 +35,9 @@
35 35
 #elif defined(_MSC_VER)
36 36
 #include "config-msvc.h"
37 37
 #endif
38
+#ifdef HAVE_CONFIG_VERSION_H
39
+#include "config-version.h"
40
+#endif
38 41
 
39 42
 #include "syshead.h"
40 43
 
... ...
@@ -3481,6 +3484,9 @@ usage_version (void)
3481 3481
 #ifdef CONFIGURE_DEFINES
3482 3482
   msg (M_INFO|M_NOPREFIX, "Compile time defines: %s", CONFIGURE_DEFINES);
3483 3483
 #endif
3484
+#ifdef CONFIGURE_GIT_REVISION
3485
+  msg (M_INFO|M_NOPREFIX, "git revision: %s", CONFIGURE_GIT_REVISION);
3486
+#endif
3484 3487
 #endif
3485 3488
   openvpn_exit (OPENVPN_EXIT_STATUS_USAGE); /* exit point */
3486 3489
 }