python3.12: new package
This commit is contained in:
2
mingw-w64-python3.12/.gitignore
vendored
Normal file
2
mingw-w64-python3.12/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
cpython/
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
From b9c69bf57cd419396c4bf6c566c556303421ada4 Mon Sep 17 00:00:00 2001
|
||||
From: Ray Donnelly <mingw.android@gmail.com>
|
||||
Date: Thu, 17 Jun 2021 18:51:10 +0530
|
||||
Subject: [PATCH 001/N] sysconfig: make _sysconfigdata.py relocatable
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Co-authored-by: Алексей <alexey.pawlow@gmail.com>
|
||||
Co-authored-by: lovetox <8661218+lovetox@users.noreply.github.com>
|
||||
---
|
||||
Lib/sysconfig.py | 20 ++++++++++++++++++++
|
||||
1 file changed, 20 insertions(+)
|
||||
|
||||
diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py
|
||||
index 122d441..8122a7a 100644
|
||||
--- a/Lib/sysconfig.py
|
||||
+++ b/Lib/sysconfig.py
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
import os
|
||||
import sys
|
||||
+import textwrap
|
||||
import threading
|
||||
from os.path import realpath
|
||||
|
||||
@@ -519,11 +520,30 @@ def _generate_posix_vars():
|
||||
os.makedirs(pybuilddir, exist_ok=True)
|
||||
destfile = os.path.join(pybuilddir, name + '.py')
|
||||
|
||||
+ replacement = """
|
||||
+ keys_to_replace = [
|
||||
+ 'BINDIR', 'BINLIBDEST', 'CONFINCLUDEDIR',
|
||||
+ 'CONFINCLUDEPY', 'DESTDIRS', 'DESTLIB', 'DESTSHARED',
|
||||
+ 'INCLDIRSTOMAKE', 'INCLUDEDIR', 'INCLUDEPY',
|
||||
+ 'LIBDEST', 'LIBDIR', 'LIBPC', 'LIBPL', 'MACHDESTLIB',
|
||||
+ 'MANDIR', 'SCRIPTDIR', 'datarootdir', 'exec_prefix',
|
||||
+ 'TZPATH',
|
||||
+ ]
|
||||
+
|
||||
+ prefix = build_time_vars['BINDIR'][:-4]
|
||||
+
|
||||
+ for key in keys_to_replace:
|
||||
+ value = build_time_vars[key]
|
||||
+ build_time_vars[key] = value.replace(prefix, sys.base_prefix)
|
||||
+ """
|
||||
+
|
||||
with open(destfile, 'w', encoding='utf8') as f:
|
||||
+ f.write('import sys\n')
|
||||
f.write('# system configuration generated and used by'
|
||||
' the sysconfig module\n')
|
||||
f.write('build_time_vars = ')
|
||||
pprint.pprint(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:
|
||||
@@ -0,0 +1,290 @@
|
||||
From c349719ad44b2b32e41822cf758b67a4b98765be Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?=
|
||||
<alexey.pawlow@gmail.com>
|
||||
Date: Thu, 17 Jun 2021 18:51:12 +0530
|
||||
Subject: [PATCH 002/N] build: add --with-nt-threads and make it default on
|
||||
mingw
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Co-authored-by: Naveen M K <naveen521kk@gmail.com>
|
||||
Co-authored-by: Алексей <alexey.pawlow@gmail.com>
|
||||
Co-authored-by: Christoph Reiter <reiter.christoph@gmail.com>
|
||||
---
|
||||
Include/internal/pycore_condvar.h | 10 ++
|
||||
Include/pythread.h | 6 ++
|
||||
Modules/_multiprocessing/multiprocessing.h | 5 +-
|
||||
configure.ac | 102 ++++++++++++++++++++-
|
||||
pyconfig.h.in | 3 +
|
||||
5 files changed, 122 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/Include/internal/pycore_condvar.h b/Include/internal/pycore_condvar.h
|
||||
index 981c962..ed9e6a7 100644
|
||||
--- a/Include/internal/pycore_condvar.h
|
||||
+++ b/Include/internal/pycore_condvar.h
|
||||
@@ -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
|
||||
@@ -39,6 +45,10 @@
|
||||
/* include windows if it hasn't been done before */
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <windows.h>
|
||||
+/* 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
|
||||
diff --git a/Include/pythread.h b/Include/pythread.h
|
||||
index 6371443..5e84e3c 100644
|
||||
--- a/Include/pythread.h
|
||||
+++ b/Include/pythread.h
|
||||
@@ -7,6 +7,12 @@ typedef void *PyThread_type_lock;
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
+#ifdef __MINGW32__
|
||||
+# if !defined(HAVE_PTHREAD_H) || defined(NT_THREADS)
|
||||
+# undef _POSIX_THREADS
|
||||
+# endif
|
||||
+#endif
|
||||
+
|
||||
/* Return status codes for Python lock acquisition. Chosen for maximum
|
||||
* backwards compatibility, ie failure -> 0, success -> 1. */
|
||||
typedef enum PyLockStatus {
|
||||
diff --git a/Modules/_multiprocessing/multiprocessing.h b/Modules/_multiprocessing/multiprocessing.h
|
||||
index dfc2a8e..dc92a23 100644
|
||||
--- a/Modules/_multiprocessing/multiprocessing.h
|
||||
+++ b/Modules/_multiprocessing/multiprocessing.h
|
||||
@@ -23,7 +23,10 @@
|
||||
# endif
|
||||
# define SEM_HANDLE HANDLE
|
||||
# define SEM_VALUE_MAX LONG_MAX
|
||||
-# define HAVE_MP_SEMAPHORE
|
||||
+# define HAVE_MP_SEMAPHORE
|
||||
+# if defined(HAVE_SEM_OPEN) && defined(_POSIX_THREADS)
|
||||
+# include <semaphore.h>
|
||||
+# endif
|
||||
#else
|
||||
# include <fcntl.h> /* O_CREAT and O_EXCL */
|
||||
# if defined(HAVE_SEM_OPEN) && !defined(POSIX_SEMAPHORES_NOT_ENABLED)
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index bd2be94..2979f2a 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -2689,6 +2689,53 @@ then
|
||||
BASECFLAGS="$BASECFLAGS $ac_arch_flags"
|
||||
fi
|
||||
|
||||
+dnl NOTE:
|
||||
+dnl - GCC 4.4+ for mingw* require and use posix threads(pthreads-w32)
|
||||
+dnl - Host may contain installed pthreads-w32.
|
||||
+dnl - On windows platform only NT-thread model is supported.
|
||||
+dnl To avoid miss detection scipt first will check for NT-thread model
|
||||
+dnl and if is not found will try to detect build options for pthread
|
||||
+dnl model. Autodetection could be overiden if variable with_nt_threads
|
||||
+dnl is set in "Site Configuration" (see autoconf manual).
|
||||
+dnl If NT-thread model is enabled script skips some checks that
|
||||
+dnl impact build process. When a new functionality is added, developers
|
||||
+dnl are responsible to update configure script to avoid thread models
|
||||
+dnl to be mixed.
|
||||
+
|
||||
+AC_MSG_CHECKING([for --with-nt-threads])
|
||||
+AC_ARG_WITH(nt-threads,
|
||||
+ AS_HELP_STRING([--with-nt-threads], [build with windows threads (default is system-dependent)]),
|
||||
+[
|
||||
+ case $withval in
|
||||
+ no) with_nt_threads=no;;
|
||||
+ yes) with_nt_threads=yes;;
|
||||
+ *) with_nt_threads=yes;;
|
||||
+ esac
|
||||
+], [
|
||||
+ case $host in
|
||||
+ *-*-mingw*) with_nt_threads=yes;;
|
||||
+ *) with_nt_threads=no;;
|
||||
+ esac
|
||||
+])
|
||||
+AC_MSG_RESULT([$with_nt_threads])
|
||||
+
|
||||
+if test $with_nt_threads = yes ; then
|
||||
+AC_MSG_CHECKING([whether linking with nt-threads work])
|
||||
+AC_LINK_IFELSE([
|
||||
+ AC_LANG_PROGRAM([[]],[[_beginthread(0, 0, 0);]])
|
||||
+ ],
|
||||
+ [AC_MSG_RESULT([yes])],
|
||||
+ [AC_MSG_ERROR([failed to link with nt-threads])])
|
||||
+fi
|
||||
+
|
||||
+if test $with_nt_threads = yes ; then
|
||||
+ dnl temporary default flag to avoid additional pthread checks
|
||||
+ dnl and initilize other ac..thread flags to no
|
||||
+ ac_cv_pthread_is_default=no
|
||||
+ ac_cv_kthread=no
|
||||
+ ac_cv_pthread=no
|
||||
+ dnl ac_cv_kpthread is set to no if default is yes (see below)
|
||||
+else
|
||||
# On some compilers, pthreads are available without further options
|
||||
# (e.g. MacOS X). On some of these systems, the compiler will not
|
||||
# complain if unaccepted options are passed (e.g. gcc on Mac OS X).
|
||||
@@ -2800,6 +2847,8 @@ int main(void){
|
||||
CC="$ac_save_cc"])
|
||||
fi
|
||||
|
||||
+fi
|
||||
+
|
||||
# If we have set a CC compiler flag for thread support then
|
||||
# check if it works for CXX, too.
|
||||
if test ! -z "$CXX"
|
||||
@@ -2819,6 +2868,10 @@ elif test "$ac_cv_pthread" = "yes"
|
||||
then
|
||||
CXX="$CXX -pthread"
|
||||
ac_cv_cxx_thread=yes
|
||||
+elif test "$with_nt_threads" = "yes"
|
||||
+then
|
||||
+ dnl set to always to skip extra pthread check below
|
||||
+ ac_cv_cxx_thread=always
|
||||
else
|
||||
ac_cv_cxx_thread=no
|
||||
fi
|
||||
@@ -2860,8 +2913,8 @@ AC_CHECK_HEADERS([ \
|
||||
alloca.h asm/types.h bluetooth.h conio.h crypt.h direct.h dlfcn.h endian.h errno.h fcntl.h grp.h \
|
||||
ieeefp.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/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 \
|
||||
+ setjmp.h shadow.h signal.h spawn.h stropts.h sys/audioio.h sys/bsdtty.h sys/devpoll.h \
|
||||
sys/endian.h sys/epoll.h sys/event.h sys/eventfd.h sys/file.h sys/ioctl.h sys/kern_control.h \
|
||||
sys/loadavg.h sys/lock.h sys/memfd.h sys/mkdev.h sys/mman.h sys/modem.h sys/param.h sys/poll.h \
|
||||
sys/random.h sys/resource.h sys/select.h sys/sendfile.h sys/socket.h sys/soundcard.h sys/stat.h \
|
||||
@@ -2872,6 +2925,14 @@ AC_CHECK_HEADERS([ \
|
||||
AC_HEADER_DIRENT
|
||||
AC_HEADER_MAJOR
|
||||
|
||||
+# If using nt threads, don't look for pthread.h or thread.h
|
||||
+if test "x$with_nt_threads" = xno ; then
|
||||
+AC_HEADER_STDC
|
||||
+AC_CHECK_HEADERS(pthread.h sched.h thread.h)
|
||||
+AC_HEADER_DIRENT
|
||||
+AC_HEADER_MAJOR
|
||||
+fi
|
||||
+
|
||||
# bluetooth/bluetooth.h has been known to not compile with -std=c99.
|
||||
# http://permalink.gmane.org/gmane.linux.bluez.kernel/22294
|
||||
SAVE_CFLAGS=$CFLAGS
|
||||
@@ -3084,6 +3145,10 @@ elif test "$ac_cv_pthread" = "yes"
|
||||
then CC="$CC -pthread"
|
||||
fi
|
||||
|
||||
+if test $with_nt_threads = yes ; then
|
||||
+ dnl skip check for pthread_t if NT-thread model is enabled
|
||||
+ ac_cv_have_pthread_t=skip
|
||||
+else
|
||||
AC_CACHE_CHECK([for pthread_t], [ac_cv_have_pthread_t], [
|
||||
AC_COMPILE_IFELSE([
|
||||
AC_LANG_PROGRAM([[@%:@include <pthread.h>]], [[pthread_t x; x = *(pthread_t*)0;]])
|
||||
@@ -3115,7 +3180,7 @@ AS_VAR_IF([ac_cv_pthread_key_t_is_arithmetic_type], [yes], [
|
||||
AC_DEFINE([PTHREAD_KEY_T_IS_COMPATIBLE_WITH_INT], [1],
|
||||
[Define if pthread_key_t is compatible with int.])
|
||||
])
|
||||
-
|
||||
+fi
|
||||
CC="$ac_save_cc"
|
||||
|
||||
AC_MSG_CHECKING([for --enable-framework])
|
||||
@@ -3629,10 +3694,15 @@ AS_VAR_IF([have_uuid], [missing], [
|
||||
|
||||
AS_VAR_IF([have_uuid], [missing], [have_uuid=no])
|
||||
|
||||
+if test $with_nt_threads = yes ; then
|
||||
+ dnl do not search for sem_init if NT-thread model is enabled
|
||||
+ :
|
||||
+else
|
||||
# 'Real Time' functions on Solaris
|
||||
# posix4 on Solaris 2.6
|
||||
# pthread (first!) on Linux
|
||||
AC_SEARCH_LIBS([sem_init], [pthread rt posix4])
|
||||
+fi
|
||||
|
||||
# check if we need libintl for locale functions
|
||||
AC_CHECK_LIB([intl], [textdomain],
|
||||
@@ -4352,6 +4422,11 @@ then
|
||||
CXX="$CXX -pthread"
|
||||
fi
|
||||
posix_threads=yes
|
||||
+elif test $with_nt_threads = yes
|
||||
+then
|
||||
+ posix_threads=no
|
||||
+ AC_DEFINE(NT_THREADS, 1,
|
||||
+ [Define to 1 if you want to use native NT threads])
|
||||
else
|
||||
if test ! -z "$withval" -a -d "$withval"
|
||||
then LDFLAGS="$LDFLAGS -L$withval"
|
||||
@@ -4868,6 +4943,15 @@ else
|
||||
fi
|
||||
|
||||
# checks for library functions
|
||||
+if test $with_nt_threads = yes ; then
|
||||
+ dnl GCC(mingw) 4.4+ require and use posix threads(pthreads-w32)
|
||||
+ dnl and host may contain installed pthreads-w32.
|
||||
+ dnl Skip checks for some functions declared in pthreads-w32 if
|
||||
+ dnl NT-thread model is enabled.
|
||||
+ ac_cv_func_pthread_kill=skip
|
||||
+ ac_cv_func_sem_open=skip
|
||||
+ ac_cv_func_sched_setscheduler=skip
|
||||
+fi
|
||||
AC_CHECK_FUNCS([ \
|
||||
accept4 alarm bind_textdomain_codeset chmod chown clock close_range confstr \
|
||||
copy_file_range ctermid dup dup3 execv explicit_bzero explicit_memset \
|
||||
@@ -5763,6 +5847,10 @@ 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
|
||||
dnl sem_open results in a 'Signal 12' error.
|
||||
+if test $with_nt_threads = yes ; then
|
||||
+ dnl skip posix semaphores test if NT-thread model is enabled
|
||||
+ ac_cv_posix_semaphores_enabled=no
|
||||
+fi
|
||||
AC_CACHE_CHECK([whether POSIX semaphores are enabled], [ac_cv_posix_semaphores_enabled],
|
||||
AC_RUN_IFELSE([
|
||||
AC_LANG_SOURCE([
|
||||
@@ -5796,6 +5884,14 @@ AS_VAR_IF([ac_cv_posix_semaphores_enabled], [no], [
|
||||
])
|
||||
|
||||
dnl Multiprocessing check for broken sem_getvalue
|
||||
+if test $with_nt_threads = yes ; then
|
||||
+ dnl Skip test if NT-thread model is enabled.
|
||||
+ dnl NOTE the test case below fail for pthreads-w32 as:
|
||||
+ dnl - SEM_FAILED is not defined;
|
||||
+ dnl - sem_open is a stub;
|
||||
+ dnl - sem_getvalue work(!).
|
||||
+ ac_cv_broken_sem_getvalue=skip
|
||||
+fi
|
||||
AC_CACHE_CHECK([for broken sem_getvalue], [ac_cv_broken_sem_getvalue],
|
||||
AC_RUN_IFELSE([
|
||||
AC_LANG_SOURCE([
|
||||
diff --git a/pyconfig.h.in b/pyconfig.h.in
|
||||
index 6d370f6..0321d25 100644
|
||||
--- a/pyconfig.h.in
|
||||
+++ b/pyconfig.h.in
|
||||
@@ -1553,6 +1553,9 @@
|
||||
/* Define if mvwdelch in curses.h is an expression. */
|
||||
#undef MVWDELCH_IS_EXPRESSION
|
||||
|
||||
+/* Define to 1 if you want to use native NT threads */
|
||||
+#undef NT_THREADS
|
||||
+
|
||||
/* Define to the address where bug reports for this package should be sent. */
|
||||
#undef PACKAGE_BUGREPORT
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
From 54c49640c27b4f838fe30aee43041a3be79ecd5c Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?=
|
||||
<alexey.pawlow@gmail.com>
|
||||
Date: Thu, 17 Jun 2021 18:51:13 +0530
|
||||
Subject: [PATCH 003/N] Define `MS_WINDOWS` (and others) when compiling with
|
||||
MINGW
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
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: Алексей <alexey.pawlow@gmail.com>
|
||||
Co-authored-by: Christoph Reiter <reiter.christoph@gmail.com>
|
||||
Co-authored-by: Naveen M K <naveen521kk@gmail.com>
|
||||
---
|
||||
Include/pyport.h | 38 ++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 38 insertions(+)
|
||||
|
||||
diff --git a/Include/pyport.h b/Include/pyport.h
|
||||
index 35eca72..82e848e 100644
|
||||
--- a/Include/pyport.h
|
||||
+++ b/Include/pyport.h
|
||||
@@ -53,6 +53,44 @@
|
||||
#endif
|
||||
|
||||
|
||||
+#ifdef __MINGW32__
|
||||
+/* Translate GCC[mingw*] platform specific defines to those
|
||||
+ * used in python code.
|
||||
+ */
|
||||
+#if !defined(MS_WIN64) && defined(_WIN64)
|
||||
+# define MS_WIN64
|
||||
+#endif
|
||||
+#if !defined(MS_WIN32) && defined(_WIN32)
|
||||
+# define MS_WIN32
|
||||
+#endif
|
||||
+#if !defined(MS_WINDOWS) && defined(MS_WIN32)
|
||||
+# define MS_WINDOWS
|
||||
+#endif
|
||||
+
|
||||
+#if defined(Py_BUILD_CORE) || defined(Py_BUILD_CORE_BUILTIN) || defined(Py_BUILD_CORE_MODULE)
|
||||
+#include <winapifamily.h>
|
||||
+
|
||||
+#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
|
||||
+#define MS_WINDOWS_DESKTOP
|
||||
+#endif
|
||||
+#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
|
||||
+#define MS_WINDOWS_APP
|
||||
+#endif
|
||||
+#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_SYSTEM)
|
||||
+#define MS_WINDOWS_SYSTEM
|
||||
+#endif
|
||||
+#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_GAMES)
|
||||
+#define MS_WINDOWS_GAMES
|
||||
+#endif
|
||||
+
|
||||
+/* Define to 1 if you support windows console io */
|
||||
+#if defined(MS_WINDOWS_DESKTOP) || defined(MS_WINDOWS_APP) || defined(MS_WINDOWS_SYSTEM)
|
||||
+#define HAVE_WINDOWS_CONSOLE_IO 1
|
||||
+#endif
|
||||
+#endif /* Py_BUILD_CORE || Py_BUILD_CORE_BUILTIN || Py_BUILD_CORE_MODULE */
|
||||
+
|
||||
+#endif /* __MINGW32__*/
|
||||
+
|
||||
/**************************************************************************
|
||||
Symbols and macros to supply platform-independent interfaces to basic
|
||||
C language & library operations whose spellings vary across platforms.
|
||||
@@ -0,0 +1,61 @@
|
||||
From 4f7786cbf80ab351640db780bca57829dbc00419 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?=
|
||||
<alexey.pawlow@gmail.com>
|
||||
Date: Thu, 17 Jun 2021 18:51:14 +0530
|
||||
Subject: [PATCH 004/N] configure: add `MACHDEP` and `platform` on MINGW
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Co-authored-by: Алексей <alexey.pawlow@gmail.com>
|
||||
---
|
||||
configure.ac | 15 +++++++++++++++
|
||||
1 file changed, 15 insertions(+)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 2979f2a..aa28593 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -550,6 +550,9 @@ then
|
||||
*-*-cygwin*)
|
||||
ac_sys_system=Cygwin
|
||||
;;
|
||||
+ *-*-mingw*)
|
||||
+ ac_sys_system=MINGW
|
||||
+ ;;
|
||||
*-*-vxworks*)
|
||||
ac_sys_system=VxWorks
|
||||
;;
|
||||
@@ -585,6 +588,7 @@ then
|
||||
linux*) MACHDEP="linux";;
|
||||
cygwin*) MACHDEP="cygwin";;
|
||||
darwin*) MACHDEP="darwin";;
|
||||
+ mingw*) MACHDEP="win32";;
|
||||
'') MACHDEP="unknown";;
|
||||
esac
|
||||
|
||||
@@ -618,6 +622,9 @@ if test "$cross_compiling" = yes; then
|
||||
;;
|
||||
wasm32-*-* | wasm64-*-*)
|
||||
_host_cpu=$host_cpu
|
||||
+ ;;
|
||||
+ *-*-mingw*)
|
||||
+ _host_cpu=
|
||||
;;
|
||||
*)
|
||||
# for now, limit cross builds to known configurations
|
||||
@@ -625,6 +632,14 @@ if test "$cross_compiling" = yes; then
|
||||
AC_MSG_ERROR([cross build not supported for $host])
|
||||
esac
|
||||
_PYTHON_HOST_PLATFORM="$MACHDEP${_host_cpu:+-$_host_cpu}"
|
||||
+
|
||||
+ case "$host_os" in
|
||||
+ mingw*)
|
||||
+ # As sys.platform() return 'win32' to build python and extantions
|
||||
+ # we will use 'mingw' (in setup.py and etc.)
|
||||
+ _PYTHON_HOST_PLATFORM=mingw
|
||||
+ ;;
|
||||
+ esac
|
||||
fi
|
||||
|
||||
# Some systems cannot stand _XOPEN_SOURCE being defined at all; they
|
||||
@@ -0,0 +1,87 @@
|
||||
From 0c2a00c27aa730a861db559b8d4271ff03993c4b Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?=
|
||||
<alexey.pawlow@gmail.com>
|
||||
Date: Thu, 17 Jun 2021 18:51:15 +0530
|
||||
Subject: [PATCH 005/N] Add default configuration for MINGW
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Co-authored-by: Алексей <alexey.pawlow@gmail.com>
|
||||
Co-authored-by: Christoph Reiter <reiter.christoph@gmail.com>
|
||||
---
|
||||
Misc/config_mingw | 12 ++++++++++++
|
||||
Misc/cross_mingw32 | 11 +++++++++++
|
||||
configure.ac | 22 ++++++++++++++++++++++
|
||||
3 files changed, 45 insertions(+)
|
||||
create mode 100644 Misc/config_mingw
|
||||
create mode 100644 Misc/cross_mingw32
|
||||
|
||||
diff --git a/Misc/config_mingw b/Misc/config_mingw
|
||||
new file mode 100644
|
||||
index 0000000..513065d
|
||||
--- /dev/null
|
||||
+++ b/Misc/config_mingw
|
||||
@@ -0,0 +1,12 @@
|
||||
+# configure defaults for mingw* hosts
|
||||
+
|
||||
+# mingw functions to ignore
|
||||
+ac_cv_func_ftruncate=ignore # implement it as _chsize
|
||||
+
|
||||
+# mingw-w64 functions to ignore
|
||||
+ac_cv_func_truncate=ignore
|
||||
+ac_cv_func_alarm=ignore
|
||||
+
|
||||
+# files to ignore
|
||||
+ac_cv_file__dev_ptmx=ignore #NOTE: under MSYS environment device exist
|
||||
+ac_cv_file__dev_ptc=no
|
||||
diff --git a/Misc/cross_mingw32 b/Misc/cross_mingw32
|
||||
new file mode 100644
|
||||
index 0000000..03fde9e
|
||||
--- /dev/null
|
||||
+++ b/Misc/cross_mingw32
|
||||
@@ -0,0 +1,11 @@
|
||||
+# configure defaults for mingw32 host if cross-build
|
||||
+
|
||||
+ac_cv_little_endian_double=yes
|
||||
+ac_cv_big_endian_double=no
|
||||
+ac_cv_mixed_endian_double=no
|
||||
+
|
||||
+ac_cv_tanh_preserves_zero_sign=yes
|
||||
+
|
||||
+ac_cv_wchar_t_signed=no
|
||||
+
|
||||
+ac_cv_have_size_t_format=no
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index aa28593..e214b00 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -1205,6 +1205,28 @@ AC_CACHE_CHECK([for -Wl,--no-as-needed], [ac_cv_wl_no_as_needed], [
|
||||
])
|
||||
AC_SUBST([NO_AS_NEEDED])
|
||||
|
||||
+# initialize default configuration
|
||||
+py_config=
|
||||
+case $host in
|
||||
+ *-*-mingw*) py_config=mingw ;;
|
||||
+esac
|
||||
+if test -n "$py_config" ; then
|
||||
+ AC_MSG_NOTICE([loading configure defaults from .../Misc/config_$py_config"])
|
||||
+ . "$srcdir/Misc/config_$py_config"
|
||||
+fi
|
||||
+
|
||||
+# initialize defaults for cross-builds
|
||||
+if test "$cross_compiling" = yes; then
|
||||
+ py_config=$host_os
|
||||
+ case $py_config in
|
||||
+ mingw32*) py_config=mingw32 ;;
|
||||
+ esac
|
||||
+ if test -f "$srcdir/Misc/cross_$py_config" ; then
|
||||
+ AC_MSG_NOTICE([loading cross defaults from .../Misc/cross_$py_config"])
|
||||
+ . "$srcdir/Misc/cross_$py_config"
|
||||
+ fi
|
||||
+fi
|
||||
+
|
||||
AC_MSG_CHECKING([for the Android API level])
|
||||
cat > conftest.c <<EOF
|
||||
#ifdef __ANDROID__
|
||||
@@ -0,0 +1,34 @@
|
||||
From cdbf83278a1e6e00c8d3bfbd10a40c25d5fa5db4 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?=
|
||||
<alexey.pawlow@gmail.com>
|
||||
Date: Thu, 17 Jun 2021 18:51:16 +0530
|
||||
Subject: [PATCH 006/N] configure: enable largefile support by default for
|
||||
Mingw
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Largefile is supported on Windows.
|
||||
|
||||
Co-authored-by: Naveen M K <naveen521kk@gmail.com>
|
||||
Co-authored-by: Алексей <alexey.pawlow@gmail.com>
|
||||
Co-authored-by: Christoph Reiter <reiter.christoph@gmail.com>
|
||||
---
|
||||
configure.ac | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index e214b00..16c7164 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -3152,6 +3152,10 @@ dnl LFS does not work with Emscripten 3.1
|
||||
AS_CASE([$ac_sys_system],
|
||||
[Emscripten], [have_largefile_support="no"]
|
||||
)
|
||||
+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"]
|
||||
+)
|
||||
AS_VAR_IF([have_largefile_support], [yes], [
|
||||
AC_DEFINE([HAVE_LARGEFILE_SUPPORT], [1],
|
||||
[Defined to enable large file support when an off_t is bigger than a long
|
||||
@@ -0,0 +1,44 @@
|
||||
From 37424ab3b952ded46011f744b709ce44a281fa5d Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?=
|
||||
<alexey.pawlow@gmail.com>
|
||||
Date: Thu, 17 Jun 2021 18:51:18 +0530
|
||||
Subject: [PATCH 007/N] Add `PC/` to `CPPFLAGS` and to `SRCDIRS` on Mingw
|
||||
|
||||
Co-authored-by: Naveen M K <naveen521kk@gmail.com>
|
||||
---
|
||||
configure.ac | 15 +++++++++++++++
|
||||
1 file changed, 15 insertions(+)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 16c7164..a3904b3 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -6862,6 +6862,16 @@ do
|
||||
THREADHEADERS="$THREADHEADERS \$(srcdir)/$h"
|
||||
done
|
||||
|
||||
+case $host in
|
||||
+ *-*-mingw*)
|
||||
+ dnl Required for windows builds as Objects/exceptions.c require
|
||||
+ dnl "errmap.h" from $srcdir/PC.
|
||||
+ dnl Note we cannot use BASECPPFLAGS as autogenerated pyconfig.h
|
||||
+ dnl has to be before customized located in ../PC.
|
||||
+ CPPFLAGS="-I\$(srcdir)/PC $CPPFLAGS"
|
||||
+ ;;
|
||||
+esac
|
||||
+
|
||||
AC_SUBST([SRCDIRS])
|
||||
SRCDIRS="\
|
||||
Modules \
|
||||
@@ -6884,6 +6894,11 @@ SRCDIRS="\
|
||||
Python \
|
||||
Python/frozen_modules \
|
||||
Python/deepfreeze"
|
||||
+
|
||||
+case $host in
|
||||
+ *-*-mingw*) SRCDIRS="$SRCDIRS PC";;
|
||||
+esac
|
||||
+
|
||||
AC_MSG_CHECKING([for build directories])
|
||||
for dir in $SRCDIRS; do
|
||||
if test ! -d $dir; then
|
||||
@@ -0,0 +1,114 @@
|
||||
From 63c64473df6079c92cf5548a0560303db0f2f22c Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?=
|
||||
<alexey.pawlow@gmail.com>
|
||||
Date: Thu, 17 Jun 2021 18:51:19 +0530
|
||||
Subject: [PATCH 008/N] posixmodule.c: Define necessary headers for compiling
|
||||
on MINGW
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Also, build `nt` module instead of `posix` when compiling
|
||||
with MINGW.
|
||||
|
||||
Co-authored-by: Naveen M K <naveen521kk@gmail.com>
|
||||
Co-authored-by: Алексей <alexey.pawlow@gmail.com>
|
||||
---
|
||||
Modules/Setup.bootstrap.in | 2 +-
|
||||
Modules/posixmodule.c | 28 ++++++++++++++++++++++++----
|
||||
configure.ac | 8 ++++++++
|
||||
3 files changed, 33 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/Modules/Setup.bootstrap.in b/Modules/Setup.bootstrap.in
|
||||
index 8ef0f20..1f21d35 100644
|
||||
--- a/Modules/Setup.bootstrap.in
|
||||
+++ b/Modules/Setup.bootstrap.in
|
||||
@@ -8,7 +8,7 @@
|
||||
# module C APIs are used in core
|
||||
atexit atexitmodule.c
|
||||
faulthandler faulthandler.c
|
||||
-posix posixmodule.c
|
||||
+@INITSYS@ posixmodule.c
|
||||
_signal signalmodule.c
|
||||
_tracemalloc _tracemalloc.c
|
||||
|
||||
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
|
||||
index 0ac5a8d..0d6bb01 100644
|
||||
--- a/Modules/posixmodule.c
|
||||
+++ b/Modules/posixmodule.c
|
||||
@@ -361,6 +361,26 @@ corresponding Unix manual entries for more information on calls.");
|
||||
# define HAVE_PIPE 1
|
||||
# define HAVE_FSYNC 1
|
||||
# define fsync _commit
|
||||
+#elif defined(__MINGW32__) /* GCC for windows hosts */
|
||||
+/* getlogin is detected by configure on mingw-w64 */
|
||||
+# undef HAVE_GETLOGIN
|
||||
+/*# define HAVE_GETCWD 1 - detected by configure*/
|
||||
+# define HAVE_GETPPID 1
|
||||
+# define HAVE_GETLOGIN 1
|
||||
+# define HAVE_SPAWNV 1
|
||||
+# define HAVE_WSPAWNV 1
|
||||
+# define HAVE_WEXECV 1
|
||||
+/*# define HAVE_EXECV 1 - detected by configure*/
|
||||
+# define HAVE_PIPE 1
|
||||
+# define HAVE_POPEN 1
|
||||
+# define HAVE_SYSTEM 1
|
||||
+# define HAVE_CWAIT 1
|
||||
+# define HAVE_FSYNC 1
|
||||
+# define fsync _commit
|
||||
+# include <winioctl.h>
|
||||
+# ifndef _MAX_ENV
|
||||
+# define _MAX_ENV 32767
|
||||
+# endif
|
||||
#endif /* ! __WATCOMC__ || __QNX__ */
|
||||
|
||||
/*[clinic input]
|
||||
@@ -438,7 +458,7 @@ extern char *ctermid_r(char *);
|
||||
# endif
|
||||
#endif
|
||||
|
||||
-#ifdef _MSC_VER
|
||||
+#ifdef MS_WINDOWS
|
||||
# ifdef HAVE_DIRECT_H
|
||||
# include <direct.h>
|
||||
# endif
|
||||
@@ -449,7 +469,7 @@ 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
|
||||
@@ -1536,9 +1556,9 @@ _Py_Sigset_Converter(PyObject *obj, void *addr)
|
||||
** man environ(7).
|
||||
*/
|
||||
#include <crt_externs.h>
|
||||
-#elif !defined(_MSC_VER) && (!defined(__WATCOMC__) || defined(__QNX__) || defined(__VXWORKS__))
|
||||
+#elif !defined(MS_WINDOWS) && (!defined(__WATCOMC__) || defined(__QNX__) || defined(__VXWORKS__))
|
||||
extern char **environ;
|
||||
-#endif /* !_MSC_VER */
|
||||
+#endif /* !MS_WINDOWS */
|
||||
|
||||
static PyObject *
|
||||
convertenviron(void)
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index a3904b3..9372127 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -755,6 +755,14 @@ then
|
||||
[Define to include mbstate_t for mbrtowc])
|
||||
fi
|
||||
|
||||
+AC_MSG_CHECKING([for init system calls])
|
||||
+AC_SUBST(INITSYS)
|
||||
+case $host in
|
||||
+ *-*-mingw*) INITSYS=nt;;
|
||||
+ *) INITSYS=posix;;
|
||||
+esac
|
||||
+AC_MSG_RESULT([$INITSYS])
|
||||
+
|
||||
# Record the configure-time value of MACOSX_DEPLOYMENT_TARGET,
|
||||
# it may influence the way we can build extensions, so distutils
|
||||
# needs to check it
|
||||
@@ -0,0 +1,77 @@
|
||||
From 6ae67a8b1f0df130fc9e29db25e7c5ec2b30eaac Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?=
|
||||
<alexey.pawlow@gmail.com>
|
||||
Date: Thu, 17 Jun 2021 18:51:20 +0530
|
||||
Subject: [PATCH 009/N] Build winreg by default when compiling for MINGW
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Co-authored-by: Алексей <alexey.pawlow@gmail.com>
|
||||
Co-authored-by: Christoph Reiter <reiter.christoph@gmail.com>
|
||||
Co-authored-by: Naveen M K <naveen521kk@gmail.com>
|
||||
---
|
||||
Modules/Setup.bootstrap.in | 3 +++
|
||||
PC/winreg.c | 19 +++++++++++++++++++
|
||||
configure.ac | 7 +++++++
|
||||
3 files changed, 29 insertions(+)
|
||||
|
||||
diff --git a/Modules/Setup.bootstrap.in b/Modules/Setup.bootstrap.in
|
||||
index 1f21d35..3def7e8 100644
|
||||
--- a/Modules/Setup.bootstrap.in
|
||||
+++ b/Modules/Setup.bootstrap.in
|
||||
@@ -34,3 +34,6 @@ _symtable symtablemodule.c
|
||||
|
||||
# for systems without $HOME env, used by site._getuserbase()
|
||||
@MODULE_PWD_TRUE@pwd pwdmodule.c
|
||||
+
|
||||
+# build-in modules for windows platform:
|
||||
+@USE_WIN32_MODULE@winreg ../PC/winreg.c
|
||||
diff --git a/PC/winreg.c b/PC/winreg.c
|
||||
index e2d5322..368291d 100644
|
||||
--- a/PC/winreg.c
|
||||
+++ b/PC/winreg.c
|
||||
@@ -19,6 +19,25 @@
|
||||
#include "structmember.h" // PyMemberDef
|
||||
#include <windows.h>
|
||||
|
||||
+#ifndef SIZEOF_HKEY
|
||||
+/* used only here */
|
||||
+#if defined(MS_WIN64)
|
||||
+# define SIZEOF_HKEY 8
|
||||
+#elif defined(MS_WIN32)
|
||||
+# define SIZEOF_HKEY 4
|
||||
+#else
|
||||
+# error "SIZEOF_HKEY is not defined"
|
||||
+#endif
|
||||
+#endif
|
||||
+
|
||||
+#ifndef REG_LEGAL_CHANGE_FILTER
|
||||
+#define REG_LEGAL_CHANGE_FILTER (\
|
||||
+ REG_NOTIFY_CHANGE_NAME |\
|
||||
+ REG_NOTIFY_CHANGE_ATTRIBUTES |\
|
||||
+ REG_NOTIFY_CHANGE_LAST_SET |\
|
||||
+ REG_NOTIFY_CHANGE_SECURITY )
|
||||
+#endif
|
||||
+
|
||||
#if defined(MS_WINDOWS_DESKTOP) || defined(MS_WINDOWS_SYSTEM) || defined(MS_WINDOWS_GAMES)
|
||||
|
||||
typedef struct {
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 9372127..5a936ea 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -4437,6 +4437,13 @@ done
|
||||
IFS=$as_save_IFS
|
||||
AC_MSG_RESULT([$DBM_CFLAGS $DBM_LIBS])
|
||||
|
||||
+# Determine if windows modules should be used.
|
||||
+AC_SUBST(USE_WIN32_MODULE)
|
||||
+USE_WIN32_MODULE='#'
|
||||
+case $host in
|
||||
+ *-*-mingw*) USE_WIN32_MODULE=;;
|
||||
+esac
|
||||
+
|
||||
# Templates for things AC_DEFINEd more than once.
|
||||
# For a single AC_DEFINE, no template is needed.
|
||||
AH_TEMPLATE([_REENTRANT],
|
||||
@@ -0,0 +1,64 @@
|
||||
From e64166a220e620d1f8f96ea674ed2e2961cc8fa9 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?=
|
||||
<alexey.pawlow@gmail.com>
|
||||
Date: Thu, 17 Jun 2021 18:51:23 +0530
|
||||
Subject: [PATCH 010/N] pyport.h: Add support for MINGW
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Co-authored-by: Алексей <alexey.pawlow@gmail.com>
|
||||
---
|
||||
Include/pyport.h | 20 +++++++++++---------
|
||||
1 file changed, 11 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/Include/pyport.h b/Include/pyport.h
|
||||
index 82e848e..b7f3e66 100644
|
||||
--- a/Include/pyport.h
|
||||
+++ b/Include/pyport.h
|
||||
@@ -532,12 +532,12 @@ extern char * _getpty(int *, int, mode_t, int);
|
||||
*/
|
||||
|
||||
/*
|
||||
- All windows ports, except cygwin, are handled in PC/pyconfig.h.
|
||||
+ Only MSVC windows ports is handled in PC/pyconfig.h.
|
||||
|
||||
- Cygwin is the only other autoconf platform requiring special
|
||||
+ Cygwin and Mingw is the only other autoconf platform requiring special
|
||||
linkage handling and it uses __declspec().
|
||||
*/
|
||||
-#if defined(__CYGWIN__)
|
||||
+#if defined(__CYGWIN__) || defined(__MINGW32__)
|
||||
# define HAVE_DECLSPEC_DLL
|
||||
#endif
|
||||
|
||||
@@ -550,21 +550,23 @@ extern char * _getpty(int *, int, mode_t, int);
|
||||
# define PyAPI_FUNC(RTYPE) Py_EXPORTED_SYMBOL RTYPE
|
||||
# define PyAPI_DATA(RTYPE) extern Py_EXPORTED_SYMBOL RTYPE
|
||||
/* module init functions inside the core need no external linkage */
|
||||
- /* except for Cygwin to handle embedding */
|
||||
-# if defined(__CYGWIN__)
|
||||
+ /* except for Cygwin/Mingw to handle embedding */
|
||||
+# if defined(__CYGWIN__) || defined(__MINGW32__)
|
||||
# define PyMODINIT_FUNC Py_EXPORTED_SYMBOL PyObject*
|
||||
-# else /* __CYGWIN__ */
|
||||
+# else /* __CYGWIN__ || __MINGW32__*/
|
||||
# define PyMODINIT_FUNC PyObject*
|
||||
-# endif /* __CYGWIN__ */
|
||||
+# endif /* __CYGWIN__ || __MINGW32__*/
|
||||
# else /* Py_BUILD_CORE */
|
||||
/* Building an extension module, or an embedded situation */
|
||||
/* public Python functions and data are imported */
|
||||
/* Under Cygwin, auto-import functions to prevent compilation */
|
||||
/* failures similar to those described at the bottom of 4.1: */
|
||||
/* http://docs.python.org/extending/windows.html#a-cookbook-approach */
|
||||
-# if !defined(__CYGWIN__)
|
||||
+# if defined(__CYGWIN__) || defined(__MINGW32__)
|
||||
+# define PyAPI_FUNC(RTYPE) RTYPE
|
||||
+# else
|
||||
# define PyAPI_FUNC(RTYPE) Py_IMPORTED_SYMBOL RTYPE
|
||||
-# endif /* !__CYGWIN__ */
|
||||
+# endif /* __CYGWIN__ || __MINGW32__*/
|
||||
# define PyAPI_DATA(RTYPE) extern Py_IMPORTED_SYMBOL RTYPE
|
||||
/* module init functions outside the core must be exported */
|
||||
# if defined(__cplusplus)
|
||||
@@ -0,0 +1,59 @@
|
||||
From 175caef177d1d8c2a86160fbb8c51b8158d7bf1b Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?=
|
||||
<alexey.pawlow@gmail.com>
|
||||
Date: Thu, 17 Jun 2021 18:51:24 +0530
|
||||
Subject: [PATCH 011/N] configure: add options so that shared build is
|
||||
possible on MINGW
|
||||
|
||||
Co-authored-by: Naveen M K <naveen521kk@gmail.com>
|
||||
---
|
||||
configure.ac | 15 ++++++++++++++-
|
||||
1 file changed, 14 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 5a936ea..1eb61be 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -1549,6 +1549,11 @@ if test $enable_shared = "yes"; then
|
||||
LDLIBRARY='libpython$(LDVERSION).dll.a'
|
||||
DLLLIBRARY='libpython$(LDVERSION).dll'
|
||||
;;
|
||||
+ MINGW*)
|
||||
+ LDLIBRARY='libpython$(LDVERSION).dll.a'
|
||||
+ DLLLIBRARY='libpython$(LDVERSION).dll'
|
||||
+ BLDLIBRARY='-L. -lpython$(LDVERSION)'
|
||||
+ ;;
|
||||
SunOS*)
|
||||
LDLIBRARY='libpython$(LDVERSION).so'
|
||||
BLDLIBRARY='-Wl,-R,$(LIBDIR) -L. -lpython$(LDVERSION)'
|
||||
@@ -1599,6 +1604,9 @@ else # shared is disabled
|
||||
BLDLIBRARY='$(LIBRARY)'
|
||||
LDLIBRARY='libpython$(LDVERSION).dll.a'
|
||||
;;
|
||||
+ MINGW*)
|
||||
+ LDLIBRARY='libpython$(LDVERSION).a'
|
||||
+ ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
@@ -3495,6 +3503,10 @@ then
|
||||
CYGWIN*)
|
||||
LDSHARED="gcc -shared -Wl,--enable-auto-image-base"
|
||||
LDCXXSHARED="g++ -shared -Wl,--enable-auto-image-base";;
|
||||
+ MINGW*)
|
||||
+ LDSHARED='$(CC) -shared -Wl,--enable-auto-image-base'
|
||||
+ LDCXXSHARED='$(CXX) -shared -Wl,--enable-auto-image-base'
|
||||
+ ;;
|
||||
*) LDSHARED="ld";;
|
||||
esac
|
||||
fi
|
||||
@@ -6883,7 +6895,8 @@ case $host in
|
||||
dnl "errmap.h" from $srcdir/PC.
|
||||
dnl Note we cannot use BASECPPFLAGS as autogenerated pyconfig.h
|
||||
dnl has to be before customized located in ../PC.
|
||||
- CPPFLAGS="-I\$(srcdir)/PC $CPPFLAGS"
|
||||
+ dnl (-I. at end is workaround for setup.py logic)
|
||||
+ CPPFLAGS="-I\$(srcdir)/PC $CPPFLAGS -I."
|
||||
;;
|
||||
esac
|
||||
|
||||
@@ -0,0 +1,101 @@
|
||||
From 7d2d590da71ea6ef2be339ef5b43238859bc5bcf Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?=
|
||||
<alexey.pawlow@gmail.com>
|
||||
Date: Thu, 17 Jun 2021 18:51:25 +0530
|
||||
Subject: [PATCH 012/N] Add dynamic loading support for MINGW
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Co-authored-by: Алексей <alexey.pawlow@gmail.com>
|
||||
---
|
||||
Makefile.pre.in | 6 ++++++
|
||||
Python/dynload_win.c | 9 +++++++--
|
||||
configure.ac | 16 ++++++++++++++++
|
||||
3 files changed, 29 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/Makefile.pre.in b/Makefile.pre.in
|
||||
index 7af1845..664e270 100644
|
||||
--- a/Makefile.pre.in
|
||||
+++ b/Makefile.pre.in
|
||||
@@ -1374,6 +1374,12 @@ Python/dynload_hpux.o: $(srcdir)/Python/dynload_hpux.c Makefile
|
||||
-DSHLIB_EXT='"$(EXT_SUFFIX)"' \
|
||||
-o $@ $(srcdir)/Python/dynload_hpux.c
|
||||
|
||||
+Python/dynload_win.o: $(srcdir)/Python/dynload_win.c Makefile
|
||||
+ $(CC) -c $(PY_CORE_CFLAGS) \
|
||||
+ -DSHLIB_SUFFIX='"$(SHLIB_SUFFIX)"' \
|
||||
+ -DEXT_SUFFIX='"$(EXT_SUFFIX)"' \
|
||||
+ -o $@ $(srcdir)/Python/dynload_win.c
|
||||
+
|
||||
Python/sysmodule.o: $(srcdir)/Python/sysmodule.c Makefile $(srcdir)/Include/pydtrace.h
|
||||
$(CC) -c $(PY_CORE_CFLAGS) \
|
||||
-DABIFLAGS='"$(ABIFLAGS)"' \
|
||||
diff --git a/Python/dynload_win.c b/Python/dynload_win.c
|
||||
index acab05e..4bb90ba 100644
|
||||
--- a/Python/dynload_win.c
|
||||
+++ b/Python/dynload_win.c
|
||||
@@ -29,6 +29,12 @@
|
||||
#define PYD_UNTAGGED_SUFFIX PYD_DEBUG_SUFFIX ".pyd"
|
||||
|
||||
const char *_PyImport_DynLoadFiletab[] = {
|
||||
+#ifdef EXT_SUFFIX
|
||||
+ EXT_SUFFIX, /* include SOABI flags where is encoded debug */
|
||||
+#endif
|
||||
+#ifdef SHLIB_SUFFIX
|
||||
+ "-abi" PYTHON_ABI_STRING SHLIB_SUFFIX,
|
||||
+#endif
|
||||
PYD_TAGGED_SUFFIX,
|
||||
PYD_UNTAGGED_SUFFIX,
|
||||
NULL
|
||||
@@ -251,8 +257,7 @@ dl_funcptr _PyImport_FindSharedFuncptrWindows(const char *prefix,
|
||||
ensure DLLs adjacent to the PYD are preferred. */
|
||||
Py_BEGIN_ALLOW_THREADS
|
||||
hDLL = LoadLibraryExW(wpathname, NULL,
|
||||
- LOAD_LIBRARY_SEARCH_DEFAULT_DIRS |
|
||||
- LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR);
|
||||
+ LOAD_WITH_ALTERED_SEARCH_PATH);
|
||||
Py_END_ALLOW_THREADS
|
||||
PyMem_Free(wpathname);
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 1eb61be..c5446af 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -3374,6 +3374,9 @@ if test -z "$SHLIB_SUFFIX"; then
|
||||
CYGWIN*) SHLIB_SUFFIX=.dll;;
|
||||
*) SHLIB_SUFFIX=.so;;
|
||||
esac
|
||||
+ case $host_os in
|
||||
+ mingw*) SHLIB_SUFFIX=.dll;;
|
||||
+ esac
|
||||
fi
|
||||
AC_MSG_RESULT([$SHLIB_SUFFIX])
|
||||
|
||||
@@ -4986,6 +4989,13 @@ then
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
+ case $host in
|
||||
+ *-*-mingw*)
|
||||
+ DYNLOADFILE="dynload_win.o"
|
||||
+ extra_machdep_objs="$extra_machdep_objs PC/dl_nt.o"
|
||||
+ CFLAGS_NODIST="$CFLAGS_NODIST -DMS_DLL_ID='\"$VERSION\"'"
|
||||
+ ;;
|
||||
+ esac
|
||||
fi
|
||||
AC_MSG_RESULT([$DYNLOADFILE])
|
||||
if test "$DYNLOADFILE" != "dynload_stub.o"
|
||||
@@ -6874,6 +6884,12 @@ case "$ac_cv_computed_gotos" in yes*)
|
||||
AC_DEFINE([HAVE_COMPUTED_GOTOS], [1],
|
||||
[Define if the C compiler supports computed gotos.])
|
||||
esac
|
||||
+case $host_os in
|
||||
+ mingw*)
|
||||
+ dnl Synchronized with _PyImport_DynLoadFiletab (dynload_win.c)
|
||||
+ dnl Do not use more then one dot on this platform !
|
||||
+ EXT_SUFFIX=-$SOABI$SHLIB_SUFFIX;;
|
||||
+esac
|
||||
|
||||
case $ac_sys_system in
|
||||
AIX*)
|
||||
@@ -0,0 +1,49 @@
|
||||
From 2cef9a90220147f25ba63e97482d258f61cda395 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?=
|
||||
<alexey.pawlow@gmail.com>
|
||||
Date: Thu, 17 Jun 2021 18:51:26 +0530
|
||||
Subject: [PATCH 013/N] Ignore main program for frozen scripts on MINGW
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Co-authored-by: Алексей <alexey.pawlow@gmail.com>
|
||||
---
|
||||
Makefile.pre.in | 2 +-
|
||||
configure.ac | 10 ++++++++++
|
||||
2 files changed, 11 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Makefile.pre.in b/Makefile.pre.in
|
||||
index 664e270..d16afef 100644
|
||||
--- a/Makefile.pre.in
|
||||
+++ b/Makefile.pre.in
|
||||
@@ -383,7 +383,7 @@ PYTHON_OBJS= \
|
||||
Python/errors.o \
|
||||
Python/flowgraph.o \
|
||||
Python/frame.o \
|
||||
- Python/frozenmain.o \
|
||||
+ @PYTHON_OBJS_FROZENMAIN@ \
|
||||
Python/future.o \
|
||||
Python/getargs.o \
|
||||
Python/getcompiler.o \
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index c5446af..fe251c4 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -6916,6 +6916,16 @@ case $host in
|
||||
;;
|
||||
esac
|
||||
|
||||
+dnl Python interpreter main program for frozen scripts
|
||||
+AC_SUBST(PYTHON_OBJS_FROZENMAIN)
|
||||
+PYTHON_OBJS_FROZENMAIN="Python/frozenmain.o"
|
||||
+case $host in
|
||||
+ *-*-mingw*)
|
||||
+ dnl 'PC/frozen_dllmain.c' - not yet
|
||||
+ PYTHON_OBJS_FROZENMAIN=
|
||||
+ ;;
|
||||
+esac
|
||||
+
|
||||
AC_SUBST([SRCDIRS])
|
||||
SRCDIRS="\
|
||||
Modules \
|
||||
@@ -0,0 +1,161 @@
|
||||
From 1da317ac6e345b84c424d2d4aa3c049d4fad5f6d Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?=
|
||||
<alexey.pawlow@gmail.com>
|
||||
Date: Thu, 17 Jun 2021 18:51:30 +0530
|
||||
Subject: [PATCH 014/N] Detect winsock2 and setup _socket module on MINGW
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Co-authored-by: Алексей <alexey.pawlow@gmail.com>
|
||||
Co-authored-by: Naveen M K <naveen521kk@gmail.com>
|
||||
---
|
||||
Misc/config_mingw | 3 +++
|
||||
Modules/socketmodule.c | 6 ++++++
|
||||
configure.ac | 38 ++++++++++++++++++++++++++++++++------
|
||||
pyconfig.h.in | 4 ++--
|
||||
4 files changed, 43 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/Misc/config_mingw b/Misc/config_mingw
|
||||
index 513065d..9be43fd 100644
|
||||
--- a/Misc/config_mingw
|
||||
+++ b/Misc/config_mingw
|
||||
@@ -10,3 +10,6 @@ ac_cv_func_alarm=ignore
|
||||
# files to ignore
|
||||
ac_cv_file__dev_ptmx=ignore #NOTE: under MSYS environment device exist
|
||||
ac_cv_file__dev_ptc=no
|
||||
+
|
||||
+# force detection of winsock2 functionality - require wxp or newer
|
||||
+ac_cv_func_getpeername=yes
|
||||
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
|
||||
index de7229d..4b521ca 100644
|
||||
--- a/Modules/socketmodule.c
|
||||
+++ b/Modules/socketmodule.c
|
||||
@@ -282,6 +282,7 @@ shutdown(how) -- shut down traffic in one or both directions\n\
|
||||
# include <Rpc.h>
|
||||
|
||||
/* Macros based on the IPPROTO enum, see: https://bugs.python.org/issue29515 */
|
||||
+#ifdef _MSC_VER
|
||||
#define IPPROTO_ICMP IPPROTO_ICMP
|
||||
#define IPPROTO_IGMP IPPROTO_IGMP
|
||||
#define IPPROTO_GGP IPPROTO_GGP
|
||||
@@ -312,6 +313,7 @@ shutdown(how) -- shut down traffic in one or both directions\n\
|
||||
#define IPPROTO_PGM IPPROTO_PGM // WinSock2 only
|
||||
#define IPPROTO_L2TP IPPROTO_L2TP // WinSock2 only
|
||||
#define IPPROTO_SCTP IPPROTO_SCTP // WinSock2 only
|
||||
+#endif /* _MSC_VER */
|
||||
|
||||
/* Provides the IsWindows7SP1OrGreater() function */
|
||||
#include <versionhelpers.h>
|
||||
@@ -426,6 +428,10 @@ remove_unusable_flags(PyObject *m)
|
||||
/* Do not include addrinfo.h for MSVC7 or greater. 'addrinfo' and
|
||||
* EAI_* constants are defined in (the already included) ws2tcpip.h.
|
||||
*/
|
||||
+#elif defined(__MINGW32__)
|
||||
+ /* Do not include addrinfo.h as minimum supported version is
|
||||
+ * _WIN32_WINNT >= WindowsXP(0x0501)
|
||||
+ */
|
||||
#else
|
||||
# include "addrinfo.h"
|
||||
#endif
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index fe251c4..e193452 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -4138,6 +4138,12 @@ AS_CASE([$ac_sys_system],
|
||||
[OSSAUDIODEV_LIBS=""]
|
||||
)
|
||||
|
||||
+dnl On MINGW, you need to link against ws2_32 and iphlpapi for sockets to work
|
||||
+AS_CASE([$MACHDEP],
|
||||
+ [win32], [SOCKET_LIBS="-lws2_32 -liphlpapi -lrpcrt4"],
|
||||
+ [SOCKET_LIBS=""]
|
||||
+)
|
||||
+
|
||||
dnl detect sqlite3 from Emscripten emport
|
||||
PY_CHECK_EMSCRIPTEN_PORT([LIBSQLITE3], [-sUSE_SQLITE3])
|
||||
|
||||
@@ -5598,18 +5604,33 @@ if test $ac_cv_header_time_altzone = yes; then
|
||||
[Define this if your time.h defines altzone.])
|
||||
fi
|
||||
|
||||
+AC_CHECK_HEADERS([ws2tcpip.h])
|
||||
AC_CACHE_CHECK([for addrinfo], [ac_cv_struct_addrinfo],
|
||||
-AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include <netdb.h>]], [[struct addrinfo a]])],
|
||||
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
||||
+#ifdef HAVE_WS2TCPIP_H
|
||||
+# include <ws2tcpip.h>
|
||||
+#else
|
||||
+# include <netdb.h>
|
||||
+#endif]],
|
||||
+ [[struct addrinfo a]])],
|
||||
[ac_cv_struct_addrinfo=yes],
|
||||
[ac_cv_struct_addrinfo=no]))
|
||||
if test $ac_cv_struct_addrinfo = yes; then
|
||||
- AC_DEFINE([HAVE_ADDRINFO], [1], [struct addrinfo (netdb.h)])
|
||||
+ AC_DEFINE([HAVE_ADDRINFO], [1], [struct addrinfo])
|
||||
fi
|
||||
|
||||
AC_CACHE_CHECK([for sockaddr_storage], [ac_cv_struct_sockaddr_storage],
|
||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
||||
-# include <sys/types.h>
|
||||
-@%:@ include <sys/socket.h>]], [[struct sockaddr_storage s]])],
|
||||
+#ifdef HAVE_WS2TCPIP_H
|
||||
+#include <ws2tcpip.h>
|
||||
+#endif
|
||||
+#ifdef HAVE_SYS_TYPES_H
|
||||
+#include <sys/types.h>
|
||||
+#endif
|
||||
+#ifdef HAVE_SYS_SOCKET_H
|
||||
+#include <sys/socket.h>
|
||||
+#endif]],
|
||||
+ [[struct sockaddr_storage s]])],
|
||||
[ac_cv_struct_sockaddr_storage=yes],
|
||||
[ac_cv_struct_sockaddr_storage=no]))
|
||||
if test $ac_cv_struct_sockaddr_storage = yes; then
|
||||
@@ -6804,8 +6825,11 @@ AC_CHECK_TYPE(
|
||||
[socklen_t], [],
|
||||
[AC_DEFINE(
|
||||
[socklen_t], [int],
|
||||
- [Define to `int' if <sys/socket.h> does not define.]
|
||||
+ [Define to `int' if <sys/socket.h> or <ws2tcpip.h> does not define.]
|
||||
)], [
|
||||
+#ifdef HAVE_WS2TCPIP_H
|
||||
+#include <ws2tcpip.h>
|
||||
+#endif
|
||||
#ifdef HAVE_SYS_TYPES_H
|
||||
#include <sys/types.h>
|
||||
#endif
|
||||
@@ -7601,7 +7625,9 @@ 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"
|
||||
+ -o "$MACHDEP" = "win32"]),
|
||||
+ [], [$SOCKET_LIBS])
|
||||
|
||||
dnl platform specific extensions
|
||||
PY_STDLIB_MOD([grp], [], [test "$ac_cv_func_getgrgid" = yes -o "$ac_cv_func_getgrgid_r" = yes])
|
||||
diff --git a/pyconfig.h.in b/pyconfig.h.in
|
||||
index 0321d25..fc5200c 100644
|
||||
--- a/pyconfig.h.in
|
||||
+++ b/pyconfig.h.in
|
||||
@@ -63,7 +63,7 @@
|
||||
/* 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. */
|
||||
@@ -1927,7 +1927,7 @@
|
||||
/* Define to `unsigned int' if <sys/types.h> does not 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. */
|
||||
@@ -0,0 +1,104 @@
|
||||
From d53eb47f222dfe154720f67e4560c6b756c69cb7 Mon Sep 17 00:00:00 2001
|
||||
From: Naveen M K <naveen521kk@gmail.com>
|
||||
Date: Tue, 14 Feb 2023 20:40:42 +0530
|
||||
Subject: [PATCH 015/N] Enable some windows specific modules
|
||||
|
||||
---
|
||||
Modules/Setup.bootstrap.in | 2 ++
|
||||
Modules/Setup.stdlib.in | 7 +++++++
|
||||
Modules/_winapi.c | 2 ++
|
||||
PC/msvcrtmodule.c | 2 ++
|
||||
Python/dynamic_annotations.c | 2 +-
|
||||
configure.ac | 10 ++++++++++
|
||||
6 files changed, 24 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Modules/Setup.bootstrap.in b/Modules/Setup.bootstrap.in
|
||||
index 3def7e8..d8b41ee 100644
|
||||
--- a/Modules/Setup.bootstrap.in
|
||||
+++ b/Modules/Setup.bootstrap.in
|
||||
@@ -37,3 +37,5 @@ _symtable symtablemodule.c
|
||||
|
||||
# build-in modules for windows platform:
|
||||
@USE_WIN32_MODULE@winreg ../PC/winreg.c
|
||||
+@MODULE_MSVCRT_TRUE@msvcrt -DPy_BUILD_CORE ../PC/msvcrtmodule.c
|
||||
+@MODULE__WINAPI_TRUE@_winapi _winapi.c
|
||||
diff --git a/Modules/Setup.stdlib.in b/Modules/Setup.stdlib.in
|
||||
index 3360805..202a55e 100644
|
||||
--- a/Modules/Setup.stdlib.in
|
||||
+++ b/Modules/Setup.stdlib.in
|
||||
@@ -160,6 +160,13 @@
|
||||
# _scproxy needs SystemConfiguration and CoreFoundation framework
|
||||
@MODULE__SCPROXY_TRUE@_scproxy _scproxy.c
|
||||
|
||||
+############################################################################
|
||||
+# Windows specific modules
|
||||
+
|
||||
+@MODULE__OVERLAPPED_TRUE@_overlapped overlapped.c
|
||||
+@MODULE__MSI_TRUE@_msi ../PC/_msi.c
|
||||
+@MODULE_WINSOUND_TRUE@winsound ../PC/winsound.c
|
||||
+
|
||||
|
||||
############################################################################
|
||||
# Test modules
|
||||
diff --git a/Modules/_winapi.c b/Modules/_winapi.c
|
||||
index 7727540..fda1171 100644
|
||||
--- a/Modules/_winapi.c
|
||||
+++ b/Modules/_winapi.c
|
||||
@@ -44,7 +44,9 @@
|
||||
#endif
|
||||
#include "windows.h"
|
||||
#include <winioctl.h>
|
||||
+#if defined(Py_DEBUG)
|
||||
#include <crtdbg.h>
|
||||
+#endif
|
||||
#include "winreparse.h"
|
||||
|
||||
#if defined(MS_WIN32) && !defined(MS_WIN64)
|
||||
diff --git a/PC/msvcrtmodule.c b/PC/msvcrtmodule.c
|
||||
index 53ef26b..10cf782 100644
|
||||
--- a/PC/msvcrtmodule.c
|
||||
+++ b/PC/msvcrtmodule.c
|
||||
@@ -22,7 +22,9 @@
|
||||
#include <io.h>
|
||||
#include <conio.h>
|
||||
#include <sys/locking.h>
|
||||
+#ifdef _DEBUG
|
||||
#include <crtdbg.h>
|
||||
+#endif
|
||||
#include <windows.h>
|
||||
|
||||
#ifdef _MSC_VER
|
||||
diff --git a/Python/dynamic_annotations.c b/Python/dynamic_annotations.c
|
||||
index 7febaa0..70d5b3d 100644
|
||||
--- a/Python/dynamic_annotations.c
|
||||
+++ b/Python/dynamic_annotations.c
|
||||
@@ -27,7 +27,7 @@
|
||||
* Author: Kostya Serebryany
|
||||
*/
|
||||
|
||||
-#ifdef _MSC_VER
|
||||
+#ifdef MS_WINDOWS
|
||||
# include <windows.h>
|
||||
#endif
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index e193452..f1bcf82 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -7727,6 +7727,16 @@ PY_STDLIB_MOD([_ssl], [], [test "$ac_cv_working_openssl_ssl" = yes],
|
||||
PY_STDLIB_MOD([_hashlib], [], [test "$ac_cv_working_openssl_hashlib" = yes],
|
||||
[$OPENSSL_INCLUDES], [$OPENSSL_LDFLAGS $OPENSSL_LDFLAGS_RPATH $LIBCRYPTO_LIBS])
|
||||
|
||||
+dnl windows specific modules
|
||||
+PY_STDLIB_MOD([msvcrt], [test "$MACHDEP" = "win32"])
|
||||
+PY_STDLIB_MOD([_winapi], [test "$MACHDEP" = "win32"])
|
||||
+PY_STDLIB_MOD([_msi], [test "$MACHDEP" = "win32"], [], [],
|
||||
+ [-lmsi -lcabinet -lrpcrt4])
|
||||
+PY_STDLIB_MOD([winsound], [test "$MACHDEP" = "win32"], [], [],
|
||||
+ [-lwinmm])
|
||||
+PY_STDLIB_MOD([_overlapped], [test "$MACHDEP" = "win32"], [], [],
|
||||
+ [-lws2_32])
|
||||
+
|
||||
dnl test modules
|
||||
PY_STDLIB_MOD([_testcapi], [test "$TEST_MODULES" = yes])
|
||||
PY_STDLIB_MOD([_testclinic], [test "$TEST_MODULES" = yes])
|
||||
@@ -0,0 +1,22 @@
|
||||
From 10149a78b035a7d41391aed4d8f4ddf46e592b85 Mon Sep 17 00:00:00 2001
|
||||
From: Christoph Reiter <reiter.christoph@gmail.com>
|
||||
Date: Tue, 21 Sep 2021 20:52:42 +0200
|
||||
Subject: [PATCH 016/N] sysconfig: MINGW build extensions with GCC
|
||||
|
||||
---
|
||||
Lib/sysconfig.py | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py
|
||||
index 8122a7a..3710a83 100644
|
||||
--- a/Lib/sysconfig.py
|
||||
+++ b/Lib/sysconfig.py
|
||||
@@ -782,6 +782,8 @@ def get_platform():
|
||||
|
||||
"""
|
||||
if os.name == 'nt':
|
||||
+ if 'GCC' in sys.version:
|
||||
+ return 'mingw'
|
||||
if 'amd64' in sys.version.lower():
|
||||
return 'win-amd64'
|
||||
if '(arm)' in sys.version.lower():
|
||||
@@ -0,0 +1,88 @@
|
||||
From 77e7dad5d1dca5e397855159593fbe4e99fccbbb Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?=
|
||||
<alexey.pawlow@gmail.com>
|
||||
Date: Thu, 17 Jun 2021 18:51:38 +0530
|
||||
Subject: [PATCH 017/N] sysconfig: treat MINGW builds as POSIX builds
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Co-authored-by: Алексей <alexey.pawlow@gmail.com>
|
||||
Co-authored-by: Naveen M K <naveen521kk@gmail.com>
|
||||
---
|
||||
Lib/sysconfig.py | 19 ++++++++++++-------
|
||||
1 file changed, 12 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py
|
||||
index 3710a83..ce900b3 100644
|
||||
--- a/Lib/sysconfig.py
|
||||
+++ b/Lib/sysconfig.py
|
||||
@@ -99,13 +99,18 @@
|
||||
},
|
||||
}
|
||||
|
||||
+# GCC[mingw*] use posix build system
|
||||
+_POSIX_BUILD = os.name == 'posix' or \
|
||||
+ (os.name == "nt" and 'GCC' in sys.version)
|
||||
+
|
||||
# For the OS-native venv scheme, we essentially provide an alias:
|
||||
-if os.name == 'nt':
|
||||
+if os.name == 'nt' and not _POSIX_BUILD:
|
||||
_INSTALL_SCHEMES['venv'] = _INSTALL_SCHEMES['nt_venv']
|
||||
else:
|
||||
_INSTALL_SCHEMES['venv'] = _INSTALL_SCHEMES['posix_venv']
|
||||
|
||||
|
||||
+
|
||||
# NOTE: site.py has copy of this function.
|
||||
# Sync it when modify this function.
|
||||
def _getuserbase():
|
||||
@@ -120,7 +125,7 @@ def _getuserbase():
|
||||
def joinuser(*args):
|
||||
return os.path.expanduser(os.path.join(*args))
|
||||
|
||||
- if os.name == "nt":
|
||||
+ if os.name == "nt" and not _POSIX_BUILD:
|
||||
base = os.environ.get("APPDATA") or "~"
|
||||
return joinuser(base, "Python")
|
||||
|
||||
@@ -283,7 +288,7 @@ def _expand_vars(scheme, vars):
|
||||
|
||||
|
||||
def _get_preferred_schemes():
|
||||
- if os.name == 'nt':
|
||||
+ if os.name == 'nt' and not _POSIX_BUILD:
|
||||
return {
|
||||
'prefix': 'nt',
|
||||
'home': 'posix_home',
|
||||
@@ -617,7 +622,7 @@ def parse_config_h(fp, vars=None):
|
||||
def get_config_h_filename():
|
||||
"""Return the path of pyconfig.h."""
|
||||
if _PYTHON_BUILD:
|
||||
- if os.name == "nt":
|
||||
+ if os.name == "nt" and not _POSIX_BUILD:
|
||||
inc_dir = os.path.join(_PROJECT_BASE, "PC")
|
||||
else:
|
||||
inc_dir = _PROJECT_BASE
|
||||
@@ -683,10 +688,10 @@ def _init_config_vars():
|
||||
except AttributeError:
|
||||
_CONFIG_VARS['py_version_nodot_plat'] = ''
|
||||
|
||||
- if os.name == 'nt':
|
||||
+ if os.name == 'nt' and not _POSIX_BUILD:
|
||||
_init_non_posix(_CONFIG_VARS)
|
||||
_CONFIG_VARS['VPATH'] = sys._vpath
|
||||
- if os.name == 'posix':
|
||||
+ if _POSIX_BUILD:
|
||||
_init_posix(_CONFIG_VARS)
|
||||
if _HAS_USER_BASE:
|
||||
# Setting 'userbase' is done below the call to the
|
||||
@@ -696,7 +701,7 @@ def _init_config_vars():
|
||||
|
||||
# Always convert srcdir to an absolute path
|
||||
srcdir = _CONFIG_VARS.get('srcdir', _PROJECT_BASE)
|
||||
- if os.name == 'posix':
|
||||
+ if _POSIX_BUILD:
|
||||
if _PYTHON_BUILD:
|
||||
# If srcdir is a relative path (typically '.' or '..')
|
||||
# then it should be interpreted relative to the directory
|
||||
@@ -0,0 +1,53 @@
|
||||
From c7c28e844ca553ab0724e344440fb90b7e851b90 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?=
|
||||
<alexey.pawlow@gmail.com>
|
||||
Date: Thu, 17 Jun 2021 18:51:39 +0530
|
||||
Subject: [PATCH 018/N] Add support for stdcall without underscore
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This is the case used in MINGW
|
||||
|
||||
Co-authored-by: Алексей <alexey.pawlow@gmail.com>
|
||||
---
|
||||
Modules/_ctypes/_ctypes.c | 19 +++++++++++++++++++
|
||||
1 file changed, 19 insertions(+)
|
||||
|
||||
diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c
|
||||
index 534ef8c..28f921c 100644
|
||||
--- a/Modules/_ctypes/_ctypes.c
|
||||
+++ b/Modules/_ctypes/_ctypes.c
|
||||
@@ -3378,6 +3378,18 @@ static PPROC FindAddress(void *handle, const char *name, PyObject *type)
|
||||
mangled_name = alloca(strlen(name) + 1 + 1 + 1 + 3); /* \0 _ @ %d */
|
||||
if (!mangled_name)
|
||||
return NULL;
|
||||
+ /* Issue: for stdcall decorated export functions MSVC compiler adds
|
||||
+ * underscore, but GCC compiler create them without. This is
|
||||
+ * visible by example for _ctypes_test.pyd module.
|
||||
+ * As well functions from system libraries are without underscore.
|
||||
+ * Solutions:
|
||||
+ * - If a python module is build with gcc option --add-stdcall-alias
|
||||
+ * the module will contain XXX as alias for function XXX@ as result
|
||||
+ * first search in this method will succeed.
|
||||
+ * - Distutil may use compiler to create def-file, to modify it as
|
||||
+ * add underscore alias and with new def file to create module.
|
||||
+ * - Or may be just to search for function without underscore.
|
||||
+ */
|
||||
for (i = 0; i < 32; ++i) {
|
||||
sprintf(mangled_name, "_%s@%d", name, i*4);
|
||||
Py_BEGIN_ALLOW_THREADS
|
||||
@@ -3385,6 +3397,13 @@ static PPROC FindAddress(void *handle, const char *name, PyObject *type)
|
||||
Py_END_ALLOW_THREADS
|
||||
if (address)
|
||||
return address;
|
||||
+ /* search for function without underscore as weel */
|
||||
+ sprintf(mangled_name, "%s@%d", name, i*4);
|
||||
+ Py_BEGIN_ALLOW_THREADS
|
||||
+ address = (PPROC)GetProcAddress(handle, mangled_name);
|
||||
+ Py_END_ALLOW_THREADS
|
||||
+ if (address)
|
||||
+ return address;
|
||||
}
|
||||
return NULL;
|
||||
#endif
|
||||
59
mingw-w64-python3.12/0019-Customize-site-for-MINGW.patch
Normal file
59
mingw-w64-python3.12/0019-Customize-site-for-MINGW.patch
Normal file
@@ -0,0 +1,59 @@
|
||||
From 206bdd2be7d602d9651aeaddefb523ad6c59e1cf Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?=
|
||||
<alexey.pawlow@gmail.com>
|
||||
Date: Thu, 17 Jun 2021 18:51:42 +0530
|
||||
Subject: [PATCH 019/N] Customize site for MINGW
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Co-authored-by: Алексей <alexey.pawlow@gmail.com>
|
||||
Co-authored-by: Christoph Reiter <reiter.christoph@gmail.com>
|
||||
---
|
||||
Lib/site.py | 12 +++++++++---
|
||||
1 file changed, 9 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/Lib/site.py b/Lib/site.py
|
||||
index 672fa7b..4cbb55c 100644
|
||||
--- a/Lib/site.py
|
||||
+++ b/Lib/site.py
|
||||
@@ -88,6 +88,12 @@
|
||||
USER_BASE = None
|
||||
|
||||
|
||||
+# Same as defined in Lib/sysconfig.py
|
||||
+# redeclared since sysconfig is large for site.
|
||||
+# GCC[mingw*] use posix build system
|
||||
+_POSIX_BUILD = os.name == 'posix' or \
|
||||
+ (os.name == "nt" and 'GCC' in sys.version)
|
||||
+
|
||||
def _trace(message):
|
||||
if sys.flags.verbose:
|
||||
print(message, file=sys.stderr)
|
||||
@@ -273,7 +279,7 @@ def _getuserbase():
|
||||
def joinuser(*args):
|
||||
return os.path.expanduser(os.path.join(*args))
|
||||
|
||||
- if os.name == "nt":
|
||||
+ if os.name == "nt" and not _POSIX_BUILD:
|
||||
base = os.environ.get("APPDATA") or "~"
|
||||
return joinuser(base, "Python")
|
||||
|
||||
@@ -288,7 +294,7 @@ def joinuser(*args):
|
||||
def _get_path(userbase):
|
||||
version = sys.version_info
|
||||
|
||||
- if os.name == 'nt':
|
||||
+ if os.name == 'nt' and not _POSIX_BUILD:
|
||||
ver_nodot = sys.winver.replace('.', '')
|
||||
return f'{userbase}\\Python{ver_nodot}\\site-packages'
|
||||
|
||||
@@ -361,7 +367,7 @@ def getsitepackages(prefixes=None):
|
||||
continue
|
||||
seen.add(prefix)
|
||||
|
||||
- if os.sep == '/':
|
||||
+ if _POSIX_BUILD:
|
||||
libdirs = [sys.platlibdir]
|
||||
if sys.platlibdir != "lib":
|
||||
libdirs.append("lib")
|
||||
159
mingw-w64-python3.12/0020-add-python-config-sh.patch
Normal file
159
mingw-w64-python3.12/0020-add-python-config-sh.patch
Normal file
@@ -0,0 +1,159 @@
|
||||
From be03be6923079d83a11c2c2580c3d3ec4295cb88 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?=
|
||||
<alexey.pawlow@gmail.com>
|
||||
Date: Thu, 17 Jun 2021 18:51:43 +0530
|
||||
Subject: [PATCH 020/N] add python config sh
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Co-authored-by: Алексей <alexey.pawlow@gmail.com>
|
||||
Co-authored-by: Christoph Reiter <reiter.christoph@gmail.com>
|
||||
---
|
||||
Misc/python-config.sh.in | 62 +++++++++++++++++++++++++---------------
|
||||
1 file changed, 39 insertions(+), 23 deletions(-)
|
||||
|
||||
diff --git a/Misc/python-config.sh.in b/Misc/python-config.sh.in
|
||||
index 2602fe2..e0e048a 100644
|
||||
--- a/Misc/python-config.sh.in
|
||||
+++ b/Misc/python-config.sh.in
|
||||
@@ -1,32 +1,44 @@
|
||||
#!/bin/sh
|
||||
|
||||
-# Keep this script in sync with python-config.in
|
||||
-
|
||||
exit_with_usage ()
|
||||
{
|
||||
echo "Usage: $0 --prefix|--exec-prefix|--includes|--libs|--cflags|--ldflags|--extension-suffix|--help|--abiflags|--configdir|--embed"
|
||||
- exit $1
|
||||
+ exit 1
|
||||
}
|
||||
|
||||
+# Really, python-config.py (and thus .sh) should be called directly, but
|
||||
+# sometimes software (e.g. GDB) calls python-config.sh as if it were the
|
||||
+# Python executable, passing python-config.py as the first argument.
|
||||
+# Work around that oddness by ignoring any .py passed as first arg.
|
||||
+case "$1" in
|
||||
+ *.py)
|
||||
+ shift
|
||||
+ ;;
|
||||
+esac
|
||||
+
|
||||
if [ "$1" = "" ] ; then
|
||||
- exit_with_usage 1
|
||||
+ exit_with_usage
|
||||
fi
|
||||
|
||||
# Returns the actual prefix where this script was installed to.
|
||||
installed_prefix ()
|
||||
{
|
||||
- RESULT=$(dirname $(cd $(dirname "$1") && pwd -P))
|
||||
- if which readlink >/dev/null 2>&1 ; then
|
||||
- if readlink -f "$RESULT" >/dev/null 2>&1; then
|
||||
- RESULT=$(readlink -f "$RESULT")
|
||||
- fi
|
||||
+ local RESULT=$(dirname $(cd $(dirname "$1") && pwd -P))
|
||||
+ if [ $(which readlink) ] ; then
|
||||
+ RESULT=$(readlink -f "$RESULT")
|
||||
+ fi
|
||||
+ # Since we don't know where the output from this script will end up
|
||||
+ # we keep all paths in Windows-land since MSYS2 can handle that
|
||||
+ # while native tools can't handle paths in MSYS2-land.
|
||||
+ if [ "$OSTYPE" = "msys" ]; then
|
||||
+ RESULT=$(cd "$RESULT" && pwd -W)
|
||||
fi
|
||||
echo $RESULT
|
||||
}
|
||||
|
||||
prefix_real=$(installed_prefix "$0")
|
||||
|
||||
-# Use sed to fix paths from their built-to locations to their installed-to
|
||||
+# Use sed to fix paths from their built-to locations to their installed to
|
||||
# locations. Keep prefix & exec_prefix using their original values in case
|
||||
# they are referenced in other configure variables, to prevent double
|
||||
# substitution, issue #22140.
|
||||
@@ -41,13 +53,17 @@ LIBM="@LIBM@"
|
||||
LIBC="@LIBC@"
|
||||
SYSLIBS="$LIBM $LIBC"
|
||||
ABIFLAGS="@ABIFLAGS@"
|
||||
+# Protect against lack of substitution.
|
||||
+if [ "$ABIFLAGS" = "@""ABIFLAGS""@" ] ; then
|
||||
+ ABIFLAGS=
|
||||
+fi
|
||||
LIBS="@LIBPYTHON@ @LIBS@ $SYSLIBS"
|
||||
LIBS_EMBED="-lpython${VERSION}${ABIFLAGS} @LIBS@ $SYSLIBS"
|
||||
BASECFLAGS="@BASECFLAGS@"
|
||||
-LDLIBRARY="@LDLIBRARY@"
|
||||
OPT="@OPT@"
|
||||
PY_ENABLE_SHARED="@PY_ENABLE_SHARED@"
|
||||
LDVERSION="@LDVERSION@"
|
||||
+LDLIBRARY="@LDLIBRARY@"
|
||||
LIBDEST=${prefix_real}/lib/python${VERSION}
|
||||
LIBPL=$(echo "@LIBPL@" | sed "s#$prefix#$prefix_real#")
|
||||
SO="@EXT_SUFFIX@"
|
||||
@@ -61,7 +77,7 @@ for ARG in $*
|
||||
do
|
||||
case $ARG in
|
||||
--help)
|
||||
- exit_with_usage 0
|
||||
+ exit_with_usage
|
||||
;;
|
||||
--embed)
|
||||
PY_EMBED=1
|
||||
@@ -69,7 +85,7 @@ do
|
||||
--prefix|--exec-prefix|--includes|--libs|--cflags|--ldflags|--extension-suffix|--abiflags|--configdir)
|
||||
;;
|
||||
*)
|
||||
- exit_with_usage 1
|
||||
+ exit_with_usage
|
||||
;;
|
||||
esac
|
||||
done
|
||||
@@ -80,37 +96,37 @@ fi
|
||||
|
||||
for ARG in "$@"
|
||||
do
|
||||
- case "$ARG" in
|
||||
+ case $ARG in
|
||||
--prefix)
|
||||
- echo "$prefix_real"
|
||||
+ echo -ne "$prefix_real"
|
||||
;;
|
||||
--exec-prefix)
|
||||
- echo "$exec_prefix_real"
|
||||
+ echo -ne "$exec_prefix_real "
|
||||
;;
|
||||
--includes)
|
||||
- echo "$INCDIR $PLATINCDIR"
|
||||
+ echo -ne "$INCDIR $PLATINCDIR"
|
||||
;;
|
||||
--cflags)
|
||||
- echo "$INCDIR $PLATINCDIR $BASECFLAGS $CFLAGS $OPT"
|
||||
+ echo -ne "$INCDIR $PLATINCDIR $BASECFLAGS $CFLAGS $OPT"
|
||||
;;
|
||||
--libs)
|
||||
- echo "$LIBS"
|
||||
+ echo -ne "$LIBS"
|
||||
;;
|
||||
--ldflags)
|
||||
LIBPLUSED=
|
||||
if [ "$PY_ENABLE_SHARED" = "0" ] ; then
|
||||
LIBPLUSED="-L$LIBPL"
|
||||
fi
|
||||
- echo "$LIBPLUSED -L$libdir $LIBS"
|
||||
+ echo -ne "$LIBPLUSED -L$libdir $LIBS "
|
||||
;;
|
||||
--extension-suffix)
|
||||
- echo "$SO"
|
||||
+ echo -ne "$SO "
|
||||
;;
|
||||
--abiflags)
|
||||
- echo "$ABIFLAGS"
|
||||
+ echo -ne "$ABIFLAGS "
|
||||
;;
|
||||
--configdir)
|
||||
- echo "$LIBPL"
|
||||
+ echo -ne "$LIBPL "
|
||||
;;
|
||||
esac
|
||||
done
|
||||
@@ -0,0 +1,459 @@
|
||||
From 216a7fef504bb563903b7426977e519d9dc63c22 Mon Sep 17 00:00:00 2001
|
||||
From: Ray Donnelly <mingw.android@gmail.com>
|
||||
Date: Thu, 17 Jun 2021 18:51:46 +0530
|
||||
Subject: [PATCH 021/N] mingw: prefer unix sep if MSYSTEM environment
|
||||
variable
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Co-authored-by: Алексей <alexey.pawlow@gmail.com>
|
||||
Co-authored-by: Christoph Reiter <reiter.christoph@gmail.com>
|
||||
Co-authored-by: cat <cat@wolfgirl.org>
|
||||
Co-authored-by: Naveen M K <naveen521kk@gmail.com>
|
||||
---
|
||||
Include/pylifecycle.h | 6 ++
|
||||
Lib/ntpath.py | 106 ++++++++++++++++++---------------
|
||||
Modules/posixmodule.c | 2 +
|
||||
Python/initconfig.c | 2 +-
|
||||
Python/pathconfig.c | 135 ++++++++++++++++++++++++++++++++++++++++++
|
||||
Python/traceback.c | 2 +-
|
||||
6 files changed, 203 insertions(+), 50 deletions(-)
|
||||
|
||||
diff --git a/Include/pylifecycle.h b/Include/pylifecycle.h
|
||||
index e4c3b09..50d8b76 100644
|
||||
--- a/Include/pylifecycle.h
|
||||
+++ b/Include/pylifecycle.h
|
||||
@@ -21,6 +21,12 @@ PyAPI_FUNC(int) Py_IsInitialized(void);
|
||||
PyAPI_FUNC(PyThreadState *) Py_NewInterpreter(void);
|
||||
PyAPI_FUNC(void) Py_EndInterpreter(PyThreadState *);
|
||||
|
||||
+PyAPI_FUNC(wchar_t) Py_GetSepW(const wchar_t *);
|
||||
+PyAPI_FUNC(char) Py_GetSepA(const char *);
|
||||
+
|
||||
+PyAPI_FUNC(void) Py_NormalizeSepsW(wchar_t *);
|
||||
+PyAPI_FUNC(void) Py_NormalizeSepsA(char *);
|
||||
+
|
||||
|
||||
/* Py_PyAtExit is for the atexit module, Py_AtExit is for low-level
|
||||
* exit functions.
|
||||
diff --git a/Lib/ntpath.py b/Lib/ntpath.py
|
||||
index df3402d..ce683b1 100644
|
||||
--- a/Lib/ntpath.py
|
||||
+++ b/Lib/ntpath.py
|
||||
@@ -11,9 +11,7 @@
|
||||
curdir = '.'
|
||||
pardir = '..'
|
||||
extsep = '.'
|
||||
-sep = '\\'
|
||||
pathsep = ';'
|
||||
-altsep = '/'
|
||||
defpath = '.;C:\\bin'
|
||||
devnull = 'nul'
|
||||
|
||||
@@ -23,6 +21,14 @@
|
||||
import genericpath
|
||||
from genericpath import *
|
||||
|
||||
+if sys.platform == "win32" and "MSYSTEM" in os.environ:
|
||||
+ sep = '/'
|
||||
+ altsep = '\\'
|
||||
+else:
|
||||
+ sep = '\\'
|
||||
+ altsep = '/'
|
||||
+bsep = str.encode(sep)
|
||||
+baltsep = str.encode(altsep)
|
||||
|
||||
__all__ = ["normcase","isabs","join","splitdrive","splitroot","split","splitext",
|
||||
"basename","dirname","commonprefix","getsize","getmtime",
|
||||
@@ -34,9 +40,33 @@
|
||||
|
||||
def _get_bothseps(path):
|
||||
if isinstance(path, bytes):
|
||||
- return b'\\/'
|
||||
+ return bsep+baltsep
|
||||
+ else:
|
||||
+ return sep+altsep
|
||||
+
|
||||
+def _get_sep(path):
|
||||
+ if isinstance(path, bytes):
|
||||
+ return bsep
|
||||
else:
|
||||
- return '\\/'
|
||||
+ return sep
|
||||
+
|
||||
+def _get_altsep(path):
|
||||
+ if isinstance(path, bytes):
|
||||
+ return baltsep
|
||||
+ else:
|
||||
+ return altsep
|
||||
+
|
||||
+def _get_colon(path):
|
||||
+ if isinstance(path, bytes):
|
||||
+ return b':'
|
||||
+ else:
|
||||
+ return ':'
|
||||
+
|
||||
+def _get_unc_prefix(path):
|
||||
+ if isinstance(path, bytes):
|
||||
+ return b'\\\\?\\UNC\\'
|
||||
+ else:
|
||||
+ return '\\\\?\\UNC\\'
|
||||
|
||||
# Normalize the case of a pathname and map slashes to backslashes.
|
||||
# Other normalizations (such as optimizing '../' away) are not done
|
||||
@@ -58,14 +88,14 @@ def normcase(s):
|
||||
return s
|
||||
if isinstance(s, bytes):
|
||||
encoding = sys.getfilesystemencoding()
|
||||
- s = s.decode(encoding, 'surrogateescape').replace('/', '\\')
|
||||
+ s = s.decode(encoding, 'surrogateescape').replace(altsep, sep)
|
||||
s = _LCMapStringEx(_LOCALE_NAME_INVARIANT,
|
||||
_LCMAP_LOWERCASE, s)
|
||||
return s.encode(encoding, 'surrogateescape')
|
||||
else:
|
||||
return _LCMapStringEx(_LOCALE_NAME_INVARIANT,
|
||||
_LCMAP_LOWERCASE,
|
||||
- s.replace('/', '\\'))
|
||||
+ s.replace(altsep, sep))
|
||||
except ImportError:
|
||||
def normcase(s):
|
||||
"""Normalize case of pathname.
|
||||
@@ -74,8 +104,8 @@ def normcase(s):
|
||||
"""
|
||||
s = os.fspath(s)
|
||||
if isinstance(s, bytes):
|
||||
- return os.fsencode(os.fsdecode(s).replace('/', '\\').lower())
|
||||
- return s.replace('/', '\\').lower()
|
||||
+ return os.fsencode(os.fsdecode(s).replace(altsep, sep).lower())
|
||||
+ return s.replace(altsep, sep).lower()
|
||||
|
||||
|
||||
# Return whether a path is absolute.
|
||||
@@ -87,14 +117,9 @@ def normcase(s):
|
||||
def isabs(s):
|
||||
"""Test whether a path is absolute"""
|
||||
s = os.fspath(s)
|
||||
- if isinstance(s, bytes):
|
||||
- sep = b'\\'
|
||||
- altsep = b'/'
|
||||
- colon_sep = b':\\'
|
||||
- else:
|
||||
- sep = '\\'
|
||||
- altsep = '/'
|
||||
- colon_sep = ':\\'
|
||||
+ sep = _get_sep(s)
|
||||
+ altsep = _get_altsep(s)
|
||||
+ colon_sep = _get_colon(s) + sep
|
||||
s = s[:3].replace(altsep, sep)
|
||||
# Absolute: UNC, device, and paths with a drive and root.
|
||||
# LEGACY BUG: isabs("/x") should be false since the path has no drive.
|
||||
@@ -106,14 +131,9 @@ def isabs(s):
|
||||
# Join two (or more) paths.
|
||||
def join(path, *paths):
|
||||
path = os.fspath(path)
|
||||
- if isinstance(path, bytes):
|
||||
- sep = b'\\'
|
||||
- seps = b'\\/'
|
||||
- colon = b':'
|
||||
- else:
|
||||
- sep = '\\'
|
||||
- seps = '\\/'
|
||||
- colon = ':'
|
||||
+ sep = _get_sep(path)
|
||||
+ seps = _get_bothseps(path)
|
||||
+ colon = _get_colon(path)
|
||||
try:
|
||||
if not paths:
|
||||
path[:0] + sep #23780: Ensure compatible data type even if p is null.
|
||||
@@ -188,18 +208,12 @@ def splitroot(p):
|
||||
splitroot('Windows/notepad') == ('', '', 'Windows/notepad')
|
||||
"""
|
||||
p = os.fspath(p)
|
||||
- if isinstance(p, bytes):
|
||||
- sep = b'\\'
|
||||
- altsep = b'/'
|
||||
- colon = b':'
|
||||
- unc_prefix = b'\\\\?\\UNC\\'
|
||||
- empty = b''
|
||||
- else:
|
||||
- sep = '\\'
|
||||
- altsep = '/'
|
||||
- colon = ':'
|
||||
- unc_prefix = '\\\\?\\UNC\\'
|
||||
- empty = ''
|
||||
+ sep = _get_sep(p)
|
||||
+ altsep = _get_altsep(p)
|
||||
+ colon = _get_colon(p)
|
||||
+ unc_prefix = _get_unc_prefix(p)
|
||||
+ empty = b'' if isinstance(p, bytes) else ''
|
||||
+
|
||||
normp = p.replace(altsep, sep)
|
||||
if normp[:1] == sep:
|
||||
if normp[1:2] == sep:
|
||||
@@ -257,9 +271,9 @@ def split(p):
|
||||
def splitext(p):
|
||||
p = os.fspath(p)
|
||||
if isinstance(p, bytes):
|
||||
- return genericpath._splitext(p, b'\\', b'/', b'.')
|
||||
+ return genericpath._splitext(p, bsep, baltsep, b'.')
|
||||
else:
|
||||
- return genericpath._splitext(p, '\\', '/', '.')
|
||||
+ return genericpath._splitext(p, sep, altsep, '.')
|
||||
splitext.__doc__ = genericpath._splitext.__doc__
|
||||
|
||||
|
||||
@@ -527,14 +541,12 @@ def expandvars(path):
|
||||
def normpath(path):
|
||||
"""Normalize path, eliminating double slashes, etc."""
|
||||
path = os.fspath(path)
|
||||
+ sep = _get_sep(path)
|
||||
+ altsep = _get_altsep(path)
|
||||
if isinstance(path, bytes):
|
||||
- sep = b'\\'
|
||||
- altsep = b'/'
|
||||
curdir = b'.'
|
||||
pardir = b'..'
|
||||
else:
|
||||
- sep = '\\'
|
||||
- altsep = '/'
|
||||
curdir = '.'
|
||||
pardir = '..'
|
||||
path = path.replace(altsep, sep)
|
||||
@@ -757,6 +769,7 @@ def realpath(path, *, strict=False):
|
||||
# strip the prefix anyway.
|
||||
if ex.winerror == initial_winerror:
|
||||
path = spath
|
||||
+ path = normpath(path)
|
||||
return path
|
||||
|
||||
|
||||
@@ -766,12 +779,11 @@ def realpath(path, *, strict=False):
|
||||
def relpath(path, start=None):
|
||||
"""Return a relative version of a path"""
|
||||
path = os.fspath(path)
|
||||
+ sep = _get_sep(path)
|
||||
if isinstance(path, bytes):
|
||||
- sep = b'\\'
|
||||
curdir = b'.'
|
||||
pardir = b'..'
|
||||
else:
|
||||
- sep = '\\'
|
||||
curdir = '.'
|
||||
pardir = '..'
|
||||
|
||||
@@ -826,13 +838,11 @@ def commonpath(paths):
|
||||
raise ValueError('commonpath() arg is an empty sequence')
|
||||
|
||||
paths = tuple(map(os.fspath, paths))
|
||||
+ sep = _get_sep(paths[0])
|
||||
+ altsep = _get_altsep(paths[0])
|
||||
if isinstance(paths[0], bytes):
|
||||
- sep = b'\\'
|
||||
- altsep = b'/'
|
||||
curdir = b'.'
|
||||
else:
|
||||
- sep = '\\'
|
||||
- altsep = '/'
|
||||
curdir = '.'
|
||||
|
||||
try:
|
||||
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
|
||||
index 0d6bb01..6cde737 100644
|
||||
--- a/Modules/posixmodule.c
|
||||
+++ b/Modules/posixmodule.c
|
||||
@@ -3926,6 +3926,7 @@ posix_getcwd(int use_bytes)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
+ Py_NormalizeSepsW(wbuf2);
|
||||
PyObject *resobj = PyUnicode_FromWideChar(wbuf2, len);
|
||||
if (wbuf2 != wbuf) {
|
||||
PyMem_RawFree(wbuf2);
|
||||
@@ -4810,6 +4811,7 @@ os__getfinalpathname_impl(PyObject *module, path_t *path)
|
||||
target_path = tmp;
|
||||
}
|
||||
|
||||
+ Py_NormalizeSepsW(target_path);
|
||||
result = PyUnicode_FromWideChar(target_path, result_length);
|
||||
if (result && path->narrow) {
|
||||
Py_SETREF(result, PyUnicode_EncodeFSDefault(result));
|
||||
diff --git a/Python/initconfig.c b/Python/initconfig.c
|
||||
index 4e5d4bb..a52d11e 100644
|
||||
--- a/Python/initconfig.c
|
||||
+++ b/Python/initconfig.c
|
||||
@@ -188,7 +188,7 @@ static const char usage_envvars[] =
|
||||
"PYTHONVERBOSE : trace import statements (-v)\n"
|
||||
"PYTHONWARNINGS=arg : warning control (-W arg)\n";
|
||||
|
||||
-#if defined(MS_WINDOWS)
|
||||
+#if defined(_MSC_VER)
|
||||
# define PYTHONHOMEHELP "<prefix>\\python{major}{minor}"
|
||||
#else
|
||||
# define PYTHONHOMEHELP "<prefix>/lib/pythonX.X"
|
||||
diff --git a/Python/pathconfig.c b/Python/pathconfig.c
|
||||
index be0f97c..3d684d6 100644
|
||||
--- a/Python/pathconfig.c
|
||||
+++ b/Python/pathconfig.c
|
||||
@@ -18,6 +18,140 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
+#ifdef __MINGW32__
|
||||
+#define wcstok wcstok_s
|
||||
+#include <windows.h>
|
||||
+#endif
|
||||
+
|
||||
+static int
|
||||
+Py_StartsWithA(const char * str, const char * prefix)
|
||||
+{
|
||||
+ while(*prefix)
|
||||
+ {
|
||||
+ if(*prefix++ != *str++)
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
+static int
|
||||
+Py_StartsWithW(const wchar_t * str, const wchar_t * prefix)
|
||||
+{
|
||||
+ while(*prefix)
|
||||
+ {
|
||||
+ if(*prefix++ != *str++)
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
+char
|
||||
+Py_GetSepA(const char *name)
|
||||
+{
|
||||
+ char* msystem = (char*)2; /* So that non Windows use / as sep */
|
||||
+ static char sep = '\0';
|
||||
+#ifdef _WIN32
|
||||
+ /* https://msdn.microsoft.com/en-gb/library/windows/desktop/aa365247%28v=vs.85%29.aspx
|
||||
+ * The "\\?\" prefix .. indicate that the path should be passed to the system with minimal
|
||||
+ * modification, which means that you cannot use forward slashes to represent path separators
|
||||
+ */
|
||||
+ if (name != NULL && Py_StartsWithA(name, "\\\\?\\") != 0)
|
||||
+ {
|
||||
+ return '\\';
|
||||
+ }
|
||||
+#endif
|
||||
+ if (sep != '\0')
|
||||
+ return sep;
|
||||
+#if defined(__MINGW32__)
|
||||
+ msystem = Py_GETENV("MSYSTEM");
|
||||
+#endif
|
||||
+ if (msystem != NULL)
|
||||
+ sep = '/';
|
||||
+ else
|
||||
+ sep = '\\';
|
||||
+ return sep;
|
||||
+}
|
||||
+
|
||||
+static char
|
||||
+Py_GetAltSepA(const char *name)
|
||||
+{
|
||||
+ char sep = Py_GetSepA(name);
|
||||
+ if (sep == '/')
|
||||
+ return '\\';
|
||||
+ return '/';
|
||||
+}
|
||||
+
|
||||
+void
|
||||
+Py_NormalizeSepsA(char *name)
|
||||
+{
|
||||
+ assert(name != NULL);
|
||||
+ char sep = Py_GetSepA(name);
|
||||
+ char altsep = Py_GetAltSepA(name);
|
||||
+ char* seps;
|
||||
+ if (name[0] != '\0' && name[1] == ':') {
|
||||
+ name[0] = toupper(name[0]);
|
||||
+ }
|
||||
+ seps = strchr(name, altsep);
|
||||
+ while(seps) {
|
||||
+ *seps = sep;
|
||||
+ seps = strchr(seps, altsep);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+wchar_t
|
||||
+Py_GetSepW(const wchar_t *name)
|
||||
+{
|
||||
+ char* msystem = (char*)2; /* So that non Windows use / as sep */
|
||||
+ static wchar_t sep = L'\0';
|
||||
+#ifdef _WIN32
|
||||
+ /* https://msdn.microsoft.com/en-gb/library/windows/desktop/aa365247%28v=vs.85%29.aspx
|
||||
+ * The "\\?\" prefix .. indicate that the path should be passed to the system with minimal
|
||||
+ * modification, which means that you cannot use forward slashes to represent path separators
|
||||
+ */
|
||||
+ if (name != NULL && Py_StartsWithW(name, L"\\\\?\\") != 0)
|
||||
+ {
|
||||
+ return L'\\';
|
||||
+ }
|
||||
+#endif
|
||||
+ if (sep != L'\0')
|
||||
+ return sep;
|
||||
+#if defined(__MINGW32__)
|
||||
+ msystem = Py_GETENV("MSYSTEM");
|
||||
+#endif
|
||||
+ if (msystem != NULL)
|
||||
+ sep = L'/';
|
||||
+ else
|
||||
+ sep = L'\\';
|
||||
+ return sep;
|
||||
+}
|
||||
+
|
||||
+static wchar_t
|
||||
+Py_GetAltSepW(const wchar_t *name)
|
||||
+{
|
||||
+ char sep = Py_GetSepW(name);
|
||||
+ if (sep == L'/')
|
||||
+ return L'\\';
|
||||
+ return L'/';
|
||||
+}
|
||||
+
|
||||
+void
|
||||
+Py_NormalizeSepsW(wchar_t *name)
|
||||
+{
|
||||
+ assert(name != NULL);
|
||||
+ wchar_t sep = Py_GetSepW(name);
|
||||
+ wchar_t altsep = Py_GetAltSepW(name);
|
||||
+ wchar_t* seps;
|
||||
+ if (name[0] != L'\0' && name[1] == L':') {
|
||||
+ name[0] = towupper(name[0]);
|
||||
+ }
|
||||
+ seps = wcschr(name, altsep);
|
||||
+ while(seps) {
|
||||
+ *seps = sep;
|
||||
+ seps = wcschr(seps, altsep);
|
||||
+ }
|
||||
+}
|
||||
|
||||
/* External interface */
|
||||
|
||||
@@ -317,6 +451,7 @@ _Py_SetProgramFullPath(const wchar_t *program_full_path)
|
||||
if (has_value && _Py_path_config.program_full_path == NULL) {
|
||||
path_out_of_memory(__func__);
|
||||
}
|
||||
+ Py_NormalizeSepsW(_Py_path_config.program_name);
|
||||
}
|
||||
|
||||
|
||||
diff --git a/Python/traceback.c b/Python/traceback.c
|
||||
index fdaf19d..74c9c45 100644
|
||||
--- a/Python/traceback.c
|
||||
+++ b/Python/traceback.c
|
||||
@@ -341,7 +341,7 @@ _Py_FindSourceFile(PyObject *filename, char* namebuf, size_t namelen, PyObject *
|
||||
filepath = PyBytes_AS_STRING(filebytes);
|
||||
|
||||
/* Search tail of filename in sys.path before giving up */
|
||||
- tail = strrchr(filepath, SEP);
|
||||
+ tail = strrchr(filepath, Py_GetSepA(filepath));
|
||||
if (tail == NULL)
|
||||
tail = filepath;
|
||||
else
|
||||
@@ -0,0 +1,123 @@
|
||||
From 894a6d30cbddb7de34b72d6427269ec01280a688 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?=
|
||||
<alexey.pawlow@gmail.com>
|
||||
Date: Thu, 17 Jun 2021 18:51:50 +0530
|
||||
Subject: [PATCH 022/N] msys cygwin semi native build sysconfig
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Co-authored-by: Алексей <alexey.pawlow@gmail.com>
|
||||
---
|
||||
Lib/sysconfig.py | 8 +++++++
|
||||
Makefile.pre.in | 7 ++++++
|
||||
configure.ac | 59 ++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
3 files changed, 74 insertions(+)
|
||||
|
||||
diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py
|
||||
index ce900b3..19fa25a 100644
|
||||
--- a/Lib/sysconfig.py
|
||||
+++ b/Lib/sysconfig.py
|
||||
@@ -446,6 +446,14 @@ def _parse_makefile(filename, vars=None, keep_unresolved=True):
|
||||
if isinstance(v, str):
|
||||
done[k] = v.strip()
|
||||
|
||||
+ # any keys that have one with the same name suffixed with _b2h
|
||||
+ # need to be replaced with the value of the _b2h key.
|
||||
+ # This converts from MSYS*/Cygwin paths to Windows paths.
|
||||
+ for k, v in dict(done).items():
|
||||
+ if isinstance(k, str):
|
||||
+ if k.endswith("_b2h"):
|
||||
+ done[k[:-4]]=v
|
||||
+
|
||||
# save the results in the global dictionary
|
||||
vars.update(done)
|
||||
return vars
|
||||
diff --git a/Makefile.pre.in b/Makefile.pre.in
|
||||
index d16afef..b5c0c41 100644
|
||||
--- a/Makefile.pre.in
|
||||
+++ b/Makefile.pre.in
|
||||
@@ -142,6 +142,13 @@ exec_prefix= @exec_prefix@
|
||||
# Install prefix for data files
|
||||
datarootdir= @datarootdir@
|
||||
|
||||
+# Locations needed for semi-native fixup of sysconfig.
|
||||
+srcdir_b2h= @srcdir_b2h@
|
||||
+VPATH_b2h= @VPATH_b2h@
|
||||
+abs_srcdir_b2h= @abs_srcdir_b2h@
|
||||
+abs_builddir_b2h= @abs_builddir_b2h@
|
||||
+prefix_b2h= @prefix_b2h@
|
||||
+
|
||||
# Expanded directories
|
||||
BINDIR= @bindir@
|
||||
LIBDIR= @libdir@
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index f1bcf82..ceab383 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -755,6 +755,65 @@ then
|
||||
[Define to include mbstate_t for mbrtowc])
|
||||
fi
|
||||
|
||||
+# On 'semi-native' build systems (MSYS*/Cygwin targeting MinGW-w64)
|
||||
+# _sysconfigdata.py will contain paths that are correct only in the
|
||||
+# build environment. This means external modules will fail to build
|
||||
+# without setting up the same env and also that the build of Python
|
||||
+# itself will fail as the paths are not correct for the host tools.
|
||||
+#
|
||||
+# Also, getpath.c uses GetModuleFileNameW (replacing \ with /) and
|
||||
+# compares that with the define VPATH (passed in via command-line)
|
||||
+# to determine whether it's the build- or the installed-Python.
|
||||
+#
|
||||
+# To work around these issues a set of _b2h variables are created:
|
||||
+# VPATH_b2h, prefix_b2h, srcdir_b2h, abs_srcdir_b2h
|
||||
+# and abs_builddir_b2h
|
||||
+# .. where b2h stands for build to host. sysconfig.py replaces path
|
||||
+# prefixes matching the non-b2h versions with the b2h equivalents.
|
||||
+#
|
||||
+# (note this assumes the host compilers are native and *not* cross
|
||||
+# - in the 'semi-native' scenario only that is.)
|
||||
+
|
||||
+AC_DEFUN([ABS_PATH_HOST],
|
||||
+[$1=$(cd $$2 && pwd)
|
||||
+ case $build_os in
|
||||
+ mingw*)
|
||||
+ case $host_os in
|
||||
+ mingw*) $1=$(cd $$2 && pwd -W) ;;
|
||||
+ *) ;;
|
||||
+ esac
|
||||
+ ;;
|
||||
+ cygwin*)
|
||||
+ case $host_os in
|
||||
+ mingw*) $1=$(cygpath -w -m $$2) ;;
|
||||
+ *) ;;
|
||||
+ esac
|
||||
+ ;;
|
||||
+ esac
|
||||
+AC_SUBST([$1])
|
||||
+])
|
||||
+
|
||||
+AC_MSG_CHECKING(absolute host location of VPATH)
|
||||
+ABS_PATH_HOST([VPATH_b2h],[srcdir])
|
||||
+AC_MSG_RESULT([$VPATH_b2h])
|
||||
+
|
||||
+AC_MSG_CHECKING(absolute host location of prefix)
|
||||
+ABS_PATH_HOST([prefix_b2h],[prefix])
|
||||
+AC_MSG_RESULT([$prefix_b2h])
|
||||
+
|
||||
+AC_MSG_CHECKING(absolute host location of srcdir)
|
||||
+ABS_PATH_HOST([srcdir_b2h],[srcdir])
|
||||
+AC_MSG_RESULT([$srcdir_b2h])
|
||||
+
|
||||
+AC_MSG_CHECKING(absolute host location of abs_srcdir)
|
||||
+ABS_PATH_HOST([abs_srcdir_b2h],[srcdir])
|
||||
+AC_MSG_RESULT([$abs_srcdir_b2h])
|
||||
+
|
||||
+my_builddir=.
|
||||
+AC_MSG_CHECKING(Absolute host location of abs_builddir)
|
||||
+ABS_PATH_HOST([abs_builddir_b2h],[my_builddir])
|
||||
+AC_MSG_RESULT([$abs_builddir_b2h])
|
||||
+
|
||||
AC_MSG_CHECKING([for init system calls])
|
||||
AC_SUBST(INITSYS)
|
||||
case $host in
|
||||
@@ -0,0 +1,62 @@
|
||||
From f932c3d21ae13bd00139d0579eed9149e2fdf763 Mon Sep 17 00:00:00 2001
|
||||
From: Christoph Reiter <reiter.christoph@gmail.com>
|
||||
Date: Tue, 21 Sep 2021 20:53:59 +0200
|
||||
Subject: [PATCH 023/N] sysconfig: mingw sysconfig like posix
|
||||
|
||||
---
|
||||
Lib/sysconfig.py | 28 ++++++++++++++--------------
|
||||
1 file changed, 14 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py
|
||||
index 19fa25a..08efb9b 100644
|
||||
--- a/Lib/sysconfig.py
|
||||
+++ b/Lib/sysconfig.py
|
||||
@@ -49,13 +49,13 @@
|
||||
'data': '{base}',
|
||||
},
|
||||
'nt': {
|
||||
- 'stdlib': '{installed_base}/Lib',
|
||||
- 'platstdlib': '{base}/Lib',
|
||||
- 'purelib': '{base}/Lib/site-packages',
|
||||
- 'platlib': '{base}/Lib/site-packages',
|
||||
- 'include': '{installed_base}/Include',
|
||||
- 'platinclude': '{installed_base}/Include',
|
||||
- 'scripts': '{base}/Scripts',
|
||||
+ 'stdlib': '{installed_base}/lib/python{py_version_short}',
|
||||
+ 'platstdlib': '{base}/lib/python{py_version_short}',
|
||||
+ 'purelib': '{base}/lib/python{py_version_short}/site-packages',
|
||||
+ 'platlib': '{base}/lib/python{py_version_short}/site-packages',
|
||||
+ 'include': '{installed_base}/include/python{py_version_short}',
|
||||
+ 'platinclude': '{installed_base}/include/python{py_version_short}',
|
||||
+ 'scripts': '{base}/bin',
|
||||
'data': '{base}',
|
||||
},
|
||||
# Downstream distributors can overwrite the default install scheme.
|
||||
@@ -141,12 +141,12 @@ def joinuser(*args):
|
||||
_INSTALL_SCHEMES |= {
|
||||
# NOTE: When modifying "purelib" scheme, update site._get_path() too.
|
||||
'nt_user': {
|
||||
- 'stdlib': '{userbase}/Python{py_version_nodot_plat}',
|
||||
- 'platstdlib': '{userbase}/Python{py_version_nodot_plat}',
|
||||
- 'purelib': '{userbase}/Python{py_version_nodot_plat}/site-packages',
|
||||
- 'platlib': '{userbase}/Python{py_version_nodot_plat}/site-packages',
|
||||
- 'include': '{userbase}/Python{py_version_nodot_plat}/Include',
|
||||
- 'scripts': '{userbase}/Python{py_version_nodot_plat}/Scripts',
|
||||
+ 'stdlib': '{userbase}/lib/python{py_version_short}',
|
||||
+ 'platstdlib': '{userbase}/lib/python{py_version_short}',
|
||||
+ 'purelib': '{userbase}/lib/python{py_version_short}/site-packages',
|
||||
+ 'platlib': '{userbase}/lib/python{py_version_short}/site-packages',
|
||||
+ 'include': '{userbase}/include/python{py_version_short}',
|
||||
+ 'scripts': '{userbase}/bin',
|
||||
'data': '{userbase}',
|
||||
},
|
||||
'posix_user': {
|
||||
@@ -584,7 +584,7 @@ def _init_non_posix(vars):
|
||||
except IndexError:
|
||||
pass
|
||||
vars['EXE'] = '.exe'
|
||||
- vars['VERSION'] = _PY_VERSION_SHORT_NO_DOT
|
||||
+ vars['VERSION'] = _PY_VERSION_SHORT
|
||||
vars['BINDIR'] = os.path.dirname(_safe_realpath(sys.executable))
|
||||
vars['TZPATH'] = ''
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
From f6b5ccaebb9a7008218165db5f2b8e05f97ed432 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?=
|
||||
<alexey.pawlow@gmail.com>
|
||||
Date: Thu, 17 Jun 2021 18:51:53 +0530
|
||||
Subject: [PATCH 024/N] mingw use backslashes in compileall py
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Co-authored-by: Алексей <alexey.pawlow@gmail.com>
|
||||
---
|
||||
Lib/compileall.py | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/Lib/compileall.py b/Lib/compileall.py
|
||||
index d394156..ef3633e 100644
|
||||
--- a/Lib/compileall.py
|
||||
+++ b/Lib/compileall.py
|
||||
@@ -38,6 +38,8 @@ def _walk_dir(dir, maxlevels, quiet=0):
|
||||
if name == '__pycache__':
|
||||
continue
|
||||
fullname = os.path.join(dir, name)
|
||||
+ if sys.platform == "win32" and sys.version.find("GCC") >= 0:
|
||||
+ fullname = fullname.replace('\\','/')
|
||||
if not os.path.isdir(fullname):
|
||||
yield fullname
|
||||
elif (maxlevels > 0 and name != os.curdir and name != os.pardir and
|
||||
32
mingw-w64-python3.12/0025-mingw-pdcurses_ISPAD.patch
Normal file
32
mingw-w64-python3.12/0025-mingw-pdcurses_ISPAD.patch
Normal file
@@ -0,0 +1,32 @@
|
||||
From 39dc626fa370443de87a52a4f4c20c07688be64b Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?=
|
||||
<alexey.pawlow@gmail.com>
|
||||
Date: Thu, 17 Jun 2021 18:51:55 +0530
|
||||
Subject: [PATCH 025/N] mingw pdcurses_ISPAD
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Co-authored-by: Алексей <alexey.pawlow@gmail.com>
|
||||
---
|
||||
Include/py_curses.h | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
diff --git a/Include/py_curses.h b/Include/py_curses.h
|
||||
index e46b08e..34228fb 100644
|
||||
--- a/Include/py_curses.h
|
||||
+++ b/Include/py_curses.h
|
||||
@@ -36,6 +36,13 @@
|
||||
#include <curses.h>
|
||||
#endif
|
||||
|
||||
+#if defined(__MINGW32__)
|
||||
+#include <windows.h>
|
||||
+#if !defined(_ISPAD)
|
||||
+#define _ISPAD 0x10
|
||||
+#endif
|
||||
+#endif
|
||||
+
|
||||
#ifdef HAVE_NCURSES_H
|
||||
/* configure was checking <curses.h>, but we will
|
||||
use <ncurses.h>, which has some or all these features. */
|
||||
26
mingw-w64-python3.12/0026-remove_path_max.default.patch
Normal file
26
mingw-w64-python3.12/0026-remove_path_max.default.patch
Normal file
@@ -0,0 +1,26 @@
|
||||
From b6618fd164ce8bfc3e93ead5d8f2cbdb7db1ac9b Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?=
|
||||
<alexey.pawlow@gmail.com>
|
||||
Date: Thu, 17 Jun 2021 18:51:59 +0530
|
||||
Subject: [PATCH 026/N] remove_path_max.default
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Co-authored-by: Алексей <alexey.pawlow@gmail.com>
|
||||
---
|
||||
Include/osdefs.h | 1 -
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
diff --git a/Include/osdefs.h b/Include/osdefs.h
|
||||
index 3243944..99d4977 100644
|
||||
--- a/Include/osdefs.h
|
||||
+++ b/Include/osdefs.h
|
||||
@@ -10,7 +10,6 @@ extern "C" {
|
||||
#ifdef MS_WINDOWS
|
||||
#define SEP L'\\'
|
||||
#define ALTSEP L'/'
|
||||
-#define MAXPATHLEN 256
|
||||
#define DELIM L';'
|
||||
#endif
|
||||
|
||||
57
mingw-w64-python3.12/0027-dont-link-with-gettext.patch
Normal file
57
mingw-w64-python3.12/0027-dont-link-with-gettext.patch
Normal file
@@ -0,0 +1,57 @@
|
||||
From 4a9078f3f394c66eb4c224c1e67ed0fc5756c526 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?=
|
||||
<alexey.pawlow@gmail.com>
|
||||
Date: Thu, 17 Jun 2021 18:52:00 +0530
|
||||
Subject: [PATCH 027/N] dont link with gettext
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Co-authored-by: Алексей <alexey.pawlow@gmail.com>
|
||||
---
|
||||
Modules/_localemodule.c | 7 +++++++
|
||||
configure.ac | 9 +++++++++
|
||||
2 files changed, 16 insertions(+)
|
||||
|
||||
diff --git a/Modules/_localemodule.c b/Modules/_localemodule.c
|
||||
index cbd036f..9d71bb3 100644
|
||||
--- a/Modules/_localemodule.c
|
||||
+++ b/Modules/_localemodule.c
|
||||
@@ -12,6 +12,13 @@ This software comes with no warranty. Use at your own risk.
|
||||
#define PY_SSIZE_T_CLEAN
|
||||
#include "Python.h"
|
||||
#include "pycore_fileutils.h"
|
||||
+#ifdef __MINGW32__
|
||||
+/* The header libintl.h and library libintl may exist on mingw host.
|
||||
+ * To be compatible with MSVC build we has to undef some defines.
|
||||
+ */
|
||||
+#undef HAVE_LIBINTL_H
|
||||
+#undef HAVE_BIND_TEXTDOMAIN_CODESET
|
||||
+#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <locale.h>
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index ceab383..7a34f86 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -3828,10 +3828,19 @@ AC_SEARCH_LIBS([sem_init], [pthread rt posix4])
|
||||
fi
|
||||
|
||||
# check if we need libintl for locale functions
|
||||
+case $host in
|
||||
+ *-*-mingw*)
|
||||
+ dnl Native windows build don't use libintl (see _localemodule.c).
|
||||
+ dnl Also we don't like setup.py to add "intl" library to the list
|
||||
+ dnl when build _locale module.
|
||||
+ ;;
|
||||
+ *)
|
||||
AC_CHECK_LIB([intl], [textdomain],
|
||||
[AC_DEFINE([WITH_LIBINTL], [1],
|
||||
[Define to 1 if libintl is needed for locale functions.])
|
||||
LIBS="-lintl $LIBS"])
|
||||
+ ;;
|
||||
+esac
|
||||
|
||||
# checks for system dependent C++ extensions support
|
||||
case "$ac_sys_system" in
|
||||
30
mingw-w64-python3.12/0028-ctypes-python-dll.patch
Normal file
30
mingw-w64-python3.12/0028-ctypes-python-dll.patch
Normal file
@@ -0,0 +1,30 @@
|
||||
From 774710a21540f1aeccee20cd320f3c818e7ebb26 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?=
|
||||
<alexey.pawlow@gmail.com>
|
||||
Date: Thu, 17 Jun 2021 18:52:01 +0530
|
||||
Subject: [PATCH 028/N] ctypes python dll
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Co-authored-by: Алексей <alexey.pawlow@gmail.com>
|
||||
Co-authored-by: Christoph Reiter <reiter.christoph@gmail.com>
|
||||
---
|
||||
Lib/ctypes/__init__.py | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Lib/ctypes/__init__.py b/Lib/ctypes/__init__.py
|
||||
index 95353ba..2b06fba 100644
|
||||
--- a/Lib/ctypes/__init__.py
|
||||
+++ b/Lib/ctypes/__init__.py
|
||||
@@ -464,7 +464,9 @@ def LoadLibrary(self, name):
|
||||
cdll = LibraryLoader(CDLL)
|
||||
pydll = LibraryLoader(PyDLL)
|
||||
|
||||
-if _os.name == "nt":
|
||||
+if _os.name == "nt" and _sys.version.find('GCC') >= 0:
|
||||
+ pythonapi = PyDLL("libpython%d.%d%s.dll" % (_sys.version_info[:2] + (_sys.abiflags,)), None)
|
||||
+elif _os.name == "nt":
|
||||
pythonapi = PyDLL("python dll", None, _sys.dllhandle)
|
||||
elif _sys.platform == "cygwin":
|
||||
pythonapi = PyDLL("libpython%d.%d.dll" % _sys.version_info[:2])
|
||||
27
mingw-w64-python3.12/0029-gdbm-module-includes.patch
Normal file
27
mingw-w64-python3.12/0029-gdbm-module-includes.patch
Normal file
@@ -0,0 +1,27 @@
|
||||
From 8e4d2ab38090e420066be303c315387106edd8b0 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?=
|
||||
<alexey.pawlow@gmail.com>
|
||||
Date: Thu, 17 Jun 2021 18:52:02 +0530
|
||||
Subject: [PATCH 029/N] gdbm module includes
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Co-authored-by: Алексей <alexey.pawlow@gmail.com>
|
||||
---
|
||||
Modules/_gdbmmodule.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Modules/_gdbmmodule.c b/Modules/_gdbmmodule.c
|
||||
index 4dbb574..f8701cb 100644
|
||||
--- a/Modules/_gdbmmodule.c
|
||||
+++ b/Modules/_gdbmmodule.c
|
||||
@@ -12,7 +12,7 @@
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
-#if defined(WIN32) && !defined(__CYGWIN__)
|
||||
+#if defined(WIN32) && !defined(__CYGWIN__) && !defined(__MINGW32__)
|
||||
#include "gdbmerrno.h"
|
||||
extern const char * gdbm_strerror(gdbm_error);
|
||||
#endif
|
||||
82
mingw-w64-python3.12/0030-use-gnu_printf-in-format.patch
Normal file
82
mingw-w64-python3.12/0030-use-gnu_printf-in-format.patch
Normal file
@@ -0,0 +1,82 @@
|
||||
From 6499cbfbfa97c2db6bd483a3033b0c57b1a85825 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?=
|
||||
<alexey.pawlow@gmail.com>
|
||||
Date: Thu, 17 Jun 2021 18:52:03 +0530
|
||||
Subject: [PATCH 030/N] use gnu_printf in format
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Co-authored-by: Алексей <alexey.pawlow@gmail.com>
|
||||
---
|
||||
Include/bytesobject.h | 4 ++--
|
||||
Include/pyerrors.h | 4 ++--
|
||||
Include/pyport.h | 6 ++++++
|
||||
Include/sysmodule.h | 4 ++--
|
||||
4 files changed, 12 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/Include/bytesobject.h b/Include/bytesobject.h
|
||||
index ee448cd..d10ec3f 100644
|
||||
--- a/Include/bytesobject.h
|
||||
+++ b/Include/bytesobject.h
|
||||
@@ -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);
|
||||
diff --git a/Include/pyerrors.h b/Include/pyerrors.h
|
||||
index d089fa7..f8e604e 100644
|
||||
--- a/Include/pyerrors.h
|
||||
+++ b/Include/pyerrors.h
|
||||
@@ -321,9 +321,9 @@ PyAPI_FUNC(int) PyUnicodeTranslateError_SetReason(
|
||||
);
|
||||
|
||||
PyAPI_FUNC(int) PyOS_snprintf(char *str, size_t size, const char *format, ...)
|
||||
- Py_GCC_ATTRIBUTE((format(printf, 3, 4)));
|
||||
+ Py_PRINTF(3, 4);
|
||||
PyAPI_FUNC(int) PyOS_vsnprintf(char *str, size_t size, const char *format, va_list va)
|
||||
- Py_GCC_ATTRIBUTE((format(printf, 3, 0)));
|
||||
+ Py_PRINTF(3, 0);
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
# define Py_CPYTHON_ERRORS_H
|
||||
diff --git a/Include/pyport.h b/Include/pyport.h
|
||||
index b7f3e66..b8810c1 100644
|
||||
--- a/Include/pyport.h
|
||||
+++ b/Include/pyport.h
|
||||
@@ -666,6 +666,12 @@ extern char * _getpty(int *, int, mode_t, int);
|
||||
|
||||
#define Py_VA_COPY va_copy
|
||||
|
||||
+#if defined(__GNUC__) && ((__GNUC__ == 4 && __GNUC_MINOR__>= 4) || __GNUC__ > 4)
|
||||
+# define Py_PRINTF(X,Y) Py_GCC_ATTRIBUTE((format(gnu_printf,X,Y)))
|
||||
+#else
|
||||
+# define Py_PRINTF(X,Y) Py_GCC_ATTRIBUTE((format(printf,X,Y)))
|
||||
+#endif
|
||||
+
|
||||
/*
|
||||
* Convenient macros to deal with endianness of the platform. WORDS_BIGENDIAN is
|
||||
* detected by configure and defined in pyconfig.h. The code in pyconfig.h
|
||||
diff --git a/Include/sysmodule.h b/Include/sysmodule.h
|
||||
index 96f8838..55c558a 100644
|
||||
--- a/Include/sysmodule.h
|
||||
+++ b/Include/sysmodule.h
|
||||
@@ -15,9 +15,9 @@ Py_DEPRECATED(3.11) PyAPI_FUNC(void) PySys_SetArgvEx(int, wchar_t **, int);
|
||||
Py_DEPRECATED(3.11) PyAPI_FUNC(void) PySys_SetPath(const wchar_t *);
|
||||
|
||||
PyAPI_FUNC(void) PySys_WriteStdout(const char *format, ...)
|
||||
- Py_GCC_ATTRIBUTE((format(printf, 1, 2)));
|
||||
+ Py_PRINTF(1, 2);
|
||||
PyAPI_FUNC(void) PySys_WriteStderr(const char *format, ...)
|
||||
- Py_GCC_ATTRIBUTE((format(printf, 1, 2)));
|
||||
+ Py_PRINTF(1, 2);
|
||||
PyAPI_FUNC(void) PySys_FormatStdout(const char *format, ...);
|
||||
PyAPI_FUNC(void) PySys_FormatStderr(const char *format, ...);
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
From 81bfbaabab3a2847a9cf434e60bab959c9923db1 Mon Sep 17 00:00:00 2001
|
||||
From: Ray Donnelly <mingw.android@gmail.com>
|
||||
Date: Thu, 17 Jun 2021 18:52:03 +0530
|
||||
Subject: [PATCH 031/N] mingw fix ssl dont use enum_certificates
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Co-authored-by: Алексей <alexey.pawlow@gmail.com>
|
||||
Co-authored-by: Christoph Reiter <reiter.christoph@gmail.com>
|
||||
---
|
||||
Lib/ssl.py | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/Lib/ssl.py b/Lib/ssl.py
|
||||
index 3586d3a..58a92dc 100644
|
||||
--- a/Lib/ssl.py
|
||||
+++ b/Lib/ssl.py
|
||||
@@ -254,7 +254,7 @@ class _TLSMessageType:
|
||||
CHANGE_CIPHER_SPEC = 0x0101
|
||||
|
||||
|
||||
-if sys.platform == "win32":
|
||||
+if sys.platform == "win32" and sys.version.find("GCC") == -1:
|
||||
from _ssl import enum_certificates, enum_crls
|
||||
|
||||
from socket import socket, SOCK_STREAM, create_connection
|
||||
@@ -529,7 +529,7 @@ def _load_windows_store_certs(self, storename, purpose):
|
||||
def load_default_certs(self, purpose=Purpose.SERVER_AUTH):
|
||||
if not isinstance(purpose, _ASN1Object):
|
||||
raise TypeError(purpose)
|
||||
- if sys.platform == "win32":
|
||||
+ if sys.platform == "win32" and sys.version.find("GCC") == -1:
|
||||
for storename in self._windows_cert_stores:
|
||||
self._load_windows_store_certs(storename, purpose)
|
||||
self.set_default_verify_paths()
|
||||
@@ -0,0 +1,36 @@
|
||||
From 46c5de660b742c85dc5d941dbe9d063e920a3686 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?=
|
||||
<alexey.pawlow@gmail.com>
|
||||
Date: Thu, 17 Jun 2021 18:52:06 +0530
|
||||
Subject: [PATCH 032/N] fix using dllhandle and winver mingw
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Co-authored-by: Алексей <alexey.pawlow@gmail.com>
|
||||
---
|
||||
Python/sysmodule.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
|
||||
index 14f4447..6c2405c 100644
|
||||
--- a/Python/sysmodule.c
|
||||
+++ b/Python/sysmodule.c
|
||||
@@ -42,7 +42,7 @@ Data members:
|
||||
#include <windows.h>
|
||||
#endif /* MS_WINDOWS */
|
||||
|
||||
-#ifdef MS_COREDLL
|
||||
+#if defined(MS_WINDOWS) && defined(Py_ENABLE_SHARED)
|
||||
extern void *PyWin_DLLhModule;
|
||||
/* A string loaded from the DLL at startup: */
|
||||
extern const char *PyWin_DLLVersionString;
|
||||
@@ -3291,7 +3291,7 @@ _PySys_InitCore(PyThreadState *tstate, PyObject *sysdict)
|
||||
SET_SYS_FROM_STRING("byteorder", "little");
|
||||
#endif
|
||||
|
||||
-#ifdef MS_COREDLL
|
||||
+#if defined(MS_WINDOWS) && defined(Py_ENABLE_SHARED)
|
||||
SET_SYS("dllhandle", PyLong_FromVoidPtr(PyWin_DLLhModule));
|
||||
SET_SYS_FROM_STRING("winver", PyWin_DLLVersionString);
|
||||
#endif
|
||||
@@ -0,0 +1,39 @@
|
||||
From 5e0a48384fb296afed84d2ab346c0d5120b8489e Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?=
|
||||
<alexey.pawlow@gmail.com>
|
||||
Date: Thu, 17 Jun 2021 18:52:07 +0530
|
||||
Subject: [PATCH 033/N] Add AMD64 to sys config so msvccompiler
|
||||
get_build_version works
|
||||
|
||||
---
|
||||
Python/getcompiler.c | 17 ++++++++++++++++-
|
||||
1 file changed, 16 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Python/getcompiler.c b/Python/getcompiler.c
|
||||
index a5d2623..3e31c80 100644
|
||||
--- a/Python/getcompiler.c
|
||||
+++ b/Python/getcompiler.c
|
||||
@@ -10,7 +10,22 @@
|
||||
#if defined(__clang__)
|
||||
#define COMPILER "[Clang " __clang_version__ "]"
|
||||
#elif defined(__GNUC__)
|
||||
-#define COMPILER "[GCC " __VERSION__ "]"
|
||||
+/* To not break compatibility with things that determine
|
||||
+ CPU arch by calling get_build_version in msvccompiler.py
|
||||
+ (such as NumPy) add "32 bit" or "64 bit (AMD64)" on Windows
|
||||
+ and also use a space as a separator rather than a newline. */
|
||||
+#if defined(_WIN32)
|
||||
+#define COMP_SEP " "
|
||||
+#if defined(__x86_64__)
|
||||
+#define ARCH_SUFFIX " 64 bit (AMD64)"
|
||||
+#else
|
||||
+#define ARCH_SUFFIX " 32 bit"
|
||||
+#endif
|
||||
+#else
|
||||
+#define COMP_SEP "\n"
|
||||
+#define ARCH_SUFFIX ""
|
||||
+#endif
|
||||
+#define COMPILER COMP_SEP "[GCC " __VERSION__ ARCH_SUFFIX "]"
|
||||
// Generic fallbacks.
|
||||
#elif defined(__cplusplus)
|
||||
#define COMPILER "[C++]"
|
||||
@@ -0,0 +1,30 @@
|
||||
From ec57238583ffa0470c12bc5bc27536f514e5a855 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?=
|
||||
<alexey.pawlow@gmail.com>
|
||||
Date: Thu, 17 Jun 2021 18:52:08 +0530
|
||||
Subject: [PATCH 034/N] MINGW link with additional library
|
||||
|
||||
---
|
||||
configure.ac | 9 +++++++++
|
||||
1 file changed, 9 insertions(+)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 7a34f86..dde8937 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -7053,6 +7053,15 @@ for dir in $SRCDIRS; do
|
||||
done
|
||||
AC_MSG_RESULT([done])
|
||||
|
||||
+# For mingw build need additional library for linking
|
||||
+case $host in
|
||||
+ *-*-mingw*)
|
||||
+ LIBS="$LIBS -lversion -lshlwapi -lpathcch"
|
||||
+ ;;
|
||||
+ *)
|
||||
+ ;;
|
||||
+esac
|
||||
+
|
||||
# Availability of -O2:
|
||||
AC_CACHE_CHECK([for -O2], [ac_cv_compile_o2], [
|
||||
saved_cflags="$CFLAGS"
|
||||
27
mingw-w64-python3.12/0035-install-msilib.patch
Normal file
27
mingw-w64-python3.12/0035-install-msilib.patch
Normal file
@@ -0,0 +1,27 @@
|
||||
From 32cf53fc0ff98c55ebe0871f4716e58878cda0fe Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Sa=C3=BAl=20Ibarra=20Corretg=C3=A9?= <s@saghul.net>
|
||||
Date: Thu, 17 Jun 2021 18:52:09 +0530
|
||||
Subject: [PATCH 035/N] install msilib
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Co-authored-by: Алексей <alexey.pawlow@gmail.com>
|
||||
Co-authored-by: Christoph Reiter <reiter.christoph@gmail.com>
|
||||
Co-authored-by: Ray Donnelly <mingw.android@gmail.com>
|
||||
---
|
||||
Makefile.pre.in | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/Makefile.pre.in b/Makefile.pre.in
|
||||
index b5c0c41..e400d56 100644
|
||||
--- a/Makefile.pre.in
|
||||
+++ b/Makefile.pre.in
|
||||
@@ -2118,6 +2118,7 @@ LIBSUBDIRS= asyncio \
|
||||
tkinter \
|
||||
tomllib \
|
||||
turtledemo \
|
||||
+ msilib \
|
||||
unittest \
|
||||
urllib \
|
||||
venv venv/scripts venv/scripts/common venv/scripts/posix \
|
||||
27
mingw-w64-python3.12/0036-fix-signal-module-build.patch
Normal file
27
mingw-w64-python3.12/0036-fix-signal-module-build.patch
Normal file
@@ -0,0 +1,27 @@
|
||||
From 87bc3aedc10cb8c01c76f7a105aeb044f0cf93a1 Mon Sep 17 00:00:00 2001
|
||||
From: Christoph Reiter <reiter.christoph@gmail.com>
|
||||
Date: Thu, 17 Jun 2021 18:52:10 +0530
|
||||
Subject: [PATCH 036/N] fix signal module build
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Co-authored-by: Алексей <alexey.pawlow@gmail.com>
|
||||
Co-authored-by: Naveen M K <naveen521kk@gmail.com>
|
||||
---
|
||||
Modules/Setup.bootstrap.in | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Modules/Setup.bootstrap.in b/Modules/Setup.bootstrap.in
|
||||
index d8b41ee..ec0f81e 100644
|
||||
--- a/Modules/Setup.bootstrap.in
|
||||
+++ b/Modules/Setup.bootstrap.in
|
||||
@@ -9,7 +9,7 @@
|
||||
atexit atexitmodule.c
|
||||
faulthandler faulthandler.c
|
||||
@INITSYS@ posixmodule.c
|
||||
-_signal signalmodule.c
|
||||
+_signal signalmodule.c -lws2_32
|
||||
_tracemalloc _tracemalloc.c
|
||||
|
||||
# modules used by importlib, deepfreeze, freeze, runpy, and sysconfig
|
||||
@@ -0,0 +1,53 @@
|
||||
From 631c774c6b1483c0524769d15b45b0ab21a53769 Mon Sep 17 00:00:00 2001
|
||||
From: Christoph Reiter <reiter.christoph@gmail.com>
|
||||
Date: Thu, 17 Jun 2021 18:52:11 +0530
|
||||
Subject: [PATCH 037/N] build: build winconsoleio and _testconsole
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Co-authored-by: Алексей <alexey.pawlow@gmail.com>
|
||||
Co-authored-by: Naveen M K <naveen521kk@gmail.com>
|
||||
---
|
||||
Modules/Setup.bootstrap.in | 2 +-
|
||||
Modules/Setup.stdlib.in | 1 +
|
||||
configure.ac | 1 +
|
||||
3 files changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Modules/Setup.bootstrap.in b/Modules/Setup.bootstrap.in
|
||||
index ec0f81e..cec80f5 100644
|
||||
--- a/Modules/Setup.bootstrap.in
|
||||
+++ b/Modules/Setup.bootstrap.in
|
||||
@@ -16,7 +16,7 @@ _tracemalloc _tracemalloc.c
|
||||
_codecs _codecsmodule.c
|
||||
_collections _collectionsmodule.c
|
||||
errno errnomodule.c
|
||||
-_io _io/_iomodule.c _io/iobase.c _io/fileio.c _io/bytesio.c _io/bufferedio.c _io/textio.c _io/stringio.c
|
||||
+_io _io/_iomodule.c _io/iobase.c _io/fileio.c _io/bytesio.c _io/bufferedio.c _io/textio.c _io/stringio.c _io/winconsoleio.c
|
||||
itertools itertoolsmodule.c
|
||||
_sre _sre/sre.c
|
||||
_thread _threadmodule.c
|
||||
diff --git a/Modules/Setup.stdlib.in b/Modules/Setup.stdlib.in
|
||||
index 202a55e..3f4d7f6 100644
|
||||
--- a/Modules/Setup.stdlib.in
|
||||
+++ b/Modules/Setup.stdlib.in
|
||||
@@ -184,6 +184,7 @@
|
||||
@MODULE__TESTMULTIPHASE_TRUE@_testmultiphase _testmultiphase.c
|
||||
@MODULE__TESTMULTIPHASE_TRUE@_testsinglephase _testsinglephase.c
|
||||
@MODULE__CTYPES_TEST_TRUE@_ctypes_test _ctypes/_ctypes_test.c
|
||||
+@MODULE__TESTCONSOLE_TRUE@_testconsole ../PC/_testconsole.c
|
||||
|
||||
# Limited API template modules; must be built as shared modules.
|
||||
@MODULE_XXLIMITED_TRUE@xxlimited xxlimited.c
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index dde8937..3b4745f 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -7823,6 +7823,7 @@ PY_STDLIB_MOD([_testimportmultiple], [test "$TEST_MODULES" = yes], [test "$ac_cv
|
||||
PY_STDLIB_MOD([_testmultiphase], [test "$TEST_MODULES" = yes], [test "$ac_cv_func_dlopen" = 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],
|
||||
[], [$LIBM])
|
||||
26
mingw-w64-python3.12/0038-expose-sem_unlink.patch
Normal file
26
mingw-w64-python3.12/0038-expose-sem_unlink.patch
Normal file
@@ -0,0 +1,26 @@
|
||||
From d3687f2585f3233cdeea3ffc53683d6ea4f655ca Mon Sep 17 00:00:00 2001
|
||||
From: Christoph Reiter <reiter.christoph@gmail.com>
|
||||
Date: Thu, 17 Jun 2021 18:52:12 +0530
|
||||
Subject: [PATCH 038/N] expose sem_unlink
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Co-authored-by: Алексей <alexey.pawlow@gmail.com>
|
||||
---
|
||||
Modules/_multiprocessing/multiprocessing.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Modules/_multiprocessing/multiprocessing.c b/Modules/_multiprocessing/multiprocessing.c
|
||||
index 8f9daa5..eb2cb5f 100644
|
||||
--- a/Modules/_multiprocessing/multiprocessing.c
|
||||
+++ b/Modules/_multiprocessing/multiprocessing.c
|
||||
@@ -180,7 +180,7 @@ static PyMethodDef module_methods[] = {
|
||||
_MULTIPROCESSING_RECV_METHODDEF
|
||||
_MULTIPROCESSING_SEND_METHODDEF
|
||||
#endif
|
||||
-#if !defined(POSIX_SEMAPHORES_NOT_ENABLED) && !defined(__ANDROID__)
|
||||
+#if defined(MS_WINDOWS) || (!defined(POSIX_SEMAPHORES_NOT_ENABLED) && !defined(__ANDROID__))
|
||||
_MULTIPROCESSING_SEM_UNLINK_METHODDEF
|
||||
#endif
|
||||
{NULL}
|
||||
485
mingw-w64-python3.12/0039-Use-cygpty-while-using-isatty.patch
Normal file
485
mingw-w64-python3.12/0039-Use-cygpty-while-using-isatty.patch
Normal file
@@ -0,0 +1,485 @@
|
||||
From 542a2d46be156bfcfc555eeb3704455027529c72 Mon Sep 17 00:00:00 2001
|
||||
From: Christoph Reiter <reiter.christoph@gmail.com>
|
||||
Date: Thu, 17 Jun 2021 18:52:14 +0530
|
||||
Subject: [PATCH 039/N] Use cygpty while using isatty
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
so that msys shells are detected as interactive ones
|
||||
|
||||
Co-authored-by: Алексей <alexey.pawlow@gmail.com>
|
||||
Co-authored-by: Naveen M K <naveen521kk@gmail.com>
|
||||
---
|
||||
Include/iscygpty.h | 41 ++++++++++
|
||||
Makefile.pre.in | 2 +
|
||||
Modules/_io/fileio.c | 3 +-
|
||||
Modules/main.c | 3 +-
|
||||
Modules/posixmodule.c | 3 +-
|
||||
Objects/fileobject.c | 3 +-
|
||||
Python/bltinmodule.c | 5 +-
|
||||
Python/fileutils.c | 7 +-
|
||||
Python/frozenmain.c | 3 +-
|
||||
Python/iscygpty.c | 185 ++++++++++++++++++++++++++++++++++++++++++
|
||||
Python/pylifecycle.c | 5 +-
|
||||
11 files changed, 248 insertions(+), 12 deletions(-)
|
||||
create mode 100644 Include/iscygpty.h
|
||||
create mode 100644 Python/iscygpty.c
|
||||
|
||||
diff --git a/Include/iscygpty.h b/Include/iscygpty.h
|
||||
new file mode 100644
|
||||
index 0000000..82fd0af
|
||||
--- /dev/null
|
||||
+++ b/Include/iscygpty.h
|
||||
@@ -0,0 +1,41 @@
|
||||
+/*
|
||||
+ * iscygpty.h -- part of ptycheck
|
||||
+ * https://github.com/k-takata/ptycheck
|
||||
+ *
|
||||
+ * Copyright (c) 2015-2017 K.Takata
|
||||
+ *
|
||||
+ * You can redistribute it and/or modify it under the terms of either
|
||||
+ * the MIT license (as described below) or the Vim license.
|
||||
+ *
|
||||
+ * Permission is hereby granted, free of charge, to any person obtaining
|
||||
+ * a copy of this software and associated documentation files (the
|
||||
+ * "Software"), to deal in the Software without restriction, including
|
||||
+ * without limitation the rights to use, copy, modify, merge, publish,
|
||||
+ * distribute, sublicense, and/or sell copies of the Software, and to
|
||||
+ * permit persons to whom the Software is furnished to do so, subject to
|
||||
+ * the following conditions:
|
||||
+ *
|
||||
+ * The above copyright notice and this permission notice shall be
|
||||
+ * included in all copies or substantial portions of the Software.
|
||||
+ *
|
||||
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
+ */
|
||||
+
|
||||
+#ifndef _ISCYGPTY_H
|
||||
+#define _ISCYGPTY_H
|
||||
+
|
||||
+#ifdef _WIN32
|
||||
+int is_cygpty(int fd);
|
||||
+int is_cygpty_used(void);
|
||||
+#else
|
||||
+#define is_cygpty(fd) 0
|
||||
+#define is_cygpty_used() 0
|
||||
+#endif
|
||||
+
|
||||
+#endif /* _ISCYGPTY_H */
|
||||
diff --git a/Makefile.pre.in b/Makefile.pre.in
|
||||
index e400d56..93e23f0 100644
|
||||
--- a/Makefile.pre.in
|
||||
+++ b/Makefile.pre.in
|
||||
@@ -406,6 +406,7 @@ PYTHON_OBJS= \
|
||||
Python/instrumentation.o \
|
||||
Python/intrinsics.o \
|
||||
Python/legacy_tracing.o \
|
||||
+ Python/iscygpty.o \
|
||||
Python/marshal.o \
|
||||
Python/modsupport.o \
|
||||
Python/mysnprintf.o \
|
||||
@@ -1632,6 +1633,7 @@ PYTHON_HEADERS= \
|
||||
$(srcdir)/Include/import.h \
|
||||
$(srcdir)/Include/interpreteridobject.h \
|
||||
$(srcdir)/Include/intrcheck.h \
|
||||
+ $(srcdir)/Include/iscygpty.h \
|
||||
$(srcdir)/Include/iterobject.h \
|
||||
$(srcdir)/Include/listobject.h \
|
||||
$(srcdir)/Include/longobject.h \
|
||||
diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c
|
||||
index c8be998..c09410a 100644
|
||||
--- a/Modules/_io/fileio.c
|
||||
+++ b/Modules/_io/fileio.c
|
||||
@@ -20,6 +20,7 @@
|
||||
#endif
|
||||
#include <stddef.h> /* For offsetof */
|
||||
#include "_iomodule.h"
|
||||
+#include "iscygpty.h"
|
||||
|
||||
/*
|
||||
* Known likely problems:
|
||||
@@ -1143,7 +1144,7 @@ _io_FileIO_isatty_impl(fileio *self)
|
||||
return err_closed();
|
||||
Py_BEGIN_ALLOW_THREADS
|
||||
_Py_BEGIN_SUPPRESS_IPH
|
||||
- res = isatty(self->fd);
|
||||
+ res = isatty(self->fd) || is_cygpty(self->fd);
|
||||
_Py_END_SUPPRESS_IPH
|
||||
Py_END_ALLOW_THREADS
|
||||
return PyBool_FromLong(res);
|
||||
diff --git a/Modules/main.c b/Modules/main.c
|
||||
index 1b189b4..674b737 100644
|
||||
--- a/Modules/main.c
|
||||
+++ b/Modules/main.c
|
||||
@@ -7,6 +7,7 @@
|
||||
#include "pycore_pathconfig.h" // _PyPathConfig_ComputeSysPath0()
|
||||
#include "pycore_pylifecycle.h" // _Py_PreInitializeFromPyArgv()
|
||||
#include "pycore_pystate.h" // _PyInterpreterState_GET()
|
||||
+#include "iscygpty.h"
|
||||
|
||||
/* Includes for exit_sigint() */
|
||||
#include <stdio.h> // perror()
|
||||
@@ -92,7 +93,7 @@ static inline int config_run_code(const PyConfig *config)
|
||||
static int
|
||||
stdin_is_interactive(const PyConfig *config)
|
||||
{
|
||||
- return (isatty(fileno(stdin)) || config->interactive);
|
||||
+ return (isatty(fileno(stdin)) || config->interactive || is_cygpty(fileno(stdin)));
|
||||
}
|
||||
|
||||
|
||||
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
|
||||
index 6cde737..38687e0 100644
|
||||
--- a/Modules/posixmodule.c
|
||||
+++ b/Modules/posixmodule.c
|
||||
@@ -54,6 +54,7 @@
|
||||
#ifdef __ANDROID__
|
||||
# undef HAVE_FACCESSAT
|
||||
#endif
|
||||
+#include "iscygpty.h"
|
||||
|
||||
#include <stdio.h> // ctermid()
|
||||
#include <stdlib.h> // system()
|
||||
@@ -11180,7 +11181,7 @@ os_isatty_impl(PyObject *module, int fd)
|
||||
int return_value;
|
||||
Py_BEGIN_ALLOW_THREADS
|
||||
_Py_BEGIN_SUPPRESS_IPH
|
||||
- return_value = isatty(fd);
|
||||
+ return_value = isatty(fd) || is_cygpty(fd);
|
||||
_Py_END_SUPPRESS_IPH
|
||||
Py_END_ALLOW_THREADS
|
||||
return return_value;
|
||||
diff --git a/Objects/fileobject.c b/Objects/fileobject.c
|
||||
index e99e155..c74d2af 100644
|
||||
--- a/Objects/fileobject.c
|
||||
+++ b/Objects/fileobject.c
|
||||
@@ -3,6 +3,7 @@
|
||||
#define PY_SSIZE_T_CLEAN
|
||||
#include "Python.h"
|
||||
#include "pycore_call.h" // _PyObject_CallNoArgs()
|
||||
+#include "iscygpty.h"
|
||||
#include "pycore_runtime.h" // _PyRuntime
|
||||
|
||||
#if defined(HAVE_GETC_UNLOCKED) && !defined(_Py_MEMORY_SANITIZER)
|
||||
@@ -382,7 +383,7 @@ stdprinter_isatty(PyStdPrinter_Object *self, PyObject *Py_UNUSED(ignored))
|
||||
}
|
||||
|
||||
Py_BEGIN_ALLOW_THREADS
|
||||
- res = isatty(self->fd);
|
||||
+ res = isatty(self->fd) || is_cygpty(self->fd);
|
||||
Py_END_ALLOW_THREADS
|
||||
|
||||
return PyBool_FromLong(res);
|
||||
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
|
||||
index 84fbc33..ac9166c 100644
|
||||
--- a/Python/bltinmodule.c
|
||||
+++ b/Python/bltinmodule.c
|
||||
@@ -1,6 +1,7 @@
|
||||
/* Built-in functions */
|
||||
|
||||
#include "Python.h"
|
||||
+#include "iscygpty.h"
|
||||
#include <ctype.h>
|
||||
#include "pycore_ast.h" // _PyAST_Validate()
|
||||
#include "pycore_call.h" // _PyObject_CallNoArgs()
|
||||
@@ -2153,7 +2154,7 @@ builtin_input_impl(PyObject *module, PyObject *prompt)
|
||||
Py_DECREF(tmp);
|
||||
if (fd < 0 && PyErr_Occurred())
|
||||
return NULL;
|
||||
- tty = fd == fileno(stdin) && isatty(fd);
|
||||
+ tty = fd == fileno(stdin) && (isatty(fd) || is_cygpty(fd));
|
||||
}
|
||||
if (tty) {
|
||||
tmp = PyObject_CallMethodNoArgs(fout, &_Py_ID(fileno));
|
||||
@@ -2166,7 +2167,7 @@ builtin_input_impl(PyObject *module, PyObject *prompt)
|
||||
Py_DECREF(tmp);
|
||||
if (fd < 0 && PyErr_Occurred())
|
||||
return NULL;
|
||||
- tty = fd == fileno(stdout) && isatty(fd);
|
||||
+ tty = fd == fileno(stdout) && (isatty(fd) || is_cygpty(fd));
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/Python/fileutils.c b/Python/fileutils.c
|
||||
index c752175..6d3b04f 100644
|
||||
--- a/Python/fileutils.c
|
||||
+++ b/Python/fileutils.c
|
||||
@@ -1,4 +1,5 @@
|
||||
#include "Python.h"
|
||||
+#include "iscygpty.h"
|
||||
#include "pycore_fileutils.h" // fileutils definitions
|
||||
#include "pycore_runtime.h" // _PyRuntime
|
||||
#include "osdefs.h" // SEP
|
||||
@@ -77,7 +78,7 @@ _Py_device_encoding(int fd)
|
||||
int valid;
|
||||
Py_BEGIN_ALLOW_THREADS
|
||||
_Py_BEGIN_SUPPRESS_IPH
|
||||
- valid = isatty(fd);
|
||||
+ valid = isatty(fd) || is_cygpty(fd);
|
||||
_Py_END_SUPPRESS_IPH
|
||||
Py_END_ALLOW_THREADS
|
||||
if (!valid)
|
||||
@@ -1925,12 +1926,12 @@ _Py_write_impl(int fd, const void *buf, size_t count, int gil_held)
|
||||
depending on heap usage). */
|
||||
if (gil_held) {
|
||||
Py_BEGIN_ALLOW_THREADS
|
||||
- if (isatty(fd)) {
|
||||
+ if (isatty(fd) || is_cygpty(fd)) {
|
||||
count = 32767;
|
||||
}
|
||||
Py_END_ALLOW_THREADS
|
||||
} else {
|
||||
- if (isatty(fd)) {
|
||||
+ if (isatty(fd) || is_cygpty(fd)) {
|
||||
count = 32767;
|
||||
}
|
||||
}
|
||||
diff --git a/Python/frozenmain.c b/Python/frozenmain.c
|
||||
index f8be165..d18c7b3 100644
|
||||
--- a/Python/frozenmain.c
|
||||
+++ b/Python/frozenmain.c
|
||||
@@ -3,6 +3,7 @@
|
||||
#include "Python.h"
|
||||
#include "pycore_runtime.h" // _PyRuntime_Initialize()
|
||||
#include <locale.h>
|
||||
+#include "iscygpty.h"
|
||||
|
||||
#ifdef MS_WINDOWS
|
||||
extern void PyWinFreeze_ExeInit(void);
|
||||
@@ -71,7 +72,7 @@ Py_FrozenMain(int argc, char **argv)
|
||||
sts = 0;
|
||||
}
|
||||
|
||||
- if (inspect && isatty((int)fileno(stdin))) {
|
||||
+ if (inspect && (isatty((int)fileno(stdin)) || is_cygpty((int)fileno(stdin))))
|
||||
sts = PyRun_AnyFile(stdin, "<stdin>") != 0;
|
||||
}
|
||||
|
||||
diff --git a/Python/iscygpty.c b/Python/iscygpty.c
|
||||
new file mode 100644
|
||||
index 0000000..722f88f
|
||||
--- /dev/null
|
||||
+++ b/Python/iscygpty.c
|
||||
@@ -0,0 +1,185 @@
|
||||
+/*
|
||||
+ * iscygpty.c -- part of ptycheck
|
||||
+ * https://github.com/k-takata/ptycheck
|
||||
+ *
|
||||
+ * Copyright (c) 2015-2017 K.Takata
|
||||
+ *
|
||||
+ * You can redistribute it and/or modify it under the terms of either
|
||||
+ * the MIT license (as described below) or the Vim license.
|
||||
+ *
|
||||
+ * Permission is hereby granted, free of charge, to any person obtaining
|
||||
+ * a copy of this software and associated documentation files (the
|
||||
+ * "Software"), to deal in the Software without restriction, including
|
||||
+ * without limitation the rights to use, copy, modify, merge, publish,
|
||||
+ * distribute, sublicense, and/or sell copies of the Software, and to
|
||||
+ * permit persons to whom the Software is furnished to do so, subject to
|
||||
+ * the following conditions:
|
||||
+ *
|
||||
+ * The above copyright notice and this permission notice shall be
|
||||
+ * included in all copies or substantial portions of the Software.
|
||||
+ *
|
||||
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
+ */
|
||||
+
|
||||
+#ifdef _WIN32
|
||||
+
|
||||
+#include <ctype.h>
|
||||
+#include <io.h>
|
||||
+#include <wchar.h>
|
||||
+#include <windows.h>
|
||||
+
|
||||
+#ifdef USE_FILEEXTD
|
||||
+/* VC 7.1 or earlier doesn't support SAL. */
|
||||
+# if !defined(_MSC_VER) || (_MSC_VER < 1400)
|
||||
+# define __out
|
||||
+# define __in
|
||||
+# define __in_opt
|
||||
+# endif
|
||||
+/* Win32 FileID API Library:
|
||||
+ * http://www.microsoft.com/en-us/download/details.aspx?id=22599
|
||||
+ * Needed for WinXP. */
|
||||
+# include <fileextd.h>
|
||||
+#else /* USE_FILEEXTD */
|
||||
+/* VC 8 or earlier. */
|
||||
+# if defined(_MSC_VER) && (_MSC_VER < 1500)
|
||||
+# ifdef ENABLE_STUB_IMPL
|
||||
+# define STUB_IMPL
|
||||
+# else
|
||||
+# error "Win32 FileID API Library is required for VC2005 or earlier."
|
||||
+# endif
|
||||
+# endif
|
||||
+#endif /* USE_FILEEXTD */
|
||||
+
|
||||
+
|
||||
+#include "iscygpty.h"
|
||||
+
|
||||
+//#define USE_DYNFILEID
|
||||
+#ifdef USE_DYNFILEID
|
||||
+typedef BOOL (WINAPI *pfnGetFileInformationByHandleEx)(
|
||||
+ HANDLE hFile,
|
||||
+ FILE_INFO_BY_HANDLE_CLASS FileInformationClass,
|
||||
+ LPVOID lpFileInformation,
|
||||
+ DWORD dwBufferSize
|
||||
+);
|
||||
+static pfnGetFileInformationByHandleEx pGetFileInformationByHandleEx = NULL;
|
||||
+
|
||||
+# ifndef USE_FILEEXTD
|
||||
+static BOOL WINAPI stub_GetFileInformationByHandleEx(
|
||||
+ HANDLE hFile,
|
||||
+ FILE_INFO_BY_HANDLE_CLASS FileInformationClass,
|
||||
+ LPVOID lpFileInformation,
|
||||
+ DWORD dwBufferSize
|
||||
+ )
|
||||
+{
|
||||
+ return FALSE;
|
||||
+}
|
||||
+# endif
|
||||
+
|
||||
+static void setup_fileid_api(void)
|
||||
+{
|
||||
+ if (pGetFileInformationByHandleEx != NULL) {
|
||||
+ return;
|
||||
+ }
|
||||
+ pGetFileInformationByHandleEx = (pfnGetFileInformationByHandleEx)
|
||||
+ GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")),
|
||||
+ "GetFileInformationByHandleEx");
|
||||
+ if (pGetFileInformationByHandleEx == NULL) {
|
||||
+# ifdef USE_FILEEXTD
|
||||
+ pGetFileInformationByHandleEx = GetFileInformationByHandleEx;
|
||||
+# else
|
||||
+ pGetFileInformationByHandleEx = stub_GetFileInformationByHandleEx;
|
||||
+# endif
|
||||
+ }
|
||||
+}
|
||||
+#else
|
||||
+# define pGetFileInformationByHandleEx GetFileInformationByHandleEx
|
||||
+# define setup_fileid_api()
|
||||
+#endif
|
||||
+
|
||||
+
|
||||
+#define is_wprefix(s, prefix) \
|
||||
+ (wcsncmp((s), (prefix), sizeof(prefix) / sizeof(WCHAR) - 1) == 0)
|
||||
+
|
||||
+/* Check if the fd is a cygwin/msys's pty. */
|
||||
+int is_cygpty(int fd)
|
||||
+{
|
||||
+#ifdef STUB_IMPL
|
||||
+ return 0;
|
||||
+#else
|
||||
+ HANDLE h;
|
||||
+ int size = sizeof(FILE_NAME_INFO) + sizeof(WCHAR) * (MAX_PATH - 1);
|
||||
+ FILE_NAME_INFO *nameinfo;
|
||||
+ WCHAR *p = NULL;
|
||||
+
|
||||
+ setup_fileid_api();
|
||||
+
|
||||
+ h = (HANDLE) _get_osfhandle(fd);
|
||||
+ if (h == INVALID_HANDLE_VALUE) {
|
||||
+ return 0;
|
||||
+ }
|
||||
+ /* Cygwin/msys's pty is a pipe. */
|
||||
+ if (GetFileType(h) != FILE_TYPE_PIPE) {
|
||||
+ return 0;
|
||||
+ }
|
||||
+ nameinfo = malloc(size + sizeof(WCHAR));
|
||||
+ if (nameinfo == NULL) {
|
||||
+ return 0;
|
||||
+ }
|
||||
+ /* Check the name of the pipe:
|
||||
+ * '\{cygwin,msys}-XXXXXXXXXXXXXXXX-ptyN-{from,to}-master' */
|
||||
+ if (pGetFileInformationByHandleEx(h, FileNameInfo, nameinfo, size)) {
|
||||
+ nameinfo->FileName[nameinfo->FileNameLength / sizeof(WCHAR)] = L'\0';
|
||||
+ p = nameinfo->FileName;
|
||||
+ if (is_wprefix(p, L"\\cygwin-")) { /* Cygwin */
|
||||
+ p += 8;
|
||||
+ } else if (is_wprefix(p, L"\\msys-")) { /* MSYS and MSYS2 */
|
||||
+ p += 6;
|
||||
+ } else {
|
||||
+ p = NULL;
|
||||
+ }
|
||||
+ if (p != NULL) {
|
||||
+ while (*p && isxdigit(*p)) /* Skip 16-digit hexadecimal. */
|
||||
+ ++p;
|
||||
+ if (is_wprefix(p, L"-pty")) {
|
||||
+ p += 4;
|
||||
+ } else {
|
||||
+ p = NULL;
|
||||
+ }
|
||||
+ }
|
||||
+ if (p != NULL) {
|
||||
+ while (*p && isdigit(*p)) /* Skip pty number. */
|
||||
+ ++p;
|
||||
+ if (is_wprefix(p, L"-from-master")) {
|
||||
+ //p += 12;
|
||||
+ } else if (is_wprefix(p, L"-to-master")) {
|
||||
+ //p += 10;
|
||||
+ } else {
|
||||
+ p = NULL;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ free(nameinfo);
|
||||
+ return (p != NULL);
|
||||
+#endif /* STUB_IMPL */
|
||||
+}
|
||||
+
|
||||
+/* Check if at least one cygwin/msys pty is used. */
|
||||
+int is_cygpty_used(void)
|
||||
+{
|
||||
+ int fd, ret = 0;
|
||||
+
|
||||
+ for (fd = 0; fd < 3; fd++) {
|
||||
+ ret |= is_cygpty(fd);
|
||||
+ }
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+#endif /* _WIN32 */
|
||||
+
|
||||
+/* vim: set ts=4 sw=4: */
|
||||
diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c
|
||||
index a0130fd..5ad77d6 100644
|
||||
--- a/Python/pylifecycle.c
|
||||
+++ b/Python/pylifecycle.c
|
||||
@@ -30,6 +30,7 @@
|
||||
#include "pycore_unicodeobject.h" // _PyUnicode_InitTypes()
|
||||
#include "opcode.h"
|
||||
|
||||
+#include "iscygpty.h"
|
||||
#include <locale.h> // setlocale()
|
||||
#include <stdlib.h> // getenv()
|
||||
|
||||
@@ -3070,7 +3071,7 @@ Py_Exit(int sts)
|
||||
int
|
||||
Py_FdIsInteractive(FILE *fp, const char *filename)
|
||||
{
|
||||
- if (isatty(fileno(fp))) {
|
||||
+ if (isatty(fileno(fp)) || is_cygpty(fileno(fp))) {
|
||||
return 1;
|
||||
}
|
||||
if (!_Py_GetConfig()->interactive) {
|
||||
@@ -3085,7 +3086,7 @@ Py_FdIsInteractive(FILE *fp, const char *filename)
|
||||
int
|
||||
_Py_FdIsInteractive(FILE *fp, PyObject *filename)
|
||||
{
|
||||
- if (isatty(fileno(fp))) {
|
||||
+ if (isatty(fileno(fp)) || is_cygpty(fileno(fp))) {
|
||||
return 1;
|
||||
}
|
||||
if (!_Py_GetConfig()->interactive) {
|
||||
@@ -0,0 +1,145 @@
|
||||
From 52cab5ad7ba709042b0d25d8e30aa96b72b27dd6 Mon Sep 17 00:00:00 2001
|
||||
From: Christoph Reiter <reiter.christoph@gmail.com>
|
||||
Date: Thu, 17 Jun 2021 18:52:16 +0530
|
||||
Subject: [PATCH 040/N] build: link win resource files and build pythonw
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Co-authored-by: Алексей <alexey.pawlow@gmail.com>
|
||||
---
|
||||
Makefile.pre.in | 26 +++++++++++++++++++++-----
|
||||
configure.ac | 27 +++++++++++++++++++++++++++
|
||||
2 files changed, 48 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/Makefile.pre.in b/Makefile.pre.in
|
||||
index 93e23f0..4064977 100644
|
||||
--- a/Makefile.pre.in
|
||||
+++ b/Makefile.pre.in
|
||||
@@ -38,6 +38,7 @@ CC= @CC@
|
||||
CXX= @CXX@
|
||||
LINKCC= @LINKCC@
|
||||
AR= @AR@
|
||||
+WINDRES= @WINDRES@
|
||||
READELF= @READELF@
|
||||
SOABI= @SOABI@
|
||||
LDVERSION= @LDVERSION@
|
||||
@@ -124,6 +125,7 @@ PY_CORE_CFLAGS= $(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE
|
||||
PY_CORE_LDFLAGS=$(PY_LDFLAGS) $(PY_LDFLAGS_NODIST)
|
||||
# Strict or non-strict aliasing flags used to compile dtoa.c, see above
|
||||
CFLAGS_ALIASING=@CFLAGS_ALIASING@
|
||||
+RCFLAGS=@RCFLAGS@
|
||||
|
||||
|
||||
# Machine-dependent subdirectories
|
||||
@@ -286,6 +288,7 @@ LIBOBJS= @LIBOBJS@
|
||||
|
||||
PYTHON= python$(EXE)
|
||||
BUILDPYTHON= python$(BUILDEXE)
|
||||
+BUILDPYTHONW= pythonw$(BUILDEXE)
|
||||
|
||||
HOSTRUNNER= @HOSTRUNNER@
|
||||
|
||||
@@ -620,7 +623,7 @@ all: @DEF_MAKE_ALL_RULE@
|
||||
.PHONY: all
|
||||
|
||||
.PHONY: build_all
|
||||
-build_all: check-clean-src $(BUILDPYTHON) platform sharedmods \
|
||||
+build_all: check-clean-src $(BUILDPYTHON) $(BUILDPYTHONW) platform sharedmods \
|
||||
gdbhooks Programs/_testembed scripts checksharedmods rundsymutil
|
||||
|
||||
.PHONY: build_wasm
|
||||
@@ -785,9 +788,21 @@ coverage-report: regen-token regen-frozen
|
||||
clinic: check-clean-src $(srcdir)/Modules/_blake2/blake2s_impl.c
|
||||
$(PYTHON_FOR_REGEN) $(srcdir)/Tools/clinic/clinic.py --make --srcdir $(srcdir)
|
||||
|
||||
+python_exe.o: $(srcdir)/PC/python_exe.rc
|
||||
+ $(WINDRES) $(RCFLAGS) -I$(srcdir)/Include -I$(srcdir)/PC -I. $(srcdir)/PC/python_exe.rc $@
|
||||
+
|
||||
+pythonw_exe.o: $(srcdir)/PC/pythonw_exe.rc
|
||||
+ $(WINDRES) $(RCFLAGS) -I$(srcdir)/Include -I$(srcdir)/PC -I. $(srcdir)/PC/pythonw_exe.rc $@
|
||||
+
|
||||
+python_nt.o: $(srcdir)/PC/python_nt.rc
|
||||
+ $(WINDRES) $(RCFLAGS) -DORIGINAL_FILENAME=\\\"$(DLLLIBRARY)\\\" -I$(srcdir)/Include -I$(srcdir)/PC -I. $(srcdir)/PC/python_nt.rc $@
|
||||
+
|
||||
+$(BUILDPYTHONW): Programs/python.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY) pythonw_exe.o
|
||||
+ $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -municode -mwindows -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) pythonw_exe.o
|
||||
+
|
||||
# Build the interpreter
|
||||
-$(BUILDPYTHON): Programs/python.o $(LINK_PYTHON_DEPS)
|
||||
- $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(LINK_PYTHON_OBJS) $(LIBS) $(MODLIBS) $(SYSLIBS)
|
||||
+$(BUILDPYTHON): Programs/python.o $(LINK_PYTHON_DEPS) python_exe.o
|
||||
+ $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -municode -o $@ Programs/python.o $(LINK_PYTHON_OBJS) $(LIBS) $(MODLIBS) $(SYSLIBS) python_exe.o
|
||||
|
||||
platform: $(PYTHON_FOR_BUILD_DEPS) pybuilddir.txt
|
||||
$(RUNSHARED) $(PYTHON_FOR_BUILD) -c 'import sys ; from sysconfig import get_platform ; print("%s-%d.%d" % (get_platform(), *sys.version_info[:2]))' >platform
|
||||
@@ -876,10 +891,10 @@ $(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK): \
|
||||
|
||||
# This rule builds the Cygwin Python DLL and import library if configured
|
||||
# for a shared core library; otherwise, this rule is a noop.
|
||||
-$(DLLLIBRARY) libpython$(LDVERSION).dll.a: $(LIBRARY_OBJS)
|
||||
+$(DLLLIBRARY) libpython$(LDVERSION).dll.a: $(LIBRARY_OBJS) python_nt.o
|
||||
if test -n "$(DLLLIBRARY)"; then \
|
||||
$(LDSHARED) -Wl,--out-implib=$@ -o $(DLLLIBRARY) $^ \
|
||||
- $(LIBS) $(MODLIBS) $(SYSLIBS); \
|
||||
+ $(LIBS) $(MODLIBS) $(SYSLIBS) python_nt.o; \
|
||||
else true; \
|
||||
fi
|
||||
|
||||
@@ -1975,6 +1990,7 @@ altbininstall: $(BUILDPYTHON) @FRAMEWORKPYTHONW@
|
||||
done
|
||||
if test "$(PYTHONFRAMEWORKDIR)" = "no-framework" ; then \
|
||||
$(INSTALL_PROGRAM) $(BUILDPYTHON) $(DESTDIR)$(BINDIR)/python$(LDVERSION)$(EXE); \
|
||||
+ $(INSTALL_PROGRAM) $(BUILDPYTHONW) $(DESTDIR)$(BINDIR)/python3w$(EXE); \
|
||||
else \
|
||||
$(INSTALL_PROGRAM) $(STRIPFLAG) Mac/pythonw $(DESTDIR)$(BINDIR)/python$(LDVERSION)$(EXE); \
|
||||
fi
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 3b4745f..d690f92 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -1759,6 +1759,10 @@ AC_SUBST([LINK_PYTHON_OBJS])
|
||||
AC_SUBST([AR])
|
||||
AC_CHECK_TOOLS([AR], [ar aal], [ar])
|
||||
|
||||
+# windres program
|
||||
+AC_SUBST(WINDRES)
|
||||
+AC_CHECK_TOOL(WINDRES, windres)
|
||||
+
|
||||
# tweak ARFLAGS only if the user didn't set it on the command line
|
||||
AC_SUBST([ARFLAGS])
|
||||
if test -z "$ARFLAGS"
|
||||
@@ -7057,10 +7061,33 @@ AC_MSG_RESULT([done])
|
||||
case $host in
|
||||
*-*-mingw*)
|
||||
LIBS="$LIBS -lversion -lshlwapi -lpathcch"
|
||||
+ AC_PROG_AWK
|
||||
+ if test "$AWK" = "gawk"; then
|
||||
+ awk_extra_flag="--non-decimal-data"
|
||||
+ fi
|
||||
+ AC_MSG_CHECKING([FIELD3])
|
||||
+ FIELD3=$($AWK $awk_extra_flag '\
|
||||
+ /^#define PY_RELEASE_LEVEL_/ {levels[$2]=$3} \
|
||||
+ /^#define PY_MICRO_VERSION[[:space:]]+/ {micro=$3} \
|
||||
+ /^#define PY_RELEASE_LEVEL[[:space:]]+/ {level=levels[$3]} \
|
||||
+ /^#define PY_RELEASE_SERIAL[[:space:]]+/ {serial=$3} \
|
||||
+ END {print micro * 1000 + level * 10 + serial}' \
|
||||
+ $srcdir/Include/patchlevel.h
|
||||
+ )
|
||||
+
|
||||
+ AC_MSG_RESULT([${FIELD3}])
|
||||
+ RCFLAGS="$RCFLAGS -DFIELD3=$FIELD3 -O COFF"
|
||||
+
|
||||
+ case $host in
|
||||
+ i686*) RCFLAGS="$RCFLAGS --target=pe-i386" ;;
|
||||
+ x86_64*) RCFLAGS="$RCFLAGS --target=pe-x86-64" ;;
|
||||
+ *) ;;
|
||||
+ esac
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
+AC_SUBST(RCFLAGS)
|
||||
|
||||
# Availability of -O2:
|
||||
AC_CACHE_CHECK([for -O2], [ac_cv_compile_o2], [
|
||||
26
mingw-w64-python3.12/0041-fix-isselectable.patch
Normal file
26
mingw-w64-python3.12/0041-fix-isselectable.patch
Normal file
@@ -0,0 +1,26 @@
|
||||
From 2ce010ce13a1b5cff820c53de40cfd25e15f5183 Mon Sep 17 00:00:00 2001
|
||||
From: Christoph Reiter <reiter.christoph@gmail.com>
|
||||
Date: Thu, 17 Jun 2021 18:52:18 +0530
|
||||
Subject: [PATCH 041/N] fix isselectable
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Co-authored-by: Алексей <alexey.pawlow@gmail.com>
|
||||
---
|
||||
Include/fileobject.h | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Include/fileobject.h b/Include/fileobject.h
|
||||
index 2deef54..ae4bdac 100644
|
||||
--- a/Include/fileobject.h
|
||||
+++ b/Include/fileobject.h
|
||||
@@ -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
|
||||
@@ -0,0 +1,32 @@
|
||||
From 2b67fbdb9fdd6588ff43a9738d199eec52e16f5f Mon Sep 17 00:00:00 2001
|
||||
From: Christoph Reiter <reiter.christoph@gmail.com>
|
||||
Date: Thu, 17 Jun 2021 18:52:23 +0530
|
||||
Subject: [PATCH 042/N] configure.ac: fix inet_pton check
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Co-authored-by: Алексей <alexey.pawlow@gmail.com>
|
||||
---
|
||||
configure.ac | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index d690f92..0fd77b9 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -5353,10 +5353,14 @@ PY_CHECK_NETDB_FUNC([getprotobyname])
|
||||
|
||||
dnl PY_CHECK_SOCKET_FUNC(FUNCTION)
|
||||
AC_DEFUN([PY_CHECK_SOCKET_FUNC], [PY_CHECK_FUNC([$1], [
|
||||
+#ifdef _WIN32
|
||||
+#include <ws2tcpip.h>
|
||||
+#else
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
+#endif
|
||||
])])
|
||||
|
||||
PY_CHECK_SOCKET_FUNC([inet_aton])
|
||||
26
mingw-w64-python3.12/0043-pass-gen-profile-ldflags.patch
Normal file
26
mingw-w64-python3.12/0043-pass-gen-profile-ldflags.patch
Normal file
@@ -0,0 +1,26 @@
|
||||
From 942ce0ac16624b91e753ab21eae6d75f343be536 Mon Sep 17 00:00:00 2001
|
||||
From: Christoph Reiter <reiter.christoph@gmail.com>
|
||||
Date: Thu, 17 Jun 2021 18:52:27 +0530
|
||||
Subject: [PATCH 043/N] pass gen profile ldflags
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Co-authored-by: Алексей <alexey.pawlow@gmail.com>
|
||||
---
|
||||
Makefile.pre.in | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Makefile.pre.in b/Makefile.pre.in
|
||||
index 4064977..03fa15e 100644
|
||||
--- a/Makefile.pre.in
|
||||
+++ b/Makefile.pre.in
|
||||
@@ -894,7 +894,7 @@ $(PYTHONFRAMEWORKDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK): \
|
||||
$(DLLLIBRARY) libpython$(LDVERSION).dll.a: $(LIBRARY_OBJS) python_nt.o
|
||||
if test -n "$(DLLLIBRARY)"; then \
|
||||
$(LDSHARED) -Wl,--out-implib=$@ -o $(DLLLIBRARY) $^ \
|
||||
- $(LIBS) $(MODLIBS) $(SYSLIBS) python_nt.o; \
|
||||
+ $(LIBS) $(LDFLAGS_NODIST) $(MODLIBS) $(SYSLIBS) python_nt.o; \
|
||||
else true; \
|
||||
fi
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
From 4f5ce776066be9e6c3ef959dfd204c1ce6cc2b10 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?=
|
||||
<alexey.pawlow@gmail.com>
|
||||
Date: Thu, 17 Jun 2021 18:52:29 +0530
|
||||
Subject: [PATCH 044/N] pkg config windows must link ext with python lib
|
||||
|
||||
---
|
||||
configure.ac | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 0fd77b9..0e15ece 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -6233,7 +6233,7 @@ AC_MSG_RESULT([$LDVERSION])
|
||||
|
||||
# On Android and Cygwin the shared libraries must be linked with libpython.
|
||||
AC_SUBST([LIBPYTHON])
|
||||
-if test "$PY_ENABLE_SHARED" = "1" && ( test -n "$ANDROID_API_LEVEL" || test "$MACHDEP" = "cygwin"); then
|
||||
+if test "$PY_ENABLE_SHARED" = "1" && ( test -n "$ANDROID_API_LEVEL" || test "$MACHDEP" = "cygwin" || test "$MACHDEP" = "win32"); then
|
||||
LIBPYTHON="-lpython${VERSION}${ABIFLAGS}"
|
||||
else
|
||||
LIBPYTHON=''
|
||||
29
mingw-w64-python3.12/0045-importlib-bootstrap-path-sep.patch
Normal file
29
mingw-w64-python3.12/0045-importlib-bootstrap-path-sep.patch
Normal file
@@ -0,0 +1,29 @@
|
||||
From 2209bcf1e009fc08bf11a8cfc18274c875bf7d11 Mon Sep 17 00:00:00 2001
|
||||
From: Christoph Reiter <reiter.christoph@gmail.com>
|
||||
Date: Thu, 17 Jun 2021 18:52:30 +0530
|
||||
Subject: [PATCH 045/N] importlib bootstrap path sep
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Co-authored-by: Алексей <alexey.pawlow@gmail.com>
|
||||
Co-authored-by: Naveen M K <naveen521kk@gmail.com>
|
||||
---
|
||||
Lib/importlib/_bootstrap_external.py | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py
|
||||
index 73ac440..42d987d 100644
|
||||
--- a/Lib/importlib/_bootstrap_external.py
|
||||
+++ b/Lib/importlib/_bootstrap_external.py
|
||||
@@ -42,6 +42,10 @@
|
||||
path_separators = ['\\', '/']
|
||||
else:
|
||||
path_separators = ['/']
|
||||
+
|
||||
+if 'MSYSTEM' in _os.environ:
|
||||
+ path_separators = path_separators[::-1]
|
||||
+
|
||||
# Assumption made in _path_join()
|
||||
assert all(len(sep) == 1 for sep in path_separators)
|
||||
path_sep = path_separators[0]
|
||||
94
mingw-w64-python3.12/0046-warnings-fixes.patch
Normal file
94
mingw-w64-python3.12/0046-warnings-fixes.patch
Normal file
@@ -0,0 +1,94 @@
|
||||
From a236eba8384c4f6bc6681520c4d829686eadcd8e Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?=
|
||||
<alexey.pawlow@gmail.com>
|
||||
Date: Thu, 17 Jun 2021 18:52:33 +0530
|
||||
Subject: [PATCH 046/N] warnings fixes
|
||||
|
||||
---
|
||||
Modules/_winapi.c | 2 +-
|
||||
Modules/posixmodule.c | 2 +-
|
||||
Modules/socketmodule.h | 2 ++
|
||||
PC/python_exe.rc | 2 +-
|
||||
PC/pythonw_exe.rc | 2 +-
|
||||
PC/winreg.c | 1 +
|
||||
6 files changed, 7 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/Modules/_winapi.c b/Modules/_winapi.c
|
||||
index fda1171..d25f244 100644
|
||||
--- a/Modules/_winapi.c
|
||||
+++ b/Modules/_winapi.c
|
||||
@@ -962,7 +962,7 @@ getattributelist(PyObject *obj, const char *name, AttributeList *attribute_list)
|
||||
DWORD err;
|
||||
BOOL result;
|
||||
PyObject *value;
|
||||
- Py_ssize_t handle_list_size;
|
||||
+ Py_ssize_t handle_list_size = 0;
|
||||
DWORD attribute_count = 0;
|
||||
SIZE_T attribute_list_size = 0;
|
||||
|
||||
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
|
||||
index 38687e0..0cff7d6 100644
|
||||
--- a/Modules/posixmodule.c
|
||||
+++ b/Modules/posixmodule.c
|
||||
@@ -6241,7 +6241,7 @@ os_utime_impl(PyObject *module, path_t *path, PyObject *times, PyObject *ns,
|
||||
/*[clinic end generated code: output=cfcac69d027b82cf input=2fbd62a2f228f8f4]*/
|
||||
{
|
||||
#ifdef MS_WINDOWS
|
||||
- HANDLE hFile;
|
||||
+ HANDLE hFile = 0;
|
||||
FILETIME atime, mtime;
|
||||
#else
|
||||
int result;
|
||||
diff --git a/Modules/socketmodule.h b/Modules/socketmodule.h
|
||||
index f5ca004..1e92327 100644
|
||||
--- a/Modules/socketmodule.h
|
||||
+++ b/Modules/socketmodule.h
|
||||
@@ -68,8 +68,10 @@ struct SOCKADDR_BTH_REDEF {
|
||||
*/
|
||||
# ifdef SIO_GET_MULTICAST_FILTER
|
||||
# include <mstcpip.h> /* for SIO_RCVALL */
|
||||
+#ifndef __MINGW32__ /* resolve by configure */
|
||||
# define HAVE_ADDRINFO
|
||||
# define HAVE_SOCKADDR_STORAGE
|
||||
+#endif
|
||||
# define HAVE_GETADDRINFO
|
||||
# define HAVE_GETNAMEINFO
|
||||
# define ENABLE_IPV6
|
||||
diff --git a/PC/python_exe.rc b/PC/python_exe.rc
|
||||
index c3d3bff..dde0e53 100644
|
||||
--- a/PC/python_exe.rc
|
||||
+++ b/PC/python_exe.rc
|
||||
@@ -12,7 +12,7 @@
|
||||
// current versions of Windows.
|
||||
1 RT_MANIFEST "python.manifest"
|
||||
|
||||
-1 ICON DISCARDABLE "icons\python.ico"
|
||||
+1 ICON DISCARDABLE "icons/python.ico"
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
diff --git a/PC/pythonw_exe.rc b/PC/pythonw_exe.rc
|
||||
index 38570b7..7ce1043 100644
|
||||
--- a/PC/pythonw_exe.rc
|
||||
+++ b/PC/pythonw_exe.rc
|
||||
@@ -12,7 +12,7 @@
|
||||
// current versions of Windows.
|
||||
1 RT_MANIFEST "python.manifest"
|
||||
|
||||
-1 ICON DISCARDABLE "icons\pythonw.ico"
|
||||
+1 ICON DISCARDABLE "icons/pythonw.ico"
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
diff --git a/PC/winreg.c b/PC/winreg.c
|
||||
index 368291d..33ec8ff 100644
|
||||
--- a/PC/winreg.c
|
||||
+++ b/PC/winreg.c
|
||||
@@ -831,6 +831,7 @@ Reg2Py(BYTE *retDataBuf, DWORD retDataSize, DWORD typ)
|
||||
case REG_BINARY:
|
||||
/* ALSO handle ALL unknown data types here. Even if we can't
|
||||
support it natively, we should handle the bits. */
|
||||
+ /* fallthrough */
|
||||
default:
|
||||
if (retDataSize == 0) {
|
||||
obData = Py_NewRef(Py_None);
|
||||
22
mingw-w64-python3.12/0047-fix-build-testinternalcapi.patch
Normal file
22
mingw-w64-python3.12/0047-fix-build-testinternalcapi.patch
Normal file
@@ -0,0 +1,22 @@
|
||||
From 6d9f3fe8ccd271283b7f42beb6f77047cc5892f0 Mon Sep 17 00:00:00 2001
|
||||
From: Naveen M K <naveen521kk@gmail.com>
|
||||
Date: Sat, 17 Jun 2023 00:21:25 +0530
|
||||
Subject: [PATCH 047/N] fix build testinternalcapi
|
||||
|
||||
---
|
||||
configure.ac | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 0e15ece..9fec1f9 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -7848,7 +7848,7 @@ PY_STDLIB_MOD([_overlapped], [test "$MACHDEP" = "win32"], [], [],
|
||||
dnl test modules
|
||||
PY_STDLIB_MOD([_testcapi], [test "$TEST_MODULES" = yes])
|
||||
PY_STDLIB_MOD([_testclinic], [test "$TEST_MODULES" = yes])
|
||||
-PY_STDLIB_MOD([_testinternalcapi], [test "$TEST_MODULES" = yes])
|
||||
+PY_STDLIB_MOD([_testinternalcapi], [test "$TEST_MODULES" = yes], [], [-DPY3_DLLNAME="\"$DLLLIBRARY\""], [])
|
||||
PY_STDLIB_MOD([_testbuffer], [test "$TEST_MODULES" = yes])
|
||||
PY_STDLIB_MOD([_testimportmultiple], [test "$TEST_MODULES" = yes], [test "$ac_cv_func_dlopen" = yes])
|
||||
PY_STDLIB_MOD([_testmultiphase], [test "$TEST_MODULES" = yes], [test "$ac_cv_func_dlopen" = yes])
|
||||
47
mingw-w64-python3.12/0048-clang-arm64.patch
Normal file
47
mingw-w64-python3.12/0048-clang-arm64.patch
Normal file
@@ -0,0 +1,47 @@
|
||||
From da616a0b3495114d4eadf7f05f0ef9fa3afce904 Mon Sep 17 00:00:00 2001
|
||||
From: jeremyd2019 <4524874+jeremyd2019@users.noreply.github.com>
|
||||
Date: Thu, 17 Jun 2021 18:52:36 +0530
|
||||
Subject: [PATCH 048/N] clang arm64
|
||||
|
||||
Co-authored-by: Naveen M K <naveen521kk@gmail.com>
|
||||
---
|
||||
Python/getcompiler.c | 11 ++++++++++-
|
||||
1 file changed, 10 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Python/getcompiler.c b/Python/getcompiler.c
|
||||
index 3e31c80..7e7be71 100644
|
||||
--- a/Python/getcompiler.c
|
||||
+++ b/Python/getcompiler.c
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
// Note the __clang__ conditional has to come before the __GNUC__ one because
|
||||
// clang pretends to be GCC.
|
||||
-#if defined(__clang__)
|
||||
+#if defined(__clang__) && !defined(_WIN32)
|
||||
#define COMPILER "[Clang " __clang_version__ "]"
|
||||
#elif defined(__GNUC__)
|
||||
/* To not break compatibility with things that determine
|
||||
@@ -18,6 +18,8 @@
|
||||
#define COMP_SEP " "
|
||||
#if defined(__x86_64__)
|
||||
#define ARCH_SUFFIX " 64 bit (AMD64)"
|
||||
+#elif defined(__aarch64__)
|
||||
+#define ARCH_SUFFIX " 64 bit (ARM64)"
|
||||
#else
|
||||
#define ARCH_SUFFIX " 32 bit"
|
||||
#endif
|
||||
@@ -25,7 +27,14 @@
|
||||
#define COMP_SEP "\n"
|
||||
#define ARCH_SUFFIX ""
|
||||
#endif
|
||||
+#if defined(__clang__)
|
||||
+#define str(x) #x
|
||||
+#define xstr(x) str(x)
|
||||
+#define COMPILER COMP_SEP "[GCC Clang " xstr(__clang_major__) "." \
|
||||
+ xstr(__clang_minor__) "." xstr(__clang_patchlevel__) ARCH_SUFFIX "]"
|
||||
+#else
|
||||
#define COMPILER COMP_SEP "[GCC " __VERSION__ ARCH_SUFFIX "]"
|
||||
+#endif
|
||||
// Generic fallbacks.
|
||||
#elif defined(__cplusplus)
|
||||
#define COMPILER "[C++]"
|
||||
@@ -0,0 +1,25 @@
|
||||
From 43f2ea75ddebca53bd0959da3bd3e3356004f304 Mon Sep 17 00:00:00 2001
|
||||
From: jeremyd2019 <4524874+jeremyd2019@users.noreply.github.com>
|
||||
Date: Thu, 17 Jun 2021 18:52:37 +0530
|
||||
Subject: [PATCH 049/N] configure.ac: set MINGW stack reserve
|
||||
|
||||
---
|
||||
configure.ac | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 9fec1f9..4851088 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -3696,6 +3696,11 @@ then
|
||||
VxWorks*)
|
||||
LINKFORSHARED='-Wl,-export-dynamic';;
|
||||
esac
|
||||
+ case $host in
|
||||
+ *-*-mingw*)
|
||||
+ # for https://bugs.python.org/issue40458 on MINGW
|
||||
+ LINKFORSHARED="-Wl,--stack,2000000";;
|
||||
+ esac
|
||||
fi
|
||||
AC_MSG_RESULT([$LINKFORSHARED])
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
From 1860e5a5ee72f8ca60e5e5c549e8d1964bf1cfb2 Mon Sep 17 00:00:00 2001
|
||||
From: Naveen M K <naveen@syrusdark.website>
|
||||
Date: Fri, 18 Jun 2021 12:38:11 +0530
|
||||
Subject: [PATCH 050/N] Don't use os.pathsep to find EOF not all
|
||||
distributions in win32 have them as \ instead check using sys.platform
|
||||
|
||||
Signed-off-by: Naveen M K <naveen@syrusdark.website>
|
||||
---
|
||||
Lib/site.py | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Lib/site.py b/Lib/site.py
|
||||
index 4cbb55c..7c89370 100644
|
||||
--- a/Lib/site.py
|
||||
+++ b/Lib/site.py
|
||||
@@ -398,7 +398,7 @@ def setquit():
|
||||
The repr of each object contains a hint at how it works.
|
||||
|
||||
"""
|
||||
- if os.sep == '\\':
|
||||
+ if sys.platform == 'win32':
|
||||
eof = 'Ctrl-Z plus Return'
|
||||
else:
|
||||
eof = 'Ctrl-D (i.e. EOF)'
|
||||
@@ -0,0 +1,179 @@
|
||||
From efa19dfbf3d56c42a0a33aa77a2eec9466f4f434 Mon Sep 17 00:00:00 2001
|
||||
From: Naveen M K <naveen521kk@gmail.com>
|
||||
Date: Wed, 23 Jun 2021 18:12:12 +0530
|
||||
Subject: [PATCH 051/N] Fix extension suffix for c-extensions on mingw
|
||||
|
||||
Python is compiled with various compilers which previously
|
||||
had same platform tags or extension suffix. This can be error
|
||||
prone while loading c-extensions, so now each compiler or
|
||||
runtime has a different extension suffix.
|
||||
|
||||
Also, changed all extension to end with .pyd rather than
|
||||
.dll file.
|
||||
|
||||
Fixes https://github.com/msys2/MINGW-packages/issues/8843
|
||||
|
||||
Signed-off-by: Naveen M K <naveen521kk@gmail.com>
|
||||
---
|
||||
Makefile.pre.in | 6 ++--
|
||||
Python/dynload_win.c | 6 ----
|
||||
configure.ac | 77 +++++++++++++++++++++++++++++++++++++++-----
|
||||
3 files changed, 72 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/Makefile.pre.in b/Makefile.pre.in
|
||||
index 03fa15e..7ca010b 100644
|
||||
--- a/Makefile.pre.in
|
||||
+++ b/Makefile.pre.in
|
||||
@@ -174,6 +174,7 @@ CONFINCLUDEPY= $(CONFINCLUDEDIR)/python$(LDVERSION)
|
||||
# Symbols used for using shared libraries
|
||||
SHLIB_SUFFIX= @SHLIB_SUFFIX@
|
||||
EXT_SUFFIX= @EXT_SUFFIX@
|
||||
+PYD_PLATFORM_TAG = @PYD_PLATFORM_TAG@
|
||||
LDSHARED= @LDSHARED@ $(PY_LDFLAGS)
|
||||
BLDSHARED= @BLDSHARED@ $(PY_CORE_LDFLAGS)
|
||||
LDCXXSHARED= @LDCXXSHARED@
|
||||
@@ -1399,8 +1400,7 @@ Python/dynload_hpux.o: $(srcdir)/Python/dynload_hpux.c Makefile
|
||||
|
||||
Python/dynload_win.o: $(srcdir)/Python/dynload_win.c Makefile
|
||||
$(CC) -c $(PY_CORE_CFLAGS) \
|
||||
- -DSHLIB_SUFFIX='"$(SHLIB_SUFFIX)"' \
|
||||
- -DEXT_SUFFIX='"$(EXT_SUFFIX)"' \
|
||||
+ -DPYD_PLATFORM_TAG='"$(PYD_PLATFORM_TAG)"' \
|
||||
-o $@ $(srcdir)/Python/dynload_win.c
|
||||
|
||||
Python/sysmodule.o: $(srcdir)/Python/sysmodule.c Makefile $(srcdir)/Include/pydtrace.h
|
||||
@@ -2462,7 +2462,7 @@ libainstall: all scripts
|
||||
@if test "$(STATIC_LIBPYTHON)" = 1; then \
|
||||
if test -d $(LIBRARY); then :; else \
|
||||
if test "$(PYTHONFRAMEWORKDIR)" = no-framework; then \
|
||||
- if test "$(SHLIB_SUFFIX)" = .dll; then \
|
||||
+ if test "$(SHLIB_SUFFIX)" = .dll -o "$(SHLIB_SUFFIX)" = .pyd; then \
|
||||
$(INSTALL_DATA) $(LDLIBRARY) $(DESTDIR)$(LIBPL) ; \
|
||||
else \
|
||||
$(INSTALL_DATA) $(LIBRARY) $(DESTDIR)$(LIBPL)/$(LIBRARY) ; \
|
||||
diff --git a/Python/dynload_win.c b/Python/dynload_win.c
|
||||
index 4bb90ba..26d6036 100644
|
||||
--- a/Python/dynload_win.c
|
||||
+++ b/Python/dynload_win.c
|
||||
@@ -29,12 +29,6 @@
|
||||
#define PYD_UNTAGGED_SUFFIX PYD_DEBUG_SUFFIX ".pyd"
|
||||
|
||||
const char *_PyImport_DynLoadFiletab[] = {
|
||||
-#ifdef EXT_SUFFIX
|
||||
- EXT_SUFFIX, /* include SOABI flags where is encoded debug */
|
||||
-#endif
|
||||
-#ifdef SHLIB_SUFFIX
|
||||
- "-abi" PYTHON_ABI_STRING SHLIB_SUFFIX,
|
||||
-#endif
|
||||
PYD_TAGGED_SUFFIX,
|
||||
PYD_UNTAGGED_SUFFIX,
|
||||
NULL
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 4851088..6700d52 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -3438,7 +3438,7 @@ if test -z "$SHLIB_SUFFIX"; then
|
||||
*) SHLIB_SUFFIX=.so;;
|
||||
esac
|
||||
case $host_os in
|
||||
- mingw*) SHLIB_SUFFIX=.dll;;
|
||||
+ mingw*) SHLIB_SUFFIX=.pyd;;
|
||||
esac
|
||||
fi
|
||||
AC_MSG_RESULT([$SHLIB_SUFFIX])
|
||||
@@ -6198,6 +6198,68 @@ esac
|
||||
# check for endianness
|
||||
AC_C_BIGENDIAN
|
||||
|
||||
+AC_SUBST(PYD_PLATFORM_TAG)
|
||||
+# Special case of PYD_PLATFORM_TAG with python build with mingw.
|
||||
+# Python can with compiled with clang or gcc and linked
|
||||
+# to msvcrt or ucrt. To avoid conflicts between them
|
||||
+# we are selecting the extension as based on the compiler
|
||||
+# and the runtime they link to
|
||||
+# gcc + x86_64 + msvcrt = cp{version number}-x86_64
|
||||
+# gcc + i686 + msvcrt = cp{version number}-i686
|
||||
+# gcc + x86_64 + ucrt = cp{version number}-x86_64-ucrt
|
||||
+# clang + x86_64 + ucrt = cp{version number}-x86_64-clang
|
||||
+# clang + i686 + ucrt = cp{version number}-i686-clang
|
||||
+
|
||||
+PYD_PLATFORM_TAG=""
|
||||
+case $host in
|
||||
+ *-*-mingw*)
|
||||
+ # check if we are linking to ucrt
|
||||
+ AC_MSG_CHECKING(whether linking to ucrt)
|
||||
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
|
||||
+ #include <stdio.h>
|
||||
+ #ifndef _UCRT
|
||||
+ #error no ucrt
|
||||
+ #endif
|
||||
+ int main(){ return 0; }
|
||||
+ ]])],[linking_to_ucrt=yes],[linking_to_ucrt=no])
|
||||
+ AC_MSG_RESULT($linking_to_ucrt)
|
||||
+ ;;
|
||||
+esac
|
||||
+case $host_os in
|
||||
+ mingw*)
|
||||
+ AC_MSG_CHECKING(PYD_PLATFORM_TAG)
|
||||
+ case $host in
|
||||
+ i686-*-mingw*)
|
||||
+ if test -n "${cc_is_clang}"; then
|
||||
+ # it is CLANG32
|
||||
+ PYD_PLATFORM_TAG="mingw_i686_clang"
|
||||
+ else
|
||||
+ if test $linking_to_ucrt = no; then
|
||||
+ PYD_PLATFORM_TAG="mingw_i686"
|
||||
+ else
|
||||
+ PYD_PLATFORM_TAG="mingw_i686_ucrt"
|
||||
+ fi
|
||||
+ fi
|
||||
+ ;;
|
||||
+ x86_64-*-mingw*)
|
||||
+ if test -n "${cc_is_clang}"; then
|
||||
+ # it is CLANG64
|
||||
+ PYD_PLATFORM_TAG="mingw_x86_64_clang"
|
||||
+ else
|
||||
+ if test $linking_to_ucrt = no; then
|
||||
+ PYD_PLATFORM_TAG="mingw_x86_64"
|
||||
+ else
|
||||
+ PYD_PLATFORM_TAG="mingw_x86_64_ucrt"
|
||||
+ fi
|
||||
+ fi
|
||||
+ ;;
|
||||
+ aarch64-*-mingw*)
|
||||
+ PYD_PLATFORM_TAG+="mingw_aarch64"
|
||||
+ ;;
|
||||
+ esac
|
||||
+ AC_MSG_RESULT($PYD_PLATFORM_TAG)
|
||||
+esac
|
||||
+
|
||||
# ABI version string for Python extension modules. This appears between the
|
||||
# periods in shared library file names, e.g. foo.<SOABI>.so. It is calculated
|
||||
# from the following attributes which affect the ABI of this Python build (in
|
||||
@@ -6230,7 +6292,12 @@ if test "$Py_DEBUG" = 'true' -a "$with_trace_refs" != "yes"; then
|
||||
fi
|
||||
|
||||
AC_SUBST([EXT_SUFFIX])
|
||||
-EXT_SUFFIX=.${SOABI}${SHLIB_SUFFIX}
|
||||
+VERSION_NO_DOTS=$(echo $LDVERSION | tr -d .)
|
||||
+if test -n "${PYD_PLATFORM_TAG}"; then
|
||||
+ EXT_SUFFIX=".cp${VERSION_NO_DOTS}-${PYD_PLATFORM_TAG}${SHLIB_SUFFIX}"
|
||||
+else
|
||||
+ EXT_SUFFIX=.${SOABI}${SHLIB_SUFFIX}
|
||||
+fi
|
||||
|
||||
AC_MSG_CHECKING([LDVERSION])
|
||||
LDVERSION='$(VERSION)$(ABIFLAGS)'
|
||||
@@ -6989,12 +7056,6 @@ case "$ac_cv_computed_gotos" in yes*)
|
||||
AC_DEFINE([HAVE_COMPUTED_GOTOS], [1],
|
||||
[Define if the C compiler supports computed gotos.])
|
||||
esac
|
||||
-case $host_os in
|
||||
- mingw*)
|
||||
- dnl Synchronized with _PyImport_DynLoadFiletab (dynload_win.c)
|
||||
- dnl Do not use more then one dot on this platform !
|
||||
- EXT_SUFFIX=-$SOABI$SHLIB_SUFFIX;;
|
||||
-esac
|
||||
|
||||
case $ac_sys_system in
|
||||
AIX*)
|
||||
@@ -0,0 +1,61 @@
|
||||
From 3a72056f0b45a37febb548801e9d45c55cc06889 Mon Sep 17 00:00:00 2001
|
||||
From: Naveen M K <naveen521kk@gmail.com>
|
||||
Date: Tue, 21 Sep 2021 21:36:58 +0200
|
||||
Subject: [PATCH 052/N] Change the `get_platform()` method in sysconfig
|
||||
|
||||
This would possibly fix building wheels when mingw python
|
||||
is used and would be unique to each python same as EXT_SUFFIX.
|
||||
|
||||
Also, this modifies the `sys.version` argument to include UCRT
|
||||
in it.
|
||||
|
||||
Signed-off-by: Naveen M K <naveen521kk@gmail.com>
|
||||
---
|
||||
Lib/sysconfig.py | 16 ++++++++++++++--
|
||||
Python/getcompiler.c | 4 ++++
|
||||
2 files changed, 18 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py
|
||||
index 08efb9b..44c0ff0 100644
|
||||
--- a/Lib/sysconfig.py
|
||||
+++ b/Lib/sysconfig.py
|
||||
@@ -795,8 +795,20 @@ def get_platform():
|
||||
|
||||
"""
|
||||
if os.name == 'nt':
|
||||
- if 'GCC' in sys.version:
|
||||
- return 'mingw'
|
||||
+ if 'gcc' in sys.version.lower():
|
||||
+ if 'ucrt' in sys.version.lower():
|
||||
+ if 'amd64' in sys.version.lower():
|
||||
+ return 'mingw_x86_64_ucrt'
|
||||
+ return 'mingw_i686_ucrt'
|
||||
+ if 'clang' in sys.version.lower():
|
||||
+ if 'amd64' in sys.version.lower():
|
||||
+ return 'mingw_x86_64_clang'
|
||||
+ if 'arm64' in sys.version.lower():
|
||||
+ return 'mingw_aarch64'
|
||||
+ return 'mingw_i686_clang'
|
||||
+ if 'amd64' in sys.version.lower():
|
||||
+ return 'mingw_x86_64'
|
||||
+ return 'mingw_i686'
|
||||
if 'amd64' in sys.version.lower():
|
||||
return 'win-amd64'
|
||||
if '(arm)' in sys.version.lower():
|
||||
diff --git a/Python/getcompiler.c b/Python/getcompiler.c
|
||||
index 7e7be71..275f799 100644
|
||||
--- a/Python/getcompiler.c
|
||||
+++ b/Python/getcompiler.c
|
||||
@@ -33,8 +33,12 @@
|
||||
#define COMPILER COMP_SEP "[GCC Clang " xstr(__clang_major__) "." \
|
||||
xstr(__clang_minor__) "." xstr(__clang_patchlevel__) ARCH_SUFFIX "]"
|
||||
#else
|
||||
+#if defined(_UCRT)
|
||||
+#define COMPILER COMP_SEP "[GCC UCRT " __VERSION__ ARCH_SUFFIX "]"
|
||||
+#else
|
||||
#define COMPILER COMP_SEP "[GCC " __VERSION__ ARCH_SUFFIX "]"
|
||||
#endif
|
||||
+#endif
|
||||
// Generic fallbacks.
|
||||
#elif defined(__cplusplus)
|
||||
#define COMPILER "[C++]"
|
||||
@@ -0,0 +1,51 @@
|
||||
From 441d13f416a1b0b4e68fef763a2d798408f40259 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B9?=
|
||||
<alexey.pawlow@gmail.com>
|
||||
Date: Thu, 17 Jun 2021 18:52:09 +0530
|
||||
Subject: [PATCH 053/N] build: Fix ncursesw include lookup
|
||||
|
||||
Mirror what is already done for libffi; Look it up via
|
||||
pkg-config and use the exported path via sysconfig in setup.py
|
||||
---
|
||||
Makefile.pre.in | 4 ++++
|
||||
configure.ac | 9 ++++++++-
|
||||
2 files changed, 12 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Makefile.pre.in b/Makefile.pre.in
|
||||
index 7ca010b..769fabc 100644
|
||||
--- a/Makefile.pre.in
|
||||
+++ b/Makefile.pre.in
|
||||
@@ -347,6 +347,10 @@ IO_OBJS= \
|
||||
Modules/_io/bytesio.o \
|
||||
Modules/_io/stringio.o
|
||||
|
||||
+##########################################################################
|
||||
+
|
||||
+NCURSESW_INCLUDEDIR= @NCURSESW_INCLUDEDIR@
|
||||
+
|
||||
##########################################################################
|
||||
# Parser
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 6700d52..4f71199 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -6849,10 +6849,17 @@ AS_VAR_IF([have_panel], [no], [
|
||||
AC_MSG_RESULT([$have_panel (CFLAGS: $PANEL_CFLAGS, LIBS: $PANEL_LIBS)])
|
||||
])
|
||||
|
||||
+if test -n "$PKG_CONFIG"; then
|
||||
+ NCURSESW_INCLUDEDIR="`"$PKG_CONFIG" ncursesw --cflags-only-I 2>/dev/null | sed -e 's/^-I//;s/ *$//'`"
|
||||
+else
|
||||
+ NCURSESW_INCLUDEDIR=""
|
||||
+fi
|
||||
+AC_SUBST(NCURSESW_INCLUDEDIR)
|
||||
+
|
||||
# first curses header check
|
||||
ac_save_cppflags="$CPPFLAGS"
|
||||
if test "$cross_compiling" = no; then
|
||||
- CPPFLAGS="$CPPFLAGS -I/usr/include/ncursesw"
|
||||
+ CPPFLAGS="$CPPFLAGS -I$NCURSESW_INCLUDEDIR"
|
||||
fi
|
||||
|
||||
# On Solaris, term.h requires curses.h
|
||||
24
mingw-w64-python3.12/0054-tests-fix-test_bytes.patch
Normal file
24
mingw-w64-python3.12/0054-tests-fix-test_bytes.patch
Normal file
@@ -0,0 +1,24 @@
|
||||
From 2a749b397722a1a87534eb64f000d19f4f993956 Mon Sep 17 00:00:00 2001
|
||||
From: Christoph Reiter <reiter.christoph@gmail.com>
|
||||
Date: Fri, 23 Jul 2021 08:51:32 +0200
|
||||
Subject: [PATCH 054/N] tests: fix test_bytes
|
||||
|
||||
%p has different casing with mingw-w64, but it's implementation defined.
|
||||
Change the test to the mingw-w64 variant.
|
||||
---
|
||||
Lib/test/test_bytes.py | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py
|
||||
index a3804a9..4997534 100644
|
||||
--- a/Lib/test/test_bytes.py
|
||||
+++ b/Lib/test/test_bytes.py
|
||||
@@ -1136,7 +1136,7 @@ def test_from_format(self):
|
||||
|
||||
if os.name == 'nt':
|
||||
# Windows (MSCRT)
|
||||
- ptr_format = '0x%0{}X'.format(2 * sizeof_ptr)
|
||||
+ ptr_format = '0x%0{}x'.format(2 * sizeof_ptr)
|
||||
def ptr_formatter(ptr):
|
||||
return (ptr_format % ptr)
|
||||
else:
|
||||
@@ -0,0 +1,25 @@
|
||||
From 490320311882e23c1afc259695f788f74e310945 Mon Sep 17 00:00:00 2001
|
||||
From: Christoph Reiter <reiter.christoph@gmail.com>
|
||||
Date: Fri, 23 Jul 2021 08:52:50 +0200
|
||||
Subject: [PATCH 055/N] time: fix strftime not raising for invalid year
|
||||
values
|
||||
|
||||
It's crt specific and not compiler specific.
|
||||
This fixes a test case in test_time
|
||||
---
|
||||
Modules/timemodule.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Modules/timemodule.c b/Modules/timemodule.c
|
||||
index 3b46dea..aea6097 100644
|
||||
--- a/Modules/timemodule.c
|
||||
+++ b/Modules/timemodule.c
|
||||
@@ -825,7 +825,7 @@ time_strftime(PyObject *module, PyObject *args)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
-#if defined(_MSC_VER) || (defined(__sun) && defined(__SVR4)) || defined(_AIX) || defined(__VXWORKS__)
|
||||
+#if defined(MS_WINDOWS) || (defined(__sun) && defined(__SVR4)) || defined(_AIX) || defined(__VXWORKS__)
|
||||
if (buf.tm_year + 1900 < 1 || 9999 < buf.tm_year + 1900) {
|
||||
PyErr_SetString(PyExc_ValueError,
|
||||
"strftime() requires year in [1; 9999]");
|
||||
@@ -0,0 +1,38 @@
|
||||
From 4e38eab6ba68953f78ca95f6e133f2de1cac6db3 Mon Sep 17 00:00:00 2001
|
||||
From: Christoph Reiter <reiter.christoph@gmail.com>
|
||||
Date: Fri, 23 Jul 2021 18:23:58 +0200
|
||||
Subject: [PATCH 056/N] ctypes: find_library('c') should return None with
|
||||
ucrt
|
||||
|
||||
Just like with MSVC. This fixes a test in test_ctypes.
|
||||
---
|
||||
Lib/ctypes/util.py | 9 +++++++++
|
||||
1 file changed, 9 insertions(+)
|
||||
|
||||
diff --git a/Lib/ctypes/util.py b/Lib/ctypes/util.py
|
||||
index 0c2510e..48ddb3b 100644
|
||||
--- a/Lib/ctypes/util.py
|
||||
+++ b/Lib/ctypes/util.py
|
||||
@@ -31,6 +31,12 @@ def _get_build_version():
|
||||
# else we don't know what version of the compiler this is
|
||||
return None
|
||||
|
||||
+ def find_msvcrt_mingw():
|
||||
+ is_ucrt = 'clang' in sys.version.lower() or 'ucrt' in sys.version.lower()
|
||||
+ if is_ucrt:
|
||||
+ return None
|
||||
+ return 'msvcrt.dll'
|
||||
+
|
||||
def find_msvcrt():
|
||||
"""Return the name of the VC runtime dll"""
|
||||
version = _get_build_version()
|
||||
@@ -54,6 +60,9 @@ def find_msvcrt():
|
||||
|
||||
def find_library(name):
|
||||
if name in ('c', 'm'):
|
||||
+ import sysconfig
|
||||
+ if sysconfig.get_platform().startswith('mingw'):
|
||||
+ return find_msvcrt_mingw()
|
||||
return find_msvcrt()
|
||||
# See MSDN for the REAL search order.
|
||||
for directory in os.environ['PATH'].split(os.pathsep):
|
||||
@@ -0,0 +1,64 @@
|
||||
From cd274c6a6ba955931e0d794c2037470e0918bd24 Mon Sep 17 00:00:00 2001
|
||||
From: Christoph Reiter <reiter.christoph@gmail.com>
|
||||
Date: Sun, 25 Jul 2021 13:54:12 +0200
|
||||
Subject: [PATCH 057/N] build: Disable checks for dlopen/dlfcn
|
||||
|
||||
While it is (potentially) available with mingw we don't want to use it, so skip any
|
||||
checks for it.
|
||||
---
|
||||
configure.ac | 21 ++++++++++++++++++---
|
||||
1 file changed, 18 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 4f71199..4b0cd79 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -3026,7 +3026,7 @@ AC_DEFINE([STDC_HEADERS], [1],
|
||||
|
||||
# checks for header files
|
||||
AC_CHECK_HEADERS([ \
|
||||
- alloca.h asm/types.h bluetooth.h conio.h crypt.h direct.h dlfcn.h endian.h errno.h fcntl.h grp.h \
|
||||
+ alloca.h asm/types.h bluetooth.h conio.h crypt.h direct.h endian.h errno.h fcntl.h grp.h \
|
||||
ieeefp.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/tipc.h linux/wait.h netdb.h net/ethernet.h netinet/in.h netpacket/packet.h poll.h process.h pty.h \
|
||||
@@ -3038,6 +3038,13 @@ 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 \
|
||||
termios.h util.h utime.h utmp.h \
|
||||
])
|
||||
+
|
||||
+case $host in
|
||||
+ *-*-mingw*) ;;
|
||||
+ *) AC_CHECK_HEADERS([dlfcn.h]);;
|
||||
+esac
|
||||
+
|
||||
+
|
||||
AC_HEADER_DIRENT
|
||||
AC_HEADER_MAJOR
|
||||
|
||||
@@ -3765,7 +3772,12 @@ AC_SUBST([PERF_TRAMPOLINE_OBJ])
|
||||
|
||||
# checks for libraries
|
||||
AC_CHECK_LIB([sendfile], [sendfile])
|
||||
-AC_CHECK_LIB([dl], [dlopen]) # Dynamic linking for SunOS/Solaris and SYSV
|
||||
+
|
||||
+case $host in
|
||||
+ *-*-mingw*) ;;
|
||||
+ *) AC_CHECK_LIB([dl], [dlopen]) ;; # Dynamic linking for SunOS/Solaris and SYSV
|
||||
+esac
|
||||
+
|
||||
AC_CHECK_LIB([dld], [shl_load]) # Dynamic linking for HP-UX
|
||||
|
||||
|
||||
@@ -6108,7 +6120,10 @@ AS_VAR_IF([ac_cv_broken_sem_getvalue], [yes], [
|
||||
)
|
||||
])
|
||||
|
||||
-AC_CHECK_DECLS([RTLD_LAZY, RTLD_NOW, RTLD_GLOBAL, RTLD_LOCAL, RTLD_NODELETE, RTLD_NOLOAD, RTLD_DEEPBIND, RTLD_MEMBER], [], [], [[@%:@include <dlfcn.h>]])
|
||||
+case $host in
|
||||
+ *-*-mingw*) ;;
|
||||
+ *) AC_CHECK_DECLS([RTLD_LAZY, RTLD_NOW, RTLD_GLOBAL, RTLD_LOCAL, RTLD_NODELETE, RTLD_NOLOAD, RTLD_DEEPBIND, RTLD_MEMBER], [], [], [[@%:@include <dlfcn.h>]])
|
||||
+esac
|
||||
|
||||
# determine what size digit to use for Python's longs
|
||||
AC_MSG_CHECKING([digit size for Python's longs])
|
||||
@@ -0,0 +1,22 @@
|
||||
From 3002b516f9a4a13744b94f51259b6db15576def7 Mon Sep 17 00:00:00 2001
|
||||
From: Christoph Reiter <reiter.christoph@gmail.com>
|
||||
Date: Sun, 25 Jul 2021 15:46:01 +0200
|
||||
Subject: [PATCH 058/N] Fix install location of the import library
|
||||
|
||||
---
|
||||
Makefile.pre.in | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Makefile.pre.in b/Makefile.pre.in
|
||||
index 769fabc..84fc56c 100644
|
||||
--- a/Makefile.pre.in
|
||||
+++ b/Makefile.pre.in
|
||||
@@ -2467,7 +2467,7 @@ libainstall: all scripts
|
||||
if test -d $(LIBRARY); then :; else \
|
||||
if test "$(PYTHONFRAMEWORKDIR)" = no-framework; then \
|
||||
if test "$(SHLIB_SUFFIX)" = .dll -o "$(SHLIB_SUFFIX)" = .pyd; then \
|
||||
- $(INSTALL_DATA) $(LDLIBRARY) $(DESTDIR)$(LIBPL) ; \
|
||||
+ $(INSTALL_DATA) $(LDLIBRARY) $(DESTDIR)$(LIBDIR) ; \
|
||||
else \
|
||||
$(INSTALL_DATA) $(LIBRARY) $(DESTDIR)$(LIBPL)/$(LIBRARY) ; \
|
||||
fi; \
|
||||
@@ -0,0 +1,76 @@
|
||||
From 6d8ce76ab34dd2571362037b4eaf0088b1c58641 Mon Sep 17 00:00:00 2001
|
||||
From: Christoph Reiter <reiter.christoph@gmail.com>
|
||||
Date: Sun, 25 Jul 2021 16:53:35 +0200
|
||||
Subject: [PATCH 059/N] build: Integrate venvlauncher build/installation into
|
||||
the Makefile
|
||||
|
||||
This is required for venv creation on Windows.
|
||||
Ideally this would use the venv specific launcher (PC/launcher.c),
|
||||
but a copy of main binary seems to work as well for now.
|
||||
---
|
||||
Makefile.pre.in | 17 +++++++++++++++--
|
||||
1 file changed, 15 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/Makefile.pre.in b/Makefile.pre.in
|
||||
index 84fc56c..4a6e692 100644
|
||||
--- a/Makefile.pre.in
|
||||
+++ b/Makefile.pre.in
|
||||
@@ -170,6 +170,7 @@ BINLIBDEST= @BINLIBDEST@
|
||||
LIBDEST= $(SCRIPTDIR)/python$(VERSION)
|
||||
INCLUDEPY= $(INCLUDEDIR)/python$(LDVERSION)
|
||||
CONFINCLUDEPY= $(CONFINCLUDEDIR)/python$(LDVERSION)
|
||||
+VENVLAUNCHERDIR= $(BINLIBDEST)/venv/scripts/nt
|
||||
|
||||
# Symbols used for using shared libraries
|
||||
SHLIB_SUFFIX= @SHLIB_SUFFIX@
|
||||
@@ -290,6 +291,8 @@ LIBOBJS= @LIBOBJS@
|
||||
PYTHON= python$(EXE)
|
||||
BUILDPYTHON= python$(BUILDEXE)
|
||||
BUILDPYTHONW= pythonw$(BUILDEXE)
|
||||
+BUILDVENVLAUNCHER= venvlauncher$(BUILDEXE)
|
||||
+BUILDVENVWLAUNCHER= venvwlauncher$(BUILDEXE)
|
||||
|
||||
HOSTRUNNER= @HOSTRUNNER@
|
||||
|
||||
@@ -628,7 +631,7 @@ all: @DEF_MAKE_ALL_RULE@
|
||||
.PHONY: all
|
||||
|
||||
.PHONY: build_all
|
||||
-build_all: check-clean-src $(BUILDPYTHON) $(BUILDPYTHONW) platform sharedmods \
|
||||
+build_all: check-clean-src $(BUILDPYTHON) $(BUILDPYTHONW) $(BUILDVENVLAUNCHER) $(BUILDVENVWLAUNCHER) platform sharedmods \
|
||||
gdbhooks Programs/_testembed scripts checksharedmods rundsymutil
|
||||
|
||||
.PHONY: build_wasm
|
||||
@@ -809,6 +812,14 @@ $(BUILDPYTHONW): Programs/python.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY) pythonw
|
||||
$(BUILDPYTHON): Programs/python.o $(LINK_PYTHON_DEPS) python_exe.o
|
||||
$(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -municode -o $@ Programs/python.o $(LINK_PYTHON_OBJS) $(LIBS) $(MODLIBS) $(SYSLIBS) python_exe.o
|
||||
|
||||
+# FIXME: build these from PC/launcher.c instead
|
||||
+$(BUILDVENVLAUNCHER): $(BUILDPYTHON)
|
||||
+ cp $(BUILDPYTHON) $(BUILDVENVLAUNCHER)
|
||||
+
|
||||
+# FIXME: build these from PC/launcher.c instead
|
||||
+$(BUILDVENVWLAUNCHER): $(BUILDPYTHONW)
|
||||
+ cp $(BUILDPYTHONW) $(BUILDVENVWLAUNCHER)
|
||||
+
|
||||
platform: $(PYTHON_FOR_BUILD_DEPS) pybuilddir.txt
|
||||
$(RUNSHARED) $(PYTHON_FOR_BUILD) -c 'import sys ; from sysconfig import get_platform ; print("%s-%d.%d" % (get_platform(), *sys.version_info[:2]))' >platform
|
||||
|
||||
@@ -1984,7 +1995,7 @@ sharedinstall: all
|
||||
# This goes into $(exec_prefix)
|
||||
.PHONY: altbininstall
|
||||
altbininstall: $(BUILDPYTHON) @FRAMEWORKPYTHONW@
|
||||
- @for i in $(BINDIR) $(LIBDIR); \
|
||||
+ @for i in $(BINDIR) $(LIBDIR) $(VENVLAUNCHERDIR); \
|
||||
do \
|
||||
if test ! -d $(DESTDIR)$$i; then \
|
||||
echo "Creating directory $$i"; \
|
||||
@@ -1995,6 +2006,8 @@ altbininstall: $(BUILDPYTHON) @FRAMEWORKPYTHONW@
|
||||
if test "$(PYTHONFRAMEWORKDIR)" = "no-framework" ; then \
|
||||
$(INSTALL_PROGRAM) $(BUILDPYTHON) $(DESTDIR)$(BINDIR)/python$(LDVERSION)$(EXE); \
|
||||
$(INSTALL_PROGRAM) $(BUILDPYTHONW) $(DESTDIR)$(BINDIR)/python3w$(EXE); \
|
||||
+ $(INSTALL_PROGRAM) $(BUILDPYTHON) $(DESTDIR)$(VENVLAUNCHERDIR)/python$(EXE); \
|
||||
+ $(INSTALL_PROGRAM) $(BUILDPYTHONW) $(DESTDIR)$(VENVLAUNCHERDIR)/pythonw$(EXE); \
|
||||
else \
|
||||
$(INSTALL_PROGRAM) $(STRIPFLAG) Mac/pythonw $(DESTDIR)$(BINDIR)/python$(LDVERSION)$(EXE); \
|
||||
fi
|
||||
@@ -0,0 +1,25 @@
|
||||
From cdf16e5cb3f6b36a4406b41bd7339986ae2fc4e9 Mon Sep 17 00:00:00 2001
|
||||
From: Christoph Reiter <reiter.christoph@gmail.com>
|
||||
Date: Sun, 1 Aug 2021 15:18:50 +0200
|
||||
Subject: [PATCH 060/N] configure.ac: set _WIN32_WINNT version
|
||||
|
||||
---
|
||||
configure.ac | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 4b0cd79..f14e51a 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -4547,6 +4547,11 @@ done
|
||||
IFS=$as_save_IFS
|
||||
AC_MSG_RESULT([$DBM_CFLAGS $DBM_LIBS])
|
||||
|
||||
+case $host in
|
||||
+ *-*-mingw*)
|
||||
+ CFLAGS_NODIST="$CFLAGS_NODIST -D_WIN32_WINNT=0x0602";;
|
||||
+esac
|
||||
+
|
||||
# Determine if windows modules should be used.
|
||||
AC_SUBST(USE_WIN32_MODULE)
|
||||
USE_WIN32_MODULE='#'
|
||||
@@ -0,0 +1,33 @@
|
||||
From aa626c00d72c0dd5a258f39673bf54bbe8b56fd2 Mon Sep 17 00:00:00 2001
|
||||
From: Christoph Reiter <reiter.christoph@gmail.com>
|
||||
Date: Sun, 1 Aug 2021 18:35:17 +0200
|
||||
Subject: [PATCH 061/N] configure.ac: don't check for clock_ functions
|
||||
|
||||
They shouldn't be exposed on Windows and lead to winpthread being linked in
|
||||
---
|
||||
configure.ac | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index f14e51a..fc1f083 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -5488,6 +5488,9 @@ WITH_SAVE_ENV([
|
||||
])
|
||||
])
|
||||
|
||||
+case $host in
|
||||
+ *-*-mingw*) ;;
|
||||
+ *)
|
||||
AC_CHECK_FUNCS([clock_gettime], [], [
|
||||
AC_CHECK_LIB([rt], [clock_gettime], [
|
||||
LIBS="$LIBS -lrt"
|
||||
@@ -5508,6 +5511,8 @@ AC_CHECK_FUNCS([clock_settime], [], [
|
||||
AC_DEFINE([HAVE_CLOCK_SETTIME], [1])
|
||||
])
|
||||
])
|
||||
+ ;;
|
||||
+esac
|
||||
|
||||
AC_CHECK_FUNCS([clock_nanosleep], [], [
|
||||
AC_CHECK_LIB([rt], [clock_nanosleep], [
|
||||
@@ -0,0 +1,32 @@
|
||||
From bc61e3a11754715d70914052e159ee0e6f0046bc Mon Sep 17 00:00:00 2001
|
||||
From: Christoph Reiter <reiter.christoph@gmail.com>
|
||||
Date: Sun, 8 Aug 2021 10:17:35 +0200
|
||||
Subject: [PATCH 062/N] expanduser: normpath paths coming from env vars
|
||||
|
||||
This makes sure we get the same paths as with related functions in pathlib.
|
||||
---
|
||||
Lib/ntpath.py | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/Lib/ntpath.py b/Lib/ntpath.py
|
||||
index ce683b1..309235b 100644
|
||||
--- a/Lib/ntpath.py
|
||||
+++ b/Lib/ntpath.py
|
||||
@@ -379,7 +379,7 @@ def expanduser(path):
|
||||
if 'USERPROFILE' in os.environ:
|
||||
userhome = os.environ['USERPROFILE']
|
||||
elif not 'HOMEPATH' in os.environ:
|
||||
- return path
|
||||
+ return os.path.normpath(path)
|
||||
else:
|
||||
try:
|
||||
drive = os.environ['HOMEDRIVE']
|
||||
@@ -406,7 +406,7 @@ def expanduser(path):
|
||||
if isinstance(path, bytes):
|
||||
userhome = os.fsencode(userhome)
|
||||
|
||||
- return userhome + path[i:]
|
||||
+ return os.path.normpath(userhome) + path[i:]
|
||||
|
||||
|
||||
# Expand paths containing shell variable substitutions.
|
||||
@@ -0,0 +1,680 @@
|
||||
From 4c1a33f26848d4e2a3107d910101edebf558a905 Mon Sep 17 00:00:00 2001
|
||||
From: Naveen M K <naveen521kk@gmail.com>
|
||||
Date: Fri, 18 Jun 2021 17:51:59 +0530
|
||||
Subject: [PATCH 063/N] CI: test the build and add some mingw specific tests
|
||||
|
||||
- Use actions/setup-python for setting up correct version in cross build
|
||||
- CI: add cross llvm-mingw jobs
|
||||
- CI: fix sed pattern for python-config.py shebang
|
||||
The shebang (`#!`) does not include `${pkgdir}` so this sed did nothing
|
||||
- CI: remove --without-c-locale-coercion
|
||||
No longer needed since the default now works on Windows
|
||||
- Make sure we always use the stdlib distutils
|
||||
- CI: update actions and images
|
||||
ubuntu-18.04 is gone now
|
||||
- CI: updates for mstorsjo/llvm-mingw moving to 20.04
|
||||
- CI: 3.10 -> 3.11
|
||||
---
|
||||
.github/workflows/mingw.yml | 289 +++++++++++++++++++++++++++++++++
|
||||
mingw_ignorefile.txt | 34 ++++
|
||||
mingw_smoketests.py | 313 ++++++++++++++++++++++++++++++++++++
|
||||
3 files changed, 636 insertions(+)
|
||||
create mode 100644 .github/workflows/mingw.yml
|
||||
create mode 100644 mingw_ignorefile.txt
|
||||
create mode 100644 mingw_smoketests.py
|
||||
|
||||
diff --git a/.github/workflows/mingw.yml b/.github/workflows/mingw.yml
|
||||
new file mode 100644
|
||||
index 0000000..6445b6b
|
||||
--- /dev/null
|
||||
+++ b/.github/workflows/mingw.yml
|
||||
@@ -0,0 +1,289 @@
|
||||
+name: Build
|
||||
+on: [push, pull_request, workflow_dispatch]
|
||||
+
|
||||
+jobs:
|
||||
+ build:
|
||||
+ runs-on: windows-2022
|
||||
+ strategy:
|
||||
+ fail-fast: false
|
||||
+ matrix:
|
||||
+ msystem: ['MINGW64','MINGW32','UCRT64','CLANG64','CLANG32']
|
||||
+ include:
|
||||
+ - msystem: MINGW64
|
||||
+ prefix: mingw-w64-x86_64
|
||||
+ - msystem: MINGW32
|
||||
+ prefix: mingw-w64-i686
|
||||
+ - msystem: UCRT64
|
||||
+ prefix: mingw-w64-ucrt-x86_64
|
||||
+ - msystem: CLANG64
|
||||
+ prefix: mingw-w64-clang-x86_64
|
||||
+ - msystem: CLANG32
|
||||
+ prefix: mingw-w64-clang-i686
|
||||
+ steps:
|
||||
+ - name: Setup git
|
||||
+ run: |
|
||||
+ git config --global core.autocrlf false
|
||||
+ git config --global core.eol lf
|
||||
+ - uses: actions/checkout@v3
|
||||
+ - uses: msys2/setup-msys2@v2
|
||||
+ with:
|
||||
+ msystem: ${{ matrix.msystem }}
|
||||
+ release: false
|
||||
+ 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 }}" == "CLANG64" ]] || [[ "${{ matrix.msystem }}" == "CLANG32" ]]; 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"
|
||||
+ cd _build
|
||||
+ MSYSTEM= ./python.exe -m test -j8 --ignorefile "$IGNOREFILE" -W
|
||||
+
|
||||
+ - name: Run broken tests
|
||||
+ continue-on-error: true
|
||||
+ shell: msys2 {0}
|
||||
+ run: |
|
||||
+ IGNOREFILE="$(pwd)/mingw_ignorefile.txt"
|
||||
+ cd _build
|
||||
+ MSYSTEM= ./python.exe -m test -j8 --matchfile "$IGNOREFILE" -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
|
||||
+
|
||||
+ - name: Run Smoke Test (installed)
|
||||
+ shell: msys2 {0}
|
||||
+ run: |
|
||||
+ export PYTHONTZPATH="${MINGW_PREFIX}/share/zoneinfo"
|
||||
+ SMOKETESTS="$(pwd)/mingw_smoketests.py"
|
||||
+ cd _build
|
||||
+ cd python_pkgdir/${MINGW_PREFIX}/bin
|
||||
+ ./python.exe "$SMOKETESTS"
|
||||
+ MSYSTEM= ./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@v3
|
||||
+ if: always()
|
||||
+ with:
|
||||
+ name: build-${{ matrix.msystem }}
|
||||
+ path: _build/python.tar.gz
|
||||
+
|
||||
+ cross-gcc-x86_64:
|
||||
+ runs-on: ubuntu-latest
|
||||
+ container:
|
||||
+ image: archlinux:base-devel
|
||||
+ steps:
|
||||
+ - uses: actions/checkout@v3
|
||||
+ - name: Install deps
|
||||
+ run: |
|
||||
+ pacman --noconfirm -Suuy
|
||||
+ pacman --needed --noconfirm -S mingw-w64-gcc autoconf-archive autoconf automake zip
|
||||
+
|
||||
+ - uses: actions/setup-python@v4
|
||||
+ 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 \
|
||||
+ --with-system-expat \
|
||||
+ --with-system-ffi \
|
||||
+ --with-system-libmpdec \
|
||||
+ --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@v3
|
||||
+ 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@v3
|
||||
+ 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@v3
|
||||
+
|
||||
+ - 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 \
|
||||
+ --with-system-expat \
|
||||
+ --with-system-ffi \
|
||||
+ --with-system-libmpdec \
|
||||
+ --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@v3
|
||||
+ with:
|
||||
+ name: build-cross-llvm-mingw-${{ matrix.arch }}
|
||||
+ path: install.zip
|
||||
+
|
||||
+ cross-llvm-mingw-test:
|
||||
+ needs: [cross-llvm-mingw]
|
||||
+ runs-on: windows-latest
|
||||
+ strategy:
|
||||
+ fail-fast: false
|
||||
+ matrix:
|
||||
+ arch: ['x86_64', 'i686']
|
||||
+ steps:
|
||||
+ - uses: actions/download-artifact@v3
|
||||
+ with:
|
||||
+ name: build-cross-llvm-mingw-${{ matrix.arch }}
|
||||
+
|
||||
+ - 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())"
|
||||
+
|
||||
+
|
||||
diff --git a/mingw_ignorefile.txt b/mingw_ignorefile.txt
|
||||
new file mode 100644
|
||||
index 0000000..dc3802e
|
||||
--- /dev/null
|
||||
+++ b/mingw_ignorefile.txt
|
||||
@@ -0,0 +1,34 @@
|
||||
+ctypes.test.test_loading.LoaderTest.test_load_dll_with_flags
|
||||
+distutils.tests.test_bdist_dumb.BuildDumbTestCase.test_simple_built
|
||||
+distutils.tests.test_cygwinccompiler.CygwinCCompilerTestCase.test_get_versions
|
||||
+distutils.tests.test_util.UtilTestCase.test_change_root
|
||||
+test.datetimetester.TestLocalTimeDisambiguation_Fast.*
|
||||
+test.datetimetester.TestLocalTimeDisambiguation_Pure.*
|
||||
+test.test_cmath.CMathTests.test_specific_values
|
||||
+test.test_cmd_line_script.CmdLineTest.test_consistent_sys_path_for_direct_execution
|
||||
+test.test_compileall.CommandLineTestsNoSourceEpoch.*
|
||||
+test.test_compileall.CommandLineTestsWithSourceEpoch.*
|
||||
+test.test_compileall.CompileallTestsWithoutSourceEpoch.*
|
||||
+test.test_compileall.CompileallTestsWithSourceEpoch.*
|
||||
+test.test_import.ImportTests.test_dll_dependency_import
|
||||
+test.test_math.MathTests.*
|
||||
+test.test_ntpath.NtCommonTest.test_import
|
||||
+test.test_os.StatAttributeTests.test_stat_block_device
|
||||
+test.test_os.TestScandir.test_attributes
|
||||
+test.test_os.UtimeTests.test_large_time
|
||||
+test.test_platform.PlatformTest.test_architecture_via_symlink
|
||||
+test.test_regrtest.ProgramsTestCase.test_pcbuild_rt
|
||||
+test.test_regrtest.ProgramsTestCase.test_tools_buildbot_test
|
||||
+test.test_site._pthFileTests.*
|
||||
+test.test_site.HelperFunctionsTests.*
|
||||
+test.test_site.StartupImportTests.*
|
||||
+test.test_ssl.*
|
||||
+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
|
||||
+test.test_venv.BasicTest.*
|
||||
+test.test_venv.EnsurePipTest.*
|
||||
+# flaky
|
||||
+test.test__xxsubinterpreters.*
|
||||
+test.test_asyncio.test_subprocess.SubprocessProactorTests.test_stdin_broken_pipe
|
||||
\ No newline at end of file
|
||||
diff --git a/mingw_smoketests.py b/mingw_smoketests.py
|
||||
new file mode 100644
|
||||
index 0000000..d92c74a
|
||||
--- /dev/null
|
||||
+++ b/mingw_smoketests.py
|
||||
@@ -0,0 +1,313 @@
|
||||
+#!/usr/bin/env python3
|
||||
+# Copyright 2017 Christoph Reiter
|
||||
+#
|
||||
+# Permission is hereby granted, free of charge, to any person obtaining
|
||||
+# a copy of this software and associated documentation files (the
|
||||
+# "Software"), to deal in the Software without restriction, including
|
||||
+# without limitation the rights to use, copy, modify, merge, publish,
|
||||
+# distribute, sublicense, and/or sell copies of the Software, and to
|
||||
+# permit persons to whom the Software is furnished to do so, subject to
|
||||
+# the following conditions:
|
||||
+#
|
||||
+# The above copyright notice and this permission notice shall be included
|
||||
+# in all copies or substantial portions of the Software.
|
||||
+#
|
||||
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
+# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
+# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
+# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
+# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
+
|
||||
+"""The goal of this test suite is collect tests for update regressions
|
||||
+and to test msys2 related modifications like for path handling.
|
||||
+Feel free to extend.
|
||||
+"""
|
||||
+
|
||||
+import os
|
||||
+import unittest
|
||||
+import sysconfig
|
||||
+
|
||||
+if "MSYSTEM" in os.environ:
|
||||
+ SEP = "/"
|
||||
+else:
|
||||
+ SEP = "\\"
|
||||
+
|
||||
+_UCRT = "clang" in sysconfig.get_platform() or "ucrt" in sysconfig.get_platform()
|
||||
+
|
||||
+
|
||||
+class Tests(unittest.TestCase):
|
||||
+
|
||||
+ def test_zoneinfo(self):
|
||||
+ # https://github.com/msys2-contrib/cpython-mingw/issues/32
|
||||
+ import zoneinfo
|
||||
+ self.assertTrue(any(os.path.exists(p) for p in zoneinfo.TZPATH))
|
||||
+ zoneinfo.ZoneInfo("America/Sao_Paulo")
|
||||
+
|
||||
+ def test_userdir_path_sep(self):
|
||||
+ # Make sure os.path and pathlib use the same path separators
|
||||
+ from unittest import mock
|
||||
+ from os.path import expanduser
|
||||
+ from pathlib import Path
|
||||
+
|
||||
+ profiles = ["C:\\foo", "C:/foo"]
|
||||
+ for profile in profiles:
|
||||
+ with mock.patch.dict(os.environ, {"USERPROFILE": profile}):
|
||||
+ self.assertEqual(expanduser("~"), os.path.normpath(expanduser("~")))
|
||||
+ self.assertEqual(str(Path("~").expanduser()), expanduser("~"))
|
||||
+ self.assertEqual(str(Path.home()), expanduser("~"))
|
||||
+
|
||||
+ def test_sysconfig_schemes(self):
|
||||
+ # https://github.com/msys2/MINGW-packages/issues/9319
|
||||
+ import sysconfig
|
||||
+ from distutils.dist import Distribution
|
||||
+ from distutils.command.install import install
|
||||
+
|
||||
+ names = ['scripts', 'purelib', 'platlib', 'data', 'include']
|
||||
+ for scheme in ["nt", "nt_user"]:
|
||||
+ for name in names:
|
||||
+ c = install(Distribution({"name": "foobar"}))
|
||||
+ c.user = (scheme == "nt_user")
|
||||
+ c.finalize_options()
|
||||
+ if name == "include":
|
||||
+ dist_path = os.path.dirname(getattr(c, "install_" + "headers"))
|
||||
+ else:
|
||||
+ dist_path = getattr(c, "install_" + name)
|
||||
+ sys_path = sysconfig.get_path(name, scheme)
|
||||
+ self.assertEqual(dist_path, sys_path, (scheme, name))
|
||||
+
|
||||
+ def test_ctypes_find_library(self):
|
||||
+ from ctypes.util import find_library
|
||||
+ from ctypes import cdll
|
||||
+ self.assertTrue(cdll.msvcrt)
|
||||
+ if _UCRT:
|
||||
+ self.assertIsNone(find_library('c'))
|
||||
+ else:
|
||||
+ self.assertEqual(find_library('c'), 'msvcrt.dll')
|
||||
+
|
||||
+ def test_ctypes_dlopen(self):
|
||||
+ import ctypes
|
||||
+ import sys
|
||||
+ self.assertEqual(ctypes.RTLD_GLOBAL, 0)
|
||||
+ self.assertEqual(ctypes.RTLD_GLOBAL, ctypes.RTLD_LOCAL)
|
||||
+ self.assertFalse(hasattr(sys, 'setdlopenflags'))
|
||||
+ self.assertFalse(hasattr(sys, 'getdlopenflags'))
|
||||
+ self.assertFalse([n for n in dir(os) if n.startswith("RTLD_")])
|
||||
+
|
||||
+ def test_time_no_unix_stuff(self):
|
||||
+ import time
|
||||
+ self.assertFalse([n for n in dir(time) if n.startswith("clock_")])
|
||||
+ self.assertFalse([n for n in dir(time) if n.startswith("CLOCK_")])
|
||||
+ self.assertFalse([n for n in dir(time) if n.startswith("pthread_")])
|
||||
+ self.assertFalse(hasattr(time, 'tzset'))
|
||||
+
|
||||
+ def test_strftime(self):
|
||||
+ import time
|
||||
+ with self.assertRaises(ValueError):
|
||||
+ time.strftime('%Y', (12345,) + (0,) * 8)
|
||||
+
|
||||
+ def test_sep(self):
|
||||
+ self.assertEqual(os.sep, SEP)
|
||||
+
|
||||
+ def test_module_file_path(self):
|
||||
+ import asyncio
|
||||
+ import zlib
|
||||
+ self.assertEqual(zlib.__file__, os.path.normpath(zlib.__file__))
|
||||
+ self.assertEqual(asyncio.__file__, os.path.normpath(asyncio.__file__))
|
||||
+
|
||||
+ def test_importlib_frozen_path_sep(self):
|
||||
+ import importlib._bootstrap_external
|
||||
+ self.assertEqual(importlib._bootstrap_external.path_sep, SEP)
|
||||
+
|
||||
+ def test_os_commonpath(self):
|
||||
+ self.assertEqual(
|
||||
+ os.path.commonpath(
|
||||
+ [os.path.join("C:", os.sep, "foo", "bar"),
|
||||
+ os.path.join("C:", os.sep, "foo")]),
|
||||
+ os.path.join("C:", os.sep, "foo"))
|
||||
+
|
||||
+ def test_pathlib(self):
|
||||
+ import pathlib
|
||||
+
|
||||
+ p = pathlib.Path("foo") / pathlib.Path("foo")
|
||||
+ self.assertEqual(str(p), os.path.normpath(p))
|
||||
+
|
||||
+ def test_modules_import(self):
|
||||
+ import sqlite3
|
||||
+ import ssl
|
||||
+ import ctypes
|
||||
+ import curses
|
||||
+
|
||||
+ def test_c_modules_import(self):
|
||||
+ import _decimal
|
||||
+
|
||||
+ def test_socket_inet_ntop(self):
|
||||
+ import socket
|
||||
+ self.assertTrue(hasattr(socket, "inet_ntop"))
|
||||
+
|
||||
+ def test_socket_inet_pton(self):
|
||||
+ import socket
|
||||
+ self.assertTrue(hasattr(socket, "inet_pton"))
|
||||
+
|
||||
+ def test_multiprocessing_queue(self):
|
||||
+ from multiprocessing import Queue
|
||||
+ Queue(0)
|
||||
+
|
||||
+ #def test_socket_timout_normal_error(self):
|
||||
+ # import urllib.request
|
||||
+ # from urllib.error import URLError
|
||||
+
|
||||
+ # try:
|
||||
+ # urllib.request.urlopen(
|
||||
+ # 'http://localhost', timeout=0.0001).close()
|
||||
+ # except URLError:
|
||||
+ # pass
|
||||
+
|
||||
+ def test_threads(self):
|
||||
+ from concurrent.futures import ThreadPoolExecutor
|
||||
+
|
||||
+ with ThreadPoolExecutor(1) as pool:
|
||||
+ for res in pool.map(lambda *x: None, range(10000)):
|
||||
+ pass
|
||||
+
|
||||
+ def test_sysconfig(self):
|
||||
+ import sysconfig
|
||||
+ # This should be able to execute without exceptions
|
||||
+ sysconfig.get_config_vars()
|
||||
+
|
||||
+ def test_sqlite_enable_load_extension(self):
|
||||
+ # Make sure --enable-loadable-sqlite-extensions is used
|
||||
+ import sqlite3
|
||||
+ self.assertTrue(sqlite3.Connection.enable_load_extension)
|
||||
+
|
||||
+ def test_venv_creation(self):
|
||||
+ import tempfile
|
||||
+ import venv
|
||||
+ import subprocess
|
||||
+ import shutil
|
||||
+ with tempfile.TemporaryDirectory() as tmp:
|
||||
+ builder = venv.EnvBuilder()
|
||||
+ builder.create(tmp)
|
||||
+ assert os.path.exists(os.path.join(tmp, "bin", "activate"))
|
||||
+ assert os.path.exists(os.path.join(tmp, "bin", "python.exe"))
|
||||
+ assert os.path.exists(os.path.join(tmp, "bin", "python3.exe"))
|
||||
+ subprocess.check_call([shutil.which("bash.exe"), os.path.join(tmp, "bin", "activate")])
|
||||
+
|
||||
+ def test_has_mktime(self):
|
||||
+ from time import mktime, gmtime
|
||||
+ mktime(gmtime())
|
||||
+
|
||||
+ def test_platform_things(self):
|
||||
+ import sys
|
||||
+ import sysconfig
|
||||
+ import platform
|
||||
+ import importlib.machinery
|
||||
+ self.assertEqual(sys.implementation.name, "cpython")
|
||||
+ self.assertEqual(sys.platform, "win32")
|
||||
+ self.assertTrue(sysconfig.get_platform().startswith("mingw"))
|
||||
+ self.assertTrue(sysconfig.get_config_var('SOABI').startswith("cpython-"))
|
||||
+ ext_suffix = sysconfig.get_config_var('EXT_SUFFIX')
|
||||
+ self.assertTrue(ext_suffix.endswith(".pyd"))
|
||||
+ self.assertTrue("mingw" in ext_suffix)
|
||||
+ self.assertEqual(sysconfig.get_config_var('SHLIB_SUFFIX'), ".pyd")
|
||||
+ ext_suffixes = importlib.machinery.EXTENSION_SUFFIXES
|
||||
+ self.assertTrue(ext_suffix in ext_suffixes)
|
||||
+ self.assertTrue(".pyd" in ext_suffixes)
|
||||
+ self.assertEqual(sys.winver, ".".join(map(str, sys.version_info[:2])))
|
||||
+ self.assertEqual(platform.python_implementation(), "CPython")
|
||||
+ self.assertEqual(platform.system(), "Windows")
|
||||
+ self.assertTrue(isinstance(sys.api_version, int) and sys.api_version > 0)
|
||||
+
|
||||
+ def test_c_ext_build(self):
|
||||
+ import tempfile
|
||||
+ import sys
|
||||
+ import subprocess
|
||||
+ import textwrap
|
||||
+ from pathlib import Path
|
||||
+
|
||||
+ with tempfile.TemporaryDirectory() as tmppro:
|
||||
+ subprocess.check_call([sys.executable, "-m", "ensurepip", "--user"])
|
||||
+ with Path(tmppro, "setup.py").open("w") as f:
|
||||
+ f.write(
|
||||
+ textwrap.dedent(
|
||||
+ """\
|
||||
+ from setuptools import setup, Extension
|
||||
+
|
||||
+ setup(
|
||||
+ name='cwrapper',
|
||||
+ version='1.0',
|
||||
+ ext_modules=[
|
||||
+ Extension(
|
||||
+ 'cwrapper',
|
||||
+ sources=['cwrapper.c']),
|
||||
+ ],
|
||||
+ )
|
||||
+ """
|
||||
+ )
|
||||
+ )
|
||||
+ with Path(tmppro, "cwrapper.c").open("w") as f:
|
||||
+ f.write(
|
||||
+ textwrap.dedent(
|
||||
+ """\
|
||||
+ #include <Python.h>
|
||||
+ static PyObject *
|
||||
+ helloworld(PyObject *self, PyObject *args)
|
||||
+ {
|
||||
+ printf("Hello World\\n");
|
||||
+ Py_RETURN_NONE;
|
||||
+ }
|
||||
+ static PyMethodDef
|
||||
+ myMethods[] = {
|
||||
+ { "helloworld", helloworld, METH_NOARGS, "Prints Hello World" },
|
||||
+ { NULL, NULL, 0, NULL }
|
||||
+ };
|
||||
+ static struct PyModuleDef cwrapper = {
|
||||
+ PyModuleDef_HEAD_INIT,
|
||||
+ "cwrapper",
|
||||
+ "Test Module",
|
||||
+ -1,
|
||||
+ myMethods
|
||||
+ };
|
||||
+
|
||||
+ PyMODINIT_FUNC
|
||||
+ PyInit_cwrapper(void)
|
||||
+ {
|
||||
+ return PyModule_Create(&cwrapper);
|
||||
+ }
|
||||
+ """
|
||||
+ )
|
||||
+ )
|
||||
+ subprocess.check_call(
|
||||
+ [sys.executable, "-c", "import struct"],
|
||||
+ )
|
||||
+ subprocess.check_call(
|
||||
+ [
|
||||
+ sys.executable,
|
||||
+ "-m",
|
||||
+ "pip",
|
||||
+ "install",
|
||||
+ "wheel",
|
||||
+ ],
|
||||
+ )
|
||||
+ subprocess.check_call(
|
||||
+ [
|
||||
+ sys.executable,
|
||||
+ "-m",
|
||||
+ "pip",
|
||||
+ "install",
|
||||
+ tmppro,
|
||||
+ ],
|
||||
+ )
|
||||
+ subprocess.check_call(
|
||||
+ [sys.executable, "-c", "import cwrapper"],
|
||||
+ )
|
||||
+
|
||||
+
|
||||
+
|
||||
+def suite():
|
||||
+ return unittest.TestLoader().loadTestsFromName(__name__)
|
||||
+
|
||||
+
|
||||
+if __name__ == '__main__':
|
||||
+ unittest.main(defaultTest='suite')
|
||||
@@ -0,0 +1,26 @@
|
||||
From 731fa5ca973d4ceca4f8679e17a176051314bb2c Mon Sep 17 00:00:00 2001
|
||||
From: Naveen M K <naveen521kk@gmail.com>
|
||||
Date: Tue, 12 Oct 2021 18:35:21 +0530
|
||||
Subject: [PATCH 064/N] Define PY3_DLLNAME to fix build
|
||||
|
||||
PY3_DLLNAME is used in Python/pathconfig.c but isn't
|
||||
defined. I guess it is useless but it will fix the build.
|
||||
|
||||
Co-authored-by: jeremyd2019 <github@jdrake.com>
|
||||
---
|
||||
configure.ac | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index fc1f083..2d3c574 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -5093,7 +5093,7 @@ then
|
||||
*-*-mingw*)
|
||||
DYNLOADFILE="dynload_win.o"
|
||||
extra_machdep_objs="$extra_machdep_objs PC/dl_nt.o"
|
||||
- CFLAGS_NODIST="$CFLAGS_NODIST -DMS_DLL_ID='\"$VERSION\"'"
|
||||
+ CFLAGS_NODIST="$CFLAGS_NODIST -DMS_DLL_ID='\"$VERSION\"' -DPY3_DLLNAME='L\"$DLLLIBRARY\"'"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
@@ -0,0 +1,22 @@
|
||||
From 453ebc55f3cc7a69f946f6ba43c89afe455cd052 Mon Sep 17 00:00:00 2001
|
||||
From: Long Nguyen <nguyen.long.908132@gmail.com>
|
||||
Date: Sun, 14 Nov 2021 14:55:35 +0700
|
||||
Subject: [PATCH 065/N] _testconsole.c: Fix casing & path sep
|
||||
|
||||
---
|
||||
PC/_testconsole.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/PC/_testconsole.c b/PC/_testconsole.c
|
||||
index 3221b98..47fbe6f 100644
|
||||
--- a/PC/_testconsole.c
|
||||
+++ b/PC/_testconsole.c
|
||||
@@ -116,7 +116,7 @@ _testconsole_read_output_impl(PyObject *module, PyObject *file)
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
-#include "clinic\_testconsole.c.h"
|
||||
+#include "clinic/_testconsole.c.h"
|
||||
|
||||
PyMethodDef testconsole_methods[] = {
|
||||
_TESTCONSOLE_WRITE_INPUT_METHODDEF
|
||||
@@ -0,0 +1,52 @@
|
||||
From 52eb9560ea54ecf155b91c01fa1c305367f0c19d Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Martin=20Storsj=C3=B6?= <martin@martin.st>
|
||||
Date: Fri, 19 Nov 2021 12:18:06 +0200
|
||||
Subject: [PATCH 066/N] Return consistent architecture markers for python on
|
||||
mingw/armv7
|
||||
|
||||
---
|
||||
Lib/sysconfig.py | 2 ++
|
||||
Python/getcompiler.c | 2 ++
|
||||
configure.ac | 3 +++
|
||||
3 files changed, 7 insertions(+)
|
||||
|
||||
diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py
|
||||
index 44c0ff0..33f8cd8 100644
|
||||
--- a/Lib/sysconfig.py
|
||||
+++ b/Lib/sysconfig.py
|
||||
@@ -805,6 +805,8 @@ def get_platform():
|
||||
return 'mingw_x86_64_clang'
|
||||
if 'arm64' in sys.version.lower():
|
||||
return 'mingw_aarch64'
|
||||
+ if 'arm' in sys.version.lower():
|
||||
+ return 'mingw_armv7'
|
||||
return 'mingw_i686_clang'
|
||||
if 'amd64' in sys.version.lower():
|
||||
return 'mingw_x86_64'
|
||||
diff --git a/Python/getcompiler.c b/Python/getcompiler.c
|
||||
index 275f799..4b0b9b3 100644
|
||||
--- a/Python/getcompiler.c
|
||||
+++ b/Python/getcompiler.c
|
||||
@@ -20,6 +20,8 @@
|
||||
#define ARCH_SUFFIX " 64 bit (AMD64)"
|
||||
#elif defined(__aarch64__)
|
||||
#define ARCH_SUFFIX " 64 bit (ARM64)"
|
||||
+#elif defined(__arm__)
|
||||
+#define ARCH_SUFFIX " 32 bit (ARM)"
|
||||
#else
|
||||
#define ARCH_SUFFIX " 32 bit"
|
||||
#endif
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 2d3c574..ecab56d 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -6281,6 +6281,9 @@ case $host_os in
|
||||
aarch64-*-mingw*)
|
||||
PYD_PLATFORM_TAG+="mingw_aarch64"
|
||||
;;
|
||||
+ armv7-*-mingw*)
|
||||
+ PYD_PLATFORM_TAG+="mingw_armv7"
|
||||
+ ;;
|
||||
esac
|
||||
AC_MSG_RESULT($PYD_PLATFORM_TAG)
|
||||
esac
|
||||
@@ -0,0 +1,36 @@
|
||||
From 0ade53e4e7d444daa47672893ce07167cec84162 Mon Sep 17 00:00:00 2001
|
||||
From: jeremyd2019 <github@jdrake.com>
|
||||
Date: Mon, 22 Nov 2021 16:04:41 -0800
|
||||
Subject: [PATCH 067/N] handle ncursesw pkg-config when cross-compiling
|
||||
|
||||
strip extra args from pkg-config --cflags-only-I, setup.py is only expecting a single path.
|
||||
|
||||
Use pkg-config ncursesw include dir even if cross-compiling (PKG_CONFIG_PATH should be set in that case).
|
||||
---
|
||||
configure.ac | 6 ++----
|
||||
1 file changed, 2 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index ecab56d..f07fce5 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -6878,7 +6878,7 @@ AS_VAR_IF([have_panel], [no], [
|
||||
])
|
||||
|
||||
if test -n "$PKG_CONFIG"; then
|
||||
- NCURSESW_INCLUDEDIR="`"$PKG_CONFIG" ncursesw --cflags-only-I 2>/dev/null | sed -e 's/^-I//;s/ *$//'`"
|
||||
+ NCURSESW_INCLUDEDIR="`"$PKG_CONFIG" ncursesw --cflags-only-I 2>/dev/null | sed -e 's/^-I//;s/ .*$//'`"
|
||||
else
|
||||
NCURSESW_INCLUDEDIR=""
|
||||
fi
|
||||
@@ -6886,9 +6886,7 @@ AC_SUBST(NCURSESW_INCLUDEDIR)
|
||||
|
||||
# first curses header check
|
||||
ac_save_cppflags="$CPPFLAGS"
|
||||
-if test "$cross_compiling" = no; then
|
||||
- CPPFLAGS="$CPPFLAGS -I$NCURSESW_INCLUDEDIR"
|
||||
-fi
|
||||
+CPPFLAGS="$CPPFLAGS -I$NCURSESW_INCLUDEDIR"
|
||||
|
||||
# On Solaris, term.h requires curses.h
|
||||
AC_CHECK_HEADERS([term.h], [], [], [
|
||||
@@ -0,0 +1,23 @@
|
||||
From 29d1642bfc256e8fc7cedfdf48604975cf99b6f7 Mon Sep 17 00:00:00 2001
|
||||
From: jeremyd2019 <github@jdrake.com>
|
||||
Date: Sat, 22 Jan 2022 11:33:00 -0800
|
||||
Subject: [PATCH 068/N] mingw_smoketests: fix _UCRT condition
|
||||
|
||||
The prior detection missed ARM (32 and 64) being UCRT. Since there are fewer non-UCRT platforms, list those two instead of trying to extend the list of UCRT.
|
||||
---
|
||||
mingw_smoketests.py | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/mingw_smoketests.py b/mingw_smoketests.py
|
||||
index d92c74a..ce95846 100644
|
||||
--- a/mingw_smoketests.py
|
||||
+++ b/mingw_smoketests.py
|
||||
@@ -34,7 +34,7 @@
|
||||
else:
|
||||
SEP = "\\"
|
||||
|
||||
-_UCRT = "clang" in sysconfig.get_platform() or "ucrt" in sysconfig.get_platform()
|
||||
+_UCRT = sysconfig.get_platform() not in ('mingw_x86_64', 'mingw_i686')
|
||||
|
||||
|
||||
class Tests(unittest.TestCase):
|
||||
@@ -0,0 +1,69 @@
|
||||
From 66065e2d38e9b1c23e23f1ebf22b29c7fb37f926 Mon Sep 17 00:00:00 2001
|
||||
From: Naveen M K <naveen521kk@gmail.com>
|
||||
Date: Wed, 19 Jan 2022 19:39:20 +0530
|
||||
Subject: [PATCH 069/N] Modify `sys.winver` to match upstream
|
||||
|
||||
With this change `sys.winver` will add the Arch for which
|
||||
python was compiled on, for example in 32-bits, `sys.winver`
|
||||
will be `3.10-32`, for arm32 it would be `3.10-arm32` and
|
||||
so on.
|
||||
|
||||
See https://github.com/msys2-contrib/cpython-mingw/issues/40
|
||||
---
|
||||
configure.ac | 22 ++++++++++++++++++----
|
||||
mingw_smoketests.py | 9 ++++++++-
|
||||
2 files changed, 26 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index f07fce5..3d8a63c 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -5091,10 +5091,24 @@ then
|
||||
esac
|
||||
case $host in
|
||||
*-*-mingw*)
|
||||
- DYNLOADFILE="dynload_win.o"
|
||||
- extra_machdep_objs="$extra_machdep_objs PC/dl_nt.o"
|
||||
- CFLAGS_NODIST="$CFLAGS_NODIST -DMS_DLL_ID='\"$VERSION\"' -DPY3_DLLNAME='L\"$DLLLIBRARY\"'"
|
||||
- ;;
|
||||
+ DYNLOADFILE="dynload_win.o"
|
||||
+ extra_machdep_objs="$extra_machdep_objs PC/dl_nt.o"
|
||||
+ CFLAGS_NODIST="$CFLAGS_NODIST -DPY3_DLLNAME='L\"$DLLLIBRARY\"'"
|
||||
+ case $host in
|
||||
+ i686*)
|
||||
+ CFLAGS_NODIST="$CFLAGS_NODIST -DMS_DLL_ID='\"${VERSION}-32\"'"
|
||||
+ ;;
|
||||
+ armv7*)
|
||||
+ CFLAGS_NODIST="$CFLAGS_NODIST -DMS_DLL_ID='\"${VERSION}-arm32\"'"
|
||||
+ ;;
|
||||
+ aarch64*)
|
||||
+ CFLAGS_NODIST="$CFLAGS_NODIST -DMS_DLL_ID='\"${VERSION}-arm64\"'"
|
||||
+ ;;
|
||||
+ *)
|
||||
+ CFLAGS_NODIST="$CFLAGS_NODIST -DMS_DLL_ID='\"$VERSION\"'"
|
||||
+ ;;
|
||||
+ esac
|
||||
+ ;;
|
||||
esac
|
||||
fi
|
||||
AC_MSG_RESULT([$DYNLOADFILE])
|
||||
diff --git a/mingw_smoketests.py b/mingw_smoketests.py
|
||||
index ce95846..aa76659 100644
|
||||
--- a/mingw_smoketests.py
|
||||
+++ b/mingw_smoketests.py
|
||||
@@ -214,7 +214,14 @@ def test_platform_things(self):
|
||||
ext_suffixes = importlib.machinery.EXTENSION_SUFFIXES
|
||||
self.assertTrue(ext_suffix in ext_suffixes)
|
||||
self.assertTrue(".pyd" in ext_suffixes)
|
||||
- self.assertEqual(sys.winver, ".".join(map(str, sys.version_info[:2])))
|
||||
+ if sysconfig.get_platform().startswith('mingw_i686'):
|
||||
+ self.assertEqual(sys.winver, ".".join(map(str, sys.version_info[:2])) + '-32')
|
||||
+ elif sysconfig.get_platform().startswith('mingw_aarch64'):
|
||||
+ self.assertEqual(sys.winver, ".".join(map(str, sys.version_info[:2])) + '-arm64')
|
||||
+ elif sysconfig.get_platform().startswith('mingw_armv7'):
|
||||
+ self.assertEqual(sys.winver, ".".join(map(str, sys.version_info[:2])) + '-arm32')
|
||||
+ else:
|
||||
+ self.assertEqual(sys.winver, ".".join(map(str, sys.version_info[:2])))
|
||||
self.assertEqual(platform.python_implementation(), "CPython")
|
||||
self.assertEqual(platform.system(), "Windows")
|
||||
self.assertTrue(isinstance(sys.api_version, int) and sys.api_version > 0)
|
||||
@@ -0,0 +1,119 @@
|
||||
From 83258d903c0b8f3614feadbf78fb813d02d116a9 Mon Sep 17 00:00:00 2001
|
||||
From: Naveen M K <naveen521kk@gmail.com>
|
||||
Date: Wed, 19 Jan 2022 20:01:45 +0530
|
||||
Subject: [PATCH 070/N] Change user site-packages path to include the
|
||||
environment info
|
||||
|
||||
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.10` 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.10-<platform tag here>`, for example, in
|
||||
CLANG64 this would be `~/.local/lib/python3.10-mingw_x86_64_clang`.
|
||||
|
||||
Fixes https://github.com/msys2-contrib/cpython-mingw/issues/40
|
||||
---
|
||||
Lib/site.py | 28 +++++++++++++++++++++++++---
|
||||
Lib/sysconfig.py | 26 +++++++++++++++-----------
|
||||
2 files changed, 40 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/Lib/site.py b/Lib/site.py
|
||||
index 7c89370..0cca82f 100644
|
||||
--- a/Lib/site.py
|
||||
+++ b/Lib/site.py
|
||||
@@ -289,14 +289,36 @@ def joinuser(*args):
|
||||
|
||||
return joinuser("~", ".local")
|
||||
|
||||
+# Copy of sysconfig.get_platform() but only for MinGW
|
||||
+def _get_platform():
|
||||
+ if os.name == 'nt':
|
||||
+ if 'gcc' in sys.version.lower():
|
||||
+ if 'ucrt' in sys.version.lower():
|
||||
+ if 'amd64' in sys.version.lower():
|
||||
+ return 'mingw_x86_64_ucrt'
|
||||
+ return 'mingw_i686_ucrt'
|
||||
+ if 'clang' in sys.version.lower():
|
||||
+ if 'amd64' in sys.version.lower():
|
||||
+ return 'mingw_x86_64_clang'
|
||||
+ if 'arm64' in sys.version.lower():
|
||||
+ return 'mingw_aarch64'
|
||||
+ if 'arm' in sys.version.lower():
|
||||
+ return 'mingw_armv7'
|
||||
+ return 'mingw_i686_clang'
|
||||
+ if 'amd64' in sys.version.lower():
|
||||
+ return 'mingw_x86_64'
|
||||
+ return 'mingw_i686'
|
||||
+ return sys.platform
|
||||
|
||||
# Same to sysconfig.get_path('purelib', os.name+'_user')
|
||||
def _get_path(userbase):
|
||||
version = sys.version_info
|
||||
|
||||
- if os.name == 'nt' and not _POSIX_BUILD:
|
||||
- ver_nodot = sys.winver.replace('.', '')
|
||||
- return f'{userbase}\\Python{ver_nodot}\\site-packages'
|
||||
+ if os.name == 'nt':
|
||||
+ if not _POSIX_BUILD:
|
||||
+ ver_nodot = sys.winver.replace('.', '')
|
||||
+ return f'{userbase}\\Python{ver_nodot}\\site-packages'
|
||||
+ return f'{userbase}/lib/python{version[0]}.{version[1]}-{_get_platform()}/site-packages'
|
||||
|
||||
if sys.platform == 'darwin' and sys._framework:
|
||||
return f'{userbase}/lib/python/site-packages'
|
||||
diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py
|
||||
index 33f8cd8..cbe060f 100644
|
||||
--- a/Lib/sysconfig.py
|
||||
+++ b/Lib/sysconfig.py
|
||||
@@ -141,20 +141,20 @@ def joinuser(*args):
|
||||
_INSTALL_SCHEMES |= {
|
||||
# NOTE: When modifying "purelib" scheme, update site._get_path() too.
|
||||
'nt_user': {
|
||||
- 'stdlib': '{userbase}/lib/python{py_version_short}',
|
||||
- 'platstdlib': '{userbase}/lib/python{py_version_short}',
|
||||
- 'purelib': '{userbase}/lib/python{py_version_short}/site-packages',
|
||||
- 'platlib': '{userbase}/lib/python{py_version_short}/site-packages',
|
||||
- 'include': '{userbase}/include/python{py_version_short}',
|
||||
+ 'stdlib': '{userbase}/lib/python{py_version_short_plat}',
|
||||
+ 'platstdlib': '{userbase}/lib/python{py_version_short_plat}',
|
||||
+ 'purelib': '{userbase}/lib/python{py_version_short_plat}/site-packages',
|
||||
+ 'platlib': '{userbase}/lib/python{py_version_short_plat}/site-packages',
|
||||
+ 'include': '{userbase}/include/python{py_version_short_plat}',
|
||||
'scripts': '{userbase}/bin',
|
||||
'data': '{userbase}',
|
||||
},
|
||||
'posix_user': {
|
||||
- 'stdlib': '{userbase}/{platlibdir}/python{py_version_short}',
|
||||
- 'platstdlib': '{userbase}/{platlibdir}/python{py_version_short}',
|
||||
- 'purelib': '{userbase}/lib/python{py_version_short}/site-packages',
|
||||
- 'platlib': '{userbase}/lib/python{py_version_short}/site-packages',
|
||||
- 'include': '{userbase}/include/python{py_version_short}',
|
||||
+ 'stdlib': '{userbase}/{platlibdir}/python{py_version_short_plat}',
|
||||
+ 'platstdlib': '{userbase}/{platlibdir}/python{py_version_short_plat}',
|
||||
+ 'purelib': '{userbase}/lib/python{py_version_short_plat}/site-packages',
|
||||
+ 'platlib': '{userbase}/lib/python{py_version_short_plat}/site-packages',
|
||||
+ 'include': '{userbase}/include/python{py_version_short_plat}',
|
||||
'scripts': '{userbase}/bin',
|
||||
'data': '{userbase}',
|
||||
},
|
||||
@@ -695,6 +695,10 @@ def _init_config_vars():
|
||||
_CONFIG_VARS['py_version_nodot_plat'] = sys.winver.replace('.', '')
|
||||
except AttributeError:
|
||||
_CONFIG_VARS['py_version_nodot_plat'] = ''
|
||||
+ if os.name == 'nt' and _POSIX_BUILD:
|
||||
+ _CONFIG_VARS['py_version_short_plat'] = f'{_PY_VERSION_SHORT}-{get_platform()}'
|
||||
+ else:
|
||||
+ _CONFIG_VARS['py_version_short_plat'] = _PY_VERSION_SHORT
|
||||
|
||||
if os.name == 'nt' and not _POSIX_BUILD:
|
||||
_init_non_posix(_CONFIG_VARS)
|
||||
@@ -772,7 +776,7 @@ def get_config_var(name):
|
||||
"""
|
||||
return get_config_vars().get(name)
|
||||
|
||||
-
|
||||
+# make sure to change site._get_platform() while changing this function
|
||||
def get_platform():
|
||||
"""Return a string that identifies the current platform.
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
From fd99658f3ebe275329b506b9f4f4f0d2418a190d Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Martin=20Storsj=C3=B6?= <martin@martin.st>
|
||||
Date: Thu, 21 Apr 2022 14:25:51 +0300
|
||||
Subject: [PATCH 071/N] configure: Include a header in the check for
|
||||
_beginthread
|
||||
|
||||
Previously, the test tried compiling a call to the
|
||||
_beginthread function without either declaring the function
|
||||
(and its parameters) or including the corresponding header.
|
||||
|
||||
Since Clang 15 (which still is under development, so this may
|
||||
still change before it's released) [1], implicit function
|
||||
declarations are a hard error by default, when building code
|
||||
in C99 mode (or newer).
|
||||
|
||||
[1] https://github.com/llvm/llvm-project/commit/7d644e1215b376ec5e915df9ea2eeb56e2d94626
|
||||
---
|
||||
configure.ac | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 3d8a63c..1bca34c 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -2838,7 +2838,7 @@ AC_MSG_RESULT([$with_nt_threads])
|
||||
if test $with_nt_threads = yes ; then
|
||||
AC_MSG_CHECKING([whether linking with nt-threads work])
|
||||
AC_LINK_IFELSE([
|
||||
- AC_LANG_PROGRAM([[]],[[_beginthread(0, 0, 0);]])
|
||||
+ AC_LANG_PROGRAM([[#include <process.h>]],[[_beginthread(0, 0, 0);]])
|
||||
],
|
||||
[AC_MSG_RESULT([yes])],
|
||||
[AC_MSG_ERROR([failed to link with nt-threads])])
|
||||
@@ -0,0 +1,37 @@
|
||||
From a98d668d5be7b5e17d1c5e5f0a0af53c1b405282 Mon Sep 17 00:00:00 2001
|
||||
From: Christoph Reiter <reiter.christoph@gmail.com>
|
||||
Date: Fri, 22 Apr 2022 17:31:19 +0200
|
||||
Subject: [PATCH 072/N] configure.ac: Default to --without-c-locale-coercion
|
||||
on Windows
|
||||
|
||||
--with-c-locale-coercion otherwise defaults to yes and enables code
|
||||
that isn't compatible on Windows, mainly because the feature is Unix related.
|
||||
|
||||
Default to "no" on Windows instead.
|
||||
|
||||
Fixes #36
|
||||
---
|
||||
configure.ac | 7 +++++--
|
||||
1 file changed, 5 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 1bca34c..a0b2aba 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -4980,11 +4980,14 @@ AC_MSG_RESULT([$with_freelists])
|
||||
AC_MSG_CHECKING([for --with-c-locale-coercion])
|
||||
AC_ARG_WITH(
|
||||
[c-locale-coercion],
|
||||
- [AS_HELP_STRING([--with-c-locale-coercion], [enable C locale coercion to a UTF-8 based locale (default is yes)])])
|
||||
+ [AS_HELP_STRING([--with-c-locale-coercion], [enable C locale coercion to a UTF-8 based locale (default is yes on Unix, no on Windows)])])
|
||||
|
||||
if test -z "$with_c_locale_coercion"
|
||||
then
|
||||
- with_c_locale_coercion="yes"
|
||||
+ case $host in
|
||||
+ *-*-mingw*) with_c_locale_coercion="no";;
|
||||
+ *) with_c_locale_coercion="yes";;
|
||||
+ esac
|
||||
fi
|
||||
if test "$with_c_locale_coercion" != "no"
|
||||
then
|
||||
136
mingw-w64-python3.12/0073-Fix-failing-tests.patch
Normal file
136
mingw-w64-python3.12/0073-Fix-failing-tests.patch
Normal file
@@ -0,0 +1,136 @@
|
||||
From 3a8acec4421fb0f4c4fcdbe7e5f420d6201e0e97 Mon Sep 17 00:00:00 2001
|
||||
From: Naveen M K <naveen521kk@gmail.com>
|
||||
Date: Sun, 5 Jun 2022 20:28:53 +0530
|
||||
Subject: [PATCH 073/N] Fix failing tests
|
||||
|
||||
- In `test_sysconfig`, ignore `test_sysconfig.TestSysConfig.test_user_similar` test failure.
|
||||
- Copy `get_platform()` from from distutils.utils to test_importlib/test_windows.py.
|
||||
- In `test_tcl`, ignore `test_tcl.TclTest.testLoadWithUNC` test failure.
|
||||
- Disable `test.test_asynchat.TestAsynchat.test_line_terminator2`, seems flaky.
|
||||
- skip some more flaky tests
|
||||
- some basic fixes for test_getpath
|
||||
- test_sysconfig.py: fix tests related to mingw
|
||||
---
|
||||
Lib/test/test_getpath.py | 3 +++
|
||||
Lib/test/test_importlib/test_windows.py | 17 +++++++++++++++++
|
||||
Lib/test/test_sysconfig.py | 8 ++++++--
|
||||
mingw_ignorefile.txt | 13 +++++++++++--
|
||||
4 files changed, 37 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/Lib/test/test_getpath.py b/Lib/test/test_getpath.py
|
||||
index b9cbe1d..ee4ab99 100644
|
||||
--- a/Lib/test/test_getpath.py
|
||||
+++ b/Lib/test/test_getpath.py
|
||||
@@ -837,6 +837,7 @@ def test_symlink_buildpath_macos(self):
|
||||
ENV_PYTHONHOME="",
|
||||
ENV_PYTHONEXECUTABLE="",
|
||||
ENV___PYVENV_LAUNCHER__="",
|
||||
+ ENV_MSYSTEM="",
|
||||
argv0="",
|
||||
py_setpath="",
|
||||
real_executable="",
|
||||
@@ -876,6 +877,7 @@ def __init__(self, *a, argv0=None, config=None, **kw):
|
||||
self.update(DEFAULT_NAMESPACE)
|
||||
self["config"] = DEFAULT_CONFIG.copy()
|
||||
self["os_name"] = "nt"
|
||||
+ self["is_mingw"] = 0
|
||||
self["PLATLIBDIR"] = "DLLs"
|
||||
self["PYWINVER"] = "9.8-XY"
|
||||
self["VPATH"] = r"..\.."
|
||||
@@ -1052,6 +1054,7 @@ def __init__(self, *a, argv0=None, config=None, **kw):
|
||||
self.update(DEFAULT_NAMESPACE)
|
||||
self["config"] = DEFAULT_CONFIG.copy()
|
||||
self["os_name"] = "posix"
|
||||
+ self["is_mingw"] = 0
|
||||
self["PLATLIBDIR"] = "lib"
|
||||
self["WITH_NEXT_FRAMEWORK"] = 0
|
||||
super().__init__(*a, **kw)
|
||||
diff --git a/Lib/test/test_importlib/test_windows.py b/Lib/test/test_importlib/test_windows.py
|
||||
index 40b8aa1..03b5a98 100644
|
||||
--- a/Lib/test/test_importlib/test_windows.py
|
||||
+++ b/Lib/test/test_importlib/test_windows.py
|
||||
@@ -24,6 +24,23 @@ def get_platform():
|
||||
'x64' : 'win-amd64',
|
||||
'arm' : 'win-arm32',
|
||||
}
|
||||
+ if os.name == 'nt':
|
||||
+ if 'gcc' in sys.version.lower():
|
||||
+ if 'ucrt' in sys.version.lower():
|
||||
+ if 'amd64' in sys.version.lower():
|
||||
+ return 'mingw_x86_64_ucrt'
|
||||
+ return 'mingw_i686_ucrt'
|
||||
+ if 'clang' in sys.version.lower():
|
||||
+ if 'amd64' in sys.version.lower():
|
||||
+ return 'mingw_x86_64_clang'
|
||||
+ if 'arm64' in sys.version.lower():
|
||||
+ return 'mingw_aarch64'
|
||||
+ if 'arm' in sys.version.lower():
|
||||
+ return 'mingw_armv7'
|
||||
+ return 'mingw_i686_clang'
|
||||
+ if 'amd64' in sys.version.lower():
|
||||
+ return 'mingw_x86_64'
|
||||
+ return 'mingw_i686'
|
||||
if ('VSCMD_ARG_TGT_ARCH' in os.environ and
|
||||
os.environ['VSCMD_ARG_TGT_ARCH'] in TARGET_TO_PLAT):
|
||||
return TARGET_TO_PLAT[os.environ['VSCMD_ARG_TGT_ARCH']]
|
||||
diff --git a/Lib/test/test_sysconfig.py b/Lib/test/test_sysconfig.py
|
||||
index b6dbf3d..42a81c4 100644
|
||||
--- a/Lib/test/test_sysconfig.py
|
||||
+++ b/Lib/test/test_sysconfig.py
|
||||
@@ -16,7 +16,7 @@
|
||||
from sysconfig import (get_paths, get_platform, get_config_vars,
|
||||
get_path, get_path_names, _INSTALL_SCHEMES,
|
||||
get_default_scheme, get_scheme_names, get_config_var,
|
||||
- _expand_vars, _get_preferred_schemes, _main)
|
||||
+ _expand_vars, _get_preferred_schemes, _main, _POSIX_BUILD)
|
||||
import _osx_support
|
||||
|
||||
|
||||
@@ -179,7 +179,7 @@ def test_nt_venv_scheme(self):
|
||||
self.assertEqual(libpath, sysconfig.get_path('purelib', scheme='nt_venv'))
|
||||
|
||||
def test_venv_scheme(self):
|
||||
- if sys.platform == 'win32':
|
||||
+ if not _POSIX_BUILD and sys.platform == 'win32':
|
||||
self.assertEqual(
|
||||
sysconfig.get_path('scripts', scheme='venv'),
|
||||
sysconfig.get_path('scripts', scheme='nt_venv')
|
||||
@@ -370,6 +370,10 @@ def test_user_similar(self):
|
||||
if HAS_USER_BASE:
|
||||
user_path = get_path(name, 'posix_user')
|
||||
expected = os.path.normpath(global_path.replace(base, user, 1))
|
||||
+ if os.name == 'nt' and _POSIX_BUILD:
|
||||
+ expected = expected.replace(
|
||||
+ f'python{sysconfig.get_python_version()}',
|
||||
+ f'python{sysconfig.get_python_version()}-{get_platform()}')
|
||||
# bpo-44860: platlib of posix_user doesn't use sys.platlibdir,
|
||||
# whereas posix_prefix does.
|
||||
if name == 'platlib':
|
||||
diff --git a/mingw_ignorefile.txt b/mingw_ignorefile.txt
|
||||
index dc3802e..e692d7f 100644
|
||||
--- a/mingw_ignorefile.txt
|
||||
+++ b/mingw_ignorefile.txt
|
||||
@@ -1,4 +1,4 @@
|
||||
-ctypes.test.test_loading.LoaderTest.test_load_dll_with_flags
|
||||
+test.test_ctypes.test_loading.LoaderTest.test_load_dll_with_flags
|
||||
distutils.tests.test_bdist_dumb.BuildDumbTestCase.test_simple_built
|
||||
distutils.tests.test_cygwinccompiler.CygwinCCompilerTestCase.test_get_versions
|
||||
distutils.tests.test_util.UtilTestCase.test_change_root
|
||||
@@ -29,6 +29,15 @@ test.test_strptime.TimeRETests.test_compile
|
||||
test.test_tools.test_i18n.Test_pygettext.test_POT_Creation_Date
|
||||
test.test_venv.BasicTest.*
|
||||
test.test_venv.EnsurePipTest.*
|
||||
+test.test_sysconfig.TestSysConfig.test_user_similar
|
||||
+test.test_tcl.TclTest.testLoadWithUNC
|
||||
+test.test_wmi
|
||||
# flaky
|
||||
test.test__xxsubinterpreters.*
|
||||
-test.test_asyncio.test_subprocess.SubprocessProactorTests.test_stdin_broken_pipe
|
||||
\ No newline at end of file
|
||||
+test.test_asyncio.test_subprocess.SubprocessProactorTests.test_stdin_broken_pipe
|
||||
+test.test_asynchat.TestAsynchat.test_line_terminator2
|
||||
+test.test_asyncgen.AsyncGenAsyncioTest.test_async_gen_asyncio_gc_aclose_09
|
||||
+test.test_concurrent_futures.ThreadPoolShutdownTest.test_interpreter_shutdown
|
||||
+test.test_asynchat.TestNotConnected.test_disallow_negative_terminator
|
||||
+test.test_logging.SysLogHandlerTest.*
|
||||
+test.test_logging.IPv6SysLogHandlerTest.*
|
||||
@@ -0,0 +1,132 @@
|
||||
From 078fffbb89900c5ab1df3c4a9848515a1732ebce Mon Sep 17 00:00:00 2001
|
||||
From: Christoph Reiter <reiter.christoph@gmail.com>
|
||||
Date: Thu, 22 Sep 2022 17:51:33 +0200
|
||||
Subject: [PATCH 074/N] Don't change os.sep with an empty MSYSTEM env var,
|
||||
not just a missing one
|
||||
|
||||
Up until now this didn't really happen when calling from cygwin
|
||||
because empty env vars were removed before Python would run.
|
||||
|
||||
But https://github.com/msys2/msys2-runtime/pull/101 changed that.
|
||||
|
||||
To avoid breaking users that did something like
|
||||
|
||||
MSYSTEM= python ...
|
||||
|
||||
not only check that MSYSTEM isn't set but also that it isn't empty
|
||||
when deciding if os.sep/os.altsep should be switched.
|
||||
|
||||
Also, guard the msystem env check to execute only on MINGW
|
||||
|
||||
Co-authored-by: Naveen M K <naveen521kk@gmail.com>
|
||||
---
|
||||
Lib/importlib/_bootstrap_external.py | 2 +-
|
||||
Lib/ntpath.py | 2 +-
|
||||
Python/pathconfig.c | 20 +++++++++++---------
|
||||
mingw_smoketests.py | 2 +-
|
||||
4 files changed, 14 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py
|
||||
index 42d987d..92ba611 100644
|
||||
--- a/Lib/importlib/_bootstrap_external.py
|
||||
+++ b/Lib/importlib/_bootstrap_external.py
|
||||
@@ -43,7 +43,7 @@
|
||||
else:
|
||||
path_separators = ['/']
|
||||
|
||||
-if 'MSYSTEM' in _os.environ:
|
||||
+if _os.environ.get('MSYSTEM', ''):
|
||||
path_separators = path_separators[::-1]
|
||||
|
||||
# Assumption made in _path_join()
|
||||
diff --git a/Lib/ntpath.py b/Lib/ntpath.py
|
||||
index 309235b..0eb4aa0 100644
|
||||
--- a/Lib/ntpath.py
|
||||
+++ b/Lib/ntpath.py
|
||||
@@ -21,7 +21,7 @@
|
||||
import genericpath
|
||||
from genericpath import *
|
||||
|
||||
-if sys.platform == "win32" and "MSYSTEM" in os.environ:
|
||||
+if sys.platform == "win32" and os.environ.get("MSYSTEM", ""):
|
||||
sep = '/'
|
||||
altsep = '\\'
|
||||
else:
|
||||
diff --git a/Python/pathconfig.c b/Python/pathconfig.c
|
||||
index 3d684d6..1195a04 100644
|
||||
--- a/Python/pathconfig.c
|
||||
+++ b/Python/pathconfig.c
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
#include "Python.h"
|
||||
#include "marshal.h" // PyMarshal_ReadObjectFromString
|
||||
-#include "osdefs.h" // DELIM
|
||||
+#include "osdefs.h" // DELIM, SEP
|
||||
#include "pycore_initconfig.h"
|
||||
#include "pycore_fileutils.h"
|
||||
#include "pycore_pathconfig.h"
|
||||
@@ -50,7 +50,6 @@ Py_StartsWithW(const wchar_t * str, const wchar_t * prefix)
|
||||
char
|
||||
Py_GetSepA(const char *name)
|
||||
{
|
||||
- char* msystem = (char*)2; /* So that non Windows use / as sep */
|
||||
static char sep = '\0';
|
||||
#ifdef _WIN32
|
||||
/* https://msdn.microsoft.com/en-gb/library/windows/desktop/aa365247%28v=vs.85%29.aspx
|
||||
@@ -65,12 +64,14 @@ Py_GetSepA(const char *name)
|
||||
if (sep != '\0')
|
||||
return sep;
|
||||
#if defined(__MINGW32__)
|
||||
- msystem = Py_GETENV("MSYSTEM");
|
||||
-#endif
|
||||
- if (msystem != NULL)
|
||||
+ char* msystem = getenv("MSYSTEM");
|
||||
+ if (msystem != NULL && strcmp(msystem, "") != 0)
|
||||
sep = '/';
|
||||
else
|
||||
sep = '\\';
|
||||
+#else
|
||||
+ sep = SEP;
|
||||
+#endif
|
||||
return sep;
|
||||
}
|
||||
|
||||
@@ -103,7 +104,6 @@ Py_NormalizeSepsA(char *name)
|
||||
wchar_t
|
||||
Py_GetSepW(const wchar_t *name)
|
||||
{
|
||||
- char* msystem = (char*)2; /* So that non Windows use / as sep */
|
||||
static wchar_t sep = L'\0';
|
||||
#ifdef _WIN32
|
||||
/* https://msdn.microsoft.com/en-gb/library/windows/desktop/aa365247%28v=vs.85%29.aspx
|
||||
@@ -118,12 +118,14 @@ Py_GetSepW(const wchar_t *name)
|
||||
if (sep != L'\0')
|
||||
return sep;
|
||||
#if defined(__MINGW32__)
|
||||
- msystem = Py_GETENV("MSYSTEM");
|
||||
-#endif
|
||||
- if (msystem != NULL)
|
||||
+ char* msystem = getenv("MSYSTEM");
|
||||
+ if (msystem != NULL && strcmp(msystem, "") != 0)
|
||||
sep = L'/';
|
||||
else
|
||||
sep = L'\\';
|
||||
+#else
|
||||
+ sep = SEP;
|
||||
+#endif
|
||||
return sep;
|
||||
}
|
||||
|
||||
diff --git a/mingw_smoketests.py b/mingw_smoketests.py
|
||||
index aa76659..2a8bd16 100644
|
||||
--- a/mingw_smoketests.py
|
||||
+++ b/mingw_smoketests.py
|
||||
@@ -29,7 +29,7 @@
|
||||
import unittest
|
||||
import sysconfig
|
||||
|
||||
-if "MSYSTEM" in os.environ:
|
||||
+if os.environ.get("MSYSTEM", ""):
|
||||
SEP = "/"
|
||||
else:
|
||||
SEP = "\\"
|
||||
@@ -0,0 +1,21 @@
|
||||
From 87662963e70b97cba57a7ccee9a633de2657805c Mon Sep 17 00:00:00 2001
|
||||
From: Naveen M K <naveen521kk@gmail.com>
|
||||
Date: Sun, 18 Jun 2023 13:12:56 +0530
|
||||
Subject: [PATCH 075/N] def VPATH when compiling `Python/sysmodule.c`
|
||||
|
||||
---
|
||||
Makefile.pre.in | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/Makefile.pre.in b/Makefile.pre.in
|
||||
index 4a6e692..7037c3d 100644
|
||||
--- a/Makefile.pre.in
|
||||
+++ b/Makefile.pre.in
|
||||
@@ -1421,6 +1421,7 @@ Python/dynload_win.o: $(srcdir)/Python/dynload_win.c Makefile
|
||||
Python/sysmodule.o: $(srcdir)/Python/sysmodule.c Makefile $(srcdir)/Include/pydtrace.h
|
||||
$(CC) -c $(PY_CORE_CFLAGS) \
|
||||
-DABIFLAGS='"$(ABIFLAGS)"' \
|
||||
+ -DVPATH='"$(VPATH)"' \
|
||||
$(MULTIARCH_CPPFLAGS) \
|
||||
-o $@ $(srcdir)/Python/sysmodule.c
|
||||
|
||||
38
mingw-w64-python3.12/0076-Make-_Py_CheckPython3-extern.patch
Normal file
38
mingw-w64-python3.12/0076-Make-_Py_CheckPython3-extern.patch
Normal file
@@ -0,0 +1,38 @@
|
||||
From d556fd3784168da06aab0bd310c10a10e971cd2b Mon Sep 17 00:00:00 2001
|
||||
From: Naveen M K <naveen521kk@gmail.com>
|
||||
Date: Sun, 18 Jun 2023 13:17:48 +0530
|
||||
Subject: [PATCH 076/N] Make `_Py_CheckPython3` extern
|
||||
|
||||
it's declared in headers but defined as static here, remove it
|
||||
also run `_Py_CheckPython3` only when using MSVC
|
||||
---
|
||||
Python/dynload_win.c | 9 ++++-----
|
||||
1 file changed, 4 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/Python/dynload_win.c b/Python/dynload_win.c
|
||||
index 26d6036..1f90e21 100644
|
||||
--- a/Python/dynload_win.c
|
||||
+++ b/Python/dynload_win.c
|
||||
@@ -171,8 +171,7 @@ static char *GetPythonImport (HINSTANCE hModule)
|
||||
Return whether the DLL was found.
|
||||
*/
|
||||
extern HMODULE PyWin_DLLhModule;
|
||||
-static int
|
||||
-_Py_CheckPython3(void)
|
||||
+int _Py_CheckPython3(void)
|
||||
{
|
||||
static int python3_checked = 0;
|
||||
static HANDLE hPython3;
|
||||
@@ -226,9 +225,9 @@ dl_funcptr _PyImport_FindSharedFuncptrWindows(const char *prefix,
|
||||
dl_funcptr p;
|
||||
char funcname[258], *import_python;
|
||||
|
||||
-#ifdef Py_ENABLE_SHARED
|
||||
- _Py_CheckPython3();
|
||||
-#endif /* Py_ENABLE_SHARED */
|
||||
+#ifdef _MSC_VER
|
||||
+ _Py_CheckPython3();
|
||||
+#endif /* _MSC_VER */
|
||||
|
||||
wchar_t *wpathname = PyUnicode_AsWideCharString(pathname, NULL);
|
||||
if (wpathname == NULL)
|
||||
22
mingw-w64-python3.12/0077-link-with-bcrypt.patch
Normal file
22
mingw-w64-python3.12/0077-link-with-bcrypt.patch
Normal file
@@ -0,0 +1,22 @@
|
||||
From 59989dddda6f207a2689564a63f5b16d3c6dcef5 Mon Sep 17 00:00:00 2001
|
||||
From: Naveen M K <naveen521kk@gmail.com>
|
||||
Date: Sun, 18 Jun 2023 14:20:44 +0530
|
||||
Subject: [PATCH 077/N] link with bcrypt
|
||||
|
||||
---
|
||||
configure.ac | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index a0b2aba..84192b9 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -7180,7 +7180,7 @@ AC_MSG_RESULT([done])
|
||||
# For mingw build need additional library for linking
|
||||
case $host in
|
||||
*-*-mingw*)
|
||||
- LIBS="$LIBS -lversion -lshlwapi -lpathcch"
|
||||
+ LIBS="$LIBS -lversion -lshlwapi -lpathcch -lbcrypt"
|
||||
AC_PROG_AWK
|
||||
if test "$AWK" = "gawk"; then
|
||||
awk_extra_flag="--non-decimal-data"
|
||||
27
mingw-w64-python3.12/0078-correctly-find-native-python.patch
Normal file
27
mingw-w64-python3.12/0078-correctly-find-native-python.patch
Normal file
@@ -0,0 +1,27 @@
|
||||
From 742c6c9041d42767b8ec30e3d76af29f1c76ff8d Mon Sep 17 00:00:00 2001
|
||||
From: Naveen M K <naveen521kk@gmail.com>
|
||||
Date: Sun, 18 Jun 2023 14:29:50 +0530
|
||||
Subject: [PATCH 078/N] correctly find native python
|
||||
|
||||
it's required for regen-modules
|
||||
---
|
||||
configure.ac | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 84192b9..05c4dd5 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -204,9 +204,11 @@ AC_SUBST([FREEZE_MODULE])
|
||||
AC_SUBST([FREEZE_MODULE_DEPS])
|
||||
AC_SUBST([PYTHON_FOR_BUILD_DEPS])
|
||||
|
||||
+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.12 python3.11 python3.10 python3 python],
|
||||
- [python3])
|
||||
+ [python3],
|
||||
+ [$NATIVE_PYTHON_SEARCH_PATH_MINGW])
|
||||
AC_SUBST([PYTHON_FOR_REGEN])
|
||||
|
||||
AC_MSG_CHECKING([Python for regen version])
|
||||
@@ -0,0 +1,22 @@
|
||||
From d161651cab4115d627094dd1bed1b58841f75af4 Mon Sep 17 00:00:00 2001
|
||||
From: Naveen M K <naveen521kk@gmail.com>
|
||||
Date: Sun, 18 Jun 2023 14:30:09 +0530
|
||||
Subject: [PATCH 079/N] Add extra flags for `_bootstrap_python`
|
||||
|
||||
---
|
||||
Makefile.pre.in | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Makefile.pre.in b/Makefile.pre.in
|
||||
index 7037c3d..486076d 100644
|
||||
--- a/Makefile.pre.in
|
||||
+++ b/Makefile.pre.in
|
||||
@@ -1107,7 +1107,7 @@ BOOTSTRAP_HEADERS = \
|
||||
Programs/_bootstrap_python.o: Programs/_bootstrap_python.c $(BOOTSTRAP_HEADERS) $(PYTHON_HEADERS)
|
||||
|
||||
_bootstrap_python: $(LIBRARY_OBJS_OMIT_FROZEN) Programs/_bootstrap_python.o Modules/getpath.o Modules/Setup.local
|
||||
- $(LINKCC) $(PY_LDFLAGS_NOLTO) -o $@ $(LIBRARY_OBJS_OMIT_FROZEN) \
|
||||
+ $(LINKCC) $(PY_LDFLAGS_NOLTO) -o $@ -municode -mwindows $(LIBRARY_OBJS_OMIT_FROZEN) \
|
||||
Programs/_bootstrap_python.o Modules/getpath.o $(LIBS) $(MODLIBS) $(SYSLIBS)
|
||||
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
From 955c80002f562265983ad6011b8afc4c582a9826 Mon Sep 17 00:00:00 2001
|
||||
From: Naveen M K <naveen521kk@gmail.com>
|
||||
Date: Tue, 20 Jun 2023 18:32:58 +0530
|
||||
Subject: [PATCH 080/N] posixmodule: undefine `HAVE_OPENDIR`
|
||||
|
||||
opendir is detected by configure on mingw-w64, and for some reason
|
||||
things don't work as expected. For example, os.listdir always returns
|
||||
the cwd's directory listing instead of the one specified. By
|
||||
un-defining, this, os.listdir will use the one which uses native
|
||||
windows API.
|
||||
---
|
||||
Modules/posixmodule.c | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
|
||||
index 0cff7d6..53ee3b7 100644
|
||||
--- a/Modules/posixmodule.c
|
||||
+++ b/Modules/posixmodule.c
|
||||
@@ -365,6 +365,12 @@ corresponding Unix manual entries for more information on calls.");
|
||||
#elif defined(__MINGW32__) /* GCC for windows hosts */
|
||||
/* getlogin is detected by configure on mingw-w64 */
|
||||
# undef HAVE_GETLOGIN
|
||||
+/* opendir is detected by configure on mingw-w64, and for some reason
|
||||
+things don't work as expected. For example, os.listdir always returns
|
||||
+the cwd's directory listing instead of the one specified. By
|
||||
+un-defining, this, os.listdir will use the one which uses native
|
||||
+windows API. */
|
||||
+# undef HAVE_OPENDIR
|
||||
/*# define HAVE_GETCWD 1 - detected by configure*/
|
||||
# define HAVE_GETPPID 1
|
||||
# define HAVE_GETLOGIN 1
|
||||
341
mingw-w64-python3.12/0081-getpath.py-add-support-for-mingw.patch
Normal file
341
mingw-w64-python3.12/0081-getpath.py-add-support-for-mingw.patch
Normal file
@@ -0,0 +1,341 @@
|
||||
From 4b36c1161c374dbc3081b13b0ddaa5bb8490c48d Mon Sep 17 00:00:00 2001
|
||||
From: Naveen M K <naveen521kk@gmail.com>
|
||||
Date: Tue, 20 Jun 2023 18:43:59 +0530
|
||||
Subject: [PATCH 081/N] getpath.py: add support for mingw
|
||||
|
||||
- always normalize the PREFIX to an absolute path
|
||||
- use `/` when MSYSTEM is defined
|
||||
---
|
||||
Include/pylifecycle.h | 1 +
|
||||
Modules/getpath.c | 9 ++++++++
|
||||
Modules/getpath.py | 48 +++++++++++++++++++++++++++++++------------
|
||||
Python/fileutils.c | 41 +++++++++++++++++++++---------------
|
||||
Python/pathconfig.c | 2 +-
|
||||
5 files changed, 71 insertions(+), 30 deletions(-)
|
||||
|
||||
diff --git a/Include/pylifecycle.h b/Include/pylifecycle.h
|
||||
index 50d8b76..5d29201 100644
|
||||
--- a/Include/pylifecycle.h
|
||||
+++ b/Include/pylifecycle.h
|
||||
@@ -21,6 +21,7 @@ PyAPI_FUNC(int) Py_IsInitialized(void);
|
||||
PyAPI_FUNC(PyThreadState *) Py_NewInterpreter(void);
|
||||
PyAPI_FUNC(void) Py_EndInterpreter(PyThreadState *);
|
||||
|
||||
+PyAPI_FUNC(wchar_t) Py_GetAltSepW(const wchar_t *);
|
||||
PyAPI_FUNC(wchar_t) Py_GetSepW(const wchar_t *);
|
||||
PyAPI_FUNC(char) Py_GetSepA(const char *);
|
||||
|
||||
diff --git a/Modules/getpath.c b/Modules/getpath.c
|
||||
index b9914a0..bd80221 100644
|
||||
--- a/Modules/getpath.c
|
||||
+++ b/Modules/getpath.c
|
||||
@@ -68,6 +68,7 @@ getpath_abspath(PyObject *Py_UNUSED(self), PyObject *args)
|
||||
if (path) {
|
||||
wchar_t *abs;
|
||||
if (_Py_abspath((const wchar_t *)_Py_normpath(path, -1), &abs) == 0 && abs) {
|
||||
+ abs = _Py_normpath(abs, -1);
|
||||
r = PyUnicode_FromWideChar(abs, -1);
|
||||
PyMem_RawFree((void *)abs);
|
||||
} else {
|
||||
@@ -877,6 +878,11 @@ _PyConfig_InitPathConfig(PyConfig *config, int compute_path_config)
|
||||
#else
|
||||
!decode_to_dict(dict, "os_name", "posix") ||
|
||||
#endif
|
||||
+#ifdef __MINGW32__
|
||||
+ !int_to_dict(dict, "is_mingw", 1) ||
|
||||
+#else
|
||||
+ !int_to_dict(dict, "is_mingw", 0) ||
|
||||
+#endif
|
||||
#ifdef WITH_NEXT_FRAMEWORK
|
||||
!int_to_dict(dict, "WITH_NEXT_FRAMEWORK", 1) ||
|
||||
#else
|
||||
@@ -903,6 +909,9 @@ _PyConfig_InitPathConfig(PyConfig *config, int compute_path_config)
|
||||
!funcs_to_dict(dict, config->pathconfig_warnings) ||
|
||||
#ifndef MS_WINDOWS
|
||||
PyDict_SetItemString(dict, "winreg", Py_None) < 0 ||
|
||||
+#endif
|
||||
+#ifdef __MINGW32__
|
||||
+ !env_to_dict(dict, "ENV_MSYSTEM", 0) ||
|
||||
#endif
|
||||
PyDict_SetItemString(dict, "__builtins__", PyEval_GetBuiltins()) < 0
|
||||
) {
|
||||
diff --git a/Modules/getpath.py b/Modules/getpath.py
|
||||
index 9913fcb..6867e98 100644
|
||||
--- a/Modules/getpath.py
|
||||
+++ b/Modules/getpath.py
|
||||
@@ -30,6 +30,7 @@
|
||||
|
||||
# ** Values known at compile time **
|
||||
# os_name -- [in] one of 'nt', 'posix', 'darwin'
|
||||
+# is_mingw -- [in] True if targeting MinGW
|
||||
# PREFIX -- [in] sysconfig.get_config_var(...)
|
||||
# EXEC_PREFIX -- [in] sysconfig.get_config_var(...)
|
||||
# PYTHONPATH -- [in] sysconfig.get_config_var(...)
|
||||
@@ -51,6 +52,7 @@
|
||||
# ENV_PYTHONHOME -- [in] getenv(...)
|
||||
# ENV_PYTHONEXECUTABLE -- [in] getenv(...)
|
||||
# ENV___PYVENV_LAUNCHER__ -- [in] getenv(...)
|
||||
+# ENV_MSYSTEM -- [in] getenv(...)
|
||||
|
||||
# ** Values calculated at runtime **
|
||||
# config -- [in/out] dict of the PyConfig structure
|
||||
@@ -185,8 +187,27 @@
|
||||
ZIP_LANDMARK = f'{platlibdir}/python{VERSION_MAJOR}{VERSION_MINOR}.zip'
|
||||
DELIM = ':'
|
||||
SEP = '/'
|
||||
+ ALTSEP = None
|
||||
|
||||
-elif os_name == 'nt':
|
||||
+elif os_name == 'nt' and is_mingw:
|
||||
+ BUILDDIR_TXT = 'pybuilddir.txt'
|
||||
+ BUILD_LANDMARK = 'Modules/Setup.local'
|
||||
+ DEFAULT_PROGRAM_NAME = f'python{VERSION_MAJOR}'
|
||||
+ STDLIB_SUBDIR = f'{platlibdir}/python{VERSION_MAJOR}.{VERSION_MINOR}'
|
||||
+ STDLIB_LANDMARKS = [f'{STDLIB_SUBDIR}/os.py', f'{STDLIB_SUBDIR}/os.pyc']
|
||||
+ PLATSTDLIB_LANDMARK = f'{platlibdir}/python{VERSION_MAJOR}.{VERSION_MINOR}/lib-dynload'
|
||||
+ BUILDSTDLIB_LANDMARKS = ['Lib/os.py']
|
||||
+ VENV_LANDMARK = 'pyvenv.cfg'
|
||||
+ ZIP_LANDMARK = f'{platlibdir}/python{VERSION_MAJOR}{VERSION_MINOR}.zip'
|
||||
+ DELIM = ';'
|
||||
+ if ENV_MSYSTEM:
|
||||
+ SEP = '/'
|
||||
+ ALTSEP = '\\'
|
||||
+ else:
|
||||
+ SEP = '\\'
|
||||
+ ALTSEP = '/'
|
||||
+
|
||||
+elif os_name == 'nt': # MSVC
|
||||
BUILDDIR_TXT = 'pybuilddir.txt'
|
||||
BUILD_LANDMARK = f'{VPATH}\\Modules\\Setup.local'
|
||||
DEFAULT_PROGRAM_NAME = f'python'
|
||||
@@ -199,6 +220,7 @@
|
||||
WINREG_KEY = f'SOFTWARE\\Python\\PythonCore\\{PYWINVER}\\PythonPath'
|
||||
DELIM = ';'
|
||||
SEP = '\\'
|
||||
+ ALTSEP = '/'
|
||||
|
||||
|
||||
# ******************************************************************************
|
||||
@@ -263,10 +285,10 @@ def search_up(prefix, *landmarks, test=isfile):
|
||||
if not executable:
|
||||
executable = real_executable
|
||||
|
||||
-if not executable and SEP in program_name:
|
||||
+if not executable and (SEP in program_name or
|
||||
+ (ALTSEP and ALTSEP in program_name)):
|
||||
# Resolve partial path program_name against current directory
|
||||
executable = abspath(program_name)
|
||||
-
|
||||
if not executable:
|
||||
# All platforms default to real_executable if known at this
|
||||
# stage. POSIX does not set this value.
|
||||
@@ -497,15 +519,15 @@ def search_up(prefix, *landmarks, test=isfile):
|
||||
except (FileNotFoundError, PermissionError):
|
||||
if isfile(joinpath(real_executable_dir, BUILD_LANDMARK)):
|
||||
build_prefix = joinpath(real_executable_dir, VPATH)
|
||||
- if os_name == 'nt':
|
||||
+ if os_name == 'nt' and not is_mingw:
|
||||
# QUIRK: Windows builds need platstdlib_dir to be the executable
|
||||
# dir. Normally the builddir marker handles this, but in this
|
||||
# case we need to correct manually.
|
||||
platstdlib_dir = real_executable_dir
|
||||
|
||||
if build_prefix:
|
||||
- if os_name == 'nt':
|
||||
- # QUIRK: No searching for more landmarks on Windows
|
||||
+ if os_name == 'nt' and not is_mingw:
|
||||
+ # QUIRK: No searching for more landmarks on MSVC
|
||||
build_stdlib_prefix = build_prefix
|
||||
else:
|
||||
build_stdlib_prefix = search_up(build_prefix, *BUILDSTDLIB_LANDMARKS)
|
||||
@@ -597,7 +619,7 @@ def search_up(prefix, *landmarks, test=isfile):
|
||||
|
||||
# Detect exec_prefix by searching from executable for the platstdlib_dir
|
||||
if PLATSTDLIB_LANDMARK and not exec_prefix:
|
||||
- if os_name == 'nt':
|
||||
+ if os_name == 'nt' and (not is_mingw):
|
||||
# QUIRK: Windows always assumed these were the same
|
||||
# gh-100320: Our PYDs are assumed to be relative to the Lib directory
|
||||
# (that is, prefix) rather than the executable (that is, executable_dir)
|
||||
@@ -607,7 +629,7 @@ def search_up(prefix, *landmarks, test=isfile):
|
||||
if not exec_prefix and EXEC_PREFIX:
|
||||
exec_prefix = EXEC_PREFIX
|
||||
if not exec_prefix or not isdir(joinpath(exec_prefix, PLATSTDLIB_LANDMARK)):
|
||||
- if os_name == 'nt':
|
||||
+ if os_name == 'nt' and (not is_mingw):
|
||||
# QUIRK: If DLLs is missing on Windows, don't warn, just assume
|
||||
# that they're in exec_prefix
|
||||
if not platstdlib_dir:
|
||||
@@ -660,7 +682,7 @@ def search_up(prefix, *landmarks, test=isfile):
|
||||
pythonpath.append(abspath(p))
|
||||
|
||||
# Then add the default zip file
|
||||
- if os_name == 'nt':
|
||||
+ if os_name == 'nt' and (not is_mingw):
|
||||
# QUIRK: Windows uses the library directory rather than the prefix
|
||||
if library:
|
||||
library_dir = dirname(library)
|
||||
@@ -673,7 +695,7 @@ def search_up(prefix, *landmarks, test=isfile):
|
||||
else:
|
||||
pythonpath.append(joinpath(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:
|
||||
# QUIRK: Windows also lists paths in the registry. Paths are stored
|
||||
# as the default value of each subkey of
|
||||
# {HKCU,HKLM}\Software\Python\PythonCore\{winver}\PythonPath
|
||||
@@ -714,7 +736,7 @@ def search_up(prefix, *landmarks, test=isfile):
|
||||
if not platstdlib_dir and exec_prefix:
|
||||
platstdlib_dir = joinpath(exec_prefix, PLATSTDLIB_LANDMARK)
|
||||
|
||||
- if os_name == 'nt':
|
||||
+ if os_name == 'nt' and (not is_mingw):
|
||||
# QUIRK: Windows generates paths differently
|
||||
if platstdlib_dir:
|
||||
pythonpath.append(platstdlib_dir)
|
||||
@@ -742,8 +764,8 @@ 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.
|
||||
-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
|
||||
|
||||
|
||||
diff --git a/Python/fileutils.c b/Python/fileutils.c
|
||||
index 6d3b04f..50c78f1 100644
|
||||
--- a/Python/fileutils.c
|
||||
+++ b/Python/fileutils.c
|
||||
@@ -2189,7 +2189,11 @@ _Py_abspath(const wchar_t *path, wchar_t **abspath_p)
|
||||
}
|
||||
|
||||
#ifdef MS_WINDOWS
|
||||
- return _PyOS_getfullpathname(path, abspath_p);
|
||||
+ if (_PyOS_getfullpathname(path, abspath_p) < 0){
|
||||
+ return -1;
|
||||
+ }
|
||||
+ *abspath_p = _Py_normpath(*abspath_p, -1);
|
||||
+ return 0;
|
||||
#else
|
||||
wchar_t cwd[MAXPATHLEN + 1];
|
||||
cwd[Py_ARRAY_LENGTH(cwd) - 1] = 0;
|
||||
@@ -2401,11 +2405,16 @@ _Py_normpath_and_size(wchar_t *path, Py_ssize_t size, Py_ssize_t *normsize)
|
||||
wchar_t *minP2 = path; // the beginning of the destination range
|
||||
wchar_t lastC = L'\0'; // the last ljusted character, p2[-1] in most cases
|
||||
|
||||
+ const wchar_t sep = Py_GetSepW(NULL);
|
||||
+#ifdef ALTSEP
|
||||
+ const wchar_t altsep = Py_GetAltSepW(NULL);
|
||||
+#endif
|
||||
+
|
||||
#define IS_END(x) (pEnd ? (x) == pEnd : !*(x))
|
||||
#ifdef ALTSEP
|
||||
-#define IS_SEP(x) (*(x) == SEP || *(x) == ALTSEP)
|
||||
+#define IS_SEP(x) (*(x) == sep || *(x) == altsep)
|
||||
#else
|
||||
-#define IS_SEP(x) (*(x) == SEP)
|
||||
+#define IS_SEP(x) (*(x) == sep)
|
||||
#endif
|
||||
#define SEP_OR_END(x) (IS_SEP(x) || IS_END(x))
|
||||
|
||||
@@ -2416,7 +2425,7 @@ _Py_normpath_and_size(wchar_t *path, Py_ssize_t size, Py_ssize_t *normsize)
|
||||
path++;
|
||||
}
|
||||
p1 = p2 = minP2 = path;
|
||||
- lastC = SEP;
|
||||
+ lastC = sep;
|
||||
}
|
||||
#ifdef MS_WINDOWS
|
||||
// Skip past drive segment and update minP2
|
||||
@@ -2430,13 +2439,13 @@ _Py_normpath_and_size(wchar_t *path, Py_ssize_t size, Py_ssize_t *normsize)
|
||||
// and network paths, including the first segment.
|
||||
else if (IS_SEP(&p1[0]) && IS_SEP(&p1[1])) {
|
||||
int sepCount = 2;
|
||||
- *p2++ = SEP;
|
||||
- *p2++ = SEP;
|
||||
+ *p2++ = sep;
|
||||
+ *p2++ = sep;
|
||||
p1 += 2;
|
||||
for (; !IS_END(p1) && sepCount; ++p1) {
|
||||
if (IS_SEP(p1)) {
|
||||
--sepCount;
|
||||
- *p2++ = lastC = SEP;
|
||||
+ *p2++ = lastC = sep;
|
||||
} else {
|
||||
*p2++ = lastC = *p1;
|
||||
}
|
||||
@@ -2449,7 +2458,7 @@ _Py_normpath_and_size(wchar_t *path, Py_ssize_t size, Py_ssize_t *normsize)
|
||||
*p2++ = *p1++;
|
||||
*p2++ = *p1++;
|
||||
minP2 = p2 - 1; // Absolute path has SEP at minP2
|
||||
- lastC = SEP;
|
||||
+ lastC = sep;
|
||||
}
|
||||
#endif /* MS_WINDOWS */
|
||||
|
||||
@@ -2457,18 +2466,18 @@ _Py_normpath_and_size(wchar_t *path, Py_ssize_t size, Py_ssize_t *normsize)
|
||||
for (; !IS_END(p1); ++p1) {
|
||||
wchar_t c = *p1;
|
||||
#ifdef ALTSEP
|
||||
- if (c == ALTSEP) {
|
||||
- c = SEP;
|
||||
+ if (c == altsep) {
|
||||
+ c = sep;
|
||||
}
|
||||
#endif
|
||||
- if (lastC == SEP) {
|
||||
+ if (lastC == sep) {
|
||||
if (c == L'.') {
|
||||
int sep_at_1 = SEP_OR_END(&p1[1]);
|
||||
int sep_at_2 = !sep_at_1 && SEP_OR_END(&p1[2]);
|
||||
if (sep_at_2 && p1[1] == L'.') {
|
||||
wchar_t *p3 = p2;
|
||||
- while (p3 != minP2 && *--p3 == SEP) { }
|
||||
- while (p3 != minP2 && *(p3 - 1) != SEP) { --p3; }
|
||||
+ while (p3 != minP2 && *--p3 == sep) { }
|
||||
+ while (p3 != minP2 && *(p3 - 1) != sep) { --p3; }
|
||||
if (p2 == minP2
|
||||
|| (p3[0] == L'.' && p3[1] == L'.' && IS_SEP(&p3[2])))
|
||||
{
|
||||
@@ -2477,7 +2486,7 @@ _Py_normpath_and_size(wchar_t *path, Py_ssize_t size, Py_ssize_t *normsize)
|
||||
*p2++ = L'.';
|
||||
*p2++ = L'.';
|
||||
lastC = L'.';
|
||||
- } else if (p3[0] == SEP) {
|
||||
+ } else if (p3[0] == sep) {
|
||||
// Absolute path, so absorb segment
|
||||
p2 = p3 + 1;
|
||||
} else {
|
||||
@@ -2488,7 +2497,7 @@ _Py_normpath_and_size(wchar_t *path, Py_ssize_t size, Py_ssize_t *normsize)
|
||||
} else {
|
||||
*p2++ = lastC = c;
|
||||
}
|
||||
- } else if (c == SEP) {
|
||||
+ } else if (c == sep) {
|
||||
} else {
|
||||
*p2++ = lastC = c;
|
||||
}
|
||||
@@ -2498,7 +2507,7 @@ _Py_normpath_and_size(wchar_t *path, Py_ssize_t size, Py_ssize_t *normsize)
|
||||
}
|
||||
*p2 = L'\0';
|
||||
if (p2 != minP2) {
|
||||
- while (--p2 != minP2 && *p2 == SEP) {
|
||||
+ while (--p2 != minP2 && *p2 == sep) {
|
||||
*p2 = L'\0';
|
||||
}
|
||||
} else {
|
||||
diff --git a/Python/pathconfig.c b/Python/pathconfig.c
|
||||
index 1195a04..08a4a37 100644
|
||||
--- a/Python/pathconfig.c
|
||||
+++ b/Python/pathconfig.c
|
||||
@@ -129,7 +129,7 @@ Py_GetSepW(const wchar_t *name)
|
||||
return sep;
|
||||
}
|
||||
|
||||
-static wchar_t
|
||||
+wchar_t
|
||||
Py_GetAltSepW(const wchar_t *name)
|
||||
{
|
||||
char sep = Py_GetSepW(name);
|
||||
@@ -0,0 +1,29 @@
|
||||
From cbaff611ec2c073f6f963aad3f7862f0158b1037 Mon Sep 17 00:00:00 2001
|
||||
From: Naveen M K <naveen521kk@gmail.com>
|
||||
Date: Tue, 20 Jun 2023 20:17:23 +0530
|
||||
Subject: [PATCH 082/N] Don't build _posixsubprocess on Windows.
|
||||
|
||||
---
|
||||
configure.ac | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 05c4dd5..f8043cd 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -7815,7 +7815,6 @@ 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])
|
||||
@@ -7868,6 +7867,7 @@ PY_STDLIB_MOD([_scproxy],
|
||||
PY_STDLIB_MOD([spwd], [], [test "$ac_cv_func_getspent" = yes -o "$ac_cv_func_getspnam" = yes])
|
||||
PY_STDLIB_MOD([syslog], [], [test "$ac_cv_header_syslog_h" = yes])
|
||||
PY_STDLIB_MOD([termios], [], [test "$ac_cv_header_termios_h" = yes])
|
||||
+PY_STDLIB_MOD([_posixsubprocess], [], [test "$MACHDEP" != "win32"])
|
||||
|
||||
dnl _elementtree loads libexpat via CAPI hook in pyexpat
|
||||
PY_STDLIB_MOD([pyexpat],
|
||||
22
mingw-w64-python3.12/0083-_ssl-link-with-ws2_32.patch
Normal file
22
mingw-w64-python3.12/0083-_ssl-link-with-ws2_32.patch
Normal file
@@ -0,0 +1,22 @@
|
||||
From 62d0b819f5cf6a12c325cf56ef61617cfbf2719c Mon Sep 17 00:00:00 2001
|
||||
From: Naveen M K <naveen521kk@gmail.com>
|
||||
Date: Tue, 20 Jun 2023 20:35:27 +0530
|
||||
Subject: [PATCH 083/N] `_ssl`: link with `ws2_32`
|
||||
|
||||
---
|
||||
configure.ac | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index f8043cd..e76c845 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -7949,7 +7949,7 @@ PY_STDLIB_MOD([_lzma], [], [test "$have_liblzma" = yes],
|
||||
|
||||
dnl OpenSSL bindings
|
||||
PY_STDLIB_MOD([_ssl], [], [test "$ac_cv_working_openssl_ssl" = yes],
|
||||
- [$OPENSSL_INCLUDES], [$OPENSSL_LDFLAGS $OPENSSL_LDFLAGS_RPATH $OPENSSL_LIBS])
|
||||
+ [$OPENSSL_INCLUDES], [$OPENSSL_LDFLAGS $OPENSSL_LDFLAGS_RPATH $OPENSSL_LIBS -lws2_32])
|
||||
PY_STDLIB_MOD([_hashlib], [], [test "$ac_cv_working_openssl_hashlib" = yes],
|
||||
[$OPENSSL_INCLUDES], [$OPENSSL_LDFLAGS $OPENSSL_LDFLAGS_RPATH $LIBCRYPTO_LIBS])
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
From 062c8ba1084f97d249a68ce602c25d16b8a94dac Mon Sep 17 00:00:00 2001
|
||||
From: Naveen M K <naveen521kk@gmail.com>
|
||||
Date: Tue, 20 Jun 2023 23:00:43 +0530
|
||||
Subject: [PATCH 084/N] Always normalize path in abspath
|
||||
|
||||
---
|
||||
Lib/ntpath.py | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Lib/ntpath.py b/Lib/ntpath.py
|
||||
index 0eb4aa0..6b9074f 100644
|
||||
--- a/Lib/ntpath.py
|
||||
+++ b/Lib/ntpath.py
|
||||
@@ -608,7 +608,7 @@ def _abspath_fallback(path):
|
||||
def abspath(path):
|
||||
"""Return the absolute version of a path."""
|
||||
try:
|
||||
- return _getfullpathname(normpath(path))
|
||||
+ return normpath(_getfullpathname(normpath(path)))
|
||||
except (OSError, ValueError):
|
||||
return _abspath_fallback(path)
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
From 4be4188154fe4f9f7ee01111efb4b7208d5ff4fb Mon Sep 17 00:00:00 2001
|
||||
From: Naveen M K <naveen521kk@gmail.com>
|
||||
Date: Wed, 21 Jun 2023 15:42:39 +0530
|
||||
Subject: [PATCH 085/N] Include `winsock.h` when checking for netdb function
|
||||
|
||||
also move `gethostname` to that check
|
||||
---
|
||||
configure.ac | 11 +++++++++--
|
||||
1 file changed, 9 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index e76c845..34e58fa 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -5155,7 +5155,7 @@ AC_CHECK_FUNCS([ \
|
||||
faccessat fchmod fchmodat fchown fchownat fdopendir fdwalk fexecve \
|
||||
fork fork1 fpathconf fstatat ftime ftruncate futimens futimes futimesat \
|
||||
gai_strerror getegid getentropy geteuid getgid getgrgid getgrgid_r \
|
||||
- getgrnam_r getgrouplist getgroups gethostname getitimer getloadavg getlogin \
|
||||
+ getgrnam_r getgrouplist getgroups getitimer getloadavg getlogin \
|
||||
getpeername getpgid getpid getppid getpriority _getpty \
|
||||
getpwent getpwnam_r getpwuid getpwuid_r getresgid getresuid getrusage getsid getspent \
|
||||
getspnam getuid getwd if_nameindex initgroups kill killpg lchown linkat \
|
||||
@@ -5382,7 +5382,13 @@ PKG_CHECK_MODULES([LIBLZMA], [liblzma], [have_liblzma=yes], [
|
||||
])
|
||||
|
||||
dnl PY_CHECK_NETDB_FUNC(FUNCTION)
|
||||
-AC_DEFUN([PY_CHECK_NETDB_FUNC], [PY_CHECK_FUNC([$1], [@%:@include <netdb.h>])])
|
||||
+AC_DEFUN([PY_CHECK_NETDB_FUNC], [PY_CHECK_FUNC([$1], [
|
||||
+#ifdef _WIN32
|
||||
+ #include <winsock.h>
|
||||
+#else
|
||||
+ #include <netdb.h>
|
||||
+#endif
|
||||
+])])
|
||||
|
||||
PY_CHECK_NETDB_FUNC([hstrerror])
|
||||
dnl not available in WASI yet
|
||||
@@ -5391,6 +5397,7 @@ PY_CHECK_NETDB_FUNC([getservbyport])
|
||||
PY_CHECK_NETDB_FUNC([gethostbyname])
|
||||
PY_CHECK_NETDB_FUNC([gethostbyaddr])
|
||||
PY_CHECK_NETDB_FUNC([getprotobyname])
|
||||
+PY_CHECK_NETDB_FUNC([gethostname])
|
||||
|
||||
dnl PY_CHECK_SOCKET_FUNC(FUNCTION)
|
||||
AC_DEFUN([PY_CHECK_SOCKET_FUNC], [PY_CHECK_FUNC([$1], [
|
||||
@@ -0,0 +1,24 @@
|
||||
From 31037b3ba9a98e9ed450bd181ad304d1f870c6a2 Mon Sep 17 00:00:00 2001
|
||||
From: Naveen M K <naveen521kk@gmail.com>
|
||||
Date: Fri, 23 Jun 2023 20:13:23 +0530
|
||||
Subject: [PATCH 086/N] include `_multiprocessing/semaphore.c` on win32
|
||||
|
||||
while building `_multiprocessing` extension
|
||||
also, always build that module on win32
|
||||
---
|
||||
configure.ac | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 34e58fa..1e4fc2c 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -7833,7 +7833,7 @@ PY_STDLIB_MOD_SIMPLE([_zoneinfo])
|
||||
|
||||
dnl multiprocessing modules
|
||||
PY_STDLIB_MOD([_multiprocessing],
|
||||
- [], [test "$ac_cv_func_sem_unlink" = "yes"],
|
||||
+ [], [test "$ac_cv_func_sem_unlink" = "yes" -o "$MACHDEP" = "win32"],
|
||||
[-I\$(srcdir)/Modules/_multiprocessing])
|
||||
PY_STDLIB_MOD([_posixshmem],
|
||||
[], [test "$have_posix_shmem" = "yes"],
|
||||
@@ -0,0 +1,24 @@
|
||||
From 8b688d3c23389f7f86097f8a0222ae0a13d17ded Mon Sep 17 00:00:00 2001
|
||||
From: Naveen M K <naveen521kk@gmail.com>
|
||||
Date: Fri, 23 Jun 2023 20:15:38 +0530
|
||||
Subject: [PATCH 087/N] configure: build `mmap` module on win32
|
||||
|
||||
---
|
||||
configure.ac | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 1e4fc2c..cba1434 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -7853,7 +7853,9 @@ PY_STDLIB_MOD([fcntl],
|
||||
[], [test "$ac_cv_header_sys_ioctl_h" = "yes" -a "$ac_cv_header_fcntl_h" = "yes"],
|
||||
[], [$FCNTL_LIBS])
|
||||
PY_STDLIB_MOD([mmap],
|
||||
- [], [test "$ac_cv_header_sys_mman_h" = "yes" -a "$ac_cv_header_sys_stat_h" = "yes"])
|
||||
+ [], m4_flatten([test "$ac_cv_header_sys_mman_h" = "yes"
|
||||
+ -a "$ac_cv_header_sys_stat_h" = "yes"
|
||||
+ -o "$MACHDEP" = "win32"]))
|
||||
PY_STDLIB_MOD([_socket],
|
||||
[], m4_flatten([test "$ac_cv_header_sys_socket_h" = "yes"
|
||||
-a "$ac_cv_header_sys_types_h" = "yes"
|
||||
52
mingw-w64-python3.12/0088-venv-creation-fixes.patch
Normal file
52
mingw-w64-python3.12/0088-venv-creation-fixes.patch
Normal file
@@ -0,0 +1,52 @@
|
||||
From 29cd24b1d69cbc5ef8047ff92cbafb7bde0c9352 Mon Sep 17 00:00:00 2001
|
||||
From: Naveen M K <naveen521kk@gmail.com>
|
||||
Date: Fri, 23 Jun 2023 20:49:15 +0530
|
||||
Subject: [PATCH 088/N] venv creation fixes
|
||||
|
||||
---
|
||||
Lib/venv/__init__.py | 11 +++++++++--
|
||||
1 file changed, 9 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/Lib/venv/__init__.py b/Lib/venv/__init__.py
|
||||
index 2173c9b..22e8adf 100644
|
||||
--- a/Lib/venv/__init__.py
|
||||
+++ b/Lib/venv/__init__.py
|
||||
@@ -11,7 +11,7 @@
|
||||
import sys
|
||||
import sysconfig
|
||||
import types
|
||||
-
|
||||
+from sysconfig import _POSIX_BUILD
|
||||
|
||||
CORE_VENV_DEPS = ('pip',)
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -302,7 +302,7 @@ def setup_python(self, context):
|
||||
if not os.path.islink(path):
|
||||
os.chmod(path, 0o755)
|
||||
else:
|
||||
- if self.symlinks:
|
||||
+ if self.symlinks and not _POSIX_BUILD:
|
||||
# For symlinking, we need a complete copy of the root directory
|
||||
# If symlinks fail, you'll get unnecessary copies of files, but
|
||||
# we assume that if you've opted into symlinks on Windows then
|
||||
@@ -326,6 +326,12 @@ def setup_python(self, context):
|
||||
if os.path.lexists(src):
|
||||
copier(src, os.path.join(binpath, suffix))
|
||||
|
||||
+ if _POSIX_BUILD:
|
||||
+ # copy from python/pythonw so the venvlauncher magic in symlink_or_copy triggers
|
||||
+ copier(os.path.join(dirname, 'python.exe'), os.path.join(binpath, 'python3.exe'))
|
||||
+ copier(os.path.join(dirname, 'python.exe'), os.path.join(binpath, 'python%d.%d.exe' % sys.version_info[:2]))
|
||||
+ copier(os.path.join(dirname, 'pythonw.exe'), os.path.join(binpath, 'python3w.exe'))
|
||||
+
|
||||
if sysconfig.is_python_build():
|
||||
# copy init.tcl
|
||||
for root, dirs, files in os.walk(context.python_dir):
|
||||
@@ -350,6 +356,7 @@ def _call_new_python(self, context, *py_args, **kwargs):
|
||||
env['VIRTUAL_ENV'] = context.env_dir
|
||||
env.pop('PYTHONHOME', None)
|
||||
env.pop('PYTHONPATH', None)
|
||||
+ env.pop("MSYSTEM", None)
|
||||
kwargs['cwd'] = context.env_dir
|
||||
kwargs['executable'] = context.env_exec_cmd
|
||||
subprocess.check_output(args, **kwargs)
|
||||
@@ -0,0 +1,31 @@
|
||||
From 4b83207f4c821f1da5ec939edf4e28bb8c609774 Mon Sep 17 00:00:00 2001
|
||||
From: Naveen M K <naveen521kk@gmail.com>
|
||||
Date: Fri, 23 Jun 2023 23:34:01 +0530
|
||||
Subject: [PATCH 089/N] move the `shutdown` function where `winsock.h` is
|
||||
included
|
||||
|
||||
---
|
||||
configure.ac | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index cba1434..e407e1d 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -5168,7 +5168,7 @@ AC_CHECK_FUNCS([ \
|
||||
sched_setparam sched_setscheduler sem_clockwait sem_getvalue sem_open \
|
||||
sem_timedwait sem_unlink sendfile setegid seteuid setgid sethostname \
|
||||
setitimer setlocale setpgid setpgrp setpriority setregid setresgid \
|
||||
- setresuid setreuid setsid setuid setvbuf shutdown sigaction sigaltstack \
|
||||
+ setresuid setreuid setsid setuid setvbuf sigaction sigaltstack \
|
||||
sigfillset siginterrupt sigpending sigrelse sigtimedwait sigwait \
|
||||
sigwaitinfo snprintf splice strftime strlcpy strsignal symlinkat sync \
|
||||
sysconf system tcgetpgrp tcsetpgrp tempnam timegm times tmpfile \
|
||||
@@ -5398,6 +5398,7 @@ PY_CHECK_NETDB_FUNC([gethostbyname])
|
||||
PY_CHECK_NETDB_FUNC([gethostbyaddr])
|
||||
PY_CHECK_NETDB_FUNC([getprotobyname])
|
||||
PY_CHECK_NETDB_FUNC([gethostname])
|
||||
+PY_CHECK_NETDB_FUNC([shutdown])
|
||||
|
||||
dnl PY_CHECK_SOCKET_FUNC(FUNCTION)
|
||||
AC_DEFUN([PY_CHECK_SOCKET_FUNC], [PY_CHECK_FUNC([$1], [
|
||||
@@ -0,0 +1,32 @@
|
||||
From 7e1ed60a3558f74c3d27e1fb65214bf74803456d Mon Sep 17 00:00:00 2001
|
||||
From: Christoph Reiter <reiter.christoph@gmail.com>
|
||||
Date: Fri, 23 Jun 2023 21:47:32 +0200
|
||||
Subject: [PATCH 090/N] configure.ac: set BUILDEXEEXT and EXEEXT
|
||||
|
||||
---
|
||||
configure.ac | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index e407e1d..3337b12 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -1409,6 +1409,7 @@ AC_ARG_WITH([suffix],
|
||||
[Emscripten/browser*], [EXEEXT=.js],
|
||||
[Emscripten/node*], [EXEEXT=.js],
|
||||
[WASI/*], [EXEEXT=.wasm],
|
||||
+ [MINGW*], [EXEEXT=.exe],
|
||||
[EXEEXT=]
|
||||
)
|
||||
])
|
||||
@@ -1432,6 +1433,10 @@ else
|
||||
fi
|
||||
rmdir CaseSensitiveTestDir
|
||||
|
||||
+AS_CASE([$ac_sys_system],
|
||||
+ [MINGW], [BUILDEXEEXT=".exe"]
|
||||
+)
|
||||
+
|
||||
case $ac_sys_system in
|
||||
hp*|HP*)
|
||||
case $CC in
|
||||
@@ -0,0 +1,53 @@
|
||||
From 7219ae643fe9e2bd67667c45201baeb1fee88af5 Mon Sep 17 00:00:00 2001
|
||||
From: Christoph Reiter <reiter.christoph@gmail.com>
|
||||
Date: Fri, 23 Jun 2023 23:42:39 +0200
|
||||
Subject: [PATCH 091/N] configure.ac: fix building some test modules
|
||||
|
||||
they are guarded by dlopen being present, but if module loading is enabled
|
||||
is more correct.
|
||||
---
|
||||
configure.ac | 13 ++++++++-----
|
||||
1 file changed, 8 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 3337b12..c1875f8 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -5124,8 +5124,11 @@ fi
|
||||
AC_MSG_RESULT([$DYNLOADFILE])
|
||||
if test "$DYNLOADFILE" != "dynload_stub.o"
|
||||
then
|
||||
+ have_dynamic_loading=yes
|
||||
AC_DEFINE([HAVE_DYNAMIC_LOADING], [1],
|
||||
[Defined when any dynamic module loading is enabled.])
|
||||
+else
|
||||
+ have_dynamic_loading=no
|
||||
fi
|
||||
|
||||
# MACHDEP_OBJS can be set to platform-specific object files needed by Python
|
||||
@@ -7983,20 +7986,20 @@ PY_STDLIB_MOD([_testcapi], [test "$TEST_MODULES" = yes])
|
||||
PY_STDLIB_MOD([_testclinic], [test "$TEST_MODULES" = yes])
|
||||
PY_STDLIB_MOD([_testinternalcapi], [test "$TEST_MODULES" = yes], [], [-DPY3_DLLNAME="\"$DLLLIBRARY\""], [])
|
||||
PY_STDLIB_MOD([_testbuffer], [test "$TEST_MODULES" = yes])
|
||||
-PY_STDLIB_MOD([_testimportmultiple], [test "$TEST_MODULES" = yes], [test "$ac_cv_func_dlopen" = yes])
|
||||
-PY_STDLIB_MOD([_testmultiphase], [test "$TEST_MODULES" = yes], [test "$ac_cv_func_dlopen" = 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([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])
|
||||
|
||||
dnl Limited API template modules.
|
||||
dnl The limited C API is not compatible with the Py_TRACE_REFS macro.
|
||||
dnl Emscripten does not support shared libraries yet.
|
||||
-PY_STDLIB_MOD([xxlimited], [test "$with_trace_refs" = "no"], [test "$ac_cv_func_dlopen" = yes])
|
||||
-PY_STDLIB_MOD([xxlimited_35], [test "$with_trace_refs" = "no"], [test "$ac_cv_func_dlopen" = yes])
|
||||
+PY_STDLIB_MOD([xxlimited], [test "$with_trace_refs" = "no"], [test "$have_dynamic_loading" = yes])
|
||||
+PY_STDLIB_MOD([xxlimited_35], [test "$with_trace_refs" = "no"], [test "$have_dynamic_loading" = yes])
|
||||
|
||||
# substitute multiline block, must come after last PY_STDLIB_MOD()
|
||||
AC_SUBST([MODULE_BLOCK])
|
||||
@@ -0,0 +1,53 @@
|
||||
From 4492bf83d5e82dc5983fa379badbe60e5de9fd1f Mon Sep 17 00:00:00 2001
|
||||
From: Naveen M K <naveen521kk@gmail.com>
|
||||
Date: Sun, 25 Jun 2023 17:20:52 +0530
|
||||
Subject: [PATCH 092/N] Don't convert `sysconfig.get_config_var('VPATH')` to
|
||||
an absolute path
|
||||
|
||||
this is required for venv to work properly
|
||||
---
|
||||
Makefile.pre.in | 1 -
|
||||
configure.ac | 10 +---------
|
||||
2 files changed, 1 insertion(+), 10 deletions(-)
|
||||
|
||||
diff --git a/Makefile.pre.in b/Makefile.pre.in
|
||||
index 486076d..03c6087 100644
|
||||
--- a/Makefile.pre.in
|
||||
+++ b/Makefile.pre.in
|
||||
@@ -146,7 +146,6 @@ datarootdir= @datarootdir@
|
||||
|
||||
# Locations needed for semi-native fixup of sysconfig.
|
||||
srcdir_b2h= @srcdir_b2h@
|
||||
-VPATH_b2h= @VPATH_b2h@
|
||||
abs_srcdir_b2h= @abs_srcdir_b2h@
|
||||
abs_builddir_b2h= @abs_builddir_b2h@
|
||||
prefix_b2h= @prefix_b2h@
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index c1875f8..5eff281 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -763,12 +763,8 @@ fi
|
||||
# without setting up the same env and also that the build of Python
|
||||
# itself will fail as the paths are not correct for the host tools.
|
||||
#
|
||||
-# Also, getpath.c uses GetModuleFileNameW (replacing \ with /) and
|
||||
-# compares that with the define VPATH (passed in via command-line)
|
||||
-# to determine whether it's the build- or the installed-Python.
|
||||
-#
|
||||
# To work around these issues a set of _b2h variables are created:
|
||||
-# VPATH_b2h, prefix_b2h, srcdir_b2h, abs_srcdir_b2h
|
||||
+# prefix_b2h, srcdir_b2h, abs_srcdir_b2h
|
||||
# and abs_builddir_b2h
|
||||
# .. where b2h stands for build to host. sysconfig.py replaces path
|
||||
# prefixes matching the non-b2h versions with the b2h equivalents.
|
||||
@@ -795,10 +791,6 @@ AC_DEFUN([ABS_PATH_HOST],
|
||||
AC_SUBST([$1])
|
||||
])
|
||||
|
||||
-AC_MSG_CHECKING(absolute host location of VPATH)
|
||||
-ABS_PATH_HOST([VPATH_b2h],[srcdir])
|
||||
-AC_MSG_RESULT([$VPATH_b2h])
|
||||
-
|
||||
AC_MSG_CHECKING(absolute host location of prefix)
|
||||
ABS_PATH_HOST([prefix_b2h],[prefix])
|
||||
AC_MSG_RESULT([$prefix_b2h])
|
||||
@@ -0,0 +1,102 @@
|
||||
From ab3ef7381c0eb8518d0a6ea63cf675b3f6cf8204 Mon Sep 17 00:00:00 2001
|
||||
From: Naveen M K <naveen521kk@gmail.com>
|
||||
Date: Sun, 25 Jun 2023 17:24:11 +0530
|
||||
Subject: [PATCH 093/N] Always convert `/` to `\\` before passing though
|
||||
pathcch functions
|
||||
|
||||
they don't seems to handle `/` as path separator correctly
|
||||
---
|
||||
Include/pylifecycle.h | 2 ++
|
||||
Python/fileutils.c | 22 ++++++++++++++++++----
|
||||
Python/pathconfig.c | 16 ++++++++++++++++
|
||||
3 files changed, 36 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/Include/pylifecycle.h b/Include/pylifecycle.h
|
||||
index 5d29201..21346ba 100644
|
||||
--- a/Include/pylifecycle.h
|
||||
+++ b/Include/pylifecycle.h
|
||||
@@ -28,6 +28,8 @@ PyAPI_FUNC(char) Py_GetSepA(const char *);
|
||||
PyAPI_FUNC(void) Py_NormalizeSepsW(wchar_t *);
|
||||
PyAPI_FUNC(void) Py_NormalizeSepsA(char *);
|
||||
|
||||
+PyAPI_FUNC(void) Py_NormalizeSepsPathcchW(wchar_t *);
|
||||
+
|
||||
|
||||
/* Py_PyAtExit is for the atexit module, Py_AtExit is for low-level
|
||||
* exit functions.
|
||||
diff --git a/Python/fileutils.c b/Python/fileutils.c
|
||||
index 50c78f1..aae4143 100644
|
||||
--- a/Python/fileutils.c
|
||||
+++ b/Python/fileutils.c
|
||||
@@ -2144,19 +2144,31 @@ int
|
||||
_Py_isabs(const wchar_t *path)
|
||||
{
|
||||
#ifdef MS_WINDOWS
|
||||
+ // create a copy of path and replace all forward slashes with backslashes
|
||||
+ // pathccskiproot does not handle forward slashes
|
||||
+ wchar_t *path_copy = _wcsdup(path);
|
||||
+ if (path_copy == NULL) {
|
||||
+ return 0;
|
||||
+ }
|
||||
+ Py_NormalizeSepsPathcchW(path_copy);
|
||||
+
|
||||
const wchar_t *tail;
|
||||
- HRESULT hr = PathCchSkipRoot(path, &tail);
|
||||
- if (FAILED(hr) || path == tail) {
|
||||
+ HRESULT hr = PathCchSkipRoot(path_copy, &tail);
|
||||
+ if (FAILED(hr) || path_copy == tail) {
|
||||
+ free(path_copy);
|
||||
return 0;
|
||||
}
|
||||
- if (tail == &path[1] && (path[0] == SEP || path[0] == ALTSEP)) {
|
||||
+ if (tail == &path_copy[1] && (path_copy[0] == SEP || path_copy[0] == ALTSEP)) {
|
||||
// Exclude paths with leading SEP
|
||||
+ free(path_copy);
|
||||
return 0;
|
||||
}
|
||||
- if (tail == &path[2] && path[1] == L':') {
|
||||
+ if (tail == &path_copy[2] && path_copy[1] == L':') {
|
||||
// Exclude drive-relative paths (e.g. C:filename.ext)
|
||||
+ free(path_copy);
|
||||
return 0;
|
||||
}
|
||||
+ free(path_copy);
|
||||
return 1;
|
||||
#else
|
||||
return (path[0] == SEP);
|
||||
@@ -2303,6 +2315,8 @@ join_relfile(wchar_t *buffer, size_t bufsize,
|
||||
const wchar_t *dirname, const wchar_t *relfile)
|
||||
{
|
||||
#ifdef MS_WINDOWS
|
||||
+ Py_NormalizeSepsPathcchW(dirname);
|
||||
+ Py_NormalizeSepsPathcchW(relfile);
|
||||
if (FAILED(PathCchCombineEx(buffer, bufsize, dirname, relfile,
|
||||
PATHCCH_ALLOW_LONG_PATHS))) {
|
||||
return -1;
|
||||
diff --git a/Python/pathconfig.c b/Python/pathconfig.c
|
||||
index 08a4a37..8053b91 100644
|
||||
--- a/Python/pathconfig.c
|
||||
+++ b/Python/pathconfig.c
|
||||
@@ -155,6 +155,22 @@ Py_NormalizeSepsW(wchar_t *name)
|
||||
}
|
||||
}
|
||||
|
||||
+void
|
||||
+Py_NormalizeSepsPathcchW(wchar_t *name)
|
||||
+{
|
||||
+#ifdef MS_WINDOWS
|
||||
+ assert(name != NULL);
|
||||
+ wchar_t sep = '\\';
|
||||
+ wchar_t altsep = '/';
|
||||
+ wchar_t* seps;
|
||||
+ seps = wcschr(name, altsep);
|
||||
+ while(seps) {
|
||||
+ *seps = sep;
|
||||
+ seps = wcschr(seps, altsep);
|
||||
+ }
|
||||
+#endif
|
||||
+}
|
||||
+
|
||||
/* External interface */
|
||||
|
||||
/* Stored values set by C API functions */
|
||||
@@ -0,0 +1,194 @@
|
||||
From 4a4b65385946815cd4c843c151c9b3052bafd957 Mon Sep 17 00:00:00 2001
|
||||
From: Naveen M K <naveen521kk@gmail.com>
|
||||
Date: Sun, 25 Jun 2023 17:26:55 +0530
|
||||
Subject: [PATCH 094/N] Build venvlauncher.exe from PC/launcher.c
|
||||
|
||||
- Use function available in original msvcrt.dll
|
||||
_wdupenv_s -> _wgetenv_s
|
||||
fread_s -> fread
|
||||
- Add a test for checking the new launchers
|
||||
---
|
||||
Makefile.pre.in | 20 ++++++++++++--------
|
||||
PC/launcher.c | 33 +++++++++++++++++++--------------
|
||||
PC/pylauncher.rc | 20 ++++++++++----------
|
||||
mingw_smoketests.py | 12 ++++++++++++
|
||||
4 files changed, 53 insertions(+), 32 deletions(-)
|
||||
|
||||
diff --git a/Makefile.pre.in b/Makefile.pre.in
|
||||
index 03c6087..4b8f513 100644
|
||||
--- a/Makefile.pre.in
|
||||
+++ b/Makefile.pre.in
|
||||
@@ -804,6 +804,12 @@ pythonw_exe.o: $(srcdir)/PC/pythonw_exe.rc
|
||||
python_nt.o: $(srcdir)/PC/python_nt.rc
|
||||
$(WINDRES) $(RCFLAGS) -DORIGINAL_FILENAME=\\\"$(DLLLIBRARY)\\\" -I$(srcdir)/Include -I$(srcdir)/PC -I. $(srcdir)/PC/python_nt.rc $@
|
||||
|
||||
+venvlauncher.o: $(srcdir)/PC/pylauncher.rc
|
||||
+ $(WINDRES) $(RCFLAGS) -DPY_ICON -I$(srcdir)/Include -I$(srcdir)/PC -I. $(srcdir)/PC/pylauncher.rc $@
|
||||
+
|
||||
+venvwlauncher.o: $(srcdir)/PC/pylauncher.rc
|
||||
+ $(WINDRES) $(RCFLAGS) -DPYW_ICON -I$(srcdir)/Include -I$(srcdir)/PC -I. $(srcdir)/PC/pylauncher.rc $@
|
||||
+
|
||||
$(BUILDPYTHONW): Programs/python.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY) pythonw_exe.o
|
||||
$(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -municode -mwindows -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) pythonw_exe.o
|
||||
|
||||
@@ -811,13 +817,11 @@ $(BUILDPYTHONW): Programs/python.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY) pythonw
|
||||
$(BUILDPYTHON): Programs/python.o $(LINK_PYTHON_DEPS) python_exe.o
|
||||
$(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -municode -o $@ Programs/python.o $(LINK_PYTHON_OBJS) $(LIBS) $(MODLIBS) $(SYSLIBS) python_exe.o
|
||||
|
||||
-# FIXME: build these from PC/launcher.c instead
|
||||
-$(BUILDVENVLAUNCHER): $(BUILDPYTHON)
|
||||
- cp $(BUILDPYTHON) $(BUILDVENVLAUNCHER)
|
||||
+$(BUILDVENVLAUNCHER): $(BUILDPYTHON) venvlauncher.o $(srcdir)/PC/launcher.c
|
||||
+ $(LINKCC) -D_CONSOLE -DVENV_REDIRECT -DPYTHON_EXECUTABLE_WITH_VERSION="L\"python$(LDVERSION)$(EXE)\"" -municode -static -static-libgcc -static-libstdc++ venvlauncher.o $(srcdir)/PC/launcher.c -o $@ -lversion
|
||||
|
||||
-# FIXME: build these from PC/launcher.c instead
|
||||
-$(BUILDVENVWLAUNCHER): $(BUILDPYTHONW)
|
||||
- cp $(BUILDPYTHONW) $(BUILDVENVWLAUNCHER)
|
||||
+$(BUILDVENVWLAUNCHER): $(BUILDPYTHONW) venvwlauncher.o $(srcdir)/PC/launcher.c
|
||||
+ $(LINKCC) -D_WINDOWS -DVENV_REDIRECT -DPYTHON_EXECUTABLE_WITH_VERSION="L\"pythonw$(LDVERSION)$(EXE)\"" -mwindows -municode -static -static-libgcc -static-libstdc++ venvwlauncher.o $(srcdir)/PC/launcher.c -o $@ -lversion
|
||||
|
||||
platform: $(PYTHON_FOR_BUILD_DEPS) pybuilddir.txt
|
||||
$(RUNSHARED) $(PYTHON_FOR_BUILD) -c 'import sys ; from sysconfig import get_platform ; print("%s-%d.%d" % (get_platform(), *sys.version_info[:2]))' >platform
|
||||
@@ -2006,8 +2010,8 @@ altbininstall: $(BUILDPYTHON) @FRAMEWORKPYTHONW@
|
||||
if test "$(PYTHONFRAMEWORKDIR)" = "no-framework" ; then \
|
||||
$(INSTALL_PROGRAM) $(BUILDPYTHON) $(DESTDIR)$(BINDIR)/python$(LDVERSION)$(EXE); \
|
||||
$(INSTALL_PROGRAM) $(BUILDPYTHONW) $(DESTDIR)$(BINDIR)/python3w$(EXE); \
|
||||
- $(INSTALL_PROGRAM) $(BUILDPYTHON) $(DESTDIR)$(VENVLAUNCHERDIR)/python$(EXE); \
|
||||
- $(INSTALL_PROGRAM) $(BUILDPYTHONW) $(DESTDIR)$(VENVLAUNCHERDIR)/pythonw$(EXE); \
|
||||
+ $(INSTALL_PROGRAM) $(BUILDVENVLAUNCHER) $(DESTDIR)$(VENVLAUNCHERDIR)/python$(EXE); \
|
||||
+ $(INSTALL_PROGRAM) $(BUILDVENVWLAUNCHER) $(DESTDIR)$(VENVLAUNCHERDIR)/pythonw$(EXE); \
|
||||
else \
|
||||
$(INSTALL_PROGRAM) $(STRIPFLAG) Mac/pythonw $(DESTDIR)$(BINDIR)/python$(LDVERSION)$(EXE); \
|
||||
fi
|
||||
diff --git a/PC/launcher.c b/PC/launcher.c
|
||||
index dc26553..118e963 100644
|
||||
--- a/PC/launcher.c
|
||||
+++ b/PC/launcher.c
|
||||
@@ -155,12 +155,12 @@ static wchar_t * get_env(wchar_t * key)
|
||||
#else
|
||||
#if defined(_WINDOWS)
|
||||
|
||||
-#define PYTHON_EXECUTABLE L"pythonw.exe"
|
||||
+#define PYTHON_EXECUTABLE PYTHON_EXECUTABLE_WITH_VERSION
|
||||
#define EXECUTABLEPATH_VALUE L"WindowedExecutablePath"
|
||||
|
||||
#else
|
||||
|
||||
-#define PYTHON_EXECUTABLE L"python.exe"
|
||||
+#define PYTHON_EXECUTABLE PYTHON_EXECUTABLE_WITH_VERSION
|
||||
#define EXECUTABLEPATH_VALUE L"ExecutablePath"
|
||||
|
||||
#endif
|
||||
@@ -924,7 +924,7 @@ static COMMAND path_command;
|
||||
static COMMAND * find_on_path(wchar_t * name)
|
||||
{
|
||||
wchar_t * pathext;
|
||||
- size_t varsize;
|
||||
+ size_t requiredSize;
|
||||
wchar_t * context = NULL;
|
||||
wchar_t * extension;
|
||||
COMMAND * result = NULL;
|
||||
@@ -941,18 +941,23 @@ static COMMAND * find_on_path(wchar_t * name)
|
||||
}
|
||||
else {
|
||||
/* No extension - search using registered extensions. */
|
||||
- rc = _wdupenv_s(&pathext, &varsize, L"PATHEXT");
|
||||
- if (rc == 0) {
|
||||
- extension = wcstok_s(pathext, L";", &context);
|
||||
- while (extension) {
|
||||
- len = SearchPathW(NULL, name, extension, MSGSIZE, path_command.value, NULL);
|
||||
- if (len) {
|
||||
- result = &path_command;
|
||||
- break;
|
||||
+ _wgetenv_s(&requiredSize, NULL, 0, L"PATHEXT");
|
||||
+ if (requiredSize > 0) {
|
||||
+ pathext = (wchar_t *)malloc(requiredSize * sizeof(wchar_t));
|
||||
+ /* No extension - search using registered extensions. */
|
||||
+ rc = _wgetenv_s(&requiredSize, pathext, requiredSize, L"PATHEXT");
|
||||
+ if (rc == 0) {
|
||||
+ extension = wcstok_s(pathext, L";", &context);
|
||||
+ while (extension) {
|
||||
+ len = SearchPathW(NULL, name, extension, MSGSIZE, path_command.value, NULL);
|
||||
+ if (len) {
|
||||
+ result = &path_command;
|
||||
+ break;
|
||||
+ }
|
||||
+ extension = wcstok_s(NULL, L";", &context);
|
||||
}
|
||||
- extension = wcstok_s(NULL, L";", &context);
|
||||
+ free(pathext);
|
||||
}
|
||||
- free(pathext);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
@@ -1912,7 +1917,7 @@ process(int argc, wchar_t ** argv)
|
||||
if (_wfopen_s(&f, venv_cfg_path, L"r")) {
|
||||
error(RC_BAD_VENV_CFG, L"Cannot read '%ls'", venv_cfg_path);
|
||||
}
|
||||
- cb = fread_s(buffer, sizeof(buffer), sizeof(buffer[0]),
|
||||
+ cb = fread(buffer, sizeof(buffer[0]),
|
||||
sizeof(buffer) / sizeof(buffer[0]), f);
|
||||
fclose(f);
|
||||
|
||||
diff --git a/PC/pylauncher.rc b/PC/pylauncher.rc
|
||||
index 1186264..84b2917 100644
|
||||
--- a/PC/pylauncher.rc
|
||||
+++ b/PC/pylauncher.rc
|
||||
@@ -12,17 +12,17 @@
|
||||
1 RT_MANIFEST "python.manifest"
|
||||
|
||||
#if defined(PY_ICON)
|
||||
-1 ICON DISCARDABLE "icons\python.ico"
|
||||
+1 ICON DISCARDABLE "icons/python.ico"
|
||||
#elif defined(PYW_ICON)
|
||||
-1 ICON DISCARDABLE "icons\pythonw.ico"
|
||||
+1 ICON DISCARDABLE "icons/pythonw.ico"
|
||||
#else
|
||||
-1 ICON DISCARDABLE "icons\launcher.ico"
|
||||
-2 ICON DISCARDABLE "icons\py.ico"
|
||||
-3 ICON DISCARDABLE "icons\pyc.ico"
|
||||
-4 ICON DISCARDABLE "icons\pyd.ico"
|
||||
-5 ICON DISCARDABLE "icons\python.ico"
|
||||
-6 ICON DISCARDABLE "icons\pythonw.ico"
|
||||
-7 ICON DISCARDABLE "icons\setup.ico"
|
||||
+1 ICON DISCARDABLE "icons/launcher.ico"
|
||||
+2 ICON DISCARDABLE "icons/py.ico"
|
||||
+3 ICON DISCARDABLE "icons/pyc.ico"
|
||||
+4 ICON DISCARDABLE "icons/pyd.ico"
|
||||
+5 ICON DISCARDABLE "icons/python.ico"
|
||||
+6 ICON DISCARDABLE "icons/pythonw.ico"
|
||||
+7 ICON DISCARDABLE "icons/setup.ico"
|
||||
#endif
|
||||
|
||||
1 USAGE "launcher-usage.txt"
|
||||
@@ -64,4 +64,4 @@ BEGIN
|
||||
BEGIN
|
||||
VALUE "Translation", 0x0, 1200
|
||||
END
|
||||
-END
|
||||
\ No newline at end of file
|
||||
+END
|
||||
diff --git a/mingw_smoketests.py b/mingw_smoketests.py
|
||||
index 2a8bd16..00601f9 100644
|
||||
--- a/mingw_smoketests.py
|
||||
+++ b/mingw_smoketests.py
|
||||
@@ -194,6 +194,18 @@ def test_venv_creation(self):
|
||||
assert os.path.exists(os.path.join(tmp, "bin", "python3.exe"))
|
||||
subprocess.check_call([shutil.which("bash.exe"), os.path.join(tmp, "bin", "activate")])
|
||||
|
||||
+ # This will not work in in-tree build
|
||||
+ if not sysconfig.is_python_build():
|
||||
+ op = subprocess.check_output(
|
||||
+ [
|
||||
+ os.path.join(tmp, "bin", "python.exe"),
|
||||
+ "-c",
|
||||
+ "print('Hello World')"
|
||||
+ ],
|
||||
+ cwd=tmp,
|
||||
+ )
|
||||
+ assert op.decode().strip() == "Hello World"
|
||||
+
|
||||
def test_has_mktime(self):
|
||||
from time import mktime, gmtime
|
||||
mktime(gmtime())
|
||||
55
mingw-w64-python3.12/0095-getpath.py-fix-dirname.patch
Normal file
55
mingw-w64-python3.12/0095-getpath.py-fix-dirname.patch
Normal file
@@ -0,0 +1,55 @@
|
||||
From c4d0bdb74deb03161bbb583bf3bf356fffee2eb6 Mon Sep 17 00:00:00 2001
|
||||
From: Naveen M K <naveen521kk@gmail.com>
|
||||
Date: Sun, 25 Jun 2023 19:39:30 +0530
|
||||
Subject: [PATCH 095/N] getpath.py: fix `dirname`
|
||||
|
||||
also, fix finding prefix when in a venv
|
||||
---
|
||||
Modules/getpath.c | 12 ++++++++++++
|
||||
Modules/getpath.py | 3 +++
|
||||
2 files changed, 15 insertions(+)
|
||||
|
||||
diff --git a/Modules/getpath.c b/Modules/getpath.c
|
||||
index bd80221..16d18b3 100644
|
||||
--- a/Modules/getpath.c
|
||||
+++ b/Modules/getpath.c
|
||||
@@ -89,6 +89,12 @@ getpath_basename(PyObject *Py_UNUSED(self), PyObject *args)
|
||||
}
|
||||
Py_ssize_t end = PyUnicode_GET_LENGTH(path);
|
||||
Py_ssize_t pos = PyUnicode_FindChar(path, SEP, 0, end, -1);
|
||||
+#ifdef ALTSEP
|
||||
+ if (pos < 0) {
|
||||
+ // try using altsep
|
||||
+ pos = PyUnicode_FindChar(path, ALTSEP, 0, end, -1);
|
||||
+ }
|
||||
+#endif
|
||||
if (pos < 0) {
|
||||
return Py_NewRef(path);
|
||||
}
|
||||
@@ -105,6 +111,12 @@ getpath_dirname(PyObject *Py_UNUSED(self), PyObject *args)
|
||||
}
|
||||
Py_ssize_t end = PyUnicode_GET_LENGTH(path);
|
||||
Py_ssize_t pos = PyUnicode_FindChar(path, SEP, 0, end, -1);
|
||||
+#ifdef ALTSEP
|
||||
+ if (pos < 0) {
|
||||
+ // try using altsep
|
||||
+ pos = PyUnicode_FindChar(path, ALTSEP, 0, end, -1);
|
||||
+ }
|
||||
+#endif
|
||||
if (pos < 0) {
|
||||
return PyUnicode_FromStringAndSize(NULL, 0);
|
||||
}
|
||||
diff --git a/Modules/getpath.py b/Modules/getpath.py
|
||||
index 6867e98..5687e4f 100644
|
||||
--- a/Modules/getpath.py
|
||||
+++ b/Modules/getpath.py
|
||||
@@ -574,6 +574,9 @@ def search_up(prefix, *landmarks, test=isfile):
|
||||
# First try to detect prefix by looking alongside our runtime library, if known
|
||||
if library and not prefix:
|
||||
library_dir = dirname(library)
|
||||
+ if os_name == 'nt' and is_mingw:
|
||||
+ # QUIRK: On Windows, mingw Python DLLs are in the bin directory
|
||||
+ library_dir = joinpath(library_dir, '..')
|
||||
if ZIP_LANDMARK:
|
||||
if os_name == 'nt':
|
||||
# QUIRK: Windows does not search up for ZIP file
|
||||
@@ -0,0 +1,154 @@
|
||||
From 51fa807b6357e1f2ed85018233f44d117e71f017 Mon Sep 17 00:00:00 2001
|
||||
From: Christoph Reiter <reiter.christoph@gmail.com>
|
||||
Date: Fri, 28 Jul 2023 20:13:58 +0200
|
||||
Subject: [PATCH 096/N] getpath: use normpath on all generated paths
|
||||
|
||||
Instead of just calling normpath in abspath just call normpath
|
||||
on all the config results. This makes sure we don't change getpath.py
|
||||
too much and still cover all outputs.
|
||||
|
||||
This fixes sys.exec_prefix not matching sys.prefix, see
|
||||
https://github.com/msys2-contrib/cpython-mingw/issues/142
|
||||
---
|
||||
Lib/test/test_getpath.py | 6 ++++++
|
||||
Modules/getpath.c | 21 ++++++++++++++++++++-
|
||||
Modules/getpath.py | 30 ++++++++++++++++--------------
|
||||
3 files changed, 42 insertions(+), 15 deletions(-)
|
||||
|
||||
diff --git a/Lib/test/test_getpath.py b/Lib/test/test_getpath.py
|
||||
index ee4ab99..47ca302 100644
|
||||
--- a/Lib/test/test_getpath.py
|
||||
+++ b/Lib/test/test_getpath.py
|
||||
@@ -913,6 +913,9 @@ def __missing__(self, key):
|
||||
except AttributeError:
|
||||
raise KeyError(key) from None
|
||||
|
||||
+ def normpath(self, path):
|
||||
+ return ntpath.normpath(path)
|
||||
+
|
||||
def abspath(self, path):
|
||||
if self.isabs(path):
|
||||
return path
|
||||
@@ -1091,6 +1094,9 @@ def __missing__(self, key):
|
||||
except AttributeError:
|
||||
raise KeyError(key) from None
|
||||
|
||||
+ def normpath(self, path):
|
||||
+ return path
|
||||
+
|
||||
def abspath(self, path):
|
||||
if self.isabs(path):
|
||||
return path
|
||||
diff --git a/Modules/getpath.c b/Modules/getpath.c
|
||||
index 16d18b3..4753022 100644
|
||||
--- a/Modules/getpath.c
|
||||
+++ b/Modules/getpath.c
|
||||
@@ -54,6 +54,25 @@
|
||||
|
||||
/* HELPER FUNCTIONS for getpath.py */
|
||||
|
||||
+static PyObject *
|
||||
+getpath_normpath(PyObject *Py_UNUSED(self), PyObject *args)
|
||||
+{
|
||||
+ PyObject *r = NULL;
|
||||
+ PyObject *pathobj;
|
||||
+ wchar_t *path;
|
||||
+ if (!PyArg_ParseTuple(args, "U", &pathobj)) {
|
||||
+ return NULL;
|
||||
+ }
|
||||
+ Py_ssize_t len;
|
||||
+ wchar_t *buffer = PyUnicode_AsWideCharString(pathobj, &len);
|
||||
+ if (!buffer) {
|
||||
+ return NULL;
|
||||
+ }
|
||||
+ r = PyUnicode_FromWideChar(_Py_normpath(buffer, len), -1);
|
||||
+ PyMem_Free(buffer);
|
||||
+ return r;
|
||||
+}
|
||||
+
|
||||
static PyObject *
|
||||
getpath_abspath(PyObject *Py_UNUSED(self), PyObject *args)
|
||||
{
|
||||
@@ -68,7 +87,6 @@ getpath_abspath(PyObject *Py_UNUSED(self), PyObject *args)
|
||||
if (path) {
|
||||
wchar_t *abs;
|
||||
if (_Py_abspath((const wchar_t *)_Py_normpath(path, -1), &abs) == 0 && abs) {
|
||||
- abs = _Py_normpath(abs, -1);
|
||||
r = PyUnicode_FromWideChar(abs, -1);
|
||||
PyMem_RawFree((void *)abs);
|
||||
} else {
|
||||
@@ -519,6 +537,7 @@ getpath_realpath(PyObject *Py_UNUSED(self) , PyObject *args)
|
||||
|
||||
|
||||
static PyMethodDef getpath_methods[] = {
|
||||
+ {"normpath", getpath_normpath, METH_VARARGS, NULL},
|
||||
{"abspath", getpath_abspath, METH_VARARGS, NULL},
|
||||
{"basename", getpath_basename, METH_VARARGS, NULL},
|
||||
{"dirname", getpath_dirname, METH_VARARGS, NULL},
|
||||
diff --git a/Modules/getpath.py b/Modules/getpath.py
|
||||
index 5687e4f..d143f97 100644
|
||||
--- a/Modules/getpath.py
|
||||
+++ b/Modules/getpath.py
|
||||
@@ -233,6 +233,8 @@ def search_up(prefix, *landmarks, test=isfile):
|
||||
return prefix
|
||||
prefix = dirname(prefix)
|
||||
|
||||
+def _normpath(p):
|
||||
+ return normpath(p) if p is not None else None
|
||||
|
||||
# ******************************************************************************
|
||||
# READ VARIABLES FROM config
|
||||
@@ -670,7 +672,7 @@ def search_up(prefix, *landmarks, test=isfile):
|
||||
|
||||
if py_setpath:
|
||||
# If Py_SetPath was called then it overrides any existing search path
|
||||
- config['module_search_paths'] = py_setpath.split(DELIM)
|
||||
+ config['module_search_paths'] = [_normpath(p) for p in py_setpath.split(DELIM)]
|
||||
config['module_search_paths_set'] = 1
|
||||
|
||||
elif not pythonpath_was_set:
|
||||
@@ -757,7 +759,7 @@ def search_up(prefix, *landmarks, test=isfile):
|
||||
if platstdlib_dir:
|
||||
pythonpath.append(platstdlib_dir)
|
||||
|
||||
- config['module_search_paths'] = pythonpath
|
||||
+ config['module_search_paths'] = [_normpath(p) for p in pythonpath]
|
||||
config['module_search_paths_set'] = 1
|
||||
|
||||
|
||||
@@ -792,23 +794,23 @@ def search_up(prefix, *landmarks, test=isfile):
|
||||
warn("unsupported 'import' line in ._pth file")
|
||||
else:
|
||||
pythonpath.append(joinpath(pth_dir, line))
|
||||
- config['module_search_paths'] = pythonpath
|
||||
+ config['module_search_paths'] = [_normpath(p) for p in pythonpath]
|
||||
config['module_search_paths_set'] = 1
|
||||
|
||||
# ******************************************************************************
|
||||
# UPDATE config FROM CALCULATED VALUES
|
||||
# ******************************************************************************
|
||||
|
||||
-config['program_name'] = program_name
|
||||
-config['home'] = home
|
||||
-config['executable'] = executable
|
||||
-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['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['platlibdir'] = platlibdir
|
||||
+config['platlibdir'] = _normpath(platlibdir)
|
||||
# test_embed expects empty strings, not None
|
||||
-config['stdlib_dir'] = stdlib_dir or ''
|
||||
-config['platstdlib_dir'] = platstdlib_dir or ''
|
||||
+config['stdlib_dir'] = _normpath(stdlib_dir or '')
|
||||
+config['platstdlib_dir'] = _normpath(platstdlib_dir or '')
|
||||
@@ -0,0 +1,24 @@
|
||||
From e23c9747e36b67afeb8e7d4fbb7ebbe5ed1d4990 Mon Sep 17 00:00:00 2001
|
||||
From: Christoph Reiter <reiter.christoph@gmail.com>
|
||||
Date: Fri, 28 Jul 2023 20:14:38 +0200
|
||||
Subject: [PATCH 097/N] pathconfig: normpath sys.path[0]
|
||||
|
||||
this gets added as first element in sys.path.
|
||||
use normpath to make sure it uses the right path separator
|
||||
---
|
||||
Python/pathconfig.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Python/pathconfig.c b/Python/pathconfig.c
|
||||
index 8053b91..7eb9006 100644
|
||||
--- a/Python/pathconfig.c
|
||||
+++ b/Python/pathconfig.c
|
||||
@@ -662,7 +662,7 @@ _PyPathConfig_ComputeSysPath0(const PyWideStringList *argv, PyObject **path0_p)
|
||||
}
|
||||
#endif /* All others */
|
||||
|
||||
- PyObject *path0_obj = PyUnicode_FromWideChar(path0, n);
|
||||
+ PyObject *path0_obj = PyUnicode_FromWideChar(_Py_normpath(path0, -1), n);
|
||||
if (path0_obj == NULL) {
|
||||
return -1;
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
From f2d1898d485f41180c6d99474f6fd48ff2509a48 Mon Sep 17 00:00:00 2001
|
||||
From: Christoph Reiter <reiter.christoph@gmail.com>
|
||||
Date: Fri, 28 Jul 2023 20:15:01 +0200
|
||||
Subject: [PATCH 098/N] smoketests: add some tests for sys/site paths
|
||||
|
||||
---
|
||||
mingw_smoketests.py | 23 +++++++++++++++++++++++
|
||||
1 file changed, 23 insertions(+)
|
||||
|
||||
diff --git a/mingw_smoketests.py b/mingw_smoketests.py
|
||||
index 00601f9..516005c 100644
|
||||
--- a/mingw_smoketests.py
|
||||
+++ b/mingw_smoketests.py
|
||||
@@ -238,6 +238,29 @@ def test_platform_things(self):
|
||||
self.assertEqual(platform.system(), "Windows")
|
||||
self.assertTrue(isinstance(sys.api_version, int) and sys.api_version > 0)
|
||||
|
||||
+ def test_sys_getpath(self):
|
||||
+ # everything sourced from getpath.py
|
||||
+ import sys
|
||||
+
|
||||
+ def assertNormpath(path):
|
||||
+ self.assertEqual(path, os.path.normpath(path))
|
||||
+
|
||||
+ assertNormpath(sys.executable)
|
||||
+ assertNormpath(sys._base_executable)
|
||||
+ assertNormpath(sys.prefix)
|
||||
+ assertNormpath(sys.base_prefix)
|
||||
+ assertNormpath(sys.exec_prefix)
|
||||
+ assertNormpath(sys.base_exec_prefix)
|
||||
+ assertNormpath(sys.platlibdir)
|
||||
+ assertNormpath(sys._stdlib_dir)
|
||||
+ for p in sys.path:
|
||||
+ assertNormpath(p)
|
||||
+
|
||||
+ def test_site(self):
|
||||
+ import site
|
||||
+
|
||||
+ self.assertEqual(len(site.getsitepackages()), 1)
|
||||
+
|
||||
def test_c_ext_build(self):
|
||||
import tempfile
|
||||
import sys
|
||||
@@ -0,0 +1,134 @@
|
||||
From cd2927084b47627236aad65067d72d8596e2c74d Mon Sep 17 00:00:00 2001
|
||||
From: Naveen M K <naveen521kk@gmail.com>
|
||||
Date: Sat, 5 Aug 2023 14:10:27 +0530
|
||||
Subject: [PATCH 099/N] Search DLLs only on paths added using
|
||||
`add_dll_directory()`.
|
||||
|
||||
This is the default behavior on upstream Python. We previously
|
||||
reverted this behavior because it broke some use cases.
|
||||
|
||||
The old behavior can be restored by setting the environment variable
|
||||
PYTHONLEGACYWINDOWSDLLLOADING to 1.
|
||||
|
||||
Fixes https://github.com/msys2-contrib/cpython-mingw/issues/48
|
||||
Also fixes https://github.com/msys2-contrib/cpython-mingw/issues/141
|
||||
|
||||
Signed-off-by: Naveen M K <naveen521kk@gmail.com>
|
||||
---
|
||||
.github/workflows/mingw.yml | 10 +++++-----
|
||||
Lib/test/__main__.py | 8 ++++++++
|
||||
Python/dynload_win.c | 16 ++++++++++++++--
|
||||
Tools/build/check_extension_modules.py | 4 ++++
|
||||
mingw_smoketests.py | 3 +++
|
||||
5 files changed, 34 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/.github/workflows/mingw.yml b/.github/workflows/mingw.yml
|
||||
index 6445b6b..f0a0d92 100644
|
||||
--- a/.github/workflows/mingw.yml
|
||||
+++ b/.github/workflows/mingw.yml
|
||||
@@ -126,15 +126,15 @@ jobs:
|
||||
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: |
|
||||
- export PYTHONTZPATH="${MINGW_PREFIX}/share/zoneinfo"
|
||||
SMOKETESTS="$(pwd)/mingw_smoketests.py"
|
||||
- cd _build
|
||||
- cd python_pkgdir/${MINGW_PREFIX}/bin
|
||||
- ./python.exe "$SMOKETESTS"
|
||||
- MSYSTEM= ./python.exe "$SMOKETESTS"
|
||||
+ ${MINGW_PREFIX}/bin/python.exe "$SMOKETESTS"
|
||||
+ MSYSTEM= ${MINGW_PREFIX}/bin/python.exe "$SMOKETESTS"
|
||||
|
||||
- name: Compress
|
||||
if: always()
|
||||
diff --git a/Lib/test/__main__.py b/Lib/test/__main__.py
|
||||
index 82b50ad..25bac39 100644
|
||||
--- a/Lib/test/__main__.py
|
||||
+++ b/Lib/test/__main__.py
|
||||
@@ -1,2 +1,10 @@
|
||||
+import os
|
||||
+import sys
|
||||
+
|
||||
from test.libregrtest.main import main
|
||||
+
|
||||
+if sys.platform == "win32":
|
||||
+ # Enable DLL loading from PATH.
|
||||
+ os.environ["PYTHONLEGACYWINDOWSDLLLOADING"] = "1"
|
||||
+
|
||||
main(_add_python_opts=True)
|
||||
diff --git a/Python/dynload_win.c b/Python/dynload_win.c
|
||||
index 1f90e21..db79687 100644
|
||||
--- a/Python/dynload_win.c
|
||||
+++ b/Python/dynload_win.c
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "Python.h"
|
||||
#include "pycore_fileutils.h" // _Py_add_relfile()
|
||||
#include "pycore_pystate.h" // _PyInterpreterState_GET()
|
||||
+#include "pycore_initconfig.h"
|
||||
|
||||
#ifdef HAVE_DIRECT_H
|
||||
#include <direct.h>
|
||||
@@ -225,6 +226,18 @@ dl_funcptr _PyImport_FindSharedFuncptrWindows(const char *prefix,
|
||||
dl_funcptr p;
|
||||
char funcname[258], *import_python;
|
||||
|
||||
+ int use_legacy = 0;
|
||||
+ DWORD load_library_flags = 0;
|
||||
+
|
||||
+ _Py_get_env_flag(1, &use_legacy, "PYTHONLEGACYWINDOWSDLLLOADING");
|
||||
+
|
||||
+ if (use_legacy) {
|
||||
+ load_library_flags = LOAD_WITH_ALTERED_SEARCH_PATH;
|
||||
+ } else {
|
||||
+ load_library_flags = LOAD_LIBRARY_SEARCH_DEFAULT_DIRS |
|
||||
+ LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR;
|
||||
+ }
|
||||
+
|
||||
#ifdef _MSC_VER
|
||||
_Py_CheckPython3();
|
||||
#endif /* _MSC_VER */
|
||||
@@ -249,8 +262,7 @@ dl_funcptr _PyImport_FindSharedFuncptrWindows(const char *prefix,
|
||||
AddDllDirectory function. We add SEARCH_DLL_LOAD_DIR to
|
||||
ensure DLLs adjacent to the PYD are preferred. */
|
||||
Py_BEGIN_ALLOW_THREADS
|
||||
- hDLL = LoadLibraryExW(wpathname, NULL,
|
||||
- LOAD_WITH_ALTERED_SEARCH_PATH);
|
||||
+ hDLL = LoadLibraryExW(wpathname, NULL, load_library_flags);
|
||||
Py_END_ALLOW_THREADS
|
||||
PyMem_Free(wpathname);
|
||||
|
||||
diff --git a/Tools/build/check_extension_modules.py b/Tools/build/check_extension_modules.py
|
||||
index 59239c6..6810b3b 100644
|
||||
--- a/Tools/build/check_extension_modules.py
|
||||
+++ b/Tools/build/check_extension_modules.py
|
||||
@@ -60,6 +60,10 @@
|
||||
"winsound",
|
||||
}
|
||||
|
||||
+if sys.platform == "win32":
|
||||
+ # Enable DLL loading from PATH.
|
||||
+ os.environ["PYTHONLEGACYWINDOWSDLLLOADING"] = "1"
|
||||
+
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
diff --git a/mingw_smoketests.py b/mingw_smoketests.py
|
||||
index 516005c..ca1f652 100644
|
||||
--- a/mingw_smoketests.py
|
||||
+++ b/mingw_smoketests.py
|
||||
@@ -34,6 +34,9 @@
|
||||
else:
|
||||
SEP = "\\"
|
||||
|
||||
+if sysconfig.is_python_build():
|
||||
+ os.environ["PYTHONLEGACYWINDOWSDLLLOADING"] = "1"
|
||||
+
|
||||
_UCRT = sysconfig.get_platform() not in ('mingw_x86_64', 'mingw_i686')
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user