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