Hi,

I noticed the clang-rename unit test has failed compilation and been
excluded. I've made a fix to make it compile, and all the tests are
running okay on my laptop.
This patch separated the clangRename.a and clang-rename application,
allowing the unit test to link to clangRename.a.
Please help review the patch. Thanks!

Regards
Xin Huang
From 4d5b89321ecbdf8f833f8d11edbe71fa697293c3 Mon Sep 17 00:00:00 2001
From: xinhuang <[email protected]>
Date: Tue, 7 Oct 2014 16:14:19 +0800
Subject: [PATCH] [clang-rename] fix unit test

---
 clang-rename/CMakeLists.txt       |   9 +--
 clang-rename/ClangRename.cpp      | 151 --------------------------------------
 clang-rename/Makefile             |  10 +--
 clang-rename/tool/CMakeLists.txt  |  11 +++
 clang-rename/tool/ClangRename.cpp | 151 ++++++++++++++++++++++++++++++++++++++
 clang-rename/tool/Makefile        |  12 +++
 unittests/Makefile                |   2 +-
 unittests/clang-rename/Makefile   |  13 ++--
 8 files changed, 189 insertions(+), 170 deletions(-)
 delete mode 100644 clang-rename/ClangRename.cpp
 create mode 100644 clang-rename/tool/CMakeLists.txt
 create mode 100644 clang-rename/tool/ClangRename.cpp
 create mode 100644 clang-rename/tool/Makefile

diff --git a/clang-rename/CMakeLists.txt b/clang-rename/CMakeLists.txt
index 69962a7..edc479e 100644
--- a/clang-rename/CMakeLists.txt
+++ b/clang-rename/CMakeLists.txt
@@ -1,14 +1,12 @@
 set(LLVM_LINK_COMPONENTS support)
 
