[Python-checkins] bpo-40280: Misc fixes for wasm32-emscripten (GH-30722)

tiran webhook-mailer at python.org
Thu Jan 20 12:56:41 EST 2022


https://github.com/python/cpython/commit/c02e860ee79f29905be6fca997c96bb1a404bb32
commit: c02e860ee79f29905be6fca997c96bb1a404bb32
branch: main
author: Christian Heimes <christian at python.org>
committer: tiran <christian at python.org>
date: 2022年01月20日T18:56:33+01:00
summary:
bpo-40280: Misc fixes for wasm32-emscripten (GH-30722)
files:
M Lib/test/test___all__.py
M Lib/test/test_capi.py
M Lib/test/test_compileall.py
M Lib/test/test_imp.py
M Lib/test/test_pty.py
M Lib/test/test_tracemalloc.py
M Tools/wasm/config.site-wasm32-emscripten
M configure
M configure.ac
diff --git a/Lib/test/test___all__.py b/Lib/test/test___all__.py
index 15f42d2d114a6..81293e15f8163 100644
--- a/Lib/test/test___all__.py
+++ b/Lib/test/test___all__.py
@@ -3,6 +3,12 @@
 from test.support import warnings_helper
 import os
 import sys
+import types
+
+try:
+ import _multiprocessing
+except ModuleNotFoundError:
+ _multiprocessing = None
 
 
 class NoAll(RuntimeError):
@@ -14,6 +20,17 @@ class FailedImport(RuntimeError):
 
 class AllTest(unittest.TestCase):
 
