#!/usr/bin/python
#
# Copyright 2017 Google Inc.
#
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import argparse
import os
import re
import shutil
import subprocess
import sys

parser = argparse.ArgumentParser(description='builds skia android apps')
parser.add_argument('-C', '--output_dir', help='ninja out dir')
parser.add_argument('app_name')

args = parser.parse_args()

target_cpu = "arm64"
android_variant = ""
android_buildtype = "debug"

if args.output_dir == None:
  sys.exit("unknown out directory")

args_gn_path = os.path.join(args.output_dir, "args.gn")
if os.path.exists(args_gn_path):
  for line in open(args_gn_path):
    m = re.match('target_cpu ?= ?"(.*)"', line.strip())
    if m:
      target_cpu = m.group(1)

if target_cpu == "arm":
  android_variant = "arm"
elif target_cpu == "arm64":
  android_variant = "arm64"
elif target_cpu == "x86":
  android_variant = "x86"
elif target_cpu == "x64":
  android_variant = "x86_64"
elif target_cpu == "mipsel":
  android_variant = "mips"
elif target_cpu == "mips64el":
  android_variant = "mips64"
else:
  sys.exit("unknown target_cpu")

# build the apk using gradle
try:
    subprocess.check_call(['./apps/gradlew',
      ':viewer:assemble' + android_variant + android_buildtype,
      '-papps/' + args.app_name,
      '-P' + target_cpu + '.out.dir=' + args.output_dir,
      '--daemon'], cwd=os.path.join(os.path.dirname(__file__), ".."))
except subprocess.CalledProcessError as error:
  print error
  sys.exit("gradle build failed")

# copy apk back into the main out directory
current_dir = os.path.dirname(__file__)
apk_src = os.path.join(current_dir, "..", "apps", args.app_name, "build", "outputs", "apk",
                       args.app_name + "-"  + android_variant + "-"  + android_buildtype + ".apk")
apk_dst = os.path.join(args.output_dir, args.app_name + ".apk")
shutil.copyfile(apk_src, apk_dst)
