1a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// Copyright 2009 the V8 project authors. All rights reserved.
2b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// found in the LICENSE file.
4a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
5a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#ifndef V8_VERSION_H_
6a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#define V8_VERSION_H_
7a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
8958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier#include "src/base/functional.h"
9014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#include "src/vector.h"
10958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier
11a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blocknamespace v8 {
12a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blocknamespace internal {
13a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
14a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockclass Version {
15a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block public:
16a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  // Return the various version components.
17a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  static int GetMajor() { return major_; }
18a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  static int GetMinor() { return minor_; }
19a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  static int GetBuild() { return build_; }
20a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  static int GetPatch() { return patch_; }
21a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  static bool IsCandidate() { return candidate_; }
22958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier  static uint32_t Hash() {
23958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier    return static_cast<uint32_t>(
24958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier        base::hash_combine(major_, minor_, build_, patch_));
25958fae7ec3f466955f8e5b50fa5b8d38b9e91675Emily Bernier  }
26a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
27a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  // Calculate the V8 version string.
28a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  static void GetString(Vector<char> str);
29a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
30a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  // Calculate the SONAME for the V8 shared library.
31a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  static void GetSONAME(Vector<char> str);
32a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
3344f0eee88ff00398ff7f715fab053374d808c90dSteve Block  static const char* GetVersion() { return version_string_; }
3444f0eee88ff00398ff7f715fab053374d808c90dSteve Block
35a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block private:
3644f0eee88ff00398ff7f715fab053374d808c90dSteve Block  // NOTE: can't make these really const because of test-version.cc.
37a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  static int major_;
38a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  static int minor_;
39a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  static int build_;
40a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  static int patch_;
41a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  static bool candidate_;
42a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  static const char* soname_;
4344f0eee88ff00398ff7f715fab053374d808c90dSteve Block  static const char* version_string_;
44a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
45a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  // In test-version.cc.
46a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  friend void SetVersion(int major, int minor, int build, int patch,
47a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block                         bool candidate, const char* soname);
48a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block};
49a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
50014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch}  // namespace internal
51014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch}  // namespace v8
52a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
53a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#endif  // V8_VERSION_H_
54