| #!/usr/bin/env python3 |
| # |
| # This script renames SDL macros in the specified paths |
| |
| import argparse |
| import pathlib |
| import re |
| |
| |
| class TextReplacer: |
| def __init__(self, macros, repl_format): |
| if isinstance(macros, dict): |
| macros_keys = macros.keys() |
| else: |
| macros_keys = macros |
| self.macros = macros |
| self.re_macros = re.compile(r"\W(" + "|".join(macros_keys) + r")(?:\W|$)") |
| self.repl_format = repl_format |
| |
| def apply(self, contents): |
| def cb(m): |
| macro = m.group(1) |
| original = m.group(0) |
| match_start, _ = m.span(0) |
| platform_start, platform_end = m.span(1) |
| if isinstance(self.macros, dict): |
| repl_args = (macro, self.macros[macro]) |
| else: |
| repl_args = macro, |
| new_text = self.repl_format.format(*repl_args) |
| r = original[:(platform_start-match_start)] + new_text + original[platform_end-match_start:] |
| return r |
| contents, _ = self.re_macros.subn(cb, contents) |
| |
| return contents |
| |
| |
| class MacrosCheck: |
| def __init__(self): |
| self.renamed_platform_macros = TextReplacer(RENAMED_MACROS, "{1}") |
| self.deprecated_platform_macros = TextReplacer(DEPRECATED_PLATFORM_MACROS, "{0} /* {0} has been removed in SDL3 */") |
| |
| def run(self, contents): |
| contents = self.renamed_platform_macros.apply(contents) |
| contents = self.deprecated_platform_macros.apply(contents) |
| return contents |
| |
| |
| def apply_checks(paths): |
| checks = ( |
| MacrosCheck(), |
| ) |
| |
| for entry in paths: |
| path = pathlib.Path(entry) |
| if not path.exists(): |
| print("{} does not exist, skipping".format(entry)) |
| continue |
| apply_checks_in_path(path, checks) |
| |
| |
| def apply_checks_in_file(file, checks): |
| try: |
| with file.open("r", encoding="UTF-8", newline="") as rfp: |
| original = rfp.read() |
| contents = original |
| for check in checks: |
| contents = check.run(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 apply_checks_in_dir(path, checks): |
| for entry in path.glob("*"): |
| if entry.is_dir(): |
| apply_checks_in_dir(entry, checks) |
| else: |
| print("Processing %s" % entry) |
| apply_checks_in_file(entry, checks) |
| |
| |
| def apply_checks_in_path(path, checks): |
| if path.is_dir(): |
| apply_checks_in_dir(path, checks) |
| else: |
| apply_checks_in_file(path, checks) |
| |
| |
| def main(): |
| parser = argparse.ArgumentParser(fromfile_prefix_chars='@', description="Rename macros for SDL3") |
| parser.add_argument("args", nargs="*", help="Input source files") |
| args = parser.parse_args() |
| |
| try: |
| apply_checks(args.args) |
| except Exception as e: |
| print(e) |
| return 1 |
| |
| |
| RENAMED_MACROS = { |
| "__AIX__": "SDL_PLATFORM_AIX", |
| "__HAIKU__": "SDL_PLATFORM_HAIKU", |
| "__BSDI__": "SDL_PLATFORM_BSDI", |
| "__FREEBSD__": "SDL_PLATFORM_FREEBSD", |
| "__HPUX__": "SDL_PLATFORM_HPUX", |
| "__IRIX__": "SDL_PLATFORM_IRIX", |
| "__LINUX__": "SDL_PLATFORM_LINUX", |
| "__OS2__": "SDL_PLATFORM_OS2", |
| # "__ANDROID__": "SDL_PLATFORM_ANDROID, |
| "__APPLE__": "SDL_PLATFORM_APPLE", |
| "__TVOS__": "SDL_PLATFORM_TVOS", |
| "__IPHONEOS__": "SDL_PLATFORM_IOS", |
| "__MACOSX__": "SDL_PLATFORM_MACOS", |
| "__NETBSD__": "SDL_PLATFORM_NETBSD", |
| "__OPENBSD__": "SDL_PLATFORM_OPENBSD", |
| "__OSF__": "SDL_PLATFORM_OSF", |
| "__QNXNTO__": "SDL_PLATFORM_QNXNTO", |
| "__RISCOS__": "SDL_PLATFORM_RISCOS", |
| "__SOLARIS__": "SDL_PLATFORM_SOLARIS", |
| "__PSP__": "SDL_PLATFORM_PSP", |
| "__PS2__": "SDL_PLATFORM_PS2", |
| "__VITA__": "SDL_PLATFORM_VITA", |
| "__3DS__": "SDL_PLATFORM_3DS", |
| # "__unix__": "SDL_PLATFORM_UNIX, |
| "__XBOXSERIES__": "SDL_PLATFORM_XBOXSERIES", |
| "__XBOXONE__": "SDL_PLATFORM_XBOXONE", |
| "__WINDOWS__": "SDL_PLATFORM_WINDOWS", |
| "__WIN32__": "SDL_PLATFORM_WIN32", |
| # "__CYGWIN_": "SDL_PLATFORM_CYGWIN", |
| "__WINGDK__": "SDL_PLATFORM_WINGDK", |
| "__GDK__": "SDL_PLATFORM_GDK", |
| # "__EMSCRIPTEN__": "SDL_PLATFORM_EMSCRIPTEN", |
| } |
| |
| DEPRECATED_PLATFORM_MACROS = { |
| "__DREAMCAST__", |
| "__NACL__", |
| "__PNACL__", |
| "__WINDOWS__", |
| "__WINRT__", |
| "SDL_ALTIVEC_BLITTERS", |
| "SDL_ARM_NEON_BLITTERS", |
| "SDL_ARM_SIMD_BLITTERS", |
| "SDL_ATOMIC_DISABLED", |
| "SDL_AUDIO_DISABLED", |
| "SDL_AUDIO_DRIVER_AAUDIO", |
| "SDL_AUDIO_DRIVER_ALSA", |
| "SDL_AUDIO_DRIVER_ALSA_DYNAMIC", |
| "SDL_AUDIO_DRIVER_ANDROID", |
| "SDL_AUDIO_DRIVER_ARTS", |
| "SDL_AUDIO_DRIVER_ARTS_DYNAMIC", |
| "SDL_AUDIO_DRIVER_COREAUDIO", |
| "SDL_AUDIO_DRIVER_DISK", |
| "SDL_AUDIO_DRIVER_DSOUND", |
| "SDL_AUDIO_DRIVER_DUMMY", |
| "SDL_AUDIO_DRIVER_EMSCRIPTEN", |
| "SDL_AUDIO_DRIVER_ESD", |
| "SDL_AUDIO_DRIVER_ESD_DYNAMIC", |
| "SDL_AUDIO_DRIVER_FUSIONSOUND", |
| "SDL_AUDIO_DRIVER_FUSIONSOUND_DYNAMIC", |
| "SDL_AUDIO_DRIVER_HAIKU", |
| "SDL_AUDIO_DRIVER_JACK", |
| "SDL_AUDIO_DRIVER_JACK_DYNAMIC", |
| "SDL_AUDIO_DRIVER_N3DS", |
| "SDL_AUDIO_DRIVER_NAS", |
| "SDL_AUDIO_DRIVER_NAS_DYNAMIC", |
| "SDL_AUDIO_DRIVER_NETBSD", |
| "SDL_AUDIO_DRIVER_OPENSLES", |
| "SDL_AUDIO_DRIVER_OS2", |
| "SDL_AUDIO_DRIVER_OSS", |
| "SDL_AUDIO_DRIVER_PAUDIO", |
| "SDL_AUDIO_DRIVER_PIPEWIRE", |
| "SDL_AUDIO_DRIVER_PIPEWIRE_DYNAMIC", |
| "SDL_AUDIO_DRIVER_PS2", |
| "SDL_AUDIO_DRIVER_PSP", |
| "SDL_AUDIO_DRIVER_PULSEAUDIO", |
| "SDL_AUDIO_DRIVER_PULSEAUDIO_DYNAMIC", |
| "SDL_AUDIO_DRIVER_QSA", |
| "SDL_AUDIO_DRIVER_SNDIO", |
| "SDL_AUDIO_DRIVER_SNDIO_DYNAMIC", |
| "SDL_AUDIO_DRIVER_SUNAUDIO", |
| "SDL_AUDIO_DRIVER_VITA", |
| "SDL_AUDIO_DRIVER_WASAPI", |
| "SDL_AUDIO_DRIVER_WINMM", |
| "SDL_CPUINFO_DISABLED", |
| "SDL_DEFAULT_ASSERT_LEVEL", |
| "SDL_EVENTS_DISABLED", |
| "SDL_FILESYSTEM_ANDROID", |
| "SDL_FILESYSTEM_COCOA", |
| "SDL_FILESYSTEM_DISABLED", |
| "SDL_FILESYSTEM_DUMMY", |
| "SDL_FILESYSTEM_EMSCRIPTEN", |
| "SDL_FILESYSTEM_HAIKU", |
| "SDL_FILESYSTEM_N3DS", |
| "SDL_FILESYSTEM_OS2", |
| "SDL_FILESYSTEM_PS2", |
| "SDL_FILESYSTEM_PSP", |
| "SDL_FILESYSTEM_RISCOS", |
| "SDL_FILESYSTEM_UNIX", |
| "SDL_FILESYSTEM_VITA", |
| "SDL_FILESYSTEM_WINDOWS", |
| "SDL_FILE_DISABLED", |
| "SDL_HAPTIC_ANDROID", |
| "SDL_HAPTIC_DINPUT", |
| "SDL_HAPTIC_DISABLED", |
| "SDL_HAPTIC_DUMMY", |
| "SDL_HAPTIC_IOKIT", |
| "SDL_HAPTIC_LINUX", |
| "SDL_HAPTIC_XINPUT", |
| "SDL_HAVE_LIBDECOR_GET_MIN_MAX", |
| "SDL_HAVE_MACHINE_JOYSTICK_H", |
| "SDL_HIDAPI_DISABLED", |
| "SDL_INPUT_FBSDKBIO", |
| "SDL_INPUT_LINUXEV", |
| "SDL_INPUT_LINUXKD", |
| "SDL_INPUT_WSCONS", |
| "SDL_IPHONE_KEYBOARD", |
| "SDL_IPHONE_LAUNCHSCREEN", |
| "SDL_JOYSTICK_ANDROID", |
| "SDL_JOYSTICK_DINPUT", |
| "SDL_JOYSTICK_DISABLED", |
| "SDL_JOYSTICK_DUMMY", |
| "SDL_JOYSTICK_EMSCRIPTEN", |
| "SDL_JOYSTICK_HAIKU", |
| "SDL_JOYSTICK_HIDAPI", |
| "SDL_JOYSTICK_IOKIT", |
| "SDL_JOYSTICK_LINUX", |
| "SDL_JOYSTICK_MFI", |
| "SDL_JOYSTICK_N3DS", |
| "SDL_JOYSTICK_OS2", |
| "SDL_JOYSTICK_PS2", |
| "SDL_JOYSTICK_PSP", |
| "SDL_JOYSTICK_RAWINPUT", |
| "SDL_JOYSTICK_USBHID", |
| "SDL_JOYSTICK_VIRTUAL", |
| "SDL_JOYSTICK_VITA", |
| "SDL_JOYSTICK_WGI", |
| "SDL_JOYSTICK_XINPUT", |
| "SDL_LIBSAMPLERATE_DYNAMIC", |
| "SDL_LIBUSB_DYNAMIC", |
| "SDL_LOADSO_DISABLED", |
| "SDL_LOADSO_DLOPEN", |
| "SDL_LOADSO_DUMMY", |
| "SDL_LOADSO_LDG", |
| "SDL_LOADSO_OS2", |
| "SDL_LOADSO_WINDOWS", |
| "SDL_LOCALE_DISABLED", |
| "SDL_LOCALE_DUMMY", |
| "SDL_MISC_DISABLED", |
| "SDL_MISC_DUMMY", |
| "SDL_POWER_ANDROID", |
| "SDL_POWER_DISABLED", |
| "SDL_POWER_EMSCRIPTEN", |
| "SDL_POWER_HAIKU", |
| "SDL_POWER_HARDWIRED", |
| "SDL_POWER_LINUX", |
| "SDL_POWER_MACOSX", |
| "SDL_POWER_N3DS", |
| "SDL_POWER_PSP", |
| "SDL_POWER_UIKIT", |
| "SDL_POWER_VITA", |
| "SDL_POWER_WINDOWS", |
| "SDL_POWER_WINRT", |
| "SDL_RENDER_DISABLED", |
| "SDL_SENSOR_ANDROID", |
| "SDL_SENSOR_COREMOTION", |
| "SDL_SENSOR_DISABLED", |
| "SDL_SENSOR_DUMMY", |
| "SDL_SENSOR_N3DS", |
| "SDL_SENSOR_VITA", |
| "SDL_SENSOR_WINDOWS", |
| "SDL_THREADS_DISABLED", |
| "SDL_THREAD_GENERIC_COND_SUFFIX", |
| "SDL_THREAD_N3DS", |
| "SDL_THREAD_OS2", |
| "SDL_THREAD_PS2", |
| "SDL_THREAD_PSP", |
| "SDL_THREAD_PTHREAD", |
| "SDL_THREAD_PTHREAD_RECURSIVE_MUTEX", |
| "SDL_THREAD_PTHREAD_RECURSIVE_MUTEX_NP", |
| "SDL_THREAD_VITA", |
| "SDL_THREAD_WINDOWS", |
| "SDL_TIMERS_DISABLED", |
| "SDL_TIMER_DUMMY", |
| "SDL_TIMER_HAIKU", |
| "SDL_TIMER_N3DS", |
| "SDL_TIMER_OS2", |
| "SDL_TIMER_PS2", |
| "SDL_TIMER_PSP", |
| "SDL_TIMER_UNIX", |
| "SDL_TIMER_VITA", |
| "SDL_TIMER_WINDOWS", |
| "SDL_UDEV_DYNAMIC", |
| "SDL_USE_IME", |
| "SDL_USE_LIBICONV", |
| "SDL_VIDEO_DISABLED", |
| "SDL_VIDEO_DRIVER_ANDROID", |
| "SDL_VIDEO_DRIVER_COCOA", |
| "SDL_VIDEO_DRIVER_DIRECTFB", |
| "SDL_VIDEO_DRIVER_DIRECTFB_DYNAMIC", |
| "SDL_VIDEO_DRIVER_DUMMY", |
| "SDL_VIDEO_DRIVER_EMSCRIPTEN", |
| "SDL_VIDEO_DRIVER_HAIKU", |
| "SDL_VIDEO_DRIVER_KMSDRM", |
| "SDL_VIDEO_DRIVER_KMSDRM_DYNAMIC", |
| "SDL_VIDEO_DRIVER_KMSDRM_DYNAMIC_GBM", |
| "SDL_VIDEO_DRIVER_N3DS", |
| "SDL_VIDEO_DRIVER_OFFSCREEN", |
| "SDL_VIDEO_DRIVER_OS2", |
| "SDL_VIDEO_DRIVER_PS2", |
| "SDL_VIDEO_DRIVER_PSP", |
| "SDL_VIDEO_DRIVER_QNX", |
| "SDL_VIDEO_DRIVER_RISCOS", |
| "SDL_VIDEO_DRIVER_RPI", |
| "SDL_VIDEO_DRIVER_UIKIT", |
| "SDL_VIDEO_DRIVER_VITA", |
| "SDL_VIDEO_DRIVER_VIVANTE", |
| "SDL_VIDEO_DRIVER_VIVANTE_VDK", |
| "SDL_VIDEO_DRIVER_WAYLAND", |
| "SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC", |
| "SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_CURSOR", |
| "SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_EGL", |
| "SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_LIBDECOR", |
| "SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_XKBCOMMON", |
| "SDL_VIDEO_DRIVER_WAYLAND_QT_TOUCH", |
| "SDL_VIDEO_DRIVER_WINDOWS", |
| "SDL_VIDEO_DRIVER_WINRT", |
| "SDL_VIDEO_DRIVER_X11", |
| "SDL_VIDEO_DRIVER_X11_DYNAMIC", |
| "SDL_VIDEO_DRIVER_X11_DYNAMIC_XCURSOR", |
| "SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT", |
| "SDL_VIDEO_DRIVER_X11_DYNAMIC_XFIXES", |
| "SDL_VIDEO_DRIVER_X11_DYNAMIC_XINPUT2", |
| "SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR", |
| "SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS", |
| "SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM", |
| "SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS", |
| "SDL_VIDEO_DRIVER_X11_XCURSOR", |
| "SDL_VIDEO_DRIVER_X11_XDBE", |
| "SDL_VIDEO_DRIVER_X11_XFIXES", |
| "SDL_VIDEO_DRIVER_X11_XINPUT2", |
| "SDL_VIDEO_DRIVER_X11_XINPUT2_SUPPORTS_MULTITOUCH", |
| "SDL_VIDEO_DRIVER_X11_XRANDR", |
| "SDL_VIDEO_DRIVER_X11_XSCRNSAVER", |
| "SDL_VIDEO_DRIVER_X11_XSHAPE", |
| "SDL_VIDEO_METAL", |
| "SDL_VIDEO_OPENGL", |
| "SDL_VIDEO_OPENGL_BGL", |
| "SDL_VIDEO_OPENGL_CGL", |
| "SDL_VIDEO_OPENGL_EGL", |
| "SDL_VIDEO_OPENGL_ES", |
| "SDL_VIDEO_OPENGL_ES2", |
| "SDL_VIDEO_OPENGL_GLX", |
| "SDL_VIDEO_OPENGL_OSMESA", |
| "SDL_VIDEO_OPENGL_OSMESA_DYNAMIC", |
| "SDL_VIDEO_OPENGL_WGL", |
| "SDL_VIDEO_RENDER_D3D", |
| "SDL_VIDEO_RENDER_D3D11", |
| "SDL_VIDEO_RENDER_D3D12", |
| "SDL_VIDEO_RENDER_DIRECTFB", |
| "SDL_VIDEO_RENDER_METAL", |
| "SDL_VIDEO_RENDER_OGL", |
| "SDL_VIDEO_RENDER_OGL_ES", |
| "SDL_VIDEO_RENDER_OGL_ES2", |
| "SDL_VIDEO_RENDER_PS2", |
| "SDL_VIDEO_RENDER_PSP", |
| "SDL_VIDEO_RENDER_VITA_GXM", |
| "SDL_VIDEO_VITA_PIB", |
| "SDL_VIDEO_VITA_PVR", |
| "SDL_VIDEO_VITA_PVR_OGL", |
| "SDL_VIDEO_VULKAN", |
| } |
| |
| if __name__ == "__main__": |
| raise SystemExit(main()) |
| |