diff options
Diffstat (limited to 'clang/tools/scan-build/set-xcode-analyzer')
| -rwxr-xr-x | clang/tools/scan-build/set-xcode-analyzer | 114 |
1 files changed, 0 insertions, 114 deletions
diff --git a/clang/tools/scan-build/set-xcode-analyzer b/clang/tools/scan-build/set-xcode-analyzer deleted file mode 100755 index 8e674823ba6..00000000000 --- a/clang/tools/scan-build/set-xcode-analyzer +++ /dev/null @@ -1,114 +0,0 @@ -#!/usr/bin/python - -# [PR 11661] Note that we hardwire to /usr/bin/python because we -# want to the use the system version of Python on Mac OS X. -# This one has the scripting bridge enabled. - -import sys -if sys.version_info < (2, 7): - print "set-xcode-analyzer requires Python 2.7 or later" - sys.exit(1) - -import os -import subprocess -import re -import tempfile -import shutil -import stat -from AppKit import * - -def FindClangSpecs(path): - print "(+) Searching for xcspec file in: ", path - for root, dirs, files in os.walk(path): - for f in files: - if f.endswith(".xcspec") and f.startswith("Clang LLVM"): - yield os.path.join(root, f) - -def ModifySpec(path, isBuiltinAnalyzer, pathToChecker): - t = tempfile.NamedTemporaryFile(delete=False) - foundAnalyzer = False - with open(path) as f: - if isBuiltinAnalyzer: - # First search for CLANG_ANALYZER_EXEC. Newer - # versions of Xcode set EXEC_PATH to be CLANG_ANALYZER_EXEC. - with open(path) as f2: - for line in f2: - if line.find("CLANG_ANALYZER_EXEC") >= 0: - pathToChecker = "$(CLANG_ANALYZER_EXEC)" - break - # Now create a new file. - for line in f: - if not foundAnalyzer: - if line.find("Static Analyzer") >= 0: - foundAnalyzer = True - else: - m = re.search('^(\s*ExecPath\s*=\s*")', line) - if m: - line = "".join([m.group(0), pathToChecker, '";\n']) - # Do not modify further ExecPath's later in the xcspec. - foundAnalyzer = False - t.write(line) - t.close() - print "(+) processing:", path - try: - shutil.copy(t.name, path) - os.chmod(path, stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IROTH) - except IOError, why: - print " (-) Cannot update file:", why, "\n" - except OSError, why: - print " (-) Cannot update file:", why, "\n" - os.unlink(t.name) - -def main(): - from optparse import OptionParser - parser = OptionParser('usage: %prog [options]') - parser.set_description(__doc__) - parser.add_option("--use-checker-build", dest="path", - help="Use the Clang located at the provided absolute path, e.g. /Users/foo/checker-1") - parser.add_option("--use-xcode-clang", action="store_const", - const="$(CLANG)", dest="default", - help="Use the Clang bundled with Xcode") - (options, args) = parser.parse_args() - if options.path is None and options.default is None: - parser.error("You must specify a version of Clang to use for static analysis. Specify '-h' for details") - - # determine if Xcode is running - for x in NSWorkspace.sharedWorkspace().runningApplications(): - if x.localizedName().find("Xcode") >= 0: - print "(-) You must quit Xcode first before modifying its configuration files." - sys.exit(1) - - isBuiltinAnalyzer = False - if options.path: - # Expand tildes. - path = os.path.expanduser(options.path) - if not path.endswith("clang"): - print "(+) Using Clang bundled with checker build:", path - path = os.path.join(path, "bin", "clang"); - else: - print "(+) Using Clang located at:", path - else: - print "(+) Using the Clang bundled with Xcode" - path = options.default - isBuiltinAnalyzer = True - - try: - xcode_path = subprocess.check_output(["xcode-select", "-print-path"]) - except AttributeError: - # Fall back to the default install location when using Python < 2.7.0 - xcode_path = "/Developer" - if (xcode_path.find(".app/") != -1): - # Cut off the 'Developer' dir, as the xcspec lies in another part - # of the Xcode.app subtree. - xcode_path = xcode_path.rsplit('/Developer', 1)[0] - - foundSpec = False - for x in FindClangSpecs(xcode_path): - foundSpec = True - ModifySpec(x, isBuiltinAnalyzer, path) - - if foundSpec == False: - print "(-) No compiler configuration file was found. Xcode's analyzer has not been updated." - -if __name__ == '__main__': - main() |

