summarylogtreecommitdiffstats
path: root/0014-MINGW-dynamic-loading-support.patch
blob: 3c02197510d3c6f1b8bdf2dd2ca25d105a62b5d4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
From 4eb264922b5a1abfa9400662d88c10a3b5f447bd 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 014/N] MINGW dynamic loading support
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 e8e8e71..332f9a5 100644
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
@@ -823,6 +823,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 81787e5..9d7690e 100644
--- a/Python/dynload_win.c
+++ b/Python/dynload_win.c
@@ -27,6 +27,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
@@ -192,8 +198,7 @@ _Py_COMP_DIAG_POP
            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
 
         /* restore old error mode settings */
diff --git a/configure.ac b/configure.ac
index 6ebf250..a8c64a7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2718,6 +2718,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)
 
@@ -3831,6 +3834,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"
@@ -5667,6 +5677,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*)
-- 
2.33.0