This is an automated email from the ASF dual-hosted git repository. mseidel pushed a commit to branch AOO42X in repository https://gitbox.apache.org/repos/asf/openoffice.git
commit bee4b9955243a08e7572e1fc52f40544baf3c55f Author: Damjan Jovanovic <dam...@apache.org> AuthorDate: Sat Jan 18 10:20:44 2020 +0200 pyuno: wrap the right entrypoint for Python 3 in the pyuno dlopen wrapper Patch by: me (cherry picked from commit 29716487c9dd2d298fa194b73f148072e7f0a3e7) --- main/pyuno/Library_pyuno_loader.mk | 2 ++ main/pyuno/source/module/pyuno_dlopenwrapper.c | 39 ++++++++++++++++++++++++-- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/main/pyuno/Library_pyuno_loader.mk b/main/pyuno/Library_pyuno_loader.mk index afbea6f..c13cee7 100644 --- a/main/pyuno/Library_pyuno_loader.mk +++ b/main/pyuno/Library_pyuno_loader.mk @@ -38,6 +38,8 @@ else ifeq ($(OS),MACOSX) $(eval $(call gb_Library_add_libs,pyuno_loader,-ldl)) endif +$(call gb_Library_use_external,pyuno_loader,python) + $(eval $(call gb_Library_add_cobjects,pyuno_loader,\ pyuno/source/module/pyuno_dlopenwrapper \ )) diff --git a/main/pyuno/source/module/pyuno_dlopenwrapper.c b/main/pyuno/source/module/pyuno_dlopenwrapper.c index beef85b..bb6614c 100644 --- a/main/pyuno/source/module/pyuno_dlopenwrapper.c +++ b/main/pyuno/source/module/pyuno_dlopenwrapper.c @@ -21,6 +21,22 @@ +#ifndef Py_PYTHON_H +#if defined _MSC_VER +#pragma warning(push, 1) +#endif +#ifdef _DEBUG +#undef _DEBUG +#include <Python.h> +#define _DEBUG +#else +#include <Python.h> +#endif // #ifdef _DEBUG +#if defined _MSC_VER +#pragma warning(pop) +#endif +#endif // #ifdef Py_PYTHON_H + #include <rtl/string.h> #include <stdlib.h> @@ -33,12 +49,24 @@ #endif #include <dlfcn.h> +#if PY_MAJOR_VERSION >= 3 +SAL_DLLPUBLIC_EXPORT void* PyInit_pyuno(void) +#else SAL_DLLPUBLIC_EXPORT void initpyuno () +#endif { Dl_info dl_info; +#if PY_MAJOR_VERSION >= 3 + void* (*func)(void); +#else void (*func)(void); +#endif +#if PY_MAJOR_VERSION >= 3 + if (dladdr((void*)&PyInit_pyuno, &dl_info) != 0) { +#else if (dladdr((void*)&initpyuno, &dl_info) != 0) { +#endif void* h = 0; size_t len = strrchr(dl_info.dli_fname, '/') - dl_info.dli_fname + 1; char* libname = malloc(len + RTL_CONSTASCII_LENGTH( SAL_DLLPREFIX "pyuno" SAL_DLLEXTENSION ) + 1); @@ -49,8 +77,15 @@ SAL_DLLPUBLIC_EXPORT void initpyuno () free(libname); if( h ) { - func = (void (*)())dlsym (h, "initpyuno"); - (func) (); +#if PY_MAJOR_VERSION >= 3 + func = (void* (*)(void))dlsym (h, "PyInit_pyuno"); +#else + func = (void (*)(void))dlsym (h, "initpyuno"); +#endif + return (func) (); } } +#if PY_MAJOR_VERSION >= 3 + return NULL; +#endif }