From 304bb4c36d481dc1fea0560a7500770f5143321d Mon Sep 17 00:00:00 2001
From: Andre Anjos <andre.dos.anjos@gmail.com>
Date: Tue, 21 Jan 2014 18:36:25 +0100
Subject: [PATCH] Python 3 compatibility

---
 xbob/measure/main.cpp | 30 +++++++++++++++++++++++++++---
 1 file changed, 27 insertions(+), 3 deletions(-)

diff --git a/xbob/measure/main.cpp b/xbob/measure/main.cpp
index e1cf79d..bcedb33 100644
--- a/xbob/measure/main.cpp
+++ b/xbob/measure/main.cpp
@@ -954,7 +954,7 @@ static PyObject* roc_for_far(PyObject*, PyObject* args, PyObject* kwds) {
 
 }
 
-static PyMethodDef library_methods[] = {
+static PyMethodDef module_methods[] = {
     {
       s_epc_str,
       (PyCFunction)epc,
@@ -1072,10 +1072,30 @@ static PyMethodDef library_methods[] = {
     {0}  /* Sentinel */
 };
 
+PyDoc_STRVAR(module_docstr, "Bob metrics and performance figures");
+
+#if PY_VERSION_HEX >= 0x03000000
+static PyModuleDef module_definition = {
+  PyModuleDef_HEAD_INIT,
+  XBOB_EXT_MODULE_NAME,
+  module_docstr,
+  -1,
+  module_methods, 
+  0, 0, 0, 0
+};
+#endif
+
 PyMODINIT_FUNC XBOB_EXT_ENTRY_NAME (void) {
 
-  PyObject* m = Py_InitModule3(XBOB_EXT_MODULE_NAME,
-      library_methods, "bob::measure bindings");
+# if PY_VERSION_HEX >= 0x03000000
+  PyObject* m = PyModule_Create(&module_definition);
+  if (!m) return 0;
+# else
+  PyObject* m = Py_InitModule3(XBOB_EXT_MODULE_NAME, 
+      module_methods, module_docstr);
+  if (!m) return;
+# endif
+
   PyModule_AddStringConstant(m, "__version__", XBOB_EXT_MODULE_VERSION);
 
   /* imports the NumPy C-API */
@@ -1084,4 +1104,8 @@ PyMODINIT_FUNC XBOB_EXT_ENTRY_NAME (void) {
   /* imports xbob.blitz C-API */
   import_xbob_blitz();
 
+# if PY_VERSION_HEX >= 0x03000000
+  return m;
+# endif
+
 }
-- 
GitLab