Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Consider supporting emscripten/webassembly as a build target #84461

Closed
SimonBiggs mannequin opened this issue Apr 14, 2020 · 85 comments
Closed

Consider supporting emscripten/webassembly as a build target #84461

SimonBiggs mannequin opened this issue Apr 14, 2020 · 85 comments
Labels
3.11 only security fixes build The build process and cross-build OS-wasi type-feature A feature request or enhancement

Comments

@SimonBiggs
Copy link
Mannequin

SimonBiggs mannequin commented Apr 14, 2020

BPO 40280
Nosy @warsaw, @brettcannon, @terryjreedy, @tiran, @mcepl, @pmp-p, @rdb, @ethanhs, @corona10, @miss-islington, @tirkarthi, @erlend-aasland
PRs
  • bpo-40280: Add wasm cross build targets (GH-29771) #29771
  • bpo-40280: Use Setup.stdlib static for wasm builds (GH-29784) #29784
  • bpo-40280: Move hard-coded feature checks to configure (GH-29789) #29789
  • bpo-40280: clean and ignore .wasm files (GH-29794) #29794
  • bpo-40280: Add configure check for socket shutdown (GH-29795) #29795
  • bpo-40280: Disable unusable core extension modules on emscripten (GH-29834) #29834
  • bpo-40280: Emscripten systems use .wasm suffix by default (GH-29842) #29842
  • bpo-40280: Emscripten has no support for subprocesses #29872
  • bpo-40280: Emscripten defaults to --with-ensurepip=no (GH-29873) #29873
  • bpo-40280: Emscripten with_ensurepip=no, second attempt (GH-29884) #29884
  • bpo-40280: Optimize ints and and startup on wasm (GH-29887) #29887
  • bpo-40280: Enable assertions in Emscripten debug builds #29892
  • bpo-40280: Update what's new (GH-29893) #29893
  • bpo-40280: Add Tools/wasm with helpers for cross building (GH-29984) #29984
  • bpo-40280: Disable epoll_create in Emscripten config.site (GH-30494) #30494
  • bpo-40280: Add build target for Emscripten/node.js #30495
  • bpo-40280: Skip IPPROTO_SCTP tests on Emscripten #30538
  • bpo-40280: Add --with-emscripten-target to build for browser or node (GH-30552) #30552
  • bpo-40280: Allow to compile _testcapi as builtin module (GH-30559) #30559
  • bpo-40280: Build WASM stdlib bundle and more modules for node (GH-30597) #30597
  • bpo-40280: Block more syscalls that are causing crashes in tests (GH-30601) #30601
  • bpo-40280: Skip subprocess-based tests on wasm32-emscripten (GH-30615) #30615
  • bpo-40280: Change subprocess imports for cleaner error on wasm32 (GH-30620) #30620
  • bpo-40280: Add requires_fork test helper (GH-30622) #30622
  • bpo-40280: Misc fixes for wasm32-emscripten (GH-30722) #30722
  • bpo-40280: Get help() working and more (GH-30858) #30858
  • bpo-40280: Use presence of msvcrt module to detect Windows #30930
  • bpo-40280: Address more test failures on Emscripten (GH-31050) #31050
  • bpo-40280: Block more non-working syscalls in Emscripten (GH-31757) #31757
  • bpo-40280: Skip dysfunctional pipe tests on Emscripten (GH-31770) #31770
  • bpo-40280: Skip more tests/features that don't apply to Emscripten (GH-31791) #31791
  • bpo-40280: Disable AF_UNIX, AF_PACKET, SO_REUSE* on Emscripten #31829
  • bpo-40280: select: Use NULL for empty fdset (GH-31865) #31865
  • bpo-40280: Detect presence of time.tzset and thread_time clock (GH-31898) #31898
  • bpo-40280: Skip wakeup_fd pipe tests on Emscripten (GH-31909) #31909
  • bpo-40280: Skip more tests on Emscripten (GH-31947) #31947
  • bpo-40280: Skip socket, fork, subprocess tests on Emscripten #31986
  • bpo-40280: Add wasm32-emscripten and wasm32-wasi SOABI #32095
  • bpo-40280: Emscripten fork_exec now fails early (GH-32224) #32224
  • bpo-40280: Add debug Emscripten flavors (GH-32233) #32233
  • bpo-40280: Enable most file-at() and nanosleep APIs again (GH-32238) #32238
  • bpo-40280: Detect if WASM platform supports threading #32243
  • bpo-40280: Add --enable-wasm-dynamic-linking (GH-32253) #32253
  • bpo-46315: Use fopencookie only on Emscripten 3.x and newer (GH-32266) #32266
  • bpo-40280: Add limited Emscripten REPL (GH-32284) #32284
  • bpo-40280: Detect missing threading on WASM platforms (GH-32352) #32352
  • bpo-40280: WASM defaults to no dynamic linking (GH-32360) #32360
  • bpo-40280: WASM docs and smaller browser builds (GH-32412) #32412
  • Dependencies
  • bpo-23325: Turn SIG_DFL and SIG_IGN into functions
  • bpo-33393: update config.guess and config.sub
  • bpo-41498: Undefinied _Py_Sigset_Converter function when HAVE_SIGSET_T not set
  • bpo-45881: Cross compiling on Linux is untested, undocumented, and broken
  • bpo-45886: Fix Program/freeze_module for cross compiling Python
  • bpo-45898: ctypes cfield.c defines duplicate ffi_type* symbols
  • bpo-46383: _zoneinfo module_free has invalid function signature
  • bpo-46390: Multiple test failures on Alpine 3.15 / musl-1.2.2-r7
  • bpo-46408: signal module wrongly relies on small int singletons
  • bpo-47162: Add call trampoline to work around bad fpcasts on Emscripten
  • bpo-47176: Interrupt handling for wasm32-emscripten builds without pthreads
  • bpo-47196: Function pointer cast in test_imp
  • bpo-47197: ctypes mishandles void return type
  • Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

    Show more details

    GitHub fields:

    assignee = None
    closed_at = None
    created_at = <Date 2020-04-14.07:11:35.905>
    labels = ['type-feature', 'build', '3.11']
    title = 'Consider supporting emscripten/webassembly as a build target'
    updated_at = <Date 2022-04-08.10:17:32.793>
    user = 'https://bugs.python.org/SimonBiggs'

    bugs.python.org fields:

    activity = <Date 2022-04-08.10:17:32.793>
    actor = 'christian.heimes'
    assignee = 'none'
    closed = False
    closed_date = None
    closer = None
    components = ['Build']
    creation = <Date 2020-04-14.07:11:35.905>
    creator = 'Simon Biggs'
    dependencies = ['23325', '33393', '41498', '45881', '45886', '45898', '46383', '46390', '46408', '47162', '47176', '47196', '47197']
    files = []
    hgrepos = []
    issue_num = 40280
    keywords = ['patch']
    message_count = 65.0
    messages = ['366369', '366374', '366375', '366379', '369598', '394081', '406985', '406986', '407011', '407012', '407013', '407014', '407015', '407018', '407020', '407021', '407030', '407046', '407048', '407049', '407052', '407080', '407264', '407284', '407484', '407498', '407519', '407524', '407541', '408855', '410138', '410400', '410423', '410554', '410577', '410647', '410727', '410743', '411039', '411514', '411560', '411847', '412595', '414748', '414769', '414780', '414845', '414940', '415136', '415259', '415297', '415398', '415757', '415976', '416494', '416509', '416541', '416542', '416579', '416681', '416763', '416865', '416916', '416933', '416934']
    nosy_count = 14.0
    nosy_names = ['barry', 'brett.cannon', 'terry.reedy', 'christian.heimes', 'mcepl', 'pmpp', 'rdb', 'ethan smith', 'corona10', 'miss-islington', 'Roman Yurchak', 'xtreak', 'erlendaasland', 'Simon Biggs']
    pr_nums = ['29771', '29784', '29789', '29794', '29795', '29834', '29842', '29872', '29873', '29884', '29887', '29892', '29893', '29984', '30494', '30495', '30538', '30552', '30559', '30597', '30601', '30615', '30620', '30622', '30722', '30858', '30930', '31050', '31757', '31770', '31791', '31829', '31865', '31898', '31909', '31947', '31986', '32095', '32224', '32233', '32238', '32243', '32253', '32266', '32284', '32352', '32360', '32412']
    priority = 'normal'
    resolution = None
    stage = 'patch review'
    status = 'open'
    superseder = None
    type = 'enhancement'
    url = 'https://bugs.python.org/issue40280'
    versions = ['Python 3.11']

    @SimonBiggs
    Copy link
    Mannequin Author

    SimonBiggs mannequin commented Apr 14, 2020

    Since asm.js came on the scene, and now Web Assembly people have created CPython patches to support building CPython with emscripten. See:

    To ease the compiling of CPython with emscripten it would be helpful if patches that achieved these ends for the compiling to Web Assembly with emscripten were built into the upstream source repository itself.

    If web assembly were to became a supported compilation target of the upstream CPython repository this would significantly reduce the friction of allowing CPython, and the latest CPython, to become a language readily usable within the browser.

    Cheers,
    Simon

    @SimonBiggs SimonBiggs mannequin added 3.9 only security fixes build The build process and cross-build type-feature A feature request or enhancement labels Apr 14, 2020
    @serhiy-storchaka
    Copy link
    Member

    Do you want to provide a pull request?

    @pmp-p
    Copy link
    Mannequin

    pmp-p mannequin commented Apr 14, 2020

    you can add

    (wasm not asm.js, clang-10+ required)

    demo https://pmp-p.github.io/python-next/test.html

    CPython can already run in the browser with very little patching, but major issues are :

    • asyncify'ing the whole wasm VM to have pre-emption over cPython's one to prevent blocking I/O slows down things *a lot* (10x)
      => (very?) bad user experience.

    • the size of vm + stdlib ~ 30 MiB and wasm compilation time.
      => bad user experience on first load or slow connexion.

    • the lack of threading in wasm MinimumViableProduct specification (but this is the browser standard for now), that leads to rewrite bits of stdlib ( like eg asyncio module )
      => adding more maintenance burden on stdlib (!)

    i tested them all and my personnal opinion is : I can see no use case that would favour "stock" cPython wasm versus a blazing fast MicroPytho (or pycopy) wasm flavour or supercharged full stack pyodide.

    @SimonBiggs
    Copy link
    Mannequin Author

    SimonBiggs mannequin commented Apr 14, 2020

    Hi pmp-p and Serhiy,

    I'd be more than happy to attempt a pull request, but I imagine a change
    such as this needs to be discussed first, trying not to "rush to make a
    patch" (https://www.youtube.com/watch?v=voXVTjwnn-U&feature=youtu.be&t=2546).
    Also, I doubt I will do a good job of it... but I am more than happy to try.

    A note regarding "supercharged full stack pyodide", potentially without
    efforts such as upstreaming into CPython and emscripten the relevant
    patches, that supercharged full stack may just unfortunately stagnate. See
    pyodide/pyodide#635 (comment)

    With respect to blocking when running Python as WASM, I have found running
    the WebAssembly CPython within a webworker and signalling data back and
    forth causes there to be no UI issues. It ends up being quite a neat set
    up. Main down side right now however is the set up is currently going
    stale, hence me believing reaching out like this is in the best interests
    of Python going forward.

    Cheers,
    Simon

    On Tue, 14 Apr 2020 at 18:58, pmp-p <report@bugs.python.org> wrote:

    pmp-p <pmpp.pub@gmail.com> added the comment:

    you can add
    *
    https://github.com/pmp-p/pydk/tree/master/sources.em/Python-3.8.0b4.patchset
    -- Python 3.8.x

    (wasm not asm.js, clang-10+ required)

    demo https://pmp-p.github.io/python-next/test.html

    CPython can already run in the browser with very little patching, but
    major issues are :

    • asyncify'ing the whole wasm VM to have pre-emption over cPython's one
      to prevent blocking I/O slows down things *a lot* (10x)
      => (very?) bad user experience.

    • the size of vm + stdlib ~ 30 MiB and wasm compilation time.
      => bad user experience on first load or slow connexion.

    • the lack of threading in wasm MinimumViableProduct specification (but
      this is the browser standard for now), that leads to rewrite bits of stdlib
      ( like eg asyncio module )
      => adding more maintenance burden on stdlib (!)

    i tested them all and my personnal opinion is : I can see no use case that
    would favour "stock" cPython wasm versus a blazing fast MicroPytho (or
    pycopy) wasm flavour or supercharged full stack pyodide.

    ----------
    nosy: +pmpp


    Python tracker <report@bugs.python.org>
    <https://bugs.python.org/issue40280\>


    @Beuc
    Copy link
    Mannequin

    Beuc mannequin commented May 22, 2020

    I've been maintaining a Python Emscripten build for the Ren'Py (game engine) web port:
    https://github.com/python-emscripten/python
    https://renpy.beuc.net/

    I recently tackled Python3 with a minimal/embeddable approach and checking the other ports already pointed in the discussion:
    https://github.com/python-emscripten/python/tree/trunk/3.8/
    (2 patches, and a short pyconfig.h fix-up)

    There is also a Cython module to use the Emscripten C API.

    Here's a demo at:
    https://www.beuc.net/python-emscripten/demo/3/
    (hello-world size: 3MB, with a few common modules: 4MB)

    I can provide a pull request with a first few core changes.
    Should this be done on github?

    cross-compilation handling appears to follow an incorrect logic, in particular by querying 'dpkg' or parsing compiler output to detect include paths -- it is the (cross-)compiler's responsibility to provide the system paths, and detecting them manually causes conflicts. I had to patch setup.py. Let me know if I missed something.

    Usually cross-compiling is triggered by non-matching build-type/host-type. Here cross-compilation logic is apparently triggered when exporting _PYTHON_HOST_PLATFORM=xxx manually (it's in the Makefile but not exported, and breaks normal build when exported). Is this the way it's meant to be used?

    @ethanhs
    Copy link
    Mannequin

    ethanhs mannequin commented May 20, 2021

    I think the first thing we should do is figure out whether we want to support Emscripten or WASI (or both).

    Emscripten uses Javascript polyfills for some syscalls, while WASI makes direct calls the VM it is running in. They both can use WebAssembly for executing the code. This means Emscripten has wider API support, but WASI is lighter weight in many ways.

    I think starting with patches to support Emscripten would be best, as it is easier to target, then add support for WASI later.

    I think supporting WASI has a lot of value, because it can be run deterministically, which would be great for data science (Imagine a jupyter notebook that runs the same everywhere!)

    One issue with WASI, and may be an issue with Emscripten, is threads. In 3.8 (or 3.9?) threadless builds were removed. However, WebAssembly's threading API is not really meant to emulate pthread, and SharedArrayBuffer, the primitive it is built on, is disabled in several browsers due to Spectre concerns.

    Would patches to re-add a threadless build mode be accepted?

    @tiran
    Copy link
    Member

    tiran commented Nov 25, 2021

    I have added wasm32/wasm64 architectures with emscripten/wasi operating system as cross-build targets. The values are based on Rust targets:

    $ rustc --print target-list | grep wasm
    wasm32-unknown-emscripten
    wasm32-unknown-unknown
    wasm32-wasi
    wasm64-unknown-unknown

    wasm (WebAssembly) is "native instruction set" for the JavaScript VM while wasi or emscripten provide operating system facilities like memory management and I/O.

    @tiran tiran added 3.11 only security fixes and removed 3.9 only security fixes labels Nov 25, 2021
    @tiran
    Copy link
    Member

    tiran commented Nov 25, 2021

    Our config.sub is recent enough and has support for wasm32, wasm64, wasi, and emscripten:

    $ grep was[mi] config.sub 
                            | wasm32 | wasm64 \
                 | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \

    @brettcannon
    Copy link
    Member

    LLVM considers was32-wasi an alias for wasm32-unknown-wasi. Verified on the WebAssembly Discover server at https://discord.com/channels/453584038356058112/596492540388179976/898618010221310062.

    @brettcannon
    Copy link
    Member

    My last message had a couple of typos; should have been wasm32-wasi and "Discord", not "Discovery".

    @brettcannon
    Copy link
    Member

    Do we need to care about our config.guess being updated as well? This is a totally ignorant question based on https://github.com/WebAssembly/wasi-sdk#notes-for-autoconf mentioning config.guess.

    @brettcannon
    Copy link
    Member

    To help keep links up-to-date, Pyodide now lives at:

    https://github.com/pyodide/pyodide/tree/main/cpython

    @tiran
    Copy link
    Member

    tiran commented Nov 25, 2021

    Our config.sub agrees with LLVM:

    $ ./config.sub wasm32-wasi
    wasm32-unknown-wasi

    The config.sub and config.guess scripts in main are recent enough for wasm. Just to be sure I created #29781 and plan to backport the changeset to 3.10 and 3.9. It's generally safe to update the files to latest version.

    @tiran
    Copy link
    Member

    tiran commented Nov 25, 2021

    New changeset 1052a39 by Christian Heimes in branch 'main':
    bpo-40280: Add wasm cross build targets (GH-29771)
    1052a39

    @tiran
    Copy link
    Member

    tiran commented Nov 25, 2021

    I have uploaded my config.site override to https://gist.github.com/tiran/5ccffa28723d3e4739db848451bd9efa . It contains overrides based on pyodide and overrides for new features.

    I'm also getting this error with emscripten 2.0.13. _sys_shutdown is the syscall for shutdown(2) used by the socket module.

    error: undefined symbol: __sys_shutdown (referenced by top-level compiled C/C++ code)
    warning: Link with -s LLD_REPORT_UNDEFINED to get more information on undefined symbols
    warning: To disable errors for undefined symbols use -s ERROR_ON_UNDEFINED_SYMBOLS=0
    warning: ___sys_shutdown may need to be added to EXPORTED_FUNCTIONS if it arrives from a system library
    Error: Aborting compilation due to previous errors

    @tiran
    Copy link
    Member

    tiran commented Nov 25, 2021

    @tiran
    Copy link
    Member

    tiran commented Nov 26, 2021

    New changeset ee1e2c6 by Christian Heimes in branch 'main':
    bpo-40280: Use Setup.stdlib static for wasm builds (GH-29784)
    ee1e2c6

    @RomanYurchak
    Copy link
    Mannequin

    RomanYurchak mannequin commented Nov 26, 2021

    Thanks a lot for working on this!

    _sys_shutdown is the syscall for shutdown(2) used by the socket module.

    Yes, the issue with Emscripten is that a number of system calls are either not implemented or implemented but not tested. See a list we are using in https://github.com/pyodide/pyodide/blob/main/cpython/pyconfig.undefs.h (though things might have improved since it was created).

    FYI, with Emscripten, the list of CPython unit tests that are currently skipped (as of Python 3.9.5) is in https://github.com/pyodide/pyodide/blob/main/src/tests/python_tests.txt some of those are due to browser VM limitations (e.g. virtual filestem by Emscripten that's not fully POSIX compliant, no processes, no sockets, async only via the browser event loop etc), others because we are not yet using threading since not all browsers support it, and some failures probably need more investigation.

    Also opened pyodide/pyodide#2000 . Let us know if there is anything we can do help with this effort.

    @tiran
    Copy link
    Member

    tiran commented Nov 26, 2021

    New changeset d224e76 by Christian Heimes in branch 'main':
    bpo-40280: clean and ignore .wasm files (GH-29794)
    d224e76

    @tiran
    Copy link
    Member

    tiran commented Nov 26, 2021

    Thanks Roman, I replied on the pyodide issue tracker.

    miss-islington added a commit that referenced this issue Jun 24, 2022
    (cherry picked from commit e69306f)
    
    Co-authored-by: Christian Heimes <christian@python.org>
    serhiy-storchaka added a commit that referenced this issue Jun 26, 2022
    * GH-93444: remove redundant fields from basicblock: b_nofallthrough, b_exit, b_return (GH-93445)
    
    * netrc: Remove unused "import shlex" (#93311)
    
    * gh-92886: Fix test that fails when running with `-O` in `test_imaplib.py` (#93237)
    
    * Fix missing word in sys.float_info docstring (GH-93489)
    
    * [doc] Correct a grammatical error in a docstring. (GH-93441)
    
    * gh-93442: Make C++ version of _Py_CAST work with 0/NULL. (#93500)
    
    Add C++ overloads for _Py_CAST_impl() to handle 0/NULL.  This will allow
    C++ extensions that pass 0 or NULL to macros using _Py_CAST() to
    continue to compile.  Without this, you get an error like:
    
        invalid ‘static_cast’ from type ‘int’ to type ‘_object*’
    
    The modern way to use a NULL value in C++ is to use nullptr.  However,
    we want to not break extensions that do things the old way.
    
    Co-authored-by: serge-sans-paille
    
    * gh-93442: Add test for _Py_CAST(nullptr). (gh-93505)
    
    * gh-90473: wasmtime does not support absolute symlinks (GH-93490)
    
    * gh-89973: Fix re.error in the fnmatch module. (GH-93072)
    
    Character ranges with upper bound less that lower bound (e.g. [c-a])
    are now interpreted as empty ranges, for compatibility with other glob
    pattern implementations. Previously it was re.error.
    
    * Document LOAD_FAST_CHECK opcode (#93498)
    
    * gh-93247: Fix assert function in asyncio locks test (#93248)
    
    * gh-90473: WASI requires proper open(2) flags (GH-93529)
    
    * GH-92308 What's New: list pending removals in 3.13 and future versions (#92562)
    
    * gh-90473: Skip POSIX tests that don't apply to WASI (GH-93536)
    
    * asyncio.Barrier docs: Fix typo (#93371)
    
    taks -> tasks
    
    * gh-83728: Add hmac.new default parameter deprecation (GH-91939)
    
    * gh-90473: Make chmod a dummy on WASI, skip chmod tests (GH-93534)
    
    WASI does not have the ``chmod(2)`` syscall yet.
    
    * Remove action=None kwarg from Barrier docs (GH-93538)
    
    * [docs] fix some asyncio.Barrier.wait docs grammar (GH-93552)
    
    * gh-93475: Expose FICLONE and FICLONERANGE constants in fcntl (#93478)
    
    * gh-89018: Improve documentation of `sqlite3` exceptions (#27645)
    
    - Order exceptions as in PEP 249
    - Reword descriptions, so they match the current behaviour
    
    Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
    
    * bpo-42658: Use LCMapStringEx in ntpath.normcase to match OS behaviour for case-folding (GH-32010)
    
    * Fix contributor name in WhatsNew 3.11 (GH-93556)
    
    * Grammar fix to socket error string (GH-93523)
    
    * gh-86986: bump min sphinx version to 3.2 (GH-93337)
    
    * gh-79096: Protect cookie file created by {LWP,Mozilla}CookieJar.save() (GH-93463)
    
    Note: This change is not effective on Microsoft Windows.
    
    Cookies can store sensitive information and should therefore be protected
    against unauthorized third parties. This is also described in issue #79096.
    
    The filesystem permissions are currently set to 644, everyone can read the
    file. This commit changes the permissions to 600, only the creater of the file
    can read and modify it. This improves security, because it reduces the attack
    surface. Now the attacker needs control of the user that created the cookie or
    a ways to circumvent the filesystems permissions.
    
    This change is backwards incompatible. Systems that rely on world-readable
    cookies will breake. However, one could argue that those are misconfigured in
    the first place.
    
    * gh-93162: Add ability to configure QueueHandler/QueueListener together (GH-93269)
    
    Also, provide getHandlerByName() and getHandlerNames() APIs.
    
    Closes #93162.
    
    * gh-57539: Increase calendar test coverage (GH-93468)
    
    Co-authored-by: Sean Fleming
    Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
    Co-authored-by: Łukasz Langa <lukasz@langa.pl>
    
    * gh-88831: In docs for asyncio.create_task, explain why strong references to tasks are needed (GH-93258)
    
    Co-authored-by: Łukasz Langa <lukasz@langa.pl>
    
    * Shrink the LOAD_METHOD cache by one codeunit. (#93537)
    
    * Fix MSVC compiler warnings in ceval.c (#93569)
    
    * gh-93162: test_config_queue_handler requires threading (GH-93572)
    
    * gh-84461: Emscripten's faccessat() does not accept flags (GHß92353)
    
    * gh-92592: Allow logging filters to return a LogRecord. (GH-92591)
    
    * Fix `PurePath.relative_to` links in the pathlib documentation. (GH-93268)
    
    These are currently broken as they refer to :meth:`Path.relative_to` rather than :meth:`PurePath.relative_to`, and `relative_to` is a method on `PurePath`.
    
    * GH-93481: Suppress expected deprecation warning in test_pyclbr (GH-93483)
    
    * gh-93370: Deprecate sqlite3.version and sqlite3.version_info (#93482)
    
    Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
    Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
    Co-authored-by: Erlend E. Aasland <erlend.aasland@protonmail.com>
    
    * GH-93521: For dataclasses, filter out `__weakref__` slot if present in bases (GH-93535)
    
    * gh-93421: Update sqlite3 cursor.rowcount only after SQLITE_DONE (#93526)
    
    * gh-93584: Make all install+tests targets depends on all (GH-93589)
    
    All install targets use the "all" target as synchronization point to
    prevent race conditions with PGO builds. PGO builds use recursive make,
    which can lead to two parallel `./python setup.py build` processes that
    step on each others toes.
    
    "test" targets now correctly compile PGO build in a clean repo.
    
    * gh-87961: Remove outdated notes from functions that aren't in the Limited API (GH-93581)
    
    * Remove outdated notes from functions that aren't in the Limited API
    
    Nowadays everything that *is* in the Limited API has a note added
    automatically.
    These notes could mislead people to think that these functions
    could never be added to the limited API. Remove them.
    
    * Also remove forgotten note on tp_vectorcall_offset not being finalized
    
    * gh-93180: Update os.copy_file_range() documentation (#93182)
    
    * gh-93575: Use correct way to calculate PyUnicode struct sizes (GH-93602)
    
    * gh-93575: Use correct way to calculate PyUnicode struct sizes
    
    * Add comment to keep test_sys and test_unicode in sync
    
    * Fix case code < 256
    
    * gh-90473: Define HOSTRUNNER for WASI (GH-93606)
    
    * gh-79096: Fix/improve http cookiejar tests (GH-93614)
    
    Fixup of GH-93463:
    - remove stray print
    - use proper way to check file mode
    - add working chmod decorator
    
    Co-authored-by: Łukasz Langa <lukasz@langa.pl>
    
    * gh-93616: Fix env changed issue in test_modulefinder (GH-93617)
    
    * gh-90494: Reject 6th element of the __reduce__() tuple (GH-93609)
    
    copy.copy() and copy.deepcopy() now always raise a TypeError if
    __reduce__() returns a tuple with length 6 instead of silently ignore
    the 6th item or produce incorrect result.
    
    * Doc: Update references and examples of old, unsupported OSes and uarches (GH-92791)
    
    * bpo-45383: Get metaclass from bases in PyType_From* (GH-28748)
    
    This checks the bases of of a type created using the FromSpec
    API to inherit the bases metaclasses.  The metaclass's alloc
    function will be called as is done in `tp_new` for classes
    created in Python.
    
    Co-authored-by: Petr Viktorin <encukou@gmail.com>
    Co-authored-by: Erlend Egeberg Aasland <erlend.aasland@protonmail.com>
    
    * Improve logging documentation with example and additional cookbook re… (GH-93644)
    
    * gh-90473: disable user site packages on WASI/Emscripten (GH-93633)
    
    * gh-90473: Skip get_config_h() tests on WASI (GH-93645)
    
    * gh-90549: Fix leak of global named resources using multiprocessing spawn (#30617)
    
    Co-authored-by: XD Trol <milestonejxd@gmail.com>
    Co-authored-by: Antoine Pitrou <pitrou@free.fr>
    
    * gh-92434: Silence compiler warning in Modules/_sqlite/connection.c on 32-bit systems (#93090)
    
    * gh-90763: Modernise xx template module initialisation (#93078)
    
    Use C APIs such as PyModule_AddType instead of PyModule_AddObject.
    Also remove incorrect module decrefs if module fails to initialise.
    
    * gh-93491: Add support tier detection to configure (GH-93492)
    
    Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
    Co-authored-by: Steve Dower <steve.dower@microsoft.com>
    Co-authored-by: Erlend Egeberg Aasland <erlend.aasland@protonmail.com>
    
    * gh-93466: Document PyType_Spec doesn't accept repeated slot IDs; raise where this was problematic (GH-93471)
    
    * gh-93671: Avoid exponential backtracking in deeply nested sequence patterns in match statements (GH-93680)
    
    Co-authored-by: Łukasz Langa <lukasz@langa.pl>
    
    * gh-81790: support "UNC" device paths in `ntpath.splitdrive()` (GH-91882)
    
    * GH-93621: reorder code in with/async-with exception exit path to reduce the size of the exception table (GH-93622)
    
    * gh-93461: Invalidate sys.path_importer_cache entries with relative paths (GH-93653)
    
    * gh-91317: Document that Path does not collapse initial `//` (GH-32193)
    
    
    
    Documentation for `pathlib` says:
    
    > Spurious slashes and single dots are collapsed, but double dots ('..') are not, since this would change the meaning of a path in the face of symbolic links:
    
    However, it omits that initial double slashes also aren't collapsed.
    
    Later, in documentation of `PurePath.drive`, `PurePath.root`, and `PurePath.name` it mentions UNC but:
    
    - this abbreviation says nothing to a person who is unaware about existence of UNC (Wikipedia doesn't help either by [giving a disambiguation page](https://en.wikipedia.org/wiki/UNC))
    - it shows up only if a person needs to use a specific property or decides to fully learn what the module provides.
    
    For context, see the BPO entry.
    
    * gh-92886: Fix tests that fail when running with optimizations (`-O`) in `test_zipimport.py` (GH-93236)
    
    * gh-92930: _pickle.c: Acquire strong references before calling save() (GH-92931)
    
    * gh-84461: Use HOSTRUNNER to run regression tests (GH-93694)
    
    Co-authored-by: Brett Cannon <brett@python.org>
    
    * gh-90473: Skip test_queue when threading is not available (GH-93712)
    
    * gh-90153:  whatsnew: "z" option in format spec (GH-93624)
    
    Add what's new entry for PEP 682 in Python 3.11.
    
    * gh-86404: [doc] A make sucpicious false positive. (GH-93710)
    
    * Change list to view object (#93661)
    
    * gh-84508: tool to generate cjk traditional chinese mappings (gh-93272)
    
    * Remove usage of _Py_IDENTIFIER from math module (#93739)
    
    * gh-91162: Support splitting of unpacked arbitrary-length tuple over TypeVar and TypeVarTuple parameters (alt) (GH-93412)
    
    For example:
    
      A[T, *Ts][*tuple[int, ...]] -> A[int, *tuple[int, ...]]
      A[*Ts, T][*tuple[int, ...]] -> A[*tuple[int, ...], int]
    
    * gh-93728: fix memory leak in deepfrozen code objects (GH-93729)
    
    * gh-93747: Fix Refleak when handling multiple Py_tp_doc slots (gh-93749)
    
    * GH-90699: use statically allocated strings in typeobject.c (gh-93751)
    
    * Add more FOR_ITER specialization stats (GH-32151)
    
    * gh-89653: PEP 670: Convert PyFunction macros (#93765)
    
    Convert PyFunction macros to static inline functions.
    
    * Remove ANY_VARARGS() macro from the C API (#93764)
    
    The macro was exposed by mistake.
    
    * gh-84623: Remove unused imports in stdlib (#93773)
    
    * gh-91731: Don't define 'static_assert' in C++11 where is a keyword to avoid UB (GH-93700)
    
    * gh-84623: Remove unused imports in tests (#93772)
    
    * gh-93353: Fix importlib.resources._tempfile() finalizer (#93377)
    
    Fix the importlib.resources.as_file() context manager to remove the
    temporary file if destroyed late during Python finalization: keep a
    local reference to the os.remove() function. Patch by Victor Stinner.
    
    * gh-84461: Fix parallel testing on WebAssembly (GH-93768)
    
    * gh-89653: PEP 670: Macros always cast arguments in cpython/ (#93766)
    
    Header files in the Include/cpython/ are only included if
    the Py_LIMITED_API macro is not defined.
    
    * gh-93353: Add test.support.late_deletion() (#93774)
    
    * gh-93741: Add private C API _PyImport_GetModuleAttrString() (GH-93742)
    
    It combines PyImport_ImportModule() and PyObject_GetAttrString()
    and saves 4-6 lines of code on every use.
    
    Add also _PyImport_GetModuleAttr() which takes Python strings as arguments.
    
    * gh-79512: Fixed names and __module__ value of weakref classes (GH-93719)
    
    Classes ReferenceType, ProxyType and CallableProxyType have now correct
    atrtributes __module__, __name__ and __qualname__.
    It makes them (types, not instances) pickleable.
    
    * gh-91810: Fix regression with writing an XML declaration with encoding='unicode' (GH-93426)
    
    Suppress writing an XML declaration in open files in ElementTree.write()
    with encoding='unicode' and xml_declaration=None.
    
    If file patch is passed to ElementTree.write() with encoding='unicode',
    always open a new file in UTF-8.
    
    * gh-93761: Fix test to avoid simple delay when synchronizing. (GH-93779)
    
    * gh-89546: Clean up PyType_FromMetaclass (GH-93686)
    
    
    
    When changing PyType_FromMetaclass recently (GH-93012, GH-93466, GH-28748)
    I found a bunch of opportunities to improve the code. Here they are.
    
    Fixes: #89546
    
    Automerge-Triggered-By: GH:encukou
    
    * gh-91321: Fix compatibility with C++ older than C++11 (#93784)
    
    Fix the compatibility of the Python C API with C++ older than C++11.
    
    _Py_NULL is only defined as nullptr on C++11 and newer.
    
    * GH-93662: Make sure that column offsets are correct in multi-line method calls. (GH-93673)
    
    * GH-93516: Store offset of first traceable instruction in code object (GH-93769)
    
    * gh-90473: Include stdlib dir in wasmtime PYTHONPATH (GH-93797)
    
    * GH-93429: Merge `LOAD_METHOD` back into `LOAD_ATTR` (GH-93430)
    
    * gh-93353: regrtest checks for leaked temporary files (#93776)
    
    When running tests with -jN, create a temporary directory per process
    and mark a test as "environment changed" if a test leaks a temporary
    file or directory.
    
    * gh-79579: Improve DML query detection in sqlite3 (#93623)
    
    The fix involves using pysqlite_check_remaining_sql(), not only to check
    for multiple statements, but now also to strip leading comments and
    whitespace from SQL statements, so we can improve DML query detection.
    
    pysqlite_check_remaining_sql() is renamed lstrip_sql(), to more
    accurately reflect its function, and hardened to handle more SQL comment
    corner cases.
    
    * GH-93678: reduce boilerplate and code repetition in the compiler (GH-93682)
    
    * gh-91877: Fix WriteTransport.get_write_buffer_{limits,size} docs (#92338)
    
    - Amend docs for WriteTransport.get_write_buffer_limits
    - Add docs for WriteTransport.get_write_buffer_size
    
    * GH-93429: Document `LOAD_METHOD` removal (GH-93803)
    
    * Include freelists in allocation total. (GH-93799)
    
    * gh-93795: Use test.support TESTFN/unlink in sqlite3 tests (#93796)
    
    * Remove LOAD_METHOD stats. (GH-93807)
    
    * Rename 'LOAD_METHOD' specialization stat consts to 'ATTR'. (GH-93812)
    
    * gh-93353: Fix regrtest for -jN with N >= 2 (GH-93813)
    
    * [docs] Fix LOAD_ATTR version changed (GH-93816)
    
    * gh-93814: Add infinite test for itertools.chain.from_iterable (GH-93815)
    
    
    
    fix #93814
    
    Automerge-Triggered-By: GH:rhettinger
    
    * gh-93735: Split Docs CI to speed-up the build (GH-93736)
    
    * gh-93183: Adjust wording in socket docs (#93832)
    
    package => packet
    
    Co-authored-by: Victor Norman
    
    * gh-93829: In sqlite3, replace Py_BuildValue with faster APIs (#93830)
    
    - In Modules/_sqlite/connection.c, use PyLong_FromLong
    - In Modules/_sqlite/microprotocols.c, use PyTuple_Pack
    
    * Add test.support.busy_retry() (#93770)
    
    Add busy_retry() and sleeping_retry() functions to test.support.
    
    * gh-87260: Update sqlite3 signature docs to reflect actual implementation (#93840)
    
    Align the docs for the following methods with the actual implementation:
    
    - sqlite3.complete_statement()
    - sqlite3.Connection.create_function()
    - sqlite3.Connection.create_aggregate()
    - sqlite3.Connection.set_progress_handler()
    
    * test_thread uses support.sleeping_retry() (#93849)
    
    test_thread.test_count() now fails if it takes longer than
    LONG_TIMEOUT seconds.
    
    * Use support.sleeping_retry() and support.busy_retry() (#93848)
    
    * Replace time.sleep(0.010) with sleeping_retry() to
      use an exponential sleep.
    * support.wait_process(): reuse sleeping_retry().
    * _test_eintr: remove unused variables.
    
    * Update includes in call.c (GH-93786)
    
    * gh-93857: Fix broken audit-event targets in sqlite3 docs (#93859)
    
    Corrected targets for the following audit-events:
    
    - sqlite3.enable_load_extension => sqlite3.Connection.enable_load_extension
    - sqlite3.load_extension => sqlite3.Connection.load_extension
    
    * GH-93850: Fix test_asyncio exception ignored tracebacks (#93854)
    
    * gh-93824: Reenable installation of shell extension on Windows ARM64 (GH-93825)
    
    * test_asyncio: run_until() implements exponential sleep (#93866)
    
    run_until() of test.test_asyncio.utils now uses an exponential sleep
    delay (max: 1 second), rather than a fixed delay of 1 ms. Similar
    design than support.sleeping_retry() wait strategy that applies
    exponential backoff.
    
    * test_asyncore: Optimize capture_server() (#93867)
    
    Remove time.sleep(0.01) in test_asyncore capture_server(). The sleep
    was redundant and inefficient, since the loop starts with
    select.select() which also implements a sleep (poll for socket data
    with a timeout).
    
    * Tests call sleeping_retry() with SHORT_TIMEOUT (#93870)
    
    Tests now call busy_retry() and sleeping_retry() with SHORT_TIMEOUT
    or LONG_TIMEOUT (of test.support), rather than hardcoded constants.
    
    Add also WAIT_ACTIVE_CHILDREN_TIMEOUT constant to
    _test_multiprocessing.
    
    * gh-84461: Document how to install SDKs manually (GH-93844)
    
    Co-authored-by: Brett Cannon <brett@python.org>
    
    * gh-93820: Fix copy() regression in enum.Flag (GH-93876)
    
    
    
    GH-26658 introduced a regression in copy / pickle protocol for combined
    `enum.Flag`s. `copy.copy(re.A | re.I)` would fail with
    `AttributeError: ASCII|IGNORECASE`.
    
    `enum.Flag` now has a `__reduce_ex__()` method that reduces flags by
    combined value, not by combined name.
    
    * Call busy_retry() and sleeping_retry() with error=True (#93871)
    
    Tests no longer call busy_retry() and sleeping_retry() with
    error=False: raise an exception if the loop times out.
    
    * gh-87347: Add parenthesis around PyXXX_Check() arguments (#92815)
    
    * gh-91321: Fix test_cppext for C++03 (#93902)
    
    Don't build _testcppext.cpp with -Wzero-as-null-pointer-constant when
    testing C++03: only use this compiler flag with C++11.
    
    * gh-91577: SharedMemory move imports out of methods (#91579)
    
    SharedMemory.unlink() uses the unregister() function from resource_tracker. Previously it was imported in the method, but this can fail if the method is called during interpreter shutdown, for example when unlink is part of a __del__() method.
    
    Moving the import to the top of the file, means that the unregister() method is available during interpreter shutdown.
    
    The register call in SharedMemory.__init__() can also use this imported resource_tracker.
    
    * gh-92547: Amend What's New (#93872)
    
    * Fix BINARY_SUBSCR_GETITEM stats (GH-93903)
    
    * gh-93847: Fix repr of enum of generic aliases (GH-93885)
    
    * gh-93353: regrtest supports checking tmp files with -j2 (#93909)
    
    regrtest now also implements checking for leaked temporary files and
    directories when using -jN for N >= 2. Use tempfile.mkdtemp() to
    create the temporary directory. Skip this check on WASI.
    
    * GH-91389: Fix dis position information for CACHEs (GH-93663)
    
    * gh-91985: Ensure in-tree builds override platstdlib_dir in every path calculation (GH-93641)
    
    * GH-83658: make multiprocessing.Pool raise an exception if maxtasksperchild is not None or a positive int (GH-93364)
    
    
    
    Closes #83658.
    
    * test_logging: Fix BytesWarning in SysLogHandlerTest (GH-93920)
    
    * gh-91404: Revert "bpo-23689: re module, fix memory leak when a match is terminated by a signal or allocation failure (GH-32283) (#93882)
    
    Revert "bpo-23689: re module, fix memory leak when a match is terminated by a signal or memory allocation failure (GH-32283)"
    
    This reverts commit 6e3eee5.
    
    Manual fixups to increase the MAGIC number and to handle conflicts with
    a couple of changes that landed after that.
    
    Thanks for reviews by Ma Lin and Serhiy Storchaka.
    
    * gh-89745: Avoid exact match when comparing program_name in test_embed on Windows (GH-93888)
    
    * gh-93852: Add test.support.create_unix_domain_name() (#93914)
    
    test_asyncio, test_logging, test_socket and test_socketserver now
    create AF_UNIX domains in the current directory to no longer fail
    with OSError("AF_UNIX path too long") if the temporary directory (the
    TMPDIR environment variable) is too long.
    
    Modify the following tests to use create_unix_domain_name():
    
    * test_asyncio
    * test_logging
    * test_socket
    * test_socketserver
    
    test_asyncio.utils: remove unused time import.
    
    * gh-77782: Py_FdIsInteractive() now uses PyConfig.interactive (#93916)
    
    * gh-74953: Add _PyTime_FromMicrosecondsClamp() function (#93942)
    
    * gh-74953: Fix PyThread_acquire_lock_timed() code recomputing the timeout (#93941)
    
    Set timeout, don't create a local variable with the same name.
    
    * gh-77782: Deprecate global configuration variable (#93943)
    
    Deprecate global configuration variable like
    Py_IgnoreEnvironmentFlag: the Py_InitializeFromConfig() API should be
    instead.
    
    Fix declaration of Py_GETENV(): use PyAPI_FUNC(), not PyAPI_DATA().
    
    * gh-93911: Specialize `LOAD_ATTR_PROPERTY` (GH-93912)
    
    * gh-92888: Fix memoryview bad `__index__` use after free (GH-92946)
    
    Co-authored-by: chilaxan <35645806+chilaxan@users.noreply.github.com>
    Co-authored-by: Serhiy Storchaka <3659035+serhiy-storchaka@users.noreply.github.com>
    
    * GH-89858: Fix test_embed for out-of-tree builds (GH-93465)
    
    * gh-92611: Add details on replacements for cgi utility funcs (GH-92792)
    
    
    
    Per @brettcannon 's [suggestions on the Discourse thread](https://discuss.python.org/t/pep-594-take-2-removing-dead-batteries-from-the-standard-library/13508/51), discussed in #92611 and as a followup to PR #92612 , this PR add additional specific per-function replacement information for the utility functions in the `cgi` module deprecated by PEP 594 (PEP-594).
    
    @brettcannon , should this be backported (without the `deprecated-removed` , which I would update it accordingly and re-add in my other PR adding that to the others for 3.11+), or just go in 3.11+?
    
    * GH-77403: Fix tests which fail when PYTHONUSERBASE is not normalized (GH-93917)
    
    * gh-91387: Strip trailing slash from tarfile longname directories (GH-32423)
    
    Co-authored-by: Brett Cannon <brett@python.org>
    
    * Add jaraco as primary owner of importlib.metadata and importlib.resources. (#93960)
    
    * Add jaraco as primary owner of importlib.metadata and importlib.resources.
    
    * Align indentation.
    
    Co-authored-by: Ezio Melotti <ezio.melotti@gmail.com>
    
    Co-authored-by: Ezio Melotti <ezio.melotti@gmail.com>
    
    * gh-84461: Fix circulare dependency on BUILDPYTHON (GH-93977)
    
    * gh-89828: Do not relay the __class__ attribute in GenericAlias (#93754)
    
    list[int].__class__ returned type, and isinstance(list[int], type)
    returned True. It caused numerous problems in code that checks
    isinstance(x, type).
    
    * gh-84461: Fix pydebug Emscripten browser builds (GH-93982)
    
    wasm_assets script did not take the ABIFLAG flag of sysconfigdata into
    account.
    
    * gh-93955: Use unbound methods for slot `__getattr__` and `__getattribute__` (GH-93956)
    
    * gh-91387: Fix tarfile test on WASI (GH-93984)
    
    WASI's rmdir() syscall does not like the trailing slash.
    
    * gh-93975: Nicer error reporting in test_venv (GH-93959)
    
    
    
    - gh-93957: Provide nicer error reporting from subprocesses in test_venv.EnsurePipTest.test_with_pip.
    - Update changelog
    
    This change does three things:
    
    1. Extract a function for trapping output in subprocesses.
    2. Emit both stdout and stderr when encountering an error.
    3. Apply the change to `ensurepip._uninstall` check.
    
    * GH-93990: fix refcounting bug in `add_subclass` in `typeobject.c` (GH-93989)
    
    * What's new in 3.10: fix link to issue (#93968)
    
    * What's new in 3.10: fix link to issue
    
    * What's new in 3.10: fix link to GH issue
    
    Co-authored-by: Ezio Melotti <ezio.melotti@gmail.com>
    
    Co-authored-by: Ezio Melotti <ezio.melotti@gmail.com>
    
    * gh-93761: Fix test_logging test_config_queue_handler() race condition (#93952)
    
    Fix a race condition in test_config_queue_handler() of test_logging.
    
    * gh-74953: Reformat PyThread_acquire_lock_timed() (#93947)
    
    Reformat the pthread implementation of PyThread_acquire_lock_timed()
    using a mutex and a conditioinal variable.
    
    * Add goto to avoid multiple indentation levels and exit quickly
    * Use "while(1)" and make the control flow more obvious.
    * PEP 7: Add braces around if blocks.
    
    * gh-93937, C API: Move PyFrame_GetBack() to Python.h (#93938)
    
    Move the follow functions and type from frameobject.h to pyframe.h,
    so the standard <Python.h> provide frame getter functions:
    
    * PyFrame_Check()
    * PyFrame_GetBack()
    * PyFrame_GetBuiltins()
    * PyFrame_GetGenerator()
    * PyFrame_GetGlobals()
    * PyFrame_GetLasti()
    * PyFrame_GetLocals()
    * PyFrame_Type
    
    Remove #include "frameobject.h" from many C files. It's no longer
    needed.
    
    * gh-93991: Use boolean instead of 0/1 for condition check (GH-93992)
    
    
    
    # gh-93991: Use boolean instead of 0/1 for condition check
    
    * gh-84461: Fix Emscripten umask and permission issues (GH-94002)
    
    - Emscripten's default umask is too strict, see
      emscripten-core/emscripten#17269
    - getuid/getgid and geteuid/getegid are stubs that always return 0
      (root). Disable effective uid/gid syscalls and fix tests that use
      chmod() current user.
    - Cannot drop X bit from directory.
    
    * gh-84461: Skip test_unwritable_directory again on Emscripten (GH-94007)
    
    GH-93992 removed geteuid() and enabled the test again on Emscripten.
    
    * gh-93925: Improve clarity of sqlite3 commit/rollback, and close docs (#93926)
    
    Co-authored-by: CAM Gerlach <CAM.Gerlach@Gerlach.CAM>
    
    * gh-61162: Clarify sqlite3 connection context manager docs (GH-93890)
    
    
    
    Explicitly note that transactions are only closed if there is an open
    transation at `__exit__`, and that transactions are not implicitly
    opened during `__enter__`.
    
    Co-authored-by: CAM Gerlach <CAM.Gerlach@Gerlach.CAM>
    Co-authored-by: Stanley <46876382+slateny@users.noreply.github.com>
    
    Automerge-Triggered-By: GH:erlend-aasland
    
    * gh-79009: sqlite3.iterdump now correctly handles tables with autoincrement (#9621)
    
    Co-authored-by: Erlend E. Aasland <erlend.aasland@protonmail.com>
    
    * gh-84461: Silence some compiler warnings on WASM (GH-93978)
    
    * GH-93897: Store frame size in code object and de-opt if insufficient space on thread frame stack. (GH-93908)
    
    * GH-93516: Speedup line number checks when tracing. (GH-93763)
    
    * Use a lookup table to reduce overhead of getting line numbers during tracing.
    
    * gh-90539: doc: Expand on what should not go into CFLAGS, LDFLAGS (#92754)
    
    * gh-87347: Add parenthesis around macro arguments (#93915)
    
    Add unit test on Py_MEMBER_SIZE() and some other macros.
    
    * gh-93937: PyOS_StdioReadline() uses PyConfig.legacy_windows_stdio (#94024)
    
    On Windows, PyOS_StdioReadline() now gets
    PyConfig.legacy_windows_stdio from _PyOS_ReadlineTState, rather than
    using the deprecated global Py_LegacyWindowsStdioFlag variable.
    
    Fix also a compiler warning in Py_SetStandardStreamEncoding().
    
    * GH-93249: relax overly strict assertion on bounds->ar_start (GH-93961)
    
    * gh-94021: Address unreachable code warning in specialize code (GH-94022)
    
    * GH-93678: refactor compiler so that optimizer does not need the assembler and compiler structs (GH-93842)
    
    * gh-93839: Move Lib/ctypes/test/ to Lib/test/test_ctypes/ (#94041)
    
    * Move Lib/ctypes/test/ to Lib/test/test_ctypes/
    * Remove Lib/test/test_ctypes.py
    * Update imports and build system.
    
    * gh-93839: Move Lib/unttest/test/ to Lib/test/test_unittest/ (#94043)
    
    * Move Lib/unittest/test/ to Lib/test/test_unittest/
    * Remove Lib/test/test_unittest.py
    * Replace unittest.test with test.test_unittest
    * Remove unittest.load_tests()
    * Rewrite unittest __init__.py and __main__.py
    * Update build system, CODEOWNERS, and wasm_assets.py
    
    * GH-91432: Specialize FOR_ITER (GH-91713)
    
    * Adds FOR_ITER_LIST and FOR_ITER_RANGE specializations.
    
    * Adds _PyLong_AssignValue() internal function to avoid temporary boxing of ints.
    
    * gh-94028: Clear and reset sqlite3 statements properly in cursor iternext (GH-94042)
    
    * gh-94052: Don't re-run failed tests with --python option (#94054)
    
    * gh-93839: Use load_package_tests() for testmock (GH-94055)
    
    
    
    Fixes failing tests on WebAssembly platforms.
    
    Automerge-Triggered-By: GH:tiran
    
    * gh-54781: Move Lib/lib2to3/tests/ to Lib/test/test_lib2to3/ (#94049)
    
    * Move Lib/lib2to3/tests/ to Lib/test/test_lib2to3/.
    * Remove Lib/test/test_lib2to3.py.
    * Update imports.
    * all_project_files(): use different paths and sort files
      to make the tests more reproducible.
    * Update references to tests.
    
    * gh-74953: _PyThread_cond_after() uses _PyTime_t (#94056)
    
    pthread _PyThread_cond_after() implementation now uses the _PyTime_t
    type to handle properly overflow: clamp to the maximum value.
    
    Remove MICROSECONDS_TO_TIMESPEC() function.
    
    * GH-93841: Allow stats to be turned on and off, cleared and dumped at runtime. (GH-93843)
    
    * gh-86986: Drop compatibility support for Sphinx 2 (GH-93737)
    
    * Revert "bpo-42843: Keep Sphinx 1.8 and Sphinx 2 compatibility (GH-24282)"
    
    This reverts commit 5c1f15b
    
    * Revert "bpo-42579: Make workaround for various versions of Sphinx more robust (GH-23662)"
    
    This reverts commit b63a620.
    
    * gh-94068: Remove HVSOCKET_CONTAINER_PASSTHRU constant because it has been removed from Windows (GH-94069)
    
    
    
    Fixes #94068
    
    Automerge-Triggered-By: GH:zware
    
    * Closes gh-94038: Update Release Schedule in README.rst from PEP 664 to PEP 693 (GH-94046)
    
    * gh-93851: Fix all broken links in Doc/ (GH-93853)
    
    * gh-93675: Fix typos in `Doc/` (GH-93676)
    
    Closes #93675
    
    * Minor optimization for Fractions.limit_denominator (GH-93730)
    
    When we construct the upper and lower candidates in limit_denominator,
    the numerator and denominator are already relatively prime (and the
    denominator positive) by construction, so there's no need to go through
    the usual normalisation in the constructor. This saves a couple of
    potentially expensive gcd calls.
    
    Suggested by Michael Scott Asato Cuthbert in GH-93477.
    
    * gh-93240: clarify wording in IO tutorial (GH-93276)
    
    Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
    
    * Tutorial: specify match cases don't fall through (GH-93615)
    
    * gh-93021: Fix __text_signature__ for __get__ (GH-93023)
    
    Because of the way wrap_descr_get is written, the second argument
    to __get__ methods implemented through the wrapper is always
    optional.
    
    * gh-82927: Update files related to HTML entities. (GH-92504)
    
    * DOC: correct bytesarray -> bytearray in comments (GH-92410)
    
    * gh-87389: Fix an open redirection vulnerability in http.server. (#93879)
    
    Fix an open redirection vulnerability in the `http.server` module when
    an URI path starts with `//` that could produce a 301 Location header
    with a misleading target.  Vulnerability discovered, and logic fix
    proposed, by Hamza Avvan (@hamzaavvan).
    
    Test and comments authored by Gregory P. Smith [Google].
    
    * gh-89336: Remove configparser APIs that were deprecated for 3.12 (#92503)
    
    https://github.com/python/cpython/issue/89336: Remove configparser 3.12 deprecations.
    
    Co-authored-by: Hugo van Kemenade <hugovk@users.noreply.github.com>
    
    * bpo-30535: [doc] state that sys.meta_path is not empty by default (GH-94098)
    
    Co-authored-by: Windson yang <wiwindson@outlook.com>
    
    * gh-88123: Implement new Enum __contains__ (GH-93298)
    
    Co-authored-by: Ethan Furman <ethan@stoneleaf.us>
    
    * Stats: Add summary of top instructions for misses and deferred specialization. (GH-94072)
    
    * gh-74696: Do not change the current working directory in shutil.make_archive() if possible (GH-93160)
    
    It is no longer changed when create a zip or tar archive.
    
    It is still changed for custom archivers registered with shutil.register_archive_format()
    if root_dir is not None.
    
    Co-authored-by: Éric <merwok@netwok.org>
    Co-authored-by: Łukasz Langa <lukasz@langa.pl>
    
    * gh-94101 Disallow instantiation of SSLSession objects (GH-94102)
    
    
    
    Fixes #94101
    
    Automerge-Triggered-By: GH:tiran
    
    * Fix typo in _io.TextIOWrapper Clinic input (#94037)
    
    Co-authored-by: Łukasz Langa <lukasz@langa.pl>
    
    * gh-93951: In test_bdb.StateTestCase.test_skip, avoid including auxiliary importers. (GH-93962)
    
    Co-authored-by: Brett Cannon <brett@python.org>
    
    * gh-91172: Create a workflow for verifying bundled pip and setuptools (GH-31885)
    
    Co-authored-by: Hugo van Kemenade <hugovk@users.noreply.github.com>
    Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
    
    * gh-94114: Remove obsolete reference to python.org mirrors (GH-94115)
    
    
    
    * gh-94114
    
    * gh-84623: Remove unused imports (#94132)
    
    * gh-54781: Move Lib/tkinter/test/test_ttk/ to Lib/test/test_ttk/ (#94070)
    
    * Move Lib/tkinter/test/test_tkinter/ to Lib/test/test_tkinter/.
    * Move Lib/tkinter/test/test_ttk/ to Lib/test/test_ttk/.
    * Add Lib/test/test_ttk/__init__.py based on test_ttk_guionly.py.
    * Add Lib/test/test_tkinter/__init__.py
    * Remove old Lib/test/test_tk.py.
    * Remove old Lib/test/test_ttk_guionly.py.
    * Add __main__ sub-modules.
    * Update imports and update references to rename files.
    
    * gh-84623: Move imports in doctests (#94133)
    
    Move imports in doctests to prevent false alarms in pyflakes.
    
    * Add ABI dump Makefile target (#94136)
    
    * gh-84623: Remove unused imports in idlelib (#94143)
    
    Remove commented code in test_debugger_r.py.
    
    Co-authored-by: Terry Jan Reedy <tjreedy@udel.edu>
    
    * gh-85308: argparse: Use filesystem encoding for arguments file (GH-93277)
    
    * Closes gh-94152: Update pyvideo.org URL (GH-94075)
    
    The URL is now https://pyvideo.org, which uses HTTPS and avoids a redirect.
    
    * gh-91456: [Enum] Deprecate default auto() behavior with mixed value types (GH-91457)
    
    When used with plain Enum, auto() returns the last numeric value assigned, skipping any incompatible member values (such as strings); starting in 3.13 the default auto() for plain Enums will require all the values to be of compatible types, and will return a new value that is 1 higher than any existing value.
    
    Co-authored-by: Ethan Furman <ethan@stoneleaf.us>
    
    * gh-84461: Fix test_sqlite for Emscripten/WASI (#94125)
    
    * gh-86404: [doc] Fix missing backtick and double target name. (#94120)
    
    * gh-89121: Keep the number of pending SQLite statements to a minimum (#30379)
    
    Make sure statements that have run to completion or errored are
    reset and cleared off the cursor for all paths in execute() and
    executemany().
    
    * GH-91742: Fix pdb crash after jump  (GH-94171)
    
    * [Enum] fix typo (GH-94158)
    
    * gh-92858: Improve error message for some suites with syntax error before ':' (#92894)
    
    * gh-93771: Clarify how deepfreeze.py is run (#94150)
    
    * gh-91219: Add an index_pages default list and parameter to SimpleHTTPRequestHandler (GH-31985)
    
    * Add an index_pages default list to SimpleHTTPRequestHandler and an
    optional constructor parameter that allows the default indexes pages
    list to be overridden.  This makes it easy to set a new index page name
    without having to override send_head.
    
    * [Enum] Remove automatic docstring generation (GH-94188)
    
    * Add ABI dump script (#94135)
    
    * Add more tests for throwing into yield from (GH-94097)
    
    * gh-94169: Remove deprecated io.OpenWrapper (#94170)
    
    Remove io.OpenWrapper and _pyio.OpenWrapper, deprecated in Python
    3.10: just use :func:`open` instead. The open() (io.open()) function
    is a built-in function. Since Python 3.10, _pyio.open() is also a
    static method.
    
    * gh-94199: Remove ssl.RAND_pseudo_bytes() function (#94202)
    
    Remove the ssl.RAND_pseudo_bytes() function, deprecated in Python
    3.6: use os.urandom() or ssl.RAND_bytes() instead.
    
    * gh-94196: Remove gzip.GzipFile.filename attribute (#94197)
    
    gzip: Remove the filename attribute of gzip.GzipFile,
    deprecated since Python 2.6, use the name attribute instead. In write
    mode, the filename attribute added '.gz' file extension if it was not
    present.
    
    * gh-93692: remove "build finished successfully" message from setup.py (#93693)
    
    The message was only emitted when the build succeeded _and_ there were
    missing modules.
    
    * gh-84461: Fix ctypes and test_ctypes on Emscripten (#94142)
    
    - c_longlong and c_longdouble need experimental WASM bigint.
    - Skip tests that need threading
    - Define ``CTYPES_MAX_ARGCOUNT`` for Emscripten. libffi-emscripten 2022-06-23 supports up to 1000 args.
    
    * gh-94205: Ensures all required DLLs are copied on Windows for underpth tests (GH-94206)
    
    * gh-84461: Build Emscripten with WASM BigInt support (#94219)
    
    * gh-94172: urllib.request avoids deprecated check_hostname (#94193)
    
    The urllib.request no longer uses the deprecated check_hostname
    parameter of the http.client module.
    
    Add private http.client._create_https_context() helper to http.client,
    used by urllib.request.
    
    Remove the now redundant check on check_hostname and verify_mode in
    http.client: the SSLContext.check_hostname setter already implements
    the check.
    
    * IDLE: replace if statement with expression (#94228)
    
    * Docs: Remove `Provides [...]` from `multiprocessing.shared_memory` description (#92761)
    
    * gh-93382: Sync up `co_code` changes with 3.11 (GH-94227)
    
    Sync up co_code changes with 3.11 commit 852b4d4.
    
    * gh-94217: Skip import tests when _testcapi is a builtin (GH-94218)
    
    * gh-85308: Add argparse tests for reading non-ASCII arguments from file (GH-94160)
    
    * bpo-46642: Explicitly disallow subclassing of instaces of TypeVar, ParamSpec, etc (GH-31148)
    
    The existing test covering this case passed only incidentally. We
    explicitly disallow doing this and add a proper error message.
    
    Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
    
    * bpo-26253: Add compressionlevel to tarfile stream (GH-2962)
    
    `tarfile` already accepts a compressionlevel argument for creating
    files. This patch adds the same for stream-based tarfile usage.
    The default is 9, the value that was previously hard-coded.
    
    * gh-70441: Fix test_tarfile on systems w/o bz2 (gh-2962) (#94258)
    
    * gh-94199: Remove ssl.match_hostname() function (#94224)
    
    * gh-94207: Fix struct module leak (GH-94239)
    
    Make _struct.Struct a GC type
    
    This fixes a memory leak in the _struct module, where as soon
    as a Struct object is stored in the cache, there's a cycle from
    the _struct module to the cache to Struct objects to the Struct
    type back to the module. If _struct.Struct is not gc-tracked, that
    cycle is never collected.
    
    This PR makes _struct.Struct GC-tracked, and adds a regression test.
    
    * gh-94245: Test pickling and copying of typing.Tuple[()] (GH-94259)
    
    * gh-77560: Report possible errors in restoring builtins at finalization (GH-94255)
    
    Seems in the past the copy of builtins was not made in some scenarios,
    and the error was silenced. Write it now to stderr, so we have a chance
    to see it.
    
    * gh-90016: Reword sqlite3 adapter/converter docs (#93095)
    
    Also add adapters and converter recipes.
    
    Co-authored-by: CAM Gerlach <CAM.Gerlach@Gerlach.CAM>
    Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com
    
    * bpo-39971: Change examples to be runnable (GH-32172)
    
    * gh-70474: [doc] fix wording of GET_ANEXT doc (GH-94048)
    
    * gh-93259: Validate arg to ``Distribution.from_name``. (GH-94270)
    
    Syncs with importlib_metadata 4.12.0.
    
    Co-authored-by: Irit Katriel <1055913+iritkatriel@users.noreply.github.com>
    Co-authored-by: Ulises Ojeda <ulises.odysseus22@gmail.com>
    Co-authored-by: jackh-ncl <1750152+jackh-ncl@users.noreply.github.com>
    Co-authored-by: Mark Dickinson <dickinsm@gmail.com>
    Co-authored-by: Colin Delahunty <72827203+colin99d@users.noreply.github.com>
    Co-authored-by: Neil Schemenauer <nas-github@arctrix.com>
    Co-authored-by: Christian Heimes <christian@python.org>
    Co-authored-by: Dennis Sweeney <36520290+sweeneyde@users.noreply.github.com>
    Co-authored-by: Cyker Way <cykerway@gmail.com>
    Co-authored-by: Hugo van Kemenade <hugovk@users.noreply.github.com>
    Co-authored-by: Omer Katz <omer.katz@omerkatz.com>
    Co-authored-by: Stanley <46876382+slateny@users.noreply.github.com>
    Co-authored-by: Thomas Grainger <tagrain@gmail.com>
    Co-authored-by: Illia Volochii <illia.volochii@gmail.com>
    Co-authored-by: Erlend Egeberg Aasland <erlend.aasland@protonmail.com>
    Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
    Co-authored-by: AN Long <aisk@users.noreply.github.com>
    Co-authored-by: Samodya Abeysiriwardane <379594+sransara@users.noreply.github.com>
    Co-authored-by: Evorage <owner@evorage.com>
    Co-authored-by: Davide Rizzo <sorcio@gmail.com>
    Co-authored-by: Pascal Wittmann <mail@pascal-wittmann.de>
    Co-authored-by: Vinay Sajip <vinay_sajip@yahoo.co.uk>
    Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
    Co-authored-by: Łukasz Langa <lukasz@langa.pl>
    Co-authored-by: Andreas Grommek <76997441+agrommek@users.noreply.github.com>
    Co-authored-by: Mark Shannon <mark@hotpy.org>
    Co-authored-by: Ken Jin <kenjin4096@gmail.com>
    Co-authored-by: Adrian Garcia Badaracco <1755071+adriangb@users.noreply.github.com>
    Co-authored-by: jacksonriley <52106215+jacksonriley@users.noreply.github.com>
    Co-authored-by: Kalyan <kalyan.ben10@live.com>
    Co-authored-by: Bluenix <bluenixdev@gmail.com>
    Co-authored-by: Petr Viktorin <encukou@gmail.com>
    Co-authored-by: CAM Gerlach <CAM.Gerlach@Gerlach.CAM>
    Co-authored-by: Sebastian Berg <sebastian@sipsolutions.net>
    Co-authored-by: Leo Trol <milestone.jxd@gmail.com>
    Co-authored-by: XD Trol <milestonejxd@gmail.com>
    Co-authored-by: Antoine Pitrou <pitrou@free.fr>
    Co-authored-by: neonene <53406459+neonene@users.noreply.github.com>
    Co-authored-by: Steve Dower <steve.dower@microsoft.com>
    Co-authored-by: Pablo Galindo Salgado <Pablogsal@gmail.com>
    Co-authored-by: Barney Gale <barney.gale@gmail.com>
    Co-authored-by: Oleg Iarygin <oleg@arhadthedev.net>
    Co-authored-by: Brett Cannon <brett@python.org>
    Co-authored-by: John Belmonte <john@neggie.net>
    Co-authored-by: Julien Palard <julien@palard.fr>
    Co-authored-by: Pamela Fox <pamela.fox@gmail.com>
    Co-authored-by: Dong-hee Na <donghee.na@python.org>
    Co-authored-by: Kumar Aditya <59607654+kumaraditya303@users.noreply.github.com>
    Co-authored-by: Victor Stinner <vstinner@python.org>
    Co-authored-by: Sanket Shanbhag <TechieBoy@users.noreply.github.com>
    Co-authored-by: Jeong YunWon <69878+youknowone@users.noreply.github.com>
    Co-authored-by: Steve Dower <steve.dower@python.org>
    Co-authored-by: samtygier <samtygier@yahoo.co.uk>
    Co-authored-by: Ken Jin <kenjin@python.org>
    Co-authored-by: Brandt Bucher <brandtbucher@microsoft.com>
    Co-authored-by: Gregory P. Smith <greg@krypto.org>
    Co-authored-by: chilaxan <35645806+chilaxan@users.noreply.github.com>
    Co-authored-by: Serhiy Storchaka <3659035+serhiy-storchaka@users.noreply.github.com>
    Co-authored-by: Chris Fernald <chrisf671@gmail.com>
    Co-authored-by: Jason R. Coombs <jaraco@jaraco.com>
    Co-authored-by: Ezio Melotti <ezio.melotti@gmail.com>
    Co-authored-by: Lei Zhang <leizhanghello@gmail.com>
    Co-authored-by: Erlend Egeberg Aasland <erlend.aasland@innova.no>
    Co-authored-by: itssme <itssme3000@gmail.com>
    Co-authored-by: Matthias Köppe <mkoeppe@math.ucdavis.edu>
    Co-authored-by: MilanJuhas <81162136+MilanJuhas@users.noreply.github.com>
    Co-authored-by: luzpaz <luzpaz@users.noreply.github.com>
    Co-authored-by: paulreece <96156234+paulreece@users.noreply.github.com>
    Co-authored-by: max <36980911+pr2502@users.noreply.github.com>
    Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
    Co-authored-by: Thomas A Caswell <tcaswell@gmail.com>
    Co-authored-by: Windson yang <wiwindson@outlook.com>
    Co-authored-by: Carl Bordum Hansen <carl@bordum.dk>
    Co-authored-by: Ethan Furman <ethan@stoneleaf.us>
    Co-authored-by: Éric <merwok@netwok.org>
    Co-authored-by: chgnrdv <52372310+chgnrdv@users.noreply.github.com>
    Co-authored-by: fikotta <81991278+fikotta@users.noreply.github.com>
    Co-authored-by: partev <petrosyan@gmail.com>
    Co-authored-by: Terry Jan Reedy <tjreedy@udel.edu>
    Co-authored-by: Inada Naoki <songofacandy@gmail.com>
    Co-authored-by: Oscar R <89599049+oscar-LT@users.noreply.github.com>
    Co-authored-by: wookie184 <wookie1840@gmail.com>
    Co-authored-by: Guido van Rossum <guido@python.org>
    Co-authored-by: Myron Walker <myron.walker@hotmail.com>
    Co-authored-by: Sam Ezeh <sam.z.ezeh@gmail.com>
    Co-authored-by: Ken Jin <28750310+Fidget-Spinner@users.noreply.github.com>
    Co-authored-by: Gregory Beauregard <greg@greg.red>
    Co-authored-by: Yaron de Leeuw <me@jarondl.net>
    Co-authored-by: Mark Dickinson <mdickinson@enthought.com>
    miss-islington pushed a commit to miss-islington/cpython that referenced this issue Jul 1, 2022
    * Buffer standard input line-by-line
    
    * Add non-root .editorconfig for JS & HTML indent
    
    * Add support for clearing REPL with CTRL+L
    
    * Support unicode in stdout and stderr
    
    * Remove \r\n normalization
    
    * Note that local .editorconfig file extends root
    
    * Only normalize lone \r characters (convert to \n)
    
    * Skip non-printable characters in buffered input
    
    * Fix Safari bug (regex lookbehind not supported)
    
    Co-authored-by: Christian Heimes <christian@python.org>
    (cherry picked from commit a8e333d)
    
    Co-authored-by: Trey Hunner <trey@treyhunner.com>
    tiran added a commit that referenced this issue Jul 1, 2022
    * Buffer standard input line-by-line
    
    * Add non-root .editorconfig for JS & HTML indent
    
    * Add support for clearing REPL with CTRL+L
    
    * Support unicode in stdout and stderr
    
    * Remove \r\n normalization
    
    * Note that local .editorconfig file extends root
    
    * Only normalize lone \r characters (convert to \n)
    
    * Skip non-printable characters in buffered input
    
    * Fix Safari bug (regex lookbehind not supported)
    
    Co-authored-by: Christian Heimes <christian@python.org>
    miss-islington pushed a commit to miss-islington/cpython that referenced this issue Jul 1, 2022
    …es (pythonGH-93953)
    
    (cherry picked from commit 1df9449)
    
    Co-authored-by: Petr Viktorin <encukou@gmail.com>
    miss-islington added a commit that referenced this issue Jul 1, 2022
    * Buffer standard input line-by-line
    
    * Add non-root .editorconfig for JS & HTML indent
    
    * Add support for clearing REPL with CTRL+L
    
    * Support unicode in stdout and stderr
    
    * Remove \r\n normalization
    
    * Note that local .editorconfig file extends root
    
    * Only normalize lone \r characters (convert to \n)
    
    * Skip non-printable characters in buffered input
    
    * Fix Safari bug (regex lookbehind not supported)
    
    Co-authored-by: Christian Heimes <christian@python.org>
    (cherry picked from commit a8e333d)
    
    Co-authored-by: Trey Hunner <trey@treyhunner.com>
    miss-islington added a commit that referenced this issue Jul 1, 2022
    …-93953)
    
    (cherry picked from commit 1df9449)
    
    Co-authored-by: Petr Viktorin <encukou@gmail.com>
    miss-islington pushed a commit to miss-islington/cpython that referenced this issue Sep 11, 2022
    …ythonGH-96303)
    
    (cherry picked from commit a36235d)
    
    Co-authored-by: Christian Heimes <christian@python.org>
    miss-islington added a commit that referenced this issue Sep 13, 2022
    (cherry picked from commit a36235d)
    
    Co-authored-by: Christian Heimes <christian@python.org>
    vstinner added a commit to vstinner/cpython that referenced this issue Sep 2, 2023
    vstinner pushed a commit to vstinner/cpython that referenced this issue Sep 2, 2023
    …94002)
    
    - Emscripten's default umask is too strict, see
      emscripten-core/emscripten#17269
    - getuid/getgid and geteuid/getegid are stubs that always return 0
      (root). Disable effective uid/gid syscalls and fix tests that use
      chmod() current user.
    - Cannot drop X bit from directory.
    
    (cherry picked from commit 2702e40)
    vstinner added a commit that referenced this issue Sep 3, 2023
    …108820)
    
    * Revert "[3.11] gh-101634: regrtest reports decoding error as failed test (#106169) (#106175)"
    
    This reverts commit d5418e9.
    
    * Revert "[3.11] bpo-46523: fix tests rerun when `setUp[Class|Module]` fails (GH-30895) (GH-103342)"
    
    This reverts commit ecb09a8.
    
    * Revert "gh-95027: Fix regrtest stdout encoding on Windows (GH-98492)"
    
    This reverts commit b2aa28e.
    
    * Revert "[3.11] gh-94026: Buffer regrtest worker stdout in temporary file (GH-94253) (GH-94408)"
    
    This reverts commit 0122ab2.
    
    * Revert "Run Tools/scripts/reindent.py (GH-94225)"
    
    This reverts commit f0f3a42.
    
    * Revert "gh-94052: Don't re-run failed tests with --python option (GH-94054)"
    
    This reverts commit 1347607.
    
    * Revert "[3.11] gh-84461: Fix Emscripten umask and permission issues (GH-94002) (GH-94006)"
    
    This reverts commit 1073184.
    
    * gh-93353: regrtest checks for leaked temporary files (#93776)
    
    When running tests with -jN, create a temporary directory per process
    and mark a test as "environment changed" if a test leaks a temporary
    file or directory.
    
    (cherry picked from commit e566ce5)
    
    * gh-93353: Fix regrtest for -jN with N >= 2 (GH-93813)
    
    (cherry picked from commit 36934a1)
    
    * gh-93353: regrtest supports checking tmp files with -j2 (#93909)
    
    regrtest now also implements checking for leaked temporary files and
    directories when using -jN for N >= 2. Use tempfile.mkdtemp() to
    create the temporary directory. Skip this check on WASI.
    
    (cherry picked from commit 4f85cec)
    
    * gh-84461: Fix Emscripten umask and permission issues (GH-94002)
    
    - Emscripten's default umask is too strict, see
      emscripten-core/emscripten#17269
    - getuid/getgid and geteuid/getegid are stubs that always return 0
      (root). Disable effective uid/gid syscalls and fix tests that use
      chmod() current user.
    - Cannot drop X bit from directory.
    
    (cherry picked from commit 2702e40)
    
    * gh-94052: Don't re-run failed tests with --python option (#94054)
    
    (cherry picked from commit 0ff7b99)
    
    * Run Tools/scripts/reindent.py (#94225)
    
    Reindent files which were not properly formatted (PEP 8: 4 spaces).
    
    Remove also some trailing spaces.
    
    (cherry picked from commit e87ada4)
    
    * gh-94026: Buffer regrtest worker stdout in temporary file (GH-94253)
    
    Co-authored-by: Victor Stinner <vstinner@python.org>
    (cherry picked from commit 199ba23)
    
    * gh-96465: Clear fractions hash lru_cache under refleak testing (GH-96689)
    
    Automerge-Triggered-By: GH:zware
    (cherry picked from commit 9c8f379)
    
    * gh-95027: Fix regrtest stdout encoding on Windows (#98492)
    
    On Windows, when the Python test suite is run with the -jN option,
    the ANSI code page is now used as the encoding for the stdout
    temporary file, rather than using UTF-8 which can lead to decoding
    errors.
    
    (cherry picked from commit ec1f6f5)
    
    * gh-98903: Test suite fails with exit code 4 if no tests ran (#98904)
    
    The Python test suite now fails wit exit code 4 if no tests ran. It
    should help detecting typos in test names and test methods.
    
    * Add "EXITCODE_" constants to Lib/test/libregrtest/main.py.
    * Fix a typo: "NO TEST RUN" becomes "NO TESTS RAN"
    
    (cherry picked from commit c76db37)
    
    * gh-100086: Add build info to test.libregrtest (#100093)
    
    The Python test runner (libregrtest) now logs Python build information like
    "debug" vs "release" build, or LTO and PGO optimizations.
    
    (cherry picked from commit 3c89202)
    
    * bpo-46523: fix tests rerun when `setUp[Class|Module]` fails (#30895)
    
    Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
    Co-authored-by: Łukasz Langa <lukasz@langa.pl>
    (cherry picked from commit 9953860)
    
    * gh-82054: allow test runner to split test_asyncio to execute in parallel by sharding. (#103927)
    
    This runs test_asyncio sub-tests in parallel using sharding from Cinder. This suite is typically the longest-pole in runs because it is a test package with a lot of further sub-tests otherwise run serially. By breaking out the sub-tests as independent modules we can run a lot more in parallel.
    
    After porting we can see the direct impact on a multicore system.
    
    Without this change:
      Running make test is 5 min 26 seconds
    With this change:
      Running make test takes 3 min 39 seconds
    
    That'll vary based on system and parallelism. On a `-j 4` run similar to what CI and buildbot systems often do, it reduced the overall test suite completion latency by 10%.
    
    The drawbacks are that this implementation is hacky and due to the sorting of the tests it obscures when the asyncio tests occur and involves changing CPython test infrastructure but, the wall time saved it is worth it, especially in low-core count CI runs as it pulls a long tail. The win for productivity and reserved CI resource usage is significant.
    
    Future tests that deserve to be refactored into split up suites to benefit from are test_concurrent_futures and the way the _test_multiprocessing suite gets run for all start methods. As exposed by passing the -o flag to python -m test to get a list of the 10 longest running tests.
    
    ---------
    
    Co-authored-by: Carl Meyer <carl@oddbird.net>
    Co-authored-by: Gregory P. Smith <greg@krypto.org> [Google, LLC]
    (cherry picked from commit 9e011e7)
    
    * Display the sanitizer config in the regrtest header. (#105301)
    
    Display the sanitizers present in libregrtest.
    
    Having this in the CI output for tests with the relevant environment
    variable displayed will help make it easier to do what we need to
    create an equivalent local test run.
    
    (cherry picked from commit 852348a)
    
    * gh-101634: regrtest reports decoding error as failed test (#106169)
    
    When running the Python test suite with -jN option, if a worker stdout
    cannot be decoded from the locale encoding report a failed testn so the
    exitcode is non-zero.
    
    (cherry picked from commit 2ac3eec)
    
    * gh-108223: test.pythoninfo and libregrtest log Py_NOGIL (#108238)
    
    Enable with --disable-gil --without-pydebug:
    
        $ make pythoninfo|grep NOGIL
        sysconfig[Py_NOGIL]: 1
    
        $ ./python -m test
        ...
        == Python build: nogil debug
        ...
    
    (cherry picked from commit 5afe0c1)
    
    * gh-90791: test.pythoninfo logs ASAN_OPTIONS env var (#108289)
    
    * Cleanup libregrtest code logging ASAN_OPTIONS.
    * Fix a typo on "ASAN_OPTIONS" vs "MSAN_OPTIONS".
    
    (cherry picked from commit 3a1ac87)
    
    * gh-108388: regrtest splits test_asyncio package (#108393)
    
    Currently, test_asyncio package is only splitted into sub-tests when
    using command "./python -m test". With this change, it's also
    splitted when passing it on the command line:
    "./python -m test test_asyncio".
    
    Remove the concept of "STDTESTS". Python is now mature enough to not
    have to bother with that anymore. Removing STDTESTS simplify the
    code.
    
    (cherry picked from commit 174e9da)
    
    * regrtest computes statistics (#108793)
    
    test_netrc, test_pep646_syntax and test_xml_etree now return results
    in the test_main() function.
    
    Changes:
    
    * Rewrite TestResult as a dataclass with a new State class.
    * Add test.support.TestStats class and Regrtest.stats_dict attribute.
    * libregrtest.runtest functions now modify a TestResult instance
      in-place.
    * libregrtest summary lists the number of run tests and skipped
      tests, and denied resources.
    * Add TestResult.has_meaningful_duration() method.
    * Compute TestResult duration in the upper function.
    * Use time.perf_counter() instead of time.monotonic().
    * Regrtest: rename 'resource_denieds' attribute to 'resource_denied'.
    * Rename CHILD_ERROR to MULTIPROCESSING_ERROR.
    * Use match/case syntadx to have different code depending on the
      test state.
    
    Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
    (cherry picked from commit d4e534c)
    
    * gh-108822: Add Changelog entry for regrtest statistics (#108821)
    
    ---------
    
    Co-authored-by: Christian Heimes <christian@python.org>
    Co-authored-by: Zachary Ware <zach@python.org>
    Co-authored-by: Nikita Sobolev <mail@sobolevn.me>
    Co-authored-by: Joshua Herman <zitterbewegung@gmail.com>
    Co-authored-by: Gregory P. Smith <greg@krypto.org>
    arhadthedev added a commit to arhadthedev/cpython that referenced this issue Dec 11, 2023
    arhadthedev added a commit to arhadthedev/cpython that referenced this issue Dec 11, 2023
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Labels
    3.11 only security fixes build The build process and cross-build OS-wasi type-feature A feature request or enhancement
    Projects
    No open projects
    Status: Done
    Development

    No branches or pull requests

    7 participants