icedb  version 0.5.1
Snow particle scattering database API
versioning.cpp
Go to the documentation of this file.
1 #include "../icedb/versioning/versioning.hpp"
2 #include "../icedb/util.h"
3 #include <sstream>
4 namespace icedb {
5  namespace versioning {
6  namespace internal {
8  }
10  {
12  if (!a || !b) return res;
13 
14 #define tryNum(x) if (a->vn[versionInfo:: x] != b->vn[versionInfo:: x]) return res;
15 #define tryBool(x) if (a->vb[versionInfo:: x] != b->vb[versionInfo:: x]) return res;
16 #define tryStr(x) if (std::strncmp(a-> x, b-> x, versionInfo::charmax ) != 0) return res;
17 #define tryNumB(x) if ((a->vn[versionInfo:: x] != b->vn[versionInfo:: x]) && a->vn[versionInfo:: x]) return res;
18  // First filter the incompatible stuff
19  tryNum(V_VERSIONINFO);
20  tryStr(vassembly);
21  tryNum(V_MAJOR);
22  tryNum(V_MINOR);
23  tryBool(V_AMD64);
24  tryBool(V_X64);
25  tryBool(V_UNIX);
26  tryBool(V_APPLE);
27  tryBool(V_WIN32);
28  tryStr(vboost);
29  tryNum(V_MSCVER);
30 
32  tryNumB(V_GNUC_MAJ);
33  tryNumB(V_MINGW_MAJ);
34  tryNumB(V_SUNPRO);
35  tryNumB(V_PATHCC_MAJ);
36  tryNumB(V_CLANG_MAJ);
37  tryNumB(V_INTEL);
38 
40  tryNumB(V_GNUC_MIN);
41  tryNumB(V_MINGW_MIN);
42  tryNumB(V_PATHCC_MIN);
43  tryNumB(V_CLANG_MIN);
44  tryNum(V_REVISION);
45 
47  tryBool(V_OPENMP);
48  tryNum(V_SVNREVISION);
49  tryStr(vgithash);
50 
52  return res;
53 #undef tryNum
54 #undef tryBool
55 #undef tryStr
56 #undef tryNumB
57  }
58 
60  {
61  genVersionInfo(out);
62  }
63 
65  {
67  std::shared_ptr<versionInfo> vi(new versionInfo);
68  getLibVersionInfo(*(vi.get()));
69  internal::ver_int = vi;
70  return internal::ver_int;
71  }
72  }
73 }
74 
75 
77 
78 void ICEDB_VersionInfo_Free(ICEDB_VersionInfo_p p) { if (p) delete p; }
79 
83  return res;
84 }
85 
87  if (p->vstr.size()) return p->vstr.c_str();
88  std::ostringstream out;
89  icedb::versioning::debug_preamble(*(p->p.get()), out);
90  p->vstr = out.str();
91  return p->vstr.c_str();
92 }
93 char* ICEDB_WriteLibVersionInfoC(ICEDB_VersionInfo_p p, char* buf, size_t sz) {
95  ICEDB_COMPAT_strncpy_s(buf, sz, p->vstr.c_str(), p->vstr.size());
96  return buf;
97 }
99  return icedb::versioning::compareVersions(a->p, b->p);
100 }
101 
icedb::versioning::versionInfo_p p
Definition: versioning.hpp:20
void genVersionInfo(versionInfo &out)
Calculates version string based on compile-time version of external code.
Definition: versioning.hpp:27
std::string vstr
Definition: versioning.hpp:21
#define ICEDB_BEGIN_DECL_C
Definition: defs.h:20
ICEDB_ver_match compareVersions(const versionInfo_p a, const versionInfo_p b)
Definition: versioning.cpp:9
ICEDB_VersionInfo_p ICEDB_getLibVersionInfo()
Definition: versioning.cpp:80
#define tryNum(x)
#define tryBool(x)
#define ICEDB_END_DECL_C
Definition: defs.h:21
void getLibVersionInfo(versionInfo &out)
Definition: versioning.cpp:59
ICEDB_BEGIN_DECL_C ICEDB_SYMBOL_SHARED size_t ICEDB_COMPAT_strncpy_s(char *dest, size_t destSz, const char *src, size_t srcSz)
Definition: util.cpp:14
#define tryNumB(x)
ICEDB_ver_match ICEDB_CompareVersions(const ICEDB_VersionInfo_p a, const ICEDB_VersionInfo_p b)
Definition: versioning.cpp:98
const char * ICEDB_WriteLibVersionInfoCC(ICEDB_VersionInfo_p p)
Definition: versioning.cpp:86
#define tryStr(x)
std::shared_ptr< const versionInfo > versionInfo_p
ICEDB_ver_match
ICEDB_BEGIN_DECL_C void ICEDB_VersionInfo_Free(ICEDB_VersionInfo_p p)
Definition: versioning.cpp:78
void debug_preamble(const versionInfo &v, std::ostream &out=std::cerr)
Provides information about the build environment during compilation.
Definition: versioning.hpp:116
char * ICEDB_WriteLibVersionInfoC(ICEDB_VersionInfo_p p, char *buf, size_t sz)
Definition: versioning.cpp:93