[cfe-commits] r160265 - in /cfe/trunk: include/clang/Tooling/CommandLineClangTool.h lib/Tooling/CMakeLists.txt lib/Tooling/CommandLineClangTool.cpp test/CMakeLists.txt test/Tooling/clang-ast-dump.cpp tools/CMakeLists.txt tools/Makefile tools/clang-ast-dump/ tools/clang-ast-dump/CMakeLists.txt tools/clang-ast-dump/ClangASTDump.cpp tools/clang-ast-dump/Makefile tools/clang-check/ClangCheck.cpp
David Dean
david_dean at apple.com
Mon Jul 16 14:09:43 PDT 2012
It doesn't appear to be exclusive to i386, maybe release without asserts?:
******************** TEST 'Clang :: Tooling/clang-ast-dump.cpp' FAILED ********************Script:
--
clang-ast-dump "/Users/buildslave/zorg/buildbot/smooshlab/slave-0.8/build.clang-x86_64-darwin11-R/clang.src/test/Tooling/clang-ast-dump.cpp" -f test_namespace::TheClass::theMethod -- -c 2>&1|FileCheck /Users/buildslave/zorg/buildbot/smooshlab/slave-0.8/build.clang-x86_64-darwin11-R/clang.src/test/Tooling/clang-ast-dump.cpp
--
Exit Code: 1
Command Output (stderr):
--
/Users/buildslave/zorg/buildbot/smooshlab/slave-0.8/build.clang-x86_64-darwin11-R/clang.src/test/Tooling/clang-ast-dump.cpp:3:11: error: expected string not found in input
// CHECK: <CXXMethod ptr="0x{{[0-9a-f]+}}" name="theMethod" prototype="true">
^
<stdin>:1:1: note: scanning from here
Processing: /Users/buildslave/zorg/buildbot/smooshlab/slave-0.8/build.clang-x86_64-darwin11-R/clang.src/test/Tooling/clang-ast-dump.cpp.
^
--
********************
Is there anything I can grab off the builder to help?
On 16 Jul 2012, at 1:13 PM, Jim Grosbach wrote:
> Hi Alexander,
>
> This test is failing on i386 (32-bit) Darwin:
>
>> /Users/buildslave/zorg/buildbot/smooshlab/slave-0.8/build.apple-clang-x86_64-darwin10-R/clang.src/src/tools/clang/test/Tooling/clang-ast-dump.cpp:3:11: error: expected string not found in input
>> // CHECK: <CXXMethod ptr="0x{{[0-9a-f]+}}" name="theMethod" prototype="true">
>> ^
>
>
> Any idea why that would be? It's not obvious to me what's going wrong.
>
> -Jim
>
> On Jul 16, 2012, at 5:46 AM, Alexander Kornienko <alexfh at google.com> wrote:
>
>> Author: alexfh
>> Date: Mon Jul 16 07:46:48 2012
>> New Revision: 160265
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=160265&view=rev
>> Log:
>> The new clang-ast-dump tool for selective AST dumping. Moved common command-line tool stuff to CommandLineClangTool
>>
>> Added:
>> cfe/trunk/include/clang/Tooling/CommandLineClangTool.h
>> cfe/trunk/lib/Tooling/CommandLineClangTool.cpp
>> cfe/trunk/test/Tooling/clang-ast-dump.cpp
>> cfe/trunk/tools/clang-ast-dump/
>> cfe/trunk/tools/clang-ast-dump/CMakeLists.txt
>> cfe/trunk/tools/clang-ast-dump/ClangASTDump.cpp
>> cfe/trunk/tools/clang-ast-dump/Makefile
>> Modified:
>> cfe/trunk/lib/Tooling/CMakeLists.txt
>> cfe/trunk/test/CMakeLists.txt
>> cfe/trunk/tools/CMakeLists.txt
>> cfe/trunk/tools/Makefile
>> cfe/trunk/tools/clang-check/ClangCheck.cpp
>>
>> Added: cfe/trunk/include/clang/Tooling/CommandLineClangTool.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Tooling/CommandLineClangTool.h?rev=160265&view=auto
>> ==============================================================================
>> --- cfe/trunk/include/clang/Tooling/CommandLineClangTool.h (added)
>> +++ cfe/trunk/include/clang/Tooling/CommandLineClangTool.h Mon Jul 16 07:46:48 2012
>> @@ -0,0 +1,80 @@
>> +//===- 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
>>
>> Modified: cfe/trunk/lib/Tooling/CMakeLists.txt
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/CMakeLists.txt?rev=160265&r1=160264&r2=160265&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Tooling/CMakeLists.txt (original)
>> +++ cfe/trunk/lib/Tooling/CMakeLists.txt Mon Jul 16 07:46:48 2012
>> @@ -1,6 +1,7 @@
>> set(LLVM_LINK_COMPONENTS support)
>>
>> add_clang_library(clangTooling
>> + CommandLineClangTool.cpp
>> CompilationDatabase.cpp
>> Refactoring.cpp
>> Tooling.cpp
>>
>> Added: cfe/trunk/lib/Tooling/CommandLineClangTool.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Tooling/CommandLineClangTool.cpp?rev=160265&view=auto
>> ==============================================================================
>> --- cfe/trunk/lib/Tooling/CommandLineClangTool.cpp (added)
>> +++ cfe/trunk/lib/Tooling/CommandLineClangTool.cpp Mon Jul 16 07:46:48 2012
>> @@ -0,0 +1,80 @@
>> +//===--- CommandLineClangTool.cpp - command-line clang tools driver -------===//
>> +//
>> +// 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.
>> +//
>> +//===----------------------------------------------------------------------===//
>> +
>> +#include "clang/Frontend/FrontendActions.h"
>> +#include "clang/Tooling/CommandLineClangTool.h"
>> +#include "clang/Tooling/Tooling.h"
>> +
>> +using namespace clang::tooling;
>> +using namespace llvm;
>> +
>> +static const char *MoreHelpText =
>> + "\n"
>> + "-p <build-path> is used to read a compile command database.\n"
>> + "\n"
>> + "\tFor example, it can be a CMake build directory in which a file named\n"
>> + "\tcompile_commands.json exists (use -DCMAKE_EXPORT_COMPILE_COMMANDS=ON\n"
>> + "\tCMake option to get this output). When no build path is specified,\n"
>> + "\tclang-check will attempt to locate it automatically using all parent\n"
>> + "\tpaths of the first input file. See:\n"
>> + "\thttp://clang.llvm.org/docs/HowToSetupToolingForLLVM.html for an\n"
>> + "\texample of setting up Clang Tooling on a source tree.\n"
>> + "\n"
>> + "<source0> ... specify the paths of source files. These paths are looked\n"
>> + "\tup in the compile command database. If the path of a file is absolute,\n"
>> + "\tit needs to point into CMake's source tree. If the path is relative,\n"
>> + "\tthe current working directory needs to be in the CMake source tree and\n"
>> + "\tthe file must be in a subdirectory of the current working directory.\n"
>> + "\t\"./\" prefixes in the relative files will be automatically removed,\n"
>> + "\tbut the rest of a relative path must be a suffix of a path in the\n"
>> + "\tcompile command database.\n"
>> + "\n";
>> +
>> +CommandLineClangTool::CommandLineClangTool() :
>> + BuildPath("p", cl::desc("Build path"), cl::Optional),
>> + SourcePaths(cl::Positional, cl::desc("<source0> [... <sourceN>]"),
>> + cl::OneOrMore),
>> + MoreHelp(MoreHelpText) {
>> +}
>> +
>> +void CommandLineClangTool::initialize(int argc, const char **argv) {
>> + Compilations.reset(FixedCompilationDatabase::loadFromCommandLine(argc, argv));
>> + cl::ParseCommandLineOptions(argc, argv);
>> + if (!Compilations) {
>> + std::string ErrorMessage;
>> + if (!BuildPath.empty()) {
>> + Compilations.reset(CompilationDatabase::autoDetectFromDirectory(
>> + BuildPath, ErrorMessage));
>> + } else {
>> + Compilations.reset(CompilationDatabase::autoDetectFromSource(
>> + SourcePaths[0], ErrorMessage));
>> + }
>> + if (!Compilations)
>> + llvm::report_fatal_error(ErrorMessage);
>> + }
>> +}
>> +
>> +int CommandLineClangTool::run(FrontendActionFactory *ActionFactory) {
>> + ClangTool Tool(*Compilations, SourcePaths);
>> + return Tool.run(ActionFactory);
>> +}
>>
>> Modified: cfe/trunk/test/CMakeLists.txt
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CMakeLists.txt?rev=160265&r1=160264&r2=160265&view=diff
>> ==============================================================================
>> --- cfe/trunk/test/CMakeLists.txt (original)
>> +++ cfe/trunk/test/CMakeLists.txt Mon Jul 16 07:46:48 2012
>> @@ -31,7 +31,7 @@
>> set(CLANG_TEST_DEPS
>> clang clang-headers
>> c-index-test diagtool arcmt-test c-arcmt-test
>> - clang-check
>> + clang-check clang-ast-dump
>> llvm-dis llc opt FileCheck count not
>> )
>> set(CLANG_TEST_PARAMS
>> @@ -80,7 +80,7 @@
>> COMMENT "Running Clang regression tests"
>> DEPENDS clang clang-headers
>> c-index-test diagtool arcmt-test c-arcmt-test
>> - clang-check
>> + clang-check clang-ast-dump
>> )
>> set_target_properties(check-clang PROPERTIES FOLDER "Clang tests")
>> endif()
>>
>> Added: cfe/trunk/test/Tooling/clang-ast-dump.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Tooling/clang-ast-dump.cpp?rev=160265&view=auto
>> ==============================================================================
>> --- cfe/trunk/test/Tooling/clang-ast-dump.cpp (added)
>> +++ cfe/trunk/test/Tooling/clang-ast-dump.cpp Mon Jul 16 07:46:48 2012
>> @@ -0,0 +1,22 @@
>> +// RUN: clang-ast-dump "%t/test.cpp" -f test_namespace::TheClass::theMethod -- -c 2>&1|FileCheck %s
>> +// FIXME: Make the above easier.
>> +
>> +// CHECK: <CXXMethod ptr="0x{{[0-9a-f]+}}" name="theMethod" prototype="true">
>> +// CHECK: <ParmVar ptr="0x{{[0-9a-f]+}}" name="x" initstyle="c">
>> +// CHECK: (CompoundStmt
>> +// CHECK-NEXT: (ReturnStmt
>> +// CHECK-NEXT: (BinaryOperator
>> +
>> +namespace test_namespace {
>> +
>> +class TheClass {
>> +public:
>> + int theMethod(int x) {
>> + return x + x;
>> + }
>> +};
>> +
>> +}
>> +
>> +// FIXME: This is incompatible to -fms-compatibility.
>> +// XFAIL: win32
>>
>> Modified: cfe/trunk/tools/CMakeLists.txt
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/CMakeLists.txt?rev=160265&r1=160264&r2=160265&view=diff
>> ==============================================================================
>> --- cfe/trunk/tools/CMakeLists.txt (original)
>> +++ cfe/trunk/tools/CMakeLists.txt Mon Jul 16 07:46:48 2012
>> @@ -5,3 +5,4 @@
>> add_subdirectory(diagtool)
>> add_subdirectory(driver)
>> add_subdirectory(clang-check)
>> +add_subdirectory(clang-ast-dump)
>>
>> Modified: cfe/trunk/tools/Makefile
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/Makefile?rev=160265&r1=160264&r2=160265&view=diff
>> ==============================================================================
>> --- cfe/trunk/tools/Makefile (original)
>> +++ cfe/trunk/tools/Makefile Mon Jul 16 07:46:48 2012
>> @@ -9,7 +9,7 @@
>>
>> CLANG_LEVEL := ..
>> DIRS := driver libclang c-index-test arcmt-test c-arcmt-test diagtool \
>> - clang-check
>> + clang-check clang-ast-dump
>>
>> include $(CLANG_LEVEL)/../../Makefile.config
>>
>>
>> Added: cfe/trunk/tools/clang-ast-dump/CMakeLists.txt
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-ast-dump/CMakeLists.txt?rev=160265&view=auto
>> ==============================================================================
>> --- cfe/trunk/tools/clang-ast-dump/CMakeLists.txt (added)
>> +++ cfe/trunk/tools/clang-ast-dump/CMakeLists.txt Mon Jul 16 07:46:48 2012
>> @@ -0,0 +1,8 @@
>> +add_clang_executable(clang-ast-dump
>> + ClangASTDump.cpp
>> + )
>> +
>> +target_link_libraries(clang-ast-dump
>> + clangTooling
>> + clangBasic
>> + )
>>
>> Added: cfe/trunk/tools/clang-ast-dump/ClangASTDump.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-ast-dump/ClangASTDump.cpp?rev=160265&view=auto
>> ==============================================================================
>> --- cfe/trunk/tools/clang-ast-dump/ClangASTDump.cpp (added)
>> +++ cfe/trunk/tools/clang-ast-dump/ClangASTDump.cpp Mon Jul 16 07:46:48 2012
>> @@ -0,0 +1,141 @@
>> +//===- tools/clang-ast-dump/ClangASTDump.cpp - Clang AST Dump tool --------===//
>> +//
>> +// The LLVM Compiler Infrastructure
>> +//
>> +// This file is distributed under the University of Illinois Open Source
>> +// License. See LICENSE.TXT for details.
>> +//
>> +//===----------------------------------------------------------------------===//
>> +//
>> +// This file implements a clang-ast-dump tool that dumps specified parts
>> +// of an AST of a number of translation units.
>> +//
>> +// Run with '-help' for details.
>> +//
>> +// This tool uses the Clang Tooling infrastructure, see
>> +// http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html
>> +// for details on setting it up with LLVM source tree.
>> +//
>> +//===----------------------------------------------------------------------===//
>> +
>> +#include "llvm/Support/CommandLine.h"
>> +#include "clang/AST/ASTContext.h"
>> +#include "clang/AST/ASTConsumer.h"
>> +#include "clang/AST/RecursiveASTVisitor.h"
>> +#include "clang/Frontend/FrontendActions.h"
>> +#include "clang/Tooling/CommandLineClangTool.h"
>> +#include "clang/Tooling/Tooling.h"
>> +
>> +using namespace clang::tooling;
>> +using namespace llvm;
>> +
>> +cl::opt<std::string> FilterString(
>> + "f",
>> + cl::desc("Filter string"),
>> + cl::Optional);
>> +
>> +cl::opt<bool> ListAll(
>> + "l",
>> + cl::desc("List all filterable nodes"),
>> + cl::init(false),
>> + cl::Optional);
>> +
>> +static const char *MoreHelpText =
>> + "-f <filter-string> can be used to dump only AST declaration nodes having\n"
>> + "\ta certain substring in a qualified name.\n"
>> + "\n"
>> + "-l \tlists qualified names of all filterable declaration nodes.\n"
>> + "\n";
>> +
>> +namespace {
>> +
>> +using namespace clang;
>> +
>> +class SelectiveDumpVisitor :
>> + public RecursiveASTVisitor<SelectiveDumpVisitor> {
>> + typedef RecursiveASTVisitor<SelectiveDumpVisitor> base;
>> +public:
>> + SelectiveDumpVisitor(const std::string &FilterString, bool ListAll)
>> + : FilterString(FilterString), ListAll(ListAll) {}
>> +
>> + ASTConsumer* newASTConsumer() {
>> + return new DumpConsumer(this);
>> + }
>> +
>> + bool shouldWalkTypesOfTypeLocs() const { return false; }
>> +
>> + void Run(TranslationUnitDecl *D) {
>> + if (ListAll) {
>> + llvm::outs().changeColor(llvm::raw_ostream::BLUE) <<
>> + "Listing all filterable nodes:\n";
>> + llvm::outs().resetColor();
>> + TraverseDecl(D);
>> + return;
>> + }
>> +
>> + if (FilterString.empty()) {
>> + llvm::outs().changeColor(llvm::raw_ostream::BLUE) <<
>> + "Dumping translation unit:\n";
>> + llvm::outs().resetColor();
>> + D->dumpXML(llvm::outs());
>> + return;
>> + }
>> +
>> + TraverseDecl(D);
>> + }
>> +
>> + bool TraverseDecl(Decl *D) {
>> + if (ListAll) {
>> + std::string Name = getName(D);
>> + if (!Name.empty())
>> + llvm::outs() << Name << "\n";
>> + return base::TraverseDecl(D);
>> + }
>> +
>> + if (filterMatches(D)) {
>> + llvm::outs().changeColor(llvm::raw_ostream::BLUE) <<
>> + "Dumping " << getName(D) << ":\n";
>> + llvm::outs().resetColor();
>> + D->dumpXML(llvm::outs());
>> + return true;
>> + }
>> + return base::TraverseDecl(D);
>> + }
>> +
>> +private:
>> + std::string getName(Decl *D) {
>> + if (isa<NamedDecl>(D))
>> + return cast<NamedDecl>(D)->getQualifiedNameAsString();
>> + return "";
>> + }
>> + bool filterMatches(Decl *D) {
>> + return getName(D).find(FilterString) != std::string::npos;
>> + }
>> +
>> + class DumpConsumer : public ASTConsumer {
>> + public:
>> + DumpConsumer(SelectiveDumpVisitor *Visitor) : Visitor(Visitor) {}
>> +
>> + virtual void HandleTranslationUnit(ASTContext &Context) {
>> + Visitor->Context = &Context;
>> + Visitor->Run(Context.getTranslationUnitDecl());
>> + }
>> +
>> + private:
>> + SelectiveDumpVisitor *Visitor;
>> + };
>> +
>> + ASTContext *Context;
>> + std::string FilterString;
>> + bool ListAll;
>> +};
>> +
>> +} // namespace
>> +
>> +int main(int argc, const char **argv) {
>> + CommandLineClangTool Tool;
>> + cl::extrahelp MoreHelp(MoreHelpText);
>> + Tool.initialize(argc, argv);
>> + SelectiveDumpVisitor Dumper(FilterString, ListAll);
>> + return Tool.run(newFrontendActionFactory(&Dumper));
>> +}
>>
>> Added: cfe/trunk/tools/clang-ast-dump/Makefile
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-ast-dump/Makefile?rev=160265&view=auto
>> ==============================================================================
>> --- cfe/trunk/tools/clang-ast-dump/Makefile (added)
>> +++ cfe/trunk/tools/clang-ast-dump/Makefile Mon Jul 16 07:46:48 2012
>> @@ -0,0 +1,23 @@
>> +##===- tools/clang-check/Makefile --------------------------*- Makefile -*-===##
>> +#
>> +# The LLVM Compiler Infrastructure
>> +#
>> +# This file is distributed under the University of Illinois Open Source
>> +# License. See LICENSE.TXT for details.
>> +#
>> +##===----------------------------------------------------------------------===##
>> +
>> +CLANG_LEVEL := ../..
>> +
>> +TOOLNAME = clang-ast-dump
>> +NO_INSTALL = 1
>> +
>> +# No plugins, optimize startup time.
>> +TOOL_NO_EXPORTS = 1
>> +
>> +LINK_COMPONENTS := support mc
>> +USEDLIBS = clangFrontend.a clangSerialization.a clangDriver.a \
>> + clangTooling.a clangParse.a clangSema.a clangAnalysis.a \
>> + clangEdit.a clangAST.a clangLex.a clangBasic.a
>> +
>> +include $(CLANG_LEVEL)/Makefile
>>
>> Modified: cfe/trunk/tools/clang-check/ClangCheck.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-check/ClangCheck.cpp?rev=160265&r1=160264&r2=160265&view=diff
>> ==============================================================================
>> --- cfe/trunk/tools/clang-check/ClangCheck.cpp (original)
>> +++ cfe/trunk/tools/clang-check/ClangCheck.cpp Mon Jul 16 07:46:48 2012
>> @@ -1,4 +1,4 @@
>> -//===- examples/Tooling/ClangCheck.cpp - Clang check tool -----------------===//
>> +//===- tools/clang-check/ClangCheck.cpp - Clang check tool ----------------===//
>> //
>> // The LLVM Compiler Infrastructure
>> //
>> @@ -10,75 +10,37 @@
>> // This file implements a clang-check tool that runs the
>> // clang::SyntaxOnlyAction over a number of translation units.
>> //
>> +// This tool uses the Clang Tooling infrastructure, see
>> +// http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html
>> +// for details on setting it up with LLVM source tree.
>> +//
>> //===----------------------------------------------------------------------===//
>>
>> #include "llvm/Support/CommandLine.h"
>> #include "clang/Frontend/FrontendActions.h"
>> -#include "clang/Tooling/CompilationDatabase.h"
>> +#include "clang/Tooling/CommandLineClangTool.h"
>> #include "clang/Tooling/Tooling.h"
>>
>> using namespace clang::tooling;
>> using namespace llvm;
>>
>> -cl::opt<std::string> BuildPath(
>> - "p",
>> - cl::desc("<build-path>"),
>> - cl::Optional);
>> -
>> -cl::list<std::string> SourcePaths(
>> - cl::Positional,
>> - cl::desc("<source0> [... <sourceN>]"),
>> - cl::OneOrMore);
>> -
>> -static cl::extrahelp MoreHelp(
>> - "\n"
>> - "<build-path> is used to read a compile command database.\n"
>> - "\n"
>> - "For example, it can be a CMake build directory in which a file named\n"
>> - "compile_commands.json exists (use -DCMAKE_EXPORT_COMPILE_COMMANDS=ON\n"
>> - "CMake option to get this output). When no build path is specified,\n"
>> - "clang-check will attempt to locate it automatically using all parent\n"
>> - "paths of the first input file.\n"
>> - "\n"
>> - "<source0> ... specify the paths of source files. These paths are looked\n"
>> - "up in the compile command database. If the path of a file is absolute,\n"
>> - "it needs to point into CMake's source tree. If the path is relative,\n"
>> - "the current working directory needs to be in the CMake source tree and\n"
>> - "the file must be in a subdirectory of the current working directory.\n"
>> - "\"./\" prefixes in the relative files will be automatically removed,\n"
>> - "but the rest of a relative path must be a suffix of a path in the\n"
>> - "compile command database.\n"
>> - "\n"
>> - "For example, to use clang-check on all files in a subtree of the source\n"
>> - "tree, use:\n"
>> - "\n"
>> - " find path/in/subtree -name '*.cpp'|xargs clang-check\n"
>> +static const char *MoreHelpText =
>> + "\tFor example, to run clang-check on all files in a subtree of the\n"
>> + "\tsource tree, use:\n"
>> "\n"
>> - "or using a specific build path:\n"
>> + "\t find path/in/subtree -name '*.cpp'|xargs clang-check\n"
>> "\n"
>> - " find path/in/subtree -name '*.cpp'|xargs clang-check -p build/path\n"
>> + "\tor using a specific build path:\n"
>> "\n"
>> - "Note, that path/in/subtree and current directory should follow the\n"
>> - "rules described above.\n"
>> + "\t find path/in/subtree -name '*.cpp'|xargs clang-check -p build/path\n"
>> "\n"
>> -);
>> + "\tNote, that path/in/subtree and current directory should follow the\n"
>> + "\trules described above.\n"
>> + "\n";
>>
>> int main(int argc, const char **argv) {
>> - llvm::OwningPtr<CompilationDatabase> Compilations(
>> - FixedCompilationDatabase::loadFromCommandLine(argc, argv));
>> - cl::ParseCommandLineOptions(argc, argv);
>> - if (!Compilations) {
>> - std::string ErrorMessage;
>> - if (!BuildPath.empty()) {
>> - Compilations.reset(
>> - CompilationDatabase::autoDetectFromDirectory(BuildPath, ErrorMessage));
>> - } else {
>> - Compilations.reset(CompilationDatabase::autoDetectFromSource(
>> - SourcePaths[0], ErrorMessage));
>> - }
>> - if (!Compilations)
>> - llvm::report_fatal_error(ErrorMessage);
>> - }
>> - ClangTool Tool(*Compilations, SourcePaths);
>> + CommandLineClangTool Tool;
>> + cl::extrahelp MoreHelp(MoreHelpText);
>> + Tool.initialize(argc, argv);
>> return Tool.run(newFrontendActionFactory<clang::SyntaxOnlyAction>());
>> }
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
-David
More information about the cfe-commits
mailing list