Python: make ruff & black happy
[platform/upstream/libxkbcommon.git] / test / symbols-leak-test.py
1 #!/usr/bin/env python3
2 """Check that all exported symbols are specified in the symbol version scripts.
3
4 If this fails, please update the appropriate .map file (adding new version
5 nodes as needed).
6 """
7 import os
8 import pathlib
9 import re
10 import sys
11
12
13 top_srcdir = pathlib.Path(os.environ["top_srcdir"])
14
15
16 def symbols_from_map(path):
17     return re.findall(r"^\s+(xkb_.*);", path.read_text("utf-8"), re.MULTILINE)
18
19
20 def symbols_from_src(path):
21     return re.findall(r"XKB_EXPORT.*\n(xkb_.*)\(", path.read_text("utf-8"))
22
23
24 def diff(map_path, src_paths):
25     map_symbols = set(symbols_from_map(map_path))
26     src_symbols = set.union(set(), *(symbols_from_src(path) for path in src_paths))
27     return sorted(map_symbols - src_symbols), sorted(src_symbols - map_symbols)
28
29
30 exit = 0
31
32 # xkbcommon symbols
33 left, right = diff(
34     top_srcdir / "xkbcommon.map",
35     [
36         *(top_srcdir / "src").glob("*.c"),
37         *(top_srcdir / "src" / "xkbcomp").glob("*.c"),
38         *(top_srcdir / "src" / "compose").glob("*.c"),
39     ],
40 )
41 if left:
42     print("xkbcommon map has extra symbols:", " ".join(left))
43     exit = 1
44 if right:
45     print("xkbcommon src has extra symbols:", " ".join(right))
46     exit = 1
47
48 # xkbcommon-x11 symbols
49 left, right = diff(
50     top_srcdir / "xkbcommon-x11.map",
51     [
52         *(top_srcdir / "src" / "x11").glob("*.c"),
53     ],
54 )
55 if left:
56     print("xkbcommon-x11 map has extra symbols:", " ".join(left))
57     exit = 1
58 if right:
59     print("xkbcommon-x11 src has extra symbols:", " ".join(right))
60     exit = 1
61
62 sys.exit(exit)