HOME


Mini Shell 1.0
Redirecting to https://devs.lapieza.net/iniciar-sesion Redirecting to https://devs.lapieza.net/iniciar-sesion.
DIR: /proc/1991110/cwd/usr/lib/python3/dist-packages/gyp/generator/__pycache__/
Upload File :
Current File : //proc/1991110/cwd/usr/lib/python3/dist-packages/gyp/generator/__pycache__/make.cpython-311.pyc
�

K��b�i���ddlmZddlZddlZddlZddlZddlZddlZddlZddlm	Z	ddlm
Z
ddlZddddddd	d
dd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<d5�Z-d6�Z.iZ/iZ0Gd7�d8e1��Z2d9�Z3d:�Z4d;�Z5dS)=�)�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���tj�|��}|dkr�|�dd��|�dd��|�dtd��|�dtd��dd	lmcm}t|d
g��a	t|dg��a
t|dg��at�
d
dd���d	S|}|dkrd}|�d|��|dkr|�dd��n|�dd��|�dd��|�dd��d	S)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     �4/usr/lib/python3/dist-packages/gyp/generator/make.py�CalculateVariablesr=Ds����:����'�'�&��u�_�_�� � ��u�-�-�-�� � �!4�h�?�?�?�� � �!1�!<�]�!K�M�M�M�� � ��!<�]�!K�M�M�M�
2�1�1�1�1�1�1�1�1�29�/�5�r�3;�3;�/�*1��,�b�*2�*2�&�)0��+�R�)1�)1�%�� � ���!A�!A�B�B�B�B�B���
���� ��� � ��'7�8�8�8�
�����"�"�#6��=�=�=�=��"�"�#6��>�>�>�� � �!1�2N�O�O�O�� � ��,?�@�@�@�@�@�c�b�|�di��}|�dd��}|rda|djp|dj}|�dd��}tj�tj�||d����}|dj|d	�adS)
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�5�/�'�+�+�,A�4�H�H���/�*.�'��i� �1�.��i� �-�
�!�%�%�l�E�:�:�-��g�&�&�r�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)) -o $@ $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl,--start-group $(LD_INPUTS) $(LIBS) -Wl,--end-group

# 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)) -o $@ -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl,-soname=$(@F) -Wl,--whole-archive $(LD_INPUTS) -Wl,--no-whole-archive $(LIBS)

quiet_cmd_solink_module = SOLINK_MODULE($(TOOLSET)) $@
cmd_solink_module = $(LINK.$(TOOLSET)) -o $@ -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl,-soname=$(@F) -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)) -o $@ $< $(GYP_CFLAGS) $(DEPFLAGS) $(CFLAGS.$(TOOLSET)) -c

quiet_cmd_cxx = CXX($(TOOLSET)) $@
cmd_cxx = $(CXX.$(TOOLSET)) -o $@ $< $(GYP_CXXFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) -c
%(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��tt���tj���}|�d��|D]=}|�d|z��|�dt|z���>|�d��|D]=}|�d|z��|�dt|z���>|�d��|D]=}|�d|z��|�dt|z���>|�d��dS)	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`sZ���+�0�0�2�2��	�B�B�B�*��,�,�C�D�D�D�
�J�J�c�
�L�L�H�3�N�O�O�O�
�L�L�+�.C�C�.H�H�I�I�I�I��,�,�?�@�@�@�
�J�J�c�
�L�L�G�#�M�O�O�O�
�L�L�+�.C�C�.H�H�I�I�I�I��,�,�t����
�J�J�c�
�L�L�E��K�L�L�L�
�L�L�+�.C�C�.H�H�I�I�I�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�>���fd�tD��D]}|rdS�dS)z:Return true if the file is compilable (should be in OBJS).c3�B�K�|]}��|��V��dS�N��endswith)�.0�e�filenames  �r<�	<genexpr>zCompilable.<locals>.<genexpr>Js1�����
B�
B�q�h����"�"�
B�
B�
B�
B�
B�
Br>TF)r5)rp�ress` r<�
CompilablersHs@���
B�
B�
B�
B�,A�
B�
B�
B���c�
��
�T�T��	�r>c�,�|�d��S)zAReturn true if the file is linkable (should be on the link line).�.orl�rps r<�LinkablerwPs��	�	�	�4�	 �	 � r>c�R�tj�|��ddzS)z1Translate a compilable filename to its .o target.rru�rLrM�splitextrvs r<�Targetr{Us"��	��	�	�(�	#�	#�A�	&��	-�-r>c�:�d|�dd��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�.�|�dd��S)zrMake has its own variable expansion syntax using $. We must escape it for
     string to be interpreted literally.�$z$$r~r�s r<�EscapeMakeVariableExpansionr�bs��
���3��	�	�r>c�j�t|��}t|��}|�dd��S)zBEscapes a CPP define so that it will reach the compiler unaltered.�#z\#)r�r�rr�s r<�EscapeCppDefiner�hs2���!���!�!�!�$�$�!�
���3��	�	�r>c�F�d|vrd|�dd��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�.�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�d�d|vr|Stj�|��r|St|zS)z,Convert a path to its source directory form.�$()rLrM�isabs�
srcdir_prefix)rMs r<�	Sourceifyr�s6��	�T�\�\��K��W�]�]�4�����K�	��	�r>�\ c�.�|�d|��S)N� r~)r��quotes  r<�QuoteSpacesr��s��	
���3��	�	�r>c�.�|�dd��dkrdSi}|D]s}tj�|��\}}|dv}|s�+tj�|��}|�|g���|���td}|���D]7\}}	t|	��dkr|d|�dd	�	|	���d
�z
}�8|r0td|dz|zd
zdz��td���dS)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<static library %s has several files with the same basename:
�target_namezlibtool on OS X will generatez warnings for them.z6Duplicate basenames in sources section, see list above)rHrLrMrz�basenamer/�append�items�lenrO�printr)
�spec�all_sources�	basenames�source�namer_�is_compiled_filer��error�filess
          r<�_ValidateSourcesForOSXr��s]��
�X�X�f�d���/�/�/�
�F��)��6�6�f��� � ��(�(�I�D�#��>�>������w����%�%�H�
����2�&�&�-�-�f�5�5�5�5�
�%�"���*�*�:�:�o�h��
�5�z�z�A�~�~��e�x�x�x����%�����9�9�e��
�M�	�
I�
�}�
�� %�&�(G�H�
� �!�!�!��K�
L�
L�L�	M�Mr>c���eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�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#dS)(�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
���D]�}|j�|d|�dt
|�d�i��|j�|d|�dt
|�d�i��|j�|d|�dt
|�d�i����dS)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�s��s�s�!�#�&�&�&�.(�'*�+�+�+���&�&����s�s�!�#�&�&�&�/(�(*�+�+�+���&�&����s�s�!�#�&�&�&�/(�(*�+�+�+�+�+�+r>c
�.
��tj�|��t|d���_�j�t��|�_|�_|d�_	|d�_
|d�_tj�
�j|���_�jdkr%tj�|���_nd�_��|��\}}g}	g}
g}g}g}
�jr5��|���_��|���_n!��|��x�_�_t1|�dd�����_d	�_�js�j
�jvr>t8j��j���_����}n�j�_�j}�� d
�jz���� d�j	z��d|vr��!|d|
|	||��d
|vr��"|d
|
|	||��d|vr��#|d|	|���jrD|�dg��|z}��$||
����%|
��|�dg��|
z}|�r~�jdkrtM||����'||||	||tj�(�j�fd��j)����d�|D��}|�r
�� tT��tWd�|D����}|D]+}|�j,vr �� �j,|���,�� tZ��|D]+}|�j.vr �� �j.|���,|D]+}|�j/vr �� �j/|���,�� d���jr|
�0�j����1|||||z|
|	|��|td|<�j
dvr�jtf|<�j4�dd��r��5�j	||���j�6��dS)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_libraryzTOOLSET := z
TARGET := �actions�rules�copies�mac_bundle_resources�sourcesc�H��t��|����Srk�r��
Absolutify��pr�s �r<�<lambda>z&MakefileWriter.Write.<locals>.<lambda>3s���Y�t���q�7I�7I�-J�-J�r>c�0�g|]}t|���|��S�)rs)rn�xs  r<�
<listcomp>z(MakefileWriter.Write.<locals>.<listcomp>5s#��9�9�9�q�:�a�=�=�9��9�9�9r>c�X�g|]'}tj�|��d��(S)r�ry)rnr�s  r<r�z(MakefileWriter.Write.<locals>.<listcomp>8s-��B�B�B�Q�"�'�*�*�1�-�-�a�0�B�B�Br>z!# End of this set of suffix rules)r�r�rA)7r,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�Pchify�#SHARED_HEADER_SUFFIX_RULES_COMMENT1�setr��#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�r�r^r_s`                   r<�WritezMakefileWriter.Write�s^����J����/�/�/��?�C�(�(�D�G��G�M�M�&����,�D���D�I��}�%�D�K��V��D�I��	�?�D�L��,�8�8���d�K�K�D���{�e����/�=�=�d�C�C�d��� �d���&�&�t�,�,�O�D�)�
�M��M��O�!#���O���B��/�/��5�5�d�k��<�<�T�B�B�d���)-�);�);�D�)A�)A�A�d�k�D�&�(,����,�a�0�0�)2�)2�D�%�!3�D���)�!��	�T�.�.�.��7�#�#�D�K�0�0�d�j��7�7�9�9�l�l��;�d�j��[�l��L�L����-�.�.�.��L�L����+�,�,�,��D���
����Y���
�2�K�A�A�A��$���
�o�o�d�7�m�]�M�0�+�?�?�?��4���
���t�H�~�}�k�B�B�B���.�
�(�(�)�2�
.�
.�1K�
K��
�"�"�#;�_�M�M�M�
���_�-�-�-��(�(�9�b�)�)�M�9�K��5�	
���	�	�	�t�[�1�1�1�
���
�4��m�
�;�

�
�
-�
-��!�#J�#J�#J�#J��k������:�9�K�9�9�9�g�	�5����8�9�9�9��B�B�'�B�B�B�C�C�
��	8�	8�C�
�D�,�
,�
,��L�L��1�#�6�7�7�7�����8�9�9�9��	9�	9�C�
�D�-�
-�
-��L�L��2�3�7�8�8�8���	9�	9�C�
�D�-�
-�
-��L�L��2�3�7�8�8�8�����8�9�9�9���	5�
�
 �
 ��!3�
4�
4�
4����T�7�D�/�I�*E�$�m�[�B�B�B�(4�N�#�$��y�8�8�8�+/�+=��'�(����� 5�t�<�<�J�
�$�$�T�[�+�y�I�I�I��G�M�M�O�O�O�O�Or>c�B�tj�|��t|d��|_|j�t��|�dtj	�
tj	�|��|��z��|�d��|�d��|rd|z}|�d|�dd�
|������|j���dS)	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����/�/�/��?�C�(�(�D�G��G�M�M�&����	�L�L�-�����b�g�o�o�o�>�>�	�J�J�K�L�L�L��L�L������L�L������-��}�,�m��L�L�L�]�]�]�C�H�H�W�4E�4E�4E�F�G�G�G��G�M�M�O�O�O�O�Or>c���������|D�]�}t�j�d|d����}��d|dz��|d}|d}	t	��}
|	D]>}t
j�|��d}|r|
�|���?t|�
dd����r||	z
}t|�
d	d����r||	z
}|d
}
�jdkr�fd�|
D��}
tj
�|
��}d
|vr#��d|�d|d
�d���n��d|�d|�d���t|
��dkrdd�|
��zdz|z}dt#�jpd��z}|�d�j��}|�d�j��}��d|�d|�|���������fd�|	D��}	��dt)|	d��z����dt)|	d��z����|	d������|D]}d|vs
Jd|z����|	D]}d|vs
Jd|z�����fd�|	D��}	�fd�|D��}��|	t/t"t/�j|����||� ��d!|z}��|�d"d�|	������|�d#|z�������������d$S)%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�actionrc�P��g|]"}tj�|�����#Sr��r,r��
ExpandEnvVars�rn�command�envs  �r<r�z/MakefileWriter.WriteActions.<locals>.<listcomp>�s<���:�:�:�%��.�<�<�W�c�J�J�:�:�:r>�message�
quiet_cmd_z
 = ACTION z $@zmkdir -p %sr�z; �cd %s; �.�	$(TARGET)�cmd_zj = LD_LIBRARY_PATH=$(builddir)/lib.host:$(builddir)/lib.target:$$LD_LIBRARY_PATH; export LD_LIBRARY_PATH; c�:��g|]}��|����Sr��r��rn�or�s  �r<r�z/MakefileWriter.WriteActions.<locals>.<listcomp>�s%���5�5�5������#�#�5�5�5r>�%s: obj := $(abs_obj)�%s: builddir := $(abs_builddir)z3Spaces in action input filenames not supported (%s)z4Spaces in action output filenames not supported (%s)c�P��g|]"}tj�|�����#Sr�r�rnr"rs  �r<r�z/MakefileWriter.WriteActions.<locals>.<listcomp>�s,���L�L�L�q��$�2�2�1�c�:�:�L�L�Lr>c�P��g|]"}tj�|�����#Sr�r�rn�irs  �r<r�z/MakefileWriter.WriteActions.<locals>.<listcomp>�s,���J�J�J�a��#�1�1�!�S�9�9�J�J�Jr>)r�rzaction_%s_outputs� := �$(%s)N)�GetSortedXcodeEnvr�r�r�r�rLrM�split�add�intrHr9r,r-�EncodePOSIXShellListr�rOr�rr�r��WriteSortedXcodeEnv�
WriteDoCmd�mapr�r�)r�r�r�r�rr�rr�rr�dirsrD�dir�action_commandsr�	cd_action�inputr��outputs_variablers`                  @r<r�zMakefileWriter.WriteActionsvsY�����
 �
 �
"�
"�C��S�S��
%��1F�1F�1F�17�
�1F�1F�'H�I�I�d�
�l�l�/�&��2G�G�H�H�H��h��f��y�!�g��U�U�d����#��g�m�m�C� � ��#���	�
�(�(�3�-�-�-��	�V�Z�Z�4�e�
<�
<�	=�	=�!��� �
�	�V�Z�Z�A�5�
I�
I�	J�	J�.�"�g�-�"��x�(�o�	
���	�	�:�:�:�:�)8�:�:�:���
�/�/��@�@�g�	�f�	�	�����d�d�d�F�9�<M�<M�<M�N�O�O�O�O�����d�d�d�D�D�D�A�B�B�B�	�T���Q����#�(�(�4�.�.�0�4�7�'�A���i��	�(8�S�9�9�9�i�
����T�[�9�9�g��#�#�K���=�=�i��l�l�l��d�d�I�I�w�w�	0�1�1�1�
�l�l�n�n�n�5�5�5�5�W�5�5�5�g��l�l�*�[����-D�-D�D�E�E�E�
�l�l�4�{�7�1�:�7N�7N�N�O�O�O�
���w�q�z�4�+A�+A�+C�+C�D�D�D��L�L�%��%����A�U�J� �����N�N�&��&� � � �B�f�L�!� � � �M�L�L�L�G�L�L�L�g�J�J�J�J�6�J�J�J�f�
�o�o�g�s�9�c�$�/�6�.J�.J�K�K�"-�t��=�=�=�-�t�3��
�l�l�!1�!1�!1�3�8�8�G�3D�3D�3D�E�F�F�F����7�%5�5�6�6�6�
�l�l�n�n�n�n��L�L�N�N�N�N�Nr>c
������������|D�]*}t�j�d|d����}d}��d|z��g}	|�dg��D�]u}
t��}tj�|
��\�}tj�	|��\�}
���fd�|dD��}|D]8}tj�
|��}|r|�|���9t|�dd	����r||z
}t|�d
d	����r||z
}ttt�j|
g|�dg��z����}d||fzg}|d
kr|dgz
}�fd�|D��}�fd�|D��}�fd�|D��}|	|z
}	��d|dz����d|dz����|||d||fz���t#jd��}|D])}t#j|d|��}d|vs
Jd|z����*��dd�|��z�����fd�|dD��}d}t+|��dkrdd�|��z}dt�jpd��z}�jd kr�fd!�|D��}t.j�|��}|�d"�j��}|�d"�j��}|�d"�j��}��d#|||||d$�z����d%||d&�z������|d'z
}��wd(|z}��|	|��|�d)|z����d*|z��������,��d+����d��d,S)-a�Write Makefile code for any 'rules' 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
                   rules (used to make other pieces dependent on these rules)
    part_of_all: flag indicating this target is part of 'all'
    r��	rule_namerz### Generated for rule %s:�rule_sourcesc�>��g|]}��|������Sr���ExpandInputRoot)rnrD�rule_source_dirname�rule_source_rootr�s  ���r<r�z-MakefileWriter.WriteRules.<locals>.<listcomp>�sA���/�/�/���'�'��-=�(;�=�=�/�/�/r>rrFrrz$(call do_cmd,%s_%d)�resources_gritz@touch --no-create $@c�P��g|]"}tj�|�����#Sr�rr&s  �r<r�z-MakefileWriter.WriteRules.<locals>.<listcomp>
s,���N�N�N��3�&�4�4�Q��<�<�N�N�Nr>c�P��g|]"}tj�|�����#Sr�rr(s  �r<r�z-MakefileWriter.WriteRules.<locals>.<listcomp>s,���L�L�L��#�%�3�3�A�s�;�;�L�L�Lr>c�:��g|]}��|����Sr�r r!s  �r<r�z-MakefileWriter.WriteRules.<locals>.<listcomp>s%���7�7�7�!�4�?�?�1�%�%�7�7�7r>r#r$z%s_%d)rz\$\([^ ]* \$<\)rr�z/Spaces in rule filenames not yet supported (%s)�all_deps += %sc�>��g|]}��|������Sr�r>)rn�acr@rAr�s  ���r<r�z-MakefileWriter.WriteRules.<locals>.<listcomp>$sA���,�,�,���&�&�r�+;�':�<�<�,�,�,r>rz
mkdir -p %s; rrrc�P��g|]"}tj�|�����#Sr�rrs  �r<r�z-MakefileWriter.WriteRules.<locals>.<listcomp>0s<���+�+�+���'�5�5�g�s�C�C�+�+�+r>rz�cmd_%(name)s_%(count)d = LD_LIBRARY_PATH=$(builddir)/lib.host:$(builddir)/lib.target:$$LD_LIBRARY_PATH; export LD_LIBRARY_PATH; %(cd_action)s%(mkdirs)s%(action)s)rr7�count�mkdirsr�z9quiet_cmd_%(name)s_%(count)d = RULE %(name)s_%(count)d $@)rJr�r�zrule_%s_outputsr+z$### Finished generating for rule: %sz%### Finished generating for all rulesN)r,r�r�r�rHr�rLrMr-rzrr.r/r3r�r��
WriteMakeRuler��compiler�rOr�r9r,r-r0rr��	WriteListr�)r�r�r�r�rr��ruler�rJ�all_outputs�rule_sourcer4�rule_source_basename�rule_source_extrrDr5rr��variables_with_spacesr�rrKr7r9rr@rAs`                        @@@r<r�zMakefileWriter.WriteRules�sb�������
 �
 �
