[Modules] Add Darwin-specific compatibility module map parsing hacks

This preserves backwards compatibility for two hacks in the Darwin
system module map files:

1. The use of 'requires excluded' to make headers non-modular, which
should really be mapped to 'textual' now that we have this feature.

2. Silently removes a bogus cplusplus requirement from IOKit.avc.

Once we start diagnosing missing requirements and headers on
auto-imports these would have broken compatibility with existing Darwin
SDKs.

llvm-svn: 244912
This commit is contained in:
Ben Langmuir
2015-08-13 17:13:33 +00:00
parent a7471795ae
commit 7ff29148ac
7 changed files with 154 additions and 7 deletions

View File

@@ -139,6 +139,15 @@ std::string Module::getFullModuleName() const {
return Result;
}
bool Module::fullModuleNameIs(ArrayRef<StringRef> nameParts) const {
for (const Module *M = this; M; M = M->Parent) {
if (nameParts.empty() || M->Name != nameParts.back())
return false;
nameParts = nameParts.drop_back();
}
return nameParts.empty();
}
Module::DirectoryName Module::getUmbrellaDir() const {
if (Header U = getUmbrellaHeader())
return {"", U.Entry->getDir()};