• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#
2# Copyright (C) 2009 Google Inc. All rights reserved.
3#
4# Redistribution and use in source and binary forms, with or without
5# modification, are permitted provided that the following conditions are
6# met:
7#
8#   * Redistributions of source code must retain the above copyright notice,
9#     this list of conditions and the following disclaimer.
10#   * Redistributions in binary form must reproduce the above copyright
11#     notice, this list of conditions and the following disclaimer in the
12#     documentation and/or other materials provided with the distribution.
13#   * Neither the name of Google Inc. nor the names of its contributors
14#     may be used to endorse or promote products derived from this software
15#     without specific prior written permission.
16#
17# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28#
29
30# This file is used by gclient execute gyp with the proper command
31# line arguments.
32
33import glob
34import os
35import platform
36import shlex
37import sys
38
39script_dir = os.path.dirname(__file__)
40
41sys.path.append(os.path.join(script_dir, 'tools', 'gyp', 'pylib'))
42import gyp
43
44def additional_include_files(args=[]):
45  """
46  Returns a list of additional (.gypi) files to include, without
47  duplicating ones that are already specified on the command line.
48  """
49  # Determine the include files specified on the command line.
50  # This doesn't cover all the different option formats you can use,
51  # but it's mainly intended to avoid duplicating flags on the automatic
52  # makefile regeneration which only uses this format.
53  specified_includes = set()
54  for arg in args:
55    if arg.startswith('-I') and len(arg) > 2:
56      specified_includes.add(os.path.realpath(arg[2:]))
57
58  result = []
59  def AddInclude(path):
60    if os.path.realpath(path) not in specified_includes:
61      result.append(path)
62
63  # Always include common.gypi
64  AddInclude(os.path.join(script_dir, 'build', 'common.gypi'))
65
66  # Optionally add supplemental .gypi files if present.
67  supplements = glob.glob(os.path.join(script_dir, '*', 'supplement.gypi'))
68  for supplement in supplements:
69    AddInclude(supplement)
70
71  return result
72
73if __name__ == '__main__':
74
75  args = sys.argv[1:]
76
77  # Add includes.
78  args.extend(['-I' + i for i in additional_include_files(args)])
79
80  # On linux, we want gyp to output a makefile (default is scons).
81  if (platform.system() == 'Linux'):
82    args.extend(['-fmake'])
83
84  # Other command args:
85  args.extend([
86               # gyp variable defines.
87               '-Dinside_chromium_build=0',
88               '-Dv8_use_snapshot=false',
89               '-Dmsvs_use_common_release=0',
90
91               # gyp hack: otherwise gyp assumes its in chromium's src/ dir.
92               '--depth=./',
93
94               # gyp file to execute.
95               'WebKit.gyp'])
96
97  print 'Updating webkit projects from gyp files...'
98  sys.stdout.flush()
99
100  # Off we go...
101  sys.exit(gyp.main(args))
102