From 6aaedb813fa11ba0679c3051bc2eb28646b9506c Mon Sep 17 00:00:00 2001 From: 3gg <3gg@shellblade.net> Date: Sat, 30 Aug 2025 16:53:58 -0700 Subject: Update to SDL3 --- src/contrib/SDL-3.2.20/test/emscripten/server.py | 102 +++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100755 src/contrib/SDL-3.2.20/test/emscripten/server.py (limited to 'src/contrib/SDL-3.2.20/test/emscripten/server.py') diff --git a/src/contrib/SDL-3.2.20/test/emscripten/server.py b/src/contrib/SDL-3.2.20/test/emscripten/server.py new file mode 100755 index 0000000..103d164 --- /dev/null +++ b/src/contrib/SDL-3.2.20/test/emscripten/server.py @@ -0,0 +1,102 @@ +#!/usr/bin/env python + +# Based on http/server.py from Python + +from argparse import ArgumentParser +import contextlib +from http.server import SimpleHTTPRequestHandler +from http.server import ThreadingHTTPServer +import os +import socket + + +class MyHTTPRequestHandler(SimpleHTTPRequestHandler): + extensions_map = { + ".manifest": "text/cache-manifest", + ".html": "text/html", + ".png": "image/png", + ".jpg": "image/jpg", + ".svg": "image/svg+xml", + ".css": "text/css", + ".js": "application/x-javascript", + ".wasm": "application/wasm", + "": "application/octet-stream", + } + + def __init__(self, *args, maps=None, **kwargs): + self.maps = maps or [] + SimpleHTTPRequestHandler.__init__(self, *args, **kwargs) + + def end_headers(self): + self.send_my_headers() + SimpleHTTPRequestHandler.end_headers(self) + + def send_my_headers(self): + self.send_header("Cache-Control", "no-cache, no-store, must-revalidate") + self.send_header("Pragma", "no-cache") + self.send_header("Expires", "0") + + def translate_path(self, path): + for map_path, map_prefix in self.maps: + if path.startswith(map_prefix): + res = os.path.join(map_path, path.removeprefix(map_prefix).lstrip("/")) + break + else: + res = super().translate_path(path) + return res + + +def serve_forever(port: int, ServerClass): + handler = MyHTTPRequestHandler + + addr = ("0.0.0.0", port) + with ServerClass(addr, handler) as httpd: + host, port = httpd.socket.getsockname()[:2] + url_host = f"[{host}]" if ":" in host else host + print(f"Serving HTTP on {host} port {port} (http://{url_host}:{port}/) ...") + try: + httpd.serve_forever() + except KeyboardInterrupt: + print("\nKeyboard interrupt received, exiting.") + return 0 + + +def main(): + parser = ArgumentParser(allow_abbrev=False) + parser.add_argument("port", nargs="?", type=int, default=8080) + parser.add_argument("-d", dest="directory", type=str, default=None) + parser.add_argument("--map", dest="maps", nargs="+", type=str, help="Mappings, used as e.g. \"$HOME/projects/SDL:/sdl\"") + args = parser.parse_args() + + maps = [] + for m in args.maps: + try: + path, uri = m.split(":", 1) + except ValueError: + parser.error(f"Invalid mapping: \"{m}\"") + maps.append((path, uri)) + + class DualStackServer(ThreadingHTTPServer): + def server_bind(self): + # suppress exception when protocol is IPv4 + with contextlib.suppress(Exception): + self.socket.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_V6ONLY, 0) + return super().server_bind() + + def finish_request(self, request, client_address): + self.RequestHandlerClass( + request, + client_address, + self, + directory=args.directory, + maps=maps, + ) + + return serve_forever( + port=args.port, + ServerClass=DualStackServer, + ) + + +if __name__ == "__main__": + raise SystemExit(main()) -- cgit v1.2.3