PHP WebShell

Текущая директория: /opt/BitGoJS/node_modules/node-gyp/gyp/pylib/gyp/generator/__pycache__

Просмотр файла: make.cpython-310.pyc

o

�1h��@s�ddlZddlZddlZddlZddlZddlZddlmZddlZddddddddd	d
ddd
dd�Zej	�
�Zdaga
gagadadd�Zdd�ZdZdZdZdZdZdZdZdedededed ed!Zd"Zd#d$�Zd%Zd&Zd'Zd(Z d)Z!d*d+d+d+d*d*d,�Z"d-d.�Z#d/d0�Z$d1d2�Z%d3d4�Z&d5d6�Z'd7d8�Z(d9d:�Z)d;d<�Z*da+d=d>�Z,dLd@dA�Z-dBdC�Z.iZ/iZ0GdDdE�dE�Z1dFdG�Z2dHdI�Z3dJdK�Z4dS)M�N)�GetEnvironFallback��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_NAMEFcCstj�|�}|dkrK|�dd�|�dd�|�dtd�|�dtd�dd	lmm}t|d
g�a	t|dg�a
t|dg�at�
d
dd��d	S|}|dkrSd}|�d|�|dkrd|�dd�n|dkrv|�dd�t�
ddi�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)z.mz.mm�android�linux�aixr�zos�.xz.pli�pli�.soz$(builddir)/lib.$(TOOLSET)z$(obj).$(TOOLSET))�gyp�common�	GetFlavor�
setdefault�generator_default_variables�gyp.generator.xcode�	generator�xcode�getattrrrr�COMPILABLE_EXTENSIONS�update)�default_variables�params�flavor�xcode_generator�operating_system�r9�B/opt/BitGoJS/node_modules/node-gyp/gyp/pylib/gyp/generator/make.py�CalculateVariablesAsB�����r;cCsl|�di�}|�dd�}|rda|djp|dj}|�dd�}tj�tj�||d��}|dj|d	�adS)
zQCalculate 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)r5r<r=r?�
builddir_namerCr9r9r:�CalculateGeneratorInputInfoos�
�rN�?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

# Note: this does not handle spaces in paths
define xargs
  $(1) $(word 1,$(2))
$(if $(word 2,$(2)),$(call xargs,$(1),$(wordlist 2,$(words $(2)),$(2))))
endef

define write-to-file
  @: >$(1)
$(call xargs,@printf "%s\n" >>$(1),$(2))
endef

OBJ_FILE_LIST := ar-file-list

define create_archive
        rm -f $(1) $(1).$(OBJ_FILE_LIST); mkdir -p `dirname $(1)`
        $(call write-to-file,$(1).$(OBJ_FILE_LIST),$(filter %.o,$(2)))
        $(AR.$(TOOLSET)) crs $(1) @$(1).$(OBJ_FILE_LIST)
endef

define create_thin_archive
        rm -f $(1) $(OBJ_FILE_LIST); mkdir -p `dirname $(1)`
        $(call write-to-file,$(1).$(OBJ_FILE_LIST),$(filter %.o,$(2)))
        $(AR.$(TOOLSET)) crsT $(1) @$(1).$(OBJ_FILE_LIST)
endef

# 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,$^)

# Note: this does not handle spaces in paths
define xargs
  $(1) $(word 1,$(2))
$(if $(word 2,$(2)),$(call xargs,$(1),$(wordlist 2,$(words $(2)),$(2))))
endef

define write-to-file
  @: >$(1)
$(call xargs,@printf "%s\n" >>$(1),$(2))
endef

OBJ_FILE_LIST := ar-file-list

define create_archive
        rm -f $(1) $(1).$(OBJ_FILE_LIST); mkdir -p `dirname $(1)`
        $(call write-to-file,$(1).$(OBJ_FILE_LIST),$(filter %.o,$(2)))
        $(AR.$(TOOLSET)) crs $(1) @$(1).$(OBJ_FILE_LIST)
endef

define create_thin_archive
        rm -f $(1) $(OBJ_FILE_LIST); mkdir -p `dirname $(1)`
        $(call write-to-file,$(1).$(OBJ_FILE_LIST),$(filter %.o,$(2)))
        $(AR.$(TOOLSET)) crsT $(1) @$(1).$(OBJ_FILE_LIST)
endef

# 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 $@ -Wl,--start-group $(LD_INPUTS) -Wl,--end-group $(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)) -X64 crs $@ $(filter %.o,$^)

quiet_cmd_alink_thin = AR($(TOOLSET)) $@
cmd_alink_thin = rm -f $@ && $(AR.$(TOOLSET)) -X64 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)

quiet_cmd_solink_module = SOLINK_MODULE($(TOOLSET)) $@
cmd_solink_module = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ $(filter-out FORCE_DO_CMD, $^) $(LIBS)
ad	# 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)
PLI.target ?= %(PLI.target)s

# 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
PLI.host ?= %(PLI.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 aC,$(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 "$<" "$@")

quiet_cmd_symlink = SYMLINK $@
cmd_symlink = ln -sf "$<" "$@"

%(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 "$@"
cCs�tt��tjd�}|�d�|D]}|�d|�|�dt|�q|�d�|D]}|�d|�|�dt|�q*|�d�|D]}|�d|�|�dt|�qD|�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
)�sortedr2�keys�str�lower�write)�writer�
extensions�extr9r9r:�WriteRootHeaderSuffixRuleses 

