From 88564da09144e7fd1202fe79aff1371478a69ecf Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rapha=C3=ABl=20Beamonte?= Date: Wed, 11 Dec 2013 11:39:41 -0500 Subject: [PATCH] Add git commit id to the version if it's not a tag MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Raphaël Beamonte Signed-off-by: David Goulet --- .gitignore | 2 + Makefile.am | 4 +- include/Makefile.am | 76 ++++++++++++++++++++++++- include/version.h.tmpl | 34 +++++++++++ src/bin/lttng-sessiond/lttng-sessiond.h | 2 + src/bin/lttng/commands/version.c | 2 +- src/bin/lttng/lttng.c | 4 +- src/bin/lttng/utils.h | 1 + 8 files changed, 119 insertions(+), 6 deletions(-) create mode 100644 include/version.h.tmpl diff --git a/.gitignore b/.gitignore index b2ab0724e..052ffe4b7 100644 --- a/.gitignore +++ b/.gitignore @@ -82,3 +82,5 @@ health_check /tests/unit/ini_config/ini_config /benchmark/ + +/include/version.h diff --git a/Makefile.am b/Makefile.am index 584f59b2e..c6c7af5ce 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,9 +1,9 @@ ACLOCAL_AMFLAGS = -I config -SUBDIRS = src \ +SUBDIRS = include \ + src \ tests \ extras \ - include \ doc dist_doc_DATA = LICENSE \ diff --git a/include/Makefile.am b/include/Makefile.am index 547857edb..24f2f57aa 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -1,9 +1,83 @@ +## +## The version.h file must be verified and generated or updated if the +## git commit id (called git version here) changed since the last build +## of lttng-tools. +## +version.h: + ## + ## We first create variables for the current git version and + ## the locations of the version.h and version.h.tmpl files + ## + @echo -n "Generating version.h ... " + @(version_h_tmpl="$(top_builddir)/include/version.h.tmpl"; \ + if [ -f "$${version_h_tmpl}" ]; then \ + version_h="$(top_builddir)/include/version.h"; \ + ## + ## We check the git version format we will use depending on + ## whether or not we are in the master branch or on a tag + ## + git_branch="$$(git describe --all 2>/dev/null)"; \ + if [ -z "$${git_branch}" ]; then \ + git_version=""; \ + else \ + git_describe="$$(git describe)"; \ + if [ "$${git_branch}" == "$${git_describe}" ] || \ + [ "$${git_branch}" == "heads/master" ]; then \ + git_version="$${git_describe}"; \ + else \ + git_version="$$(git describe --long --all)"; \ + fi; \ + fi; \ + ## + ## If the version.h file doesn't exist or is not up to date, + ## We replace it by the version.h.tmpl file + ## + if [ ! -e "$${version_h}" ] || \ + [ "$${version_h_tmpl}" -nt "$${version_h}" ]; then \ + cp "$${version_h_tmpl}" "$${version_h}"; \ + fi; \ + if [ -n "$${git_version}" ]; then \ + ## + ## We remove the leading "v" for the version number + ## + git_version="$$(echo "$${git_version}" | sed -r "s/^v([0-9])/\1/")"; \ + ## + ## If we have a git version, we verify that it isn't the same + ## as the one currently in the file (if there is one), as we + ## don't want to update the file if it is already up to date + ## + if [ $$(grep -cE "^#define GIT_VERSION \"?$${git_version}\"?$$" "$${version_h}") -eq 0 ]; then \ + if [ $$(grep -c "^#define GIT_VERSION" "$${version_h}") -gt 0 ]; then \ + ## + ## If there is already a GIT_VERSION defined, + ## we just replace it by the new version + ## + sed -i "s'^#define GIT_VERSION.*$$'#define GIT_VERSION \"$${git_version}\"'" "$${version_h}"; \ + else \ + ## + ## Else, we add a GIT_VERSION define + ## containing our new version. + ## + sed -i "s'^\(#define VERSION_H.*\)$$'\1\n\n#define GIT_VERSION \"$${git_version}\"'" "$${version_h}"; \ + fi; \ + fi; \ + fi; \ + fi) + @echo "ok" + +## +## version.h is defined as a .PHONY file even if it's a real file as +## we want our routine to be runned for each build. +## +.PHONY: version.h + lttnginclude_HEADERS = \ lttng/health.h \ lttng/lttng.h \ lttng/lttng-error.h \ lttng/snapshot.h \ - lttng/save.h + lttng/save.h \ + version.h noinst_HEADERS = \ lttng/snapshot-internal.h \ diff --git a/include/version.h.tmpl b/include/version.h.tmpl new file mode 100644 index 000000000..639e6d7c1 --- /dev/null +++ b/include/version.h.tmpl @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2013-2014 - Raphaël Beamonte + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License, version 2 only, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include + +#ifndef VERSION_H +#define VERSION_H + +#define GIT_VERSION + +/* + * Define the macro containing the FULL version + */ +#ifdef GIT_VERSION +#define FULL_VERSION "" GIT_VERSION +#else /* GIT_VERSION */ +#define FULL_VERSION "v" VERSION +#endif /* GIT_VERSION */ + +#endif /* VERSION_H */ diff --git a/src/bin/lttng-sessiond/lttng-sessiond.h b/src/bin/lttng-sessiond/lttng-sessiond.h index 6ee1fe951..0f4c66878 100644 --- a/src/bin/lttng-sessiond/lttng-sessiond.h +++ b/src/bin/lttng-sessiond/lttng-sessiond.h @@ -1,5 +1,6 @@ /* * Copyright (C) 2011 - David Goulet + * Copyright (C) 2013 - Raphaël Beamonte * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License, version 2 only, @@ -28,6 +29,7 @@ #include "session.h" #include "ust-app.h" +#include "version.h" extern const char default_home_dir[], default_tracing_group[], diff --git a/src/bin/lttng/commands/version.c b/src/bin/lttng/commands/version.c index 7f69de3dd..f2f435e4b 100644 --- a/src/bin/lttng/commands/version.c +++ b/src/bin/lttng/commands/version.c @@ -78,7 +78,7 @@ int cmd_version(int argc, const char **argv) } } - MSG("lttng version " VERSION " - " VERSION_NAME); + MSG("lttng version " FULL_VERSION " - " VERSION_NAME); MSG("\n" VERSION_DESCRIPTION "\n"); MSG("Web site: http://lttng.org"); MSG("\nlttng is free software and under the GPL license and part LGPL"); diff --git a/src/bin/lttng/lttng.c b/src/bin/lttng/lttng.c index bc7577d77..3227499f5 100644 --- a/src/bin/lttng/lttng.c +++ b/src/bin/lttng/lttng.c @@ -89,7 +89,7 @@ static struct cmd_struct commands[] = { static void usage(FILE *ofp) { - fprintf(ofp, "LTTng Trace Control " VERSION" - " VERSION_NAME"\n\n"); + fprintf(ofp, "LTTng Trace Control " FULL_VERSION" - " VERSION_NAME"\n\n"); fprintf(ofp, "usage: lttng [OPTIONS] []\n"); fprintf(ofp, "\n"); fprintf(ofp, "Options:\n"); @@ -131,7 +131,7 @@ static void usage(FILE *ofp) static void version(FILE *ofp) { - fprintf(ofp, "%s (LTTng Trace Control) " VERSION" - " VERSION_NAME"\n", + fprintf(ofp, "%s (LTTng Trace Control) " FULL_VERSION" - " VERSION_NAME"\n", progname); } diff --git a/src/bin/lttng/utils.h b/src/bin/lttng/utils.h index 8b9d029f1..d3941279a 100644 --- a/src/bin/lttng/utils.h +++ b/src/bin/lttng/utils.h @@ -19,6 +19,7 @@ #define _LTTNG_UTILS_H #include +#include "version.h" #include -- 2.34.1