xref: /aosp_15_r20/external/skia/bin/fetch-clang-format (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
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