]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
Rewrite check-includes.pl in python
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 5 May 2023 07:03:12 +0000 (09:03 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 9 May 2023 06:11:10 +0000 (08:11 +0200)
LICENSES/README.md
tools/check-includes.pl [deleted file]
tools/check-includes.py [new file with mode: 0755]

index d235b319d85bbcf009cd5e127384764e0b4fbac9..6174b8edc71eb801b3640bfccc09fdaf084604f1 100644 (file)
@@ -45,7 +45,6 @@ The following exceptions apply:
  * the following sources are licensed under the **CC0-1.0** license:
    - src/basic/siphash24.c
    - src/basic/siphash24.h
-   - tools/check-includes.pl
   * the following sources are licensed under the **MIT-0** license:
    - all examples under man/
    - src/systemctl/systemd-sysv-install.SKELETON
diff --git a/tools/check-includes.pl b/tools/check-includes.pl
deleted file mode 100755 (executable)
index c8bfcba..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-# SPDX-License-Identifier: CC0-1.0
-#!/usr/bin/env perl
-#
-# checkincludes: Find files included more than once in (other) files.
-
-foreach $file (@ARGV) {
-       open(FILE, $file) or die "Cannot open $file: $!.\n";
-
-       my %includedfiles = ();
-
-       while (<FILE>) {
-               if (m/^\s*#\s*include\s*[<"](\S*)[>"]/o) {
-                       ++$includedfiles{$1};
-               }
-       }
-       foreach $filename (keys %includedfiles) {
-               if ($includedfiles{$filename} > 1) {
-                       print "$file: $filename is included more than once.\n";
-               }
-       }
-
-       close(FILE);
-}
diff --git a/tools/check-includes.py b/tools/check-includes.py
new file mode 100755 (executable)
index 0000000..27d11b9
--- /dev/null
@@ -0,0 +1,23 @@
+#!/usr/bin/env python3
+# SPDX-License-Identifier: LGPL-2.1-or-later
+
+# pylint: disable=missing-docstring,invalid-name,unspecified-encoding,consider-using-with
+
+import re
+import sys
+
+def check_file(filename):
+    seen = set()
+    good = True
+    for n, line in enumerate(open(filename)):
+        if m := re.match(r'^\s*#\s*include\s*[<"](\S*)[>"]', line):
+            include = m.group(1)
+            if include in seen:
+                print(f'{filename}:{n}: {line.strip()}')
+                good = False
+            seen.add(include)
+    return good
+
+if __name__ == '__main__':
+    good = all(check_file(name) for name in sys.argv[1:])
+    sys.exit(0 if good else 1)