diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-04-01 19:08:46 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-04-01 19:08:46 +0000 |
commit | dae1d347dfaab0b55cc7ebdcd8a8d0b52252350d (patch) | |
tree | 7a176047e97b88207a90a2b3ffe853e57c95835a /clang/tools/driver/driver.cpp | |
parent | b4b81d8ab12341d4d6908ac8945fd66e0ddf2460 (diff) | |
download | bcm5719-llvm-dae1d347dfaab0b55cc7ebdcd8a8d0b52252350d.tar.gz bcm5719-llvm-dae1d347dfaab0b55cc7ebdcd8a8d0b52252350d.zip |
Support CCC_ADD_ARGS in new driver.
llvm-svn: 68231
Diffstat (limited to 'clang/tools/driver/driver.cpp')
-rw-r--r-- | clang/tools/driver/driver.cpp | 39 |
1 files changed, 37 insertions, 2 deletions
diff --git a/clang/tools/driver/driver.cpp b/clang/tools/driver/driver.cpp index 880a26acf70..074cab9d0a7 100644 --- a/clang/tools/driver/driver.cpp +++ b/clang/tools/driver/driver.cpp @@ -82,8 +82,43 @@ int main(int argc, const char **argv) { TheDriver(new Driver(Path.getBasename().c_str(), Path.getDirname().c_str(), llvm::sys::getHostTriple().c_str(), "a.out", Diags)); - - llvm::OwningPtr<Compilation> C(TheDriver->BuildCompilation(argc, argv)); + + llvm::OwningPtr<Compilation> C; + + // Handle CCC_ADD_ARGS, a comma separated list of extra arguments. + if (const char *Cur = ::getenv("CCC_ADD_ARGS")) { + std::set<std::string> SavedStrings; + std::vector<const char*> StringPointers; + + // FIXME: Driver shouldn't take extra initial argument. + StringPointers.push_back(argv[0]); + + for (;;) { + const char *Next = strchr(Cur, ','); + + if (Next) { + if (Cur != Next) { + const char *P = + SavedStrings.insert(std::string(Cur, Next)).first->c_str(); + StringPointers.push_back(P); + } + Cur = Next + 1; + } else { + if (*Cur != '\0') { + const char *P = + SavedStrings.insert(std::string(Cur)).first->c_str(); + StringPointers.push_back(P); + } + break; + } + } + + StringPointers.insert(StringPointers.end(), argv + 1, argv + argc); + + C.reset(TheDriver->BuildCompilation(StringPointers.size(), + &StringPointers[0])); + } else + C.reset(TheDriver->BuildCompilation(argc, argv)); int Res = 0; if (C.get()) |