diff --git a/llvm/test/CMakeLists.txt b/llvm/test/CMakeLists.txt --- a/llvm/test/CMakeLists.txt +++ b/llvm/test/CMakeLists.txt @@ -131,7 +131,7 @@ llvm-strip llvm-symbolizer llvm-tblgen - llvm-tapi-diff + llvm-readtapi llvm-tli-checker llvm-undname llvm-windres diff --git a/llvm/test/lit.cfg.py b/llvm/test/lit.cfg.py --- a/llvm/test/lit.cfg.py +++ b/llvm/test/lit.cfg.py @@ -225,7 +225,7 @@ "llvm-strings", "llvm-strip", "llvm-tblgen", - "llvm-tapi-diff", + "llvm-readtapi", "llvm-undname", "llvm-windres", "llvm-c-test", diff --git a/llvm/test/tools/llvm-tapi-diff/Inputs/macho.yaml b/llvm/test/tools/llvm-readtapi/Inputs/macho.yaml rename from llvm/test/tools/llvm-tapi-diff/Inputs/macho.yaml rename to llvm/test/tools/llvm-readtapi/Inputs/macho.yaml diff --git a/llvm/test/tools/llvm-tapi-diff/Inputs/v4A.tbd b/llvm/test/tools/llvm-readtapi/Inputs/v4A.tbd rename from llvm/test/tools/llvm-tapi-diff/Inputs/v4A.tbd rename to llvm/test/tools/llvm-readtapi/Inputs/v4A.tbd diff --git a/llvm/test/tools/llvm-tapi-diff/Inputs/v4B.tbd b/llvm/test/tools/llvm-readtapi/Inputs/v4B.tbd rename from llvm/test/tools/llvm-tapi-diff/Inputs/v4B.tbd rename to llvm/test/tools/llvm-readtapi/Inputs/v4B.tbd diff --git a/llvm/test/tools/llvm-tapi-diff/Inputs/v4C.tbd b/llvm/test/tools/llvm-readtapi/Inputs/v4C.tbd rename from llvm/test/tools/llvm-tapi-diff/Inputs/v4C.tbd rename to llvm/test/tools/llvm-readtapi/Inputs/v4C.tbd diff --git a/llvm/test/tools/llvm-tapi-diff/Inputs/v4D.tbd b/llvm/test/tools/llvm-readtapi/Inputs/v4D.tbd rename from llvm/test/tools/llvm-tapi-diff/Inputs/v4D.tbd rename to llvm/test/tools/llvm-readtapi/Inputs/v4D.tbd diff --git a/llvm/test/tools/llvm-tapi-diff/Inputs/v4E.tbd b/llvm/test/tools/llvm-readtapi/Inputs/v4E.tbd rename from llvm/test/tools/llvm-tapi-diff/Inputs/v4E.tbd rename to llvm/test/tools/llvm-readtapi/Inputs/v4E.tbd diff --git a/llvm/test/tools/llvm-tapi-diff/incorrect-format.test b/llvm/test/tools/llvm-readtapi/compare-incorrect-format.test rename from llvm/test/tools/llvm-tapi-diff/incorrect-format.test rename to llvm/test/tools/llvm-readtapi/compare-incorrect-format.test --- a/llvm/test/tools/llvm-tapi-diff/incorrect-format.test +++ b/llvm/test/tools/llvm-readtapi/compare-incorrect-format.test @@ -1,6 +1,6 @@ ; RUN: mkdir -p %t ; RUN: yaml2obj %S/Inputs/macho.yaml -o %t/macho.dylib -; RUN: not llvm-tapi-diff %S/Inputs/v4A.tbd %t/macho.dylib 2>&1 | FileCheck %s +; RUN: not llvm-readtapi --compare %S/Inputs/v4A.tbd %t/macho.dylib 2>&1 | FileCheck %s ; CHECK: error: {{.*}}macho.dylib' unsupported file format ; CHECK-NOT: error: diff --git a/llvm/test/tools/llvm-tapi-diff/same-num-inlines.test b/llvm/test/tools/llvm-readtapi/compare-inlines.test rename from llvm/test/tools/llvm-tapi-diff/same-num-inlines.test rename to llvm/test/tools/llvm-readtapi/compare-inlines.test --- a/llvm/test/tools/llvm-tapi-diff/same-num-inlines.test +++ b/llvm/test/tools/llvm-readtapi/compare-inlines.test @@ -1,4 +1,4 @@ -; RUN: not llvm-tapi-diff %S/Inputs/v4B.tbd %S/Inputs/v4E.tbd 2>&1 | FileCheck %s +; RUN: not llvm-readtapi --compare %S/Inputs/v4B.tbd %S/Inputs/v4E.tbd 2>&1 | FileCheck %s ; CHECK:< {{.*}}/Inputs/v4B.tbd ; CHECK:> {{.*}}/Inputs/v4E.tbd diff --git a/llvm/test/tools/llvm-tapi-diff/left-single-inline.test b/llvm/test/tools/llvm-readtapi/compare-left-single-inline.test rename from llvm/test/tools/llvm-tapi-diff/left-single-inline.test rename to llvm/test/tools/llvm-readtapi/compare-left-single-inline.test --- a/llvm/test/tools/llvm-tapi-diff/left-single-inline.test +++ b/llvm/test/tools/llvm-readtapi/compare-left-single-inline.test @@ -1,4 +1,4 @@ -; RUN: not llvm-tapi-diff %S/Inputs/v4A.tbd %S/Inputs/v4B.tbd 2>&1 | FileCheck %s +; RUN: not llvm-readtapi --compare %S/Inputs/v4A.tbd %S/Inputs/v4B.tbd 2>&1 | FileCheck %s ; CHECK:< {{.*}}/Inputs/v4A.tbd ; CHECK:> {{.*}}/Inputs/v4B.tbd diff --git a/llvm/test/tools/llvm-readtapi/compare-matching-tapi-files.test b/llvm/test/tools/llvm-readtapi/compare-matching-tapi-files.test new file mode 100644 --- /dev/null +++ b/llvm/test/tools/llvm-readtapi/compare-matching-tapi-files.test @@ -0,0 +1,4 @@ +; RUN: llvm-readtapi --compare %S/Inputs/v4A.tbd %S/Inputs/v4A.tbd 2>&1 | FileCheck %s --allow-empty + +; CHECK-NOT: error: +; CHECK-NOT: warning: diff --git a/llvm/test/tools/llvm-tapi-diff/mismatched-number-of-inlines.test b/llvm/test/tools/llvm-readtapi/compare-mismatched-inlines.test rename from llvm/test/tools/llvm-tapi-diff/mismatched-number-of-inlines.test rename to llvm/test/tools/llvm-readtapi/compare-mismatched-inlines.test --- a/llvm/test/tools/llvm-tapi-diff/mismatched-number-of-inlines.test +++ b/llvm/test/tools/llvm-readtapi/compare-mismatched-inlines.test @@ -1,4 +1,4 @@ -; RUN: not llvm-tapi-diff %S/Inputs/v4B.tbd %S/Inputs/v4D.tbd 2>&1 | FileCheck %s +; RUN: not llvm-readtapi --compare %S/Inputs/v4B.tbd %S/Inputs/v4D.tbd 2>&1 | FileCheck %s ; CHECK:< {{.*}}/Inputs/v4B.tbd ; CHECK:> {{.*}}/Inputs/v4D.tbd diff --git a/llvm/test/tools/llvm-readtapi/compare-misspelled-files.test b/llvm/test/tools/llvm-readtapi/compare-misspelled-files.test new file mode 100644 --- /dev/null +++ b/llvm/test/tools/llvm-readtapi/compare-misspelled-files.test @@ -0,0 +1,3 @@ +; RUN: not llvm-readtapi --compare %S/Inputs/v4A.tbd %S/Inputs/v4.tbd 2>&1 | FileCheck -DMSG=%errc_ENOENT %s + +; CHECK: error: {{.*}}v4.tbd' [[MSG]] diff --git a/llvm/test/tools/llvm-tapi-diff/multiple-inlines.test b/llvm/test/tools/llvm-readtapi/compare-multiple-inlines.test rename from llvm/test/tools/llvm-tapi-diff/multiple-inlines.test rename to llvm/test/tools/llvm-readtapi/compare-multiple-inlines.test --- a/llvm/test/tools/llvm-tapi-diff/multiple-inlines.test +++ b/llvm/test/tools/llvm-readtapi/compare-multiple-inlines.test @@ -1,4 +1,4 @@ -; RUN: not llvm-tapi-diff %S/Inputs/v4A.tbd %S/Inputs/v4D.tbd 2>&1 | FileCheck %s +; RUN: not llvm-readtapi --compare %S/Inputs/v4A.tbd %S/Inputs/v4D.tbd 2>&1 | FileCheck %s ; CHECK:< {{.*}}/Inputs/v4A.tbd ; CHECK:> {{.*}}/Inputs/v4D.tbd diff --git a/llvm/test/tools/llvm-tapi-diff/no-inlines.test b/llvm/test/tools/llvm-readtapi/compare-no-inlines.test rename from llvm/test/tools/llvm-tapi-diff/no-inlines.test rename to llvm/test/tools/llvm-readtapi/compare-no-inlines.test --- a/llvm/test/tools/llvm-tapi-diff/no-inlines.test +++ b/llvm/test/tools/llvm-readtapi/compare-no-inlines.test @@ -1,4 +1,4 @@ -; RUN: not llvm-tapi-diff %S/Inputs/v4A.tbd %S/Inputs/v4C.tbd 2>&1 | FileCheck %s +; RUN: not llvm-readtapi --compare %S/Inputs/v4A.tbd %S/Inputs/v4C.tbd 2>&1 | FileCheck %s ; CHECK:< {{.*}}/Inputs/v4A.tbd ; CHECK:> {{.*}}/Inputs/v4C.tbd diff --git a/llvm/test/tools/llvm-tapi-diff/right-single-inlines.test b/llvm/test/tools/llvm-readtapi/compare-right-single-inline.test rename from llvm/test/tools/llvm-tapi-diff/right-single-inlines.test rename to llvm/test/tools/llvm-readtapi/compare-right-single-inline.test --- a/llvm/test/tools/llvm-tapi-diff/right-single-inlines.test +++ b/llvm/test/tools/llvm-readtapi/compare-right-single-inline.test @@ -1,4 +1,4 @@ -; RUN: not llvm-tapi-diff %S/Inputs/v4B.tbd %S/Inputs/v4C.tbd 2>&1 | FileCheck %s +; RUN: not llvm-readtapi --compare %S/Inputs/v4B.tbd %S/Inputs/v4C.tbd 2>&1 | FileCheck %s ; CHECK:< {{.*}}/Inputs/v4B.tbd ; CHECK:> {{.*}}/Inputs/v4C.tbd diff --git a/llvm/test/tools/llvm-tapi-diff/v5.test b/llvm/test/tools/llvm-readtapi/compare-v5.test rename from llvm/test/tools/llvm-tapi-diff/v5.test rename to llvm/test/tools/llvm-readtapi/compare-v5.test --- a/llvm/test/tools/llvm-tapi-diff/v5.test +++ b/llvm/test/tools/llvm-readtapi/compare-v5.test @@ -1,7 +1,7 @@ ; RUN: rm -rf %t ; RUN: split-file %s %t -; RUN: llvm-tapi-diff %t/Simple_v5.tbd %t/Simple_v5.tbd 2>&1 | FileCheck %s --allow-empty -; RUN: llvm-tapi-diff %t/Simple_v5.tbd %t/Simple_v4.tbd 2>&1 | FileCheck %s --allow-empty +; RUN: llvm-readtapi --compare %t/Simple_v5.tbd %t/Simple_v5.tbd 2>&1 | FileCheck %s --allow-empty +; RUN: llvm-readtapi --compare %t/Simple_v5.tbd %t/Simple_v4.tbd 2>&1 | FileCheck %s --allow-empty ; CHECK-NOT: error: ; CHECK-NOT: warning: diff --git a/llvm/test/tools/llvm-tapi-diff/matching-tbd.test b/llvm/test/tools/llvm-tapi-diff/matching-tbd.test deleted file mode 100644 --- a/llvm/test/tools/llvm-tapi-diff/matching-tbd.test +++ /dev/null @@ -1,4 +0,0 @@ -; RUN: llvm-tapi-diff %S/Inputs/v4A.tbd %S/Inputs/v4A.tbd 2>&1 | FileCheck %s --allow-empty - -; CHECK-NOT: error: -; CHECK-NOT: warning: diff --git a/llvm/test/tools/llvm-tapi-diff/misspelled-tbd.test b/llvm/test/tools/llvm-tapi-diff/misspelled-tbd.test deleted file mode 100644 --- a/llvm/test/tools/llvm-tapi-diff/misspelled-tbd.test +++ /dev/null @@ -1,3 +0,0 @@ -; RUN: not llvm-tapi-diff %S/Inputs/v4A.tbd %S/Inputs/v4.tbd 2>&1 | FileCheck -DMSG=%errc_ENOENT %s - -; CHECK: error: {{.*}}v4.tbd' [[MSG]] diff --git a/llvm/tools/llvm-tapi-diff/CMakeLists.txt b/llvm/tools/llvm-readtapi/CMakeLists.txt rename from llvm/tools/llvm-tapi-diff/CMakeLists.txt rename to llvm/tools/llvm-readtapi/CMakeLists.txt --- a/llvm/tools/llvm-tapi-diff/CMakeLists.txt +++ b/llvm/tools/llvm-readtapi/CMakeLists.txt @@ -4,7 +4,7 @@ TextAPI ) -add_llvm_tool(llvm-tapi-diff - llvm-tapi-diff.cpp +add_llvm_tool(llvm-readtapi + llvm-readtapi.cpp DiffEngine.cpp ) diff --git a/llvm/tools/llvm-tapi-diff/DiffEngine.h b/llvm/tools/llvm-readtapi/DiffEngine.h rename from llvm/tools/llvm-tapi-diff/DiffEngine.h rename to llvm/tools/llvm-readtapi/DiffEngine.h diff --git a/llvm/tools/llvm-tapi-diff/DiffEngine.cpp b/llvm/tools/llvm-readtapi/DiffEngine.cpp rename from llvm/tools/llvm-tapi-diff/DiffEngine.cpp rename to llvm/tools/llvm-readtapi/DiffEngine.cpp diff --git a/llvm/tools/llvm-readtapi/llvm-readtapi.cpp b/llvm/tools/llvm-readtapi/llvm-readtapi.cpp new file mode 100644 --- /dev/null +++ b/llvm/tools/llvm-readtapi/llvm-readtapi.cpp @@ -0,0 +1,90 @@ +//===-- llvm-readtapi.cpp - tapi file reader and manipulator -----*- C++-*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +// +// This file defines the command-line driver for llvm-readtapi. +// +//===----------------------------------------------------------------------===// +#include "DiffEngine.h" +#include "llvm/Object/TapiUniversal.h" +#include "llvm/Support/CommandLine.h" +#include "llvm/Support/Error.h" +#include "llvm/Support/InitLLVM.h" +#include "llvm/Support/MemoryBuffer.h" +#include "llvm/Support/WithColor.h" +#include "llvm/Support/raw_ostream.h" +#include + +using namespace llvm; +using namespace MachO; +using namespace object; + +namespace { +cl::OptionCategory TapiCat("llvm-readtapi options"); +cl::OptionCategory CompareCat("llvm-readtapi --compare options"); + +cl::opt InputFileName(cl::Positional, cl::desc(""), + cl::Required, cl::cat(TapiCat)); +cl::opt CompareInputFileName(cl::Positional, + cl::desc(""), + cl::Required, cl::cat(CompareCat)); +enum OutputKind { + Compare, +}; + +cl::opt + Output(cl::desc("choose command action:"), + cl::values(clEnumValN(Compare, "compare", + "compare tapi file for library differences")), + cl::init(OutputKind::Compare), cl::cat(TapiCat)); +} // anonymous namespace + +Expected> convertFileToBinary(std::string &Filename) { + ErrorOr> BufferOrErr = + MemoryBuffer::getFileOrSTDIN(Filename); + if (BufferOrErr.getError()) + return errorCodeToError(BufferOrErr.getError()); + return createBinary(BufferOrErr.get()->getMemBufferRef()); +} + +int main(int Argc, char **Argv) { + InitLLVM X(Argc, Argv); + cl::HideUnrelatedOptions(TapiCat); + cl::ParseCommandLineOptions(Argc, Argv, + "TAPI File Reader and Manipulator Tool"); + + if (Output == OutputKind::Compare) { + if (InputFileName.empty() || CompareInputFileName.empty()) { + cl::PrintHelpMessage(); + return EXIT_FAILURE; + } + + ExitOnError ExitOnErr("error: '" + InputFileName + "' ", + /*DefaultErrorExitCode=*/2); + auto BinLHS = ExitOnErr(convertFileToBinary(InputFileName)); + + TapiUniversal *FileLHS = dyn_cast(BinLHS.get()); + if (!FileLHS) { + ExitOnErr(createStringError(std::errc::executable_format_error, + "unsupported file format")); + } + + ExitOnErr.setBanner("error: '" + CompareInputFileName + "' "); + auto BinRHS = ExitOnErr(convertFileToBinary(CompareInputFileName)); + + TapiUniversal *FileRHS = dyn_cast(BinRHS.get()); + if (!FileRHS) { + ExitOnErr(createStringError(std::errc::executable_format_error, + "unsupported file format")); + } + + raw_ostream &OS = outs(); + return DiffEngine(FileLHS, FileRHS).compareFiles(OS); + } + + return 0; +} diff --git a/llvm/tools/llvm-tapi-diff/llvm-tapi-diff.cpp b/llvm/tools/llvm-tapi-diff/llvm-tapi-diff.cpp deleted file mode 100644 --- a/llvm/tools/llvm-tapi-diff/llvm-tapi-diff.cpp +++ /dev/null @@ -1,74 +0,0 @@ -//===-- llvm-tapi-diff.cpp - tbd comparator command-line driver --*- C++-*-===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// -// -// This file defines the command-line driver for the llvm-tapi difference -// engine. -// -//===----------------------------------------------------------------------===// -#include "DiffEngine.h" -#include "llvm/Object/TapiUniversal.h" -#include "llvm/Support/CommandLine.h" -#include "llvm/Support/Error.h" -#include "llvm/Support/InitLLVM.h" -#include "llvm/Support/MemoryBuffer.h" -#include "llvm/Support/WithColor.h" -#include "llvm/Support/raw_ostream.h" -#include - -using namespace llvm; -using namespace MachO; -using namespace object; - -namespace { -cl::OptionCategory NMCat("llvm-tapi-diff Options"); -cl::opt InputFileNameLHS(cl::Positional, cl::desc(""), - cl::cat(NMCat)); -cl::opt InputFileNameRHS(cl::Positional, cl::desc(""), - cl::cat(NMCat)); -} // anonymous namespace - -Expected> convertFileToBinary(std::string &Filename) { - ErrorOr> BufferOrErr = - MemoryBuffer::getFileOrSTDIN(Filename); - if (BufferOrErr.getError()) - return errorCodeToError(BufferOrErr.getError()); - return createBinary(BufferOrErr.get()->getMemBufferRef()); -} - -int main(int Argc, char **Argv) { - InitLLVM X(Argc, Argv); - cl::HideUnrelatedOptions(NMCat); - cl::ParseCommandLineOptions(Argc, Argv, "Text-based Stubs Comparison Tool"); - if (InputFileNameLHS.empty() || InputFileNameRHS.empty()) { - cl::PrintHelpMessage(); - return EXIT_FAILURE; - } - - ExitOnError ExitOnErr("error: '" + InputFileNameLHS + "' ", - /*DefaultErrorExitCode=*/2); - auto BinLHS = ExitOnErr(convertFileToBinary(InputFileNameLHS)); - - TapiUniversal *FileLHS = dyn_cast(BinLHS.get()); - if (!FileLHS) { - ExitOnErr(createStringError(std::errc::executable_format_error, - "unsupported file format")); - } - - ExitOnErr.setBanner("error: '" + InputFileNameRHS + "' "); - auto BinRHS = ExitOnErr(convertFileToBinary(InputFileNameRHS)); - - TapiUniversal *FileRHS = dyn_cast(BinRHS.get()); - if (!FileRHS) { - ExitOnErr(createStringError(std::errc::executable_format_error, - "unsupported file format")); - } - - raw_ostream &OS = outs(); - - return DiffEngine(FileLHS, FileRHS).compareFiles(OS); -}