�
r[a4
PLIFLAGS.target ?= -qlp=64 -qlimits=extname=31  $(PLIFLAGS)
PLIFLAGS.host ?= -qlp=64 -qlimits=extname=31 $(PLIFLAGS)

quiet_cmd_pli = PLI($(TOOLSET)) $@
cmd_pli = $(PLI.$(TOOLSET)) $(GYP_PLIFLAGS) $(PLIFLAGS.$(TOOLSET)) -c $< &&           if [ -f $(notdir $@) ]; then /bin/cp $(notdir $@) $@; else true; fi
rQz+# 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)z.c�.cc�.cpp�.cxxz.sz.Scs&�fdd�tD�D]}|rdSq	dS)z:Return true if the file is compilable (should be in OBJS).c3s�|]}��|�VqdS�N��endswith)�.0�e��filenamer9r:�	<genexpr>�s�zCompilable.<locals>.<genexpr>TF)r2)rg�resr9rfr:�
Compilable�s
�rjcCs
|�d�S)zAReturn true if the file is linkable (should be on the link line).�.orbrfr9r9r:�Linkable�s
rlcCstj�|�ddS)z1Translate a compilable filename to its .o target.rrk�rHrI�splitextrfr9r9r:�Target�srocCsd|�dd�dS)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��sr9r9r:�EscapeShellArgument�srucCs|�dd�S)zqMake has its own variable expansion syntax using $. We must escape it for
    string to be interpreted literally.�$z$$rqrsr9r9r:�EscapeMakeVariableExpansion�srwcCst|�}t|�}|�dd�S)zBEscapes a CPP define so that it will reach the compiler unaltered.�#z\#)rurwrrrsr9r9r:�EscapeCppDefine�srycCs d|vrd|�dd�d}|S)zRTODO: Should this ideally be replaced with one or more of the above
    functions?�"z\"rq��stringr9r9r:�QuoteIfNecessary�sr}cCst�dd|�S)zGConvert a string to a value that is acceptable as a make variable name.z
[^a-zA-Z0-9_]�_��re�subr{r9r9r:�StringToMakefileVariable��r�cCs$d|vr|Stj�|�r|St|S)z,Convert a path to its source directory form.�$()rHrI�isabs�
srcdir_prefix�rIr9r9r:�	Sourceify�s
r��\ cCs|�d|�S)N� rq)rt�quoter9r9r:�QuoteSpaces�sr�cCstt|��S)z=Convert a path to its source directory form and quote spaces.)r�r�r�r9r9r:�SourceifyAndQuoteSpaces�sr�c@s6eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+efd,d-�Z	.dGd/d0�Z	*	*	.	.	.	*dHd1d2�Zd3d4�ZdId5d6�ZdJd7d8�Zd9d:�Zd;d<�Z d=d>�Z!d?d@�Z"dAdB�Z#dCdD�Z$dEdF�Z%d*S)K�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.
    cCs�||_||_i|_i|_i|_t��D],}|j�|d|t|fi�|j�|d|t|fi�|j�|d|t|fi�qdS)NzT$(obj).$(TOOLSET)/$(TARGET)/%%.o: $(srcdir)/%%%s FORCE_DO_CMD
	@$(call do_cmd,%s,1)
z\$(obj).$(TOOLSET)/$(TARGET)/%%.o: $(obj).$(TOOLSET)/%%%s FORCE_DO_CMD
	@$(call do_cmd,%s,1)
zQ$(obj).$(TOOLSET)/$(TARGET)/%%.o: $(obj)/%%%s FORCE_DO_CMD
	@$(call do_cmd,%s,1)
)r<r6�suffix_rules_srcdir�suffix_rules_objdir1�suffix_rules_objdir2r2rTr3)�selfr<r6rZr9r9r:�__init__s8
���

���
����zMakefileWriter.__init__cs>tj�|�t|d��_�j�t�|�_|�_|d�_	|d�_
|d�_tj�
�j|��_�jdkr=tj�|��_nd�_��|�\}}g}	g}
g}g}g}
�jra��|��_��|��_n	��|��_�_t|�dd���_d	�_�js�j
�jvr�tj��j��_���}n�j�_�j}�� d
�j��� d�j	�d|vr���!|d|
|	||�d
|vr���"|d
|
|	||�d|vrΈ�#|d|	|��jr�|�dg�|}��$||
���%|
�|�dg�|
}|�rl��&||||	||tj�'�j�fdd��j(��dd�|D�}|�rl�� t)�dd�|D�}|D]}|�j*v�r.�� �j*|��q�� t+�|D]}|�j,v�rG�� �j,|��q7|D]}|�j-v�r[�� �j-|��qK�� d��j�rl|
�.�j���/||||||
|	|�|t0|<�j
dv�r��jt1|<�j2�dd��r���3�j	||��j�4�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'
        �w�target_name�type�toolsetrN�standalone_static_libraryr)�
