| #!/usr/bin/env python3 |
| # |
| # This script renames SDL headers in the specfied paths |
| |
| import argparse |
| import pathlib |
| import re |
| |
| |
| def main(): |
| replacements = [ |
| ( re.compile(r"(?:[\"<])(?:SDL2/)?SDL_gamecontroller.h(?:[\">])"), r"<SDL3/SDL_gamepad.h>" ), |
| ( re.compile(r"(?:[\"<])(?:SDL2/)?begin_code.h(?:[\">])"), r"<SDL3/SDL_begin_code.h>" ), |
| ( re.compile(r"(?:[\"<])(?:SDL2/)?close_code.h(?:[\">])"), r"<SDL3/SDL_close_code.h>" ), |
| ( re.compile(r"(?:[\"<])(?:SDL2/)?(SDL[_a-z0-9]*\.h)(?:[\">])"), r"<SDL3/\1>" ) |
| ] |
| for entry in args.args: |
| path = pathlib.Path(entry) |
| if not path.exists(): |
| print("%s doesn't exist, skipping" % entry) |
| continue |
| |
| replace_headers_in_path(path, replacements) |
| |
| |
| def replace_headers_in_file(file, replacements): |
| try: |
| with file.open("r", encoding="UTF-8", newline="") as rfp: |
| original = rfp.read() |
| contents = original |
| for regex, replacement in replacements: |
| contents = regex.sub(replacement, contents) |
| 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_headers_in_dir(path, replacements): |
| for entry in path.glob("*"): |
| if entry.is_dir(): |
| replace_headers_in_dir(entry, replacements) |
| else: |
| print("Processing %s" % entry) |
| replace_headers_in_file(entry, replacements) |
| |
| |
| def replace_headers_in_path(path, replacements): |
| if path.is_dir(): |
| replace_headers_in_dir(path, replacements) |
| else: |
| replace_headers_in_file(path, replacements) |
| |
| |
| if __name__ == "__main__": |
| |
| parser = argparse.ArgumentParser(fromfile_prefix_chars='@') |
| parser.add_argument("args", nargs="*") |
| args = parser.parse_args() |
| |
| try: |
| main() |
| except Exception as e: |
| print(e) |
| exit(-1) |
| |
| exit(0) |
| |