Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(35)

Side by Side Diff: pylib/gyp/generator/make.py

Issue 9418017: make: don't use .target in paths or printouts (Closed) Base URL: https://gyp.googlecode.com/svn/trunk
Patch Set: simpler Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | test/lib/TestGyp.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (c) 2012 Google Inc. All rights reserved. 1 # Copyright (c) 2012 Google Inc. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 # Notes: 5 # Notes:
6 # 6 #
7 # This is all roughly based on the Makefile system used by the Linux 7 # This is all roughly based on the Makefile system used by the Linux
8 # kernel, but is a non-recursive make -- we put the entire dependency 8 # kernel, but is a non-recursive make -- we put the entire dependency
9 # graph in front of make and let it figure it out. 9 # graph in front of make and let it figure it out.
10 # 10 #
(...skipping 16 matching lines...) Expand all
27 import os 27 import os
28 import re 28 import re
29 import sys 29 import sys
30 30
31 generator_default_variables = { 31 generator_default_variables = {
32 'EXECUTABLE_PREFIX': '', 32 'EXECUTABLE_PREFIX': '',
33 'EXECUTABLE_SUFFIX': '', 33 'EXECUTABLE_SUFFIX': '',
34 'STATIC_LIB_PREFIX': 'lib', 34 'STATIC_LIB_PREFIX': 'lib',
35 'SHARED_LIB_PREFIX': 'lib', 35 'SHARED_LIB_PREFIX': 'lib',
36 'STATIC_LIB_SUFFIX': '.a', 36 'STATIC_LIB_SUFFIX': '.a',
37 'INTERMEDIATE_DIR': '$(obj).$(TOOLSET)/$(TARGET)/geni', 37 'INTERMEDIATE_DIR': '$(obj)$(TOOLSET)/$(TARGET)/geni',
38 'SHARED_INTERMEDIATE_DIR': '$(obj)/gen', 38 'SHARED_INTERMEDIATE_DIR': '$(obj)/gen',
39 'PRODUCT_DIR': '$(builddir)', 39 'PRODUCT_DIR': '$(builddir)',
40 'RULE_INPUT_ROOT': '%(INPUT_ROOT)s', # This gets expanded by Python. 40 'RULE_INPUT_ROOT': '%(INPUT_ROOT)s', # This gets expanded by Python.
41 'RULE_INPUT_DIRNAME': '%(INPUT_DIRNAME)s', # This gets expanded by Python. 41 'RULE_INPUT_DIRNAME': '%(INPUT_DIRNAME)s', # This gets expanded by Python.
42 'RULE_INPUT_PATH': '$(abspath $<)', 42 'RULE_INPUT_PATH': '$(abspath $<)',
43 'RULE_INPUT_EXT': '$(suffix $<)', 43 'RULE_INPUT_EXT': '$(suffix $<)',
44 'RULE_INPUT_NAME': '$(notdir $<)', 44 'RULE_INPUT_NAME': '$(notdir $<)',
45 45
46 # This appears unused --- ? 46 # This appears unused --- ?
47 'CONFIGURATION_NAME': '$(BUILDTYPE)', 47 'CONFIGURATION_NAME': '$(BUILDTYPE)',
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 generator_extra_sources_for_rules = getattr(xcode_generator, 79 generator_extra_sources_for_rules = getattr(xcode_generator,
80 'generator_extra_sources_for_rules', []) 80 'generator_extra_sources_for_rules', [])
81 global COMPILABLE_EXTENSIONS 81 global COMPILABLE_EXTENSIONS
82 COMPILABLE_EXTENSIONS.update({'.m': 'objc', '.mm' : 'objcxx'}) 82 COMPILABLE_EXTENSIONS.update({'.m': 'objc', '.mm' : 'objcxx'})
83 else: 83 else:
84 operating_system = flavor 84 operating_system = flavor
85 if flavor == 'android': 85 if flavor == 'android':
86 operating_system = 'linux' # Keep this legacy behavior for now. 86 operating_system = 'linux' # Keep this legacy behavior for now.
87 default_variables.setdefault('OS', operating_system) 87 default_variables.setdefault('OS', operating_system)
88 default_variables.setdefault('SHARED_LIB_SUFFIX', '.so') 88 default_variables.setdefault('SHARED_LIB_SUFFIX', '.so')
89 default_variables.setdefault('SHARED_LIB_DIR','$(builddir)/lib.$(TOOLSET)') 89 default_variables.setdefault('SHARED_LIB_DIR','$(builddir)/lib$(TOOLSET)')
90 default_variables.setdefault('LIB_DIR', '$(obj).$(TOOLSET)') 90 default_variables.setdefault('LIB_DIR', '$(obj)$(TOOLSET)')
91 91
92 92
93 def CalculateGeneratorInputInfo(params): 93 def CalculateGeneratorInputInfo(params):
94 """Calculate the generator specific info that gets fed to input (called by 94 """Calculate the generator specific info that gets fed to input (called by
95 gyp).""" 95 gyp)."""
96 generator_flags = params.get('generator_flags', {}) 96 generator_flags = params.get('generator_flags', {})
97 android_ndk_version = generator_flags.get('android_ndk_version', None) 97 android_ndk_version = generator_flags.get('android_ndk_version', None)
98 # Android NDK requires a strict link order. 98 # Android NDK requires a strict link order.
99 if android_ndk_version: 99 if android_ndk_version:
100 global generator_wants_sorted_dependencies 100 global generator_wants_sorted_dependencies
(...skipping 13 matching lines...) Expand all
114 # correctly, the .d files have spaces replaced with another character. The .d 114 # correctly, the .d files have spaces replaced with another character. The .d
115 # file for 115 # file for
116 # Chromium\ Framework.framework/foo 116 # Chromium\ Framework.framework/foo
117 # is for example 117 # is for example
118 # out/Release/.deps/out/Release/Chromium?Framework.framework/foo 118 # out/Release/.deps/out/Release/Chromium?Framework.framework/foo
119 # This is the replacement character. 119 # This is the replacement character.
120 SPACE_REPLACEMENT = '?' 120 SPACE_REPLACEMENT = '?'
121 121
122 122
123 LINK_COMMANDS_LINUX = """\ 123 LINK_COMMANDS_LINUX = """\
124 quiet_cmd_alink = AR($(TOOLSET)) $@ 124 quiet_cmd_alink = AR$(QUIET_TOOLSET) $@
125 cmd_alink = rm -f $@ && $(AR.$(TOOLSET)) crs $@ $(filter %.o,$^) 125 cmd_alink = rm -f $@ && $(AR$(TOOLSET)) crs $@ $(filter %.o,$^)
126 126
127 # Due to circular dependencies between libraries :(, we wrap the 127 # Due to circular dependencies between libraries :(, we wrap the
128 # special "figure out circular dependencies" flags around the entire 128 # special "figure out circular dependencies" flags around the entire
129 # input list during linking. 129 # input list during linking.
130 quiet_cmd_link = LINK($(TOOLSET)) $@ 130 quiet_cmd_link = LINK$(QUIET_TOOLSET) $@
131 cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ -Wl,--s tart-group $(LD_INPUTS) -Wl,--end-group $(LIBS) 131 cmd_link = $(LINK$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS$(TOOLSET)) -o $@ -Wl,--sta rt-group $(LD_INPUTS) -Wl,--end-group $(LIBS)
132 132
133 # We support two kinds of shared objects (.so): 133 # We support two kinds of shared objects (.so):
134 # 1) shared_library, which is just bundling together many dependent libraries 134 # 1) shared_library, which is just bundling together many dependent libraries
135 # into a link line. 135 # into a link line.
136 # 2) loadable_module, which is generating a module intended for dlopen(). 136 # 2) loadable_module, which is generating a module intended for dlopen().
137 # 137 #
138 # They differ only slightly: 138 # They differ only slightly:
139 # In the former case, we want to package all dependent code into the .so. 139 # In the former case, we want to package all dependent code into the .so.
140 # In the latter case, we want to package just the API exposed by the 140 # In the latter case, we want to package just the API exposed by the
141 # outermost module. 141 # outermost module.
142 # This means shared_library uses --whole-archive, while loadable_module doesn't. 142 # This means shared_library uses --whole-archive, while loadable_module doesn't.
143 # (Note that --whole-archive is incompatible with the --start-group used in 143 # (Note that --whole-archive is incompatible with the --start-group used in
144 # normal linking.) 144 # normal linking.)
145 145
146 # Other shared-object link notes: 146 # Other shared-object link notes:
147 # - Set SONAME to the library filename so our binaries don't reference 147 # - Set SONAME to the library filename so our binaries don't reference
148 # the local, absolute paths used on the link command-line. 148 # the local, absolute paths used on the link command-line.
149 quiet_cmd_solink = SOLINK($(TOOLSET)) $@ 149 quiet_cmd_solink = SOLINK$(QUIET_TOOLSET) $@
150 cmd_solink = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl ,-soname=$(@F) -o $@ -Wl,--whole-archive $(LD_INPUTS) -Wl,--no-whole-archive $(L IBS) 150 cmd_solink = $(LINK$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS$(TOOLSET)) -Wl,- soname=$(@F) -o $@ -Wl,--whole-archive $(LD_INPUTS) -Wl,--no-whole-archive $(LIB S)
151 151
152 quiet_cmd_solink_module = SOLINK_MODULE($(TOOLSET)) $@ 152 quiet_cmd_solink_module = SOLINK_MODULE$(QUIET_TOOLSET) $@
153 cmd_solink_module = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSE T)) -Wl,-soname=$(@F) -o $@ -Wl,--start-group $(filter-out FORCE_DO_CMD, $^) -Wl ,--end-group $(LIBS) 153 cmd_solink_module = $(LINK$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS$(TOOLSET) ) -Wl,-soname=$(@F) -o $@ -Wl,--start-group $(filter-out FORCE_DO_CMD, $^) -Wl,- -end-group $(LIBS)
154 """ 154 """
155 155
156 LINK_COMMANDS_MAC = """\ 156 LINK_COMMANDS_MAC = """\
157 quiet_cmd_alink = LIBTOOL-STATIC $@ 157 quiet_cmd_alink = LIBTOOL-STATIC $@
158 cmd_alink = rm -f $@ && ./gyp-mac-tool filter-libtool libtool -static -o $@ $(fi lter %.o,$^) 158 cmd_alink = rm -f $@ && ./gyp-mac-tool filter-libtool libtool -static -o $@ $(fi lter %.o,$^)
159 159
160 quiet_cmd_link = LINK($(TOOLSET)) $@ 160 quiet_cmd_link = LINK$(QUIET_TOOLSET) $@
161 cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o "$@" $(LD_ INPUTS) $(LIBS) 161 cmd_link = $(LINK$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS$(TOOLSET)) -o "$@" $(LD_IN PUTS) $(LIBS)
162 162
163 # TODO(thakis): Find out and document the difference between shared_library and 163 # TODO(thakis): Find out and document the difference between shared_library and
164 # loadable_module on mac. 164 # loadable_module on mac.
165 quiet_cmd_solink = SOLINK($(TOOLSET)) $@ 165 quiet_cmd_solink = SOLINK$(QUIET_TOOLSET) $@
166 cmd_solink = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o "$@" $(LD_INPUTS) $(LIBS) 166 cmd_solink = $(LINK$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS$(TOOLSET)) -o "$ @" $(LD_INPUTS) $(LIBS)
167 167
168 # TODO(thakis): The solink_module rule is likely wrong. Xcode seems to pass 168 # TODO(thakis): The solink_module rule is likely wrong. Xcode seems to pass
169 # -bundle -single_module here (for osmesa.so). 169 # -bundle -single_module here (for osmesa.so).
170 quiet_cmd_solink_module = SOLINK_MODULE($(TOOLSET)) $@ 170 quiet_cmd_solink_module = SOLINK_MODULE$(QUIET_TOOLSET) $@
171 cmd_solink_module = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSE T)) -o $@ $(filter-out FORCE_DO_CMD, $^) $(LIBS) 171 cmd_solink_module = $(LINK$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS$(TOOLSET) ) -o $@ $(filter-out FORCE_DO_CMD, $^) $(LIBS)
172 """ 172 """
173 173
174 LINK_COMMANDS_ANDROID = """\ 174 LINK_COMMANDS_ANDROID = """\
175 quiet_cmd_alink = AR($(TOOLSET)) $@ 175 quiet_cmd_alink = AR$(QUIET_TOOLSET) $@
176 cmd_alink = rm -f $@ && $(AR.$(TOOLSET)) crs $@ $(filter %.o,$^) 176 cmd_alink = rm -f $@ && $(AR$(TOOLSET)) crs $@ $(filter %.o,$^)
177 177
178 # Due to circular dependencies between libraries :(, we wrap the 178 # Due to circular dependencies between libraries :(, we wrap the
179 # special "figure out circular dependencies" flags around the entire 179 # special "figure out circular dependencies" flags around the entire
180 # input list during linking. 180 # input list during linking.
181 quiet_cmd_link = LINK($(TOOLSET)) $@ 181 quiet_cmd_link = LINK$(QUIET_TOOLSET) $@
182 quiet_cmd_link_host = LINK($(TOOLSET)) $@ 182 quiet_cmd_link_host = LINK$(QUIET_TOOLSET) $@
183 cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ -Wl,--s tart-group $(LD_INPUTS) -Wl,--end-group $(LIBS) 183 cmd_link = $(LINK$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS$(TOOLSET)) -o $@ -Wl,--sta rt-group $(LD_INPUTS) -Wl,--end-group $(LIBS)
184 cmd_link_host = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $( LD_INPUTS) $(LIBS) 184 cmd_link_host = $(LINK$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS$(TOOLSET)) -o $@ $(LD _INPUTS) $(LIBS)
185 185
186 # Other shared-object link notes: 186 # Other shared-object link notes:
187 # - Set SONAME to the library filename so our binaries don't reference 187 # - Set SONAME to the library filename so our binaries don't reference
188 # the local, absolute paths used on the link command-line. 188 # the local, absolute paths used on the link command-line.
189 quiet_cmd_solink = SOLINK($(TOOLSET)) $@ 189 quiet_cmd_solink = SOLINK$(QUIET_TOOLSET) $@
190 cmd_solink = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl ,-soname=$(@F) -o $@ -Wl,--whole-archive $(LD_INPUTS) -Wl,--no-whole-archive $(L IBS) 190 cmd_solink = $(LINK$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS$(TOOLSET)) -Wl,- soname=$(@F) -o $@ -Wl,--whole-archive $(LD_INPUTS) -Wl,--no-whole-archive $(LIB S)
191 191
192 quiet_cmd_solink_module = SOLINK_MODULE($(TOOLSET)) $@ 192 quiet_cmd_solink_module = SOLINK_MODULE$(QUIET_TOOLSET) $@
193 cmd_solink_module = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSE T)) -Wl,-soname=$(@F) -o $@ -Wl,--start-group $(filter-out FORCE_DO_CMD, $^) -Wl ,--end-group $(LIBS) 193 cmd_solink_module = $(LINK$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS$(TOOLSET) ) -Wl,-soname=$(@F) -o $@ -Wl,--start-group $(filter-out FORCE_DO_CMD, $^) -Wl,- -end-group $(LIBS)
194 quiet_cmd_solink_module_host = SOLINK_MODULE($(TOOLSET)) $@ 194 quiet_cmd_solink_module_host = SOLINK_MODULE$(QUIET_TOOLSET) $@
195 cmd_solink_module_host = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(T OOLSET)) -Wl,-soname=$(@F) -o $@ $(filter-out FORCE_DO_CMD, $^) $(LIBS) 195 cmd_solink_module_host = $(LINK$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS$(TOO LSET)) -Wl,-soname=$(@F) -o $@ $(filter-out FORCE_DO_CMD, $^) $(LIBS)
196 """ 196 """
197 197
198 198
199 # Header of toplevel Makefile. 199 # Header of toplevel Makefile.
200 # This should go into the build tree, but it's easier to keep it here for now. 200 # This should go into the build tree, but it's easier to keep it here for now.
201 SHARED_HEADER = ("""\ 201 SHARED_HEADER = ("""\
202 # We borrow heavily from the kernel build setup, though we are simpler since 202 # We borrow heavily from the kernel build setup, though we are simpler since
203 # we don't have Kconfig tweaking settings on us. 203 # we don't have Kconfig tweaking settings on us.
204 204
205 # The implicit make rules have it looking for RCS files, among other things. 205 # The implicit make rules have it looking for RCS files, among other things.
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 sed -e 1d -e 's|$$|:|' \ 324 sed -e 1d -e 's|$$|:|' \
325 >> $(depfile) 325 >> $(depfile)
326 rm $(depfile).raw 326 rm $(depfile).raw
327 endef 327 endef
328 """ 328 """
329 """ 329 """
330 # Command definitions: 330 # Command definitions:
331 # - cmd_foo is the actual command to run; 331 # - cmd_foo is the actual command to run;
332 # - quiet_cmd_foo is the brief-output summary of the command. 332 # - quiet_cmd_foo is the brief-output summary of the command.
333 333
334 quiet_cmd_cc = CC($(TOOLSET)) $@ 334 quiet_cmd_cc = CC$(QUIET_TOOLSET) $@
335 cmd_cc = $(CC.$(TOOLSET)) $(GYP_CFLAGS) $(DEPFLAGS) $(CFLAGS.$(TOOLSET)) -c -o $ @ $< 335 cmd_cc = $(CC$(TOOLSET)) $(GYP_CFLAGS) $(DEPFLAGS) $(CFLAGS$(TOOLSET)) -c -o $@ $<
336 336
337 quiet_cmd_cxx = CXX($(TOOLSET)) $@ 337 quiet_cmd_cxx = CXX$(QUIET_TOOLSET) $@
338 cmd_cxx = $(CXX.$(TOOLSET)) $(GYP_CXXFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) - c -o $@ $< 338 cmd_cxx = $(CXX$(TOOLSET)) $(GYP_CXXFLAGS) $(DEPFLAGS) $(CXXFLAGS$(TOOLSET)) -c -o $@ $<
339 %(extra_commands)s 339 %(extra_commands)s
340 quiet_cmd_touch = TOUCH $@ 340 quiet_cmd_touch = TOUCH $@
341 cmd_touch = touch $@ 341 cmd_touch = touch $@
342 342
343 quiet_cmd_copy = COPY $@ 343 quiet_cmd_copy = COPY $@
344 # send stderr to /dev/null to ignore messages when linking directories. 344 # send stderr to /dev/null to ignore messages when linking directories.
345 cmd_copy = ln -f "$<" "$@" 2>/dev/null || (rm -rf "$@" && cp -af "$<" "$@") 345 cmd_copy = ln -f "$<" "$@" 2>/dev/null || (rm -rf "$@" && cp -af "$<" "$@")
346 346
347 %(link_commands)s 347 %(link_commands)s
348 """ 348 """
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
434 %(default_target)s: 434 %(default_target)s:
435 435
436 # Use FORCE_DO_CMD to force a target to run. Should be coupled with 436 # Use FORCE_DO_CMD to force a target to run. Should be coupled with
437 # do_cmd. 437 # do_cmd.
438 .PHONY: FORCE_DO_CMD 438 .PHONY: FORCE_DO_CMD
439 FORCE_DO_CMD: 439 FORCE_DO_CMD:
440 440
441 """) 441 """)
442 442
443 SHARED_HEADER_MAC_COMMANDS = """ 443 SHARED_HEADER_MAC_COMMANDS = """
444 quiet_cmd_objc = CXX($(TOOLSET)) $@ 444 quiet_cmd_objc = CXX$(QUIET_TOOLSET) $@
445 cmd_objc = $(CC.$(TOOLSET)) $(GYP_OBJCFLAGS) $(DEPFLAGS) -c -o $@ $< 445 cmd_objc = $(CC$(TOOLSET)) $(GYP_OBJCFLAGS) $(DEPFLAGS) -c -o $@ $<
446 446
447 quiet_cmd_objcxx = CXX($(TOOLSET)) $@ 447 quiet_cmd_objcxx = CXX$(QUIET_TOOLSET) $@
448 cmd_objcxx = $(CXX.$(TOOLSET)) $(GYP_OBJCXXFLAGS) $(DEPFLAGS) -c -o $@ $< 448 cmd_objcxx = $(CXX$(TOOLSET)) $(GYP_OBJCXXFLAGS) $(DEPFLAGS) -c -o $@ $<
449 449
450 # Commands for precompiled header files. 450 # Commands for precompiled header files.
451 quiet_cmd_pch_c = CXX($(TOOLSET)) $@ 451 quiet_cmd_pch_c = CXX$(QUIET_TOOLSET) $@
452 cmd_pch_c = $(CC.$(TOOLSET)) $(GYP_PCH_CFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET) ) -c -o $@ $< 452 cmd_pch_c = $(CC$(TOOLSET)) $(GYP_PCH_CFLAGS) $(DEPFLAGS) $(CXXFLAGS$(TOOLSET)) -c -o $@ $<
453 quiet_cmd_pch_cc = CXX($(TOOLSET)) $@ 453 quiet_cmd_pch_cc = CXX$(QUIET_TOOLSET) $@
454 cmd_pch_cc = $(CC.$(TOOLSET)) $(GYP_PCH_CXXFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLS ET)) -c -o $@ $< 454 cmd_pch_cc = $(CC$(TOOLSET)) $(GYP_PCH_CXXFLAGS) $(DEPFLAGS) $(CXXFLAGS$(TOOLSET )) -c -o $@ $<
455 quiet_cmd_pch_m = CXX($(TOOLSET)) $@ 455 quiet_cmd_pch_m = CXX$(QUIET_TOOLSET) $@
456 cmd_pch_m = $(CC.$(TOOLSET)) $(GYP_PCH_OBJCFLAGS) $(DEPFLAGS) -c -o $@ $< 456 cmd_pch_m = $(CC$(TOOLSET)) $(GYP_PCH_OBJCFLAGS) $(DEPFLAGS) -c -o $@ $<
457 quiet_cmd_pch_mm = CXX($(TOOLSET)) $@ 457 quiet_cmd_pch_mm = CXX$(QUIET_TOOLSET) $@
458 cmd_pch_mm = $(CC.$(TOOLSET)) $(GYP_PCH_OBJCXXFLAGS) $(DEPFLAGS) -c -o $@ $< 458 cmd_pch_mm = $(CC$(TOOLSET)) $(GYP_PCH_OBJCXXFLAGS) $(DEPFLAGS) -c -o $@ $<
459 459
460 # gyp-mac-tool is written next to the root Makefile by gyp. 460 # gyp-mac-tool is written next to the root Makefile by gyp.
461 # Use $(4) for the command, since $(2) and $(3) are used as flag by do_cmd 461 # Use $(4) for the command, since $(2) and $(3) are used as flag by do_cmd
462 # already. 462 # already.
463 quiet_cmd_mac_tool = MACTOOL $(4) $< 463 quiet_cmd_mac_tool = MACTOOL $(4) $<
464 cmd_mac_tool = ./gyp-mac-tool $(4) $< "$@" 464 cmd_mac_tool = ./gyp-mac-tool $(4) $< "$@"
465 465
466 quiet_cmd_mac_package_framework = PACKAGE FRAMEWORK $@ 466 quiet_cmd_mac_package_framework = PACKAGE FRAMEWORK $@
467 cmd_mac_package_framework = ./gyp-mac-tool package-framework "$@" $(4) 467 cmd_mac_package_framework = ./gyp-mac-tool package-framework "$@" $(4)
468 468
469 quiet_cmd_infoplist = INFOPLIST $@ 469 quiet_cmd_infoplist = INFOPLIST $@
470 cmd_infoplist = $(CC.$(TOOLSET)) -E -P -Wno-trigraphs -x c $(INFOPLIST_DEFINES) "$<" -o "$@" 470 cmd_infoplist = $(CC$(TOOLSET)) -E -P -Wno-trigraphs -x c $(INFOPLIST_DEFINES) " $<" -o "$@"
471 """ 471 """
472 472
473 SHARED_HEADER_SUN_COMMANDS = """ 473 SHARED_HEADER_SUN_COMMANDS = """
474 # gyp-sun-tool is written next to the root Makefile by gyp. 474 # gyp-sun-tool is written next to the root Makefile by gyp.
475 # Use $(4) for the command, since $(2) and $(3) are used as flag by do_cmd 475 # Use $(4) for the command, since $(2) and $(3) are used as flag by do_cmd
476 # already. 476 # already.
477 quiet_cmd_sun_tool = SUNTOOL $(4) $< 477 quiet_cmd_sun_tool = SUNTOOL $(4) $<
478 cmd_sun_tool = ./gyp-sun-tool $(4) $< "$@" 478 cmd_sun_tool = ./gyp-sun-tool $(4) $< "$@"
479 """ 479 """
480 480
481 481
482 def WriteRootHeaderSuffixRules(writer): 482 def WriteRootHeaderSuffixRules(writer):
483 extensions = sorted(COMPILABLE_EXTENSIONS.keys(), key=str.lower) 483 extensions = sorted(COMPILABLE_EXTENSIONS.keys(), key=str.lower)
484 484
485 writer.write('# Suffix rules, putting all outputs into $(obj).\n') 485 writer.write('# Suffix rules, putting all outputs into $(obj).\n')
486 for ext in extensions: 486 for ext in extensions:
487 writer.write('$(obj).$(TOOLSET)/%%.o: $(srcdir)/%%%s FORCE_DO_CMD\n' % ext) 487 writer.write('$(obj)$(TOOLSET)/%%.o: $(srcdir)/%%%s FORCE_DO_CMD\n' % ext)
488 writer.write('\t@$(call do_cmd,%s,1)\n' % COMPILABLE_EXTENSIONS[ext]) 488 writer.write('\t@$(call do_cmd,%s,1)\n' % COMPILABLE_EXTENSIONS[ext])
489 489
490 writer.write('\n# Try building from generated source, too.\n') 490 writer.write('\n# Try building from generated source, too.\n')
491 for ext in extensions: 491 for ext in extensions:
492 writer.write( 492 writer.write(
493 '$(obj).$(TOOLSET)/%%.o: $(obj).$(TOOLSET)/%%%s FORCE_DO_CMD\n' % ext) 493 '$(obj)$(TOOLSET)/%%.o: $(obj)$(TOOLSET)/%%%s FORCE_DO_CMD\n' % ext)
494 writer.write('\t@$(call do_cmd,%s,1)\n' % COMPILABLE_EXTENSIONS[ext]) 494 writer.write('\t@$(call do_cmd,%s,1)\n' % COMPILABLE_EXTENSIONS[ext])
495 writer.write('\n') 495 writer.write('\n')
496 for ext in extensions: 496 for ext in extensions:
497 writer.write('$(obj).$(TOOLSET)/%%.o: $(obj)/%%%s FORCE_DO_CMD\n' % ext) 497 writer.write('$(obj)$(TOOLSET)/%%.o: $(obj)/%%%s FORCE_DO_CMD\n' % ext)
498 writer.write('\t@$(call do_cmd,%s,1)\n' % COMPILABLE_EXTENSIONS[ext]) 498 writer.write('\t@$(call do_cmd,%s,1)\n' % COMPILABLE_EXTENSIONS[ext])
499 writer.write('\n') 499 writer.write('\n')
500 500
501 501
502 SHARED_HEADER_SUFFIX_RULES_COMMENT1 = ("""\ 502 SHARED_HEADER_SUFFIX_RULES_COMMENT1 = ("""\
503 # Suffix rules, putting all outputs into $(obj). 503 # Suffix rules, putting all outputs into $(obj).
504 """) 504 """)
505 505
506 506
507 SHARED_HEADER_SUFFIX_RULES_COMMENT2 = ("""\ 507 SHARED_HEADER_SUFFIX_RULES_COMMENT2 = ("""\
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
637 self._num_outputs = 0 637 self._num_outputs = 0
638 638
639 self.suffix_rules_srcdir = {} 639 self.suffix_rules_srcdir = {}
640 self.suffix_rules_objdir1 = {} 640 self.suffix_rules_objdir1 = {}
641 self.suffix_rules_objdir2 = {} 641 self.suffix_rules_objdir2 = {}
642 642
643 # Generate suffix rules for all compilable extensions. 643 # Generate suffix rules for all compilable extensions.
644 for ext in COMPILABLE_EXTENSIONS.keys(): 644 for ext in COMPILABLE_EXTENSIONS.keys():
645 # Suffix rules for source folder. 645 # Suffix rules for source folder.
646 self.suffix_rules_srcdir.update({ext: ("""\ 646 self.suffix_rules_srcdir.update({ext: ("""\
647 $(obj).$(TOOLSET)/$(TARGET)/%%.o: $(srcdir)/%%%s FORCE_DO_CMD 647 $(obj)$(TOOLSET)/$(TARGET)/%%.o: $(srcdir)/%%%s FORCE_DO_CMD
648 @$(call do_cmd,%s,1) 648 @$(call do_cmd,%s,1)
649 """ % (ext, COMPILABLE_EXTENSIONS[ext]))}) 649 """ % (ext, COMPILABLE_EXTENSIONS[ext]))})
650 650
651 # Suffix rules for generated source files. 651 # Suffix rules for generated source files.
652 self.suffix_rules_objdir1.update({ext: ("""\ 652 self.suffix_rules_objdir1.update({ext: ("""\
653 $(obj).$(TOOLSET)/$(TARGET)/%%.o: $(obj).$(TOOLSET)/%%%s FORCE_DO_CMD 653 $(obj)$(TOOLSET)/$(TARGET)/%%.o: $(obj)$(TOOLSET)/%%%s FORCE_DO_CMD
654 @$(call do_cmd,%s,1) 654 @$(call do_cmd,%s,1)
655 """ % (ext, COMPILABLE_EXTENSIONS[ext]))}) 655 """ % (ext, COMPILABLE_EXTENSIONS[ext]))})
656 self.suffix_rules_objdir2.update({ext: ("""\ 656 self.suffix_rules_objdir2.update({ext: ("""\
657 $(obj).$(TOOLSET)/$(TARGET)/%%.o: $(obj)/%%%s FORCE_DO_CMD 657 $(obj)$(TOOLSET)/$(TARGET)/%%.o: $(obj)/%%%s FORCE_DO_CMD
658 @$(call do_cmd,%s,1) 658 @$(call do_cmd,%s,1)
659 """ % (ext, COMPILABLE_EXTENSIONS[ext]))}) 659 """ % (ext, COMPILABLE_EXTENSIONS[ext]))})
660 660
661 661
662 def NumOutputs(self): 662 def NumOutputs(self):
663 return self._num_outputs 663 return self._num_outputs
664 664
665 665
666 def Write(self, qualified_target, base_path, output_filename, spec, configs, 666 def Write(self, qualified_target, base_path, output_filename, spec, configs,
667 part_of_all): 667 part_of_all):
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
711 711
712 self._INSTALLABLE_TARGETS = ('executable', 'loadable_module', 712 self._INSTALLABLE_TARGETS = ('executable', 'loadable_module',
713 'shared_library') 713 'shared_library')
714 if self.type in self._INSTALLABLE_TARGETS: 714 if self.type in self._INSTALLABLE_TARGETS:
715 self.alias = os.path.basename(self.output) 715 self.alias = os.path.basename(self.output)
716 install_path = self._InstallableTargetInstallPath() 716 install_path = self._InstallableTargetInstallPath()
717 else: 717 else:
718 self.alias = self.output 718 self.alias = self.output
719 install_path = self.output 719 install_path = self.output
720 720
721 self.WriteLn("TOOLSET := " + self.toolset) 721 if self.toolset == 'target':
722 self.WriteLn("QUIET_TOOLSET :=")
723 self.WriteLn("TOOLSET :=")
724 else:
725 self.WriteLn("QUIET_TOOLSET := (%s)" % self.toolset)
726 self.WriteLn("TOOLSET := %s" % self._ToolsetSuffix())
722 self.WriteLn("TARGET := " + self.target) 727 self.WriteLn("TARGET := " + self.target)
723 728
724 # Actions must come first, since they can generate more OBJs for use below. 729 # Actions must come first, since they can generate more OBJs for use below.
725 if 'actions' in spec: 730 if 'actions' in spec:
726 self.WriteActions(spec['actions'], extra_sources, extra_outputs, 731 self.WriteActions(spec['actions'], extra_sources, extra_outputs,
727 extra_mac_bundle_resources, part_of_all) 732 extra_mac_bundle_resources, part_of_all)
728 733
729 # Rules must be early like actions. 734 # Rules must be early like actions.
730 if 'rules' in spec: 735 if 'rules' in spec:
731 self.WriteRules(spec['rules'], extra_sources, extra_outputs, 736 self.WriteRules(spec['rules'], extra_sources, extra_outputs,
(...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after
1079 1084
1080 def WriteMacInfoPlist(self, bundle_deps): 1085 def WriteMacInfoPlist(self, bundle_deps):
1081 """Write Makefile code for bundle Info.plist files.""" 1086 """Write Makefile code for bundle Info.plist files."""
1082 info_plist, out, defines, extra_env = gyp.xcode_emulation.GetMacInfoPlist( 1087 info_plist, out, defines, extra_env = gyp.xcode_emulation.GetMacInfoPlist(
1083 generator_default_variables['PRODUCT_DIR'], self.xcode_settings, 1088 generator_default_variables['PRODUCT_DIR'], self.xcode_settings,
1084 self.Absolutify) 1089 self.Absolutify)
1085 if not info_plist: 1090 if not info_plist:
1086 return 1091 return
1087 if defines: 1092 if defines:
1088 # Create an intermediate file to store preprocessed results. 1093 # Create an intermediate file to store preprocessed results.
1089 intermediate_plist = ('$(obj).$(TOOLSET)/$(TARGET)/' + 1094 intermediate_plist = ('$(obj)$(TOOLSET)/$(TARGET)/' +
1090 os.path.basename(info_plist)) 1095 os.path.basename(info_plist))
1091 self.WriteList(defines, intermediate_plist + ': INFOPLIST_DEFINES', '-D', 1096 self.WriteList(defines, intermediate_plist + ': INFOPLIST_DEFINES', '-D',
1092 quoter=EscapeCppDefine) 1097 quoter=EscapeCppDefine)
1093 self.WriteMakeRule([intermediate_plist], [info_plist], 1098 self.WriteMakeRule([intermediate_plist], [info_plist],
1094 ['$(call do_cmd,infoplist)', 1099 ['$(call do_cmd,infoplist)',
1095 # "Convert" the plist so that any weird whitespace changes from the 1100 # "Convert" the plist so that any weird whitespace changes from the
1096 # preprocessor do not affect the XML parser in mac_tool. 1101 # preprocessor do not affect the XML parser in mac_tool.
1097 '@plutil -convert xml1 $@ $@']) 1102 '@plutil -convert xml1 $@ $@'])
1098 info_plist = intermediate_plist 1103 info_plist = intermediate_plist
1099 # plists can contain envvars and substitute them into the file. 1104 # plists can contain envvars and substitute them into the file.
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
1307 1312
1308 1313
1309 def ComputeOutput(self, spec): 1314 def ComputeOutput(self, spec):
1310 """Return the 'output' (full output path) of a gyp spec. 1315 """Return the 'output' (full output path) of a gyp spec.
1311 1316
1312 E.g., the loadable module 'foobar' in directory 'baz' will produce 1317 E.g., the loadable module 'foobar' in directory 'baz' will produce
1313 '$(obj)/baz/libfoobar.so' 1318 '$(obj)/baz/libfoobar.so'
1314 """ 1319 """
1315 assert not self.is_mac_bundle 1320 assert not self.is_mac_bundle
1316 1321
1317 path = os.path.join('$(obj).' + self.toolset, self.path) 1322 path = os.path.join('$(obj)' + self._ToolsetSuffix(), self.path)
1318 if self.type == 'executable' or self._InstallImmediately(): 1323 if self.type == 'executable' or self._InstallImmediately():
1319 path = '$(builddir)' 1324 path = '$(builddir)'
1320 path = spec.get('product_dir', path) 1325 path = spec.get('product_dir', path)
1321 return os.path.join(path, self.ComputeOutputBasename(spec)) 1326 return os.path.join(path, self.ComputeOutputBasename(spec))
1322 1327
1323 1328
1324 def ComputeMacBundleOutput(self, spec): 1329 def ComputeMacBundleOutput(self, spec):
1325 """Return the 'output' (full output path) to a bundle output directory.""" 1330 """Return the 'output' (full output path) to a bundle output directory."""
1326 assert self.is_mac_bundle 1331 assert self.is_mac_bundle
1327 path = generator_default_variables['PRODUCT_DIR'] 1332 path = generator_default_variables['PRODUCT_DIR']
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
1396 QuoteSpaces(self.output), 1401 QuoteSpaces(self.output),
1397 QuoteSpaces(self.output_binary)) 1402 QuoteSpaces(self.output_binary))
1398 if target_postbuild: 1403 if target_postbuild:
1399 target_postbuilds[configname] = target_postbuild 1404 target_postbuilds[configname] = target_postbuild
1400 else: 1405 else:
1401 ldflags = config.get('ldflags', []) 1406 ldflags = config.get('ldflags', [])
1402 # Compute an rpath for this output if needed. 1407 # Compute an rpath for this output if needed.
1403 if any(dep.endswith('.so') for dep in deps): 1408 if any(dep.endswith('.so') for dep in deps):
1404 # We want to get the literal string "$ORIGIN" into the link command, 1409 # We want to get the literal string "$ORIGIN" into the link command,
1405 # so we need lots of escaping. 1410 # so we need lots of escaping.
1406 ldflags.append(r'-Wl,-rpath=\$$ORIGIN/lib.%s/' % self.toolset) 1411 ldflags.append(r'-Wl,-rpath=\$$ORIGIN/lib%s/' % self._ToolsetSuffix( ))
1407 ldflags.append(r'-Wl,-rpath-link=\$(builddir)/lib.%s/' % 1412 ldflags.append(r'-Wl,-rpath-link=\$(builddir)/lib%s/' %
1408 self.toolset) 1413 self._ToolsetSuffix())
1409 self.WriteList(ldflags, 'LDFLAGS_%s' % configname) 1414 self.WriteList(ldflags, 'LDFLAGS_%s' % configname)
1410 libraries = spec.get('libraries') 1415 libraries = spec.get('libraries')
1411 if libraries: 1416 if libraries:
1412 # Remove duplicate entries 1417 # Remove duplicate entries
1413 libraries = gyp.common.uniquer(libraries) 1418 libraries = gyp.common.uniquer(libraries)
1414 if self.flavor == 'mac': 1419 if self.flavor == 'mac':
1415 libraries = self.xcode_settings.AdjustLibraries(libraries) 1420 libraries = self.xcode_settings.AdjustLibraries(libraries)
1416 self.WriteList(libraries, 'LIBS') 1421 self.WriteList(libraries, 'LIBS')
1417 self.WriteLn('%s: GYP_LDFLAGS := $(LDFLAGS_$(BUILDTYPE))' % 1422 self.WriteLn('%s: GYP_LDFLAGS := $(LDFLAGS_$(BUILDTYPE))' %
1418 QuoteSpaces(self.output_binary)) 1423 QuoteSpaces(self.output_binary))
(...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after
1792 # the escaped space does the right thing. For 1797 # the escaped space does the right thing. For
1793 # export foo := a\ b 1798 # export foo := a\ b
1794 # it does not -- the backslash is written to the env as literal character. 1799 # it does not -- the backslash is written to the env as literal character.
1795 # So don't escape spaces in |env[k]|. 1800 # So don't escape spaces in |env[k]|.
1796 self.WriteLn('%s: export %s := %s' % (QuoteSpaces(target), k, env[k])) 1801 self.WriteLn('%s: export %s := %s' % (QuoteSpaces(target), k, env[k]))
1797 1802
1798 1803
1799 def Objectify(self, path): 1804 def Objectify(self, path):
1800 """Convert a path to its output directory form.""" 1805 """Convert a path to its output directory form."""
1801 if '$(' in path: 1806 if '$(' in path:
1802 path = path.replace('$(obj)/', '$(obj).%s/$(TARGET)/' % self.toolset) 1807 path = path.replace('$(obj)/', '$(obj)%s/$(TARGET)/' % self._ToolsetSuffix ())
Nico 2012/02/16 20:30:08 80 COLS!!!!!!!!!!!!
1803 return path 1808 return path
1804 return '$(obj).%s/$(TARGET)/%s' % (self.toolset, path) 1809 return '$(obj)%s/$(TARGET)/%s' % (self._ToolsetSuffix(), path)
1805 1810
1806 1811
1807 def Pchify(self, path, lang): 1812 def Pchify(self, path, lang):
1808 """Convert a prefix header path to its output directory form.""" 1813 """Convert a prefix header path to its output directory form."""
1809 path = self.Absolutify(path) 1814 path = self.Absolutify(path)
1810 if '$(' in path: 1815 if '$(' in path:
1811 path = path.replace('$(obj)/', '$(obj).%s/$(TARGET)/pch-%s' % 1816 path = path.replace('$(obj)/', '$(obj)%s/$(TARGET)/pch-%s' %
1812 (self.toolset, lang)) 1817 (self._ToolsetSuffix(), lang))
1813 return path 1818 return path
1814 return '$(obj).%s/$(TARGET)/pch-%s/%s' % (self.toolset, lang, path) 1819 return '$(obj)%s/$(TARGET)/pch-%s/%s' % (self._ToolsetSuffix(), lang, path)
1815 1820
1816 1821
1817 def Absolutify(self, path): 1822 def Absolutify(self, path):
1818 """Convert a subdirectory-relative path into a base-relative path. 1823 """Convert a subdirectory-relative path into a base-relative path.
1819 Skips over paths that contain variables.""" 1824 Skips over paths that contain variables."""
1820 if '$(' in path: 1825 if '$(' in path:
1821 # path is no existing file in this case, but calling normpath is still 1826 # path is no existing file in this case, but calling normpath is still
1822 # important for trimming trailing slashes. 1827 # important for trimming trailing slashes.
1823 return os.path.normpath(path) 1828 return os.path.normpath(path)
1824 return os.path.normpath(os.path.join(self.path, path)) 1829 return os.path.normpath(os.path.join(self.path, path))
(...skipping 15 matching lines...) Expand all
1840 return path 1845 return path
1841 1846
1842 1847
1843 def _InstallableTargetInstallPath(self): 1848 def _InstallableTargetInstallPath(self):
1844 """Returns the location of the final output for an installable target.""" 1849 """Returns the location of the final output for an installable target."""
1845 # Xcode puts shared_library results into PRODUCT_DIR, and some gyp files 1850 # Xcode puts shared_library results into PRODUCT_DIR, and some gyp files
1846 # rely on this. Emulate this behavior for mac. 1851 # rely on this. Emulate this behavior for mac.
1847 if self.type == 'shared_library' and self.flavor != 'mac': 1852 if self.type == 'shared_library' and self.flavor != 'mac':
1848 # Install all shared libs into a common directory (per toolset) for 1853 # Install all shared libs into a common directory (per toolset) for
1849 # convenient access with LD_LIBRARY_PATH. 1854 # convenient access with LD_LIBRARY_PATH.
1850 return '$(builddir)/lib.%s/%s' % (self.toolset, self.alias) 1855 return '$(builddir)/lib%s/%s' % (self._ToolsetSuffix(), self.alias)
1851 return '$(builddir)/' + self.alias 1856 return '$(builddir)/' + self.alias
1852 1857
1858 def _ToolsetSuffix(self):
1859 """Return a suffix suitable for a path that is unique to the current
1860 toolset."""
1861 assert self.toolset # 'target' maps to '', so don't allow '' as input.
Nico 2012/02/16 20:30:08 s/#/, "/ maybe
1862 if self.toolset == 'target':
1863 return ''
1864 return '.' + self.toolset
1853 1865
1854 def WriteAutoRegenerationRule(params, root_makefile, makefile_name, 1866 def WriteAutoRegenerationRule(params, root_makefile, makefile_name,
1855 build_files): 1867 build_files):
1856 """Write the target to regenerate the Makefile.""" 1868 """Write the target to regenerate the Makefile."""
1857 options = params['options'] 1869 options = params['options']
1858 build_files_args = [gyp.common.RelativePath(filename, options.toplevel_dir) 1870 build_files_args = [gyp.common.RelativePath(filename, options.toplevel_dir)
1859 for filename in params['build_files_arg']] 1871 for filename in params['build_files_arg']]
1860 gyp_binary = gyp.common.FixIfRelativePath(params['gyp_binary'], 1872 gyp_binary = gyp.common.FixIfRelativePath(params['gyp_binary'],
1861 options.toplevel_dir) 1873 options.toplevel_dir)
1862 if not gyp_binary.startswith(os.sep): 1874 if not gyp_binary.startswith(os.sep):
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
2099 # Add a check to make sure we tried to process all the .d files. 2111 # Add a check to make sure we tried to process all the .d files.
2100 all_deps += """ 2112 all_deps += """
2101 ifneq ($(word %(last)d,$(d_files)),) 2113 ifneq ($(word %(last)d,$(d_files)),)
2102 $(error Found unprocessed dependency files (gyp didn't generate enough rules !)) 2114 $(error Found unprocessed dependency files (gyp didn't generate enough rules !))
2103 endif 2115 endif
2104 """ % { 'last': ((num_outputs / 1000) + 1) * 1000 + 1 } 2116 """ % { 'last': ((num_outputs / 1000) + 1) * 1000 + 1 }
2105 2117
2106 root_makefile.write(SHARED_FOOTER % { 'generate_all_deps': all_deps }) 2118 root_makefile.write(SHARED_FOOTER % { 'generate_all_deps': all_deps })
2107 2119
2108 root_makefile.close() 2120 root_makefile.close()
OLDNEW
« no previous file with comments | « no previous file | test/lib/TestGyp.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698