1#!/bin/sh
2# SPDX-License-Identifier: GPL-2.0
3
4# This script generates an archive consisting of kernel headers
5# for CONFIG_IKHEADERS.
6set -e
7tarfile=$1
8srclist=$2
9objlist=$3
10timestamp=$4
11
12dir=$(dirname "${tarfile}")
13tmpdir=${dir}/.tmp_dir
14depfile=${dir}/.$(basename "${tarfile}").d
15
16# generate dependency list.
17{
18	echo
19	echo "deps_${tarfile} := \\"
20	sed 's:\(.*\):  \1 \\:' "${srclist}"
21	sed -n '/^include\/generated\/autoconf\.h$/!s:\(.*\):  \1 \\:p' "${objlist}"
22	echo
23	echo "${tarfile}: \$(deps_${tarfile})"
24	echo
25	echo "\$(deps_${tarfile}):"
26
27} > "${depfile}"
28
29rm -rf "${tmpdir}"
30mkdir "${tmpdir}"
31
32# shellcheck disable=SC2154 # srctree is passed as an env variable
33sed "s:^${srctree}/::" "${srclist}" | ${TAR} -c -f - -C "${srctree}" -T - | ${TAR} -xf - -C "${tmpdir}"
34${TAR} -c -f - -T "${objlist}" | ${TAR} -xf - -C "${tmpdir}"
35
36# Remove comments except SDPX lines
37# Use a temporary file to store directory contents to prevent find/xargs from
38# seeing temporary files created by perl.
39find "${tmpdir}" -type f -print0 > "${tmpdir}.contents.txt"
40xargs -0 -P8 -n1 \
41	perl -pi -e 'BEGIN {undef $/;}; s/\/\*((?!SPDX).)*?\*\///smg;' \
42	< "${tmpdir}.contents.txt"
43rm -f "${tmpdir}.contents.txt"
44
45# Create archive and try to normalize metadata for reproducibility.
46${TAR} "${timestamp:+--mtime=$timestamp}" \
47    --owner=0 --group=0 --sort=name --numeric-owner --mode=u=rw,go=r,a+X \
48    -I "${XZ}" -cf "${tarfile}" -C "${tmpdir}/" . > /dev/null
49
50rm -rf "${tmpdir}"
51