forked from OSchip/llvm-project
Under certain terrible circumstances (<rdar://problem/10805775>),
top-level frameworks can actually be symlinked over to embedded frameworks, and accessed via the top-level framework's headers. In this case, we need to determine that the framework was *actually* an embedded framework, so we can load the appropriate top-level module. llvm-svn: 164620
This commit is contained in:
parent
984fee5b8f
commit
24ff3bc392
|
@ -905,7 +905,20 @@ Module *HeaderSearch::loadFrameworkModule(StringRef Name,
|
|||
SubmodulePath.push_back(Name);
|
||||
|
||||
// Walk the directory structure to find any enclosing frameworks.
|
||||
#ifdef LLVM_ON_UNIX
|
||||
// Note: as an egregious but useful hack we use the real path here, because
|
||||
// frameworks moving from top-level frameworks to embedded frameworks tend
|
||||
// to be symlinked from the top-level location to the embedded location,
|
||||
// and we need to resolve lookups as if we had found the embedded location.
|
||||
char RealDirName[PATH_MAX];
|
||||
StringRef DirName;
|
||||
if (realpath(Dir->getName(), RealDirName))
|
||||
DirName = RealDirName;
|
||||
else
|
||||
DirName = Dir->getName();
|
||||
#else
|
||||
StringRef DirName = Dir->getName();
|
||||
#endif
|
||||
do {
|
||||
// Get the parent directory name.
|
||||
DirName = llvm::sys::path::parent_path(DirName);
|
||||
|
|
Loading…
Reference in New Issue