#!/usr/bin/env python3
# Copyright (c) 2017, 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.

from os.path import join
from subprocess import check_call

import os

import utils

AOSP_HELPER_SH = join(utils.REPO_ROOT, 'scripts', 'aosp_helper.sh')

DEFAULT_LUNCH = 'aosp_x86-eng'

DEFAULT_ROOT = join(utils.REPO_ROOT, 'build', 'aosp')


def add_root_argument(parser):
    parser.add_argument('--aosp-root',
                        help='Root of the AOSP checkout. ' + 'Defaults to ' +
                        DEFAULT_ROOT + '.',
                        default=DEFAULT_ROOT)


def add_common_arguments(parser):
    add_root_argument(parser)
    parser.add_argument('--lunch',
                        help='Build menu. ' + 'Defaults to ' + DEFAULT_LUNCH +
                        '.',
                        default=DEFAULT_LUNCH)


def run_through_aosp_helper(lunch, args, cwd):
    args[0:0] = [AOSP_HELPER_SH, lunch]
    check_call(args, cwd=cwd)
