rename_headers.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #!/usr/bin/env python3
  2. #
  3. # This script renames SDL headers in the specfied paths
  4. import argparse
  5. import pathlib
  6. import re
  7. def main():
  8. replacements = [
  9. ( re.compile(r"(?:[\"<])(?:SDL2/)?SDL_gamecontroller.h(?:[\">])"), r"<SDL3/SDL_gamepad.h>" ),
  10. ( re.compile(r"(?:[\"<])(?:SDL2/)?begin_code.h(?:[\">])"), r"<SDL3/SDL_begin_code.h>" ),
  11. ( re.compile(r"(?:[\"<])(?:SDL2/)?close_code.h(?:[\">])"), r"<SDL3/SDL_close_code.h>" ),
  12. ( re.compile(r"(?:[\"<])(?:SDL2/)?(SDL[_a-z0-9]*\.h)(?:[\">])"), r"<SDL3/\1>" )
  13. ]
  14. for entry in args.args:
  15. path = pathlib.Path(entry)
  16. if not path.exists():
  17. print("%s doesn't exist, skipping" % entry)
  18. continue
  19. replace_headers_in_path(path, replacements)
  20. def replace_headers_in_file(file, replacements):
  21. try:
  22. with file.open("r", encoding="UTF-8", newline="") as rfp:
  23. original = rfp.read()
  24. contents = original
  25. for regex, replacement in replacements:
  26. contents = regex.sub(replacement, contents)
  27. if contents != original:
  28. with file.open("w", encoding="UTF-8", newline="") as wfp:
  29. wfp.write(contents)
  30. except UnicodeDecodeError:
  31. print("%s is not text, skipping" % file)
  32. except Exception as err:
  33. print("%s" % err)
  34. def replace_headers_in_dir(path, replacements):
  35. for entry in path.glob("*"):
  36. if entry.is_dir():
  37. replace_headers_in_dir(entry, replacements)
  38. else:
  39. print("Processing %s" % entry)
  40. replace_headers_in_file(entry, replacements)
  41. def replace_headers_in_path(path, replacements):
  42. if path.is_dir():
  43. replace_headers_in_dir(path, replacements)
  44. else:
  45. replace_headers_in_file(path, replacements)
  46. if __name__ == "__main__":
  47. parser = argparse.ArgumentParser(fromfile_prefix_chars='@')
  48. parser.add_argument("args", nargs="*")
  49. args = parser.parse_args()
  50. try:
  51. main()
  52. except Exception as e:
  53. print(e)
  54. exit(-1)
  55. exit(0)