summaryrefslogtreecommitdiff
path: root/deps/v8/tools/node/fetch_deps.py
blob: 00eb4fc92d4f4cbf0718b3b7cdd55922177a61a2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#!/usr/bin/env python
# Copyright 2017 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.

"""
Use this script to fetch all dependencies for V8 to run build_gn.py.

Usage: fetch_deps.py <v8-path>
"""

# for py2/py3 compatibility
from __future__ import print_function

import os
import subprocess
import sys

import node_common

GCLIENT_SOLUTION = [
  { "name"        : "v8",
    "url"         : "https://chromium.googlesource.com/v8/v8.git",
    "deps_file"   : "DEPS",
    "managed"     : False,
    "custom_deps" : {
      # These deps are already part of Node.js.
      "v8/base/trace_event/common"            : None,
      "v8/third_party/googletest/src"         : None,
      # These deps are unnecessary for building.
      "v8/test/benchmarks/data"               : None,
      "v8/testing/gmock"                      : None,
      "v8/test/mozilla/data"                  : None,
      "v8/test/test262/data"                  : None,
      "v8/test/test262/harness"               : None,
      "v8/third_party/android_ndk"            : None,
      "v8/third_party/android_sdk"            : None,
      "v8/third_party/colorama/src"           : None,
      "v8/third_party/fuchsia-sdk"            : None,
      "v8/third_party/instrumented_libraries" : None,
      "v8/tools/luci-go"                      : None,
      "v8/tools/swarming_client"              : None,
      "v8/third_party/qemu-linux-x64"         : None,
    },
  },
]

def EnsureGit(v8_path):
  def git(args):
    # shell=True needed on Windows to resolve git.bat.
    return subprocess.check_output(
        "git " + args, cwd=v8_path, shell=True).strip()

  expected_git_dir = os.path.join(v8_path, ".git")
  actual_git_dir = git("rev-parse --absolute-git-dir")
  if expected_git_dir == actual_git_dir:
    print("V8 is tracked stand-alone by git.")
    return False
  print("Initializing temporary git repository in v8.")
  git("init")
  git("config user.name \"Ada Lovelace\"")
  git("config user.email ada@lovela.ce")
  git("commit --allow-empty -m init")
  return True

def FetchDeps(v8_path):
  # Verify path.
  v8_path = os.path.abspath(v8_path)
  assert os.path.isdir(v8_path)

  # Check out depot_tools if necessary.
  depot_tools = node_common.EnsureDepotTools(v8_path, True)

  temporary_git = EnsureGit(v8_path)
  try:
    print("Fetching dependencies.")
    env = os.environ.copy()
    # gclient needs to have depot_tools in the PATH.
    env["PATH"] = depot_tools + os.pathsep + env["PATH"]
    gclient = os.path.join(depot_tools, "gclient.py")
    spec = "solutions = %s" % GCLIENT_SOLUTION
    subprocess.check_call([sys.executable, gclient, "sync", "--spec", spec],
                           cwd=os.path.join(v8_path, os.path.pardir),
                           env=env)
  except:
    raise
  finally:
    if temporary_git:
      node_common.UninitGit(v8_path)
    # Clean up .gclient_entries file.
    gclient_entries = os.path.normpath(
        os.path.join(v8_path, os.pardir, ".gclient_entries"))
    if os.path.isfile(gclient_entries):
      os.remove(gclient_entries)

  return depot_tools


if __name__ == "__main__":
  FetchDeps(sys.argv[1])