diff options
author | Christian Heimes <christian@python.org> | 2022-08-19 06:36:12 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-19 06:36:12 (GMT) |
commit | 6087f491ea1e4c8c115bb02d95e391399c0d6fe7 (patch) | |
tree | 725dec15db25a64dd08c31c965a4a38bbb285cd8 /Tools/wasm | |
parent | 757c383d2465ce87f546f01568ec911bd226a084 (diff) | |
download | cpython-6087f491ea1e4c8c115bb02d95e391399c0d6fe7.zip cpython-6087f491ea1e4c8c115bb02d95e391399c0d6fe7.tar.gz cpython-6087f491ea1e4c8c115bb02d95e391399c0d6fe7.tar.bz2 |
gh-95853: WASM: better version and asset handling in scripts (GH-96045)
- support EMSDK tot-upstream and git releases
- allow WASM assents for wasm64-emscripten and WASI. This makes single file distributions on WASI easier.
- decouple WASM assets from browser builds
Diffstat (limited to 'Tools/wasm')
-rwxr-xr-x | Tools/wasm/wasm_assets.py | 14 | ||||
-rwxr-xr-x | Tools/wasm/wasm_build.py | 25 |
2 files changed, 37 insertions, 2 deletions
diff --git a/Tools/wasm/wasm_assets.py b/Tools/wasm/wasm_assets.py index 695e6ff..a300d59 100755 --- a/Tools/wasm/wasm_assets.py +++ b/Tools/wasm/wasm_assets.py @@ -108,6 +108,14 @@ OMIT_MODULE_FILES = { "_zoneinfo": ["zoneinfo/"], } +SYSCONFIG_NAMES = ( + "_sysconfigdata__emscripten_wasm32-emscripten", + "_sysconfigdata__emscripten_wasm32-emscripten", + "_sysconfigdata__wasi_wasm32-wasi", + "_sysconfigdata__wasi_wasm64-wasi", +) + + def get_builddir(args: argparse.Namespace) -> pathlib.Path: """Get builddir path from pybuilddir.txt """ @@ -120,7 +128,11 @@ 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 + if not data_name.startswith(SYSCONFIG_NAMES): + raise ValueError( + f"Invalid sysconfig data name '{data_name}'.", + SYSCONFIG_NAMES + ) filename = data_name + ".py" return args.builddir / filename diff --git a/Tools/wasm/wasm_build.py b/Tools/wasm/wasm_build.py index df90f01..5ccf88c 100755 --- a/Tools/wasm/wasm_build.py +++ b/Tools/wasm/wasm_build.py @@ -20,6 +20,7 @@ import enum import dataclasses import os import pathlib +import re import shlex import shutil import subprocess @@ -99,6 +100,24 @@ def get_emscripten_root(emconfig: pathlib.Path = EM_CONFIG) -> pathlib.PurePath: EMSCRIPTEN_ROOT = get_emscripten_root() +def read_python_version(configure: pathlib.Path = CONFIGURE) -> str: + """Read PACKAGE_VERSION from configure script + + configure and configure.ac are the canonical source for major and + minor version number. + """ + version_re = re.compile("^PACKAGE_VERSION='(\d\.\d+)'") + with configure.open(encoding="utf-8") as f: + for line in f: + mo = version_re.match(line) + if mo: + return mo.group(1) + raise ValueError(f"PACKAGE_VERSION not found in {configure}") + + +PYTHON_VERSION = read_python_version() + + class ConditionError(ValueError): def __init__(self, info: str, text: str): self.info = info @@ -174,6 +193,9 @@ def _check_emscripten(): raise MissingDependency(os.fspath(version_txt), INSTALL_EMSDK) with open(version_txt) as f: version = f.read().strip().strip('"') + if version.endswith("-git"): + # git / upstream / tot-upstream installation + version = version[:-4] version_tuple = tuple(int(v) for v in version.split(".")) if version_tuple < EMSDK_MIN_VERSION: raise MissingDependency( @@ -221,7 +243,7 @@ WASI = Platform( # workaround for https://github.com/python/cpython/issues/95952 "HOSTRUNNER": ( "wasmtime run " - "--env PYTHONPATH=/{relbuilddir}/build/lib.wasi-wasm32-$(VERSION):/Lib " + "--env PYTHONPATH=/{relbuilddir}/build/lib.wasi-wasm32-{version}:/Lib " "--mapdir /::{srcdir} --" ), }, @@ -362,6 +384,7 @@ class BuildProfile: env[key] = value.format( relbuilddir=self.builddir.relative_to(SRCDIR), srcdir=SRCDIR, + version=PYTHON_VERSION, ) else: env[key] = value |