1*1b481fc3SMaciej Żenczykowski#!/bin/bash -e 2*1b481fc3SMaciej Żenczykowski# 3*1b481fc3SMaciej Żenczykowski# ethtool-import-uapi [commit] 4*1b481fc3SMaciej Żenczykowski# 5*1b481fc3SMaciej Żenczykowski# Imports sanitized copies of kernel uapi headers from <commit> (can be 6*1b481fc3SMaciej Żenczykowski# a commit id, a tag or a branch name). If the argument is omitted, 7*1b481fc3SMaciej Żenczykowski# commit currently checked out in the kernel repository is used. 8*1b481fc3SMaciej Żenczykowski 9*1b481fc3SMaciej Żenczykowskisn="${0##*/}" 10*1b481fc3SMaciej Żenczykowskiexport ARCH="x86_64" 11*1b481fc3SMaciej Żenczykowskimkopt="-j$(nproc)" || mkopt='' 12*1b481fc3SMaciej Żenczykowski 13*1b481fc3SMaciej Żenczykowskiif [ ! -d "$LINUX_GIT" ]; then 14*1b481fc3SMaciej Żenczykowski echo "${sn}: please set LINUX_GIT to the location of kernel git" >&2 15*1b481fc3SMaciej Żenczykowski exit 1 16*1b481fc3SMaciej Żenczykowskifi 17*1b481fc3SMaciej Żenczykowski 18*1b481fc3SMaciej Żenczykowskipushd "$LINUX_GIT" 19*1b481fc3SMaciej Żenczykowskiif [ -n "$1" ]; then 20*1b481fc3SMaciej Żenczykowski git checkout "$1" 21*1b481fc3SMaciej Żenczykowskifi 22*1b481fc3SMaciej Żenczykowskidesc=$(git describe --exact-match 2>/dev/null \ 23*1b481fc3SMaciej Żenczykowski || git show -s --abbrev=12 --pretty='commit %h') 24*1b481fc3SMaciej Żenczykowskikobj=$(mktemp -d) 25*1b481fc3SMaciej Żenczykowskimake $mkopt O="$kobj" allmodconfig 26*1b481fc3SMaciej Żenczykowskimake $mkopt O="$kobj" prepare 27*1b481fc3SMaciej Żenczykowskimake $mkopt O="$kobj" INSTALL_HDR_PATH="${kobj}/hdr" headers_install 28*1b481fc3SMaciej Żenczykowskipopd 29*1b481fc3SMaciej Żenczykowski 30*1b481fc3SMaciej Żenczykowskipushd uapi 31*1b481fc3SMaciej Żenczykowskifind . -type f -name '*.h' -exec cp -v "${kobj}/hdr/include/{}" {} \; 32*1b481fc3SMaciej Żenczykowski 33*1b481fc3SMaciej Żenczykowskigo_on=true 34*1b481fc3SMaciej Żenczykowskiwhile $go_on; do 35*1b481fc3SMaciej Żenczykowski go_on=false 36*1b481fc3SMaciej Żenczykowski while read f; do 37*1b481fc3SMaciej Żenczykowski if [ "${f#asm/}" != "$f" ]; then 38*1b481fc3SMaciej Żenczykowski # skip architecture dependent asm/ headers 39*1b481fc3SMaciej Żenczykowski continue 40*1b481fc3SMaciej Żenczykowski fi 41*1b481fc3SMaciej Żenczykowski if [ -f "$f" ]; then 42*1b481fc3SMaciej Żenczykowski # already present 43*1b481fc3SMaciej Żenczykowski continue 44*1b481fc3SMaciej Żenczykowski fi 45*1b481fc3SMaciej Żenczykowski if [ ! -f "${kobj}/hdr/include/${f}" ]; then 46*1b481fc3SMaciej Żenczykowski # not a kernel header 47*1b481fc3SMaciej Żenczykowski continue 48*1b481fc3SMaciej Żenczykowski fi 49*1b481fc3SMaciej Żenczykowski echo "+ add $f" 50*1b481fc3SMaciej Żenczykowski go_on=true 51*1b481fc3SMaciej Żenczykowski mkdir -p "${f%/*}" 52*1b481fc3SMaciej Żenczykowski cp "${kobj}/hdr/include/${f}" "${f}" 53*1b481fc3SMaciej Żenczykowski done < <( 54*1b481fc3SMaciej Żenczykowski find . -type f -name '*.[ch]' -exec sed -nre '\_^[[:blank:]]*#include[[:blank:]]<.+>_ { s_^[[:blank:]]*#include[[:blank:]]<([^>]*)>.*$_\1_ ; p }' {} \; \ 55*1b481fc3SMaciej Żenczykowski | LC_ALL=C sort -u 56*1b481fc3SMaciej Żenczykowski ) 57*1b481fc3SMaciej Żenczykowskidone 58*1b481fc3SMaciej Żenczykowskipopd 59*1b481fc3SMaciej Żenczykowskirm -rf "$kobj" 60*1b481fc3SMaciej Żenczykowski 61*1b481fc3SMaciej Żenczykowskigit add uapi 62*1b481fc3SMaciej Żenczykowskigit commit -s -F - <<EOT 63*1b481fc3SMaciej Żenczykowskiupdate UAPI header copies 64*1b481fc3SMaciej Żenczykowski 65*1b481fc3SMaciej ŻenczykowskiUpdate to kernel ${desc}. 66*1b481fc3SMaciej Żenczykowski 67*1b481fc3SMaciej ŻenczykowskiEOT 68