From c8cd55b03097c96f46a6e5e364cf0ca0ee590875 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20M=C3=BCller?= Date: Wed, 5 Feb 2020 21:37:46 +0100 Subject: qtwebkit: build with python3 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Andreas Müller --- .../0001-Do-not-skip-build-for-cross-compile.patch | 28 - .../qt5/qtwebkit/0001-Port-build-to-python3.patch | 3845 ++++++++++++++++++++ .../0002-Do-not-skip-build-for-cross-compile.patch | 28 + ...002-Fix-build-with-non-glibc-libc-on-musl.patch | 69 - .../0003-Fix-build-bug-for-armv32-BE.patch | 25 - ...003-Fix-build-with-non-glibc-libc-on-musl.patch | 69 + .../0004-Fix-build-bug-for-armv32-BE.patch | 25 + ...cmake-Do-not-generate-hardcoded-include-p.patch | 37 - ...cmake-Do-not-generate-hardcoded-include-p.patch | 37 + recipes-qt/qt5/qtwebkit_git.bb | 17 +- 10 files changed, 4011 insertions(+), 169 deletions(-) delete mode 100644 recipes-qt/qt5/qtwebkit/0001-Do-not-skip-build-for-cross-compile.patch create mode 100644 recipes-qt/qt5/qtwebkit/0001-Port-build-to-python3.patch create mode 100644 recipes-qt/qt5/qtwebkit/0002-Do-not-skip-build-for-cross-compile.patch delete mode 100644 recipes-qt/qt5/qtwebkit/0002-Fix-build-with-non-glibc-libc-on-musl.patch delete mode 100644 recipes-qt/qt5/qtwebkit/0003-Fix-build-bug-for-armv32-BE.patch create mode 100644 recipes-qt/qt5/qtwebkit/0003-Fix-build-with-non-glibc-libc-on-musl.patch create mode 100644 recipes-qt/qt5/qtwebkit/0004-Fix-build-bug-for-armv32-BE.patch delete mode 100644 recipes-qt/qt5/qtwebkit/0004-PlatformQt.cmake-Do-not-generate-hardcoded-include-p.patch create mode 100644 recipes-qt/qt5/qtwebkit/0005-PlatformQt.cmake-Do-not-generate-hardcoded-include-p.patch diff --git a/recipes-qt/qt5/qtwebkit/0001-Do-not-skip-build-for-cross-compile.patch b/recipes-qt/qt5/qtwebkit/0001-Do-not-skip-build-for-cross-compile.patch deleted file mode 100644 index a237d03d..00000000 --- a/recipes-qt/qt5/qtwebkit/0001-Do-not-skip-build-for-cross-compile.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 34018c2a61045c58f88e09a12ecd62533aa2c2f1 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Andreas=20M=C3=BCller?= -Date: Mon, 4 Jun 2018 10:35:46 +0200 -Subject: [PATCH] Do not skip build for cross-compile -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Upstream-Status: Inappropriate [OE specific] - -Signed-off-by: Andreas Müller ---- - Tools/qmake/mkspecs/features/functions.prf | 2 -- - 1 file changed, 2 deletions(-) - -diff --git a/Tools/qmake/mkspecs/features/functions.prf b/Tools/qmake/mkspecs/features/functions.prf -index e3f42cec4..797b7085f 100644 ---- a/Tools/qmake/mkspecs/features/functions.prf -+++ b/Tools/qmake/mkspecs/features/functions.prf -@@ -53,8 +53,6 @@ defineReplace(appleSdkVersion) { - defineTest(isPlatformSupported) { - !qtHaveModule(widgets): skipBuild("QtWidgets module is required to build QtWebKit.") - -- cross_compile: skipBuild("cross-compilation of QtWebKit with qmake is not supported yet") -- - requiredPrograms = cmake gperf python perl bison ruby flex - for(program, requiredPrograms): \ - !programExistsInPath($$program): \ diff --git a/recipes-qt/qt5/qtwebkit/0001-Port-build-to-python3.patch b/recipes-qt/qt5/qtwebkit/0001-Port-build-to-python3.patch new file mode 100644 index 00000000..5c925cd5 --- /dev/null +++ b/recipes-qt/qt5/qtwebkit/0001-Port-build-to-python3.patch @@ -0,0 +1,3845 @@ +From a8bbd89d7a1d3e8ca381c025bc8dd1275c59356a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Andreas=20M=C3=BCller?= +Date: Tue, 4 Feb 2020 22:41:00 +0100 +Subject: [PATCH] Port build to python3 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Procdure: + +* send all py-files through 2to3 +* find inspiration at / steel from (jsmin.py) webkitgtk +* manual fixes e.g rename builtins to mybuiltins - 'import builtins' does + not load what's defined here + +Upstream-Status: Pending + +Signed-off-by: Andreas Müller +--- + Source/JavaScriptCore/CMakeLists.txt | 18 +-- + Source/JavaScriptCore/DerivedSources.make | 18 +-- + .../JavaScriptCore/KeywordLookupGenerator.py | 28 ++-- + .../Scripts/builtins/builtins.py | 11 -- + .../generate-combined-inspector-json.py | 4 +- + .../Scripts/generate-js-builtins.py | 12 +- + ...line-and-minify-stylesheets-and-scripts.py | 2 +- + Source/JavaScriptCore/Scripts/jsmin.py | 23 +-- + .../Scripts/make-js-file-arrays.py | 59 +++++--- + .../{builtins => mybuiltins}/__init__.py | 2 +- + .../Scripts/mybuiltins/mybuiltins.py | 11 ++ + .../mybuiltins_generate_combined_header.py} | 4 +- + ...ltins_generate_combined_implementation.py} | 6 +- + .../mybuiltins_generate_separate_header.py} | 6 +- + ...ltins_generate_separate_implementation.py} | 6 +- + .../mybuiltins_generator.py} | 4 +- + .../mybuiltins_model.py} | 7 +- + .../mybuiltins_templates.py} | 0 + .../disassembler/udis86/ud_itab.py | 10 +- + .../disassembler/udis86/ud_opcode.py | 12 +- + Source/JavaScriptCore/generate-bytecode-files | 16 +-- + .../inspector/scripts/codegen/__init__.py | 42 +++--- + .../scripts/codegen/cpp_generator.py | 20 +-- + ...cpp_alternate_backend_dispatcher_header.py | 8 +- + .../generate_cpp_backend_dispatcher_header.py | 16 +-- + ...e_cpp_backend_dispatcher_implementation.py | 12 +- + ...generate_cpp_frontend_dispatcher_header.py | 12 +- + ..._cpp_frontend_dispatcher_implementation.py | 12 +- + .../generate_cpp_protocol_types_header.py | 38 ++--- + ...erate_cpp_protocol_types_implementation.py | 20 +-- + .../codegen/generate_js_backend_commands.py | 14 +- + ...generate_objc_backend_dispatcher_header.py | 14 +- + ..._objc_backend_dispatcher_implementation.py | 18 +-- + .../generate_objc_configuration_header.py | 6 +- + ...erate_objc_configuration_implementation.py | 6 +- + .../generate_objc_conversion_helpers.py | 12 +- + ...objc_frontend_dispatcher_implementation.py | 16 +-- + .../scripts/codegen/generate_objc_header.py | 28 ++-- + .../codegen/generate_objc_internal_header.py | 10 +- + ...rate_objc_protocol_types_implementation.py | 16 +-- + .../inspector/scripts/codegen/generator.py | 12 +- + .../inspector/scripts/codegen/models.py | 2 +- + .../scripts/codegen/objc_generator.py | 74 +++++----- + .../generate-inspector-protocol-bindings.py | 2 +- + .../scripts/CodeGeneratorReplayInputs.py | 26 ++-- + .../ANGLE/generate_winrt_projects.py | 4 +- + .../ANGLE/src/libANGLE/Float16ToFloat32.py | 26 ++-- + .../renderer/generate_new_renderer.py | 2 +- + .../gtest/scripts/fuse_gtest_files.py | 12 +- + .../gtest/scripts/gen_gtest_pred_impl.py | 12 +- + Source/ThirdParty/gtest/scripts/pump.py | 30 ++-- + Source/ThirdParty/gtest/scripts/upload.py | 134 +++++++++--------- + .../test/gtest_break_on_failure_unittest.py | 2 +- + .../ThirdParty/gtest/test/gtest_color_test.py | 66 ++++----- + .../gtest/test/gtest_env_var_test.py | 4 +- + .../gtest/test/gtest_filter_unittest.py | 14 +- + .../ThirdParty/gtest/test/gtest_help_test.py | 16 +-- + .../gtest/test/gtest_list_tests_unittest.py | 4 +- + .../gtest/test/gtest_shuffle_test.py | 40 +++--- + .../ThirdParty/gtest/test/gtest_test_utils.py | 2 +- + .../gtest/test/gtest_throw_on_failure_test.py | 4 +- + .../gtest/test/gtest_uninitialized_test.py | 4 +- + .../gtest/test/gtest_xml_outfiles_test.py | 6 +- + .../gtest/test/gtest_xml_output_unittest.py | 22 +-- + .../gtest/test/gtest_xml_test_utils.py | 26 ++-- + .../ThirdParty/gtest/test/run_tests_util.py | 26 ++-- + .../gtest/test/run_tests_util_test.py | 16 +-- + .../gtest/xcode/Scripts/versiongenerate.py | 2 +- + Source/WebCore/AVFoundationSupport.py | 14 +- + Source/WebCore/CMakeLists.txt | 16 +-- + Source/WebCore/DerivedSources.make | 16 +-- + .../network/create-http-header-name-table | 2 +- + Source/WebInspectorUI/Scripts/jsmin.py | 23 +-- + .../Scripts/generate-message-receiver.py | 2 +- + .../Scripts/generate-messages-header.py | 2 +- + .../Scripts/webkit/messages_unittest.py | 46 +++--- + Source/cmake/WebKitCommon.cmake | 3 - + Tools/jhbuild/jhbuildutils.py | 10 +- + 78 files changed, 665 insertions(+), 638 deletions(-) + delete mode 100644 Source/JavaScriptCore/Scripts/builtins/builtins.py + rename Source/JavaScriptCore/Scripts/{builtins => mybuiltins}/__init__.py (72%) + create mode 100644 Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins.py + rename Source/JavaScriptCore/Scripts/{builtins/builtins_generate_combined_header.py => mybuiltins/mybuiltins_generate_combined_header.py} (98%) + rename Source/JavaScriptCore/Scripts/{builtins/builtins_generate_combined_implementation.py => mybuiltins/mybuiltins_generate_combined_implementation.py} (95%) + rename Source/JavaScriptCore/Scripts/{builtins/builtins_generate_separate_header.py => mybuiltins/mybuiltins_generate_separate_header.py} (97%) + rename Source/JavaScriptCore/Scripts/{builtins/builtins_generate_separate_implementation.py => mybuiltins/mybuiltins_generate_separate_implementation.py} (95%) + rename Source/JavaScriptCore/Scripts/{builtins/builtins_generator.py => mybuiltins/mybuiltins_generator.py} (97%) + rename Source/JavaScriptCore/Scripts/{builtins/builtins_model.py => mybuiltins/mybuiltins_model.py} (97%) + rename Source/JavaScriptCore/Scripts/{builtins/builtins_templates.py => mybuiltins/mybuiltins_templates.py} (100%) + +diff --git a/Source/JavaScriptCore/CMakeLists.txt b/Source/JavaScriptCore/CMakeLists.txt +index 937b3ed00..a4b5fd432 100644 +--- a/Source/JavaScriptCore/CMakeLists.txt ++++ b/Source/JavaScriptCore/CMakeLists.txt +@@ -883,7 +883,7 @@ set(JavaScriptCore_SCRIPTS_SOURCES_DIR "${JAVASCRIPTCORE_DIR}/Scripts") + set(JavaScriptCore_SCRIPTS_SOURCES_PATHS + ${JavaScriptCore_SCRIPTS_SOURCES_DIR}/*.pl + ${JavaScriptCore_SCRIPTS_SOURCES_DIR}/*.py +- ${JavaScriptCore_SCRIPTS_SOURCES_DIR}/builtins/builtins*.py ++ ${JavaScriptCore_SCRIPTS_SOURCES_DIR}/mybuiltins/mybuiltins*.py + ) + + # Force JavaScriptCore to run scripts from the same staging path as WebCore. +@@ -1174,14 +1174,14 @@ add_custom_command( + # JSCBuiltins + + set(BUILTINS_GENERATOR_SCRIPTS +- ${JavaScriptCore_SCRIPTS_DIR}/builtins.py +- ${JavaScriptCore_SCRIPTS_DIR}/builtins_generator.py +- ${JavaScriptCore_SCRIPTS_DIR}/builtins_model.py +- ${JavaScriptCore_SCRIPTS_DIR}/builtins_templates.py +- ${JavaScriptCore_SCRIPTS_DIR}/builtins_generate_combined_header.py +- ${JavaScriptCore_SCRIPTS_DIR}/builtins_generate_combined_implementation.py +- ${JavaScriptCore_SCRIPTS_DIR}/builtins_generate_separate_header.py +- ${JavaScriptCore_SCRIPTS_DIR}/builtins_generate_separate_implementation.py ++ ${JavaScriptCore_SCRIPTS_DIR}/mybuiltins.py ++ ${JavaScriptCore_SCRIPTS_DIR}/mybuiltins_generator.py ++ ${JavaScriptCore_SCRIPTS_DIR}/mybuiltins_model.py ++ ${JavaScriptCore_SCRIPTS_DIR}/mybuiltins_templates.py ++ ${JavaScriptCore_SCRIPTS_DIR}/mybuiltins_generate_combined_header.py ++ ${JavaScriptCore_SCRIPTS_DIR}/mybuiltins_generate_combined_implementation.py ++ ${JavaScriptCore_SCRIPTS_DIR}/mybuiltins_generate_separate_header.py ++ ${JavaScriptCore_SCRIPTS_DIR}/mybuiltins_generate_separate_implementation.py + ${JavaScriptCore_SCRIPTS_DIR}/generate-js-builtins.py + ${JavaScriptCore_SCRIPTS_DIR}/lazywriter.py + ) +diff --git a/Source/JavaScriptCore/DerivedSources.make b/Source/JavaScriptCore/DerivedSources.make +index d5a3fc159..7ef28eff3 100644 +--- a/Source/JavaScriptCore/DerivedSources.make ++++ b/Source/JavaScriptCore/DerivedSources.make +@@ -66,15 +66,15 @@ all : \ + # JavaScript builtins. + + BUILTINS_GENERATOR_SCRIPTS = \ +- $(JavaScriptCore_SCRIPTS_DIR)/builtins/__init__.py \ +- $(JavaScriptCore_SCRIPTS_DIR)/builtins/builtins.py \ +- $(JavaScriptCore_SCRIPTS_DIR)/builtins/builtins_generator.py \ +- $(JavaScriptCore_SCRIPTS_DIR)/builtins/builtins_model.py \ +- $(JavaScriptCore_SCRIPTS_DIR)/builtins/builtins_templates.py \ +- $(JavaScriptCore_SCRIPTS_DIR)/builtins/builtins_generate_combined_header.py \ +- $(JavaScriptCore_SCRIPTS_DIR)/builtins/builtins_generate_combined_implementation.py \ +- $(JavaScriptCore_SCRIPTS_DIR)/builtins/builtins_generate_separate_header.py \ +- $(JavaScriptCore_SCRIPTS_DIR)/builtins/builtins_generate_separate_implementation.py \ ++ $(JavaScriptCore_SCRIPTS_DIR)/mybuiltins/__init__.py \ ++ $(JavaScriptCore_SCRIPTS_DIR)/mybuiltins/mybuiltins.py \ ++ $(JavaScriptCore_SCRIPTS_DIR)/mybuiltins/mybuiltins_generator.py \ ++ $(JavaScriptCore_SCRIPTS_DIR)/mybuiltins/mybuiltins_model.py \ ++ $(JavaScriptCore_SCRIPTS_DIR)/mybuiltins/mybuiltins_templates.py \ ++ $(JavaScriptCore_SCRIPTS_DIR)/mybuiltins/mybuiltins_generate_combined_header.py \ ++ $(JavaScriptCore_SCRIPTS_DIR)/mybuiltins/mybuiltins_generate_combined_implementation.py \ ++ $(JavaScriptCore_SCRIPTS_DIR)/mybuiltins/mybuiltins_generate_separate_header.py \ ++ $(JavaScriptCore_SCRIPTS_DIR)/mybuiltins/mybuiltins_generate_separate_implementation.py \ + $(JavaScriptCore_SCRIPTS_DIR)/generate-js-builtins.py \ + $(JavaScriptCore_SCRIPTS_DIR)/lazywriter.py \ + # +diff --git a/Source/JavaScriptCore/KeywordLookupGenerator.py b/Source/JavaScriptCore/KeywordLookupGenerator.py +index d13daba61..938d5d6e7 100644 +--- a/Source/JavaScriptCore/KeywordLookupGenerator.py ++++ b/Source/JavaScriptCore/KeywordLookupGenerator.py +@@ -110,7 +110,7 @@ class Trie: + + def coalesce(self): + keys = {} +- for k, v in self.keys.items(): ++ for k, v in list(self.keys.items()): + t = v.coalesce() + keys[t.prefix] = t + self.keys = keys +@@ -119,7 +119,7 @@ class Trie: + if len(self.keys) != 1: + return self + # Python 3: for() loop for compatibility. Use next() when Python 2.6 is the baseline. +- for (prefix, suffix) in self.keys.items(): ++ for (prefix, suffix) in list(self.keys.items()): + res = Trie(self.prefix + prefix) + res.value = suffix.value + res.keys = suffix.keys +@@ -131,22 +131,22 @@ class Trie: + if self.fullPrefix in keyWordWeights: + weight = weight + keyWordWeights[self.fullPrefix] + self.selfWeight = weight +- for trie in self.keys.values(): ++ for trie in list(self.keys.values()): + trie.fillOut(self.fullPrefix) + weight = weight + trie.weight +- self.keys = [(trie.prefix, trie) for trie in sorted(self.keys.values(), key=operator.attrgetter('weight'), reverse=True)] ++ self.keys = [(trie.prefix, trie) for trie in sorted(list(self.keys.values()), key=operator.attrgetter('weight'), reverse=True)] + self.weight = weight + + def printSubTreeAsC(self, typeName, indent): + str = makePadding(indent) + + if self.value != None: +- print(str + "if (!isIdentPartIncludingEscape(code+%d, m_codeEnd)) {" % (len(self.fullPrefix))) +- print(str + " internalShift<%d>();" % len(self.fullPrefix)) +- print(str + " if (shouldCreateIdentifier)") +- print(str + (" data->ident = &m_vm->propertyNames->%sKeyword;" % self.fullPrefix)) +- print(str + " return " + self.value + ";") +- print(str + "}") ++ print((str + "if (!isIdentPartIncludingEscape(code+%d, m_codeEnd)) {" % (len(self.fullPrefix)))) ++ print((str + " internalShift<%d>();" % len(self.fullPrefix))) ++ print((str + " if (shouldCreateIdentifier)")) ++ print((str + (" data->ident = &m_vm->propertyNames->%sKeyword;" % self.fullPrefix))) ++ print((str + " return " + self.value + ";")) ++ print((str + "}")) + rootIndex = len(self.fullPrefix) + itemCount = 0 + for k, trie in self.keys: +@@ -163,15 +163,15 @@ class Trie: + base = "code + %d" % baseIndex + comparison = ("COMPARE_%d%sS(%s, " % (len(test), typeName, base)) + ", ".join(test) + ")" + if itemCount == 0: +- print(str + "if (" + comparison + ") {") ++ print((str + "if (" + comparison + ") {")) + else: +- print(str + "} else if (" + comparison + ") {") ++ print((str + "} else if (" + comparison + ") {")) + + trie.printSubTreeAsC(typeName, indent + 4) + itemCount = itemCount + 1 + + if itemCount == len(self.keys): +- print(str + "}") ++ print((str + "}")) + + def maxLength(self): + max = len(self.fullPrefix) +@@ -187,7 +187,7 @@ class Trie: + print("static ALWAYS_INLINE bool isIdentPartIncludingEscape(const LChar* code, const LChar* codeEnd);") + print("static ALWAYS_INLINE bool isIdentPartIncludingEscape(const UChar* code, const UChar* codeEnd);") + # max length + 1 so we don't need to do any bounds checking at all +- print("static const int maxTokenLength = %d;" % (self.maxLength() + 1)) ++ print(("static const int maxTokenLength = %d;" % (self.maxLength() + 1))) + print("") + print("template <>") + print("template ALWAYS_INLINE JSTokenType Lexer::parseKeyword(JSTokenData* data)") +diff --git a/Source/JavaScriptCore/Scripts/builtins/builtins.py b/Source/JavaScriptCore/Scripts/builtins/builtins.py +deleted file mode 100644 +index 9349eeef6..000000000 +--- a/Source/JavaScriptCore/Scripts/builtins/builtins.py ++++ /dev/null +@@ -1,11 +0,0 @@ +-# This file is used to simulate the builtins/ directory when generate-js-builtins.py +-# is run from JavaScriptCore framework's private headers directory, which is flattened. +- +-from builtins_model import * +-from builtins_templates import * +- +-from builtins_generator import * +-from builtins_generate_combined_header import * +-from builtins_generate_combined_implementation import * +-from builtins_generate_separate_header import * +-from builtins_generate_separate_implementation import * +diff --git a/Source/JavaScriptCore/Scripts/generate-combined-inspector-json.py b/Source/JavaScriptCore/Scripts/generate-combined-inspector-json.py +index 53660318d..6b0e95dc9 100755 +--- a/Source/JavaScriptCore/Scripts/generate-combined-inspector-json.py ++++ b/Source/JavaScriptCore/Scripts/generate-combined-inspector-json.py +@@ -29,7 +29,7 @@ import os + import sys + + if len(sys.argv) < 2: +- print("usage: %s [json files or directory of json files ...]" % os.path.basename(sys.argv[0])) ++ print(("usage: %s [json files or directory of json files ...]" % os.path.basename(sys.argv[0]))) + sys.exit(1) + + files = [] +@@ -64,6 +64,6 @@ for file in files: + sys.stderr.write("File \"%s\" does not contain valid JSON:\n" % file) + raise + +- print(string.rstrip()) ++ print((string.rstrip())) + print("]}") + +diff --git a/Source/JavaScriptCore/Scripts/generate-js-builtins.py b/Source/JavaScriptCore/Scripts/generate-js-builtins.py +index 554a72ccc..3dce94c5c 100644 +--- a/Source/JavaScriptCore/Scripts/generate-js-builtins.py ++++ b/Source/JavaScriptCore/Scripts/generate-js-builtins.py +@@ -25,7 +25,7 @@ + # THE POSSIBILITY OF SUCH DAMAGE. + + # This script generates C++ bindings for JavaScript builtins. +-# Generators for individual files are located in the builtins/ directory. ++# Generators for individual files are located in the mybuiltins/ directory. + + import fnmatch + import logging +@@ -37,8 +37,8 @@ log = logging.getLogger('global') + + from lazywriter import LazyFileWriter + +-import builtins +-from builtins import * ++#import mybuiltins ++from mybuiltins import * + + + def generate_bindings_for_builtins_files(builtins_files=[], +@@ -118,7 +118,7 @@ if __name__ == '__main__': + cli_parser.add_option("-t", "--test", action="store_true", help="Enable test mode.") + + arg_options, arg_values = cli_parser.parse_args() +- if len(arg_values) is 0 and not arg_options.input_directory: ++ if len(arg_values) == 0 and not arg_options.input_directory: + raise ParseException("At least one input file or directory expected.") + + if not arg_options.output_directory: +@@ -132,7 +132,7 @@ if __name__ == '__main__': + for filepath in os.listdir(arg_options.input_directory): + input_filepaths.append(os.path.join(arg_options.input_directory, filepath)) + +- input_filepaths = filter(lambda name: fnmatch.fnmatch(name, '*.js'), input_filepaths) ++ input_filepaths = [name for name in input_filepaths if fnmatch.fnmatch(name, '*.js')] + + options = { + 'output_path': arg_options.output_directory, +@@ -144,7 +144,7 @@ if __name__ == '__main__': + + log.debug("Generating code for builtins.") + log.debug("Parsed options:") +- for option, value in options.items(): ++ for option, value in list(options.items()): + log.debug(" %s: %s" % (option, value)) + log.debug("") + log.debug("Input files:") +diff --git a/Source/JavaScriptCore/Scripts/inline-and-minify-stylesheets-and-scripts.py b/Source/JavaScriptCore/Scripts/inline-and-minify-stylesheets-and-scripts.py +index 89200c84e..a4a26c2b4 100755 +--- a/Source/JavaScriptCore/Scripts/inline-and-minify-stylesheets-and-scripts.py ++++ b/Source/JavaScriptCore/Scripts/inline-and-minify-stylesheets-and-scripts.py +@@ -37,7 +37,7 @@ import sys + def main(argv): + + if len(argv) < 2: +- print('usage: %s inputFile outputFile' % argv[0]) ++ print(('usage: %s inputFile outputFile' % argv[0])) + return 1 + + inputFileName = argv[1] +diff --git a/Source/JavaScriptCore/Scripts/jsmin.py b/Source/JavaScriptCore/Scripts/jsmin.py +index 372418b4d..2f9fddfce 100644 +--- a/Source/JavaScriptCore/Scripts/jsmin.py ++++ b/Source/JavaScriptCore/Scripts/jsmin.py +@@ -23,17 +23,20 @@ + # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + # THE SOFTWARE. + ++# stolen from webkitgtk 2.26.2 + + import sys + is_3 = sys.version_info >= (3, 0) + if is_3: + import io ++ python_text_type = str + else: + import StringIO + try: + import cStringIO + except ImportError: + cStringIO = None ++ python_text_type = basestring + + + __all__ = ['jsmin', 'JavascriptMinify'] +@@ -79,14 +82,18 @@ class JavascriptMinify(object): + def write(char): + # all of this is to support literal regular expressions. + # sigh +- if char in 'return': ++ if str(char) in 'return': + self.return_buf += char + self.is_return = self.return_buf == 'return' + self.outs.write(char) + if self.is_return: + self.return_buf = '' + +- read = self.ins.read ++ def read(n): ++ char = self.ins.read(n) ++ if not isinstance(char, python_text_type): ++ raise ValueError("ERROR: The script jsmin.py can only handle text input, but it received input of type %s" % type(char)) ++ return char + + space_strings = "abcdefghijklmnopqrstuvwxyz"\ + "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_$\\" +@@ -118,8 +125,8 @@ class JavascriptMinify(object): + write(previous) + elif not previous: + return +- elif previous >= '!': +- if previous in "'\"": ++ elif str(previous) >= "!": ++ if str(previous) in "'\"": + in_quote = previous + write(previous) + previous_non_space = previous +@@ -166,7 +173,7 @@ class JavascriptMinify(object): + if numslashes % 2 == 0: + in_quote = '' + write(''.join(quote_buf)) +- elif next1 in '\r\n': ++ elif str(next1) in '\r\n': + if previous_non_space in newlineend_strings \ + or previous_non_space > '~': + while 1: +@@ -179,7 +186,7 @@ class JavascriptMinify(object): + or next2 > '~' or next2 == '/': + do_newline = True + break +- elif next1 < '!' and not in_re: ++ elif str(next1) < '!' and not in_re: + if (previous_non_space in space_strings \ + or previous_non_space > '~') \ + and (next2 in space_strings or next2 > '~'): +@@ -217,14 +224,14 @@ class JavascriptMinify(object): + do_newline = False + + write(next1) +- if not in_re and next1 in "'\"`": ++ if not in_re and str(next1) in "'\"`": + in_quote = next1 + quote_buf = [] + + previous = next1 + next1 = next2 + +- if previous >= '!': ++ if str(previous) >= '!': + previous_non_space = previous + + if previous == '\\': +diff --git a/Source/JavaScriptCore/Scripts/make-js-file-arrays.py b/Source/JavaScriptCore/Scripts/make-js-file-arrays.py +index 65056646a..4bb2bfe66 100755 +--- a/Source/JavaScriptCore/Scripts/make-js-file-arrays.py ++++ b/Source/JavaScriptCore/Scripts/make-js-file-arrays.py +@@ -21,11 +21,15 @@ + # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ++# stolen from webkitgtk 2.26.2 ++ ++from __future__ import print_function + import io + import os + from optparse import OptionParser +-from StringIO import StringIO +-from jsmin import JavascriptMinify ++import sys ++from jsmin import jsmin ++is_3 = sys.version_info >= (3, 0) + + + def stringifyCodepoint(code): +@@ -36,7 +40,7 @@ def stringifyCodepoint(code): + + + def chunk(list, chunkSize): +- for i in xrange(0, len(list), chunkSize): ++ for i in range(0, len(list), chunkSize): + yield list[i:i + chunkSize] + + +@@ -46,11 +50,11 @@ def main(): + parser.add_option('-n', '--namespace', help='Namespace to use') + (options, arguments) = parser.parse_args() + if not options.namespace: +- print 'Error: must provide a namespace' ++ print('Error: must provide a namespace') + parser.print_usage() + exit(-1) + if len(arguments) < 3: +- print 'Error: must provide at least 3 arguments' ++ print('Error: must provide at least 3 arguments') + parser.print_usage() + exit(-1) + +@@ -60,38 +64,47 @@ def main(): + inputPaths = arguments[2:] + + headerFile = open(headerPath, 'w') +- print >> headerFile, 'namespace {0:s} {{'.format(namespace) ++ print('namespace {0:s} {{'.format(namespace), file=headerFile) + + sourceFile = open(sourcePath, 'w') +- print >> sourceFile, '#include "{0:s}"'.format(os.path.basename(headerPath)) +- print >> sourceFile, 'namespace {0:s} {{'.format(namespace) +- +- jsm = JavascriptMinify() ++ print('#include "{0:s}"'.format(os.path.basename(headerPath)), file=sourceFile) ++ print('namespace {0:s} {{'.format(namespace), file=sourceFile) + + for inputFileName in inputPaths: +- inputStream = io.FileIO(inputFileName) +- outputStream = StringIO() ++ ++ if is_3: ++ inputStream = io.open(inputFileName, encoding='utf-8') ++ else: ++ inputStream = io.FileIO(inputFileName) ++ ++ data = inputStream.read() + + if not options.no_minify: +- jsm.minify(inputStream, outputStream) +- characters = outputStream.getvalue() ++ characters = jsmin(data) ++ else: ++ characters = data ++ ++ if is_3: ++ codepoints = bytearray(characters, encoding='utf-8') + else: +- characters = inputStream.read() ++ codepoints = list(map(ord, characters)) ++ ++ # Use the size of codepoints instead of the characters ++ # because UTF-8 characters may need more than one byte. ++ size = len(codepoints) + +- size = len(characters) + variableName = os.path.splitext(os.path.basename(inputFileName))[0] + +- print >> headerFile, 'extern const char {0:s}JavaScript[{1:d}];'.format(variableName, size) +- print >> sourceFile, 'const char {0:s}JavaScript[{1:d}] = {{'.format(variableName, size) ++ print('extern const char {0:s}JavaScript[{1:d}];'.format(variableName, size), file=headerFile) ++ print('const char {0:s}JavaScript[{1:d}] = {{'.format(variableName, size), file=sourceFile) + +- codepoints = map(ord, characters) + for codepointChunk in chunk(codepoints, 16): +- print >> sourceFile, ' {0:s},'.format(','.join(map(stringifyCodepoint, codepointChunk))) ++ print(' {0:s},'.format(','.join(map(stringifyCodepoint, codepointChunk))), file=sourceFile) + +- print >> sourceFile, '};' ++ print('};', file=sourceFile) + +- print >> headerFile, '}} // namespace {0:s}'.format(namespace) +- print >> sourceFile, '}} // namespace {0:s}'.format(namespace) ++ print('}} // namespace {0:s}'.format(namespace), file=headerFile) ++ print('}} // namespace {0:s}'.format(namespace), file=sourceFile) + + if __name__ == '__main__': + main() +diff --git a/Source/JavaScriptCore/Scripts/builtins/__init__.py b/Source/JavaScriptCore/Scripts/mybuiltins/__init__.py +similarity index 72% +rename from Source/JavaScriptCore/Scripts/builtins/__init__.py +rename to Source/JavaScriptCore/Scripts/mybuiltins/__init__.py +index fdfcba981..1b9668023 100644 +--- a/Source/JavaScriptCore/Scripts/builtins/__init__.py ++++ b/Source/JavaScriptCore/Scripts/mybuiltins/__init__.py +@@ -1,3 +1,3 @@ + # Required for Python to search this directory for module files + +-from builtins import * ++from mybuiltins import * +diff --git a/Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins.py b/Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins.py +new file mode 100644 +index 000000000..1bea3da5c +--- /dev/null ++++ b/Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins.py +@@ -0,0 +1,11 @@ ++# This file is used to simulate the builtins/ directory when generate-js-builtins.py ++# is run from JavaScriptCore framework's private headers directory, which is flattened. ++ ++from mybuiltins_model import * ++from mybuiltins_templates import * ++ ++from mybuiltins_generator import * ++from mybuiltins_generate_combined_header import * ++from mybuiltins_generate_combined_implementation import * ++from mybuiltins_generate_separate_header import * ++from mybuiltins_generate_separate_implementation import * +diff --git a/Source/JavaScriptCore/Scripts/builtins/builtins_generate_combined_header.py b/Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins_generate_combined_header.py +similarity index 98% +rename from Source/JavaScriptCore/Scripts/builtins/builtins_generate_combined_header.py +rename to Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins_generate_combined_header.py +index 891bd3cb4..6520a5f16 100644 +--- a/Source/JavaScriptCore/Scripts/builtins/builtins_generate_combined_header.py ++++ b/Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins_generate_combined_header.py +@@ -30,8 +30,8 @@ import re + import string + from string import Template + +-from builtins_generator import BuiltinsGenerator +-from builtins_templates import BuiltinsGeneratorTemplates as Templates ++from mybuiltins_generator import BuiltinsGenerator ++from mybuiltins_templates import BuiltinsGeneratorTemplates as Templates + + log = logging.getLogger('global') + +diff --git a/Source/JavaScriptCore/Scripts/builtins/builtins_generate_combined_implementation.py b/Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins_generate_combined_implementation.py +similarity index 95% +rename from Source/JavaScriptCore/Scripts/builtins/builtins_generate_combined_implementation.py +rename to Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins_generate_combined_implementation.py +index 094434b64..76eed7665 100644 +--- a/Source/JavaScriptCore/Scripts/builtins/builtins_generate_combined_implementation.py ++++ b/Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins_generate_combined_implementation.py +@@ -30,9 +30,9 @@ import re + import string + from string import Template + +-from builtins_generator import BuiltinsGenerator +-from builtins_model import Framework, Frameworks +-from builtins_templates import BuiltinsGeneratorTemplates as Templates ++from mybuiltins_generator import BuiltinsGenerator ++from mybuiltins_model import Framework, Frameworks ++from mybuiltins_templates import BuiltinsGeneratorTemplates as Templates + + log = logging.getLogger('global') + +diff --git a/Source/JavaScriptCore/Scripts/builtins/builtins_generate_separate_header.py b/Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins_generate_separate_header.py +similarity index 97% +rename from Source/JavaScriptCore/Scripts/builtins/builtins_generate_separate_header.py +rename to Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins_generate_separate_header.py +index b72a94bfe..6cbfbdca1 100644 +--- a/Source/JavaScriptCore/Scripts/builtins/builtins_generate_separate_header.py ++++ b/Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins_generate_separate_header.py +@@ -30,9 +30,9 @@ import re + import string + from string import Template + +-from builtins_generator import BuiltinsGenerator +-from builtins_model import Frameworks +-from builtins_templates import BuiltinsGeneratorTemplates as Templates ++from mybuiltins_generator import BuiltinsGenerator ++from mybuiltins_model import Frameworks ++from mybuiltins_templates import BuiltinsGeneratorTemplates as Templates + + log = logging.getLogger('global') + +diff --git a/Source/JavaScriptCore/Scripts/builtins/builtins_generate_separate_implementation.py b/Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins_generate_separate_implementation.py +similarity index 95% +rename from Source/JavaScriptCore/Scripts/builtins/builtins_generate_separate_implementation.py +rename to Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins_generate_separate_implementation.py +index 0443975da..9f811df6a 100644 +--- a/Source/JavaScriptCore/Scripts/builtins/builtins_generate_separate_implementation.py ++++ b/Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins_generate_separate_implementation.py +@@ -30,9 +30,9 @@ import re + import string + from string import Template + +-from builtins_generator import BuiltinsGenerator, WK_lcfirst +-from builtins_model import Framework, Frameworks +-from builtins_templates import BuiltinsGeneratorTemplates as Templates ++from mybuiltins_generator import BuiltinsGenerator, WK_lcfirst ++from mybuiltins_model import Framework, Frameworks ++from mybuiltins_templates import BuiltinsGeneratorTemplates as Templates + + log = logging.getLogger('global') + +diff --git a/Source/JavaScriptCore/Scripts/builtins/builtins_generator.py b/Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins_generator.py +similarity index 97% +rename from Source/JavaScriptCore/Scripts/builtins/builtins_generator.py +rename to Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins_generator.py +index 21ac4c1d9..546eb2e07 100644 +--- a/Source/JavaScriptCore/Scripts/builtins/builtins_generator.py ++++ b/Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins_generator.py +@@ -30,8 +30,8 @@ import re + from string import Template + import json + +-from builtins_model import BuiltinFunction, BuiltinObject +-from builtins_templates import BuiltinsGeneratorTemplates as Templates ++from mybuiltins_model import BuiltinFunction, BuiltinObject ++from mybuiltins_templates import BuiltinsGeneratorTemplates as Templates + + log = logging.getLogger('global') + +diff --git a/Source/JavaScriptCore/Scripts/builtins/builtins_model.py b/Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins_model.py +similarity index 97% +rename from Source/JavaScriptCore/Scripts/builtins/builtins_model.py +rename to Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins_model.py +index cdd5f9003..68d7aed06 100755 +--- a/Source/JavaScriptCore/Scripts/builtins/builtins_model.py ++++ b/Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins_model.py +@@ -122,7 +122,8 @@ class BuiltinFunction: + interface = interface + " [Constructor]" + + return interface +- ++ def __lt__(self, other): ++ return self.function_name < other.function_name + + class BuiltinsCollection: + def __init__(self, framework_name): +@@ -178,7 +179,7 @@ class BuiltinsCollection: + + result = [] + +- for owner, years in owner_to_years.items(): ++ for owner, years in list(owner_to_years.items()): + sorted_years = list(years) + sorted_years.sort() + result.append("%s %s" % (', '.join(sorted_years), owner)) +@@ -271,4 +272,4 @@ class BuiltinsCollection: + functionBounds.append((start, end)) + + functionStrings = [text[start:end].strip() for (start, end) in functionBounds] +- return map(BuiltinFunction.fromString, functionStrings) ++ return list(map(BuiltinFunction.fromString, functionStrings)) +diff --git a/Source/JavaScriptCore/Scripts/builtins/builtins_templates.py b/Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins_templates.py +similarity index 100% +rename from Source/JavaScriptCore/Scripts/builtins/builtins_templates.py +rename to Source/JavaScriptCore/Scripts/mybuiltins/mybuiltins_templates.py +diff --git a/Source/JavaScriptCore/disassembler/udis86/ud_itab.py b/Source/JavaScriptCore/disassembler/udis86/ud_itab.py +index ef011d2ec..205dcb1ae 100644 +--- a/Source/JavaScriptCore/disassembler/udis86/ud_itab.py ++++ b/Source/JavaScriptCore/disassembler/udis86/ud_itab.py +@@ -266,15 +266,15 @@ class UdItabGenerator: + pfx_c = [] + opr = insn.operands + for i in range(len(opr)): +- if not (opr[i] in self.OperandDict.keys()): +- print("error: invalid operand declaration: %s\n" % opr[i]) ++ if not (opr[i] in list(self.OperandDict.keys())): ++ print(("error: invalid operand declaration: %s\n" % opr[i])) + opr_c[i] = "O_" + opr[i] + opr = "%s %s %s %s" % (opr_c[0] + ",", opr_c[1] + ",", + opr_c[2] + ",", opr_c[3]) + + for p in insn.prefixes: +- if not ( p in self.PrefixDict.keys() ): +- print("error: invalid prefix specification: %s \n" % pfx) ++ if not ( p in list(self.PrefixDict.keys()) ): ++ print(("error: invalid prefix specification: %s \n" % pfx)) + pfx_c.append( self.PrefixDict[p] ) + if len(insn.prefixes) == 0: + pfx_c.append( "P_none" ) +@@ -346,7 +346,7 @@ class UdItabGenerator: + # Macros defining short-names for operands + # + self.ItabC.write("\n\n/* itab entry operand definitions (for readability) */\n"); +- operands = self.OperandDict.keys() ++ operands = list(self.OperandDict.keys()) + operands = sorted(operands) + for o in operands: + self.ItabC.write("#define O_%-7s { %-12s %-8s }\n" % +diff --git a/Source/JavaScriptCore/disassembler/udis86/ud_opcode.py b/Source/JavaScriptCore/disassembler/udis86/ud_opcode.py +index fe1833dc7..00961071c 100644 +--- a/Source/JavaScriptCore/disassembler/udis86/ud_opcode.py ++++ b/Source/JavaScriptCore/disassembler/udis86/ud_opcode.py +@@ -28,7 +28,7 @@ import os + # Some compatibility stuff for supporting python 2.x as well as python 3.x + def itemslist(dict): + try: +- return dict.iteritems() # python 2.x ++ return iter(dict.items()) # python 2.x + except AttributeError: + return list(dict.items()) # python 3.x + +@@ -180,7 +180,7 @@ class UdOpcodeTable: + return itemslist(self._entries) + + def numEntries(self): +- return len(self._entries.keys()) ++ return len(list(self._entries.keys())) + + def label(self): + return self._TableInfo[self._typ]['label'] +@@ -248,7 +248,7 @@ class UdOpcodeTable: + @classmethod + def getLabels(cls): + """Returns a list of all labels""" +- return [cls._TableInfo[k]['label'] for k in cls._TableInfo.keys()] ++ return [cls._TableInfo[k]['label'] for k in list(cls._TableInfo.keys())] + + + class UdOpcodeTables(object): +@@ -401,7 +401,7 @@ class UdOpcodeTables(object): + self.map(self.root, opcodes, insn) + except self.CollisionError as e: + self.pprint() +- print(opcodes, insn, str(e.obj1), str(e.obj2)) ++ print((opcodes, insn, str(e.obj1), str(e.obj2))) + raise + except Exception as e: + self.pprint() +@@ -550,10 +550,10 @@ class UdOpcodeTables(object): + entries = tbl.entries() + for k, e in entries: + if isinstance(e, UdOpcodeTable): +- self.log("%s |-<%02x> %s" % (indent, k, e)) ++ self.log("%s |-<%02x> %s" % (indent, int(k), e)) + printWalk(e, indent + " |") + elif isinstance(e, UdInsnDef): +- self.log("%s |-<%02x> %s" % (indent, k, e)) ++ self.log("%s |-<%02x> %s" % (indent, int(k), e)) + printWalk(self.root) + + +diff --git a/Source/JavaScriptCore/generate-bytecode-files b/Source/JavaScriptCore/generate-bytecode-files +index 5666a3f92..371ac5e4e 100644 +--- a/Source/JavaScriptCore/generate-bytecode-files ++++ b/Source/JavaScriptCore/generate-bytecode-files +@@ -91,14 +91,14 @@ def openOrExit(path, mode): + try: + return open(path, mode) + except IOError as e: +- print "I/O error opening {0}, ({1}): {2}".format(path, e.errno, e.strerror) ++ print("I/O error opening {0}, ({1}): {2}".format(path, e.errno, e.strerror)) + exit(1) + + def hashFile(file): + sha1 = hashlib.sha1() + file.seek(0) + for line in file: +- sha1.update(line) ++ sha1.update(line.encode('utf-8')) + + file.seek(0) + +@@ -114,7 +114,7 @@ if __name__ == "__main__": + parser.error("missing ") + + bytecodeJSONFile = args[0] +- bytecodeFile = openOrExit(bytecodeJSONFile, "rb") ++ bytecodeFile = openOrExit(bytecodeJSONFile, "r") + sha1Hash = hashFile(bytecodeFile) + + hFileHashString = "// SHA1Hash: {0}\n".format(sha1Hash) +@@ -131,7 +131,7 @@ if __name__ == "__main__": + + if bytecodeHFilename: + try: +- bytecodeHReadFile = open(bytecodeHFilename, "rb") ++ bytecodeHReadFile = open(bytecodeHFilename, "r") + + hashLine = bytecodeHReadFile.readline() + if hashLine != hFileHashString: +@@ -143,7 +143,7 @@ if __name__ == "__main__": + + if initASMFileName: + try: +- initBytecodesReadFile = open(initASMFileName, "rb") ++ initBytecodesReadFile = open(initASMFileName, "r") + + hashLine = initBytecodesReadFile.readline() + if hashLine != asmFileHashString: +@@ -157,15 +157,15 @@ if __name__ == "__main__": + exit(0) + + if bytecodeHFilename: +- bytecodeHFile = openOrExit(bytecodeHFilename, "wb") ++ bytecodeHFile = openOrExit(bytecodeHFilename, "w") + + if initASMFileName: +- initBytecodesFile = openOrExit(initASMFileName, "wb") ++ initBytecodesFile = openOrExit(initASMFileName, "w") + + try: + bytecodeSections = json.load(bytecodeFile, encoding = "utf-8") + except: +- print "Unexpected error parsing {0}: {1}".format(bytecodeJSONFile, sys.exc_info()) ++ print("Unexpected error parsing {0}: {1}".format(bytecodeJSONFile, sys.exc_info())) + + if bytecodeHFilename: + bytecodeHFile.write(hFileHashString) +diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/__init__.py b/Source/JavaScriptCore/inspector/scripts/codegen/__init__.py +index 6077fa97a..bd30c817c 100644 +--- a/Source/JavaScriptCore/inspector/scripts/codegen/__init__.py ++++ b/Source/JavaScriptCore/inspector/scripts/codegen/__init__.py +@@ -1,24 +1,24 @@ + # Required for Python to search this directory for module files + +-from models import * +-from generator import * +-from cpp_generator import * +-from objc_generator import * ++from .models import * ++from .generator import * ++from .cpp_generator import * ++from .objc_generator import * + +-from generate_cpp_alternate_backend_dispatcher_header import * +-from generate_cpp_backend_dispatcher_header import * +-from generate_cpp_backend_dispatcher_implementation import * +-from generate_cpp_frontend_dispatcher_header import * +-from generate_cpp_frontend_dispatcher_implementation import * +-from generate_cpp_protocol_types_header import * +-from generate_cpp_protocol_types_implementation import * +-from generate_js_backend_commands import * +-from generate_objc_backend_dispatcher_header import * +-from generate_objc_backend_dispatcher_implementation import * +-from generate_objc_configuration_header import * +-from generate_objc_configuration_implementation import * +-from generate_objc_conversion_helpers import * +-from generate_objc_frontend_dispatcher_implementation import * +-from generate_objc_header import * +-from generate_objc_internal_header import * +-from generate_objc_protocol_types_implementation import * ++from .generate_cpp_alternate_backend_dispatcher_header import * ++from .generate_cpp_backend_dispatcher_header import * ++from .generate_cpp_backend_dispatcher_implementation import * ++from .generate_cpp_frontend_dispatcher_header import * ++from .generate_cpp_frontend_dispatcher_implementation import * ++from .generate_cpp_protocol_types_header import * ++from .generate_cpp_protocol_types_implementation import * ++from .generate_js_backend_commands import * ++from .generate_objc_backend_dispatcher_header import * ++from .generate_objc_backend_dispatcher_implementation import * ++from .generate_objc_configuration_header import * ++from .generate_objc_configuration_implementation import * ++from .generate_objc_conversion_helpers import * ++from .generate_objc_frontend_dispatcher_implementation import * ++from .generate_objc_header import * ++from .generate_objc_internal_header import * ++from .generate_objc_protocol_types_implementation import * +diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator.py b/Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator.py +index edd330da4..43c655b05 100644 +--- a/Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator.py ++++ b/Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator.py +@@ -28,8 +28,8 @@ import logging + import os.path + import re + +-from generator import ucfirst +-from models import PrimitiveType, ObjectType, ArrayType, EnumType, AliasedType, Frameworks ++from .generator import ucfirst ++from .models import PrimitiveType, ObjectType, ArrayType, EnumType, AliasedType, Frameworks + + log = logging.getLogger('global') + +@@ -56,11 +56,11 @@ class CppGenerator: + if isinstance(_type, ArrayType): + return 'getArray' + if isinstance(_type, PrimitiveType): +- if _type.raw_name() is 'integer': ++ if _type.raw_name() == 'integer': + return 'getInteger' +- elif _type.raw_name() is 'number': ++ elif _type.raw_name() == 'number': + return 'getDouble' +- elif _type.raw_name() is 'any': ++ elif _type.raw_name() == 'any': + return 'getValue' + else: + return 'get' + ucfirst(_type.raw_name()) +@@ -76,11 +76,11 @@ class CppGenerator: + if isinstance(_type, ArrayType): + return 'setArray' + if isinstance(_type, PrimitiveType): +- if _type.raw_name() is 'integer': ++ if _type.raw_name() == 'integer': + return 'setInteger' +- elif _type.raw_name() is 'number': ++ elif _type.raw_name() == 'number': + return 'setDouble' +- elif _type.raw_name() is 'any': ++ elif _type.raw_name() == 'any': + return 'setValue' + else: + return 'set' + ucfirst(_type.raw_name()) +@@ -95,7 +95,7 @@ class CppGenerator: + if isinstance(_type, ObjectType) and len(_type.members) == 0: + return 'Inspector::InspectorObject' + if isinstance(_type, ArrayType): +- if _type.raw_name() is None: # Otherwise, fall through and use typedef'd name. ++ if _type.raw_name() == None: # Otherwise, fall through and use typedef'd name. + return 'Inspector::Protocol::Array<%s>' % CppGenerator.cpp_protocol_type_for_type(_type.element_type) + if isinstance(_type, (ObjectType, AliasedType, EnumType, ArrayType)): + return 'Inspector::Protocol::%s::%s' % (_type.type_domain().domain_name, _type.raw_name()) +@@ -119,7 +119,7 @@ class CppGenerator: + _type = _type.primitive_type # Fall through to primitive. + + # This handles the 'any' type and objects with defined properties. +- if isinstance(_type, ObjectType) or _type.qualified_name() is 'object': ++ if isinstance(_type, ObjectType) or _type.qualified_name() == 'object': + cpp_name = 'Inspector::InspectorObject' + if parameter.is_optional: + return 'const %s*' % cpp_name +diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_alternate_backend_dispatcher_header.py b/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_alternate_backend_dispatcher_header.py +index 375ce05ca..916277d31 100755 +--- a/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_alternate_backend_dispatcher_header.py ++++ b/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_alternate_backend_dispatcher_header.py +@@ -30,9 +30,9 @@ import string + import re + from string import Template + +-from cpp_generator import CppGenerator +-from cpp_generator_templates import CppGeneratorTemplates as CppTemplates +-from generator import Generator ++from .cpp_generator import CppGenerator ++from .cpp_generator_templates import CppGeneratorTemplates as CppTemplates ++from .generator import Generator + + log = logging.getLogger('global') + +@@ -60,7 +60,7 @@ class CppAlternateBackendDispatcherHeaderGenerator(Generator): + sections = [] + sections.append(self.generate_license()) + sections.append(Template(CppTemplates.AlternateDispatchersHeaderPrelude).substitute(None, **header_args)) +- sections.append('\n'.join(filter(None, map(self._generate_handler_declarations_for_domain, domains)))) ++ sections.append('\n'.join([_f for _f in map(self._generate_handler_declarations_for_domain, domains) if _f])) + sections.append(Template(CppTemplates.AlternateDispatchersHeaderPostlude).substitute(None, **header_args)) + return '\n\n'.join(sections) + +diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py b/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py +index 2e5ff7a6a..25bec9a22 100755 +--- a/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py ++++ b/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py +@@ -30,10 +30,10 @@ import re + import string + from string import Template + +-from cpp_generator import CppGenerator +-from cpp_generator_templates import CppGeneratorTemplates as CppTemplates +-from generator import Generator, ucfirst +-from models import EnumType ++from .cpp_generator import CppGenerator ++from .cpp_generator_templates import CppGeneratorTemplates as CppTemplates ++from .generator import Generator, ucfirst ++from .models import EnumType + + log = logging.getLogger('global') + +@@ -46,7 +46,7 @@ class CppBackendDispatcherHeaderGenerator(Generator): + return "InspectorBackendDispatchers.h" + + def domains_to_generate(self): +- return filter(lambda domain: len(domain.commands) > 0, Generator.domains_to_generate(self)) ++ return [domain for domain in Generator.domains_to_generate(self) if len(domain.commands) > 0] + + def generate_output(self): + headers = [ +@@ -68,8 +68,8 @@ class CppBackendDispatcherHeaderGenerator(Generator): + sections.append(self.generate_license()) + sections.append(Template(CppTemplates.HeaderPrelude).substitute(None, **header_args)) + sections.append(self._generate_alternate_handler_forward_declarations_for_domains(domains)) +- sections.extend(map(self._generate_handler_declarations_for_domain, domains)) +- sections.extend(map(self._generate_dispatcher_declarations_for_domain, domains)) ++ sections.extend(list(map(self._generate_handler_declarations_for_domain, domains))) ++ sections.extend(list(map(self._generate_dispatcher_declarations_for_domain, domains))) + sections.append(Template(CppTemplates.HeaderPostlude).substitute(None, **header_args)) + return "\n\n".join(sections) + +@@ -194,7 +194,7 @@ class CppBackendDispatcherHeaderGenerator(Generator): + declarations = [] + if len(domain.commands) > 0: + declarations.append('private:') +- declarations.extend(map(self._generate_dispatcher_declaration_for_command, domain.commands)) ++ declarations.extend(list(map(self._generate_dispatcher_declaration_for_command, domain.commands))) + + handler_args = { + 'classAndExportMacro': " ".join(classComponents), +diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py b/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py +index 8f3df80ee..0c9b30e47 100755 +--- a/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py ++++ b/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py +@@ -29,10 +29,10 @@ import logging + import string + from string import Template + +-from cpp_generator import CppGenerator +-from cpp_generator_templates import CppGeneratorTemplates as CppTemplates +-from generator import Generator, ucfirst +-from models import ObjectType, ArrayType ++from .cpp_generator import CppGenerator ++from .cpp_generator_templates import CppGeneratorTemplates as CppTemplates ++from .generator import Generator, ucfirst ++from .models import ObjectType, ArrayType + + log = logging.getLogger('global') + +@@ -45,7 +45,7 @@ class CppBackendDispatcherImplementationGenerator(Generator): + return "InspectorBackendDispatchers.cpp" + + def domains_to_generate(self): +- return filter(lambda domain: len(domain.commands) > 0, Generator.domains_to_generate(self)) ++ return [domain for domain in Generator.domains_to_generate(self) if len(domain.commands) > 0] + + def generate_output(self): + secondary_headers = [ +@@ -69,7 +69,7 @@ class CppBackendDispatcherImplementationGenerator(Generator): + sections.append(self.generate_license()) + sections.append(Template(CppTemplates.ImplementationPrelude).substitute(None, **header_args)) + sections.append("\n".join(map(self._generate_handler_class_destructor_for_domain, self.domains_to_generate()))) +- sections.extend(map(self._generate_dispatcher_implementations_for_domain, self.domains_to_generate())) ++ sections.extend(list(map(self._generate_dispatcher_implementations_for_domain, self.domains_to_generate()))) + sections.append(Template(CppTemplates.ImplementationPostlude).substitute(None, **header_args)) + return "\n\n".join(sections) + +diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_header.py b/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_header.py +index 58a3cb925..40905d676 100755 +--- a/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_header.py ++++ b/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_header.py +@@ -30,10 +30,10 @@ import re + import string + from string import Template + +-from cpp_generator import CppGenerator +-from cpp_generator_templates import CppGeneratorTemplates as CppTemplates +-from generator import Generator, ucfirst +-from models import EnumType ++from .cpp_generator import CppGenerator ++from .cpp_generator_templates import CppGeneratorTemplates as CppTemplates ++from .generator import Generator, ucfirst ++from .models import EnumType + + log = logging.getLogger('global') + +@@ -46,7 +46,7 @@ class CppFrontendDispatcherHeaderGenerator(Generator): + return "InspectorFrontendDispatchers.h" + + def domains_to_generate(self): +- return filter(lambda domain: len(domain.events) > 0, Generator.domains_to_generate(self)) ++ return [domain for domain in Generator.domains_to_generate(self) if len(domain.events) > 0] + + def generate_output(self): + headers = [ +@@ -63,7 +63,7 @@ class CppFrontendDispatcherHeaderGenerator(Generator): + sections = [] + sections.append(self.generate_license()) + sections.append(Template(CppTemplates.HeaderPrelude).substitute(None, **header_args)) +- sections.extend(map(self._generate_dispatcher_declarations_for_domain, self.domains_to_generate())) ++ sections.extend(list(map(self._generate_dispatcher_declarations_for_domain, self.domains_to_generate()))) + sections.append(Template(CppTemplates.HeaderPostlude).substitute(None, **header_args)) + return "\n\n".join(sections) + +diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_implementation.py b/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_implementation.py +index ea46aaf26..132b1c67c 100755 +--- a/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_implementation.py ++++ b/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_frontend_dispatcher_implementation.py +@@ -29,10 +29,10 @@ import logging + import string + from string import Template + +-from cpp_generator import CppGenerator +-from cpp_generator_templates import CppGeneratorTemplates as CppTemplates +-from generator import Generator, ucfirst +-from models import ObjectType, ArrayType ++from .cpp_generator import CppGenerator ++from .cpp_generator_templates import CppGeneratorTemplates as CppTemplates ++from .generator import Generator, ucfirst ++from .models import ObjectType, ArrayType + + log = logging.getLogger('global') + +@@ -45,7 +45,7 @@ class CppFrontendDispatcherImplementationGenerator(Generator): + return "InspectorFrontendDispatchers.cpp" + + def domains_to_generate(self): +- return filter(lambda domain: len(domain.events) > 0, Generator.domains_to_generate(self)) ++ return [domain for domain in Generator.domains_to_generate(self) if len(domain.events) > 0] + + def generate_output(self): + secondary_headers = [ +@@ -61,7 +61,7 @@ class CppFrontendDispatcherImplementationGenerator(Generator): + sections = [] + sections.append(self.generate_license()) + sections.append(Template(CppTemplates.ImplementationPrelude).substitute(None, **header_args)) +- sections.extend(map(self._generate_dispatcher_implementations_for_domain, self.domains_to_generate())) ++ sections.extend(list(map(self._generate_dispatcher_implementations_for_domain, self.domains_to_generate()))) + sections.append(Template(CppTemplates.ImplementationPostlude).substitute(None, **header_args)) + return "\n\n".join(sections) + +diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_header.py b/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_header.py +index 6753e2dcf..7bd4375df 100755 +--- a/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_header.py ++++ b/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_header.py +@@ -30,10 +30,10 @@ import re + import string + from string import Template + +-from cpp_generator import CppGenerator +-from cpp_generator_templates import CppGeneratorTemplates as CppTemplates +-from generator import Generator, ucfirst +-from models import EnumType, ObjectType, PrimitiveType, AliasedType, ArrayType, Frameworks ++from .cpp_generator import CppGenerator ++from .cpp_generator_templates import CppGeneratorTemplates as CppTemplates ++from .generator import Generator, ucfirst ++from .models import EnumType, ObjectType, PrimitiveType, AliasedType, ArrayType, Frameworks + + log = logging.getLogger('global') + +@@ -80,8 +80,8 @@ class CppProtocolTypesHeaderGenerator(Generator): + ' return getEnumConstantValue(static_cast(enumValue));', + '}'])) + +- builder_sections = map(self._generate_builders_for_domain, domains) +- sections.extend(filter(lambda section: len(section) > 0, builder_sections)) ++ builder_sections = list(map(self._generate_builders_for_domain, domains)) ++ sections.extend([section for section in builder_sections if len(section) > 0]) + sections.append(self._generate_forward_declarations_for_binding_traits()) + sections.append('} // namespace Protocol') + sections.append(Template(CppTemplates.HeaderPostlude).substitute(None, **header_args)) +@@ -96,8 +96,8 @@ class CppProtocolTypesHeaderGenerator(Generator): + + for domain in domains: + declaration_types = [decl.type for decl in domain.type_declarations] +- object_types = filter(lambda _type: isinstance(_type, ObjectType), declaration_types) +- enum_types = filter(lambda _type: isinstance(_type, EnumType), declaration_types) ++ object_types = [_type for _type in declaration_types if isinstance(_type, ObjectType)] ++ enum_types = [_type for _type in declaration_types if isinstance(_type, EnumType)] + if len(object_types) + len(enum_types) == 0: + continue + +@@ -122,8 +122,8 @@ class CppProtocolTypesHeaderGenerator(Generator): + """ % '\n\n'.join(sections) + + def _generate_typedefs(self, domains): +- sections = map(self._generate_typedefs_for_domain, domains) +- sections = filter(lambda text: len(text) > 0, sections) ++ sections = list(map(self._generate_typedefs_for_domain, domains)) ++ sections = [text for text in sections if len(text) > 0] + + if len(sections) == 0: + return '' +@@ -133,8 +133,8 @@ class CppProtocolTypesHeaderGenerator(Generator): + // End of typedefs.""" % '\n\n'.join(sections) + + def _generate_typedefs_for_domain(self, domain): +- primitive_declarations = filter(lambda decl: isinstance(decl.type, AliasedType), domain.type_declarations) +- array_declarations = filter(lambda decl: isinstance(decl.type, ArrayType), domain.type_declarations) ++ primitive_declarations = [decl for decl in domain.type_declarations if isinstance(decl.type, AliasedType)] ++ array_declarations = [decl for decl in domain.type_declarations if isinstance(decl.type, ArrayType)] + if len(primitive_declarations) == 0 and len(array_declarations) == 0: + return '' + +@@ -170,7 +170,7 @@ class CppProtocolTypesHeaderGenerator(Generator): + elif isinstance(type_declaration.type, ObjectType): + sections.append(self._generate_class_for_object_declaration(type_declaration, domain)) + +- sections = filter(lambda section: len(section) > 0, sections) ++ sections = [section for section in sections if len(section) > 0] + if len(sections) == 0: + return '' + +@@ -184,9 +184,9 @@ class CppProtocolTypesHeaderGenerator(Generator): + if len(type_declaration.type_members) == 0: + return '' + +- enum_members = filter(lambda member: isinstance(member.type, EnumType) and member.type.is_anonymous, type_declaration.type_members) +- required_members = filter(lambda member: not member.is_optional, type_declaration.type_members) +- optional_members = filter(lambda member: member.is_optional, type_declaration.type_members) ++ enum_members = [member for member in type_declaration.type_members if isinstance(member.type, EnumType) and member.type.is_anonymous] ++ required_members = [member for member in type_declaration.type_members if not member.is_optional] ++ optional_members = [member for member in type_declaration.type_members if member.is_optional] + object_name = type_declaration.type_name + + lines = [] +@@ -244,7 +244,7 @@ class CppProtocolTypesHeaderGenerator(Generator): + else: + return ' ' + line + +- indented_lines = map(apply_indentation, self._generate_struct_for_enum_type(enum_member.member_name, enum_member.type)) ++ indented_lines = list(map(apply_indentation, self._generate_struct_for_enum_type(enum_member.member_name, enum_member.type))) + return '\n'.join(indented_lines) + + def _generate_struct_for_enum_type(self, enum_name, enum_type): +@@ -258,7 +258,7 @@ class CppProtocolTypesHeaderGenerator(Generator): + + def _generate_builder_state_enum(self, type_declaration): + lines = [] +- required_members = filter(lambda member: not member.is_optional, type_declaration.type_members) ++ required_members = [member for member in type_declaration.type_members if not member.is_optional] + enum_values = [] + + lines.append(' enum {') +@@ -323,7 +323,7 @@ class CppProtocolTypesHeaderGenerator(Generator): + type_arguments = [] + + for domain in self.domains_to_generate(): +- declarations_to_generate = filter(lambda decl: self.type_needs_shape_assertions(decl.type), domain.type_declarations) ++ declarations_to_generate = [decl for decl in domain.type_declarations if self.type_needs_shape_assertions(decl.type)] + + for type_declaration in declarations_to_generate: + for type_member in type_declaration.type_members: +diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py b/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py +index 2c263b504..903278bfb 100755 +--- a/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py ++++ b/Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py +@@ -29,10 +29,10 @@ import logging + import string + from string import Template + +-from cpp_generator import CppGenerator +-from cpp_generator_templates import CppGeneratorTemplates as CppTemplates +-from generator import Generator, ucfirst +-from models import AliasedType, ArrayType, EnumType, ObjectType ++from .cpp_generator import CppGenerator ++from .cpp_generator_templates import CppGeneratorTemplates as CppTemplates ++from .generator import Generator, ucfirst ++from .models import AliasedType, ArrayType, EnumType, ObjectType + + log = logging.getLogger('global') + +@@ -61,8 +61,8 @@ class CppProtocolTypesImplementationGenerator(Generator): + sections.append('namespace Protocol {') + sections.append(self._generate_enum_mapping()) + sections.append(self._generate_open_field_names()) +- builder_sections = map(self._generate_builders_for_domain, domains) +- sections.extend(filter(lambda section: len(section) > 0, builder_sections)) ++ builder_sections = list(map(self._generate_builders_for_domain, domains)) ++ sections.extend([section for section in builder_sections if len(section) > 0]) + sections.append('} // namespace Protocol') + sections.append(Template(CppTemplates.ImplementationPostlude).substitute(None, **header_args)) + +@@ -84,7 +84,7 @@ class CppProtocolTypesImplementationGenerator(Generator): + def _generate_open_field_names(self): + lines = [] + for domain in self.domains_to_generate(): +- for type_declaration in filter(lambda decl: Generator.type_has_open_fields(decl.type), domain.type_declarations): ++ for type_declaration in [decl for decl in domain.type_declarations if Generator.type_has_open_fields(decl.type)]: + for type_member in sorted(type_declaration.type_members, key=lambda member: member.member_name): + field_name = '::'.join(['Inspector', 'Protocol', domain.domain_name, ucfirst(type_declaration.type_name), ucfirst(type_member.member_name)]) + lines.append('const char* %s = "%s";' % (field_name, type_member.member_name)) +@@ -93,7 +93,7 @@ class CppProtocolTypesImplementationGenerator(Generator): + + def _generate_builders_for_domain(self, domain): + sections = [] +- declarations_to_generate = filter(lambda decl: self.type_needs_shape_assertions(decl.type), domain.type_declarations) ++ declarations_to_generate = [decl for decl in domain.type_declarations if self.type_needs_shape_assertions(decl.type)] + + for type_declaration in declarations_to_generate: + for type_member in type_declaration.type_members: +@@ -114,8 +114,8 @@ class CppProtocolTypesImplementationGenerator(Generator): + return Template(CppTemplates.ProtocolObjectRuntimeCast).substitute(None, **args) + + def _generate_assertion_for_object_declaration(self, object_declaration): +- required_members = filter(lambda member: not member.is_optional, object_declaration.type_members) +- optional_members = filter(lambda member: member.is_optional, object_declaration.type_members) ++ required_members = [member for member in object_declaration.type_members if not member.is_optional] ++ optional_members = [member for member in object_declaration.type_members if member.is_optional] + should_count_properties = not Generator.type_has_open_fields(object_declaration.type) + lines = [] + +diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/generate_js_backend_commands.py b/Source/JavaScriptCore/inspector/scripts/codegen/generate_js_backend_commands.py +index 3392c7845..bd8f33164 100755 +--- a/Source/JavaScriptCore/inspector/scripts/codegen/generate_js_backend_commands.py ++++ b/Source/JavaScriptCore/inspector/scripts/codegen/generate_js_backend_commands.py +@@ -29,9 +29,9 @@ import logging + import string + from string import Template + +-from generator import Generator, ucfirst +-from generator_templates import GeneratorTemplates as Templates +-from models import EnumType ++from .generator import Generator, ucfirst ++from .generator_templates import GeneratorTemplates as Templates ++from .models import EnumType + + log = logging.getLogger('global') + +@@ -45,15 +45,15 @@ class JSBackendCommandsGenerator(Generator): + + def domains_to_generate(self): + def should_generate_domain(domain): +- domain_enum_types = filter(lambda declaration: isinstance(declaration.type, EnumType), domain.type_declarations) ++ domain_enum_types = [declaration for declaration in domain.type_declarations if isinstance(declaration.type, EnumType)] + return len(domain.commands) > 0 or len(domain.events) > 0 or len(domain_enum_types) > 0 + +- return filter(should_generate_domain, Generator.domains_to_generate(self)) ++ return list(filter(should_generate_domain, Generator.domains_to_generate(self))) + + def generate_output(self): + sections = [] + sections.append(self.generate_license()) +- sections.extend(map(self.generate_domain, self.domains_to_generate())) ++ sections.extend(list(map(self.generate_domain, self.domains_to_generate()))) + return "\n\n".join(sections) + + def generate_domain(self, domain): +@@ -64,7 +64,7 @@ class JSBackendCommandsGenerator(Generator): + + lines.append('// %(domain)s.' % args) + +- has_async_commands = any(map(lambda command: command.is_async, domain.commands)) ++ has_async_commands = any([command.is_async for command in domain.commands]) + if len(domain.events) > 0 or has_async_commands: + lines.append('InspectorBackend.register%(domain)sDispatcher = InspectorBackend.registerDomainDispatcher.bind(InspectorBackend, "%(domain)s");' % args) + +diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py b/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py +index d56a0b178..809641d38 100755 +--- a/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py ++++ b/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py +@@ -30,11 +30,11 @@ import string + import re + from string import Template + +-from cpp_generator import CppGenerator +-from generator import Generator +-from models import Frameworks +-from objc_generator import ObjCGenerator +-from objc_generator_templates import ObjCGeneratorTemplates as ObjCTemplates ++from .cpp_generator import CppGenerator ++from .generator import Generator ++from .models import Frameworks ++from .objc_generator import ObjCGenerator ++from .objc_generator_templates import ObjCGeneratorTemplates as ObjCTemplates + + log = logging.getLogger('global') + +@@ -47,7 +47,7 @@ class ObjCBackendDispatcherHeaderGenerator(Generator): + return '%sBackendDispatchers.h' % ObjCGenerator.OBJC_PREFIX + + def domains_to_generate(self): +- return filter(ObjCGenerator.should_generate_domain_command_handler_filter(self.model()), Generator.domains_to_generate(self)) ++ return list(filter(ObjCGenerator.should_generate_domain_command_handler_filter(self.model()), Generator.domains_to_generate(self))) + + def generate_output(self): + headers = [ +@@ -65,7 +65,7 @@ class ObjCBackendDispatcherHeaderGenerator(Generator): + sections = [] + sections.append(self.generate_license()) + sections.append(Template(ObjCTemplates.BackendDispatcherHeaderPrelude).substitute(None, **header_args)) +- sections.extend(map(self._generate_objc_handler_declarations_for_domain, domains)) ++ sections.extend(list(map(self._generate_objc_handler_declarations_for_domain, domains))) + sections.append(Template(ObjCTemplates.BackendDispatcherHeaderPostlude).substitute(None, **header_args)) + return '\n\n'.join(sections) + +diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_implementation.py b/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_implementation.py +index 42afd99cf..d35d3f14a 100755 +--- a/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_implementation.py ++++ b/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_backend_dispatcher_implementation.py +@@ -30,11 +30,11 @@ import string + import re + from string import Template + +-from cpp_generator import CppGenerator +-from generator import Generator +-from models import PrimitiveType, EnumType, AliasedType, Frameworks +-from objc_generator import ObjCTypeCategory, ObjCGenerator, join_type_and_name +-from objc_generator_templates import ObjCGeneratorTemplates as ObjCTemplates ++from .cpp_generator import CppGenerator ++from .generator import Generator ++from .models import PrimitiveType, EnumType, AliasedType, Frameworks ++from .objc_generator import ObjCTypeCategory, ObjCGenerator, join_type_and_name ++from .objc_generator_templates import ObjCGeneratorTemplates as ObjCTemplates + + log = logging.getLogger('global') + +@@ -47,7 +47,7 @@ class ObjCConfigurationImplementationGenerator(Generator): + return '%sBackendDispatchers.mm' % ObjCGenerator.OBJC_PREFIX + + def domains_to_generate(self): +- return filter(ObjCGenerator.should_generate_domain_command_handler_filter(self.model()), Generator.domains_to_generate(self)) ++ return list(filter(ObjCGenerator.should_generate_domain_command_handler_filter(self.model()), Generator.domains_to_generate(self))) + + def generate_output(self): + secondary_headers = [ +@@ -65,7 +65,7 @@ class ObjCConfigurationImplementationGenerator(Generator): + sections = [] + sections.append(self.generate_license()) + sections.append(Template(ObjCTemplates.BackendDispatcherImplementationPrelude).substitute(None, **header_args)) +- sections.extend(map(self._generate_handler_implementation_for_domain, domains)) ++ sections.extend(list(map(self._generate_handler_implementation_for_domain, domains))) + sections.append(Template(ObjCTemplates.BackendDispatcherImplementationPostlude).substitute(None, **header_args)) + return '\n\n'.join(sections) + +@@ -112,7 +112,7 @@ class ObjCConfigurationImplementationGenerator(Generator): + if command.return_parameters: + lines.append(' Ref resultObject = InspectorObject::create();') + +- required_pointer_parameters = filter(lambda parameter: not parameter.is_optional and ObjCGenerator.is_type_objc_pointer_type(parameter.type), command.return_parameters) ++ required_pointer_parameters = [parameter for parameter in command.return_parameters if not parameter.is_optional and ObjCGenerator.is_type_objc_pointer_type(parameter.type)] + for parameter in required_pointer_parameters: + var_name = ObjCGenerator.identifier_to_objc_identifier(parameter.parameter_name) + lines.append(' THROW_EXCEPTION_FOR_REQUIRED_PARAMETER(%s, @"%s");' % (var_name, var_name)) +@@ -120,7 +120,7 @@ class ObjCConfigurationImplementationGenerator(Generator): + if objc_array_class and objc_array_class.startswith(ObjCGenerator.OBJC_PREFIX): + lines.append(' THROW_EXCEPTION_FOR_BAD_TYPE_IN_ARRAY(%s, [%s class]);' % (var_name, objc_array_class)) + +- optional_pointer_parameters = filter(lambda parameter: parameter.is_optional and ObjCGenerator.is_type_objc_pointer_type(parameter.type), command.return_parameters) ++ optional_pointer_parameters = [parameter for parameter in command.return_parameters if parameter.is_optional and ObjCGenerator.is_type_objc_pointer_type(parameter.type)] + for parameter in optional_pointer_parameters: + var_name = ObjCGenerator.identifier_to_objc_identifier(parameter.parameter_name) + lines.append(' THROW_EXCEPTION_FOR_BAD_OPTIONAL_PARAMETER(%s, @"%s");' % (var_name, var_name)) +diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_configuration_header.py b/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_configuration_header.py +index 9b93f37f6..00f3860c7 100755 +--- a/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_configuration_header.py ++++ b/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_configuration_header.py +@@ -29,9 +29,9 @@ import logging + import string + from string import Template + +-from generator import Generator +-from objc_generator import ObjCGenerator +-from objc_generator_templates import ObjCGeneratorTemplates as ObjCTemplates ++from .generator import Generator ++from .objc_generator import ObjCGenerator ++from .objc_generator_templates import ObjCGeneratorTemplates as ObjCTemplates + + log = logging.getLogger('global') + +diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_configuration_implementation.py b/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_configuration_implementation.py +index 735abbca3..2db503c0b 100755 +--- a/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_configuration_implementation.py ++++ b/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_configuration_implementation.py +@@ -29,9 +29,9 @@ import logging + import string + from string import Template + +-from generator import Generator +-from objc_generator import ObjCGenerator +-from objc_generator_templates import ObjCGeneratorTemplates as ObjCTemplates ++from .generator import Generator ++from .objc_generator import ObjCGenerator ++from .objc_generator_templates import ObjCGeneratorTemplates as ObjCTemplates + + log = logging.getLogger('global') + +diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_conversion_helpers.py b/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_conversion_helpers.py +index c31e991e3..7a23251b1 100755 +--- a/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_conversion_helpers.py ++++ b/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_conversion_helpers.py +@@ -29,10 +29,10 @@ import logging + import string + from string import Template + +-from generator import Generator +-from models import EnumType +-from objc_generator import ObjCGenerator +-from objc_generator_templates import ObjCGeneratorTemplates as ObjCTemplates ++from .generator import Generator ++from .models import EnumType ++from .objc_generator import ObjCGenerator ++from .objc_generator_templates import ObjCGeneratorTemplates as ObjCTemplates + + log = logging.getLogger('global') + +@@ -51,7 +51,7 @@ class ObjCConversionHelpersGenerator(Generator): + return '%sEnumConversionHelpers.h' % ObjCGenerator.OBJC_PREFIX + + def domains_to_generate(self): +- return filter(ObjCGenerator.should_generate_domain_types_filter(self.model()), Generator.domains_to_generate(self)) ++ return list(filter(ObjCGenerator.should_generate_domain_types_filter(self.model()), Generator.domains_to_generate(self))) + + def generate_output(self): + headers = [ +@@ -67,7 +67,7 @@ class ObjCConversionHelpersGenerator(Generator): + sections.append(self.generate_license()) + sections.append(Template(ObjCTemplates.ConversionHelpersPrelude).substitute(None, **header_args)) + sections.append(Template(ObjCTemplates.ConversionHelpersStandard).substitute(None)) +- sections.extend(map(self._generate_enum_conversion_functions, domains)) ++ sections.extend(list(map(self._generate_enum_conversion_functions, domains))) + sections.append(Template(ObjCTemplates.ConversionHelpersPostlude).substitute(None, **header_args)) + return '\n\n'.join(sections) + +diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_frontend_dispatcher_implementation.py b/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_frontend_dispatcher_implementation.py +index 0030ed5ee..101c09e9f 100755 +--- a/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_frontend_dispatcher_implementation.py ++++ b/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_frontend_dispatcher_implementation.py +@@ -29,10 +29,10 @@ import logging + import string + from string import Template + +-from cpp_generator import CppGenerator +-from generator import Generator, ucfirst +-from objc_generator import ObjCGenerator +-from objc_generator_templates import ObjCGeneratorTemplates as ObjCTemplates ++from .cpp_generator import CppGenerator ++from .generator import Generator, ucfirst ++from .objc_generator import ObjCGenerator ++from .objc_generator_templates import ObjCGeneratorTemplates as ObjCTemplates + + log = logging.getLogger('global') + +@@ -45,7 +45,7 @@ class ObjCFrontendDispatcherImplementationGenerator(Generator): + return '%sEventDispatchers.mm' % ObjCGenerator.OBJC_PREFIX + + def domains_to_generate(self): +- return filter(ObjCGenerator.should_generate_domain_event_dispatcher_filter(self.model()), Generator.domains_to_generate(self)) ++ return list(filter(ObjCGenerator.should_generate_domain_event_dispatcher_filter(self.model()), Generator.domains_to_generate(self))) + + def generate_output(self): + secondary_headers = [ +@@ -62,7 +62,7 @@ class ObjCFrontendDispatcherImplementationGenerator(Generator): + sections = [] + sections.append(self.generate_license()) + sections.append(Template(ObjCTemplates.ImplementationPrelude).substitute(None, **header_args)) +- sections.extend(map(self._generate_event_dispatcher_implementations, domains)) ++ sections.extend(list(map(self._generate_event_dispatcher_implementations, domains))) + sections.append(Template(ObjCTemplates.ImplementationPostlude).substitute(None, **header_args)) + return '\n\n'.join(sections) + +@@ -100,7 +100,7 @@ class ObjCFrontendDispatcherImplementationGenerator(Generator): + lines.append(' const FrontendRouter& router = _controller->frontendRouter();') + lines.append('') + +- required_pointer_parameters = filter(lambda parameter: not parameter.is_optional and ObjCGenerator.is_type_objc_pointer_type(parameter.type), event.event_parameters) ++ required_pointer_parameters = [parameter for parameter in event.event_parameters if not parameter.is_optional and ObjCGenerator.is_type_objc_pointer_type(parameter.type)] + for parameter in required_pointer_parameters: + var_name = ObjCGenerator.identifier_to_objc_identifier(parameter.parameter_name) + lines.append(' THROW_EXCEPTION_FOR_REQUIRED_PARAMETER(%s, @"%s");' % (var_name, var_name)) +@@ -108,7 +108,7 @@ class ObjCFrontendDispatcherImplementationGenerator(Generator): + if objc_array_class and objc_array_class.startswith(ObjCGenerator.OBJC_PREFIX): + lines.append(' THROW_EXCEPTION_FOR_BAD_TYPE_IN_ARRAY(%s, [%s class]);' % (var_name, objc_array_class)) + +- optional_pointer_parameters = filter(lambda parameter: parameter.is_optional and ObjCGenerator.is_type_objc_pointer_type(parameter.type), event.event_parameters) ++ optional_pointer_parameters = [parameter for parameter in event.event_parameters if parameter.is_optional and ObjCGenerator.is_type_objc_pointer_type(parameter.type)] + for parameter in optional_pointer_parameters: + var_name = ObjCGenerator.identifier_to_objc_identifier(parameter.parameter_name) + lines.append(' THROW_EXCEPTION_FOR_BAD_OPTIONAL_PARAMETER(%s, @"%s");' % (var_name, var_name)) +diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_header.py b/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_header.py +index 7e8e61030..1b0059a7a 100755 +--- a/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_header.py ++++ b/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_header.py +@@ -29,10 +29,10 @@ import logging + import string + from string import Template + +-from generator import Generator, ucfirst +-from models import ObjectType, EnumType +-from objc_generator import ObjCGenerator, join_type_and_name +-from objc_generator_templates import ObjCGeneratorTemplates as ObjCTemplates ++from .generator import Generator, ucfirst ++from .models import ObjectType, EnumType ++from .objc_generator import ObjCGenerator, join_type_and_name ++from .objc_generator_templates import ObjCGeneratorTemplates as ObjCTemplates + + log = logging.getLogger('global') + +@@ -60,9 +60,9 @@ class ObjCHeaderGenerator(Generator): + } + + domains = self.domains_to_generate() +- type_domains = filter(ObjCGenerator.should_generate_domain_types_filter(self.model()), domains) +- command_domains = filter(ObjCGenerator.should_generate_domain_command_handler_filter(self.model()), domains) +- event_domains = filter(ObjCGenerator.should_generate_domain_event_dispatcher_filter(self.model()), domains) ++ type_domains = list(filter(ObjCGenerator.should_generate_domain_types_filter(self.model()), domains)) ++ command_domains = list(filter(ObjCGenerator.should_generate_domain_command_handler_filter(self.model()), domains)) ++ event_domains = list(filter(ObjCGenerator.should_generate_domain_event_dispatcher_filter(self.model()), domains)) + + # FIXME: Web Inspector: Reduce unnecessary enums/types generated in ObjC Protocol Interfaces + # Currently we generate enums/types for all types in the type_domains. For the built-in +@@ -72,11 +72,11 @@ class ObjCHeaderGenerator(Generator): + sections = [] + sections.append(self.generate_license()) + sections.append(Template(ObjCTemplates.HeaderPrelude).substitute(None, **header_args)) +- sections.append('\n'.join(filter(None, map(self._generate_forward_declarations, type_domains)))) +- sections.append('\n'.join(filter(None, map(self._generate_enums, type_domains)))) +- sections.append('\n'.join(filter(None, map(self._generate_types, type_domains)))) +- sections.append('\n\n'.join(filter(None, map(self._generate_command_protocols, command_domains)))) +- sections.append('\n\n'.join(filter(None, map(self._generate_event_interfaces, event_domains)))) ++ sections.append('\n'.join([_f for _f in map(self._generate_forward_declarations, type_domains) if _f])) ++ sections.append('\n'.join([_f for _f in map(self._generate_enums, type_domains) if _f])) ++ sections.append('\n'.join([_f for _f in map(self._generate_types, type_domains) if _f])) ++ sections.append('\n\n'.join([_f for _f in map(self._generate_command_protocols, command_domains) if _f])) ++ sections.append('\n\n'.join([_f for _f in map(self._generate_event_interfaces, event_domains) if _f])) + sections.append(Template(ObjCTemplates.HeaderPostlude).substitute(None)) + return '\n\n'.join(sections) + +@@ -156,8 +156,8 @@ class ObjCHeaderGenerator(Generator): + objc_name = ObjCGenerator.objc_name_for_type(declaration.type) + lines.append('__attribute__((visibility ("default")))') + lines.append('@interface %s : %s' % (objc_name, ObjCGenerator.OBJC_JSON_OBJECT_BASE)) +- required_members = filter(lambda member: not member.is_optional, declaration.type_members) +- optional_members = filter(lambda member: member.is_optional, declaration.type_members) ++ required_members = [member for member in declaration.type_members if not member.is_optional] ++ optional_members = [member for member in declaration.type_members if member.is_optional] + if required_members: + lines.append(self._generate_init_method_for_required_members(domain, declaration, required_members)) + for member in required_members: +diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_internal_header.py b/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_internal_header.py +index 40802ff17..f21b16222 100755 +--- a/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_internal_header.py ++++ b/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_internal_header.py +@@ -29,9 +29,9 @@ import logging + import string + from string import Template + +-from generator import Generator, ucfirst +-from objc_generator import ObjCGenerator +-from objc_generator_templates import ObjCGeneratorTemplates as ObjCTemplates ++from .generator import Generator, ucfirst ++from .objc_generator import ObjCGenerator ++from .objc_generator_templates import ObjCGeneratorTemplates as ObjCTemplates + + log = logging.getLogger('global') + +@@ -56,12 +56,12 @@ class ObjCInternalHeaderGenerator(Generator): + } + + domains = self.domains_to_generate() +- event_domains = filter(ObjCGenerator.should_generate_domain_event_dispatcher_filter(self.model()), domains) ++ event_domains = list(filter(ObjCGenerator.should_generate_domain_event_dispatcher_filter(self.model()), domains)) + + sections = [] + sections.append(self.generate_license()) + sections.append(Template(ObjCTemplates.GenericHeaderPrelude).substitute(None, **header_args)) +- sections.append('\n\n'.join(filter(None, map(self._generate_event_dispatcher_private_interfaces, event_domains)))) ++ sections.append('\n\n'.join([_f for _f in map(self._generate_event_dispatcher_private_interfaces, event_domains) if _f])) + sections.append(Template(ObjCTemplates.GenericHeaderPostlude).substitute(None, **header_args)) + return '\n\n'.join(sections) + +diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_protocol_types_implementation.py b/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_protocol_types_implementation.py +index 95b57f671..8a6aac035 100755 +--- a/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_protocol_types_implementation.py ++++ b/Source/JavaScriptCore/inspector/scripts/codegen/generate_objc_protocol_types_implementation.py +@@ -29,10 +29,10 @@ import logging + import string + from string import Template + +-from generator import Generator, ucfirst +-from models import ObjectType +-from objc_generator import ObjCGenerator +-from objc_generator_templates import ObjCGeneratorTemplates as ObjCTemplates ++from .generator import Generator, ucfirst ++from .models import ObjectType ++from .objc_generator import ObjCGenerator ++from .objc_generator_templates import ObjCGeneratorTemplates as ObjCTemplates + + log = logging.getLogger('global') + +@@ -51,7 +51,7 @@ class ObjCProtocolTypesImplementationGenerator(Generator): + return '%sTypes.mm' % ObjCGenerator.OBJC_PREFIX + + def domains_to_generate(self): +- return filter(ObjCGenerator.should_generate_domain_types_filter(self.model()), Generator.domains_to_generate(self)) ++ return list(filter(ObjCGenerator.should_generate_domain_types_filter(self.model()), Generator.domains_to_generate(self))) + + def generate_output(self): + secondary_headers = [ +@@ -69,7 +69,7 @@ class ObjCProtocolTypesImplementationGenerator(Generator): + sections = [] + sections.append(self.generate_license()) + sections.append(Template(ObjCTemplates.ImplementationPrelude).substitute(None, **header_args)) +- sections.extend(map(self.generate_type_implementations, domains)) ++ sections.extend(list(map(self.generate_type_implementations, domains))) + sections.append(Template(ObjCTemplates.ImplementationPostlude).substitute(None, **header_args)) + return '\n\n'.join(sections) + +@@ -84,7 +84,7 @@ class ObjCProtocolTypesImplementationGenerator(Generator): + def generate_type_implementation(self, domain, declaration): + lines = [] + lines.append('@implementation %s' % ObjCGenerator.objc_name_for_type(declaration.type)) +- required_members = filter(lambda member: not member.is_optional, declaration.type_members) ++ required_members = [member for member in declaration.type_members if not member.is_optional] + if required_members: + lines.append('') + lines.append(self._generate_init_method_for_required_members(domain, declaration, required_members)) +@@ -112,7 +112,7 @@ class ObjCProtocolTypesImplementationGenerator(Generator): + lines.append(' return nil;') + lines.append('') + +- required_pointer_members = filter(lambda member: ObjCGenerator.is_type_objc_pointer_type(member.type), required_members) ++ required_pointer_members = [member for member in required_members if ObjCGenerator.is_type_objc_pointer_type(member.type)] + if required_pointer_members: + for member in required_pointer_members: + var_name = ObjCGenerator.identifier_to_objc_identifier(member.member_name) +diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/generator.py b/Source/JavaScriptCore/inspector/scripts/codegen/generator.py +index 4c8f1998e..0ed011136 100755 +--- a/Source/JavaScriptCore/inspector/scripts/codegen/generator.py ++++ b/Source/JavaScriptCore/inspector/scripts/codegen/generator.py +@@ -29,8 +29,8 @@ import os.path + import re + from string import Template + +-from generator_templates import GeneratorTemplates as Templates +-from models import PrimitiveType, ObjectType, ArrayType, EnumType, AliasedType, Frameworks ++from .generator_templates import GeneratorTemplates as Templates ++from .models import PrimitiveType, ObjectType, ArrayType, EnumType, AliasedType, Frameworks + + log = logging.getLogger('global') + +@@ -87,7 +87,7 @@ class Generator: + + # These methods are overridden by subclasses. + def non_supplemental_domains(self): +- return filter(lambda domain: not domain.is_supplemental, self.model().domains) ++ return [domain for domain in self.model().domains if not domain.is_supplemental] + + def domains_to_generate(self): + return self.non_supplemental_domains() +@@ -129,7 +129,7 @@ class Generator: + # set of types will not be automatically regenerated on subsequent calls to + # Generator.types_needing_shape_assertions(). + def calculate_types_requiring_shape_assertions(self, domains): +- domain_names = map(lambda domain: domain.domain_name, domains) ++ domain_names = [domain.domain_name for domain in domains] + log.debug("> Calculating types that need shape assertions (eligible domains: %s)" % ", ".join(domain_names)) + + # Mutates the passed-in set; this simplifies checks to prevent infinite recursion. +@@ -185,7 +185,7 @@ class Generator: + for _type in all_types: + if not isinstance(_type, EnumType): + continue +- map(self._assign_encoding_for_enum_value, _type.enum_values()) ++ list(map(self._assign_encoding_for_enum_value, _type.enum_values())) + + def _assign_encoding_for_enum_value(self, enum_value): + if enum_value in self._enum_value_encodings: +@@ -219,7 +219,7 @@ class Generator: + return match.group(1).upper() + + # Split on hyphen, introduce camelcase, and force uppercasing of acronyms. +- subwords = map(ucfirst, enum_value.split('-')) ++ subwords = list(map(ucfirst, enum_value.split('-'))) + return re.sub(re.compile(regex, re.IGNORECASE), replaceCallback, "".join(subwords)) + + @staticmethod +diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/models.py b/Source/JavaScriptCore/inspector/scripts/codegen/models.py +index ec16a1291..426ab4b2b 100755 +--- a/Source/JavaScriptCore/inspector/scripts/codegen/models.py ++++ b/Source/JavaScriptCore/inspector/scripts/codegen/models.py +@@ -35,7 +35,7 @@ def ucfirst(str): + + + def find_duplicates(l): +- return [key for key, count in collections.Counter(l).items() if count > 1] ++ return [key for key, count in list(collections.Counter(l).items()) if count > 1] + + + _FRAMEWORK_CONFIG_MAP = { +diff --git a/Source/JavaScriptCore/inspector/scripts/codegen/objc_generator.py b/Source/JavaScriptCore/inspector/scripts/codegen/objc_generator.py +index f6dd03cb5..00015dc2b 100755 +--- a/Source/JavaScriptCore/inspector/scripts/codegen/objc_generator.py ++++ b/Source/JavaScriptCore/inspector/scripts/codegen/objc_generator.py +@@ -24,8 +24,8 @@ + # THE POSSIBILITY OF SUCH DAMAGE. + + import logging +-from generator import Generator, ucfirst +-from models import PrimitiveType, ObjectType, ArrayType, EnumType, AliasedType, Frameworks ++from .generator import Generator, ucfirst ++from .models import PrimitiveType, ObjectType, ArrayType, EnumType, AliasedType, Frameworks + + log = logging.getLogger('global') + +@@ -50,7 +50,7 @@ _OBJC_IDENTIFIER_RENAME_MAP = { + 'id': 'identifier', # Page.Frame.id, Runtime.ExecutionContextDescription.id, Debugger.BreakpointAction.id + } + +-_OBJC_IDENTIFIER_REVERSE_RENAME_MAP = dict((v, k) for k, v in _OBJC_IDENTIFIER_RENAME_MAP.iteritems()) ++_OBJC_IDENTIFIER_REVERSE_RENAME_MAP = dict((v, k) for k, v in list(_OBJC_IDENTIFIER_RENAME_MAP.items())) + + + class ObjCTypeCategory: +@@ -62,11 +62,11 @@ class ObjCTypeCategory: + @staticmethod + def category_for_type(_type): + if (isinstance(_type, PrimitiveType)): +- if _type.raw_name() is 'string': ++ if _type.raw_name() == 'string': + return ObjCTypeCategory.String + if _type.raw_name() in ['object', 'any']: + return ObjCTypeCategory.Object +- if _type.raw_name() is 'array': ++ if _type.raw_name() == 'array': + return ObjCTypeCategory.Array + return ObjCTypeCategory.Simple + if (isinstance(_type, ObjectType)): +@@ -192,15 +192,15 @@ class ObjCGenerator: + + @staticmethod + def objc_type_for_raw_name(raw_name): +- if raw_name is 'string': ++ if raw_name == 'string': + return 'NSString *' +- if raw_name is 'array': ++ if raw_name == 'array': + return 'NSArray *' +- if raw_name is 'integer': ++ if raw_name == 'integer': + return 'int' +- if raw_name is 'number': ++ if raw_name == 'number': + return 'double' +- if raw_name is 'boolean': ++ if raw_name == 'boolean': + return 'BOOL' + if raw_name in ['any', 'object']: + return '%s *' % ObjCGenerator.OBJC_JSON_OBJECT_BASE +@@ -208,9 +208,9 @@ class ObjCGenerator: + + @staticmethod + def objc_class_for_raw_name(raw_name): +- if raw_name is 'string': ++ if raw_name == 'string': + return 'NSString' +- if raw_name is 'array': ++ if raw_name == 'array': + return 'NSArray' + if raw_name in ['integer', 'number', 'boolean']: + return 'NSNumber' +@@ -222,13 +222,13 @@ class ObjCGenerator: + + @staticmethod + def protocol_type_for_raw_name(raw_name): +- if raw_name is 'string': ++ if raw_name == 'string': + return 'String' +- if raw_name is 'integer': ++ if raw_name == 'integer': + return 'int' +- if raw_name is 'number': ++ if raw_name == 'number': + return 'double' +- if raw_name is 'boolean': ++ if raw_name == 'boolean': + return 'bool' + if raw_name in ['any', 'object']: + return 'InspectorObject' +@@ -370,11 +370,11 @@ class ObjCGenerator: + objc_class = ObjCGenerator.objc_class_for_type(var_type.element_type) + if protocol_type == 'Inspector::Protocol::Array': + return 'inspectorStringArrayArray(%s)' % var_name +- if protocol_type is 'String' and objc_class is 'NSString': ++ if protocol_type == 'String' and objc_class == 'NSString': + return 'inspectorStringArray(%s)' % var_name +- if protocol_type is 'int' and objc_class is 'NSNumber': ++ if protocol_type == 'int' and objc_class == 'NSNumber': + return 'inspectorIntegerArray(%s)' % var_name +- if protocol_type is 'double' and objc_class is 'NSNumber': ++ if protocol_type == 'double' and objc_class == 'NSNumber': + return 'inspectorDoubleArray(%s)' % var_name + return 'inspectorObjectArray(%s)' % var_name + +@@ -404,9 +404,9 @@ class ObjCGenerator: + return '[[[%s alloc] initWithInspectorObject:%s] autorelease]' % (objc_class, var_name) + if category is ObjCTypeCategory.Array: + objc_class = ObjCGenerator.objc_class_for_type(var_type.element_type) +- if objc_class is 'NSString': ++ if objc_class == 'NSString': + return 'objcStringArray(%s)' % var_name +- if objc_class is 'NSNumber': # FIXME: Integer or Double? ++ if objc_class == 'NSNumber': # FIXME: Integer or Double? + return 'objcIntegerArray(%s)' % var_name + return 'objcArray<%s>(%s)' % (objc_class, var_name) + +@@ -425,11 +425,11 @@ class ObjCGenerator: + return sub_expression + if category is ObjCTypeCategory.Array: + objc_class = ObjCGenerator.objc_class_for_type(member.type.element_type) +- if objc_class is 'NSString': ++ if objc_class == 'NSString': + return 'inspectorStringArray(%s)' % sub_expression +- if objc_class is 'NSNumber': ++ if objc_class == 'NSNumber': + protocol_type = ObjCGenerator.protocol_type_for_type(member.type.element_type) +- if protocol_type is 'double': ++ if protocol_type == 'double': + return 'inspectorDoubleArray(%s)' % sub_expression + return 'inspectorIntegerArray(%s)' % sub_expression + return 'inspectorObjectArray(%s)' % sub_expression +@@ -449,11 +449,11 @@ class ObjCGenerator: + if category is ObjCTypeCategory.Array: + protocol_type = ObjCGenerator.protocol_type_for_type(member.type.element_type) + objc_class = ObjCGenerator.objc_class_for_type(member.type.element_type) +- if objc_class is 'NSString': ++ if objc_class == 'NSString': + return 'objcStringArray(%s)' % sub_expression +- if objc_class is 'NSNumber': ++ if objc_class == 'NSNumber': + protocol_type = ObjCGenerator.protocol_type_for_type(member.type.element_type) +- if protocol_type is 'double': ++ if protocol_type == 'double': + return 'objcDoubleArray(%s)' % sub_expression + return 'objcIntegerArray(%s)' % sub_expression + return 'objcArray<%s>(%s)' % (objc_class, sub_expression) +@@ -470,17 +470,17 @@ class ObjCGenerator: + _type = _type.aliased_type + if (isinstance(_type, PrimitiveType)): + raw_name = _type.raw_name() +- if raw_name is 'boolean': ++ if raw_name == 'boolean': + return 'setBool' +- if raw_name is 'integer': ++ if raw_name == 'integer': + return 'setInteger' +- if raw_name is 'number': ++ if raw_name == 'number': + return 'setDouble' +- if raw_name is 'string': ++ if raw_name == 'string': + return 'setString' + if raw_name in ['any', 'object']: + return 'setObject' +- if raw_name is 'array': ++ if raw_name == 'array': + return 'setInspectorArray' + return None + if (isinstance(_type, EnumType)): +@@ -501,17 +501,17 @@ class ObjCGenerator: + _type = _type.aliased_type + if (isinstance(_type, PrimitiveType)): + raw_name = _type.raw_name() +- if raw_name is 'boolean': ++ if raw_name == 'boolean': + return 'boolForKey' +- if raw_name is 'integer': ++ if raw_name == 'integer': + return 'integerForKey' +- if raw_name is 'number': ++ if raw_name == 'number': + return 'doubleForKey' +- if raw_name is 'string': ++ if raw_name == 'string': + return 'stringForKey' + if raw_name in ['any', 'object']: + return 'objectForKey' +- if raw_name is 'array': ++ if raw_name == 'array': + return 'inspectorArrayForKey' + return None + if (isinstance(_type, EnumType)): +diff --git a/Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py b/Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py +index a1987aa90..86cbd4934 100755 +--- a/Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py ++++ b/Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py +@@ -48,7 +48,7 @@ try: + + # When copying generator files to JavaScriptCore's private headers on Mac, + # the codegen/ module directory is flattened. So, import directly. +-except ImportError, e: ++except ImportError as e: + # log.error(e) # Uncomment this to debug early import errors. + import models + from models import * +diff --git a/Source/JavaScriptCore/replay/scripts/CodeGeneratorReplayInputs.py b/Source/JavaScriptCore/replay/scripts/CodeGeneratorReplayInputs.py +index de32ef6c4..18fff7167 100644 +--- a/Source/JavaScriptCore/replay/scripts/CodeGeneratorReplayInputs.py ++++ b/Source/JavaScriptCore/replay/scripts/CodeGeneratorReplayInputs.py +@@ -410,7 +410,7 @@ class InputsModel: + self.inputs_by_name = {} + + def enum_types(self): +- _enums = filter(lambda x: x.is_enum() or x.is_enum_class(), self.types) ++ _enums = [x for x in self.types if x.is_enum() or x.is_enum_class()] + return sorted(_enums, key=lambda _enum: _enum.type_name()) + + def get_type_for_member(self, member): +@@ -424,7 +424,7 @@ class InputsModel: + if not isinstance(json['types'], dict): + raise ParseException("Malformed specification: types is not a dict of framework->type list") + +- for framework_name, type_list in json['types'].iteritems(): ++ for framework_name, type_list in json['types'].items(): + if not isinstance(type_list, list): + raise ParseException("Malformed specification: type list for framework %s is not a list" % framework_name) + +@@ -436,7 +436,7 @@ class InputsModel: + if not isinstance(json['inputs'], dict): + raise ParseException("Malformed specification: inputs is not a dict of framework->input list") + +- for framework_name, input_list in json['inputs'].iteritems(): ++ for framework_name, input_list in json['inputs'].items(): + if not isinstance(input_list, list): + raise ParseException("Malformed specification: input list for framework %s is not a list" % framework_name) + +@@ -597,8 +597,8 @@ class Generator: + implementation_file.close() + + def generate_header(self): +- enums_to_generate = filter(self.should_generate_item, self._model.enum_types()) +- inputs_to_generate = filter(self.should_generate_item, self._model.inputs) ++ enums_to_generate = list(filter(self.should_generate_item, self._model.enum_types())) ++ inputs_to_generate = list(filter(self.should_generate_item, self._model.inputs)) + + template_arguments = { + 'licenseBlock': self.generate_license(), +@@ -620,8 +620,8 @@ class Generator: + return Template(Templates.HeaderSkeleton).substitute(template_arguments) + + def generate_implementation(self): +- enums_to_generate = filter(self.should_generate_item, self._model.enum_types()) +- inputs_to_generate = filter(self.should_generate_item, self._model.inputs) ++ enums_to_generate = list(filter(self.should_generate_item, self._model.enum_types())) ++ inputs_to_generate = list(filter(self.should_generate_item, self._model.inputs)) + + template_arguments = { + 'licenseBlock': self.generate_license(), +@@ -680,7 +680,7 @@ class Generator: + lines = [] + + decls_by_framework = {} +- frameworks = [Framework.fromString(s) for s in FRAMEWORK_CONFIG_MAP.keys() if s != Frameworks.Global.name] ++ frameworks = [Framework.fromString(s) for s in list(FRAMEWORK_CONFIG_MAP.keys()) if s != Frameworks.Global.name] + for framework in frameworks: + decls_by_framework[framework] = [] + +@@ -808,7 +808,7 @@ class Generator: + return Template(template).substitute(template_arguments) + + def generate_for_each_macro(self): +- inputs_to_generate = filter(self.should_generate_item, self._model.inputs) ++ inputs_to_generate = list(filter(self.should_generate_item, self._model.inputs)) + + macro_name = "%s_REPLAY_INPUT_NAMES_FOR_EACH" % self.setting('prefix').upper() + lines = [] +@@ -858,7 +858,7 @@ class Generator: + } + encodeLines.append(Template(encode_template).substitute(template_arguments)) + +- for guard, guard_values in _type.guard_values_map.iteritems(): ++ for guard, guard_values in _type.guard_values_map.items(): + guardedLines = [] + for guard_value in guard_values: + template_arguments = { +@@ -880,7 +880,7 @@ class Generator: + } + decodeLines.append(Template(decode_template).substitute(template_arguments)) + +- for guard, guard_values in _type.guard_values_map.iteritems(): ++ for guard, guard_values in _type.guard_values_map.items(): + guardedLines = [] + for i, guard_value in enumerate(guard_values): + template_arguments = { +@@ -999,7 +999,7 @@ def generate_from_specifications(input_filepaths=[], output_prefix="", output_di + except ValueError as e: + raise Exception("Error parsing valid JSON in file: " + input_filepath) + +- specifications = map(parse_json_from_file, input_filepaths) ++ specifications = list(map(parse_json_from_file, input_filepaths)) + + model = InputsModel() + for spec in specifications: +@@ -1012,7 +1012,7 @@ def generate_from_specifications(input_filepaths=[], output_prefix="", output_di + + + if __name__ == '__main__': +- allowed_framework_names = FRAMEWORK_CONFIG_MAP.keys() ++ allowed_framework_names = list(FRAMEWORK_CONFIG_MAP.keys()) + + cli_parser = optparse.OptionParser(usage="usage: %prog [options] [, ]") + cli_parser.add_option("-o", "--outputDir", help="Directory where generated files should be written.") +diff --git a/Source/ThirdParty/ANGLE/generate_winrt_projects.py b/Source/ThirdParty/ANGLE/generate_winrt_projects.py +index e0e517772..5e18782c1 100644 +--- a/Source/ThirdParty/ANGLE/generate_winrt_projects.py ++++ b/Source/ThirdParty/ANGLE/generate_winrt_projects.py +@@ -30,8 +30,8 @@ def generateProjects(generation_dir, build_winphone): + gyp_cmd += ' -D angle_standalone=1' + gyp_cmd += ' ' + os.path.join(script_dir, 'angle.gyp') + +- print 'Generating projects to ' + generation_dir + ' from gyp files...' +- print gyp_cmd ++ print('Generating projects to ' + generation_dir + ' from gyp files...') ++ print(gyp_cmd) + sys.stdout.flush() + os.system(gyp_cmd) + +diff --git a/Source/ThirdParty/ANGLE/src/libANGLE/Float16ToFloat32.py b/Source/ThirdParty/ANGLE/src/libANGLE/Float16ToFloat32.py +index cf039bfc2..951aa146e 100644 +--- a/Source/ThirdParty/ANGLE/src/libANGLE/Float16ToFloat32.py ++++ b/Source/ThirdParty/ANGLE/src/libANGLE/Float16ToFloat32.py +@@ -42,7 +42,7 @@ def convertOffset(i): + else: + return 1024 + +-print """// ++print("""// + // Copyright (c) 2012 The ANGLE Project Authors. All rights reserved. + // Use of this source code is governed by a BSD-style license that can be + // found in the LICENSE file. +@@ -52,27 +52,27 @@ print """// + + namespace gl + { +-""" ++""") + +-print "const static unsigned g_mantissa[2048] = {" ++print("const static unsigned g_mantissa[2048] = {") + for i in range(0, 2048): +- print " %#010x," % convertMantissa(i) +-print "};\n" ++ print(" %#010x," % convertMantissa(i)) ++print("};\n") + +-print "const static unsigned g_exponent[64] = {" ++print("const static unsigned g_exponent[64] = {") + for i in range(0, 64): +- print " %#010x," % convertExponent(i) +-print "};\n" ++ print(" %#010x," % convertExponent(i)) ++print("};\n") + +-print "const static unsigned g_offset[64] = {" ++print("const static unsigned g_offset[64] = {") + for i in range(0, 64): +- print " %#010x," % convertOffset(i) +-print "};\n" ++ print(" %#010x," % convertOffset(i)) ++print("};\n") + +-print """float float16ToFloat32(unsigned short h) ++print("""float float16ToFloat32(unsigned short h) + { + unsigned i32 = g_mantissa[g_offset[h >> 10] + (h & 0x3ff)] + g_exponent[h >> 10]; + return *(float*) &i32; + } + } +-""" ++""") +diff --git a/Source/ThirdParty/ANGLE/src/libANGLE/renderer/generate_new_renderer.py b/Source/ThirdParty/ANGLE/src/libANGLE/renderer/generate_new_renderer.py +index 5d64fbd23..e0be48b55 100644 +--- a/Source/ThirdParty/ANGLE/src/libANGLE/renderer/generate_new_renderer.py ++++ b/Source/ThirdParty/ANGLE/src/libANGLE/renderer/generate_new_renderer.py +@@ -21,7 +21,7 @@ import re + import string + + if len(sys.argv) < 3: +- print('Usage: ' + sys.argv[0] + ' ') ++ print(('Usage: ' + sys.argv[0] + ' ')) + + renderer_name = sys.argv[1] + renderer_suffix = sys.argv[2] +diff --git a/Source/ThirdParty/gtest/scripts/fuse_gtest_files.py b/Source/ThirdParty/gtest/scripts/fuse_gtest_files.py +index 148444ca7..333d55590 100755 +--- a/Source/ThirdParty/gtest/scripts/fuse_gtest_files.py ++++ b/Source/ThirdParty/gtest/scripts/fuse_gtest_files.py +@@ -90,8 +90,8 @@ def VerifyFileExists(directory, relative_path): + """ + + if not os.path.isfile(os.path.join(directory, relative_path)): +- print 'ERROR: Cannot find %s in directory %s.' % (relative_path, +- directory) ++ print('ERROR: Cannot find %s in directory %s.' % (relative_path, ++ directory)) + print ('Please either specify a valid project root directory ' + 'or omit it on the command line.') + sys.exit(1) +@@ -119,11 +119,11 @@ def VerifyOutputFile(output_dir, relative_path): + # TODO(wan@google.com): The following user-interaction doesn't + # work with automated processes. We should provide a way for the + # Makefile to force overwriting the files. +- print ('%s already exists in directory %s - overwrite it? (y/N) ' % +- (relative_path, output_dir)) ++ print(('%s already exists in directory %s - overwrite it? (y/N) ' % ++ (relative_path, output_dir))) + answer = sys.stdin.readline().strip() + if answer not in ['y', 'Y']: +- print 'ABORTED.' ++ print('ABORTED.') + sys.exit(1) + + # Makes sure the directory holding the output file exists; creates +@@ -242,7 +242,7 @@ def main(): + # fuse_gtest_files.py GTEST_ROOT_DIR OUTPUT_DIR + FuseGTest(sys.argv[1], sys.argv[2]) + else: +- print __doc__ ++ print(__doc__) + sys.exit(1) + + +diff --git a/Source/ThirdParty/gtest/scripts/gen_gtest_pred_impl.py b/Source/ThirdParty/gtest/scripts/gen_gtest_pred_impl.py +index 8307134ad..748bcfeb4 100755 +--- a/Source/ThirdParty/gtest/scripts/gen_gtest_pred_impl.py ++++ b/Source/ThirdParty/gtest/scripts/gen_gtest_pred_impl.py +@@ -183,7 +183,7 @@ def Title(word): + def OneTo(n): + """Returns the list [1, 2, 3, ..., n].""" + +- return range(1, n + 1) ++ return list(range(1, n + 1)) + + + def Iter(n, format, sep=''): +@@ -305,13 +305,13 @@ def GenerateFile(path, content): + """Given a file path and a content string, overwrites it with the + given content.""" + +- print 'Updating file %s . . .' % path ++ print('Updating file %s . . .' % path) + + f = file(path, 'w+') +- print >>f, content, ++ print(content, end=' ', file=f) + f.close() + +- print 'File %s has been updated.' % path ++ print('File %s has been updated.' % path) + + + def GenerateHeader(n): +@@ -720,8 +720,8 @@ def _Main(): + unit test.""" + + if len(sys.argv) != 2: +- print __doc__ +- print 'Author: ' + __author__ ++ print(__doc__) ++ print('Author: ' + __author__) + sys.exit(1) + + n = int(sys.argv[1]) +diff --git a/Source/ThirdParty/gtest/scripts/pump.py b/Source/ThirdParty/gtest/scripts/pump.py +index f15c1b6ce..92b70ecec 100755 +--- a/Source/ThirdParty/gtest/scripts/pump.py ++++ b/Source/ThirdParty/gtest/scripts/pump.py +@@ -236,7 +236,7 @@ def ParseToken(lines, pos, regex, token_type): + if m and not m.start(): + return MakeToken(lines, pos, pos + m.end(), token_type) + else: +- print 'ERROR: %s expected at %s.' % (token_type, pos) ++ print('ERROR: %s expected at %s.' % (token_type, pos)) + sys.exit(1) + + +@@ -263,8 +263,8 @@ def SkipUntil(lines, pos, regex, token_type): + if m: + return pos + m.start() + else: +- print ('ERROR: %s expected on line %s after column %s.' % +- (token_type, pos.line + 1, pos.column)) ++ print(('ERROR: %s expected on line %s after column %s.' % ++ (token_type, pos.line + 1, pos.column))) + sys.exit(1) + + +@@ -444,8 +444,8 @@ def PushFront(a_list, elem): + def PopToken(a_list, token_type=None): + token = PopFront(a_list) + if token_type is not None and token.token_type != token_type: +- print 'ERROR: %s expected at %s' % (token_type, token.start) +- print 'ERROR: %s found instead' % (token,) ++ print('ERROR: %s expected at %s' % (token_type, token.start)) ++ print('ERROR: %s found instead' % (token,)) + sys.exit(1) + + return token +@@ -609,16 +609,16 @@ class Env: + if identifier == var: + return value + +- print 'ERROR: meta variable %s is undefined.' % (identifier,) ++ print('ERROR: meta variable %s is undefined.' % (identifier,)) + sys.exit(1) + + def EvalExp(self, exp): + try: + result = eval(exp.python_exp) +- except Exception, e: +- print 'ERROR: caught exception %s: %s' % (e.__class__.__name__, e) +- print ('ERROR: failed to evaluate meta expression %s at %s' % +- (exp.python_exp, exp.token.start)) ++ except Exception as e: ++ print('ERROR: caught exception %s: %s' % (e.__class__.__name__, e)) ++ print(('ERROR: failed to evaluate meta expression %s at %s' % ++ (exp.python_exp, exp.token.start))) + sys.exit(1) + return result + +@@ -627,7 +627,7 @@ class Env: + if identifier == var: + return (lower, upper) + +- print 'ERROR: range %s is undefined.' % (identifier,) ++ print('ERROR: range %s is undefined.' % (identifier,)) + sys.exit(1) + + +@@ -687,8 +687,8 @@ def RunAtomicCode(env, node, output): + elif isinstance(node, CodeNode): + RunCode(env.Clone(), node, output) + else: +- print 'BAD' +- print node ++ print('BAD') ++ print(node) + sys.exit(1) + + +@@ -807,7 +807,7 @@ def BeautifyCode(string): + + def main(argv): + if len(argv) == 1: +- print __doc__ ++ print(__doc__) + sys.exit(1) + + file_path = argv[-1] +@@ -820,7 +820,7 @@ def main(argv): + else: + output_file_path = '-' + if output_file_path == '-': +- print output_str, ++ print(output_str, end=' ') + else: + output_file = file(output_file_path, 'w') + output_file.write('// This file was GENERATED by command:\n') +diff --git a/Source/ThirdParty/gtest/scripts/upload.py b/Source/ThirdParty/gtest/scripts/upload.py +index 6e6f9a147..4890ea16d 100755 +--- a/Source/ThirdParty/gtest/scripts/upload.py ++++ b/Source/ThirdParty/gtest/scripts/upload.py +@@ -31,7 +31,7 @@ against by using the '--rev' option. + # This code is derived from appcfg.py in the App Engine SDK (open source), + # and from ASPN recipe #146306. + +-import cookielib ++import http.cookiejar + import getpass + import logging + import md5 +@@ -42,9 +42,9 @@ import re + import socket + import subprocess + import sys +-import urllib +-import urllib2 +-import urlparse ++import urllib.request, urllib.parse, urllib.error ++import urllib.request, urllib.error, urllib.parse ++import urllib.parse + + try: + import readline +@@ -79,15 +79,15 @@ def GetEmail(prompt): + last_email = last_email_file.readline().strip("\n") + last_email_file.close() + prompt += " [%s]" % last_email +- except IOError, e: ++ except IOError as e: + pass +- email = raw_input(prompt + ": ").strip() ++ email = input(prompt + ": ").strip() + if email: + try: + last_email_file = open(last_email_file_name, "w") + last_email_file.write(email) + last_email_file.close() +- except IOError, e: ++ except IOError as e: + pass + else: + email = last_email +@@ -103,20 +103,20 @@ def StatusUpdate(msg): + msg: The string to print. + """ + if verbosity > 0: +- print msg ++ print(msg) + + + def ErrorExit(msg): + """Print an error message to stderr and exit.""" +- print >>sys.stderr, msg ++ print(msg, file=sys.stderr) + sys.exit(1) + + +-class ClientLoginError(urllib2.HTTPError): ++class ClientLoginError(urllib.error.HTTPError): + """Raised to indicate there was an error authenticating with ClientLogin.""" + + def __init__(self, url, code, msg, headers, args): +- urllib2.HTTPError.__init__(self, url, code, msg, headers, None) ++ urllib.error.HTTPError.__init__(self, url, code, msg, headers, None) + self.args = args + self.reason = args["Error"] + +@@ -162,10 +162,10 @@ class AbstractRpcServer(object): + def _CreateRequest(self, url, data=None): + """Creates a new urllib request.""" + logging.debug("Creating request for: '%s' with payload:\n%s", url, data) +- req = urllib2.Request(url, data=data) ++ req = urllib.request.Request(url, data=data) + if self.host_override: + req.add_header("Host", self.host_override) +- for key, value in self.extra_headers.iteritems(): ++ for key, value in self.extra_headers.items(): + req.add_header(key, value) + return req + +@@ -189,7 +189,7 @@ class AbstractRpcServer(object): + account_type = "HOSTED" + req = self._CreateRequest( + url="https://www.google.com/accounts/ClientLogin", +- data=urllib.urlencode({ ++ data=urllib.parse.urlencode({ + "Email": email, + "Passwd": password, + "service": "ah", +@@ -203,7 +203,7 @@ class AbstractRpcServer(object): + response_dict = dict(x.split("=") + for x in response_body.split("\n") if x) + return response_dict["Auth"] +- except urllib2.HTTPError, e: ++ except urllib.error.HTTPError as e: + if e.code == 403: + body = e.read() + response_dict = dict(x.split("=", 1) for x in body.split("\n") if x) +@@ -225,14 +225,14 @@ class AbstractRpcServer(object): + continue_location = "http://localhost/" + args = {"continue": continue_location, "auth": auth_token} + req = self._CreateRequest("http://%s/_ah/login?%s" % +- (self.host, urllib.urlencode(args))) ++ (self.host, urllib.parse.urlencode(args))) + try: + response = self.opener.open(req) +- except urllib2.HTTPError, e: ++ except urllib.error.HTTPError as e: + response = e + if (response.code != 302 or + response.info()["location"] != continue_location): +- raise urllib2.HTTPError(req.get_full_url(), response.code, response.msg, ++ raise urllib.error.HTTPError(req.get_full_url(), response.code, response.msg, + response.headers, response.fp) + self.authenticated = True + +@@ -255,34 +255,34 @@ class AbstractRpcServer(object): + credentials = self.auth_function() + try: + auth_token = self._GetAuthToken(credentials[0], credentials[1]) +- except ClientLoginError, e: ++ except ClientLoginError as e: + if e.reason == "BadAuthentication": +- print >>sys.stderr, "Invalid username or password." ++ print("Invalid username or password.", file=sys.stderr) + continue + if e.reason == "CaptchaRequired": +- print >>sys.stderr, ( ++ print(( + "Please go to\n" + "https://www.google.com/accounts/DisplayUnlockCaptcha\n" +- "and verify you are a human. Then try again.") ++ "and verify you are a human. Then try again."), file=sys.stderr) + break + if e.reason == "NotVerified": +- print >>sys.stderr, "Account not verified." ++ print("Account not verified.", file=sys.stderr) + break + if e.reason == "TermsNotAgreed": +- print >>sys.stderr, "User has not agreed to TOS." ++ print("User has not agreed to TOS.", file=sys.stderr) + break + if e.reason == "AccountDeleted": +- print >>sys.stderr, "The user account has been deleted." ++ print("The user account has been deleted.", file=sys.stderr) + break + if e.reason == "AccountDisabled": +- print >>sys.stderr, "The user account has been disabled." ++ print("The user account has been disabled.", file=sys.stderr) + break + if e.reason == "ServiceDisabled": +- print >>sys.stderr, ("The user's access to the service has been " +- "disabled.") ++ print(("The user's access to the service has been " ++ "disabled."), file=sys.stderr) + break + if e.reason == "ServiceUnavailable": +- print >>sys.stderr, "The service is not available; try again later." ++ print("The service is not available; try again later.", file=sys.stderr) + break + raise + self._GetAuthCookie(auth_token) +@@ -319,7 +319,7 @@ class AbstractRpcServer(object): + args = dict(kwargs) + url = "http://%s%s" % (self.host, request_path) + if args: +- url += "?" + urllib.urlencode(args) ++ url += "?" + urllib.parse.urlencode(args) + req = self._CreateRequest(url=url, data=payload) + req.add_header("Content-Type", content_type) + try: +@@ -327,7 +327,7 @@ class AbstractRpcServer(object): + response = f.read() + f.close() + return response +- except urllib2.HTTPError, e: ++ except urllib.error.HTTPError as e: + if tries > 3: + raise + elif e.code == 401: +@@ -357,35 +357,35 @@ class HttpRpcServer(AbstractRpcServer): + Returns: + A urllib2.OpenerDirector object. + """ +- opener = urllib2.OpenerDirector() +- opener.add_handler(urllib2.ProxyHandler()) +- opener.add_handler(urllib2.UnknownHandler()) +- opener.add_handler(urllib2.HTTPHandler()) +- opener.add_handler(urllib2.HTTPDefaultErrorHandler()) +- opener.add_handler(urllib2.HTTPSHandler()) ++ opener = urllib.request.OpenerDirector() ++ opener.add_handler(urllib.request.ProxyHandler()) ++ opener.add_handler(urllib.request.UnknownHandler()) ++ opener.add_handler(urllib.request.HTTPHandler()) ++ opener.add_handler(urllib.request.HTTPDefaultErrorHandler()) ++ opener.add_handler(urllib.request.HTTPSHandler()) + opener.add_handler(urllib2.HTTPErrorProcessor()) + if self.save_cookies: + self.cookie_file = os.path.expanduser("~/.codereview_upload_cookies") +- self.cookie_jar = cookielib.MozillaCookieJar(self.cookie_file) ++ self.cookie_jar = http.cookiejar.MozillaCookieJar(self.cookie_file) + if os.path.exists(self.cookie_file): + try: + self.cookie_jar.load() + self.authenticated = True + StatusUpdate("Loaded authentication cookies from %s" % + self.cookie_file) +- except (cookielib.LoadError, IOError): ++ except (http.cookiejar.LoadError, IOError): + # Failed to load cookies - just ignore them. + pass + else: + # Create an empty cookie file with mode 600 +- fd = os.open(self.cookie_file, os.O_CREAT, 0600) ++ fd = os.open(self.cookie_file, os.O_CREAT, 0o600) + os.close(fd) + # Always chmod the cookie file +- os.chmod(self.cookie_file, 0600) ++ os.chmod(self.cookie_file, 0o600) + else: + # Don't save cookies across runs of update.py. +- self.cookie_jar = cookielib.CookieJar() +- opener.add_handler(urllib2.HTTPCookieProcessor(self.cookie_jar)) ++ self.cookie_jar = http.cookiejar.CookieJar() ++ opener.add_handler(urllib.request.HTTPCookieProcessor(self.cookie_jar)) + return opener + + +@@ -560,7 +560,7 @@ def RunShellWithReturnCode(command, print_output=False, + line = p.stdout.readline() + if not line: + break +- print line.strip("\n") ++ print(line.strip("\n")) + output_array.append(line) + output = "".join(output_array) + else: +@@ -568,7 +568,7 @@ def RunShellWithReturnCode(command, print_output=False, + p.wait() + errout = p.stderr.read() + if print_output and errout: +- print >>sys.stderr, errout ++ print(errout, file=sys.stderr) + p.stdout.close() + p.stderr.close() + return output, p.returncode +@@ -614,11 +614,11 @@ class VersionControlSystem(object): + """Show an "are you sure?" prompt if there are unknown files.""" + unknown_files = self.GetUnknownFiles() + if unknown_files: +- print "The following files are not added to version control:" ++ print("The following files are not added to version control:") + for line in unknown_files: +- print line ++ print(line) + prompt = "Are you sure to continue?(y/N) " +- answer = raw_input(prompt).strip() ++ answer = input(prompt).strip() + if answer != "y": + ErrorExit("User aborted") + +@@ -670,13 +670,13 @@ class VersionControlSystem(object): + else: + type = "current" + if len(content) > MAX_UPLOAD_SIZE: +- print ("Not uploading the %s file for %s because it's too large." % +- (type, filename)) ++ print(("Not uploading the %s file for %s because it's too large." % ++ (type, filename))) + file_too_large = True + content = "" + checksum = md5.new(content).hexdigest() + if options.verbose > 0 and not file_too_large: +- print "Uploading %s file for %s" % (type, filename) ++ print("Uploading %s file for %s" % (type, filename)) + url = "/%d/upload_content/%d/%d" % (int(issue), int(patchset), file_id) + form_fields = [("filename", filename), + ("status", status), +@@ -698,7 +698,7 @@ class VersionControlSystem(object): + + patches = dict() + [patches.setdefault(v, k) for k, v in patch_list] +- for filename in patches.keys(): ++ for filename in list(patches.keys()): + base_content, new_content, is_binary, status = files[filename] + file_id_str = patches.get(filename) + if file_id_str.find("nobase") != -1: +@@ -755,8 +755,8 @@ class SubversionVCS(VersionControlSystem): + words = line.split() + if len(words) == 2 and words[0] == "URL:": + url = words[1] +- scheme, netloc, path, params, query, fragment = urlparse.urlparse(url) +- username, netloc = urllib.splituser(netloc) ++ scheme, netloc, path, params, query, fragment = urllib.parse.urlparse(url) ++ username, netloc = urllib.parse.splituser(netloc) + if username: + logging.info("Removed username from base URL") + if netloc.endswith("svn.python.org"): +@@ -774,12 +774,12 @@ class SubversionVCS(VersionControlSystem): + logging.info("Guessed CollabNet base = %s", base) + elif netloc.endswith(".googlecode.com"): + path = path + "/" +- base = urlparse.urlunparse(("http", netloc, path, params, ++ base = urllib.parse.urlunparse(("http", netloc, path, params, + query, fragment)) + logging.info("Guessed Google Code base = %s", base) + else: + path = path + "/" +- base = urlparse.urlunparse((scheme, netloc, path, params, ++ base = urllib.parse.urlunparse((scheme, netloc, path, params, + query, fragment)) + logging.info("Guessed base = %s", base) + return base +@@ -1187,8 +1187,8 @@ def UploadSeparatePatches(issue, rpc_server, patchset, data, options): + rv = [] + for patch in patches: + if len(patch[1]) > MAX_UPLOAD_SIZE: +- print ("Not uploading the patch for " + patch[0] + +- " because the file is too large.") ++ print(("Not uploading the patch for " + patch[0] + ++ " because the file is too large.")) + continue + form_fields = [("filename", patch[0])] + if not options.download_base: +@@ -1196,7 +1196,7 @@ def UploadSeparatePatches(issue, rpc_server, patchset, data, options): + files = [("data", "data.diff", patch[1])] + ctype, body = EncodeMultipartFormData(form_fields, files) + url = "/%d/upload_patch/%d" % (int(issue), int(patchset)) +- print "Uploading patch for " + patch[0] ++ print("Uploading patch for " + patch[0]) + response_body = rpc_server.Send(url, body, content_type=ctype) + lines = response_body.splitlines() + if not lines or lines[0] != "OK": +@@ -1223,7 +1223,8 @@ def GuessVCS(options): + out, returncode = RunShellWithReturnCode(["hg", "root"]) + if returncode == 0: + return MercurialVCS(options, out.strip()) +- except OSError, (errno, message): ++ except OSError as xxx_todo_changeme: ++ (errno, message) = xxx_todo_changeme.args + if errno != 2: # ENOENT -- they don't have hg installed. + raise + +@@ -1239,7 +1240,8 @@ def GuessVCS(options): + "--is-inside-work-tree"]) + if returncode == 0: + return GitVCS(options) +- except OSError, (errno, message): ++ except OSError as xxx_todo_changeme1: ++ (errno, message) = xxx_todo_changeme1.args + if errno != 2: # ENOENT -- they don't have git installed. + raise + +@@ -1286,12 +1288,12 @@ def RealMain(argv, data=None): + data = vcs.GenerateDiff(args) + files = vcs.GetBaseFiles(data) + if verbosity >= 1: +- print "Upload server:", options.server, "(change with -s/--server)" ++ print("Upload server:", options.server, "(change with -s/--server)") + if options.issue: + prompt = "Message describing this patch set: " + else: + prompt = "New issue subject: " +- message = options.message or raw_input(prompt).strip() ++ message = options.message or input(prompt).strip() + if not message: + ErrorExit("A non-empty message is required") + rpc_server = GetRpcServer(options) +@@ -1324,7 +1326,7 @@ def RealMain(argv, data=None): + # Send a hash of all the base file so the server can determine if a copy + # already exists in an earlier patchset. + base_hashes = "" +- for file, info in files.iteritems(): ++ for file, info in files.items(): + if not info[0] is None: + checksum = md5.new(info[0]).hexdigest() + if base_hashes: +@@ -1338,7 +1340,7 @@ def RealMain(argv, data=None): + if not options.download_base: + form_fields.append(("content_upload", "1")) + if len(data) > MAX_UPLOAD_SIZE: +- print "Patch is large, so uploading file patches separately." ++ print("Patch is large, so uploading file patches separately.") + uploaded_diff_file = [] + form_fields.append(("separate_patches", "1")) + else: +@@ -1378,7 +1380,7 @@ def main(): + try: + RealMain(sys.argv) + except KeyboardInterrupt: +- print ++ print() + StatusUpdate("Interrupted.") + sys.exit(1) + +diff --git a/Source/ThirdParty/gtest/test/gtest_break_on_failure_unittest.py b/Source/ThirdParty/gtest/test/gtest_break_on_failure_unittest.py +index c81918331..f36abe338 100755 +--- a/Source/ThirdParty/gtest/test/gtest_break_on_failure_unittest.py ++++ b/Source/ThirdParty/gtest/test/gtest_break_on_failure_unittest.py +@@ -145,7 +145,7 @@ class GTestBreakOnFailureUnitTest(gtest_test_utils.TestCase): + msg = ('when %s%s, an assertion failure in "%s" %s cause a seg-fault.' % + (BREAK_ON_FAILURE_ENV_VAR, env_var_value_msg, ' '.join(command), + should_or_not)) +- self.assert_(has_seg_fault == expect_seg_fault, msg) ++ self.assertTrue(has_seg_fault == expect_seg_fault, msg) + + def testDefaultBehavior(self): + """Tests the behavior of the default mode.""" +diff --git a/Source/ThirdParty/gtest/test/gtest_color_test.py b/Source/ThirdParty/gtest/test/gtest_color_test.py +index d02a53ed8..b69ab0947 100755 +--- a/Source/ThirdParty/gtest/test/gtest_color_test.py ++++ b/Source/ThirdParty/gtest/test/gtest_color_test.py +@@ -72,58 +72,58 @@ class GTestColorTest(gtest_test_utils.TestCase): + """Tests the case when there's neither GTEST_COLOR nor --gtest_color.""" + + if not IS_WINDOWS: +- self.assert_(not UsesColor('dumb', None, None)) +- self.assert_(not UsesColor('emacs', None, None)) +- self.assert_(not UsesColor('xterm-mono', None, None)) +- self.assert_(not UsesColor('unknown', None, None)) +- self.assert_(not UsesColor(None, None, None)) +- self.assert_(UsesColor('linux', None, None)) +- self.assert_(UsesColor('cygwin', None, None)) +- self.assert_(UsesColor('xterm', None, None)) +- self.assert_(UsesColor('xterm-color', None, None)) +- self.assert_(UsesColor('xterm-256color', None, None)) ++ self.assertTrue(not UsesColor('dumb', None, None)) ++ self.assertTrue(not UsesColor('emacs', None, None)) ++ self.assertTrue(not UsesColor('xterm-mono', None, None)) ++ self.assertTrue(not UsesColor('unknown', None, None)) ++ self.assertTrue(not UsesColor(None, None, None)) ++ self.assertTrue(UsesColor('linux', None, None)) ++ self.assertTrue(UsesColor('cygwin', None, None)) ++ self.assertTrue(UsesColor('xterm', None, None)) ++ self.assertTrue(UsesColor('xterm-color', None, None)) ++ self.assertTrue(UsesColor('xterm-256color', None, None)) + + def testFlagOnly(self): + """Tests the case when there's --gtest_color but not GTEST_COLOR.""" + +- self.assert_(not UsesColor('dumb', None, 'no')) +- self.assert_(not UsesColor('xterm-color', None, 'no')) ++ self.assertTrue(not UsesColor('dumb', None, 'no')) ++ self.assertTrue(not UsesColor('xterm-color', None, 'no')) + if not IS_WINDOWS: +- self.assert_(not UsesColor('emacs', None, 'auto')) +- self.assert_(UsesColor('xterm', None, 'auto')) +- self.assert_(UsesColor('dumb', None, 'yes')) +- self.assert_(UsesColor('xterm', None, 'yes')) ++ self.assertTrue(not UsesColor('emacs', None, 'auto')) ++ self.assertTrue(UsesColor('xterm', None, 'auto')) ++ self.assertTrue(UsesColor('dumb', None, 'yes')) ++ self.assertTrue(UsesColor('xterm', None, 'yes')) + + def testEnvVarOnly(self): + """Tests the case when there's GTEST_COLOR but not --gtest_color.""" + +- self.assert_(not UsesColor('dumb', 'no', None)) +- self.assert_(not UsesColor('xterm-color', 'no', None)) ++ self.assertTrue(not UsesColor('dumb', 'no', None)) ++ self.assertTrue(not UsesColor('xterm-color', 'no', None)) + if not IS_WINDOWS: +- self.assert_(not UsesColor('dumb', 'auto', None)) +- self.assert_(UsesColor('xterm-color', 'auto', None)) +- self.assert_(UsesColor('dumb', 'yes', None)) +- self.assert_(UsesColor('xterm-color', 'yes', None)) ++ self.assertTrue(not UsesColor('dumb', 'auto', None)) ++ self.assertTrue(UsesColor('xterm-color', 'auto', None)) ++ self.assertTrue(UsesColor('dumb', 'yes', None)) ++ self.assertTrue(UsesColor('xterm-color', 'yes', None)) + + def testEnvVarAndFlag(self): + """Tests the case when there are both GTEST_COLOR and --gtest_color.""" + +- self.assert_(not UsesColor('xterm-color', 'no', 'no')) +- self.assert_(UsesColor('dumb', 'no', 'yes')) +- self.assert_(UsesColor('xterm-color', 'no', 'auto')) ++ self.assertTrue(not UsesColor('xterm-color', 'no', 'no')) ++ self.assertTrue(UsesColor('dumb', 'no', 'yes')) ++ self.assertTrue(UsesColor('xterm-color', 'no', 'auto')) + + def testAliasesOfYesAndNo(self): + """Tests using aliases in specifying --gtest_color.""" + +- self.assert_(UsesColor('dumb', None, 'true')) +- self.assert_(UsesColor('dumb', None, 'YES')) +- self.assert_(UsesColor('dumb', None, 'T')) +- self.assert_(UsesColor('dumb', None, '1')) ++ self.assertTrue(UsesColor('dumb', None, 'true')) ++ self.assertTrue(UsesColor('dumb', None, 'YES')) ++ self.assertTrue(UsesColor('dumb', None, 'T')) ++ self.assertTrue(UsesColor('dumb', None, '1')) + +- self.assert_(not UsesColor('xterm', None, 'f')) +- self.assert_(not UsesColor('xterm', None, 'false')) +- self.assert_(not UsesColor('xterm', None, '0')) +- self.assert_(not UsesColor('xterm', None, 'unknown')) ++ self.assertTrue(not UsesColor('xterm', None, 'f')) ++ self.assertTrue(not UsesColor('xterm', None, 'false')) ++ self.assertTrue(not UsesColor('xterm', None, '0')) ++ self.assertTrue(not UsesColor('xterm', None, 'unknown')) + + + if __name__ == '__main__': +diff --git a/Source/ThirdParty/gtest/test/gtest_env_var_test.py b/Source/ThirdParty/gtest/test/gtest_env_var_test.py +index bcc0bfd55..868896831 100755 +--- a/Source/ThirdParty/gtest/test/gtest_env_var_test.py ++++ b/Source/ThirdParty/gtest/test/gtest_env_var_test.py +@@ -47,8 +47,8 @@ environ = os.environ.copy() + + def AssertEq(expected, actual): + if expected != actual: +- print 'Expected: %s' % (expected,) +- print ' Actual: %s' % (actual,) ++ print('Expected: %s' % (expected,)) ++ print(' Actual: %s' % (actual,)) + raise AssertionError + + +diff --git a/Source/ThirdParty/gtest/test/gtest_filter_unittest.py b/Source/ThirdParty/gtest/test/gtest_filter_unittest.py +index 0d1a77005..595b2fa33 100755 +--- a/Source/ThirdParty/gtest/test/gtest_filter_unittest.py ++++ b/Source/ThirdParty/gtest/test/gtest_filter_unittest.py +@@ -231,10 +231,10 @@ class GTestFilterUnitTest(gtest_test_utils.TestCase): + """Asserts that two sets are equal.""" + + for elem in lhs: +- self.assert_(elem in rhs, '%s in %s' % (elem, rhs)) ++ self.assertTrue(elem in rhs, '%s in %s' % (elem, rhs)) + + for elem in rhs: +- self.assert_(elem in lhs, '%s in %s' % (elem, lhs)) ++ self.assertTrue(elem in lhs, '%s in %s' % (elem, lhs)) + + def AssertPartitionIsValid(self, set_var, list_of_sets): + """Asserts that list_of_sets is a valid partition of set_var.""" +@@ -575,13 +575,13 @@ class GTestFilterUnitTest(gtest_test_utils.TestCase): + + shard_status_file = os.path.join(gtest_test_utils.GetTempDir(), + 'shard_status_file') +- self.assert_(not os.path.exists(shard_status_file)) ++ self.assertTrue(not os.path.exists(shard_status_file)) + + extra_env = {SHARD_STATUS_FILE_ENV_VAR: shard_status_file} + try: + InvokeWithModifiedEnv(extra_env, RunAndReturnOutput) + finally: +- self.assert_(os.path.exists(shard_status_file)) ++ self.assertTrue(os.path.exists(shard_status_file)) + os.remove(shard_status_file) + + def testShardStatusFileIsCreatedWithListTests(self): +@@ -589,7 +589,7 @@ class GTestFilterUnitTest(gtest_test_utils.TestCase): + + shard_status_file = os.path.join(gtest_test_utils.GetTempDir(), + 'shard_status_file2') +- self.assert_(not os.path.exists(shard_status_file)) ++ self.assertTrue(not os.path.exists(shard_status_file)) + + extra_env = {SHARD_STATUS_FILE_ENV_VAR: shard_status_file} + try: +@@ -599,12 +599,12 @@ class GTestFilterUnitTest(gtest_test_utils.TestCase): + finally: + # This assertion ensures that Google Test enumerated the tests as + # opposed to running them. +- self.assert_('[==========]' not in output, ++ self.assertTrue('[==========]' not in output, + 'Unexpected output during test enumeration.\n' + 'Please ensure that LIST_TESTS_FLAG is assigned the\n' + 'correct flag value for listing Google Test tests.') + +- self.assert_(os.path.exists(shard_status_file)) ++ self.assertTrue(os.path.exists(shard_status_file)) + os.remove(shard_status_file) + + if SUPPORTS_DEATH_TESTS: +diff --git a/Source/ThirdParty/gtest/test/gtest_help_test.py b/Source/ThirdParty/gtest/test/gtest_help_test.py +index 3cb4c48e0..8aae487b4 100755 +--- a/Source/ThirdParty/gtest/test/gtest_help_test.py ++++ b/Source/ThirdParty/gtest/test/gtest_help_test.py +@@ -107,17 +107,17 @@ class GTestHelpTest(gtest_test_utils.TestCase): + """ + + exit_code, output = RunWithFlag(flag) +- self.assertEquals(0, exit_code) +- self.assert_(HELP_REGEX.search(output), output) ++ self.assertEqual(0, exit_code) ++ self.assertTrue(HELP_REGEX.search(output), output) + if IS_WINDOWS: +- self.assert_(CATCH_EXCEPTIONS_FLAG in output, output) ++ self.assertTrue(CATCH_EXCEPTIONS_FLAG in output, output) + else: +- self.assert_(CATCH_EXCEPTIONS_FLAG not in output, output) ++ self.assertTrue(CATCH_EXCEPTIONS_FLAG not in output, output) + + if SUPPORTS_DEATH_TESTS and not IS_WINDOWS: +- self.assert_(DEATH_TEST_STYLE_FLAG in output, output) ++ self.assertTrue(DEATH_TEST_STYLE_FLAG in output, output) + else: +- self.assert_(DEATH_TEST_STYLE_FLAG not in output, output) ++ self.assertTrue(DEATH_TEST_STYLE_FLAG not in output, output) + + def TestNonHelpFlag(self, flag): + """Verifies correct behavior when no help flag is specified. +@@ -130,8 +130,8 @@ class GTestHelpTest(gtest_test_utils.TestCase): + """ + + exit_code, output = RunWithFlag(flag) +- self.assert_(exit_code != 0) +- self.assert_(not HELP_REGEX.search(output), output) ++ self.assertTrue(exit_code != 0) ++ self.assertTrue(not HELP_REGEX.search(output), output) + + def testPrintsHelpWithFullFlag(self): + self.TestHelpFlag('--help') +diff --git a/Source/ThirdParty/gtest/test/gtest_list_tests_unittest.py b/Source/ThirdParty/gtest/test/gtest_list_tests_unittest.py +index ce8c3ef05..1d3ce746c 100755 +--- a/Source/ThirdParty/gtest/test/gtest_list_tests_unittest.py ++++ b/Source/ThirdParty/gtest/test/gtest_list_tests_unittest.py +@@ -136,9 +136,9 @@ class GTestListTestsUnitTest(gtest_test_utils.TestCase): + (LIST_TESTS_FLAG, flag_expression, ' '.join(args), output)) + + if expected_output is not None: +- self.assert_(output == expected_output, msg) ++ self.assertTrue(output == expected_output, msg) + else: +- self.assert_(output != EXPECTED_OUTPUT_NO_FILTER, msg) ++ self.assertTrue(output != EXPECTED_OUTPUT_NO_FILTER, msg) + + def testDefaultBehavior(self): + """Tests the behavior of the default mode.""" +diff --git a/Source/ThirdParty/gtest/test/gtest_shuffle_test.py b/Source/ThirdParty/gtest/test/gtest_shuffle_test.py +index 30d0303d1..e4902f09a 100755 +--- a/Source/ThirdParty/gtest/test/gtest_shuffle_test.py ++++ b/Source/ThirdParty/gtest/test/gtest_shuffle_test.py +@@ -179,23 +179,23 @@ class GTestShuffleUnitTest(gtest_test_utils.TestCase): + self.assertEqual(len(SHARDED_TESTS), len(SHUFFLED_SHARDED_TESTS)) + + def testShuffleChangesTestOrder(self): +- self.assert_(SHUFFLED_ALL_TESTS != ALL_TESTS, SHUFFLED_ALL_TESTS) +- self.assert_(SHUFFLED_ACTIVE_TESTS != ACTIVE_TESTS, SHUFFLED_ACTIVE_TESTS) +- self.assert_(SHUFFLED_FILTERED_TESTS != FILTERED_TESTS, ++ self.assertTrue(SHUFFLED_ALL_TESTS != ALL_TESTS, SHUFFLED_ALL_TESTS) ++ self.assertTrue(SHUFFLED_ACTIVE_TESTS != ACTIVE_TESTS, SHUFFLED_ACTIVE_TESTS) ++ self.assertTrue(SHUFFLED_FILTERED_TESTS != FILTERED_TESTS, + SHUFFLED_FILTERED_TESTS) +- self.assert_(SHUFFLED_SHARDED_TESTS != SHARDED_TESTS, ++ self.assertTrue(SHUFFLED_SHARDED_TESTS != SHARDED_TESTS, + SHUFFLED_SHARDED_TESTS) + + def testShuffleChangesTestCaseOrder(self): +- self.assert_(GetTestCases(SHUFFLED_ALL_TESTS) != GetTestCases(ALL_TESTS), ++ self.assertTrue(GetTestCases(SHUFFLED_ALL_TESTS) != GetTestCases(ALL_TESTS), + GetTestCases(SHUFFLED_ALL_TESTS)) +- self.assert_( ++ self.assertTrue( + GetTestCases(SHUFFLED_ACTIVE_TESTS) != GetTestCases(ACTIVE_TESTS), + GetTestCases(SHUFFLED_ACTIVE_TESTS)) +- self.assert_( ++ self.assertTrue( + GetTestCases(SHUFFLED_FILTERED_TESTS) != GetTestCases(FILTERED_TESTS), + GetTestCases(SHUFFLED_FILTERED_TESTS)) +- self.assert_( ++ self.assertTrue( + GetTestCases(SHUFFLED_SHARDED_TESTS) != GetTestCases(SHARDED_TESTS), + GetTestCases(SHUFFLED_SHARDED_TESTS)) + +@@ -215,29 +215,29 @@ class GTestShuffleUnitTest(gtest_test_utils.TestCase): + + def testShuffleDoesNotCreateNewTest(self): + for test in SHUFFLED_ALL_TESTS: +- self.assert_(test in ALL_TESTS, '%s is an invalid test' % (test,)) ++ self.assertTrue(test in ALL_TESTS, '%s is an invalid test' % (test,)) + for test in SHUFFLED_ACTIVE_TESTS: +- self.assert_(test in ACTIVE_TESTS, '%s is an invalid test' % (test,)) ++ self.assertTrue(test in ACTIVE_TESTS, '%s is an invalid test' % (test,)) + for test in SHUFFLED_FILTERED_TESTS: +- self.assert_(test in FILTERED_TESTS, '%s is an invalid test' % (test,)) ++ self.assertTrue(test in FILTERED_TESTS, '%s is an invalid test' % (test,)) + for test in SHUFFLED_SHARDED_TESTS: +- self.assert_(test in SHARDED_TESTS, '%s is an invalid test' % (test,)) ++ self.assertTrue(test in SHARDED_TESTS, '%s is an invalid test' % (test,)) + + def testShuffleIncludesAllTests(self): + for test in ALL_TESTS: +- self.assert_(test in SHUFFLED_ALL_TESTS, '%s is missing' % (test,)) ++ self.assertTrue(test in SHUFFLED_ALL_TESTS, '%s is missing' % (test,)) + for test in ACTIVE_TESTS: +- self.assert_(test in SHUFFLED_ACTIVE_TESTS, '%s is missing' % (test,)) ++ self.assertTrue(test in SHUFFLED_ACTIVE_TESTS, '%s is missing' % (test,)) + for test in FILTERED_TESTS: +- self.assert_(test in SHUFFLED_FILTERED_TESTS, '%s is missing' % (test,)) ++ self.assertTrue(test in SHUFFLED_FILTERED_TESTS, '%s is missing' % (test,)) + for test in SHARDED_TESTS: +- self.assert_(test in SHUFFLED_SHARDED_TESTS, '%s is missing' % (test,)) ++ self.assertTrue(test in SHUFFLED_SHARDED_TESTS, '%s is missing' % (test,)) + + def testShuffleLeavesDeathTestsAtFront(self): + non_death_test_found = False + for test in SHUFFLED_ACTIVE_TESTS: + if 'DeathTest.' in test: +- self.assert_(not non_death_test_found, ++ self.assertTrue(not non_death_test_found, + '%s appears after a non-death test' % (test,)) + else: + non_death_test_found = True +@@ -295,11 +295,11 @@ class GTestShuffleUnitTest(gtest_test_utils.TestCase): + GetTestsForAllIterations( + {}, [ShuffleFlag(), RandomSeedFlag(1), RepeatFlag(3)])) + +- self.assert_(tests_in_iteration1 != tests_in_iteration2, ++ self.assertTrue(tests_in_iteration1 != tests_in_iteration2, + tests_in_iteration1) +- self.assert_(tests_in_iteration1 != tests_in_iteration3, ++ self.assertTrue(tests_in_iteration1 != tests_in_iteration3, + tests_in_iteration1) +- self.assert_(tests_in_iteration2 != tests_in_iteration3, ++ self.assertTrue(tests_in_iteration2 != tests_in_iteration3, + tests_in_iteration2) + + def testShuffleShardedTestsPreservesPartition(self): +diff --git a/Source/ThirdParty/gtest/test/gtest_test_utils.py b/Source/ThirdParty/gtest/test/gtest_test_utils.py +index e0f5973e7..80a953ea1 100755 +--- a/Source/ThirdParty/gtest/test/gtest_test_utils.py ++++ b/Source/ThirdParty/gtest/test/gtest_test_utils.py +@@ -167,7 +167,7 @@ def GetTestExecutablePath(executable_name, build_dir=None): + # TODO(vladl@google.com): change mk_test.py to test.py after renaming + # the file. + 'Please run mk_test.py -h for help.') +- print >> sys.stderr, message ++ print(message, file=sys.stderr) + sys.exit(1) + + return path +diff --git a/Source/ThirdParty/gtest/test/gtest_throw_on_failure_test.py b/Source/ThirdParty/gtest/test/gtest_throw_on_failure_test.py +index 5678ffeaf..318e6306c 100755 +--- a/Source/ThirdParty/gtest/test/gtest_throw_on_failure_test.py ++++ b/Source/ThirdParty/gtest/test/gtest_throw_on_failure_test.py +@@ -70,7 +70,7 @@ def SetEnvVar(env_var, value): + def Run(command): + """Runs a command; returns True/False if its exit code is/isn't 0.""" + +- print 'Running "%s". . .' % ' '.join(command) ++ print('Running "%s". . .' % ' '.join(command)) + p = gtest_test_utils.Subprocess(command) + return p.exited and p.exit_code == 0 + +@@ -123,7 +123,7 @@ class ThrowOnFailureTest(gtest_test_utils.TestCase): + 'exit code.' % + (THROW_ON_FAILURE, env_var_value_msg, ' '.join(command), + should_or_not)) +- self.assert_(failed == should_fail, msg) ++ self.assertTrue(failed == should_fail, msg) + + def testDefaultBehavior(self): + """Tests the behavior of the default mode.""" +diff --git a/Source/ThirdParty/gtest/test/gtest_uninitialized_test.py b/Source/ThirdParty/gtest/test/gtest_uninitialized_test.py +index 6ae57eeed..435837009 100755 +--- a/Source/ThirdParty/gtest/test/gtest_uninitialized_test.py ++++ b/Source/ThirdParty/gtest/test/gtest_uninitialized_test.py +@@ -46,8 +46,8 @@ def Assert(condition): + + def AssertEq(expected, actual): + if expected != actual: +- print 'Expected: %s' % (expected,) +- print ' Actual: %s' % (actual,) ++ print('Expected: %s' % (expected,)) ++ print(' Actual: %s' % (actual,)) + raise AssertionError + + +diff --git a/Source/ThirdParty/gtest/test/gtest_xml_outfiles_test.py b/Source/ThirdParty/gtest/test/gtest_xml_outfiles_test.py +index 0fe947f08..7281864c5 100755 +--- a/Source/ThirdParty/gtest/test/gtest_xml_outfiles_test.py ++++ b/Source/ThirdParty/gtest/test/gtest_xml_outfiles_test.py +@@ -100,8 +100,8 @@ class GTestXMLOutFilesTest(gtest_xml_test_utils.GTestXMLTestCase): + command = [gtest_prog_path, "--gtest_output=xml:%s" % self.output_dir_] + p = gtest_test_utils.Subprocess(command, + working_dir=gtest_test_utils.GetTempDir()) +- self.assert_(p.exited) +- self.assertEquals(0, p.exit_code) ++ self.assertTrue(p.exited) ++ self.assertEqual(0, p.exit_code) + + # TODO(wan@google.com): libtool causes the built test binary to be + # named lt-gtest_xml_outfiles_test_ instead of +@@ -112,7 +112,7 @@ class GTestXMLOutFilesTest(gtest_xml_test_utils.GTestXMLTestCase): + output_file1 = os.path.join(self.output_dir_, output_file_name1) + output_file_name2 = 'lt-' + output_file_name1 + output_file2 = os.path.join(self.output_dir_, output_file_name2) +- self.assert_(os.path.isfile(output_file1) or os.path.isfile(output_file2), ++ self.assertTrue(os.path.isfile(output_file1) or os.path.isfile(output_file2), + output_file1) + + expected = minidom.parseString(expected_xml) +diff --git a/Source/ThirdParty/gtest/test/gtest_xml_output_unittest.py b/Source/ThirdParty/gtest/test/gtest_xml_output_unittest.py +index 6d44929ca..93b67532e 100755 +--- a/Source/ThirdParty/gtest/test/gtest_xml_output_unittest.py ++++ b/Source/ThirdParty/gtest/test/gtest_xml_output_unittest.py +@@ -145,16 +145,16 @@ class GTestXMLOutputUnitTest(gtest_xml_test_utils.GTestXMLTestCase): + "gtest_no_test_unittest") + try: + os.remove(output_file) +- except OSError, e: ++ except OSError as e: + if e.errno != errno.ENOENT: + raise + + p = gtest_test_utils.Subprocess( + [gtest_prog_path, "%s=xml" % GTEST_OUTPUT_FLAG], + working_dir=gtest_test_utils.GetTempDir()) +- self.assert_(p.exited) +- self.assertEquals(0, p.exit_code) +- self.assert_(os.path.isfile(output_file)) ++ self.assertTrue(p.exited) ++ self.assertEqual(0, p.exit_code) ++ self.assertTrue(os.path.isfile(output_file)) + + def testSuppressedXmlOutput(self): + """ +@@ -174,16 +174,16 @@ class GTestXMLOutputUnitTest(gtest_xml_test_utils.GTestXMLTestCase): + "--shut_down_xml"] + p = gtest_test_utils.Subprocess(command) + if p.terminated_by_signal: +- self.assert_(False, ++ self.assertTrue(False, + "%s was killed by signal %d" % (gtest_prog_name, p.signal)) + else: +- self.assert_(p.exited) +- self.assertEquals(1, p.exit_code, ++ self.assertTrue(p.exited) ++ self.assertEqual(1, p.exit_code, + "'%s' exited with code %s, which doesn't match " + "the expected exit code %s." + % (command, p.exit_code, 1)) + +- self.assert_(not os.path.isfile(xml_path)) ++ self.assertTrue(not os.path.isfile(xml_path)) + + + def _TestXmlOutput(self, gtest_prog_name, expected_xml, expected_exit_code): +@@ -200,11 +200,11 @@ class GTestXMLOutputUnitTest(gtest_xml_test_utils.GTestXMLTestCase): + command = [gtest_prog_path, "%s=xml:%s" % (GTEST_OUTPUT_FLAG, xml_path)] + p = gtest_test_utils.Subprocess(command) + if p.terminated_by_signal: +- self.assert_(False, ++ self.assertTrue(False, + "%s was killed by signal %d" % (gtest_prog_name, p.signal)) + else: +- self.assert_(p.exited) +- self.assertEquals(expected_exit_code, p.exit_code, ++ self.assertTrue(p.exited) ++ self.assertEqual(expected_exit_code, p.exit_code, + "'%s' exited with code %s, which doesn't match " + "the expected exit code %s." + % (command, p.exit_code, expected_exit_code)) +diff --git a/Source/ThirdParty/gtest/test/gtest_xml_test_utils.py b/Source/ThirdParty/gtest/test/gtest_xml_test_utils.py +index c83c3b7ea..2d6afb359 100755 +--- a/Source/ThirdParty/gtest/test/gtest_xml_test_utils.py ++++ b/Source/ThirdParty/gtest/test/gtest_xml_test_utils.py +@@ -67,37 +67,37 @@ class GTestXMLTestCase(gtest_test_utils.TestCase): + """ + + if expected_node.nodeType == Node.CDATA_SECTION_NODE: +- self.assertEquals(Node.CDATA_SECTION_NODE, actual_node.nodeType) +- self.assertEquals(expected_node.nodeValue, actual_node.nodeValue) ++ self.assertEqual(Node.CDATA_SECTION_NODE, actual_node.nodeType) ++ self.assertEqual(expected_node.nodeValue, actual_node.nodeValue) + return + +- self.assertEquals(Node.ELEMENT_NODE, actual_node.nodeType) +- self.assertEquals(Node.ELEMENT_NODE, expected_node.nodeType) +- self.assertEquals(expected_node.tagName, actual_node.tagName) ++ self.assertEqual(Node.ELEMENT_NODE, actual_node.nodeType) ++ self.assertEqual(Node.ELEMENT_NODE, expected_node.nodeType) ++ self.assertEqual(expected_node.tagName, actual_node.tagName) + + expected_attributes = expected_node.attributes + actual_attributes = actual_node .attributes +- self.assertEquals( ++ self.assertEqual( + expected_attributes.length, actual_attributes.length, + "attribute numbers differ in element " + actual_node.tagName) + for i in range(expected_attributes.length): + expected_attr = expected_attributes.item(i) + actual_attr = actual_attributes.get(expected_attr.name) +- self.assert_( ++ self.assertTrue( + actual_attr is not None, + "expected attribute %s not found in element %s" % + (expected_attr.name, actual_node.tagName)) +- self.assertEquals(expected_attr.value, actual_attr.value, ++ self.assertEqual(expected_attr.value, actual_attr.value, + " values of attribute %s in element %s differ" % + (expected_attr.name, actual_node.tagName)) + + expected_children = self._GetChildren(expected_node) + actual_children = self._GetChildren(actual_node) +- self.assertEquals( ++ self.assertEqual( + len(expected_children), len(actual_children), + "number of child elements differ in element " + actual_node.tagName) +- for child_id, child in expected_children.iteritems(): +- self.assert_(child_id in actual_children, ++ for child_id, child in expected_children.items(): ++ self.assertTrue(child_id in actual_children, + '<%s> is not in <%s> (in element %s)' % + (child_id, actual_children, actual_node.tagName)) + self.AssertEquivalentNodes(child, actual_children[child_id]) +@@ -125,10 +125,10 @@ class GTestXMLTestCase(gtest_test_utils.TestCase): + children = {} + for child in element.childNodes: + if child.nodeType == Node.ELEMENT_NODE: +- self.assert_(child.tagName in self.identifying_attribute, ++ self.assertTrue(child.tagName in self.identifying_attribute, + "Encountered unknown element <%s>" % child.tagName) + childID = child.getAttribute(self.identifying_attribute[child.tagName]) +- self.assert_(childID not in children) ++ self.assertTrue(childID not in children) + children[childID] = child + elif child.nodeType in [Node.TEXT_NODE, Node.CDATA_SECTION_NODE]: + if "detail" not in children: +diff --git a/Source/ThirdParty/gtest/test/run_tests_util.py b/Source/ThirdParty/gtest/test/run_tests_util.py +index 9e57931eb..1f4d33af2 100755 +--- a/Source/ThirdParty/gtest/test/run_tests_util.py ++++ b/Source/ThirdParty/gtest/test/run_tests_util.py +@@ -159,8 +159,8 @@ def _GetConfigFromBuildDir(build_dir): + if m: + return m.group(1) + else: +- print >>sys.stderr, ('%s is an invalid build directory that does not ' +- 'correspond to any configuration.' % (build_dir,)) ++ print(('%s is an invalid build directory that does not ' ++ 'correspond to any configuration.' % (build_dir,)), file=sys.stderr) + return '' + + +@@ -250,7 +250,7 @@ class TestRunner(object): + # If this script is run on a Windows machine that has no association + # between the .py extension and a python interpreter, simply passing + # the script name into subprocess.Popen/os.spawn will not work. +- print 'Running %s . . .' % (test,) ++ print('Running %s . . .' % (test,)) + return self._Run([sys.executable, test]) + + finally: +@@ -308,7 +308,7 @@ class TestRunner(object): + # A final list of build directories which will be searched for the test + # binaries. First, add directories specified directly on the command + # line. +- build_dirs = filter(self.os.path.isdir, normalized_args) ++ build_dirs = list(filter(self.os.path.isdir, normalized_args)) + + # Adds build directories specified via their build configurations using + # the -c or -a options. +@@ -374,8 +374,8 @@ class TestRunner(object): + config = _GetConfigFromBuildDir(directory) + file_name = os.path.basename(test) + if python_tests_to_skip and (config, file_name) in python_tests_to_skip: +- print ('NOTE: %s is skipped for configuration %s, as it does not ' +- 'work there.' % (file_name, config)) ++ print(('NOTE: %s is skipped for configuration %s, as it does not ' ++ 'work there.' % (file_name, config))) + else: + python_test_pairs.append((directory, test)) + +@@ -418,17 +418,17 @@ class TestRunner(object): + failed = [(directory, test) + for (directory, test, success) in results + if not success] +- print +- print '%d tests run.' % len(results) ++ print() ++ print('%d tests run.' % len(results)) + if failed: +- print 'The following %d tests failed:' % len(failed) ++ print('The following %d tests failed:' % len(failed)) + for (directory, test) in failed: +- print '%s in %s' % (test, directory) ++ print('%s in %s' % (test, directory)) + return 1 + else: +- print 'All tests passed!' ++ print('All tests passed!') + else: # No tests defined +- print 'Nothing to test - no tests specified!' ++ print('Nothing to test - no tests specified!') + + return 0 + +@@ -440,7 +440,7 @@ def ParseArgs(project_name, argv=None, help_callback=None): + # required by optparse, even though they are unused. + # pylint: disable-msg=W0613 + def PrintHelp(option, opt, value, parser): +- print HELP_MSG % {'proj': project_name} ++ print(HELP_MSG % {'proj': project_name}) + sys.exit(1) + + parser = optparse.OptionParser() +diff --git a/Source/ThirdParty/gtest/test/run_tests_util_test.py b/Source/ThirdParty/gtest/test/run_tests_util_test.py +index 9c55726fd..dce27f3ae 100755 +--- a/Source/ThirdParty/gtest/test/run_tests_util_test.py ++++ b/Source/ThirdParty/gtest/test/run_tests_util_test.py +@@ -144,7 +144,7 @@ class FakeOs(object): + # pylint: disable-msg=C6409 + def listdir(self, path): + assert self.path.isdir(path) +- return self.path.PathElement(path).iterkeys() ++ return iter(self.path.PathElement(path).keys()) + + def spawnv(self, wait, executable, *kargs): + assert wait == FakeOs.P_WAIT +@@ -165,7 +165,7 @@ class GetTestsToRunTest(unittest.TestCase): + def NormalizeBinaryTestPair(pair): + """Normalizes path data in the (directory, binary_executable) pair.""" + +- directory, executable = map(os.path.normpath, pair) ++ directory, executable = list(map(os.path.normpath, pair)) + + # On Windows and Cygwin, the test file names have the .exe extension, but + # they can be invoked either by name or by name+extension. Our test must +@@ -174,8 +174,8 @@ class GetTestsToRunTest(unittest.TestCase): + executable = re.sub(r'\.exe$', '', executable) + return (directory, executable) + +- python_tests = sets.Set(map(NormalizePythonTestPair, results[0])) +- binary_tests = sets.Set(map(NormalizeBinaryTestPair, results[1])) ++ python_tests = sets.Set(list(map(NormalizePythonTestPair, results[0]))) ++ binary_tests = sets.Set(list(map(NormalizeBinaryTestPair, results[1]))) + return (python_tests, binary_tests) + + def AssertResultsEqual(self, results, expected): +@@ -472,7 +472,7 @@ class GetTestsToRunTest(unittest.TestCase): + def testNonTestBinary(self): + """Exercises GetTestsToRun with a non-test parameter.""" + +- self.assert_( ++ self.assertTrue( + not self.test_runner.GetTestsToRun( + ['gtest_unittest_not_really'], + '', +@@ -482,7 +482,7 @@ class GetTestsToRunTest(unittest.TestCase): + def testNonExistingPythonTest(self): + """Exercises GetTestsToRun with a non-existent Python test parameter.""" + +- self.assert_( ++ self.assertTrue( + not self.test_runner.GetTestsToRun( + ['nonexistent_test.py'], + '', +@@ -619,7 +619,7 @@ class ParseArgsTest(unittest.TestCase): + def testNoOptions(self): + options, args = run_tests_util.ParseArgs('gtest', argv=['script.py']) + self.assertEqual(args, ['script.py']) +- self.assert_(options.configurations is None) ++ self.assertTrue(options.configurations is None) + self.assertFalse(options.built_configurations) + + def testOptionC(self): +@@ -638,7 +638,7 @@ class ParseArgsTest(unittest.TestCase): + def testOptionB(self): + options, args = run_tests_util.ParseArgs('gtest', argv=['script.py', '-b']) + self.assertEqual(args, ['script.py']) +- self.assert_(options.configurations is None) ++ self.assertTrue(options.configurations is None) + self.assertTrue(options.built_configurations) + + def testOptionCAndOptionB(self): +diff --git a/Source/ThirdParty/gtest/xcode/Scripts/versiongenerate.py b/Source/ThirdParty/gtest/xcode/Scripts/versiongenerate.py +index 81de8c96a..ea24f964c 100644 +--- a/Source/ThirdParty/gtest/xcode/Scripts/versiongenerate.py ++++ b/Source/ThirdParty/gtest/xcode/Scripts/versiongenerate.py +@@ -54,7 +54,7 @@ import re + + # Read the command line argument (the output directory for Version.h) + if (len(sys.argv) < 3): +- print "Usage: versiongenerate.py input_dir output_dir" ++ print("Usage: versiongenerate.py input_dir output_dir") + sys.exit(1) + else: + input_dir = sys.argv[1] +diff --git a/Source/WebCore/AVFoundationSupport.py b/Source/WebCore/AVFoundationSupport.py +index 7f13a8742..a3ab479ad 100644 +--- a/Source/WebCore/AVFoundationSupport.py ++++ b/Source/WebCore/AVFoundationSupport.py +@@ -42,22 +42,22 @@ def fileContains(relativePath, regexp): + return False + + +-print "/* Identifying AVFoundation Support */" ++print("/* Identifying AVFoundation Support */") + if lookFor("/include/AVFoundationCF/AVCFBase.h"): +- print "#define HAVE_AVCF 1" ++ print("#define HAVE_AVCF 1") + if lookFor("/include/AVFoundationCF/AVCFPlayerItemLegibleOutput.h"): +- print "#define HAVE_AVCF_LEGIBLE_OUTPUT 1" ++ print("#define HAVE_AVCF_LEGIBLE_OUTPUT 1") + if lookFor("/include/AVFoundationCF/AVCFAssetResourceLoader.h"): +- print "#define HAVE_AVFOUNDATION_LOADER_DELEGATE 1" ++ print("#define HAVE_AVFOUNDATION_LOADER_DELEGATE 1") + if lookFor("/include/AVFoundationCF/AVCFAsset.h"): + regexp = re.compile("AVCFURLAssetIsPlayableExtendedMIMEType") + if fileContains("/include/AVFoundationCF/AVCFAsset.h", regexp): +- print "#define HAVE_AVCFURL_PLAYABLE_MIMETYPE 1" ++ print("#define HAVE_AVCFURL_PLAYABLE_MIMETYPE 1") + if lookFor("/include/QuartzCore/CACFLayer.h"): + regexp = re.compile("CACFLayerSetContentsScale") + if fileContains("/include/QuartzCore/CACFLayer.h", regexp): +- print "#define HAVE_CACFLAYER_SETCONTENTSSCALE 1" ++ print("#define HAVE_CACFLAYER_SETCONTENTSSCALE 1") + if lookFor("/include/AVFoundationCF/AVCFPlayerItemLegibleOutput.h"): + regexp = re.compile("kAVCFPlayerItemLegibleOutput_CallbacksVersion_2") + if fileContains("/include/AVFoundationCF/AVCFPlayerItemLegibleOutput.h", regexp): +- print "#define HAVE_AVCFPLAYERITEM_CALLBACK_VERSION_2 1" ++ print("#define HAVE_AVCFPLAYERITEM_CALLBACK_VERSION_2 1") +diff --git a/Source/WebCore/CMakeLists.txt b/Source/WebCore/CMakeLists.txt +index 56b32563a..feac0dbbb 100644 +--- a/Source/WebCore/CMakeLists.txt ++++ b/Source/WebCore/CMakeLists.txt +@@ -3671,14 +3671,14 @@ set(WebCore_BUILTINS_SOURCES + ) + + set(BUILTINS_GENERATOR_SCRIPTS +- ${JavaScriptCore_SCRIPTS_DIR}/builtins.py +- ${JavaScriptCore_SCRIPTS_DIR}/builtins_generator.py +- ${JavaScriptCore_SCRIPTS_DIR}/builtins_model.py +- ${JavaScriptCore_SCRIPTS_DIR}/builtins_templates.py +- ${JavaScriptCore_SCRIPTS_DIR}/builtins_generate_combined_header.py +- ${JavaScriptCore_SCRIPTS_DIR}/builtins_generate_combined_implementation.py +- ${JavaScriptCore_SCRIPTS_DIR}/builtins_generate_separate_header.py +- ${JavaScriptCore_SCRIPTS_DIR}/builtins_generate_separate_implementation.py ++ ${JavaScriptCore_SCRIPTS_DIR}/mybuiltins.py ++ ${JavaScriptCore_SCRIPTS_DIR}/mybuiltins_generator.py ++ ${JavaScriptCore_SCRIPTS_DIR}/mybuiltins_model.py ++ ${JavaScriptCore_SCRIPTS_DIR}/mybuiltins_templates.py ++ ${JavaScriptCore_SCRIPTS_DIR}/mybuiltins_generate_combined_header.py ++ ${JavaScriptCore_SCRIPTS_DIR}/mybuiltins_generate_combined_implementation.py ++ ${JavaScriptCore_SCRIPTS_DIR}/mybuiltins_generate_separate_header.py ++ ${JavaScriptCore_SCRIPTS_DIR}/mybuiltins_generate_separate_implementation.py + ${JavaScriptCore_SCRIPTS_DIR}/generate-js-builtins.py + ${JavaScriptCore_SCRIPTS_DIR}/lazywriter.py + ) +diff --git a/Source/WebCore/DerivedSources.make b/Source/WebCore/DerivedSources.make +index 0f5a79fa4..83bf5f96a 100644 +--- a/Source/WebCore/DerivedSources.make ++++ b/Source/WebCore/DerivedSources.make +@@ -1286,14 +1286,14 @@ WebCore_BUILTINS_SOURCES = \ + # + + BUILTINS_GENERATOR_SCRIPTS = \ +- $(JavaScriptCore_SCRIPTS_DIR)/builtins.py \ +- $(JavaScriptCore_SCRIPTS_DIR)/builtins_generator.py \ +- $(JavaScriptCore_SCRIPTS_DIR)/builtins_model.py \ +- $(JavaScriptCore_SCRIPTS_DIR)/builtins_templates.py \ +- $(JavaScriptCore_SCRIPTS_DIR)/builtins_generate_combined_header.py \ +- $(JavaScriptCore_SCRIPTS_DIR)/builtins_generate_combined_implementation.py \ +- $(JavaScriptCore_SCRIPTS_DIR)/builtins_generate_separate_header.py \ +- $(JavaScriptCore_SCRIPTS_DIR)/builtins_generate_separate_implementation.py \ ++ $(JavaScriptCore_SCRIPTS_DIR)/mybuiltins.py \ ++ $(JavaScriptCore_SCRIPTS_DIR)/mybuiltins_generator.py \ ++ $(JavaScriptCore_SCRIPTS_DIR)/mybuiltins_model.py \ ++ $(JavaScriptCore_SCRIPTS_DIR)/mybuiltins_templates.py \ ++ $(JavaScriptCore_SCRIPTS_DIR)/mybuiltins_generate_combined_header.py \ ++ $(JavaScriptCore_SCRIPTS_DIR)/mybuiltins_generate_combined_implementation.py \ ++ $(JavaScriptCore_SCRIPTS_DIR)/mybuiltins_generate_separate_header.py \ ++ $(JavaScriptCore_SCRIPTS_DIR)/mybuiltins_generate_separate_implementation.py \ + $(JavaScriptCore_SCRIPTS_DIR)/generate-js-builtins.py \ + $(JavaScriptCore_SCRIPTS_DIR)/lazywriter.py \ + # +diff --git a/Source/WebCore/platform/network/create-http-header-name-table b/Source/WebCore/platform/network/create-http-header-name-table +index 755d22e94..3dc57a568 100755 +--- a/Source/WebCore/platform/network/create-http-header-name-table ++++ b/Source/WebCore/platform/network/create-http-header-name-table +@@ -41,7 +41,7 @@ input_file = open(input_path) + http_header_name_to_id = { } + http_header_names = [] + +-for line in input_file.xreadlines(): ++for line in input_file: + http_header_name = line.strip() + if not http_header_name or http_header_name[:2] == '//': + continue +diff --git a/Source/WebInspectorUI/Scripts/jsmin.py b/Source/WebInspectorUI/Scripts/jsmin.py +index 372418b4d..2f9fddfce 100644 +--- a/Source/WebInspectorUI/Scripts/jsmin.py ++++ b/Source/WebInspectorUI/Scripts/jsmin.py +@@ -23,17 +23,20 @@ + # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + # THE SOFTWARE. + ++# stolen from webkitgtk 2.26.2 + + import sys + is_3 = sys.version_info >= (3, 0) + if is_3: + import io ++ python_text_type = str + else: + import StringIO + try: + import cStringIO + except ImportError: + cStringIO = None ++ python_text_type = basestring + + + __all__ = ['jsmin', 'JavascriptMinify'] +@@ -79,14 +82,18 @@ class JavascriptMinify(object): + def write(char): + # all of this is to support literal regular expressions. + # sigh +- if char in 'return': ++ if str(char) in 'return': + self.return_buf += char + self.is_return = self.return_buf == 'return' + self.outs.write(char) + if self.is_return: + self.return_buf = '' + +- read = self.ins.read ++ def read(n): ++ char = self.ins.read(n) ++ if not isinstance(char, python_text_type): ++ raise ValueError("ERROR: The script jsmin.py can only handle text input, but it received input of type %s" % type(char)) ++ return char + + space_strings = "abcdefghijklmnopqrstuvwxyz"\ + "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_$\\" +@@ -118,8 +125,8 @@ class JavascriptMinify(object): + write(previous) + elif not previous: + return +- elif previous >= '!': +- if previous in "'\"": ++ elif str(previous) >= "!": ++ if str(previous) in "'\"": + in_quote = previous + write(previous) + previous_non_space = previous +@@ -166,7 +173,7 @@ class JavascriptMinify(object): + if numslashes % 2 == 0: + in_quote = '' + write(''.join(quote_buf)) +- elif next1 in '\r\n': ++ elif str(next1) in '\r\n': + if previous_non_space in newlineend_strings \ + or previous_non_space > '~': + while 1: +@@ -179,7 +186,7 @@ class JavascriptMinify(object): + or next2 > '~' or next2 == '/': + do_newline = True + break +- elif next1 < '!' and not in_re: ++ elif str(next1) < '!' and not in_re: + if (previous_non_space in space_strings \ + or previous_non_space > '~') \ + and (next2 in space_strings or next2 > '~'): +@@ -217,14 +224,14 @@ class JavascriptMinify(object): + do_newline = False + + write(next1) +- if not in_re and next1 in "'\"`": ++ if not in_re and str(next1) in "'\"`": + in_quote = next1 + quote_buf = [] + + previous = next1 + next1 = next2 + +- if previous >= '!': ++ if str(previous) >= '!': + previous_non_space = previous + + if previous == '\\': +diff --git a/Source/WebKit2/Scripts/generate-message-receiver.py b/Source/WebKit2/Scripts/generate-message-receiver.py +index 6413a8bf3..8702117f0 100644 +--- a/Source/WebKit2/Scripts/generate-message-receiver.py ++++ b/Source/WebKit2/Scripts/generate-message-receiver.py +@@ -22,7 +22,7 @@ + # 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. + +-from __future__ import with_statement ++ + import sys + + import webkit.messages +diff --git a/Source/WebKit2/Scripts/generate-messages-header.py b/Source/WebKit2/Scripts/generate-messages-header.py +index ad73a5283..b35ee7d51 100644 +--- a/Source/WebKit2/Scripts/generate-messages-header.py ++++ b/Source/WebKit2/Scripts/generate-messages-header.py +@@ -22,7 +22,7 @@ + # 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. + +-from __future__ import with_statement ++ + import sys + + import webkit.messages +diff --git a/Source/WebKit2/Scripts/webkit/messages_unittest.py b/Source/WebKit2/Scripts/webkit/messages_unittest.py +index 164199fc2..5f58e1919 100644 +--- a/Source/WebKit2/Scripts/webkit/messages_unittest.py ++++ b/Source/WebKit2/Scripts/webkit/messages_unittest.py +@@ -24,7 +24,7 @@ import os + import re + import sys + import unittest +-from StringIO import StringIO ++from io import StringIO + + sys.path.append(os.path.dirname(os.path.dirname(__file__))) + from webkit import messages +@@ -255,43 +255,43 @@ class MessagesTest(unittest.TestCase): + + class ParsingTest(MessagesTest): + def check_message(self, message, expected_message): +- self.assertEquals(message.name, expected_message['name']) +- self.assertEquals(len(message.parameters), len(expected_message['parameters'])) ++ self.assertEqual(message.name, expected_message['name']) ++ self.assertEqual(len(message.parameters), len(expected_message['parameters'])) + for index, parameter in enumerate(message.parameters): + expected_parameter = expected_message['parameters'][index] +- self.assertEquals(parameter.type, expected_parameter[0]) +- self.assertEquals(parameter.name, expected_parameter[1]) ++ self.assertEqual(parameter.type, expected_parameter[0]) ++ self.assertEqual(parameter.name, expected_parameter[1]) + if len(expected_parameter) > 2: +- self.assertEquals(parameter.attributes, frozenset(expected_parameter[2])) ++ self.assertEqual(parameter.attributes, frozenset(expected_parameter[2])) + for attribute in expected_parameter[2]: + self.assertTrue(parameter.has_attribute(attribute)) + else: +- self.assertEquals(parameter.attributes, frozenset()) ++ self.assertEqual(parameter.attributes, frozenset()) + if message.reply_parameters is not None: + for index, parameter in enumerate(message.reply_parameters): +- self.assertEquals(parameter.type, expected_message['reply_parameters'][index][0]) +- self.assertEquals(parameter.name, expected_message['reply_parameters'][index][1]) ++ self.assertEqual(parameter.type, expected_message['reply_parameters'][index][0]) ++ self.assertEqual(parameter.name, expected_message['reply_parameters'][index][1]) + else: + self.assertFalse('reply_parameters' in expected_message) +- self.assertEquals(message.condition, expected_message['conditions']) ++ self.assertEqual(message.condition, expected_message['conditions']) + + def test_receiver(self): + """Receiver should be parsed as expected""" +- self.assertEquals(self.receiver.name, _expected_results['name']) +- self.assertEquals(self.receiver.condition, _expected_results['conditions']) +- self.assertEquals(len(self.receiver.messages), len(_expected_results['messages'])) ++ self.assertEqual(self.receiver.name, _expected_results['name']) ++ self.assertEqual(self.receiver.condition, _expected_results['conditions']) ++ self.assertEqual(len(self.receiver.messages), len(_expected_results['messages'])) + for index, message in enumerate(self.receiver.messages): + self.check_message(message, _expected_results['messages'][index]) + +- self.assertEquals(self.legacy_receiver.name, _expected_results['name']) +- self.assertEquals(self.legacy_receiver.condition, _expected_results['conditions']) +- self.assertEquals(len(self.legacy_receiver.messages), len(_expected_results['messages'])) ++ self.assertEqual(self.legacy_receiver.name, _expected_results['name']) ++ self.assertEqual(self.legacy_receiver.condition, _expected_results['conditions']) ++ self.assertEqual(len(self.legacy_receiver.messages), len(_expected_results['messages'])) + for index, message in enumerate(self.legacy_receiver.messages): + self.check_message(message, _expected_results['messages'][index]) + +- self.assertEquals(self.superclass_receiver.name, _expected_superclass_results['name']) +- self.assertEquals(self.superclass_receiver.superclass, _expected_superclass_results['superclass']) +- self.assertEquals(len(self.superclass_receiver.messages), len(_expected_superclass_results['messages'])) ++ self.assertEqual(self.superclass_receiver.name, _expected_superclass_results['name']) ++ self.assertEqual(self.superclass_receiver.superclass, _expected_superclass_results['superclass']) ++ self.assertEqual(len(self.superclass_receiver.messages), len(_expected_superclass_results['messages'])) + for index, message in enumerate(self.superclass_receiver.messages): + self.check_message(message, _expected_superclass_results['messages'][index]) + +@@ -309,9 +309,9 @@ class GeneratedFileContentsTest(unittest.TestCase): + expected_line_list = expected_file_contents.splitlines(False) + + for index, actual_line in enumerate(actual_line_list): +- self.assertEquals(actual_line, expected_line_list[index]) ++ self.assertEqual(actual_line, expected_line_list[index]) + +- self.assertEquals(len(actual_line_list), len(expected_line_list)) ++ self.assertEqual(len(actual_line_list), len(expected_line_list)) + + def assertHeaderEqual(self, input_messages_file_contents, expected_file_name): + actual_file_contents = messages.generate_messages_header(StringIO(input_messages_file_contents)) +@@ -344,11 +344,11 @@ class ReceiverImplementationTest(GeneratedFileContentsTest): + + class UnsupportedPrecompilerDirectiveTest(unittest.TestCase): + def test_error_at_else(self): +- with self.assertRaisesRegexp(Exception, r"ERROR: '#else.*' is not supported in the \*\.in files"): ++ with self.assertRaisesRegex(Exception, r"ERROR: '#else.*' is not supported in the \*\.in files"): + messages.generate_message_handler(StringIO("asd\n#else bla\nfoo")) + + def test_error_at_elif(self): +- with self.assertRaisesRegexp(Exception, r"ERROR: '#elif.*' is not supported in the \*\.in files"): ++ with self.assertRaisesRegex(Exception, r"ERROR: '#elif.*' is not supported in the \*\.in files"): + messages.generate_message_handler(StringIO("asd\n#elif bla\nfoo")) + + +diff --git a/Source/cmake/WebKitCommon.cmake b/Source/cmake/WebKitCommon.cmake +index de4ac8f65..1ba7b58ea 100644 +--- a/Source/cmake/WebKitCommon.cmake ++++ b/Source/cmake/WebKitCommon.cmake +@@ -25,9 +25,6 @@ if (NOT HAS_RUN_WEBKIT_COMMON) + find_package(Perl 5.10.0 REQUIRED) + + find_package(PythonInterp 2.7.0 REQUIRED) +- if (PYTHON_VERSION_MAJOR GREATER 2) +- message(FATAL_ERROR "Python 2 is required, but Python ${PYTHON_VERSION_MAJOR} was found.") +- endif () + + # We cannot check for RUBY_FOUND because it is set only when the full package is installed and + # the only thing we need is the interpreter. Unlike Python, cmake does not provide a macro +diff --git a/Tools/jhbuild/jhbuildutils.py b/Tools/jhbuild/jhbuildutils.py +index c00160e7e..f4edc29a2 100644 +--- a/Tools/jhbuild/jhbuildutils.py ++++ b/Tools/jhbuild/jhbuildutils.py +@@ -1,7 +1,7 @@ + import glob + import os.path + import sys +-import __builtin__ ++import builtins + + top_level_dir = None + +@@ -35,9 +35,9 @@ def enter_jhbuild_environment_if_available(platform): + sys.path.insert(0, source_path) + + # When loading jhbuild from the source checkout it fails if the SRCDIR, PKGDATADIR or DATADIR aren't present. +- __builtin__.__dict__['SRCDIR'] = source_path +- __builtin__.__dict__['PKGDATADIR'] = None +- __builtin__.__dict__['DATADIR'] = None ++ builtins.__dict__['SRCDIR'] = source_path ++ builtins.__dict__['PKGDATADIR'] = None ++ builtins.__dict__['DATADIR'] = None + + # We don't know the Python version, so we just assume that we can safely take the first one in the list. + site_packages_path = glob.glob(os.path.join(get_dependencies_path(platform), "Root", "lib", "*", "site-packages")) +@@ -49,7 +49,7 @@ def enter_jhbuild_environment_if_available(platform): + import jhbuild.config + from jhbuild.errors import FatalError + config = jhbuild.config.Config(get_config_file_for_platform(platform), []) +- except FatalError, exception: ++ except FatalError as exception: + sys.stderr.write('Could not load jhbuild config file: %s\n' % exception.args[0]) + return False + +-- +2.21.0 + diff --git a/recipes-qt/qt5/qtwebkit/0002-Do-not-skip-build-for-cross-compile.patch b/recipes-qt/qt5/qtwebkit/0002-Do-not-skip-build-for-cross-compile.patch new file mode 100644 index 00000000..a237d03d --- /dev/null +++ b/recipes-qt/qt5/qtwebkit/0002-Do-not-skip-build-for-cross-compile.patch @@ -0,0 +1,28 @@ +From 34018c2a61045c58f88e09a12ecd62533aa2c2f1 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Andreas=20M=C3=BCller?= +Date: Mon, 4 Jun 2018 10:35:46 +0200 +Subject: [PATCH] Do not skip build for cross-compile +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Upstream-Status: Inappropriate [OE specific] + +Signed-off-by: Andreas Müller +--- + Tools/qmake/mkspecs/features/functions.prf | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/Tools/qmake/mkspecs/features/functions.prf b/Tools/qmake/mkspecs/features/functions.prf +index e3f42cec4..797b7085f 100644 +--- a/Tools/qmake/mkspecs/features/functions.prf ++++ b/Tools/qmake/mkspecs/features/functions.prf +@@ -53,8 +53,6 @@ defineReplace(appleSdkVersion) { + defineTest(isPlatformSupported) { + !qtHaveModule(widgets): skipBuild("QtWidgets module is required to build QtWebKit.") + +- cross_compile: skipBuild("cross-compilation of QtWebKit with qmake is not supported yet") +- + requiredPrograms = cmake gperf python perl bison ruby flex + for(program, requiredPrograms): \ + !programExistsInPath($$program): \ diff --git a/recipes-qt/qt5/qtwebkit/0002-Fix-build-with-non-glibc-libc-on-musl.patch b/recipes-qt/qt5/qtwebkit/0002-Fix-build-with-non-glibc-libc-on-musl.patch deleted file mode 100644 index bf79b363..00000000 --- a/recipes-qt/qt5/qtwebkit/0002-Fix-build-with-non-glibc-libc-on-musl.patch +++ /dev/null @@ -1,69 +0,0 @@ -From c4ceb318aa1064bfa677cdd800c52155eb1bed3a Mon Sep 17 00:00:00 2001 -From: Khem Raj -Date: Thu, 23 Aug 2018 04:06:17 +0000 -Subject: [PATCH] Fix build with non-glibc libc on musl - -Need to ensure glibc features are not assumed to be linux-wide - -Upstream-Status: Pending -Signed-off-by: Khem Raj ---- - Source/JavaScriptCore/heap/MachineStackMarker.cpp | 8 ++++---- - .../inspector/JSGlobalObjectInspectorController.cpp | 2 ++ - 2 files changed, 6 insertions(+), 4 deletions(-) - -diff --git a/Source/JavaScriptCore/heap/MachineStackMarker.cpp b/Source/JavaScriptCore/heap/MachineStackMarker.cpp -index 883914fd3..ce4e8d331 100644 ---- a/Source/JavaScriptCore/heap/MachineStackMarker.cpp -+++ b/Source/JavaScriptCore/heap/MachineStackMarker.cpp -@@ -566,7 +566,7 @@ void* MachineThreads::Thread::Registers::stackPointer() const - #error Unknown Architecture - #endif - --#elif defined(__GLIBC__) && ENABLE(JIT) -+#elif defined(__linux__) && ENABLE(JIT) - - #if CPU(X86) - return reinterpret_cast((uintptr_t) regs.machineContext.gregs[REG_ESP]); -@@ -665,7 +665,7 @@ void* MachineThreads::Thread::Registers::framePointer() const - #error Unknown Architecture - #endif - --#elif defined(__GLIBC__) -+#elif defined(__linux__) - - // The following sequence depends on glibc's sys/ucontext.h. - #if CPU(X86) -@@ -747,7 +747,7 @@ void* MachineThreads::Thread::Registers::instructionPointer() const - #error Unknown Architecture - #endif - --#elif defined(__GLIBC__) -+#elif defined(__linux__) - - // The following sequence depends on glibc's sys/ucontext.h. - #if CPU(X86) -@@ -838,7 +838,7 @@ void* MachineThreads::Thread::Registers::llintPC() const - #error Unknown Architecture - #endif - --#elif defined(__GLIBC__) -+#elif defined(__linux__) - - // The following sequence depends on glibc's sys/ucontext.h. - #if CPU(X86) -diff --git a/Source/JavaScriptCore/inspector/JSGlobalObjectInspectorController.cpp b/Source/JavaScriptCore/inspector/JSGlobalObjectInspectorController.cpp -index fd7f869d4..e95391b32 100644 ---- a/Source/JavaScriptCore/inspector/JSGlobalObjectInspectorController.cpp -+++ b/Source/JavaScriptCore/inspector/JSGlobalObjectInspectorController.cpp -@@ -51,8 +51,10 @@ - #include - #if OS(DARWIN) || (OS(LINUX) && !PLATFORM(GTK)) - #include -+#if defined(__GLIBC__) - #include - #endif -+#endif - - #if ENABLE(REMOTE_INSPECTOR) - #include "JSGlobalObjectDebuggable.h" diff --git a/recipes-qt/qt5/qtwebkit/0003-Fix-build-bug-for-armv32-BE.patch b/recipes-qt/qt5/qtwebkit/0003-Fix-build-bug-for-armv32-BE.patch deleted file mode 100644 index ffd8da0f..00000000 --- a/recipes-qt/qt5/qtwebkit/0003-Fix-build-bug-for-armv32-BE.patch +++ /dev/null @@ -1,25 +0,0 @@ -From f6576377f8bf2c854d8079b7f309f570b3d2bde4 Mon Sep 17 00:00:00 2001 -From: Lei Maohui -Date: Fri, 31 Aug 2018 15:42:48 +0900 -Subject: [PATCH] Fix build bug for armv32 BE. - -Upstream-Status: Pending - -Signed-off-by: Lei Maohui ---- - Source/WTF/wtf/dtoa/utils.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/Source/WTF/wtf/dtoa/utils.h b/Source/WTF/wtf/dtoa/utils.h -index 889642cee..05302e6e6 100644 ---- a/Source/WTF/wtf/dtoa/utils.h -+++ b/Source/WTF/wtf/dtoa/utils.h -@@ -49,7 +49,7 @@ - defined(__ARMEL__) || \ - defined(_MIPS_ARCH_MIPS32R2) - #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1 --#elif CPU(MIPS) || CPU(MIPS64) || CPU(PPC) || CPU(PPC64) || CPU(PPC64LE) || CPU(SH4) || CPU(S390) || CPU(S390X) || CPU(IA64) || CPU(ALPHA) || CPU(ARM64) || CPU(HPPA) -+#elif CPU(MIPS) || CPU(MIPS64) || CPU(PPC) || CPU(PPC64) || CPU(PPC64LE) || CPU(SH4) || CPU(S390) || CPU(S390X) || CPU(IA64) || CPU(ALPHA) || CPU(ARM64) || CPU(HPPA) || CPU(ARM) - #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1 - #elif defined(_M_IX86) || defined(__i386__) - #if defined(_WIN32) diff --git a/recipes-qt/qt5/qtwebkit/0003-Fix-build-with-non-glibc-libc-on-musl.patch b/recipes-qt/qt5/qtwebkit/0003-Fix-build-with-non-glibc-libc-on-musl.patch new file mode 100644 index 00000000..bf79b363 --- /dev/null +++ b/recipes-qt/qt5/qtwebkit/0003-Fix-build-with-non-glibc-libc-on-musl.patch @@ -0,0 +1,69 @@ +From c4ceb318aa1064bfa677cdd800c52155eb1bed3a Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Thu, 23 Aug 2018 04:06:17 +0000 +Subject: [PATCH] Fix build with non-glibc libc on musl + +Need to ensure glibc features are not assumed to be linux-wide + +Upstream-Status: Pending +Signed-off-by: Khem Raj +--- + Source/JavaScriptCore/heap/MachineStackMarker.cpp | 8 ++++---- + .../inspector/JSGlobalObjectInspectorController.cpp | 2 ++ + 2 files changed, 6 insertions(+), 4 deletions(-) + +diff --git a/Source/JavaScriptCore/heap/MachineStackMarker.cpp b/Source/JavaScriptCore/heap/MachineStackMarker.cpp +index 883914fd3..ce4e8d331 100644 +--- a/Source/JavaScriptCore/heap/MachineStackMarker.cpp ++++ b/Source/JavaScriptCore/heap/MachineStackMarker.cpp +@@ -566,7 +566,7 @@ void* MachineThreads::Thread::Registers::stackPointer() const + #error Unknown Architecture + #endif + +-#elif defined(__GLIBC__) && ENABLE(JIT) ++#elif defined(__linux__) && ENABLE(JIT) + + #if CPU(X86) + return reinterpret_cast((uintptr_t) regs.machineContext.gregs[REG_ESP]); +@@ -665,7 +665,7 @@ void* MachineThreads::Thread::Registers::framePointer() const + #error Unknown Architecture + #endif + +-#elif defined(__GLIBC__) ++#elif defined(__linux__) + + // The following sequence depends on glibc's sys/ucontext.h. + #if CPU(X86) +@@ -747,7 +747,7 @@ void* MachineThreads::Thread::Registers::instructionPointer() const + #error Unknown Architecture + #endif + +-#elif defined(__GLIBC__) ++#elif defined(__linux__) + + // The following sequence depends on glibc's sys/ucontext.h. + #if CPU(X86) +@@ -838,7 +838,7 @@ void* MachineThreads::Thread::Registers::llintPC() const + #error Unknown Architecture + #endif + +-#elif defined(__GLIBC__) ++#elif defined(__linux__) + + // The following sequence depends on glibc's sys/ucontext.h. + #if CPU(X86) +diff --git a/Source/JavaScriptCore/inspector/JSGlobalObjectInspectorController.cpp b/Source/JavaScriptCore/inspector/JSGlobalObjectInspectorController.cpp +index fd7f869d4..e95391b32 100644 +--- a/Source/JavaScriptCore/inspector/JSGlobalObjectInspectorController.cpp ++++ b/Source/JavaScriptCore/inspector/JSGlobalObjectInspectorController.cpp +@@ -51,8 +51,10 @@ + #include + #if OS(DARWIN) || (OS(LINUX) && !PLATFORM(GTK)) + #include ++#if defined(__GLIBC__) + #include + #endif ++#endif + + #if ENABLE(REMOTE_INSPECTOR) + #include "JSGlobalObjectDebuggable.h" diff --git a/recipes-qt/qt5/qtwebkit/0004-Fix-build-bug-for-armv32-BE.patch b/recipes-qt/qt5/qtwebkit/0004-Fix-build-bug-for-armv32-BE.patch new file mode 100644 index 00000000..ffd8da0f --- /dev/null +++ b/recipes-qt/qt5/qtwebkit/0004-Fix-build-bug-for-armv32-BE.patch @@ -0,0 +1,25 @@ +From f6576377f8bf2c854d8079b7f309f570b3d2bde4 Mon Sep 17 00:00:00 2001 +From: Lei Maohui +Date: Fri, 31 Aug 2018 15:42:48 +0900 +Subject: [PATCH] Fix build bug for armv32 BE. + +Upstream-Status: Pending + +Signed-off-by: Lei Maohui +--- + Source/WTF/wtf/dtoa/utils.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Source/WTF/wtf/dtoa/utils.h b/Source/WTF/wtf/dtoa/utils.h +index 889642cee..05302e6e6 100644 +--- a/Source/WTF/wtf/dtoa/utils.h ++++ b/Source/WTF/wtf/dtoa/utils.h +@@ -49,7 +49,7 @@ + defined(__ARMEL__) || \ + defined(_MIPS_ARCH_MIPS32R2) + #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1 +-#elif CPU(MIPS) || CPU(MIPS64) || CPU(PPC) || CPU(PPC64) || CPU(PPC64LE) || CPU(SH4) || CPU(S390) || CPU(S390X) || CPU(IA64) || CPU(ALPHA) || CPU(ARM64) || CPU(HPPA) ++#elif CPU(MIPS) || CPU(MIPS64) || CPU(PPC) || CPU(PPC64) || CPU(PPC64LE) || CPU(SH4) || CPU(S390) || CPU(S390X) || CPU(IA64) || CPU(ALPHA) || CPU(ARM64) || CPU(HPPA) || CPU(ARM) + #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1 + #elif defined(_M_IX86) || defined(__i386__) + #if defined(_WIN32) diff --git a/recipes-qt/qt5/qtwebkit/0004-PlatformQt.cmake-Do-not-generate-hardcoded-include-p.patch b/recipes-qt/qt5/qtwebkit/0004-PlatformQt.cmake-Do-not-generate-hardcoded-include-p.patch deleted file mode 100644 index 14cb8aa4..00000000 --- a/recipes-qt/qt5/qtwebkit/0004-PlatformQt.cmake-Do-not-generate-hardcoded-include-p.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 83aa5b3265d7c9f64e754cb890988cf8a5669ce7 Mon Sep 17 00:00:00 2001 -From: Khem Raj -Date: Mon, 24 Sep 2018 02:11:10 -0700 -Subject: [PATCH] PlatformQt.cmake: Do not generate hardcoded include paths - -If we do not use this define,then it falls into else case which -generated .pri files with /usr/include and so on for includes and -compiler does not like specifying absolute include paths pointing to -build host includes - -Signed-off-by: Khem Raj ---- - Source/WebKit/PlatformQt.cmake | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/Source/WebKit/PlatformQt.cmake b/Source/WebKit/PlatformQt.cmake -index 9aed9906e..48638aef4 100644 ---- a/Source/WebKit/PlatformQt.cmake -+++ b/Source/WebKit/PlatformQt.cmake -@@ -512,7 +512,7 @@ if (NOT MACOS_BUILD_FRAMEWORKS) - install(FILES ${WebKit_PKGCONFIG_FILENAME} DESTINATION ${ECM_PKGCONFIG_INSTALL_DIR} COMPONENT Data) - endif () - --if (KDE_INSTALL_USE_QT_SYS_PATHS) -+if (KDE_INSTALL_USE_QT_SYS_PATHS OR CROSS_COMPILE) - set(WebKit_PRI_ARGUMENTS - BIN_INSTALL_DIR "$$QT_MODULE_BIN_BASE" - LIB_INSTALL_DIR "$$QT_MODULE_LIB_BASE" -@@ -737,7 +737,7 @@ if (NOT MACOS_BUILD_FRAMEWORKS) - install(FILES ${WebKitWidgets_PKGCONFIG_FILENAME} DESTINATION ${ECM_PKGCONFIG_INSTALL_DIR} COMPONENT Data) - endif () - --if (KDE_INSTALL_USE_QT_SYS_PATHS) -+if (KDE_INSTALL_USE_QT_SYS_PATHS OR CROSS_COMPILE) - set(WebKitWidgets_PRI_ARGUMENTS - BIN_INSTALL_DIR "$$QT_MODULE_BIN_BASE" - LIB_INSTALL_DIR "$$QT_MODULE_LIB_BASE" diff --git a/recipes-qt/qt5/qtwebkit/0005-PlatformQt.cmake-Do-not-generate-hardcoded-include-p.patch b/recipes-qt/qt5/qtwebkit/0005-PlatformQt.cmake-Do-not-generate-hardcoded-include-p.patch new file mode 100644 index 00000000..14cb8aa4 --- /dev/null +++ b/recipes-qt/qt5/qtwebkit/0005-PlatformQt.cmake-Do-not-generate-hardcoded-include-p.patch @@ -0,0 +1,37 @@ +From 83aa5b3265d7c9f64e754cb890988cf8a5669ce7 Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Mon, 24 Sep 2018 02:11:10 -0700 +Subject: [PATCH] PlatformQt.cmake: Do not generate hardcoded include paths + +If we do not use this define,then it falls into else case which +generated .pri files with /usr/include and so on for includes and +compiler does not like specifying absolute include paths pointing to +build host includes + +Signed-off-by: Khem Raj +--- + Source/WebKit/PlatformQt.cmake | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/Source/WebKit/PlatformQt.cmake b/Source/WebKit/PlatformQt.cmake +index 9aed9906e..48638aef4 100644 +--- a/Source/WebKit/PlatformQt.cmake ++++ b/Source/WebKit/PlatformQt.cmake +@@ -512,7 +512,7 @@ if (NOT MACOS_BUILD_FRAMEWORKS) + install(FILES ${WebKit_PKGCONFIG_FILENAME} DESTINATION ${ECM_PKGCONFIG_INSTALL_DIR} COMPONENT Data) + endif () + +-if (KDE_INSTALL_USE_QT_SYS_PATHS) ++if (KDE_INSTALL_USE_QT_SYS_PATHS OR CROSS_COMPILE) + set(WebKit_PRI_ARGUMENTS + BIN_INSTALL_DIR "$$QT_MODULE_BIN_BASE" + LIB_INSTALL_DIR "$$QT_MODULE_LIB_BASE" +@@ -737,7 +737,7 @@ if (NOT MACOS_BUILD_FRAMEWORKS) + install(FILES ${WebKitWidgets_PKGCONFIG_FILENAME} DESTINATION ${ECM_PKGCONFIG_INSTALL_DIR} COMPONENT Data) + endif () + +-if (KDE_INSTALL_USE_QT_SYS_PATHS) ++if (KDE_INSTALL_USE_QT_SYS_PATHS OR CROSS_COMPILE) + set(WebKitWidgets_PRI_ARGUMENTS + BIN_INSTALL_DIR "$$QT_MODULE_BIN_BASE" + LIB_INSTALL_DIR "$$QT_MODULE_LIB_BASE" diff --git a/recipes-qt/qt5/qtwebkit_git.bb b/recipes-qt/qt5/qtwebkit_git.bb index 942e733a..4655d9fd 100644 --- a/recipes-qt/qt5/qtwebkit_git.bb +++ b/recipes-qt/qt5/qtwebkit_git.bb @@ -12,20 +12,16 @@ DEPENDS += "qtbase qtdeclarative icu ruby-native sqlite3 glib-2.0 libxslt gperf- # Patches from https://github.com/meta-qt5/qtwebkit/commits/b5.13 # 5.13.meta-qt5.1 SRC_URI += "\ - file://0001-Do-not-skip-build-for-cross-compile.patch \ - file://0002-Fix-build-with-non-glibc-libc-on-musl.patch \ - file://0003-Fix-build-bug-for-armv32-BE.patch \ - file://0004-PlatformQt.cmake-Do-not-generate-hardcoded-include-p.patch \ + file://0001-Port-build-to-python3.patch \ + file://0002-Do-not-skip-build-for-cross-compile.patch \ + file://0003-Fix-build-with-non-glibc-libc-on-musl.patch \ + file://0004-Fix-build-bug-for-armv32-BE.patch \ + file://0005-PlatformQt.cmake-Do-not-generate-hardcoded-include-p.patch \ " inherit cmake_qt5 perlnative -inherit ${@bb.utils.contains("BBFILE_COLLECTIONS", "meta-python2", "pythonnative", "", d)} - -python() { - if 'meta-python2' not in d.getVar('BBFILE_COLLECTIONS').split(): - raise bb.parse.SkipRecipe('Requires meta-python2 to be present.') -} +inherit python3native # qemuarm build fails with: # | {standard input}: Assembler messages: @@ -52,6 +48,7 @@ EXTRA_OECMAKE += " \ -DCROSS_COMPILE=ON \ -DECM_MKSPECS_INSTALL_DIR=${libdir}${QT_DIR_NAME}/mkspecs/modules \ -DQML_INSTALL_DIR=${OE_QMAKE_PATH_QML} \ + -DPYTHON_EXECUTABLE=`which python3` \ " EXTRA_OECMAKE_append_toolchain-clang = " -DCMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES:PATH='${STAGING_INCDIR}'" -- cgit v1.2.3