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