Skip to content

Commit 218e9ac

Browse files
committed
handle no fd patch for 3.12
1 parent 7d31f37 commit 218e9ac

File tree

6 files changed

+42
-19
lines changed

6 files changed

+42
-19
lines changed

scripts/emsdk-fetch.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ then
5353
ALL="$ALL struct_info libfetch zlib bzip2"
5454
ALL="$ALL libpng libjpeg freetype harfbuzz"
5555
ALL="$ALL sdl2 sdl2_mixer sdl2_gfx sdl2_ttf"
56+
ALL="$ALL libsqlite3"
5657

5758
echo "
5859
* building third parties libraries for emsdk ( can take time ... )

support/__EMSCRIPTEN__.overlay/pygame/wasm_patches.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,18 @@ async def fire_event():
4444

4545
pygame.time.set_timer = patch_set_timer
4646

47+
# ====================================================================
48+
# pygame.quit is too hard on gc, and re-importing pygame is problematic
49+
# if interpreter is not fully renewed.
50+
# so just clear screen cut music and hope for the best.
51+
52+
def pygame_quit():
53+
pygame.mixer.music.stop()
54+
pygame.display.update()
55+
56+
pygame.quit = pygame_quit
57+
58+
4759

4860
# ====================================================================
4961
print("\n\n")

support/__EMSCRIPTEN__.sh

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@ then
88
echo __EMSCRIPTEN__ support already added
99
else
1010
pushd src/cpython
11-
11+
if echo $PYBUILD |grep -q 3.12$
12+
then
13+
echo 3.12 does not need patching for interactive FD
14+
else
1215
patch -p1 <<END
1316
diff --git a/Parser/pegen_errors.c b/Parser/pegen_errors.c
1417
index 489699679633e..78266f712c05c 100644
@@ -24,7 +27,7 @@ index 489699679633e..78266f712c05c 100644
2427
char *cur_line = p->tok->fp_interactive ? p->tok->interactive_src_start : p->tok->str;
2528
if (cur_line == NULL) {
2629
END
27-
30+
fi
2831

2932
# fix the main startup to it gets a minimal kernel for wasm
3033
cat > Programs/python.c <<END

support/cross/__EMSCRIPTEN__.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -217,10 +217,10 @@ def fix_preload_table():
217217
global prelist, preloadedWasm, preloadedImages, preloadedAudios
218218

219219
if embed.counter() < 0:
220-
pdb("asset manager not ready 0>", embed.counter())
221-
aio.defer(fix_preload_table, deadline=60)
220+
pdb("220: asset manager not ready 0>", embed.counter())
221+
aio.defer(fix_preload_table, (), {}, delay=60)
222222
else:
223-
pdb("all assets were ready at", embed.counter())
223+
pdb("223: all assets were ready at", embed.counter())
224224

225225
for (
226226
src,
@@ -314,12 +314,12 @@ def runmain(py):
314314
# __main__.setup()
315315
# aio.steps.append(__main__.loop)
316316

317-
print(f"320: running {sys.argv[0]}.py as main (deferred)")
317+
print(f"317: running main.py for {sys.argv[0]} (deferred)")
318318
aio.defer(runmain, ["main.py"], {})
319319
else:
320320
pdb(f"no main found for {sys.argv[0]} in {ROOTDIR}")
321321

322-
aio.defer(embed.prompt,(),{},2000)
322+
aio.defer(embed.prompt, (), {}, delay=2000)
323323

324324
# C should unlock aio loop when preload count reach 0.
325325

@@ -333,7 +333,7 @@ def fix_preload_table_apk():
333333
# unlock embed looper because no preloading
334334
embed.run()
335335

336-
aio.defer(fix_preload_table_apk, deadline=1000)
336+
aio.defer(fix_preload_table_apk, (), {}, delay=1000)
337337

338338
# go pods !
339339
aio.started = True

support/cross/aio/__init__.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -145,12 +145,12 @@ def overloaded(i, *attrs):
145145
sys.modules["asyncio"] = __import__(__name__)
146146

147147

148-
def defer(fn, argv=(), kw={}, deadline=0, framerate=60):
148+
def defer(fn, argv=(), kw={}, delay=0, framerate=60):
149149
global ticks, oneshots
150150
# FIXME: set ticks + deadline for alarm
151151
oneshots.append(
152152
[
153-
ticks + int(deadline / framerate),
153+
ticks + int(delay / framerate),
154154
fn,
155155
argv,
156156
kw,
@@ -283,8 +283,11 @@ def run(coro, *, debug=False):
283283
if coro is not None:
284284
task = loop.create_task(coro)
285285
_set_task_name(task, coro.__name__)
286-
if debug:
287-
pdb("251: task [", coro.__name__, "] added")
286+
if __EMSCRIPTEN__ and ("pygame" in sys.modules):
287+
if not aio.cross.simulator:
288+
pdb("280: window_resize")
289+
aio.defer(__EMSCRIPTEN__.window.window_resize, (), {}, delay=100)
290+
pdb("290: task [", coro.__name__, "] added")
288291
elif debug:
289292
pdb("253:None coro called, just starting loop")
290293

@@ -339,7 +342,7 @@ def __exit__(ec):
339342
loop.close()
340343
try:
341344
aio.recycle.cleanup()
342-
aio.defer(embed.prompt, (), {}, 300)
345+
aio.defer(embed.prompt, (), {}, delay=300)
343346
except:
344347
pass
345348

@@ -378,7 +381,7 @@ def prompt_request():
378381
try:
379382
embed.prompt_request()
380383
except:
381-
aio.defer(embed.prompt, (), {}, 100)
384+
aio.defer(embed.prompt, (), {}, delay=100)
382385

383386

384387
class after:

support/pythonrc.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ def exec(cls, cmd, *argv, **env):
276276
print("a program is already running, using 'stop' cmd before retrying")
277277
cls.stop()
278278
pgzrun = None
279-
aio.defer(cls.exec,(cmd,*argv),env, 500)
279+
aio.defer(cls.exec,(cmd,*argv),env, delay=500)
280280

281281
else:
282282
execfile(cmd)
@@ -303,8 +303,8 @@ def stop(cls, *argv, **env):
303303
# pgzrun will reset to None next exec
304304
if not pgzrun:
305305
# pgzrun does its own cleanup call
306-
aio.defer(aio.recycle.cleanup, (), {}, 500)
307-
aio.defer(embed.prompt, (), {}, 800)
306+
aio.defer(aio.recycle.cleanup, (), {}, delay=500)
307+
aio.defer(embed.prompt, (), {}, delay=800)
308308

309309
def _process_args(argv, env):
310310
catch = True
@@ -403,13 +403,18 @@ def browser_open_new_tab(url):
403403
webbrowser.open_new = browser_open_new
404404
webbrowser.open_new_tab = browser_open_new_tab
405405

406+
# merge emscripten browser module here ?
407+
# https://rdb.name/panda3d-webgl.md.html#supplementalmodules/asynchronousloading
408+
#
409+
410+
406411
# ======================================================
407412

408413
def ESC(*argv):
409414
for arg in argv:
410415
sys.__stdout__.write(chr(27),arg, sep="", endl="")
411416

412-
# import pygame
417+
import pygame
413418
pgzrun = None
414419

415420
if __WASM__ and __EMSCRIPTEN__ and __EMSCRIPTEN__.is_browser:
@@ -427,7 +432,6 @@ async def jsp(prom):
427432
else:
428433
pdb("TODO: js sim")
429434

430-
431435
if os.path.isfile('/data/data/custom.py'):
432436
execfile('/data/data/custom.py')
433437

0 commit comments

Comments
 (0)