| Index: gn.py | 
| =================================================================== | 
| --- gn.py	(revision 0) | 
| +++ gn.py	(revision 0) | 
| @@ -0,0 +1,66 @@ | 
| +#!/usr/bin/env python | 
| +# Copyright (c) 2013 The Chromium Authors. All rights reserved. | 
| +# Use of this source code is governed by a BSD-style license that can be | 
| +# found in the LICENSE file. | 
| + | 
| +"""This script is a wrapper around the GN binary that is pulled from Google | 
| +Cloud Storage when you sync Chrome. The binaries go into platform-specific | 
| +subdirectories in the source tree. | 
| + | 
| +This script makes there be one place for forwarding to the correct platform's | 
| +binary. It will also automatically try to find the gn binary when run inside | 
| +the chrome source tree, so users can just type "gn" on the command line | 
| +(normally depot_tools is on the path).""" | 
| + | 
| +import os | 
| +import subprocess | 
| +import sys | 
| + | 
| + | 
| +class PlatformUnknownError(IOError): | 
| +  pass | 
| + | 
| + | 
| +def HasDotfile(path): | 
| +  """Returns True if the given path has a .gn file in it.""" | 
| +  return os.path.exists(path + '/.gn') | 
| + | 
| + | 
| +def FindSourceRootOnPath(): | 
| +  """Searches upward from the current directory for the root of the source | 
| +  tree and returns the found path. Returns None if no source root could | 
| +  be found.""" | 
| +  cur = os.getcwd() | 
| +  while True: | 
| +    if HasDotfile(cur): | 
| +      return cur | 
| +    up_one = os.path.dirname(cur) | 
| +    if up_one == cur: | 
| +      return None  # Reached the top of the directory tree | 
| +    cur = up_one | 
| + | 
| + | 
| +def RunGN(sourceroot): | 
| +  # The binaries in platform-specific subdirectories in src/tools/gn/bin. | 
| +  gnpath = sourceroot + '/tools/gn/bin/' | 
| +  if sys.platform == 'win32': | 
| +    gnpath += 'win/gn.exe' | 
| +  elif sys.platform.startswith('linux'): | 
| +    gnpath += 'linux/gn' | 
| +  elif sys.platform == 'darwin': | 
| +    gnpath += 'mac/gn' | 
| +  else: | 
| +    raise PlatformUnknownError('Unknown platform for GN: ' + sys.platform) | 
| + | 
| +  return subprocess.call([gnpath] + sys.argv[1:]) | 
| + | 
| + | 
| +def main(args): | 
| +  sourceroot = FindSourceRootOnPath() | 
| +  if not sourceroot: | 
| +    print >> sys.stderr, '.gn file not found in any parent of the current path.' | 
| +    sys.exit(1) | 
| +  return RunGN(sourceroot) | 
| + | 
| +if __name__ == '__main__': | 
| +  sys.exit(main(sys.argv)) | 
|  |