[llvm-commits] CVS: llvm/utils/TableGen/TableGen.cpp

Chris Lattner lattner at cs.uiuc.edu
Fri Aug 1 15:36:09 PDT 2003


Changes in directory llvm/utils/TableGen:

TableGen.cpp updated: 1.14 -> 1.15

---
Log message:

Tablegen should only replace the output if it changes


---
Diffs of the changes:

Index: llvm/utils/TableGen/TableGen.cpp
diff -u llvm/utils/TableGen/TableGen.cpp:1.14 llvm/utils/TableGen/TableGen.cpp:1.15
--- llvm/utils/TableGen/TableGen.cpp:1.14	Fri Aug  1 14:21:43 2003
+++ llvm/utils/TableGen/TableGen.cpp	Fri Aug  1 15:35:01 2003
@@ -11,6 +11,7 @@
 #include "Record.h"
 #include "Support/CommandLine.h"
 #include "Support/Signals.h"
+#include "Support/FileUtilities.h"
 #include "CodeEmitterGen.h"
 #include "RegisterInfoEmitter.h"
 #include <algorithm>
@@ -391,15 +392,18 @@
 
   std::ostream *Out = &std::cout;
   if (OutputFilename != "-") {
-    Out = new std::ofstream(OutputFilename.c_str());
+    // Output to a .tmp file, because we don't actually want to overwrite the
+    // output file unless the generated file is different or the specified file
+    // does not exist.
+    Out = new std::ofstream((OutputFilename+".tmp").c_str());
 
     if (!Out->good()) {
-      std::cerr << argv[0] << ": error opening " << OutputFilename << "!\n";
+      std::cerr << argv[0] << ": error opening " << OutputFilename << ".tmp!\n";
       return 1;
     }
 
     // Make sure the file gets removed if *gasp* tablegen crashes...
-    RemoveFileOnSignal(OutputFilename);
+    RemoveFileOnSignal(OutputFilename+".tmp");
   }
 
   try {
@@ -438,6 +442,16 @@
     return 1;
   }
 
-  if (Out != &std::cout) delete Out;
+  if (Out != &std::cout) {
+    delete Out;                               // Close the file
+    
+    // Now that we have generated the result, check to see if we either don't
+    // have the requested file, or if the requested file is different than the
+    // file we generated.  If so, move the generated file over the requested
+    // file.  Otherwise, just remove the file we just generated, so 'make'
+    // doesn't try to regenerate tons of dependencies.
+    //
+    MoveFileOverIfUpdated(OutputFilename+".tmp", OutputFilename);
+  }
   return 0;
 }





More information about the llvm-commits mailing list