[Python-checkins] gh-84461: Fix pydebug Emscripten browser builds (GH-93982)

tiran webhook-mailer at python.org
Sat Jun 18 08:51:54 EDT 2022


https://github.com/python/cpython/commit/7a2cc35e1ca6808a735b90269756d5286077a152
commit: 7a2cc35e1ca6808a735b90269756d5286077a152
branch: main
author: Christian Heimes <christian at python.org>
committer: tiran <christian at python.org>
date: 2022-06-18T14:51:50+02:00
summary:

gh-84461: Fix pydebug Emscripten browser builds (GH-93982)

wasm_assets script did not take the ABIFLAG flag of sysconfigdata into
account.

files:
M Makefile.pre.in
M Tools/wasm/wasm_assets.py

diff --git a/Makefile.pre.in b/Makefile.pre.in
index 265a9e462d752..f9bc973ba7784 100644
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
@@ -247,8 +247,8 @@ SRCDIRS= 	@SRCDIRS@
 SUBDIRSTOO=	Include Lib Misc
 
 # assets for Emscripten browser builds
-WASM_ASSETS_DIR=".$(prefix)"
-WASM_STDLIB="$(WASM_ASSETS_DIR)/local/lib/python$(VERSION)/os.py"
+WASM_ASSETS_DIR=.$(prefix)
+WASM_STDLIB=$(WASM_ASSETS_DIR)/lib/python$(VERSION)/os.py
 
 # Files and directories to be distributed
 CONFIGFILES=	configure configure.ac acconfig.h pyconfig.h.in Makefile.pre.in
@@ -821,7 +821,7 @@ $(WASM_STDLIB): $(srcdir)/Lib/*.py $(srcdir)/Lib/*/*.py \
 	    Makefile pybuilddir.txt Modules/Setup.local \
 	    python.html python.worker.js
 	$(PYTHON_FOR_BUILD) $(srcdir)/Tools/wasm/wasm_assets.py \
-	    --builddir . --prefix $(prefix)
+	    --buildroot . --prefix $(prefix)
 
 python.html: $(srcdir)/Tools/wasm/python.html python.worker.js
 	@cp $(srcdir)/Tools/wasm/python.html $@
@@ -2391,7 +2391,7 @@ clean-retain-profile: pycremoval
 	-rm -f Lib/lib2to3/*Grammar*.pickle
 	-rm -f _bootstrap_python
 	-rm -f python.html python*.js python.data python*.symbols python*.map
-	-rm -rf $(WASM_STDLIB)
+	-rm -f $(WASM_STDLIB)
 	-rm -f Programs/_testembed Programs/_freeze_module
 	-rm -f Python/deepfreeze/*.[co]
 	-rm -f Python/frozen_modules/*.h
diff --git a/Tools/wasm/wasm_assets.py b/Tools/wasm/wasm_assets.py
index fba70b9c9d042..b7e83517cae03 100755
--- a/Tools/wasm/wasm_assets.py
+++ b/Tools/wasm/wasm_assets.py
@@ -13,18 +13,13 @@
 import pathlib
 import shutil
 import sys
+import sysconfig
 import zipfile
 
 # source directory
 SRCDIR = pathlib.Path(__file__).parent.parent.parent.absolute()
 SRCDIR_LIB = SRCDIR / "Lib"
 
-# sysconfig data relative to build dir.
-SYSCONFIGDATA = pathlib.PurePath(
-    "build",
-    f"lib.emscripten-wasm32-{sys.version_info.major}.{sys.version_info.minor}",
-    "_sysconfigdata__emscripten_wasm32-emscripten.py",
-)
 
 # Library directory relative to $(prefix).
 WASM_LIB = pathlib.PurePath("lib")
@@ -121,6 +116,22 @@
     "unittest/test/",
 )
 
+def get_builddir(args: argparse.Namespace) -> pathlib.Path:
+    """Get builddir path from pybuilddir.txt
+    """
+    with open("pybuilddir.txt", encoding="utf-8") as f:
+        builddir = f.read()
+    return pathlib.Path(builddir)
+
+
+def get_sysconfigdata(args: argparse.Namespace) -> pathlib.Path:
+    """Get path to sysconfigdata relative to build root
+    """
+    data_name = sysconfig._get_sysconfigdata_name()
+    assert "emscripten_wasm32" in data_name
+    filename = data_name + ".py"
+    return args.builddir / filename
+
 
 def create_stdlib_zip(
     args: argparse.Namespace,
@@ -150,7 +161,7 @@ def detect_extension_modules(args: argparse.Namespace):
     modules = {}
 
     # disabled by Modules/Setup.local ?
-    with open(args.builddir / "Makefile") as f:
+    with open(args.buildroot / "Makefile") as f:
         for line in f:
             if line.startswith("MODDISABLED_NAMES="):
                 disabled = line.split("=", 1)[1].strip().split()
@@ -183,8 +194,8 @@ def path(val: str) -> pathlib.Path:
 
 parser = argparse.ArgumentParser()
 parser.add_argument(
-    "--builddir",
-    help="absolute build directory",
+    "--buildroot",
+    help="absolute path to build root",
     default=pathlib.Path(".").absolute(),
     type=path,
 )
@@ -202,7 +213,7 @@ def main():
     relative_prefix = args.prefix.relative_to(pathlib.Path("/"))
     args.srcdir = SRCDIR
     args.srcdir_lib = SRCDIR_LIB
-    args.wasm_root = args.builddir / relative_prefix
+    args.wasm_root = args.buildroot / relative_prefix
     args.wasm_stdlib_zip = args.wasm_root / WASM_STDLIB_ZIP
     args.wasm_stdlib = args.wasm_root / WASM_STDLIB
     args.wasm_dynload = args.wasm_root / WASM_DYNLOAD
@@ -212,9 +223,10 @@ def main():
     args.compression = zipfile.ZIP_DEFLATED
     args.compresslevel = 9
 
-    args.sysconfig_data = args.builddir / SYSCONFIGDATA
+    args.builddir = get_builddir(args)
+    args.sysconfig_data = get_sysconfigdata(args)
     if not args.sysconfig_data.is_file():
-        raise ValueError(f"sysconfigdata file {SYSCONFIGDATA} missing.")
+        raise ValueError(f"sysconfigdata file {args.sysconfig_data} missing.")
 
     extmods = detect_extension_modules(args)
     omit_files = list(OMIT_FILES)



More information about the Python-checkins mailing list