Skip to content

Commit 8911010

Browse files
Alexpuxlazka
authored andcommitted
Add dynamic loading support for MINGW
Co-authored-by: Алексей <alexey.pawlow@gmail.com>
1 parent b738276 commit 8911010

File tree

3 files changed

+29
-2
lines changed

3 files changed

+29
-2
lines changed

Makefile.pre.in

+6
Original file line numberDiff line numberDiff line change
@@ -1276,6 +1276,12 @@ Python/dynload_hpux.o: $(srcdir)/Python/dynload_hpux.c Makefile
12761276
-DSHLIB_EXT='"$(EXT_SUFFIX)"' \
12771277
-o $@ $(srcdir)/Python/dynload_hpux.c
12781278

1279+
Python/dynload_win.o: $(srcdir)/Python/dynload_win.c Makefile
1280+
$(CC) -c $(PY_CORE_CFLAGS) \
1281+
-DSHLIB_SUFFIX='"$(SHLIB_SUFFIX)"' \
1282+
-DEXT_SUFFIX='"$(EXT_SUFFIX)"' \
1283+
-o $@ $(srcdir)/Python/dynload_win.c
1284+
12791285
Python/sysmodule.o: $(srcdir)/Python/sysmodule.c Makefile $(srcdir)/Include/pydtrace.h
12801286
$(CC) -c $(PY_CORE_CFLAGS) \
12811287
-DABIFLAGS='"$(ABIFLAGS)"' \

Python/dynload_win.c

+7-2
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,12 @@
2929
#define PYD_UNTAGGED_SUFFIX PYD_DEBUG_SUFFIX ".pyd"
3030

3131
const char *_PyImport_DynLoadFiletab[] = {
32+
#ifdef EXT_SUFFIX
33+
EXT_SUFFIX, /* include SOABI flags where is encoded debug */
34+
#endif
35+
#ifdef SHLIB_SUFFIX
36+
"-abi" PYTHON_ABI_STRING SHLIB_SUFFIX,
37+
#endif
3238
PYD_TAGGED_SUFFIX,
3339
PYD_UNTAGGED_SUFFIX,
3440
NULL
@@ -249,8 +255,7 @@ dl_funcptr _PyImport_FindSharedFuncptrWindows(const char *prefix,
249255
ensure DLLs adjacent to the PYD are preferred. */
250256
Py_BEGIN_ALLOW_THREADS
251257
hDLL = LoadLibraryExW(wpathname, NULL,
252-
LOAD_LIBRARY_SEARCH_DEFAULT_DIRS |
253-
LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR);
258+
LOAD_WITH_ALTERED_SEARCH_PATH);
254259
Py_END_ALLOW_THREADS
255260
#if !USE_UNICODE_WCHAR_CACHE
256261
PyMem_Free(wpathname);

configure.ac

+16
Original file line numberDiff line numberDiff line change
@@ -3211,6 +3211,9 @@ if test -z "$SHLIB_SUFFIX"; then
32113211
CYGWIN*) SHLIB_SUFFIX=.dll;;
32123212
*) SHLIB_SUFFIX=.so;;
32133213
esac
3214+
case $host_os in
3215+
mingw*) SHLIB_SUFFIX=.dll;;
3216+
esac
32143217
fi
32153218
AC_MSG_RESULT($SHLIB_SUFFIX)
32163219

@@ -4698,6 +4701,13 @@ then
46984701
fi
46994702
;;
47004703
esac
4704+
case $host in
4705+
*-*-mingw*)
4706+
DYNLOADFILE="dynload_win.o"
4707+
extra_machdep_objs="$extra_machdep_objs PC/dl_nt.o"
4708+
CFLAGS_NODIST="$CFLAGS_NODIST -DMS_DLL_ID='\"$VERSION\"'"
4709+
;;
4710+
esac
47014711
fi
47024712
AC_MSG_RESULT($DYNLOADFILE)
47034713
if test "$DYNLOADFILE" != "dynload_stub.o"
@@ -6483,6 +6493,12 @@ case "$ac_cv_computed_gotos" in yes*)
64836493
AC_DEFINE(HAVE_COMPUTED_GOTOS, 1,
64846494
[Define if the C compiler supports computed gotos.])
64856495
esac
6496+
case $host_os in
6497+
mingw*)
6498+
dnl Synchronized with _PyImport_DynLoadFiletab (dynload_win.c)
6499+
dnl Do not use more then one dot on this platform !
6500+
EXT_SUFFIX=-$SOABI$SHLIB_SUFFIX;;
6501+
esac
64866502

64876503
case $ac_sys_system in
64886504
AIX*)

0 commit comments

Comments
 (0)