summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile.am9
-rwxr-xr-xcopy-builtin1
-rw-r--r--include/.gitignore1
-rw-r--r--include/spl/sys/sysmacros.h2
-rw-r--r--module/spl/spl-generic.c4
-rw-r--r--module/spl/spl-proc.c6
-rw-r--r--module/zfs/spa_history.c5
-rw-r--r--scripts/Makefile.am1
-rwxr-xr-xscripts/make_gitrev.sh54
9 files changed, 74 insertions, 9 deletions
diff --git a/Makefile.am b/Makefile.am
index 50b80b945..782b88c2f 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -25,6 +25,12 @@ EXTRA_DIST += META AUTHORS COPYRIGHT LICENSE NEWS NOTICE README.md
@CODE_COVERAGE_RULES@
+.PHONY: gitrev
+gitrev:
+ -${top_srcdir}/scripts/make_gitrev.sh
+
+BUILT_SOURCES = gitrev
+
distclean-local::
-$(RM) -R autom4te*.cache
-find . \( -name SCCS -o -name BitKeeper -o -name .svn -o -name CVS \
@@ -40,7 +46,8 @@ distclean-local::
all-local:
-${top_srcdir}/scripts/zfs-tests.sh -c
-dist-hook:
+dist-hook: gitrev
+ cp ${top_srcdir}/include/zfs_gitrev.h $(distdir)/include; \
sed -i 's/Release:[[:print:]]*/Release: $(RELEASE)/' \
$(distdir)/META
diff --git a/copy-builtin b/copy-builtin
index 8be8b4381..eaffbd2d2 100755
--- a/copy-builtin
+++ b/copy-builtin
@@ -30,6 +30,7 @@ then
fi
make clean || true
+scripts/make_gitrev.sh
rm -rf "$KERNEL_DIR/include/zfs" "$KERNEL_DIR/fs/zfs"
cp --recursive include "$KERNEL_DIR/include/zfs"
diff --git a/include/.gitignore b/include/.gitignore
new file mode 100644
index 000000000..e6eb2116f
--- /dev/null
+++ b/include/.gitignore
@@ -0,0 +1 @@
+/zfs_gitrev.h
diff --git a/include/spl/sys/sysmacros.h b/include/spl/sys/sysmacros.h
index e4bd80aa1..e11eaece5 100644
--- a/include/spl/sys/sysmacros.h
+++ b/include/spl/sys/sysmacros.h
@@ -141,7 +141,7 @@
#define DTRACE_PROBE4(a, b, c, d, e, f, g, h, i) ((void)0)
/* Missing globals */
-extern char spl_version[32];
+extern char spl_gitrev[64];
extern unsigned long spl_hostid;
/* Missing misc functions */
diff --git a/module/spl/spl-generic.c b/module/spl/spl-generic.c
index 7c1ad390b..a22e93e36 100644
--- a/module/spl/spl-generic.c
+++ b/module/spl/spl-generic.c
@@ -45,9 +45,9 @@
#include <sys/random.h>
#include <sys/strings.h>
#include <linux/kmod.h>
+#include "zfs_gitrev.h"
-char spl_version[32] = "SPL v" ZFS_META_VERSION "-" ZFS_META_RELEASE;
-EXPORT_SYMBOL(spl_version);
+char spl_gitrev[64] = ZFS_META_GITREV;
/* BEGIN CSTYLED */
unsigned long spl_hostid = 0;
diff --git a/module/spl/spl-proc.c b/module/spl/spl-proc.c
index 9c52924a4..a75bcc214 100644
--- a/module/spl/spl-proc.c
+++ b/module/spl/spl-proc.c
@@ -659,9 +659,9 @@ static struct ctl_table spl_table[] = {
* sysctl(8) prefers to go via /proc for portability.
*/
{
- .procname = "version",
- .data = spl_version,
- .maxlen = sizeof (spl_version),
+ .procname = "gitrev",
+ .data = spl_gitrev,
+ .maxlen = sizeof (spl_gitrev),
.mode = 0444,
.proc_handler = &proc_dostring,
},
diff --git a/module/zfs/spa_history.c b/module/zfs/spa_history.c
index 969fdb000..b590a1d57 100644
--- a/module/zfs/spa_history.c
+++ b/module/zfs/spa_history.c
@@ -38,6 +38,7 @@
#include <sys/sunddi.h>
#include <sys/cred.h>
#include "zfs_comutil.h"
+#include "zfs_gitrev.h"
#ifdef _KERNEL
#include <sys/zone.h>
#endif
@@ -617,8 +618,8 @@ spa_history_log_version(spa_t *spa, const char *operation, dmu_tx_t *tx)
utsname_t *u = utsname();
spa_history_log_internal(spa, operation, tx,
- "pool version %llu; software version %llu/%llu; uts %s %s %s %s",
- (u_longlong_t)spa_version(spa), SPA_VERSION, ZPL_VERSION,
+ "pool version %llu; software version %s; uts %s %s %s %s",
+ (u_longlong_t)spa_version(spa), ZFS_META_GITREV,
u->nodename, u->release, u->version, u->machine);
}
diff --git a/scripts/Makefile.am b/scripts/Makefile.am
index 28d618562..de0d4795d 100644
--- a/scripts/Makefile.am
+++ b/scripts/Makefile.am
@@ -14,6 +14,7 @@ EXTRA_DIST = \
dkms.postbuild \
enum-extract.pl \
kmodtool \
+ make_gitrev.sh \
paxcheck.sh \
zfs2zol-patch.sed \
cstyle.pl
diff --git a/scripts/make_gitrev.sh b/scripts/make_gitrev.sh
new file mode 100755
index 000000000..04be09595
--- /dev/null
+++ b/scripts/make_gitrev.sh
@@ -0,0 +1,54 @@
+#!/bin/sh
+
+#
+# CDDL HEADER START
+#
+# This file and its contents are supplied under the terms of the
+# Common Development and Distribution License ("CDDL"), version 1.0.
+# You may only use this file in accordance with the terms of version
+# 1.0 of the CDDL.
+#
+# A full copy of the text of the CDDL should have accompanied this
+# source. A copy of the CDDL is also available via the Internet at
+# http://www.illumos.org/license/CDDL.
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2018 by Delphix. All rights reserved.
+#
+
+#
+# Generate zfs_gitrev.h. Note that we need to do this for every
+# invocation of `make`, including for incremental builds. Therefore we
+# can't use a zfs_gitrev.h.in file which would be processed only when
+# `configure` is run.
+#
+
+BASE_DIR=$(dirname "$0")
+
+file=${BASE_DIR}/../include/zfs_gitrev.h
+
+#
+# Set default file contents in case we bail.
+#
+rm -f "$file"
+# shellcheck disable=SC2039
+/bin/echo -e "#define\tZFS_META_GITREV \"unknown\"" >>"$file"
+
+#
+# Check if git is installed and we are in a git repo.
+#
+git rev-parse --git-dir > /dev/null 2>&1 || exit
+
+#
+# Check if there are uncommitted changes
+#
+git diff-index --quiet HEAD || exit
+
+rev=$(git describe 2>/dev/null) || exit
+
+rm -f "$file"
+# shellcheck disable=SC2039
+/bin/echo -e "#define\tZFS_META_GITREV \"${rev}\"" >>"$file"