executable�loadable_module�shared_libraryzTOOLSET := z
TARGET := �actions�rules�copies�mac_bundle_resources�sourcesc�t��|��Sra�r��
Absolutify��p�r�r9r:�<lambda>��z&MakefileWriter.Write.<locals>.<lambda>cS�g|]}t|�r|�qSr9)rj)rd�xr9r9r:�
<listcomp>��z(MakefileWriter.Write.<locals>.<listcomp>cSsh|]
}tj�|�d�qS)�rm)rdrtr9r9r:�	<setcomp>�sz'MakefileWriter.Write.<locals>.<setcomp>z!# End of this set of suffix rules)�static_libraryr�r=)5r)r*�EnsureDirExists�open�fprW�header�qualified_targetrI�targetr�r��xcode_emulation�IsMacBundler6�
is_mac_bundle�
XcodeSettings�xcode_settings�ComputeDeps�ComputeMacBundleOutput�output�ComputeMacBundleBinaryOutput�
output_binary�
ComputeOutput�boolrD�is_standalone_static_library�_INSTALLABLE_TARGETSrH�basename�alias�_InstallableTargetInstallPath�WriteLn�WriteActions�
WriteRules�WriteCopies�WriteMacBundleResources�WriteMacInfoPlist�WriteSources�MacPrefixHeader�Pchify�#SHARED_HEADER_SUFFIX_RULES_COMMENT1r��#SHARED_HEADER_SUFFIX_RULES_COMMENT2r�r��append�WriteTarget�target_outputs�target_link_depsr<�WriteAndroidNdkModuleRule�close)r�r��	base_path�output_filename�spec�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_resources�all_sourcesr�rYrZr9r�r:�Write3s�





�
�	��

��

�
��
�
zMakefileWriter.WritecCs�tj�|�t|d�|_|j�t�|�dtj	�
tj	�|�|��|�d�|�d�|r2d|}|�d�|d�
|���|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�rWr�r�rHrIrK�dirname�formatr�)r�r��
makefile_path�targets�	build_dirr9r9r:�WriteSubMake�s��

zMakefileWriter.WriteSubMakec	s�����|D�]S}td��j|d��}��d|d�|d}|d}	t�}
|	D]}tj�|�d}|r;|
�	|�q*t
|�dd��rH||	7}t
|�d	d��rT||	7}|d
}
�jdkrf�fdd
�|
D�}
t
j�|
�}d|vr|��d�||d��n��d|�d|�d��t|
�dkr�dd�|
�d|}dt�jp�d�}|�d�j�}|�d�j�}�jdks��jdkrň�d|||f�n
��d|||f�����fdd
�|	D�}	��dt|	d����dt|	d����|	d����|D]
}d|v�sJd |��q�|	D]}d|v�sJd!|���q�fd"d
�|	D�}	�fd#d
�|D�}�j|	�fd$d
�|D�||d%�d&|}��d'�|d�|	���|�d(|����q���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'
        �{}_{}�action_namez### Rules for action "%s":�inputs�outputsr�process_outputs_as_sourcesF�'process_outputs_as_mac_bundle_resources�actionrc�g|]	}tj�|���qSr9�r)r��
ExpandEnvVars�rd�command��envr9r:r����z/MakefileWriter.WriteActions.<locals>.<listcomp>�messagezquiet_cmd_{} = ACTION {} $@�
quiet_cmd_z
 = ACTION z $@zmkdir -p %sr�z; �cd %s; �.�	$(TARGET)r%r$z\cmd_%s = LIBPATH=$(builddir)/lib.host:$(builddir)/lib.target:$$LIBPATH; export LIBPATH; %s%sztcmd_%s = LD_LIBRARY_PATH=$(builddir)/lib.host:$(builddir)/lib.target:$$LD_LIBRARY_PATH; export LD_LIBRARY_PATH; %s%sc�g|]}��|��qSr9�r��rd�or�r9r:r�<��%s: obj := $(abs_obj)�%s: builddir := $(abs_builddir)z3Spaces in action input filenames not supported (%s)z4Spaces in action output filenames not supported (%s)cr�r9r�rr�r9r:r�S�cr�r9r��rd�ir�r9r:r�Tr	c�g|]	}t��|���qSr9r�r
r�r9r:r�Xr	)r�r�zaction_%s_outputsz{} := {}�$(%s)N)�GetSortedXcodeEnvr�r�r�r��setrHrI�split�add�intrDr6r)r*�EncodePOSIXShellList�lenrKr�rrr�r��WriteSortedXcodeEnv�
WriteDoCmdr�)r�r�r�r�r�r�r��namer�r��dirsr@�dir�action_commandsr��	cd_action�inputr��outputs_variabler9)r�r�r:r��s�
�
�

������	���
zMakefileWriter.WriteActionscs����|D�]{}td��j|d��}d}��d|�g}	|�dg�D�]?}
t�}tj�	|
�\�}tj�
|�\�}
���fdd�|dD�}|D]}tj�|�}|rY|�|�qJt
|�d	d
��rf||7}t
|�dd
��rr||7}�fdd�|
g|�d
g�D�}d||fg}|dkr�|dg7}�fdd�|D�}�fdd�|D�}�fdd�|D�}|	|7}	��d|d���d|d��j|||d||fd�t�d�}|D]}t�|d|�}d|vs�Jd|��q׈�dd�|�����fdd�|dD�}d}t|�dk�rdd�|�}d t�j�pd!�}�jd"k�r+�fd#d�|D�}tj�|�}|�d$�j�}|�d$�j�}|�d$�j�}��d%|||||d&����d'||d(�����|d)7}q%d*|}��|	|�|�d+|���d,|����q��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|]	}��|����qSr9��ExpandInputRoot)rdr@��rule_source_dirname�rule_source_rootr�r9r:r��r�z-MakefileWriter.WriteRules.<locals>.<listcomp>r�r�Fr�crr9r�r
r�r9r:r��r�r�z$(call do_cmd,%s_%d)�resources_gritz@touch --no-create $@cr�r9r�rr�r9r:r��r	cr�r9r�r
r�r9r:r��r	crr9rrr�r9r:r��rrrz%s_%d)r�z\$\([^ ]* \$<\)rr�z/Spaces in rule filenames not yet supported (%s)�all_deps += %scr r9r!)rd�acr#r9r:r��r�r�z
mkdir -p %s; r�rrcr�r9r�r�r�r9r:r��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)r�r�count�mkdirsrz9quiet_cmd_%(name)s_%(count)d = RULE %(name)s_%(count)d $@)r)rr�zrule_%s_outputsr
z$### Finished generating for rule: %sz%### Finished generating for all rulesN)rr�r�r�r�rDrrHrIrrnr�rr�
WriteMakeRuler��compiler�rKrr�r6r)r*rrrr��	WriteListr�)r�r�r�r�r�r��rulerr)�all_outputs�rule_sourcer�rule_source_basename�rule_source_extr�r@rr�r��variables_with_spacesr�r�r*rrr9)r�r$r%r�r:r�es�
���
�
�
�

��
����
��


zMakefileWriter.WriteRulesc	Cs�|�d�t|jd�}g}|D]G}|dD]@}t|�|��}tj�|�d}t|�tj�|d|���}	|�	�}
t
j�|	|
�}	t
j�||
�}|�
|	g|gd|�|�|	�qq|�d�|d�d	d
�|D����|�d|�|��dS)
a%Write 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.�_copies�filesr��destination�copyz{} = {}r�cs��|]}t|�VqdSra�r�rr9r9r:rh��z-MakefileWriter.WriteCopies.<locals>.<genexpr>r
N)r�r�r�r�r�rHrIrrKrr)r�r�rr�r�)r�r�r�r��variabler�r7rIrgr�r�r9r9r:r��s*
�
��zMakefileWriter.WriteCopiescst��d�tj�td�j�fdd�|D��D] \}}tj�|�\}}|dkr7�j	|g|gddd�|�
|�qd	S)
z0Writes Makefile code for 'mac_bundle_resources'.z&### Generated for mac_bundle_resourcesrcrr9r�)rd�rr�r9r:r�$r	z:MakefileWriter.WriteMacBundleResources.<locals>.<listcomp>z	.xcassetszmac_tool,,,copy-bundle-resourceT�r�N)r�r)r��GetMacBundleResourcesr-r�rHrIrnrr�)r��	resources�bundle_depsr�rir~rZr9r�r:r�s
��
��z&MakefileWriter.WriteMacBundleResourcescs�tj�td�j�fdd��\}}}}|sdS|r9dtj�|�}�j||ddt	d���
|g|gd	d
g�|}��|�j|d���j
|g|gdd
d�|�|�dS)z0Write Makefile code for bundle Info.plist files.rcr�rar�r�r�r9r:r�3r�z2MakefileWriter.WriteMacInfoPlist.<locals>.<lambda>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��GetMacInfoPlistr-r�rHrIr�r-ryr+rrrr�)r�r@�
info_plistr@�defines�	extra_env�intermediate_plistr9r�r:r�.s@
�����
��z MakefileWriter.WriteMacInfoPlistcst|���D]�}||}	�j|	�d�d|dtd��jdkrC�jj||	�d�d�}
�j�|�}�j�	|�}�j�
|�}
�j�|�}n|	�d�}
|	�d	�}|	�d
�}��d���|
d|���d
���|d|���d���|d|��jdkr���d���|
d|���d���|d|�|	�d�}|r��fdd�|D�}�j|d|dd�qt
tt|��}�fdd�|D�}��|d�|D]}d|vs�Jd|��qˈ�d���d ����|r�jd!g|d"d#d$�|r��jd!g|d%d#d$�|�||�}|�r$��d&�|D]\}}}��|�d'|����q��d(�|�rl|�d!���d)���d*���d+|�d,�d-���d.|�d/�d0��jdk�rl��d1|�d2�d3���d4|�d5�d6���|���|d7d�|D�7}���d8S)9a"Write 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'
        rGzDEFS_%srA��prefixrBr�xcode_configuration_platform��arch�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_dirscrr9r�r
r�r9r:r��r	z/MakefileWriter.WriteSources.<locals>.<listcomp>zINCS_%sz-I)rKcs g|]}����t|����qSr9)�	Objectifyr�ro)rd�cr�r9r:r��s �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 headers�: 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 rTz/$(CFLAGS_$(BUILDTYPE)) $(CFLAGS_C_$(BUILDTYPE))zF$(OBJS): GYP_CXXFLAGS := $(DEFS_$(BUILDTYPE)) $(INCS_$(BUILDTYPE)) %s r\z0$(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))cSr�r9)rl)rd�sourcer9r9r:r��r�N)rSrTr-rDryr6r��	GetCflags�
GetCflagsC�GetCflagsCC�
GetCflagsObjC�GetCflagsObjCCr��list�filterrjr+�GetObjDependenciesr��
GetInclude�WritePchTargets�GetPchBuildCommands)r�r�r�r�r�r�r��precompiled_header�
configname�configrOrPrQ�cflags_objc�cflags_objcc�includes�
compilable�objs�obj�pchdepsr\�gchr9r�r:r�Vs��

�









�
�
�


