Nix upstreaming - Adding build files and supporting scripts
[WebKit-https.git] / Tools / Scripts / webkitpy / port / nix.py
1 # Copyright (C) 2011 ProFUSION Embedded Systems. All rights reserved.
2 # Copyright (C) 2011 Samsung Electronics. All rights reserved.
3 # Copyright (C) 2012 Intel Corporation
4 # Copyright (C) 2012, 2013 Nokia Corporation and/or its subsidiary(-ies).
5 #
6 # Redistribution and use in source and binary forms, with or without
7 # modification, are permitted provided that the following conditions are
8 # met:
9 #
10 #     * Redistributions of source code must retain the above copyright
11 # notice, this list of conditions and the following disclaimer.
12 #     * Redistributions in binary form must reproduce the above
13 # copyright notice, this list of conditions and the following disclaimer
14 # in the documentation and/or other materials provided with the
15 # distribution.
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 Nix implementation of the Port interface."""
30
31 import os
32
33 from webkitpy.layout_tests.models.test_configuration import TestConfiguration
34 from webkitpy.port.base import Port
35 from webkitpy.port.pulseaudio_sanitizer import PulseAudioSanitizer
36
37
38 class NixPort(Port):
39     port_name = 'nix'
40
41     def _wk2_port_name(self):
42         return 'nix'
43
44     @classmethod
45     def determine_full_port_name(cls, host, options, port_name):
46         """Determine the port name based on host and options values."""
47         # Currently the only "port" instance supported by Nix is "nix". Reimplementing
48         # this method avoids changing port name to nix-wk2, which is the default
49         # behavior in base.py.
50         return port_name
51
52     def __init__(self, *args, **kwargs):
53         super(NixPort, self).__init__(*args, **kwargs)
54
55         self._jhbuild_wrapper_path = [self.path_from_webkit_base('Tools', 'jhbuild', 'jhbuild-wrapper'), '--nix', 'run']
56
57         self.set_option_default('wrapper', ' '.join(self._jhbuild_wrapper_path))
58         self.set_option_default('webkit_test_runner', True)
59         self.webprocess_cmd_prefix = self.get_option('webprocess_cmd_prefix')
60
61         self._pulseaudio_sanitizer = PulseAudioSanitizer()
62
63     def _port_flag_for_scripts(self):
64         return "--nix"
65
66     def setup_test_run(self):
67         self._pulseaudio_sanitizer.unload_pulseaudio_module()
68
69     def setup_environ_for_server(self, server_name=None):
70         env = super(NixPort, self).setup_environ_for_server(server_name)
71         # If DISPLAY environment variable is unset in the system
72         # e.g. on build bot, remove DISPLAY variable from the dictionary
73         if not 'DISPLAY' in os.environ:
74             del env['DISPLAY']
75         env['TEST_RUNNER_INJECTED_BUNDLE_FILENAME'] = self._build_path('lib', 'libTestRunnerInjectedBundle.so')
76         env['TEST_RUNNER_PLUGIN_PATH'] = self._build_path('lib')
77         if self.webprocess_cmd_prefix:
78             env['WEB_PROCESS_CMD_PREFIX'] = self.webprocess_cmd_prefix
79
80         return env
81
82     def default_timeout_ms(self):
83         # Tests run considerably slower under gdb
84         # or valgrind.
85         if self.get_option('webprocess_cmd_prefix'):
86             return 350 * 1000
87         return super(NixPort, self).default_timeout_ms()
88
89     def clean_up_test_run(self):
90         super(NixPort, self).clean_up_test_run()
91         self._pulseaudio_sanitizer.restore_pulseaudio_module()
92
93     def _generate_all_test_configurations(self):
94         return [TestConfiguration(version=self._version, architecture='x86', build_type=build_type) for build_type in self.ALL_BUILD_TYPES]
95
96     def _path_to_driver(self):
97         return self._build_path('bin', self.driver_name())
98
99     def _path_to_image_diff(self):
100         return self._build_path('bin', 'ImageDiff')
101
102     def _image_diff_command(self, *args, **kwargs):
103         return self._jhbuild_wrapper_path + super(NixPort, self)._image_diff_command(*args, **kwargs)
104
105     def _search_paths(self):
106         return [self.port_name]
107
108     def show_results_html_file(self, results_filename):
109         run_launcher_args = ["file://%s" % results_filename]
110         self._run_script("run-launcher", run_launcher_args)
111
112     def _port_specific_expectations_files(self):
113         paths = self._search_paths()
114         if self.get_option('webkit_test_runner'):
115             paths.append('wk2')
116         return list(([self._filesystem.join(self._webkit_baseline_path(p), 'TestExpectations') for p in paths]))
117
118     def default_baseline_search_path(self):
119         return map(self._webkit_baseline_path, ['nix', 'wk2'])