diff options
author | Daniel Dunbar <daniel@zuster.org> | 2013-01-30 01:06:03 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2013-01-30 01:06:03 +0000 |
commit | 9cd90a23f75d213a37740555626f18d3bb9e540b (patch) | |
tree | c3cdb20239dd800f39fa5b6a0f282009fc026b34 | |
parent | 59fd63581d6d572f23e82e81a50e0b940c8d1089 (diff) |
[Frontend] Factor AddUnmappedPath() out of AddPath() and simplify.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@173871 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Frontend/InitHeaderSearch.cpp | 48 |
1 files changed, 33 insertions, 15 deletions
diff --git a/lib/Frontend/InitHeaderSearch.cpp b/lib/Frontend/InitHeaderSearch.cpp index 16b5dd25d0..35eec565f7 100644 --- a/lib/Frontend/InitHeaderSearch.cpp +++ b/lib/Frontend/InitHeaderSearch.cpp @@ -52,9 +52,14 @@ public: HasSysroot(!(sysroot.empty() || sysroot == "/")) { } - /// AddPath - Add the specified path to the specified group list. - void AddPath(const Twine &Path, IncludeDirGroup Group, bool isFramework, - bool IgnoreSysRoot = false); + /// AddPath - Add the specified path to the specified group list, prefixing + /// the sysroot if used. + void AddPath(const Twine &Path, IncludeDirGroup Group, bool isFramework); + + /// AddUnmappedPath - Add the specified path to the specified group list, + /// without performing any sysroot remapping. + void AddUnmappedPath(const Twine &Path, IncludeDirGroup Group, + bool isFramework); /// AddSystemHeaderPrefix - Add the specified prefix to the system header /// prefix list. @@ -112,20 +117,29 @@ static bool CanPrefixSysroot(StringRef Path) { } void InitHeaderSearch::AddPath(const Twine &Path, IncludeDirGroup Group, - bool isFramework, bool IgnoreSysRoot) { + bool isFramework) { + // Add the path with sysroot prepended, if desired and this is a system header + // group. + if (HasSysroot) { + SmallString<256> MappedPathStorage; + StringRef MappedPathStr = Path.toStringRef(MappedPathStorage); + if (CanPrefixSysroot(MappedPathStr)) { + AddUnmappedPath(IncludeSysroot + Path, Group, isFramework); + return; + } + } + + AddUnmappedPath(Path, Group, isFramework); +} + +void InitHeaderSearch::AddUnmappedPath(const Twine &Path, IncludeDirGroup Group, + bool isFramework) { assert(!Path.isTriviallyEmpty() && "can't handle empty path here"); - FileManager &FM = Headers.getFileMgr(); - // Compute the actual path, taking into consideration -isysroot. + FileManager &FM = Headers.getFileMgr(); SmallString<256> MappedPathStorage; StringRef MappedPathStr = Path.toStringRef(MappedPathStorage); - // Prepend the sysroot, if desired and this is a system header group. - if (HasSysroot && !IgnoreSysRoot && CanPrefixSysroot(MappedPathStr)) { - MappedPathStorage.clear(); - MappedPathStr = (IncludeSysroot + Path).toStringRef(MappedPathStorage); - } - // Compute the DirectoryLookup type. SrcMgr::CharacteristicKind Type; if (Group == Quoted || Group == Angled || Group == IndexHeaderMap) { @@ -231,7 +245,7 @@ void InitHeaderSearch::AddDefaultCIncludePaths(const llvm::Triple &triple, // supplied path. llvm::sys::Path P(HSOpts.ResourceDir); P.appendComponent("include"); - AddPath(P.str(), ExternCSystem, false, /*IgnoreSysRoot=*/true); + AddUnmappedPath(P.str(), ExternCSystem, false); } // All remaining additions are for system include directories, early exit if @@ -462,7 +476,7 @@ void InitHeaderSearch::AddDefaultIncludePaths(const LangOptions &Lang, // Get foo/lib/c++/v1 P.appendComponent("c++"); P.appendComponent("v1"); - AddPath(P.str(), CXXSystem, false, true); + AddUnmappedPath(P.str(), CXXSystem, false); } } // On Solaris, include the support directory for things like xlocale and @@ -656,7 +670,11 @@ void clang::ApplyHeaderSearchOptions(HeaderSearch &HS, // Add the user defined entries. for (unsigned i = 0, e = HSOpts.UserEntries.size(); i != e; ++i) { const HeaderSearchOptions::Entry &E = HSOpts.UserEntries[i]; - Init.AddPath(E.Path, E.Group, E.IsFramework, E.IgnoreSysRoot); + if (E.IgnoreSysRoot) { + Init.AddUnmappedPath(E.Path, E.Group, E.IsFramework); + } else { + Init.AddPath(E.Path, E.Group, E.IsFramework); + } } Init.AddDefaultIncludePaths(Lang, Triple, HSOpts); |