Add a --save-temps option.
authorMikhail Glushenkov <foldr@codedgers.com>
Fri, 30 May 2008 06:29:17 +0000 (06:29 +0000)
committerMikhail Glushenkov <foldr@codedgers.com>
Fri, 30 May 2008 06:29:17 +0000 (06:29 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51760 91177308-0d34-0410-b5e6-96231b3b80d8

tools/llvmc2/CompilationGraph.cpp
tools/llvmc2/CompilationGraph.h
tools/llvmc2/doc/LLVMC-Reference.rst
tools/llvmc2/llvmc.cpp

index df1f2395654440a28e9c65954f2f406f132e872b..9cdcac384574ef3e2955c8b4c9e46d8480d605fc 100644 (file)
@@ -139,8 +139,17 @@ void CompilationGraph::insertEdge(const std::string& A, Edge* Edg) {
 namespace {
   sys::Path MakeTempFile(const sys::Path& TempDir, const std::string& BaseName,
                          const std::string& Suffix) {
-    sys::Path Out = TempDir;
-    Out.appendComponent(BaseName);
+    sys::Path Out;
+
+    // Make sure we don't end up with path names like '/file.o' if the
+    // TempDir is empty.
+    if (TempDir.empty()) {
+      Out.set(BaseName);
+    }
+    else {
+      Out = TempDir;
+      Out.appendComponent(BaseName);
+    }
     Out.appendSuffix(Suffix);
     Out.makeUnique(true, NULL);
     return Out;
index 7dfe78fd2ded570eb82939cff175d6f995e121f7..4324c38ab85465a924252617b6e47e8aa1eb8aa7 100644 (file)
@@ -79,8 +79,6 @@ namespace llvmc {
     { OutEdges.push_back(llvm::IntrusiveRefCntPtr<Edge>(E)); }
 
     // Inward edge counter. Used to implement topological sort.
-    // TOTHINK: Move the mutable counter back into Tool classes? Makes
-    // us more const-correct.
     void IncrInEdges() { ++InEdges; }
     void DecrInEdges() { --InEdges; }
     bool HasNoInEdges() const { return InEdges == 0; }
index f2c5a34bfd6747199a77c642c62883f38a28756b..9cee46c00d912aedc4fa77dd668d55e168e9e226 100644 (file)
@@ -76,6 +76,12 @@ configuration files:
   current directory with the compilation graph description in the
   Graphviz format. Hidden option, useful for debugging.
 
+* ``--save-temps`` - Write temporary files to the current directory
+  and do not delete them on exit. Hidden option, useful for debugging.
+
+* ``--help``, ``--help-hidden``, ``--version`` - These options have
+  their standard meaning.
+
 
 Customizing LLVMC: the compilation graph
 ========================================
index ba2d70a62031d3e79f33c9ba0e63bc9a566c39ce..e093439d4ff5c72e93a7e781c22461d4ccb312ee 100644 (file)
@@ -32,7 +32,6 @@ using namespace llvmc;
 // Built-in command-line options.
 // External linkage here is intentional.
 
-// TOFIX: Add a --keep-temps option.
 // TOFIX: Write a 'driver driver' (easier to do as a separate
 // executable that drives llvmc2 proper).
 cl::list<std::string> InputFilenames(cl::Positional, cl::desc("<input file>"),
@@ -50,12 +49,17 @@ cl::opt<bool> WriteGraph("write-graph",
 cl::opt<bool> ViewGraph("view-graph",
                          cl::desc("Show compilation graph in GhostView"),
                          cl::Hidden);
+cl::opt<bool> SaveTemps("save-temps",
+                         cl::desc("Keep temporary files"),
+                         cl::Hidden);
 
 namespace {
   /// BuildTargets - A small wrapper for CompilationGraph::Build.
   int BuildTargets(CompilationGraph& graph) {
     int ret;
-    sys::Path tempDir(sys::Path::GetTemporaryDirectory());
+    const sys::Path& tempDir = SaveTemps
+      ? sys::Path("")
+      : sys::Path(sys::Path::GetTemporaryDirectory());
 
     try {
       ret = graph.Build(tempDir);
@@ -65,7 +69,8 @@ namespace {
       throw;
     }
 
-    tempDir.eraseFromDisk(true);
+    if (!SaveTemps)
+      tempDir.eraseFromDisk(true);
     return ret;
   }
 }