2 # Copyright (c) 2011 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
5 """Small utility function to find depot_tools and add it to the python path.
7 Will throw an ImportError exception if depot_tools can't be found since it
10 This can also be used as a standalone script to print out the depot_tools
19 SRC = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir))
22 def IsRealDepotTools(path):
23 expanded_path = os.path.expanduser(path)
24 return os.path.isfile(os.path.join(expanded_path, 'gclient.py'))
27 def add_depot_tools_to_path():
28 """Search for depot_tools and add it to sys.path."""
29 # First, check if we have a DEPS'd in "depot_tools".
30 deps_depot_tools = os.path.join(SRC, 'third_party', 'depot_tools')
31 if IsRealDepotTools(deps_depot_tools):
32 # Put the pinned version at the start of the sys.path, in case there
33 # are other non-pinned versions already on the sys.path.
34 sys.path.insert(0, deps_depot_tools)
35 return deps_depot_tools
37 # Then look if depot_tools is already in PYTHONPATH.
39 if i.rstrip(os.sep).endswith('depot_tools') and IsRealDepotTools(i):
41 # Then look if depot_tools is in PATH, common case.
42 for i in os.environ['PATH'].split(os.pathsep):
43 if IsRealDepotTools(i):
44 sys.path.append(i.rstrip(os.sep))
46 # Rare case, it's not even in PATH, look upward up to root.
47 root_dir = os.path.dirname(os.path.abspath(__file__))
48 previous_dir = os.path.abspath(__file__)
49 while root_dir and root_dir != previous_dir:
50 i = os.path.join(root_dir, 'depot_tools')
51 if IsRealDepotTools(i):
54 previous_dir = root_dir
55 root_dir = os.path.dirname(root_dir)
56 print >> sys.stderr, 'Failed to find depot_tools'
59 DEPOT_TOOLS_PATH = add_depot_tools_to_path()
61 # pylint: disable=W0611
66 if DEPOT_TOOLS_PATH is None:
68 print DEPOT_TOOLS_PATH
72 if __name__ == '__main__':