Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
127 commits
Select commit Hold shift + click to select a range
3820da3
sysconfig: make _sysconfigdata.py relocatable
mingwandroid Jun 17, 2021
2115fe6
build: add --with-nt-threads and make it default on mingw
Alexpux Jun 17, 2021
0f488f1
Define `MS_WINDOWS` (and others) when compiling with MINGW
Alexpux Jun 17, 2021
ed0ed20
configure: add `MACHDEP` and `platform` on MINGW
Alexpux Jun 17, 2021
86cc1d2
Add default configuration for MINGW
Alexpux Jun 17, 2021
f3a173a
configure: enable largefile support by default for Mingw
Alexpux Jun 17, 2021
2c9f8d3
Add `PC/` to `CPPFLAGS` and to `SRCDIRS` on Mingw
Alexpux Jun 17, 2021
2976481
posixmodule.c: Define necessary headers for compiling on MINGW
Alexpux Jun 17, 2021
4ef3c6f
Build winreg by default when compiling for MINGW
Alexpux Jun 17, 2021
6e8327c
pyport.h: Add support for MINGW
Alexpux Jun 17, 2021
0ff5f85
configure: add options so that shared build is possible on MINGW
Alexpux Jun 17, 2021
e5719be
Add dynamic loading support for MINGW
Alexpux Jun 17, 2021
69c4541
Ignore main program for frozen scripts on MINGW
Alexpux Jun 17, 2021
477ada1
Detect winsock2 and setup _socket module on MINGW
Alexpux Jun 17, 2021
d7e39c2
Enable some windows specific modules
naveen521kk Feb 14, 2023
407fcf0
sysconfig: MINGW build extensions with GCC
lazka Sep 21, 2021
d6665e5
sysconfig: treat MINGW builds as POSIX builds
Alexpux Jun 17, 2021
2b1bb2c
Add support for stdcall without underscore
Alexpux Jun 17, 2021
877eab8
Customize site for MINGW
Alexpux Jun 17, 2021
dcf5c71
add python config sh
Alexpux Jun 17, 2021
d11b445
mingw: prefer unix sep if MSYSTEM environment variable
mingwandroid Jun 17, 2021
3c642b9
msys cygwin semi native build sysconfig
Alexpux Jun 17, 2021
6b8582b
sysconfig: mingw sysconfig like posix
lazka Sep 21, 2021
e6dd88b
mingw use backslashes in compileall py
Alexpux Jun 17, 2021
1b0d7fd
mingw pdcurses_ISPAD
Alexpux Jun 17, 2021
c205e99
remove_path_max.default
Alexpux Jun 17, 2021
037e878
dont link with gettext
Alexpux Jun 17, 2021
893831a
ctypes python dll
Alexpux Jun 17, 2021
269aa8c
gdbm module includes
Alexpux Jun 17, 2021
cb41ac7
use gnu_printf in format
Alexpux Jun 17, 2021
ac69839
mingw fix ssl dont use enum_certificates
mingwandroid Jun 17, 2021
dbf3d4a
fix using dllhandle and winver mingw
Alexpux Jun 17, 2021
6614b33
Add AMD64 to sys config so msvccompiler get_build_version works
Alexpux Jun 17, 2021
e20536f
MINGW link with additional library
Alexpux Jun 17, 2021
47a51bd
install msilib
saghul Jun 17, 2021
272a424
fix signal module build
lazka Jun 17, 2021
3a96d1d
build: build winconsoleio and _testconsole
lazka Jun 17, 2021
bc6d357
expose sem_unlink
lazka Jun 17, 2021
0f752f5
Use cygpty while using isatty
lazka Jun 17, 2021
f01f088
build: link win resource files and build pythonw
lazka Jun 17, 2021
32e36bc
fix isselectable
lazka Jun 17, 2021
4f10cdb
configure.ac: fix inet_pton check
lazka Jun 17, 2021
0c9d327
pass gen profile ldflags
lazka Jun 17, 2021
08294f9
pkg config windows must link ext with python lib
Alexpux Jun 17, 2021
4d35d46
importlib bootstrap path sep
lazka Jun 17, 2021
e72a237
warnings fixes
Alexpux Jun 17, 2021
114ac5e
fix build testinternalcapi
naveen521kk Jun 16, 2023
852ade1
clang arm64
jeremyd2019 Jun 17, 2021
f598b5a
configure.ac: set MINGW stack reserve
jeremyd2019 Jun 17, 2021
a1d212c
Don't use os.pathsep to find EOF
naveen521kk Jun 18, 2021
3033d58
Fix extension suffix for c-extensions on mingw
naveen521kk Jun 23, 2021
8593bd4
Change the `get_platform()` method in sysconfig
naveen521kk Sep 21, 2021
3e7467b
build: Fix ncursesw include lookup
Alexpux Jun 17, 2021
30836e7
tests: fix test_bytes
lazka Jul 23, 2021
fcfa06e
time: fix strftime not raising for invalid year values
lazka Jul 23, 2021
5e7f059
ctypes: find_library('c') should return None with ucrt
lazka Jul 23, 2021
0a7778d
build: Disable checks for dlopen/dlfcn
lazka Jul 25, 2021
f661c24
Fix install location of the import library
lazka Jul 25, 2021
4e03376
build: Integrate venvlauncher build/installation into the Makefile
lazka Jul 25, 2021
9ec9f0c
configure.ac: set _WIN32_WINNT version
lazka Aug 1, 2021
025f254
configure.ac: don't check for clock_ functions
lazka Aug 1, 2021
f23f3fc
expanduser: normpath paths coming from env vars
lazka Aug 8, 2021
1eaade5
CI: test the build and add some mingw specific tests
naveen521kk Jun 18, 2021
04d4ccf
Define PY3_DLLNAME to fix build
naveen521kk Oct 12, 2021
e6ce651
_testconsole.c: Fix casing & path sep
longnguyen2004 Nov 14, 2021
d8f8e18
Return consistent architecture markers for python on mingw/armv7
mstorsjo Nov 19, 2021
01ea756
handle ncursesw pkg-config when cross-compiling
jeremyd2019 Nov 23, 2021
99dbe20
mingw_smoketests: fix _UCRT condition
jeremyd2019 Jan 22, 2022
12dd8ce
Modify `sys.winver` to match upstream
naveen521kk Jan 19, 2022
5e14885
Change user site-packages path to include the environment info
naveen521kk Jan 19, 2022
077f744
configure: Include a header in the check for _beginthread
mstorsjo Apr 21, 2022
d542017
configure.ac: Default to --without-c-locale-coercion on Windows
lazka Apr 22, 2022
10be5ee
Fix failing tests
naveen521kk Jun 5, 2022
7f17ffb
Don't change os.sep with an empty MSYSTEM env var, not just a missing…
lazka Sep 22, 2022
0aa1973
def VPATH when compiling `Python/sysmodule.c`
naveen521kk Jun 18, 2023
2837bc7
Make `_Py_CheckPython3` extern
naveen521kk Jun 18, 2023
aa75fc6
link with bcrypt
naveen521kk Jun 18, 2023
05873e7
correctly find native python
naveen521kk Jun 18, 2023
5bf2fad
Add extra flags for `_bootstrap_python`
naveen521kk Jun 18, 2023
0732ca8
posixmodule: undefine `HAVE_OPENDIR`
naveen521kk Jun 20, 2023
f05f20c
getpath.py: add support for mingw
naveen521kk Jun 20, 2023
4bb41fc
Don't build _posixsubprocess on Windows.
naveen521kk Jun 20, 2023
a94b38e
`_ssl`: link with `ws2_32`
naveen521kk Jun 20, 2023
a0da3ca
Always normalize path in abspath
naveen521kk Jun 20, 2023
ec73278
Include `winsock.h` when checking for netdb function
naveen521kk Jun 21, 2023
2888fff
include `_multiprocessing/semaphore.c` on win32
naveen521kk Jun 23, 2023
a778e3f
configure: build `mmap` module on win32
naveen521kk Jun 23, 2023
6c6ab84
venv creation fixes
naveen521kk Jun 23, 2023
cd38b41
move the `shutdown` function where `winsock.h` is included
naveen521kk Jun 23, 2023
672b0b0
configure.ac: set BUILDEXEEXT and EXEEXT
lazka Jun 23, 2023
21653df
configure.ac: fix building some test modules
lazka Jun 23, 2023
bd0bf6c
Don't convert `sysconfig.get_config_var('VPATH')` to an absolute path
naveen521kk Jun 25, 2023
ac3e6cf
Always convert `/` to `\\` before passing though pathcch functions
naveen521kk Jun 25, 2023
cda1f36
Build venvlauncher.exe from PC/launcher.c
naveen521kk Jun 25, 2023
16a48fc
getpath.py: fix `dirname`
naveen521kk Jun 25, 2023
f852306
getpath: use normpath on all generated paths
lazka Jul 28, 2023
00d1158
pathconfig: normpath sys.path[0]
lazka Jul 28, 2023
99d67c5
smoketests: add some tests for sys/site paths
lazka Jul 28, 2023
480b3a1
Search DLLs only on paths added using `add_dll_directory()`.
naveen521kk Aug 5, 2023
016327c
Build and install libpython3.dll
lazka Aug 21, 2023
f72f52c
Port GetPythonImport() to mingw
lazka Aug 27, 2023
4538f35
LoadLibraryExW: make sure to only use backslashes for paths
lazka Aug 27, 2023
c7e9b9f
mingw_smoketests: add a test to check if sysconfig returns correct va…
naveen521kk Nov 8, 2023
23c180a
Add missing library for multiprocessing module
naveen521kk Jan 1, 2024
aaee576
selectmodule: add support for MINGW
naveen521kk Jan 1, 2024
31f7d79
readline: disable on MINGW
naveen521kk Jan 1, 2024
aba641d
Add libraries to fix compile of ctypes on MINGW
naveen521kk Jan 1, 2024
f95f4f4
Add `-lpython<version>` while linking stdlib
naveen521kk Jan 1, 2024
b2eab75
Enable `_uuid` on MINGW
naveen521kk Jan 1, 2024
dceead9
Enable curses library on MINGW
naveen521kk Jan 1, 2024
62ef1e6
mingw_smoketests: disable distutils related tests
naveen521kk Feb 2, 2024
9e56012
configure.ac: use autoconf 2.69
naveen521kk Feb 19, 2024
b67e3c6
CI: clean up ignored tests
naveen521kk Feb 20, 2024
9638204
gcc: make `incompatible-pointer-types` as warning
naveen521kk Jul 11, 2024
613d981
test_makefile: normalize path
naveen521kk Sep 8, 2024
c4e2de6
`sysconfig.get_platform()`: use consistent naming
naveen521kk Sep 12, 2024
cc8c05c
Add ucrt to version string
naveen521kk Nov 1, 2024
dee2b16
socketmodule: fix captilization of headers
naveen521kk Nov 2, 2024
b86949a
mingw_smoketests: build extension in a venv
lazka Dec 22, 2024
963fcc7
venvlauncher: try looking for the versioned .exe first and then fall …
lazka Dec 23, 2024
9aec508
CI: update actions
lazka Feb 6, 2025
56fd36b
CI: test CLANGARM64
jeremyd2019 Jan 24, 2022
e15c2cc
CI: disable pkg-config
lazka Jun 6, 2025
9ea3a72
CI: stop testing armv7, no longer possible
lazka Aug 18, 2025
9e12426
venv: install batch scripts
oltolm Aug 17, 2025
5f118e4
winreg: patch cleanup
lazka Aug 31, 2025
e961486
CI: use a newer ubuntu for the cross build
lazka Oct 10, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
319 changes: 319 additions & 0 deletions .github/workflows/mingw.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,319 @@
name: Build
on: [push, pull_request, workflow_dispatch]

