use builddir for log file
authorEvan Martin <martine@danga.com>
Fri, 4 Feb 2011 05:36:01 +0000 (21:36 -0800)
committerEvan Martin <martine@danga.com>
Fri, 4 Feb 2011 05:36:01 +0000 (21:36 -0800)
.gitignore
manual.asciidoc
src/ninja.cc
todo

index ab7d326..31d4bc1 100644 (file)
@@ -6,4 +6,3 @@ TAGS
 /README.html
 /config.ninja
 /manual.html
-.ninja_log
index fd18200..f50d276 100644 (file)
@@ -251,6 +251,19 @@ statement to the rule (for example, if the rule needs "the file
 extension of the first input"), pass that through as an extra
 variable, like how `cflags` is passed above.
 
+The Ninja log
+~~~~~~~~~~~~~
+
+For each built file, Ninja keeps a log of the command used to build
+it.  Using this log Ninja can know when an existing output was built
+with a different command line than the build files specify (i.e., the
+command line changed) and knows to rebuild the file.
+
+The log file is kept in the build root in a file called `.ninja_log`.
+If you provide a variable named `builddir` in the outermost scope,
+`.ninja_log` will be kept in that directory instead.
+
+
 Generating Ninja files
 ----------------------
 
index 6e441b6..0547013 100644 (file)
@@ -204,13 +204,16 @@ int main(int argc, char** argv) {
   build_log.SetConfig(&config);
   state.build_log_ = &build_log;
 
+  const string build_dir = state.bindings_.LookupVariable("builddir");
   const char* kLogPath = ".ninja_log";
-  if (!build_log.Load(kLogPath, &err)) {
-    fprintf(stderr, "error loading build log: %s\n", err.c_str());
+  string log_path = build_dir.empty() ? kLogPath : build_dir + "/" + kLogPath;
+  if (!build_log.Load(log_path.c_str(), &err)) {
+    fprintf(stderr, "error loading build log %s: %s\n",
+            log_path.c_str(), err.c_str());
     return 1;
   }
 
-  if (!build_log.OpenForWrite(kLogPath, &err)) {
+  if (!build_log.OpenForWrite(log_path.c_str(), &err)) {
     fprintf(stderr, "error opening build log: %s\n", err.c_str());
     return 1;
   }
diff --git a/todo b/todo
index 0164d20..a702cf0 100644 (file)
--- a/todo
+++ b/todo
@@ -7,8 +7,6 @@ website, contact info
 
 delete halfway-built output files when interrupted
 
-put ninja_log somewhere useful and document it
-
 frosting
 ========