Ë ��”R?�åãóª—ddlmZddlZddlZddlZddlZddlZddlZddlZddlm Z ddlm Z ddl Z ddddddd d d d d ddddœZ dZ dagagagadad„Zd„ZdZdZdZdZdZdZdezdzezdzezdzezd zezd!zZd"Zd#„Zd$Zd%Zd&Z d'Z!d(d)d)d)d(d(d*œZ"d+„Z#d,„Z$d-„Z%d.„Z&d/„Z'd0„Z(d1„Z)d2„Z*da+d3„Z,d;d4„Z-d5„Z.iZ/iZ0Gd6„d7e1«Z2d8„Z3d9„Z4d:„Z5y)<é)Úprint_functionN)ÚGetEnvironFallback)ÚGypErrorÚÚlibú.az $(obj).$(TOOLSET)/$(TARGET)/geniz $(obj)/genú $(builddir)ú%(INPUT_ROOT)sú%(INPUT_DIRNAME)sz $(abspath $<)z $(suffix $<)z $(notdir $<)ú $(BUILDTYPE))ÚEXECUTABLE_PREFIXÚEXECUTABLE_SUFFIXÚSTATIC_LIB_PREFIXÚSHARED_LIB_PREFIXÚSTATIC_LIB_SUFFIXÚINTERMEDIATE_DIRÚSHARED_INTERMEDIATE_DIRÚ PRODUCT_DIRÚRULE_INPUT_ROOTÚRULE_INPUT_DIRNAMEÚRULE_INPUT_PATHÚRULE_INPUT_EXTÚRULE_INPUT_NAMEÚCONFIGURATION_NAMETFcó\—tjj|«}|dk(rŸ|jdd«|jdd«|jdtd«|jdtd«dd lmcm}t|d g«a t|d g«a t|d g«a tjd ddœ«y |}|dk(rd}|jd|«|dk(r|jdd«n|jdd«|jdd«|jdd«y )zDCalculate additional variables for use in the build (called by gyp).ÚmacÚOSÚSHARED_LIB_SUFFIXz.dylibÚSHARED_LIB_DIRrÚLIB_DIRrNÚ+generator_additional_non_configuration_keysÚ"generator_additional_path_sectionsÚ!generator_extra_sources_for_rulesÚobjcÚobjcxx)ú.mú.mmÚandroidÚlinuxÚaixrú.soz$(builddir)/lib.$(TOOLSET)z$(obj).$(TOOLSET))ÚgypÚcommonÚ GetFlavorÚ setdefaultÚgenerator_default_variablesÚgyp.generator.xcodeÚ generatorÚxcodeÚgetattrr!r"r#ÚCOMPILABLE_EXTENSIONSÚupdate)Údefault_variablesÚparamsÚflavorÚxcode_generatorÚoperating_systems ú7/usr/lib/python3.12/site-packages/gyp/generator/make.pyÚCalculateVariablesr=Ds7€ä �:‰:× Ñ  Ó '€&Ø ˆu‚_Ø× Ñ   uÔ-Ø× Ñ Ð!4°hÔ?Ø× Ñ Ð!1Ü!<¸]Ñ!KôMà× Ñ  Ü!<¸]Ñ!KôM÷ 2Ð1ä29¸/Ø5°ró3;Ð/ô*1°Ø,¨bó*2Ð&ô)0°Ø+¨Ró)1Ð%ä× Ñ ¨¸Ñ!AÕBàÐØ �ÒØ ÐØ× Ñ  Ð'7Ô8Ø �‚Ø×"Ñ"Ð#6¸Õ=à×"Ñ"Ð#6¸Ô>Ø× Ñ Ð!1Ð2NÔOØ× Ñ  Ð,?Õ@ócóX—|jdi«}|jdd«}|rda|djxs|dj}|jdd«}tj j tj j||d««}|dj|d œay) zOCalculate the generator specific info that gets fed to input (called by gyp).Úgenerator_flagsÚandroid_ndk_versionNTÚoptionsÚ output_dirÚoutÚgypfiles)ÚtoplevelÚqualified_out_dir) ÚgetÚ#generator_wants_sorted_dependenciesÚgenerator_outputÚ toplevel_dirÚosÚpathÚnormpathÚjoinÚgenerator_filelist_paths)r8r@rArCÚ builddir_namerGs r<ÚCalculateGeneratorInputInforRis°€ð—J‘JÐ0°"Ó5€/Ø'×+Ñ+Ð,AÀ4ÓHÐáà*.Ð'à�iÑ ×1Ñ1ò.Ø�iÑ ×-Ñ-ð à!×%Ñ% l°EÓ:€-Ü—g‘g×&Ñ&¤r§w¡w§|¡|Ø� ˜zó(+ó,Ðð �yÑ!×.Ñ.Ø*ñÑr>Ú?aÎquiet_cmd_alink = AR($(TOOLSET)) $@ cmd_alink = rm -f $@ && $(AR.$(TOOLSET)) crs $@ $(filter %.o,$^) quiet_cmd_alink_thin = AR($(TOOLSET)) $@ cmd_alink_thin = rm -f $@ && $(AR.$(TOOLSET)) crsT $@ $(filter %.o,$^) # Due to circular dependencies between libraries :(, we wrap the # special "figure out circular dependencies" flags around the entire # input list during linking. quiet_cmd_link = LINK($(TOOLSET)) $@ cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ -Wl,--start-group $(LD_INPUTS) -Wl,--end-group $(LIBS) # We support two kinds of shared objects (.so): # 1) shared_library, which is just bundling together many dependent libraries # into a link line. # 2) loadable_module, which is generating a module intended for dlopen(). # # They differ only slightly: # In the former case, we want to package all dependent code into the .so. # In the latter case, we want to package just the API exposed by the # outermost module. # This means shared_library uses --whole-archive, while loadable_module doesn't. # (Note that --whole-archive is incompatible with the --start-group used in # normal linking.) # Other shared-object link notes: # - Set SONAME to the library filename so our binaries don't reference # the local, absolute paths used on the link command-line. quiet_cmd_solink = SOLINK($(TOOLSET)) $@ cmd_solink = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl,-soname=$(@F) -o $@ -Wl,--whole-archive $(LD_INPUTS) -Wl,--no-whole-archive $(LIBS) quiet_cmd_solink_module = SOLINK_MODULE($(TOOLSET)) $@ 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) ahquiet_cmd_alink = LIBTOOL-STATIC $@ cmd_alink = rm -f $@ && ./gyp-mac-tool filter-libtool libtool $(GYP_LIBTOOLFLAGS) -static -o $@ $(filter %.o,$^) quiet_cmd_link = LINK($(TOOLSET)) $@ cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o "$@" $(LD_INPUTS) $(LIBS) quiet_cmd_solink = SOLINK($(TOOLSET)) $@ cmd_solink = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o "$@" $(LD_INPUTS) $(LIBS) quiet_cmd_solink_module = SOLINK_MODULE($(TOOLSET)) $@ cmd_solink_module = $(LINK.$(TOOLSET)) -bundle $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(filter-out FORCE_DO_CMD, $^) $(LIBS) aàquiet_cmd_alink = AR($(TOOLSET)) $@ cmd_alink = rm -f $@ && $(AR.$(TOOLSET)) crs $@ $(filter %.o,$^) quiet_cmd_alink_thin = AR($(TOOLSET)) $@ cmd_alink_thin = rm -f $@ && $(AR.$(TOOLSET)) crsT $@ $(filter %.o,$^) # Due to circular dependencies between libraries :(, we wrap the # special "figure out circular dependencies" flags around the entire # input list during linking. quiet_cmd_link = LINK($(TOOLSET)) $@ quiet_cmd_link_host = LINK($(TOOLSET)) $@ cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ -Wl,--start-group $(LD_INPUTS) -Wl,--end-group $(LIBS) cmd_link_host = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(LD_INPUTS) $(LIBS) # Other shared-object link notes: # - Set SONAME to the library filename so our binaries don't reference # the local, absolute paths used on the link command-line. quiet_cmd_solink = SOLINK($(TOOLSET)) $@ cmd_solink = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl,-soname=$(@F) -o $@ -Wl,--whole-archive $(LD_INPUTS) -Wl,--no-whole-archive $(LIBS) quiet_cmd_solink_module = SOLINK_MODULE($(TOOLSET)) $@ 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) quiet_cmd_solink_module_host = SOLINK_MODULE($(TOOLSET)) $@ cmd_solink_module_host = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl,-soname=$(@F) -o $@ $(filter-out FORCE_DO_CMD, $^) $(LIBS) a´quiet_cmd_alink = AR($(TOOLSET)) $@ cmd_alink = rm -f $@ && $(AR.$(TOOLSET)) -X32_64 crs $@ $(filter %.o,$^) quiet_cmd_alink_thin = AR($(TOOLSET)) $@ cmd_alink_thin = rm -f $@ && $(AR.$(TOOLSET)) -X32_64 crs $@ $(filter %.o,$^) quiet_cmd_link = LINK($(TOOLSET)) $@ cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(LD_INPUTS) $(LIBS) quiet_cmd_solink = SOLINK($(TOOLSET)) $@ cmd_solink = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(LD_INPUTS) $(LIBS) quiet_cmd_solink_module = SOLINK_MODULE($(TOOLSET)) $@ cmd_solink_module = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(filter-out FORCE_DO_CMD, $^) $(LIBS) a¥quiet_cmd_alink = AR($(TOOLSET)) $@ cmd_alink = rm -f $@ && $(AR.$(TOOLSET)) crs $@ $(filter %.o,$^) quiet_cmd_alink_thin = AR($(TOOLSET)) $@ cmd_alink_thin = rm -f $@ && $(AR.$(TOOLSET)) crsT $@ $(filter %.o,$^) quiet_cmd_link = LINK($(TOOLSET)) $@ cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(LD_INPUTS) $(LIBS) quiet_cmd_solink = SOLINK($(TOOLSET)) $@ cmd_solink = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(LD_INPUTS) $(LIBS) -Wl,DLL quiet_cmd_solink_module = SOLINK_MODULE($(TOOLSET)) $@ cmd_solink_module = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(filter-out FORCE_DO_CMD, $^) $(LIBS) -Wl,DLL a. # We borrow heavily from the kernel build setup, though we are simpler since # we don't have Kconfig tweaking settings on us. # The implicit make rules have it looking for RCS files, among other things. # We instead explicitly write all the rules we care about. # It's even quicker (saves ~200ms) to pass -r on the command line. MAKEFLAGS=-r # The source directory tree. srcdir := %(srcdir)s abs_srcdir := $(abspath $(srcdir)) # The name of the builddir. builddir_name ?= %(builddir)s # The V=1 flag on command line makes us verbosely print command lines. ifdef V quiet= else quiet=quiet_ endif # Specify BUILDTYPE=Release on the command line for a release build. BUILDTYPE ?= %(default_configuration)s # Directory all our build output goes into. # Note that this must be two directories beneath src/ for unit tests to pass, # as they reach into the src/ directory for data with relative paths. builddir ?= $(builddir_name)/$(BUILDTYPE) abs_builddir := $(abspath $(builddir)) depsdir := $(builddir)/.deps # Object output directory. obj := $(builddir)/obj abs_obj := $(abspath $(obj)) # We build up a list of every single one of the targets so we can slurp in the # generated dependency rule Makefiles in one pass. all_deps := %(make_global_settings)s CC.target ?= %(CC.target)s CFLAGS.target ?= $(CPPFLAGS) $(CFLAGS) CXX.target ?= %(CXX.target)s CXXFLAGS.target ?= $(CPPFLAGS) $(CXXFLAGS) LINK.target ?= %(LINK.target)s LDFLAGS.target ?= $(LDFLAGS) AR.target ?= $(AR) # C++ apps need to be linked with g++. LINK ?= $(CXX.target) # TODO(evan): move all cross-compilation logic to gyp-time so we don't need # to replicate this environment fallback in make as well. CC.host ?= %(CC.host)s CFLAGS.host ?= $(CPPFLAGS_host) $(CFLAGS_host) CXX.host ?= %(CXX.host)s CXXFLAGS.host ?= $(CPPFLAGS_host) $(CXXFLAGS_host) LINK.host ?= %(LINK.host)s LDFLAGS.host ?= $(LDFLAGS_host) AR.host ?= %(AR.host)s # Define a dir function that can handle spaces. # http://www.gnu.org/software/make/manual/make.html#Syntax-of-Functions # "leading spaces cannot appear in the text of the first argument as written. # These characters can be put into the argument value by variable substitution." empty := space := $(empty) $(empty) # http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces replace_spaces = $(subst $(space),z ,$1) unreplace_spaces = $(subst a,$(space),$1) dirx = $(call unreplace_spaces,$(dir $(call replace_spaces,$1))) # Flags to make gcc output dependency info. Note that you need to be # careful here to use the flags that ccache and distcc can understand. # We write to a dep file on the side first and then rename at the end # so we can't end up with a broken dep file. depfile = $(depsdir)/$(call replace_spaces,$@).d DEPFLAGS = %(makedep_args)s -MF $(depfile).raw # We have to fixup the deps output in a few ways. # (1) the file output should mention the proper .o file. # ccache or distcc lose the path to the target, so we convert a rule of # the form: # foobar.o: DEP1 DEP2 # into # path/to/foobar.o: DEP1 DEP2 # (2) we want missing files not to cause us to fail to build. # We want to rewrite # foobar.o: DEP1 DEP2 \ # DEP3 # to # DEP1: # DEP2: # DEP3: # so if the files are missing, they're just considered phony rules. # We have to do some pretty insane escaping to get those backslashes # and dollar signs past make, the shell, and sed at the same time. # Doesn't work with spaces, but that's fine: .d files have spaces in # their names replaced with other characters. define fixup_dep # The depfile may not exist if the input file didn't have any #includes. touch $(depfile).raw # Fixup path as in (1). sed -e "s|^$(notdir $@)|$@|" $(depfile).raw >> $(depfile) # Add extra rules as in (2). # We remove slashes and replace spaces with new lines; # remove blank lines; # delete the first line and append a colon to the remaining lines. sed -e 's|\\||' -e 'y| |\n|' $(depfile).raw |\ grep -v '^$$' |\ sed -e 1d -e 's|$$|:|' \ >> $(depfile) rm $(depfile).raw endef # Command definitions: # - cmd_foo is the actual command to run; # - quiet_cmd_foo is the brief-output summary of the command. quiet_cmd_cc = CC($(TOOLSET)) $@ cmd_cc = $(CC.$(TOOLSET)) $(GYP_CFLAGS) $(DEPFLAGS) $(CFLAGS.$(TOOLSET)) -c -o $@ $< quiet_cmd_cxx = CXX($(TOOLSET)) $@ cmd_cxx = $(CXX.$(TOOLSET)) $(GYP_CXXFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) -c -o $@ $< %(extra_commands)s quiet_cmd_touch = TOUCH $@ cmd_touch = touch $@ quiet_cmd_copy = COPY $@ # send stderr to /dev/null to ignore messages when linking directories. cmd_copy = ln -f "$<" "$@" 2>/dev/null || (rm -rf "$@" && cp %(copy_archive_args)s "$<" "$@") %(link_commands)s # Define an escape_quotes function to escape single quotes. # This allows us to handle quotes properly as long as we always use # use single quotes and escape_quotes. escape_quotes = $(subst ','\'',$(1)) # This comment is here just to include a ' to unconfuse syntax highlighting. # Define an escape_vars function to escape '$' variable syntax. # This allows us to read/write command lines with shell variables (e.g. # $LD_LIBRARY_PATH), without triggering make substitution. escape_vars = $(subst $$,$$$$,$(1)) # Helper that expands to a shell command to echo a string exactly as it is in # make. This uses printf instead of echo because printf's behaviour with respect # to escape sequences is more portable than echo's across different shells # (e.g., dash, bash). exact_echo = printf '%%s\n' '$(call escape_quotes,$(1))' # Helper to compare the command we're about to run against the command # we logged the last time we ran the command. Produces an empty # string (false) when the commands match. # Tricky point: Make has no string-equality test function. # The kernel uses the following, but it seems like it would have false # positives, where one string reordered its arguments. # arg_check = $(strip $(filter-out $(cmd_$(1)), $(cmd_$@)) \ # $(filter-out $(cmd_$@), $(cmd_$(1)))) # We instead substitute each for the empty string into the other, and # say they're equal if both substitutions produce the empty string. # .d files contain aa instead of spaces, take that into account. command_changed = $(or $(subst $(cmd_$(1)),,$(cmd_$(call replace_spaces,$@))),\ $(subst $(cmd_$(call replace_spaces,$@)),,$(cmd_$(1)))) # Helper that is non-empty when a prerequisite changes. # Normally make does this implicitly, but we force rules to always run # so we can check their command lines. # $? -- new prerequisites # $| -- order-only dependencies prereq_changed = $(filter-out FORCE_DO_CMD,$(filter-out $|,$?)) # Helper that executes all postbuilds until one fails. define do_postbuilds @E=0;\ for p in $(POSTBUILDS); do\ eval $$p;\ E=$$?;\ if [ $$E -ne 0 ]; then\ break;\ fi;\ done;\ if [ $$E -ne 0 ]; then\ rm -rf "$@";\ exit $$E;\ fi endef # do_cmd: run a command via the above cmd_foo names, if necessary. # Should always run for a given target to handle command-line changes. # Second argument, if non-zero, makes it do asm/C/C++ dependency munging. # Third argument, if non-zero, makes it do POSTBUILDS processing. # Note: We intentionally do NOT call dirx for depfile, since it contains z* for # spaces already and dirx strips the a× characters. define do_cmd $(if $(or $(command_changed),$(prereq_changed)), @$(call exact_echo, $($(quiet)cmd_$(1))) @mkdir -p "$(call dirx,$@)" "$(dir $(depfile))" $(if $(findstring flock,$(word %(flock_index)d,$(cmd_$1))), @$(cmd_$(1)) @echo " $(quiet_cmd_$(1)): Finished", @$(cmd_$(1)) ) @$(call exact_echo,$(call escape_vars,cmd_$(call replace_spaces,$@) := $(cmd_$(1)))) > $(depfile) @$(if $(2),$(fixup_dep)) $(if $(and $(3), $(POSTBUILDS)), $(call do_postbuilds) ) ) endef # Declare the "%(default_target)s" target first so it is the default, # even though we don't have the deps yet. .PHONY: %(default_target)s %(default_target)s: # make looks for ways to re-generate included makefiles, but in our case, we # don't have a direct way. Explicitly telling make that it has nothing to do # for them makes it go faster. %%.d: ; # Use FORCE_DO_CMD to force a target to run. Should be coupled with # do_cmd. .PHONY: FORCE_DO_CMD FORCE_DO_CMD: aÔ quiet_cmd_objc = CXX($(TOOLSET)) $@ cmd_objc = $(CC.$(TOOLSET)) $(GYP_OBJCFLAGS) $(DEPFLAGS) -c -o $@ $< quiet_cmd_objcxx = CXX($(TOOLSET)) $@ cmd_objcxx = $(CXX.$(TOOLSET)) $(GYP_OBJCXXFLAGS) $(DEPFLAGS) -c -o $@ $< # Commands for precompiled header files. quiet_cmd_pch_c = CXX($(TOOLSET)) $@ cmd_pch_c = $(CC.$(TOOLSET)) $(GYP_PCH_CFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) -c -o $@ $< quiet_cmd_pch_cc = CXX($(TOOLSET)) $@ cmd_pch_cc = $(CC.$(TOOLSET)) $(GYP_PCH_CXXFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) -c -o $@ $< quiet_cmd_pch_m = CXX($(TOOLSET)) $@ cmd_pch_m = $(CC.$(TOOLSET)) $(GYP_PCH_OBJCFLAGS) $(DEPFLAGS) -c -o $@ $< quiet_cmd_pch_mm = CXX($(TOOLSET)) $@ cmd_pch_mm = $(CC.$(TOOLSET)) $(GYP_PCH_OBJCXXFLAGS) $(DEPFLAGS) -c -o $@ $< # gyp-mac-tool is written next to the root Makefile by gyp. # Use $(4) for the command, since $(2) and $(3) are used as flag by do_cmd # already. quiet_cmd_mac_tool = MACTOOL $(4) $< cmd_mac_tool = ./gyp-mac-tool $(4) $< "$@" quiet_cmd_mac_package_framework = PACKAGE FRAMEWORK $@ cmd_mac_package_framework = ./gyp-mac-tool package-framework "$@" $(4) quiet_cmd_infoplist = INFOPLIST $@ cmd_infoplist = $(CC.$(TOOLSET)) -E -P -Wno-trigraphs -x c $(INFOPLIST_DEFINES) "$<" -o "$@" có*—ttj«tj¬«}|j d«|D]1}|j d|z«|j dt|z«Œ3|j d«|D]1}|j d|z«|j dt|z«Œ3|j d«|D]1}|j d|z«|j dt|z«Œ3|j d«y) N)Úkeyú1# Suffix rules, putting all outputs into $(obj). z4$(obj).$(TOOLSET)/%%.o: $(srcdir)/%%%s FORCE_DO_CMD z @$(call do_cmd,%s,1) z, # Try building from generated source, too. z<$(obj).$(TOOLSET)/%%.o: $(obj).$(TOOLSET)/%%%s FORCE_DO_CMD Ú z1$(obj).$(TOOLSET)/%%.o: $(obj)/%%%s FORCE_DO_CMD )Úsortedr5ÚkeysÚstrÚlowerÚwrite)ÚwriterÚ extensionsÚexts r<ÚWriteRootHeaderSuffixRulesr`só€ÜÔ+×0Ñ0Ó2¼¿ ¹ ÔB€*à‡,�,ÐCÔDÛ €cØ ‡L�LÐHÈ3ÑNÔOØ ‡L�LÐ+Ô.CÀCÑ.HÑHÕIðð ‡,�,Ð?Ô@Û €cØ ‡L�LØGÈ#ÑMôOà ‡L�LÐ+Ô.CÀCÑ.HÑHÕIðð ‡,�,ˆtÔÛ €cØ ‡L�LÐEÈÑKÔLØ ‡L�LÐ+Ô.CÀCÑ.HÑHÕIðð ‡,�,ˆtÕr>rVz+# Try building from generated source, too. a�# "all" is a concatenation of the "all" targets from all the included # sub-makefiles. This is just here to clarify. all: # Add in dependency-tracking rules. $(all_deps) is the list of every single # target in our tree. Only consider the ones with .d (dependency) info: d_files := $(wildcard $(foreach f,$(all_deps),$(depsdir)/$(f).d)) ifneq ($(d_files),) include $(d_files) endif z/# This file is generated by gyp; do not edit. ÚccÚcxx)ú.cú.ccú.cppú.cxxú.sú.Scó6‡—ˆfd„tD«D]}|sŒyy)z:Return true if the file is compilable (should be in OBJS).c3ó@•K—|]}‰j|«–—Œy­w©N©Úendswith)Ú.0ÚeÚfilenames €r<Ú zCompilable..Jsøèø€Ð BÑ,A qˆh×Ñ ×"Ñ,AùsƒTF)r5)rpÚress` r<Ú CompilablersHsø€ã BÕ,AÖ B€cÚ Ù ðCð r>có$—|jd«S)zAReturn true if the file is linkable (should be on the link line).ú.orl©rps r<ÚLinkablerwPs€à × Ñ ˜4Ó Ð r>cóL—tjj|«ddzS)z1Translate a compilable filename to its .o target.rru)rLrMÚsplitextrvs r<ÚTargetrzUs!€ä �‰× Ñ ˜(Ó # AÑ &¨Ñ -Ð-r>có2—d|jdd«zdzS)zÇQuotes an argument so that it will be interpreted literally by a POSIX shell. Taken from http://stackoverflow.com/questions/35817/whats-the-best-way-to-escape-ossystem-calls-in-python Ú'z'\''©Úreplace©Úss r<ÚEscapeShellArgumentr�Zs€ð ˆq�y‰y˜˜gÓ&Ñ &¨Ñ ,Ð,r>có&—|jdd«S)zrMake has its own variable expansion syntax using $. We must escape it for string to be interpreted literally.Ú$z$$r}rs r<ÚEscapeMakeVariableExpansionr„bs€ð �‰�3˜Ó Ðr>cóR—t|«}t|«}|jdd«S)zBEscapes a CPP define so that it will reach the compiler unaltered.Ú#z\#)r�r„r~rs r<ÚEscapeCppDefiner‡hs)€ä˜!Ó€!Ü! !Ó$€!ð �‰�3˜Ó Ðr>có>—d|vrd|jdd«zdz}|S)zSTODO: Should this ideally be replaced with one or more of the above functions?Ú"z\"r}©Ústrings r<ÚQuoteIfNecessaryrŒqs*€ð ˆF�]Ø �6—>‘> # uÓ-Ñ -°Ñ 3€FØ €-r>có0—tjdd|«S)zGConvert a string to a value that is acceptable as a make variable name.z [^a-zA-Z0-9_]Ú_)ÚreÚsubrŠs r<ÚStringToMakefileVariabler‘ys€ä �‰�  fÓ -Ð-r>cób—d|vr|Stjj|«r|St|zS)z,Convert a path to its source directory form.ú$()rLrMÚisabsÚ srcdir_prefix)rMs r<Ú Sourceifyr–s.€à ˆT�\Ø €K܇W�W‡]�]�4ÔØ €KÜ ˜Ñ Ðr>có&—|jd|«S)NÚ r})r€Úquotes r<Ú QuoteSpacesršˆs€Ø �‰�3˜Ó Ðr>cóê—|jdd«dk7ryi}|D]k}tjj|«\}}|dv}|sŒ,tjj |«}|j |g«j |«Œmd}|j«D]/\}} t| «dkDsŒ|d|›dd j| «›d �z }Œ1|r%td |d z|zd zdz«td«‚y)z¡Makes sure if duplicate basenames are not specified in the source list. Arguments: spec: The target dictionary containing the properties of the target. ÚtypeNÚstatic_library)rcrdrerfr&r'rgrhréú ú: r˜rWzð>Ðá ØÜ�w‰w×Ñ Ó%€HØ ×ј 2Ó&×-Ñ-¨fÕ5ðð €%Ø"Ÿ™Ö*�o€h�Ü ˆ5ƒz�Aƒ~Ù šx¨¯©°%­Ð9Ñ9�eð+ñ Ü Ð IØ ˆ}Ñ ñ Ø %ñ &Ø(Gñ Hà ñ ô!ô ÐKÓ LÐLð  r>cóâ—eZdZdZd„Zd„Zd„Zd„Zd„Zd„Z d„Z d „Z d „Z d „Z d „Zd „Zd„Zd„Zd„Zd„Zd„Zd„Zddefd„Z d#d„Z d$d„Zd„Zd%d„Zd&d„Zd„Zd„Zd„Zd„Z d „Z!d!„Z"d"„Z#y)'ÚMakefileWriterz˜MakefileWriter packages up the writing of one target-specific foobar.mk. Its only real entry point is Write(), and is mostly used for namespacing. c ó~—||_||_i|_i|_i|_t j «D]ƒ}|jj|d|›dt |›d�i«|jj|d|›dt |›d�i«|jj|d|›dt |›d�i«Œ…y)Nz,$(obj).$(TOOLSET)/$(TARGET)/%.o: $(srcdir)/%z FORCE_DO_CMD @$(call do_cmd,z,1) z4$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj).$(TOOLSET)/%z)$(obj).$(TOOLSET)/$(TARGET)/%.o: $(obj)/%)r@r9Úsuffix_rules_srcdirÚsuffix_rules_objdir1Úsuffix_rules_objdir2r5rYr6)Úselfr@r9r_s r<Ú__init__zMakefileWriter.__init__»sÉ€Ø*€DÔØ€D„Kà!€DÔØ "€DÔØ "€DÔô%×)Ñ)Ö+ˆà ×Ñ×%Ñ%¡sò Ô ! #Ó &ð.(ð'*ô+ð  ×Ñ×&Ñ&©ò Ô ! #Ó &ð/(ð(*ô+ð ×Ñ×&Ñ&©ò Ô ! #Ó &ð/(ð(*õ+ñ,r>c ó– ‡—tjj|«t|d«‰_‰jj t «|‰_|‰_|d‰_ |d‰_ |d‰_ tjj‰j|«‰_‰jdk(r%tjj!|«‰_nd‰_‰j%|«\}}g} g} g} g} g} ‰jr-‰j'|«‰_‰j+|«‰_n‰j/|«x‰_‰_t1|j3dd««‰_d ‰_‰j4s‰j‰j6vr?t8jj;‰j(«‰_‰j?«}n‰j(‰_‰j(}‰jAd ‰jz«‰jAd ‰jz«d |vr‰jC|d | | | |«d |vr‰jE|d | | | |«d|vr‰jG|d| |«‰jr8|j3dg«| z}‰jI|| «‰jK| «|j3dg«| z}|�r½‰jdk(r tM||«‰jO|||| | |tjjQ‰j"ˆfd„‰jR««|D�cgc]}tU|«sŒ|‘Œ}}|�r7‰jAtV«tY|D�cgc]$}t8jj[|«d‘Œ&c}«}|D]/}|‰j\vsŒ‰jA‰j\|«Œ1‰jAt^«|D]/}|‰j`vsŒ‰jA‰j`|«Œ1|D]/}|‰jbvsŒ‰jA‰jb|«Œ1‰jAd«‰jr| je‰j,«‰jg|||| |z| | |«|th|<‰jdvr‰j,tj|<‰jlj3dd«r‰jo‰j||«‰jjq«ycc}wcc}w)aŒThe main entry point: writes a .mk file for a single target. Arguments: qualified_target: target we're generating base_path: path relative to source root we're building in, used to resolve target-relative paths output_filename: output .mk file name to write spec, configs: gyp info part_of_all: flag indicating this target is part of 'all' Úwr¡rœÚtoolsetrNÚstandalone_static_libraryr)Ú executableÚloadable_moduleÚshared_libraryz TOOLSET := z TARGET := ÚactionsÚrulesÚcopiesÚmac_bundle_resourcesÚsourcescó8•—t‰j|««Srk©r–Ú Absolutify©Úpr¶s €r<Úz&MakefileWriter.Write..3sø€¬Y°t·±ÀqÓ7IÔ-Jr>ržz!# End of this set of suffix rules)r�r¾rA)9r,r-ÚEnsureDirExistsÚopenÚfpr\ÚheaderÚqualified_targetrMÚtargetrœrºÚxcode_emulationÚ IsMacBundler9Ú is_mac_bundleÚ XcodeSettingsÚxcode_settingsÚ ComputeDepsÚComputeMacBundleOutputÚoutputÚComputeMacBundleBinaryOutputÚ output_binaryÚ ComputeOutputÚboolrHÚis_standalone_static_libraryÚ_INSTALLABLE_TARGETSrLr¢ÚaliasÚ_InstallableTargetInstallPathÚWriteLnÚ WriteActionsÚ WriteRulesÚ WriteCopiesÚWriteMacBundleResourcesÚWriteMacInfoPlistr¯Ú WriteSourcesÚMacPrefixHeaderÚPchifyrsÚ#SHARED_HEADER_SUFFIX_RULES_COMMENT1Úsetryr³Ú#SHARED_HEADER_SUFFIX_RULES_COMMENT2r´rµr£Ú WriteTargetÚtarget_outputsÚtarget_link_depsr@ÚWriteAndroidNdkModuleRuleÚclose)r¶rÎÚ base_pathÚoutput_filenamer§ÚconfigsÚ part_of_allÚdepsÚ link_depsÚ extra_outputsÚ extra_sourcesÚextra_link_depsÚextra_mac_bundle_resourcesÚmac_bundle_depsÚ install_pathÚall_mac_bundle_resourcesr¨ÚxrÃr€r^r_s` r<ÚWritezMakefileWriter.WriteÖs´ø€ô‡J�J×јÔ/ä�? CÓ(€D„Gà‡G�G‡M�M”&Ôà,€DÔØ€D„IØ�}Ñ%€D„KØ�V‘ €D„Iؘ ‘?€D„Lä×,Ñ,×8Ñ8¸¿¹ÀdÓK€DÔØ ‡{�{�eÒÜ×/Ñ/×=Ñ=¸dÓC€dÕà €dÔà×&Ñ& tÓ,�O€Dˆ)ð €MØ€MØ€OØ!#ÐØ€Oà ×ÒØ×/Ñ/°Ó5€d„kØ×<Ñ<¸TÓB€dÕà)-×);Ñ);¸DÓ)AÐA€d„k�DÔ&ä(,Ø �‰Ð,¨aÓ0ó)2€DÔ%ð!3€DÔà ×)Ò)Ø � ‰ �T×.Ñ.Ñ.Ü—7‘7×#Ñ# D§K¡KÓ0€d„jØ×7Ñ7Ó9�là—;‘;€d„jØ—[‘[€là‡L�L� §¡Ñ-Ô.؇L�L� § ¡ Ñ+Ô,ð�DÑØ ×ј˜Y™¨¸ Ø2°KôAð�$�Ø ‡o�o�d˜7‘m ]°MØ0°+ô?ð�4ÑØ ×Ñ�t˜H‘~ }°kÔBð ×Òà �(‰(Ð)¨2Ó .Ð1KÑ Kðà ×"Ñ"Ð#;¸_ÔMØ ×ј_Ô-ð—(‘(˜9 bÓ)¨MÑ9€KÚØ �‰˜Ò ô ˜t [Ô1Ø ×ÑØ �4˜ mØ ˜;Ü × Ñ × -Ñ -Ø×!Ñ!Ó#JØ�k‰kó ôñ (Ó9™K�q¬:°a­=’˜K€gÐ9Ú Ø � ‰ Ô8Ô9ܹ'ÓB¹'°Qœ"Ÿ'™'×*Ñ*¨1Ó-¨aÓ0¸'ÑBÓCˆ ÛˆCØ �D×,Ñ,Ò ,Ø �L‰L˜×1Ñ1°#Ñ6Õ 7ðð � ‰ Ô8Ô9ÛˆCØ �D×-Ñ-Ò -Ø �L‰L˜×2Ñ2°3Ñ7Õ 8ðóˆCØ �D×-Ñ-Ò -Ø �L‰L˜×2Ñ2°3Ñ7Õ 8ðð � ‰ Ð8Ô9ð × Ò Ø × Ñ  ×!3Ñ!3Ô 4à×Ñ�T˜7 D¨/¸IÑ*EØ$ m°[ôBð(4„NÐ#Ñ$ð ‡y�yÐ8Ñ8Ø+/×+=Ñ+=ÔÐ'Ñ(ð ×Ñ×ÑÐ 5°tÔ<Ø ×$Ñ$ T§[¡[°+¸yÔIà‡G�G‡M�M…OùòG:ùòCsÍUÍ)UÎ)Ucó—tjj|«t|d«|_|jj t «|jdtjjtjj|«|«z«|jd«|jd«|rd|z}|jd|›ddj|«›�«|jj«y) a°Write a "sub-project" Makefile. This is a small, wrapper Makefile that calls the top-level Makefile to build the targets from a single gyp file (i.e. a sub-project). Arguments: output_filename: sub-project Makefile name to write makefile_path: path to the top-level Makefile targets: list of "all" targets for this sub-project build_dir: build output directory, relative to the sub-project r¹zexport builddir_name ?= %sz .PHONY: allzall:z -C z $(MAKE)r˜N) r,r-rÊrËrÌr\rÍràrLrMrOÚdirnamerð)r¶ròÚ makefile_pathÚtargetsÚ build_dirs r<Ú WriteSubMakezMakefileWriter.WriteSubMake[s·€ô‡J�J×јÔ/Ü�? CÓ(€D„G؇G�G‡M�M”&Ôð ‡L�LÐ-Ü—‘—‘œbŸg™gŸo™o¨oÓ>À ÓJñKôLà‡L�L�ÔØ‡L�L�ÔÙØ˜}Ñ,€m؇L‚L¢]°C·H±H¸WÔ4EÐFÔG؇G�G‡M�M…Or>c ó–—|j«}|D�]�}t|j›d|d›�«}|jd|dz«|d} |d} t «} | D]8} t j j| «d} | sŒ(| j| «Œ:t|jdd««r|| z }t|jd d««r|| z }|d }|jd k(r-|D�cgc]"}tjj||«‘Œ$}}tjj!|«}d |vr|jd |›d|d ›d�«n|jd |›d|›d�«t#| «dkDrddj%| «zdz|z}dt'|j xsd«z}|j)d|j*«}|j)d|j*«}|jd|›d|›|›�«|j«| D�cgc]}|j-|«‘Œ} }|jdt/| d«z«|jdt/| d«z«|j1| d|j««| D]}d|vrŒJd|z«‚| D]}d|vrŒJd|z«‚| D�cgc]"}tjj||«‘Œ$} }| D�cgc]"}tjj||«‘Œ$} }|j3| t5t&t5|j,| ««||¬«d|z}|j|›ddj%| «›�«|j7d|z«|j«�Œ’|j«y cc}wcc}wcc}wcc}w)!a›Write Makefile code for any 'actions' from the gyp input. extra_sources: a list that will be filled in with newly generated source files, if any extra_outputs: a list that will be filled in with any outputs of these actions (used to make other pieces dependent on these actions) part_of_all: flag indicating this target is part of 'all' rŽÚ action_namez### Rules for action "%s":ÚinputsÚoutputsrÚprocess_outputs_as_sourcesFÚ'process_outputs_as_mac_bundle_resourcesÚactionrÚmessageÚ quiet_cmd_z = ACTION z $@z mkdir -p %sr˜z; úcd %s; Ú.ú $(TARGET)Úcmd_zj = LD_LIBRARY_PATH=$(builddir)/lib.host:$(builddir)/lib.target:$$LD_LIBRARY_PATH; export LD_LIBRARY_PATH; ú%s: obj := $(abs_obj)ú%s: builddir := $(abs_builddir)z3Spaces in action input filenames not supported (%s)z4Spaces in action output filenames not supported (%s))rôÚcommandzaction_%s_outputsú := ú$(%s)N)ÚGetSortedXcodeEnvr‘rÎràrêrLrMÚsplitÚaddÚintrHr9r,rÐÚ ExpandEnvVarsr-ÚEncodePOSIXShellListr¥rOr–r~rÏrÆršÚWriteSortedXcodeEnvÚ WriteDoCmdÚmapr£)r¶r¿rør÷rúrôÚenvr r«rr ÚdirsrDÚdirÚaction_commandsrÚ cd_actionÚoÚinputr×ÚiÚoutputs_variables r<rázMakefileWriter.WriteActionsvs©€ð × Ñ Ó "€CÜˆÜ %°×1FÓ1FØ17¸ Ò1Fð'HóI€dà ‡l�lÐ/°&¸Ñ2GÑGÔHØ�hÑ€fØ�yÑ!€gô‹U€dÛˆ#Ü�g‰g�m‰m˜CÓ  Ñ#ˆÚ Ø �(‰(�3�-ðô ˆV�Z‰ZÐ4°eÓ <Ô =Ø˜Ñ ˆ Ü ˆV�Z‰ZÐAÀ5Ó IÔ JØ" gÑ-Ð"ð˜xÑ(€oØ �‰˜Ò á)8ó:Ù)8˜gô×.Ñ.×<Ñ<¸WÀcÕJØ)8ð ð:ä— ‘ ×/Ñ/°Ó@€gØ �fÑ Ø � Š ²d¸FÀ9ÓÐÛˆFÜ—6‘6Ð/°°VÓ<ˆ&ؘFÒ"ð KØ?À6ÑIó KÐ"ðð � ‰ Ð%¨¯©°Ó(9Ñ9Ô:ð! šNó,á*�bð×&Ñ& rÐ+;Ø':õ<à*ð ð,ðˆÜ ˆt‹9�qŠ=Ø" S§X¡X¨d£^Ñ3ˆ&ؤ ¨$¯)©)Ò*:°sÓ ;Ñ;ˆ ð �;‰;˜%Ò á#)ó+Ù#)˜ô×'Ñ'×5Ñ5°g¸sÕCØ#)ð ð+ä—‘×0Ñ0°Ó8ˆØ—‘  ¨T¯[©[Ó9ˆØ×%Ñ% k°4·;±;Ó?ˆ Ø—‘  ¨T¯[©[Ó9ˆð � ‰ ð 2ðØ ØØØñ 5 ñ ô ð � ‰ Ø GØØñK ñ ô ð � ‰ ŒØ �‰ ŠðC6ðF+¨TÑ1ÐØ ‡n�n�[Ð"2Ô3Ø×ј7Ð%5Ñ5Ô6à ‡l�lÐ9¸DÑ@ÔAØ ‡l�l†nðaðb ‡L�LÐ8Ô9؇L�L�ÕùòI/ùò4OùÚLùâ7ùò(,ùò+s$Â7RÆ'RÇ 'RÇ6R ËR%Ì7'R*c ó—|jd«t|jdz«}g}|D]ú}|dD]ð}t|j |««}t j j|«d}t|j t j j|d|«««} |j«} tjj| | «} tjj|| «}|j| g|gd|«|j| «ŒòŒü|j|›ddjtt |««›�«|jd |z«|j«y ) aWrite Makefile code for any 'copies' from the gyp input. extra_outputs: a list that will be filled in with any outputs of this action (used to make other pieces dependent on this action) part_of_all: flag indicating this target is part of 'all' z### Generated for copy rule.Ú_copiesr®ržÚ destinationÚcopyú = r˜rN)ràr‘rÎr–rÆrLrMrrOrr,rÐrrr£r rš) r¶rÁr÷rôÚvariabler rArMrpr×r!s r<rãzMakefileWriter.WriteCopiesZs?€ð ‡L�LÐ/Ô0ä'¨×(=Ñ(=À Ñ(IÓJ€HØ€GÛˆØ�w”-ˆ$䘟™¨Ó.Ó/ˆÜ—7‘7—=‘= Ó& qÑ)ˆÜ˜4Ÿ?™?¬2¯7©7¯<©<¸¸]Ñ8KØ8@ó,BóCóDˆð×$Ñ$Ó&ˆÜ×$Ñ$×2Ñ2°6¸3Ó?ˆÜ×"Ñ"×0Ñ0°°sÓ;ˆØ �‰˜˜ 4 &¨&°+Ô>Ø�‰�vÕñ) ðð, ‡L�Lšh¨¯©´´[À'Ó1JÔ(KÐLÔMØ×ј 8Ñ+Ô,؇L�L…Nr>c ó~—|jd«tjjtd|j t tt |j|«««D]U\}}tjj|«\}}|dk7sŒ.|j|g|gdd¬«|j|«ŒWy)z0Writes Makefile code for 'mac_bundle_resources'.z&### Generated for mac_bundle_resourcesrz .xcassetszmac_tool,,,copy-bundle-resourceT©rôN)ràr,rÐÚGetMacBundleResourcesr0rÔr r–rÆrLrMryrr£)r¶Ú resourcesÚ bundle_depsr×rrrŽr_s r<räz&MakefileWriter.WriteMacBundleResources€s¢€à‡L�LÐ9Ô:ä×*Ñ*×@Ñ@Ü# MÑ2°D×4GÑ4GÜ ŒI”s˜4Ÿ?™?¨IÓ6Ó7ö9‰ ˆ�ô�w‰w×Ñ Ó'�f€aˆØ � Ó à �‰˜˜ 3 %Ð)JØ$(ð ô *à×ј6Õ"ñ9r>c󯇗tjjtd‰jˆfd„«\}}}}|sy|rWdt j j|«z}‰j||dzdt¬«‰j|g|gdd g«|}‰j|‰j|¬ ««‰j|g|gd d ¬ «|j|«y)z0Write Makefile code for bundle Info.plist files.rcó8•—t‰j|««SrkrÅrÇs €r<rÉz2MakefileWriter.WriteMacInfoPlist..“sø€”)˜DŸO™O¨AÓ.Ô/r>Nz$(obj).$(TOOLSET)/$(TARGET)/z: INFOPLIST_DEFINESú-D)Úquoterz$(call do_cmd,infoplist)z@plutil -convert xml1 $@ $@©Úadditional_settingszmac_tool,,,copy-info-plistTrE)r,rÐÚGetMacInfoPlistr0rÔrLrMr¢r4r‡r2rrrr£)r¶rHÚ info_plistrDÚdefinesÚ extra_envÚintermediate_plists` r<råz MakefileWriter.WriteMacInfoPlist�sùø€ä*-×*=Ñ*=×*MÑ*MÜ# MÑ2°D×4GÑ4GÛ/ó+1Ñ'€J��W˜iñ Ø Ùà:Ü �'‰'× Ñ ˜:Ó &ñ'Ðà ‡n�n�WÐ0Ð3HÑHÈ$Ü ðô"à ×ÑÐ,Ð-° ¨|Ø %ð )ð *ô+ð &€jà×ÑØ ˆT× #Ñ #¸ Ð #Ó BôDà‡O�O�S�E˜J˜<Ð)EØ $ðô&à×Ñ�sÕr>c ó2 —t|j««D�]}||} |j| jd«d|zdt¬«|j dk(rˆ|j j|«} |j j|«} |j j|«} |j j|«} |j j|«}n3| jd«} | jd«} | jd«} |jd «|j| d |z«|jd «|j| d |z«|jd «|j| d|z«|j dk(rL|jd«|j d|z«|jd«|jd|z«| jd«}|r'|D�cgc]}t|j|««‘Œ}}|j|d|zd¬«�Œtt |«}|D�cgc]+}|j#|jt%|«««‘Œ-}}|j|d«|D]}d|vrŒJd|z«‚|jd«|jd«|j«|r|j'dg|dd¬«|r|j'dg|d d¬«|j)||«}|rC|jd!«|D]\}}}|j|›d"|›�«Œ|jd#«|rÚ|j+d«|jd$«|jd%«|jd&|j-d'«zd(z«|jd)|j-d*«zd+z«|j dk(rL|jd,|j-d-«zd.z«|jd/|j-d0«zd1z«|j/|j1««||D�cgc]}t3|«sŒ|‘Œc}z }|j«y2cc}wcc}wcc}w)3aWrite Makefile code for any 'sources' from the gyp input. These are source files necessary to build the current target. configs, deps, sources: input from gyp. extra_outputs: a list of extra outputs this action should be dependent on; used to serialize action/rules before compilation extra_link_deps: a list that will be filled in with any outputs of compilation (to be used in link lines) part_of_all: flag indicating this target is part of 'all' rQzDEFS_%srK)ÚprefixrLrÚcflagsÚcflags_cÚ cflags_ccz## Flags passed to all source files.z CFLAGS_%sz# Flags passed to only C files.z CFLAGS_C_%sz!# Flags passed to only C++ files.z CFLAGS_CC_%sz"# Flags passed to only ObjC files.zCFLAGS_OBJC_%sz$# Flags passed to only ObjC++ files.zCFLAGS_OBJCC_%sÚ include_dirszINCS_%sz-I)rUÚOBJSr˜z-Spaces in object filenames not supported (%s)z?# Add to the list of files we specially track dependencies for.zall_deps += $(OBJS)z$(OBJS)z6Make sure our dependencies are built before any of us.T©ÚcommentÚ order_onlyz1Make sure our actions/rules run before any of us.z:# Dependencies from obj files to their precompiled headersr z%# End precompiled header dependencieszn# CFLAGS et al overrides must be target-local. # See "Target-specific Variable Values" in the GNU Make manual.z$(OBJS): TOOLSET := $(TOOLSET)zD$(OBJS): GYP_CFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) %s Úcz/$(CFLAGS_$(BUILDTYPE)) $(CFLAGS_C_$(BUILDTYPE))zF$(OBJS): GYP_CXXFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) %s raz0$(CFLAGS_$(BUILDTYPE)) $(CFLAGS_CC_$(BUILDTYPE))zG$(OBJS): GYP_OBJCFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) %s ÚmzK$(CFLAGS_$(BUILDTYPE)) $(CFLAGS_C_$(BUILDTYPE)) $(CFLAGS_OBJC_$(BUILDTYPE))zI$(OBJS): GYP_OBJCXXFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) %s ÚmmzM$(CFLAGS_$(BUILDTYPE)) $(CFLAGS_CC_$(BUILDTYPE)) $(CFLAGS_OBJCC_$(BUILDTYPE))N)rXrYr4rHr‡r9rÔÚ GetCflagsÚ GetCflagsCÚ GetCflagsCCÚ GetCflagsObjCÚGetCflagsObjCCràr–rÆÚfilterrsÚ Objectifyrzr2ÚGetObjDependenciesr£Ú GetIncludeÚWritePchTargetsÚGetPchBuildCommandsrw)r¶rórõrÃr÷rùrôÚprecompiled_headerÚ confignameÚconfigrVrWrXÚ cflags_objcÚ cflags_objccÚincludesÚincludeÚ compilablerþÚobjsÚobjÚpchdepsrªÚgchs r<ræzMakefileWriter.WriteSourcesªs€ô˜WŸ\™\›^×,ˆ Ø�zÑ"€fØ ‡n�n�V—Z‘Z  Ó*¨I¸ Ñ,BÈ4Ü ðô"ð �‰˜Ò Ø×$Ñ$×.Ñ.¨zÓ:ˆØ×&Ñ&×1Ñ1°*Ó=ˆØ×'Ñ'×3Ñ3°JÓ?ˆ Ø×)Ñ)×7Ñ7¸ ÓCˆ Ø×*Ñ*×9Ñ9¸*ÓE‰ à—‘˜HÓ%ˆØ—:‘:˜jÓ)ˆØ—J‘J˜{Ó+ˆ à ‡l�lÐ8Ô9Ø ‡n�n�V˜[¨:Ñ5Ô6Ø ‡l�lÐ4Ô5Ø ‡n�n�X˜}¨zÑ9Ô:Ø ‡l�lÐ6Ô7Ø ‡n�n�Y °Ñ ;Ô<Ø �‰˜Ò Ø � ‰ Ð9Ô:Ø �‰�{Ð$4°zÑ$AÔBØ � ‰ Ð;Ô<Ø �‰�|Ð%6¸Ñ%CÔDØ—‘˜NÓ+€hÙ ÙGOÓPÁx¸G”I˜dŸo™o¨gÓ6Õ7ÀxˆÐPØ ‡n�n�X˜y¨:Ñ5¸d€nÖCð=-ô@œ  GÓ,€JÙ@JÓ KÁ ¸1ˆD�N‰N˜4Ÿ?™?¬6°!«9Ó5Õ 6À €DÐ K؇N�N�4˜Ô ãˆØ ˜Š^ðBØ 9¸SÑ @óBˆ^ðð ‡L�Lð%ô&à‡L�LÐ&Ô'؇L�L„Nñ Ø ×ј)˜ dð$7à&*ðô,ñØ ×ј)˜ mð$7à&*ðô,ð !×3Ñ3°JÀÓF€GÙØ ‡l�lÐOÔPÛ%Ñ ˆ&�#�sØ � ‰ ¢¡cÐ*Õ+ð&à ‡l�lÐ:Ô;á Ø×јYÔ'Ø ‡l�lðCôDð ‡l�lÐ3Ô4Ø ‡l�lðð.×8Ñ8¸Ó=ñ>ð.ñ .ô/ð  ‡l�lðð.×8Ñ8¸Ó>ñ?ð/ñ /ô0ð �‰˜Ò Ø � ‰ ðð0×:Ñ:¸3Ó?ñ@ð3ñ 3ô 4ð � ‰ ðð0×:Ñ:¸4Ó@ñAð4ñ 4ô 5ð ×ÑÐ+×?Ñ?ÓAÔBð©WÓI©W 6¼ÀÕ8Hš¨WÑIÑI€Oà‡L�L…Nùò]Qùò LùòPJsÇcóH—|jrJ‚|jdk(r(|jdvr|jj «S|d}d}d}|jdk(r|dddk(r|dd}d}d }np|jd vr$|dddk(r|dd}d}|jd k(rd }nAd }n>|jd k(rd|z}n)|jdk7rt dd|jd|f«|j d|«}|j d|«}|j d«}|rd|z}||z|zS)z�Return the 'output basename' of a gyp spec. E.g., the loadable module 'foobar' in directory 'baz' will produce 'libfoobar.so' r©r�r¼r¾r½r¡rr�Nérr)r½r¾r*r+Únonez%s.stampr¼z,ERROR: What output file should be generated?rœrÏÚproduct_prefixÚ product_nameÚproduct_extensionr)rÒr9rœrÔÚGetExecutablePathr¦rH)r¶r§rÏÚ target_prefixÚ target_extÚ product_exts r<ÚComputeOutputBasenamez$MakefileWriter.ComputeOutputBasenameGsY€ð ×!Ò!Ð!Ð !à ‡{�{�eÒ § ¡ ð.Mñ!Mà × Ñ × 2Ñ 2Ó 4Ð4à �-Ñ €FØ€MØ€JØ ‡y�yÐ$Ò$Ø ��ˆ�uÒ Ø˜˜�ˆØ€mØ�jØ �‰Ð;Ñ ;Ø ��ˆ�uÒ Ø˜˜�ˆØ€mØ �‰˜Ò ؉ à‰ Ø �‰�fÒ Ø˜FÑ"�fØ �‰�lÒ "Ü Ð ;Ø �T—Y‘Y ¨&ð 2ô3ð—H‘HÐ-¨}Ó=€MØ �X‰X�n fÓ -€FØ—(‘(Ð.Ó/€KÙØ˜Ñ$€jà ˜6Ñ ! JÑ .Ð.r>cób—|jdk(xr|jdk(xr|jdvS)NrÏrr„)rºr9rœ©r¶s r<Ú_InstallImmediatelyz"MakefileWriter._InstallImmediatelyrs?€Ø �<‰<˜8Ñ #ò O¨¯ © °uÑ(<ò OÀÇÁðOOðBOðOr>cóP—|jrJ‚tjjd|jz|j«}|j dk(s|j «rd}|jd|«}tjj||j|««S)z¢Return the 'output' (full output path) of a gyp spec. E.g., the loadable module 'foobar' in directory 'baz' will produce '$(obj)/baz/libfoobar.so' ú$(obj).r¼r Ú product_dir) rÒrLrMrOrºrœr‘rHrŽ©r¶r§rMs r<rÚzMakefileWriter.ComputeOutputws€€ð ×!Ò!Ð!Ð !ä �7‰7�<‰<˜  D§L¡LÑ0°$·)±)Ó <€DØ ‡y�y�LÒ  D×$<Ñ$<Ô$>Ø €dØ �8‰8�M 4Ó (€DÜ �7‰7�<‰<˜˜d×8Ñ8¸Ó>Ó ?Ð?r>có —|jsJ‚td}tjj ||j j ««S)zDReturn the 'output' (full output path) to a bundle output directory.r)rÒr0rLrMrOrÔÚGetWrapperNamer•s r<rÖz%MakefileWriter.ComputeMacBundleOutput†s?€à × Ò ÐÐ Ü & }Ñ 5€DÜ �7‰7�<‰<˜˜d×1Ñ1×@Ñ@ÓBÓ CÐCr>có„—td}tjj||jj ««S)zAReturn the 'output' (full output path) to the binary in a bundle.r)r0rLrMrOrÔrŠr•s r<rØz+MakefileWriter.ComputeMacBundleBinaryOutput�s0€ä & }Ñ 5€DÜ �7‰7�<‰<˜˜d×1Ñ1×CÑCÓEÓ FÐFr>cót—g}g}d|vrn|j|dD�cgc]}t|r t|‘Œc}«|dD]#}|tvsŒ |jt|«Œ%|j|«tj j |«tj j |«fScc}w)zÛCompute the dependencies of a gyp spec. Returns a tuple (deps, link_deps), where each is a list of filenames that will need to be put in front of make for either building (deps) or linking (link_deps). Ú dependencies)Úextendrírîr£r,r-Úuniquer)r¶r§rõröÚdeps r<rÕzMakefileWriter.ComputeDeps“s¸€ð €DØ€IØ˜ÑØ ‡k�k°$°~Ò2Fó+Ñ2F¨3Ü$ SÒ)ô" #Ó&Ð2Fñ+ô,à�nÔ%ˆ#Ø Ô"Ò "Ø × Ñ Ô+¨CÑ0Õ 1ð&ð ‡k�k�)Ôô �J‰J× Ñ ˜tÓ $¤c§j¡j×&8Ñ&8¸Ó&CÐ DÐDùò+s›B5cóD—|j|jg|dd¬«y)Nz Build our special outputs first.Tr[)r2rÙ)r¶rÏr÷s r<ÚWriteDependencyOnExtraOutputsz,MakefileWriter.WriteDependencyOnExtraOutputs©s(€Ø×ј×*Ñ*Ð+¨]Ø!CØ$(ðõ*r>c ó‡—‰jd«|r1‰j‰j|«‰j||dd¬«i}‰jdk7�rt |j ««D�]} || } ‰jdk(�r‰jj| tdˆfd„«} tjj‰j«} ‰jj| t!t"jj%t"jj'| ‰j(«««t!t"jj%t"jj'| ‰j««««} | rf| || <n`| j+d g«} t-d „|D««r<| j/d ‰j0z«| j/d ‰j0z«| j+d g«}| |D�cgc]}d|z‘Œ c}z } ‰j3| d| z«‰jdk(s�ŒØ‰j3‰jj5| «d| z«�Œ|j+d«}|rItjj7|«}‰jdk(r‰jj9|«}‰j3|d«‰jdt!‰j«z«‰jdt!‰j«z«‰jdk(r'‰jdt!‰j«z«g}‰jdk(rA|r|j/d«|j;tj<j?|««|�rJ‰jA‰j(‰jC««|D]N} ‰jt!‰j(«›d| ›dtjjE|| «›�«ŒP|jGdtjjEd‰jg««tI|«D]%\}}|jKd«rŒtM|«||<Œ'‰jdt!‰j(«z«‰jt!‰j(«›ddj'|«›�«‰jNrê‰j‰j(|«‰j3tQt |«d«‰jd t!‰j(«z«‰jd!vr,‰jd"‰jjS«z«|r‰jd#«g}‰jd$«‰jd%t!‰j(«z«|r+‰jNrJd&‰jTz«‚d'|vsJd(«‚‰jd)k(rª‰jt!‰j«›d*dj'tQt |««›�«‰j0d+k(r2‰jd,k(r#‰jW‰jg|d-||¬.«�nö‰jW‰jg|d/||¬.«�nÓ‰jd0k(ru|D]}d|vrŒJd1|z«‚‰jd2vr/‰jXs#‰jW‰jg|d3||¬.«�nr‰jW‰jg|d4||¬.«�nO‰jd5k(rh‰jt!‰j«›d*dj'tQt |««›�«‰jW‰jg|d6||¬.«n؉jd7k(rw|D]}d|vrŒJd8|z«‚‰j0d+k(r1‰jd,k(r"‰jW‰jg|d9||¬.«nt‰jW‰jg|d:||¬.«nR‰jdk(r"‰jW‰jg|d;||¬.«n!t[d<‰j‰jT«‰j(r‰j(‰jTk7rf‰j‰j\vrN‰j‰jTg‰j(gd=d¬>«|r!‰jd?g‰jTgd@d¬>«‰j‰j\vs ‰jX�rq‰jd5k(rdA}n‰jd0k(rdB}nd)}‰j_«}‰j(g}‰jdk(r8d'|vr4‰j0dCk(r%|‰j(k(sJ|›dD‰j(›�«‚‰j‰jTg|gd=d¬>«|‰j(k7rD‰jNrJ‚‰jW|g‰j(gdEdF|z|¬G«|j/|«‰j(‰j`k7r<‰j`‰jTk7r#‰j‰j`g|dH|zd¬>«|r‰jd?g|gdI|zd¬>«yJyJyJcc}w)Ka&Write Makefile code to produce the final target of the gyp spec. spec, configs: input from gyp. deps, link_deps: dependency lists; see ComputeDeps() extra_outputs: any extra outputs that our target should depend on part_of_all: flag indicating this target is part of 'all' z### Rules for final target.z4Preserve order dependency of special output on deps.Tr[r†rrcó8•—t‰j|««SrkrÅrÇs €r<rÉz,MakefileWriter.WriteTarget..Ésø€œ  $§/¡/°!Ó"4Ô5r>Úldflagsc3óJK—|]}|jd«xsd|v–—Œy­w)r+z.so.Nrl)rnr�s r<rqz-MakefileWriter.WriteTarget..Øs&èø€ÐFÁ¸#�—‘˜eÓ$Ò5¨°#¨ Ó5Áùs‚!#z-Wl,-rpath=\$$ORIGIN/lib.%s/z$-Wl,-rpath-link=\$(builddir)/lib.%s/Ú library_dirsz-L%sz LDFLAGS_%szLIBTOOLFLAGS_%sÚ librariesÚLIBSz*%s: GYP_LDFLAGS := $(LDFLAGS_$(BUILDTYPE))z%s: LIBS := $(LIBS)z4%s: GYP_LIBTOOLFLAGS := $(LIBTOOLFLAGS_$(BUILDTYPE))z!$(TARGET_POSTBUILDS_$(BUILDTYPE))z: TARGET_POSTBUILDS_rrÚcdrƒrz: POSTBUILDS := r˜Ú BUNDLE_DEPSz%s: $(BUNDLE_DEPS))r¾r½z+ @$(call do_cmd,mac_package_framework,,,%s)z @$(call do_postbuilds)z @true # No-op, used by testsz @touch -c %szQPostbuilds for bundles should be done on the bundle, not the binary (target '%s')r”z.Postbuilds do not work with custom product_dirr¼z: LD_INPUTS := Úhostr(Ú link_host)Ú postbuildsÚlinkr�z2Spaces in alink input filenames not supported (%s))rÚopenbsdÚnetbsdÚwinÚ alink_thinÚalinkr¾Úsolinkr½z3Spaces in module input filenames not supported (%s)Úsolink_module_hostÚ solink_moduleÚtouchzWARNING: no output forzAdd target alias)r\ÚphonyÚallz!Add target alias to "all" target.zshared libraryzstatic libraryrÏz != rAz Copy this to the %s output path.)r\rôz!Short alias for building this %s.zAdd %s to "all" target.N)1ràrŸrÙr2rœrXrYr9rÔÚ GetLdflagsr0r,r-ÚInvertRelativePathrMÚAddImplicitPostbuildsršrLrNrOr×rHÚanyr£rºr4ÚGetLibtoolflagsrœÚAdjustLibrariesr›rÐÚGetSpecPostbuildCommandsrÚGetSortedXcodePostbuildEnvrÚinsertÚ enumerateÚ startswithr�rÒr ÚGetFrameworkVersionrÏrrÜr¦rÝrßrÞ)r¶r§rórõrörHr÷rôÚtarget_postbuildsrmrnr¢Ú gyp_to_buildÚtarget_postbuildr¤Ú library_dirr¥r«r(Ú postbuildÚlink_depÚ file_descrüÚinstallable_depss` r<rìzMakefileWriter.WriteTarget¯sù ø€ð ‡L�LÐ.Ô/áØ ×(Ñ(¨×);Ñ);¸]ÔKØ ×ј¨ð#<à&*ðô,ð ÐØ ‡y�y�FÓܘwŸ|™|›~×.ˆ*ؘÑ$ˆØ �;‰;˜%Ó Ø×'Ñ'×2Ñ2°:Ü)¨-Ñ8Û5ó7ˆ'ô Ÿ™×6Ñ6°t·y±yÓAˆ,Ø!×0Ñ0×FÑFØÜœ"Ÿ'™'×*Ñ*¬2¯7©7¯<©<¸ Ø8<¿ ¹ ó,EóFóGäœ"Ÿ'™'×*Ñ*¬2¯7©7¯<©<¸ Ø8<×8JÑ8Jó,LóMóNó OÐ ñ Ø,<Ð ˜jÒ )à—J‘J˜y¨"Ó-ˆ'ä ÑFÁÓFÔ Fð �N‰NÐ:¸T¿\¹\ÑIÔ JØ �N‰NÐBØŸ<™<ñ(ô )à—z‘z .°"Ó5ˆ عlÓK¹l¨{�V˜kÓ)¸lÑKÑKˆØ �‰�w  ¨zÑ 9Ô:Ø �;‰;˜%Ô Ø �.‰.˜×,Ñ,×<Ñ<¸ZÓHØ*¨ZÑ7ö 9ð=/ð@—(‘(˜;Ó'€iÙ ä—J‘J×&Ñ& yÓ1ˆ Ø �;‰;˜%Ò Ø×)Ñ)×9Ñ9¸)ÓDˆ)Ø ‡n�n�Y Ô'Ø ‡l�lÐ?Ü �d×(Ñ(Ó )ñ*ô+à ‡l�lÐ(¬;°t×7IÑ7IÓ+JÑJÔKà �‰˜Ò Ø � ‰ ÐKÜ ˜×*Ñ*Ó +ñ,ô -ð €JØ ‡{�{�eÒÙ Ø×ÑÐ=Ô>Ø×ÑÜ × Ñ × 6Ñ 6°tÓ <ô>òð ×јtŸ{™{¨D×,KÑ,KÓ,MÔNã)ˆ*Ø � ‰ Ü ˜Ÿ™Õ %Ú Ü �Z‰Z× ,Ñ ,Ð->¸zÑ-JÔ KðMõ Nð*ð×јœ3Ÿ:™:×:Ñ:¸DÀ$Ç)Á)Ð;LÓMÔNÜ# JÖ/‰,ˆ!ˆYØ×#Ñ# CÕ(Ü-¨iÓ8ˆ*�QŠ-ð0ð ‡l�lÐ4´{À4Ç;Á;Ó7OÑOÔPØ ‡l�lÜ �d—k‘kÕ " C§H¡H¨ZÔ$8ð:ô;ð  ×Òð ×(Ñ(¨¯©°mÔDð ‡n�n”Sœ kÓ2°MÔBØ ‡l�lÐ'¬+°d·k±kÓ*BÑBÔCð �‰Ð;Ñ ;Ø � ‰ ÐCØ × Ñ × 3Ñ 3Ó 5ñ6ô 7ñ Ø � ‰ Ð/Ô0Ø€jð ‡l�lÐ4Ô5ð ‡l�lÐ#¤k°$·+±+Ó&>Ñ>Ô?áØ×#Ò#ðIð':Ø<@¿K¹Kñ'HóIÐ #à  $Ñ &ð ð*ó Ð &ð ‡y�y�LÒ Ø ‡l�lÜ �d×(Ñ(Õ )Ø �(‰(”3”{ IÓ.Ô /ð1ô2ð �‰˜Ò  D§K¡K°9Ò$<Ø �‰˜×+Ñ+Ð,¨i¸Ø#° ð ö <ð �‰˜×+Ñ+Ð,¨i¸ÀØ#-ð ö /ð �‰Ð&Ò &Ûˆ(ؘ(Ò"ð NØ @ÀHÑ Ló NÐ"ð ð �+‰+Ð@Ñ @Ø × +Ò +Ø �‰˜×+Ñ+Ð,¨i¸Ø#° ð ö <ð �‰˜×+Ñ+Ð,¨i¸À+Ø#-ð ö /à �‰Ð&Ò &Ø ‡l�lÜ ˜×*Ñ*Õ +Ø �H‰H”Sœ iÓ0Ô 1ð3ô4ð ‡o�o�t×)Ñ)Ð*¨I°xÀØ!+ðõ-à �‰Ð'Ò 'Ûˆ(ؘ(Ò"ð OØ AÀXÑ Mó OÐ"ð ð �‰˜Ò  D§K¡K°9Ò$<Ø �‰˜×+Ñ+Ð,¨iÐ9MØ#° ð õ <ð �‰Ø × Ñ Ð  )¨_¸kØ!ð õ #ð �‰�fÒ à ‡o�o�t×)Ñ)Ð*¨D°'¸;Ø!+ðõ-ô Ð $ d§i¡i°·±Ô=ð �Š˜Ÿ™¨¯ © Ò3Ø �‰˜$×3Ñ3Ñ 3Ø ×ј$Ÿ+™+˜¨¯©¨ Ø!3¸TðôCá Ø ×јE˜7 T§[¡[ MØ%HØ#'ð ô )ð � ‰ �T×.Ñ.Ñ.Ø ×)Ó)Ø �‰Ð&Ò &Ø$‰ Ø �9‰9Ð(Ò (Ø$‰ à ˆ Ø×7Ñ7Ó9€lØŸ+™+˜ÐØ �+‰+˜Ò  }¸Ñ'<Ø �,‰,˜(Ò "à˜tŸ{™{Ò*ð 'Ú ˜$Ÿ+š+ð-'ó 'Ð*ð ×ј$Ÿ+™+˜¨¨Ø!3¸TðôCà ˜Ÿ™Ò $Ø×%Ò%Ð%Ð%Ø �‰˜˜¨¯©¨ °vØ"DØ!ñ#"Ø/:ð ô <ð ×Ñ  Ô-Ø �‰˜Ÿ ™ Ò " t§z¡z°T·[±[Ò'@Ø ×јDŸJ™J˜<Ð)9Ø%HØ$ñ&%Ø.2ð ô 4ñ Ø ×јE˜7 \ NØ%>ÀÑ%JØ#'ð õ )ð ð9 *ùòuLsÈ kNrcó°—d}|r,|D�cgc] }|||z«‘Œ}}ddj|«z}|jj|›d|›d�«ycc}w)z¸Write a variable definition that is a list of values. E.g. WriteList(['a','b'], 'foo', prefix='blah') writes out foo = blaha blahb but in a pretty-printed style. rz \ z :=z N)rOrÌr\)r¶Ú value_listrCrUrLÚvaluesÚls r<r4zMakefileWriter.WriteList›sV€ð€FÙÙ0:Ó;± ¨1‘F˜6 A™:Õ&° €jÐ;ؘ9Ÿ>™>¨*Ó5Ñ5€f؇G�G‡M�M¢8ªVÐ4Õ5ùòÔ"Ù Ø ‡l�l�: §¡¨Ó 1Ñ1Ô2ÙØ ‡l�lÐ.°¸±Ñ;Ô<Ù&+‘?°€Láð ‡l�lØ—H‘H˜WÕ% s§x¡x°Ô'7¹ðGöHä ˆW‹˜Ò à ‡l�l ¨£¨S¯X©X°fÔ-=¹|ÐLÕMñ&‘7¨4¯;©;×>Ñ>¸wÓG€iÜ—,‘,˜yÓ)×3Ñ3Ó5€iØ&¨)Ñ4€lØ ‡l�l˜sŸx™x¨Õ0±,Ð?Ô@Ø ‡l�l�6˜D‘=Ô!Ø ‡l�lš± Ð=Ô>Ø ‡l�lÚ  #§(¡(¨6Ô"2±LðBôCà ‡n�n�QÐ.Ô/áÛˆ&Ø � ‰ �V˜f‘_Õ%ðà‡L�L…NùòW0s…G3c óî—|jdvry|jd«|jd«|jd|z«|jd«|jd«|jd«|jd «d d d d œ}d }|D]D}tjj |«d }||vsŒ*||xxd z cc<||||kDsŒC|}ŒF|jd|z«|j t |jtt|««d«d„}ddi} i} t| | «|j ||td| d«d«|j ||tdtd«d«|jdk(r|jd«nA|jdk(r|jd«n |jdk(r|jd«|j«y)aáWrite a set of LOCAL_XXX definitions for Android NDK. These variable definitions will be used by Android NDK but do nothing for non-Android applications. Arguments: module_name: Android NDK module name, which must be unique among all module names. all_sources: A list of source files (will be filtered by Compilable). link_deps: A list of link dependencies, which must be sorted in the order from dependencies to dependents. )r¼r¾r�Nz/# Variable definitions for Android applicationszinclude $(CLEAR_VARS)zLOCAL_MODULE := ziLOCAL_CFLAGS := $(CFLAGS_$(BUILDTYPE)) $(DEFS_$(BUILDTYPE)) $(CFLAGS_C_$(BUILDTYPE)) $(INCS_$(BUILDTYPE))z+LOCAL_CPPFLAGS := $(CFLAGS_CC_$(BUILDTYPE))zLOCAL_C_INCLUDES :=z/LOCAL_LDLIBS := $(LDFLAGS_$(BUILDTYPE)) $(LIBS)r)rdrerfreržzLOCAL_CPP_EXTENSION := ÚLOCAL_SRC_FILEScóì—g}|D]l}tjj|«}|j|«sŒ4|j |«sŒF|j |t |«t |« «Œn|Srk)rLrMr¢rÂrmr£r¥)rõrUrÕÚmodulesÚfilepathrps r<Ú DepsToModulesz?MakefileWriter.WriteAndroidNdkModuleRule..DepsToModules2sd€Ø€gÛˆ(Ü—7‘7×#Ñ# HÓ-ˆØ × Ñ ˜vÕ &¨8×+<Ñ+<¸VÕ+DØ �.‰.˜¤# f£+¬s°6«{¨lÐ;Õ <ðð€nr>r9r)rrÚLOCAL_SHARED_LIBRARIESrrÚLOCAL_STATIC_LIBRARIESr¼zinclude $(BUILD_EXECUTABLE)r¾zinclude $(BUILD_SHARED_LIBRARY)r�zinclude $(BUILD_STATIC_LIBRARY)) rœràrLrMryr4r rÆrfrsr=r0) r¶Ú module_namer¨röÚcpp_extÚdefault_cpp_extrpr_rär8r7s r<rïz(MakefileWriter.WriteAndroidNdkModuleRulesé€ð ‡y�yÐJÑJØ à‡L�LÐBÔC؇L�LÐ(Ô)؇L�LÐ# kÑ1Ô2؇L�Lð (ô )ð ‡L�LÐ>Ô?؇L�LÐ&Ô'؇L�LÐBÔCð ¨AÑ.€GØ€OÛˆÜ �G‰G× Ñ ˜XÓ & qÑ )€cØ �ŠØ�‹ ˜Ñ‹ Ø �3‰<˜' /Ñ2Ó 2؉/ð  ð  ‡L�LÐ*¨_Ñ<Ô=à‡N�N”3�t—‘¬¬z¸;Ó(GÓHØ$ô&ò ð˜Ð €FØÐÜÐ(¨&Ô1à‡N�NÙ�iÜ1Ð2EÑFØ'Ð(;Ñ<ó >ð !ô "ð  ‡N�NÙ�iÜ1Ð2EÑFÜ1Ð2EÑFó Hð !ô "ð  ‡y�y�LÒ Ø ‡l�lÐ0Õ1Ø �‰Ð&Ò &Ø ‡l�lÐ4Õ5Ø �‰Ð&Ò &Ø ‡l�lÐ4Ô5؇L�L…Nr>có@—|jj|dz«y)NrW)rÌr\)r¶Útexts r<ràzMakefileWriter.WriteLnSs€Ø‡G�G‡M�M�$˜‘+Õr>có¬—tjj|jdtj j d|j «d|«S)Nz$(abs_builddir)z $(abs_srcdir)r )r,rÐrrÔrLrMrO)r¶rNs r<rz MakefileWriter.GetSortedXcodeEnvWsB€Ü × Ñ × 0Ñ 0Ø ×ÑÐ.Ü �‰� ‰ �_ d§i¡iÓ0°.Øó ðr>cób—|jjdd«}|jd|i¬«S)NÚCHROMIUM_STRIP_SAVE_FILErrM)rÔÚGetPerTargetSettingr)r¶Ústrip_save_files r<r¿z)MakefileWriter.GetSortedXcodePostbuildEnv^sC€ð×)Ñ)×=Ñ=Ø" Bó(€Oð × !Ñ !Ø7¸ÐIð "ó KðKr>có\—|D]'\}}|jt|«›d|›d|›�«Œ)y)Nz : export r)ràrš)r¶rÏr!ÚkÚvs r<rz"MakefileWriter.WriteSortedXcodeEnvis*€Û‰ˆˆ1ð ‡l�l¬K¸Õ,?ÂÁAÐFÕGñr>cóx—d|vr|jdd|jz«}d|vrd|j›d|›�}|S)z,Convert a path to its output directory form.r“ú$(obj)/z$(obj).%s/$(TARGET)/z$(obj)r“z /$(TARGET)/)r~rº©r¶rMs r<rgzMakefileWriter.Objectifyts>€à ˆt�|Ø �\‰\˜)Ð%;¸d¿l¹lÑ%JÓ K€dØ �tÒ Ø)-¯«±tÐ <€dØ €Kr>cóž—|j|«}d|vr$|jdd|j›d|›�«}|Sd|j›d|›d|›�S)z:Convert a prefix header path to its output directory form.r“rõr“z/$(TARGET)/pch-Ú/)rÆr~rº)r¶rMr€s r<rèzMakefileWriter.Pchify}sR€à �?‰?˜4Ó €DØ ˆt�|Ø �\‰\™)ØŸ<›<©ð&/ó0€dà €kðð/3¯l«lºDÁ$Ð GÐGr>cóº—d|vr|jd«Stjjtjj |j|««S)zlConvert a subdirectory-relative path into a base-relative path. Skips over paths that contain variables.r“rø)ÚrstriprLrMrNrOrös r<rÆzMakefileWriter.Absolutify‡sD€ð ˆt�|ð�[‰[˜Ó ÐÜ �7‰7× Ñ œBŸG™GŸL™L¨¯©°DÓ9Ó :Ð:r>có*—d|vrd|vr|S|||dœz}|S)Nr r )Ú INPUT_ROOTÚ INPUT_DIRNAME©)r¶ÚtemplateÚ expansionrrMs r<r1zMakefileWriter.ExpandInputRoot’s3€Ø˜xÑ'Ð,?ÀxÑ,OØ €oØ ØØ ñ ñ €Dð €Kr>có²—|jdk(r:|jdk7s|jdk7rd|j›d|j›�Sd|jzS)zCReturns the location of the final output for an installable target.r¾rrÏz$(builddir)/lib.røz $(builddir)/)rœr9rºrÞr�s r<rßz,MakefileWriter._InstallableTargetInstallPathœsM€ð � ‰ Ð%Ò%Ø �‰˜Ò  §¡°Ò!9øð)-¯ « °d·j²jÐ AÐAØ ˜DŸJ™JÑ &Ð&r>)NF)NNFFFN)rrk)$Ú__name__Ú __module__Ú __qualname__Ú__doc__r·rÿrrárârãrärårærjrŽr‘rÚrÖrØrÕrŸrìrŒr4rr2rïràrr¿rrgrèrÆr1rßrþr>r<r±r±µsØ„ñò +ò6BòJò6aòH}ò@#òL #òò6zòxòB(/òVOò @òDòGò Eò,*ò i)ðX,0¸Ø'ó 6ðGKØ!ó7ð0BFØHLó;ò|PófóòKòHòòHò;òó 'r>r±c ó>—|d}|dD�cgc],}tjj||j«‘Œ.}}tjj |d|j«}|j t j«s t jjd|«}|jd|djtt|««tjj|dgtj|«z|z«dœz«y cc}w) z,Write the target to regenerate the Makefile.rBÚbuild_files_argÚ gyp_binaryrz™quiet_cmd_regen_makefile = ACTION Regenerating $@ cmd_regen_makefile = cd $(srcdir); %(cmd)s %(makefile_name)s: %(deps)s $(call do_cmd,regen_makefile) r˜z-fmake)Ú makefile_namerõÚcmdN)r,r-Ú RelativePathrKÚFixIfRelativePathrÂrLÚseprMrOr\r r–rÚRegenerateFlags)r8Ú root_makefiler Ú build_filesrBrpÚbuild_files_argsrs r<ÚWriteAutoRegenerationRuler¨s €ð �9Ñ €'à&,Ð->Ò&?óAÙ&?˜(ô—j‘j×-Ñ-¨h¸×8LÑ8LÕMØ&?ððAô�z‰z×+Ñ+¨F°<Ñ,@Ø,3×,@Ñ,@óB€*à × Ñ œrŸv™vÔ &Ü—‘—‘˜c :Ó.€Jà×Ñð,ð)Ø—(‘(œ3œy¨+Ó6Ó7Ü—‘×0Ñ0Ø  (Ð+Ü×(Ñ(¨Ó1ñ2à%ñ&ó'ñ/(ñ (õ )ùòAs�1Dcóî—|d}|D]k}dg}|jr |jdk7r|d|jfz }|jd|z«td|›d|›�«tj|«Œmy)NrBÚmakerz-Cz BUILDTYPE=z Building [z]: )rKr£r¦Ú subprocessÚ check_call)ÚdataÚconfigurationsr8rBrnÚ argumentss r<Ú PerformBuildrÁsv€Ø �9Ñ €'Û€fØ�€IØ×Ò × 4Ñ 4¸Ò ;Ø�4˜×-Ñ-Ð-Ñ-€iØ ×Ñ�\ FÑ*Ô+Ý ¢©Ð 3Ô4Ü×ј)Õ$ñ r>c ó‡3—|dŠ3tjj|«}|jdi«}|jdd«}|jdd«}|jdd«}ˆ3fd„} d} t |D� cgc] } || d ‘Œ c} «} |D]} || } | d d k7sŒ| d } n| sd } d }d ‰3j z}t jj‰3j|«}‰3jrat jj‰3j‰3j|«}tjj|‰3j«}da d}d}d}||| |dtd|||dœ }|dk(r!d}|j|dtt dœ«n¯|dk(r|jdt"i«n’|dk(rd}d}|j||t$dœ«no|dk(r|jd dd!œ«nU|d"k(r|jdd#i«n<|d$k(rd%}|jd&|i«n!|d'k(rd%}|j|t&d dd(œ«|jt)d)d*«t)d+d,«t)d-d.«t)d/d0«t)d1d2«t)d3d4«t)d5d6«t)d7d8«d9œ«tjj+|d:«\}}}||jd;g«}i}|D],\}}|j-d<«sŒd=|z||dt/d<« <Œ.d}|D]¦\}}t1j2d>|«rŒ|d:d?k7rd=|z}|j|«}|r |›d@|›�}||=|dAvrQ|dB|zz }|j5d dC«}|t j6vrt j6|}|dD|›dE|›dF�z }|dGz }Œœ||›dH|›dF�z }Œ¨||d;<tjj9|«t;|dI«}|j=t>|z«|r|j=dJ«| D]!}|j=dK|z«tA|«Œ#t jjC|«} tjjE|| «t «}!|dLD]9}tjjG|||«D]} |!jI| «ŒŒ;t «}"t «}#|D�]ÿ}$tjj+|$«\}} }||jd;g«}%||%k(s JdM|%›dN|›�«‚|"jItjj|‰3j««||dO}&|&D]¥}'tjjtjjK|'|«‰3j«}(t jjM|(«})|dPr&|)jO|dP«r|"jI|)«Œ•|"jI|(«Œ§| || d z|z‰3j zdQz«\}*}+||$} | dR},|dk(r#tjPjS||| «tU||«}-|-jW|$|*|+| |,|$|!v¬S«tjj|+t jjC|««}.|#jI|.«�Œtjj‰3jXt jZ««}/|"D�] }t jj|/|«}|D� cgc]} | jO|«r | |!vr|| dT‘Œ!}0} |0sŒQ| |t jj]t jj_|««d:dUz«\}*}+tjjt jjC|«t jjC|+««}1-ja|+|1|0|«�Œ |j=dF«tc|#«D]A}2|j=dV|2zdWz«|j=dX|2zdFz«|j=dG«ŒC|j=dF«|jdY«s |jdZd[«rte||||"«|j=tf«|ji«ycc} wcc} w)\NrBr@rCrDrAÚdefault_targetr·có•—tjjtjj |«‰j «}tjj‰j ||«}‰jr6tjj‰j ‰j||«}tjjtjj |«‰j«}||fS)z9Determine where to write a Makefile for a given gyp file.) r,r-r rLrMrÚdepthrOrJrK)Ú build_fileÚ base_namerñÚ output_filerBs €r<ÚCalculateMakefilePathz-GenerateOutput..CalculateMakefilePathÔs±ø€ô — ‘ ×'Ñ'¬¯©¯©¸ Ó(CØ(/¯ © ó7€Iô—'‘'—,‘,˜wŸ}™}¨i¸ÓC€KØ×ÒÜ—G‘G—L‘LØ �-‰-˜×1Ñ1°9¸ióI€kä— ‘ ×'Ñ'¬¯©¯©¸ Ó(CØ(/×(<Ñ(<ó>€Ià �kÐ !Ð!r>rºÚdefault_configurationÚDefaultrÚMakefilez $(srcdir)/Úflockz-afz-MMDržr) rÚbuilddirr#r&Ú flock_indexÚ link_commandsÚextra_commandsÚsrcdirÚcopy_archive_argsÚ makedep_argsrz./gyp-mac-tool flocké)r&r(r)r*r(r)Úzosz-fPRz -qmakedep=gcc)r,r-r)Úsolarisz./gyp-flock-tool flock)r&r(ÚfreebsdÚlockfr­z-pPRfr,r*)r,r)r&r()Ú CC_targetÚCCz$(CC))Ú AR_targetÚARz$(AR))Ú CXX_targetÚCXXz$(CXX))Ú LINK_targetÚLINKz$(LINK))ÚCC_hostÚgcc)ÚAR_hostÚar)ÚCXX_hostzg++)Ú LINK_hostz $(CXX.host))z CC.targetz AR.targetz CXX.targetz LINK.targetúCC.hostzAR.hostúCXX.hostz LINK.hostrÚmake_global_settingsÚ_wrapperz $(abspath %s)z .*_wrapperrƒr˜)r4rAr8rBz3ifneq (,$(filter $(origin %s), undefined default)) rŽrŸrBrWzendif z ?= r¹zU# Define LOCAL_PATH for build of Android applications. LOCAL_PATH := $(call my-dir) zTOOLSET := %s rz;make_global_settings needs to be the same for all targets. z vs. Úincluded_filesÚ home_dot_gypz.mkrrEr¡z .Makefilezmifeq ($(strip $(foreach prefix,$(NO_LOAD),\ $(findstring $(join ^,$(prefix)),\ $(join ^,z)))),) z include Ú standaloneÚauto_regenerationT)5r,r-r.rHrêrÕrLrMrOrKrJr r•ÚLINK_COMMANDS_LINUXr6ÚLINK_COMMANDS_MACÚSHARED_HEADER_MAC_COMMANDSÚLINK_COMMANDS_ANDROIDÚLINK_COMMANDS_OS390ÚLINK_COMMANDS_AIXrÚParseQualifiedTargetrmr¥r�Úmatchr~ÚenvironrÊrËr\Ú SHARED_HEADERr`rÚCopyToolÚ AllTargetsrÚUnrelativePathÚabspathrÂrÐÚMergeGlobalXcodeSettingsToSpecr±rÿrÚgetcwdryr¢rrXrÚ SHARED_FOOTERrð)4Ú target_listÚ target_dictsrr8r9r@rQrArr"r#rÏÚtoolsetsr§r+r rÚ flock_commandÚcopy_archive_argumentsÚmakedep_argumentsÚ header_paramsrrŽÚmake_global_settings_arrayÚwrappersrUÚvaluerCÚwrapperÚenv_keyrrºÚ dest_pathÚneeded_targetsrÚ include_listrÎÚthis_make_global_settingsrEÚ included_fileÚrelative_include_fileÚabs_include_filerñr!rór]Úmkfile_rel_pathÚdepth_rel_pathÚ gyp_targetsÚmakefile_rel_pathÚ include_filerBs4 @r<ÚGenerateOutputrrÌs* ø€Ø �9Ñ €'Ü �:‰:× Ñ  Ó '€&Ø—J‘JÐ0°"Ó5€/Ø!×%Ñ% l°EÓ:€-Ø'×+Ñ+Ð,AÀ4ÓHÐØ"×&Ñ&Ð'7¸Ó?€.ô"ð(ÐÜ Á ÓLÁ °f�,˜vÑ& yÓ1À ÑLÓ M€(Û€fØ ˜Ñ €DØ Ð #Ñ$¨ Ó1Ø"Ð#:Ñ;ÐÙ ð ñ Ø%Ðà €&ؘwŸ~™~Ñ-€-Ü—'‘'—,‘,˜w×3Ñ3°]ÓC€-Ø ×Òä—G‘G—L‘LØ×јg×6Ñ6¸ óG€Mä �Z‰Z× $Ñ $ V¨W×-EÑ-EÓ F€FØ €Mà€-Ø ÐØÐà&ØØ4ØØÜ*ØØØ1Ø'ñ €-ð ˆu‚_Ø*€MØ×ÑØØÜ*Ü4ñ õð �ÒØ×ÑØÔ.ðõð�‚Ø#ÐØ'ÐØ×ÑØ3Ø)Ü,ñõð �ÒØ×ÑØ)Øñõð�Òà×ÑØ�ðõð�ÒØ$ÐØ×ÑØÐ3ðõð�‚Ø$ÐØ×ÑØ3Ü*Ø)Øñ ôð×ÑÜ%Ð&9¸7ÓCÜ%Ð&9¸7ÓCÜ%Ð&;¸XÓFÜ%Ð&=¸yÓIÜ% l°EÓ:Ü% l°DÓ9Ü% m°UÓ;Ü% n°mÓDñ ô ô—Z‘Z×4Ñ4°[À±^ÓDÑ€*ˆa�Ø# JÑ/×3Ñ3Ð4JÈBÓOÐØ €(Û.�j€cˆ5Ø ‡|�|�JÕØ)8¸5Ñ)@€hˆsÐ$”S˜“_Ð$Ð%Ò&ð/ðÐÛ.�j€cˆ5Ü ‡x�x� ˜cÔ"ØØ ˆQ�x�3‚Ø Ñ%€eØ�l‰l˜3Ó€GÙÚ ¡%Ð(€eØ �3ˆ-Ø Ð2Ñ2ØØ @À3Ñ FñHÐð— ‘ ˜C Ó%€gØ ”B—J‘JÑ Ü— ‘ ˜7Ñ#ˆÙªs²EÐ:Ñ:ÐØ˜iÑ'Ñàªc²5Ð9Ñ9Ñð'/ð.+?€-Ð&Ñ'ä‡*�*×ј]Ô+Ü�} cÓ*€-Ø×Ñ”m mÑ3Ô4ñØ×Ñð ôó€gØ×ÑÐ)¨GÑ3Ô4ܘ}Õ-ðô �g‰g�o‰o˜mÓ,€)܇*�*×Ñ�f˜iÔ(ô“5€.ؘ=Ô)€jÜ—*‘*×'Ñ'¨ °\À:ÖNˆØ×Ñ˜Õ ñOð*ô“€+Ü“€,Ü%ÐÜ"%§*¡*×"AÑ"AØó#Ñ€J�˜ð!% ZÑ 0× 4Ñ 4Ð5KÈRÓ PÐØ %Ð)BÒ Bñ;â "Ñ$8ð :ó;Ð Bð‡O�O”C—J‘J×+Ñ+¨J¸×8LÑ8LÓMÔNؘ*Ñ%Ð&6Ñ7€NÛ'ˆ ô"Ÿj™j×5Ñ5Ü �*‰*× #Ñ # M°:Ó >Ø × Ñ ó ÐôŸ™Ÿ™Ð)>Ó?Ðð �Ò Ø × %Ñ % f¨^Ñ&<Ô =Ø�‰Ð(Õ)à�‰Ð-Õ.ð(ñ 3°:Ø�‰ �wÑ §¡Ñ/°%Ñ7ó9Ñ€Iˆ{ð Ð(Ñ )€DØÐ#Ñ$€Gà �‚Ü ×Ñ×8Ñ8¸¸jÑ9IÈ4ÔPä ˜O¨VÓ 4€FØ ‡L�LÐ! 9¨k¸4ÀØ-°Ð?ðôAô —j‘j×-Ñ-¨kÜ.0¯g©g¯o©o¸mÓ.LóN€Oà×Ñ�_Ö%ðY&ô^—:‘:×*Ñ*¨7¯=©=¼"¿)¹)»+ÓF€.Ü€jô—‘—‘˜n¨jÓ9€JÙEPó-Á[¸6Ø×'Ñ'¨ Ô3ؘ^Ñ+ð  Ñ'¨ Ó6À[€Kð-ñ ØÙ2°:Ü �‰×ÑœŸ™×)Ñ)¨*Ó5Ó6°qÑ9¸KÑGóIÑ€Iˆ{äŸ ™ ×/Ñ/´·±·±À Ó0NÜ02·±·±À Ó0LóNÐà ×ј Ð%6¸ Ø%ö'ð ð(×Ñ�dÔܘ\Ö*€lð ×Ñð %à'3ñ 4à6@ñ AôBð×ј  |Ñ3°dÑ:Ô;Ø×ј Õ"ð+ð×Ñ�dÔà × Ñ ˜lÔ +Ø × Ñ Ð1°4Ô 8ܘf m°]ÀKÔPà×Ñ”mÔ$à×ÑÕùòWMùòP-s Á>dÝ$d )z\ )6Ú __future__rrLr�Úsysrr,Ú gyp.commonÚgyp.xcode_emulationrrrØr0Ú$generator_supports_multiple_toolsetsrIr!r"r#rPr=rRrÔrIrJrLrNrMrRrKr`rérërYrÍr5rsrwrzr�r„r‡rŒr‘r•r–ršr¯rírîÚobjectr±rrrrrþr>r<Úrys ðõ0&ã Û Û ÛÛ ÛÛÝ)ÝãðØØØØØ8Ø)ØØ%Ø+Ø$Ø"Ø#Ø&ñÐð$(,Ð$ð',Ð#ð/1Ð+Ø%'Ð"Ø$&Ð!ØÐò"AòJðBÐð"ÐðH ÐðÐð8Ðð$Ðð(H&ðP):ñQH:ðP=ñQIðR"3ñSI3ðR_6ñShðP+ñQh+ðRMñSHMðR6GñSIGðRJ)ñSJ)ðT,=ñUJ=ðV!&ñWl€ ð\Ðò>ð((Ð#ð (Ð#ð € ð €ð Ø Ø Ø Ø Ø ñ Ðòò!ò .ò -òò òò.ð € òóò Mð@€ð Ðôp'�Vôp'òf')ò2%óHr>