blob: b4a0221eae5c10224a18d79bf8067ca3df958177 [file] [log] [blame]
Emily Bernierd0a1eb72015-03-24 16:35:39 -04001#!/usr/bin/env python
2# Copyright 2014 the V8 project authors. All rights reserved.
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
6"""
7Script to set v8's version file to the version given by the latest tag.
8"""
9
10
11import os
12import re
13import subprocess
14import sys
15
16
17CWD = os.path.abspath(
18 os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
19VERSION_CC = os.path.join(CWD, "src", "version.cc")
20
21def main():
22 tag = subprocess.check_output(
23 "git describe --tags",
24 shell=True,
25 cwd=CWD,
26 ).strip()
27 assert tag
28
29 # Check for commits not exactly matching a tag. Those are candidate builds
30 # for the next version. The output has the form
31 # <tag name>-<n commits>-<hash>.
32 if "-" in tag:
33 version = tag.split("-")[0]
34 candidate = "1"
35 else:
36 version = tag
37 candidate = "0"
38 version_levels = version.split(".")
39
40 # Set default patch level if none is given.
41 if len(version_levels) == 3:
42 version_levels.append("0")
43 assert len(version_levels) == 4
44
45 major, minor, build, patch = version_levels
46
47 # Increment build level for candidate builds.
48 if candidate == "1":
49 build = str(int(build) + 1)
50 patch = "0"
51
52 # Modify version.cc with the new values.
53 with open(VERSION_CC, "r") as f:
54 text = f.read()
55 output = []
56 for line in text.split("\n"):
57 for definition, substitute in (
58 ("MAJOR_VERSION", major),
59 ("MINOR_VERSION", minor),
60 ("BUILD_NUMBER", build),
61 ("PATCH_LEVEL", patch),
62 ("IS_CANDIDATE_VERSION", candidate)):
63 if line.startswith("#define %s" % definition):
64 line = re.sub("\d+$", substitute, line)
65 output.append(line)
66 with open(VERSION_CC, "w") as f:
67 f.write("\n".join(output))
68
69 # Log what was done.
70 candidate_txt = " (candidate)" if candidate == "1" else ""
71 patch_txt = ".%s" % patch if patch != "0" else ""
72 version_txt = ("%s.%s.%s%s%s" %
73 (major, minor, build, patch_txt, candidate_txt))
74 print "Modified version.cc. Set V8 version to %s" % version_txt
75 return 0
76
77if __name__ == "__main__":
78 sys.exit(main())