jobs:
build:
runs-on: ${{ matrix.runner }}
strategy:
fail-fast: false
matrix:
msystem: ['MINGW64','MINGW32','UCRT64','CLANG64','CLANGARM64']
include:
- msystem: MINGW64
prefix: mingw-w64-x86_64
runner: windows-2022
- msystem: MINGW32
prefix: mingw-w64-i686
runner: windows-2022
- msystem: UCRT64
prefix: mingw-w64-ucrt-x86_64
runner: windows-2022
- msystem: CLANG64
prefix: mingw-w64-clang-x86_64
runner: windows-2022
- msystem: CLANGARM64
prefix: mingw-w64-clang-aarch64
runner: windows-11-arm
steps:
- name: Setup git
run: |
git config --global core.autocrlf false
git config --global core.eol lf
- uses: actions/checkout@v4
- uses: msys2/setup-msys2@v2
with:
msystem: ${{ matrix.msystem }}
release: ${{ matrix.msystem == 'CLANGARM64' }}
update: true
install: >-
make
binutils
autoconf
autoconf-archive
automake-wrapper
tar
gzip
${{ matrix.prefix }}-toolchain
${{ matrix.prefix }}-expat
${{ matrix.prefix }}-bzip2
${{ matrix.prefix }}-libffi
${{ matrix.prefix }}-mpdecimal
${{ matrix.prefix }}-ncurses
${{ matrix.prefix }}-openssl
${{ matrix.prefix }}-sqlite3
${{ matrix.prefix }}-tcl
${{ matrix.prefix }}-tk
${{ matrix.prefix }}-zlib
${{ matrix.prefix }}-xz
${{ matrix.prefix }}-tzdata

- name: Build Python
shell: msys2 {0}
run: |
set -ex

if [[ "${{ matrix.msystem }}" == CLANG* ]]; then
export CC=clang
export CXX=clang++
fi
autoreconf -vfi

rm -Rf _build && mkdir _build && cd _build

../configure \
--prefix=${MINGW_PREFIX} \
--host=${MINGW_CHOST} \
--build=${MINGW_CHOST} \
--enable-shared \
--with-system-expat \
--with-system-libmpdec \
--without-ensurepip \
--enable-loadable-sqlite-extensions \
--with-tzpath=${MINGW_PREFIX}/share/zoneinfo \
--enable-optimizations

make -j8

- name: Run Smoke Test (build)
shell: msys2 {0}
run: |
SMOKETESTS="$(pwd)/mingw_smoketests.py"
cd _build
./python.exe "$SMOKETESTS"
MSYSTEM= ./python.exe "$SMOKETESTS"

- name: Run tests
shell: msys2 {0}
run: |
IGNOREFILE="$(pwd)/mingw_ignorefile.txt"
IGNOREFILE_EXTRA="$IGNOREFILE"
if [[ "${{ matrix.msystem }}" == "MINGW32" ]] || [[ "${{ matrix.msystem }}" == "MINGW64" ]]; then
IGNOREFILE_EXTRA="$(pwd)/mingw_ignorefile_msvcrt.txt"
fi
cd _build
MSYSTEM= ./python.exe -m test -j8 --ignorefile "$IGNOREFILE" --ignorefile "$IGNOREFILE_EXTRA" -W

- name: Run broken tests
continue-on-error: true
shell: msys2 {0}
run: |
IGNOREFILE="$(pwd)/mingw_ignorefile.txt"
IGNOREFILE_EXTRA="$IGNOREFILE"
if [[ "${{ matrix.msystem }}" == "MINGW32" ]] || [[ "${{ matrix.msystem }}" == "MINGW64" ]]; then
IGNOREFILE_EXTRA="$(pwd)/mingw_ignorefile_msvcrt.txt"
fi
cd _build
MSYSTEM= ./python.exe -m test -j8 --matchfile "$IGNOREFILE" --matchfile "$IGNOREFILE_EXTRA" -W

- name: Install
shell: msys2 {0}
run: |
set -ex
cd _build

pkgdir=python_pkgdir

make -j1 install DESTDIR="${pkgdir}"

# Fix shebangs
_pybasever=$(./python.exe -c "import sys; print(f'{sys.version_info[0]}.{sys.version_info[1]}');")
for fscripts in 2to3 2to3-${_pybasever} idle3 idle${_pybasever} pydoc3 pydoc${_pybasever}; do
sed -i "s|$(cygpath -w ${MINGW_PREFIX} | sed 's|\\|\\\\|g')/bin/python${_pybasever}.exe|/usr/bin/env python${_pybasever}.exe|g" "${pkgdir}${MINGW_PREFIX}"/bin/${fscripts}
done
sed -i "s|#!${MINGW_PREFIX}/bin/python${_pybasever}.exe|#!/usr/bin/env python${_pybasever}.exe|" "${pkgdir}${MINGW_PREFIX}"/lib/python${_pybasever}/config-${_pybasever}/python-config.py

# Create version-less aliases
cp "${pkgdir}${MINGW_PREFIX}"/bin/python3.exe "${pkgdir}${MINGW_PREFIX}"/bin/python.exe
cp "${pkgdir}${MINGW_PREFIX}"/bin/python3w.exe "${pkgdir}${MINGW_PREFIX}"/bin/pythonw.exe
cp "${pkgdir}${MINGW_PREFIX}"/bin/python3-config "${pkgdir}${MINGW_PREFIX}"/bin/python-config
cp "${pkgdir}${MINGW_PREFIX}"/bin/idle3 "${pkgdir}${MINGW_PREFIX}"/bin/idle
cp "${pkgdir}${MINGW_PREFIX}"/bin/pydoc3 "${pkgdir}${MINGW_PREFIX}"/bin/pydoc

# copy to /
cp -rf "${pkgdir}"/* /

- name: Run Smoke Test (installed)
shell: msys2 {0}
run: |
SMOKETESTS="$(pwd)/mingw_smoketests.py"
${MINGW_PREFIX}/bin/python.exe "$SMOKETESTS"
MSYSTEM= ${MINGW_PREFIX}/bin/python.exe "$SMOKETESTS"

- name: Compress
if: always()
shell: msys2 {0}
run: |
cd _build
tar -zcf python.tar.gz python_pkgdir/

- name: Upload
uses: actions/upload-artifact@v4
if: always()
with:
name: build-${{ matrix.msystem }}
path: _build/python.tar.gz

cross-gcc-x86_64:
runs-on: ubuntu-latest
container:
image: ubuntu:25.04
steps:
- uses: actions/checkout@v4
- name: Install deps
run: |
apt-get update
DEBIAN_FRONTEND=noninteractive apt-get install -y \
gcc-mingw-w64-x86-64 \
g++-mingw-w64-x86-64 \
autoconf-archive \
autoconf \
automake \
zip \
make \
pkg-config

- uses: actions/setup-python@v5
with:
python-version: '3.12'

- name: Check Python Version
run: |
which python
python --version

- name: Build
run: |
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 \
--enable-shared \
--without-ensurepip \
--enable-loadable-sqlite-extensions \
--with-build-python=yes

make -j8

make install DESTDIR="$(pwd)/install"

- name: 'Zip files'
run: |
zip -r install.zip _build/install

- name: Upload
uses: actions/upload-artifact@v4
with:
name: build-cross-gcc-x86_64
path: install.zip

cross-gcc-x86_64-test:
needs: [cross-gcc-x86_64]
runs-on: windows-latest
steps:
- uses: actions/download-artifact@v4
with:
name: build-cross-gcc-x86_64

- 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())"


cross-llvm-mingw:
runs-on: ubuntu-latest
container:
image: mstorsjo/llvm-mingw:latest
strategy:
fail-fast: false
matrix:
arch: ['x86_64', 'i686', 'aarch64', 'armv7']
steps:
- uses: actions/checkout@v4

- name: Install deps
run: |
export DEBIAN_FRONTEND=noninteractive
apt-get update -qq
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.12-dev python3.12

- name: Build
run: |
autoreconf -vfi

mkdir _build && cd _build

export PKG_CONFIG_LIBDIR=/dev/null
unset PKG_CONFIG_PATH

export CC=${{ matrix.arch }}-w64-mingw32-clang
export CXX=${CC}++
../configure \
--host=${{ matrix.arch }}-w64-mingw32 \
--build=x86_64-pc-linux-gnu \
--enable-shared \
--without-ensurepip \
--without-c-locale-coercion \
--enable-loadable-sqlite-extensions \
--with-build-python=yes

make -j8

make install DESTDIR="$(pwd)/install"

- name: 'Zip files'
run: |
zip -r install.zip _build/install

- name: Upload
uses: actions/upload-artifact@v4
with:
name: build-cross-llvm-mingw-${{ matrix.arch }}
path: install.zip

cross-llvm-mingw-test:
needs: [cross-llvm-mingw]
runs-on: ${{ matrix.runner }}
strategy:
fail-fast: false
matrix:
arch: ['x86_64', 'i686', 'aarch64']
include:
- arch: x86_64
runner: windows-latest
- arch: i686
runner: windows-latest
- arch: aarch64
runner: windows-11-arm
steps:
- uses: actions/download-artifact@v4
with:
name: build-cross-llvm-mingw-${{ matrix.arch }}

- name: 'Run tests'
run: |
if (Test-Path ./_build) {rm -r -fo ./_build}
Add-Type -AssemblyName System.IO.Compression.FileSystem ;
[System.IO.Compression.ZipFile]::ExtractToDirectory("$PWD\install.zip", "$PWD")
./_build/install/usr/local/bin/python3.exe -c "import sysconfig, pprint; pprint.pprint(sysconfig.get_config_vars())"


4 changes: 2 additions & 2 deletions Include/bytesobject.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,9 @@ PyAPI_FUNC(PyObject *) PyBytes_FromStringAndSize(const char *, Py_ssize_t);
PyAPI_FUNC(PyObject *) PyBytes_FromString(const char *);
PyAPI_FUNC(PyObject *) PyBytes_FromObject(PyObject *);
PyAPI_FUNC(PyObject *) PyBytes_FromFormatV(const char*, va_list)
Py_GCC_ATTRIBUTE((format(printf, 1, 0)));
Py_PRINTF(1, 0);
PyAPI_FUNC(PyObject *) PyBytes_FromFormat(const char*, ...)
Py_GCC_ATTRIBUTE((format(printf, 1, 2)));
Py_PRINTF(1, 2);
PyAPI_FUNC(Py_ssize_t) PyBytes_Size(PyObject *);
PyAPI_FUNC(char *) PyBytes_AsString(PyObject *);
PyAPI_FUNC(PyObject *) PyBytes_Repr(PyObject *, int);
Expand Down
2 changes: 1 addition & 1 deletion Include/fileobject.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ Py_DEPRECATED(3.12) PyAPI_DATA(int) Py_UTF8Mode;
#endif

/* A routine to check if a file descriptor can be select()-ed. */
#ifdef _MSC_VER
#ifdef MS_WINDOWS
/* On Windows, any socket fd can be select()-ed, no matter how high */
#define _PyIsSelectable_fd(FD) (1)
#else
Expand Down
10 changes: 10 additions & 0 deletions Include/internal/pycore_condvar.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,12 @@
# error "this header requires Py_BUILD_CORE define"
#endif

#ifdef __MINGW32__
# if !defined(HAVE_PTHREAD_H) || defined(NT_THREADS)
# undef _POSIX_THREADS
# endif
#endif

#ifndef _POSIX_THREADS
/* This means pthreads are not implemented in libc headers, hence the macro
not present in unistd.h. But they still can be implemented as an external
Expand Down Expand Up @@ -41,6 +47,10 @@
# define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h> // CRITICAL_SECTION
/* winpthreads are involved via windows header, so need undef _POSIX_THREADS after header include */
#if defined(_POSIX_THREADS)
#undef _POSIX_THREADS
#endif

/* options */
/* non-emulated condition variables are provided for those that want
Expand Down
Loading
Loading