[cfe-commits] [clang-tools-extra] r162624 - in /clang-tools-extra/trunk: CMakeLists.txt LICENSE.TXT Makefile README README.txt remove-cstr-calls/Makefile remove-cstr-calls/RemoveCStrCalls.cpp test/Makefile tool-template/CMakeLists.txt tool-template/Makefile tool-template/ToolTemplate.cpp

Sam Panzer espanz at gmail.com
Fri Aug 24 16:29:34 PDT 2012


Author: panzer
Date: Fri Aug 24 18:29:33 2012
New Revision: 162624

URL: http://llvm.org/viewvc/llvm-project?rev=162624&view=rev
Log:
Reverted to correct commit this time.

Added:
    clang-tools-extra/trunk/LICENSE.TXT
    clang-tools-extra/trunk/Makefile
    clang-tools-extra/trunk/README.txt
    clang-tools-extra/trunk/tool-template/CMakeLists.txt
    clang-tools-extra/trunk/tool-template/Makefile
    clang-tools-extra/trunk/tool-template/ToolTemplate.cpp
Removed:
    clang-tools-extra/trunk/README
Modified:
    clang-tools-extra/trunk/CMakeLists.txt
    clang-tools-extra/trunk/remove-cstr-calls/Makefile
    clang-tools-extra/trunk/remove-cstr-calls/RemoveCStrCalls.cpp
    clang-tools-extra/trunk/test/Makefile

Modified: clang-tools-extra/trunk/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/CMakeLists.txt?rev=162624&r1=162623&r2=162624&view=diff
==============================================================================
--- clang-tools-extra/trunk/CMakeLists.txt (original)
+++ clang-tools-extra/trunk/CMakeLists.txt Fri Aug 24 18:29:33 2012
@@ -1,4 +1,5 @@
 add_subdirectory(remove-cstr-calls)
+add_subdirectory(tool-template)
 
 # Add the common testsuite after all the tools.
 add_subdirectory(test)

Added: clang-tools-extra/trunk/LICENSE.TXT
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/LICENSE.TXT?rev=162624&view=auto
==============================================================================
--- clang-tools-extra/trunk/LICENSE.TXT (added)
+++ clang-tools-extra/trunk/LICENSE.TXT Fri Aug 24 18:29:33 2012
@@ -0,0 +1,63 @@
+==============================================================================
+LLVM Release License
+==============================================================================
+University of Illinois/NCSA
+Open Source License
+
+Copyright (c) 2007-2012 University of Illinois at Urbana-Champaign.
+All rights reserved.
+
+Developed by:
+
+    LLVM Team
+
+    University of Illinois at Urbana-Champaign
+
+    http://llvm.org
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal with
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimers.
+
+    * Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimers in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the names of the LLVM Team, University of Illinois at
+      Urbana-Champaign, nor the names of its contributors may be used to
+      endorse or promote products derived from this Software without specific
+      prior written permission.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
+SOFTWARE.
+
+==============================================================================
+The LLVM software contains code written by third parties.  Such software will
+have its own individual LICENSE.TXT file in the directory in which it appears.
+This file will describe the copyrights, license, and restrictions which apply
+to that code.
+
+The disclaimer of warranty in the University of Illinois Open Source License
+applies to all code in the LLVM Distribution, and nothing in any of the
+other licenses gives permission to use the names of the LLVM Team or the
+University of Illinois to endorse or promote products derived from this
+Software.
+
+The following pieces of software have additional or alternate copyrights,
+licenses, and/or restrictions:
+
+Program             Directory
+-------             ---------
+<none yet>
+

Added: clang-tools-extra/trunk/Makefile
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/Makefile?rev=162624&view=auto
==============================================================================
--- clang-tools-extra/trunk/Makefile (added)
+++ clang-tools-extra/trunk/Makefile Fri Aug 24 18:29:33 2012
@@ -0,0 +1,40 @@
+##===- tools/extra/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 := ../..
+
+include $(CLANG_LEVEL)/../../Makefile.config
+
+PARALLEL_DIRS := remove-cstr-calls tool-template
+
+include $(CLANG_LEVEL)/Makefile
+
+###
+# Handle the nested test suite.
+
+ifneq ($(PROJ_SRC_ROOT),$(PROJ_OBJ_ROOT))
+$(RecursiveTargets)::
+	$(Verb) for dir in test; do \
+	  if [ -f $(PROJ_SRC_DIR)/$${dir}/Makefile ] && [ ! -f $${dir}/Makefile ]; then \
+	    $(MKDIR) $${dir}; \
+	    $(CP) $(PROJ_SRC_DIR)/$${dir}/Makefile $${dir}/Makefile; \
+	  fi \
+	done
+endif
+
+test::
+	@ $(MAKE) -C test
+
+report::
+	@ $(MAKE) -C test report
+
+clean::
+	@ $(MAKE) -C test clean
+
+.PHONY: test report clean

