#!/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.

import os
import sys

sys.path.append(os.path.join(os.path.dirname(__file__), os.pardir, 'telemetry'))

from telemetry import test_runner
from telemetry.core import environment
from telemetry.core import util
from telemetry.util import bootstrap


CROS_BOOSTRAP_DEPS_PATH = os.path.join(
    util.GetChromiumSrcDir(), 'tools', 'cros', 'bootstrap_deps')


def main():
  if '--print-bootstrap-deps-cros' in sys.argv:
    print bootstrap.ListAllDepsPaths(CROS_BOOSTRAP_DEPS_PATH)
    return 0

  base_dir = os.path.dirname(os.path.realpath(__file__))
  test_runner.config = environment.Environment([base_dir])
  sys.exit(test_runner.main())


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