Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
123 commits
Select commit Hold shift + click to select a range
6ba0de4
sysconfig: make _sysconfigdata.py relocatable
mingwandroid Jun 17, 2021
38561b6
build: add --with-nt-threads and make it default on mingw
Alexpux Jun 17, 2021
d565b95
Define `MS_WINDOWS` (and others) when compiling with MINGW
Alexpux Jun 17, 2021
396c884
configure: add `MACHDEP` and `platform` on MINGW
Alexpux Jun 17, 2021
989e86b
Add default configuration for MINGW
Alexpux Jun 17, 2021
b17d5e3
configure: enable largefile support by default for Mingw
Alexpux Jun 17, 2021
5f97c1f
Add `PC/` to `CPPFLAGS` and to `SRCDIRS` on Mingw
Alexpux Jun 17, 2021
cda6ac7
posixmodule.c: Define necessary headers for compiling on MINGW
Alexpux Jun 17, 2021
8046053
Build winreg by default when compiling for MINGW
Alexpux Jun 17, 2021
65a9539
pyport.h: Add support for MINGW
Alexpux Jun 17, 2021
17ac42a
configure: add options so that shared build is possible on MINGW
Alexpux Jun 17, 2021
3f6018a
Add dynamic loading support for MINGW
Alexpux Jun 17, 2021
1dd0573
Ignore main program for frozen scripts on MINGW
Alexpux Jun 17, 2021
9c79fca
Detect winsock2 and setup _socket module on MINGW
Alexpux Jun 17, 2021
a2f9002
Enable some windows specific modules
naveen521kk Feb 14, 2023
e8f2489
sysconfig: MINGW build extensions with GCC
lazka Sep 21, 2021
0d4ec3e
sysconfig: treat MINGW builds as POSIX builds
Alexpux Jun 17, 2021
3071b51
Add support for stdcall without underscore
Alexpux Jun 17, 2021
dc7508e
Customize site for MINGW
Alexpux Jun 17, 2021
a3da6c3
add python config sh
Alexpux Jun 17, 2021
608ce98
mingw: prefer unix sep if MSYSTEM environment variable
mingwandroid Jun 17, 2021
061c843
msys cygwin semi native build sysconfig
Alexpux Jun 17, 2021
99a6cac
sysconfig: mingw sysconfig like posix
lazka Sep 21, 2021
e0ac354
mingw use backslashes in compileall py
Alexpux Jun 17, 2021
73e185f
mingw pdcurses_ISPAD
Alexpux Jun 17, 2021
b78fb15
remove_path_max.default
Alexpux Jun 17, 2021
a872b0c
dont link with gettext
Alexpux Jun 17, 2021
8f7da60
ctypes python dll
Alexpux Jun 17, 2021
dff5e63
gdbm module includes
Alexpux Jun 17, 2021
86525e2
use gnu_printf in format
Alexpux Jun 17, 2021
9397994
mingw fix ssl dont use enum_certificates
mingwandroid Jun 17, 2021
be3f6f4
fix using dllhandle and winver mingw
Alexpux Jun 17, 2021
28bfd9d
Add AMD64 to sys config so msvccompiler get_build_version works
Alexpux Jun 17, 2021
013c102
MINGW link with additional library
Alexpux Jun 17, 2021
e1e7676
install msilib
saghul Jun 17, 2021
550b26d
fix signal module build
lazka Jun 17, 2021
cfdd9f7
build: build winconsoleio and _testconsole
lazka Jun 17, 2021
4276906
expose sem_unlink
lazka Jun 17, 2021
2d45102
Use cygpty while using isatty
lazka Jun 17, 2021
07aece0
build: link win resource files and build pythonw
lazka Jun 17, 2021
fe710f6
fix isselectable
lazka Jun 17, 2021
f3c6343
configure.ac: fix inet_pton check
lazka Jun 17, 2021
52f1dd3
pass gen profile ldflags
lazka Jun 17, 2021
49c4354
pkg config windows must link ext with python lib
Alexpux Jun 17, 2021
2df9f65
importlib bootstrap path sep
lazka Jun 17, 2021
6c285f5
warnings fixes
Alexpux Jun 17, 2021
5eaa5ec
fix build testinternalcapi
naveen521kk Jun 16, 2023
468ecae
clang arm64
jeremyd2019 Jun 17, 2021
1d05f48
configure.ac: set MINGW stack reserve
jeremyd2019 Jun 17, 2021
d14cee3
Don't use os.pathsep to find EOF
naveen521kk Jun 18, 2021
231b2d4
Fix extension suffix for c-extensions on mingw
naveen521kk Jun 23, 2021
097c217
Change the `get_platform()` method in sysconfig
naveen521kk Sep 21, 2021
b8a2d27
build: Fix ncursesw include lookup
Alexpux Jun 17, 2021
2e26b3e
tests: fix test_bytes
lazka Jul 23, 2021
03671ce
time: fix strftime not raising for invalid year values
lazka Jul 23, 2021
8d8a7d8
ctypes: find_library('c') should return None with ucrt
lazka Jul 23, 2021
fcde121
build: Disable checks for dlopen/dlfcn
lazka Jul 25, 2021
c9f9945
Fix install location of the import library
lazka Jul 25, 2021
5146f24
build: Integrate venvlauncher build/installation into the Makefile
lazka Jul 25, 2021
2a336b4
configure.ac: set _WIN32_WINNT version
lazka Aug 1, 2021
2ceeedc
configure.ac: don't check for clock_ functions
lazka Aug 1, 2021
1cb7dcd
expanduser: normpath paths coming from env vars
lazka Aug 8, 2021
23ec3fc
CI: test the build and add some mingw specific tests
naveen521kk Jun 18, 2021
42eaab0
Define PY3_DLLNAME to fix build
naveen521kk Oct 12, 2021
41c2be5
_testconsole.c: Fix casing & path sep
longnguyen2004 Nov 14, 2021
2c9a956
Return consistent architecture markers for python on mingw/armv7
mstorsjo Nov 19, 2021
c45f5f0
handle ncursesw pkg-config when cross-compiling
jeremyd2019 Nov 23, 2021
76fa04a
mingw_smoketests: fix _UCRT condition
jeremyd2019 Jan 22, 2022
3debb2d
Modify `sys.winver` to match upstream
naveen521kk Jan 19, 2022
4283ac7
Change user site-packages path to include the environment info
naveen521kk Jan 19, 2022
5410b83
configure: Include a header in the check for _beginthread
mstorsjo Apr 21, 2022
c7f7a15
configure.ac: Default to --without-c-locale-coercion on Windows
lazka Apr 22, 2022
3b22a18
Fix failing tests
naveen521kk Jun 5, 2022
b31b52e
Don't change os.sep with an empty MSYSTEM env var, not just a missing…
lazka Sep 22, 2022
df24bb7
def VPATH when compiling `Python/sysmodule.c`
naveen521kk Jun 18, 2023
4184779
Make `_Py_CheckPython3` extern
naveen521kk Jun 18, 2023
67b6568
link with bcrypt
naveen521kk Jun 18, 2023
2726b17
correctly find native python
naveen521kk Jun 18, 2023
fa9ea58
Add extra flags for `_bootstrap_python`
naveen521kk Jun 18, 2023
9d6027c
posixmodule: undefine `HAVE_OPENDIR`
naveen521kk Jun 20, 2023
dc3cb94
getpath.py: add support for mingw
naveen521kk Jun 20, 2023
3ac5f2f
Don't build _posixsubprocess on Windows.
naveen521kk Jun 20, 2023
abc7664
`_ssl`: link with `ws2_32`
naveen521kk Jun 20, 2023
f1102c4
Always normalize path in abspath
naveen521kk Jun 20, 2023
a545605
Include `winsock.h` when checking for netdb function
naveen521kk Jun 21, 2023
97bbe1f
include `_multiprocessing/semaphore.c` on win32
naveen521kk Jun 23, 2023
c2545fb
configure: build `mmap` module on win32
naveen521kk Jun 23, 2023
1441e1c
venv creation fixes
naveen521kk Jun 23, 2023
117dc5b
move the `shutdown` function where `winsock.h` is included
naveen521kk Jun 23, 2023
0cce81e
configure.ac: set BUILDEXEEXT and EXEEXT
lazka Jun 23, 2023
0b0a725
configure.ac: fix building some test modules
lazka Jun 23, 2023
a27d2bb
Don't convert `sysconfig.get_config_var('VPATH')` to an absolute path
naveen521kk Jun 25, 2023
e7b37fa
Always convert `/` to `\\` before passing though pathcch functions
naveen521kk Jun 25, 2023
a935bf3
Build venvlauncher.exe from PC/launcher.c
naveen521kk Jun 25, 2023
8dd0930
getpath.py: fix `dirname`
naveen521kk Jun 25, 2023
1f2a289
getpath: use normpath on all generated paths
lazka Jul 28, 2023
b0908f8
pathconfig: normpath sys.path[0]
lazka Jul 28, 2023
38612d8
smoketests: add some tests for sys/site paths
lazka Jul 28, 2023
066c14b
Search DLLs only on paths added using `add_dll_directory()`.
naveen521kk Aug 5, 2023
7347577
Build and install libpython3.dll
lazka Aug 21, 2023
f78fc1f
Port GetPythonImport() to mingw
lazka Aug 27, 2023
8d63ba2
LoadLibraryExW: make sure to only use backslashes for paths
lazka Aug 27, 2023
34d859b
mingw_smoketests: add a test to check if sysconfig returns correct va…
naveen521kk Nov 8, 2023
618b83d
Add missing library for multiprocessing module
naveen521kk Jan 1, 2024
0f11054
selectmodule: add support for MINGW
naveen521kk Jan 1, 2024
1e2a68c
readline: disable on MINGW
naveen521kk Jan 1, 2024
6fa96e4
Add libraries to fix compile of ctypes on MINGW
naveen521kk Jan 1, 2024
6fbd531
Add `-lpython<version>` while linking stdlib
naveen521kk Jan 1, 2024
6843f1f
Enable `_uuid` on MINGW
naveen521kk Jan 1, 2024
ffe1a51
Enable curses library on MINGW
naveen521kk Jan 1, 2024
81fdef6
mingw_smoketests: disable distutils related tests
naveen521kk Feb 2, 2024
ce67dc2
configure.ac: use autoconf 2.69
naveen521kk Feb 19, 2024
494b966
CI: clean up ignored tests
naveen521kk Feb 20, 2024
8e9d8cd
gcc: make `incompatible-pointer-types` as warning
naveen521kk Jul 11, 2024
d48b2d2
test_makefile: normalize path
naveen521kk Sep 8, 2024
753581b
`sysconfig.get_platform()`: use consistent naming
naveen521kk Sep 12, 2024
ce5f345
Add ucrt to version string
naveen521kk Nov 1, 2024
33a869a
socketmodule: fix captilization of headers
naveen521kk Nov 2, 2024
884f150
mingw_smoketests: build extension in a venv
lazka Dec 22, 2024
8f366d6
venvlauncher: try looking for the versioned .exe first and then fall …
lazka Dec 23, 2024
3fbe82e
CI: update actions
lazka Feb 6, 2025
4fd52ba
CI: test CLANGARM64
jeremyd2019 Jan 24, 2022
5248fde
CI: disable pkg-config
lazka Jun 6, 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
323 changes: 323 additions & 0 deletions .github/workflows/mingw.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,323 @@
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:24.10
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', 'armv7']
include:
- arch: x86_64
runner: windows-latest
- arch: i686
runner: windows-latest
- arch: aarch64
runner: windows-11-arm
# we can test this for now, but Windows 11 24H2 dropped support for
# arm32
- arch: armv7
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