From 2e522952c77d9795da68b28f0b4268b6771c5141 Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Tue, 5 May 2020 16:19:09 +0200 Subject: [PATCH] configure: Optionally use version information obtained from Git in executables The variable GIT_VERSION is always defined, either obtained from Git or a file that is embedded in tarballs when they are built. Optionally, that version is declared as VERSION in config.h so it will be used e.g. in the daemons when they print the version number. There is a check that should catch missing tags (i.e. if the version number in AC_INIT() isn't a prefix of the version obtained via Git). --- Makefile.am | 3 +++ configure.ac | 16 ++++++++++++++++ scripts/Makefile.am | 2 ++ scripts/git-version | 16 ++++++++++++++++ 4 files changed, 37 insertions(+) create mode 100755 scripts/git-version diff --git a/Makefile.am b/Makefile.am index 958edc6fe..762a51c14 100644 --- a/Makefile.am +++ b/Makefile.am @@ -38,6 +38,9 @@ Android.common.mk : Android.common.mk.in configure.ac -e "s:\@PACKAGE_VERSION\@:$(PACKAGE_VERSION):" \ $(srcdir)/$@.in > $@ +dist-hook: + @echo $(GIT_VERSION) > $(distdir)/.tarball-git-version + Doxyfile : Doxyfile.in $(AM_V_GEN) \ sed \ diff --git a/configure.ac b/configure.ac index d71ddeb38..6ee47f584 100644 --- a/configure.ac +++ b/configure.ac @@ -326,6 +326,7 @@ ARG_ENABL_SET([tss-tss2], [enable the use of the TSS 2.0 Trusted Software # compile options ARG_ENABL_SET([coverage], [enable lcov coverage report generation.]) +ARG_ENABL_SET([git-version], [use output of 'git describe' as version information in executables.]) ARG_ENABL_SET([leak-detective], [enable malloc hooks to find memory leaks.]) ARG_ENABL_SET([lock-profiler], [enable lock/mutex profiling code.]) ARG_ENABL_SET([log-thread-ids], [use thread ID, if available, instead of an incremented value starting from 1, to identify threads.]) @@ -1384,6 +1385,21 @@ if test "x$ss_cv_static_plugin_constructors" = xyes; then fi fi +AC_MSG_CHECKING([version from Git repository]) +AC_SUBST(GIT_VERSION, [$($srcdir/scripts/git-version "$srcdir")]) +case "$GIT_VERSION" in + "$PACKAGE_VERSION"*) + AC_MSG_RESULT([$GIT_VERSION]) + ;; + *) + AC_MSG_ERROR([$PACKAGE_VERSION is not a prefix of $GIT_VERSION, tag missing?]) + ;; +esac + +if test x$git_version = xtrue; then + AC_DEFINE_UNQUOTED(VERSION, ["$GIT_VERSION"]) +fi + # =============================================== # collect plugin list for strongSwan components # =============================================== diff --git a/scripts/Makefile.am b/scripts/Makefile.am index a793800b7..82d92ef79 100644 --- a/scripts/Makefile.am +++ b/scripts/Makefile.am @@ -1,3 +1,5 @@ +EXTRA_DIST = git-version + AM_CPPFLAGS = \ -I$(top_srcdir)/src/libstrongswan \ -I$(top_srcdir)/src/libtls \ diff --git a/scripts/git-version b/scripts/git-version new file mode 100755 index 000000000..f92d0718f --- /dev/null +++ b/scripts/git-version @@ -0,0 +1,16 @@ +#!/bin/sh + +SRCDIR=$1 +TARBALL=$SRCDIR/.tarball-git-version + +if test -f $TARBALL; then + V=$(cat $TARBALL) +elif test -d $SRCDIR/.git; then + V=$(git -C $SRCDIR describe --tags HEAD 2>/dev/null) +fi + +if test -z "$V"; then + V="UNKNOWN" +fi + +echo $V