GN: Unconditionally write build.ninja.

I previously changed this to WriteFileIfChanged which tends to be faster,
especially on Windows. But Ninja's build dependency tracking expects the
timestamp of this file to be updated whenever any build input has been
modified.

BUG=611633

Review-Url: https://codereview.chromium.org/1981443002
Cr-Original-Commit-Position: refs/heads/master@{#393591}
Cr-Mirrored-From: https://chromium.googlesource.com/chromium/src
Cr-Mirrored-Commit: 94b0b56868bb971253dc8f30b0b6aa3a846e70a4
diff --git a/tools/gn/ninja_build_writer.cc b/tools/gn/ninja_build_writer.cc
index ff74e77..2cbb245 100644
--- a/tools/gn/ninja_build_writer.cc
+++ b/tools/gn/ninja_build_writer.cc
@@ -167,14 +167,26 @@
   if (!gen.Run(err))
     return false;
 
+  // Unconditionally write the build.ninja. Ninja's build-out-of-date checking
+  // will re-run GN when any build input is newer than build.ninja, so any time
+  // the build is updated, build.ninja's timestamp needs to updated also, even
+  // if the contents haven't been changed.
   base::FilePath ninja_file_name(build_settings->GetFullPath(
       SourceFile(build_settings->build_dir().value() + "build.ninja")));
+  base::CreateDirectory(ninja_file_name.DirName());
+  std::string ninja_contents = file.str();
+  if (base::WriteFile(ninja_file_name, ninja_contents.data(),
+                      static_cast<int>(ninja_contents.size())) !=
+      static_cast<int>(ninja_contents.size()))
+    return false;
+
+  // Dep file listing build dependencies.
   base::FilePath dep_file_name(build_settings->GetFullPath(
       SourceFile(build_settings->build_dir().value() + "build.ninja.d")));
-  base::CreateDirectory(ninja_file_name.DirName());
-
-  if (!WriteFileIfChanged(ninja_file_name, file.str(), err) ||
-      !WriteFileIfChanged(dep_file_name, depfile.str(), err))
+  std::string dep_contents = depfile.str();
+  if (base::WriteFile(dep_file_name, dep_contents.data(),
+                      static_cast<int>(dep_contents.size())) !=
+      static_cast<int>(dep_contents.size()))
     return false;
 
   return true;