blob: a04a9c971a0118fda7f2df7100638a27d9227a4d [file] [log] [blame]
#!/bin/bash -e
#
# ethtool-import-uapi [commit]
#
# Imports sanitized copies of kernel uapi headers from <commit> (can be
# a commit id, a tag or a branch name). If the argument is omitted,
# commit currently checked out in the kernel repository is used.
sn="${0##*/}"
export ARCH="x86_64"
mkopt="-j$(nproc)" || mkopt=''
if [ ! -d "$LINUX_GIT" ]; then
echo "${sn}: please set LINUX_GIT to the location of kernel git" >&2
exit 1
fi
pushd "$LINUX_GIT"
if [ -n "$1" ]; then
git checkout "$1"
fi
desc=$(git describe --exact-match 2>/dev/null \
|| git show -s --abbrev=12 --pretty='commit %h')
kobj=$(mktemp -d)
make $mkopt O="$kobj" allmodconfig
make $mkopt O="$kobj" prepare
make $mkopt O="$kobj" INSTALL_HDR_PATH="${kobj}/hdr" headers_install
popd
pushd uapi
find . -type f -name '*.h' -exec cp -v "${kobj}/hdr/include/{}" {} \;
go_on=true
while $go_on; do
go_on=false
while read f; do
if [ "${f#asm/}" != "$f" ]; then
# skip architecture dependent asm/ headers
continue
fi
if [ -f "$f" ]; then
# already present
continue
fi
if [ ! -f "${kobj}/hdr/include/${f}" ]; then
# not a kernel header
continue
fi
echo "+ add $f"
go_on=true
mkdir -p "${f%/*}"
cp "${kobj}/hdr/include/${f}" "${f}"
done < <(
find . -type f -name '*.[ch]' -exec sed -nre '\_^[[:blank:]]*#include[[:blank:]]<.+>_ { s_^[[:blank:]]*#include[[:blank:]]<([^>]*)>.*$_\1_ ; p }' {} \; \
| LC_ALL=C sort -u
)
done
popd
rm -rf "$kobj"
git add uapi
git commit -s -F - <<EOT
update UAPI header copies
Update to kernel ${desc}.
EOT