190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)# Copyright (c) 2012 The Chromium Authors. All rights reserved.
290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)# found in the LICENSE file.
490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)"""Paths to common resources in the Chrome repository."""
690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)import os
890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)_THIS_DIR = os.path.abspath(os.path.dirname(__file__))
1190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)def GetSrc():
1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  """Returns the path to the root src directory."""
154311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch  return os.path.abspath(os.path.join(_THIS_DIR, os.pardir, os.pardir,
164311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch                                      os.pardir))
1790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)def GetTestData():
2090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  """Returns the path to the src/chrome/test/data directory."""
2190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  return os.path.join(GetSrc(), 'chrome', 'test', 'data')
2290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
2390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
2490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)def GetBuildDir(required_paths):
2590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  """Returns the preferred build directory that contains given paths."""
2690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  dirs = ['out', 'build', 'xcodebuild', 'sconsbuild']
2790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  rel_dirs = [os.path.join(x, 'Release') for x in dirs]
2890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  debug_dirs = [os.path.join(x, 'Debug') for x in dirs]
2990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  full_dirs = [os.path.join(GetSrc(), x) for x in rel_dirs + debug_dirs]
3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  for build_dir in full_dirs:
3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    for required_path in required_paths:
3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      if not os.path.exists(os.path.join(build_dir, required_path)):
3390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        break
3490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    else:
3590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      return build_dir
3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  raise RuntimeError('Cannot find build directory containing ' +
3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                     ', '.join(required_paths))
38