find_depot_tools.py 1.46 KB
Newer Older
1 2 3 4 5 6
# Copyright 2014 the V8 project authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Small utility function to find depot_tools and add it to the python path.
"""

7 8 9
# for py2/py3 compatibility
from __future__ import print_function

10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
import os
import sys


def directory_really_is_depot_tools(directory):
  return os.path.isfile(os.path.join(directory, 'gclient.py'))


def add_depot_tools_to_path():
  """Search for depot_tools and add it to sys.path."""
  # First look if depot_tools is already in PYTHONPATH.
  for i in sys.path:
    if i.rstrip(os.sep).endswith('depot_tools'):
      if directory_really_is_depot_tools(i):
        return i

  # Then look if depot_tools is in PATH, common case.
  for i in os.environ['PATH'].split(os.pathsep):
    if i.rstrip(os.sep).endswith('depot_tools'):
      if directory_really_is_depot_tools(i):
        sys.path.insert(0, i.rstrip(os.sep))
        return i
  # Rare case, it's not even in PATH, look upward up to root.
  root_dir = os.path.dirname(os.path.abspath(__file__))
  previous_dir = os.path.abspath(__file__)
  while root_dir and root_dir != previous_dir:
    if directory_really_is_depot_tools(os.path.join(root_dir, 'depot_tools')):
      i = os.path.join(root_dir, 'depot_tools')
      sys.path.insert(0, i)
      return i
    previous_dir = root_dir
    root_dir = os.path.dirname(root_dir)
42
  print('Failed to find depot_tools', file=sys.stderr)
43
  return None