From 03f78397039760085b8ec07969835c89610bbc6d Mon Sep 17 00:00:00 2001 From: Brett Cannon Date: Tue, 16 Jan 2024 11:36:41 -0800 Subject: [PATCH] GH-114013: fix setting `HOSTRUNNER` for `Tools/wasm/wasi.py` (GH-114097) Also fix tests found failing under a pydebug build of WASI thanks to `make test` working due to this change. --- Lib/test/test_isinstance.py | 2 +- Lib/test/test_richcmp.py | 2 +- Lib/test/test_typing.py | 2 +- Lib/test/test_userdict.py | 2 +- Lib/test/test_userlist.py | 2 +- Lib/test/test_xml_etree.py | 2 +- .../2024-01-15-16-58-43.gh-issue-114013.FoSeQf.rst | 4 ++++ Tools/wasm/wasi.py | 11 +++++------ 8 files changed, 15 insertions(+), 12 deletions(-) create mode 100644 Misc/NEWS.d/next/Build/2024-01-15-16-58-43.gh-issue-114013.FoSeQf.rst diff --git a/Lib/test/test_isinstance.py b/Lib/test/test_isinstance.py index 791981b878b..7f759fb3317 100644 --- a/Lib/test/test_isinstance.py +++ b/Lib/test/test_isinstance.py @@ -310,7 +310,7 @@ class TestIsInstanceIsSubclass(unittest.TestCase): @property def __bases__(self): return self.__bases__ - with support.infinite_recursion(): + with support.infinite_recursion(25): self.assertRaises(RecursionError, issubclass, X(), int) self.assertRaises(RecursionError, issubclass, int, X()) self.assertRaises(RecursionError, isinstance, 1, X()) diff --git a/Lib/test/test_richcmp.py b/Lib/test/test_richcmp.py index 6fb31c80d7e..5f449cdc05c 100644 --- a/Lib/test/test_richcmp.py +++ b/Lib/test/test_richcmp.py @@ -221,7 +221,7 @@ class MiscTest(unittest.TestCase): self.assertRaises(Exc, func, Bad()) @support.no_tracing - @support.infinite_recursion() + @support.infinite_recursion(25) def test_recursion(self): # Check that comparison for recursive objects fails gracefully from collections import UserList diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py index 8edab0cd6e3..b684af4f33e 100644 --- a/Lib/test/test_typing.py +++ b/Lib/test/test_typing.py @@ -5684,7 +5684,7 @@ class ForwardRefTests(BaseTestCase): def cmp(o1, o2): return o1 == o2 - with infinite_recursion(): + with infinite_recursion(25): r1 = namespace1() r2 = namespace2() self.assertIsNot(r1, r2) diff --git a/Lib/test/test_userdict.py b/Lib/test/test_userdict.py index 9a03f2d04ce..61e79f553e8 100644 --- a/Lib/test/test_userdict.py +++ b/Lib/test/test_userdict.py @@ -215,7 +215,7 @@ class UserDictTest(mapping_tests.TestHashMappingProtocol): # Decorate existing test with recursion limit, because # the test is for C structure, but `UserDict` is a Python structure. - test_repr_deep = support.infinite_recursion()( + test_repr_deep = support.infinite_recursion(25)( mapping_tests.TestHashMappingProtocol.test_repr_deep, ) diff --git a/Lib/test/test_userlist.py b/Lib/test/test_userlist.py index 76d25375352..312702c8e39 100644 --- a/Lib/test/test_userlist.py +++ b/Lib/test/test_userlist.py @@ -69,7 +69,7 @@ class UserListTest(list_tests.CommonTest): # Decorate existing test with recursion limit, because # the test is for C structure, but `UserList` is a Python structure. - test_repr_deep = support.infinite_recursion()( + test_repr_deep = support.infinite_recursion(25)( list_tests.CommonTest.test_repr_deep, ) diff --git a/Lib/test/test_xml_etree.py b/Lib/test/test_xml_etree.py index 80ee064896f..b9e7937b0bb 100644 --- a/Lib/test/test_xml_etree.py +++ b/Lib/test/test_xml_etree.py @@ -2535,7 +2535,7 @@ class BadElementTest(ElementTestCase, unittest.TestCase): e.extend([ET.Element('bar')]) self.assertRaises(ValueError, e.remove, X('baz')) - @support.infinite_recursion() + @support.infinite_recursion(25) def test_recursive_repr(self): # Issue #25455 e = ET.Element('foo') diff --git a/Misc/NEWS.d/next/Build/2024-01-15-16-58-43.gh-issue-114013.FoSeQf.rst b/Misc/NEWS.d/next/Build/2024-01-15-16-58-43.gh-issue-114013.FoSeQf.rst new file mode 100644 index 00000000000..11505028001 --- /dev/null +++ b/Misc/NEWS.d/next/Build/2024-01-15-16-58-43.gh-issue-114013.FoSeQf.rst @@ -0,0 +1,4 @@ +Fix ``Tools/wasm/wasi.py`` to not include the path to ``python.wasm`` as +part of ``HOSTRUNNER``. The environment variable is meant to specify how to +run the WASI host only, having ``python.wasm`` and relevant flags appended +to the ``HOSTRUNNER``. This fixes ``make test`` work. diff --git a/Tools/wasm/wasi.py b/Tools/wasm/wasi.py index 34c0e9375e2..36bc70ffd9d 100644 --- a/Tools/wasm/wasi.py +++ b/Tools/wasm/wasi.py @@ -233,9 +233,10 @@ def configure_wasi_python(context, working_dir): env=updated_env(env_additions | wasi_sdk_env(context)), quiet=context.quiet) + python_wasm = working_dir / "python.wasm" exec_script = working_dir / "python.sh" with exec_script.open("w", encoding="utf-8") as file: - file.write(f'#!/bin/sh\nexec {host_runner} "$@"\n') + file.write(f'#!/bin/sh\nexec {host_runner} {python_wasm} "$@"\n') exec_script.chmod(0o755) print(f"🏃‍♀️ Created {exec_script} ... ") sys.stdout.flush() @@ -272,9 +273,7 @@ def main(): # Map the checkout to / to load the stdlib from /Lib. "--dir {HOST_DIR}::{GUEST_DIR} " # Set PYTHONPATH to the sysconfig data. - "--env {ENV_VAR_NAME}={ENV_VAR_VALUE} " - # Path to the WASM binary. - "{PYTHON_WASM}") + "--env {ENV_VAR_NAME}={ENV_VAR_VALUE}") parser = argparse.ArgumentParser() subcommands = parser.add_subparsers(dest="subcommand") @@ -310,8 +309,8 @@ def main(): "$WASI_SDK_PATH or /opt/wasi-sdk") subcommand.add_argument("--host-runner", action="store", default=default_host_runner, dest="host_runner", - help="Command template for running the WebAssembly " - "code (default meant for wasmtime 14 or newer: " + help="Command template for running the WASI host " + "(default designed for wasmtime 14 or newer: " f"`{default_host_runner}`)") context = parser.parse_args()