Skip to content
Snippets Groups Projects
Commit 27874dee authored by Manuel Günther's avatar Manuel Günther
Browse files

Applied new versioning system

parent 05567d53
No related branches found
No related tags found
No related merge requests found
...@@ -11,4 +11,33 @@ ...@@ -11,4 +11,33 @@
/* Macros that define versions and important names */ /* Macros that define versions and important names */
#define BOB_LEARN_LIBSVM_API_VERSION 0x0200 #define BOB_LEARN_LIBSVM_API_VERSION 0x0200
#ifdef BOB_IMPORT_VERSION
/***************************************
* Here we define some functions that should be used to build version dictionaries in the version.cpp file
* There will be a compiler warning, when these functions are not used, so use them!
***************************************/
#include <Python.h>
#include <boost/preprocessor/stringize.hpp>
#include <svm.h>
/**
* Describes the libsvm version
*/
static PyObject* get_libsvm_version() {
boost::format s("%d.%d");
s % (LIBSVM_VERSION / 100) % (LIBSVM_VERSION % 100);
return Py_BuildValue("s", s.str().c_str());
}
/**
* bob.learn.libsvm c/c++ api version
*/
static PyObject* bob_learn_libsvm_version() {
return Py_BuildValue("{ss}", "api", BOOST_PP_STRINGIZE(BOB_LEARN_LIBSVM_API_VERSION));
}
#endif // BOB_IMPORT_VERSION
#endif /* BOB_LEARN_LIBSVM_CONFIG_H */ #endif /* BOB_LEARN_LIBSVM_CONFIG_H */
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#endif #endif
#include <bob.blitz/capi.h> #include <bob.blitz/capi.h>
#include <bob.blitz/cleanup.h> #include <bob.blitz/cleanup.h>
#include <bob.core/api.h>
#include <bob.io.base/api.h> #include <bob.io.base/api.h>
static PyMethodDef module_methods[] = { static PyMethodDef module_methods[] = {
...@@ -131,17 +132,9 @@ static PyObject* create_module (void) { ...@@ -131,17 +132,9 @@ static PyObject* create_module (void) {
if (c_api_object) PyModule_AddObject(m, "_C_API", c_api_object); if (c_api_object) PyModule_AddObject(m, "_C_API", c_api_object);
/* imports dependencies */ /* imports dependencies */
if (import_bob_blitz() < 0) { if (import_bob_blitz() < 0) return 0;
PyErr_Print(); if (import_bob_core_logging() < 0) return 0;
PyErr_Format(PyExc_ImportError, "cannot import `%s'", BOB_EXT_MODULE_NAME); if (import_bob_io_base() < 0) return 0;
return 0;
}
if (import_bob_io_base() < 0) {
PyErr_Print();
PyErr_Format(PyExc_ImportError, "cannot import `%s'", BOB_EXT_MODULE_NAME);
return 0;
}
return Py_BuildValue("O", m); return Py_BuildValue("O", m);
} }
......
...@@ -5,140 +5,32 @@ ...@@ -5,140 +5,32 @@
* @brief Binds configuration information available from bob * @brief Binds configuration information available from bob
*/ */
#ifdef NO_IMPORT_ARRAY
#undef NO_IMPORT_ARRAY
#endif
#include <bob.blitz/capi.h>
#include <bob.blitz/cleanup.h>
#include <string>
#include <cstdlib>
#include <blitz/blitz.h>
#include <boost/preprocessor/stringize.hpp>
#include <boost/version.hpp>
#include <boost/format.hpp>
#include <svm.h>
#define BOB_IMPORT_VERSION
#include <bob.blitz/config.h>
#include <bob.blitz/cleanup.h>
#include <bob.core/config.h> #include <bob.core/config.h>
#include <bob.io.base/config.h> #include <bob.io.base/config.h>
#include <bob.learn.libsvm/config.h> #include <bob.learn.libsvm/config.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);
Py_DECREF(value);
if (retval == 0) return 1; //all good
return 0; //a problem occurred
}
/**
* Describes the libsvm version
*/
static PyObject* get_libsvm_version() {
boost::format s("%d.%d");
s % (LIBSVM_VERSION / 100);
s % (LIBSVM_VERSION % 100);
return Py_BuildValue("s", s.str().c_str());
}
/**
* Describes the version of Boost libraries installed
*/
static PyObject* boost_version() {
boost::format f("%d.%d.%d");
f % (BOOST_VERSION / 100000);
f % (BOOST_VERSION / 100 % 1000);
f % (BOOST_VERSION % 100);
return Py_BuildValue("s", f.str().c_str());
}
/**
* Describes the compiler version
*/
static PyObject* compiler_version() {
# if defined(__GNUC__) && !defined(__llvm__)
boost::format f("%s.%s.%s");
f % BOOST_PP_STRINGIZE(__GNUC__);
f % BOOST_PP_STRINGIZE(__GNUC_MINOR__);
f % BOOST_PP_STRINGIZE(__GNUC_PATCHLEVEL__);
return Py_BuildValue("ss", "gcc", f.str().c_str());
# elif defined(__llvm__) && !defined(__clang__)
return Py_BuildValue("ss", "llvm-gcc", __VERSION__);
# elif defined(__clang__)
return Py_BuildValue("ss", "clang", __clang_version__);
# else
return Py_BuildValue("s", "unsupported");
# endif
}
/**
* Python version with which we compiled the extensions
*/
static PyObject* python_version() {
boost::format f("%s.%s.%s");
f % BOOST_PP_STRINGIZE(PY_MAJOR_VERSION);
f % BOOST_PP_STRINGIZE(PY_MINOR_VERSION);
f % BOOST_PP_STRINGIZE(PY_MICRO_VERSION);
return Py_BuildValue("s", f.str().c_str());
}
/**
* Numpy version
*/
static PyObject* numpy_version() {
return Py_BuildValue("{ssss}", "abi", BOOST_PP_STRINGIZE(NPY_VERSION),
"api", BOOST_PP_STRINGIZE(NPY_API_VERSION));
}
/**
* bob.blitz c/c++ api version
*/
static PyObject* bob_blitz_version() {
return Py_BuildValue("{ss}", "api", BOOST_PP_STRINGIZE(BOB_BLITZ_API_VERSION));
}
/**
* bob.core c/c++ api version
*/
static PyObject* bob_core_version() {
return Py_BuildValue("{ss}", "api", BOOST_PP_STRINGIZE(BOB_CORE_API_VERSION));
}
/**
* bob.io.base c/c++ api version
*/
static PyObject* bob_io_base_version() {
return Py_BuildValue("{ss}", "api", BOOST_PP_STRINGIZE(BOB_IO_BASE_API_VERSION));
}
static PyObject* build_version_dictionary() { static PyObject* build_version_dictionary() {
PyObject* retval = PyDict_New(); PyObject* retval = PyDict_New();
if (!retval) return 0; if (!retval) return 0;
auto retval_ = make_safe(retval); auto retval_ = make_safe(retval);
if (!dict_set(retval, "Blitz++", BZ_VERSION)) return 0; if (!dict_steal(retval, "Blitz++", blitz_version())) return 0;
if (!dict_steal(retval, "LIBSVM", get_libsvm_version())) return 0; if (!dict_steal(retval, "LIBSVM", get_libsvm_version())) return 0;
if (!dict_steal(retval, "Boost", boost_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, "Compiler", compiler_version())) return 0;
if (!dict_steal(retval, "Python", python_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, "NumPy", numpy_version())) return 0;
if (!dict_steal(retval, "HDF5", hdf5_version())) return 0;
if (!dict_steal(retval, "bob.blitz", bob_blitz_version())) return 0; if (!dict_steal(retval, "bob.blitz", bob_blitz_version())) return 0;
if (!dict_steal(retval, "bob.core", bob_core_version())) return 0; if (!dict_steal(retval, "bob.core", bob_core_version())) return 0;
if (!dict_steal(retval, "bob.io.base", bob_io_base_version())) return 0; if (!dict_steal(retval, "bob.io.base", bob_io_base_version())) return 0;
Py_INCREF(retval); return Py_BuildValue("O", retval);
return retval;
} }
static PyMethodDef module_methods[] = { static PyMethodDef module_methods[] = {
...@@ -178,15 +70,10 @@ static PyObject* create_module (void) { ...@@ -178,15 +70,10 @@ static PyObject* create_module (void) {
if (!externals) return 0; if (!externals) return 0;
if (PyModule_AddObject(m, "externals", externals) < 0) return 0; if (PyModule_AddObject(m, "externals", externals) < 0) return 0;
/* imports dependencies */ // call bob_learn_libsvm_version once to avoid compiler warnings
if (import_bob_blitz() < 0) { auto _ = make_safe(bob_learn_libsvm_version());
PyErr_Print();
PyErr_Format(PyExc_ImportError, "cannot import `%s'", BOB_EXT_MODULE_NAME);
return 0;
}
return Py_BuildValue("O", m); return Py_BuildValue("O", m);
} }
PyMODINIT_FUNC BOB_EXT_ENTRY_NAME (void) { PyMODINIT_FUNC BOB_EXT_ENTRY_NAME (void) {
......
2.0.2b0 2.0.2b1
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment