This file is indexed.

/usr/share/clang/scan-build-4.0/bin/set-xcode-analyzer is in clang-tools-4.0 1:4.0.1-10~deb9u2.

This file is owned by root:root, with mode 0o755.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#!/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()