Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
122 commits
Select commit Hold shift + click to select a range
70bab43
sysconfig: make _sysconfigdata.py relocatable
mingwandroid Jun 17, 2021
e2584af
build: add --with-nt-threads and make it default on mingw
Alexpux Jun 17, 2021
651a0f8
Define `MS_WINDOWS` (and others) when compiling with MINGW
Alexpux Jun 17, 2021
b5e144e
configure: add `MACHDEP` and `platform` on MINGW
Alexpux Jun 17, 2021
b0ffdfd
Add default configuration for MINGW
Alexpux Jun 17, 2021
c870543
configure: enable largefile support by default for Mingw
Alexpux Jun 17, 2021
4ef28f8
Add `PC/` to `CPPFLAGS` and to `SRCDIRS` on Mingw
Alexpux Jun 17, 2021
1056ca4
posixmodule.c: Define necessary headers for compiling on MINGW
Alexpux Jun 17, 2021
1dc9a69
Build winreg by default when compiling for MINGW
Alexpux Jun 17, 2021
fb030fb
pyport.h: Add support for MINGW
Alexpux Jun 17, 2021
f89e260
configure: add options so that shared build is possible on MINGW
Alexpux Jun 17, 2021
2fa60d1
Add dynamic loading support for MINGW
Alexpux Jun 17, 2021
622d44d
Ignore main program for frozen scripts on MINGW
Alexpux Jun 17, 2021
15603f8
Detect winsock2 and setup _socket module on MINGW
Alexpux Jun 17, 2021
4c4fa2f
Enable some windows specific modules
naveen521kk Feb 14, 2023
da21e49
sysconfig: MINGW build extensions with GCC
lazka Sep 21, 2021
b072673
sysconfig: treat MINGW builds as POSIX builds
Alexpux Jun 17, 2021
0316a86
Add support for stdcall without underscore
Alexpux Jun 17, 2021
6291658
Customize site for MINGW
Alexpux Jun 17, 2021
12201dc
add python config sh
Alexpux Jun 17, 2021
c7e92a6
mingw: prefer unix sep if MSYSTEM environment variable
mingwandroid Jun 17, 2021
67aef22
msys cygwin semi native build sysconfig
Alexpux Jun 17, 2021
315d81f
sysconfig: mingw sysconfig like posix
lazka Sep 21, 2021
072ff40
mingw use backslashes in compileall py
Alexpux Jun 17, 2021
d1b24d4
mingw pdcurses_ISPAD
Alexpux Jun 17, 2021
64ea6e4
remove_path_max.default
Alexpux Jun 17, 2021
303ceee
dont link with gettext
Alexpux Jun 17, 2021
79a179c
ctypes python dll
Alexpux Jun 17, 2021
1a19840
gdbm module includes
Alexpux Jun 17, 2021
3d35ed8
use gnu_printf in format
Alexpux Jun 17, 2021
98c7f82
mingw fix ssl dont use enum_certificates
mingwandroid Jun 17, 2021
b7edd90
fix using dllhandle and winver mingw
Alexpux Jun 17, 2021
ee575ff
Add AMD64 to sys config so msvccompiler get_build_version works
Alexpux Jun 17, 2021
80a5479
MINGW link with additional library
Alexpux Jun 17, 2021
419b585
install msilib
saghul Jun 17, 2021
79b4fd3
fix signal module build
lazka Jun 17, 2021
0092433
build: build winconsoleio and _testconsole
lazka Jun 17, 2021
ecec00a
expose sem_unlink
lazka Jun 17, 2021
3e5da55
Use cygpty while using isatty
lazka Jun 17, 2021
9417841
build: link win resource files and build pythonw
lazka Jun 17, 2021
40d8928
fix isselectable
lazka Jun 17, 2021
4f7f990
configure.ac: fix inet_pton check
lazka Jun 17, 2021
4ba545d
pass gen profile ldflags
lazka Jun 17, 2021
856611c
pkg config windows must link ext with python lib
Alexpux Jun 17, 2021
f1c012d
importlib bootstrap path sep
lazka Jun 17, 2021
90e63e3
warnings fixes
Alexpux Jun 17, 2021
d4699e7
fix build testinternalcapi
naveen521kk Jun 16, 2023
f14104a
clang arm64
jeremyd2019 Jun 17, 2021
9ca9a38
configure.ac: set MINGW stack reserve
jeremyd2019 Jun 17, 2021
c7cfa8e
Don't use os.pathsep to find EOF
naveen521kk Jun 18, 2021
813b8b7
Fix extension suffix for c-extensions on mingw
naveen521kk Jun 23, 2021
92f9d3c
Change the `get_platform()` method in sysconfig
naveen521kk Sep 21, 2021
566627c
build: Fix ncursesw include lookup
Alexpux Jun 17, 2021
9f78c20
tests: fix test_bytes
lazka Jul 23, 2021
37d370c
time: fix strftime not raising for invalid year values
lazka Jul 23, 2021
06ce4a2
ctypes: find_library('c') should return None with ucrt
lazka Jul 23, 2021
c257585
build: Disable checks for dlopen/dlfcn
lazka Jul 25, 2021
70aa50a
Fix install location of the import library
lazka Jul 25, 2021
1c3a6ce
build: Integrate venvlauncher build/installation into the Makefile
lazka Jul 25, 2021
c20a829
configure.ac: set _WIN32_WINNT version
lazka Aug 1, 2021
4262bd5
configure.ac: don't check for clock_ functions
lazka Aug 1, 2021
75bd12c
expanduser: normpath paths coming from env vars
lazka Aug 8, 2021
6c4b8c8
CI: test the build and add some mingw specific tests
naveen521kk Jun 18, 2021
f61cd58
Define PY3_DLLNAME to fix build
naveen521kk Oct 12, 2021
dace02e
_testconsole.c: Fix casing & path sep
longnguyen2004 Nov 14, 2021
d7f45cc
Return consistent architecture markers for python on mingw/armv7
mstorsjo Nov 19, 2021
d162f1d
handle ncursesw pkg-config when cross-compiling
jeremyd2019 Nov 23, 2021
5520f77
mingw_smoketests: fix _UCRT condition
jeremyd2019 Jan 22, 2022
d77bb16
Modify `sys.winver` to match upstream
naveen521kk Jan 19, 2022
e808beb
Change user site-packages path to include the environment info
naveen521kk Jan 19, 2022
e2ca452
configure: Include a header in the check for _beginthread
mstorsjo Apr 21, 2022
dc09df5
configure.ac: Default to --without-c-locale-coercion on Windows
lazka Apr 22, 2022
9d27166
Fix failing tests
naveen521kk Jun 5, 2022
8f547fc
Don't change os.sep with an empty MSYSTEM env var, not just a missing…
lazka Sep 22, 2022
86fe7ab
def VPATH when compiling `Python/sysmodule.c`
naveen521kk Jun 18, 2023
17921da
Make `_Py_CheckPython3` extern
naveen521kk Jun 18, 2023
7f44e20
link with bcrypt
naveen521kk Jun 18, 2023
7d377bd
correctly find native python
naveen521kk Jun 18, 2023
3cf81b7
Add extra flags for `_bootstrap_python`
naveen521kk Jun 18, 2023
435ac83
posixmodule: undefine `HAVE_OPENDIR`
naveen521kk Jun 20, 2023
5d62a5d
getpath.py: add support for mingw
naveen521kk Jun 20, 2023
b8cde35
Don't build _posixsubprocess on Windows.
naveen521kk Jun 20, 2023
b54da9f
`_ssl`: link with `ws2_32`
naveen521kk Jun 20, 2023
1222380
Always normalize path in abspath
naveen521kk Jun 20, 2023
42f3b79
Include `winsock.h` when checking for netdb function
naveen521kk Jun 21, 2023
c0c7ce1
include `_multiprocessing/semaphore.c` on win32
naveen521kk Jun 23, 2023
beb7cea
configure: build `mmap` module on win32
naveen521kk Jun 23, 2023
21f62ec
venv creation fixes
naveen521kk Jun 23, 2023
f1073a3
move the `shutdown` function where `winsock.h` is included
naveen521kk Jun 23, 2023
fc0dd6b
configure.ac: set BUILDEXEEXT and EXEEXT
lazka Jun 23, 2023
d35b2e5
configure.ac: fix building some test modules
lazka Jun 23, 2023
ee9142c
Don't convert `sysconfig.get_config_var('VPATH')` to an absolute path
naveen521kk Jun 25, 2023
9431777
Always convert `/` to `\\` before passing though pathcch functions
naveen521kk Jun 25, 2023
316fbde
Build venvlauncher.exe from PC/launcher.c
naveen521kk Jun 25, 2023
6e1d779
getpath.py: fix `dirname`
naveen521kk Jun 25, 2023
638d1da
getpath: use normpath on all generated paths
lazka Jul 28, 2023
50b88dd
pathconfig: normpath sys.path[0]
lazka Jul 28, 2023
1b61d6b
smoketests: add some tests for sys/site paths
lazka Jul 28, 2023
9825b41
Search DLLs only on paths added using `add_dll_directory()`.
naveen521kk Aug 5, 2023
4769814
Build and install libpython3.dll
lazka Aug 21, 2023
1cb727a
Port GetPythonImport() to mingw
lazka Aug 27, 2023
e754b07
LoadLibraryExW: make sure to only use backslashes for paths
lazka Aug 27, 2023
f95b319
mingw_smoketests: add a test to check if sysconfig returns correct va…
naveen521kk Nov 8, 2023
442dc1b
Add missing library for multiprocessing module
naveen521kk Jan 1, 2024
05e22b5
selectmodule: add support for MINGW
naveen521kk Jan 1, 2024
6968f18
readline: disable on MINGW
naveen521kk Jan 1, 2024
ab99d16
Add libraries to fix compile of ctypes on MINGW
naveen521kk Jan 1, 2024
bf939ee
Add `-lpython<version>` while linking stdlib
naveen521kk Jan 1, 2024
d6e7bc7
Enable `_uuid` on MINGW
naveen521kk Jan 1, 2024
f291913
Enable curses library on MINGW
naveen521kk Jan 1, 2024
53f904e
mingw_smoketests: disable distutils related tests
naveen521kk Feb 2, 2024
904c421
configure.ac: use autoconf 2.69
naveen521kk Feb 19, 2024
780ad60
CI: clean up ignored tests
naveen521kk Feb 20, 2024
c202fe4
gcc: make `incompatible-pointer-types` as warning
naveen521kk Jul 11, 2024
f5a51b2
test_makefile: normalize path
naveen521kk Sep 8, 2024
bd5af5e
`sysconfig.get_platform()`: use consistent naming
naveen521kk Sep 12, 2024
1e21203
Add ucrt to version string
naveen521kk Nov 1, 2024
5a2828b
socketmodule: fix captilization of headers
naveen521kk Nov 2, 2024
62b2ff3
mingw_smoketests: build extension in a venv
lazka Dec 22, 2024
271f0da
venvlauncher: try looking for the versioned .exe first and then fall …
lazka Dec 23, 2024
082ef86
CI: update actions
lazka Feb 6, 2025
a02e0a4
CI: test CLANGARM64
jeremyd2019 Jan 24, 2022
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
317 changes: 317 additions & 0 deletions .github/workflows/mingw.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,317 @@
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

../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 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