Skip to content

Update to 3.14.2#205

Merged
lazka merged 105 commits into
mingw-v3.14.2from
wip/mingw-v3.14.2
Jan 25, 2026
Merged

Update to 3.14.2#205
lazka merged 105 commits into
mingw-v3.14.2from
wip/mingw-v3.14.2

Conversation

@lazka
Copy link
Copy Markdown
Member

@lazka lazka commented Jan 24, 2026

git range-diff v3.13.11..mingw-v3.13.11 v3.14.2..wip/mingw-v3.14.2
  • 1: 954b586 ! 1: 5a32cea build: add --with-nt-threads and make it default on mingw
    @@ configure.ac: elif test "$ac_cv_pthread" = "yes"
     @@ configure.ac: AC_CHECK_HEADERS([ \
        alloca.h asm/types.h bluetooth.h conio.h direct.h dlfcn.h endian.h errno.h fcntl.h grp.h \
        io.h langinfo.h libintl.h libutil.h linux/auxvec.h sys/auxv.h linux/fs.h linux/limits.h linux/memfd.h \
    -   linux/random.h linux/soundcard.h \
    +   linux/netfilter_ipv4.h linux/random.h linux/soundcard.h linux/sched.h \
     -  linux/tipc.h linux/wait.h netdb.h net/ethernet.h netinet/in.h netpacket/packet.h poll.h process.h pthread.h pty.h \
     -  sched.h setjmp.h shadow.h signal.h spawn.h stropts.h sys/audioio.h sys/bsdtty.h sys/devpoll.h \
     +  linux/tipc.h linux/wait.h netdb.h net/ethernet.h netinet/in.h netpacket/packet.h poll.h process.h pty.h \
    @@ configure.ac: if test "$ac_sys_system" = "Linux-android"; then
     +fi
      AC_CHECK_FUNCS([ \
        accept4 alarm bind_textdomain_codeset chmod chown clock closefrom close_range confstr \
    -   copy_file_range ctermid dup dup3 execv explicit_bzero explicit_memset \
    +   copy_file_range ctermid dladdr dup dup3 execv explicit_bzero explicit_memset \
     @@ configure.ac: dnl actually works.  For FreeBSD versions <= 7.2,
      dnl the kernel module that provides POSIX semaphores
      dnl isn't loaded by default, so an attempt to call
  • 2: 3d52cd6 = 2: e5f57f5 build: Define MS_WINDOWS (and others) when compiling with MINGW
  • 3: db7e699 = 3: 01f090a sysmodule: Implement flags "_is_mingw", "is_mingw_ucrt" and "_use_alt_sep"
  • 4: bf4e84d = 4: a90c35e configure: add MACHDEP and platform on MINGW
  • 5: fecace5 = 5: 18fceb1 build: Add default cross configuration for MINGW
  • 6: 4e98a13 ! 6: 9787929 configure: enable largefile support by default for Mingw
    @@ Commit message
         Co-authored-by: Christoph Reiter <[email protected]>
     
      ## configure.ac ##
    -@@ configure.ac: dnl LFS does not work with Emscripten 3.1
    - AS_CASE([$ac_sys_system],
    -   [Emscripten], [have_largefile_support="no"]
    - )
    +@@ configure.ac: if test "$ac_cv_sizeof_off_t" -gt "$ac_cv_sizeof_long" -a \
    + else
    +   have_largefile_support="no"
    + fi
     +dnl Activate on windows platforms (32&64-bit) where off_t(4) < fpos_t(8)
     +AS_CASE([$ac_sys_system],
     +  [MINGW], [have_largefile_support="yes"]
  • 7: 4a9984e = 7: 1fd8705 build: Add PC/ to CPPFLAGS and to SRCDIRS on Mingw
  • 8: a526427 ! 8: 526056f build: add MINGW support for posixmodule
    @@ Modules/Setup.bootstrap.in
      _suggestions _suggestions.c
     
      ## Modules/posixmodule.c ##
    -@@ Modules/posixmodule.c: corresponding Unix manual entries for more information on calls.");
    +@@
      #  define HAVE_PIPE       1
      #  define HAVE_FSYNC      1
      #  define fsync _commit
    @@ Modules/posixmodule.c: corresponding Unix manual entries for more information on
     +#  ifndef _MAX_ENV
     +#    define _MAX_ENV	32767
     +#  endif
    - #endif  /* ! __WATCOMC__ || __QNX__ */
    - 
    - /*[clinic input]
    -@@ Modules/posixmodule.c: extern char        *ctermid_r(char *);
    - #  endif
      #endif
      
    --#ifdef _MSC_VER
    -+#ifdef MS_WINDOWS
    - #  ifdef HAVE_DIRECT_H
    - #    include <direct.h>
    - #  endif
    -@@ Modules/posixmodule.c: extern char        *ctermid_r(char *);
    - #    include <process.h>
    - #  endif
    - #  include <malloc.h>
    --#endif /* _MSC_VER */
    -+#endif /* MS_WINDOWS */
      
    - #ifndef MAXPATHLEN
    - #  if defined(PATH_MAX) && PATH_MAX > 1024
     @@ Modules/posixmodule.c: _Py_Sigset_Converter(PyObject *obj, void *addr)
      */
      #include <crt_externs.h>
  • 9: c78b5b0 = 9: a407097 exports.h: Add support for MINGW
  • 10: 285c589 = 10: fca53b4 configure: add options so that shared build is possible on MINGW
  • 11: 68b7545 ! 11: fded73f build: Add PYD_PLATFORM_TAG
    @@ configure.ac: esac
     +  else
     +    PYD_PLATFORM_TAG+="_ucrt"
     +  fi
    -+  if test -n "${cc_is_clang}"; then
    ++  if test "$ac_cv_cc_name" = "clang"; then
     +    # it is CLANG32
     +    PYD_PLATFORM_TAG+="_llvm"
     +  else
  • 12: 5ab5893 = 12: 8847fa5 build: Add dynload_win support for MinGW
  • 13: 99b3b83 = 13: 3fa6a72 build: Use .pyd extension suffix + fix import lib install location
  • 14: 65e6e89 = 14: b5a39c3 build: Configure SOABI and EXT_SUFFIX for MINGW
  • 15: 98f1de1 = 15: 06c18bf build: Define MS_DLL_ID for sys.winver on MINGW
  • 16: 3b78858 = 16: 52ebfef build: Ignore main program for frozen scripts on MINGW
  • 17: 9920835 ! 17: 818aae0 socketmodule: add MINGW support
    @@ configure.ac: PY_STDLIB_MOD([mmap],
      PY_STDLIB_MOD([_socket],
        [], m4_flatten([test "$ac_cv_header_sys_socket_h" = "yes"
                          -a "$ac_cv_header_sys_types_h" = "yes"
    --                    -a "$ac_cv_header_netinet_in_h" = "yes"]))
    +-                    -a "$ac_cv_header_netinet_in_h" = "yes"]), [], [$SOCKET_LIBS])
     +                    -a "$ac_cv_header_netinet_in_h" = "yes"
    -+                    -o "$MACHDEP" = "win32"]),
    -+  [], [$SOCKET_LIBS])
    ++                    -o "$MACHDEP" = "win32"]), [], [$SOCKET_LIBS])
      
      dnl platform specific extensions
      PY_STDLIB_MOD([grp], [],
     
      ## pyconfig.h.in ##
     @@
    - /* Define to 1 if you have the `acosh' function. */
    + /* Define to 1 if you have the 'acosh' function. */
      #undef HAVE_ACOSH
      
     -/* struct addrinfo (netdb.h) */
     +/* struct addrinfo */
      #undef HAVE_ADDRINFO
      
    - /* Define to 1 if you have the `alarm' function. */
    + /* Define to 1 if you have the 'alarm' function. */
     @@
    - /* Define to `unsigned int' if <sys/types.h> does not define. */
    + /* Define as 'unsigned int' if <stddef.h> doesn't define. */
      #undef size_t
      
     -/* Define to 'int' if <sys/socket.h> does not define. */
     +/* Define to `int' if <sys/socket.h> or <ws2tcpip.h> does not define. */
      #undef socklen_t
      
    - /* Define to `int' if <sys/types.h> doesn't define. */
    + /* Define as 'int' if <sys/types.h> doesn't define. */
  • 18: 0a3dfa6 ! 18: b34c54e build: enable winreg, msvcrt, _winapi, winsound and _overlapped modules
    @@ Modules/Setup.stdlib.in
      ## Modules/_winapi.c ##
     @@
      #endif
    - #include "windows.h"
    + #include <windows.h>
      #include <winioctl.h>
     +#if defined(Py_DEBUG)
      #include <crtdbg.h>
  • 19: 83381f2 ! 19: a7cbf22 sysconfig: make _sysconfigdata.py relocatable
    @@ Lib/sysconfig/__main__.py
     @@
      import os
      import sys
    + import types
     +import textwrap
      from sysconfig import (
          _ALWAYS_STR,
    @@ Lib/sysconfig/__main__.py: def _generate_posix_vars():
              _print_config_dict(vars, stream=f)
     +        f.write('\n%s' % textwrap.dedent(replacement))
      
    -     # Create file used for sys.path fixup -- see Modules/getpath.c
    -     with open('pybuilddir.txt', 'w', encoding='utf8') as f:
    +     print(f'Written {destfile}')
    + 
  • 20: fb852cf ! 20: a187b66 sysconfig: treat MINGW builds as POSIX builds
    @@ Lib/sysconfig/__init__.py: def parse_config_h(fp, vars=None):
          if _PYTHON_BUILD:
     -        if os.name == "nt":
     +        if os.name == "nt" and not sys._is_mingw:
    -             inc_dir = os.path.dirname(sys._base_executable)
    +             inc_dir = os.path.join(_PROJECT_BASE, 'PC')
              else:
                  inc_dir = _PROJECT_BASE
    +@@ Lib/sysconfig/__init__.py: def _init_config_vars():
    +     except AttributeError:
    +         abiflags = ''
    + 
    +-    if os.name == 'posix':
    ++    if os.name == 'posix' or sys._is_mingw:
    +         _init_posix(_CONFIG_VARS)
    +         # If we are cross-compiling, load the prefixes from the Makefile instead.
    +         if '_PYTHON_PROJECT_BASE' in os.environ:
     @@ Lib/sysconfig/__init__.py: def _init_config_vars():
          except AttributeError:
              _CONFIG_VARS['py_version_nodot_plat'] = ''
    @@ Lib/sysconfig/__init__.py: def _init_config_vars():
     +    if os.name == 'nt' and not sys._is_mingw:
              _init_non_posix(_CONFIG_VARS)
              _CONFIG_VARS['VPATH'] = sys._vpath
    --    if os.name == 'posix':
    -+    if os.name == 'posix' or sys._is_mingw:
    -         _init_posix(_CONFIG_VARS)
          if _HAS_USER_BASE:
    -         # Setting 'userbase' is done below the call to the
     @@ Lib/sysconfig/__init__.py: def _init_config_vars():
      
          # Always convert srcdir to an absolute path
  • 21: b5f5d54 = 21: 659a6fd sysconfig: Change the get_platform() method in sysconfig
  • 22: 0998afd ! 22: dba9b41 build: semi native build sysconfig
    @@ Lib/sysconfig/__main__.py: def _parse_makefile(filename, vars=None, keep_unresol
          return vars
     
      ## Makefile.pre.in ##
    -@@ Makefile.pre.in: exec_prefix=	@exec_prefix@
    +@@ Makefile.pre.in: host_exec_prefix= 	@host_exec_prefix@
      # Install prefix for data files
      datarootdir=    @datarootdir@
      
  • 23: bdedb0d = 23: 30c8d85 ctypes: Add support for stdcall without underscore
  • 24: 6657f9e = 24: 8770648 ctypes: add suppor for ctypes.pythonapi under MINGW
  • 25: 62097eb = 25: 3b273cd ctypes: find_library('c') should return None with ucrt
  • 26: 6380526 = 26: febee16 site: Customize for MINGW
  • 27: 468712d = 27: 249c033 site: Change user site-packages path to include the environment info
  • 28: d2bca23 = 28: c35123b python-config: output Windows paths for the shell variant
  • 29: 587fbe7 = 29: 2f05dfb python-config: use the Python variant of python-config
  • 30: c6bcf96 ! 30: 622022a mingw: prefer unix sep if MSYSTEM environment variable
    @@ Metadata
      ## Commit message ##
         mingw: prefer unix sep if MSYSTEM environment variable
     
    +    os needs ntpath.sep, so define it before importing os
    +
         Co-authored-by: Алексей <[email protected]>
         Co-authored-by: Christoph Reiter <[email protected]>
         Co-authored-by: cat <[email protected]>
    @@ Lib/ntpath.py
      defpath = '.;C:\\bin'
      devnull = 'nul'
      
    -@@
    - import genericpath
    - from genericpath import *
    - 
    +-import os
    + import sys
    ++
     +if sys._use_alt_sep:
     +    sep = '/'
     +    altsep = '\\'
    @@ Lib/ntpath.py
     +bsep = str.encode(sep)
     +baltsep = str.encode(altsep)
     +
    - __all__ = ["normcase","isabs","join","splitdrive","splitroot","split","splitext",
    -            "basename","dirname","commonprefix","getsize","getmtime",
    -            "getatime","getctime", "islink","exists","lexists","isdir","isfile",
    ++import os
    + import genericpath
    + from genericpath import *
    + 
     @@
      
      def _get_bothseps(path):
    @@ Lib/ntpath.py
     +def _get_altsep(path):
     +    if isinstance(path, bytes):
     +        return baltsep
    -     else:
    --        return '\\/'
    ++    else:
     +        return altsep
     +
     +def _get_colon(path):
    @@ Lib/ntpath.py
     +def _get_unc_prefix(path):
     +    if isinstance(path, bytes):
     +        return b'\\\\?\\UNC\\'
    -+    else:
    +     else:
    +-        return '\\/'
     +        return '\\\\?\\UNC\\'
      
      # Normalize the case of a pathname and map slashes to backslashes.
  • 31: c84bbcd = 31: 3682515 build: Remove MAXPATHLEN default
  • 32: e20bb99 = 32: 3e90e0c build: dont link with gettext
  • 33: d3c8697 = 33: d03567d use gnu_printf in format
  • 34: 52639b9 = 34: cec23f4 build: remove usage of MS_COREDLL
  • 35: 31b7b9f ! 35: 5c45c0b getcompiler: expose MINGW toolchain related information
    @@ Commit message
     
         * include MINGW and UCRT
         * include things like "64 bit (AMD64)" for compat with the MSVC build
    +    * We include "GCC" even for Clang builds since various code out there
    +      checks for GCC in the string to detect a MINGW build.
     
      ## Python/getcompiler.c ##
     @@
    @@ Python/getcompiler.c
     +
     +#if defined(__clang__)
     +#  if defined(_UCRT)
    -+#    define COMPILER COMP_SEP "[" ARCH_PREFIX "Clang UCRT " __clang_version__ ARCH_SUFFIX "]"
    ++// Some code checks for "GCC" in the compiler string, so we include it here.
    ++#    define COMPILER COMP_SEP "[" ARCH_PREFIX "Clang UCRT " __clang_version__ ARCH_SUFFIX " (GCC)]"
     +#  else
    -+#    define COMPILER COMP_SEP "[" ARCH_PREFIX "Clang " __clang_version__ ARCH_SUFFIX "]"
    ++#    define COMPILER COMP_SEP "[" ARCH_PREFIX "Clang " __clang_version__ ARCH_SUFFIX " (GCC)]"
     +#  endif
     +#else
     +#  if defined(_UCRT)
  • 36: bf664bb ! 36: b92ebbe build: fix signal module build
    @@ Modules/Setup.bootstrap.in
     +_signal signalmodule.c -lws2_32
      _tracemalloc _tracemalloc.c
      _suggestions _suggestions.c
    - 
    + # needs libm and on some platforms librt
  • 37: bc00e60 < -: ----------- build: build winconsoleio and _testconsole
  • -: ----------- > 37: bc5f5a4 build: build winconsoleio and _testconsole
  • 38: 335402e = 38: 87af3d8 multiprocessing: expose sem_unlink to fix multiprocessing.Queue
  • 39: 19208aa < -: ----------- Use cygpty while using isatty
  • 40: 54773f7 ! 39: d3f39e8 build: link win resource files and build pythonw
    @@ Makefile.pre.in: list-targets:
      .PHONY: build_all
     -build_all:	check-clean-src check-app-store-compliance $(BUILDPYTHON) platform sharedmods \
     +build_all:	check-clean-src check-app-store-compliance $(BUILDPYTHON) $(BUILDPYTHONW) platform sharedmods \
    - 		gdbhooks Programs/_testembed scripts checksharedmods rundsymutil
    + 		gdbhooks Programs/_testembed scripts checksharedmods rundsymutil build-details.json
      
      .PHONY: build_wasm
    -@@ Makefile.pre.in: clinic: check-clean-src $(srcdir)/Modules/_blake2/blake2s_impl.c
    +@@ Makefile.pre.in: clinic: check-clean-src
      clinic-tests: check-clean-src $(srcdir)/Lib/test/clinic.test.c
      	$(PYTHON_FOR_REGEN) $(srcdir)/Tools/clinic/clinic.py -f $(srcdir)/Lib/test/clinic.test.c
      
  • 41: acfc6c0 = 40: 754f6ba pycore_fileutils: add MINGW support
  • 42: 3704c49 = 41: d69a634 configure: fix inet_pton check
  • 43: d66cb92 = 42: 578fbe6 importlib: bootstrap path sep
  • 44: 7a0e0c4 = 43: 04f6b69 configure: set MINGW stack reserve
  • 45: 4390187 = 44: 280a426 tests: fix test_bytes
  • 46: 0df58cc = 45: 36c75bc timemodule: add MINGW support
  • 47: b2ba751 ! 46: 7cb643d configure: Disable checks for dlopen/dlfcn
    @@ configure.ac: AC_DEFINE([STDC_HEADERS], [1],
     -  alloca.h asm/types.h bluetooth.h conio.h direct.h dlfcn.h endian.h errno.h fcntl.h grp.h \
     +  alloca.h asm/types.h bluetooth.h conio.h direct.h endian.h errno.h fcntl.h grp.h \
        io.h langinfo.h libintl.h libutil.h linux/auxvec.h sys/auxv.h linux/fs.h linux/limits.h linux/memfd.h \
    -   linux/random.h linux/soundcard.h \
    +   linux/netfilter_ipv4.h linux/random.h linux/soundcard.h linux/sched.h \
        linux/tipc.h linux/wait.h netdb.h net/ethernet.h netinet/in.h netpacket/packet.h poll.h process.h pty.h \
     @@ configure.ac: AC_CHECK_HEADERS([ \
        sys/types.h sys/uio.h sys/un.h sys/utsname.h sys/wait.h sys/xattr.h sysexits.h syslog.h \
  • 48: 48f99ea ! 47: 2177348 venvlauncher: Build venvlauncher.exe from PC/launcher.c
    @@ Makefile.pre.in: list-targets:
      .PHONY: build_all
     -build_all:	check-clean-src check-app-store-compliance $(BUILDPYTHON) $(BUILDPYTHONW) platform sharedmods \
     +build_all:	check-clean-src check-app-store-compliance $(BUILDPYTHON) $(BUILDPYTHONW) $(BUILDVENVLAUNCHER) $(BUILDVENVWLAUNCHER) platform sharedmods \
    - 		gdbhooks Programs/_testembed scripts checksharedmods rundsymutil
    + 		gdbhooks Programs/_testembed scripts checksharedmods rundsymutil build-details.json
      
      .PHONY: build_wasm
     @@ Makefile.pre.in: pythonw_exe.o: $(srcdir)/PC/pythonw_exe.rc
  • 49: 8fbc1e5 = 48: a0f52a4 venvlauncher: try looking for the versioned .exe first and then fall back
  • 50: eb1eb4b = 49: f95774a venvlauncher: Skip find python in Registry for mingw builds
  • 51: 7492fd9 = 50: 1827158 configure: don't check for clock_ functions
  • 52: a2fcc66 ! 51: 4e06af1 CI: test the build and add some mingw specific tests
    @@ .github/workflows/mingw.yml (new)
     +            automake \
     +            zip \
     +            make \
    -+            pkg-config
    ++            pkg-config \
    ++            git \
    ++            libtool
     +
     +      - uses: actions/setup-python@v5
     +        with:
    -+          python-version: '3.13'
    ++          python-version: '3.14'
     +
     +      - name: Check Python Version
     +        run: |
    @@ .github/workflows/mingw.yml (new)
     +
     +      - name: Build
     +        run: |
    ++          DESTDIR=$(pwd)/_install
    ++          PREFIX=/myprefix
    ++          HOST=x86_64-w64-mingw32
    ++          BUILD=x86_64-pc-linux-gnu
    ++
    ++          export PKG_CONFIG_SYSROOT_DIR=$DESTDIR
    ++          export PKG_CONFIG_LIBDIR=$DESTDIR$PREFIX/lib/pkgconfig
    ++          unset PKG_CONFIG_PATH
    ++
    ++          # build libffi
    ++          git clone https://github.com/libffi/libffi.git _libffi
    ++          cd _libffi
    ++          git checkout v3.4.7
     +          autoreconf -vfi
    ++          cd ..
    ++          mkdir _libffi_build && cd _libffi_build
    ++          ../_libffi/configure \
    ++            --host="$HOST" \
    ++            --prefix="$PREFIX" \
    ++            --build="$BUILD" \
    ++            --disable-symvers \
    ++            --disable-docs
    ++          make -j8
    ++          DESTDIR="$DESTDIR" make install
    ++          cd ..
     +
    ++          # build python
    ++          autoreconf -vfi
     +          mkdir _build && cd _build
     +
    -+          export PKG_CONFIG_LIBDIR=/dev/null
    -+          unset PKG_CONFIG_PATH
    -+
     +          ../configure \
    -+            --host=x86_64-w64-mingw32 \
    -+            --build=x86_64-pc-linux-gnu \
    ++            --host="$HOST" \
    ++            --build="$BUILD" \
    ++            --prefix="$PREFIX" \
     +            --enable-shared \
     +            --without-ensurepip \
     +            --enable-loadable-sqlite-extensions \
    @@ .github/workflows/mingw.yml (new)
     +
     +          make -j8
     +
    -+          make install DESTDIR="$(pwd)/install"
    ++          make install DESTDIR="$DESTDIR"
    ++
    ++          # copy toolchain dlls
    ++          cp "$("$HOST-gcc" -print-file-name=libgcc_s_seh-1.dll)" $DESTDIR$PREFIX/bin
    ++          cp "$("$HOST-gcc" -print-file-name=libstdc++-6.dll)" $DESTDIR$PREFIX/bin
     +
     +      - name: 'Zip files'
     +        run: |
    -+          zip -r install.zip _build/install
    ++          zip -r install.zip _install
     +
     +      - name: Upload
     +        uses: actions/upload-artifact@v4
    @@ .github/workflows/mingw.yml (new)
     +      - name: 'Run tests'
     +        run: |
     +          7z x install.zip
    -+          ./_build/install/usr/local/bin/python3.exe -c "import sysconfig, pprint; pprint.pprint(sysconfig.get_config_vars())"
    ++          ./_install/myprefix/bin/python3.exe -c "import sysconfig, pprint; pprint.pprint(sysconfig.get_config_vars())"
    ++          ./_install/myprefix/bin/python3.exe -c "import ctypes; print(ctypes)"
    ++          ./_install/myprefix/bin/python3.exe -c "import _wmi; print(_wmi)"
     +
     +
     +  cross-llvm-mingw:
    @@ .github/workflows/mingw.yml (new)
     +          apt-get install -qqy software-properties-common
     +          add-apt-repository --yes ppa:deadsnakes/ppa
     +          apt-get update -qq
    -+          apt-get install -qqy autoconf-archive python3.13-dev python3.13
    ++          apt-get install -qqy autoconf-archive python3.14-dev python3.14
     +
     +      - name: Build
     +        run: |
    @@ .github/workflows/mingw.yml (new)
     
      ## mingw_ignorefile.txt (new) ##
     @@
    -+test.test_compileall.CommandLineTestsNoSourceEpoch.test_d_compile_error
    -+test.test_compileall.CommandLineTestsNoSourceEpoch.test_d_runtime_error
    -+test.test_compileall.CommandLineTestsNoSourceEpoch.test_strip_and_prepend
    -+test.test_compileall.CommandLineTestsWithSourceEpoch.*
    -+test.test_compileall.CommandLineTestsWithSourceEpoch.test_d_compile_error
    -+test.test_compileall.CommandLineTestsWithSourceEpoch.test_d_runtime_error
    -+test.test_compileall.CommandLineTestsWithSourceEpoch.test_strip_and_prepend
    -+test.test_compileall.CompileallTestsWithSourceEpoch.test_ddir_empty_only_one_worker
    -+test.test_compileall.CompileallTestsWithSourceEpoch.test_ddir_multiple_workers
    -+test.test_compileall.CompileallTestsWithSourceEpoch.test_prepend_onl
    -+test.test_compileall.CompileallTestsWithSourceEpoch.test_strip_and_prepend
    -+test.test_compileall.CompileallTestsWithSourceEpoch.test_strip_only
    -+test.test_compileall.CompileallTestsWithSourceEpoch.test_strip_only_invalid
    -+test.test_compileall.CompileallTestsWithoutSourceEpoch.test_ddir_empty_only_one_worker
    -+test.test_compileall.CompileallTestsWithoutSourceEpoch.test_ddir_multiple_workers
    -+test.test_compileall.CompileallTestsWithoutSourceEpoch.test_prepend_only
    -+test.test_compileall.CompileallTestsWithoutSourceEpoch.test_strip_and_prepend
    -+test.test_compileall.CompileallTestsWithoutSourceEpoch.test_strip_only
    -+test.test_compileall.CompileallTestsWithoutSourceEpoch.test_strip_only_invalid
     +test.test_ctypes.test_loading.LoaderTest.test_load_dll_with_flags
     +test.test_import.ImportTests.test_dll_dependency_import
    -+test.test_int.IntStrDigitLimitsTests.test_denial_of_service_prevented_str_to_in
    -+test.test_locale.TestRealLocales.test_setlocale_long_encoding
    -+test.test_math.FMATests.test_fma_infinities
    -+test.test_math.FMATests.test_fma_overflow
    -+test.test_math.FMATests.test_fma_zero_result
    -+test.test_math.FMATests.test_random
    -+test.test_ntpath.NtCommonTest.test_import
     +test.test_site.CommandLineTests.test_no_args
     +test.test_site.HelperFunctionsTests.test_getsitepackages
    -+test.test_site.HelperFunctionsTests.test_get_path
     +test.test_regrtest.ProgramsTestCase.test_pcbuild_rt
     +test.test_regrtest.ProgramsTestCase.test_tools_buildbot_test
     +test.test_venv.BasicTest.test_activate_shell_script_has_no_dos_newlines
    @@ mingw_ignorefile.txt (new)
     +test.test_venv.EnsurePipTest.test_explicit_no_pip
     +test.test_venv.EnsurePipTest.test_no_pip_by_default
     +test.test_multiprocessing_spawn.test_manager.WithManagerTestMyManager.*
    ++test.test_external_inspection.*
    ++test.test_capi.test_object.CAPITest.test_is_unique_temporary
    ++test.test_audit.AuditTest.test_sys_remote_exec
    ++test.test_remote_pdb.PdbAttachTestCase.test_attach_to_process_with_colors
    ++test.test_remote_pdb.PdbAttachTestCase.test_attach_to_process_without_colors
    ++test.test_sys.TestRemoteExec.*
    + \ No newline at end of file
     
      ## mingw_ignorefile_msvcrt.txt (new) ##
     @@
    -+test.datetimetester.TestLocalTimeDisambiguation_Fast.*
    -+test.datetimetester.TestLocalTimeDisambiguation_Pure.*
    ++test.datetimetester.TestDate_Fast.*
    ++test.datetimetester.TestDate_Pure.*
    ++test.datetimetester.TestDateTime_Fast.*
    ++test.datetimetester.TestDateTime_Pure.*
    ++test.datetimetester.TestDateTimeTZ_Fast.*
    ++test.datetimetester.TestDateTimeTZ_Pure.*
    ++test.datetimetester.TestSubclassDateTime_Fast.*
    ++test.datetimetester.TestSubclassDateTime_Pure.*
     +test.test_cmath.CMathTests.test_specific_values
     +test.test_math.MathTests.*
    ++test.test_locale.TestRealLocales.test_setlocale_long_encoding
    ++test.test_math.FMATests.test_fma_infinities
    ++test.test_math.FMATests.test_fma_overflow
    ++test.test_math.FMATests.test_fma_zero_result
    ++test.test_math.FMATests.test_random
    ++test.test_strftime.Y1900Tests.test_y_before_1900
     +test.test_strptime.CalculationTests.*
     +test.test_strptime.StrptimeTests.test_weekday
     +test.test_strptime.TimeRETests.test_compile
     +test.test_tools.test_i18n.Test_pygettext.test_POT_Creation_Date
    + \ No newline at end of file
     
      ## mingw_smoketests.py (new) ##
     @@
  • 53: 713d17c ! 52: 86a31d1 configure: Default to --without-c-locale-coercion on Windows
    @@ Commit message
         Fixes #36
     
      ## configure.ac ##
    -@@ configure.ac: AC_MSG_RESULT([$with_freelists])
    +@@ configure.ac: AC_MSG_RESULT([$with_pymalloc])
      AC_MSG_CHECKING([for --with-c-locale-coercion])
      AC_ARG_WITH(
        [c-locale-coercion],
  • 54: a005691 ! 53: 7de5b11 tests: Fix some failing tests
    @@ Commit message
         - test_sysconfig.py: fix tests related to mingw
     
      ## Lib/test/test_getpath.py ##
    -@@ Lib/test/test_getpath.py: def test_explicitly_set_stdlib_dir(self):
    +@@ Lib/test/test_getpath.py: def test_PYTHONHOME_in_venv(self):
          ENV_PYTHONHOME="",
          ENV_PYTHONEXECUTABLE="",
          ENV___PYVENV_LAUNCHER__="",
  • 55: 9dfb767 = 54: 805371f build: def VPATH when compiling Python/sysmodule.c
  • 56: 7ecc495 ! 55: 24f956e configure: correctly find native python
    @@ configure.ac: AC_SUBST([FREEZE_MODULE])
      
     +NATIVE_PYTHON_SEARCH_PATH_MINGW=`echo $host | grep -Eq 'mingw*' && echo "$MINGW_PREFIX/bin" || echo $PATH`
      AC_CHECK_PROGS([PYTHON_FOR_REGEN],
    -   [python$PACKAGE_VERSION python3.13 python3.12 python3.11 python3.10 python3 python],
    +   [python$PACKAGE_VERSION python3.15 python3.14 python3.13 python3.12 python3.11 python3.10 python3 python],
     -  [python3])
     +  [python3],
     +  [$NATIVE_PYTHON_SEARCH_PATH_MINGW])
  • 57: 775445e = 56: cae7330 build: Add extra flags for _bootstrap_python
  • 58: f7ad7b2 ! 57: 90f9237 getpath: add support for mingw
    @@ Modules/getpath.c: getpath_dirname(PyObject *Py_UNUSED(self), PyObject *args)
     +    }
     +#endif
          if (pos < 0) {
    -         return PyUnicode_FromStringAndSize(NULL, 0);
    +         return Py_GetConstant(Py_CONSTANT_EMPTY_STR);
          }
     @@ Modules/getpath.c: getpath_realpath(PyObject *Py_UNUSED(self) , PyObject *args)
      
    @@ Modules/getpath.py: def search_up(prefix, *landmarks, test=isfile):
                  library_dir = dirname(library)
     @@ Modules/getpath.py: def search_up(prefix, *landmarks, test=isfile):
          else:
    -         pythonpath.append(joinpath(prefix, ZIP_LANDMARK))
    +         pythonpath.append(joinpath(base_prefix, ZIP_LANDMARK))
      
     -    if os_name == 'nt' and use_environment and winreg:
     +    if (not is_mingw) and os_name == 'nt' and use_environment and winreg:
    @@ Modules/getpath.py: def search_up(prefix, *landmarks, test=isfile):
              # as the default value of each subkey of
              # {HKCU,HKLM}\Software\Python\PythonCore\{winver}\PythonPath
     @@ Modules/getpath.py: def search_up(prefix, *landmarks, test=isfile):
    -     if not platstdlib_dir and exec_prefix:
    -         platstdlib_dir = joinpath(exec_prefix, PLATSTDLIB_LANDMARK)
    +     if not platstdlib_dir and base_exec_prefix:
    +         platstdlib_dir = joinpath(base_exec_prefix, PLATSTDLIB_LANDMARK)
      
     -    if os_name == 'nt':
     +    if os_name == 'nt' and (not is_mingw):
    @@ Modules/getpath.py: def search_up(prefix, *landmarks, test=isfile):
      
      
     @@ Modules/getpath.py: def search_up(prefix, *landmarks, test=isfile):
    - 
      # QUIRK: Non-Windows replaces prefix/exec_prefix with defaults when running
      # in build directory. This happens after pythonpath calculation.
    + # Virtual environments using the build directory Python still keep their prefix.
     -if os_name != 'nt' and build_prefix:
    --    prefix = config.get('prefix') or PREFIX
     +if (os_name != 'nt' or is_mingw) and build_prefix:
    -+    prefix = config.get('prefix') or abspath(PREFIX)
    -     exec_prefix = config.get('exec_prefix') or EXEC_PREFIX or prefix
    +     if not venv_prefix:
    +-        prefix = config.get('prefix') or PREFIX
    ++        prefix = config.get('prefix') or abspath(PREFIX)
    +         exec_prefix = config.get('exec_prefix') or EXEC_PREFIX or prefix
    +-    base_prefix = config.get('base_prefix') or PREFIX
    ++    base_prefix = config.get('base_prefix') or abspath(PREFIX)
    +     base_exec_prefix = config.get('base_exec_prefix') or EXEC_PREFIX or base_prefix
      
      
     @@ Modules/getpath.py: def search_up(prefix, *landmarks, test=isfile):
    @@ Modules/getpath.py: def search_up(prefix, *landmarks, test=isfile):
     -config['base_executable'] = base_executable
     -config['prefix'] = prefix
     -config['exec_prefix'] = exec_prefix
    --config['base_prefix'] = base_prefix or prefix
    --config['base_exec_prefix'] = base_exec_prefix or exec_prefix
    +-config['base_prefix'] = base_prefix
    +-config['base_exec_prefix'] = base_exec_prefix
     +config['program_name'] = _normpath(program_name)
     +config['home'] = _normpath(home)
     +config['executable'] = _normpath(executable)
     +config['base_executable'] = _normpath(base_executable)
     +config['prefix'] = _normpath(prefix)
     +config['exec_prefix'] = _normpath(exec_prefix)
    -+config['base_prefix'] = _normpath(base_prefix or prefix)
    -+config['base_exec_prefix'] = _normpath(base_exec_prefix or exec_prefix)
    ++config['base_prefix'] = _normpath(base_prefix)
    ++config['base_exec_prefix'] = _normpath(base_exec_prefix)
      
     -config['platlibdir'] = platlibdir
     +config['platlibdir'] = _normpath(platlibdir)
  • 59: 6765f2c ! 58: e5f4a20 build: Don't build _posixsubprocess on Windows.
    @@ Commit message
         build: Don't build _posixsubprocess on Windows.
     
      ## configure.ac ##
    -@@ configure.ac: PY_STDLIB_MOD_SIMPLE([_json])
    +@@ configure.ac: PY_STDLIB_MOD_SIMPLE([_heapq])
    + PY_STDLIB_MOD_SIMPLE([_json])
      PY_STDLIB_MOD_SIMPLE([_lsprof])
    - PY_STDLIB_MOD_SIMPLE([_opcode])
      PY_STDLIB_MOD_SIMPLE([_pickle])
     -PY_STDLIB_MOD_SIMPLE([_posixsubprocess])
      PY_STDLIB_MOD_SIMPLE([_queue])
      PY_STDLIB_MOD_SIMPLE([_random])
    - PY_STDLIB_MOD_SIMPLE([select])
    + PY_STDLIB_MOD_SIMPLE([_remote_debugging])
     @@ configure.ac: PY_STDLIB_MOD([_scproxy],
        [], [-framework SystemConfiguration -framework CoreFoundation])
      PY_STDLIB_MOD([syslog], [], [test "$ac_cv_header_syslog_h" = yes])
  • 60: 0798476 ! 59: eb0c1b7 ssl module: add MINGW support
    @@ Modules/clinic/_ssl.c.h: exit:
          #define _SSL_ENUM_CERTIFICATES_METHODDEF
     
      ## configure.ac ##
    -@@ configure.ac: PY_STDLIB_MOD([_lzma], [], [test "$have_liblzma" = yes],
    +@@ configure.ac: PY_STDLIB_MOD([_zstd], [], [test "$have_libzstd" = yes],
      
      dnl OpenSSL bindings
      PY_STDLIB_MOD([_ssl], [], [test "$ac_cv_working_openssl_ssl" = yes],
  • 61: 35cbc59 ! 60: 23aebd8 configure: Include winsock.h when checking for netdb function
    @@ configure.ac: AC_CHECK_FUNCS([ \
        sigfillset siginterrupt sigpending sigrelse sigtimedwait sigwait \
        sigwaitinfo snprintf splice strftime strlcpy strsignal symlinkat sync \
        sysconf tcgetpgrp tcsetpgrp tempnam timegm times tmpfile \
    -@@ configure.ac: PKG_CHECK_MODULES([LIBLZMA], [liblzma], [have_liblzma=yes], [
    +@@ configure.ac: PKG_CHECK_MODULES([LIBZSTD], [libzstd >= 1.4.5], [have_libzstd=yes], [
      ])
      
      dnl PY_CHECK_NETDB_FUNC(FUNCTION)
  • 62: 1e7a9a0 = 61: 24a8ef0 configure: always build _multiprocessing on Windows
  • 63: 07bb7f7 = 62: 6320238 configure: build mmap module on win32
  • 64: ea59902 ! 63: c6cbf9e configure: set BUILDEXEEXT and EXEEXT
    @@ Commit message
     
      ## configure.ac ##
     @@ configure.ac: AC_ARG_WITH([suffix],
    -     [Emscripten/browser*], [EXEEXT=.js],
    -     [Emscripten/node*], [EXEEXT=.js],
    -     [WASI/*], [EXEEXT=.wasm],
    +   AS_CASE([$ac_sys_system],
    +     [Emscripten], [EXEEXT=.mjs],
    +     [WASI], [EXEEXT=.wasm],
     +    [MINGW*], [EXEEXT=.exe],
          [EXEEXT=]
        )
    @@ configure.ac: else
     +
      case $ac_sys_system in
      hp*|HP*)
    -     case $CC in
    +     case $ac_cv_cc_name in
  • 65: f1002ab ! 64: bd1fe8b configure: fix building some test modules
    @@ configure.ac: PY_STDLIB_MOD([_testclinic_limited], [test "$TEST_MODULES" = yes])
     +PY_STDLIB_MOD([_testimportmultiple], [test "$TEST_MODULES" = yes], [test "$have_dynamic_loading" = yes])
     +PY_STDLIB_MOD([_testmultiphase], [test "$TEST_MODULES" = yes], [test "$have_dynamic_loading" = yes])
     +PY_STDLIB_MOD([_testsinglephase], [test "$TEST_MODULES" = yes], [test "$have_dynamic_loading" = yes])
    - PY_STDLIB_MOD([_testexternalinspection], [test "$TEST_MODULES" = yes])
      PY_STDLIB_MOD([xxsubtype], [test "$TEST_MODULES" = yes])
      PY_STDLIB_MOD([_xxtestfuzz], [test "$TEST_MODULES" = yes])
      PY_STDLIB_MOD([_testconsole], [test "$TEST_MODULES" = yes -a "$MACHDEP" = "win32"])
      PY_STDLIB_MOD([_ctypes_test],
     -  [test "$TEST_MODULES" = yes], [test "$have_libffi" = yes -a "$ac_cv_func_dlopen" = yes],
     +  [test "$TEST_MODULES" = yes], [test "$have_libffi" = yes -a "$have_dynamic_loading" = yes],
    -   [], [$LIBM])
    +   [$LIBFFI_CFLAGS], [$LIBFFI_LIBS $LIBM])
      
      dnl Limited API template modules.
      dnl Emscripten does not support shared libraries yet.
  • 66: 92e3683 = 65: d71381e Always convert / to \\ before passing though pathcch functions
  • 67: c8ca1c3 = 66: 955464a pylifecycle.h: remove conflicting _Py_CheckPython3 declaration
  • 68: 98a1456 ! 67: 8f73ac0 dynload_win: add env var for reverting the legacy DLL loading paths
    @@ Lib/test/__main__.py
     
      ## Python/dynload_win.c ##
     @@
    - #include "Python.h"
    - #include "pycore_fileutils.h"     // _Py_add_relfile()
    + #include "pycore_importdl.h"      // dl_funcptr
    + #include "pycore_interp.h"        // _PyInterpreterState_GetConfig()
      #include "pycore_pystate.h"       // _PyInterpreterState_GET()
     +#include "pycore_initconfig.h"
      
    - #include "pycore_importdl.h"      // dl_funcptr
      #include "patchlevel.h"           // PY_MAJOR_VERSION
    + #include <windows.h>
     @@ Python/dynload_win.c: dl_funcptr _PyImport_FindSharedFuncptrWindows(const char *prefix,
          _Py_CheckPython3();
      #endif /* Py_ENABLE_SHARED */
  • 69: ee8669a = 68: 5bd8992 dynload_win: Port GetPythonImport() to MINGW
  • 70: 83234c5 = 69: 0e68878 dynload_win: make sure to only use backslashes for paths with LoadLibraryExW
  • 71: c4f101b = 70: 4ea1e17 dynload_win: don't run _Py_CheckPython3 for MINGW builds
  • 72: a419526 ! 71: a547336 build: Build and install libpython3.dll (stable ABI)
    @@ Makefile.pre.in: list-targets:
      
      .PHONY: build_all
      build_all:	check-clean-src check-app-store-compliance $(BUILDPYTHON) $(BUILDPYTHONW) $(BUILDVENVLAUNCHER) $(BUILDVENVWLAUNCHER) platform sharedmods \
    --		gdbhooks Programs/_testembed scripts checksharedmods rundsymutil
    -+		gdbhooks Programs/_testembed scripts checksharedmods rundsymutil $(ABI3DLLLIBRARY) $(ABI3LDLIBRARY)
    +-		gdbhooks Programs/_testembed scripts checksharedmods rundsymutil build-details.json
    ++		gdbhooks Programs/_testembed scripts checksharedmods rundsymutil build-details.json $(ABI3DLLLIBRARY) $(ABI3LDLIBRARY)
      
      .PHONY: build_wasm
      build_wasm: check-clean-src $(BUILDPYTHON) platform sharedmods \
    @@ Makefile.pre.in: $(DLLLIBRARY) libpython$(LDVERSION).dll.a: $(LIBRARY_OBJS) pyth
     +	$(LDSHARED) -DPYTHON_DLL_NAME=\"$(DLLLIBRARY)\" $(srcdir)/PC/python3dll.c -Wl,--out-implib=$(ABI3LDLIBRARY) -o $(ABI3DLLLIBRARY) python3dll_nt.o \
     +		$(LDFLAGS_NODIST);
     +
    - # wasm32-emscripten browser build
    - # wasm assets directory is relative to current build dir, e.g. "./usr/local".
    - # --preload-file turns a relative asset path into an absolute path.
    + # wasm32-emscripten browser web example
    + 
    + EMSCRIPTEN_DIR=$(srcdir)/Tools/wasm/emscripten
     @@ Makefile.pre.in: altbininstall: $(BUILDPYTHON) @FRAMEWORKPYTHONW@
      		if test -f $(LDLIBRARY) && test "$(PYTHONFRAMEWORKDIR)" = "no-framework" ; then \
      			if test -n "$(DLLLIBRARY)" ; then \
  • 73: e3d22cd ! 72: 78f93ce configure: define _DEBUG for a debug build
    @@ configure.ac: _RESTORE_VAR([CFLAGS])
                [PYDEBUG_CFLAGS="-Og"])
     +PYDEBUG_CFLAGS="-D_DEBUG $PYDEBUG_CFLAGS"
      
    - # tweak OPT based on compiler and platform, only if the user didn't set
    - # it on the command line
    + # gh-120688: WASI uses -O3 in debug mode to support more recursive calls
    + if test "$ac_sys_system" = "WASI"; then
  • 74: 5a0c4f1 = 73: 200ca74 configure: fix multiprocessing module
  • 75: 8e1d7d9 ! 74: ddb8271 build: add MINGW support for selectmodule
    @@ configure.ac: AS_CASE([$MACHDEP],
      
      dnl detect sqlite3 from Emscripten emport
      PY_CHECK_EMSCRIPTEN_PORT([LIBSQLITE3], [-sUSE_SQLITE3])
    -@@ configure.ac: PY_STDLIB_MOD_SIMPLE([_opcode])
    - PY_STDLIB_MOD_SIMPLE([_pickle])
    +@@ configure.ac: PY_STDLIB_MOD_SIMPLE([_pickle])
      PY_STDLIB_MOD_SIMPLE([_queue])
      PY_STDLIB_MOD_SIMPLE([_random])
    + PY_STDLIB_MOD_SIMPLE([_remote_debugging])
     -PY_STDLIB_MOD_SIMPLE([select])
     +PY_STDLIB_MOD_SIMPLE([select], [], [$SELECTMODULE_LIBS])
      PY_STDLIB_MOD_SIMPLE([_struct])
    + PY_STDLIB_MOD_SIMPLE([_types])
      PY_STDLIB_MOD_SIMPLE([_typing])
    - PY_STDLIB_MOD_SIMPLE([_interpreters])
  • 76: 2d4d696 ! 75: 6f4f02c configure: disable various modules on MINGW
    @@ configure.ac: AS_CASE([$ac_sys_system],
     +  ],
        [QNX*], [PY_STDLIB_MOD_SET_NA([_scproxy])],
        [FreeBSD*], [PY_STDLIB_MOD_SET_NA([_scproxy])],
    -   [Emscripten|WASI], [
    +   [Emscripten], [
  • 77: e6b73ec ! 76: bd02828 configure: Add libraries to fix ctypes on MINGW
    @@ configure.ac: AS_CASE([$MACHDEP],
      dnl detect sqlite3 from Emscripten emport
      PY_CHECK_EMSCRIPTEN_PORT([LIBSQLITE3], [-sUSE_SQLITE3])
      
    -@@ configure.ac: PY_STDLIB_MOD([_blake2],
    +@@ configure.ac: PY_HACL_CREATE_MODULE([HMAC], [_hmac], [test "$ac_sys_system" != "Emscripten"])
      
      PY_STDLIB_MOD([_ctypes],
        [], [test "$have_libffi" = yes],
    @@ configure.ac: PY_STDLIB_MOD([_xxtestfuzz], [test "$TEST_MODULES" = yes])
      PY_STDLIB_MOD([_testconsole], [test "$TEST_MODULES" = yes -a "$MACHDEP" = "win32"])
      PY_STDLIB_MOD([_ctypes_test],
        [test "$TEST_MODULES" = yes], [test "$have_libffi" = yes -a "$have_dynamic_loading" = yes],
    --  [], [$LIBM])
    -+  [], [$LIBM $CTYPES_LIBS])
    +-  [$LIBFFI_CFLAGS], [$LIBFFI_LIBS $LIBM])
    ++  [$LIBFFI_CFLAGS], [$LIBFFI_LIBS $LIBM $CTYPES_LIBS])
      
      dnl Limited API template modules.
      dnl Emscripten does not support shared libraries yet.
  • 78: 815cf3b = 77: 307159a configure: Enable _uuid on MINGW
  • 79: a034490 ! 78: d6c532c configure: make incompatible-pointer-types a warning
    @@ Commit message
         for now, make it as warning to avoid build failure
     
      ## configure.ac ##
    -@@ configure.ac: case $GCC in
    - yes)
    +@@ configure.ac: fi
    + AS_VAR_IF([ac_cv_gcc_compat], [yes], [
          CFLAGS_NODIST="$CFLAGS_NODIST -std=c11"
      
     +    # GCC 14 and later error out with incompatible-pointer-types
  • 80: 0dc0195 = 79: ea84eb0 tests: test_makefile: normalize path
  • 81: b63dbb5 ! 80: 2c45fd3 Fix include naming for cross build
    @@ Commit message
         The casing and pathseps have to match, so a cross compiler
         on Linux find the files.
     
    +    Co-authored-by: Martin Storsjö <[email protected]>
    +
    + ## Modules/_ctypes/ctypes.h ##
    +@@
    + #endif
    + 
    + #ifdef MS_WIN32
    +-#include <Unknwn.h> // for IUnknown interface
    ++#include <unknwn.h> // for IUnknown interface
    + #endif
    + 
    + typedef struct {
    +
      ## Modules/posixmodule.c ##
     @@ Modules/posixmodule.c: os_setpgrp_impl(PyObject *module)
      
  • 82: 38c8477 = 81: 3a300e5 Fix format warning
  • 83: 49e142c = 82: 518dce7 Fix pragma warnings
  • 84: fae0dd3 = 83: a28d0b3 math, pyhash: MINGW support
  • 85: bcc2f85 < -: ----------- tests: Fix test for library name
  • -: ----------- > 84: 1ec3f6c tests: Fix test for library name
  • 86: 57af595 = 85: 0c136fd dictobject: MINGW support
  • 87: 8a038f8 = 86: 39db6d6 build: Fix export Py_GetBuildInfo symbol
  • 88: 8389875 = 87: 34ec35d build: Allow profile tests failure
  • 89: a4930ab ! 88: 7d1bf46 build: add support for building C++ modules.
    @@ Modules/makesetup: sed -e 's/[ 	]*#.*//' -e '/^[ 	]*$/d' |
      			no)
     -				cc="$cc $cpps \$(PY_STDMODULE_CFLAGS) \$(CCSHARED)"
     +				cc="$cc $cpps $ccflags \$(CCSHARED)"
    - 				rule="$obj: $src \$(MODULE_${mods_upper}_DEPS) \$(MODULE_DEPS_SHARED) \$(PYTHON_HEADERS); $cc -c $src -o $obj"
    + 				rule="$obj: $src \$(MODULE_${mods_upper}_DEPS) \$(MODULE_DEPS_SHARED) \$(PYTHON_HEADERS)"
    + 				rule="$rule; $cc -c $src -o $obj"
      				;;
    - 			*)
     @@ Modules/makesetup: sed -e 's/[ 	]*#.*//' -e '/^[ 	]*$/d' |
      				;;
      			esac
    - 			rule="$file: $objs"
    + 			rule="$file: $objs \$(MODULE_${mods_upper}_LDEPS)"
     -			rule="$rule; \$(BLDSHARED) $objs $libs \$(LIBPYTHON) -o $file"
     +			rule="$rule; $ccld $objs $libs \$(LIBPYTHON) -o $file"
      			echo "$rule" >>$rulesf
  • 90: dca0cf6 = 89: 376eaa3 build: build/fix the wmi module
  • 91: 7198a32 = 90: 38d064a Fix exports for _suggestions module
  • 92: a827697 = 91: 0302013 compileall: Normalize paths
  • 93: e5cafd8 = 92: 3070ceb configure: enable 64-bit time support for 32-bit build
  • 94: 0d600ee = 93: fee0409 configure: Work around broken pc file
  • 95: e719663 ! 94: 91663ce makesetup: make sure a library path is passed when building modules
    @@ Modules/makesetup
     @@ Modules/makesetup: sed -e 's/[ 	]*#.*//' -e '/^[ 	]*$/d' |
      				;;
      			esac
    - 			rule="$file: $objs"
    + 			rule="$file: $objs \$(MODULE_${mods_upper}_LDEPS)"
     -			rule="$rule; $ccld $objs $libs \$(LIBPYTHON) -o $file"
     +			rule="$rule; $ccld $objs $libs \$(BLDLIBRARY) -o $file"
      			echo "$rule" >>$rulesf
  • 96: e3afbc9 = 95: 9246394 venv: also install the versioned launchers
  • 97: e729588 = 96: 9a8acfa configure: set _WIN32_WINNT version
  • 98: 4fb1568 = 97: 052cd82 tests: fix sysconfig.test_get_platform
  • 99: 268ba6f ! 98: 74f5d5b pycore_time: fix missing timeval
    @@ Commit message
     
      ## Include/internal/pycore_time.h ##
     @@ Include/internal/pycore_time.h: extern "C" {
    - #endif
      
    + #include "pycore_runtime_structs.h" // _PyTimeFraction
      
     -#ifdef __clang__
     +#ifdef MS_WINDOWS
  • 100: e39e0eb = 99: 336b330 mmapmodule: define DONT_USE_SEH
  • 101: 27bd52a = 100: e04ba60 build: Add ABIFLAGS to targets when needed
  • 102: 4438b59 < -: ----------- getcompiler: include GCC in sys.version even for clang
  • 103: 0796b35 = 101: 18ae7c0 sysconfig: patch nt schemes again
  • 104: bbd33f4 < -: ----------- Lowercase the include of <Unknwn.h>
  • 105: 1f57755 < -: ----------- CI: build with libffi in cross-gcc-x86_64
  • -: ----------- > 102: 920b344 configure: define _PYTHREAD_NAME_MAXLEN for MINGW
  • -: ----------- > 103: 8a405e4 configure: allow older autoconf
  • -: ----------- > 104: b8bf840 tests: allow sys.abiflags to exist
  • -: ----------- > 105: de3f658 configure: fix AC_PATH_TOOL usage

Braindump:

  • Various commits at the end squashed into previous ones
  • CI: update to use 3.14 on the host
  • In configure.ac, upstream replaced cc_is_clang with ac_cv_cc_name
  • In "mingw: prefer unix sep if MSYSTEM environment variable" I moved setp/altsep above the "os" import to avoid errors due to import cycles
  • I've cleaned up the mingw_ignorefile lists, some things no longer fail, or only fail with msvcrt
  • upstream requires autoconf 2.72, we lower it to 2.71 so it works on Ubuntu 24.04 which is what llvm-mingw is using
  • There is a new _PYTHREAD_NAME_MAXLEN
  • Upstream doesn't have sys.abiflags for Windows. We could hide it, but it's used in some posixy places, so I think we should keep it, unless there are issues.
  • AC_PATH_TOOL usage was broken upstream and not finding the c++cross compiler in PATH (not sure why that hasn't failed before tbh, haven't checked)
  • All the remote debugging stuff is broken, it builds, but fails to connect at runtime. Not sure if that is a permissions issue, or something mingw specific. It can be disabled with --without-remote-debug at build time. I decided to leave it in and just skip all the tests that fail. It's new and just a debugging tool, so I don't think that is a blocker.
  • I needed to disable test_is_unique_temporary because the refcounting is different, no idea why, I hope it's nothing serious.

For future reference, remote debugging fails with:

  • RuntimeError: Failed to find the PyRuntime section in process 8428 on Windows platform
  • RuntimeError: Failed to get Python runtime address

Alexpux and others added 30 commits January 24, 2026 11:37
Co-authored-by: Naveen M K <[email protected]>
Co-authored-by: Алексей <[email protected]>
Co-authored-by: Christoph Reiter <[email protected]>
This is used throughout the Python code but is not defined
when compiling with Mingw-w64 compilers, so define it.
In MSVC these are defined in PC/pyconfig.h, we have to
define it manually because pyconfig.h is created by
autotools.

Co-authored-by: Алексей <[email protected]>
Co-authored-by: Christoph Reiter <[email protected]>
Co-authored-by: Naveen M K <[email protected]>
Co-authored-by: Алексей <[email protected]>
Co-authored-by: Christoph Reiter <[email protected]>
Largefile is supported on Windows.

Co-authored-by: Naveen M K <[email protected]>
Co-authored-by: Алексей <[email protected]>
Co-authored-by: Christoph Reiter <[email protected]>
Also, build `nt` module instead of `posix` when compiling
with MINGW.

Co-authored-by: Naveen M K <[email protected]>
Co-authored-by: Алексей <[email protected]>
Add PYD_PLATFORM_TAG to distinguish C extensions built with different
MinGW toolchain configurations. The tag follows the format:
  mingw_<cpu_arch>_<c_runtime>_<toolchain>

Where:
- cpu_arch: x86_64, i686, aarch64, or armv7
- c_runtime: ucrt or msvcrt
- toolchain: gnu or llvm

This prevents loading extensions built with incompatible configurations.

Co-authored-by: Naveen M K <[email protected]>
Try to match the format defined in pycore_importdl.h for Windows
MS_DLL_ID is used for sys.winver and Windows registry keys
Co-authored-by: Алексей <[email protected]>
Co-authored-by: Naveen M K <[email protected]>
Co-authored-by: Алексей <[email protected]>
Co-authored-by: lovetox <[email protected]>
Co-authored-by: Алексей <[email protected]>
Co-authored-by: Naveen M K <[email protected]>
This would possibly fix building wheels when mingw python
is used and would be unique to each python same as EXT_SUFFIX.

Signed-off-by: Naveen M K <[email protected]>
Co-authored-by: Алексей <[email protected]>
Co-authored-by: Naveen M K <[email protected]>
This is the case used in MINGW

Co-authored-by: Алексей <[email protected]>
Co-authored-by: Алексей <[email protected]>
Co-authored-by: Christoph Reiter <[email protected]>
Just like with MSVC. This fixes a test in test_ctypes.
Co-authored-by: Алексей <[email protected]>
Co-authored-by: Christoph Reiter <[email protected]>
This should avoid mixing of user site-packages between python
from various environments. Previously, the user site-packages
should be located at `~/.local/lib/python3.12` for all environment
including 32-bits variants which caused problems with 64-bit trying to
load 32-bit extensions. Now this path will be changed to
`~/.local/lib/python3.12-<platform tag here>`, for example, in
CLANG64 this would be `~/.local/lib/python3.12-mingw_x86_64_ucrt_llvm`.

Fixes #40
Co-authored-by: Алексей <[email protected]>
Co-authored-by: Christoph Reiter <[email protected]>
so there is no bash required to run it on Windows
os needs ntpath.sep, so define it before importing os

Co-authored-by: Алексей <[email protected]>
Co-authored-by: Christoph Reiter <[email protected]>
Co-authored-by: cat <[email protected]>
Co-authored-by: Naveen M K <[email protected]>
naveen521kk and others added 26 commits January 24, 2026 21:16
The casing and pathseps have to match, so a cross compiler
on Linux find the files.

Co-authored-by: Martin Storsjö <[email protected]>
Invalid "Libs:" value

Also it contains "-L." which is only used at build time by
makesetup and shouldn't be exposed.

python#138800
This is fallout from LIBPYTHON not inluding -L. anymore
Like on Linux we provide python3.x globally, so make
sure those also exist in the venv, so when python3.x is run
the venv version is launched and not the global one.
copy the logic from callproc.c
So we get different names for debug and free threaded builds
setuptools doesn't play along
value copied from the MSVC build config
We require autoreconf to run for the build, and we use
Ubuntu 24.04 for llvm which only ships 2.71. It looks like there
wasno real reason for upstream to require it, so this should be fine.
it's tied to the build system used and not Windows,
and it's used in various places we use such as python-config,
so improve the condition.
It passing "notfound" as the path parameter and not
as the fallback, so this never could have worked
with cross compiling.

Fixes CXX being set to "g++" instead of the cross compiler.

Should be upstreamed.
@lazka lazka marked this pull request as ready for review January 24, 2026 20:43
@lazka lazka merged commit de3f658 into mingw-v3.14.2 Jan 25, 2026
28 checks passed
@lazka lazka deleted the wip/mingw-v3.14.2 branch January 25, 2026 15:16
@lazka lazka mentioned this pull request Jan 25, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants