From feed66f3eae5006bb05e6cb34801930fd940daa8 Mon Sep 17 00:00:00 2001 From: Cyndy Ishida Date: Fri, 14 Jun 2024 13:08:27 -0700 Subject: [PATCH] [InstallAPI] Pick up input headers by directory traversal (#94508) Match TAPI behavior and allow input headers to be resolved via a passed directory, which is expected to be a library sitting in a build directory. --- .../clang/Basic/DiagnosticInstallAPIKinds.td | 2 + .../clang/InstallAPI/DirectoryScanner.h | 81 +++++ clang/include/clang/InstallAPI/HeaderFile.h | 13 + clang/include/clang/InstallAPI/Library.h | 65 ++++ clang/include/clang/InstallAPI/MachO.h | 1 + clang/lib/InstallAPI/CMakeLists.txt | 2 + clang/lib/InstallAPI/DirectoryScanner.cpp | 300 ++++++++++++++++++ clang/lib/InstallAPI/Library.cpp | 40 +++ clang/test/InstallAPI/asm.test | 2 +- clang/test/InstallAPI/basic.test | 4 +- clang/test/InstallAPI/binary-attributes.test | 6 +- clang/test/InstallAPI/cpp.test | 4 +- clang/test/InstallAPI/diagnostics-dsym.test | 4 +- .../InstallAPI/directory-scanning-dylib.test | 57 ++++ .../directory-scanning-frameworks.test | 88 +++++ clang/test/InstallAPI/functions.test | 2 +- clang/test/InstallAPI/variables.test | 2 +- clang/tools/clang-installapi/Options.cpp | 51 ++- clang/tools/clang-installapi/Options.h | 3 + 19 files changed, 703 insertions(+), 24 deletions(-) create mode 100644 clang/include/clang/InstallAPI/DirectoryScanner.h create mode 100644 clang/include/clang/InstallAPI/Library.h create mode 100644 clang/lib/InstallAPI/DirectoryScanner.cpp create mode 100644 clang/lib/InstallAPI/Library.cpp create mode 100644 clang/test/InstallAPI/directory-scanning-dylib.test create mode 100644 clang/test/InstallAPI/directory-scanning-frameworks.test diff --git a/clang/include/clang/Basic/DiagnosticInstallAPIKinds.td b/clang/include/clang/Basic/DiagnosticInstallAPIKinds.td index cdf27247602f2b..e10fa71011f304 100644 --- a/clang/include/clang/Basic/DiagnosticInstallAPIKinds.td +++ b/clang/include/clang/Basic/DiagnosticInstallAPIKinds.td @@ -26,6 +26,8 @@ def err_unsupported_environment : Error<"environment '%0' is not supported: '%1' def err_unsupported_os : Error<"os '%0' is not supported: '%1'">; def err_cannot_read_input_list : Error<"could not read %0 input list '%1': %2">; def err_invalid_label: Error<"label '%0' is reserved: use a different label name for -X