#!/bin/bash -e # # ethtool-import-uapi [commit] # # Imports sanitized copies of kernel uapi headers from (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 - <