diff --git a/Makefile.am b/Makefile.am index 50b80b945d..782b88c2f4 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 8be8b4381b..eaffbd2d26 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 0000000000..e6eb2116fa --- /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 e4bd80aa13..e11eaece5c 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 7c1ad390be..a22e93e363 100644 --- a/module/spl/spl-generic.c +++ b/module/spl/spl-generic.c @@ -45,9 +45,9 @@ #include #include #include +#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 9c52924a48..a75bcc2145 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 969fdb000d..b590a1d57b 100644 --- a/module/zfs/spa_history.c +++ b/module/zfs/spa_history.c @@ -38,6 +38,7 @@ #include #include #include "zfs_comutil.h" +#include "zfs_gitrev.h" #ifdef _KERNEL #include #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 28d6185628..de0d4795d3 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 0000000000..04be09595c --- /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"