#!/usr/bin/env python
# Copyright (c) 2012 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Shim to run nacl toolchain download script only if there is a nacl dir."""

from __future__ import print_function

import os
import shutil
import sys


def Main(args):
  script_dir = os.path.dirname(os.path.abspath(__file__))
  src_dir = os.path.dirname(script_dir)
  nacl_dir = os.path.join(src_dir, 'native_client')
  nacl_build_dir = os.path.join(nacl_dir, 'build')
  package_version_dir = os.path.join(nacl_build_dir, 'package_version')
  package_version = os.path.join(package_version_dir, 'package_version.py')
  if not os.path.exists(package_version):
    print("Can't find '%s'" % package_version)
    print('Presumably you are intentionally building without NativeClient.')
    print('Skipping NativeClient toolchain download.')
    sys.exit(0)
  sys.path.insert(0, package_version_dir)
  import package_version

  # BUG:
  # We remove this --optional-pnacl argument, and instead replace it with
  # --no-pnacl for most cases.  However, if the bot name is an sdk
  # bot then we will go ahead and download it.  This prevents increasing the
  # gclient sync time for developers, or standard Chrome bots.
  if '--optional-pnacl' in args:
    args.remove('--optional-pnacl')
    use_pnacl = False
    buildbot_name = os.environ.get('BUILDBOT_BUILDERNAME', '')
    if 'pnacl' in buildbot_name and 'sdk' in buildbot_name:
      use_pnacl = True
    if use_pnacl:
      print('\n*** DOWNLOADING PNACL TOOLCHAIN ***\n')
    else:
      args = ['--exclude', 'pnacl_newlib'] + args

  # Only download the ARM gcc toolchain if we are building for ARM
  # TODO(olonho): we need to invent more reliable way to get build
  # configuration info, to know if we're building for ARM.
  if 'target_arch=arm' not in os.environ.get('GYP_DEFINES', ''):
    args = ['--exclude', 'nacl_arm_newlib'] + args

  return package_version.main(args)


if __name__ == '__main__':
  sys.exit(Main(sys.argv[1:]))
