1645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez# Copyright 2015 The Chromium Authors. All rights reserved.
2645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez# Use of this source code is governed by a BSD-style license that can be
3645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez# found in the LICENSE file.
4645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
5645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezimport os
6645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
7645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezfrom devil import devil_env
8645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezfrom devil.utils import lazy
9645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
10645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezwith devil_env.SysPath(devil_env.DEPENDENCY_MANAGER_PATH):
11645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  import dependency_manager  # pylint: disable=import-error
12645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
13645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
14645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezdef GetPath(build_tool):
15645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  try:
16645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    return devil_env.config.LocalPath(build_tool)
17645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  except dependency_manager.NoPathFoundError:
18645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    pass
19645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
20645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  try:
21645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    return _PathInLocalSdk(build_tool)
22645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  except dependency_manager.NoPathFoundError:
23645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    pass
24645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
25645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  return devil_env.config.FetchPath(build_tool)
26645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
27645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
28645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezdef _PathInLocalSdk(build_tool):
29645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  build_tools_path = _build_tools_path.read()
30645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  return (os.path.join(build_tools_path, build_tool) if build_tools_path
31645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez          else None)
32645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
33645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
34645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezdef _FindBuildTools():
35645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  android_sdk_path = devil_env.config.LocalPath('android_sdk')
36645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  if not android_sdk_path:
37645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    return None
38645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
39645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  build_tools_contents = os.listdir(
40645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez      os.path.join(android_sdk_path, 'build-tools'))
41645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
42645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  if not build_tools_contents:
43645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    return None
44645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez  else:
45645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    if len(build_tools_contents) > 1:
46645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez      build_tools_contents.sort()
47645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez    return os.path.join(android_sdk_path, 'build-tools',
48645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez                        build_tools_contents[-1])
49645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
50645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez
51645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez_build_tools_path = lazy.WeakConstant(_FindBuildTools)
52