#!/usr/bin/env python
# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Helper script for GN to run an arbitrary binary. See compiled_action.gni.

Run with:
  python gn_run_binary.py <invoker> <binary_name> [args ...]

Where <invoker> is either "compiled_action" or "exec_script". If it is
"compiled_action" the script has a non-zero exit code on a failure. If it is
"exec_script" the script has no output on success and produces output otherwise,
but always has an exit code of 0.
"""

import os
import sys
import subprocess

# Run a command, swallowing the output unless there is an error.
def run_command(command):
  try:
    subprocess.check_output(command, stderr=subprocess.STDOUT)
    return 0
  except subprocess.CalledProcessError as e:
    return ("Command failed: " + ' '.join(command) + "\n" +
            "output: " + e.output)
  except OSError as e:
    return ("Command failed: " + ' '.join(command) + "\n" +
            "output: " + e.strerror)

def main(argv):
  error_exit = 0
  if argv[1] == "compiled_action":
    error_exit = 1
  elif argv[1] != "exec_script":
    print ("The first argument should be either "
           "'compiled_action' or 'exec_script")
    return 1

  # Unless the path is absolute, this script is designed to run binaries
  # produced by the current build. We always prefix it with "./" to avoid
  # picking up system versions that might also be on the path.
  if os.path.isabs(argv[2]):
    path = argv[2]
  else:
    path = './' + argv[2]

  if not os.path.isfile(path):
    print "Binary not found: " + path
    return error_exit

  # The rest of the arguments are passed directly to the executable.
  args = [path] + argv[3:]

  result = run_command(args)
  if result != 0:
    print result
    return error_exit
  return 0

if __name__ == '__main__':
  sys.exit(main(sys.argv))
