You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

63 lines
1.5 KiB

#!/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)