diff --git a/BUILD.gn b/BUILD.gn index dfce359101..2c07ca8060 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -2,8 +2,6 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -import("//build/config/python.gni") - import("./config/gni/all_devtools_files.gni") import("./config/gni/devtools_grd_files.gni") import("./config/gni/devtools_image_files.gni") @@ -247,8 +245,7 @@ if (!is_debug) { build_release_devtools_args += [ "--rollup" ] } -# TODO(crbug.com/1112471): Get this to work cleanly under Python3. -python2_action("build_release_devtools") { +action("build_release_devtools") { script = "scripts/build/build_release_applications.py" helper_scripts = [ diff --git a/inspector_overlay/BUILD.gn b/inspector_overlay/BUILD.gn index e7364dce9d..109aa82091 100644 --- a/inspector_overlay/BUILD.gn +++ b/inspector_overlay/BUILD.gn @@ -2,13 +2,11 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -import("//build/config/python.gni") import("../third_party/typescript/typescript.gni") resources_out_dir = "$root_out_dir/resources/inspector_overlay" -# TODO(crbug.com/1112471): Get this to work under Python 3. -python2_action("build_inspector_overlay") { +action("build_inspector_overlay") { script = "../scripts/build/build_inspector_overlay.py" inputs = [ diff --git a/scripts/build/build_inspector_overlay.py b/scripts/build/build_inspector_overlay.py index 64f1c4906c..d1ac109340 100644 --- a/scripts/build/build_inspector_overlay.py +++ b/scripts/build/build_inspector_overlay.py @@ -1,5 +1,5 @@ #!/usr/bin/env vpython -# -*- coding: UTF-8 -*- +# -*- coding: utf-8 -*- # # Copyright 2020 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be @@ -44,7 +44,9 @@ def rollup(input_path, output_path, filename, max_size, rollup_plugin): ['--format', 'iife', '-n', 'InspectorOverlay'] + ['--input', target] + ['--plugin', rollup_plugin, '--plugin', 'terser'], stdout=subprocess.PIPE, - stderr=subprocess.PIPE) + stderr=subprocess.PIPE, + universal_newlines=True, + encoding='utf-8') out, error = rollup_process.communicate() if not out: raise Exception("rollup failed: " + error) diff --git a/scripts/build/build_release_applications.py b/scripts/build/build_release_applications.py index 531e56716d..88079a84e6 100644 --- a/scripts/build/build_release_applications.py +++ b/scripts/build/build_release_applications.py @@ -1,5 +1,5 @@ #!/usr/bin/env vpython -# -*- coding: UTF-8 -*- +# -*- coding: utf-8 -*- # # Copyright 2016 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be @@ -10,7 +10,7 @@ Builds applications in release mode: and the application loader into a single script. """ -from cStringIO import StringIO +from io import StringIO from os import path from os.path import join import copy @@ -152,8 +152,7 @@ class ReleaseBuilder(object): resource_content = read_file(path.join(self.application_dir, resource_name)) if not (resource_name.endswith('.html') or resource_name.endswith('md')): - resource_content += resource_source_url(resource_name).encode( - 'utf-8') + resource_content += resource_source_url(resource_name) resource_content = resource_content.replace('\\', '\\\\') resource_content = resource_content.replace('\n', '\\n') resource_content = resource_content.replace('"', '\\"') @@ -179,7 +178,9 @@ class ReleaseBuilder(object): def _concatenate_application_script(self, output): output.write('Root.allDescriptors.push(...%s);' % self._release_module_descriptors()) if self.descriptors.extends: - output.write('Root.applicationDescriptor.modules.push(...%s);' % json.dumps(self.descriptors.application.values())) + output.write( + 'Root.applicationDescriptor.modules.push(...%s);' % + json.dumps(list(self.descriptors.application.values()))) else: output.write('Root.applicationDescriptor = %s;' % self.descriptors.application_json()) diff --git a/scripts/build/modular_build.py b/scripts/build/modular_build.py index 9018db285c..0c3461db6e 100644 --- a/scripts/build/modular_build.py +++ b/scripts/build/modular_build.py @@ -20,7 +20,7 @@ except ImportError: def read_file(filename): - with open(path.normpath(filename), 'rt') as input: + with open(path.normpath(filename), 'rt', encoding='utf-8') as input: return input.read() @@ -30,7 +30,7 @@ def write_file(filename, content): directory = path.dirname(filename) if not path.exists(directory): os.makedirs(directory) - with open(filename, 'wt') as output: + with open(filename, 'wt', encoding='utf-8') as output: output.write(content) @@ -59,7 +59,7 @@ class Descriptors: def application_json(self): result = dict() - result['modules'] = self.application.values() + result['modules'] = list(self.application.values()) return json.dumps(result) def module_resources(self, name): @@ -70,7 +70,10 @@ class Descriptors: return self._cached_sorted_modules result = [] - unvisited_modules = set(self.modules) + + # Use dict instead of set for deterministic iteration order. + unvisited_modules = {module: None for module in self.modules} + temp_modules = set() def visit(parent, name): @@ -87,7 +90,7 @@ class Descriptors: bad_dep = visit(name, dep_name) if bad_dep: return bad_dep - unvisited_modules.remove(name) + del unvisited_modules[name] temp_modules.remove(name) result.append(name) return None