blob: 154acbc300a867c5b8d3687227fefddec97595bc [file] [log] [blame]
#!/usr/bin/env python
# Copyright 2016 Google Inc.
#
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# This script will update Skia's dependencies as necessary.
# Depends on: Python, Git, and depot_tools.
# To retreive and use all optional deps:
#
# python bin/sync --deps=all
import hashlib
import os
import subprocess
import sys
skia_dir = os.path.join(os.path.dirname(__file__), os.pardir)
skia_opt_deps = [arg for arg in sys.argv[1:] if arg.startswith('--deps=')]
os.chdir(skia_dir)
if not os.path.isfile('DEPS'):
sys.stderr.write('DEPS file missing')
exit(1)
deps_hasher = hashlib.sha1()
with open('DEPS', 'r') as f:
deps_hasher.update(f.read())
deps_hasher.update(repr(skia_opt_deps))
deps_hash = deps_hasher.hexdigest()
current_deps_hash = None
if os.path.isfile('.deps_sha1'):
with open('.deps_sha1', 'r') as f:
current_deps_hash = f.read().strip()
default_gclient_config = '''
solutions = [
{ "name" : ".",
"url" : "https://skia.googlesource.com/skia.git",
"deps_file" : "DEPS",
"managed" : False,
"custom_deps" : {
},
"safesync_url": "",
},
]
cache_dir = None
'''
# Must use gclient.bat rather than gclient on windows (at least on mingw)
gclient = 'gclient'
if sys.platform == 'win32' or sys.platform == 'cygwin':
gclient = 'gclient.bat'
if current_deps_hash != deps_hash:
# `gclient sync` is very slow, so skip whenever we can.
try:
subprocess.call([gclient, '--version'])
except:
sys.stdout.write('gclient missing from $PATH, please install ' +
'depot_tools\n https://skia.org/user/quick/desktop\n')
exit(1)
if not os.path.isfile('.gclient'):
with open('.gclient', 'w') as o:
o.write(default_gclient_config)
for command in [[gclient, 'sync'] + skia_opt_deps,
['python', os.path.join('bin', 'fetch-gn')]]:
try:
sys.stdout.write('%r\n' % command)
subprocess.check_call(command)
except:
sys.stderr.write('\n%r failed.\n' % command)
try:
os.remove('.deps_sha1') # Unknown state.
except:
pass
exit(1)
# Only write hash after a successful sync.
with open('.deps_sha1', 'w') as o:
o.write(deps_hash)