"""
A script to run binary commands in GN build actions.
This script takes the binary name as the first argument,
followed by any arguments to pass to the binary.
If the first argument is in the format 'path-env=xxxx',
it will add xxxx to the beginning of the PATH environment variable.
"""
import os
import sys
import subprocess
import platform
def main():
if len(sys.argv) < 2:
print("Error: No binary specified")
print("Usage: run_binary.py <binary_name> [args...]")
print(" run_binary.py path-env=<path> <binary_name> [args...]")
return 1
args_start_index = 1
if sys.argv[1].startswith("path-env="):
path_to_add = sys.argv[1].split("=", 1)[1]
current_path = os.environ.get("PATH", "")
os.environ["PATH"] = path_to_add + os.pathsep + current_path
print(f"Added '{path_to_add}' to the beginning of PATH")
args_start_index = 2
if len(sys.argv) < 3:
print("Error: No binary specified after path-env parameter")
print("Usage: run_binary.py path-env=<path> <binary_name> [args...]")
return 1
binary = sys.argv[args_start_index]
args = sys.argv[args_start_index + 1:]
cmd = [binary] + args
print("start run cmd:")
print(" ".join(cmd))
try:
ret = subprocess.run(cmd, capture_output=True, text=True, check=True)
print(f"run cmd: {ret.stdout}")
return 0
except subprocess.CalledProcessError as e:
print(f"Error executing command: {e}", file=sys.stderr)
print(f"error message: {e.stderr}")
print(f"output message: {e.output}")
return 1
if __name__ == "__main__":
sys.exit(main())