summaryrefslogtreecommitdiff
path: root/python/firstheader.py
diff options
context:
space:
mode:
authorDavid Lamparter <equinox@diac24.net>2020-04-23 20:14:58 +0200
committerDavid Lamparter <equinox@diac24.net>2020-04-27 09:52:41 +0200
commit980ab2de52558408eca3c78df1af7f7b5c3adb11 (patch)
tree15fbf04e8d49877176292bfbce9907391e63cd56 /python/firstheader.py
parent94cfb0692e0499e7ba40908db5259cd19c0e3d5e (diff)
python: add check-first-header tool
The first #include statement in all FRR .c files should be either zebra.h or config.h. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
Diffstat (limited to 'python/firstheader.py')
-rw-r--r--python/firstheader.py30
1 files changed, 30 insertions, 0 deletions
diff --git a/python/firstheader.py b/python/firstheader.py
new file mode 100644
index 0000000000..19a85b63e5
--- /dev/null
+++ b/python/firstheader.py
@@ -0,0 +1,30 @@
+#
+# check that the first header included in C files is either
+# zebra.h or config.h
+#
+
+import sys, os, re, subprocess
+
+include_re = re.compile('^#\s*include\s+["<]([^ ">]+)[">]', re.M)
+
+errors = 0
+
+files = subprocess.check_output(['git', 'ls-files']).decode('ASCII')
+for fn in files.splitlines():
+ if not fn.endswith('.c'):
+ continue
+ if fn.startswith('tools/'):
+ continue
+ with open(fn, 'r') as fd:
+ data = fd.read()
+ m = include_re.search(data)
+ if m is None:
+ #sys.stderr.write('no #include in %s?\n' % (fn))
+ continue
+ if m.group(1) in ['config.h', 'zebra.h', 'lib/zebra.h']:
+ continue
+ sys.stderr.write('%s: %s\n' % (fn, m.group(0)))
+ errors += 1
+
+if errors:
+ sys.exit(1)