From 109d2c93102049e7d7fdd5de7f9edff717224b32 Mon Sep 17 00:00:00 2001 From: Arvind Sankar Date: Fri, 19 Jun 2020 22:08:59 -0400 Subject: [PATCH] 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 Reviewed-by: Brian Behlendorf Signed-off-by: Arvind Sankar Closes #10493 --- Makefile.am | 21 ++++++++++++++++---- config/Rules.am | 3 ++- copy-builtin | 2 +- module/Kbuild.in | 1 + module/Makefile.bsd | 3 ++- scripts/Makefile.am | 1 - scripts/make_gitrev.sh | 45 ------------------------------------------ 7 files changed, 23 insertions(+), 53 deletions(-) delete mode 100755 scripts/make_gitrev.sh diff --git a/Makefile.am b/Makefile.am index 101b38ac33..a90c71ee91 100644 --- a/Makefile.am +++ b/Makefile.am @@ -47,11 +47,25 @@ EXTRA_DIST += module/zfs/THIRDPARTYLICENSE.cityhash.descrip @CODE_COVERAGE_RULES@ +GITREV = include/zfs_gitrev.h + .PHONY: 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. distclean-local:: @@ -70,8 +84,7 @@ all-local: -[ -x ${top_builddir}/scripts/zfs-tests.sh ] && \ ${top_builddir}/scripts/zfs-tests.sh -c -dist-hook: gitrev - cp ${top_srcdir}/include/zfs_gitrev.h $(distdir)/include; \ +dist-hook: sed ${ac_inplace} -e 's/Release:[[:print:]]*/Release: $(RELEASE)/' \ $(distdir)/META diff --git a/config/Rules.am b/config/Rules.am index fbbca81e65..c6dce34b03 100644 --- a/config/Rules.am +++ b/config/Rules.am @@ -4,7 +4,8 @@ # 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)/module/icp/include \ -I$(top_srcdir)/lib/libspl/include diff --git a/copy-builtin b/copy-builtin index f77cbb8ffd..f42f4d1a48 100755 --- a/copy-builtin +++ b/copy-builtin @@ -21,7 +21,7 @@ then fi make clean || true -scripts/make_gitrev.sh || true +make gitrev rm -rf "$KERNEL_DIR/include/zfs" "$KERNEL_DIR/fs/zfs" cp --recursive include "$KERNEL_DIR/include/zfs" diff --git a/module/Kbuild.in b/module/Kbuild.in index 120ce87c58..031b5a9a80 100644 --- a/module/Kbuild.in +++ b/module/Kbuild.in @@ -22,6 +22,7 @@ ZFS_MODULE_CFLAGS += @KERNEL_DEBUG_CFLAGS@ @NO_FORMAT_ZERO_LENGTH@ ifneq ($(KBUILD_EXTMOD),) zfs_include = @abs_top_srcdir@/include ZFS_MODULE_CFLAGS += -include @abs_top_builddir@/zfs_config.h +ZFS_MODULE_CFLAGS += -I@abs_top_builddir@/include else zfs_include = $(srctree)/include/zfs ZFS_MODULE_CFLAGS += -include $(zfs_include)/zfs_config.h diff --git a/module/Makefile.bsd b/module/Makefile.bsd index d23cacd362..a46b920513 100644 --- a/module/Makefile.bsd +++ b/module/Makefile.bsd @@ -4,7 +4,7 @@ WITH_CTF=1 .include -SRCDIR= ${.CURDIR} +SRCDIR=${.CURDIR} INCDIR=${.CURDIR:H}/include KMOD= openzfs @@ -19,6 +19,7 @@ KMOD= openzfs ${SRCDIR}/zfs +CFLAGS+= -I${.OBJDIR:H}/include CFLAGS+= -I${INCDIR} CFLAGS+= -I${INCDIR}/spl CFLAGS+= -I${INCDIR}/os/freebsd diff --git a/scripts/Makefile.am b/scripts/Makefile.am index 1605ab8868..1763044394 100644 --- a/scripts/Makefile.am +++ b/scripts/Makefile.am @@ -15,7 +15,6 @@ EXTRA_DIST = \ dkms.postbuild \ enum-extract.pl \ kmodtool \ - make_gitrev.sh \ man-dates.sh \ paxcheck.sh \ zfs2zol-patch.sed \ diff --git a/scripts/make_gitrev.sh b/scripts/make_gitrev.sh deleted file mode 100755 index 1cf143794b..0000000000 --- a/scripts/make_gitrev.sh +++ /dev/null @@ -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