1 /*************************************************************************** 2 * include/stxxl/bits/version.h 3 * 4 * Part of the STXXL. See http://stxxl.sourceforge.net 5 * 6 * Copyright (C) 2007, 2011 Andreas Beckmann <beckmann@cs.uni-frankfurt.de> 7 * Copyright (C) 2013 Timo Bingmann <tb@panthema.net> 8 * 9 * Distributed under the Boost Software License, Version 1.0. 10 * (See accompanying file LICENSE_1_0.txt or copy at 11 * http://www.boost.org/LICENSE_1_0.txt) 12 **************************************************************************/ 13 14 #ifndef STXXL_VERSION_HEADER 15 #define STXXL_VERSION_HEADER 16 17 #include <stxxl/bits/namespace.h> 18 #include <stxxl/bits/config.h> 19 #include <stxxl/bits/verbose.h> 20 21 STXXL_BEGIN_NAMESPACE 22 23 // STXXL_VERSION_{MAJOR,MINOR,PATCH} are defined in cmake generated config.h 24 25 // construct an integer version number, like "10400" for "1.4.0". 26 #define STXXL_VERSION_INTEGER (STXXL_VERSION_MAJOR* 10000 + STXXL_VERSION_MINOR* 100 + STXXL_VERSION_PATCH) 27 28 #define stringify_(x) #x 29 #define stringify(x) stringify_(x) 30 31 //! Return "X.Y.Z" version string (of headers) get_version_string()32inline const char * get_version_string() 33 { 34 return STXXL_VERSION_STRING; 35 } 36 37 //! Return longer "X.Y.Z (feature) (version)" version string (of headers) get_version_string_long()38inline const char * get_version_string_long() 39 { 40 return "STXXL" 41 " v" STXXL_VERSION_STRING 42 #ifdef STXXL_VERSION_PHASE 43 " (" STXXL_VERSION_PHASE ")" 44 #endif 45 #ifdef STXXL_VERSION_GIT_SHA1 46 " (git " STXXL_VERSION_GIT_SHA1 ")" 47 #endif // STXXL_VERSION_GIT_SHA1 48 #if STXXL_PARALLEL 49 " + gnu parallel(" stringify(__GLIBCXX__) ")" 50 #endif // STXXL_PARALLEL 51 #if STXXL_BOOST_CONFIG 52 " + Boost " stringify(BOOST_VERSION) 53 #endif 54 ; 55 } 56 57 #undef stringify 58 #undef stringify_ 59 60 //! return X if the STXXL library version is X.Y.Z 61 int version_major(); 62 //! return Y if the STXXL library version is X.Y.Z 63 int version_minor(); 64 //! return Z if the STXXL library version is X.Y.Z 65 int version_patch(); 66 //! return integer version number of the STXXL library 67 int version_integer(); 68 69 //! returns "X.Y.Z" version string of library 70 const char * get_library_version_string(); 71 72 //! returns longer "X.Y.Z (feature) (version)" string of library 73 const char * get_library_version_string_long(); 74 75 //! Check for a mismatch between library and headers check_library_version()76inline int check_library_version() 77 { 78 if (version_major() != STXXL_VERSION_MAJOR) 79 return 1; 80 if (version_minor() != STXXL_VERSION_MINOR) 81 return 2; 82 if (version_patch() != STXXL_VERSION_PATCH) 83 return 3; 84 return 0; 85 } 86 87 //! Check and print mismatch between header and library versions print_library_version_mismatch()88inline void print_library_version_mismatch() 89 { 90 if (stxxl::check_library_version() != 0) 91 { 92 STXXL_ERRMSG("version mismatch between headers" << 93 " (" << STXXL_VERSION_STRING ") and library" << 94 " (" << get_library_version_string() << ")"); 95 } 96 } 97 98 STXXL_END_NAMESPACE 99 100 #endif // !STXXL_VERSION_HEADER 101