Index: build/config/jumbo.gni |
diff --git a/build/config/jumbo.gni b/build/config/jumbo.gni |
index 4a5f22f4a94ee0d2937adbe6ef5088857679df44..364485cb49cb919b9a1fa8016f362f180a01b66a 100644 |
--- a/build/config/jumbo.gni |
+++ b/build/config/jumbo.gni |
@@ -66,6 +66,25 @@ template("jumbo_target") { |
invoker_sources = invoker.sources |
gen_target_dir = get_path_info(invoker_sources[0], "gen_dir") |
assert(excluded_sources != [] || true) # Prevent "unused variable". |
+ |
+ # Find the gen_target_dir directory with shortest path. Short paths |
+ # are nice in themselves since they mean shorter error messages and |
+ # fewer bytes to parse, but the currently deployed version of ninja |
+ # also has a limitation where it only allows 32 path components in |
+ # Windows. |
+ # See https://crbug.com/738186 and |
+ # https://github.com/ninja-build/ninja/issues/1161 |
+ foreach(source_file, invoker.sources) { |
+ possibly_better_gen_target_dir = get_path_info(gen_target_dir, "dir") |
+ possibly_better_gen_target_dir_2 = |
+ get_path_info(possibly_better_gen_target_dir, "dir") |
+ alt_gen_target_dir = get_path_info(source_file, "gen_dir") |
+ if (alt_gen_target_dir == possibly_better_gen_target_dir || |
+ alt_gen_target_dir == possibly_better_gen_target_dir_2) { |
+ gen_target_dir = alt_gen_target_dir |
+ } |
+ } |
+ |
assert(gen_target_dir != "") # Prevent "unused variable". |
if (use_jumbo_build_for_target) { |