Signed-off-by: Michael Jeanson <mjean...@efficios.com>
---
 .gitignore                   |  2 ++
 Kbuild.common                | 14 +++++++++++
 extra-version-git.sh         | 20 +++++++++++++++
 extra-version-name.sh        | 13 ++++++++++
 extra-version-patches.sh     | 21 ++++++++++++++++
 extra_version/README         |  2 ++
 extra_version/patches/README |  2 ++
 lttng-events.c               | 49 +++++++++++++++++++++++++++++++-----
 8 files changed, 117 insertions(+), 6 deletions(-)
 create mode 100755 extra-version-git.sh
 create mode 100755 extra-version-name.sh
 create mode 100755 extra-version-patches.sh
 create mode 100644 extra_version/README
 create mode 100644 extra_version/patches/README
diff --git a/.gitignore b/.gitignore
index f22e828..38e1684 100644
--- a/.gitignore
+++ b/.gitignore
@@ -79,3 +79,5 @@ GTAGS
 *.orig
 *~
 \#*#
+
+/extra_version
diff --git a/Kbuild.common b/Kbuild.common
index c0d5409..bd24e80 100644
--- a/Kbuild.common
+++ b/Kbuild.common
@@ -34,6 +34,20 @@ ifneq ($(RT_PATCH_VERSION), 0)
   ccflags-y += -DRT_PATCH_VERSION=$(RT_PATCH_VERSION)
 endif
 
+EXTRA_VERSION_NAME:=$(shell $(TOP_LTTNG_MODULES_DIR)/extra-version-name.sh 
$(TOP_LTTNG_MODULES_DIR))
+
+ifneq ($(EXTRA_VERSION_NAME), 0)
+  ccflags-y += -DLTTNG_EXTRA_VERSION_NAME='"$(EXTRA_VERSION_NAME)"'
+endif
+
+EXTRA_VERSION_GIT:=$(shell $(TOP_LTTNG_MODULES_DIR)/extra-version-git.sh 
$(TOP_LTTNG_MODULES_DIR))
+
+ifneq ($(EXTRA_VERSION_GIT), 0)
+  ccflags-y += -DLTTNG_EXTRA_VERSION_GIT='"$(EXTRA_VERSION_GIT)"'
+endif
+
+EXTRA_VERSION_PATCHES:=$(shell 
$(TOP_LTTNG_MODULES_DIR)/extra-version-patches.sh $(TOP_LTTNG_MODULES_DIR))
+
 # Starting with kernel 4.12, the ftrace header was moved to private headers
 # and as such is not available when building against distro headers instead
 # of the full kernel sources. In the situation, define 