�
���������	���
zMakefileWriter.WriteSourcesc	Cs�|sdS|D]W\}}}}ddddd�|}ddd	d
d�|}|�|�d|�d|�d
�d|�|�|�d|�d��|�d|�|�d�d
|vsQJd|��|�d|�|�d�qdS)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)))rTr\rZr[�GYP_PCH_CFLAGS�GYP_PCH_CXXFLAGS�GYP_PCH_OBJCFLAGS�GYP_PCH_OBJCXXFLAGSrY� := 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)r')r�)r��pch_commandsrr�	lang_flag�langr�extra_flags�var_namer9r9r:rf�s:������
�zMakefileWriter.WritePchTargetscCs"|jrJ�|jdkr|jdvr|j��S|d}d}d}|jdkr4|dd�dkr/|dd�}d}d	}n@|jd
vr\|dd�dkrG|dd�}d}|jdkrQd	}n#|jdkrYd
}nd}n|jdkrfd|}n|jdkrttdd|jd|�|�d|�}|�d|�}|�d�}|r�d|}|||S)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%r&r(�nonez%s.stampr�z,ERROR: What output file should be generated?r�r��product_prefix�product_name�product_extensionr)r�r6r�r��GetExecutablePath�printrD)r�r�r��
target_prefix�
target_ext�product_extr9r9r:�ComputeOutputBasename
sH








�
z$MakefileWriter.ComputeOutputBasenamecCs|jdko|jdko|jdvS)Nr�rr~)r�r6r�r�r9r9r:�_InstallImmediately?s
���z"MakefileWriter._InstallImmediatelycCsV|jrJ�tj�d|j|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�rHrIrKr�r�r�rDr��r�r�rIr9r9r:r�Gs
zMakefileWriter.ComputeOutputcCs&|jsJ�td}tj�||j���S)zDReturn the 'output' (full output path) to a bundle output directory.r)r�r-rHrIrKr��GetWrapperNamer�r9r9r:r�Us
z%MakefileWriter.ComputeMacBundleOutputcCstd}tj�||j���S)zAReturn the 'output' (full output path) to the binary in a bundle.r)r-rHrIrKr�r�r�r9r9r:r�[sz+MakefileWriter.ComputeMacBundleBinaryOutputcCsng}g}d|vr+|�dd�|dD��|dD]
}|tvr%|�t|�q|�|�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).
        �dependenciescSsg|]
}t|rt|�qSr9)r��rd�depr9r9r:r�ks��z.MakefileWriter.ComputeDeps.<locals>.<listcomp>)�extendr�r�r)r*�uniquer)r�r�r�r�r�r9r9r:r�`s���
zMakefileWriter.ComputeDepscC�t�dd|�S)�0Return the shared object files based on sidedeckz\.x$r(r�r��sidedeckr9r9r:�GetSharedObjectFromSidedeckzr�z*MakefileWriter.GetSharedObjectFromSidedeckcCr�)r�z	\.\d+\.x$r&rr�r9r9r:�"GetUnversionedSidedeckFromSidedeck~r�z1MakefileWriter.GetUnversionedSidedeckFromSidedeckcCs|j|jg|ddd�dS)Nz Build our special outputs first.TrV)r+r�)r�r�r�r9r9r:�WriteDependencyOnExtraOutputs�s
�z,MakefileWriter.WriteDependencyOnExtraOutputscs���d�|r���j|��j||ddd�i}�jdkr�t|���D]�}	||	}
�jdkrp�jj	|	t
d�fdd	�|
�d
�d�}tj
��j�}�j�|	ttj�tj�|�j���ttj�tj�|�j����}
|
ro|
||	<n|
�dg�}td
d�|D��r�|�d�|�d�|
�dg�}|dd�|D�7}��|d|	��jdkr����j�|	�d|	�q$|�d�}|r�tj
�|�}�jdkrʈj�|�}��|d���dt�j����dt�j���jdkr��dt�j��g}�jdk�r|�r|�d�|�tj�|��|�rm���j�� ��|D]}	��dt�j�|	tj
�!||	�f��q|�"dtj
�!d�jg��t#|�D]\}}|�$d��sRt%|�||<�qB��d t�j����d!t�j�d"�|�f��j&�r����j|���d#d�|D�d$���d%t�j���jd&v�r���d'�j�'��|�r���d(�g}��d)���d*t�j��|�r͈j&�r�Jd+�j(��d,|v�s�Jd-���jd.k�r��d/t�j�d"�d0d�|D��f��j)d1k�r�jd2k�r�j*�jg|d3||d4��n�j*�jg|d5||d4�n��jd6k�rm|D]}d"|v�s#Jd7|���q�jd8v�rN�j+�sN�jd9v�rA�j�jg|d:gd;�nÈj*�jg|d<||d4�n��jd9v�r`�j�jg|d=gd;�n��j*�jg|d>||d4�n��jd?k�r���d/t�j�d"�d@d�|D��f��j*�jg|dA||d4��jdBk�r���dCt��,�j��t�j�f�nX�jdDk�r�|D]}d"|v�s�JdE|���q��j)d1k�r܈jd2k�r܈j*�jg|dF||d4�n(�j*�jg|dG||d4�n�jdk�r��j*�jg|dH||d4�nt-dI�j�j(��j�r2�j�j(k�r2�j�j.v�r2�j�j(g�jgdJddK�|�r2�jdLg�j(gdMddK��j�j.v�s=�j+�rG�jd?k�rFdN}n�jd6k�rOdO}nd.}��/�}g}�jdBk�rc|��j��jdk�r�d,|v�r��j)dPk�r�|�jk�s�J|�dQ�j�����j�j(g|gdJddK�|�jk�r��j&�r�J��j*|g�jgdRdS||dT��jdBk�r�|�|��jdBk�r��jd?k�r��j*��,|�g��,�j�gdRdS||dT��j*��0|�g|gdUdV||dT�|���,|��|���0|���j�j1k�r�j1�j(k�r�j�j1g|dW|ddK��jdBk�r5�jd?k�r5�jdLg��0|���,|�gdX|ddK�dYS|�rI�jdLg|gdX|ddK�dYSdYSdYS)Za: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�rrcr�rar�r�r�r9r:r��r�z,MakefileWriter.WriteTarget.<locals>.<lambda>rLrM�ldflagscss"�|]}|�d�pd|vVqdS)r(z.so.Nrbr�r9r9r:rh�s� z-MakefileWriter.WriteTarget.<locals>.<genexpr>z-Wl,-rpath=\$$ORIGIN/z-Wl,-rpath-link=\$(builddir)/�library_dirscSsg|]}d|�qS)z-L%sr9)rd�library_dirr9r9r:r���z.MakefileWriter.WriteTarget.<locals>.<listcomp>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%s: TARGET_POSTBUILDS_%s := %sr�cdrvrz%s: POSTBUILDS := %sr�cS�g|]}t|��qSr9r9r�r9r9r:r�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%s: LD_INPUTS := %scsr8rar9r�r9r9r:rh5r:�hostr"�	link_host)�
postbuilds�linkr�z2Spaces in alink input filenames not supported (%s))r�openbsd�netbsd�win)r#r"z!$(call create_thin_archive,$@,$^))r��
alink_thinz$(call create_archive,$@,$^)�alinkr�csr8rar9r�r9r9r:rhtr:�solinkr%z%s: %sr�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 != r7z Copy this to the %s output path.)rWr��symlinkz"Symlnk this to the %s output path.z!Short alias for building this %s.zAdd %s to "all" target.N)2r�r�r�r+r�rSrTr6r��
GetLdflagsr-rDr)r*�InvertRelativePathrI�AddImplicitPostbuildsr�rHrJrKr��anyr�r-�GetLibtoolflagsr��AdjustLibrariesr�r��GetSpecPostbuildCommandsr�GetSortedXcodePostbuildEnvr�insert�	enumerate�
startswithrur��GetFrameworkVersionr�r�rr�r�r�r�r�r�r�)r�r�r�r�r�r@r�r��target_postbuildsrirjr��gyp_to_build�target_postbuildr�r�r�r�	postbuild�link_dep�	file_descr��installable_depsr9r�r:r��sj
�


