| Index: chrome/test/pyautolib/fetch_prebuilt_pyauto.py
|
| ===================================================================
|
| --- chrome/test/pyautolib/fetch_prebuilt_pyauto.py (revision 261231)
|
| +++ chrome/test/pyautolib/fetch_prebuilt_pyauto.py (working copy)
|
| @@ -1,214 +0,0 @@
|
| -#!/usr/bin/env python
|
| -# Copyright (c) 2012 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.
|
| -
|
| -"""Fetch prebuilt binaries to run PyAuto.
|
| -
|
| -Sets up Chrome and PyAuto binaries using prebuilt binaries from the
|
| -continuous build archives. Works on mac, win, linux (32 & 64 bit).
|
| -
|
| -Examples:
|
| - On Mac:
|
| - $ python fetch_prebuilt_pyauto.py -d xcodebuild/Release
|
| - http://build.chromium.org/f/chromium/continuous/mac/LATEST
|
| -
|
| - On Win:
|
| - $ python fetch_prebuilt_pyauto.py -d chrome\Release
|
| - http://build.chromium.org/f/chromium/continuous/win/LATEST
|
| -"""
|
| -
|
| -import glob
|
| -import httplib
|
| -import optparse
|
| -import os
|
| -import platform
|
| -import shutil
|
| -import sys
|
| -import urllib
|
| -import urllib2
|
| -import urlparse
|
| -
|
| -import pyauto_utils
|
| -
|
| -
|
| -class FetchPrebuilt(object):
|
| - """Util class to fetch prebuilt binaries to run PyAuto."""
|
| -
|
| - def _ParseArgs(self):
|
| - parser = optparse.OptionParser()
|
| - parser.add_option(
|
| - '-d', '--outdir', type='string', default=None,
|
| - help='Directory in which to setup. This is typically the directory '
|
| - 'where the binaries would go when compiled from source.')
|
| - parser.add_option(
|
| - '-p', '--platform', type='string',
|
| - default=pyauto_utils.GetCurrentPlatform(),
|
| - help='Platform. Valid options: win, mac, linux32, linux64. '
|
| - 'Default: current platform (%s)' % pyauto_utils.GetCurrentPlatform())
|
| - parser.add_option(
|
| - '-l', '--latest', action='store_true', default=False,
|
| - help='Download the latest chromium build from commondatastorage. '
|
| - '[default=False]')
|
| - self._options, self._args = parser.parse_args()
|
| - if self._options.latest:
|
| - self._url = self._GetLastestDownloadURL(self._options.platform)
|
| - elif not self._args:
|
| - print >>sys.stderr, 'Need download url'
|
| - sys.exit(2)
|
| - else:
|
| - self._url = self._args[0]
|
| - if not self._options.outdir:
|
| - print >>sys.stderr, 'Need output directory: -d/--outdir'
|
| - sys.exit(1)
|
| - self._outdir = self._options.outdir
|
| - # Chromium continuous build archive has a non-standard format.
|
| - if 'index.html?path=' in self._url:
|
| - self._url = self._url.replace('index.html?path=', '')
|
| - self._url = self._url.rstrip('/')
|
| - # Determine name of zip.
|
| - if not self._options.platform.startswith('linux'):
|
| - self._chrome_zip_name = 'chrome-%s' % {'mac': 'mac',
|
| - 'win': 'win32'
|
| - }[self._options.platform]
|
| - else:
|
| - linux_32_names = ['linux', 'lucid32bit']
|
| - linux_64_names = ['linux64', 'lucid64bit']
|
| - linux_names = {'linux': linux_32_names + linux_64_names,
|
| - 'linux32': linux_32_names,
|
| - 'linux64': linux_64_names
|
| - }[self._options.platform]
|
| - for name in linux_names:
|
| - zip_name = 'chrome-' + name
|
| - if pyauto_utils.DoesUrlExist('%s/%s.zip' % (self._url, zip_name)):
|
| - self._chrome_zip_name = zip_name
|
| - break
|
| - else:
|
| - raise RuntimeError('Could not find chrome zip at ' + self._url)
|
| -
|
| - # Setup urls to download.
|
| - self._chrome_zip_url = '%s/%s.zip' % (self._url, self._chrome_zip_name)
|
| - self._remoting_zip_url = self._url + '/' + 'remoting-webapp.zip'
|
| - chrome_test_url = '%s/%s.test' % (self._url, self._chrome_zip_name)
|
| - self._pyautolib_py_url = '%s/pyautolib.py' % chrome_test_url
|
| - if self._options.platform == 'win':
|
| - self._pyautolib_so_name = '_pyautolib.pyd'
|
| - self._chromedriver_name = 'chromedriver.exe'
|
| - else:
|
| - self._pyautolib_so_name = '_pyautolib.so'
|
| - self._chromedriver_name = 'chromedriver'
|
| - if self._options.platform == 'mac':
|
| - self._ffmpegsumo_so_name = 'ffmpegsumo.so'
|
| - self._ffmpegsumo_so_url = chrome_test_url + '/' + self._ffmpegsumo_so_name
|
| - self._pyautolib_so_url = chrome_test_url + '/' + self._pyautolib_so_name
|
| - self._chromedriver_url = chrome_test_url + '/' + self._chromedriver_name
|
| -
|
| - def _GetLastestDownloadURL(self, os_platform):
|
| - os_type = {'win': 'Win',
|
| - 'mac': 'Mac',
|
| - 'linux': 'Linux',
|
| - 'linux32': 'Linux',
|
| - 'linux64': 'Linux_x64'}[os_platform]
|
| - if os_type == 'Linux' and platform.architecture()[0] == '64bit':
|
| - os_type = 'Linux_x64'
|
| - last_change_url = ('http://commondatastorage.googleapis.com/'
|
| - 'chromium-browser-continuous/%s/LAST_CHANGE' % os_type)
|
| - response = urllib2.urlopen(last_change_url)
|
| - last_change = response.read()
|
| - if not last_change:
|
| - print >>sys.stderr, ('Unable to get latest from %s' % last_change_url)
|
| - sys.exit(2)
|
| - last_change_url = ('http://commondatastorage.googleapis.com/'
|
| - 'chromium-browser-continuous/%s/%s' % (os_type,
|
| - last_change))
|
| - return last_change_url
|
| -
|
| - def Cleanup(self):
|
| - """Remove old binaries, if any."""
|
| - pass
|
| -
|
| - def Run(self):
|
| - self._ParseArgs()
|
| - if not os.path.isdir(self._outdir):
|
| - os.makedirs(self._outdir)
|
| - get_remoting = pyauto_utils.DoesUrlExist(self._remoting_zip_url)
|
| -
|
| - # Fetch chrome & pyauto binaries
|
| - print 'Fetching', self._chrome_zip_url
|
| - chrome_zip = urllib.urlretrieve(self._chrome_zip_url)[0]
|
| -
|
| - if get_remoting:
|
| - print 'Fetching', self._remoting_zip_url
|
| - remoting_zip = urllib.urlretrieve(self._remoting_zip_url)[0]
|
| - else:
|
| - print 'Warning: %s does not exist.' % self._remoting_zip_url
|
| -
|
| - print 'Fetching', self._pyautolib_py_url
|
| - pyautolib_py = urllib.urlretrieve(self._pyautolib_py_url)[0]
|
| -
|
| - print 'Fetching', self._pyautolib_so_url
|
| - pyautolib_so = urllib.urlretrieve(self._pyautolib_so_url)[0]
|
| -
|
| - if self._options.platform == 'mac':
|
| - print 'Fetching', self._ffmpegsumo_so_url
|
| - ffmpegsumo_so = urllib.urlretrieve(self._ffmpegsumo_so_url)[0]
|
| -
|
| - print 'Fetching', self._chromedriver_url
|
| - chromedriver = urllib.urlretrieve(self._chromedriver_url)[0]
|
| -
|
| - chrome_unzip_dir = os.path.join(self._outdir, self._chrome_zip_name)
|
| - if os.path.exists(chrome_unzip_dir):
|
| - print 'Cleaning', chrome_unzip_dir
|
| - pyauto_utils.RemovePath(chrome_unzip_dir)
|
| - print 'Unzipping'
|
| - pyauto_utils.UnzipFilenameToDir(chrome_zip, self._outdir)
|
| - if get_remoting:
|
| - pyauto_utils.UnzipFilenameToDir(remoting_zip, self._outdir)
|
| - shutil.move(self._outdir + '/remoting-webapp',
|
| - self._outdir + '/remoting/remoting.webapp')
|
| -
|
| - # Copy over the binaries to outdir
|
| - items_to_copy = {
|
| - pyautolib_py: os.path.join(self._outdir, 'pyautolib.py'),
|
| - pyautolib_so: os.path.join(self._outdir, self._pyautolib_so_name),
|
| - chromedriver: os.path.join(self._outdir, self._chromedriver_name)
|
| - }
|
| - if self._options.platform == 'mac':
|
| - items_to_copy[ffmpegsumo_so] = \
|
| - os.path.join(self._outdir, self._ffmpegsumo_so_name)
|
| -
|
| - unzip_dir_contents = glob.glob(os.path.join(chrome_unzip_dir, '*'))
|
| - for item in unzip_dir_contents:
|
| - name = os.path.basename(item)
|
| - items_to_copy[item] = os.path.join(self._outdir, name)
|
| -
|
| - for src, dest in items_to_copy.iteritems():
|
| - pyauto_utils.RemovePath(dest)
|
| - print '%s ==> %s' % (os.path.basename(src), dest)
|
| - shutil.move(src, dest)
|
| - pyauto_utils.RemovePath(chrome_unzip_dir)
|
| -
|
| - # Final setup (if any)
|
| - # Set executable bit on chromedriver binary.
|
| - if not self._options.platform == 'win':
|
| - os.chmod(items_to_copy[chromedriver], 0700)
|
| -
|
| - # Create symlink to .framework on Mac
|
| - if self._options.platform == 'mac':
|
| - mac_app_name = os.path.basename([x for x in unzip_dir_contents
|
| - if x.endswith('.app')][0])
|
| - os.chdir(self._outdir)
|
| - framework = glob.glob(os.path.join(
|
| - mac_app_name, 'Contents', 'Versions', '*', '*.framework'))[0]
|
| - print framework
|
| - dest = os.path.basename(framework)
|
| - os.path.lexists(dest) and os.remove(dest)
|
| - print 'Creating symlink "%s"' % dest
|
| - os.symlink(framework, dest)
|
| -
|
| - print 'Prepared binaries in "%s"' % self._outdir
|
| - return 0
|
| -
|
| -
|
| -if __name__ == '__main__':
|
| - sys.exit(FetchPrebuilt().Run())
|
|
|