"�
"�C��p�p��
%��1F�1F�1F�15�k�1B�1B�'D�E�E�d��e�
�l�l�/�$�6�7�7�7��k����.�"�5�5�a�a�+��u�u��68�g�m�m�K�6P�6P�3�	�2��G���1�2�2�	,�	�?�/�/�/�/�/�/�"�9�o�/�/�/���	�	�C������$�$�#�
���H�H�S�M�M�M���t�x�x�4�e�<�<�=�=�	#�
�7�
"�-��t�x�x�A�5�I�I�J�J�	0�
$��
/�
$��Y��D�O�k�]�$(�H�H�X�r�$:�$:�6;�!<�!<�=�=��)�T�5�M�9�:���#�#�#��-�.�
.�'�O�N�N�N�g�N�N�N��L�L�L�L�V�L�L�L��7�7�7�7�w�7�7�7���w���	
���,�w�q�z�9�:�:�:����6����C�D�D�D����7�F�G�#*�d�E�]�#:�	�	<�	<�	<�!#�
�+=� >� >���	K�	K�F��6�/��V�<�<�&��F�"�"�"�?�6�I�#�"�"�"����%�����(9�(9�9�:�:�:�,�,�,�,�,�,� ��N�,�,�,�����t�9�9�q�=�=�"�S�X�X�d�^�^�3�&��	�$�)�*:�s� ;� ;�;�	�
�;�%���+�+�+�+�#)�+�+�+�&���0�0��8�8������T�[�9�9���%�%�k�4�;�?�?�	�����T�[�9�9��	
���
2�� ����5
�5
�	
�
	�
	�
	�	
���G���K
�K
�
�	�	�	�
	
������
��
���*�T�1��
�n�n�[�"2�3�3�3����7�%5�5�6�6�6�
�l�l�9�D�@�A�A�A�
�l�l�n�n�n�n��L�L�8�9�9�9��L�L������r>c
��|�d��t|jdz��}g}|D�] }|dD�]}t|�|����}t
j�|��d}t|�t
j�|d|������}	|�	��}
tj�|	|
��}	tj�||
��}|�
|	g|gd|��|�|	������"|�|�dd�tt |��������|�d	|z��|���d
S)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�r+N)r�r�r�r�r�rLrMr-rOr,r,r�rr2r�r3r�)r�r�r�r��variablerrXrMrpr�rs           r<r�zMakefileWriter.WriteCopiesZs���	�L�L�/�0�0�0�'��(=�	�(I�J�J�H��G������w�-���$������.�.�/�/���7�=�=��&�&�q�)���4�?�?�2�7�<�<��]�8K�8@�,B�,B�C�C�D�D���$�$�&�&���$�2�2�6�3�?�?���"�0�0��s�;�;�������4�&�&�+�>�>�>����v�����)�*	�L�L�h�h�h�����[�'�1J�1J�(K�(K�(K�L�M�M�M�����8�+�,�,�,��L�L�N�N�N�N�Nr>c��|�d��tj�td|jt
tt
|j|������D]]\}}tj
�|��\}}|dkr0|�|g|gdd���|�
|���^dS)z0Writes Makefile code for 'mac_bundle_resources'.z&### Generated for mac_bundle_resourcesrz	.xcassetszmac_tool,,,copy-bundle-resourceT�r�N)r�r,r��GetMacBundleResourcesr0r�r3r�r�rLrMrzr2r�)r��	resources�bundle_depsr�rrr�r_s       r<r�z&MakefileWriter.WriteMacBundleResources�s����L�L�9�:�:�:��*�@�@�#�M�2�D�4G��I�s�4�?�I�6�6�7�7�9�9�#�#�����w����'�'�f�a��	��	�	������3�%�)J�$(�	�	*�	*�	*����6�"�"�"��#�#r>c���tj�td�j�fd���\}}}}|sdS|r`dt
j�|��z}��||dzdt�����
|g|gdd	g��|}��|��|�
������
|g|gdd�
��|�|��dS)z0Write Makefile code for bundle Info.plist files.rc�H��t��|����Srkr�r�s �r<r�z2MakefileWriter.WriteMacInfoPlist.<locals>.<lambda>�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-plistTr\)r,r��GetMacInfoPlistr0r�rLrMr�rNr�rLr1r,r2r�)r�r_�
info_plistrD�defines�	extra_env�intermediate_plists`      r<r�z MakefileWriter.WriteMacInfoPlist�sG���*-�*=�*M�*M�#�M�2�D�4G�/�/�/�/�+1�+1�'�J��W�i��
��f��&�:�
�'�
�
�:�
&�
&�'��
�n�n�W�0�3H�H�$� ��"�"�"�
���,�-�
�|�%�)�*�+�+�+�
&�j�����T�
#�
#�	�
#�
B�
B�D�D�D��O�O�S�E�J�<�)E� $��&�&�&����s�����r>c�	��t|�����D�]=}||}	��|	�d��d|zdt����jdkr��j�|��}
�j�|��}�j�	|��}�j�
|��}
�j�|��}n?|	�d��}
|	�d��}|	�d��}��d	����|
d
|z����d����|d|z����d
����|d|z���jdkr\��d����|
d|z����d����|d|z��|	�d��}|r�fd�|D��}��|d|zd�����?tt|��}�fd�|D��}��|d��|D]}d|vs
Jd|z������d����d������|r��dg|dd �!��|r��dg|d"d �!��|�||��}|rM��d#��|D] \}}}��|�d$|�����!��d%��|�r|�d����d&����d'����d(|�d)��zd*z����d+|�d,��zd-z���jdkr\��d.|�d/��zd0z����d1|�d2��zd3z����|�����|d4�|D��z
}����d5S)6aWrite 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'
    rhzDEFS_%srb)�prefixrcr�cflags�cflags_c�	cflags_ccz## Flags passed to all source files.z	CFLAGS_%sz# Flags passed to only C files.zCFLAGS_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_dirsc�T��g|]$}t��|������%Sr�r�)rn�includer�s  �r<r�z/MakefileWriter.WriteSources.<locals>.<listcomp>�s-���P�P�P�G�I�d�o�o�g�6�6�7�7�P�P�Pr>zINCS_%sz-I)rlc	�z��g|]7}����t|��������8Sr�)�	Objectifyr�r{)rnr�r�s  �r<r�z/MakefileWriter.WriteSources.<locals>.<listcomp>�s7���K�K�K�1�D�N�N�4�?�?�6�!�9�9�5�5�6�6�K�K�Kr>�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))c�0�g|]}t|���|��Sr�)rw)rnr�s  r<r�z/MakefileWriter.WriteSources.<locals>.<listcomp>"s%��I�I�I�6���8H�8H�I��I�I�Ir>N)rXrYrNrHr�r9r��	GetCflags�
GetCflagsC�GetCflagsCC�
GetCflagsObjC�GetCflagsObjCCr��filterrsrL�GetObjDependenciesr��
GetInclude�WritePchTargets�GetPchBuildCommands)r�r�r�r�r�rr��precompiled_header�
configname�configrmrnro�cflags_objc�cflags_objcc�includes�
compilable�objs�obj�pchdepsr��gchs`                     r<r�zMakefileWriter.WriteSources�s�����W�\�\�^�^�,�,�D�D�
��z�"�f�
�n�n�V�Z�Z�	�*�*�I�
�,B�4� ��"�"�"�
���	�	��$�.�.�z�:�:���&�1�1�*�=�=���'�3�3�J�?�?�	��)�7�7�
�C�C���*�9�9�*�E�E������H�%�%���:�:�j�)�)���J�J�{�+�+�	�
�l�l�8�9�9�9�
�n�n�V�[�:�5�6�6�6�
�l�l�4�5�5�5�
�n�n�X�}�z�9�:�:�:�
�l�l�6�7�7�7�
�n�n�Y��� ;�<�<�<�	
���	�	����9�:�:�:����{�$4�z�$A�B�B�B����;�<�<�<����|�%6��%C�D�D�D����N�+�+�h�	�Q�P�P�P�P�x�P�P�P��
�n�n�X�y�:�5�d�n�C�C�C�C��
�G�,�,�J�K�K�K�K�
�K�K�K�D��N�N�4�� � � ��B�B��
��^�^�^�
9�S�
@��^�^�^��L�L�%�&�&�&��L�L�&�'�'�'��L�L�N�N�N��,�
���)��d�$7�&*��,�,�,��,�
���)��m�$7�&*��,�,�,�
!�3�3�J��F�F�G��<�
�l�l�O�P�P�P�%�,�,�
�&�#�s�������c�c�*�+�+�+�+�
�l�l�:�;�;�;�� 5����Y�'�'�'�
�l�l�C�D�D�D��l�l�3�4�4�4�
�l�l��.�8�8��=�=�>�.�	.�/�/�/��l�l��.�8�8��>�>�?�/�	/�0�0�0�
���	�	�����0�:�:�3�?�?�@�3�	3�	4�	4�	4�	
����0�:�:�4�@�@�A�4�	4�	5�	5�	5�	���+�?�?�A�A�B�B�B��I�I�W�I�I�I�I�O��L�L�N�N�N�N�Nr>c	��|sdS|D]�\}}}}ddddd�|}ddd	d
d�|}|�|�d|�d|�d
�dz|z��|�|�d|�d���|�d|z��|�d��d
|vs
Jd|z���|�d|z��|�d����dS)z,Writes make rules to compile prefix headers.Nz$(CFLAGS_C_$(BUILDTYPE))z$(CFLAGS_CC_$(BUILDTYPE))z4$(CFLAGS_C_$(BUILDTYPE)) $(CFLAGS_OBJC_$(BUILDTYPE))z6$(CFLAGS_CC_$(BUILDTYPE)) $(CFLAGS_OBJCC_$(BUILDTYPE)))ryrarzr{�GYP_PCH_CFLAGS�GYP_PCH_CXXFLAGS�GYP_PCH_OBJCFLAGS�GYP_PCH_OBJCXXFLAGSr�r*r�zA$(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) $(CFLAGS_$(BUILDTYPE)) �
 FORCE_DO_CMDz	@$(call do_cmd,pch_%s,1)rz*Spaces in gch filenames not supported (%s)rF)r�)r��pch_commandsr��	lang_flag�langr8�extra_flags�var_names        r<r�zMakefileWriter.WritePchTargets&sL���
��f�'3���#��Y��e�
'�)�
C�F�	��
	
��k�� �
 �#�	��
	
��h��l�l�c�c�c�8�8�8�Y�Y�Y�?�-�-��	� � � ��l�l�C�C�C����7�8�8�8�
�l�l�/�$�6�7�7�7�
�l�l�2����
��^�^�^�
6�#�
=��^�^�
�l�l�#�c�)�*�*�*�
�l�l�2�����3�r>c�H�|jrJ�|jdkr"|jdvr|j���S|d}d}d}|jdkr|dd�dkr
|dd�}d}d	}ni|jd
vr+|dd�dkr
|dd�}d}|jdkrd	}n8d}n5|jd
krd|z}n$|jdkrtdd|jd|f��|�d|��}|�d|��}|�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.ComputeOutputBasenameGs����!�!�!�!��{�e����	�.M�!M�!M�
�
 �
2�
2�
4�
4�4�
�-�
 �F��M��J��y�$�$�$�	�����u�	�	��������m��j�j�	
��;�	;�	;�	�����u�	�	��������m�	
���	�	��
�
��
�
�	
��f�	�	��F�"�f�f�	
��l�	"�	"��
;�
�T�Y��&�
2�3�3�3��H�H�-�}�=�=�M�
�X�X�n�f�
-�
-�F��(�(�.�/�/�K��%���$�j��6�!�J�.�.r>c�@�|jdko|jdko|jdvS)Nr�rr�)r�r9r��r�s r<�_InstallImmediatelyz"MakefileWriter._InstallImmediatelyrs9���<�8�#�O���u�(<�O���OO�BO�Or>c�B�|jrJ�tj�d|jz|j��}|jdks|���rd}|�d|��}tj�||�|����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�<�<�	�D�L�0�$�)�<�<�D��y�L� � �D�$<�$<�$>�$>� �
�d��8�8�M�4�(�(�D�
�7�<�<��d�8�8��>�>�?�?�?r>c��|jsJ�td}tj�||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�<�<��d�1�@�@�B�B�C�C�Cr>c��td}tj�||j�����S)zAReturn the 'output' (full output path) to the binary in a bundle.r)r0rLrMrOr�r�r�s   r<r�z+MakefileWriter.ComputeMacBundleBinaryOutput�s1��&�}�5�D�
�7�<�<��d�1�C�C�E�E�F�F�Fr>c�j�g}g}d|vrn|�d�|dD����|dD]+}|tvr |�t|���,|�|��tj�|��tj�|��fS)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).
    �dependenciesc�B�g|]}t|�t|��Sr�)r��rn�deps  r<r�z.MakefileWriter.ComputeDeps.<locals>.<listcomp>�s6��+�+�+�3�$�S�)�+�>�#�&�+�+�+r>)�extendr�r�r,r-�uniquer)r�r�r�r�r�s     r<r�zMakefileWriter.ComputeDeps�s����D��I�����
�k�k�+�+�$�~�2F�+�+�+�,�,�,��n�%�2�2�#��"�"�"�
�
�
�+�C�0�
1�
1�
1��
�k�k�)����
�J���t�$�$�c�j�&8�&8��&C�&C�D�Dr>c�D�|�|jg|dd���dS)Nz Build our special outputs first.Trv)rLr�)r�r�r�s   r<�WriteDependencyOnExtraOutputsz,MakefileWriter.WriteDependencyOnExtraOutputs�s9������*�+�]�!C�$(��*�*�*�*�*r>c
�8����d��|r4���j|����||dd���i}�jdk�r#t|�����D�]}	||	}
�jdk�r�j�	|	td�fd���}tj�
�j��}�j�|	t!t"j�t"j�|�j������t!t"j�t"j�|�j��������}
|
r|
||	<ni|
�d	g��}t-d
�|D����r:|�d�jz��|�d�jz��|
�d
g��}|d�|D��z
}��|d|	z���jdkr1���j�|	��d|	z����|�d��}|rDtj�|��}�jdkr�j�|��}��|d����dt!�j��z����dt!�j��z���jdkr*��dt!�j��z��g}�jdkrI|r|�d��|�tj�|����|�rc�� �j��!����|D]T}	��t!�j���d|	�dtj�"||	�������U|�#dtj�"d�jg����tI|��D],\}}|�%d��stM|��||<�-��dt!�j��z����t!�j���dd�|�������j'r����j|����tQt |��d����d t!�j��z���jd!vr/��d"�j�)��z��|r��d#��g}��d$����d%t!�j��z��|r'�j'rJd&�j*z���d'|vs
Jd(����jd)kr���t!�j���d*d�tQt |���������jd+kr-�jd,kr"��+�jg|d-||�.���nՉ�+�jg|d/||�.���n��jd0krj|D]}d|vs
Jd1|z�����jd2vr)�j,s"��+�jg|d3||�.���n`��+�jg|d4||�.���n>�jd5krs��t!�j���d*d�tQt |����������+�jg|d6||�.��n��jd7krn|D]}d|vs
Jd8|z�����jd+kr,�jd,kr!��+�jg|d9||�.��nh��+�jg|d:||�.��nG�jdkr!��+�jg|d;||�.��nt[d<�j�j*���jre�j�j*krU�j�j.vrG���j*g�jgd=d�>��|r ��d?g�j*gd@d�>���j�j.vs�j,�rD�jd5krdA}n�jd0krdB}nd)}��/��}�jg}�jdkr.d'|vr*�jdCkr|�jksJ|�dD�j��������j*g|gd=d�>��|�jkrB�j'rJ���+|g�jgdEdF|z|�G��|�|���j�j0kr2�j0�j*kr"���j0g|dH|zd�>��|r"��d?g|gdI|zd�>��dJSdJSdJS)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.Trvr�rrc�H��t��|����Srkr�r�s �r<r�z,MakefileWriter.WriteTarget.<locals>.<lambda>�s���	�$�/�/�!�"4�"4�5�5�r>�ldflagsc3�HK�|]}|�d��pd|vV��dS)r+z.so.Nrlr�s  r<rqz-MakefileWriter.WriteTarget.<locals>.<genexpr>�s7����F�F�#����e�$�$�5��#�
�F�F�F�F�F�Fr>z-Wl,-rpath=\$$ORIGIN/lib.%s/z$-Wl,-rpath-link=\$(builddir)/lib.%s/�library_dirsc��g|]}d|z��S)z-L%sr�)rn�library_dirs  r<r�z.MakefileWriter.WriteTarget.<locals>.<listcomp>�s��K�K�K�{�V�k�)�K�K�Kr>z
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_r*r�cdr�r$z: 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)rw�phony�allz!Add target alias to "all" target.zshared libraryzstatic libraryr�z != rXz Copy this to the %s output path.)rwr�z!Short alias for building this %s.zAdd %s to "all" target.N)1r�r�r�rLr�rXrYr9r��
GetLdflagsr0r,r-�InvertRelativePathrM�AddImplicitPostbuildsr�rLrNrOr�rH�anyr�r�rN�GetLibtoolflagsr��AdjustLibrariesr�r��GetSpecPostbuildCommandsr1�GetSortedXcodePostbuildEnvr0�insert�	enumerate�
startswithr�r�r3�GetFrameworkVersionr�r2r�r�r�r�r�)r�r�r�r�r�r_r�r��target_postbuildsr�r�r��gyp_to_build�target_postbuildr�r�r�r)�	postbuild�link_dep�	file_descr�installable_depss`                      r<r�zMakefileWriter.WriteTarget�s}���	�L�L�.�/�/�/��,�
�(�(��);�]�K�K�K�
�����#<�&*��,�,�,�
���y�F����w�|�|�~�~�.�.�9�9�*���$���;�%����'�2�2�:�)�-�8�5�5�5�5�7�7�'�
��6�6�t�y�A�A�,�!�0�F�F���"�'�*�*�2�7�<�<��8<��,E�,E�F�F�G�G��"�'�*�*�2�7�<�<��8<�8J�,L�,L�M�M�N�N�	O�O�
��=�,<��j�)���J�J�y�"�-�-�'�
�F�F��F�F�F�
F�
F�)�
�N�N�:�T�\�I�J�J�J��N�N�B��<�(�
)�
)�
)��z�z�.�"�5�5���K�K�l�K�K�K�K�����w��z� 9�:�:�:��;�%���
�.�.��,�<�<�Z�H�H�*�Z�7�9�9�9���(�(�;�'�'�i�	�E��J�&�&�y�1�1�	��;�%����)�9�9�)�D�D�)�
�n�n�Y��'�'�'�
�l�l�?�
�d�(�
)�
)�*�+�+�+�
�l�l�(�;�t�7I�+J�+J�J�K�K�K�	
���	�	����K���*�+�+�,�	-�	-�	-�
�J��{�e���	�?����=�>�>�>����

�
�
6�
6�t�
<�
<�>�>�>��;����t�{�D�,K�,K�,M�,M�N�N�N�)�N�N�*����
���
%�
%�
%�
%�
�Z�Z�
�Z�
,�
,�->�z�-J�
K�
K�
K�M�	N�	N�	N�	N�����3�:�:�:�D�$�)�;L�M�M�N�N�N�#�J�/�/�9�9�,�!�Y��#�#�C�(�(�	9�-�i�8�8�*�Q�-��
�l�l�4�{�4�;�7O�7O�O�P�P�P�
�l�l�
�d�k�
"�
"�
"�
"�C�H�H�Z�$8�$8�$8�:�;�;�;���@��(�(���m�D�D�D��n�n�S��k�2�2�M�B�B�B�
�l�l�'�+�d�k�*B�*B�B�C�C�C�
��;�	;�	;����C���3�3�5�5�6�	7�	7�	7�

�1����/�0�0�0��j��l�l�4�5�5�5��l�l�#�k�$�+�&>�&>�>�?�?�?�� ��#�I�I�':�<@�K�'H�I�I�I�
�$�
&�
&�
&�*�
&�
&�
&��y�L� � �
�l�l�
�d�(�
)�
)�
)�
)�

�(�(�3�{�I�.�.�
/�
/�
/�1�2�2�2�
���	�	�D�K�9�$<�$<�����+�,�i��#�
�	�	<�	<�	<�	<�	
����+�,�i���#-�	�	/�	/�	/�	/�
��&�	&�	&��N�N�(��(�"�"�"�@�H�L�#�"�"�"�
�+�@�
@�
@�
�
+�A�����+�,�i��#�
�	�	<�	<�	<�	<�	
����+�,�i��+�#-�	�	/�	/�	/�	/�	
��&�	&�	&�
�l�l���*�+�+�+�+��H�H�S��i�0�0�1�1�1�3�4�4�4��o�o�t�)�*�I�x��!+��-�-�-�-�	
��'�	'�	'��O�O�(��(�"�"�"�A�X�M�#�"�"�"�	
���	�	�D�K�9�$<�$<�����+�,�i�9M�#�
�	�	<�	<�	<�	<�	
���
�
� �)�_�k�!�	�	#�	#�	#�	#�
��f�	�	�
�o�o�t�)�*�D�'�;�!+��-�-�-�-��$�d�i���=�=�=�
��)�����3�3�	
��$�3�	3�	3�
���$�+����
�!3�T��C�C�C�	�)����E�7�T�[�M�%H�#'�	�	)�	)�	)�	
�	�T�.�.�.��)�	/�	
��&�	&�	&�$�	�	��9�(�(�(�$�	�	� �	��7�7�9�9�l��+���
�+��
�
�}��'<�'<�
�,�(�
"�
"��t�{�*�*�*��L�L�$�+�+�-'�*�*�*����$�+����!3�T��C�C�C�	���	$�	$��%�%�%�%��������
�v�"D�!�#"�/:�	�	<�	<�	<�	����-�-�-�	
���
�	"�	"�t�z�T�[�'@�'@����D�J�<�)9�%H�$�&%�.2�	�	4�	4�	4�
�)����E�7�\�N�%>��%J�#'�	�	)�	)�	)�	)�	)�=	/�.�:)�)r>Nrc����d}|r'��fd�|D��}dd�|��z}|j�|�d|�d���dS)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.
    rc�,��g|]}��|z����Sr�r�)rn�lrlrcs  ��r<r�z,MakefileWriter.WriteList.<locals>.<listcomp>�s'���;�;�;�1�F�F�6�A�:�&�&�;�;�;r>z \
	z :=z

N)rOr�r\)r��
value_listrZrlrc�valuess   `` r<rNzMakefileWriter.WriteList�sl�����F��6�;�;�;�;�;�
�;�;�;�j��9�>�>�*�5�5�5�f��G�M�M�8�8�8�V�V�V�4�5�5�5�5�5r>Fc���d}|rd|vsJ�d}|�||d|�|�d�g||d���d�|D��}|�d	d
�|��z��dS)z�Write a Makefile rule that uses do_cmd.

    This makes the outputs dependent on the command line that was run,
    as well as support the V= make command line flag.
    r�,z,,1z$(call do_cmd,�)T)r�rwr�forcec�8�g|]}t|t����Sr�)r��SPACE_REPLACEMENT�rnr"s  r<r�z-MakefileWriter.WriteDoCmd.<locals>.<listcomp>�s#��B�B�B�Q�{�1�/�0�0�B�B�Br>rFr�N)rLr�rO)r�rrrr�rwr��suffixs        r<r2zMakefileWriter.WriteDoCmd�s����F���
��
�
�
�
��f����w���;B�7�F�F�F�"K�!L�!(�!(�#�	�%�%�%�C�B�'�B�B�B�G��L�L�!�C�H�H�W�$5�$5�5�6�6�6�6�6r>c	��d�|D��}tt|��}|r|�d|z��|r+|�dd�|��z��|r|�d|dz��|rdnd}	|rD|�d�|���d	d�|���|	�����n6t	|��d
kr6|�|d�dd�|���|	����n�|r|n|j�d��}
tj|
���	��}d
|z}|�d�|���d|����|�ddz��|�d�d|����|�|�dd�|���|	����|�
dd��|r|D]}
|�d|
z���|���dS)a�Write a Makefile rule, with some extra tricks.

    outputs: a list of outputs for the rule (note: this is not directly
             supported by make; see comments below)
    inputs: a list of inputs for the rule
    actions: a list of shell commands to run for the rule
    comment: a comment to put in the Makefile above the rule (also useful
             for making this Python script's code self-documenting)
    order_only: if true, makes the dependency order-only
    force: if true, include FORCE_DO_CMD as an order-only dep
    phony: if true, the rule does not actually generate the named output, the
           output is just a name to run the rule
    command: (optional) command name to generate unambiguous labels
    c�,�g|]}t|����Sr�)r�r�s  r<r�z0MakefileWriter.WriteMakeRule.<locals>.<listcomp>�s��/�/�/�!�{�1�~�~�/�/�/r>z# z.PHONY: r�z%s: TOOLSET := $(TOOLSET)rr�rz: | r�r�zutf-8z%s.intermediatez	%sz@:z
.INTERMEDIATEz$(call do_cmd,touch)N)r3r�r�rOr�r��encode�hashlib�sha1�	hexdigestr�)r�rrr�rwrxr�r�r�force_append�	cmdstring�	cmddigest�intermediaters              r<rLzMakefileWriter.WriteMakeRule�st�� 0�/�w�/�/�/�G�
��f�
%�
%�F��#�
�l�l�4�'�>�"�"�"��3�
�l�l�:����� 1� 1�1�2�2�2��=�
�l�l�.����;�<�<�<�&+�3�?�?��L��0��l�l��H�H�W�%�%�%�%�s�x�x��'7�'7�'7���G�H�H�H�H�	�W����	�	�
�l�l������S�X�X�f�-=�-=�-=�|�|�L�M�M�M�M�&�6�7�7�4�;�>�>�w�G�G�i��,�y�)�)�3�3�5�5�i�&�)�4�l�
�l�l�s�x�x��0�0�0�0�,�,�?�@�@�@�
�l�l�6�D�=�!�!�!�
�l�l������=�>�>�>�
�l�l� �L�L�#�(�(�6�"2�"2�"2�L�L�B�C�C�C�
�n�n�Q�.�/�/�/��&��&�&�&����V�f�_�%�%�%�%��L�L�N�N�N�N�Nr>c	��|jdvrdS|�d��|�d��|�d|z��|�d��|�d��|�d��|�d	��d
d
d
d�}d}|D]O}tj�|��d
}||vr$||xxd
z
cc<||||kr|}�P|�d|z��|�t
|jtt|����d��d�}ddi}	i}
t|
|	��|�||td|
d��d��|�||tdtd��d��|jdkr|�d��nA|jdkr|�d��n |jdkr|�d��|���dS)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]�}tj�|��}|�|��rM|�|��r8|�|t
|��t
|�������|Srk)rLrMr�r�rmr�r�)r�rlr��modules�filepathrps      r<�
DepsToModulesz?MakefileWriter.WriteAndroidNdkModuleRule.<locals>.DepsToModules2s����g��=�=�(��7�#�#�H�-�-�����v�&�&�	=�8�+<�+<�V�+D�+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�rLrMrzrNr3r�r�rsr=r0)r��module_namer�r��cpp_ext�default_cpp_extrpr_rr8r7s           r<r�z(MakefileWriter.WriteAndroidNdkModuleRules����y�J�J�J��f��L�L�B�C�C�C��L�L�(�)�)�)��L�L�#�k�1�2�2�2��L�L�	(�	)�	)�	)�	�L�L�>�?�?�?��L�L�&�'�'�'��L�L�B�C�C�C���A�.�.�G��O�� � ���G���X�&�&�q�)�c�	���������������3�<�'�/�2�2�2��/���L�L�*�_�<�=�=�=��N�N�3�t���z�;�(G�(G�H�H�$�&�&�&�
�����
 �F����(�&�1�1�1��N�N��
�i�1�2E�F�'�(;�<�	>�	>�	!�	"�"�"�
	�N�N��
�i�1�2E�F�1�2E�F�	H�	H�	!�	"�"�"��y�L� � �
�l�l�0�1�1�1�1�	
��&�	&�	&�
�l�l�4�5�5�5�5�	
��&�	&�	&�
�l�l�4�5�5�5��L�L�N�N�N�N�Nr>c�@�|j�|dz��dS)NrW)r�r\)r��texts  r<r�zMakefileWriter.WriteLnSs ���G�M�M�$��+�����r>c��tj�|jdtj�d|j��d|��S)Nz$(abs_builddir)z
$(abs_srcdir)r)r,r�r,r�rLrMrO)r�res  r<r,z MakefileWriter.GetSortedXcodeEnvWs@����0�0���.�
����_�d�i�0�0�.����r>c�h�|j�dd��}|�d|i���S)N�CHROMIUM_STRIP_SAVE_FILErrd)r��GetPerTargetSettingr,)r��strip_save_files  r<r�z)MakefileWriter.GetSortedXcodePostbuildEnv^sK���)�=�=�"�B�(�(�O��!�!�7��I�"�K�K�Kr>c�j�|D]/\}}|�t|���d|�d|�����0dS)Nz	: export r*)r�r�)r�r�r�k�vs     r<r1z"MakefileWriter.WriteSortedXcodeEnvisU���H�H���1��l�l�K��,?�,?�,?�,?����A�A�F�G�G�G�G�H�Hr>c�l�d|vr|�dd|jz��}d|vr
d|j�d|��}|S)z,Convert a path to its output directory form.r��$(obj)/z$(obj).%s/$(TARGET)/z$(obj)r�z/$(TARGET)/)rr��r�rMs  r<rtzMakefileWriter.ObjectifytsK���t�|�|�
�\�\�)�%;�d�l�%J�
K�
K�d��t����)-����t�t�
<�d��Kr>c��|�|��}d|vr#|�dd|j�d|����}|Sd|j�d|�d|��S)z:Convert a prefix header path to its output directory form.r�rr�z/$(TARGET)/pch-�/)r�rr�)r�rMr�s   r<r�zMakefileWriter.Pchify}sj���?�?�4� � �D��t�|�|�
�\�\�)�)��<�<�<���&/�0�0�d�
�k��/3�l�l�l�D�D�D�$�$�G�Gr>c��d|vr|�d��Stj�tj�|j|����S)zlConvert a subdirectory-relative path into a base-relative path.
    Skips over paths that contain variables.r�r)�rstriprLrMrNrOrs  r<r�zMakefileWriter.Absolutify�sI���t�|�|��[�[��
�
��
�7���B�G�L�L���D�9�9�:�:�:r>c�*�d|vrd|vr|S|||d�z}|S)Nr
r)�
INPUT_ROOT�
INPUT_DIRNAMEr�)r��template�	expansionrrMs     r<r?zMakefileWriter.ExpandInputRoot�s>���x�'�'�,?�x�,O�,O�
�o��� �
�
�
�D��Kr>c�|�|jdkr(|jdks|jdkrd|j�d|j��Sd|jzS)zCReturns the location of the final output for an installable target.r�rr�z$(builddir)/lib.rz$(builddir)/)r�r9r�r�r�s r<r�z,MakefileWriter._InstallableTargetInstallPath�sP��	
�	�%�%�%�	
���	�	����!9�!9��)-����d�j�j�
A�A��D�J�&�&r>)NF)NNFFFN)rrk)$�__name__�
__module__�__qualname__�__doc__r�rrr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rNr2rLr�r�r,r�r1rtr�r�r?r�r�r>r<r�r��sZ��������
+�+�+�6B�B�B�J���6a�a�a�H}�}�}�@#�#�#�L#�#�#����6z�z�z�x���B(/�(/�(/�VO�O�O�
@�@�@�D�D�D�G�G�G�E�E�E�,*�*�*�i)�i)�i)�X,0��'�6�6�6�6�GK�!�7�7�7�7�0BF�HL�;�;�;�;�|P�P�P�f��������K�K�K�H�H�H����H�H�H�;�;�;����	'�	'�	'�	'�	'r>r�c���|d��fd�|dD��}tj�|d�j��}|�t
j��s t
j�d|��}|�	d|d�tt|����tj�|dgtj
���z|z��d	�z��d
S)z,Write the target to regenerate the Makefile.rBc�Z��g|]'}tj�|�j����(Sr�)r,r-�RelativePathrK)rnrprBs  �r<r�z-WriteAutoRegenerationRule.<locals>.<listcomp>�sD���A�A�A�"��j�-�-�h��8L�M�M�A�A�Ar>�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-�FixIfRelativePathrKr�rL�seprMrOr\r3r�r0�RegenerateFlags)r8�
root_makefiler+�build_files�build_files_argsr*rBs      @r<�WriteAutoRegenerationRuler3�s&���
�9��'�A�A�A�A�&,�->�&?�A�A�A���z�+�+�F�<�,@�,3�,@�B�B�*�	�	�	�r�v�	&�	&�/�����c�:�.�.�J����,�)��(�(�3�y�+�6�6�7�7���0�0� �(�+��(��1�1�2�%�&�'�'�/(�/(�	(�
)�
)�
)�
)�
)r>c���|d}|D]d}dg}|jr|jdkr|d|jfz
}|�d|z��td|�d|����tj|���edS)NrB�makerz-Cz
BUILDTYPE=z
Building [z]: )rKr�r��
subprocess�
check_call)�data�configurationsr8rBr��	argumentss      r<�PerformBuildr;�s����9��'��%�%�f���I���.�� 4�� ;� ;��4��-�-�-�i�
���\�F�*�+�+�+�	�E������
3�4�4�4���)�$�$�$�$�
%�%r>c
�P��1�2�3�|d�3tj�|��}|�di��}|�dd��}|�dd��}|�dd��}�3fd�}	d}
t	�fd	�|D����}|D] }�|}
|
d
dkr
|
d
}
n�!|
sd}
d}d
�3jz}tj��3j	|��}�3j
rRtj��3j	�3j
|��}tj�|�3j
��}dad}d}d}|||
|dtd|||d�
}|dkr'd}|�|dtt d���n�|dkr|�dt"i��n�|dkr#d}d}|�||t$d���nf|dkr|�d dd!���nG|d"krd#}|�d$|i��n'|d%kr!d#}|�|t&d dd&���|�t)d'd(��t)d)d*��t)d+d,��t)d-d.��t)d/d0��t)d1d2��t)d3d4��t)d5d6��d7���tj�|d8��\�1}}|�1�d9g��}i}|D]8\}}|�d:��rd;|z||dt/d:���<�9d}|D]�\}}t1jd<|��r�|d8d=krd;|z}|�|��}|r
|�d>|��}||=|d?vrP|d@|zz
}|�ddA��}|tjvrtj|}|dB|�dC|�dD�z
}|dEz
}��||�dF|�dD�z
}��||d9<tj�|��t;|dG��}|�t>|z��|r|�dH��|D])}|�dI|z��tA|���*tj�!|��}tj�"||��t	���2|dJD];�1tj�#|��1��D]}�2�$|����<t	��} t	��}!|D�].}"tj�|"��\�1}}|�1�d9g��}#||#ksJdK|#�dL|�����| �$tj��1�3j	����|�1dM}$|$D]�}%tj�tj�%|%�1���3j	��}&tj�&|&��}'|dNr1|'�'|dN��r| �$|'����| �$|&����|	�1|dz|z�3jzdOz��\}(})�|"}
|
dP}*|dkr&tj(�)|�1|
��tU||��}+|+�+|"|(|)|
|*|"�2v�Q��tj�|)tj�!|����},|!�$|,����0tj��3j,t
j-����}-| D]��1tj�|-�1���1�1�2�fdR�|D��}.|.s�5|	�1tj�.tj�/�1����d8dSz��\}(})tj�tj�!|��tj�!|)����}/|+�0|)|/|.|����|�dD��tc|!��D]M}0|�dT|0zdUz��|�dV|0zdDz��|�dE���N|�dD��|�dW��s(|�dXdY��rte|||| ��|�tf��|�4��dS)ZNrBr@rCrDrA�default_targetr�c����tj�tj�|���j��}tj��j||��}�jr,tj��j�j||��}tj�tj�|���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.<locals>.CalculateMakefilePath�s�����
�'�'�����
�(C�(C�(/�
�7�7�I��'�,�,�w�}�i��C�C�K���I��G�L�L�
�-��1�9�i�I�I�k��
�'�'�����
�(C�(C�(/�(<�>�>�I��k�!�!r>c�,��g|]}�|d��S)r�r�)rnr��target_dictss  �r<r�z"GenerateOutput.<locals>.<listcomp>�s#���L�L�L�f�,�v�&�y�1�L�L�Lr>�default_configuration�Defaultr�Makefilez
$(srcdir)/�flockz-afz-MMDr�r)
r=�builddirrFrI�flock_index�
link_commands�extra_commands�srcdir�copy_archive_args�makedep_argsrz./gyp-mac-tool flock�)rIrKrLrMr(rL�zosz-fPRz
-qmakedep=gcc)rOrPrL�solarisz./gyp-flock-tool flock)rIrKr�z-pPRfrOr*)rOrLrIrK)�	CC_target�CCz$(CC))�	AR_target�ARz$(AR))�
CXX_target�CXXz$(CXX))�LINK_target�LINKz$(LINK))�CC_hostrU�gcc)�AR_hostrW�ar)�CXX_hostrYzg++)�	LINK_hostr[z$(CXX.host))z	CC.targetz	AR.targetz
CXX.targetzLINK.target�CC.hostzAR.host�CXX.hostz	LINK.hostr�make_global_settings�_wrapperz
$(abspath %s)z
.*_wrapperr�r�)rUrbrYrcz3ifneq (,$(filter $(origin %s), undefined default))
r�r�rYrWzendif
z ?= r�zU# Define LOCAL_PATH for build of Android applications.
LOCAL_PATH := $(call my-dir)

zTOOLSET := %s
r1z;make_global_settings needs to be the same for all targets. z vs. �included_files�home_dot_gypz.mkr9r\c�^��g|])}|����r|�v��|d��*S)r�)r�)rnr�r@�needed_targetsrEs  ���r<r�z"GenerateOutput.<locals>.<listcomp>�sM���-�-�-�6��'�'�
�3�3�-��^�+�+� ��'�
�6�+�+�+r>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�rr?�getcwdrzr�rrXr3�
SHARED_FOOTERr�)4�target_listrEr8r8r9r@rQrAr=rCrF�toolsetsr�r�rNr+r�
flock_command�copy_archive_arguments�makedep_arguments�
header_paramsr��make_global_settings_array�wrappersrU�valuerd�wrapper�env_keyr0r��	dest_pathr1�include_listr��this_make_global_settingsrf�
included_file�relative_include_file�abs_include_filer�rBr�r]�mkfile_rel_path�depth_rel_path�gyp_targets�makefile_rel_path�include_filer@rirBs4 `                                               @@@r<�GenerateOutputr��sY�������9��'��:����'�'�&��J�J�0�"�5�5�/�!�%�%�l�E�:�:�-�'�+�+�,A�4�H�H��"�&�&�'7��?�?�.�"�"�"�"�"�(��
�L�L�L�L��L�L�L�
M�
M�(����f����D��#�$�	�1�1�"�#:�;���e�2�
�&�%���&��w�~�-�-��'�,�,�w�3�]�C�C�-���!��G�L�L���g�6�
�G�G�M�
�Z�
$�
$�V�W�-E�
F�
F�F� �M��-� ����&��4���*���1�'���-��u�_�_�*�M������*�4�	��������������.����������#��'�����3�)�,�������
�������)������������$������3����������$�����3�*�)��	��������%�&9�7�C�C�%�&9�7�C�C�%�&;�X�F�F�%�&=�y�I�I�%�&7��?�?�%�&7��>�>�%�&9�5�A�A�%�&;�]�K�K�	�	�	�	�	��Z�4�4�[��^�D�D��*�a��#�J�/�3�3�4J�B�O�O��
�(�.�A�A�j�c�5�
�|�|�J���A�)8�5�)@�h�s�$�S��_�_�$�$�%�&����.�:�:�j�c�5�	�x��c�"�"����Q�x�3�����%�e��l�l�3���G��� ���%�%�(�e�
�3�-�
�2�2�2��
@�3�
F�H�����C��%�%�g�	�B�J�	�	��
�7�#����s�s�s�E�E�E�:�:���i�'����c�c�c�5�5�5�9�9���+?�-�&�'��*���]�+�+�+��}�c�*�*�-����m�m�3�4�4�4������	
�����.�.�g����)�G�3�4�4�4��}�-�-�-�-��g�o�o�m�,�,�)��*���f�i�(�(�(��5�5�.��=�)�!�!�j��*�'�'��\�:�N�N�!�!������ � � � �!����+����,�%�,&�,&��"%�*�"A�"A��#�#��J���!%�Z� 0� 4� 4�5K�R� P� P��%�)B�B�B�B�B�	"�	"�	"�$8�$8�	:�C�B�B��O�O�C�J�+�+�J��8L�M�M�N�N�N��*�%�&6�7�N�'�/�/�
�"�j�5�5�

�*�
#�
#�M�:�
>�
>�
�
� � ������)>�?�?����
 �/�
�
%�
%�f�^�&<�
=�
=�/����(�)�)�)�)����-�.�.�.�.�2�2�:����w����/�%�7�9�9��I�{��(�)�D��#�$�G�
����	��8�8��j�9I�4�P�P�P�
�O�V�
4�
4�F�
�L�L�!�9�k�4��-��?��A�A�A�
�j�-�-�k�.0�g�o�o�m�.L�.L�N�N�O����_�%�%�%�%��:�*�*�7�=�"�)�+�+�F�F�.��'�'�j�����n�j�9�9�J�-�-�-�-�-�-�[�-�-�-�K����2�2�:�
������)�)�*�5�5�6�6�q�9�K�G�I�I��I�{��
�/�/�����
�0N�0N�02�����0L�0L�N�N��
����%6��%�'�'�'�'�
���d�����\�*�*�
#�
#�l�
���	%�'3�	4�6@�	A�B�B�B�����|�3�d�:�;�;�;����	�"�"�"�"����d����
�
�
�l�
+�
+�Q�
�
�
�1�4�
8�
8�Q��f�m�]�K�P�P�P����m�$�$�$��������r>)r�)6�
__future__rrLr��sysr6r,�
gyp.common�gyp.xcode_emulationrrr�r0�$generator_supports_multiple_toolsetsrIr!r"r#rPr=rRr�rlrmrorqrprurnr`r�r�r|r�r5rsrwr{r�r�r�r�r�r�r�r�r�r�r��objectr�r3r;r�r�r>r<�<module>r�s_��0&�%�%�%�%�%�	�	�	�	�	�	�	�	�
�
�
�
�����
�
�
�
���������)�)�)�)�)�)����������������8�)��%�+�$�"�#�&����$(,�$�',�#�/1�+�%'�"�$&�!���"A�"A�"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�M�M�@��
��p'�p'�p'�p'�p'�V�p'�p'�p'�f')�)�)�2%�%�%�H�H�H�H�Hr>