������



��

��
��
��������


������
������������
�����	������
 ��

�
����
�	
��JzMakefileWriter.WriteTargetNrcsFd}|r��fdd�|D�}dd�|�}|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.
        rcsg|]}��|��qSr9r9)rd�valuerJr9r:r�r�z,MakefileWriter.WriteList.<locals>.<listcomp>z \
	z :=z

N)rKr�rW)r��
value_listr;rKrB�valuesr9rJr:r-s
zMakefileWriter.WriteListFcCsbd}|rd|vs
J�d}|j||d|�|�d�g||dd�dd	�|D�}|�d
d�|��dS)
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��forcecSsg|]}t|t��qSr9)r��SPACE_REPLACEMENTrr9r9r:r�1rz-MakefileWriter.WriteDoCmd.<locals>.<listcomp>r'r�N)r+r�rK)r�r�r�r�r�rWr��suffixr9r9r:rs�zMakefileWriter.WriteDoCmdc	
Csbdd�|D�}dd�|D�}|r|�d|�|r#|�dd�|��|r.|�d|d�|r2d	nd
}	|rG|�d�d�|�d�|�|	��nVt|�dkr]|�d
�|dd�|�|	��n@t�|pc|j�d����}
d|
}|�d�d�|�|��|�dd�|�d�d|��|�d
�|d�|�|	��|�	dd�|r�|D]	}|�d|�q�|��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
        cSr�r9r9rr9r9r:r�Mr�z0MakefileWriter.WriteMakeRule.<locals>.<listcomp>cSr�r9r9r
