13 #include "llvm/ADT/Triple.h"
34 static llvm::SmallVector<std::string, 2>
36 llvm::SmallVector<std::string, 2> paths;
37 if (!triple.str().empty()) {
38 paths.push_back(
"/usr/include/" + triple.str());
39 if (!triple.getArchName().empty() ||
40 triple.getOSAndEnvironmentName().empty())
41 paths.push_back((
"/usr/include/" + triple.getArchName() +
"-" +
42 triple.getOSAndEnvironmentName())
50 static llvm::Optional<llvm::StringRef>
53 return llvm::NoneType();
54 size_t pos = path_to_file.find(pattern);
55 if (pos == llvm::StringRef::npos)
56 return llvm::NoneType();
58 return path_to_file.substr(0, pos + pattern.size());
62 const llvm::Triple &triple) {
63 using namespace llvm::sys::path;
66 llvm::StringRef posix_dir(dir_buffer);
69 static llvm::Regex libcpp_regex(R
"regex(/c[+][+]/v[0-9]/)regex");
73 if (libcpp_regex.match(f.
GetPath()) &&
74 parent_path(posix_dir, Style::posix).endswith(
"c++")) {
77 if (triple.str().empty())
80 posix_dir.consume_back(
"c++/v1");
83 (posix_dir + triple.str() +
"/c++/v1").str());
86 llvm::Optional<llvm::StringRef> inc_path;
101 llvm::SmallString<256> result(lhs);
102 llvm::sys::path::append(result, rhs);
113 const std::vector<std::string> files_to_check = {
125 for (llvm::StringRef file_to_check : files_to_check) {
134 const FileSpecList &support_files,
const llvm::Triple &triple) {
136 bool error = !llvm::all_of(support_files,
138 this, std::placeholders::_1, triple));
143 llvm::SmallString<256> resource_dir;