1cef7893435aa41160dd1255c43cb8498279738ccChris Craik# Copyright 2015 The Chromium Authors. All rights reserved. 2cef7893435aa41160dd1255c43cb8498279738ccChris Craik# Use of this source code is governed by a BSD-style license that can be 3cef7893435aa41160dd1255c43cb8498279738ccChris Craik# found in the LICENSE file. 4cef7893435aa41160dd1255c43cb8498279738ccChris Craik 5cef7893435aa41160dd1255c43cb8498279738ccChris Craikimport os 6cef7893435aa41160dd1255c43cb8498279738ccChris Craik 7cef7893435aa41160dd1255c43cb8498279738ccChris Craikfrom devil import devil_env 8cef7893435aa41160dd1255c43cb8498279738ccChris Craikfrom devil.utils import lazy 9cef7893435aa41160dd1255c43cb8498279738ccChris Craik 10cef7893435aa41160dd1255c43cb8498279738ccChris Craikwith devil_env.SysPath(devil_env.DEPENDENCY_MANAGER_PATH): 11cef7893435aa41160dd1255c43cb8498279738ccChris Craik import dependency_manager # pylint: disable=import-error 12cef7893435aa41160dd1255c43cb8498279738ccChris Craik 13cef7893435aa41160dd1255c43cb8498279738ccChris Craik 14cef7893435aa41160dd1255c43cb8498279738ccChris Craikdef GetPath(build_tool): 15cef7893435aa41160dd1255c43cb8498279738ccChris Craik try: 16cef7893435aa41160dd1255c43cb8498279738ccChris Craik return devil_env.config.LocalPath(build_tool) 17cef7893435aa41160dd1255c43cb8498279738ccChris Craik except dependency_manager.NoPathFoundError: 18cef7893435aa41160dd1255c43cb8498279738ccChris Craik pass 19cef7893435aa41160dd1255c43cb8498279738ccChris Craik 20cef7893435aa41160dd1255c43cb8498279738ccChris Craik try: 21cef7893435aa41160dd1255c43cb8498279738ccChris Craik return _PathInLocalSdk(build_tool) 22cef7893435aa41160dd1255c43cb8498279738ccChris Craik except dependency_manager.NoPathFoundError: 23cef7893435aa41160dd1255c43cb8498279738ccChris Craik pass 24cef7893435aa41160dd1255c43cb8498279738ccChris Craik 25cef7893435aa41160dd1255c43cb8498279738ccChris Craik return devil_env.config.FetchPath(build_tool) 26cef7893435aa41160dd1255c43cb8498279738ccChris Craik 27cef7893435aa41160dd1255c43cb8498279738ccChris Craik 28cef7893435aa41160dd1255c43cb8498279738ccChris Craikdef _PathInLocalSdk(build_tool): 29cef7893435aa41160dd1255c43cb8498279738ccChris Craik build_tools_path = _build_tools_path.read() 30cef7893435aa41160dd1255c43cb8498279738ccChris Craik return (os.path.join(build_tools_path, build_tool) if build_tools_path 31cef7893435aa41160dd1255c43cb8498279738ccChris Craik else None) 32cef7893435aa41160dd1255c43cb8498279738ccChris Craik 33cef7893435aa41160dd1255c43cb8498279738ccChris Craik 34cef7893435aa41160dd1255c43cb8498279738ccChris Craikdef _FindBuildTools(): 35cef7893435aa41160dd1255c43cb8498279738ccChris Craik android_sdk_path = devil_env.config.LocalPath('android_sdk') 36cef7893435aa41160dd1255c43cb8498279738ccChris Craik if not android_sdk_path: 37cef7893435aa41160dd1255c43cb8498279738ccChris Craik return None 38cef7893435aa41160dd1255c43cb8498279738ccChris Craik 39cef7893435aa41160dd1255c43cb8498279738ccChris Craik build_tools_contents = os.listdir( 40cef7893435aa41160dd1255c43cb8498279738ccChris Craik os.path.join(android_sdk_path, 'build-tools')) 41cef7893435aa41160dd1255c43cb8498279738ccChris Craik 42cef7893435aa41160dd1255c43cb8498279738ccChris Craik if not build_tools_contents: 43cef7893435aa41160dd1255c43cb8498279738ccChris Craik return None 44cef7893435aa41160dd1255c43cb8498279738ccChris Craik else: 45cef7893435aa41160dd1255c43cb8498279738ccChris Craik if len(build_tools_contents) > 1: 46cef7893435aa41160dd1255c43cb8498279738ccChris Craik build_tools_contents.sort() 47cef7893435aa41160dd1255c43cb8498279738ccChris Craik return os.path.join(android_sdk_path, 'build-tools', 48cef7893435aa41160dd1255c43cb8498279738ccChris Craik build_tools_contents[-1]) 49cef7893435aa41160dd1255c43cb8498279738ccChris Craik 50cef7893435aa41160dd1255c43cb8498279738ccChris Craik 51cef7893435aa41160dd1255c43cb8498279738ccChris Craik_build_tools_path = lazy.WeakConstant(_FindBuildTools) 52