diff --git a/bob/io/image/include/bob.io.image/config.h b/bob/io/image/include/bob.io.image/config.h new file mode 100644 index 0000000000000000000000000000000000000000..2a77273f3e40851a4e7ebda2cf2ba5695c9c59b8 --- /dev/null +++ b/bob/io/image/include/bob.io.image/config.h @@ -0,0 +1,112 @@ +/** + * @author Manuel Gunther <siebenkopf@googlemail.com> + * @date Mon May 23 09:58:35 MDT 2016 + * + * @brief General directives for all modules in bob.io.image + */ + +#ifndef BOB_IO_IMAGE_CONFIG_H +#define BOB_IO_IMAGE_CONFIG_H + +/* Macros that define versions and important names */ +#define BOB_IO_IMAGE_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> + +#ifdef HAVE_LIBJPEG + #include <jpeglib.h> +#endif + +#ifdef HAVE_LIBPNG + #define PNG_SKIP_SETJMP_CHECK + // #define requires because of the problematic pngconf.h. + // Look at the thread here: + // https://bugs.launchpad.net/ubuntu/+source/libpng/+bug/218409 + #include <png.h> +#endif + +#ifdef HAVE_GIFLIB + #include <gif_lib.h> +#endif + +#ifdef HAVE_LIBTIFF + #include <tiffio.h> +#endif + + /** + * LibJPEG version + */ +#ifdef HAVE_LIBJPEG + static PyObject* libjpeg_version() { + boost::format f("%d (compiled with %d bits depth)"); + f % LIBJPEG_VERSION % BITS_IN_JSAMPLE; + return Py_BuildValue("s", f.str().c_str()); + } +#endif + + /** + * Libpng version + */ +#ifdef HAVE_LIBPNG + static PyObject* libpng_version() { + return Py_BuildValue("s", PNG_LIBPNG_VER_STRING); + } +#endif + + /** + * Libtiff version + */ +#ifdef HAVE_LIBTIFF + static PyObject* libtiff_version() { + static const std::string beg_str("LIBTIFF, Version "); + static const size_t beg_len = beg_str.size(); + std::string vtiff(TIFFGetVersion()); + + // Remove first part if it starts with "LIBTIFF, Version " + if(vtiff.compare(0, beg_len, beg_str) == 0) + vtiff = vtiff.substr(beg_len); + + // Remove multiple (copyright) lines if any + size_t end_line = vtiff.find("\n"); + if(end_line != std::string::npos) + vtiff = vtiff.substr(0,end_line); + + return Py_BuildValue("s", vtiff.c_str()); + } +#endif + + /** + * Version of giflib support + */ +#ifdef HAVE_GIFLIB + static PyObject* giflib_version() { + #ifdef GIF_LIB_VERSION + return Py_BuildValue("s", GIF_LIB_VERSION); + #else + boost::format f("%s.%s.%s"); + f % BOOST_PP_STRINGIZE(GIFLIB_MAJOR) % BOOST_PP_STRINGIZE(GIFLIB_MINOR) % BOOST_PP_STRINGIZE(GIFLIB_RELEASE); + return Py_BuildValue("s", f.str().c_str()); + #endif + } +#endif + + /** + * bob.io.image c/c++ api version + */ + static PyObject* bob_io_image_version() { + return Py_BuildValue("{ss}", "api", BOOST_PP_STRINGIZE(BOB_IO_IMAGE_API_VERSION)); + } + +#endif // BOB_IMPORT_VERSION + + +#endif /* BOB_IO_IMAGE_CONFIG_H */ diff --git a/bob/io/image/version.cpp b/bob/io/image/version.cpp index d7c9cd6820a5fed6d4f0061d6b8b63122d18d3f3..f32ad706c5a4058252e9b74698f2c0cf3fd16420 100644 --- a/bob/io/image/version.cpp +++ b/bob/io/image/version.cpp @@ -1,5 +1,6 @@ /** * @author Andre Anjos <andre.anjos@idiap.ch> + * @author Manuel Gunther <siebenkopf@googlemail.com> * @date Wed 14 May 14:00:33 2014 CEST * * @brief Binds configuration information available from bob @@ -10,81 +11,28 @@ #include <bob.blitz/cleanup.h> #include <bob.core/config.h> #include <bob.io.base/config.h> +#include <bob.io.image/config.h> #include <boost/preprocessor/stringize.hpp> -extern "C" { - #include <jpeglib.h> - - #define PNG_SKIP_SETJMP_CHECK - // #define requires because of the problematic pngconf.h. - // Look at the thread here: - // https://bugs.launchpad.net/ubuntu/+source/libpng/+bug/218409 - #include <png.h> - #include <gif_lib.h> - #include <tiffio.h> -} - -/** - * LibJPEG version - */ -static PyObject* libjpeg_version() { - boost::format f("%d (compiled with %d bits depth)"); - f % LIBJPEG_VERSION % BITS_IN_JSAMPLE; - return Py_BuildValue("s", f.str().c_str()); -} - -/** - * Libpng version - */ -static PyObject* libpng_version() { - return Py_BuildValue("s", PNG_LIBPNG_VER_STRING); -} - -/** - * Libtiff version - */ -static PyObject* libtiff_version() { - static const std::string beg_str("LIBTIFF, Version "); - static const size_t beg_len = beg_str.size(); - std::string vtiff(TIFFGetVersion()); - - // Remove first part if it starts with "LIBTIFF, Version " - if(vtiff.compare(0, beg_len, beg_str) == 0) - vtiff = vtiff.substr(beg_len); - - // Remove multiple (copyright) lines if any - size_t end_line = vtiff.find("\n"); - if(end_line != std::string::npos) - vtiff = vtiff.substr(0,end_line); - - return Py_BuildValue("s", vtiff.c_str()); -} - -/** - * Version of giflib support - */ -static PyObject* giflib_version() { -#ifdef GIF_LIB_VERSION - return Py_BuildValue("s", GIF_LIB_VERSION); -#else - boost::format f("%s.%s.%s"); - f % BOOST_PP_STRINGIZE(GIFLIB_MAJOR) % BOOST_PP_STRINGIZE(GIFLIB_MINOR) % BOOST_PP_STRINGIZE(GIFLIB_RELEASE); - return Py_BuildValue("s", f.str().c_str()); -#endif -} - - static PyObject* build_version_dictionary() { PyObject* retval = PyDict_New(); if (!retval) return 0; auto retval_ = make_safe(retval); +#ifdef HAVE_LIBJPEG if (!dict_steal(retval, "libjpeg", libjpeg_version())) return 0; +#endif +#ifdef HAVE_LIBPNG if (!dict_steal(retval, "libpng", libpng_version())) return 0; +#endif +#ifdef HAVE_LIBTIFF if (!dict_steal(retval, "libtiff", libtiff_version())) return 0; +#endif +#ifdef HAVE_GIFLIB if (!dict_steal(retval, "giflib", giflib_version())) return 0; +#endif if (!dict_steal(retval, "HDF5", hdf5_version())) return 0; if (!dict_steal(retval, "Boost", boost_version())) return 0; if (!dict_steal(retval, "Compiler", compiler_version())) return 0; @@ -130,9 +78,13 @@ static PyObject* create_module (void) { if (!m) return 0; /* register version numbers and constants */ + if (PyModule_AddIntConstant(m, "api", BOB_IO_IMAGE_API_VERSION) < 0) return 0; if (PyModule_AddStringConstant(m, "module", BOB_EXT_MODULE_VERSION) < 0) return 0; if (PyModule_AddObject(m, "externals", build_version_dictionary()) < 0) return 0; + // call bob_io_image_version once to avoid compiler warning + auto _ = make_safe(bob_io_image_version()); + return Py_BuildValue(ret, m); }