From da01fa5cb39f5ea82e987dcce700634163a666be Mon Sep 17 00:00:00 2001 From: Andre Anjos <andre.dos.anjos@gmail.com> Date: Tue, 19 Nov 2013 17:13:02 +0100 Subject: [PATCH] Use technique for PyCapsule import that allows for namespaced packages --- xbob/io/include/xbob.io/api.h | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/xbob/io/include/xbob.io/api.h b/xbob/io/include/xbob.io/api.h index c37d6e4..4b5e5b4 100644 --- a/xbob/io/include/xbob.io/api.h +++ b/xbob/io/include/xbob.io/api.h @@ -274,18 +274,6 @@ typedef struct { */ static int import_xbob_io(void) { -#if PY_VERSION_HEX >= 0x02070000 - - /* New Python API support for library loading */ - - PyXbobIo_API = (void **)PyCapsule_Import(BOOST_PP_STRINGIZE(XBOB_IO_MODULE_PREFIX) "." BOOST_PP_STRINGIZE(XBOB_IO_MODULE_NAME) "._C_API", 0); - - if (!PyXbobIo_API) return -1; - -#else - - /* Old-style Python API support for library loading */ - PyObject *c_api_object; PyObject *module; @@ -300,15 +288,20 @@ typedef struct { return -1; } +# if PY_VERSION_HEX >= 0x02070000 + if (PyCapsule_CheckExact(c_api_object)) { + PyBlitzArray_API = (void **)PyCapsule_GetPointer(c_api_object, + PyCapsule_GetName(c_api_object)); + } +# else if (PyCObject_Check(c_api_object)) { - PyXbobIo_API = (void **)PyCObject_AsVoidPtr(c_api_object); + PyBlitzArray_API = (void **)PyCObject_AsVoidPtr(c_api_object); } +# endif Py_DECREF(c_api_object); Py_DECREF(module); -#endif - /* Checks that the imported version matches the compiled version */ int imported_version = *(int*)PyXbobIo_API[PyIo_APIVersion_NUM]; -- GitLab