diff options
Diffstat (limited to 'lib/CompilerDriver/Main.cpp')
-rw-r--r-- | lib/CompilerDriver/Main.cpp | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/lib/CompilerDriver/Main.cpp b/lib/CompilerDriver/Main.cpp index c9c0413..3e1fc9f 100644 --- a/lib/CompilerDriver/Main.cpp +++ b/lib/CompilerDriver/Main.cpp @@ -31,20 +31,29 @@ namespace { sys::Path getTempDir() { sys::Path tempDir; + // The --temp-dir option. + if (!TempDirname.empty()) { + tempDir = TempDirname; + } // GCC 4.5-style -save-temps handling. - if (SaveTemps == SaveTempsEnum::Unset) { + else if (SaveTemps == SaveTempsEnum::Unset) { tempDir = sys::Path::GetTemporaryDirectory(); + return tempDir; } else if (SaveTemps == SaveTempsEnum::Obj && !OutputFilename.empty()) { tempDir = OutputFilename; + tempDir = tempDir.getDirname(); + } + else { + // SaveTemps == Cwd --> use current dir (leave tempDir empty). + return tempDir; + } - if (!tempDir.exists()) { - std::string ErrMsg; - if (tempDir.createDirectoryOnDisk(true, &ErrMsg)) - throw std::runtime_error(ErrMsg); - } + if (!tempDir.exists()) { + std::string ErrMsg; + if (tempDir.createDirectoryOnDisk(true, &ErrMsg)) + throw std::runtime_error(ErrMsg); } - // else if (SaveTemps == Cwd) -> use current dir (leave tempDir empty) return tempDir; } @@ -53,17 +62,18 @@ namespace { int BuildTargets(CompilationGraph& graph, const LanguageMap& langMap) { int ret; const sys::Path& tempDir = getTempDir(); + bool toDelete = (SaveTemps == SaveTempsEnum::Unset); try { ret = graph.Build(tempDir, langMap); } catch(...) { - if (SaveTemps == SaveTempsEnum::Unset) + if (toDelete) tempDir.eraseFromDisk(true); throw; } - if (SaveTemps == SaveTempsEnum::Unset) + if (toDelete) tempDir.eraseFromDisk(true); return ret; } |