| Index: tools/gn/command_gyp.cc
|
| diff --git a/tools/gn/command_gyp.cc b/tools/gn/command_gyp.cc
|
| index 570a8c405201f7ae8c1e0fabc17a7f080a5ccb40..5ed445260e95d8bd399b86cc2f41a3aea5b8692f 100644
|
| --- a/tools/gn/command_gyp.cc
|
| +++ b/tools/gn/command_gyp.cc
|
| @@ -317,6 +317,39 @@ std::pair<int, int> WriteGypFiles(Setups& setups, Err* err) {
|
| static_cast<int>(grouped_targets.size()));
|
| }
|
|
|
| +// Verifies that all build argument overrides are used by at least one of the
|
| +// build types.
|
| +void VerifyAllOverridesUsed(const Setups& setups) {
|
| + // Collect all declared args from all builds.
|
| + Scope::KeyValueMap declared;
|
| + setups.debug->build_settings().build_args().MergeDeclaredArguments(
|
| + &declared);
|
| + setups.release->build_settings().build_args().MergeDeclaredArguments(
|
| + &declared);
|
| + if (setups.debug64 && setups.release64) {
|
| + setups.debug64->build_settings().build_args().MergeDeclaredArguments(
|
| + &declared);
|
| + setups.release64->build_settings().build_args().MergeDeclaredArguments(
|
| + &declared);
|
| + }
|
| + if (setups.xcode_debug && setups.xcode_release) {
|
| + setups.xcode_debug->build_settings().build_args().MergeDeclaredArguments(
|
| + &declared);
|
| + setups.xcode_release->build_settings().build_args().MergeDeclaredArguments(
|
| + &declared);
|
| + }
|
| +
|
| + Scope::KeyValueMap used =
|
| + setups.debug->build_settings().build_args().GetAllOverrides();
|
| +
|
| + Err err;
|
| + if (!Args::VerifyAllOverridesUsed(used, declared, &err)) {
|
| + // TODO(brettw) implement a system of warnings. Until we have a better
|
| + // system, print the error but don't cause a failure.
|
| + err.PrintToStdout();
|
| + }
|
| +}
|
| +
|
| } // namespace
|
|
|
| // Suppress output on success.
|
| @@ -391,8 +424,13 @@ int RunGyp(const std::vector<std::string>& args) {
|
| base::ElapsedTimer timer;
|
| Setups setups;
|
|
|
| - // Deliberately leaked to avoid expensive process teardown.
|
| + // Deliberately leaked to avoid expensive process teardown. We also turn off
|
| + // unused override checking since we want to merge all declared arguments and
|
| + // check those, rather than check each build individually. Otherwise, you
|
| + // couldn't have an arg that was used in only one build type. This comes up
|
| + // because some args are build-type specific.
|
| setups.debug = new Setup;
|
| + setups.debug->set_check_for_unused_overrides(false);
|
| if (!setups.debug->DoSetup())
|
| return 1;
|
| const char kIsDebug[] = "is_debug";
|
| @@ -466,6 +504,8 @@ int RunGyp(const std::vector<std::string>& args) {
|
| if (setups.xcode_release && !setups.xcode_release->RunPostMessageLoop())
|
| return 1;
|
|
|
| + VerifyAllOverridesUsed(setups);
|
| +
|
| Err err;
|
| std::pair<int, int> counts = WriteGypFiles(setups, &err);
|
| if (err.has_error()) {
|
|
|