kbuild: give up untracked files for source package builds
When the source tree is dirty and contains untracked files, package builds may fail, for example, when a broken symlink exists, a file path contains whitespaces, etc. Since commit05e96e96a3("kbuild: use git-archive for source package creation"), the source tarball only contains committed files because it is created by 'git archive'. scripts/package/gen-diff-patch tries to address the diff from HEAD, but including untracked files by the hand-crafted script introduces more complexity. I wrote a patch [1] to make it work in most cases, but still wonder if this is what we should aim for. To simplify the code, this patch just gives up untracked files. Going forward, it is your responsibility to do 'git add' for what you want in the source package. The script shows a warning just in case you forgot to do so. It should be checked only when building source packages. [1]: https://lore.kernel.org/all/CAK7LNAShbZ56gSh9PrbLnBDYKnjtTkHMoCXeGrhcxMvqXGq9=g@mail.gmail.com/2-0001-kbuild-make-package-builds-more-robust.patch Fixes:05e96e96a3("kbuild: use git-archive for source package creation") Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> Reviewed-by: Nicolas Schier <nicolas@fjasle.eu>
This commit is contained in:
@@ -84,7 +84,66 @@ set_debarch() {
|
||||
fi
|
||||
}
|
||||
|
||||
# Create debian/source/ if it is a source package build
|
||||
gen_source ()
|
||||
{
|
||||
mkdir -p debian/source
|
||||
|
||||
echo "3.0 (quilt)" > debian/source/format
|
||||
|
||||
{
|
||||
echo "diff-ignore"
|
||||
echo "extend-diff-ignore = .*"
|
||||
} > debian/source/local-options
|
||||
|
||||
# Add .config as a patch
|
||||
mkdir -p debian/patches
|
||||
{
|
||||
echo "Subject: Add .config"
|
||||
echo "Author: ${maintainer}"
|
||||
echo
|
||||
echo "--- /dev/null"
|
||||
echo "+++ linux/.config"
|
||||
diff -u /dev/null "${KCONFIG_CONFIG}" | tail -n +3
|
||||
} > debian/patches/config.patch
|
||||
echo config.patch > debian/patches/series
|
||||
|
||||
"${srctree}/scripts/package/gen-diff-patch" debian/patches/diff.patch
|
||||
if [ -s debian/patches/diff.patch ]; then
|
||||
sed -i "
|
||||
1iSubject: Add local diff
|
||||
1iAuthor: ${maintainer}
|
||||
1i
|
||||
" debian/patches/diff.patch
|
||||
|
||||
echo diff.patch >> debian/patches/series
|
||||
else
|
||||
rm -f debian/patches/diff.patch
|
||||
fi
|
||||
}
|
||||
|
||||
rm -rf debian
|
||||
mkdir debian
|
||||
|
||||
email=${DEBEMAIL-$EMAIL}
|
||||
|
||||
# use email string directly if it contains <email>
|
||||
if echo "${email}" | grep -q '<.*>'; then
|
||||
maintainer=${email}
|
||||
else
|
||||
# or construct the maintainer string
|
||||
user=${KBUILD_BUILD_USER-$(id -nu)}
|
||||
name=${DEBFULLNAME-${user}}
|
||||
if [ -z "${email}" ]; then
|
||||
buildhost=${KBUILD_BUILD_HOST-$(hostname -f 2>/dev/null || hostname)}
|
||||
email="${user}@${buildhost}"
|
||||
fi
|
||||
maintainer="${name} <${email}>"
|
||||
fi
|
||||
|
||||
if [ "$1" = --need-source ]; then
|
||||
gen_source
|
||||
fi
|
||||
|
||||
# Some variables and settings used throughout the script
|
||||
version=$KERNELRELEASE
|
||||
@@ -104,22 +163,6 @@ fi
|
||||
debarch=
|
||||
set_debarch
|
||||
|
||||
email=${DEBEMAIL-$EMAIL}
|
||||
|
||||
# use email string directly if it contains <email>
|
||||
if echo $email | grep -q '<.*>'; then
|
||||
maintainer=$email
|
||||
else
|
||||
# or construct the maintainer string
|
||||
user=${KBUILD_BUILD_USER-$(id -nu)}
|
||||
name=${DEBFULLNAME-$user}
|
||||
if [ -z "$email" ]; then
|
||||
buildhost=${KBUILD_BUILD_HOST-$(hostname -f 2>/dev/null || hostname)}
|
||||
email="$user@$buildhost"
|
||||
fi
|
||||
maintainer="$name <$email>"
|
||||
fi
|
||||
|
||||
# Try to determine distribution
|
||||
if [ -n "$KDEB_CHANGELOG_DIST" ]; then
|
||||
distribution=$KDEB_CHANGELOG_DIST
|
||||
@@ -132,34 +175,6 @@ else
|
||||
echo >&2 "Install lsb-release or set \$KDEB_CHANGELOG_DIST explicitly"
|
||||
fi
|
||||
|
||||
mkdir -p debian/source/
|
||||
echo "3.0 (quilt)" > debian/source/format
|
||||
|
||||
{
|
||||
echo "diff-ignore"
|
||||
echo "extend-diff-ignore = .*"
|
||||
} > debian/source/local-options
|
||||
|
||||
# Add .config as a patch
|
||||
mkdir -p debian/patches
|
||||
{
|
||||
echo "Subject: Add .config"
|
||||
echo "Author: ${maintainer}"
|
||||
echo
|
||||
echo "--- /dev/null"
|
||||
echo "+++ linux/.config"
|
||||
diff -u /dev/null "${KCONFIG_CONFIG}" | tail -n +3
|
||||
} > debian/patches/config
|
||||
echo config > debian/patches/series
|
||||
|
||||
$(dirname $0)/gen-diff-patch debian/patches/diff.patch debian/patches/untracked.patch
|
||||
if [ -f debian/patches/diff.patch ]; then
|
||||
echo diff.patch >> debian/patches/series
|
||||
fi
|
||||
if [ -f debian/patches/untracked.patch ]; then
|
||||
echo untracked.patch >> debian/patches/series
|
||||
fi
|
||||
|
||||
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)"
|
||||
|
||||
Reference in New Issue
Block a user