CPython opens the stdlib zip with its own stdio, so it needs a real path.
On the desktop res:// is a directory and globalize_path() is enough; in an
exported build res:// is inside the PCK, which nothing outside Godot reads.
make_stdlib_zip.py now also writes <out>.sha256
mtpython_stdlib_project copies python27.zip + .sha256 into project/
(gitignored), and both export presets' include_filter lists them, so
they enter the PCK — checked with --export-pack
extension/src/python_stdlib.{h,cpp} (Metin2Python.stdlib_path in
GDScript): reads the bytes out of the PCK, writes
user://python27.zip.part, hashes the file as written against the
shipped digest, then renames. A sandbox copy is reused only when it
matches, so a first start killed mid-copy and a zip replaced by a new
build both re-stage instead of feeding zipimport a torn file.
PythonHost::SetDefaultStdLibPath / DefaultStdLibPath() answer with that
path ($MT_PYTHON_STDLIB still wins). python_stdlib.cpp is the only unit
that knows res:// / user://; port_platform stays godot-free.
Also fixes the Windows gate, which step 3b broke: without mtpython the
MinGW build compiled UserInterface/StdAfx.h (it includes ScriptLib/StdAfx.h,
as the original PCH does). port/CMakeLists.txt excludes that header and
PythonPackModule.cpp with ScriptLib, and platform/CMakeLists.txt excludes
platform/ScriptLib/ the same way.
Not done: on-device staging. The macOS test drives the mobile path with
force_stage=true, and nothing in the app boot calls it yet — the
interpreter only starts in the process with 2V0.
gates: python_stdlib_test.gd PASS (in-place path, staging, sha256, bytes
equal res://, no .part, ZIPReader finds encodings/__init__.py, no re-copy
on a second call, corrupted copy re-staged) · macOS ctest 27/27 ·
mingw + android + ios port_platform compile clean · port_map.py check 0
errors · key leak check 8/8 none.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
17 lines
857 B
CMake
17 lines
857 B
CMake
# port_platform — platform-layer implementations of the mirrored 40250 headers
|
|
# (extension/src/platform/<Lib>/<File>.cpp for extension/src/port/<Lib>/<File>.h). Starts as the empty
|
|
# skeleton generated by platform_stub.py; see docs/PORT-PLAN.md batch 2A. Added from port/CMakeLists.txt
|
|
# so it shares the per-library definitions.
|
|
|
|
file(GLOB_RECURSE MT_PLATFORM_SOURCES CONFIGURE_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
|
|
# Same rule as port_logic: without the embedded interpreter there is no ScriptLib to back
|
|
# (PORT-PLAN 批次 2P step 4 — Windows).
|
|
if(NOT TARGET mtpython)
|
|
list(FILTER MT_PLATFORM_SOURCES EXCLUDE REGEX "/ScriptLib/")
|
|
endif()
|
|
add_library(port_platform STATIC ${MT_PLATFORM_SOURCES})
|
|
target_link_libraries(port_platform PUBLIC port_logic)
|
|
foreach(src IN LISTS MT_PLATFORM_SOURCES)
|
|
mt_port_apply_defines(${src})
|
|
endforeach()
|