You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			75 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
#!/usr/bin/env python
 | 
						|
# Copyright 2017 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.
 | 
						|
 | 
						|
import argparse
 | 
						|
import os
 | 
						|
import subprocess
 | 
						|
import sys
 | 
						|
 | 
						|
 | 
						|
# This function is inspired from the one in src/tools/vim/ninja-build.vim in the
 | 
						|
# Chromium repository.
 | 
						|
def path_to_source_root(path):
 | 
						|
  """Returns the absolute path to the chromium source root."""
 | 
						|
  candidate = os.path.dirname(path)
 | 
						|
  # This is a list of directories that need to identify the src directory. The
 | 
						|
  # shorter it is, the more likely it's wrong (checking for just
 | 
						|
  # "build/common.gypi" would find "src/v8" for files below "src/v8", as
 | 
						|
  # "src/v8/build/common.gypi" exists). The longer it is, the more likely it is
 | 
						|
  # to break when we rename directories.
 | 
						|
  fingerprints = ['chrome', 'net', 'v8', 'build', 'skia']
 | 
						|
  while candidate and not all(
 | 
						|
      [os.path.isdir(os.path.join(candidate, fp)) for fp in fingerprints]):
 | 
						|
    new_candidate = os.path.dirname(candidate)
 | 
						|
    if new_candidate == candidate:
 | 
						|
      raise Exception("Couldn't find source-dir from %s" % path)
 | 
						|
    candidate = os.path.dirname(candidate)
 | 
						|
  return candidate
 | 
						|
 | 
						|
 | 
						|
def main():
 | 
						|
  parser = argparse.ArgumentParser()
 | 
						|
  parser.add_argument(
 | 
						|
      '--file-path',
 | 
						|
      help='The file path, could be absolute or relative to the current '
 | 
						|
           'directory.',
 | 
						|
      required=True)
 | 
						|
  parser.add_argument(
 | 
						|
      '--build-dir',
 | 
						|
      help='The build directory, relative to the source directory.',
 | 
						|
      required=True)
 | 
						|
 | 
						|
  options = parser.parse_args()
 | 
						|
 | 
						|
  src_dir = path_to_source_root(os.path.abspath(options.file_path))
 | 
						|
  abs_build_dir = os.path.join(src_dir, options.build_dir)
 | 
						|
  src_relpath = os.path.relpath(options.file_path, abs_build_dir)
 | 
						|
 | 
						|
  print 'Building %s' % options.file_path
 | 
						|
 | 
						|
  ninja_exec = 'ninja'
 | 
						|
  carets = '^'
 | 
						|
  # We need to make sure that we call the ninja executable, calling |ninja|
 | 
						|
  # directly might end up calling a wrapper script that'll remove the caret
 | 
						|
  # characters.
 | 
						|
  if sys.platform == 'win32':
 | 
						|
    ninja_exec = 'ninja.exe'
 | 
						|
    # The caret character has to be escaped on Windows as it's an escape
 | 
						|
    # character.
 | 
						|
    carets = '^^'
 | 
						|
 | 
						|
  command = [
 | 
						|
      ninja_exec,
 | 
						|
      '-C', abs_build_dir,
 | 
						|
      '%s%s' % (src_relpath, carets)
 | 
						|
  ]
 | 
						|
  # |shell| should be set to True on Windows otherwise the carets characters
 | 
						|
  # get dropped from the command line.
 | 
						|
  return subprocess.call(command, shell=sys.platform=='win32')
 | 
						|
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
  sys.exit(main())
 |