Process the -C option before running RUN_AFTER_FLAGS tools.
authorHans Wennborg <hans@hanshq.net>
Sat, 3 May 2014 23:07:09 +0000 (16:07 -0700)
committerHans Wennborg <hans@hanshq.net>
Sat, 3 May 2014 23:07:09 +0000 (16:07 -0700)
This brings the flag more inline with its description: "change to
DIR before doing anything else".

The use case is to make it possible to use -C together with -t msvc.
When debugging Windows builds, it's handy to be able to copy-paste
the commands from "ninja -v" and make them run in the correct
directory by adding this flag.

src/ninja.cc

index 03ca83b..25eb3a5 100644 (file)
@@ -161,7 +161,8 @@ struct Tool {
 
   /// When to run the tool.
   enum {
-    /// Run after parsing the command-line flags (as early as possible).
+    /// Run after parsing the command-line flags and potentially changing
+    /// the current working directory (as early as possible).
     RUN_AFTER_FLAGS,
 
     /// Run after loading build.ninja.
@@ -1026,13 +1027,6 @@ int real_main(int argc, char** argv) {
   if (exit_code >= 0)
     return exit_code;
 
-  if (options.tool && options.tool->when == Tool::RUN_AFTER_FLAGS) {
-    // None of the RUN_AFTER_FLAGS actually use a NinjaMain, but it's needed
-    // by other tools.
-    NinjaMain ninja(ninja_command, config);
-    return (ninja.*options.tool->func)(argc, argv);
-  }
-
   if (options.working_dir) {
     // The formatting of this string, complete with funny quotes, is
     // so Emacs can properly identify that the cwd has changed for
@@ -1046,6 +1040,13 @@ int real_main(int argc, char** argv) {
     }
   }
 
+  if (options.tool && options.tool->when == Tool::RUN_AFTER_FLAGS) {
+    // None of the RUN_AFTER_FLAGS actually use a NinjaMain, but it's needed
+    // by other tools.
+    NinjaMain ninja(ninja_command, config);
+    return (ninja.*options.tool->func)(argc, argv);
+  }
+
   // The build can take up to 2 passes: one to rebuild the manifest, then
   // another to build the desired target.
   for (int cycle = 0; cycle < 2; ++cycle) {