| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "tools/gn/builder.h" | 5 #include "tools/gn/builder.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "tools/gn/config.h" | 10 #include "tools/gn/config.h" |
| (...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 397 BuilderRecord::ITEM_TOOLCHAIN, err); | 397 BuilderRecord::ITEM_TOOLCHAIN, err); |
| 398 if (!toolchain_record) | 398 if (!toolchain_record) |
| 399 return false; | 399 return false; |
| 400 record->AddDep(toolchain_record); | 400 record->AddDep(toolchain_record); |
| 401 | 401 |
| 402 return true; | 402 return true; |
| 403 } | 403 } |
| 404 | 404 |
| 405 void Builder::RecursiveSetShouldGenerate(BuilderRecord* record, | 405 void Builder::RecursiveSetShouldGenerate(BuilderRecord* record, |
| 406 bool force) { | 406 bool force) { |
| 407 if (!force && record->should_generate()) | 407 if (!record->should_generate()) { |
| 408 return; // Already set. | 408 record->set_should_generate(true); |
| 409 record->set_should_generate(true); | 409 |
| 410 // This may have caused the item to go into "resolved and generated" state. |
| 411 if (record->resolved() && !resolved_and_generated_callback_.is_null()) |
| 412 resolved_and_generated_callback_.Run(record); |
| 413 } else if (!force) { |
| 414 return; // Already set and we're not required to iterate dependencies. |
| 415 } |
| 410 | 416 |
| 411 for (auto* cur : record->all_deps()) { | 417 for (auto* cur : record->all_deps()) { |
| 412 if (!cur->should_generate()) { | 418 if (!cur->should_generate()) { |
| 413 ScheduleItemLoadIfNecessary(cur); | 419 ScheduleItemLoadIfNecessary(cur); |
| 414 RecursiveSetShouldGenerate(cur, false); | 420 RecursiveSetShouldGenerate(cur, false); |
| 415 } | 421 } |
| 416 } | 422 } |
| 417 } | 423 } |
| 418 | 424 |
| 419 void Builder::ScheduleItemLoadIfNecessary(BuilderRecord* record) { | 425 void Builder::ScheduleItemLoadIfNecessary(BuilderRecord* record) { |
| (...skipping 24 matching lines...) Expand all Loading... |
| 444 if (!ResolveDeps(&toolchain->deps(), err)) | 450 if (!ResolveDeps(&toolchain->deps(), err)) |
| 445 return false; | 451 return false; |
| 446 if (!ResolvePools(toolchain, err)) | 452 if (!ResolvePools(toolchain, err)) |
| 447 return false; | 453 return false; |
| 448 } | 454 } |
| 449 | 455 |
| 450 record->set_resolved(true); | 456 record->set_resolved(true); |
| 451 | 457 |
| 452 if (!record->item()->OnResolved(err)) | 458 if (!record->item()->OnResolved(err)) |
| 453 return false; | 459 return false; |
| 454 if (!resolved_callback_.is_null()) | 460 if (record->should_generate() && !resolved_and_generated_callback_.is_null()) |
| 455 resolved_callback_.Run(record); | 461 resolved_and_generated_callback_.Run(record); |
| 456 | 462 |
| 457 // Recursively update everybody waiting on this item to be resolved. | 463 // Recursively update everybody waiting on this item to be resolved. |
| 458 for (BuilderRecord* waiting : record->waiting_on_resolution()) { | 464 for (BuilderRecord* waiting : record->waiting_on_resolution()) { |
| 459 DCHECK(waiting->unresolved_deps().find(record) != | 465 DCHECK(waiting->unresolved_deps().find(record) != |
| 460 waiting->unresolved_deps().end()); | 466 waiting->unresolved_deps().end()); |
| 461 waiting->unresolved_deps().erase(record); | 467 waiting->unresolved_deps().erase(record); |
| 462 | 468 |
| 463 if (waiting->can_resolve()) { | 469 if (waiting->can_resolve()) { |
| 464 if (!ResolveItem(waiting, err)) | 470 if (!ResolveItem(waiting, err)) |
| 465 return false; | 471 return false; |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 545 std::string ret; | 551 std::string ret; |
| 546 for (size_t i = 0; i < cycle.size(); i++) { | 552 for (size_t i = 0; i < cycle.size(); i++) { |
| 547 ret += " " + cycle[i]->label().GetUserVisibleName(false); | 553 ret += " " + cycle[i]->label().GetUserVisibleName(false); |
| 548 if (i != cycle.size() - 1) | 554 if (i != cycle.size() - 1) |
| 549 ret += " ->"; | 555 ret += " ->"; |
| 550 ret += "\n"; | 556 ret += "\n"; |
| 551 } | 557 } |
| 552 | 558 |
| 553 return ret; | 559 return ret; |
| 554 } | 560 } |
| OLD | NEW |