frontend::IncludeDirGroup Group;
unsigned IsUserSupplied : 1;
unsigned IsFramework : 1;
-
- Entry(llvm::StringRef _Path, frontend::IncludeDirGroup _Group,
- bool _IsUserSupplied, bool _IsFramework)
- : Path(_Path), Group(_Group), IsUserSupplied(_IsUserSupplied),
- IsFramework(_IsFramework) {}
+
+ /// IsSysRootRelative - This is true if an absolute path should be treated
+ /// relative to the sysroot, or false if it should always be the absolute
+ /// path.
+ unsigned IsSysRootRelative : 1;
+
+ Entry(llvm::StringRef path, frontend::IncludeDirGroup group,
+ bool isUserSupplied, bool isFramework, bool isSysRootRelative)
+ : Path(path), Group(group), IsUserSupplied(isUserSupplied),
+ IsFramework(isFramework), IsSysRootRelative(isSysRootRelative) {}
};
/// If non-empty, the directory to use as a "virtual system root" for include
/// AddPath - Add the \arg Path path to the specified \arg Group list.
void AddPath(llvm::StringRef Path, frontend::IncludeDirGroup Group,
- bool IsUserSupplied, bool IsFramework) {
- UserEntries.push_back(Entry(Path, Group, IsUserSupplied, IsFramework));
+ bool IsUserSupplied, bool IsFramework, bool IsSysRootRelative) {
+ UserEntries.push_back(Entry(Path, Group, IsUserSupplied, IsFramework,
+ IsSysRootRelative));
}
};
for (arg_iterator it = Args.filtered_begin(OPT_I, OPT_F),
ie = Args.filtered_end(); it != ie; ++it)
Opts.AddPath((*it)->getValue(Args), frontend::Angled, true,
- /*IsFramework=*/ (*it)->getOption().matches(OPT_F));
+ /*IsFramework=*/ (*it)->getOption().matches(OPT_F), true);
// Add -iprefix/-iwith-prefix/-iwithprefixbefore options.
llvm::StringRef Prefix = ""; // FIXME: This isn't the correct default prefix.
Prefix = A->getValue(Args);
else if (A->getOption().matches(OPT_iwithprefix))
Opts.AddPath(Prefix.str() + A->getValue(Args),
- frontend::System, false, false);
+ frontend::System, false, false, true);
else
Opts.AddPath(Prefix.str() + A->getValue(Args),
- frontend::Angled, false, false);
+ frontend::Angled, false, false, true);
}
for (arg_iterator it = Args.filtered_begin(OPT_idirafter),
ie = Args.filtered_end(); it != ie; ++it)
- Opts.AddPath((*it)->getValue(Args), frontend::After, true, false);
+ Opts.AddPath((*it)->getValue(Args), frontend::After, true, false, true);
for (arg_iterator it = Args.filtered_begin(OPT_iquote),
ie = Args.filtered_end(); it != ie; ++it)
- Opts.AddPath((*it)->getValue(Args), frontend::Quoted, true, false);
+ Opts.AddPath((*it)->getValue(Args), frontend::Quoted, true, false, true);
for (arg_iterator it = Args.filtered_begin(OPT_isystem, OPT_iwithsysroot),
ie = Args.filtered_end(); it != ie; ++it)
- Opts.AddPath((*it)->getValue(Args), frontend::System, true, false);
+ Opts.AddPath((*it)->getValue(Args), frontend::System, true, false,
+ (*it)->getOption().matches(OPT_iwithsysroot));
// FIXME: Need options for the various environment variables!
}