diff options
author | Chad Rosier <mcrosier@apple.com> | 2012-10-30 21:42:09 +0000 |
---|---|---|
committer | Chad Rosier <mcrosier@apple.com> | 2012-10-30 21:42:09 +0000 |
commit | 616e8a5c0b9e473ab1819a5657d6814f49a81bd4 (patch) | |
tree | d70c762c3f92452ff1b14c1787db3bba9a4f3470 /clang/lib/Driver/Tools.cpp | |
parent | 206cf6487c0759dd5e1c943690b830543d4d415a (diff) | |
download | bcm5719-llvm-616e8a5c0b9e473ab1819a5657d6814f49a81bd4.tar.gz bcm5719-llvm-616e8a5c0b9e473ab1819a5657d6814f49a81bd4.zip |
[driver] Older versions of ld expect '-L<dir>' not '-L <dir>'. In Xcode4 and
later, '-L <dir>' is allowed, but rewrite these in the driver as '-L<dir>' to
maintain backward compatibility. The same is true for the -I option.
rdar://12366753
llvm-svn: 167054
Diffstat (limited to 'clang/lib/Driver/Tools.cpp')
-rw-r--r-- | clang/lib/Driver/Tools.cpp | 38 |
1 files changed, 30 insertions, 8 deletions
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index d0cf1cad5e5..7c48d6bc41a 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -93,9 +93,15 @@ static void addDirectoryList(const ArgList &Args, const char *ArgName, const char *EnvVar) { const char *DirList = ::getenv(EnvVar); + bool CombinedArg = false; + if (!DirList) return; // Nothing to do. + StringRef Name(ArgName); + if (Name.equals("-I") || Name.equals("-L")) + CombinedArg = true; + StringRef Dirs(DirList); if (Dirs.empty()) // Empty string should not add '.'. return; @@ -103,21 +109,37 @@ static void addDirectoryList(const ArgList &Args, StringRef::size_type Delim; while ((Delim = Dirs.find(llvm::sys::PathSeparator)) != StringRef::npos) { if (Delim == 0) { // Leading colon. - CmdArgs.push_back(ArgName); - CmdArgs.push_back("."); + if (CombinedArg) { + CmdArgs.push_back(Args.MakeArgString(std::string(ArgName) + ".")); + } else { + CmdArgs.push_back(ArgName); + CmdArgs.push_back("."); + } } else { - CmdArgs.push_back(ArgName); - CmdArgs.push_back(Args.MakeArgString(Dirs.substr(0, Delim))); + if (CombinedArg) { + CmdArgs.push_back(Args.MakeArgString(std::string(ArgName) + Dirs.substr(0, Delim))); + } else { + CmdArgs.push_back(ArgName); + CmdArgs.push_back(Args.MakeArgString(Dirs.substr(0, Delim))); + } } Dirs = Dirs.substr(Delim + 1); } if (Dirs.empty()) { // Trailing colon. - CmdArgs.push_back(ArgName); - CmdArgs.push_back("."); + if (CombinedArg) { + CmdArgs.push_back(Args.MakeArgString(std::string(ArgName) + ".")); + } else { + CmdArgs.push_back(ArgName); + CmdArgs.push_back("."); + } } else { // Add the last path. - CmdArgs.push_back(ArgName); - CmdArgs.push_back(Args.MakeArgString(Dirs)); + if (CombinedArg) { + CmdArgs.push_back(Args.MakeArgString(std::string(ArgName) + Dirs)); + } else { + CmdArgs.push_back(ArgName); + CmdArgs.push_back(Args.MakeArgString(Dirs)); + } } } |