Commit 67bb8614 authored by brettw@chromium.org's avatar brettw@chromium.org

Add a wrapper script for GN to depot_tools

This automatically searches the path for a source root (or takes one from the
command line), and then executes the current platform's GN binary inside that
source tree.

This will allow the user to have a "gn" command on their path, and allow our
scripts to run GN without having to bake-in the logic for finding the correct
platform's GN binary.

Review URL: https://codereview.chromium.org/66013002

git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@233983 0039d316-1c4b-4281-b951-d872f2087c98
parent 4731ec44
#!/usr/bin/env bash
# Copyright 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.
base_dir=$(dirname "$0")
PYTHONDONTWRITEBYTECODE=1 exec python "$base_dir/gn.py" "$@"
@echo off
:: Copyright 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 is required with cygwin only.
PATH=%~dp0;%PATH%
:: Defer control.
%~dp0python "%~dp0\gn.py" %*
#!/usr/bin/env python
# Copyright 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))
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment