#
# Copyright 2017 Google Inc. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
"""Ask the parent directory to load the project environment."""

from imp import load_source
import os
from os import path
import sys

_ENV = path.abspath(path.join(path.dirname(__file__), path.pardir, '_env.py'))
if not path.exists(_ENV):
  print '%s: Can\'t find repo root.\nMissing parent: %s' % (__file__, _ENV)
  sys.exit(1)
load_source('', _ENV)

# Add blink's Python tools to the path.

from cobalt.tools import paths  # pylint: disable=g-import-not-at-top

sys.path.append(
    os.path.normpath(
        os.path.join(paths.REPOSITORY_ROOT, 'third_party', 'blink', 'Tools',
                     'Scripts')))

sys.path.append(
    os.path.normpath(
        os.path.join(paths.REPOSITORY_ROOT, 'third_party', 'blink', 'Source',
                     'bindings', 'scripts')))
