#!/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.

import hashlib
import os
import shutil
import stat
import sys
import urllib2

os.chdir(os.path.join(os.path.dirname(__file__), os.pardir))

dst = 'bin/gn.exe' if 'win32' in sys.platform else 'bin/gn'

sha1 = '3523d50538357829725d4ed74b777a572ce0ac74' if 'linux'  in sys.platform else \
       'd43122f6140d0711518aa909980cb009c4fbce3d' if 'darwin' in sys.platform else \
       'e20768d93a6b4400de0d03bb8ceb46facdbe3883'  # Windows

def sha1_of_file(path):
  h = hashlib.sha1()
  if os.path.isfile(path):
    with open(path, 'rb') as f:
      h.update(f.read())
  return h.hexdigest()

if sha1_of_file(dst) != sha1:
  with open(dst, 'wb') as f:
    f.write(urllib2.urlopen('https://chromium-gn.storage-download.googleapis.com/' + sha1).read())

  os.chmod(dst, stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR |
                stat.S_IRGRP                | stat.S_IXGRP |
                stat.S_IROTH                | stat.S_IXOTH )

# We'll also copy to a path that depot_tools' GN wrapper will expect to find the binary.
copy_path = 'buildtools/linux64/gn' if 'linux'  in sys.platform else \
            'buildtools/mac/gn'     if 'darwin' in sys.platform else \
            'buildtools/win/gn.exe'
if os.path.isdir(os.path.dirname(copy_path)):
  shutil.copy(dst, copy_path)
