r173871 - [Frontend] Factor AddUnmappedPath() out of AddPath() and simplify.
Daniel Dunbar
daniel at zuster.org
Tue Jan 29 17:06:04 PST 2013
Author: ddunbar
Date: Tue Jan 29 19:06:03 2013
New Revision: 173871
URL: http://llvm.org/viewvc/llvm-project?rev=173871&view=rev
Log:
[Frontend] Factor AddUnmappedPath() out of AddPath() and simplify.
Modified:
cfe/trunk/lib/Frontend/InitHeaderSearch.cpp
Modified: cfe/trunk/lib/Frontend/InitHeaderSearch.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/InitHeaderSearch.cpp?rev=173871&r1=173870&r2=173871&view=diff
==============================================================================
--- cfe/trunk/lib/Frontend/InitHeaderSearch.cpp (original)
+++ cfe/trunk/lib/Frontend/InitHeaderSearch.cpp Tue Jan 29 19:06:03 2013
@@ -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 P
}
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::AddDefaultCInclud
// 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::AddDefaultInclude
// 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(Hea
// 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);
More information about the cfe-commits
mailing list