blob: c29c30236416d3e697646f6dcc33fdfd9a6bc9de [file] [log] [blame]
//===- 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