mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
bpo-40280: Skip more tests on Emscripten (GH-31947)
- lchmod, lchown are not fully implemented - skip umask tests - cannot fstat unlinked or renamed files yet - ignore musl libc issues that affect Emscripten
This commit is contained in:
parent
c2e3c06139
commit
ef1327e3b6
16 changed files with 63 additions and 8 deletions
|
@ -11,7 +11,7 @@ from distutils.dir_util import (mkpath, remove_tree, create_tree, copy_tree,
|
||||||
|
|
||||||
from distutils import log
|
from distutils import log
|
||||||
from distutils.tests import support
|
from distutils.tests import support
|
||||||
from test.support import run_unittest
|
from test.support import run_unittest, is_emscripten
|
||||||
|
|
||||||
|
|
||||||
class DirUtilTestCase(support.TempdirManager, unittest.TestCase):
|
class DirUtilTestCase(support.TempdirManager, unittest.TestCase):
|
||||||
|
@ -55,6 +55,7 @@ class DirUtilTestCase(support.TempdirManager, unittest.TestCase):
|
||||||
|
|
||||||
@unittest.skipIf(sys.platform.startswith('win'),
|
@unittest.skipIf(sys.platform.startswith('win'),
|
||||||
"This test is only appropriate for POSIX-like systems.")
|
"This test is only appropriate for POSIX-like systems.")
|
||||||
|
@unittest.skipIf(is_emscripten, "Emscripten's umask is a stub.")
|
||||||
def test_mkpath_with_custom_mode(self):
|
def test_mkpath_with_custom_mode(self):
|
||||||
# Get and set the current umask value for testing mode bits.
|
# Get and set the current umask value for testing mode bits.
|
||||||
umask = os.umask(0o002)
|
umask = os.umask(0o002)
|
||||||
|
|
|
@ -9,6 +9,8 @@ import sys
|
||||||
import unittest
|
import unittest
|
||||||
from platform import uname
|
from platform import uname
|
||||||
|
|
||||||
|
from test import support
|
||||||
|
|
||||||
if uname().system == "Darwin":
|
if uname().system == "Darwin":
|
||||||
maj, min, mic = [int(part) for part in uname().release.split(".")]
|
maj, min, mic = [int(part) for part in uname().release.split(".")]
|
||||||
if (maj, min, mic) < (8, 0, 0):
|
if (maj, min, mic) < (8, 0, 0):
|
||||||
|
@ -106,6 +108,9 @@ class _LocaleTests(unittest.TestCase):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@unittest.skipUnless(nl_langinfo, "nl_langinfo is not available")
|
@unittest.skipUnless(nl_langinfo, "nl_langinfo is not available")
|
||||||
|
@unittest.skipIf(
|
||||||
|
support.is_emscripten, "musl libc issue on Emscripten, bpo-46390"
|
||||||
|
)
|
||||||
def test_lc_numeric_nl_langinfo(self):
|
def test_lc_numeric_nl_langinfo(self):
|
||||||
# Test nl_langinfo against known values
|
# Test nl_langinfo against known values
|
||||||
tested = False
|
tested = False
|
||||||
|
@ -122,6 +127,9 @@ class _LocaleTests(unittest.TestCase):
|
||||||
if not tested:
|
if not tested:
|
||||||
self.skipTest('no suitable locales')
|
self.skipTest('no suitable locales')
|
||||||
|
|
||||||
|
@unittest.skipIf(
|
||||||
|
support.is_emscripten, "musl libc issue on Emscripten, bpo-46390"
|
||||||
|
)
|
||||||
def test_lc_numeric_localeconv(self):
|
def test_lc_numeric_localeconv(self):
|
||||||
# Test localeconv against known values
|
# Test localeconv against known values
|
||||||
tested = False
|
tested = False
|
||||||
|
|
|
@ -818,7 +818,7 @@ class RunStringTests(TestBase):
|
||||||
|
|
||||||
self.assertEqual(out, 'it worked!')
|
self.assertEqual(out, 'it worked!')
|
||||||
|
|
||||||
@unittest.skipUnless(hasattr(os, 'fork'), "test needs os.fork()")
|
@support.requires_fork()
|
||||||
def test_fork(self):
|
def test_fork(self):
|
||||||
import tempfile
|
import tempfile
|
||||||
with tempfile.NamedTemporaryFile('w+', encoding="utf-8") as file:
|
with tempfile.NamedTemporaryFile('w+', encoding="utf-8") as file:
|
||||||
|
|
|
@ -2208,6 +2208,9 @@ class CoroutineTest(unittest.TestCase):
|
||||||
gen.cr_frame.clear()
|
gen.cr_frame.clear()
|
||||||
|
|
||||||
|
|
||||||
|
@unittest.skipIf(
|
||||||
|
support.is_emscripten, "asyncio does not work under Emscripten yet."
|
||||||
|
)
|
||||||
class CoroAsyncIOCompatTest(unittest.TestCase):
|
class CoroAsyncIOCompatTest(unittest.TestCase):
|
||||||
|
|
||||||
def test_asyncio_1(self):
|
def test_asyncio_1(self):
|
||||||
|
|
|
@ -5,6 +5,7 @@ from textwrap import dedent
|
||||||
import unittest
|
import unittest
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
from test import support
|
||||||
from test.support import import_helper
|
from test.support import import_helper
|
||||||
_interpreters = import_helper.import_module('_xxsubinterpreters')
|
_interpreters = import_helper.import_module('_xxsubinterpreters')
|
||||||
from test.support import interpreters
|
from test.support import interpreters
|
||||||
|
@ -408,7 +409,7 @@ class TestInterpreterRun(TestBase):
|
||||||
|
|
||||||
self.assertEqual(out, 'it worked!')
|
self.assertEqual(out, 'it worked!')
|
||||||
|
|
||||||
@unittest.skipUnless(hasattr(os, 'fork'), "test needs os.fork()")
|
@support.requires_fork()
|
||||||
def test_fork(self):
|
def test_fork(self):
|
||||||
interp = interpreters.create()
|
interp = interpreters.create()
|
||||||
import tempfile
|
import tempfile
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
from test.support import verbose, is_android
|
from test.support import verbose, is_android, is_emscripten
|
||||||
from test.support.warnings_helper import check_warnings
|
from test.support.warnings_helper import check_warnings
|
||||||
import unittest
|
import unittest
|
||||||
import locale
|
import locale
|
||||||
|
@ -373,11 +373,13 @@ class TestEnUSCollation(BaseLocalizedTest, TestCollation):
|
||||||
|
|
||||||
@unittest.skipIf(sys.platform.startswith('aix'),
|
@unittest.skipIf(sys.platform.startswith('aix'),
|
||||||
'bpo-29972: broken test on AIX')
|
'bpo-29972: broken test on AIX')
|
||||||
|
@unittest.skipIf(is_emscripten, "musl libc issue on Emscripten, bpo-46390")
|
||||||
def test_strcoll_with_diacritic(self):
|
def test_strcoll_with_diacritic(self):
|
||||||
self.assertLess(locale.strcoll('à', 'b'), 0)
|
self.assertLess(locale.strcoll('à', 'b'), 0)
|
||||||
|
|
||||||
@unittest.skipIf(sys.platform.startswith('aix'),
|
@unittest.skipIf(sys.platform.startswith('aix'),
|
||||||
'bpo-29972: broken test on AIX')
|
'bpo-29972: broken test on AIX')
|
||||||
|
@unittest.skipIf(is_emscripten, "musl libc issue on Emscripten, bpo-46390")
|
||||||
def test_strxfrm_with_diacritic(self):
|
def test_strxfrm_with_diacritic(self):
|
||||||
self.assertLess(locale.strxfrm('à'), locale.strxfrm('b'))
|
self.assertLess(locale.strxfrm('à'), locale.strxfrm('b'))
|
||||||
|
|
||||||
|
|
|
@ -674,7 +674,7 @@ class HandlerTest(BaseTest):
|
||||||
# based on os.fork existing because that is what users and this test use.
|
# based on os.fork existing because that is what users and this test use.
|
||||||
# This helps ensure that when fork exists (the important concept) that the
|
# This helps ensure that when fork exists (the important concept) that the
|
||||||
# register_at_fork mechanism is also present and used.
|
# register_at_fork mechanism is also present and used.
|
||||||
@unittest.skipIf(not hasattr(os, 'fork'), 'Test requires os.fork().')
|
@support.requires_fork()
|
||||||
def test_post_fork_child_no_deadlock(self):
|
def test_post_fork_child_no_deadlock(self):
|
||||||
"""Ensure child logging locks are not held; bpo-6721 & bpo-36533."""
|
"""Ensure child logging locks are not held; bpo-6721 & bpo-36533."""
|
||||||
class _OurHandler(logging.Handler):
|
class _OurHandler(logging.Handler):
|
||||||
|
@ -4493,6 +4493,7 @@ class LogRecordTest(BaseTest):
|
||||||
return results
|
return results
|
||||||
|
|
||||||
def test_multiprocessing(self):
|
def test_multiprocessing(self):
|
||||||
|
support.skip_if_broken_multiprocessing_synchronize()
|
||||||
multiprocessing_imported = 'multiprocessing' in sys.modules
|
multiprocessing_imported = 'multiprocessing' in sys.modules
|
||||||
try:
|
try:
|
||||||
# logMultiprocessing is True by default
|
# logMultiprocessing is True by default
|
||||||
|
|
|
@ -4,7 +4,7 @@ import sys
|
||||||
import unittest
|
import unittest
|
||||||
import warnings
|
import warnings
|
||||||
from test.support import os_helper
|
from test.support import os_helper
|
||||||
from test.support import TestFailed
|
from test.support import TestFailed, is_emscripten
|
||||||
from test.support.os_helper import FakePath
|
from test.support.os_helper import FakePath
|
||||||
from test import test_genericpath
|
from test import test_genericpath
|
||||||
from tempfile import TemporaryFile
|
from tempfile import TemporaryFile
|
||||||
|
@ -747,6 +747,7 @@ class TestNtpath(NtpathTestCase):
|
||||||
self.assertRaises(TypeError, ntpath.commonpath,
|
self.assertRaises(TypeError, ntpath.commonpath,
|
||||||
['Program Files', b'C:\\Program Files\\Foo'])
|
['Program Files', b'C:\\Program Files\\Foo'])
|
||||||
|
|
||||||
|
@unittest.skipIf(is_emscripten, "Emscripten cannot fstat unnamed files.")
|
||||||
def test_sameopenfile(self):
|
def test_sameopenfile(self):
|
||||||
with TemporaryFile() as tf1, TemporaryFile() as tf2:
|
with TemporaryFile() as tf1, TemporaryFile() as tf2:
|
||||||
# Make sure the same file is really the same
|
# Make sure the same file is really the same
|
||||||
|
|
|
@ -181,6 +181,9 @@ class FileTests(unittest.TestCase):
|
||||||
os.close(f)
|
os.close(f)
|
||||||
self.assertTrue(os.access(os_helper.TESTFN, os.W_OK))
|
self.assertTrue(os.access(os_helper.TESTFN, os.W_OK))
|
||||||
|
|
||||||
|
@unittest.skipIf(
|
||||||
|
support.is_emscripten, "Test is unstable under Emscripten."
|
||||||
|
)
|
||||||
def test_closerange(self):
|
def test_closerange(self):
|
||||||
first = os.open(os_helper.TESTFN, os.O_CREAT|os.O_RDWR)
|
first = os.open(os_helper.TESTFN, os.O_CREAT|os.O_RDWR)
|
||||||
# We must allocate two consecutive file descriptors, otherwise
|
# We must allocate two consecutive file descriptors, otherwise
|
||||||
|
@ -1578,6 +1581,7 @@ class MakedirTests(unittest.TestCase):
|
||||||
'dir5', 'dir6')
|
'dir5', 'dir6')
|
||||||
os.makedirs(path)
|
os.makedirs(path)
|
||||||
|
|
||||||
|
@unittest.skipIf(support.is_emscripten, "Emscripten's umask is a stub.")
|
||||||
def test_mode(self):
|
def test_mode(self):
|
||||||
with os_helper.temp_umask(0o002):
|
with os_helper.temp_umask(0o002):
|
||||||
base = os_helper.TESTFN
|
base = os_helper.TESTFN
|
||||||
|
@ -2158,6 +2162,9 @@ class TestInvalidFD(unittest.TestCase):
|
||||||
self.check(os.fchown, -1, -1)
|
self.check(os.fchown, -1, -1)
|
||||||
|
|
||||||
@unittest.skipUnless(hasattr(os, 'fpathconf'), 'test needs os.fpathconf()')
|
@unittest.skipUnless(hasattr(os, 'fpathconf'), 'test needs os.fpathconf()')
|
||||||
|
@unittest.skipIf(
|
||||||
|
support.is_emscripten, "musl libc issue on Emscripten, bpo-46390"
|
||||||
|
)
|
||||||
def test_fpathconf(self):
|
def test_fpathconf(self):
|
||||||
self.check(os.pathconf, "PC_NAME_MAX")
|
self.check(os.pathconf, "PC_NAME_MAX")
|
||||||
self.check(os.fpathconf, "PC_NAME_MAX")
|
self.check(os.fpathconf, "PC_NAME_MAX")
|
||||||
|
@ -4058,6 +4065,7 @@ class PathTConverterTests(unittest.TestCase):
|
||||||
|
|
||||||
@unittest.skipUnless(hasattr(os, 'get_blocking'),
|
@unittest.skipUnless(hasattr(os, 'get_blocking'),
|
||||||
'needs os.get_blocking() and os.set_blocking()')
|
'needs os.get_blocking() and os.set_blocking()')
|
||||||
|
@unittest.skipIf(support.is_emscripten, "Cannot unset blocking flag")
|
||||||
class BlockingTests(unittest.TestCase):
|
class BlockingTests(unittest.TestCase):
|
||||||
def test_blocking(self):
|
def test_blocking(self):
|
||||||
fd = os.open(__file__, os.O_RDONLY)
|
fd = os.open(__file__, os.O_RDONLY)
|
||||||
|
@ -4513,7 +4521,7 @@ class TimesTests(unittest.TestCase):
|
||||||
self.assertEqual(times.elapsed, 0)
|
self.assertEqual(times.elapsed, 0)
|
||||||
|
|
||||||
|
|
||||||
@requires_os_func('fork')
|
@support.requires_fork()
|
||||||
class ForkTests(unittest.TestCase):
|
class ForkTests(unittest.TestCase):
|
||||||
def test_fork(self):
|
def test_fork(self):
|
||||||
# bpo-42540: ensure os.fork() with non-default memory allocator does
|
# bpo-42540: ensure os.fork() with non-default memory allocator does
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
from test.support import (gc_collect, bigmemtest, _2G,
|
from test.support import (gc_collect, bigmemtest, _2G,
|
||||||
cpython_only, captured_stdout,
|
cpython_only, captured_stdout,
|
||||||
check_disallow_instantiation)
|
check_disallow_instantiation, is_emscripten)
|
||||||
import locale
|
import locale
|
||||||
import re
|
import re
|
||||||
import sre_compile
|
import sre_compile
|
||||||
|
@ -1892,6 +1892,7 @@ ELSE
|
||||||
# with ignore case.
|
# with ignore case.
|
||||||
self.assertEqual(re.fullmatch('[a-c]+', 'ABC', re.I).span(), (0, 3))
|
self.assertEqual(re.fullmatch('[a-c]+', 'ABC', re.I).span(), (0, 3))
|
||||||
|
|
||||||
|
@unittest.skipIf(is_emscripten, "musl libc issue on Emscripten, bpo-46390")
|
||||||
def test_locale_caching(self):
|
def test_locale_caching(self):
|
||||||
# Issue #22410
|
# Issue #22410
|
||||||
oldlocale = locale.setlocale(locale.LC_CTYPE)
|
oldlocale = locale.setlocale(locale.LC_CTYPE)
|
||||||
|
@ -1928,6 +1929,7 @@ ELSE
|
||||||
self.assertIsNone(re.match(b'(?Li)\xc5', b'\xe5'))
|
self.assertIsNone(re.match(b'(?Li)\xc5', b'\xe5'))
|
||||||
self.assertIsNone(re.match(b'(?Li)\xe5', b'\xc5'))
|
self.assertIsNone(re.match(b'(?Li)\xe5', b'\xc5'))
|
||||||
|
|
||||||
|
@unittest.skipIf(is_emscripten, "musl libc issue on Emscripten, bpo-46390")
|
||||||
def test_locale_compiled(self):
|
def test_locale_compiled(self):
|
||||||
oldlocale = locale.setlocale(locale.LC_CTYPE)
|
oldlocale = locale.setlocale(locale.LC_CTYPE)
|
||||||
self.addCleanup(locale.setlocale, locale.LC_CTYPE, oldlocale)
|
self.addCleanup(locale.setlocale, locale.LC_CTYPE, oldlocale)
|
||||||
|
|
|
@ -78,6 +78,9 @@ class SelectTestCase(unittest.TestCase):
|
||||||
rfd, wfd, xfd)
|
rfd, wfd, xfd)
|
||||||
|
|
||||||
# Issue 16230: Crash on select resized list
|
# Issue 16230: Crash on select resized list
|
||||||
|
@unittest.skipIf(
|
||||||
|
support.is_emscripten, "Emscripten cannot select a fd multiple times."
|
||||||
|
)
|
||||||
def test_select_mutated(self):
|
def test_select_mutated(self):
|
||||||
a = []
|
a = []
|
||||||
class F:
|
class F:
|
||||||
|
|
|
@ -70,6 +70,9 @@ class LocaleTime_Tests(unittest.TestCase):
|
||||||
self.assertEqual(self.LT_ins.am_pm[position], strftime_output,
|
self.assertEqual(self.LT_ins.am_pm[position], strftime_output,
|
||||||
"AM/PM representation in the wrong position within the tuple")
|
"AM/PM representation in the wrong position within the tuple")
|
||||||
|
|
||||||
|
@unittest.skipIf(
|
||||||
|
support.is_emscripten, "musl libc issue on Emscripten, bpo-46390"
|
||||||
|
)
|
||||||
def test_timezone(self):
|
def test_timezone(self):
|
||||||
# Make sure timezone is correct
|
# Make sure timezone is correct
|
||||||
timezone = time.strftime("%Z", self.time_tuple).lower()
|
timezone = time.strftime("%Z", self.time_tuple).lower()
|
||||||
|
@ -368,6 +371,9 @@ class StrptimeTests(unittest.TestCase):
|
||||||
self.assertEqual("Inconsistent use of : in -01:3030", str(err.exception))
|
self.assertEqual("Inconsistent use of : in -01:3030", str(err.exception))
|
||||||
|
|
||||||
@skip_if_buggy_ucrt_strfptime
|
@skip_if_buggy_ucrt_strfptime
|
||||||
|
@unittest.skipIf(
|
||||||
|
support.is_emscripten, "musl libc issue on Emscripten, bpo-46390"
|
||||||
|
)
|
||||||
def test_timezone(self):
|
def test_timezone(self):
|
||||||
# Test timezone directives.
|
# Test timezone directives.
|
||||||
# When gmtime() is used with %Z, entire result of strftime() is empty.
|
# When gmtime() is used with %Z, entire result of strftime() is empty.
|
||||||
|
|
|
@ -658,10 +658,13 @@ class TestSupport(unittest.TestCase):
|
||||||
self.assertFalse(support.match_test(test_access))
|
self.assertFalse(support.match_test(test_access))
|
||||||
self.assertTrue(support.match_test(test_chdir))
|
self.assertTrue(support.match_test(test_chdir))
|
||||||
|
|
||||||
|
@unittest.skipIf(support.is_emscripten, "Unstable in Emscripten")
|
||||||
def test_fd_count(self):
|
def test_fd_count(self):
|
||||||
# We cannot test the absolute value of fd_count(): on old Linux
|
# We cannot test the absolute value of fd_count(): on old Linux
|
||||||
# kernel or glibc versions, os.urandom() keeps a FD open on
|
# kernel or glibc versions, os.urandom() keeps a FD open on
|
||||||
# /dev/urandom device and Python has 4 FD opens instead of 3.
|
# /dev/urandom device and Python has 4 FD opens instead of 3.
|
||||||
|
# Test is unstable on Emscripten. The platform starts and stops
|
||||||
|
# background threads that use pipes and epoll fds.
|
||||||
start = os_helper.fd_count()
|
start = os_helper.fd_count()
|
||||||
fd = os.open(__file__, os.O_RDONLY)
|
fd = os.open(__file__, os.O_RDONLY)
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -341,6 +341,9 @@ def _mock_candidate_names(*names):
|
||||||
|
|
||||||
class TestBadTempdir:
|
class TestBadTempdir:
|
||||||
|
|
||||||
|
@unittest.skipIf(
|
||||||
|
support.is_emscripten, "Emscripten cannot remove write bits."
|
||||||
|
)
|
||||||
def test_read_only_directory(self):
|
def test_read_only_directory(self):
|
||||||
with _inside_empty_temp_dir():
|
with _inside_empty_temp_dir():
|
||||||
oldmode = mode = os.stat(tempfile.tempdir).st_mode
|
oldmode = mode = os.stat(tempfile.tempdir).st_mode
|
||||||
|
@ -465,6 +468,7 @@ class TestMkstempInner(TestBadTempdir, BaseTestCase):
|
||||||
self.assertEqual(mode, expected)
|
self.assertEqual(mode, expected)
|
||||||
|
|
||||||
@unittest.skipUnless(has_spawnl, 'os.spawnl not available')
|
@unittest.skipUnless(has_spawnl, 'os.spawnl not available')
|
||||||
|
@support.requires_subprocess()
|
||||||
def test_noinherit(self):
|
def test_noinherit(self):
|
||||||
# _mkstemp_inner file handles are not inherited by child processes
|
# _mkstemp_inner file handles are not inherited by child processes
|
||||||
|
|
||||||
|
@ -1282,6 +1286,9 @@ class TestSpooledTemporaryFile(BaseTestCase):
|
||||||
pass
|
pass
|
||||||
self.assertRaises(ValueError, use_closed)
|
self.assertRaises(ValueError, use_closed)
|
||||||
|
|
||||||
|
@unittest.skipIf(
|
||||||
|
support.is_emscripten, "Emscripten cannot fstat renamed files."
|
||||||
|
)
|
||||||
def test_truncate_with_size_parameter(self):
|
def test_truncate_with_size_parameter(self):
|
||||||
# A SpooledTemporaryFile can be truncated to zero size
|
# A SpooledTemporaryFile can be truncated to zero size
|
||||||
f = tempfile.SpooledTemporaryFile(max_size=10)
|
f = tempfile.SpooledTemporaryFile(max_size=10)
|
||||||
|
|
|
@ -313,6 +313,9 @@ class TimeTestCase(unittest.TestCase):
|
||||||
def test_asctime_bounding_check(self):
|
def test_asctime_bounding_check(self):
|
||||||
self._bounds_checking(time.asctime)
|
self._bounds_checking(time.asctime)
|
||||||
|
|
||||||
|
@unittest.skipIf(
|
||||||
|
support.is_emscripten, "musl libc issue on Emscripten, bpo-46390"
|
||||||
|
)
|
||||||
def test_ctime(self):
|
def test_ctime(self):
|
||||||
t = time.mktime((1973, 9, 16, 1, 3, 52, 0, 0, -1))
|
t = time.mktime((1973, 9, 16, 1, 3, 52, 0, 0, -1))
|
||||||
self.assertEqual(time.ctime(t), 'Sun Sep 16 01:03:52 1973')
|
self.assertEqual(time.ctime(t), 'Sun Sep 16 01:03:52 1973')
|
||||||
|
@ -699,6 +702,9 @@ class TestStrftime4dyear(_TestStrftimeYear, _Test4dYear, unittest.TestCase):
|
||||||
class TestPytime(unittest.TestCase):
|
class TestPytime(unittest.TestCase):
|
||||||
@skip_if_buggy_ucrt_strfptime
|
@skip_if_buggy_ucrt_strfptime
|
||||||
@unittest.skipUnless(time._STRUCT_TM_ITEMS == 11, "needs tm_zone support")
|
@unittest.skipUnless(time._STRUCT_TM_ITEMS == 11, "needs tm_zone support")
|
||||||
|
@unittest.skipIf(
|
||||||
|
support.is_emscripten, "musl libc issue on Emscripten, bpo-46390"
|
||||||
|
)
|
||||||
def test_localtime_timezone(self):
|
def test_localtime_timezone(self):
|
||||||
|
|
||||||
# Get the localtime and examine it for the offset and zone.
|
# Get the localtime and examine it for the offset and zone.
|
||||||
|
|
|
@ -53,6 +53,9 @@ ac_cv_func_symlinkat=no
|
||||||
ac_cv_func_readlinkat=no
|
ac_cv_func_readlinkat=no
|
||||||
ac_cv_func_fchmodat=no
|
ac_cv_func_fchmodat=no
|
||||||
ac_cv_func_dup3=no
|
ac_cv_func_dup3=no
|
||||||
|
# lchmod/lchown are implemented, but fail with ENOTSUP.
|
||||||
|
ac_cv_func_lchmod=no
|
||||||
|
ac_cv_func_lchown=no
|
||||||
|
|
||||||
# Syscalls not implemented in emscripten
|
# Syscalls not implemented in emscripten
|
||||||
# [Errno 52] Function not implemented
|
# [Errno 52] Function not implemented
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue