summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorSimon Atanasyan <satanasyan@mips.com>2012-10-31 12:01:53 +0000
committerSimon Atanasyan <satanasyan@mips.com>2012-10-31 12:01:53 +0000
commit86bdab74688b6e3bfac37c62b7ef0644e8616b11 (patch)
treebe3ceab129a49073dfc310eb1dd8cd53da89ceff /clang
parentc914ab6e3c281827eb1623ab24e125ce5a5209a9 (diff)
downloadbcm5719-llvm-86bdab74688b6e3bfac37c62b7ef0644e8616b11.tar.gz
bcm5719-llvm-86bdab74688b6e3bfac37c62b7ef0644e8616b11.zip
Extend -Bprefix functionality and make it closer to gcc. If the "prefix"
is not a directory, Driver::GetProgramPath() routine does not try to append the program name as a "path component" to it. It just joins the "prefix" with the program name and checks the resulting path existence. The patch reviewed by Rafael Espindola. llvm-svn: 167114
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/Driver/Driver.cpp19
-rw-r--r--clang/test/Driver/B-opt.c22
-rwxr-xr-xclang/test/Driver/Inputs/B_opt_tree/dir1/i386-unknown-linux-ld0
-rwxr-xr-xclang/test/Driver/Inputs/B_opt_tree/dir1/ld0
-rwxr-xr-xclang/test/Driver/Inputs/B_opt_tree/dir2/ld0
-rwxr-xr-xclang/test/Driver/Inputs/B_opt_tree/dir3/prefix-ld0
6 files changed, 35 insertions, 6 deletions
diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
index eeb59e854da..d71e731f39c 100644
--- a/clang/lib/Driver/Driver.cpp
+++ b/clang/lib/Driver/Driver.cpp
@@ -1591,12 +1591,19 @@ std::string Driver::GetProgramPath(const char *Name,
// attempting to use this prefix when looking for program paths.
for (Driver::prefix_list::const_iterator it = PrefixDirs.begin(),
ie = PrefixDirs.end(); it != ie; ++it) {
- llvm::sys::Path P(*it);
- P.appendComponent(TargetSpecificExecutable);
- if (P.canExecute()) return P.str();
- P.eraseComponent();
- P.appendComponent(Name);
- if (P.canExecute()) return P.str();
+ bool IsDirectory;
+ if (!llvm::sys::fs::is_directory(*it, IsDirectory) && IsDirectory) {
+ llvm::sys::Path P(*it);
+ P.appendComponent(TargetSpecificExecutable);
+ if (P.canExecute()) return P.str();
+ P.eraseComponent();
+ P.appendComponent(Name);
+ if (P.canExecute()) return P.str();
+ }
+ else {
+ llvm::sys::Path P(*it + Name);
+ if (P.canExecute()) return P.str();
+ }
}
const ToolChain::path_list &List = TC.getProgramPaths();
diff --git a/clang/test/Driver/B-opt.c b/clang/test/Driver/B-opt.c
new file mode 100644
index 00000000000..a0b9a11162d
--- /dev/null
+++ b/clang/test/Driver/B-opt.c
@@ -0,0 +1,22 @@
+// Check -B driver option.
+//
+// RUN: %clang %s -### -o %t.o -target i386-unknown-linux \
+// RUN: -B %S/Inputs/B_opt_tree/dir1 2>&1 \
+// RUN: | FileCheck --check-prefix=CHECK-B-OPT-TRIPLE %s
+// CHECK-B-OPT-TRIPLE: "{{.*}}/Inputs/B_opt_tree/dir1/i386-unknown-linux-ld"
+//
+// RUN: %clang %s -### -o %t.o -target i386-unknown-linux \
+// RUN: -B %S/Inputs/B_opt_tree/dir2 2>&1 \
+// RUN: | FileCheck --check-prefix=CHECK-B-OPT-DIR %s
+// CHECK-B-OPT-DIR: "{{.*}}/Inputs/B_opt_tree/dir2/ld"
+//
+// RUN: %clang %s -### -o %t.o -target i386-unknown-linux \
+// RUN: -B %S/Inputs/B_opt_tree/dir3/prefix- 2>&1 \
+// RUN: | FileCheck --check-prefix=CHECK-B-OPT-PREFIX %s
+// CHECK-B-OPT-PREFIX: "{{.*}}/Inputs/B_opt_tree/dir3/prefix-ld"
+//
+// RUN: %clang %s -### -o %t.o -target i386-unknown-linux \
+// RUN: -B %S/Inputs/B_opt_tree/dir3/prefix- \
+// RUN: -B %S/Inputs/B_opt_tree/dir2 2>&1 \
+// RUN: | FileCheck --check-prefix=CHECK-B-OPT-MULT %s
+// CHECK-B-OPT-MULT: "{{.*}}/Inputs/B_opt_tree/dir3/prefix-ld"
diff --git a/clang/test/Driver/Inputs/B_opt_tree/dir1/i386-unknown-linux-ld b/clang/test/Driver/Inputs/B_opt_tree/dir1/i386-unknown-linux-ld
new file mode 100755
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/clang/test/Driver/Inputs/B_opt_tree/dir1/i386-unknown-linux-ld
diff --git a/clang/test/Driver/Inputs/B_opt_tree/dir1/ld b/clang/test/Driver/Inputs/B_opt_tree/dir1/ld
new file mode 100755
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/clang/test/Driver/Inputs/B_opt_tree/dir1/ld
diff --git a/clang/test/Driver/Inputs/B_opt_tree/dir2/ld b/clang/test/Driver/Inputs/B_opt_tree/dir2/ld
new file mode 100755
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/clang/test/Driver/Inputs/B_opt_tree/dir2/ld
diff --git a/clang/test/Driver/Inputs/B_opt_tree/dir3/prefix-ld b/clang/test/Driver/Inputs/B_opt_tree/dir3/prefix-ld
new file mode 100755
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/clang/test/Driver/Inputs/B_opt_tree/dir3/prefix-ld
OpenPOWER on IntegriCloud