/** * @author Andre Anjos <andre.anjos@idiap.ch> * @date Thu 7 Nov 13:50:16 2013 * * @brief Binds configuration information available from bob */ #include <Python.h> #include "cleanup.h" #define XBOB_MACHINE_MODULE #include <xbob.machine/config.h> #include <bob/config.h> #include <boost/format.hpp> #if WITH_LIBSVM #include <svm.h> #endif static PyObject* get_libsvm_version() { #if WITH_LIBSVM boost::format s("%d.%d.%d"); s % (LIBSVM_VERSION / 100); s % ((LIBSVM_VERSION % 100) / 10); s % (LIBSVM_VERSION % 10); return Py_BuildValue("s", s.str().c_str()); #else return Py_BuildValue("s", "unavailable"); #endif } static PyObject* build_version_dictionary() { PyObject* retval = PyDict_New(); if (!retval) return 0; auto retval_ = make_safe(retval); PyObject* version_string = get_libsvm_version(); if (!version_string) return 0; auto version_string_ = make_safe(version_string); int status = PyDict_SetItemString(retval, "libsvm", version_string); if (status == 0) return 0; Py_INCREF(retval); return retval; } static PyMethodDef module_methods[] = { {0} /* Sentinel */ }; PyDoc_STRVAR(module_docstr, "Information about software used to compile the C++ Bob API" ); PyMODINIT_FUNC XBOB_EXT_ENTRY_NAME (void) { PyObject* m = Py_InitModule3(XBOB_EXT_MODULE_NAME, module_methods, module_docstr); /* register some constants */ PyModule_AddIntConstant(m, "__api_version__", XBOB_MACHINE_API_VERSION); PyModule_AddStringConstant(m, "__version__", XBOB_EXT_MODULE_VERSION); PyObject* dict = build_version_dictionary(); if (!dict) return; PyModule_AddObject(m, "versions", dict); }