File size: 2,861 Bytes
2e3030d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
// This file was generated by VersionString.cmake

#pragma once

#include <ostream>

constexpr const char kLibCIFPPProjectName[] = "libcifpp";
constexpr const char kLibCIFPPVersionNumber[] = "7.0.3";
constexpr int kLibCIFPPBuildNumber = 1233;
constexpr const char kLibCIFPPRevisionGitTag[] = "ac98531*";
constexpr const char kLibCIFPPRevisionDate[] = "2026-06-27T11:12:14Z";

#ifndef VERSION_INFO_DEFINED
#define VERSION_INFO_DEFINED 1

namespace version_info_v1_1
{

class version_info_base
{
  public:
	static void write_version_string(std::ostream &os, bool verbose)
	{
		auto s_main = registered_main();
		if (s_main != nullptr)
			s_main->write(os, verbose);

		if (verbose)
		{
			for (auto lib = registered_libraries(); lib != nullptr; lib = lib->m_next)
			{
				os << "-\n";
				lib->write(os, verbose);
			}
		}
	}

  protected:
	version_info_base(const char *name, const char *version, int build_number, const char *git_tag, const char *revision_date, bool is_main)
		: m_name(name)
		, m_version(version)
		, m_build_number(build_number)
		, m_git_tag(git_tag)
		, m_revision_date(revision_date)
	{
		if (is_main)
			registered_main() = this;
		else
		{
			auto &s_head = registered_libraries();
			m_next = s_head;
			s_head = this;
		}
	}

	void write(std::ostream &os, bool verbose)
	{
		os << m_name << " version " << m_version << '\n';

		if (verbose)
		{
			if (m_build_number != 0)
			{
				os << "build: " << m_build_number << ' ' << m_revision_date << '\n';
				if (m_git_tag[0] != 0)
					os << "git tag: " << m_git_tag << '\n';
			}
		}
	}

	using version_info_ptr = version_info_base *;

	static version_info_ptr &registered_main()
	{
		static version_info_ptr s_main = nullptr;
		return s_main;
	}

	static version_info_ptr &registered_libraries()
	{
		static version_info_ptr s_head = nullptr;
		return s_head;
	}

	const char *m_name;
	const char *m_version;
	int m_build_number;
	const char *m_git_tag;
	const char *m_revision_date;
	version_info_base *m_next = nullptr;
};

template <typename T>
class version_info : public version_info_base
{
  public:
	using implementation_type = T;

	version_info(const char *name, const char *version, int build_number, const char *git_tag, const char *revision_date, bool is_main)
		: version_info_base(name, version, build_number, git_tag, revision_date, is_main)
	{
	}
};

} // namespace version_info_v1_1

inline void write_version_string(std::ostream &os, bool verbose)
{
	version_info_v1_1::version_info_base::write_version_string(os, verbose);
}

#endif

const class version_info_LibCIFPP_impl : public version_info_v1_1::version_info<version_info_LibCIFPP_impl>
{
  public:
	version_info_LibCIFPP_impl()
		: version_info(kLibCIFPPProjectName, kLibCIFPPVersionNumber, kLibCIFPPBuildNumber, kLibCIFPPRevisionGitTag, kLibCIFPPRevisionDate, false)
	{
	}
} s_version_info_LibCIFPP_instance;