Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2320)

Unified Diff: build/download_nacl_irt.py

Issue 7693028: Switching NaCl IRT to be built inside the chrome build. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « DEPS ('k') | chrome/build_nacl_irt.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: build/download_nacl_irt.py
===================================================================
--- build/download_nacl_irt.py (revision 98083)
+++ build/download_nacl_irt.py (working copy)
@@ -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()
« no previous file with comments | « DEPS ('k') | chrome/build_nacl_irt.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698