From e5ad85e52465f288849d7449499f319d349d6c0c Mon Sep 17 00:00:00 2001 From: Robin Voetter Date: Mon, 9 Nov 2020 15:19:37 +0100 Subject: [PATCH] include-what-you-use: rebuild for llvm11 --- ...de-what-you-use-001-llvm11-stringref.patch | 146 ++++++++++++++++++ ...ude-what-you-use-002-clang-astdumper.patch | 54 +++++++ srcpkgs/include-what-you-use/template | 8 +- 3 files changed, 207 insertions(+), 1 deletion(-) create mode 100644 srcpkgs/include-what-you-use/files/include-what-you-use-001-llvm11-stringref.patch create mode 100644 srcpkgs/include-what-you-use/files/include-what-you-use-002-clang-astdumper.patch diff --git a/srcpkgs/include-what-you-use/files/include-what-you-use-001-llvm11-stringref.patch b/srcpkgs/include-what-you-use/files/include-what-you-use-001-llvm11-stringref.patch new file mode 100644 index 00000000000..171dca28e34 --- /dev/null +++ b/srcpkgs/include-what-you-use/files/include-what-you-use-001-llvm11-stringref.patch @@ -0,0 +1,146 @@ +From 53487d209729d5781007dc0fd6076dc585cb3727 Mon Sep 17 00:00:00 2001 +From: Andrea Bocci +Date: Fri, 28 Feb 2020 17:45:03 +0100 +Subject: [PATCH] Add explicit conversion from llvm::StringRef to std::string + +llvm/llvm-project@777180a makes the llvm::StringRef conversion operator +to std::string explicit. +These changes add a call to the str() method to perform the conversion. + +Signed-off-by: Andrea Bocci +--- + iwyu_driver.cc | 2 +- + iwyu_globals.cc | 4 ++-- + iwyu_lexer_utils.cc | 2 +- + iwyu_location_util.h | 2 +- + iwyu_output.cc | 2 +- + iwyu_path_util.cc | 6 +++--- + iwyu_preprocessor.cc | 4 ++-- + 7 files changed, 11 insertions(+), 11 deletions(-) + +diff --git a/iwyu_driver.cc b/iwyu_driver.cc +index bd163144..42fea35b 100644 +--- a/iwyu_driver.cc ++++ b/iwyu_driver.cc +@@ -79,7 +79,7 @@ std::string GetExecutablePath(const char *Argv0) { + } + + const char *SaveStringInSet(std::set &SavedStrings, StringRef S) { +- return SavedStrings.insert(S).first->c_str(); ++ return SavedStrings.insert(S.str()).first->c_str(); + } + + void ExpandArgsFromBuf(const char *Arg, +diff --git a/iwyu_globals.cc b/iwyu_globals.cc +index 0f58b4dc..26998966 100644 +--- a/iwyu_globals.cc ++++ b/iwyu_globals.cc +@@ -293,7 +293,7 @@ static vector ComputeHeaderSearchPaths( + for (auto it = header_search->system_dir_begin(); + it != header_search->system_dir_end(); ++it) { + if (const DirectoryEntry* entry = it->getDir()) { +- const string path = NormalizeDirPath(MakeAbsolutePath(entry->getName())); ++ const string path = NormalizeDirPath(MakeAbsolutePath(entry->getName().str())); + search_path_map[path] = HeaderSearchPath::kSystemPath; + } + } +@@ -303,7 +303,7 @@ static vector ComputeHeaderSearchPaths( + // search_dir_begin()/end() includes both system and user paths. + // If it's a system path, it's already in the map, so everything + // new is a user path. The insert only 'takes' for new entries. +- const string path = NormalizeDirPath(MakeAbsolutePath(entry->getName())); ++ const string path = NormalizeDirPath(MakeAbsolutePath(entry->getName().str())); + search_path_map.insert(make_pair(path, HeaderSearchPath::kUserPath)); + } + } +diff --git a/iwyu_lexer_utils.cc b/iwyu_lexer_utils.cc +index fcea2d28..648c9da8 100644 +--- a/iwyu_lexer_utils.cc ++++ b/iwyu_lexer_utils.cc +@@ -70,7 +70,7 @@ SourceLocation GetLocationAfter( + string GetIncludeNameAsWritten( + SourceLocation include_loc, + const CharacterDataGetterInterface& data_getter) { +- const string data = GetSourceTextUntilEndOfLine(include_loc, data_getter); ++ const string data = GetSourceTextUntilEndOfLine(include_loc, data_getter).str(); + if (data.empty()) + return data; + string::size_type endpos = string::npos; +diff --git a/iwyu_location_util.h b/iwyu_location_util.h +index 3892a424..6f8cf81c 100644 +--- a/iwyu_location_util.h ++++ b/iwyu_location_util.h +@@ -89,7 +89,7 @@ bool IsInScratchSpace(clang::SourceLocation loc); + + inline string GetFilePath(const clang::FileEntry* file) { + return (IsBuiltinFile(file) ? "" : +- NormalizeFilePath(file->getName())); ++ NormalizeFilePath(file->getName().str())); + } + + //------------------------------------------------------------ +diff --git a/iwyu_output.cc b/iwyu_output.cc +index ca145710..8666c26c 100644 +--- a/iwyu_output.cc ++++ b/iwyu_output.cc +@@ -168,7 +168,7 @@ string GetKindName(const clang::TagDecl* tag_decl) { + if (const FakeNamedDecl* fake = FakeNamedDeclIfItIsOne(named_decl)) { + return fake->kind_name(); + } +- return tag_decl->getKindName(); ++ return tag_decl->getKindName().str(); + } + + string GetQualifiedNameAsString(const clang::NamedDecl* named_decl) { +diff --git a/iwyu_path_util.cc b/iwyu_path_util.cc +index ab4fc800..9987ea47 100644 +--- a/iwyu_path_util.cc ++++ b/iwyu_path_util.cc +@@ -134,7 +134,7 @@ string NormalizeFilePath(const string& path) { + std::replace(normalized.begin(), normalized.end(), '\\', '/'); + #endif + +- return normalized.str(); ++ return normalized.str().str(); + } + + string NormalizeDirPath(const string& path) { +@@ -154,14 +154,14 @@ string MakeAbsolutePath(const string& path) { + std::error_code error = llvm::sys::fs::make_absolute(absolute_path); + CHECK_(!error); + +- return absolute_path.str(); ++ return absolute_path.str().str(); + } + + string MakeAbsolutePath(const string& base_path, const string& relative_path) { + llvm::SmallString<128> absolute_path(base_path); + llvm::sys::path::append(absolute_path, relative_path); + +- return absolute_path.str(); ++ return absolute_path.str().str(); + } + + string GetParentPath(const string& path) { +diff --git a/iwyu_preprocessor.cc b/iwyu_preprocessor.cc +index 58e78595..88b93144 100644 +--- a/iwyu_preprocessor.cc ++++ b/iwyu_preprocessor.cc +@@ -313,7 +313,7 @@ void IwyuPreprocessorInfo::ProcessHeadernameDirectivesInFile( + break; + } + const string filename = GetSourceTextUntilEndOfLine(current_loc, +- DefaultDataGetter()); ++ DefaultDataGetter()).str(); + // Use "" or <> based on where the file lives. + string quoted_private_include; + if (IsSystemIncludeFile(GetFilePath(current_loc))) +@@ -332,7 +332,7 @@ void IwyuPreprocessorInfo::ProcessHeadernameDirectivesInFile( + } + + string after_text = GetSourceTextUntilEndOfLine(current_loc, +- DefaultDataGetter()); ++ DefaultDataGetter()).str(); + const string::size_type close_brace_pos = after_text.find('}'); + if (close_brace_pos == string::npos) { + Warn(current_loc, "@headername directive missing a closing brace"); diff --git a/srcpkgs/include-what-you-use/files/include-what-you-use-002-clang-astdumper.patch b/srcpkgs/include-what-you-use/files/include-what-you-use-002-clang-astdumper.patch new file mode 100644 index 00000000000..663a883fa91 --- /dev/null +++ b/srcpkgs/include-what-you-use/files/include-what-you-use-002-clang-astdumper.patch @@ -0,0 +1,54 @@ +From 30549c6931972456d1e09ff5dbeecd258a8df72b Mon Sep 17 00:00:00 2001 +From: Kim Grasman +Date: Thu, 9 Jul 2020 18:47:56 +0200 +Subject: [PATCH] Implement Stmt printing with ASTDumper + +The Clang API changed in commit 473fbc90d1fbf17e so that Stmt::dump +takes an ASTContext instead of a SourceManager. + +Rather than wire a global ASTContext, reimplement PrintableStmt and +PrintStmt to duplicate the most trivial implementations not requiring +ASTContext. + +No functional change. +--- + iwyu_ast_util.cc | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/iwyu_ast_util.cc b/iwyu_ast_util.cc +index d3d4dd1f..b19a11fb 100644 +--- a/iwyu_ast_util.cc ++++ b/iwyu_ast_util.cc +@@ -25,6 +25,7 @@ + #include "llvm/Support/Casting.h" + #include "llvm/Support/raw_ostream.h" + #include "clang/AST/ASTContext.h" ++#include "clang/AST/ASTDumper.h" + #include "clang/AST/CanonicalType.h" + #include "clang/AST/Decl.h" + #include "clang/AST/DeclBase.h" +@@ -46,6 +47,7 @@ namespace clang { + class FileEntry; + } // namespace clang + ++using clang::ASTDumper; + using clang::BlockPointerType; + using clang::CXXConstructExpr; + using clang::CXXConstructorDecl; +@@ -450,12 +452,14 @@ string PrintableDecl(const Decl* decl, bool terse/*=true*/) { + string PrintableStmt(const Stmt* stmt) { + std::string buffer; + raw_string_ostream ostream(buffer); +- stmt->dump(ostream, *GlobalSourceManager()); ++ ASTDumper dumper(ostream, /*ShowColors=*/false); ++ dumper.Visit(stmt); + return ostream.str(); + } + + void PrintStmt(const Stmt* stmt) { +- stmt->dump(*GlobalSourceManager()); // This prints to errs(). ++ ASTDumper dumper(llvm::errs(), /*ShowColors=*/false); ++ dumper.Visit(stmt); + } + + string PrintableType(const Type* type) { diff --git a/srcpkgs/include-what-you-use/template b/srcpkgs/include-what-you-use/template index 22c9d09d091..3811309bdde 100644 --- a/srcpkgs/include-what-you-use/template +++ b/srcpkgs/include-what-you-use/template @@ -1,7 +1,7 @@ # Template file for 'include-what-you-use' pkgname=include-what-you-use version=0.14 -revision=1 +revision=2 wrksrc="${pkgname}" build_style=cmake configure_args="-DIWYU_LLVM_ROOT_PATH=${XBPS_CROSS_BASE}/usr " @@ -15,6 +15,12 @@ distfiles="https://include-what-you-use.org/downloads/${pkgname}-${version}.src. checksum=43184397db57660c32e3298a6b1fd5ab82e808a1f5ab0591d6745f8d256200ef python_version=3 +post_extract() { + for i in ${FILESDIR}/include-what-you-use-*.patch; do + patch -sNp1 -i ${i} + done +} + post_install() { vlicense LICENSE.TXT }