Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5506)

Unified Diff: build/generate_version.py

Issue 830093003: Partially reland Auto-generate v8 version based on tags. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Review Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Makefile ('k') | tools/push-to-trunk/generate_version.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: build/generate_version.py
diff --git a/build/generate_version.py b/build/generate_version.py
new file mode 100755
index 0000000000000000000000000000000000000000..2d4c40dba3e8de5dc22bee7032515648d2ddfd09
--- /dev/null
+++ b/build/generate_version.py
@@ -0,0 +1,118 @@
+#!/usr/bin/env python
+# Copyright 2014 the V8 project authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""
+Script to set v8's version file to the version given by the latest tag.
+
+The script is intended to be run as a gclient hook. The script will write a
+generated version file into the checkout.
+
+On build systems where no git is available and where the version information
+is not necessary, the version generation can be bypassed with the option
+--skip.
+"""
+
+
+import optparse
+import os
+import re
+import subprocess
+import sys
+
+
+CWD = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
+VERSION_CC = os.path.join(CWD, "src", "version.cc")
+VERSION_GEN_CC = os.path.join(CWD, "src", "version_gen.cc")
+
+
+def generate_version_file():
+ tag = subprocess.check_output(
+ "git describe --tags",
+ shell=True,
+ cwd=CWD,
+ ).strip()
+ assert tag
+
+ # Check for commits not exactly matching a tag. Those are candidate builds
+ # for the next version. The output has the form
+ # <tag name>-<n commits>-<hash>.
+ if "-" in tag:
+ version = tag.split("-")[0]
+ candidate = "1"
+ else:
+ version = tag
+ candidate = "0"
+ version_levels = version.split(".")
+
+ # Set default patch level if none is given.
+ if len(version_levels) == 3:
+ version_levels.append("0")
+ assert len(version_levels) == 4
+
+ major, minor, build, patch = version_levels
+
+ # Increment build level for candidate builds.
+ if candidate == "1":
+ build = str(int(build) + 1)
+ patch = "0"
+
+ # Modify version_gen.cc with the new values.
+ output = []
+ with open(VERSION_CC, "r") as f:
+ for line in f:
+ for definition, substitute in (
+ ("MAJOR_VERSION", major),
+ ("MINOR_VERSION", minor),
+ ("BUILD_NUMBER", build),
+ ("PATCH_LEVEL", patch),
+ ("IS_CANDIDATE_VERSION", candidate)):
+ if line.startswith("#define %s" % definition):
+ line = re.sub("\d+$", substitute, line)
+ output.append(line)
+
+ # Prepare log message.
+ candidate_txt = " (candidate)" if candidate == "1" else ""
+ patch_txt = ".%s" % patch if patch != "0" else ""
+ version_txt = ("%s.%s.%s%s%s" %
+ (major, minor, build, patch_txt, candidate_txt))
+ log_message = "Modifying version_gen.cc. Set V8 version to %s" % version_txt
+ return "".join(output), log_message
+
+
+def bypass_version_file():
+ with open(VERSION_CC, "r") as f:
+ return f.read(), "Bypassing V8 version creation."
+
+
+def main():
+ parser = optparse.OptionParser()
+ parser.add_option("--skip",
+ help="Use raw version.cc file (disables version "
+ "generation and uses a dummy version).",
+ default=False, action="store_true")
+ (options, args) = parser.parse_args()
+
+ if options.skip:
+ version_file_content, log_message = bypass_version_file()
+ else:
+ version_file_content, log_message = generate_version_file()
+
+ old_content = ""
+ if os.path.exists(VERSION_GEN_CC):
+ with open(VERSION_GEN_CC, "r") as f:
+ old_content = f.read()
+
+ # Only generate version file if content has changed.
+ if old_content != version_file_content:
+ with open(VERSION_GEN_CC, "w") as f:
+ f.write(version_file_content)
+ # Log what was calculated.
+ print log_message
+
+ return 0
+
+
+if __name__ == "__main__":
+ sys.exit(main())
« no previous file with comments | « Makefile ('k') | tools/push-to-trunk/generate_version.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698