Index: pp-trace/PPTrace.cpp =================================================================== --- pp-trace/PPTrace.cpp +++ pp-trace/PPTrace.cpp @@ -124,13 +124,11 @@ int main(int argc, const char **argv) { using namespace clang::pp_trace; - InitLLVM X(argc, argv); - auto Exec = - clang::tooling::createExecutorFromCommandLineArgs(argc, argv, Cat); - if (!Exec) - error(toString(Exec.takeError())); - + auto OptionsParser = clang::tooling::CommonOptionsParser::create( + argc, argv, Cat, llvm::cl::ZeroOrMore); + if (!OptionsParser) + error(toString(OptionsParser.takeError())); // Parse the IgnoreCallbacks list into strings. SmallVector Patterns; FilterType Filters; @@ -139,20 +137,29 @@ for (StringRef Pattern : Patterns) { Pattern = Pattern.trim(); bool Enabled = !Pattern.consume_front("-"); - if (Expected Pat = GlobPattern::create(Pattern)) + Expected Pat = GlobPattern::create(Pattern); + if (Pat) Filters.emplace_back(std::move(*Pat), Enabled); else error(toString(Pat.takeError())); } + // Create the tool and run the compilation. + clang::tooling::ClangTool Tool(OptionsParser->getCompilations(), + OptionsParser->getSourcePathList()); + std::error_code EC; llvm::ToolOutputFile Out(OutputFileName, EC, llvm::sys::fs::F_Text); if (EC) error(EC.message()); + PPTraceFrontendActionFactory Factory(Filters, Out.os()); + int HadErrors = Tool.run(&Factory); + + // If we had errors, exit early. + if (HadErrors) + return HadErrors; - if (auto Err = Exec->get()->execute( - llvm::make_unique(Filters, Out.os()))) - error(toString(std::move(Err))); Out.keep(); + return 0; }