Home | History | Annotate | Download | only in node
      1 #!/usr/bin/env python
      2 # Copyright 2017 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 """
      7 Use this script to fetch all dependencies for V8 to run build_gn.py.
      8 
      9 Usage: fetch_deps.py <v8-path>
     10 """
     11 
     12 import os
     13 import subprocess
     14 import sys
     15 
     16 import node_common
     17 
     18 GCLIENT_SOLUTION = [
     19   { "name"        : "v8",
     20     "url"         : "https://chromium.googlesource.com/v8/v8.git",
     21     "deps_file"   : "DEPS",
     22     "managed"     : False,
     23     "custom_deps" : {
     24       # These deps are already part of Node.js.
     25       "v8/base/trace_event/common"            : None,
     26       "v8/third_party/googletest/src"         : None,
     27       "v8/third_party/jinja2"                 : None,
     28       "v8/third_party/markupsafe"             : None,
     29       # These deps are unnecessary for building.
     30       "v8/test/benchmarks/data"               : None,
     31       "v8/testing/gmock"                      : None,
     32       "v8/test/mozilla/data"                  : None,
     33       "v8/test/test262/data"                  : None,
     34       "v8/test/test262/harness"               : None,
     35       "v8/third_party/android_tools"          : None,
     36       "v8/third_party/catapult"               : None,
     37       "v8/third_party/colorama/src"           : None,
     38       "v8/third_party/instrumented_libraries" : None,
     39       "v8/tools/luci-go"                      : None,
     40       "v8/tools/swarming_client"              : None,
     41     },
     42   },
     43 ]
     44 
     45 def EnsureGit(v8_path):
     46   def git(args):
     47     # shell=True needed on Windows to resolve git.bat.
     48     return subprocess.check_output(
     49         "git " + args, cwd=v8_path, shell=True).strip()
     50 
     51   expected_git_dir = os.path.join(v8_path, ".git")
     52   actual_git_dir = git("rev-parse --absolute-git-dir")
     53   if expected_git_dir == actual_git_dir:
     54     print "V8 is tracked stand-alone by git."
     55     return False
     56   print "Initializing temporary git repository in v8."
     57   git("init")
     58   git("config user.name \"Ada Lovelace\"")
     59   git("config user.email ada (at] lovela.ce")
     60   git("commit --allow-empty -m init")
     61   return True
     62 
     63 def FetchDeps(v8_path):
     64   # Verify path.
     65   v8_path = os.path.abspath(v8_path)
     66   assert os.path.isdir(v8_path)
     67 
     68   # Check out depot_tools if necessary.
     69   depot_tools = node_common.EnsureDepotTools(v8_path, True)
     70 
     71   temporary_git = EnsureGit(v8_path)
     72   try:
     73     print "Fetching dependencies."
     74     env = os.environ.copy()
     75     # gclient needs to have depot_tools in the PATH.
     76     env["PATH"] = depot_tools + os.pathsep + env["PATH"]
     77     gclient = os.path.join(depot_tools, "gclient.py")
     78     spec = "solutions = %s" % GCLIENT_SOLUTION
     79     subprocess.check_call([sys.executable, gclient, "sync", "--spec", spec],
     80                            cwd=os.path.join(v8_path, os.path.pardir),
     81                            env=env)
     82   except:
     83     raise
     84   finally:
     85     if temporary_git:
     86       node_common.UninitGit(v8_path)
     87     # Clean up .gclient_entries file.
     88     gclient_entries = os.path.normpath(
     89         os.path.join(v8_path, os.pardir, ".gclient_entries"))
     90     if os.path.isfile(gclient_entries):
     91       os.remove(gclient_entries)
     92 
     93   return depot_tools
     94 
     95 
     96 if __name__ == "__main__":
     97   FetchDeps(sys.argv[1])
     98