forked from OSchip/llvm-project
[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
This commit is contained in:
parent
206cf6487c
commit
616e8a5c0b
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
// RUN: mkdir -p %T/test1 %T/test2 %T/test3
|
||||
|
||||
// RUN: env "CPATH=%T/test1%{pathsep}%T/test2" %clang -x c -E -v %s 2>&1 | FileCheck %s -check-prefix=CPATH
|
||||
// CPATH: -I {{.*}}/test1
|
||||
// CPATH: -I {{.*}}/test2
|
||||
// CPATH: -I{{.*}}/test1
|
||||
// CPATH: -I{{.*}}/test2
|
||||
// CPATH: search starts here
|
||||
// CPATH: test1
|
||||
// CPATH: test2
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// RUN: env LIBRARY_PATH=%T/test1 %clang -x c %s -### 2>&1 | FileCheck %s
|
||||
// CHECK: "-L" "{{.*}}/test1"
|
||||
// CHECK: "-L{{.*}}/test1"
|
||||
|
||||
// GCC driver is used as linker on cygming. It should be aware of LIBRARY_PATH.
|
||||
// XFAIL: cygwin,mingw32,win32
|
||||
|
|
Loading…
Reference in New Issue