Removed: clang-tools-extra/trunk/README
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/README?rev=162623&view=auto
==============================================================================
--- clang-tools-extra/trunk/README (original)
+++ clang-tools-extra/trunk/README (removed)
@@ -1,4 +0,0 @@
-This is the future home of the Clang tools "extra" repository, which will hold
-tools above and beyond the core set that are inside Clang's repository.
-
-For now, this is a placeholder README as the repository gets set up.

Added: clang-tools-extra/trunk/README.txt
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/README.txt?rev=162624&view=auto
==============================================================================
--- clang-tools-extra/trunk/README.txt (added)
+++ clang-tools-extra/trunk/README.txt Fri Aug 24 18:29:33 2012
@@ -0,0 +1,22 @@
+//===----------------------------------------------------------------------===//
+// Clang Tools repository
+//===----------------------------------------------------------------------===//
+
+Welcome to the repository of extra Clang Tools.  This repository holds tools
+that are developed as part of the LLVM compiler infrastructure project and the
+Clang frontend.  These tools are kept in a separate "extra" repository to
+allow lighter weight checkouts of the core Clang codebase.
+
+This repository is only intended to be checked out inside of a full LLVM+Clang
+tree, and in the 'tools/extra' subdirectory of the Clang checkout.
+
+All discussion regarding Clang, Clang-based tools, and code in this repository
+should be held using the standard Clang mailing lists:
+  http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
+
+Code review for this tree should take place on the standard Clang patch and
+commit lists:
+  http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
+
+If you find a bug in these tools, please file it in the LLVM bug tracker:
+  http://llvm.org/bugs/

Modified: clang-tools-extra/trunk/remove-cstr-calls/Makefile
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/remove-cstr-calls/Makefile?rev=162624&r1=162623&r2=162624&view=diff
==============================================================================
--- clang-tools-extra/trunk/remove-cstr-calls/Makefile (original)
+++ clang-tools-extra/trunk/remove-cstr-calls/Makefile Fri Aug 24 18:29:33 2012
@@ -1,4 +1,4 @@
-##===- tools/remove-cstr-calls/Makefile --------------------*- Makefile -*-===##
+##===- tools/extra/remove-cstr-calls/Makefile --------------*- Makefile -*-===##
 #
 #                     The LLVM Compiler Infrastructure
 #
@@ -7,7 +7,7 @@
 #
 ##===----------------------------------------------------------------------===##
 
-CLANG_LEVEL := ../..
+CLANG_LEVEL := ../../..
 
 TOOLNAME = remove-cstr-calls
 NO_INSTALL = 1
@@ -15,9 +15,10 @@
 # No plugins, optimize startup time.
 TOOL_NO_EXPORTS = 1
 
-LINK_COMPONENTS := support mc
-USEDLIBS = clangEdit.a clangTooling.a clangFrontend.a clangSerialization.a clangDriver.a \
-           clangRewrite.a clangParse.a clangSema.a clangAnalysis.a \
-					 clangAST.a clangASTMatchers.a clangLex.a clangBasic.a
+include $(CLANG_LEVEL)/../../Makefile.config
+LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser support mc
+USEDLIBS = clangTooling.a clangFrontend.a clangSerialization.a clangDriver.a \
+					 clangRewrite.a clangParse.a clangSema.a clangAnalysis.a \
+					 clangAST.a clangASTMatchers.a clangEdit.a clangLex.a clangBasic.a
 
 include $(CLANG_LEVEL)/Makefile

