summaryrefslogtreecommitdiff
path: root/llvm
diff options
context:
space:
mode:
Diffstat (limited to 'llvm')
-rwxr-xr-xllvm/scan-build64
1 files changed, 48 insertions, 16 deletions
diff --git a/llvm/scan-build b/llvm/scan-build
index 5835628..13c8883 100755
--- a/llvm/scan-build
+++ b/llvm/scan-build
@@ -17,6 +17,7 @@ use warnings;
use FindBin qw($RealBin);
use Digest::MD5;
use File::Basename;
+use File::Spec;
use Term::ANSIColor;
use Term::ANSIColor qw(:constants);
use Cwd qw/ getcwd abs_path /;
@@ -81,6 +82,41 @@ sub DieDiag {
# Some initial preprocessing of Clang options.
##----------------------------------------------------------------------------##
+my $ClangPath = undef;
+
+sub Which {
+ my $bin = shift;
+ my @paths = File::Spec->path();
+
+ foreach my $p (@paths) {
+ my $candidate = File::Spec->catfile($p, $bin);
+
+ if (-x $candidate) {
+ $ClangPath = $p;
+ return $candidate;
+ }
+ }
+
+ return undef;
+}
+
+# First, look for 'clang' in bin.
+my $ClangSB = Cwd::realpath("$RealBin/bin/clang");
+# Second, look for 'clang' in same directory as scan-build
+if (!defined $ClangSB || ! -x $ClangSB) {
+ $ClangSB = Cwd::realpath("$RealBin/clang");
+}
+# Third, look for 'clang' in ../bin
+if (!defined $ClangSB || ! -x $ClangSB) {
+ $ClangSB = Cwd::realpath("$RealBin/../bin/clang");
+}
+# Finally, default to looking for 'clang' in the path.
+if (!defined $ClangSB || ! -x $ClangSB) {
+ $ClangSB = Which("clang");
+}
+my $Clang = $ClangSB;
+
+
# First, look for 'clang-cc' in libexec.
my $ClangCCSB = Cwd::realpath("$RealBin/libexec/clang-cc");
# Second, look for 'clang-cc' in the same directory as scan-build.
@@ -93,24 +129,20 @@ if (!defined $ClangCCSB || ! -x $ClangCCSB) {
}
# Finally, default to looking for 'clang-cc' in the path.
if (!defined $ClangCCSB || ! -x $ClangCCSB) {
- $ClangCCSB = "clang-cc";
-}
-my $ClangCC = $ClangCCSB;
+ if (defined $ClangPath) {
+ my @dirs = ( $ClangPath, "..", "libexec" );
+ my $candidate = File::Spec->catfile(@dirs, "clang-cc");
-# Now find 'clang'
-my $ClangSB = Cwd::realpath("$RealBin/bin/clang");
-if (!defined $ClangSB || ! -x $ClangSB) {
- $ClangSB = Cwd::realpath("$RealBin/clang");
-}
-# Third, look for 'clang' in ../bin
-if (!defined $ClangSB || ! -x $ClangSB) {
- $ClangSB = Cwd::realpath("$RealBin/../bin/clang");
-}
-# Finally, default to looking for 'clang-cc' in the path.
-if (!defined $ClangSB || ! -x $ClangSB) {
- $ClangSB = "clang";
+ if (-x $candidate) {
+ $ClangCCSB = $candidate;
+ } else {
+ $ClangCCSB = "clang-cc";
+ }
+ } else {
+ $ClangCCSB = "clang-cc";
+ }
}
-my $Clang = $ClangSB;
+my $ClangCC = $ClangCCSB;
my %AvailableAnalyses;