//===- CommandLineClangTool.h - command-line clang tools driver -*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // This file implements the CommandLineClangTool class used to run clang // tools as separate command-line applications with a consistent common // interface for handling compilation database and input files. // // It provides a common subset of command-line options, common algorithm // for locating a compilation database and source files, and help messages // for the basic command-line interface. // // It creates a CompilationDatabase, initializes a ClangTool and runs a // user-specified FrontendAction over all TUs in which the given files are // compiled. // // This class uses the Clang Tooling infrastructure, see // http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html // for details on setting it up with LLVM source tree. // //===----------------------------------------------------------------------===// #ifndef LLVM_TOOLS_CLANG_INCLUDE_CLANG_TOOLING_COMMANDLINECLANGTOOL_H #define LLVM_TOOLS_CLANG_INCLUDE_CLANG_TOOLING_COMMANDLINECLANGTOOL_H #include "llvm/Support/CommandLine.h" #include "clang/Tooling/CompilationDatabase.h" namespace clang { namespace tooling { class CompilationDatabase; class FrontendActionFactory; /// \brief A common driver for command-line Clang tools. /// /// Parses a common subset of command-line arguments, locates and loads a /// compilation commands database, runs a tool with user-specified action. It /// also contains a help message for the common command-line options. /// An example of usage: /// @code /// int main(int argc, const char **argv) { /// CommandLineClangTool Tool; /// cl::extrahelp MoreHelp("\nMore help text..."); /// Tool.initialize(argc, argv); /// return Tool.run(newFrontendActionFactory<clang::SyntaxOnlyAction>()); /// } /// @endcode /// class CommandLineClangTool { public: /// Sets up command-line options and help messages. /// Add your own help messages after constructing this tool. CommandLineClangTool(); /// Parses command-line, initializes a compilation database. /// This method exits program in case of error. void initialize(int argc, const char **argv); /// Runs a clang tool with an action created by \c ActionFactory. int run(FrontendActionFactory *ActionFactory); private: llvm::OwningPtr<CompilationDatabase> Compilations; llvm::cl::opt<std::string> BuildPath; llvm::cl::list<std::string> SourcePaths; llvm::cl::extrahelp MoreHelp; }; } // namespace tooling } // namespace clang #endif // LLVM_TOOLS_CLANG_INCLUDE_CLANG_TOOLING_COMMANDLINECLANGTOOL_H