r9r9r:r�Nr�z# z.PHONY: r�z%s: TOOLSET := $(TOOLSET)rrxrz
{}: | {}{}r�z{}: {}{}zutf-8z%s.intermediatez{}: {}z	%sz@:z
.INTERMEDIATEz$(call do_cmd,touch)N)
r�rKr�r�hashlib�sha1r��encode�	hexdigestr�)
r�r�r�r�rWrXr�r�r��force_append�	cmddigest�intermediater�r9r9r:r+4s@� ���zMakefileWriter.WriteMakeRulecCs||jdvrdS|�d�|�d�|�d|�|�d�|�d�|�d�|�d	�d
d
d
d�}d}|D] }tj�|�d
}||vrV||d
7<||||krV|}q6|�d|�|�tt|jt	t
|���d�dd�}ddi}	i}
t|
|	�|�||td|
d�d�|�||tdtd�d�|jdkr�|�d�n|jdkr�|�d�n
|jdkr�|�d�|��dS) aWrite 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)r^r_r`r_r�zLOCAL_CPP_EXTENSION := �LOCAL_SRC_FILEScSsNg}|D] }tj�|�}|�|�r$|�|�r$|�|t|�t|���q|Sra)rHrIr�r�rcr�r)r�rKr��modules�filepathrgr9r9r:�
DepsToModules�s�z?MakefileWriter.WriteAndroidNdkModuleRule.<locals>.DepsToModulesr6r#r
r�LOCAL_SHARED_LIBRARIESrr�LOCAL_STATIC_LIBRARIESr�zinclude $(BUILD_EXECUTABLE)r�zinclude $(BUILD_SHARED_LIBRARY)r�zinclude $(BUILD_STATIC_LIBRARY))
r�r�rHrIrnr-rb�mapr�rcrjr;r-)r��module_namer�r��cpp_ext�default_cpp_extrgrZr�r5r4r9r9r:r�}sh



�


��	
����
	


z(MakefileWriter.WriteAndroidNdkModuleRulecCs|j�|d�dS)NrR)r�rW)r��textr9r9r:r��szMakefileWriter.WriteLncCs"tj�|jdtj�d|j�d|�S)Nz$(abs_builddir)z
$(abs_srcdir)r	)r)r�rr�rHrIrK)r�rDr9r9r:r�s�z MakefileWriter.GetSortedXcodeEnvcCs|j�dd�}|jd|id�S)N�CHROMIUM_STRIP_SAVE_FILErrC)r��GetPerTargetSettingr)r��strip_save_filer9r9r:r��s��z)MakefileWriter.GetSortedXcodePostbuildEnvcCs0|D]\}}|�t|��d|�d|���qdS)Nz	: export rw)r�r�)r�r�r��k�vr9r9r:r�s �z"MakefileWriter.WriteSortedXcodeEnvcCs8d|vr
|�dd|j�}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)/)rrr��r�rIr9r9r:rS�s
zMakefileWriter.ObjectifycCsH|�|�}d|vr|�dd|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�rrr�)r�rIr{r9r9r:r�	s
�zMakefileWriter.PchifycCs*d|vr	|�d�Stj�tj�|j|��S)zpConvert a subdirectory-relative path into a base-relative path.
        Skips over paths that contain variables.r�r�)�rstriprHrIrJrKr�r9r9r:r�
	s
zMakefileWriter.AbsolutifycCs&d|vr
d|vr
|S|||d�}|S)Nrr)�
INPUT_ROOT�
INPUT_DIRNAMEr9)r��template�	expansionr�rIr9r9r:r"	s�zMakefileWriter.ExpandInputRootcCs.|jdkr|jdkrd|j|jfSd|jS)zCReturns the location of the final output for an installable target.r%r�z$(builddir)/lib.%s/%sz$(builddir)/)r6r�r�r�r�r9r9r:r� 	s
z,MakefileWriter._InstallableTargetInstallPath)NF)NNFFFN)rra)&�__name__�
__module__�__qualname__�__doc__r�r�r�r�r�r�r�r�r�rfr�r�r�r�r�r�r�r�r�r�r}r-rr+r�r�rr�rrSr�r�r"r�r9r9r9r:r��s`/}((5
�
�I
\
	


	r�cs�|d��fdd�|dD�}tj�|d�j�}|�tj�s&tj�d|�}|�	d|d�d	d
