#!/usr/bin/env python3

import glob, os, pipes, sys, subprocess


device_id = os.environ.get('SANITIZER_IOSSIM_TEST_DEVICE_IDENTIFIER')
iossim_run_verbose = os.environ.get('SANITIZER_IOSSIM_RUN_VERBOSE')
wait_for_debug = os.environ.get('SANITIZER_IOSSIM_RUN_WAIT_FOR_DEBUGGER')

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

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

find_atos_cmd = 'xcrun -sdk iphonesimulator -f atos'
atos_path = subprocess.run(find_atos_cmd.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE, check=True).stdout.decode().strip()
for san in ['ASAN', 'TSAN', 'UBSAN', 'LSAN']:
  os.environ[f'SIMCTL_CHILD_{san}_SYMBOLIZER_PATH'] = atos_path

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.

  if iossim_run_verbose:
    print("RUNNING: \t{}".format(rm_cmd_line_str), flush=True)

  exitcode = subprocess.call(rm_cmd_line_str, shell=True)

else:
  cmd = ["xcrun", "simctl", "spawn", "--standalone"]

  if wait_for_debug:
    cmd.append("--wait-for-debugger")

  cmd.append(device_id)
  cmd += sys.argv[1:]

  if iossim_run_verbose:
    print("RUNNING: \t{}".format(" ".join(cmd)), flush=True)

  exitcode = subprocess.call(cmd)
if exitcode > 125:
  exitcode = 126
sys.exit(exitcode)
