Add git commit id to the version if it's not a tag
[lttng-tools.git] / include / Makefile.am
index 547857edb8f62e5072eeda76637cd4459d71876f..24f2f57aa2479a22093fdf802b290539cd6afd4e 100644 (file)
@@ -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 \
This page took 0.027607 seconds and 5 git commands to generate.