1#!/usr/bin/env python3 2"""Check that all exported symbols are specified in the symbol version scripts. 3 4If this fails, please update the appropriate .map file (adding new version 5nodes as needed). 6""" 7import os 8import pathlib 9import re 10import sys 11 12 13top_srcdir = pathlib.Path(os.environ['top_srcdir']) 14 15 16def symbols_from_map(path): 17 return re.findall(r'^\s+(xkb_.*);', path.read_text('utf-8'), re.MULTILINE) 18 19 20def symbols_from_src(path): 21 return re.findall(r'XKB_EXPORT.*\n(xkb_.*)\(', path.read_text('utf-8')) 22 23 24def 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 30exit = 0 31 32# xkbcommon symbols 33left, 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) 41if left: 42 print('xkbcommon map has extra symbols:', ' '.join(left)) 43 exit = 1 44if right: 45 print('xkbcommon src has extra symbols:', ' '.join(right)) 46 exit = 1 47 48# xkbcommon-x11 symbols 49left, right = diff( 50 top_srcdir/'xkbcommon-x11.map', 51 [ 52 *(top_srcdir/'src'/'x11').glob('*.c'), 53 ], 54) 55if left: 56 print('xkbcommon-x11 map has extra symbols:', ' '.join(left)) 57 exit = 1 58if right: 59 print('xkbcommon-x11 src has extra symbols:', ' '.join(right)) 60 exit = 1 61 62sys.exit(exit) 63