#!/usr/bin/env python3
# Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.

import jdk
import utils
import subprocess
import sys

def run(args):
  cmd = [jdk.GetJavaExecutable()] + args
  utils.PrintCmd(cmd)
  result = subprocess.check_output(cmd)
  print result
  return result

def main():
  try:
    run(sys.argv[1:])
  except subprocess.CalledProcessError as e:
    # In case anything relevant was printed to stdout, normally this is already
    # on stderr.
    print e.output
    return e.returncode

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