| # Copyright 2013 The Flutter 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 malioc. | |
| This is the same as `gn_run_binary.py`, except an extra parameter is included | |
| for the malioc output file. When the malioc run fails, errors are placed in the | |
| json output file. This script attempts to read the output file and dump it to | |
| stdout upon failure. | |
| Run with: | |
| python gn_run_malioc.py <binary_name> <output_path> [args ...] | |
| """ | |
| import json | |
| import os | |
| import sys | |
| import subprocess | |
| # 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. | |
| path = './' + sys.argv[1] | |
| malioc_output = sys.argv[2] | |
| # The rest of the arguements are passed directly to the executable. | |
| args = [path, '--output', malioc_output] + sys.argv[3:] | |
| try: | |
| subprocess.check_output(args, stderr=subprocess.STDOUT) | |
| except subprocess.CalledProcessError as ex: | |
| print(ex.output.decode('utf-8', errors='replace')) | |
| if os.path.exists(malioc_output): | |
| with open(malioc_output, 'r') as malioc_file: | |
| malioc_json = malioc_file.read() | |
| print('malioc output:') | |
| # Attempt to pretty print the json output, but fall back to printing the | |
| # raw output if doing so fails. | |
| try: | |
| parsed = json.loads(malioc_json) | |
| print(json.dumps(parsed, indent=2)) | |
| except: | |
| print(malioc_json) | |
| else: | |
| print( | |
| 'Unable to find the malioc output file in order to print contained' | |
| 'errors:', | |
| malioc_output, | |
| ) | |
| sys.exit(ex.returncode) |