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