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) {
 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;
     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.
     { 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; }
     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.
 
   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
 ========================================
 
 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.
 
 // 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>"),
 // 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> 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;
 
 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);
 
     try {
       ret = graph.Build(tempDir);
@@ -65,7 +69,8 @@ namespace {
       throw;
     }
 
       throw;
     }
 
-    tempDir.eraseFromDisk(true);
+    if (!SaveTemps)
+      tempDir.eraseFromDisk(true);
     return ret;
   }
 }
     return ret;
   }
 }