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