#!/usr/bin/env python
# Copyright (c) 2015 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

_CATAPULT_PATH = os.path.abspath(os.path.join(
    os.path.dirname(__file__), os.path.pardir, os.path.pardir))
_TRACING_PATH = os.path.join(_CATAPULT_PATH, 'tracing')


def _RunTestsOrDie(top_level_dir):
  exit_code = run_with_typ.Run(top_level_dir, path=[_TRACING_PATH])
  if exit_code:
    sys.exit(exit_code)


def _AddToPathIfNeeded(path):
  if path not in sys.path:
    sys.path.insert(0, path)


if __name__ == '__main__':
  _AddToPathIfNeeded(_CATAPULT_PATH)

  from hooks import install
  if '--no-install-hooks' in sys.argv:
    sys.argv.remove('--no-install-hooks')
  else:
    install.InstallHooks()

  from catapult_build import run_with_typ
  _RunTestsOrDie(os.path.join(_TRACING_PATH, 'tracing_build'))
  sys.exit(0)
