From c8f1f9c9365346ca0b15ed608a64fbcdc62136ff Mon Sep 17 00:00:00 2001 From: Hood Chatham Date: Wed, 21 Oct 2026 18:03:30 -0700 Subject: [PATCH 1/3] gh-160161 Fix node_entry.mjs with newest versions of Emscripten FS.filesystems went away. --- Python/emscripten_syscalls.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Python/emscripten_syscalls.c b/Python/emscripten_syscalls.c index cdd5fc6e91e89bc..2fb2e65b47d359e 100644 --- a/Python/emscripten_syscalls.c +++ b/Python/emscripten_syscalls.c @@ -332,3 +332,11 @@ int __syscall_ioctl(int fd, int request, void* varargs) { } return syscall_ioctl_orig(fd, request, varargs); } + +EM_JS(void, _PyEM_InitFileSystems_js, (void), { + FS.filesystems ??= { NODEFS }; +}) + +__attribute__((constructor)) void _PyEM_InitFileSystems(void) { + _PyEM_InitFileSystems_js(); +} From 611cf13c4ff581e9a0f08572c5a83f834d18937c Mon Sep 17 00:00:00 2001 From: Hood Chatham Date: Thu, 22 Oct 2026 11:05:15 -0700 Subject: [PATCH 2/3] No trigraph! --- Python/emscripten_syscalls.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Python/emscripten_syscalls.c b/Python/emscripten_syscalls.c index 2fb2e65b47d359e..c75ba57be18e48e 100644 --- a/Python/emscripten_syscalls.c +++ b/Python/emscripten_syscalls.c @@ -334,7 +334,7 @@ int __syscall_ioctl(int fd, int request, void* varargs) { } EM_JS(void, _PyEM_InitFileSystems_js, (void), { - FS.filesystems ??= { NODEFS }; + FS.filesystems ||= { NODEFS }; }) __attribute__((constructor)) void _PyEM_InitFileSystems(void) { From 30303dfe0f15923d29082fdf8b38a7269e089e9a Mon Sep 17 00:00:00 2001 From: Hood Chatham Date: Thu, 22 Oct 2026 11:52:42 -0700 Subject: [PATCH 3/3] Apply upstream-recommended workaround instead --- Platforms/emscripten/node_entry.mjs | 2 +- Python/emscripten_syscalls.c | 8 -------- configure | 2 +- configure.ac | 2 +- 4 files changed, 3 insertions(+), 11 deletions(-) diff --git a/Platforms/emscripten/node_entry.mjs b/Platforms/emscripten/node_entry.mjs index 110aadc5de10143..8c9d815592f7f00 100644 --- a/Platforms/emscripten/node_entry.mjs +++ b/Platforms/emscripten/node_entry.mjs @@ -22,7 +22,7 @@ function rootDirsToMount(Module) { function mountDirectories(Module) { for (const dir of rootDirsToMount(Module)) { Module.FS.mkdirTree(dir); - Module.FS.mount(Module.FS.filesystems.NODEFS, { root: dir }, dir); + Module.FS.mount(Module.NODEFS, { root: dir }, dir); } } diff --git a/Python/emscripten_syscalls.c b/Python/emscripten_syscalls.c index c75ba57be18e48e..cdd5fc6e91e89bc 100644 --- a/Python/emscripten_syscalls.c +++ b/Python/emscripten_syscalls.c @@ -332,11 +332,3 @@ int __syscall_ioctl(int fd, int request, void* varargs) { } return syscall_ioctl_orig(fd, request, varargs); } - -EM_JS(void, _PyEM_InitFileSystems_js, (void), { - FS.filesystems ||= { NODEFS }; -}) - -__attribute__((constructor)) void _PyEM_InitFileSystems(void) { - _PyEM_InitFileSystems_js(); -} diff --git a/configure b/configure index 04260d2c4b58344..a3fa0f61c452095 100755 --- a/configure +++ b/configure @@ -9983,7 +9983,7 @@ fi as_fn_append LINKFORSHARED " -sFORCE_FILESYSTEM -lidbfs.js -lnodefs.js -lproxyfs.js -lworkerfs.js" as_fn_append LINKFORSHARED " -sEXPORTED_RUNTIME_METHODS=FS,callMain,ENV,HEAPU32,TTY,ERRNO_CODES" - as_fn_append LINKFORSHARED " -sEXPORTED_FUNCTIONS=_main,_Py_Version,_PyGILState_GetThisThreadState" + as_fn_append LINKFORSHARED " -sEXPORTED_FUNCTIONS=_main,_Py_Version,_PyGILState_GetThisThreadState,NODEFS" as_fn_append LINKFORSHARED " -sSTACK_SIZE=5MB" as_fn_append LINKFORSHARED " -sTEXTDECODER=2" diff --git a/configure.ac b/configure.ac index b53247194fc9003..8c3d94c9cd4b4de 100644 --- a/configure.ac +++ b/configure.ac @@ -2449,7 +2449,7 @@ AS_CASE([$ac_sys_system], dnl Include file system support AS_VAR_APPEND([LINKFORSHARED], [" -sFORCE_FILESYSTEM -lidbfs.js -lnodefs.js -lproxyfs.js -lworkerfs.js"]) AS_VAR_APPEND([LINKFORSHARED], [" -sEXPORTED_RUNTIME_METHODS=FS,callMain,ENV,HEAPU32,TTY,ERRNO_CODES"]) - AS_VAR_APPEND([LINKFORSHARED], [" -sEXPORTED_FUNCTIONS=_main,_Py_Version,_PyGILState_GetThisThreadState"]) + AS_VAR_APPEND([LINKFORSHARED], [" -sEXPORTED_FUNCTIONS=_main,_Py_Version,_PyGILState_GetThisThreadState,NODEFS"]) AS_VAR_APPEND([LINKFORSHARED], [" -sSTACK_SIZE=5MB"]) dnl Avoid bugs in JS fallback string decoding path AS_VAR_APPEND([LINKFORSHARED], [" -sTEXTDECODER=2"])