Modified: clang-tools-extra/trunk/remove-cstr-calls/RemoveCStrCalls.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/remove-cstr-calls/RemoveCStrCalls.cpp?rev=162624&r1=162623&r2=162624&view=diff
==============================================================================
--- clang-tools-extra/trunk/remove-cstr-calls/RemoveCStrCalls.cpp (original)
+++ clang-tools-extra/trunk/remove-cstr-calls/RemoveCStrCalls.cpp Fri Aug 24 18:29:33 2012
@@ -191,8 +191,8 @@
   ast_matchers::MatchFinder Finder;
   FixCStrCall Callback(&Tool.getReplacements());
   Finder.addMatcher(
-      constructorCall(
-          hasDeclaration(method(hasName(StringConstructor))),
+      constructExpr(
+          hasDeclaration(methodDecl(hasName(StringConstructor))),
           argumentCountIs(2),
           // The first argument must have the form x.c_str() or p->c_str()
           // where the method is string::c_str().  We can use the copy
@@ -200,23 +200,23 @@
           // the string object).
           hasArgument(
               0,
-              id("call", memberCall(
-                  callee(id("member", memberExpression())),
-                  callee(method(hasName(StringCStrMethod))),
-                  on(id("arg", expression()))))),
+              id("call", memberCallExpr(
+                  callee(id("member", memberExpr())),
+                  callee(methodDecl(hasName(StringCStrMethod))),
+                  on(id("arg", expr()))))),
           // The second argument is the alloc object which must not be
           // present explicitly.
           hasArgument(
               1,
-              defaultArgument())),
+              defaultArgExpr())),
       &Callback);
   Finder.addMatcher(
-      constructorCall(
+      constructExpr(
           // Implicit constructors of these classes are overloaded
           // wrt. string types and they internally make a StringRef
           // referring to the argument.  Passing a string directly to
           // them is preferred to passing a char pointer.
-          hasDeclaration(method(anyOf(
+          hasDeclaration(methodDecl(anyOf(
               hasName("::llvm::StringRef::StringRef"),
               hasName("::llvm::Twine::Twine")))),
           argumentCountIs(1),
@@ -227,10 +227,10 @@
           // directly.
           hasArgument(
               0,
-              id("call", memberCall(
-                  callee(id("member", memberExpression())),
-                  callee(method(hasName(StringCStrMethod))),
-                  on(id("arg", expression())))))),
+              id("call", memberCallExpr(
+                  callee(id("member", memberExpr())),
+                  callee(methodDecl(hasName(StringCStrMethod))),
+                  on(id("arg", expr())))))),
       &Callback);
   return Tool.run(newFrontendActionFactory(&Finder));
 }

Modified: clang-tools-extra/trunk/test/Makefile
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/Makefile?rev=162624&r1=162623&r2=162624&view=diff
==============================================================================
--- clang-tools-extra/trunk/test/Makefile (original)
+++ clang-tools-extra/trunk/test/Makefile Fri Aug 24 18:29:33 2012
@@ -1,4 +1,13 @@
-CLANG_LEVEL := ..
+##===- tools/extra/test/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 := ../../..
 include $(CLANG_LEVEL)/Makefile
 
 # Test in all immediate subdirectories if unset.
@@ -29,42 +38,25 @@
   LIT_ARGS += "--vg"
 endif
 
-all:: lit.site.cfg Unit/lit.site.cfg
-	@ echo '--- Running clang tests for $(TARGET_TRIPLE) ---'
+all:: lit.site.cfg
+	@ echo '--- Running the Clang extra tools tests for $(TARGET_TRIPLE) ---'
 	@ $(PYTHON) $(LLVM_SRC_ROOT)/utils/lit/lit.py \
 	  $(LIT_ARGS) $(TESTARGS) $(TESTDIRS)
 
 FORCE:
 
 lit.site.cfg: FORCE
-	@echo "Making Clang 'lit.site.cfg' file..."
+	@echo "Making Clang extra tools' 'lit.site.cfg' file..."
 	@$(ECHOPATH) s=@LLVM_SOURCE_DIR@=$(LLVM_SRC_ROOT)=g > lit.tmp
 	@$(ECHOPATH) s=@LLVM_BINARY_DIR@=$(LLVM_OBJ_ROOT)=g >> lit.tmp
 	@$(ECHOPATH) s=@LLVM_TOOLS_DIR@=$(ToolDir)=g >> lit.tmp
 	@$(ECHOPATH) s=@LLVM_LIBS_DIR@=$(LibDir)=g >> lit.tmp
-	@$(ECHOPATH) s=@CLANG_SOURCE_DIR@=$(PROJ_SRC_DIR)/..=g >> lit.tmp
-	@$(ECHOPATH) s=@CLANG_BINARY_DIR@=$(PROJ_OBJ_DIR)/..=g >> lit.tmp
+	@$(ECHOPATH) s=@CLANG_TOOLS_SOURCE_DIR@=$(PROJ_SRC_DIR)/..=g >> lit.tmp
+	@$(ECHOPATH) s=@CLANG_TOOLS_BINARY_DIR@=$(PROJ_OBJ_DIR)/..=g >> lit.tmp
 	@$(ECHOPATH) s=@TARGET_TRIPLE@=$(TARGET_TRIPLE)=g >> lit.tmp
 	@sed -f lit.tmp $(PROJ_SRC_DIR)/lit.site.cfg.in > $@
 	@-rm -f lit.tmp
 
-Unit/lit.site.cfg: FORCE
-	@echo "Making Clang 'Unit/lit.site.cfg' file..."
-	@$(MKDIR) $(dir $@)
-	@$(ECHOPATH) s=@LLVM_SOURCE_DIR@=$(LLVM_SRC_ROOT)=g > unit.tmp
-	@$(ECHOPATH) s=@LLVM_BINARY_DIR@=$(LLVM_OBJ_ROOT)=g >> unit.tmp
-	@$(ECHOPATH) s=@LLVM_TOOLS_DIR@=$(ToolDir)=g >> unit.tmp
-	@$(ECHOPATH) s=@LLVM_LIBS_DIR@=$(LibDir)=g >> unit.tmp
-	@$(ECHOPATH) s=@CLANG_SOURCE_DIR@=$(PROJ_SRC_DIR)/..=g >> unit.tmp
-	@$(ECHOPATH) s=@CLANG_BINARY_DIR@=$(PROJ_OBJ_DIR)/..=g >> unit.tmp
-	@$(ECHOPATH) s=@TARGET_TRIPLE@=$(TARGET_TRIPLE)=g >> unit.tmp
-	@$(ECHOPATH) s=@LLVM_BUILD_MODE@=$(BuildMode)=g >> unit.tmp
-	@$(ECHOPATH) s=@ENABLE_SHARED@=$(ENABLE_SHARED)=g >> unit.tmp
-	@$(ECHOPATH) s=@SHLIBDIR@=$(SharedLibDir)=g >> unit.tmp
-	@$(ECHOPATH) s=@SHLIBPATH_VAR@=$(SHLIBPATH_VAR)=g >> unit.tmp
-	@sed -f unit.tmp $(PROJ_SRC_DIR)/Unit/lit.site.cfg.in > $@
-	@-rm -f unit.tmp
-
 clean::
 	@ find . -name Output | xargs rm -fr
 

Added: clang-tools-extra/trunk/tool-template/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/tool-template/CMakeLists.txt?rev=162624&view=auto
==============================================================================
--- clang-tools-extra/trunk/tool-template/CMakeLists.txt (added)
+++ clang-tools-extra/trunk/tool-template/CMakeLists.txt Fri Aug 24 18:29:33 2012
@@ -0,0 +1,6 @@
+add_clang_executable(tool-template
+  ToolTemplate.cpp
+  )
+
+target_link_libraries(tool-template
+  clangEdit clangTooling clangBasic clangAST clangASTMatchers)

Added: clang-tools-extra/trunk/tool-template/Makefile
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/tool-template/Makefile?rev=162624&view=auto
==============================================================================
--- clang-tools-extra/trunk/tool-template/Makefile (added)
+++ clang-tools-extra/trunk/tool-template/Makefile Fri Aug 24 18:29:33 2012
@@ -0,0 +1,24 @@
+##===-------- tools/toolTemplate/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 = tool-template
+NO_INSTALL = 1
+
+# No plugins, optimize startup time.
+TOOL_NO_EXPORTS = 1
+
+include $(CLANG_LEVEL)/../../Makefile.config
+LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser support mc
+USEDLIBS = clangTooling.a clangFrontend.a clangSerialization.a clangDriver.a \
+					 clangRewrite.a clangParse.a clangSema.a clangAnalysis.a \
+					 clangAST.a clangASTMatchers.a clangEdit.a clangLex.a clangBasic.a
+
+include $(CLANG_LEVEL)/Makefile

Added: clang-tools-extra/trunk/tool-template/ToolTemplate.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/tool-template/ToolTemplate.cpp?rev=162624&view=auto
==============================================================================
--- clang-tools-extra/trunk/tool-template/ToolTemplate.cpp (added)
+++ clang-tools-extra/trunk/tool-template/ToolTemplate.cpp Fri Aug 24 18:29:33 2012
@@ -0,0 +1,106 @@
+//===---- tools/extra/ToolTemplate.cpp - Template for refactoring 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 an empty refactoring tool using the clang tooling.
+//  The goal is to lower the "barrier to entry" for writing refactoring tools.
+//
+//  Usage:
+//  tool-template <cmake-output-dir> <file1> <file2> ...
+//
+//  Where <cmake-output-dir> is a CMake build directory in which a file named
+//  compile_commands.json exists (enable -DCMAKE_EXPORT_COMPILE_COMMANDS in
+//  CMake to get this output).
+//
+//  <file1> ... specify the paths of files in the CMake source tree. This path
+//  is looked up in the compile command database. If the path of a file is
+//  absolute, it needs to point into CMake's source tree. If the path is
+//  relative, the current working directory needs to be in the CMake source
+//  tree and the file must be in a subdirectory of the current working
+//  directory. "./" prefixes in the relative files will be automatically
+//  removed, but the rest of a relative path must be a suffix of a path in
+//  the compile command line database.
+//
+//  For example, to use tool-template on all files in a subtree of the
+//  source tree, use:
+//
+//    /path/in/subtree $ find . -name '*.cpp'|
+//        xargs tool-template /path/to/build
+//
+//===----------------------------------------------------------------------===//
+
+#include "clang/ASTMatchers/ASTMatchers.h"
+#include "clang/ASTMatchers/ASTMatchFinder.h"
+#include "clang/Basic/SourceManager.h"
+#include "clang/Frontend/FrontendActions.h"
+#include "clang/Lex/Lexer.h"
+#include "clang/Tooling/CompilationDatabase.h"
+#include "clang/Tooling/Refactoring.h"
+#include "clang/Tooling/Tooling.h"
+#include "llvm/ADT/OwningPtr.h"
+#include "llvm/Support/CommandLine.h"
+#include "llvm/Support/MemoryBuffer.h"
+
+using namespace clang;
+using namespace clang::ast_matchers;
+using namespace clang::tooling;
+using namespace llvm;
+
+namespace {
+class ToolTemplateCallback : public MatchFinder::MatchCallback {
+ public:
+  ToolTemplateCallback(Replacements *Replace) : Replace(Replace) {}
+
+  virtual void run(const MatchFinder::MatchResult &Result) {
+//  TODO: This routine will get called for each thing that the matchers find.
+//  At this point, you can examine the match, and do whatever you want,
+//  including replacing the matched text with other text
+  (void) Replace; // This to prevent an "unused member variable" warning;
+  }
+
+ private:
+  Replacements *Replace;
+};
+} // end anonymous namespace
+
+// Set up the command line options
+cl::opt<std::string> BuildPath(
+  cl::Positional,
+  cl::desc("<build-path>"));
+
+cl::list<std::string> SourcePaths(
+  cl::Positional,
+  cl::desc("<source0> [... <sourceN>]"),
+  cl::OneOrMore);
+
+int main(int argc, const char **argv) {
+  llvm::OwningPtr<CompilationDatabase> Compilations(
+        FixedCompilationDatabase::loadFromCommandLine(argc, argv));
+  cl::ParseCommandLineOptions(argc, argv);
+  if (!Compilations) {  // Couldn't find a compilation DB from the command line
+    std::string ErrorMessage;
+    Compilations.reset(
+      !BuildPath.empty() ?
+        CompilationDatabase::autoDetectFromDirectory(BuildPath, ErrorMessage) :
+        CompilationDatabase::autoDetectFromSource(SourcePaths[0], ErrorMessage)
+      );
+
+//  Still no compilation DB? - bail.
+    if (!Compilations)
+      llvm::report_fatal_error(ErrorMessage);
+    }
+  RefactoringTool Tool(*Compilations, SourcePaths);
+  ast_matchers::MatchFinder Finder;
+  ToolTemplateCallback Callback(&Tool.getReplacements());
+
+// TODO: Put your matchers here.
+// Use Finder.addMatcher(...) to define the patterns in the AST that you
+// want to match against. You are not limited to just one matcher!
+
+  return Tool.run(newFrontendActionFactory(&Finder));
+}





More information about the cfe-commits mailing list