From 6a7aa65133803f303ee0d080a6544a001d5b652d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Zasso?= Date: Wed, 23 Nov 2016 10:48:28 +0100 Subject: [PATCH] deps: introduce embedder version string for V8 Sometimes upstream V8 may not want to merge a fix to their stable branches, but we might. This adds a new version string that the embedder can set independently of the official V8 version to avoid running into conflicts. Refs: https://github.com/nodejs/node/pull/9730 --- deps/v8/gypfiles/features.gypi | 5 +++ deps/v8/include/v8-version.h | 4 ++ deps/v8/src/log-utils.cc | 14 +++++-- deps/v8/src/version.cc | 14 ++++--- deps/v8/src/version.h | 5 ++- deps/v8/test/cctest/test-version.cc | 59 ++++++++++++++++++----------- 6 files changed, 68 insertions(+), 33 deletions(-) diff --git a/deps/v8/gypfiles/features.gypi b/deps/v8/gypfiles/features.gypi index 5a21a63e324f49..042d1bff8dbbe9 100644 --- a/deps/v8/gypfiles/features.gypi +++ b/deps/v8/gypfiles/features.gypi @@ -64,6 +64,8 @@ # Enable compiler warnings when using V8_DEPRECATE_SOON apis. 'v8_imminent_deprecation_warnings%': 0, + 'v8_embedder_string%': '', + # Set to 1 to enable DCHECKs in release builds. 'dcheck_always_on%': 0, @@ -105,6 +107,9 @@ ['v8_use_snapshot=="true" and v8_use_external_startup_data==1', { 'defines': ['V8_USE_EXTERNAL_STARTUP_DATA',], }], + ['v8_embedder_string', { + 'defines': ['V8_EMBEDDER_STRING="<(v8_embedder_string)"',], + }], ['dcheck_always_on!=0', { 'defines': ['DEBUG',], }], diff --git a/deps/v8/include/v8-version.h b/deps/v8/include/v8-version.h index df187b8307a6f6..1f543339990066 100644 --- a/deps/v8/include/v8-version.h +++ b/deps/v8/include/v8-version.h @@ -13,6 +13,10 @@ #define V8_BUILD_NUMBER 500 #define V8_PATCH_LEVEL 44 +#ifndef V8_EMBEDDER_STRING +#define V8_EMBEDDER_STRING "" +#endif // V8_EMBEDDER_STRING + // Use 1 for candidates and 0 otherwise. // (Boolean macro values are not supported by all preprocessors.) #define V8_IS_CANDIDATE_VERSION 0 diff --git a/deps/v8/src/log-utils.cc b/deps/v8/src/log-utils.cc index 22972ec0551bd7..c647df630448f7 100644 --- a/deps/v8/src/log-utils.cc +++ b/deps/v8/src/log-utils.cc @@ -56,9 +56,17 @@ void Log::Initialize(const char* log_file_name) { if (output_handle_ != nullptr) { Log::MessageBuilder msg(this); - msg.Append("v8-version,%d,%d,%d,%d,%d", Version::GetMajor(), - Version::GetMinor(), Version::GetBuild(), Version::GetPatch(), - Version::IsCandidate()); + if (strlen(Version::GetEmbedder()) == 0) { + msg.Append("v8-version,%d,%d,%d,%d,%d", + Version::GetMajor(), Version::GetMinor(), + Version::GetBuild(), Version::GetPatch(), + Version::IsCandidate()); + } else { + msg.Append("v8-version,%d,%d,%d,%d,%s,%d", + Version::GetMajor(), Version::GetMinor(), + Version::GetBuild(), Version::GetPatch(), + Version::GetEmbedder(), Version::IsCandidate()); + } msg.WriteToLogFile(); } } diff --git a/deps/v8/src/version.cc b/deps/v8/src/version.cc index 7305bf2576ef49..16560af7478f87 100644 --- a/deps/v8/src/version.cc +++ b/deps/v8/src/version.cc @@ -24,7 +24,7 @@ #if V8_PATCH_LEVEL > 0 #define VERSION_STRING \ S(V8_MAJOR_VERSION) "." S(V8_MINOR_VERSION) "." S(V8_BUILD_NUMBER) "." S( \ - V8_PATCH_LEVEL) CANDIDATE_STRING + V8_PATCH_LEVEL) V8_EMBEDDER_STRING CANDIDATE_STRING #else #define VERSION_STRING \ S(V8_MAJOR_VERSION) "." S(V8_MINOR_VERSION) "." S(V8_BUILD_NUMBER) \ @@ -38,6 +38,7 @@ int Version::major_ = V8_MAJOR_VERSION; int Version::minor_ = V8_MINOR_VERSION; int Version::build_ = V8_BUILD_NUMBER; int Version::patch_ = V8_PATCH_LEVEL; +const char* Version::embedder_ = V8_EMBEDDER_STRING; bool Version::candidate_ = (V8_IS_CANDIDATE_VERSION != 0); const char* Version::soname_ = SONAME; const char* Version::version_string_ = VERSION_STRING; @@ -51,9 +52,9 @@ void Version::GetString(Vector str) { const char* is_simulator = ""; #endif // USE_SIMULATOR if (GetPatch() > 0) { - SNPrintF(str, "%d.%d.%d.%d%s%s", - GetMajor(), GetMinor(), GetBuild(), GetPatch(), candidate, - is_simulator); + SNPrintF(str, "%d.%d.%d.%d%s%s%s", + GetMajor(), GetMinor(), GetBuild(), GetPatch(), GetEmbedder(), + candidate, is_simulator); } else { SNPrintF(str, "%d.%d.%d%s%s", GetMajor(), GetMinor(), GetBuild(), candidate, @@ -68,8 +69,9 @@ void Version::GetSONAME(Vector str) { // Generate generic SONAME if no specific SONAME is defined. const char* candidate = IsCandidate() ? "-candidate" : ""; if (GetPatch() > 0) { - SNPrintF(str, "libv8-%d.%d.%d.%d%s.so", - GetMajor(), GetMinor(), GetBuild(), GetPatch(), candidate); + SNPrintF(str, "libv8-%d.%d.%d.%d%s%s.so", + GetMajor(), GetMinor(), GetBuild(), GetPatch(), GetEmbedder(), + candidate); } else { SNPrintF(str, "libv8-%d.%d.%d%s.so", GetMajor(), GetMinor(), GetBuild(), candidate); diff --git a/deps/v8/src/version.h b/deps/v8/src/version.h index 3395d7f4fe5589..20d9c71fe76661 100644 --- a/deps/v8/src/version.h +++ b/deps/v8/src/version.h @@ -18,6 +18,7 @@ class Version { static int GetMinor() { return minor_; } static int GetBuild() { return build_; } static int GetPatch() { return patch_; } + static const char* GetEmbedder() { return embedder_; } static bool IsCandidate() { return candidate_; } static uint32_t Hash() { return static_cast( @@ -38,13 +39,15 @@ class Version { static int minor_; static int build_; static int patch_; + static const char* embedder_; static bool candidate_; static const char* soname_; static const char* version_string_; // In test-version.cc. friend void SetVersion(int major, int minor, int build, int patch, - bool candidate, const char* soname); + const char* embedder, bool candidate, + const char* soname); }; } // namespace internal diff --git a/deps/v8/test/cctest/test-version.cc b/deps/v8/test/cctest/test-version.cc index 50fca16871a335..a8e1590fd7c6d2 100644 --- a/deps/v8/test/cctest/test-version.cc +++ b/deps/v8/test/cctest/test-version.cc @@ -37,11 +37,13 @@ namespace v8 { namespace internal { void SetVersion(int major, int minor, int build, int patch, - bool candidate, const char* soname) { + const char* embedder, bool candidate, + const char* soname) { Version::major_ = major; Version::minor_ = minor; Version::build_ = build; Version::patch_ = patch; + Version::embedder_ = embedder; Version::candidate_ = candidate; Version::soname_ = soname; } @@ -51,14 +53,14 @@ void SetVersion(int major, int minor, int build, int patch, static void CheckVersion(int major, int minor, int build, - int patch, bool candidate, + int patch, const char* embedder, bool candidate, const char* expected_version_string, const char* expected_generic_soname) { static v8::internal::EmbeddedVector version_str; static v8::internal::EmbeddedVector soname_str; // Test version without specific SONAME. - SetVersion(major, minor, build, patch, candidate, ""); + SetVersion(major, minor, build, patch, embedder, candidate, ""); Version::GetString(version_str); CHECK_EQ(0, strcmp(expected_version_string, version_str.start())); Version::GetSONAME(soname_str); @@ -66,7 +68,7 @@ static void CheckVersion(int major, int minor, int build, // Test version with specific SONAME. const char* soname = "libv8.so.1"; - SetVersion(major, minor, build, patch, candidate, soname); + SetVersion(major, minor, build, patch, embedder, candidate, soname); Version::GetString(version_str); CHECK_EQ(0, strcmp(expected_version_string, version_str.start())); Version::GetSONAME(soname_str); @@ -76,30 +78,41 @@ static void CheckVersion(int major, int minor, int build, TEST(VersionString) { #ifdef USE_SIMULATOR - CheckVersion(0, 0, 0, 0, false, "0.0.0 SIMULATOR", "libv8-0.0.0.so"); - CheckVersion(0, 0, 0, 0, true, + CheckVersion(0, 0, 0, 0, "", false, "0.0.0 SIMULATOR", "libv8-0.0.0.so"); + CheckVersion(0, 0, 0, 0, "", true, "0.0.0 (candidate) SIMULATOR", "libv8-0.0.0-candidate.so"); - CheckVersion(1, 0, 0, 0, false, "1.0.0 SIMULATOR", "libv8-1.0.0.so"); - CheckVersion(1, 0, 0, 0, true, + CheckVersion(1, 0, 0, 0, "", false, "1.0.0 SIMULATOR", "libv8-1.0.0.so"); + CheckVersion(1, 0, 0, 0, "", true, "1.0.0 (candidate) SIMULATOR", "libv8-1.0.0-candidate.so"); - CheckVersion(1, 0, 0, 1, false, "1.0.0.1 SIMULATOR", "libv8-1.0.0.1.so"); - CheckVersion(1, 0, 0, 1, true, - "1.0.0.1 (candidate) SIMULATOR", "libv8-1.0.0.1-candidate.so"); - CheckVersion(2, 5, 10, 7, false, "2.5.10.7 SIMULATOR", "libv8-2.5.10.7.so"); - CheckVersion(2, 5, 10, 7, true, - "2.5.10.7 (candidate) SIMULATOR", "libv8-2.5.10.7-candidate.so"); + CheckVersion(1, 0, 0, 1, "", false, + "1.0.0.1 SIMULATOR", "libv8-1.0.0.1.so"); + CheckVersion(1, 0, 0, 1, "", true, "1.0.0.1 (candidate) SIMULATOR", + "libv8-1.0.0.1-candidate.so"); + CheckVersion(2, 5, 10, 7, "", false, + "2.5.10.7 SIMULATOR", "libv8-2.5.10.7.so"); + CheckVersion(2, 5, 10, 7, "", true, "2.5.10.7 (candidate) SIMULATOR", + "libv8-2.5.10.7.0-candidate.so"); + CheckVersion(2, 5, 10, 7, ".emb.1", false, + "2.5.10.7.emb.1 SIMULATOR", "libv8-2.5.10.7.emb.1.so"); + CheckVersion(2, 5, 10, 7, ".emb.1", true, + "2.5.10.7.emb.1 (candidate) SIMULATOR", + "libv8-2.5.10.7.emb.1-candidate.so"); #else - CheckVersion(0, 0, 0, 0, false, "0.0.0", "libv8-0.0.0.so"); - CheckVersion(0, 0, 0, 0, true, + CheckVersion(0, 0, 0, 0, "", false, "0.0.0", "libv8-0.0.0.so"); + CheckVersion(0, 0, 0, 0, "", true, "0.0.0 (candidate)", "libv8-0.0.0-candidate.so"); - CheckVersion(1, 0, 0, 0, false, "1.0.0", "libv8-1.0.0.so"); - CheckVersion(1, 0, 0, 0, true, + CheckVersion(1, 0, 0, 0, "", false, "1.0.0", "libv8-1.0.0.so"); + CheckVersion(1, 0, 0, 0, "", true, "1.0.0 (candidate)", "libv8-1.0.0-candidate.so"); - CheckVersion(1, 0, 0, 1, false, "1.0.0.1", "libv8-1.0.0.1.so"); - CheckVersion(1, 0, 0, 1, true, - "1.0.0.1 (candidate)", "libv8-1.0.0.1-candidate.so"); - CheckVersion(2, 5, 10, 7, false, "2.5.10.7", "libv8-2.5.10.7.so"); - CheckVersion(2, 5, 10, 7, true, + CheckVersion(1, 0, 0, 1, "", false, "1.0.0.1", "libv8-1.0.0.1.so"); + CheckVersion(1, 0, 0, 1, "", true, + "1.0.0.1.0 (candidate)", "libv8-1.0.0.1-candidate.so"); + CheckVersion(2, 5, 10, 7, "", false, "2.5.10.7", "libv8-2.5.10.7.so"); + CheckVersion(2, 5, 10, 7, "", true, "2.5.10.7 (candidate)", "libv8-2.5.10.7-candidate.so"); + CheckVersion(2, 5, 10, 7, ".emb.1", false, "2.5.10.7.emb.1", + "libv8-2.5.10.7.emb.1.so"); + CheckVersion(2, 5, 10, 7, ".emb.1", true, "2.5.10.7.emb.1 (candidate)", + "libv8-2.5.10.7.emb.1-candidate.so"); #endif }