# Copyright (C) 2009, Google Inc. All rights reserved. # Copyright (C) 2013 Nokia Corporation and/or its subsidiary(-ies). # Copyright (C) 2015-2019 Apple Inc. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are # met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above # copyright notice, this list of conditions and the following disclaimer # in the documentation and/or other materials provided with the # distribution. # * Neither the name of Google Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # # WebKit's Python module for understanding the various ports import os import platform from webkitpy.common.system.executive import Executive class DeprecatedPort(object): results_directory = "/tmp/layout-test-results" # Subclasses must override port_flag_name = None # FIXME: This is only used by BotInfo. def name(self): return self.__class__ def flag(self): if self.port_flag_name: return "--port=%s" % self.port_flag_name return None # We might need to pass scm into this function for scm.checkout_root def script_path(self, script_name): return os.path.join("Tools", "Scripts", script_name) def script_shell_command(self, script_name): script_path = self.script_path(script_name) return Executive.shell_command_for_script(script_path) @staticmethod def port(port_name): ports = { "ftw": FTWPort, "gtk-wk2": GtkWK2Port, "ios-device": IOSPort, "ios-simulator-wk2": IOSSimulatorWK2Port, "jsc-only": JscOnlyPort, "mac": MacPort, "mac-wk2": MacWK2Port, "win": WinPort, "wincairo": WinCairoPort, "wpe": WpePort, } default_port = { "Windows": WinPort, "Darwin": MacPort, } # Do we really need MacPort as the ultimate default? return ports.get(port_name, default_port.get(platform.system(), MacPort))() def makeArgs(self): # FIXME: This shouldn't use a static Executive(). args = '--makeargs="-j%s"' % Executive().cpu_count() if 'MAKEFLAGS' in os.environ: args = '--makeargs="%s"' % os.environ['MAKEFLAGS'] return args def update_webkit_command(self, non_interactive=False): return self.script_shell_command("update-webkit") def check_webkit_style_command(self): return self.script_shell_command("check-webkit-style") def prepare_changelog_command(self): return self.script_shell_command("prepare-ChangeLog") def _append_build_style_flag(self, command, build_style): if build_style == "debug": command.append("--debug") elif build_style == "release": command.append("--release") return command def build_webkit_command(self, build_style=None): command = self.script_shell_command("build-webkit") return self._append_build_style_flag(command, build_style) def build_jsc_command(self, build_style=None): command = self.script_shell_command("build-jsc") return self._append_build_style_flag(command, build_style) def run_javascriptcore_tests_command(self, build_style=None): command = self.script_shell_command("run-javascriptcore-tests") command.append("--no-fail-fast") if 'JSCTESTS_OPTIONS' in os.environ: command += os.environ['JSCTESTS_OPTIONS'].split() return self._append_build_style_flag(command, build_style) def run_webkit_tests_command(self, build_style=None): command = self.script_shell_command("run-webkit-tests") return self._append_build_style_flag(command, build_style) def run_python_unittests_command(self): return self.script_shell_command("test-webkitpy") def run_perl_unittests_command(self): return self.script_shell_command("test-webkitperl") def run_sort_xcode_project_file_command(self): return self.script_shell_command("sort-Xcode-project-file") class IOSPort(DeprecatedPort): port_flag_name = "ios-device" def build_webkit_command(self, build_style=None): command = super(IOSPort, self).build_webkit_command(build_style=build_style) command.append("--sdk=iphoneos") return command class IOSSimulatorWK2Port(DeprecatedPort): port_flag_name = "ios-simulator-wk2" def build_webkit_command(self, build_style=None): command = super(IOSSimulatorWK2Port, self).build_webkit_command(build_style=build_style) command.append("--sdk=iphonesimulator") return command def run_webkit_tests_command(self, build_style=None): command = super(IOSSimulatorWK2Port, self).run_webkit_tests_command(build_style) command.append("--ios-simulator") command.append("--dedicated-simulators") return command class MacPort(DeprecatedPort): port_flag_name = "mac" def run_webkit_tests_command(self, build_style=None): command = super(MacPort, self).run_webkit_tests_command(build_style) command.append("--dump-render-tree") return command class MacWK2Port(DeprecatedPort): port_flag_name = "mac-wk2" class WinPort(DeprecatedPort): port_flag_name = "win" def run_webkit_tests_command(self, build_style=None): command = super(WinPort, self).run_webkit_tests_command(build_style) command.append("--dump-render-tree") return command class WinCairoPort(DeprecatedPort): port_flag_name = "wincairo" def build_webkit_command(self, build_style=None): command = super(WinCairoPort, self).build_webkit_command(build_style=build_style) command.append('--wincairo') return command def run_webkit_tests_command(self, build_style=None): command = super(WinCairoPort, self).run_webkit_tests_command(build_style) command.append("--wincairo") return command class FTWPort(DeprecatedPort): port_flag_name = "ftw" def build_webkit_command(self, build_style=None): command = super(FTWPort, self).build_webkit_command(build_style=build_style) command.append('--ftw') return command def run_webkit_tests_command(self, build_style=None): command = super(FTWPort, self).run_webkit_tests_command(build_style) command.append("--ftw") return command class GtkWK2Port(DeprecatedPort): port_flag_name = "gtk-wk2" def build_webkit_command(self, build_style=None): command = super(GtkWK2Port, self).build_webkit_command(build_style=build_style) command.append("--gtk") command.append("--update-gtk") command.append(super(GtkWK2Port, self).makeArgs()) return command def run_webkit_tests_command(self, build_style=None): command = super(GtkWK2Port, self).run_webkit_tests_command(build_style) command.append("--gtk") return command class WpePort(DeprecatedPort): port_flag_name = "wpe" def build_webkit_command(self, build_style=None): command = super(WpePort, self).build_webkit_command(build_style=build_style) command.append("--wpe") command.append("--update-wpe") command.append(super(WpePort, self).makeArgs()) return command def run_webkit_tests_command(self, build_style=None): command = super(WpePort, self).run_webkit_tests_command(build_style) command.append("--wpe") return command class JscOnlyPort(DeprecatedPort): port_flag_name = "jsc-only" def build_jsc_command(self, build_style=None): command = self.script_shell_command("build-jsc") command.append("--jsc-only") return self._append_build_style_flag(command, build_style) def run_javascriptcore_tests_command(self, build_style=None): command = self.script_shell_command("run-javascriptcore-tests") command.append("--no-fail-fast") command.append("--no-testmasm") command.append("--no-testair") command.append("--no-testb3") command.append("--no-testdfg") command.append("--no-testapi") if 'JSCTESTS_OPTIONS' in os.environ: command += os.environ['JSCTESTS_OPTIONS'].split() return self._append_build_style_flag(command, build_style)