#!/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))
