1// Copyright 2009 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef V8_VERSION_H_
6#define V8_VERSION_H_
7
8#include <cstdint>
9
10#include "src/base/functional.h"
11
12namespace v8 {
13namespace internal {
14
15template <typename T>
16class Vector;
17
18class V8_EXPORT Version {
19 public:
20 // Return the various version components.
21 static int GetMajor() { return major_; }
22 static int GetMinor() { return minor_; }
23 static int GetBuild() { return build_; }
24 static int GetPatch() { return patch_; }
25 static const char* GetEmbedder() { return embedder_; }
26 static bool IsCandidate() { return candidate_; }
27 static uint32_t Hash() {
28 return static_cast<uint32_t>(
29 base::hash_combine(major_, minor_, build_, patch_));
30 }
31
32 // Calculate the V8 version string.
33 static void GetString(Vector<char> str);
34
35 // Calculate the SONAME for the V8 shared library.
36 static void GetSONAME(Vector<char> str);
37
38 static const char* GetVersion() { return version_string_; }
39
40 private:
41 // NOTE: can't make these really const because of test-version.cc.
42 static int major_;
43 static int minor_;
44 static int build_;
45 static int patch_;
46 static const char* embedder_;
47 static bool candidate_;
48 static const char* soname_;
49 static const char* version_string_;
50
51 // In test-version.cc.
52 friend void SetVersion(int major, int minor, int build, int patch,
53 const char* embedder, bool candidate,
54 const char* soname);
55};
56
57} // namespace internal
58} // namespace v8
59
60#endif // V8_VERSION_H_
61