Messages in this thread Patch in this message |  | | From | Michał Górny <> | Subject | [PATCH] kheaders: prefer gtar over tar for better compatibility | Date | Sat, 17 Dec 2022 09:41:55 +0100 |
| |
Commit 86cdd2fdc4e39c388d39c7ba2396d1a9dfd66226 ("kheaders: make headers archive reproducible") introduced a number of options specific to GNU tar to the `tar` invocation in `gen_kheaders.sh` script. This causes the script to fail to work on systems where `tar` is not GNU tar. This can occur e.g. on recent Gentoo Linux installations that support using bsdtar from libarchive instead.
To achieve better portability, try using `gtar` over `tar` if the former is available. This is the name frequently used on systems featuring support for installing GNU tar alongside another tar implementation. If `gtar` is not present, `tar` is used for compatibility with regular systems.
Link: https://bugs.gentoo.org/884061 Reported-by: Sam James <sam@gentoo.org> Tested-by: Sam James <sam@gentoo.org> Signed-off-by: Michał Górny <mgorny@gentoo.org> --- kernel/gen_kheaders.sh | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/kernel/gen_kheaders.sh b/kernel/gen_kheaders.sh index 473036b43..d2445af7f 100755 --- a/kernel/gen_kheaders.sh +++ b/kernel/gen_kheaders.sh @@ -80,11 +80,20 @@ done | cpio --quiet -pdu $cpio_dir >/dev/null 2>&1 find $cpio_dir -type f -print0 | xargs -0 -P8 -n1 perl -pi -e 'BEGIN {undef $/;}; s/\/\*((?!SPDX).)*?\*\///smg;' +# The following tar invocations use options specific to GNU tar. On some +# systems (e.g. Gentoo), `tar` can be a different tool (e.g. bsdtar), and GNU +# tar can be found as `gtar`. +if [ -x "$(command -v gtar)" ]; then + tar=gtar +else + tar=tar +fi + # Create archive and try to normalize metadata for reproducibility. # For compatibility with older versions of tar, files are fed to tar # pre-sorted, as --sort=name might not be available. find $cpio_dir -printf "./%P\n" | LC_ALL=C sort | \ - tar "${KBUILD_BUILD_TIMESTAMP:+--mtime=$KBUILD_BUILD_TIMESTAMP}" \ + $tar "${KBUILD_BUILD_TIMESTAMP:+--mtime=$KBUILD_BUILD_TIMESTAMP}" \ --owner=0 --group=0 --numeric-owner --no-recursion \ -I $XZ -cf $tarfile -C $cpio_dir/ -T - > /dev/null -- 2.39.0
|  |