From a62b45cf541cf47d136bdff87dff4c13fd4296c2 Mon Sep 17 00:00:00 2001
From: Stephan Bergmann <sbergman@redhat.com>
Date: Fri, 7 Jun 2019 15:57:13 +0200
Subject: [PATCH] Adapt to upcoming Python 3.8
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

...which changed PyTypeObject in <https://github.com/python/cpython/commit/
aacc77fbd77640a8f03638216fa09372cc21673d> "bpo-36974: implement PEP 590
(GH-13185)".

Change-Id: I687ec38aeda05d0747b9ed08221db75a758bed51
Reviewed-on: https://gerrit.libreoffice.org/73664
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
(cherry picked from commit 2bd585f31d7abb066e3f53d9b29c822af20aea69)
Reviewed-on: https://gerrit.libreoffice.org/73778
---
 pyuno/source/module/pyuno.cxx          |  9 ++++++++-
 pyuno/source/module/pyuno_callable.cxx |  9 ++++++++-
 pyuno/source/module/pyuno_iterator.cxx | 18 ++++++++++++++++--
 pyuno/source/module/pyuno_runtime.cxx  |  9 ++++++++-
 pyuno/source/module/pyuno_struct.cxx   |  9 ++++++++-
 5 files changed, 48 insertions(+), 6 deletions(-)

diff --git a/pyuno/source/module/pyuno.cxx b/pyuno/source/module/pyuno.cxx
index f5f23bf058fa..e59319030eb8 100644
--- a/pyuno/source/module/pyuno.cxx
+++ b/pyuno/source/module/pyuno.cxx
@@ -1636,7 +1636,11 @@ static PyTypeObject PyUNOType =
     sizeof (PyUNO),
     0,
     PyUNO_del,
-    nullptr,
+#if PY_VERSION_HEX >= 0x03080000
+    0, // Py_ssize_t tp_vectorcall_offset
+#else
+    nullptr, // printfunc tp_print
+#endif
     PyUNO_getattr,
     PyUNO_setattr,
     /* this type does not exist in Python 3: (cmpfunc) */ nullptr,
@@ -1680,6 +1684,9 @@ static PyTypeObject PyUNOType =
     , 0
 #if PY_VERSION_HEX >= 0x03040000
     , nullptr
+#if PY_VERSION_HEX >= 0x03080000
+    , nullptr // vectorcallfunc tp_vectorcall
+#endif
 #endif
 };
 
diff --git a/pyuno/source/module/pyuno_callable.cxx b/pyuno/source/module/pyuno_callable.cxx
index 6519d20734c9..656d1c84cb0e 100644
--- a/pyuno/source/module/pyuno_callable.cxx
+++ b/pyuno/source/module/pyuno_callable.cxx
@@ -181,7 +181,11 @@ static PyTypeObject PyUNO_callable_Type =
     sizeof (PyUNO_callable),
     0,
     ::pyuno::PyUNO_callable_del,
-    nullptr,
+#if PY_VERSION_HEX >= 0x03080000
+    0, // Py_ssize_t tp_vectorcall_offset
+#else
+    nullptr, // printfunc tp_print
+#endif
     nullptr,
     nullptr,
     nullptr,
@@ -225,6 +229,9 @@ static PyTypeObject PyUNO_callable_Type =
     , 0
 #if PY_VERSION_HEX >= 0x03040000
     , nullptr
+#if PY_VERSION_HEX >= 0x03080000
+    , nullptr // vectorcallfunc tp_vectorcall
+#endif
 #endif
 };
 
diff --git a/pyuno/source/module/pyuno_iterator.cxx b/pyuno/source/module/pyuno_iterator.cxx
index 5f643c13b67e..a7862857d719 100644
--- a/pyuno/source/module/pyuno_iterator.cxx
+++ b/pyuno/source/module/pyuno_iterator.cxx
@@ -118,7 +118,11 @@ static PyTypeObject PyUNO_iterator_Type =
     sizeof (PyUNO_iterator),
     0,
     PyUNO_iterator_del,
-    nullptr,
+#if PY_VERSION_HEX >= 0x03080000
+    0, // Py_ssize_t tp_vectorcall_offset
+#else
+    nullptr, // printfunc tp_print
+#endif
     nullptr,
     nullptr,
     nullptr,
