1*c8dee2aaSAndroid Build Coastguard Worker#!/usr/bin/env python3 2*c8dee2aaSAndroid Build Coastguard Worker 3*c8dee2aaSAndroid Build Coastguard Worker# Copyright 2017 Google Inc. 4*c8dee2aaSAndroid Build Coastguard Worker# 5*c8dee2aaSAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 6*c8dee2aaSAndroid Build Coastguard Worker# found in the LICENSE file. 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Workerimport hashlib 9*c8dee2aaSAndroid Build Coastguard Workerimport os 10*c8dee2aaSAndroid Build Coastguard Workerimport shutil 11*c8dee2aaSAndroid Build Coastguard Workerimport stat 12*c8dee2aaSAndroid Build Coastguard Workerimport sys 13*c8dee2aaSAndroid Build Coastguard Workerimport platform 14*c8dee2aaSAndroid Build Coastguard Worker 15*c8dee2aaSAndroid Build Coastguard Workerif sys.version_info[0] < 3: 16*c8dee2aaSAndroid Build Coastguard Worker from urllib2 import urlopen 17*c8dee2aaSAndroid Build Coastguard Workerelse: 18*c8dee2aaSAndroid Build Coastguard Worker from urllib.request import urlopen 19*c8dee2aaSAndroid Build Coastguard Worker 20*c8dee2aaSAndroid Build Coastguard Workeros.chdir(os.path.join(os.path.dirname(__file__), os.pardir)) 21*c8dee2aaSAndroid Build Coastguard Worker 22*c8dee2aaSAndroid Build Coastguard Workerdef fetch(target): 23*c8dee2aaSAndroid Build Coastguard Worker deps_path = 'buildtools/DEPS' 24*c8dee2aaSAndroid Build Coastguard Worker try: 25*c8dee2aaSAndroid Build Coastguard Worker with open(deps_path, 'r') as contents: 26*c8dee2aaSAndroid Build Coastguard Worker deps_globals = {} 27*c8dee2aaSAndroid Build Coastguard Worker exec(contents.read(), deps_globals) 28*c8dee2aaSAndroid Build Coastguard Worker deps = deps_globals['deps'] 29*c8dee2aaSAndroid Build Coastguard Worker except: 30*c8dee2aaSAndroid Build Coastguard Worker print(deps_path, 'could not be read/parsed. Did you run `tools/git-sync-deps`?') 31*c8dee2aaSAndroid Build Coastguard Worker exit(1) 32*c8dee2aaSAndroid Build Coastguard Worker 33*c8dee2aaSAndroid Build Coastguard Worker if 'arm' in platform.processor(): 34*c8dee2aaSAndroid Build Coastguard Worker if 'darwin' in sys.platform: 35*c8dee2aaSAndroid Build Coastguard Worker obj = 'mac_arm64-format' 36*c8dee2aaSAndroid Build Coastguard Worker target_path = 'buildtools/mac_arm64/' 37*c8dee2aaSAndroid Build Coastguard Worker else: 38*c8dee2aaSAndroid Build Coastguard Worker print('unsupported platform') 39*c8dee2aaSAndroid Build Coastguard Worker exit(1) 40*c8dee2aaSAndroid Build Coastguard Worker else: 41*c8dee2aaSAndroid Build Coastguard Worker if 'linux' in sys.platform: 42*c8dee2aaSAndroid Build Coastguard Worker obj = 'linux64-format' 43*c8dee2aaSAndroid Build Coastguard Worker target_path = 'buildtools/linux64/' 44*c8dee2aaSAndroid Build Coastguard Worker elif 'darwin' in sys.platform: 45*c8dee2aaSAndroid Build Coastguard Worker obj = 'mac-format' 46*c8dee2aaSAndroid Build Coastguard Worker target_path = 'buildtools/mac/clang-format' 47*c8dee2aaSAndroid Build Coastguard Worker else: 48*c8dee2aaSAndroid Build Coastguard Worker obj = 'win-format' 49*c8dee2aaSAndroid Build Coastguard Worker target_path = 'buildtools\\win\\' 50*c8dee2aaSAndroid Build Coastguard Worker 51*c8dee2aaSAndroid Build Coastguard Worker sha256sum = deps[obj]['objects'][0]['sha256sum'] 52*c8dee2aaSAndroid Build Coastguard Worker object_name = deps[obj]['objects'][0]['object_name'] 53*c8dee2aaSAndroid Build Coastguard Worker output_file = os.path.join('bin', deps[obj]['objects'][0]['output_file']) 54*c8dee2aaSAndroid Build Coastguard Worker target_path = os.path.join(target_path, deps[obj]['objects'][0]['output_file']) 55*c8dee2aaSAndroid Build Coastguard Worker 56*c8dee2aaSAndroid Build Coastguard Worker def sha256_of_file(path): 57*c8dee2aaSAndroid Build Coastguard Worker h = hashlib.sha256() 58*c8dee2aaSAndroid Build Coastguard Worker if os.path.isfile(path): 59*c8dee2aaSAndroid Build Coastguard Worker with open(path, 'rb') as f: 60*c8dee2aaSAndroid Build Coastguard Worker h.update(f.read()) 61*c8dee2aaSAndroid Build Coastguard Worker return h.hexdigest() 62*c8dee2aaSAndroid Build Coastguard Worker 63*c8dee2aaSAndroid Build Coastguard Worker if sha256_of_file(output_file) != sha256sum: 64*c8dee2aaSAndroid Build Coastguard Worker with open(output_file, 'wb') as f: 65*c8dee2aaSAndroid Build Coastguard Worker url = 'https://chromium-%s.storage-download.googleapis.com/%s' % (target, object_name) 66*c8dee2aaSAndroid Build Coastguard Worker f.write(urlopen(url).read()) 67*c8dee2aaSAndroid Build Coastguard Worker 68*c8dee2aaSAndroid Build Coastguard Worker os.chmod(output_file, stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR | 69*c8dee2aaSAndroid Build Coastguard Worker stat.S_IRGRP | stat.S_IXGRP | 70*c8dee2aaSAndroid Build Coastguard Worker stat.S_IROTH | stat.S_IXOTH ) 71*c8dee2aaSAndroid Build Coastguard Worker if sha256_of_file(output_file) != sha256sum: 72*c8dee2aaSAndroid Build Coastguard Worker print(output_file, 'was corrupted during download. Please try again.') 73*c8dee2aaSAndroid Build Coastguard Worker exit(1) 74*c8dee2aaSAndroid Build Coastguard Worker 75*c8dee2aaSAndroid Build Coastguard Worker if sha256_of_file(target_path) != sha256sum: 76*c8dee2aaSAndroid Build Coastguard Worker shutil.copy(output_file, target_path) 77*c8dee2aaSAndroid Build Coastguard Worker 78*c8dee2aaSAndroid Build Coastguard Workerfetch('clang-format') 79