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()32 inline 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()38 inline 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()76 inline 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()88 inline 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