+ def setUp(self):
+ # concurrent.futures uses a __getattr__ hook. Its __all__ triggers
+ # import of a submodule, which fails when _multiprocessing is not
+ # available.
+ if _multiprocessing is None:
+ sys.modules["_multiprocessing"] = types.ModuleType("_multiprocessing")
+
+ def tearDown(self):
+ if _multiprocessing is None:
+ sys.modules.pop("_multiprocessing")
+
 def check_all(self, modname):
 names = {}
 with warnings_helper.check_warnings(
diff --git a/Lib/test/test_capi.py b/Lib/test/test_capi.py
index 7ada8406a3584..0957f3253d7a6 100644
--- a/Lib/test/test_capi.py
+++ b/Lib/test/test_capi.py
@@ -26,6 +26,10 @@
 import _posixsubprocess
 except ImportError:
 _posixsubprocess = None
+try:
+ import _testmultiphase
+except ImportError:
+ _testmultiphase = None
 
 # Skip this test if the _testcapi module isn't available.
 _testcapi = import_helper.import_module('_testcapi')
@@ -798,6 +802,7 @@ def test_mutate_exception(self):
 
 self.assertFalse(hasattr(binascii.Error, "foobar"))
 
+ @unittest.skipIf(_testmultiphase is None, "test requires _testmultiphase module")
 def test_module_state_shared_in_global(self):
 """
 bpo-44050: Extension module state should be shared between interpreters
@@ -991,6 +996,7 @@ class PyMemDefaultTests(PyMemDebugTests):
 PYTHONMALLOC = ''
 
 
+ at unittest.skipIf(_testmultiphase is None, "test requires _testmultiphase module")
 class Test_ModuleStateAccess(unittest.TestCase):
 """Test access to module start (PEP 573)"""
 
diff --git a/Lib/test/test_compileall.py b/Lib/test/test_compileall.py
index 33f0c939325f5..e207cf8f1793b 100644
--- a/Lib/test/test_compileall.py
+++ b/Lib/test/test_compileall.py
@@ -15,14 +15,14 @@
 import unittest
 
 from unittest import mock, skipUnless
-from concurrent.futures import ProcessPoolExecutor
 try:
 # compileall relies on ProcessPoolExecutor if ProcessPoolExecutor exists
 # and it can function.
+ from concurrent.futures import ProcessPoolExecutor
 from concurrent.futures.process import _check_system_limits
 _check_system_limits()
 _have_multiprocessing = True
-except NotImplementedError:
+except (NotImplementedError, ModuleNotFoundError):
 _have_multiprocessing = False
 
 from test import support
diff --git a/Lib/test/test_imp.py b/Lib/test/test_imp.py
index 1a21025fe6eaf..35e9a2a186552 100644
--- a/Lib/test/test_imp.py
+++ b/Lib/test/test_imp.py
@@ -23,7 +23,7 @@ def requires_load_dynamic(meth):
 """Decorator to skip a test if not running under CPython or lacking
 imp.load_dynamic()."""
 meth = support.cpython_only(meth)
- return unittest.skipIf(not hasattr(imp, 'load_dynamic'),
+ return unittest.skipIf(getattr(imp, 'load_dynamic', None) is None,
 'imp.load_dynamic() required')(meth)
 
 
diff --git a/Lib/test/test_pty.py b/Lib/test/test_pty.py
index 0c178127571b0..0781cde1e1582 100644
--- a/Lib/test/test_pty.py
+++ b/Lib/test/test_pty.py
@@ -1,8 +1,9 @@
 from test.support import verbose, reap_children
 from test.support.import_helper import import_module
 
-# Skip these tests if termios is not available
+# Skip these tests if termios or fcntl are not available
 import_module('termios')
+import_module("fcntl")
 
 import errno
 import os
diff --git a/Lib/test/test_tracemalloc.py b/Lib/test/test_tracemalloc.py
index 82be98dfd8f5a..d2a5ede61e3ff 100644
--- a/Lib/test/test_tracemalloc.py
+++ b/Lib/test/test_tracemalloc.py
@@ -346,7 +346,7 @@ def fork_child(self):
 # everything is fine
 return 0
 
- @unittest.skipUnless(hasattr(os, 'fork'), 'need os.fork()')
+ @support.requires_fork()
 def test_fork(self):
 # check that tracemalloc is still working after fork
 pid = os.fork()
diff --git a/Tools/wasm/config.site-wasm32-emscripten b/Tools/wasm/config.site-wasm32-emscripten
index c15e4fc6b64b1..413506bbc9abd 100644
--- a/Tools/wasm/config.site-wasm32-emscripten
+++ b/Tools/wasm/config.site-wasm32-emscripten
@@ -58,12 +58,14 @@ ac_cv_func_fchmodat=no
 ac_cv_func_dup3=no
 
 # Syscalls not implemented in emscripten
+# [Errno 52] Function not implemented
 ac_cv_func_preadv2=no
 ac_cv_func_preadv=no
 ac_cv_func_pwritev2=no
 ac_cv_func_pwritev=no
 ac_cv_func_pipe2=no
 ac_cv_func_nice=no
+ac_cv_func_setitimer=no
 
 # Syscalls that resulted in a segfault
 ac_cv_func_utimensat=no
diff --git a/configure b/configure
index 7236e0930e15b..402e626b6992d 100755
--- a/configure
+++ b/configure
@@ -21323,7 +21323,7 @@ case $ac_sys_system/$ac_sys_emscripten_target in #(
 ;; #(
 Emscripten/node) :
 
- py_stdlib_not_available="_ctypes _curses _curses_panel _dbm _gdbm _scproxy _tkinter nis ossaudiodev spwd syslog"
+ py_stdlib_not_available="_ctypes _curses _curses_panel _dbm _gdbm _scproxy _tkinter _xxsubinterpreters grp nis ossaudiodev spwd syslog"
 ;; #(
 *) :
 py_stdlib_not_available="_scproxy"
diff --git a/configure.ac b/configure.ac
index aea12128c1217..9c9a338576736 100644
--- a/configure.ac
+++ b/configure.ac
@@ -6384,6 +6384,8 @@ AS_CASE([$ac_sys_system/$ac_sys_emscripten_target],
 _gdbm
 _scproxy
 _tkinter
+ _xxsubinterpreters
+ grp
 nis
 ossaudiodev
 spwd


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /