diff options
Diffstat (limited to 'clang/lib/Driver/Driver.cpp')
| -rw-r--r-- | clang/lib/Driver/Driver.cpp | 16 | 
1 files changed, 14 insertions, 2 deletions
| diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index bfbf0a0be12..fac8c8c88ff 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -287,6 +287,8 @@ Compilation *Driver::BuildCompilation(int argc, const char **argv) {      A->claim();      PrefixDirs.push_back(A->getValue(*Args, 0));    } +  if (const Arg *A = Args->getLastArg(options::OPT__sysroot_EQ)) +    SysRoot = A->getValue(*Args);    Host = GetHostInfo(DefaultHostTriple.c_str()); @@ -1261,7 +1263,12 @@ std::string Driver::GetFilePath(const char *Name, const ToolChain &TC) const {    // attempting to use this prefix when lokup up program paths.    for (Driver::prefix_list::const_iterator it = PrefixDirs.begin(),         ie = PrefixDirs.end(); it != ie; ++it) { -    llvm::sys::Path P(*it); +    std::string Dir(*it); +    if (Dir.empty()) +      continue; +    if (Dir[0] == '=') +      Dir = SysRoot + Dir.substr(1); +    llvm::sys::Path P(Dir);      P.appendComponent(Name);      bool Exists;      if (!llvm::sys::fs::exists(P.str(), Exists) && Exists) @@ -1271,7 +1278,12 @@ std::string Driver::GetFilePath(const char *Name, const ToolChain &TC) const {    const ToolChain::path_list &List = TC.getFilePaths();    for (ToolChain::path_list::const_iterator           it = List.begin(), ie = List.end(); it != ie; ++it) { -    llvm::sys::Path P(*it); +    std::string Dir(*it); +    if (Dir.empty()) +      continue; +    if (Dir[0] == '=') +      Dir = SysRoot + Dir.substr(1); +    llvm::sys::Path P(Dir);      P.appendComponent(Name);      bool Exists;      if (!llvm::sys::fs::exists(P.str(), Exists) && Exists) | 

