mirror of
https://github.com/vim/vim.git
synced 2025-10-21 08:24:06 -04:00
patch 9.0.1980: win32: issues with stable python ABI
Problem: win32: issues with stable python ABI Solution: if_python3,win32: Fix Python3 stable ABI There were some issues in current stable ABI implementation on Windows: * Python DLL name should be `python3.dll` instead of `python311.dll` and so on. (See: https://docs.python.org/3/c-api/stable.html) * Some non-stable API functions were used: - `_PyObject_NextNotImplemented` - `PyStdPrinter_Type` * `reset_stdin()` and `hook_py_exit()` didn't work with `python3.dll`. `python3.dll` is a special type of DLL called forwarder DLL. It just forwards the functions to other DLL (e.g. `python311.dll`). There were two issues regarding these functions: - `python3.dll` doesn't have import tables. This caused a crash in `get_imported_func_info()`. Add a check whether the specified DLL has an import table. - `reset_stdin()` and `hook_py_exit()` should be applied to the forwarded DLL (e.g. `python311.dll`), not to `python3.dll`. Check the export directory of `python3.dll` to find the forwarded DLL and apply the functions to it. closes: #13260 Signed-off-by: Christian Brabandt <cb@256bit.org> Co-authored-by: Ken Takata <kentkt@csc.jp>
This commit is contained in:
committed by
Christian Brabandt
parent
317468aace
commit
119fdd9293
@@ -937,8 +937,13 @@ PYTHON_LIB = "$(PYTHON)\libs\python$(PYTHON_VER).lib"
|
||||
! ifndef PYTHON3_VER
|
||||
PYTHON3_VER = 36
|
||||
! endif
|
||||
! if "$(DYNAMIC_PYTHON3_STABLE_ABI)" == "yes"
|
||||
PYTHON3_NAME = python3
|
||||
! else
|
||||
PYTHON3_NAME = python$(PYTHON3_VER)
|
||||
! endif
|
||||
! ifndef DYNAMIC_PYTHON3_DLL
|
||||
DYNAMIC_PYTHON3_DLL = python$(PYTHON3_VER).dll
|
||||
DYNAMIC_PYTHON3_DLL = $(PYTHON3_NAME).dll
|
||||
! endif
|
||||
! message Python3 requested (version $(PYTHON3_VER)) - root dir is "$(PYTHON3)"
|
||||
! if "$(DYNAMIC_PYTHON3)" == "yes"
|
||||
@@ -953,13 +958,11 @@ CFLAGS = $(CFLAGS) -DDYNAMIC_PYTHON3 \
|
||||
! if "$(DYNAMIC_PYTHON3_STABLE_ABI)" == "yes"
|
||||
CFLAGS = $(CFLAGS) -DDYNAMIC_PYTHON3_STABLE_ABI
|
||||
PYTHON3_INC = $(PYTHON3_INC) -DPy_LIMITED_API=0x3080000
|
||||
PYTHON3_LIB = /nodefaultlib:python3.lib
|
||||
! else
|
||||
PYTHON3_LIB = /nodefaultlib:python$(PYTHON3_VER).lib
|
||||
! endif
|
||||
PYTHON3_LIB = /nodefaultlib:$(PYTHON3_NAME).lib
|
||||
! else
|
||||
CFLAGS = $(CFLAGS) -DPYTHON3_DLL=\"$(DYNAMIC_PYTHON3_DLL)\"
|
||||
PYTHON3_LIB = "$(PYTHON3)\libs\python$(PYTHON3_VER).lib"
|
||||
PYTHON3_LIB = "$(PYTHON3)\libs\$(PYTHON3_NAME).lib"
|
||||
! endif
|
||||
!endif
|
||||
|
||||
|
Reference in New Issue
Block a user