| #!/usr/bin/env python3 |
| |
| # Copyright 2017 Google Inc. |
| # |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import hashlib |
| import os |
| import shutil |
| import stat |
| import sys |
| import platform |
| |
| if sys.version_info[0] < 3: |
| from urllib2 import urlopen |
| else: |
| from urllib.request import urlopen |
| |
| os.chdir(os.path.join(os.path.dirname(__file__), os.pardir)) |
| |
| def fetch(target): |
| deps_path = 'buildtools/DEPS' |
| try: |
| with open(deps_path, 'r') as contents: |
| deps_globals = {} |
| exec(contents.read(), deps_globals) |
| deps = deps_globals['deps'] |
| except: |
| print(deps_path, 'could not be read/parsed. Did you run `tools/git-sync-deps`?') |
| exit(1) |
| |
| if 'arm' in platform.processor(): |
| if 'darwin' in sys.platform: |
| obj = 'mac_arm64-format' |
| target_path = 'buildtools/mac_arm64/' |
| else: |
| print('unsupported platform') |
| exit(1) |
| else: |
| if 'linux' in sys.platform: |
| obj = 'linux64-format' |
| target_path = 'buildtools/linux64/' |
| elif 'darwin' in sys.platform: |
| obj = 'mac-format' |
| target_path = 'buildtools/mac/clang-format' |
| else: |
| obj = 'win-format' |
| target_path = 'buildtools\\win\\' |
| |
| sha256sum = deps[obj]['objects'][0]['sha256sum'] |
| object_name = deps[obj]['objects'][0]['object_name'] |
| output_file = os.path.join('bin', deps[obj]['objects'][0]['output_file']) |
| target_path = os.path.join(target_path, deps[obj]['objects'][0]['output_file']) |
| |
| def sha256_of_file(path): |
| h = hashlib.sha256() |
| if os.path.isfile(path): |
| with open(path, 'rb') as f: |
| h.update(f.read()) |
| return h.hexdigest() |
| |
| if sha256_of_file(output_file) != sha256sum: |
| with open(output_file, 'wb') as f: |
| url = 'https://chromium-%s.storage-download.googleapis.com/%s' % (target, object_name) |
| f.write(urlopen(url).read()) |
| |
| os.chmod(output_file, stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR | |
| stat.S_IRGRP | stat.S_IXGRP | |
| stat.S_IROTH | stat.S_IXOTH ) |
| if sha256_of_file(output_file) != sha256sum: |
| print(output_file, 'was corrupted during download. Please try again.') |
| exit(1) |
| |
| if sha256_of_file(target_path) != sha256sum: |
| shutil.copy(output_file, target_path) |
| |
| fetch('clang-format') |