xref: /aosp_15_r20/external/libchrome/build/find_depot_tools.py (revision 635a864187cb8b6c713ff48b7e790a6b21769273)
1*635a8641SAndroid Build Coastguard Worker#!/usr/bin/env python
2*635a8641SAndroid Build Coastguard Worker# Copyright (c) 2011 The Chromium Authors. All rights reserved.
3*635a8641SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
4*635a8641SAndroid Build Coastguard Worker# found in the LICENSE file.
5*635a8641SAndroid Build Coastguard Worker"""Small utility function to find depot_tools and add it to the python path.
6*635a8641SAndroid Build Coastguard Worker
7*635a8641SAndroid Build Coastguard WorkerWill throw an ImportError exception if depot_tools can't be found since it
8*635a8641SAndroid Build Coastguard Workerimports breakpad.
9*635a8641SAndroid Build Coastguard Worker
10*635a8641SAndroid Build Coastguard WorkerThis can also be used as a standalone script to print out the depot_tools
11*635a8641SAndroid Build Coastguard Workerdirectory location.
12*635a8641SAndroid Build Coastguard Worker"""
13*635a8641SAndroid Build Coastguard Worker
14*635a8641SAndroid Build Coastguard Workerimport os
15*635a8641SAndroid Build Coastguard Workerimport sys
16*635a8641SAndroid Build Coastguard Worker
17*635a8641SAndroid Build Coastguard Worker
18*635a8641SAndroid Build Coastguard Worker# Path to //src
19*635a8641SAndroid Build Coastguard WorkerSRC = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir))
20*635a8641SAndroid Build Coastguard Worker
21*635a8641SAndroid Build Coastguard Worker
22*635a8641SAndroid Build Coastguard Workerdef IsRealDepotTools(path):
23*635a8641SAndroid Build Coastguard Worker  expanded_path = os.path.expanduser(path)
24*635a8641SAndroid Build Coastguard Worker  return os.path.isfile(os.path.join(expanded_path, 'gclient.py'))
25*635a8641SAndroid Build Coastguard Worker
26*635a8641SAndroid Build Coastguard Worker
27*635a8641SAndroid Build Coastguard Workerdef add_depot_tools_to_path():
28*635a8641SAndroid Build Coastguard Worker  """Search for depot_tools and add it to sys.path."""
29*635a8641SAndroid Build Coastguard Worker  # First, check if we have a DEPS'd in "depot_tools".
30*635a8641SAndroid Build Coastguard Worker  deps_depot_tools = os.path.join(SRC, 'third_party', 'depot_tools')
31*635a8641SAndroid Build Coastguard Worker  if IsRealDepotTools(deps_depot_tools):
32*635a8641SAndroid Build Coastguard Worker    # Put the pinned version at the start of the sys.path, in case there
33*635a8641SAndroid Build Coastguard Worker    # are other non-pinned versions already on the sys.path.
34*635a8641SAndroid Build Coastguard Worker    sys.path.insert(0, deps_depot_tools)
35*635a8641SAndroid Build Coastguard Worker    return deps_depot_tools
36*635a8641SAndroid Build Coastguard Worker
37*635a8641SAndroid Build Coastguard Worker  # Then look if depot_tools is already in PYTHONPATH.
38*635a8641SAndroid Build Coastguard Worker  for i in sys.path:
39*635a8641SAndroid Build Coastguard Worker    if i.rstrip(os.sep).endswith('depot_tools') and IsRealDepotTools(i):
40*635a8641SAndroid Build Coastguard Worker      return i
41*635a8641SAndroid Build Coastguard Worker  # Then look if depot_tools is in PATH, common case.
42*635a8641SAndroid Build Coastguard Worker  for i in os.environ['PATH'].split(os.pathsep):
43*635a8641SAndroid Build Coastguard Worker    if IsRealDepotTools(i):
44*635a8641SAndroid Build Coastguard Worker      sys.path.append(i.rstrip(os.sep))
45*635a8641SAndroid Build Coastguard Worker      return i
46*635a8641SAndroid Build Coastguard Worker  # Rare case, it's not even in PATH, look upward up to root.
47*635a8641SAndroid Build Coastguard Worker  root_dir = os.path.dirname(os.path.abspath(__file__))
48*635a8641SAndroid Build Coastguard Worker  previous_dir = os.path.abspath(__file__)
49*635a8641SAndroid Build Coastguard Worker  while root_dir and root_dir != previous_dir:
50*635a8641SAndroid Build Coastguard Worker    i = os.path.join(root_dir, 'depot_tools')
51*635a8641SAndroid Build Coastguard Worker    if IsRealDepotTools(i):
52*635a8641SAndroid Build Coastguard Worker      sys.path.append(i)
53*635a8641SAndroid Build Coastguard Worker      return i
54*635a8641SAndroid Build Coastguard Worker    previous_dir = root_dir
55*635a8641SAndroid Build Coastguard Worker    root_dir = os.path.dirname(root_dir)
56*635a8641SAndroid Build Coastguard Worker  print('Failed to find depot_tools', file=sys.stderr)
57*635a8641SAndroid Build Coastguard Worker  return None
58*635a8641SAndroid Build Coastguard Worker
59*635a8641SAndroid Build Coastguard WorkerDEPOT_TOOLS_PATH = add_depot_tools_to_path()
60*635a8641SAndroid Build Coastguard Worker
61*635a8641SAndroid Build Coastguard Worker# pylint: disable=W0611
62*635a8641SAndroid Build Coastguard Workerimport breakpad
63*635a8641SAndroid Build Coastguard Worker
64*635a8641SAndroid Build Coastguard Worker
65*635a8641SAndroid Build Coastguard Workerdef main():
66*635a8641SAndroid Build Coastguard Worker  if DEPOT_TOOLS_PATH is None:
67*635a8641SAndroid Build Coastguard Worker    return 1
68*635a8641SAndroid Build Coastguard Worker  print(DEPOT_TOOLS_PATH)
69*635a8641SAndroid Build Coastguard Worker  return 0
70*635a8641SAndroid Build Coastguard Worker
71*635a8641SAndroid Build Coastguard Worker
72*635a8641SAndroid Build Coastguard Workerif __name__ == '__main__':
73*635a8641SAndroid Build Coastguard Worker  sys.exit(main())
74