bpo-40280: Misc fixes for wasm32-emscripten (GH-30722)

This commit is contained in:
Christian Heimes 2022-01-20 19:56:33 +02:00 committed by GitHub
parent ef3ef6fa43
commit c02e860ee7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 34 additions and 6 deletions

View File

@ -3,6 +3,12 @@ from test import support
from test.support import warnings_helper from test.support import warnings_helper
import os import os
import sys import sys
import types
try:
import _multiprocessing
except ModuleNotFoundError:
_multiprocessing = None
class NoAll(RuntimeError): class NoAll(RuntimeError):
@ -14,6 +20,17 @@ class FailedImport(RuntimeError):
class AllTest(unittest.TestCase): 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): def check_all(self, modname):
names = {} names = {}
with warnings_helper.check_warnings( with warnings_helper.check_warnings(

View File

@ -26,6 +26,10 @@ try:
import _posixsubprocess import _posixsubprocess
except ImportError: except ImportError:
_posixsubprocess = None _posixsubprocess = None
try:
import _testmultiphase
except ImportError:
_testmultiphase = None
# Skip this test if the _testcapi module isn't available. # Skip this test if the _testcapi module isn't available.
_testcapi = import_helper.import_module('_testcapi') _testcapi = import_helper.import_module('_testcapi')
@ -798,6 +802,7 @@ class SubinterpreterTest(unittest.TestCase):
self.assertFalse(hasattr(binascii.Error, "foobar")) self.assertFalse(hasattr(binascii.Error, "foobar"))
@unittest.skipIf(_testmultiphase is None, "test requires _testmultiphase module")
def test_module_state_shared_in_global(self): def test_module_state_shared_in_global(self):
""" """
bpo-44050: Extension module state should be shared between interpreters bpo-44050: Extension module state should be shared between interpreters
@ -991,6 +996,7 @@ class PyMemDefaultTests(PyMemDebugTests):
PYTHONMALLOC = '' PYTHONMALLOC = ''
@unittest.skipIf(_testmultiphase is None, "test requires _testmultiphase module")
class Test_ModuleStateAccess(unittest.TestCase): class Test_ModuleStateAccess(unittest.TestCase):
"""Test access to module start (PEP 573)""" """Test access to module start (PEP 573)"""

View File

@ -15,14 +15,14 @@ import time
import unittest import unittest
from unittest import mock, skipUnless from unittest import mock, skipUnless
from concurrent.futures import ProcessPoolExecutor
try: try:
# compileall relies on ProcessPoolExecutor if ProcessPoolExecutor exists # compileall relies on ProcessPoolExecutor if ProcessPoolExecutor exists
# and it can function. # and it can function.
from concurrent.futures import ProcessPoolExecutor
from concurrent.futures.process import _check_system_limits from concurrent.futures.process import _check_system_limits
_check_system_limits() _check_system_limits()
_have_multiprocessing = True _have_multiprocessing = True
except NotImplementedError: except (NotImplementedError, ModuleNotFoundError):
_have_multiprocessing = False _have_multiprocessing = False
from test import support from test import support

View File

@ -23,7 +23,7 @@ def requires_load_dynamic(meth):
"""Decorator to skip a test if not running under CPython or lacking """Decorator to skip a test if not running under CPython or lacking
imp.load_dynamic().""" imp.load_dynamic()."""
meth = support.cpython_only(meth) 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) 'imp.load_dynamic() required')(meth)

View File

@ -1,8 +1,9 @@
from test.support import verbose, reap_children from test.support import verbose, reap_children
from test.support.import_helper import import_module 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('termios')
import_module("fcntl")
import errno import errno
import os import os

View File

@ -346,7 +346,7 @@ class TestTracemallocEnabled(unittest.TestCase):
# everything is fine # everything is fine
return 0 return 0
@unittest.skipUnless(hasattr(os, 'fork'), 'need os.fork()') @support.requires_fork()
def test_fork(self): def test_fork(self):
# check that tracemalloc is still working after fork # check that tracemalloc is still working after fork
pid = os.fork() pid = os.fork()

View File

@ -58,12 +58,14 @@ ac_cv_func_fchmodat=no
ac_cv_func_dup3=no ac_cv_func_dup3=no
# Syscalls not implemented in emscripten # Syscalls not implemented in emscripten
# [Errno 52] Function not implemented
ac_cv_func_preadv2=no ac_cv_func_preadv2=no
ac_cv_func_preadv=no ac_cv_func_preadv=no
ac_cv_func_pwritev2=no ac_cv_func_pwritev2=no
ac_cv_func_pwritev=no ac_cv_func_pwritev=no
ac_cv_func_pipe2=no ac_cv_func_pipe2=no
ac_cv_func_nice=no ac_cv_func_nice=no
ac_cv_func_setitimer=no
# Syscalls that resulted in a segfault # Syscalls that resulted in a segfault
ac_cv_func_utimensat=no ac_cv_func_utimensat=no

2
configure vendored
View File

@ -21323,7 +21323,7 @@ case $ac_sys_system/$ac_sys_emscripten_target in #(
;; #( ;; #(
Emscripten/node) : 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" py_stdlib_not_available="_scproxy"

View File

@ -6384,6 +6384,8 @@ AS_CASE([$ac_sys_system/$ac_sys_emscripten_target],
_gdbm _gdbm
_scproxy _scproxy
_tkinter _tkinter
_xxsubinterpreters
grp
nis nis
ossaudiodev ossaudiodev
spwd spwd