e769171725a0afdd447151063772a70d9d2bcd51
[WebKit-https.git] / WebKitTools / Scripts / modules / webkitport.py
1 # Copyright (C) 2009, Google Inc. All rights reserved.
2
3 # Redistribution and use in source and binary forms, with or without
4 # modification, are permitted provided that the following conditions are
5 # met:
6
7 #     * Redistributions of source code must retain the above copyright
8 # notice, this list of conditions and the following disclaimer.
9 #     * Redistributions in binary form must reproduce the above
10 # copyright notice, this list of conditions and the following disclaimer
11 # in the documentation and/or other materials provided with the
12 # distribution.
13 #     * Neither the name of Google Inc. nor the names of its
14 # contributors may be used to endorse or promote products derived from
15 # this software without specific prior written permission.
16
17 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 #
29 # WebKit's Python module for understanding the various ports
30
31 import os
32
33 from optparse import make_option
34
35 class WebKitPort():
36     # We might need to pass scm into this function for scm.checkout_root
37     @classmethod
38     def script_path(cls, script_name):
39         return os.path.join("WebKitTools", "Scripts", script_name)
40
41     @staticmethod
42     def port_options():
43         return [
44             make_option("--port", action="store", dest="port", default=None, help="Specify a port (e.g., mac, qt, gtk, ...)."),
45         ]
46
47     @staticmethod
48     def port(options):
49         if options.port == "mac":
50             return MacPort
51         if options.port == "qt":
52             return QtPort
53         if options.port == "chromium":
54             return ChromiumPort
55         # FIXME: We should default to WinPort on Windows.
56         return MacPort
57
58     @classmethod
59     def name(cls):
60         raise NotImplementedError, "subclasses must implement"
61
62     @classmethod
63     def flag(cls):
64         raise NotImplementedError, "subclasses must implement"
65
66     @classmethod
67     def update_webkit_command(cls):
68         return [cls.script_path("update-webkit")]
69
70     @classmethod
71     def build_webkit_command(cls):
72         return [cls.script_path("build-webkit")]
73
74     @classmethod
75     def run_webkit_tests_command(cls):
76         return [cls.script_path("run-webkit-tests")]
77
78
79 class MacPort(WebKitPort):
80     @classmethod
81     def name(cls):
82         return "Mac"
83
84     @classmethod
85     def flag(cls):
86         return "--port=mac"
87
88
89 class QtPort(WebKitPort):
90     @classmethod
91     def name(cls):
92         return "Qt"
93
94     @classmethod
95     def flag(cls):
96         return "--port=qt"
97
98     @classmethod
99     def build_webkit_command(cls):
100         command = WebKitPort.build_webkit_command()
101         command.append("--qt")
102         return command
103
104
105 class ChromiumPort(WebKitPort):
106     @classmethod
107     def name(cls):
108         return "Chromium"
109
110     @classmethod
111     def flag(cls):
112         return "--port=chromium"
113
114     @classmethod
115     def update_webkit_command(cls):
116         command = WebKitPort.update_webkit_command()
117         command.append("--chromium")
118         return command
119
120     @classmethod
121     def build_webkit_command(cls):
122         command = WebKitPort.build_webkit_command()
123         command.append("--chromium")
124         return command