summaryrefslogtreecommitdiffstats
path: root/build
diff options
context:
space:
mode:
authorbradnelson@google.com <bradnelson@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-24 20:41:16 +0000
committerbradnelson@google.com <bradnelson@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-24 20:41:16 +0000
commit3a0b2499c0a1c9e1456790cf501df6eb15af5f82 (patch)
tree4d8c80f43dc87ea110128e8f4f696ad58125eb12 /build
parentde4f29b56177e8f60aa339dea714dd1e4382020b (diff)
downloadchromium_src-3a0b2499c0a1c9e1456790cf501df6eb15af5f82.zip
chromium_src-3a0b2499c0a1c9e1456790cf501df6eb15af5f82.tar.gz
chromium_src-3a0b2499c0a1c9e1456790cf501df6eb15af5f82.tar.bz2
Switching NaCl IRT to be built inside the chrome build.
Fifth attempt to land! Switching IRT to be built inside the chrome build. Dropping the IRT download step from the DEPS. Step3 of a many step plan to switch where ppapi + irt are built. Dropping download_nacl_irt because we no longer rely on a prebuilt copy. Dropping irt download drop source tarball (assume people using it will have to download / build their own nacl toolchain). Old Review URL: http://codereview.chromium.org/7669058 R=noelallen@google.com BUG=http://code.google.com/p/chromium/issues/detail?id=93520 TEST=None Review URL: http://codereview.chromium.org/7693028 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@98106 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'build')
-rw-r--r--build/download_nacl_irt.py205
1 files changed, 0 insertions, 205 deletions
diff --git a/build/download_nacl_irt.py b/build/download_nacl_irt.py
deleted file mode 100644
index f36d5b2..0000000
--- a/build/download_nacl_irt.py
+++ /dev/null
@@ -1,205 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2011 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-import hashlib
-import optparse
-import os
-import urllib2
-import sys
-import time
-
-
-# Print a dot every time this number of bytes is read.
-PROGRESS_SPACING = 128 * 1024
-
-
-def ReadFile(filename):
- fh = open(filename, 'r')
- try:
- return fh.read()
- finally:
- fh.close()
-
-
-def WriteFile(filename, data):
- fh = open(filename, 'w')
- try:
- fh.write(data)
- finally:
- fh.close()
-
-
-def HashFile(filename):
- hasher = hashlib.sha1()
- fh = open(filename, 'rb')
- try:
- while True:
- data = fh.read(4096)
- if len(data) == 0:
- break
- hasher.update(data)
- finally:
- fh.close()
- return hasher.hexdigest()
-
-
-def CopyStream(input_stream, output_stream):
- """Copies the contents of input_stream to output_stream. Prints
- dots to indicate progress.
- """
- bytes_read = 0
- dots_printed = 0
- while True:
- data = input_stream.read(4096)
- if len(data) == 0:
- break
- output_stream.write(data)
- bytes_read += len(data)
- if bytes_read / PROGRESS_SPACING > dots_printed:
- sys.stdout.write('.')
- sys.stdout.flush()
- dots_printed += 1
-
-
-def RenameWithRetry(old_path, new_path):
- # Renames of files that have recently been closed are known to be
- # unreliable on Windows, because virus checkers like to keep the
- # file open for a little while longer. This tends to happen more
- # for files that look like Windows executables, which does not apply
- # to our files, but we retry the rename here just in case.
- if sys.platform in ('win32', 'cygwin'):
- for i in range(5):
- try:
- if os.path.exists(new_path):
- os.remove(new_path)
- os.rename(old_path, new_path)
- return
- except Exception, exn:
- sys.stdout.write('Rename failed with %r. Retrying...\n' % str(exn))
- sys.stdout.flush()
- time.sleep(1)
- raise Exception('Unabled to rename irt file')
- else:
- os.rename(old_path, new_path)
-
-
-def DownloadFile(dest_path, url):
- url_path = '%s.url' % dest_path
- temp_path = '%s.temp' % dest_path
- if os.path.exists(url_path) and ReadFile(url_path).strip() == url:
- # The URL matches that of the file we previously downloaded, so
- # there should be nothing to do.
- return
- sys.stdout.write('Downloading %r to %r\n' % (url, dest_path))
- output_fh = open(temp_path, 'wb')
- stream = urllib2.urlopen(url)
- CopyStream(stream, output_fh)
- output_fh.close()
- sys.stdout.write(' done\n')
- if os.path.exists(url_path):
- os.unlink(url_path)
- RenameWithRetry(temp_path, dest_path)
- WriteFile(url_path, url + '\n')
- stream.close()
-
-
-def DownloadFileWithRetry(dest_path, url):
- for i in range(5):
- try:
- DownloadFile(dest_path, url)
- break
- except urllib2.HTTPError, exn:
- if exn.getcode() == 404:
- raise
- sys.stdout.write('Download failed with error %r. Retrying...\n'
- % str(exn))
- sys.stdout.flush()
- time.sleep(1)
-
-
-def EvalDepsFile(path):
- scope = {'Var': lambda name: scope['vars'][name]}
- execfile(path, {}, scope)
- return scope
-
-
-def Main():
- parser = optparse.OptionParser()
- parser.add_option(
- '--base_url', dest='base_url',
- # For a view of this site that includes directory listings, see:
- # http://gsdview.appspot.com/nativeclient-archive2/
- # (The trailing slash is required.)
- default=('http://commondatastorage.googleapis.com/'
- 'nativeclient-archive2/irt'),
- help='Base URL from which to download.')
- parser.add_option(
- '--nacl_revision', dest='nacl_revision',
- help='Download an IRT binary that was built from this '
- 'SVN revision of Native Client.')
- parser.add_option(
- '--file_hash', dest='file_hashes', action='append', nargs=2, default=[],
- metavar='ARCH HASH',
- help='ARCH gives the name of the architecture (e.g. "x86_32") for '
- 'which to download an IRT binary. '
- 'HASH gives the expected SHA1 hash of the file.')
- options, args = parser.parse_args()
- if len(args) != 0:
- parser.error('Unexpected arguments: %r' % args)
-
- if options.nacl_revision is None and len(options.file_hashes) == 0:
- # The script must have been invoked directly with no arguments,
- # rather than being invoked by gclient. In this case, read the
- # DEPS file ourselves rather than having gclient pass us values
- # from DEPS.
- deps_data = EvalDepsFile(os.path.join('src', 'DEPS'))
- options.nacl_revision = deps_data['vars']['nacl_revision']
- options.file_hashes = [
- ('x86_32', deps_data['vars']['nacl_irt_hash_x86_32']),
- ('x86_64', deps_data['vars']['nacl_irt_hash_x86_64']),
- ]
-
- nacl_dir = os.path.join('src', 'native_client')
- if not os.path.exists(nacl_dir):
- # If "native_client" is not present, this might be because the
- # developer has put '"src/native_client": None' in their
- # '.gclient' file, because they don't want to build Chromium with
- # Native Client support. So don't create 'src/native_client',
- # because that would interfere with checking it out from SVN
- # later.
- sys.stdout.write(
- 'The directory %r does not exist: skipping downloading binaries '
- 'for Native Client\'s IRT library\n' % nacl_dir)
- return
- if len(options.file_hashes) == 0:
- sys.stdout.write('No --file_hash arguments given: nothing to update\n')
-
- new_deps = []
- for arch, expected_hash in options.file_hashes:
- url = '%s/r%s/irt_%s.nexe' % (options.base_url,
- options.nacl_revision,
- arch)
- dest_dir = os.path.join(nacl_dir, 'irt_binaries')
- if not os.path.exists(dest_dir):
- os.makedirs(dest_dir)
- dest_path = os.path.join(dest_dir, 'nacl_irt_%s.nexe' % arch)
- DownloadFileWithRetry(dest_path, url)
- downloaded_hash = HashFile(dest_path)
- if downloaded_hash != expected_hash:
- sys.stdout.write(
- 'Hash mismatch: the file downloaded from URL %r had hash %r, '
- 'but we expected %r\n' % (url, downloaded_hash, expected_hash))
- new_deps.append(' "nacl_irt_hash_%s": "%s",\n'
- % (arch, downloaded_hash))
-
- if len(new_deps) > 0:
- sys.stdout.write('\nIf you have changed nacl_revision, the DEPS file '
- 'probably needs to be updated with the following:\n%s\n'
- % ''.join(new_deps))
- sys.exit(1)
-
-
-if __name__ == '__main__':
- Main()