LTTNG_FTRACE_MISSING_HEADER
diff --git a/extra-version-git.sh b/extra-version-git.sh
new file mode 100755
index 0000000..e5a3e17
--- /dev/null
+++ b/extra-version-git.sh
@@ -0,0 +1,20 @@
+#!/bin/sh
+# SPDX-License-Identifier: (GPL-2.0 OR LGPL-2.1)
+
+# First argument is the path to the lttng modules sources.
+TOP_LTTNG_MODULES_DIR="$1"
+
+GIT_VERSION="0"
+
+if test -x "$(which git 2>&1;true)" && test -r 
"${TOP_LTTNG_MODULES_DIR}/.git"; then
+       GIT_VERSION_STR="$(cd "${TOP_LTTNG_MODULES_DIR}" && git describe --tags 
--dirty)"
+       GIT_CURRENT_TAG="$(cd "${TOP_LTTNG_MODULES_DIR}" && git describe --tags 
--exact-match --match="v[0-9]*" HEAD 2> /dev/null)"
+
+       GIT_VERSION="${GIT_VERSION_STR}"
+
+       if ! echo "${GIT_VERSION_STR}" | grep -- "-dirty" >/dev/null && test 
"x$GIT_CURRENT_TAG" != "x"; then
+               GIT_VERSION="0"
+       fi
+fi
+
+echo "${GIT_VERSION}"
diff --git a/extra-version-name.sh b/extra-version-name.sh
new file mode 100755
index 0000000..f704256
--- /dev/null
+++ b/extra-version-name.sh
@@ -0,0 +1,13 @@
+#!/bin/sh
+# SPDX-License-Identifier: (GPL-2.0 OR LGPL-2.1)
+
+# First argument is the path to the lttng modules sources.
+TOP_LTTNG_MODULES_DIR="$1"
+
+EXTRA_VERSION_NAME="$(sed -n '1p' 
"${TOP_LTTNG_MODULES_DIR}/extra_version/name" 2> /dev/null)"
+
+if [ "x${EXTRA_VERSION_NAME}" != "x" ]; then
+       echo "${EXTRA_VERSION_NAME}"
+else
+       echo "0"
+fi
diff --git a/extra-version-patches.sh b/extra-version-patches.sh
new file mode 100755
index 0000000..4e8a1b5
--- /dev/null
+++ b/extra-version-patches.sh
@@ -0,0 +1,21 @@
+#!/bin/sh
+# SPDX-License-Identifier: (GPL-2.0 OR LGPL-2.1)
+
+# First argument is the path to the lttng modules sources.
+TOP_LTTNG_MODULES_DIR="$1"
+
+if ! test -d "${TOP_LTTNG_MODULES_DIR}"; then
+       exit 1
+fi
+
+TMPFILE="$(mktemp)"
+
+find "${TOP_LTTNG_MODULES_DIR}/extra_version/patches/" -maxdepth 1 ! -name 
'README' -type f -printf '%f\n' | sort -r \
+       | sed -E 's/[^a-zA-Z0-9 \.]/-/g ; 
s/(.*)/MODULE_INFO(extra_version_patch, "\1");/g' >"${TMPFILE}" 2>/dev/null
+
+if test ! -f "${TOP_LTTNG_MODULES_DIR}/extra_version/patches.i" || \
+       test x"$(cat "${TMPFILE}")" != x"$(cat 
"${TOP_LTTNG_MODULES_DIR}/extra_version/patches.i")"; then
+       mv "${TMPFILE}" "${TOP_LTTNG_MODULES_DIR}/extra_version/patches.i"
+fi
+
+rm -f "${TMPFILE}"
diff --git a/extra_version/README b/extra_version/README
new file mode 100644
index 0000000..5eef496
--- /dev/null
+++ b/extra_version/README
@@ -0,0 +1,2 @@
+The first line of the "name" file is used to populate the "extra_version_name"
+modinfo key of each built module.
diff --git a/extra_version/patches/README b/extra_version/patches/README
new file mode 100644
index 0000000..22ea3d3
--- /dev/null
+++ b/extra_version/patches/README
@@ -0,0 +1,2 @@
+The name of each file in this directory except this README will be used to
+populate a "extra_version_path" modinfo key for each built module.
diff --git a/lttng-events.c b/lttng-events.c
index ec44502..c1f00ff 100644
--- a/lttng-events.c
+++ b/lttng-events.c
@@ -2809,12 +2809,22 @@ static int __init lttng_events_init(void)
        ret = lttng_init_cpu_hotplug();
        if (ret)
                goto error_hotplug;
-       printk(KERN_NOTICE "LTTng: Loaded modules v%s.%s.%s%s (%s)\n",
+       printk(KERN_NOTICE "LTTng: Loaded modules v%s.%s.%s%s (%s)%s%s\n",
                __stringify(LTTNG_MODULES_MAJOR_VERSION),
                __stringify(LTTNG_MODULES_MINOR_VERSION),
                __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION),
                LTTNG_MODULES_EXTRAVERSION,
-               LTTNG_VERSION_NAME);
+               LTTNG_VERSION_NAME,
+#ifdef LTTNG_EXTRA_VERSION_GIT
+               LTTNG_EXTRA_VERSION_GIT[0] == '\0' ? "" : " - " 
LTTNG_EXTRA_VERSION_GIT,
+#else
+               "",
+#endif
+#ifdef LTTNG_EXTRA_VERSION_NAME
+               LTTNG_EXTRA_VERSION_NAME[0] == '\0' ? "" : " - " 
LTTNG_EXTRA_VERSION_NAME);
+#else
+               "");
+#endif
        return 0;
 
 error_hotplug:
@@ -2827,12 +2837,22 @@ error_kmem:
        lttng_tracepoint_exit();
 error_tp:
        lttng_context_exit();
-       printk(KERN_NOTICE "LTTng: Failed to load modules v%s.%s.%s%s (%s)\n",
+       printk(KERN_NOTICE "LTTng: Failed to load modules v%s.%s.%s%s 
(%s)%s%s\n",
                __stringify(LTTNG_MODULES_MAJOR_VERSION),
                __stringify(LTTNG_MODULES_MINOR_VERSION),
                __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION),
                LTTNG_MODULES_EXTRAVERSION,
-               LTTNG_VERSION_NAME);
+               LTTNG_VERSION_NAME,
+#ifdef LTTNG_EXTRA_VERSION_GIT
+               LTTNG_EXTRA_VERSION_GIT[0] == '\0' ? "" : " - " 
LTTNG_EXTRA_VERSION_GIT,
+#else
+               "",
+#endif
+#ifdef LTTNG_EXTRA_VERSION_NAME
+               LTTNG_EXTRA_VERSION_NAME[0] == '\0' ? "" : " - " 
LTTNG_EXTRA_VERSION_NAME);
+#else
+               "");
+#endif
        return ret;
 }
 
@@ -2850,16 +2870,33 @@ static void __exit lttng_events_exit(void)
        kmem_cache_destroy(event_cache);
        lttng_tracepoint_exit();
        lttng_context_exit();
-       printk(KERN_NOTICE "LTTng: Unloaded modules v%s.%s.%s%s (%s)\n",
+       printk(KERN_NOTICE "LTTng: Unloaded modules v%s.%s.%s%s (%s)%s%s\n",
                __stringify(LTTNG_MODULES_MAJOR_VERSION),
                __stringify(LTTNG_MODULES_MINOR_VERSION),
                __stringify(LTTNG_MODULES_PATCHLEVEL_VERSION),
                LTTNG_MODULES_EXTRAVERSION,
-               LTTNG_VERSION_NAME);
+               LTTNG_VERSION_NAME,
+#ifdef LTTNG_EXTRA_VERSION_GIT
+               LTTNG_EXTRA_VERSION_GIT[0] == '\0' ? "" : " - " 
LTTNG_EXTRA_VERSION_GIT,
+#else
+               "",
+#endif
+#ifdef LTTNG_EXTRA_VERSION_NAME
+               LTTNG_EXTRA_VERSION_NAME[0] == '\0' ? "" : " - " 
LTTNG_EXTRA_VERSION_NAME);
+#else
+               "");
+#endif
 }
 
 module_exit(lttng_events_exit);
 
+#include "extra_version/patches.i"
+#ifdef LTTNG_EXTRA_VERSION_GIT
+MODULE_INFO(extra_version_git, LTTNG_EXTRA_VERSION_GIT);
+#endif
+#ifdef LTTNG_EXTRA_VERSION_NAME
+MODULE_INFO(extra_version_name, LTTNG_EXTRA_VERSION_NAME);
+#endif
 MODULE_LICENSE("GPL and additional rights");
 MODULE_AUTHOR("Mathieu Desnoyers <mathieu.desnoy...@efficios.com>");
 MODULE_DESCRIPTION("LTTng Events");
-- 
2.17.1

_______________________________________________
lttng-dev mailing list
lttng-dev@lists.lttng.org
https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

Reply via email to