diff options
author | Ken Takata <kentkt@csc.jp> | 2023-10-04 20:05:05 +0200 |
---|---|---|
committer | Christian Brabandt <cb@256bit.org> | 2023-10-04 20:05:05 +0200 |
commit | 119fdd9293f63614ed2ca60a78993466435db639 (patch) | |
tree | 0de7811d4f2982b04385c8d7cacf83134604c353 /src/Make_cyg_ming.mak | |
parent | 317468aaceb48e136ed7e3fa6d233345fd5360c6 (diff) |
patch 9.0.1980: win32: issues with stable python ABIv9.0.1980
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>
Diffstat (limited to 'src/Make_cyg_ming.mak')
-rw-r--r-- | src/Make_cyg_ming.mak | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/Make_cyg_ming.mak b/src/Make_cyg_ming.mak index e4fe0be8fb..98c86a6e77 100644 --- a/src/Make_cyg_ming.mak +++ b/src/Make_cyg_ming.mak @@ -395,15 +395,20 @@ DYNAMIC_PYTHON3=yes ifndef PYTHON3_VER PYTHON3_VER=36 endif + ifeq ($(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 ifdef PYTHON3_HOME PYTHON3_HOME_DEF=-DPYTHON3_HOME=L\"$(PYTHON3_HOME)\" endif ifeq (no,$(DYNAMIC_PYTHON3)) -PYTHON3LIB=-L$(PYTHON3)/libs -lpython$(PYTHON3_VER) +PYTHON3LIB=-L$(PYTHON3)/libs -l$(PYTHON3_NAME) endif ifndef PYTHON3INC |