1dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#!/usr/bin/env python 2dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# Copyright (C) 2010 Google Inc. All rights reserved. 3dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# 4dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# Redistribution and use in source and binary forms, with or without 5dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# modification, are permitted provided that the following conditions are 6dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# met: 7dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# 8dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# * Redistributions of source code must retain the above copyright 9dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# notice, this list of conditions and the following disclaimer. 10dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# * Redistributions in binary form must reproduce the above 11dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# copyright notice, this list of conditions and the following disclaimer 12dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# in the documentation and/or other materials provided with the 13dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# distribution. 14dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# * Neither the name of Google Inc. nor the names of its 15dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# contributors may be used to endorse or promote products derived from 16dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# this software without specific prior written permission. 17dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# 18dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 30dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block"""Factory method to retrieve the appropriate port implementation.""" 31dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 32dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 33dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockimport sys 34dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 3581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 3681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochdef all_port_names(): 3781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch """Return a list of all valid, fully-specified, "real" port names. 3881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 3981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch This is the list of directories that are used as actual baseline_paths() 4081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch by real ports. This does not include any "fake" names like "test" 4181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch or "mock-mac", and it does not include any directories that are not .""" 4281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch # FIXME: There's probably a better way to generate this list ... 4381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return ['chromium-gpu-linux', 4481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 'chromium-gpu-mac-snowleopard', 'chromium-gpu-mac-leopard', 4581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 'chromium-gpu-win-xp', 'chromium-gpu-win-vista', 'chromium-gpu-win-win7', 4681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 'chromium-linux-x86_64', 'chromium-linux-x86', 4781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 'chromium-mac-leopard', 'chromium-mac-snowleopard', 4881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 'chromium-win-xp', 'chromium-win-vista', 'chromium-win-win7', 4981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 'google-chrome-linux32', 'google-chrome-linux64', 5081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 'gtk', 5181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 'mac-tiger', 'mac-leopard', 'mac-snowleopard', 'mac-wk2', 5281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 'qt-linux', 'qt-mac', 'qt-win', 'qt-wk2', 5381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 'win-xp', 'win', 'win-wk2', 5481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch ] 555abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 56dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 57bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsendef get(port_name=None, options=None, **kwargs): 58dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block """Returns an object implementing the Port interface. If 59dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block port_name is None, this routine attempts to guess at the most 60dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block appropriate port on this platform.""" 61bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen # Wrapped for backwards-compatibility 62bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if port_name: 63bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen kwargs['port_name'] = port_name 64bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if options: 65bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen kwargs['options'] = options 66bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return _get_kwargs(**kwargs) 67bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 68bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 69bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsendef _get_kwargs(**kwargs): 70bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen port_to_use = kwargs.get('port_name', None) 71bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen options = kwargs.get('options', None) 72dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if port_to_use is None: 73dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if sys.platform == 'win32' or sys.platform == 'cygwin': 74dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if options and hasattr(options, 'chromium') and options.chromium: 75dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block port_to_use = 'chromium-win' 76dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block else: 77dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block port_to_use = 'win' 78dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block elif sys.platform == 'linux2': 79dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block port_to_use = 'chromium-linux' 80dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block elif sys.platform == 'darwin': 81dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if options and hasattr(options, 'chromium') and options.chromium: 82dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block port_to_use = 'chromium-mac' 83dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block else: 84dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block port_to_use = 'mac' 85dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 86dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if port_to_use is None: 87dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block raise NotImplementedError('unknown port; sys.platform = "%s"' % 88dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block sys.platform) 89dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 902fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if port_to_use.startswith('test'): 91dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block import test 92bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen maker = test.TestPort 93dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block elif port_to_use.startswith('dryrun'): 94dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block import dryrun 95bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen maker = dryrun.DryRunPort 962fc2651226baac27029e38c9d6ef883fa32084dbSteve Block elif port_to_use.startswith('mock-'): 972fc2651226baac27029e38c9d6ef883fa32084dbSteve Block import mock_drt 982fc2651226baac27029e38c9d6ef883fa32084dbSteve Block maker = mock_drt.MockDRTPort 99dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block elif port_to_use.startswith('mac'): 100dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block import mac 101bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen maker = mac.MacPort 102dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block elif port_to_use.startswith('win'): 103dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block import win 104bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen maker = win.WinPort 105dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block elif port_to_use.startswith('gtk'): 106dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block import gtk 107bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen maker = gtk.GtkPort 108dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block elif port_to_use.startswith('qt'): 109dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block import qt 110bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen maker = qt.QtPort 111bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen elif port_to_use.startswith('chromium-gpu'): 112bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen import chromium_gpu 113bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen maker = chromium_gpu.get 114dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block elif port_to_use.startswith('chromium-mac'): 115dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block import chromium_mac 116bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen maker = chromium_mac.ChromiumMacPort 117dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block elif port_to_use.startswith('chromium-linux'): 118dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block import chromium_linux 119bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen maker = chromium_linux.ChromiumLinuxPort 120dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block elif port_to_use.startswith('chromium-win'): 121dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block import chromium_win 122bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen maker = chromium_win.ChromiumWinPort 123f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick elif port_to_use.startswith('google-chrome'): 124f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick import google_chrome 125bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen maker = google_chrome.GetGoogleChromePort 126bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen else: 127bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen raise NotImplementedError('unsupported port: %s' % port_to_use) 128bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return maker(**kwargs) 129