reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced
    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
#!/usr/bin/python

import glob, os, pipes, sys, subprocess


if not "SANITIZER_IOSSIM_TEST_DEVICE_IDENTIFIER" in os.environ:
  raise EnvironmentError("Specify SANITIZER_IOSSIM_TEST_DEVICE_IDENTIFIER to select which simulator to use.")

device_id = os.environ["SANITIZER_IOSSIM_TEST_DEVICE_IDENTIFIER"]

for e in ["ASAN_OPTIONS", "TSAN_OPTIONS", "UBSAN_OPTIONS", "APPLE_ASAN_INIT_FOR_DLOPEN", "ASAN_ACTIVATION_OPTIONS"]:
  if e in os.environ:
    os.environ["SIMCTL_CHILD_" + e] = os.environ[e]

prog = sys.argv[1]
exit_code = None
if prog == 'rm':
  # The simulator and host actually share the same file system so we can just
  # execute directly on the host.
  rm_args = []
  for arg in sys.argv[2:]:
    if '*' in arg or '?' in arg:
      # Don't quote glob pattern
      rm_args.append(arg)
    else:
      # FIXME(dliew): pipes.quote() is deprecated
      rm_args.append(pipes.quote(arg))
  rm_cmd_line = ["/bin/rm"] + rm_args
  rm_cmd_line_str = ' '.join(rm_cmd_line)
  # We use `shell=True` so that any wildcard globs get expanded by the shell.
  exitcode = subprocess.call(rm_cmd_line_str, shell=True)
else:
  exitcode = subprocess.call(["xcrun", "simctl", "spawn", device_id] + sys.argv[1:])
if exitcode > 125:
  exitcode = 126
sys.exit(exitcode)