From 3c4e640ddefd4feec1d35d876b6562717cfd9948 Mon Sep 17 00:00:00 2001
From: Andre Anjos <andre.dos.anjos@gmail.com>
Date: Sun, 23 Mar 2014 14:17:46 +0100
Subject: [PATCH] Include xbob.blitz C-API, Blitz++ and NumPy versions

---
 xbob/measure/version.cpp | 52 +++++++++++++++++++++++++---------------
 1 file changed, 33 insertions(+), 19 deletions(-)

diff --git a/xbob/measure/version.cpp b/xbob/measure/version.cpp
index 99ecb83..49ca8dd 100644
--- a/xbob/measure/version.cpp
+++ b/xbob/measure/version.cpp
@@ -22,6 +22,15 @@
 #include <xbob.blitz/capi.h>
 #include <xbob.blitz/cleanup.h>
 
+static int dict_set(PyObject* d, const char* key, const char* value) {
+  PyObject* v = Py_BuildValue("s", value);
+  if (!v) return 0;
+  int retval = PyDict_SetItemString(d, key, v);
+  Py_DECREF(v);
+  if (retval == 0) return 1; //all good
+  return 0; //a problem occurred
+}
+
 static int dict_steal(PyObject* d, const char* key, PyObject* value) {
   if (!value) return 0;
   int retval = PyDict_SetItemString(d, key, value);
@@ -78,31 +87,36 @@ static PyObject* bob_version() {
   return Py_BuildValue("sis", BOB_VERSION, BOB_API_VERSION, BOB_PLATFORM);
 }
 
+/**
+ * Numpy version
+ */
+static PyObject* numpy_version() {
+  return Py_BuildValue("{ssss}", "abi", BOOST_PP_STRINGIZE(NPY_VERSION),
+      "api", BOOST_PP_STRINGIZE(NPY_API_VERSION));
+}
+
+/**
+ * xbob.blitz c/c++ api version
+ */
+static PyObject* xbob_blitz_version() {
+  return Py_BuildValue("{ss}", "api", BOOST_PP_STRINGIZE(XBOB_BLITZ_API_VERSION));
+}
+
 static PyObject* build_version_dictionary() {
 
   PyObject* retval = PyDict_New();
   if (!retval) return 0;
+  auto retval_ = make_safe(retval);
 
-  if (!dict_steal(retval, "Boost", boost_version())) {
-    Py_DECREF(retval);
-    return 0;
-  }
-
-  if (!dict_steal(retval, "Compiler", compiler_version())) {
-    Py_DECREF(retval);
-    return 0;
-  }
-
-  if (!dict_steal(retval, "Python", python_version())) {
-    Py_DECREF(retval);
-    return 0;
-  }
-
-  if (!dict_steal(retval, "Bob", bob_version())) {
-    Py_DECREF(retval);
-    return 0;
-  }
+  if (!dict_set(retval, "Blitz++", BZ_VERSION)) return 0;
+  if (!dict_steal(retval, "Boost", boost_version())) return 0;
+  if (!dict_steal(retval, "Compiler", compiler_version())) return 0;
+  if (!dict_steal(retval, "Python", python_version())) return 0;
+  if (!dict_steal(retval, "NumPy", numpy_version())) return 0;
+  if (!dict_steal(retval, "xbob.blitz", xbob_blitz_version())) return 0;
+  if (!dict_steal(retval, "Bob", bob_version())) return 0;
 
+  Py_INCREF(retval);
   return retval;
 }
 
-- 
GitLab