#!/usr/bin/env python3 # # This script renames symbols in the specfied paths import argparse import os import pathlib import re import sys SDL_ROOT = pathlib.Path(__file__).resolve().parents[1] SDL_INCLUDE_DIR = SDL_ROOT / "include/SDL3" def main(): if args.all_symbols: if len(args.args) < 1: print("Usage: %s --all-symbols files_or_directories ...") exit(1) replacements = get_all_replacements() entries = args.args else: if len(args.args) < 3: print("Usage: %s oldname newname files_or_directories ...") exit(1) replacements = { args.args[0]: args.args[1] } entries = args.args[2:] regex = create_regex_from_replacements(replacements) for entry in entries: path = pathlib.Path(entry) if not path.exists(): print("%s doesn't exist, skipping" % entry) continue replace_symbols_in_path(path, regex, replacements) def get_all_replacements(): replacements = {} file = (SDL_INCLUDE_DIR / "SDL_oldnames.h") mode = 0 for line in file.read_text().splitlines(): if line == "#ifdef SDL_ENABLE_OLD_NAMES": if mode == 0: mode = 1 else: raise Exception("get_all_replacements(): expected mode 0") elif line == "#else /* !SDL_ENABLE_OLD_NAMES */": if mode == 1: mode = 2 else: raise Exception("get_all_replacements(): expected mode 1") elif mode == 1 and line.startswith("#define "): words = line.split() replacements[words[1]] = words[2] return replacements def create_regex_from_replacements(replacements): return re.compile(r"\b(%s)\b" % "|".join(map(re.escape, replacements.keys()))) def replace_symbols_in_file(file, regex, replacements): try: with file.open('r', encoding='UTF-8', newline='') as rfp: contents = regex.sub(lambda mo: replacements[mo.string[mo.start():mo.end()]], rfp.read()) with file.open('w', encoding='UTF-8', newline='') as wfp: wfp.write(contents) except UnicodeDecodeError: print("%s is not text, skipping" % file) def replace_symbols_in_dir(path, regex, replacements): for entry in path.glob("*"): if entry.is_dir(): replace_symbols_in_dir(entry, regex, replacements) else: print("Processing %s" % entry) replace_symbols_in_file(entry, regex, replacements) def replace_symbols_in_path(path, regex, replacements): if path.is_dir(): replace_symbols_in_dir(path, regex, replacements) else: replace_symbols_in_file(path, regex, replacements) if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--all-symbols', action='store_true') parser.add_argument('args', nargs='*') args = parser.parse_args() try: main() except Exception as e: print(e) exit(-1) exit(0)