Signed-off-by: Raphaël Beamonte <[email protected]>
---
 .gitignore                              |    2 ++
 Makefile.am                             |    4 +--
 include/Makefile.am                     |   46 +++++++++++++++++++++++++++++++
 include/version.h.tmpl                  |   27 ++++++++++++++++++
 src/bin/lttng-sessiond/lttng-sessiond.h |   14 ++++++++++
 src/bin/lttng-sessiond/main.c           |    2 +-
 src/bin/lttng/commands/version.c        |    4 ++-
 src/bin/lttng/lttng.c                   |    5 +++-
 src/bin/lttng/utils.h                   |   13 +++++++++
 9 files changed, 112 insertions(+), 5 deletions(-)
 create mode 100644 include/version.h.tmpl

diff --git a/.gitignore b/.gitignore
index ee58252..0385627 100644
--- a/.gitignore
+++ b/.gitignore
@@ -31,6 +31,8 @@ config/
 !config/epoll.m4
 !config/config_feature.m4
 
+include/version.h
+
 src/bin/lttng-sessiond/lttng-sessiond
 src/bin/lttng/lttng
 src/bin/lttng-consumerd/lttng-consumerd
diff --git a/Makefile.am b/Makefile.am
index b0537ce..03fdabc 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 0bcb6f9..850950f 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -1 +1,47 @@
+## 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: version.h.tmpl
+       ## We first create variables for the current git version and
+       ## the locations of the version.h and version.h.tmpl files
+       (git_version="$$(git describe --long --all 2>/dev/null)"; \
+       version_h_tmpl="$(top_builddir)/include/version.h.tmpl"; \
+       version_h="$(top_builddir)/include/version.h"; \
+       ## 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 [ -z "$${git_version}" ]; then \
+               ## If we don't have a git version, we verify that there is
+               ## not any define of GIT_VERSION in the version.h file, or
+               ## we remove it.
+               if [ $$(grep -c "^#define GIT_VERSION" "$${version_h}") -gt 0 
]; then \
+                       sed -i "/^#define GIT_VERSION/d" "$${version_h}"; \
+               fi; \
+       else \
+               ## 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)
+
+## 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/lttng.h lttng/lttng-error.h
+nodist_lttnginclude_HEADERS = version.h
+
+EXTRA_DIST = version.h.tmpl
diff --git a/include/version.h.tmpl b/include/version.h.tmpl
new file mode 100644
index 0000000..c42789c
--- /dev/null
+++ b/include/version.h.tmpl
@@ -0,0 +1,27 @@
+/*
+ * version.h
+ *
+ * Linux Trace Toolkit version header file
+ *
+ * Copyright (C) 2013 - Raphaël Beamonte <[email protected]>
+ *
+ * This library is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License, version 2.1 only,
+ * as published by the Free Software Foundation.
+ *
+ * This library 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 Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef VERSION_H
+#define VERSION_H
+
+#define GIT_VERSION
+
+#endif /* VERSION_H */
diff --git a/src/bin/lttng-sessiond/lttng-sessiond.h 
b/src/bin/lttng-sessiond/lttng-sessiond.h
index 9258f38..e91918a 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 <[email protected]>
+ * Copyright (C) 2013 - Raphaël Beamonte <[email protected]>
  *
  * 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,8 @@
 
 #include "session.h"
 #include "ust-app.h"
+#include "version.h"
+
 
 extern const char default_home_dir[],
        default_tracing_group[],
@@ -74,4 +77,15 @@ extern int apps_cmd_notify_pipe[2];
 int sessiond_set_thread_pollset(struct lttng_poll_event *events, size_t size);
 int sessiond_check_thread_quit_pipe(int fd, uint32_t events);
 
+/*
+ * This static const char allows to return the version number depending
+ * whether or not the GIT_VERSION value is available
+ */
+#ifdef GIT_VERSION
+static const char lttng_sessiond_version[] = VERSION " (Git: " GIT_VERSION ")";
+#else /* GIT_VERSION */
+static const char lttng_sessiond_version[] = VERSION;
+#endif /* GIT_VERSION */
+
+
 #endif /* _LTT_SESSIOND_H */
diff --git a/src/bin/lttng-sessiond/main.c b/src/bin/lttng-sessiond/main.c
index d88bafe..41701e9 100644
--- a/src/bin/lttng-sessiond/main.c
+++ b/src/bin/lttng-sessiond/main.c
@@ -3555,7 +3555,7 @@ static int parse_args(int argc, char **argv)
                        usage();
                        exit(EXIT_FAILURE);
                case 'V':
-                       fprintf(stdout, "%s\n", VERSION);
+                       fprintf(stdout, "%s\n", lttng_sessiond_version);
                        exit(EXIT_SUCCESS);
                case 'S':
                        opt_sig_parent = 1;
diff --git a/src/bin/lttng/commands/version.c b/src/bin/lttng/commands/version.c
index 7f69de3..2170d00 100644
--- a/src/bin/lttng/commands/version.c
+++ b/src/bin/lttng/commands/version.c
@@ -26,6 +26,7 @@
 #include <config.h>
 
 #include "../command.h"
+#include "../utils.h"
 
 enum {
        OPT_HELP = 1,
@@ -79,7 +80,8 @@ int cmd_version(int argc, const char **argv)
        }
 
        MSG("lttng version " VERSION " - " VERSION_NAME);
-       MSG("\n" VERSION_DESCRIPTION "\n");
+       MSG("%s", lttng_version);
+       MSG(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 d3aaa84..c8a9c71 100644
--- a/src/bin/lttng/lttng.c
+++ b/src/bin/lttng/lttng.c
@@ -31,6 +31,7 @@
 #include <common/error.h>
 
 #include "command.h"
+#include "utils.h"
 
 /* Variables */
 static char *progname;
@@ -81,7 +82,9 @@ 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 " VERSION " - " VERSION_NAME "\n");
+       fprintf(ofp, "%s", lttng_version);
+       fprintf(ofp, "\n");
        fprintf(ofp, "usage: lttng [OPTIONS] <COMMAND> [<ARGS>]\n");
        fprintf(ofp, "\n");
        fprintf(ofp, "Options:\n");
diff --git a/src/bin/lttng/utils.h b/src/bin/lttng/utils.h
index 9f7bfcc..12ee7c0 100644
--- a/src/bin/lttng/utils.h
+++ b/src/bin/lttng/utils.h
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2011 - David Goulet <[email protected]>
+ * Copyright (C) 2013 - Raphaël Beamonte <[email protected]>
  *
  * 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,
@@ -19,8 +20,20 @@
 #define _LTTNG_UTILS_H
 
 #include <popt.h>
+#include <version.h>
 
 char *get_session_name(void);
 void list_cmd_options(FILE *ofp, struct poptOption *options);
 
+/*
+ * This static const char allows to return the version number depending
+ * whether or not the GIT_VERSION value is available
+ */
+#ifdef GIT_VERSION
+static const char lttng_version[] = "Git version: " GIT_VERSION "\n";
+#else /* GIT_VERSION */
+static const char lttng_version[] = "";
+#endif /* GIT_VERSION */
+
+
 #endif /* _LTTNG_UTILS_H */
-- 
1.7.10.4


_______________________________________________
lttng-dev mailing list
[email protected]
http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

Reply via email to