Simple Directmedia Layer
at main 12 kB view raw
1#!/usr/bin/env python3 2# 3# This script renames SDL macros in the specified paths 4 5import argparse 6import pathlib 7import re 8 9 10class TextReplacer: 11 def __init__(self, macros, repl_format): 12 if isinstance(macros, dict): 13 macros_keys = macros.keys() 14 else: 15 macros_keys = macros 16 self.macros = macros 17 self.re_macros = re.compile(r"\W(" + "|".join(macros_keys) + r")(?:\W|$)") 18 self.repl_format = repl_format 19 20 def apply(self, contents): 21 def cb(m): 22 macro = m.group(1) 23 original = m.group(0) 24 match_start, _ = m.span(0) 25 platform_start, platform_end = m.span(1) 26 if isinstance(self.macros, dict): 27 repl_args = (macro, self.macros[macro]) 28 else: 29 repl_args = macro, 30 new_text = self.repl_format.format(*repl_args) 31 r = original[:(platform_start-match_start)] + new_text + original[platform_end-match_start:] 32 return r 33 contents, _ = self.re_macros.subn(cb, contents) 34 35 return contents 36 37 38class MacrosCheck: 39 def __init__(self): 40 self.renamed_platform_macros = TextReplacer(RENAMED_MACROS, "{1}") 41 self.deprecated_platform_macros = TextReplacer(DEPRECATED_PLATFORM_MACROS, "{0} /* {0} has been removed in SDL3 */") 42 43 def run(self, contents): 44 contents = self.renamed_platform_macros.apply(contents) 45 contents = self.deprecated_platform_macros.apply(contents) 46 return contents 47 48 49def apply_checks(paths): 50 checks = ( 51 MacrosCheck(), 52 ) 53 54 for entry in paths: 55 path = pathlib.Path(entry) 56 if not path.exists(): 57 print("{} does not exist, skipping".format(entry)) 58 continue 59 apply_checks_in_path(path, checks) 60 61 62def apply_checks_in_file(file, checks): 63 try: 64 with file.open("r", encoding="UTF-8", newline="") as rfp: 65 original = rfp.read() 66 contents = original 67 for check in checks: 68 contents = check.run(contents) 69 if contents != original: 70 with file.open("w", encoding="UTF-8", newline="") as wfp: 71 wfp.write(contents) 72 except UnicodeDecodeError: 73 print("%s is not text, skipping" % file) 74 except Exception as err: 75 print("%s" % err) 76 77 78def apply_checks_in_dir(path, checks): 79 for entry in path.glob("*"): 80 if entry.is_dir(): 81 apply_checks_in_dir(entry, checks) 82 else: 83 print("Processing %s" % entry) 84 apply_checks_in_file(entry, checks) 85 86 87def apply_checks_in_path(path, checks): 88 if path.is_dir(): 89 apply_checks_in_dir(path, checks) 90 else: 91 apply_checks_in_file(path, checks) 92 93 94def main(): 95 parser = argparse.ArgumentParser(fromfile_prefix_chars='@', description="Rename macros for SDL3") 96 parser.add_argument("args", nargs="*", help="Input source files") 97 args = parser.parse_args() 98 99 try: 100 apply_checks(args.args) 101 except Exception as e: 102 print(e) 103 return 1 104 105 106RENAMED_MACROS = { 107 "__AIX__": "SDL_PLATFORM_AIX", 108 "__HAIKU__": "SDL_PLATFORM_HAIKU", 109 "__BSDI__": "SDL_PLATFORM_BSDI", 110 "__FREEBSD__": "SDL_PLATFORM_FREEBSD", 111 "__HPUX__": "SDL_PLATFORM_HPUX", 112 "__IRIX__": "SDL_PLATFORM_IRIX", 113 "__LINUX__": "SDL_PLATFORM_LINUX", 114 "__OS2__": "SDL_PLATFORM_OS2", 115 # "__ANDROID__": "SDL_PLATFORM_ANDROID, 116 "__APPLE__": "SDL_PLATFORM_APPLE", 117 "__TVOS__": "SDL_PLATFORM_TVOS", 118 "__IPHONEOS__": "SDL_PLATFORM_IOS", 119 "__MACOSX__": "SDL_PLATFORM_MACOS", 120 "__NETBSD__": "SDL_PLATFORM_NETBSD", 121 "__OPENBSD__": "SDL_PLATFORM_OPENBSD", 122 "__OSF__": "SDL_PLATFORM_OSF", 123 "__QNXNTO__": "SDL_PLATFORM_QNXNTO", 124 "__RISCOS__": "SDL_PLATFORM_RISCOS", 125 "__SOLARIS__": "SDL_PLATFORM_SOLARIS", 126 "__PSP__": "SDL_PLATFORM_PSP", 127 "__PS2__": "SDL_PLATFORM_PS2", 128 "__VITA__": "SDL_PLATFORM_VITA", 129 "__3DS__": "SDL_PLATFORM_3DS", 130 # "__unix__": "SDL_PLATFORM_UNIX, 131 "__XBOXSERIES__": "SDL_PLATFORM_XBOXSERIES", 132 "__XBOXONE__": "SDL_PLATFORM_XBOXONE", 133 "__WINDOWS__": "SDL_PLATFORM_WINDOWS", 134 "__WIN32__": "SDL_PLATFORM_WIN32", 135 # "__CYGWIN_": "SDL_PLATFORM_CYGWIN", 136 "__WINGDK__": "SDL_PLATFORM_WINGDK", 137 "__GDK__": "SDL_PLATFORM_GDK", 138 # "__EMSCRIPTEN__": "SDL_PLATFORM_EMSCRIPTEN", 139} 140 141DEPRECATED_PLATFORM_MACROS = { 142 "__DREAMCAST__", 143 "__NACL__", 144 "__PNACL__", 145 "__WINDOWS__", 146 "__WINRT__", 147 "SDL_ALTIVEC_BLITTERS", 148 "SDL_ARM_NEON_BLITTERS", 149 "SDL_ARM_SIMD_BLITTERS", 150 "SDL_ATOMIC_DISABLED", 151 "SDL_AUDIO_DISABLED", 152 "SDL_AUDIO_DRIVER_AAUDIO", 153 "SDL_AUDIO_DRIVER_ALSA", 154 "SDL_AUDIO_DRIVER_ALSA_DYNAMIC", 155 "SDL_AUDIO_DRIVER_ANDROID", 156 "SDL_AUDIO_DRIVER_ARTS", 157 "SDL_AUDIO_DRIVER_ARTS_DYNAMIC", 158 "SDL_AUDIO_DRIVER_COREAUDIO", 159 "SDL_AUDIO_DRIVER_DISK", 160 "SDL_AUDIO_DRIVER_DSOUND", 161 "SDL_AUDIO_DRIVER_DUMMY", 162 "SDL_AUDIO_DRIVER_EMSCRIPTEN", 163 "SDL_AUDIO_DRIVER_ESD", 164 "SDL_AUDIO_DRIVER_ESD_DYNAMIC", 165 "SDL_AUDIO_DRIVER_FUSIONSOUND", 166 "SDL_AUDIO_DRIVER_FUSIONSOUND_DYNAMIC", 167 "SDL_AUDIO_DRIVER_HAIKU", 168 "SDL_AUDIO_DRIVER_JACK", 169 "SDL_AUDIO_DRIVER_JACK_DYNAMIC", 170 "SDL_AUDIO_DRIVER_N3DS", 171 "SDL_AUDIO_DRIVER_NAS", 172 "SDL_AUDIO_DRIVER_NAS_DYNAMIC", 173 "SDL_AUDIO_DRIVER_NETBSD", 174 "SDL_AUDIO_DRIVER_OPENSLES", 175 "SDL_AUDIO_DRIVER_OS2", 176 "SDL_AUDIO_DRIVER_OSS", 177 "SDL_AUDIO_DRIVER_PAUDIO", 178 "SDL_AUDIO_DRIVER_PIPEWIRE", 179 "SDL_AUDIO_DRIVER_PIPEWIRE_DYNAMIC", 180 "SDL_AUDIO_DRIVER_PS2", 181 "SDL_AUDIO_DRIVER_PSP", 182 "SDL_AUDIO_DRIVER_PULSEAUDIO", 183 "SDL_AUDIO_DRIVER_PULSEAUDIO_DYNAMIC", 184 "SDL_AUDIO_DRIVER_QSA", 185 "SDL_AUDIO_DRIVER_SNDIO", 186 "SDL_AUDIO_DRIVER_SNDIO_DYNAMIC", 187 "SDL_AUDIO_DRIVER_SUNAUDIO", 188 "SDL_AUDIO_DRIVER_VITA", 189 "SDL_AUDIO_DRIVER_WASAPI", 190 "SDL_AUDIO_DRIVER_WINMM", 191 "SDL_CPUINFO_DISABLED", 192 "SDL_DEFAULT_ASSERT_LEVEL", 193 "SDL_EVENTS_DISABLED", 194 "SDL_FILESYSTEM_ANDROID", 195 "SDL_FILESYSTEM_COCOA", 196 "SDL_FILESYSTEM_DISABLED", 197 "SDL_FILESYSTEM_DUMMY", 198 "SDL_FILESYSTEM_EMSCRIPTEN", 199 "SDL_FILESYSTEM_HAIKU", 200 "SDL_FILESYSTEM_N3DS", 201 "SDL_FILESYSTEM_OS2", 202 "SDL_FILESYSTEM_PS2", 203 "SDL_FILESYSTEM_PSP", 204 "SDL_FILESYSTEM_RISCOS", 205 "SDL_FILESYSTEM_UNIX", 206 "SDL_FILESYSTEM_VITA", 207 "SDL_FILESYSTEM_WINDOWS", 208 "SDL_FILE_DISABLED", 209 "SDL_HAPTIC_ANDROID", 210 "SDL_HAPTIC_DINPUT", 211 "SDL_HAPTIC_DISABLED", 212 "SDL_HAPTIC_DUMMY", 213 "SDL_HAPTIC_IOKIT", 214 "SDL_HAPTIC_LINUX", 215 "SDL_HAPTIC_XINPUT", 216 "SDL_HAVE_LIBDECOR_GET_MIN_MAX", 217 "SDL_HAVE_MACHINE_JOYSTICK_H", 218 "SDL_HIDAPI_DISABLED", 219 "SDL_INPUT_FBSDKBIO", 220 "SDL_INPUT_LINUXEV", 221 "SDL_INPUT_LINUXKD", 222 "SDL_INPUT_WSCONS", 223 "SDL_IPHONE_KEYBOARD", 224 "SDL_IPHONE_LAUNCHSCREEN", 225 "SDL_JOYSTICK_ANDROID", 226 "SDL_JOYSTICK_DINPUT", 227 "SDL_JOYSTICK_DISABLED", 228 "SDL_JOYSTICK_DUMMY", 229 "SDL_JOYSTICK_EMSCRIPTEN", 230 "SDL_JOYSTICK_HAIKU", 231 "SDL_JOYSTICK_HIDAPI", 232 "SDL_JOYSTICK_IOKIT", 233 "SDL_JOYSTICK_LINUX", 234 "SDL_JOYSTICK_MFI", 235 "SDL_JOYSTICK_N3DS", 236 "SDL_JOYSTICK_OS2", 237 "SDL_JOYSTICK_PS2", 238 "SDL_JOYSTICK_PSP", 239 "SDL_JOYSTICK_RAWINPUT", 240 "SDL_JOYSTICK_USBHID", 241 "SDL_JOYSTICK_VIRTUAL", 242 "SDL_JOYSTICK_VITA", 243 "SDL_JOYSTICK_WGI", 244 "SDL_JOYSTICK_XINPUT", 245 "SDL_LIBSAMPLERATE_DYNAMIC", 246 "SDL_LIBUSB_DYNAMIC", 247 "SDL_LOADSO_DISABLED", 248 "SDL_LOADSO_DLOPEN", 249 "SDL_LOADSO_DUMMY", 250 "SDL_LOADSO_LDG", 251 "SDL_LOADSO_OS2", 252 "SDL_LOADSO_WINDOWS", 253 "SDL_LOCALE_DISABLED", 254 "SDL_LOCALE_DUMMY", 255 "SDL_MISC_DISABLED", 256 "SDL_MISC_DUMMY", 257 "SDL_POWER_ANDROID", 258 "SDL_POWER_DISABLED", 259 "SDL_POWER_EMSCRIPTEN", 260 "SDL_POWER_HAIKU", 261 "SDL_POWER_HARDWIRED", 262 "SDL_POWER_LINUX", 263 "SDL_POWER_MACOSX", 264 "SDL_POWER_N3DS", 265 "SDL_POWER_PSP", 266 "SDL_POWER_UIKIT", 267 "SDL_POWER_VITA", 268 "SDL_POWER_WINDOWS", 269 "SDL_POWER_WINRT", 270 "SDL_RENDER_DISABLED", 271 "SDL_SENSOR_ANDROID", 272 "SDL_SENSOR_COREMOTION", 273 "SDL_SENSOR_DISABLED", 274 "SDL_SENSOR_DUMMY", 275 "SDL_SENSOR_N3DS", 276 "SDL_SENSOR_VITA", 277 "SDL_SENSOR_WINDOWS", 278 "SDL_THREADS_DISABLED", 279 "SDL_THREAD_GENERIC_COND_SUFFIX", 280 "SDL_THREAD_N3DS", 281 "SDL_THREAD_OS2", 282 "SDL_THREAD_PS2", 283 "SDL_THREAD_PSP", 284 "SDL_THREAD_PTHREAD", 285 "SDL_THREAD_PTHREAD_RECURSIVE_MUTEX", 286 "SDL_THREAD_PTHREAD_RECURSIVE_MUTEX_NP", 287 "SDL_THREAD_VITA", 288 "SDL_THREAD_WINDOWS", 289 "SDL_TIMERS_DISABLED", 290 "SDL_TIMER_DUMMY", 291 "SDL_TIMER_HAIKU", 292 "SDL_TIMER_N3DS", 293 "SDL_TIMER_OS2", 294 "SDL_TIMER_PS2", 295 "SDL_TIMER_PSP", 296 "SDL_TIMER_UNIX", 297 "SDL_TIMER_VITA", 298 "SDL_TIMER_WINDOWS", 299 "SDL_UDEV_DYNAMIC", 300 "SDL_USE_IME", 301 "SDL_USE_LIBICONV", 302 "SDL_VIDEO_DISABLED", 303 "SDL_VIDEO_DRIVER_ANDROID", 304 "SDL_VIDEO_DRIVER_COCOA", 305 "SDL_VIDEO_DRIVER_DIRECTFB", 306 "SDL_VIDEO_DRIVER_DIRECTFB_DYNAMIC", 307 "SDL_VIDEO_DRIVER_DUMMY", 308 "SDL_VIDEO_DRIVER_EMSCRIPTEN", 309 "SDL_VIDEO_DRIVER_HAIKU", 310 "SDL_VIDEO_DRIVER_KMSDRM", 311 "SDL_VIDEO_DRIVER_KMSDRM_DYNAMIC", 312 "SDL_VIDEO_DRIVER_KMSDRM_DYNAMIC_GBM", 313 "SDL_VIDEO_DRIVER_N3DS", 314 "SDL_VIDEO_DRIVER_OFFSCREEN", 315 "SDL_VIDEO_DRIVER_OS2", 316 "SDL_VIDEO_DRIVER_PS2", 317 "SDL_VIDEO_DRIVER_PSP", 318 "SDL_VIDEO_DRIVER_QNX", 319 "SDL_VIDEO_DRIVER_RISCOS", 320 "SDL_VIDEO_DRIVER_RPI", 321 "SDL_VIDEO_DRIVER_UIKIT", 322 "SDL_VIDEO_DRIVER_VITA", 323 "SDL_VIDEO_DRIVER_VIVANTE", 324 "SDL_VIDEO_DRIVER_VIVANTE_VDK", 325 "SDL_VIDEO_DRIVER_WAYLAND", 326 "SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC", 327 "SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_CURSOR", 328 "SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_EGL", 329 "SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_LIBDECOR", 330 "SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_XKBCOMMON", 331 "SDL_VIDEO_DRIVER_WAYLAND_QT_TOUCH", 332 "SDL_VIDEO_DRIVER_WINDOWS", 333 "SDL_VIDEO_DRIVER_WINRT", 334 "SDL_VIDEO_DRIVER_X11", 335 "SDL_VIDEO_DRIVER_X11_DYNAMIC", 336 "SDL_VIDEO_DRIVER_X11_DYNAMIC_XCURSOR", 337 "SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT", 338 "SDL_VIDEO_DRIVER_X11_DYNAMIC_XFIXES", 339 "SDL_VIDEO_DRIVER_X11_DYNAMIC_XINPUT2", 340 "SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR", 341 "SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS", 342 "SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM", 343 "SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS", 344 "SDL_VIDEO_DRIVER_X11_XCURSOR", 345 "SDL_VIDEO_DRIVER_X11_XDBE", 346 "SDL_VIDEO_DRIVER_X11_XFIXES", 347 "SDL_VIDEO_DRIVER_X11_XINPUT2", 348 "SDL_VIDEO_DRIVER_X11_XINPUT2_SUPPORTS_MULTITOUCH", 349 "SDL_VIDEO_DRIVER_X11_XRANDR", 350 "SDL_VIDEO_DRIVER_X11_XSCRNSAVER", 351 "SDL_VIDEO_DRIVER_X11_XSHAPE", 352 "SDL_VIDEO_METAL", 353 "SDL_VIDEO_OPENGL", 354 "SDL_VIDEO_OPENGL_BGL", 355 "SDL_VIDEO_OPENGL_CGL", 356 "SDL_VIDEO_OPENGL_EGL", 357 "SDL_VIDEO_OPENGL_ES", 358 "SDL_VIDEO_OPENGL_ES2", 359 "SDL_VIDEO_OPENGL_GLX", 360 "SDL_VIDEO_OPENGL_OSMESA", 361 "SDL_VIDEO_OPENGL_OSMESA_DYNAMIC", 362 "SDL_VIDEO_OPENGL_WGL", 363 "SDL_VIDEO_RENDER_D3D", 364 "SDL_VIDEO_RENDER_D3D11", 365 "SDL_VIDEO_RENDER_D3D12", 366 "SDL_VIDEO_RENDER_DIRECTFB", 367 "SDL_VIDEO_RENDER_METAL", 368 "SDL_VIDEO_RENDER_OGL", 369 "SDL_VIDEO_RENDER_OGL_ES", 370 "SDL_VIDEO_RENDER_OGL_ES2", 371 "SDL_VIDEO_RENDER_PS2", 372 "SDL_VIDEO_RENDER_PSP", 373 "SDL_VIDEO_RENDER_VITA_GXM", 374 "SDL_VIDEO_VITA_PIB", 375 "SDL_VIDEO_VITA_PVR", 376 "SDL_VIDEO_VITA_PVR_OGL", 377 "SDL_VIDEO_VULKAN", 378} 379 380if __name__ == "__main__": 381 raise SystemExit(main()) 382