summaryrefslogtreecommitdiffstats
path: root/Tools
diff options
context:
space:
mode:
authorBrett Cannon <brett@python.org>2024-07-09 22:08:01 (GMT)
committerGitHub <noreply@github.com>2024-07-09 22:08:01 (GMT)
commitf62161837e68c1c77961435f1b954412dd5c2b65 (patch)
tree10c6289cc9c47ca83165ed3221d28dfc303affd5 /Tools
parent80209468144fbd1af5cd31f152a6631627a9acab (diff)
downloadcpython-f62161837e68c1c77961435f1b954412dd5c2b65.zip
cpython-f62161837e68c1c77961435f1b954412dd5c2b65.tar.gz
cpython-f62161837e68c1c77961435f1b954412dd5c2b65.tar.bz2
GH-121521: Detect when wasmtime is not installed in `Tools/wasm/wasi.py` (GH-121522)
Diffstat (limited to 'Tools')
-rw-r--r--Tools/wasm/wasi.py24
1 files changed, 18 insertions, 6 deletions
diff --git a/Tools/wasm/wasi.py b/Tools/wasm/wasi.py
index f69299f..a14f58b 100644
--- a/Tools/wasm/wasi.py
+++ b/Tools/wasm/wasi.py
@@ -26,6 +26,9 @@ HOST_DIR = CROSS_BUILD_DIR / HOST_TRIPLE
LOCAL_SETUP = CHECKOUT / "Modules" / "Setup.local"
LOCAL_SETUP_MARKER = "# Generated by Tools/wasm/wasi.py\n".encode("utf-8")
+WASMTIME_VAR_NAME = "WASMTIME"
+WASMTIME_HOST_RUNNER_VAR = f"{{{WASMTIME_VAR_NAME}}}"
+
def updated_env(updates={}):
"""Create a new dict representing the environment to use.
@@ -215,11 +218,20 @@ def configure_wasi_python(context, working_dir):
# Use PYTHONPATH to include sysconfig data which must be anchored to the
# WASI guest's `/` directory.
- host_runner = context.host_runner.format(GUEST_DIR="/",
- HOST_DIR=CHECKOUT,
- ENV_VAR_NAME="PYTHONPATH",
- ENV_VAR_VALUE=f"/{sysconfig_data}",
- PYTHON_WASM=working_dir / "python.wasm")
+ args = {"GUEST_DIR": "/",
+ "HOST_DIR": CHECKOUT,
+ "ENV_VAR_NAME": "PYTHONPATH",
+ "ENV_VAR_VALUE": f"/{sysconfig_data}",
+ "PYTHON_WASM": working_dir / "python.wasm"}
+ # Check dynamically for wasmtime in case it was specified manually via
+ # `--host-runner`.
+ if WASMTIME_HOST_RUNNER_VAR in context.host_runner:
+ if wasmtime := shutil.which("wasmtime"):
+ args[WASMTIME_VAR_NAME] = wasmtime
+ else:
+ raise FileNotFoundError("wasmtime not found; download from "
+ "https://github.com/bytecodealliance/wasmtime")
+ host_runner = context.host_runner.format_map(args)
env_additions = {"CONFIG_SITE": config_site, "HOSTRUNNER": host_runner}
build_python = os.fsdecode(build_python_path())
# The path to `configure` MUST be relative, else `python.wasm` is unable
@@ -277,7 +289,7 @@ def clean_contents(context):
def main():
- default_host_runner = (f"{shutil.which('wasmtime')} run "
+ default_host_runner = (f"{WASMTIME_HOST_RUNNER_VAR} run "
# Make sure the stack size will work for a pydebug
# build.
# Use 16 MiB stack.