From 6aaedb813fa11ba0679c3051bc2eb28646b9506c Mon Sep 17 00:00:00 2001 From: 3gg <3gg@shellblade.net> Date: Sat, 30 Aug 2025 16:53:58 -0700 Subject: Update to SDL3 --- .../SDL-3.2.20/build-scripts/rename_symbols.py | 130 +++++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100755 src/contrib/SDL-3.2.20/build-scripts/rename_symbols.py (limited to 'src/contrib/SDL-3.2.20/build-scripts/rename_symbols.py') diff --git a/src/contrib/SDL-3.2.20/build-scripts/rename_symbols.py b/src/contrib/SDL-3.2.20/build-scripts/rename_symbols.py new file mode 100755 index 0000000..33a92dd --- /dev/null +++ b/src/contrib/SDL-3.2.20/build-scripts/rename_symbols.py @@ -0,0 +1,130 @@ +#!/usr/bin/env python3 +# +# This script renames symbols in the specified 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 ..." % sys.argv[0]) + exit(1) + + replacements = get_all_replacements() + entries = args.args + + else: + if len(args.args) < 3: + print("Usage: %s [--substring] oldname newname files_or_directories ..." % sys.argv[0]) + exit(1) + + replacements = { args.args[0]: args.args[1] } + entries = args.args[2:] + + if args.substring: + regex = create_substring_regex_from_replacements(replacements) + else: + 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 == "#elif !defined(SDL_DISABLE_OLD_NAMES)": + if mode == 1: + mode = 2 + else: + raise Exception("get_all_replacements(): expected mode 1") + elif line == "#endif /* SDL_ENABLE_OLD_NAMES */": + if mode == 2: + mode = 3 + else: + raise Exception("add_symbol_to_oldnames(): expected mode 2") + elif mode == 1 and line.startswith("#define "): + words = line.split() + replacements[words[1]] = words[2] + # In case things are accidentally renamed to the "X_renamed_Y" symbol + #replacements[words[1] + "_renamed_" + words[2]] = words[2] + + return replacements + + +def create_regex_from_replacements(replacements): + return re.compile(r"\b(%s)\b" % "|".join(map(re.escape, replacements.keys()))) + + +def create_substring_regex_from_replacements(replacements): + return re.compile(r"(%s)" % "|".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: + original = rfp.read() + contents = regex.sub(lambda mo: replacements[mo.string[mo.start():mo.end()]], original) + if contents != original: + with file.open("w", encoding="UTF-8", newline="") as wfp: + wfp.write(contents) + except UnicodeDecodeError: + print("%s is not text, skipping" % file) + except Exception as err: + print("%s" % err) + + +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(fromfile_prefix_chars='@') + parser.add_argument("--all-symbols", action="store_true") + parser.add_argument("--substring", action="store_true") + parser.add_argument("args", nargs="*") + args = parser.parse_args() + + try: + main() + except Exception as e: + print(e) + exit(-1) + + exit(0) + -- cgit v1.2.3