Move zfs_gitrev.h to build directory

Currently an out-of-tree build does not work with read-only source
directory because zfs_gitrev.h can't be created. Move this file to the
build directory, which is more appropriate for a generated file, and
drop the dist-hook for zfs_gitrev.h. There is no need to distribute this
file since it will be regenerated as part of the compilation in any
case.

scripts/make_gitrev.sh tries to avoid updating zfs_gitrev.h if there has
been no change, however this doesn't cover the case when the source
directory is not in git: in that case zfs_gitrev.h gets overwritten even
though it's always "unknown". Simplify the logic to always write out a
new version of zfs_gitrev.h, compare against the old and overwrite only
if different. This is now simple enough to just include in the
Makefile, so drop the script.

Reviewed-by: Ryan Moeller <ryan@iXsystems.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Arvind Sankar <nivedita@alum.mit.edu>
Closes #10493
This commit is contained in:
Arvind Sankar 2020-06-19 22:08:59 -04:00 committed by Brian Behlendorf
parent 33982eb24c
commit 109d2c9310
7 changed files with 23 additions and 53 deletions

View File

@ -47,11 +47,25 @@ EXTRA_DIST += module/zfs/THIRDPARTYLICENSE.cityhash.descrip
@CODE_COVERAGE_RULES@ @CODE_COVERAGE_RULES@
GITREV = include/zfs_gitrev.h
.PHONY: gitrev .PHONY: gitrev
gitrev: gitrev:
-${top_srcdir}/scripts/make_gitrev.sh ZFS_GITREV=$$(cd $(top_srcdir) && \
git describe --always --long --dirty 2>/dev/null); \
ZFS_GITREV=$${ZFS_GITREV:-unknown}; \
printf '#define\tZFS_META_GITREV "%s"\n' \
"$${ZFS_GITREV}" >$(GITREV)~; \
if cmp -s $(GITREV) $(GITREV)~; then \
$(RM) $(GITREV)~; \
else \
mv -f $(GITREV)~ $(GITREV); \
fi
BUILT_SOURCES = gitrev $(GITREV): gitrev
BUILT_SOURCES = $(GITREV)
CLEANFILES = $(GITREV)
# Double-colon rules are allowed; there are multiple independent definitions. # Double-colon rules are allowed; there are multiple independent definitions.
distclean-local:: distclean-local::
@ -70,8 +84,7 @@ all-local:
-[ -x ${top_builddir}/scripts/zfs-tests.sh ] && \ -[ -x ${top_builddir}/scripts/zfs-tests.sh ] && \
${top_builddir}/scripts/zfs-tests.sh -c ${top_builddir}/scripts/zfs-tests.sh -c
dist-hook: gitrev dist-hook:
cp ${top_srcdir}/include/zfs_gitrev.h $(distdir)/include; \
sed ${ac_inplace} -e 's/Release:[[:print:]]*/Release: $(RELEASE)/' \ sed ${ac_inplace} -e 's/Release:[[:print:]]*/Release: $(RELEASE)/' \
$(distdir)/META $(distdir)/META

View File

@ -4,7 +4,8 @@
# #
DEFAULT_INCLUDES = \ DEFAULT_INCLUDES = \
-include ${top_builddir}/zfs_config.h \ -include $(top_builddir)/zfs_config.h \
-I$(top_builddir)/include \
-I$(top_srcdir)/include \ -I$(top_srcdir)/include \
-I$(top_srcdir)/module/icp/include \ -I$(top_srcdir)/module/icp/include \
-I$(top_srcdir)/lib/libspl/include -I$(top_srcdir)/lib/libspl/include

View File

@ -21,7 +21,7 @@ then
fi fi
make clean || true make clean || true
scripts/make_gitrev.sh || true make gitrev
rm -rf "$KERNEL_DIR/include/zfs" "$KERNEL_DIR/fs/zfs" rm -rf "$KERNEL_DIR/include/zfs" "$KERNEL_DIR/fs/zfs"
cp --recursive include "$KERNEL_DIR/include/zfs" cp --recursive include "$KERNEL_DIR/include/zfs"

View File

@ -22,6 +22,7 @@ ZFS_MODULE_CFLAGS += @KERNEL_DEBUG_CFLAGS@ @NO_FORMAT_ZERO_LENGTH@
ifneq ($(KBUILD_EXTMOD),) ifneq ($(KBUILD_EXTMOD),)
zfs_include = @abs_top_srcdir@/include zfs_include = @abs_top_srcdir@/include
ZFS_MODULE_CFLAGS += -include @abs_top_builddir@/zfs_config.h ZFS_MODULE_CFLAGS += -include @abs_top_builddir@/zfs_config.h
ZFS_MODULE_CFLAGS += -I@abs_top_builddir@/include
else else
zfs_include = $(srctree)/include/zfs zfs_include = $(srctree)/include/zfs
ZFS_MODULE_CFLAGS += -include $(zfs_include)/zfs_config.h ZFS_MODULE_CFLAGS += -include $(zfs_include)/zfs_config.h

View File

@ -4,7 +4,7 @@ WITH_CTF=1
.include <bsd.sys.mk> .include <bsd.sys.mk>
SRCDIR= ${.CURDIR} SRCDIR=${.CURDIR}
INCDIR=${.CURDIR:H}/include INCDIR=${.CURDIR:H}/include
KMOD= openzfs KMOD= openzfs
@ -19,6 +19,7 @@ KMOD= openzfs
${SRCDIR}/zfs ${SRCDIR}/zfs
CFLAGS+= -I${.OBJDIR:H}/include
CFLAGS+= -I${INCDIR} CFLAGS+= -I${INCDIR}
CFLAGS+= -I${INCDIR}/spl CFLAGS+= -I${INCDIR}/spl
CFLAGS+= -I${INCDIR}/os/freebsd CFLAGS+= -I${INCDIR}/os/freebsd

View File

@ -15,7 +15,6 @@ EXTRA_DIST = \
dkms.postbuild \ dkms.postbuild \
enum-extract.pl \ enum-extract.pl \
kmodtool \ kmodtool \
make_gitrev.sh \
man-dates.sh \ man-dates.sh \
paxcheck.sh \ paxcheck.sh \
zfs2zol-patch.sed \ zfs2zol-patch.sed \

View File

@ -1,45 +0,0 @@
#!/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.
# Copyright (c) 2018 by Matthew Thode. 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.
#
set -e -u
cleanup() {
ZFS_GIT_REV=${ZFS_GIT_REV:-"unknown"}
cat << EOF > "$(dirname "$0")"/../include/zfs_gitrev.h
#define ZFS_META_GITREV "${ZFS_GIT_REV}"
EOF
}
trap cleanup EXIT
# Check if git is installed and we are in a git repo.
git rev-parse --git-dir > /dev/null 2>&1
# Get the git current git revision
ZFS_GIT_REV=$(git describe --always --long --dirty 2>/dev/null)
# Check if header file already contain the exact string
grep -sq "\"${ZFS_GIT_REV}\"" "$(dirname "$0")"/../include/zfs_gitrev.h &&
trap - EXIT
exit 0