Imported Linux kernel uAPI headers must be included before any other
header to avoid a system-installed header being read instead.

Add a check that runs after every operation to catch files where
Linux uapi includes are preceded by other includes.

Signed-off-by: David Marchand <[email protected]>
---
 devtools/linux-uapi.sh | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/devtools/linux-uapi.sh b/devtools/linux-uapi.sh
index 3f804685aa..d03b43a0aa 100755
--- a/devtools/linux-uapi.sh
+++ b/devtools/linux-uapi.sh
@@ -138,6 +138,29 @@ check_header()
        return 0
 }
 
+check_include_order()
+{
+       local errors=0
+
+       $quiet || echo "Checking uapi/linux inclusion order"
+       for filename in $(git grep -l '#include <uapi/linux/' 
':!devtools/linux-uapi.sh' \
+                       ':!doc/guides/contributing/linux_uapi.rst' 
':!kernel/linux/uapi/'); do
+               last_uapi=$(grep -n '#include <uapi/linux/' "$filename" | tail 
-1 | cut -d: -f1)
+               first_other=$(grep -n '^#include' "$filename" | grep -v 
'uapi/linux/' |
+                       head -1 | cut -d: -f1)
+               if [ -z "$first_other" ] || [ "$first_other" -gt "$last_uapi" 
]; then
+                       continue;
+               fi
+               $quiet || echo "$filename: uapi headers must be included before 
other headers"
+               errors=$((errors + 1))
+       done
+       if [ $errors -ne 0 ] || ! $quiet; then
+               echo "$errors error(s) found in uapi inclusion order"
+       fi
+
+       return $errors
+}
+
 check_all()
 {
        local errors=0
@@ -192,3 +215,5 @@ if $check_headers; then
 else
        update_all
 fi
+
+check_include_order
-- 
2.56.0

Reply via email to