63 lines
1.5 KiB
Python
Executable File
63 lines
1.5 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""Check that all exported symbols are specified in the symbol version scripts.
|
|
|
|
If this fails, please update the appropriate .map file (adding new version
|
|
nodes as needed).
|
|
"""
|
|
import os
|
|
import pathlib
|
|
import re
|
|
import sys
|
|
|
|
|
|
top_srcdir = pathlib.Path(os.environ['top_srcdir'])
|
|
|
|
|
|
def symbols_from_map(path):
|
|
return re.findall(r'^\s+(xkb_.*);', path.read_text('utf-8'), re.MULTILINE)
|
|
|
|
|
|
def symbols_from_src(path):
|
|
return re.findall(r'XKB_EXPORT.*\n(xkb_.*)\(', path.read_text('utf-8'))
|
|
|
|
|
|
def diff(map_path, src_paths):
|
|
map_symbols = set(symbols_from_map(map_path))
|
|
src_symbols = set.union(set(), *(symbols_from_src(path) for path in src_paths))
|
|
return sorted(map_symbols - src_symbols), sorted(src_symbols - map_symbols)
|
|
|
|
|
|
exit = 0
|
|
|
|
# xkbcommon symbols
|
|
left, right = diff(
|
|
top_srcdir/'xkbcommon.map',
|
|
[
|
|
*(top_srcdir/'src').glob('*.c'),
|
|
*(top_srcdir/'src'/'xkbcomp').glob('*.c'),
|
|
*(top_srcdir/'src'/'compose').glob('*.c'),
|
|
],
|
|
)
|
|
if left:
|
|
print('xkbcommon map has extra symbols:', ' '.join(left))
|
|
exit = 1
|
|
if right:
|
|
print('xkbcommon src has extra symbols:', ' '.join(right))
|
|
exit = 1
|
|
|
|
# xkbcommon-x11 symbols
|
|
left, right = diff(
|
|
top_srcdir/'xkbcommon-x11.map',
|
|
[
|
|
*(top_srcdir/'src'/'x11').glob('*.c'),
|
|
],
|
|
)
|
|
if left:
|
|
print('xkbcommon-x11 map has extra symbols:', ' '.join(left))
|
|
exit = 1
|
|
if right:
|
|
print('xkbcommon-x11 src has extra symbols:', ' '.join(right))
|
|
exit = 1
|
|
|
|
sys.exit(exit)
|