[C++] Add a rule for ninja file regeneration
diff --git a/main.cc b/main.cc
index 6465a50..aad72a8 100644
--- a/main.cc
+++ b/main.cc
@@ -105,6 +105,10 @@
         "--ninja_dir", argv, &i, &g_ninja_dir)) {
     } else if (!strcmp(arg, "--use_find_emulator")) {
       g_use_find_emulator = true;
+    } else if (!strcmp(arg, "--gen_regen_rule")) {
+      // TODO: Make this default once we have removed unnecessary
+      // command line change from Android build.
+      g_gen_regen_rule = true;
     } else if (ParseCommandLineOptionWithArg(
         "--goma_dir", argv, &i, &g_goma_dir)) {
     } else if (ParseCommandLineOptionWithArg(
@@ -209,7 +213,8 @@
 }
 
 static int Run(const vector<Symbol>& targets,
-               const vector<StringPiece>& cl_vars) {
+               const vector<StringPiece>& cl_vars,
+               const string& orig_args) {
   MakefileCacheManager* cache_mgr = NewMakefileCacheManager();
 
   Vars* vars = new Vars();
@@ -262,7 +267,8 @@
 
   if (g_generate_ninja) {
     ScopedTimeReporter tr("generate ninja time");
-    GenerateNinja(g_ninja_suffix, g_ninja_dir, nodes, ev, !targets.empty());
+    GenerateNinja(g_ninja_suffix, g_ninja_dir, nodes, ev, !targets.empty(),
+                  orig_args);
     return 0;
   }
 
@@ -282,13 +288,19 @@
 
 int main(int argc, char* argv[]) {
   Init();
+  string orig_args;
+  for (int i = 0; i < argc; i++) {
+    if (i)
+      orig_args += ' ';
+    orig_args += argv[i];
+  }
   vector<Symbol> targets;
   vector<StringPiece> cl_vars;
   ParseCommandLine(argc, argv, &targets, &cl_vars);
   // This depends on command line flags.
   if (g_use_find_emulator)
     InitFindEmulator();
-  int r = Run(targets, cl_vars);
+  int r = Run(targets, cl_vars, orig_args);
   Quit();
   return r;
 }