1692be65d6b06edd9ff4cfc4c308555b7c99c1191Ben Murdoch// Copyright 2012 the V8 project authors. All rights reserved.
2a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// Redistribution and use in source and binary forms, with or without
3a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// modification, are permitted provided that the following conditions are
4a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// met:
5a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block//
6a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block//     * Redistributions of source code must retain the above copyright
7a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block//       notice, this list of conditions and the following disclaimer.
8a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block//     * Redistributions in binary form must reproduce the above
9a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block//       copyright notice, this list of conditions and the following
10a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block//       disclaimer in the documentation and/or other materials provided
11a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block//       with the distribution.
12a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block//     * Neither the name of Google Inc. nor the names of its
13a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block//       contributors may be used to endorse or promote products derived
14a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block//       from this software without specific prior written permission.
15a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block//
16a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
28b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include "src/v8.h"
29a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
30b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include "src/version.h"
31a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
32a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// These macros define the version number for the current version.
33b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// NOTE these macros are used by some of the tool scripts and the build
34b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// system so their names cannot be changed without changing the scripts.
35b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#define MAJOR_VERSION     3
36b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#define MINOR_VERSION     29
37b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#define BUILD_NUMBER      88
3818a7ebb96c51b556b3e71ebdefae0b5c7639102fPaul Lind#define PATCH_LEVEL       18
3944f0eee88ff00398ff7f715fab053374d808c90dSteve Block// Use 1 for candidates and 0 otherwise.
4044f0eee88ff00398ff7f715fab053374d808c90dSteve Block// (Boolean macro values are not supported by all preprocessors.)
4144f0eee88ff00398ff7f715fab053374d808c90dSteve Block#define IS_CANDIDATE_VERSION 0
42a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
43b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Define SONAME to have the build system put a specific SONAME into the
44a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// shared library instead the generic SONAME generated from the V8 version
45b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// number. This define is mainly used by the build system script.
46a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block#define SONAME            ""
47a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
4844f0eee88ff00398ff7f715fab053374d808c90dSteve Block#if IS_CANDIDATE_VERSION
4944f0eee88ff00398ff7f715fab053374d808c90dSteve Block#define CANDIDATE_STRING " (candidate)"
5044f0eee88ff00398ff7f715fab053374d808c90dSteve Block#else
5144f0eee88ff00398ff7f715fab053374d808c90dSteve Block#define CANDIDATE_STRING ""
5244f0eee88ff00398ff7f715fab053374d808c90dSteve Block#endif
5344f0eee88ff00398ff7f715fab053374d808c90dSteve Block
5444f0eee88ff00398ff7f715fab053374d808c90dSteve Block#define SX(x) #x
5544f0eee88ff00398ff7f715fab053374d808c90dSteve Block#define S(x) SX(x)
5644f0eee88ff00398ff7f715fab053374d808c90dSteve Block
5744f0eee88ff00398ff7f715fab053374d808c90dSteve Block#if PATCH_LEVEL > 0
5844f0eee88ff00398ff7f715fab053374d808c90dSteve Block#define VERSION_STRING                                                         \
5944f0eee88ff00398ff7f715fab053374d808c90dSteve Block    S(MAJOR_VERSION) "." S(MINOR_VERSION) "." S(BUILD_NUMBER) "."              \
6044f0eee88ff00398ff7f715fab053374d808c90dSteve Block        S(PATCH_LEVEL) CANDIDATE_STRING
6144f0eee88ff00398ff7f715fab053374d808c90dSteve Block#else
6244f0eee88ff00398ff7f715fab053374d808c90dSteve Block#define VERSION_STRING                                                         \
6344f0eee88ff00398ff7f715fab053374d808c90dSteve Block    S(MAJOR_VERSION) "." S(MINOR_VERSION) "." S(BUILD_NUMBER)                  \
6444f0eee88ff00398ff7f715fab053374d808c90dSteve Block        CANDIDATE_STRING
6544f0eee88ff00398ff7f715fab053374d808c90dSteve Block#endif
6644f0eee88ff00398ff7f715fab053374d808c90dSteve Block
67a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blocknamespace v8 {
68a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blocknamespace internal {
69a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
70a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockint Version::major_ = MAJOR_VERSION;
71a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockint Version::minor_ = MINOR_VERSION;
72a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockint Version::build_ = BUILD_NUMBER;
73a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockint Version::patch_ = PATCH_LEVEL;
7444f0eee88ff00398ff7f715fab053374d808c90dSteve Blockbool Version::candidate_ = (IS_CANDIDATE_VERSION != 0);
75a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockconst char* Version::soname_ = SONAME;
7644f0eee88ff00398ff7f715fab053374d808c90dSteve Blockconst char* Version::version_string_ = VERSION_STRING;
77a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
78a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// Calculate the V8 version string.
79a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid Version::GetString(Vector<char> str) {
80a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  const char* candidate = IsCandidate() ? " (candidate)" : "";
81b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#ifdef USE_SIMULATOR
82b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch  const char* is_simulator = " SIMULATOR";
83b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#else
84b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch  const char* is_simulator = "";
85b0fe1620dcb4135ac3ab2d66ff93072373911299Ben Murdoch#endif  // USE_SIMULATOR
86a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  if (GetPatch() > 0) {
87b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch    SNPrintF(str, "%d.%d.%d.%d%s%s",
88b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch             GetMajor(), GetMinor(), GetBuild(), GetPatch(), candidate,
89b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch             is_simulator);
90a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  } else {
91b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch    SNPrintF(str, "%d.%d.%d%s%s",
92b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch             GetMajor(), GetMinor(), GetBuild(), candidate,
93b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch             is_simulator);
94a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  }
95a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block}
96a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
97a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
98a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block// Calculate the SONAME for the V8 shared library.
99a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Blockvoid Version::GetSONAME(Vector<char> str) {
100a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  if (soname_ == NULL || *soname_ == '\0') {
101a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    // Generate generic SONAME if no specific SONAME is defined.
102a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    const char* candidate = IsCandidate() ? "-candidate" : "";
103a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    if (GetPatch() > 0) {
104b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch      SNPrintF(str, "libv8-%d.%d.%d.%d%s.so",
105b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch               GetMajor(), GetMinor(), GetBuild(), GetPatch(), candidate);
106a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    } else {
107b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch      SNPrintF(str, "libv8-%d.%d.%d%s.so",
108b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch               GetMajor(), GetMinor(), GetBuild(), candidate);
109a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    }
110a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  } else {
111a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block    // Use specific SONAME.
112b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch    SNPrintF(str, "%s", soname_);
113a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block  }
114a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block}
115a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block
116a7e24c173cf37484693b9abb38e494fa7bd7baebSteve Block} }  // namespace v8::internal
117