std::string Driver::GetProgramPath(const char *Name, const ToolChain &TC,
                                   bool WantFile) const {
    const ToolChain::path_list &List = TC.getProgramPaths();
    for (ToolChain::path_list::const_iterator
            it = List.begin(), ie = List.end(); it != ie; ++it) {
        llvm::sys::Path P(*it);
        P.appendComponent(Name);
        if (WantFile ? P.exists() : P.canExecute())
            return P.str();
    }

    // If all else failed, search the path.
    llvm::sys::Path P(llvm::sys::Program::FindProgramByName(Name));
    if (!P.empty())
        return P.str();

    return Name;
}