�|D��tj�
|dgt���|�d��d
S)z,Write the target to regenerate the Makefile.r>csg|]
}tj�|�j��qSr9)r)r*�RelativePathrG)rdrg�r>r9r:r�5	s��z-WriteAutoRegenerationRule.<locals>.<listcomp>�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�csr8ra)r�)rd�bfr9r9r:rhG	r:z,WriteAutoRegenerationRule.<locals>.<genexpr>z-fmake)�
makefile_namer��cmdN)r)r*�FixIfRelativePathrGr�rH�seprIrKrWr�RegenerateFlags)r5�
root_makefiler��build_files�build_files_argsr�r9r�r:�WriteAutoRegenerationRule2	s&
�
�����r�cCsf|d}|D]*}dg}|jr|jdkr|d|jf7}|�d|�td|�d|���t�|�qdS)Nr>�makerz-Cz
BUILDTYPE=z
Building [z]: )rGr�r��
subprocess�
check_call)�data�configurationsr5r>rj�	argumentsr9r9r:�PerformBuildO	s�rc5s�|d�tj�|�}|�di�}|�dd�}|�dd�}|�dd�}�fdd	�}	d}
�fd
d�|D�}|D]}�|}
|
dd
krG|
d}
nq5|
sLd
}
d}d�j}tj��j|�}�j	rrtj��j�j	|�}tj�
|�j	�}dad}d}d}id|�d|�d|
�d|�dd�dt�dd�d|�d|�d|�dt
dd��d t
d!d"��d#t
d$d%��d&t
d'd(��d)t
d*d+��d,t
d-d.��d/t
d0d1��t
d2d3�t
d4d5�t
d6d+�d7��}|d8kr�d9}|�|d:ttd;��n�|d<kr�|�dti�n�|d=k�r[d>}t
dd?�}d}|d@k�rt
d-d@�}t
d$dA�}t
d2dA�}n;|dBk�r&t
d-dB�}t
d$dC�}t
d2dC�}n&|dDk�r;t
d-dD�}t
d$dE�}t
d2dE�}ndF}t
d-d?�}t
d$dG�}t
d2dG�}|�||tt||||dH��nP|dIk�rldJ}|�|dKd:dL��n?|dMk�ry|�ddNi�n2|dOk�r�dP}|�d|i�n#|dQk�r�dP}|�|tdKd:dR��n|dSk�r�dP}|�|tdKd:dR��tj�|dT�\�}}|��dUg�}i}|D]\}}|�dV��r�dW|||dtdV��<�q�d}|D]b\}}t�dX|��r�q�|dTdYk�r�dW|}|�|�}|�r	|�dZ|��}||=|d[v�r6|d\|7}|�dd]�} | tjv�r%tj| }|d^|�d_|�d`�7}|da7}�q�||�db|�d`�7}�q�||dU<tj�|�t|dc�}!|!�t |�|�r`|!�dd�|D]}"|!�de|"�t!|!��qbtj�"|�}#tj�#||#�t$��|dfD]�tj�%|���D]}��&|��q��q�t$�}$t$�}%|D]�}&tj�|&�\�}}"|��dUg�}'||'k�s�Jdg|'�dh|����|$�&tj�
��j��|�di}(|(D]/})tj�
tj�'|)���j�}*tj�(|*�}+|dj�r|+�)|dj��r|$�&|+��q�|$�&|*��q�|	�|d|"�jdk�\},}-�|&}
|
dl}.|d8k�r-tj*�+|�|
�t,||�}/|/j-|&|,|-|
|.|&�vdm�tj�
|-tj�"|��}0|%�&|0��q�tj�
�j.t�/��}1|$D]D�tj�|1������fdndo�|D�}2|2�sv�q]|	�tj�0tj�1���dTdp�\},}-tj�
tj�"|�tj�"|-��}3|/�2|-|3|2|��q]|!�d`�t3|%�D]}4|!�dq|4dr�|!�ds|4d`�|!�da��q�|!�d`�|�dt��s�|�dudv��r�t4||!||$�|!�t5�|!�6�dS)wNr>r<r?r@r=�default_targetr�csftj�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�rHrIr��depthrKrFrG)�
build_file�	base_namer��output_filer�r9r:�CalculateMakefilePathb	s��z-GenerateOutput.<locals>.CalculateMakefilePathcsh|]}�|d�qS)r�r9)rdr�)�target_dictsr9r:r�x	r�z!GenerateOutput.<locals>.<setcomp>�default_configuration�Defaultr�Makefilez
$(srcdir)/�flockz-afz-MMD�builddir�flock_indexr��
link_commands�extra_commandsr�srcdir�copy_archive_args�makedep_args�	CC.target)�	CC_target�CCz$(CC)z	AR.target)�	AR_target�ARz$(AR)�
CXX.target)�
CXX_target�CXXz$(CXX)zLINK.target)�LINK_target�LINKz$(LINK)z
PLI.target)�
PLI_target�PLIr'�CC.host)�CC_hostr�gcczAR.host)�AR_hostr�ar)�CXX_hostr zg++)�	LINK_hostr"z$(CXX.host))�PLI_hostr$)�CXX.hostz	LINK.hostzPLI.hostrz./gyp-mac-tool flock�)rrrrr"r%z-fPR�njsc�clangzclang++zibm-clang64z
ibm-clang++64z	ibm-clangzibm-clang++z
-qmakedep=gccznjsc++)rrrrrrr%r-�solarisz-pPRf@z./gyp-flock-tool flock)rrr�freebsd�lockfr�z-pPRfr$)rrrr�os400r�make_global_settings�_wrapperz
$(abspath %s)z
.*_wrapperrvr�)rr%r r-z3ifneq (,$(filter $(origin %s), undefined default))
r~z  z = rRzendif
z ?= r�zU# Define LOCAL_PATH for build of Android applications.
LOCAL_PATH := $(call my-dir)

zTOOLSET := %s
r�z:make_global_settings needs to be the same for all targets z vs. �included_files�home_dot_gypz.mkrr=cs*g|]}|���r|�vr�|d�qS)r�)r�)rdr�)r	�needed_targetsr
r9r:r�r
s�
�z"GenerateOutput.<locals>.<listcomp>z	.Makefilezmifeq ($(strip $(foreach prefix,$(NO_LOAD),\
    $(findstring $(join ^,$(prefix)),\
                 $(join ^,z)))),)
z
  include �
standalone�auto_regenerationT)7r)r*r+rDr�rHrIrKrGrFr�r��LINK_COMMANDS_LINUXrr3�LINK_COMMANDS_MAC�SHARED_HEADER_MAC_COMMANDS�LINK_COMMANDS_ANDROID�LINK_COMMANDS_OS390�SHARED_HEADER_OS390_COMMANDS�LINK_COMMANDS_AIX�LINK_COMMANDS_OS400�ParseQualifiedTargetrcrr��matchrr�environr�r�rW�
SHARED_HEADERr[r��CopyToolr�
AllTargetsr�UnrelativePath�abspathr�r��MergeGlobalXcodeSettingsToSpecr�r�r�getcwdrnr�r�rSr��
SHARED_FOOTERr�)5�target_listr
rr5r6r<rMr=rrr�toolsetsr�r�rr�r��
flock_command�copy_archive_arguments�makedep_arguments�
header_paramsrr&rr*r~�make_global_settings_array�wrappersrPr�r5�wrapper�env_keyr�r��	dest_pathr��include_listr��this_make_global_settingsr7�
included_file�relative_include_file�abs_include_filer�rr�rX�mkfile_rel_path�depth_rel_path�gyp_targets�makefile_rel_path�include_filer9)r	r9r>r
r:�GenerateOutputZ	s�

���������	�
�
�
�

�
�
�
�
����













��
��


��
��	�

�

��������

�����
���
�
rd)r�)5rHr�rr)�
gyp.common�gyp.xcode_emulationrr�r-r*�CrossCompileRequested�$generator_supports_multiple_toolsetsrErrrrLr;rNr�r<r=r?rBrCr@rGr>r[rAr�r�rNr�r2rjrlrorurwryr}r�r�r�r�r�r�r�r�r�rrdr9r9r9r:�<module>s��
.!=5K�L�N�O�2��3��S��T��V��W���|	
�
	
	@

Выполнить команду


Для локальной разработки. Не используйте в интернете!