From: Masahiro Yamada <masahiroy@kernel.org>
To: linux-kbuild@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, Ben Hutchings <ben@decadent.org.uk>,
Masahiro Yamada <masahiroy@kernel.org>,
Nathan Chancellor <nathan@kernel.org>,
Nick Desaulniers <ndesaulniers@google.com>,
Nicolas Schier <nicolas@fjasle.eu>, Tom Rix <trix@redhat.com>,
llvm@lists.linux.dev
Subject: [PATCH v6 02/12] kbuild: deb-pkg: create source package without cleaning
Date: Wed, 15 Feb 2023 10:20:24 +0900 [thread overview]
Message-ID: <20230215012034.403356-2-masahiroy@kernel.org> (raw)
In-Reply-To: <20230215012034.403356-1-masahiroy@kernel.org>
If you run 'make deb-pkg', all objects are lost due to 'make clean',
which makes the incremental builds impossible.
Instead of cleaning, pass the exclude list to tar's --exclude-from
option.
Previously, *.diff.gz contained some check-in files such as
.clang-format, .cocciconfig.
With this commit, *.diff.gz will only contain the .config and debian/.
The other source files will go into the .orig tarball.
linux.tar.gz is rebuilt only when the source files that would go into
the tarball are changed.
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
---
Changes in v6:
- Add more stubs to cmd_tar so I can reuse it for the other rules
Changes in v5:
- Avoid unneeded rebuild of the tarball when nothing in the source tree
is changed.
Changes in v4:
- Fix a typo in comment
Changes in v3:
- Add --extra-pattern='*.rej'
- Exclude symlinks at the toplevel
- Add --sort=name tar option
scripts/Makefile.package | 48 +++++++++++++++++++++++++++++++++++-----
scripts/package/mkdebian | 24 ++++++++++++++++++++
2 files changed, 66 insertions(+), 6 deletions(-)
diff --git a/scripts/Makefile.package b/scripts/Makefile.package
index dfbf40454a99..f0002ace4156 100644
--- a/scripts/Makefile.package
+++ b/scripts/Makefile.package
@@ -43,13 +43,47 @@ if test "$(objtree)" != "$(srctree)"; then \
echo >&2 " ERROR:"; \
echo >&2 " Building source tarball is not possible outside the"; \
echo >&2 " kernel source tree. Don't set KBUILD_OUTPUT, or use the"; \
- echo >&2 " binrpm-pkg or bindeb-pkg target instead."; \
+ echo >&2 " binrpm-pkg target instead."; \
echo >&2; \
false; \
fi ; \
tar -I $(KGZIP) -c $(RCS_TAR_IGNORE) -f $(2).tar.gz \
--transform 's:^:$(2)/:S' $(TAR_CONTENT) $(3)
+# .tmp_filelist .tmp_filelist_exclude
+# ---------------------------------------------------------------------------
+
+scripts/list-gitignored: FORCE
+ $(Q)$(MAKE) -f $(srctree)/Makefile scripts_package
+
+# 1f5d3a6b6532e25a5cdf1f311956b2b03d343a48 removed '*.rej' from .gitignore,
+# but it is definitely a generated file.
+filechk_filelist = \
+ $< --exclude='*.rej' --output=$@_exclude --prefix=./ --rootdir=$(srctree) --stat=-
+
+.tmp_filelist: scripts/list-gitignored FORCE
+ $(call filechk,filelist)
+
+# tarball
+# ---------------------------------------------------------------------------
+
+quiet_cmd_tar = TAR $@
+ cmd_tar = tar -c -f $@ $(tar-compress-opt) $(tar-exclude-opt) \
+ --owner=0 --group=0 --sort=name \
+ --transform 's:^\.:$*:S' -C $(tar-rootdir) .
+
+tar-rootdir := $(srctree)
+
+%.tar.gz: private tar-compress-opt := -I $(KGZIP)
+%.tar.gz:
+ $(call cmd,tar)
+
+# Linux source tarball
+# ---------------------------------------------------------------------------
+
+linux.tar.gz: tar-exclude-opt = --exclude=./$@ --exclude-from=$<_exclude
+linux.tar.gz: .tmp_filelist
+
# rpm-pkg
# ---------------------------------------------------------------------------
PHONY += rpm-pkg
@@ -80,13 +114,12 @@ binrpm-pkg:
$(UTS_MACHINE)-linux -bb $(objtree)/binkernel.spec
PHONY += deb-pkg
-deb-pkg:
- $(MAKE) clean
+deb-pkg: linux.tar.gz
$(CONFIG_SHELL) $(srctree)/scripts/package/mkdebian
- $(call cmd,src_tar,$(KDEB_SOURCENAME))
origversion=$$(dpkg-parsechangelog -SVersion |sed 's/-[^-]*$$//');\
- mv $(KDEB_SOURCENAME).tar.gz ../$(KDEB_SOURCENAME)_$${origversion}.orig.tar.gz
- +dpkg-buildpackage -r$(KBUILD_PKG_ROOTCMD) -a$$(cat debian/arch) $(DPKG_FLAGS) --source-option=-sP -i.git -us -uc
+ cp linux.tar.gz ../$(KDEB_SOURCENAME)_$${origversion}.orig.tar.gz
+ +dpkg-buildpackage -r$(KBUILD_PKG_ROOTCMD) -a$$(cat debian/arch) $(DPKG_FLAGS) \
+ --build=source,binary --source-option=-sP -nc -us -uc
PHONY += bindeb-pkg
bindeb-pkg:
@@ -174,4 +207,7 @@ help:
@echo ' perf-tarxz-src-pkg - Build $(perf-tar).tar.xz source tarball'
@echo ' perf-tarzst-src-pkg - Build $(perf-tar).tar.zst source tarball'
+PHONY += FORCE
+FORCE:
+
.PHONY: $(PHONY)
diff --git a/scripts/package/mkdebian b/scripts/package/mkdebian
index c3bbef7a6754..68b13ef590ba 100755
--- a/scripts/package/mkdebian
+++ b/scripts/package/mkdebian
@@ -84,6 +84,8 @@ set_debarch() {
fi
}
+rm -rf debian
+
# Some variables and settings used throughout the script
version=$KERNELRELEASE
if [ -n "$KDEB_PKGVERSION" ]; then
@@ -135,6 +137,28 @@ fi
mkdir -p debian/source/
echo "1.0" > debian/source/format
+# Ugly: ignore anything except .config or debian/
+cat<<'EOF' > debian/source/local-options
+diff-ignore
+
+extend-diff-ignore = ^[^.d]
+
+extend-diff-ignore = ^\.[^c]
+extend-diff-ignore = ^\.c($|[^o])
+extend-diff-ignore = ^\.co($|[^n])
+extend-diff-ignore = ^\.con($|[^f])
+extend-diff-ignore = ^\.conf($|[^i])
+extend-diff-ignore = ^\.confi($|[^g])
+extend-diff-ignore = ^\.config.
+
+extend-diff-ignore = ^d($|[^e])
+extend-diff-ignore = ^de($|[^b])
+extend-diff-ignore = ^deb($|[^i])
+extend-diff-ignore = ^debi($|[^a])
+extend-diff-ignore = ^debia($|[^n])
+extend-diff-ignore = ^debian[^/]
+EOF
+
echo $debarch > debian/arch
extra_build_depends=", $(if_enabled_echo CONFIG_UNWINDER_ORC libelf-dev:native)"
extra_build_depends="$extra_build_depends, $(if_enabled_echo CONFIG_SYSTEM_TRUSTED_KEYRING libssl-dev:native)"
--
2.34.1
next prev parent reply other threads:[~2023-02-15 1:22 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-02-15 1:20 [PATCH v6 01/12] kbuild: add a tool to list files ignored by git Masahiro Yamada
2023-02-15 1:20 ` Masahiro Yamada [this message]
2023-02-24 22:28 ` [PATCH v6 02/12] kbuild: deb-pkg: create source package without cleaning Nicolas Schier
2023-02-15 1:20 ` [PATCH v6 03/12] kbuild: rpm-pkg: build binary packages from source rpm Masahiro Yamada
2023-02-15 1:20 ` [PATCH v6 04/12] kbuild: srcrpm-pkg: create source package without cleaning Masahiro Yamada
2023-02-15 1:20 ` [PATCH v6 05/12] kbuild: deb-pkg: hide KDEB_SOURCENAME from Makefile Masahiro Yamada
2023-02-24 22:33 ` Nicolas Schier
2023-02-15 1:20 ` [PATCH v6 06/12] kbuild: deb-pkg: make .orig tarball a hard link if possible Masahiro Yamada
2023-02-24 22:37 ` Nicolas Schier
2023-02-15 1:20 ` [PATCH v6 07/12] kbuild: deb-pkg: switch over to source format 3.0 (quilt) Masahiro Yamada
2023-02-24 22:42 ` Nicolas Schier
2023-02-25 8:54 ` Masahiro Yamada
2023-02-15 1:20 ` [PATCH v6 08/12] kbuild: make perf-tar*-src-pkg work without relying on git Masahiro Yamada
2023-02-15 1:20 ` [PATCH v6 09/12] kbuild: tar-pkg: use tar rules in scripts/Makefile.package Masahiro Yamada
2023-02-15 1:20 ` [PATCH v6 10/12] kbuild: deb-pkg: fix binary-arch and clean in debian/rules Masahiro Yamada
2023-02-15 1:20 ` [PATCH v6 11/12] kbuild: deb-pkg: improve the usability of source package Masahiro Yamada
2023-03-08 12:29 ` Péter Ujfalusi
2023-03-08 17:01 ` Masahiro Yamada
2023-02-15 1:20 ` [PATCH v6 12/12] kbuild: add srcdeb-pkg target Masahiro Yamada
2023-02-24 22:48 ` Nicolas Schier
2023-02-25 10:14 ` Masahiro Yamada
2023-03-01 20:41 ` Nicolas Schier
2023-02-26 8:01 ` [PATCH v6 01/12] kbuild: add a tool to list files ignored by git Masahiro Yamada
2023-03-06 14:27 ` Nicolas Schier
2023-02-27 8:24 ` Rasmus Villemoes
2023-02-27 9:51 ` Masahiro Yamada
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230215012034.403356-2-masahiroy@kernel.org \
--to=masahiroy@kernel.org \
--cc=ben@decadent.org.uk \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=llvm@lists.linux.dev \
--cc=nathan@kernel.org \
--cc=ndesaulniers@google.com \
--cc=nicolas@fjasle.eu \
--cc=trix@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.