#!/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, "__NGAGE__": "SDL_PLATFORM_NGAGE", "__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, "__WINRT__": "SDL_PLATFORM_WINRT", "__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__", "DYNAPI_NEEDS_DLOPEN", "HAVE_ABS", "HAVE_ACOS", "HAVE_ACOSF", "HAVE_ALLOCA", "HAVE_ALLOCA_H", "HAVE_ALTIVEC_H", "HAVE_ASIN", "HAVE_ASINF", "HAVE_ATAN", "HAVE_ATAN2", "HAVE_ATAN2F", "HAVE_ATANF", "HAVE_ATOF", "HAVE_ATOI", "HAVE_AUDIOCLIENT_H", "HAVE_BCOPY", "HAVE_BSEARCH", "HAVE_CALLOC", "HAVE_CEIL", "HAVE_CEILF", "HAVE_CLOCK_GETTIME", "HAVE_COPYSIGN", "HAVE_COPYSIGNF", "HAVE_COS", "HAVE_COSF", "HAVE_CTYPE_H", "HAVE_D3D11_H", "HAVE_D3D12_H", "HAVE_D3D_H", "HAVE_DBUS_DBUS_H", "HAVE_DDRAW_H", "HAVE_DINPUT_H", "HAVE_DLOPEN", "HAVE_DSOUND_H", "HAVE_DXGI_H", "HAVE_ELF_AUX_INFO", "HAVE_EXP", "HAVE_EXPF", "HAVE_FABS", "HAVE_FABSF", "HAVE_FCITX", "HAVE_FLOAT_H", "HAVE_FLOAT_H", "HAVE_FLOOR", "HAVE_FLOORF", "HAVE_FMOD", "HAVE_FMODF", "HAVE_FOPEN64", "HAVE_FREE", "HAVE_FSEEKO", "HAVE_FSEEKO64", "HAVE_GCC_ATOMICS", "HAVE_GCC_SYNC_LOCK_TEST_AND_SET", "HAVE_GETAUXVAL", "HAVE_GETENV", "HAVE_GETPAGESIZE", "HAVE_IBUS_IBUS_H", "HAVE_ICONV", "HAVE_ICONV_H", "HAVE_IMMINTRIN_H", "HAVE_IMMINTRIN_H", "HAVE_INDEX", "HAVE_INOTIFY", "HAVE_INOTIFY_INIT", "HAVE_INOTIFY_INIT1", "HAVE_INTTYPES_H", "HAVE_ITOA", "HAVE_LIBC", "HAVE_LIBDECOR_H", "HAVE_LIBSAMPLERATE_H", "HAVE_LIBUDEV_H", "HAVE_LIBUNWIND_H", "HAVE_LIBUSB", "HAVE_LIMITS_H", "HAVE_LINUX_INPUT_H", "HAVE_LOG", "HAVE_LOG10", "HAVE_LOG10F", "HAVE_LOGF", "HAVE_LROUND", "HAVE_LROUNDF", "HAVE_MALLOC", "HAVE_MALLOC_H", "HAVE_MATH_H", "HAVE_MEMCMP", "HAVE_MEMCPY", "HAVE_MEMMOVE", "HAVE_MEMORY_H", "HAVE_MEMSET", "HAVE_MMDEVICEAPI_H", "HAVE_MPROTECT", "HAVE_M_PI", "HAVE_NANOSLEEP", "HAVE_O_CLOEXEC", "HAVE_POLL", "HAVE_POW", "HAVE_POWF", "HAVE_PTHREAD_NP_H", "HAVE_PTHREAD_SETNAME_NP", "HAVE_PTHREAD_SET_NAME_NP", "HAVE_PUTENV", "HAVE_QSORT", "HAVE_REALLOC", "HAVE_RINDEX", "HAVE_ROAPI_H", "HAVE_ROUND", "HAVE_ROUNDF", "HAVE_SA_SIGACTION", "HAVE_SCALBN", "HAVE_SCALBNF", "HAVE_SEM_TIMEDWAIT", "HAVE_SENSORSAPI_H", "HAVE_SETENV", "HAVE_SETJMP", "HAVE_SHELLSCALINGAPI_H", "HAVE_SIGACTION", "HAVE_SIGNAL_H", "HAVE_SIN", "HAVE_SINF", "HAVE_SQRT", "HAVE_SQRTF", "HAVE_SSCANF", "HAVE_STDARG_H", "HAVE_STDARG_H", "HAVE_STDDEF_H", "HAVE_STDDEF_H", "HAVE_STDINT_H", "HAVE_STDINT_H", "HAVE_STDIO_H", "HAVE_STDLIB_H", "HAVE_STRCASECMP", "HAVE_STRCASESTR", "HAVE_STRCHR", "HAVE_STRCMP", "HAVE_STRINGS_H", "HAVE_STRING_H", "HAVE_STRLCAT", "HAVE_STRLCPY", "HAVE_STRLEN", "HAVE_STRNCASECMP", "HAVE_STRNCMP", "HAVE_STRRCHR", "HAVE_STRSTR", "HAVE_STRTOD", "HAVE_STRTOK_R", "HAVE_STRTOL", "HAVE_STRTOLL", "HAVE_STRTOUL", "HAVE_STRTOULL", "HAVE_SYSCONF", "HAVE_SYSCTLBYNAME", "HAVE_SYS_INOTIFY_H", "HAVE_SYS_TYPES_H", "HAVE_TAN", "HAVE_TANF", "HAVE_TPCSHRD_H", "HAVE_TRUNC", "HAVE_TRUNCF", "HAVE_UNSETENV", "HAVE_VSNPRINTF", "HAVE_VSSCANF", "HAVE_WCHAR_H", "HAVE_WCSCASECMP", "HAVE_WCSCMP", "HAVE_WCSDUP", "HAVE_WCSLCAT", "HAVE_WCSLCPY", "HAVE_WCSLEN", "HAVE_WCSNCASECMP", "HAVE_WCSNCMP", "HAVE_WCSSTR", "HAVE_WINDOWS_GAMING_INPUT_H", "HAVE_XINPUT_H", "HAVE__EXIT", "HAVE__I64TOA", "HAVE__LTOA", "HAVE__STRICMP", "HAVE__STRLWR", "HAVE__STRNICMP", "HAVE__STRREV", "HAVE__STRUPR", "HAVE__UI64TOA", "HAVE__UITOA", "HAVE__ULTOA", "HAVE__WCSDUP", "HAVE__WCSICMP", "HAVE__WCSNICMP", "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", "SDL_config_h_", "SIZEOF_VOIDP", "STDC_HEADERS", "USE_POSIX_SPAWN", "_UINTPTR_T_DEFINED", } if __name__ == "__main__": raise SystemExit(main())