-add_clang_executable(clang-rename
-  ClangRename.cpp
+add_clang_library(clangRename
   USRFinder.cpp
   USRFindingAction.cpp
   USRLocFinder.cpp
   RenamingAction.cpp
-  )
 
-target_link_libraries(clang-rename
+  LINK_LIBS
   clangAST
   clangBasic
   clangFrontend
@@ -17,4 +15,5 @@ target_link_libraries(clang-rename
   clangTooling
   )
 
-install(TARGETS clang-rename RUNTIME DESTINATION bin)
+add_subdirectory(tool)
+
diff --git a/clang-rename/ClangRename.cpp b/clang-rename/ClangRename.cpp
deleted file mode 100644
index 077c591..0000000
--- a/clang-rename/ClangRename.cpp
+++ /dev/null
@@ -1,151 +0,0 @@
-//===--- tools/extra/clang-rename/ClangRename.cpp - Clang rename tool -----===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-///
-/// \file
-/// \brief This file implements a clang-rename tool that automatically finds and
-/// renames symbols in C++ code.
-///
-//===----------------------------------------------------------------------===//
-
-#include "USRFindingAction.h"
-#include "RenamingAction.h"
-#include "clang/AST/ASTConsumer.h"
-#include "clang/AST/ASTContext.h"
-#include "clang/Basic/FileManager.h"
-#include "clang/Basic/LangOptions.h"
-#include "clang/Basic/TargetInfo.h"
-#include "clang/Basic/TargetOptions.h"
-#include "clang/Frontend/CommandLineSourceLoc.h"
-#include "clang/Frontend/CompilerInstance.h"
-#include "clang/Frontend/FrontendAction.h"
-#include "clang/Frontend/TextDiagnosticPrinter.h"
-#include "clang/Lex/Preprocessor.h"
-#include "clang/Lex/Lexer.h"
-#include "clang/Parse/Parser.h"
-#include "clang/Parse/ParseAST.h"
-#include "clang/Rewrite/Core/Rewriter.h"
-#include "clang/Tooling/CommonOptionsParser.h"
-#include "clang/Tooling/Refactoring.h"
-#include "clang/Tooling/Tooling.h"
-#include "llvm/ADT/IntrusiveRefCntPtr.h"
-#include "llvm/Support/Host.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-#include <ctype.h>
-#include <string>
-#include <vector>
-
-using namespace llvm;
-
-cl::OptionCategory ClangRenameCategory("Clang-rename options");
-
-static cl::opt<std::string>
-NewName(
-    "new-name",
-    cl::desc("The new name to change the symbol to."),
-    cl::cat(ClangRenameCategory));
-static cl::opt<unsigned>
-SymbolOffset(
-    "offset",
-    cl::desc("Locates the symbol by offset as opposed to <line>:<column>."),
-    cl::cat(ClangRenameCategory));
-static cl::opt<bool>
-Inplace(
-    "i",
-    cl::desc("Overwrite edited <file>s."),
-    cl::cat(ClangRenameCategory));
-static cl::opt<bool>
-PrintName(
-    "pn",
-    cl::desc("Print the found symbol's name prior to renaming to stderr."),
-    cl::cat(ClangRenameCategory));
-static cl::opt<bool>
-PrintLocations(
-    "pl",
-    cl::desc("Print the locations affected by renaming to stderr."),
-    cl::cat(ClangRenameCategory));
-
-#define CLANG_RENAME_VERSION "0.0.1"
-
-static void PrintVersion() {
-  outs() << "clang-rename version " << CLANG_RENAME_VERSION << "\n";
-}
-
-using namespace clang;
-
-const char RenameUsage[] = "A tool to rename symbols in C/C++ code.\n\
-clang-rename renames every occurrence of a symbol found at <offset> in\n\
-<source0>. If -i is specified, the edited files are overwritten to disk.\n\
-Otherwise, the results are written to stdout.\n";
-
-int main(int argc, const char **argv) {
-  cl::SetVersionPrinter(PrintVersion);
-  tooling::CommonOptionsParser OP(argc, argv, ClangRenameCategory, RenameUsage);
-
-  // Check the arguments for correctness.
-
-  if (NewName.empty()) {
-    errs() << "clang-rename: no new name provided.\n\n";
-    cl::PrintHelpMessage();
-    exit(1);
-  }
-
-  // Get the USRs.
-  auto Files = OP.getSourcePathList();
-  tooling::RefactoringTool Tool(OP.getCompilations(), Files);
-  rename::USRFindingAction USRAction(SymbolOffset);
-
-  // Find the USRs.
-  Tool.run(tooling::newFrontendActionFactory(&USRAction).get());
-  const auto &USRs = USRAction.getUSRs();
-  const auto &PrevName = USRAction.getUSRSpelling();
-
-  if (PrevName.empty())
-    // An error should have already been printed.
-    exit(1);
-
-  if (PrintName)
-    errs() << "clang-rename: found name: " << PrevName;
-
-  // Perform the renaming.
-  rename::RenamingAction RenameAction(NewName, PrevName, USRs,
-                                      Tool.getReplacements(), PrintLocations);
-  auto Factory = tooling::newFrontendActionFactory(&RenameAction);
-  int res;
-
-  if (Inplace) {
-    res = Tool.runAndSave(Factory.get());
-  } else {
-    res = Tool.run(Factory.get());
-
-    // Write every file to stdout. Right now we just barf the files without any
-    // indication of which files start where, other than that we print the files
-    // in the same order we see them.
-    LangOptions DefaultLangOptions;
-    IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts =
-        new DiagnosticOptions();
-    TextDiagnosticPrinter DiagnosticPrinter(errs(), &*DiagOpts);
-    DiagnosticsEngine Diagnostics(
-        IntrusiveRefCntPtr<DiagnosticIDs>(new DiagnosticIDs()),
-        &*DiagOpts, &DiagnosticPrinter, false);
-    auto &FileMgr = Tool.getFiles();
-    SourceManager Sources(Diagnostics, FileMgr);
-    Rewriter Rewrite(Sources, DefaultLangOptions);
-
-    Tool.applyAllReplacements(Rewrite);
-    for (const auto &File : Files) {
-      const auto *Entry = FileMgr.getFile(File);
-      auto ID = Sources.translateFile(Entry);
-      Rewrite.getEditBuffer(ID).write(outs());
-    }
-  }
-
-  exit(res);
-}
diff --git a/clang-rename/Makefile b/clang-rename/Makefile
index 8efcc45..d534a78 100644
--- a/clang-rename/Makefile
+++ b/clang-rename/Makefile
@@ -8,13 +8,9 @@
 ##===----------------------------------------------------------------------===##
 
 CLANG_LEVEL := ../../..
-TOOLNAME = clang-rename
+LIBRARYNAME = clangRename
 include $(CLANG_LEVEL)/../../Makefile.config
-LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser bitreader support mc option
-USEDLIBS = clangFrontend.a clangSerialization.a clangDriver.a \
-           clangTooling.a clangParse.a clangSema.a clangIndex.a \
-           clangStaticAnalyzerFrontend.a clangStaticAnalyzerCheckers.a \
-           clangStaticAnalyzerCore.a clangAnalysis.a clangRewriteFrontend.a \
-           clangRewrite.a clangEdit.a clangAST.a clangLex.a clangBasic.a
+
+DIRS = tool
 
 include $(CLANG_LEVEL)/Makefile
diff --git a/clang-rename/tool/CMakeLists.txt b/clang-rename/tool/CMakeLists.txt
new file mode 100644
index 0000000..1dcd237
--- /dev/null
+++ b/clang-rename/tool/CMakeLists.txt
@@ -0,0 +1,11 @@
+add_clang_executable(clang-rename ClangRename.cpp)
+
+target_link_libraries(clang-rename
+  clangAST
+  clangBasic
+  clangFrontend
+  clangIndex
+  clangRewrite
+  clangTooling)
+
+install(TARGETS clang-rename RUNTIME DESTINATION bin)
diff --git a/clang-rename/tool/ClangRename.cpp b/clang-rename/tool/ClangRename.cpp
new file mode 100644
index 0000000..4e971f3
--- /dev/null
+++ b/clang-rename/tool/ClangRename.cpp
@@ -0,0 +1,151 @@
+//===--- tools/extra/clang-rename/ClangRename.cpp - Clang rename tool -----===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// \brief This file implements a clang-rename tool that automatically finds and
+/// renames symbols in C++ code.
+///
+//===----------------------------------------------------------------------===//
+
+#include "../USRFindingAction.h"
+#include "../RenamingAction.h"
+#include "clang/AST/ASTConsumer.h"
+#include "clang/AST/ASTContext.h"
+#include "clang/Basic/FileManager.h"
+#include "clang/Basic/LangOptions.h"
+#include "clang/Basic/TargetInfo.h"
+#include "clang/Basic/TargetOptions.h"
+#include "clang/Frontend/CommandLineSourceLoc.h"
+#include "clang/Frontend/CompilerInstance.h"
+#include "clang/Frontend/FrontendAction.h"
+#include "clang/Frontend/TextDiagnosticPrinter.h"
+#include "clang/Lex/Preprocessor.h"
+#include "clang/Lex/Lexer.h"
+#include "clang/Parse/Parser.h"
+#include "clang/Parse/ParseAST.h"
+#include "clang/Rewrite/Core/Rewriter.h"
+#include "clang/Tooling/CommonOptionsParser.h"
+#include "clang/Tooling/Refactoring.h"
+#include "clang/Tooling/Tooling.h"
+#include "llvm/ADT/IntrusiveRefCntPtr.h"
+#include "llvm/Support/Host.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <ctype.h>
+#include <string>
+#include <vector>
+
+using namespace llvm;
+
+cl::OptionCategory ClangRenameCategory("Clang-rename options");
+
+static cl::opt<std::string>
+NewName(
+    "new-name",
+    cl::desc("The new name to change the symbol to."),
+    cl::cat(ClangRenameCategory));
+static cl::opt<unsigned>
+SymbolOffset(
+    "offset",
+    cl::desc("Locates the symbol by offset as opposed to <line>:<column>."),
+    cl::cat(ClangRenameCategory));
+static cl::opt<bool>
+Inplace(
+    "i",
+    cl::desc("Overwrite edited <file>s."),
+    cl::cat(ClangRenameCategory));
+static cl::opt<bool>
+PrintName(
+    "pn",
+    cl::desc("Print the found symbol's name prior to renaming to stderr."),
+    cl::cat(ClangRenameCategory));
+static cl::opt<bool>
+PrintLocations(
+    "pl",
+    cl::desc("Print the locations affected by renaming to stderr."),
+    cl::cat(ClangRenameCategory));
+
+#define CLANG_RENAME_VERSION "0.0.1"
+
+static void PrintVersion() {
+  outs() << "clang-rename version " << CLANG_RENAME_VERSION << "\n";
+}
+
+using namespace clang;
+
+const char RenameUsage[] = "A tool to rename symbols in C/C++ code.\n\
+clang-rename renames every occurrence of a symbol found at <offset> in\n\
+<source0>. If -i is specified, the edited files are overwritten to disk.\n\
+Otherwise, the results are written to stdout.\n";
+
+int main(int argc, const char **argv) {
+  cl::SetVersionPrinter(PrintVersion);
+  tooling::CommonOptionsParser OP(argc, argv, ClangRenameCategory, RenameUsage);
+
+  // Check the arguments for correctness.
+
+  if (NewName.empty()) {
+    errs() << "clang-rename: no new name provided.\n\n";
+    cl::PrintHelpMessage();
+    exit(1);
+  }
+
+  // Get the USRs.
+  auto Files = OP.getSourcePathList();
+  tooling::RefactoringTool Tool(OP.getCompilations(), Files);
+  rename::USRFindingAction USRAction(SymbolOffset);
+
+  // Find the USRs.
+  Tool.run(tooling::newFrontendActionFactory(&USRAction).get());
+  const auto &USRs = USRAction.getUSRs();
+  const auto &PrevName = USRAction.getUSRSpelling();
+
+  if (PrevName.empty())
+    // An error should have already been printed.
+    exit(1);
+
+  if (PrintName)
+    errs() << "clang-rename: found name: " << PrevName;
+
+  // Perform the renaming.
+  rename::RenamingAction RenameAction(NewName, PrevName, USRs,
+                                      Tool.getReplacements(), PrintLocations);
+  auto Factory = tooling::newFrontendActionFactory(&RenameAction);
+  int res;
+
+  if (Inplace) {
+    res = Tool.runAndSave(Factory.get());
+  } else {
+    res = Tool.run(Factory.get());
+
+    // Write every file to stdout. Right now we just barf the files without any
+    // indication of which files start where, other than that we print the files
+    // in the same order we see them.
+    LangOptions DefaultLangOptions;
+    IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts =
+        new DiagnosticOptions();
+    TextDiagnosticPrinter DiagnosticPrinter(errs(), &*DiagOpts);
+    DiagnosticsEngine Diagnostics(
+        IntrusiveRefCntPtr<DiagnosticIDs>(new DiagnosticIDs()),
+        &*DiagOpts, &DiagnosticPrinter, false);
+    auto &FileMgr = Tool.getFiles();
+    SourceManager Sources(Diagnostics, FileMgr);
+    Rewriter Rewrite(Sources, DefaultLangOptions);
+
+    Tool.applyAllReplacements(Rewrite);
+    for (const auto &File : Files) {
+      const auto *Entry = FileMgr.getFile(File);
+      auto ID = Sources.translateFile(Entry);
+      Rewrite.getEditBuffer(ID).write(outs());
+    }
+  }
+
+  exit(res);
+}
diff --git a/clang-rename/tool/Makefile b/clang-rename/tool/Makefile
new file mode 100644
index 0000000..0f3b962
--- /dev/null
+++ b/clang-rename/tool/Makefile
@@ -0,0 +1,12 @@
+CLANG_LEVEL := ../../../..
+TOOLNAME = clang-rename
+include $(CLANG_LEVEL)/../../Makefile.config
+LINK_COMPONENTS := $(TARGETS_TO_BUILD) asmparser bitreader support mc option
+USEDLIBS = clangRename.a clangFrontend.a clangSerialization.a clangDriver.a \
+           clangTooling.a clangParse.a clangSema.a clangIndex.a \
+           clangStaticAnalyzerFrontend.a clangStaticAnalyzerCheckers.a \
+           clangStaticAnalyzerCore.a clangAnalysis.a clangRewriteFrontend.a \
+           clangRewrite.a clangEdit.a clangAST.a clangLex.a clangBasic.a
+           
+include $(CLANG_LEVEL)/Makefile
+
diff --git a/unittests/Makefile b/unittests/Makefile
index fc781b6..ae5f64a 100644
--- a/unittests/Makefile
+++ b/unittests/Makefile
@@ -10,6 +10,6 @@
 CLANG_LEVEL := ../../..
 include $(CLANG_LEVEL)/../../Makefile.config
 
-PARALLEL_DIRS := clang-apply-replacements clang-modernize clang-query clang-tidy
+PARALLEL_DIRS := clang-apply-replacements clang-modernize clang-query clang-tidy clang-rename
 
 include $(CLANG_LEVEL)/Makefile
diff --git a/unittests/clang-rename/Makefile b/unittests/clang-rename/Makefile
index c86d132..f21ec90 100644
--- a/unittests/clang-rename/Makefile
+++ b/unittests/clang-rename/Makefile
@@ -13,12 +13,13 @@ include $(CLANG_LEVEL)/../../Makefile.config
 TESTNAME = ClangRenameTests
 LINK_COMPONENTS := asmparser bitreader support MC MCParser option \
 		 TransformUtils
-USEDLIBS = clangAnalysis.a clangAST.a clangBasic.a clangDriver.a clangEdit.a \
-	   clangFrontend.a clangFrontendTool.a clangIndex.a clangLex.a \
-	   clangParse.a clangRewrite.a clangRewriteFrontend.a \
-	   clangSerialization.a clangSema.a clangTooling.a
-
+USEDLIBS = clangRename.a clangFrontend.a clangSerialization.a clangDriver.a \
+           clangTooling.a clangParse.a clangSema.a clangIndex.a \
+           clangStaticAnalyzerFrontend.a clangStaticAnalyzerCheckers.a \
+           clangStaticAnalyzerCore.a clangAnalysis.a clangRewriteFrontend.a \
+           clangRewrite.a clangEdit.a clangAST.a clangLex.a clangBasic.a
+ 
 include $(CLANG_LEVEL)/Makefile
 MAKEFILE_UNITTEST_NO_INCLUDE_COMMON := 1
-CPP.Flags += -I(PROJ_SRC_DIR)/../../clang-rename
+CPP.Flags += -I$(PROJ_SRC_DIR)/../../clang-rename
 include $(LLVM_SRC_ROOT)/unittests/Makefile.unittest
-- 
1.9.1

_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to