| #!/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 |