protot/3rdparty/rbdl/src/rbdl_version.cc

92 lines
3.2 KiB
C++

/*
* RBDL - Rigid Body Dynamics Library
* Copyright (c) 2011-2016 Martin Felis <martin@fysx.org>
*
* Licensed under the zlib license. See LICENSE for more details.
*/
#include <rbdl/rbdl_config.h>
#include <iostream>
#include <sstream>
#include <string>
#include <cstdlib>
RBDL_DLLAPI int rbdl_get_api_version() {
static int compile_version = RBDL_API_VERSION;
return compile_version;
}
RBDL_DLLAPI void rbdl_check_api_version(int version) {
int compile_version = rbdl_get_api_version();
int compile_major = (compile_version & 0xff0000) >> 16;
int compile_minor = (compile_version & 0x00ff00) >> 8;
int compile_patch = (compile_version & 0x0000ff);
std::ostringstream compile_version_string("");
compile_version_string << compile_major << "." << compile_minor << "." << compile_patch;
int version_major = (version & 0xff0000) >> 16;
int version_minor = (version & 0x00ff00) >> 8;
int version_patch = (version & 0x0000ff);
std::ostringstream link_version_string ("");
link_version_string << version_major << "." << version_minor << "." << version_patch;
if (version_major != compile_major) {
std::cerr << "Error: trying to link against an incompatible RBDL library." << std::endl;
std::cerr << "The library version is: " << compile_version_string.str() << " but rbdl_config.h is version " << link_version_string.str() << std::endl;
abort();
} else if (version_minor != compile_minor) {
std::cout << "Warning: RBDL library is of version " << compile_version_string.str() << " but rbdl_config.h is from version " << link_version_string.str() << std::endl;
}
}
RBDL_DLLAPI void rbdl_print_version() {
int compile_version = rbdl_get_api_version();
int compile_major = (compile_version & 0xff0000) >> 16;
int compile_minor = (compile_version & 0x00ff00) >> 8;
int compile_patch = (compile_version & 0x0000ff);
std::ostringstream compile_version_string("");
compile_version_string << compile_major << "." << compile_minor << "." << compile_patch;
std::cout << "RBDL version:" << std::endl
<< " API version : " << compile_version_string.str() << std::endl;
if (std::string("unknown") != RBDL_BUILD_REVISION) {
std::cout << " revision : " << RBDL_BUILD_REVISION
<< " (branch: " << RBDL_BUILD_BRANCH << ")" << std::endl
<< " build type : " << RBDL_BUILD_TYPE << std::endl;
}
#ifdef RBDL_ENABLE_LOGGING
std::cout << " logging : on (warning: reduces performance!)" << std::endl;
#else
std::cout << " logging : off" << std::endl;
#endif
#ifdef RBDL_USE_SIMPLE_MATH
std::cout << " simplemath : on (warning: reduces performance!)" << std::endl;
#else
std::cout << " simplemath : off" << std::endl;
#endif
#ifdef RBDL_BUILD_ADDON_LUAMODEL
std::cout << " LuaModel : on" << std::endl;
#else
std::cout << " LuaModel : off" << std::endl;
#endif
#ifdef RBDL_BUILD_ADDON_URDFREADER
std::cout << " URDFReader : on" << std::endl;
#else
std::cout << " URDFReader : off" << std::endl;
#endif
std::string build_revision (RBDL_BUILD_REVISION);
if (build_revision == "unknown") {
std::cout << std::endl << "Version information incomplete: to enable version information re-build" << std::endl << "library from valid repository and enable RBDL_STORE_VERSION." << std::endl;
}
}