From: uazo Date: Fri, 2 May 2025 14:16:01 +0000 Subject: Force use vpython3 for some scripts Some scripts need the latest version of python not available in the docker container. The patch forces the use of python in the virtual environment in the version required by the chromium build tools. License: GPL-2.0-or-later - https://spdx.org/licenses/GPL-2.0-or-later.html --- build/config/android/internal_rules.gni | 22 ++++++++++++++----- build/config/python.gni | 7 +++++- .../generate_expired_histograms_array.gni | 7 ++++-- .../variations/field_trial_config/BUILD.gn | 4 +++- third_party/perfetto/gn/BUILD.gn | 5 ++++- tools/grit/grit_rule.gni | 4 +++- .../json_schema_compiler/json_schema_api.gni | 12 +++++++--- tools/json_to_struct/json_to_struct.gni | 4 +++- ...enerate_allowlist_from_histograms_file.gni | 5 +++-- 9 files changed, 52 insertions(+), 18 deletions(-) diff --git a/build/config/android/internal_rules.gni b/build/config/android/internal_rules.gni --- a/build/config/android/internal_rules.gni +++ b/build/config/android/internal_rules.gni @@ -610,12 +610,15 @@ template("write_build_config") { } else { action_with_pydeps(target_name) { forward_variables_from(invoker, [ "testonly" ]) - script = "//build/android/gyp/write_build_config.py" + script = "//build/gn_run_binary.py" + original_script = "//build/android/gyp/write_build_config.py" depfile = "$target_gen_dir/$target_name.d" inputs = _inputs outputs = _outputs args = [ + rebase_path("//third_party/depot_tools/vpython3"), + rebase_path(original_script), "--output", rebase_path(invoker.build_config, root_build_dir), "--depfile", @@ -3018,17 +3021,18 @@ if (enable_java_templates) { } action_with_pydeps(target_name) { + script = "//build/gn_run_binary.py" if (invoker.use_turbine) { - script = "//build/android/gyp/turbine.py" + original_script = "//build/android/gyp/turbine.py" inputs = [ "//third_party/jdk/current/bin/java", android_sdk_jar, ] } else if (invoker.enable_errorprone) { - script = "//build/android/gyp/errorprone.py" + original_script = "//build/android/gyp/errorprone.py" inputs = javac_paths_for_inputs } else { - script = "//build/android/gyp/compile_java.py" + original_script = "//build/android/gyp/compile_java.py" inputs = javac_paths_for_inputs } @@ -3044,7 +3048,10 @@ if (enable_java_templates) { deps += invoker.deps } - args = [] + args = [ + rebase_path("//third_party/depot_tools/vpython3"), + rebase_path(original_script), + ] if (invoker.enable_errorprone) { _stamp_file = "$target_out_dir/$target_name.stamp" outputs = [ _stamp_file ] @@ -3242,7 +3249,8 @@ if (enable_java_templates) { } action_with_pydeps(target_name) { - script = "//build/android/gyp/compile_kt.py" + script = "//build/gn_run_binary.py" + original_script = "//build/android/gyp/compile_kt.py" depfile = "$target_gen_dir/$target_name.d" deps = _srcjar_deps if (defined(invoker.deps)) { @@ -3271,6 +3279,8 @@ if (enable_java_templates) { "$target_gen_dir/${invoker.main_target_name}/generated_java", root_build_dir) args = [ + rebase_path("//third_party/depot_tools/vpython3"), + rebase_path(original_script), "--depfile=$_rebased_depfile", "--generated-dir=$_rebased_generated_dir", "--jar-path=$_rebased_output_jar_path", diff --git a/build/config/python.gni b/build/config/python.gni --- a/build/config/python.gni +++ b/build/config/python.gni @@ -91,6 +91,7 @@ template("action_with_pydeps") { [ "testonly", "visibility", + "original_script" ]) forward_variables_from(invoker, "*", @@ -102,7 +103,11 @@ template("action_with_pydeps") { # Read and filter out comments. # Happens every time the template is instantiated, but benchmarking shows no # perceivable impact on overall 'gn gen' speed. - _pydeps_file = invoker.script + "deps" + if (!defined(original_script)) { + _pydeps_file = invoker.script + "deps" + } else { + _pydeps_file = invoker.original_script + "deps" + } _pydeps_lines = read_file(_pydeps_file, "list lines") # https://crbug.com/1102058 diff --git a/components/metrics/generate_expired_histograms_array.gni b/components/metrics/generate_expired_histograms_array.gni --- a/components/metrics/generate_expired_histograms_array.gni +++ b/components/metrics/generate_expired_histograms_array.gni @@ -30,7 +30,7 @@ template("generate_expired_histograms_array") { action(target_name) { header_filename = "$target_gen_dir/" + invoker.header_filename - script = "//tools/metrics/histograms/generate_expired_histograms_array.py" + script = "//build/gn_run_binary.py" outputs = [ header_filename ] inputs = histograms_xml_files @@ -38,7 +38,10 @@ template("generate_expired_histograms_array") { major_branch_date_filepath = invoker.major_branch_date_filepath milestone_filepath = invoker.milestone_filepath - args = [] + args = [ + rebase_path("//third_party/depot_tools/vpython3"), + rebase_path("//tools/metrics/histograms/generate_expired_histograms_array.py") + ] if (defined(invoker.namespace) && invoker.namespace != "") { args += [ "-n" + invoker.namespace ] diff --git a/components/variations/field_trial_config/BUILD.gn b/components/variations/field_trial_config/BUILD.gn --- a/components/variations/field_trial_config/BUILD.gn +++ b/components/variations/field_trial_config/BUILD.gn @@ -5,7 +5,7 @@ import("//tools/json_to_struct/json_to_struct.gni") action("field_trial_testing_config_action") { visibility = [ ":field_trial_config" ] - script = "//tools/variations/fieldtrial_to_struct.py" + script = "//build/gn_run_binary.py" source = "//testing/variations/fieldtrial_testing_config.json" inputs = JSON_TO_STRUCT_FILES + [ source ] @@ -22,6 +22,8 @@ action("field_trial_testing_config_action") { } args = [ + rebase_path("//third_party/depot_tools/vpython3"), + rebase_path("//tools/variations/fieldtrial_to_struct.py"), rebase_path(source, root_build_dir), "--destbase=" + rebase_path(target_gen_dir, root_build_dir), "--namespace=variations", diff --git a/third_party/perfetto/gn/BUILD.gn b/third_party/perfetto/gn/BUILD.gn --- a/third_party/perfetto/gn/BUILD.gn +++ b/third_party/perfetto/gn/BUILD.gn @@ -36,7 +36,8 @@ if (perfetto_root_path == "//") { # pattern #if PERFETTO_BUILDFLAG(PERFETTO_ANDROID_BUILD) buildflag_gen_dir_ = "$root_gen_dir/$perfetto_root_path/build_config" action("gen_buildflags") { - script = "write_buildflag_header.py" + script = "//build/gn_run_binary.py" + original_script = "write_buildflag_header.py" gen_header_path = "$buildflag_gen_dir_/perfetto_build_flags.h" perfetto_component_build = false @@ -112,6 +113,8 @@ action("gen_buildflags") { rel_out_path = rebase_path(gen_header_path, "$root_build_dir") args = [ + rebase_path("//third_party/depot_tools/vpython3"), + rebase_path(original_script), "--out", rel_out_path, "--rsp", diff --git a/tools/grit/grit_rule.gni b/tools/grit/grit_rule.gni --- a/tools/grit/grit_rule.gni +++ b/tools/grit/grit_rule.gni @@ -154,7 +154,7 @@ template("grit") { _grit_custom_target = target_name + "_grit" action(_grit_custom_target) { - script = "//tools/grit/grit.py" + script = "//build/gn_run_binary.py" inputs = [ invoker.source ] testonly = defined(invoker.testonly) && invoker.testonly @@ -197,6 +197,8 @@ template("grit") { } args = [ + rebase_path("//third_party/depot_tools/vpython3"), + rebase_path("//tools/grit/grit.py"), "-i", _rebased_source_path, "build", diff --git a/tools/json_schema_compiler/json_schema_api.gni b/tools/json_schema_compiler/json_schema_api.gni --- a/tools/json_schema_compiler/json_schema_api.gni +++ b/tools/json_schema_compiler/json_schema_api.gni @@ -112,13 +112,15 @@ template("generated_json_strings") { action(bundle_generator_schema_name) { visibility = [ ":$root_target_name" ] - script = compiler_script + script = "//build/gn_run_binary.py" inputs = compiler_sources + invoker.sources outputs = [ "$target_gen_dir/generated_schemas.cc", "$target_gen_dir/generated_schemas.h", ] args = [ + rebase_path("//third_party/depot_tools/vpython3"), + rebase_path(compiler_script), "--root=" + rebase_path(root_folder, root_build_dir), "--destdir=$destdir", "--namespace=$root_namespace", @@ -227,13 +229,15 @@ template("function_registration") { action(bundle_generator_registration_name) { visibility = [ ":$root_target_name" ] - script = compiler_script + script = "//build/gn_run_binary.py" inputs = compiler_sources + invoker.sources outputs = [ "$gen_child_dir/generated_api_registration.cc", "$gen_child_dir/generated_api_registration.h", ] args = [ + rebase_path("//third_party/depot_tools/vpython3"), + rebase_path(compiler_script), "--root=" + rebase_path(root_folder, root_build_dir), "--destdir=$destdir", "--namespace=$root_namespace", @@ -321,7 +325,7 @@ template("generated_types") { action_foreach(schema_generator_name) { visibility = [ ":$root_target_name" ] - script = compiler_script + script = "//build/gn_run_binary.py" sources = invoker.sources inputs = compiler_sources outputs = [ @@ -329,6 +333,8 @@ template("generated_types") { "$target_gen_dir/{{source_name_part}}.h", ] args = [ + rebase_path("//third_party/depot_tools/vpython3"), + rebase_path(compiler_script), "{{source}}", "--root=" + rebase_path(root_folder, root_build_dir), "--destdir=$destdir", diff --git a/tools/json_to_struct/json_to_struct.gni b/tools/json_to_struct/json_to_struct.gni --- a/tools/json_to_struct/json_to_struct.gni +++ b/tools/json_to_struct/json_to_struct.gni @@ -41,7 +41,7 @@ template("json_to_struct") { action(action_name) { visibility = [ ":$source_set_name" ] - script = "//tools/json_to_struct/json_to_struct.py" + script = "//build/gn_run_binary.py" inputs = JSON_TO_STRUCT_FILES + [ invoker.source, @@ -56,6 +56,8 @@ template("json_to_struct") { ] args = [ + rebase_path("//third_party/depot_tools/vpython3"), + rebase_path("//tools/json_to_struct/json_to_struct.py"), rebase_path(invoker.source, root_build_dir), "--destbase=" + rebase_path(out_dir, root_build_dir), "--namespace=" + invoker.namespace, diff --git a/tools/metrics/generate_allowlist_from_histograms_file.gni b/tools/metrics/generate_allowlist_from_histograms_file.gni --- a/tools/metrics/generate_allowlist_from_histograms_file.gni +++ b/tools/metrics/generate_allowlist_from_histograms_file.gni @@ -26,12 +26,13 @@ template("generate_allowlist_from_histograms_file") { action(target_name) { output_file = "$target_gen_dir/" + invoker.output_file - script = - "//tools/metrics/histograms/generate_allowlist_from_histograms_file.py" + script = "//build/gn_run_binary.py" outputs = [ output_file ] sources = [ invoker.input_xml_file ] args = [ + rebase_path("//third_party/depot_tools/vpython3"), + rebase_path("//tools/metrics/histograms/generate_allowlist_from_histograms_file.py"), "--allow_list_name=" + invoker.allow_list_name, "--namespace=" + invoker.namespace, "--tag=" + invoker.tag, --