/out
/perf.data
/perf.data.old
+/src/version_gen.cc
/test/benchmarks/CHECKED_OUT_*
/test/benchmarks/downloaded_*
/test/benchmarks/kraken
'action': ['python', 'v8/tools/clang/scripts/update.py', '--if-needed'],
},
{
+ # Generate v8 version based on the last git tag.
+ "pattern": ".",
+ "action": ["python", "v8/build/generate_version.py"],
+ },
+ {
# A change to a .gyp, .gypi, or to GYP itself should run the generator.
"pattern": ".",
"action": ["python", "v8/build/gyp_v8"],
# File where previously used GYPFLAGS are stored.
ENVFILE = $(OUTDIR)/environment
-.PHONY: all check clean builddeps dependencies $(ENVFILE).new native \
+.PHONY: all check clean builddeps dependencies $(ENVFILE).new native version \
qc quickcheck $(QUICKCHECKS) turbocheck \
$(addsuffix .quickcheck,$(MODES)) $(addsuffix .quickcheck,$(ARCHES)) \
$(ARCHES) $(MODES) $(BUILDS) $(CHECKS) $(addsuffix .clean,$(ARCHES)) \
# Target definitions. "all" is the default.
all: $(DEFAULT_MODES)
+# Target for generating the v8 version file from git tags.
+version:
+ build/generate_version.py
+
# Special target for the buildbots to use. Depends on $(OUTDIR)/Makefile
# having been created before.
-buildbot:
+buildbot: version
$(MAKE) -C "$(OUTDIR)" BUILDTYPE=$(BUILDTYPE) \
builddir="$(abspath $(OUTDIR))/$(BUILDTYPE)"
$(ARCHES): $(addprefix $$@.,$(DEFAULT_MODES))
# Defines how to build a particular target (e.g. ia32.release).
-$(BUILDS): $(OUTDIR)/Makefile.$$@
+$(BUILDS): $(OUTDIR)/Makefile.$$@ version
@$(MAKE) -C "$(OUTDIR)" -f Makefile.$@ \
BUILDTYPE=$(shell echo $(subst .,,$(suffix $@)) | \
python -c "print \
raw_input().replace('opt', '').capitalize()") \
builddir="$(shell pwd)/$(OUTDIR)/$@"
-native: $(OUTDIR)/Makefile.native
+native: $(OUTDIR)/Makefile.native version
@$(MAKE) -C "$(OUTDIR)" -f Makefile.native \
BUILDTYPE=Release \
builddir="$(shell pwd)/$(OUTDIR)/$@"
$(ANDROID_ARCHES): $(addprefix $$@.,$(MODES))
$(ANDROID_BUILDS): $(GYPFILES) $(ENVFILE) build/android.gypi \
- must-set-ANDROID_NDK_ROOT_OR_TOOLCHAIN Makefile.android
+ must-set-ANDROID_NDK_ROOT_OR_TOOLCHAIN Makefile.android \
+ version
@$(MAKE) -f Makefile.android $@ \
ARCH="$(basename $@)" \
MODE="$(subst .,,$(suffix $@))" \
$(NACL_ARCHES): $(addprefix $$@.,$(MODES))
$(NACL_BUILDS): $(GYPFILES) $(ENVFILE) \
- Makefile.nacl must-set-NACL_SDK_ROOT
+ Makefile.nacl must-set-NACL_SDK_ROOT version
@$(MAKE) -f Makefile.nacl $@ \
ARCH="$(basename $@)" \
MODE="$(subst .,,$(suffix $@))" \
rm -rf $(OUTDIR)/native
find $(OUTDIR) -regex '.*\(host\|target\)\.native\.mk' -delete
-clean: $(addsuffix .clean, $(ARCHES) $(ANDROID_ARCHES) $(NACL_ARCHES)) native.clean gtags.clean
+version.clean:
+ rm -f src/version_gen.cc
+
+clean: $(addsuffix .clean, $(ARCHES) $(ANDROID_ARCHES) $(NACL_ARCHES)) native.clean gtags.clean version.clean
# GYP file generation targets.
OUT_MAKEFILES = $(addprefix $(OUTDIR)/Makefile.,$(BUILDS))
--- /dev/null
+#!/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())
+++ /dev/null
-#!/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.
-"""
-
-
-import os
-import re
-import subprocess
-import sys
-
-
-CWD = os.path.abspath(
- os.path.dirname(os.path.dirname(os.path.dirname(__file__))))
-VERSION_CC = os.path.join(CWD, "src", "version.cc")
-
-def main():
- 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.cc with the new values.
- with open(VERSION_CC, "r") as f:
- text = f.read()
- output = []
- for line in text.split("\n"):
- 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)
- with open(VERSION_CC, "w") as f:
- f.write("\n".join(output))
-
- # Log what was done.
- 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))
- print "Modified version.cc. Set V8 version to %s" % version_txt
- return 0
-
-if __name__ == "__main__":
- sys.exit(main())