@@ -162,6 +166,9 @@ static PyTypeObject PyUNO_iterator_Type =
     0
 #if PY_VERSION_HEX >= 0x03040000
     , nullptr
+#if PY_VERSION_HEX >= 0x03080000
+    , nullptr // vectorcallfunc tp_vectorcall
+#endif
 #endif
 };
 
@@ -248,7 +255,11 @@ static PyTypeObject PyUNO_list_iterator_Type =
     sizeof (PyUNO_list_iterator),
      0,
     PyUNO_list_iterator_del,
-    nullptr,
+#if PY_VERSION_HEX >= 0x03080000
+    0, // Py_ssize_t tp_vectorcall_offset
+#else
+    nullptr, // printfunc tp_print
+#endif
     nullptr,
     nullptr,
     nullptr,
@@ -292,6 +303,9 @@ static PyTypeObject PyUNO_list_iterator_Type =
     0
 #if PY_VERSION_HEX >= 0x03040000
     , nullptr
+#if PY_VERSION_HEX >= 0x03080000
+    , nullptr // vectorcallfunc tp_vectorcall
+#endif
 #endif
 };
 
diff --git a/pyuno/source/module/pyuno_runtime.cxx b/pyuno/source/module/pyuno_runtime.cxx
index 9887c1fbc828..d307f9af363c 100644
--- a/pyuno/source/module/pyuno_runtime.cxx
+++ b/pyuno/source/module/pyuno_runtime.cxx
@@ -75,7 +75,11 @@ static PyTypeObject RuntimeImpl_Type =
     sizeof (RuntimeImpl),
     0,
     RuntimeImpl::del,
-    nullptr,
+#if PY_VERSION_HEX >= 0x03080000
+    0, // Py_ssize_t tp_vectorcall_offset
+#else
+    nullptr, // printfunc tp_print
+#endif
     nullptr,
     nullptr,
     nullptr,
@@ -119,6 +123,9 @@ static PyTypeObject RuntimeImpl_Type =
     , 0
 #if PY_VERSION_HEX >= 0x03040000
     , nullptr
+#if PY_VERSION_HEX >= 0x03080000
+    , nullptr // vectorcallfunc tp_vectorcall
+#endif
 #endif
 };
 
diff --git a/pyuno/source/module/pyuno_struct.cxx b/pyuno/source/module/pyuno_struct.cxx
index 7088fc346145..9ad9439318ce 100644
--- a/pyuno/source/module/pyuno_struct.cxx
+++ b/pyuno/source/module/pyuno_struct.cxx
@@ -296,7 +296,11 @@ static PyTypeObject PyUNOStructType =
     sizeof (PyUNO),
     0,
     PyUNOStruct_del,
-    nullptr,
+#if PY_VERSION_HEX >= 0x03080000
+    0, // Py_ssize_t tp_vectorcall_offset
+#else
+    nullptr, // printfunc tp_print
+#endif
     PyUNOStruct_getattr,
     PyUNOStruct_setattr,
     /* this type does not exist in Python 3: (cmpfunc) */ nullptr,
@@ -340,6 +344,9 @@ static PyTypeObject PyUNOStructType =
     , 0
 #if PY_VERSION_HEX >= 0x03040000
     , nullptr
+#if PY_VERSION_HEX >= 0x03080000
+    , nullptr // vectorcallfunc tp_vectorcall
+#endif
 #endif
 };
 
diff --git a/configure.ac b/configure.ac
index 77cbacb109b6..39dd082b8366 100644
--- a/configure.ac
+++ b/configure.ac
@@ -8574,6 +8574,9 @@ if test $enable_python = system; then
         if test -z "$PKG_CONFIG"; then
             PYTHON_CFLAGS="-I$python_include"
             PYTHON_LIBS="-L$python_libdir -lpython$python_version $python_libs"
+        elif $PKG_CONFIG --exists python-$python_version-embed; then
+            PYTHON_CFLAGS="`$PKG_CONFIG --cflags python-$python_version-embed`"
+            PYTHON_LIBS="`$PKG_CONFIG --libs python-$python_version-embed` $python_libs"
         elif $PKG_CONFIG --exists python-$python_version; then
             PYTHON_CFLAGS="`$PKG_CONFIG --cflags python-$python_version`"
             PYTHON_LIBS="`$PKG_CONFIG --libs python-$python_version` $python_libs"