HOME


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

K��b�����ddlmZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlmZddlZddlmZddlZ	ddlmZn#e$r	ddlmZYnwxYwddlmZddlmZdddddd	d
ddd
ddddd�Zgagagada ej!�"��Z#d�Z$d�Z%d�Z&d�Z'Gd�de(��Z)Gd�de(��Z*d�Z+d�Z,d�Z-d(d�Z.d �Z/d!�Z0d"�Z1d#�Z2d$�Z3d%�Z4d&�Z5d'�Z6dS))�)�print_functionN)�
OrderedSet)�StringIO)�GetEnvironFallback��libz.a�$!INTERMEDIATE_DIRz$!PRODUCT_DIR/gen�
$!PRODUCT_DIR�$|CONFIGURATION_NAME�${root}�
${dirname}�	${source}�${ext}�${name})�EXECUTABLE_PREFIX�EXECUTABLE_SUFFIX�STATIC_LIB_PREFIX�STATIC_LIB_SUFFIX�SHARED_LIB_PREFIX�INTERMEDIATE_DIR�SHARED_INTERMEDIATE_DIR�PRODUCT_DIR�CONFIGURATION_NAME�RULE_INPUT_ROOT�RULE_INPUT_DIRNAME�RULE_INPUT_PATH�RULE_INPUT_EXT�RULE_INPUT_NAMEc�^�|�|��r|t|��d�S|S�N)�
startswith�len)�arg�prefixs  �5/usr/lib/python3/dist-packages/gyp/generator/ninja.py�StripPrefixr&Is0���^�^�F�����s�6�{�{�|�|���	�*�c��tjd|��r|S|dkrtj�|��Sd|�dd��zdzS)zTQuote a string such that it will be interpreted as a single argument
  by the shell.z^[a-zA-Z0-9_=.\\/-]+$�win�'z'"'"')�re�match�gyp�msvs_emulation�QuoteForRspFile�replace)r#�flavors  r%�QuoteShellArgumentr2Os]��
�X�&��,�,���J��u�_�_���-�-�c�2�2�2�	�s�{�{�3� 2�3�3�	3�s�	:�:r'c��|dkr&|�ddtd��z��}ttjd|z��|��S)zYTakes a preprocessor define and returns a -D parameter that's ninja- and
  shell-escaped.r)�#z\%03oz-D)r0�ordr2�ninja_syntax�escape)�dr1s  r%�Definer9[sL���u�_�_�	
�	�	�#�x�#�c�(�(�*�+�+�A�	�L�/��q��9�9�6�	B�	B�Br'c�X�tj�|��\}}|�d|�|��S)z&Adds an arch string to an output path.�.)�os�path�splitext)�output�arch�	extensions   r%�AddArchrBes1���g�&�&�v�.�.��&�)��f�f�d�d�I�I�	.�.r'c�6�eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z	dS)	�TargetazTarget represents the paths used within a single gyp target.

  Conceptually, building a single target A is a series of steps:

  1) actions/rules/copies  generates source/resources/etc.
  2) compiles              generates .o files
  3) link                  generates a binary (library/executable)
  4) bundle                merges the above in a mac bundle

  (Any of these steps can be optional.)

  From a build ordering perspective, a dependent target B could just
  depend on the last output of this series of steps.

  But some dependent commands sometimes need to reach inside the box.
  For example, when linking B it needs to get the path to the static
  library generated by A.

  This object stores those paths.  To keep things simple, member
  variables only store concrete paths to single files, while methods
  compute derived values like "the last output of the target".
  c��||_d|_d|_d|_d|_d|_d|_d|_d|_d|_	dS)NF)
�type�preaction_stamp�precompile_stamp�
actions_stamp�binary�bundle�component_objs�compile_deps�
import_lib�uses_cpp)�selfrFs  r%�__init__zTarget.__init__�s]���D�I� �D��!�D���D���D�K��D�K��D���D���D�O��D�M�M�Mr'c��|jdvS)z;Return true if this is a target that can be linked against.)�static_library�shared_library)rF�rPs r%�LinkablezTarget.Linkable�s���9�<�<�<r'c�2�|dks|jrdS|jdvS)zOReturn true if the target should produce a restat rule based on a TOC
    file.r)F�rT�loadable_module)rKrF�rPr1s  r%�UsesToczTarget.UsesToc�s&������$�+��
�U��9�=�=�=r'c��|�|��r|���dzS|���p|jS)z^Return the path, if any, that should be used as a dependency of
    any dependent action step.�.TOC)r[�FinalOutputrGrZs  r%�PreActionInputzTarget.PreActionInput�sI���|�|�F���)�
�
�
�
�
�&�
(�(������5��!5�5r'c��|jp|jS)z_Return the path, if any, that should be used as a dependency of
    any dependent compile step.)rIrHrUs r%�PreCompileInputzTarget.PreCompileInput�s����6��!6�6r'c�,�|jp
|jp|jS)zKReturn the last output of the target, which depends on all prior
    steps.)rKrJrIrUs r%r^zTarget.FinalOutput�s���;�;�$�+�;��);�;r'N)
�__name__�
__module__�__qualname__�__doc__rQrVr[r_rar^�r'r%rDrDksx��������,���>=�=�=�>�>�>�6�6�6�7�7�7�
<�<�<�<�<r'rDc��eZdZ	d*d�Zd*d�Zd�Zd*d�Zd+d�Zd*d�Zd	�Z	d
�Z
d�Zd�Zd
�Z
d�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d*d�Zd�Zd�Z	d*d�Zd�Zd�Zd*d�Zd*d�Zd*d�Zd �Z 	d,d"�Z!d#�Z"d$�Z#d%�Z$d*d&�Z%d*d'�Z&d(�Z'	d*d)�Z(dS)-�NinjaWriterNc
��||_||_||_||_t	j|��|_||_||_||_	d|_
|	�Btj�
tj�|	|����|_
|dkrdnd|_|dkri|_dD]}
d|
z|j|
<�t"j�||	��}tj�||��|_t"j�||	��}tj�||��|_dS)z�
    base_dir: path from source root to directory containing this gyp file,
              by gyp semantics, all input paths are relative to this
    build_dir: path from source root to build output
    toplevel_dir: path to the toplevel directory
    Nr)z.objz.o)�x86�x64zenvironment.)�hash_for_rules�target_outputs�base_dir�	build_dirr6�Writer�ninja�toplevel_build�output_file_namer1�
abs_build_dirr<r=�abspath�join�obj_ext�win_envr-�common�InvertRelativePath�
build_to_base�
base_to_build)
rPrmrnrorp�output_filersrtr1�toplevel_dirr@�build_to_top�base_to_tops
             r%rQzNinjaWriter.__init__�s8��)�D��(�D���D�M��D�N��$�[�1�1�D�J�(�D��,�D���D�K��D�����7�?�?�2�7�<�<��8A�,C�,C�D�D�d��#�u�_�_�6�6�$�D�L�
�����d�l� �3�3�$�+�d�2���T����:�0�0��L�I�I�L�����l�H�=�=�D���*�/�/��,�G�G�K�����k�9�=�=�D���r'c��d}||vra|r|�||��}nH|�|dzd��}|�|dzd��}|�|d��}d}||vrK|�d��}|�|tj�|pd|����}d}|�||j��}|S)	z�Expand specials like $!PRODUCT_DIR in |path|.

    If |product_dir| is None, assumes the cwd is already the product
    dir.  Otherwise, |product_dir| is the relative path to the product
    dir.
    r
�/r�\r;r	�genr)r0�GypPathToUniqueOutputr<r=rw�config_name)rPr=�product_dirrr�int_dirrs       r%�
ExpandSpecialzNinjaWriter.ExpandSpecial�s���"�K��d���	�.��|�|�K��5�5����|�|�K�#�-�r�2�2���|�|�K�$�.��3�3���|�|�K��-�-��+���4����*�*�5�1�1�g��\�\�*��'�,�,�{�'8�b�'�B�B�D�D�d�0���<�<�*�D�,<�=�=�D��Kr'c��|jdkr!|j�||j���}|�t
d|��}|�t
d|��}|�t
d|��}|�t
d|��}|�t
d|��}|S)Nr)��configrrrrr)r1�
msvs_settings�ConvertVSMacrosr�r0�generator_default_variables)rPr=�root�dirname�source�ext�names       r%�ExpandRuleVariableszNinjaWriter.ExpandRuleVariabless����{�e���
�
�
/�
/�
�t�'�0�)�)�d��<�<�3�4E�F��M�M�D��<�<�3�4H�I��!�!�D��<�<�3�4E�F��O�O�D��<�<�3�4D�E�s�K�K�D��<�<�3�4E�F��M�M�D��Kr'c�2�|rW|jdkr!tj�||��}n+|jdkr tj�||��}|�d��rA|�|��}|jdkrtj	�
|��}|Sd|vr|�|��}d|vs
J|���tj	�
tj	�|j|����S)z�Translate a gyp path to a ninja path, optionally expanding environment
    variable references in |path| with |env|.

    See the above discourse on path conversions.�macr)z$!z$|�$)
r1r-�xcode_emulation�
ExpandEnvVarsr.�ExpandMacrosr!r�r<r=�normpathrwr|)rPr=�env�expandeds    r%�GypPathToNinjazNinjaWriter.GypPathToNinja)s���
�:�	
���	�	��"�0�0��s�;�;����;�%����!�.�.�t�S�9�9�����t�����#�#�D�)�)�h�	
���	�	��7�#�#�H�-�-��
�o��t�|�|�
�
�
��
%�
%�d��d�?�?�?�D�?�?�?�
�7���B�G�L�L��);�T�B�B�C�C�Cr'Tc���|�|��}|�d��r
J|���d}|jdkr
|d|jzz
}tj�|��\}}tj�|��r
Jd|z���|r
|jdz|z}tj�tj�	||j
||����S)a%Translate a gyp path to a ninja path for writing output.

    If qualified is True, qualify the resulting filename with the name
    of the target.  This is necessary when e.g. compiling the same
    path twice for two separate output targets.

    See the above discourse on path conversions.r��obj�targetr;z5'%s' can not be absolute path (see crbug.com/462153).)r�r!�toolsetr<r=�split�isabsr�r�rwro)rPr=�	qualifiedr��path_dir�
path_basenames      r%r�z!NinjaWriter.GypPathToUniqueOutput=s������d�#�#�D����s�#�#�)�)�T�)�)�)��C��|�x���	�S�4�<�
��c� �g�m�m�D�1�1��H�m��w�}�}�X�&�&�L�L�?�(�J�L�L�L��6��i�#�o�
�5�m�
�7���B�G�L�L��d�m�X�)6�8�8�9�9�9r'c�@�|d�|D��ks
J|���t|��dkr|rJ�dSt|��dks|rO|�|dz��}|j�|d||���}|j���|dS)z�Given a list of targets, return a path for a single file
    representing the result of building all the targets or None.

    Uses a stamp file if necessary.c��g|]}|�|��Srgrg)�.0�ts  r%�
<listcomp>z:NinjaWriter.WriteCollapsedDependencies.<locals>.<listcomp>gs��/�/�/�Q�Q�/�q�/�/�/r'rN��.stamp�stamp��
order_only)r"r�rr�build�newline)rPr��targetsr�r�s     r%�WriteCollapsedDependenciesz&NinjaWriter.WriteCollapsedDependenciesas����/�/�'�/�/�/�/�/�/��/�/�/�
�7�|�|�q�������
�T�
�7�|�|�a���:���(�(����9�9�e��
� � ����Z� �P�P�g�
�j�������1�:�r'c�f�tj�|j��d}|�d|�d�S)Nrr;�.ninja)r<r=r>rt)rPr@�output_file_bases   r%�_SubninjaNameForArchz NinjaWriter._SubninjaNameForArchqs5���w�'�'��(=�>�>�q�A��,�,�,�d�d�d�3�3r'c	�^
��|�_|d�_|d�_|d|}t|d���_t|�dd�����_|�dd���_tj
��j|���_
d	x�_�_�jd
krHtj
�|���_|�dd	��}|r|�j_�jdkr�tj�||���_�j�|��}�j�d
�j|���j�dd|z���j�dd|z���j�dd|z���j�dd|z���j�dd|z���jd
kr\�j�|���_t5�j��dkr%t7�fd��jD�����_g}g}d|vr�|dD]}	|	�jvrt�j|	}
|�|
��j����|�|
� ����|
j!rd�j_!��d�|D��}d�|D��}��"d|��}��"d|��}|�j_#|�j_$g}g}��%||||���j_&�jj&p|}
g}	||�dg��z}n\#tN$rOtQdtS|����tQdtS|�d�������wxYw|�rw�jd
krOt5�j��dkr7�jD]/}�j�*��+|�����0d	}�jdkrdtj�,|�j-|�j.��tj�/�j|�j.�j0�j1��}n.tj
�2�j�j.�fd ���}��3�j||||
||��}�fd!�|D��}|rM�jd
kst5�j��dkr|�fd"�|D��z
}nUtQd#|dz��n<�jd
kr1t5�j��dkrtij5tl��}�jj&p|}�jdkr(�jj7d$kr|�j_8|�j_9d	}|o|}|s�jj&s|r5��:|||||��}�j
r|�|���j
r��;|||��}|sd	S�j�<��s
J|����jS)%z�The main entry point for NinjaWriter: write the build rules for a spec.

    Returns a Target object, which represents the output paths for this spec.
    Returns None if there are no outputs (e.g. a settings-only 'none' type
    target).�target_namer��configurationsrF�standalone_static_libraryr�target_rpathz\$$ORIGIN/lib/Nr��mac_toolchain_dirr)r@�ccz$cl_�cxx�cc_host�cxx_host�asmz$ml_r�c3���K�|]^}|tjttj��j��|����d����fV��_dS)�wN)r6rq�
OpenOutputr<r=rwrsr�)r�r@rPs  �r%�	<genexpr>z(NinjaWriter.WriteSpec.<locals>.<genexpr>�s������#$�#$�
�	�<�&��2�7�<�<��(;�(,�(A�(A�$�(G�(G�I�I�� � �!�!�
"�#$�#$�#$�#$�#$�#$r'�dependenciesTc��g|]}|�|��Srgrg�r�r8s  r%r�z)NinjaWriter.WriteSpec.<locals>.<listcomp>����9�9�9�q�q�9��9�9�9r'c��g|]}|�|��Srgrgr�s  r%r�z)NinjaWriter.WriteSpec.<locals>.<listcomp>�r�r'�actions_depends�compile_depends�sourceszextra_sources: zspec.get("sources"): c�:����|dz|z��S)N�-)r�)r=�langrPs  �r%�<lambda>z'NinjaWriter.WriteSpec.<locals>.<lambda>�s���t�9�9�$��*�t�:K�L�L�r'c�H��g|]}|��j���|��Srg)�endswithrx�r��frPs  �r%r�z)NinjaWriter.WriteSpec.<locals>.<listcomp>�s,���D�D�D�1�1�:�:�d�l�+C�+C�D�Q�D�D�Dr'c�:��g|]}��|����Srg�r�)r��orPs  �r%r�z)NinjaWriter.WriteSpec.<locals>.<listcomp>�s'���D�D�D�1��+�+�A�.�.�D�D�Dr'zdWarning: Actions/rules writing object files don't work with multiarch targets, dropping. (target %s)rS)=r�r�r�rDr��bool�get�is_standalone_static_libraryr�r-r��IsMacBundler1�
is_mac_bundle�xcode_settingsr��
XcodeSettingsr�r.�MsvsSettings�GetArchrr�variablery�GetActiveArchs�archsr"�dict�arch_subninjasrn�appendr_rarOr�rGrH�WriteActionsRulesCopiesrI�	TypeError�print�str�subninjar��VerifyMissingSourcesrur��PrecompiledHeaderr�rx�MacPrefixHeader�WriteSources�collections�defaultdict�listrFrLrM�WriteTarget�WriteMacBundler^)rP�specr��generator_flagsr�r�r@r�r��depr��
extra_sources�mac_bundle_depends�compile_depends_stamp�	link_depsr��pch�obj_outputsrMr?�is_empty_bundles`                    r%�	WriteSpeczNinjaWriter.WriteSpecus<���#�D���]�#�D�I��	�?�D�L�
�"�
#�K�
0�F���f��&�&�D�K�(,����,�a�0�0�)2�)2�D�%�(�+�+�N�<M�N�N�D���,�8�8���d�K�K�D��/3�3�D��$�,��{�e����/�=�=�d�C�C�d��)�-�-�.A�4�H�H��	�B�0A���-��{�e����-�:�:�4�;J�L�L�d��
�
�
'�
'��
4�
4�d�
�j���&�$�,�t�"4�5�5�5�
�j���$���
�.�.�.�
�j���%��$��/�/�/�
�j���)�V�d�]�3�3�3�
�j���*�f�t�m�4�4�4�
�j���%��$��/�/�/��{�e����&�5�5�k�B�B�d�j�	�T�Z���1�	�	�"�#$�#$�#$�#$�
�
�#$�#$�#$�$�$����O��O������n�%�(�(�#��$�%�%�%��&�s�+�&�
�
 �
 ��!6�!6�t�{�!C�!C�
D�
D�
D�
�
 �
 ��!7�!7�!9�!9�
:�
:�
:�
�_�(�#'�D�K� ��9�9�O�9�9�9�o�9�9�O�9�9�9�o��7�7�8I�8G�I�I�o��7�7�8I�8G�I�I�o�$3�d�k�!�%4�d�k�"�
�M��� $� <� <��m�_�.@�!B�!B�D�K��"�[�6�I�/���I�������B� 7� 7�7�g�g��������s�=�1�1�2�2�2��#�S����)�)<�)<�%=�%=�>�>�>�������0�	
���	�	�#�d�j�/�/�A�"5�"5��J�	?�	?�D�
�*�
�
�d�7�7��=�=�
>�
>�
>�
>��c�	
���	�	���/�/��T�'��$�:M�	O�	O�	O�� �2�2����T�-@��&���6�6����!�1�1����!4�L�L�L�L�N�N���#�#�
�*�k�6�7�4I�3�
���i�E�D�D�D��D�D�D�k�	�%��;�%���3�t�z�?�?�a�#7�#7�
�D�D�D�D��D�D�D�
D�)�)�
�;��]�#�$�%�%�%��
���	�	�#�d�j�/�/�A�"5�"5��)�$�/�/�i��;�,�?��L��{�e����� 0�4D� D� D�#,�d�k� �!-�d�k���F�#�m�>�,>�(>�O��*�D�K�-�*��*�����k�6�9� ,�.�.�f�	
�	�*��!�!�&�)�)�)���N��"�"�4�);�_�M�M�f���
�T��;�"�"�$�$�,�,�f�,�,�,��;�s
�)O�APc�����	��j���j��\�	}}}���	���	d	�	��fd�	���	fd�|D��}�fd�|D��}|�d�	f��|�d|f�������}�j�|d|||���|�|��dS)
zhHandle the implicit VS .idl rule for one source file. Fills |outputs|
    with files that are generated.Nc�H��tj��|��}tj����\}}tj�|��\}}��|||�||��}|r tj�||��}|Sr )r<r=rwr�r>r��relpath)	r=�relr��basenamer�r��outdirrPr�s	      ���r%�fix_pathz)NinjaWriter._WinIdlRule.<locals>.fix_paths����
�W�\�\�&�$�
'�
'�d��'�-�-��/�/��g�x��'�"�"�8�,�,�i�d�C�
�
%�
%�
��g�v�s�H�6�6�d�	�*��w���t�S�)�)��
�kr'c�2��g|]\}}|�|���f��Srgrg)r�r��valuerrs   ��r%r�z+NinjaWriter._WinIdlRule.<locals>.<listcomp>s.���D�D�D���e�T�8�8�E�6�*�*�+�D�D�Dr'c�&��g|]
}�|����Srgrg)r��prs  �r%r�z+NinjaWriter._WinIdlRule.<locals>.<listcomp>s!���
*�
*�
*�a�h�h�q�k�k�
*�
*�
*r'r�idlflags�idl��	variablesr�r )r��GetIdlBuildDatar�r�r�rrr��extend)
rPr��prebuild�outputsr?�vars�flags�inputrrs
``      @@r%�_WinIdlRulezNinjaWriter._WinIdlRules'������#'�"4�"D�"D��� �#"�#"��F�F�D�%�
�
 �
 ��
(�
(�F���������E�D�D�D�D�t�D�D�D�D�
*�
*�
*�
*�6�
*�
*�
*�F��K�K��6�"�#�#�#��K�K��U�#�$�$�$�����'�'�E��J���V�U�E��8��-�-�-��N�N�6�����r'c��|jdksJ�|j�|��rgSg}td�|d��D]}|�|||���|S)z3Writes rules to match MSVS's implicit idl handling.r)c�,�|�d��S)Nz.idl�r���xs r%r�z.NinjaWriter.WriteWinIdlFiles.<locals>.<lambda>*s��1�:�:�f�#5�#5�r'r�)r1r��HasExplicitIdlRulesOrActions�filterr)rPr�rrr�s     r%�WriteWinIdlFileszNinjaWriter.WriteWinIdlFiles$sy���;�%�������6�6�t�<�<��
�i��G��5�5�t�I��G�G�2�2��
���v�x��1�1�1�1��Nr'c��g}|jr|�dg��dd�}ng}g}d|vr!||�|d|||��z
}d|vr"||�|d||||��z
}d|vr ||�|d||��z
}d|vr$|jdkr||�||��z
}|jr0|j���r|�	|||��|�
d|��}|jrE|�||z|��}	|�|	|��}
|�
|
|��|S)	zkWrite out the Actions, Rules, and Copies steps.  Return a path
    representing the outputs of these steps.�mac_bundle_resourcesN�actions�rules�copiesr�r)�actions_rules_copies)r�r��WriteActions�
WriteRules�WriteCopiesr1r$r��IsIosFramework�WriteiOSFrameworkHeadersr��WriteMacBundleResources�WriteMacXCassets�WriteMacInfoPlist)rPr�r�rr�rr&�extra_mac_bundle_resourcesr��xcassets�partial_info_plists           r%r�z#NinjaWriter.WriteActionsRulesCopies.s����G��� �!�X�X�&<�b�A�A�!�!�!�D�����!#���D���
��"�"�4�	�?�M�8�#=�?�?�?�g��$���
�����g��
�x�!5�!;�=�=�=�g��4���
��!�!�$�x�.�(�<N�O�O�O�g��D���T�[�E�1�1�
��&�&�t�X�6�6�6�g���=�t�2�A�A�C�C�=�
�#�#�D�'�8�<�<�<��+�+�,B�G�L�L�E���E��-�-�
$�';�
;�=O�Q�Q�h��0�0��;M�N�N��
���/�1C�D�D�D��Lr'c��|jdkr
|d|jzz
}|r|�d|�|����S|�d|j�d|��S)z�Generate and return a description of a build step.

    |verb| is the short summary, e.g. ACTION or RULE.
    |message| is a hand-written description, or None if not available.
    |fallback| is the gyp-level name of the step, usable as a fallback.
    r�z(%s)� z: )r�r�r�)rP�verb�message�fallbacks    r%�GenerateDescriptionzNinjaWriter.GenerateDescriptionSsc���|�x���
�f�t�|�#�#�d��7����d�0�0��9�9�9�
:�:� �D�D�$�)�)�)�X�X�
6�6r'c
���������g}|D�]�}|d�d�j��}��d|�dd��|��}�jdkr�j�|��nd}	|d}
|�dd��}|r��|��}t|�d	d
����rdnd}��	||
||	�||���\}
}��fd
�|dD��}t|�dd����r||dz
}t|�dd����r||dz
}��fd�|dD��}�j
�||
||���||z
}�j
������|S)N�action_name�_�ACTIONr9r)F�action�depfile�ninja_use_consoler�console)rAc�<��g|]}��|�����Srgr��r��ir�rPs  ��r%r�z,NinjaWriter.WriteActions.<locals>.<listcomp>ws)���F�F�F���#�#�A�s�+�+�F�F�Fr'�inputs�process_outputs_as_sourcesr�'process_outputs_as_mac_bundle_resourcesc�<��g|]}��|�����Srgr��r�r�r�rPs  ��r%r�z,NinjaWriter.WriteActions.<locals>.<listcomp>|s)���H�H�H���$�$�Q��,�,�H�H�Hr'r�)
�GetToolchainEnvrmr;r�r1r��IsRuleRunUnderCygwinr��int�WriteNewNinjaRulerrr�r�)rPr'r�rr3�all_outputsr@r��description�	is_cygwin�argsrA�pool�	rule_namer>rGrr�s`                @r%r+zNinjaWriter.WriteActionsas�����
�
�
 �
 �C��K������}�-�-�-�t�/B�/B�
C�d��,�,�X�-3�Z�Z�	�4�-H�-H�-1�3�3�k��k�U�*�*��%�:�:�6�B�B�B�05��
�H�
�d��
�
�9�d�+�+�g�	�.��$�$�W�-�-���f�j�j�)<�a�@�@�A�A�
K�Y�Y�t�d��+�+�D�$��,5�s�D�4;�,�=�=�l�i��G�F�F�F�F�V�H�5E�F�F�F�f�	�V�Z�Z�4�e�
<�
<�	=�	=�+���	�*�*�
�	�V�Z�Z�A�5�
I�
I�	J�	J�8�"�f�Y�&7�7�"�H�H�H�H�H�f�Y�6G�H�H�H�g��j���w�	�6�"*��,�,�,��W��k�
�j��������r'c�(	�������� ������g}|D�]o}d|vr|�dg��s�|d�d�j��}|d}	��d|�dd��dtdz|z��}
�jd	kr�j�|��nd
�t|�dd����rd
nd}��	||	|
��|��\}}	d}
tdg��}|	D]#}|
D]}d|z|vr|�|����$t|��}�fd�}��fd�|�dg��D��}|�dg��}t|��}|r|dz
}|dkr4t|��dkr!��|d||���g}g}|D�]�� tj�� ��� tj�� ��\��tj����\�������� fd�|dD��}t|�dd
����r||z
}� |v}|s#t|�dd
����r||z
}|r|�� ��g}|D�]}|dkr!|�d|���f���*|dkr<����j��}|�d||��f���l|dkr<��� �j��}|�d||��f����|dkr|�d�f����|dkr!|�d|���f����|dksJt1|���������fd�|D��}�jd	krS|�d t3jt7j|d�������f���j�||�� � ��|||�!��|�!|�������q|S)"Nr@�rule_sourcesrUr>�RULEr9z%s rr)FrBrrC)r�r�r�r�r�r�z${%s}c�8���r|�dd��S|S)Nr�r�)r0)r=rRs �r%�cygwin_mungez,NinjaWriter.WriteRules.<locals>.cygwin_munge�s$����	)����d�C�(�(�
(��r'c�<��g|]}��|�����Srgr�rEs  ��r%r�z*NinjaWriter.WriteRules.<locals>.<listcomp>�s)���L�L�L���#�#�A�s�+�+�L�L�Lr'rGr��r�c
�D��g|]}��|���������Srg)r�)r�r�r
r�r�r�rPr�s  ������r%r�z*NinjaWriter.WriteRules.<locals>.<listcomp>�sH���-�-�-���+�+�A�t�W�,2�C��C�C�-�-�-r'rrHrIr�r�r�r�c�<��g|]}��|�����Srgr�rKs  ��r%r�z*NinjaWriter.WriteRules.<locals>.<listcomp>�s)���@�@�@�1�4�&�&�q�#�.�.�@�@�@r'�unique_name��implicitr�r)"rLr�rmr;r�r1r�rMrNrO�set�add�sortedr"r�r<r=r�r�r>�remover�r�r}�repr�hashlib�md5�six�
ensure_binary�	hexdigestrrr�r�r)!rPr(r�rr&r3rP�ruler�rSrQrTrU�special_locals�needed_variables�argument�varrZrGr��
num_inputsr�was_mac_bundle_resource�extra_bindings�dirname_expanded�source_expandedr
r�r�r�rRr�r�s!`                         @@@@@@@r%r,zNinjaWriter.WriteRules�s�����������
�
�
�
 �
 �C��K��o$�o$��	��	�	�d�h�h�~�r�&B�&B�	���[�)�)�)�4�+>�+>�
?�d�
�(�^�d��,�,�
�
�(�(�9�d�
#�
#��.�/@�A�A�T�
I�K�K�k�
�k�U�*�*��%�:�:�4�@�@�@�05���d�h�h�':�A�>�>�?�?�
I�Y�Y�T�d��.�.�
��k�9�c�4�9�9�o�i��D�n��h�Z�����&�&�(�!�	&�	&�C�
�s�]�h�
&�
&�� � ��%�%�%��	&� � 0�1�1�������M�L�L�L�L�T�X�X�h��5K�5K�L�L�L�f�
�����,�,�g��v�;�;�j�	���a��
�	�a���C��L�L�1�,�,��1�1�
�{�
�V��2�:�:�;�����9$�9$�&���!�!�&�)�)���G�M�M�&�1�1�����G�$�$�X�.�.�	��c�-�-�-�-�-�-�-�-�-� ��O�-�-�-���t�x�x�4�e�<�<�=�=�	#�
�7�
"�-�"(�,@�"@��"�	0�����B�E�J�J�K�K�	0�
$��
/�
$�%�0� �'�'��/�/�/���#�	*�	*�C�
�F�]�]��!�!�6�<�<��+=�+=�">�?�?�?�?��i��� $�1�1�'�4�;M�N�N���!�!�9�l�l�;K�.L�.L�"M�N�N�N�N��h���#�0�0���9K�L�L�O��!�!�8�\�\�/�-J�-J�"K�L�L�L�L��e�|�|��!�!�5�#�,�/�/�/�/��f�}�}��!�!�6�<�<��+A�+A�"B�C�C�C�C��$�;�;�;��S�	�	�;�;�;�;�@�@�@�@�@��@�@�@���;�%���
�
�
���k�#�+�G�A�J�7�7�8�8�B�B�D�D�!F�G�G�G�	
�
����)�T�-@�-@��-H�-H�"(�$,�#1�	�	3�	3�	3�
	���7�#�#�#�#�s9$�v�r'c	���g}|jr0|j���}|�|���}n|���}|D�]
}|dD�]}tj�|��}tj�|��d}	|�||��}
|�tj�|d|	��|��}||j	�
|d|
|���z
}|jrA|�|j�
����r|�|������|S)N��additional_settings�filesr��destination�copyr�)r��GetPerTargetSettingsrLr<r=r�r�r�rwrrr�r�r!�GetBundleContentsFolderPathr�)rPr)rr�r�	extra_envr�r{r=r
�src�dsts            r%r-zNinjaWriter.WriteCopies�sV���G���#��%�:�:�<�<�i�� � �Y� �?�?�c�c�� � �"�"�c��+�+���w�-�+�+�$��w����%�%���7�=�=��&�&�q�)���!�!�$��,�,���!�!�"�'�,�,�t�M�/B�H�"M�"M�"%�'�'���4�:�#�#�C����#�J�J�J����	+��^�^�D�/�K�K�M�M�
N�
N�+��%�%�c�*�*�*��!+�$�Nr'c	�r�|���}|d}|d}|�d��}||j_t	|jt
d�|����}d|fdt	|j|��fg}	|�|j�	|d||	|�����d	S)
zFPrebuild steps to generate hmap files and copy headers to destination.r��mac_framework_headerszheaders.hmapc�,�|�d��S)Nz.hrr s r%r�z6NinjaWriter.WriteiOSFrameworkHeaders.<locals>.<lambda>"s��a�j�j�$�&8�&8�r'�	framework�copy_headers�compile_ios_framework_headersrN)
�ComputeMacBundleOutputr�r��header_map_path�mapr�r#rrrr�)
rPr�rrr��all_sourcesr�r?�all_headersrs
          r%r/z$NinjaWriter.WriteiOSFrameworkHeaderss����+�+�-�-�I��y�/�K��/�0�L�
�
'�
'��
7�
7�F�*0�D��'��d�)��8�8�+�F�F�H�H�K��y�)� �#�d�&9�<�"H�"H�I�K�I��N�N�4�:�#�#��/����$�2�2�3�3�3�3�3r'c
��g}|j���}|�|���}|�|��}|j�|j��}tj�td|jt|j|����D]�\}}|�|��}tj�|��ddkr;|j�|d|dd|fd|fg�	��|�|���~|�|����|S)
z.Writes ninja edges for 'mac_bundle_resources'.rwr���z	.xcassets�mac_tool)�mactool_cmdzcopy-bundle-resourcer�rJ�r)r�r|�GetSortedXcodeEnv�ComputeExportEnvString�IsBinaryOutputFormatr�r-r��GetMacBundleResourcesr�r�r�r�r<r=r>rrr�r�)	rP�	resources�bundle_dependsr4r~r��isBinaryr?�ress	         r%r0z#NinjaWriter.WriteMacBundleResources)sI���H��#�8�8�:�:�I�
�
 �
 �Y�
 �
?�
?�C�
�
%�
%�c�
*�
*�C��"�7�7��8H�I�I�H��*�@�@�#�M�2���S��!4�i�@�@�B�B�
�
�����!�!�&�)�)�f�	��	�	�&�	!�	!�"�	%��	4�	4��
�����S�$K�%*�C�L�8�X�2F�$H�	�	I�	I�	I�	���f�%�%�%�%����������Or'c
��|sdSi}ddd�}|jj|j}|���D]!\}}|�|��}|r|||<�"d}	|r|�d��}	|	|d<g}
|
�tj�|j�	��d����|	r|
�|	��ttj|��|j
��}|j���}|�|���}
|�|
��}
|�|j�|
d	|d
|
fd|fg�����|	S)
a�Writes ninja edges for 'mac_bundle_resources' .xcassets files.

    This add an invocation of 'actool' via the 'mac_tool.py' helper script.
    It assumes that the assets catalogs define at least one imageset and
    thus an Assets.car file will be generated in the application resources
    directory. If this is not the case, then the build will probably be done
    at each invocation of ninja.Nzapp-iconzlaunch-image)�XCASSETS_APP_ICON�XCASSETS_LAUNCH_IMAGEz!assetcatalog_generated_info.plistzoutput-partial-info-plistz
Assets.carrw�compile_xcassetsr��keysr�)r�r��itemsr�r�r�r<r=rw�GetBundleResourceFolderr2�json�dumpsr1r|r�r�rrrr�)rPr4r��extra_arguments�settings_to_arg�settings�settings_key�arg_namerr5rr�r~r�s              r%r1zNinjaWriter.WriteMacXCassets?s����
��f��O�'�!/���O��"�1�$�2B�C�H�"1�"7�"7�"9�"9�*�*���h��l�l�<�(�(�e�	�*�$)���!�����H��5�5�
-�/�/��5G�o�1�2��G��N�N�
������7�7�9�9��	�	�����)�
�n�n�'�(�(�(��d�j��9�9�4�;�G�G�D��#�8�8�:�:�I�
�
 �
 �Y�
 �
?�
?�C�
�
%�
%�c�
*�
*�C����$�*�*�*��#�X��3�<�&�$��0�+�2�2�3�3�3��r'c	���tj�td�j�j��\}}}}|sdS��|��}|rt��tj	�
|����}d��fd�|D����}�j�
|d|d|fg���}��|���}��|��}|r3��d	��}�j�
|d
||g��}�j��j��}	t%t'j|	���j��}	�j��j��}
�j�
|d|d|fd
|	fd|
fg���|�|��dS)z.Write build rules for bundle Info.plist files.rNr7c�:��g|]}t|�j����Srg�r9r1�r�r8rPs  �r%r�z1NinjaWriter.WriteMacInfoPlist.<locals>.<listcomp>ys%���B�B�B�Q�&��D�K�0�0�B�B�Br'�preprocess_infoplist�definesr�rwzmerged_info.plist�merge_infoplist�copy_infoplistr�r�rJ)r-r��GetMacInfoPlistr�r�r�r�r�r<r=r
rwrrr�r�r��GetExtraPlistItemsr�r2r�r�r1r�r�)rPr5r��
info_plist�outr�r~�intermediate_plistr�r�r�s`          r%r2zNinjaWriter.WriteMacInfoPlistms����*-�*=�*M�*M�#�M�2���T�0�+2�+2�'�J��W�i��
��f�
�
�
�S�
!�
!�C��+��5�5�
�'�
�
�:�
&�
&�(�(�����B�B�B�B�'�B�B�B�C�C�g��:�#�#�
�4�j���(�)�$�+�+�j��
 �
 �Y�
 �
?�
?�C�
�
%�
%�c�
*�
*�C��,��5�5�6I�J�J���:�#�#�
�/��z�
*�,�,�j���1�1�$�2B�C�C�D��d�j��.�.���<�<�D��"�7�7��8H�I�I�H��J���S�*�J�!&���v�t�n�!)�8� 4� 6��7�7�7����#�����r'c	�r���������jdkr��j�dd���j�dd���j�dd���j�dd	���j�d
d���j�dd
���j�dd���jdkst	�j��dkr ���j��������St�������fd��jD����S)�.Write build rules to compile all of |sources|.�host�arz$ar_hostr��$cc_hostr��	$cxx_host�ldz$ld_host�ldxxz
$ldxx_host�nmz$nm_host�readelfz
$readelf_hostr�r�c3�l�K�|].}|���j|������|���fV��/dS)�r@N)�WriteSourcesForArchr�)	r�r@r�r��precompiled_header�
predependsrPr�r�s	  �������r%r�z+NinjaWriter.WriteSources.<locals>.<genexpr>�so�����"�"����1�1����%�{�F�G�Z���4�2�1�1�2�"�"�"�"�"�"r')r�rrr�r1r"r�r�r�)rP�
ninja_filer�r�r�r�r�r�s` ``````r%r�zNinjaWriter.WriteSources�se����������|�v���
�j���$�
�+�+�+�
�j���$�
�+�+�+�
�j���%��-�-�-�
�j���$�
�+�+�+�
�j���&�,�/�/�/�
�j���$�
�+�+�+�
�j���)�_�5�5�5��{�e���s�4�:���!�3�3�
�
%�
%�
�*�k�6�7�J�
�d�$�$�$��"�"�"�"�"�"�"�"�"�"��j�"�"�"�"�"�"r'c	
�n��'�g}	�jdkr��j�||���}
�j�|��}�j�|��}dg�j�|��z}
dg�j�|��z}�n��jdk�r`�j�|��}�j�|��}
�j�|��}�j�|��}�j�	|��}	�j�
|�j��x}}|sld}�jdkr
|d�jzz
}tj�tj�|�j�j����}|d	z}|d
z}��|d|g����|d|g����|d
�jg��nB|�dg��}
|�dg��}|�dg��}�jdkr�tj�dd�����tj�dd�����z|z}tj�dd�����tj�dd�����z|z}nۉjdkr�tj�dd�����tj�dd�����z|z}tj�dd�����tj�dd�����z|z}|�dg��|	z}��|d�fd�|D�����jdkrk��|dt/�j|������|d�fd��j�|�j��D����|�dg��}�����'�jdkr�j�||��}��|d�'�fd �|D�����jdkrU|�d!g��}�j�||��}��|d"�'�fd#�|D����|�|��}�jdkr6d$D]3\}}|�||��}|r|�||���4|�d%g��}��|dt/�j|
������|dt/�j|������|dt/�j|�����jdkrT��|d&t/�j|
������|d't/�j|������|d%t/�j|����|� ��g}d(}|D�]�}tj�!|��\}}|d)d*�}�j"} |d+vrd,}!d-�j#_$n�|d.ks|d/kr�jdkrd0}!n�|d1kr�jdkrd2}!n}�jdkr%|d3kr�j�%|��sd3}!d4} nM�jdkr	|d5krd6}!n9�jdkr|d7krd8}!d-�j#_$n�jdkr
|d9krd9}!d:} d-}n���|��}"��&|| z��}#|�tO|#|��}#|�(|"g|#g|��}$g}%�jdkr$|�)|"|#|$|!||�j��\}%}#}$|�*|#|!|"d;�|$D��||%�<��|�+|#�����|r:|�d=|��}&��|d>�'�fd?�|&D������,||��|� ��|S)@r�r�r�z	$cflags_cz
$cflags_ccr)r�r�r;z.c.pdbz.cc.pdb�	pdbname_c�
pdbname_cc�	pchprefix�cflags�cflags_c�	cflags_cc�CPPFLAGSr�CFLAGS�CXXFLAGSr��
CPPFLAGS_host�CFLAGS_host�
CXXFLAGS_hostr�c�:��g|]}t|�j����Srgr�r�s  �r%r�z3NinjaWriter.WriteSourcesForArch.<locals>.<listcomp>�s%���D�D�D�q�F�1�d�k�2�2�D�D�Dr'�asmflags�rcflagsc�`��g|]*}t��|���j����+Srg)r2r�r1r�s  �r%r�z3NinjaWriter.WriteSourcesForArch.<locals>.<listcomp>�sI���H�H�H���d�0�0��3�3�T�[�A�A�H�H�Hr'�include_dirs�includesc	�h��g|].}td��|���z�j����/S�z-I�r2r�r1rEs  ��r%r�z3NinjaWriter.WriteSourcesForArch.<locals>.<listcomp>�sJ���	 �	 �	 �
�
�D�4�#6�#6�q�#�#>�#>�>���	L�	L�	 �	 �	 r'�midl_include_dirs�
midl_includesc	�h��g|].}td��|���z�j����/Sr�r�rEs  ��r%r�z3NinjaWriter.WriteSourcesForArch.<locals>.<listcomp>�sJ���'�'�'���d�T�%8�%8��C�%@�%@�@�$�+�N�N�'�'�'r'))�c�cflags_pch_c)r��
cflags_pch_cc)�m�cflags_pch_objc)�mm�cflags_pch_objcc�arflags�cflags_objc�cflags_objccFr�N)r��cppr�r�Tr��Sr��s�cc_sr�z_asm.objr��objcr��objcxx�rcz.resc��g|]\}}}|��	Srgrg)r�r>�gchs   r%r�z3NinjaWriter.WriteSourcesForArch.<locals>.<listcomp>6s�� ?� ?� ?���A�s�� ?� ?� ?r'r`�resource_include_dirs�resource_includesc	�h��g|].}td��|���z�j����/Sr�r�rEs  ��r%r�z3NinjaWriter.WriteSourcesForArch.<locals>.<listcomp>=sJ���+�+�+���d�T�%8�%8��C�%@�%@�@�$�+�N�N�+�+�+r')-r1r��	GetCflags�
GetCflagsC�GetCflagsCC�
GetCflagsObjC�GetCflagsObjCCr��GetAsmflags�GetComputedDefines�GetCompilerPdbNamer�r�r<r=r�rwror��WriteVariableListr��environr�r��
GetRcflagsr�rL�AdjustIncludeDirs�AdjustMidlIncludeDirs�GetPchBuildCommands�
GetIncluder�r�r>rxr�rO�HasExplicitAsmRulesr�rB�GetObjDependencies�GetFlagsModificationsr�r��WritePchTargets)(rPr�r�r�r�r�r�r�r@�
extra_definesr�r�r�r�r�r��	pdbpath_c�
pdbpath_ccr��pdbpathr�r�r��pch_commandsr�rp�includer�r�
has_rc_sourcer��filenamerx�commandrr?rarr�r�s(`                                      @r%r�zNinjaWriter.WriteSourcesForArch�s$
�����M��{�e����"�,�,�[�t�,�D�D�f��$�/�/��<�<�h��%�1�1�+�>�>�i� �M��'�5�5�k�B�B�C�k�"�^��(�7�7��D�D�E�l�l�	
���	�	��#�/�/��<�<�h��!�+�+�K�8�8�f��#�.�.�{�;�;�h��$�0�0��=�=�i��(�;�;�K�H�H�m�#�1�D�D�
�t�)� +� +�+�i�*�
�)����<�8�#�#�

��t�|�#�
#�#��'�"�"�2�7�<�<��T�]�D�I�#N�#N�O�O���h�&�	��y�(�
�
���Z��y�k�B�B�B�
���Z��
�|�D�D�D�
���Z��t�y�k�B�B�B�B��z�z�(�B�'�'�f����J��+�+�h��*�*�[�"�-�-�i��|�x����*�.�.��R�0�0�6�6�8�8��*�.�.��2�.�.�4�4�6�6�7�9A�B�h��:�>�>�*�b�1�1�7�7�9�9��:�>�>�*�b�1�1�7�7�9�9�:�<E�F�i�i�	
���	�	��*�.�.��"�5�5�;�;�=�=��*�.�.���3�3�9�9�;�;�<�>F�G�h��:�>�>�/�2�6�6�<�<�>�>��:�>�>�/�2�6�6�<�<�>�>�?�AJ�K�i��j�j��B�'�'�-�7�G����:�y�D�D�D�D�G�D�D�D�F�F�F��{�e���
���Z�� ��!3�X�>�>�@�@�@�
���Z��H�H�H�H��&�1�1�+�26�2E�G�G�H�H�H�I�I�I�
�:�:�n�b�1�1�L�
�
�
�
 �
 �C��{�e����'�9�9�,�:E�G�G�l����:�z�	 �	 �	 �	 �	 ��	 �	 �	 �!�!�!��{�e��� �*�*�%8�"�=�=���,�B�B�
�[�*�*��
���Z��'�'�'�'�'�%�'�'�'�(�(�(�&�9�9�$�?�?�L��{�e���M�6�6�(�#�s�$�/�/��T�:�:���5�J�'�'��W�5�5�5���j�j��B�'�'�G����:�x��t�1�6�:�:�<�<�<����:�z��t�1�8�<�<�>�>�>����:�{��t�1�9�=�=�?�?�?��{�e���
���Z�� ��!3�[�A�A�C�C�C�
���Z�� ��!3�\�B�B�D�D�D����:�y��t�1�7�;�;�=�=�=��������G��M��*�*���g�&�&�v�.�.�m�h������G�c���g�	�$�	$�	$���#������#�:�:�#��*�*����)=�)=�����#�:�:�$�+��.�.�����K�5� � �S�E�\�\��"�6�6�t�<�<�&2�������;�%���C�3�J�J�����;�%���C�4�K�K���#������;�%���C�4�K�K������
�
�	��!�!�&�)�)�e��)�)�(�W�*<�=�=�f�	
�	����&�&��#�6�6��w���$�O�O�h��i�	
���	�	�&8�&N�&N��6�8�W�h�	���' �' �#�	�6�8����v�w�� ?� ?�h� ?� ?� ?�",�	��C�C�C��n�n�V������,�$�j�j�)@�,�O�O��
���Z�)<�+�+�+�+�+�)�+�+�+�,�,�,�	����\�2�2�2��������Nr'c��|sdS|D]L\}}}}ddddd�|}ddd	d
d�}|�|��}	|�||	|||fg����MdS)z-Writes ninja rules to compile prefix headers.Nr�r�r�r�)r�r�r�r�r�r�r�r�r�)r�r�)
rPr�r
r��	lang_flagr�r�var_namer��cmds
          r%rzNinjaWriter.WritePchTargetsEs����
��f�'3�
K�
K�#��Y��e�
��
� �	��
	
��h��u�6��D�D�c��G�G�D�M�M�c����s�C��H�i�3H�2I��J�J�J�J�
K�
Kr'c�
��������jdkst�j��dkr���j�������S�����}������fd��jD��}g}|}	�js��|�||���ddvrB�js;|�d|f���j�	||dzgd||�	��n�j�	|	d
||�	��|S)�0Write out a link step. Fills out target.binary. r�r�c�j��g|]/}���j|����|�|�����0S)r�)�WriteLinkForArchr�)r�r@rMr�r�rrPr�s  ������r%r�z)NinjaWriter.WriteLink.<locals>.<listcomp>]s\���(�(�(���%�%�d�&9�$�&?��&1�6�9�T�?�&2��&�?�?�(�(�(r'rFrXrr]�solipor��lipo)
r1r"r�rrr�
ComputeOutputr��AppendPostbuildVariabler�r�)
rPr�r�r�rrMr?rGrs�build_outputs
``````    r%�	WriteLinkzNinjaWriter.WriteLinkVso���������{�e���s�4�:���!�3�3�
�
"�
"�
�*�d�K���L�J�J�J��!�!�$�'�'�f�(�(�(�(�(�(�(�(�(�!�J�(�(�(�f��n��l�
�
�K��$�$�^�T�6�6�J�J�J��v�,�?�
?�
?�� �@����u�f�o�.�.�.��
���&�&�6�/�2�H�f�$�	�	&�	&�	&�	&�	
�
����v�v���P�P�P�
�mr'c	����dddd�|d}d}	t��}
t��}t��}|r|�|��d|v�r�t��}
|dD�]k}�j�|��}|s� |���}|r�g}�jdkrJ|jrC�j����r)|j}|j	r|�|j	��nu�jdkr|j
r	|j
g}nZ|��j��r8|�|j��|
�|jd	z��n|jg}|D]0}||
vr*|
�|��|�
|���1|���}|r||jkr|
�|����mg}�jjr �jdkr|�
d
����||��}|��js��||||��|ddk}�jd
kr3t*j�dd�����}n=�jdkr2t*j�dd�����}�jdkrG�j����t6d���j|��}||z}�n��jdk�r����|����}�j���j�j|||�j��\}}}||z}�� |d|��|
�!|��}
|r�� |d|g��tE�j�#�����}	�j�$�j��}|r|
�|��n�||�dg��z}|rttK|��red}�jd
kr#|�jz
}|�
d|z��n|�
d�j&z��|�
d|z���� |dtO�j|����|�dg��}�jdkr��fd�|D��}�fd�|D��}n�fd�|D��}tPj)�*tO�j|�dg������}�jdkr�j�+|���}n%�jdkr�j�+|��}�� |d||z��|} |d v�r�|�
d!t*j,�|��d"f��|�
d#tPj)�-|��f���jdkr{|}!�jr�j�.��}!|r|!d$|zz
}!|!d%z
}!|!�/d&d'��}!|�
d(tPj)�-|!��f���jdkr�|�
d)|f��d*|vr��j�0���s||d+z�j_
|�
d,d-�jj
zf���j�1��j|d.z��}"|�jj
g}|"r|�
|"��na�js||d	zg}nR|d/z}nL�jdkrA|�
d)|f���j�1��j|d.z��}"|"r||"g}tK|��rA|�
d0tPj)�2tg|����f��|�4|||	z|tg|
��tk|��|�1��| S)2r�link�
solink_module�solink)�
executablerYrTrFrr�r)r])r�z$ldxxNr!r��LDFLAGSr��LDFLAGS_hostr�r�	manifests�intermediatemanifest�ldflagszlib/z-Wl,-rpath=\$$ORIGIN/%sz
-Wl,-rpath=%sz-Wl,-rpath-link=%s�library_dirsc�F��g|]}�j�|�����Srg)r�r�)r��lr�rPs  ��r%r�z0NinjaWriter.WriteLinkForArch.<locals>.<listcomp>�s<���-�-�-���(�8�8��K�H�H�-�-�-r'c�f��g|]-}dt��|���j��z��.S)z	/LIBPATH:r��r�r)rPs  �r%r�z0NinjaWriter.WriteLinkForArch.<locals>.<listcomp>�sS���-�-�-��"�$6�t�7J�7J�1�7M�7M�7;�{�%D�%D�D�-�-�-r'c�f��g|]-}td��|��z�j����.S)z-Lr�r+s  �r%r�z0NinjaWriter.WriteLinkForArch.<locals>.<listcomp>�sM���-�-�-��)���0C�0C�A�0F�0F�)F�)-��6�6�-�-�-r'�	libraries�libs)r r�sonamer�rr;z.rspr7r>�link_file_listrJz/NOENTRYz.lib�
implibflagz
/IMPLIB:%sz.pdb�_notoc�solibsr`)6rbrcrnr�rVr1rLr��IsUseLibraryDependencyInputsrMrNr[rJr�r^r�rOrr�rr�r<r�r�r��
GetLdflagsr�r�r�r��ComputeOutputFileNamersr��union�_GetWinLinkRuleNameSuffix�IsEmbedManifest�
GetDefFiler"r�r�r-rz�uniquer�AdjustLibrariesr=�EncodePOSIXShellArgument�GetWrapperNamer0�GetNoImportLibrary�
GetPDBName�EncodePOSIXShellListrdr�r�)#rPr�r�r�r�rrMr@r�command_suffix�
implicit_depsr3�
order_deps�extra_link_depsr�r��linkable�new_deps�new_dep�final_outputrsr?�
is_executable�env_ldflagsr&�manifest_base_name�intermediate_manifest�manifest_files�def_file�rpathr'r-�
linked_binaryr0�pdbnames#`  `                               r%rzNinjaWriter.WriteLinkForArchqs�	���� �(�!����6�l�	�G�
�N��E�E�M�
�U�U�F����J��#��n�n�\�"�"�"�����
���o��n�%�*�*�#��$�(�(��-�-���	�
��?�?�$�$���	(��(��k�U�"�"��#�#�� �=�=�k�J�J�#��,�H��"�
2��n�n�V�0�1�1�1���{�e�#�#��(9�#��)�*�H�H��~�~�d�k�*�*�'��J�J�v�}�%�%�%����f�m�f�4�5�5�5�5��
��H�!�(�(�g��o�-�-��!�!�'�*�*�*����w�'�'�'���)�)�+�+���	*�<�6�=�8�8�
�
�
�L�
)�
)�
)���N��{��-���u� 4� 4����O�,�,�,�
�
�
��d�
+�
+�F��|�D�.�|�
�"�"�>�4���H�H�H���L�L�0�M��|�x����J�N�N�9�b�1�1�7�7�9�9�k�k�	
���	�	��J�N�N�>�2�6�6�<�<�>�>�k��{�e����#�.�.�{�
�
�
�8��G�
H�
H�
�
�t�%�%�g��g�%�g�g�	
���	�	��5�5�
�
$�
$�T�
*�
*�,�,���
�
'�
'��T�5H�(,�(:�<N�(.�
�(,�(;�=�=�5�g�$�n�
�g�%�g�
���Z��n�E�E�E�#�)�)�.�9�9�m�	�I�����.�1F�0G�	I�	I�	I�0�
�
�
,�
,�[�
9�
9�;�;�n��#�.�.�t�/B�C�C�h�	�$����(�#�#�#���f�j�j��B�7�7�7�g�	�5�3�v�;�;�5����<�8�#�#�
�4�<�
�%�
�.�.�3�e�;�
<�
<�
<�
<�
�.�.��4�+<�<�
=�
=�
=����+�e�3�4�4�4����:�y��t�1�7�;�;�=�=�=��:�:�n�b�1�1�L��{�e���-�-�-�-�-�+�-�-�-�l�-�-�-�-�+�-�-�-�l�l�-�-�-�-�+�-�-�-�l��
�"�"�3�t�'9�'+�x�x��R�'@�'@�$B�$B�C�C�I��{�e����%�5�5�i��M�M�i�i�	
���	�	��$�4�4�Y�?�?�i����:�v�|�i�/G�H�H�H��M��-�-�-����X�r�w�}�}�V�'<�'<�Q�'?�@�A�A�A����U��J�?�?��G�G�I�J�J�J�	
���	�	�����	@� �.�=�=�?�?�.��	'�
�C�$�J�
&�.��&� ��
(�/�/��S�9�9�������J�/�/��?�?�A�	B�	B�	B�
���	�	����x��0�1�1�1��g�%�%��"�5�5�k�B�B�
&�#)�F�?�$�+�
 �
�
�
��!-���0F�!F�!H�I�I�I��&�1�1��4�-�v���@�@�'��D�K�2�3�&�
�#��M�M�'�"�"�"���!�%��&�6�/�*����H�$���	
���	�	����X�v�.�/�/�/��"�-�-�
�t�)�6�F�?�<�<�g�	�#��'�"���6�{�{�<����X�

�*�
)�
)�&��.�.�
9�
9�;�<�<�<����V�W�~�5�y�$�]�3�3� $�Z� 0� 0�-��/�/�/��r'c�4��t�fd�|�dg��D����}|ddks|s|s|�j_d�j_�n3|ddk�r��|���j_�jdvr1�js*�j�	�jjd||����n�g}�j
r3�j
�|��}|r|�d	|f���j
r7�j
�|�j��}	|�d
|	f���jdkst!�j��dkrV��||�jj�jj���j�	�jjd
|||���n�g}
�jD]X}��||��}�j|�	|d
||||���|
�|���Y��||�jj�jj���j�	�jjd
|
|���n#��|||||���j_�jjS)Nc3��K�|]9}|�jv��j�|�����V��:dSr )rnr�rV)r�r�rPs  �r%r�z*NinjaWriter.WriteTarget.<locals>.<genexpr>/sZ�����9�9�!� �D�$7�7�7��-�1�1�#�6�6�?�?�A�A�7�7�7�7�9�9r'r�rF�nonerS)r��openbsd�netbsdr)�
alink_thinr��
libtool_flags�libflagsr�r��alink)r�rr�)�anyr�r�rJrFrr1r�rrr�r��GetLibtoolflagsr�r��GetLibFlagsr�r"r�rr�r)
rPr�r�r�rrMrErrYrZrGr@r?s
`            r%r�zNinjaWriter.WriteTarget.s����9�9�9�9�%)�X�X�n�b�%A�%A�9�9�9�9�9�O��F�|�v���i����(�d�k���d�k���	
�f��)�	)�	)��-�-�d�3�3�d�k��
�+�@�
@�
@�
�
+�A��
�����+�\�9�$0�	�	2�	2�	2�	2��	���	?��-�=�=�k�J�J�-�
�?����o�}�=�>�>�>���	3��'�3�3�K�48�4G�I�I�(�
�
�
�J��1�
2�
2�
2��;�%���3�t�z�?�?�a�#7�#7�
�
&�
&�y�$�'+�{�'9�4�;�;M�O�O�O�
�*�
�
�4�;�-�w�	�&2�i��I�I�I�I��&��j�"�"�d��'�'��d�3�3�F����%�+�+�F�G�Y�t�_�7C�6?�
,�
A�
A�
A�
�M�M�&�!�!�!�!��
&�
&�y�$�'+�{�'9�4�;�;M�O�O�O�
�*�
�
�4�;�-�w��&/��0�0�0�0�
 �>�>�$��V�Y�*6�8�8�d�k���;��r'c��|jsJ�|ddv}|���}|r|dz
}g}|�||||jj|���|r�|s�|ddkr+|jjr|j�|d||���nk|�	d|j�
��f��|j�|d	||���n|j�|d
||���||j_|S)NrFrXr�)�is_command_startrT�package_ios_frameworkr��version�package_frameworkr�)r�r�rr�rJr��isIOSrrr�r��GetFrameworkVersionrK)rPr�r��is_emptyrcr?rs       r%r�zNinjaWriter.WriteMacBundlebsh��������V��(M�M��
�
(�
(�
*�
*�F������f��I�� � ��D�&�$�+�:L�6G�2G�!�I�I�I��
,��
,�	
�f��)�	)�	)�d�.A�.G�	)��
����!8�:L�#,�	�	.�	.�	.�	.�	���)�T�%8�%L�%L�%N�%N�O�P�P�P��
����!4�6H�#,�	�	.�	.�	.�	.��j���v�w�(:�!*��,�,�,��D�K���Mr'c�t�|�|���}|jdkr|�|���}|S)z:Returns the variables toolchain would set for build steps.rwr))r�r1�GetMsvsToolchainEnv)rPrxr�s   r%rLzNinjaWriter.GetToolchainEnvysH��
�
 �
 �5H�
 �
I�
I�C��{�e����$�$�1�
%�
3�
3�c��Jr'c�D�|j�d|j���S)z>Returns the variables Visual Studio would set for build steps.r
r�)r��
GetVSMacroEnvr�)rPrxs  r%rhzNinjaWriter.GetMsvsToolchainEnv�s-����+�+�O�48�4D�,�F�F�Fr'c���|jsJ�|j}tj�|j|t
j�||j��|j	|��S)z6Returns the variables Xcode would set for build steps.)
rur-r�r�r�r<r=rwr|r�)rPrxrus   r%r�zNinjaWriter.GetSortedXcodeEnv�sZ��������&�M���0�0���]�
����]�D�$6�7�7��9I����r'c�t�i}|j�d��}|r||d<|�|���S)z:Returns the variables Xcode would set for postbuild steps.�CHROMIUM_STRIP_SAVE_FILErw)r��GetPerTargetSettingr�)rP�postbuild_settings�strip_save_files   r%�GetSortedXcodePostbuildEnvz&NinjaWriter.GetSortedXcodePostbuildEnv�sR�����)�=�=�"�$�$�O��G�7F��3�4��!�!�6H�!�I�I�Ir'Fc�l�|�||||��}|r|�d|f��dSdS)zAAdds a 'postbuild' variable if there is a postbuild for |output|.�
postbuildsN)�GetPostbuildCommandr�)rPrr�r?rJr`�	postbuilds       r%rz#NinjaWriter.AppendPostbuildVariable�sO���(�(��v�v�?O�P�P�I��2�����i�0�1�1�1�1�1�2�2r'c�V�|jr|ddks|sdSt||j��}tj�|d���}|��|j�|jtj	�
tj	�|j|����ttj	�
tj	�|j|����|j��|d���}|sdS|�
dtj�d|jg����|�|�����}|d	zd
�d�|D����z}|d|zzd
z}|rd|zd
zSd|zS)z�Returns a shell command that runs all the postbuilds, and removes
    |output| if any of them fails. If |is_command_start| is False, then the
    returned string will start with ' && '.rFrUrT)�quietNr�cdz (z && c�6�g|]}tj|����Srg)r6r7)r�rs  r%r�z3NinjaWriter.GetPostbuildCommand.<locals>.<listcomp>�s#��L�L�L�g�\�(��1�1�L�L�Lr'z$); G=$$?; ((exit $$G) || rm -rf %s) z&& exit $$G)�(z$ && ()r�r2r1r-r��GetSpecPostbuildCommands�AddImplicitPostbuildsr�r<r=r�rwr}�insertrzrAr|r�rq)	rPr�r?�
output_binaryr`rsr��commands�command_strings	         r%rtzNinjaWriter.GetPostbuildCommand�s������$�v�,�&�"8�"8��"8�
�R�
����
4�
4�F��$�=�=�d�$�=�O�O�J�� ��&�<�<�
�
�
�'�
�
�2�7�<�<��(:�F�C�C�
D�
D�
��g���r�w�|�|�D�,>�
�N�N�O�O��k����D�
=�"�"�j���
�R����a���8�8�	
�t�!�"�$�$�%�%�%�
�
%�
%�d�&E�&E�&G�&G�
H�
H�C��T�z����L�L��L�L�L�M�M�N�H��"3�5;�"<�<�>L�M�N��'�
�>�
!�F�
*�*�
��
&�&r'c���g}|D]P\}}|�d|�dtjtj�|�����d����Qd�|��S)z�Given an environment, returns a string looking like
        'export FOO=foo; export BAR="${FOO} bar;'
    that exports |env| to the shell.zexport �=�;r7)r�r6r7r-rzr=rw)rPr��
export_str�k�vs     r%r�z"NinjaWriter.ComputeExportEnvString�s����J��L�L���1������1�1�l�!�#�*�"E�"E�a�"H�"H�I�I�I�I�K�L�L�L�L��8�8�J���r'c���|jsJ�td}|�tj�||j�������S)zDReturn the 'output' (full output path) to a bundle output directory.r)r�r�r�r<r=rwr�r>)rPr=s  r%r�z"NinjaWriter.ComputeMacBundleOutput�sX�������&�}�5�D����
����T�4�.�=�=�?�?�@�@�B�B�Br'c�T�|s|d}tjt��}t|d|ji��|d|d|d|dd�}|�d|�|d����}|d	|d	|d
|dd�}|�d��}|rd
|z}n|�|d��}d|vr	|d}n|d}|dkrt|d��}|dvr|�|�|��S|dkrd|zSt
d|z���)z@Compute the filename of the final output for the current target.rFr1rrr)rYrTrSr!�product_prefixr�SHARED_LIB_SUFFIXrr�product_extensionr;�product_namer�r)rSrYrTr!rUz%s.stampzUnhandled output type %s)r{r��CalculateVariablesr1r�r&�	Exception)	rPr�rF�default_variables�DEFAULT_PREFIXr$�DEFAULT_EXTENSIONrAr�s	         r%r6z!NinjaWriter.ComputeOutputFileName�s�����
�&�\�d��	�"=�>�>���(�8�T�[�*A�B�B�B�
+�+>�?�)�*=�>�)�*=�>�%�&9�:�	��N��X�X�&��(:�(:�4��(D�(D�
E�
E�F�
-�-@�A�+�,?�@�+�,?�@�'�(;�<�	������,�-�-�I��2��	�/�i�i�#�'�'��b�1�1�i������N�#�f�f��M�"�f�	�5����V�U�+�+���&�&�&�������
3�3�	
����
�&�
 � ��0�4�7�8�8�8r'c���|d}|jdkr)|j�|j|j��}|r|S|�)|jdkr|dvr|j���}n|�||��}|�?d|vr;tj	�
|d|��}|�|��Sddg}|jdkr|jd	kr|d
dgz
}n|jdkr|jd	kr|d
gz
}|�cd}|jd	kr(tj	�
dd
|jz��}tj	�
|t||����S||vs|j
r|S|d
krUd}	|jd	kr(tj	�
dd
|jz��}	tj	�
|	|��S|�|d���S)z2Compute the path for the final output of the spec.rFr)Nr�)rSr!rTrYr�r!rYr�rTrSr@z%srF)r�)r1r��
GetOutputNamer�r�r��GetExecutablePathr6r<r=rwr�rBr�r�)
rPr�r@rF�overrider
r=�type_in_output_root�archdir�libdirs
          r%rzNinjaWriter.ComputeOutputs����<�D��{�e����#�1�1�$�2B�26�2D�F�F�h�	�����|���u�,�,��:M�2M�2M��$�6�6�8�8�h�h��+�+�D�$�7�7�h��|�
��-�-�
�W�\�\�$�}�-�x�
8�
8�d�
�
�
��
%�
%�%�(�):�;���{�e������ 8� 8��.�0@�A�A���	
���	�	�$�,�(�":�":��.�/�/�����g�	
���	!�	!��'�,�,�v�t�d�l�':�;�;��
�W�\�\�'�7�8�T�#:�#:�
;�
;�;�	
�$�	$�	$��(I�	$�
�o�	
�!�	!�	!��f�	
���	!�	!�����e�T�D�L�%8�9�9��
�W�\�\�&�(�
+�
+�+�
�
'�
'��E�
'�
B�
B�Br'c��t|t��rJ�|�g}|�|d�|����dS)Nr7)�
isinstancer�r�rw)rPr�rp�valuess    r%r�zNinjaWriter.WriteVariableList5sJ���&�#�&�&�&�&�&�
�~��f�����S�X�X�f�-�-�.�.�.�.�.r'c
�����jdkr0�fd�|D��}�j�|�j���}n9�jdkr.�fd�|D��}tj�|���}�j}�jdkr
|d�jzz
}|d|zz
}tj
dd	|��}gd
�}	dd�ttj
|	����zd
z}	tj
|	dzd	|��}d}
d}�fd�|D��}�jdkrk|dz}
|rdn	d�jz}|r!�j�|�j��}ntj�|��}dt$jz|
z|z}
nD������tj�|��}
d�jz�z|
z}
�j�||
||d||
|����j���||fS)z�Write out a new ninja "rule" statement for a given command.

    Returns the name of the new rule, and a copy of |args| with variables
    expanded.r)c�^��g|])}�j�|�j�j�����*S)r�)r�r�r}r��r�r#rPs  �r%r�z1NinjaWriter.WriteNewNinjaRule.<locals>.<listcomp>CsP�������� �0�0��t�)�$�2B�1�D�D���r'r�r�c�P��g|]"}tj�|�����#Srg)r-r�r�)r�r#r�s  �r%r�z1NinjaWriter.WriteNewNinjaRule.<locals>.<listcomp>Js,���
J�
J�
J�c�c�!�/�/��S�9�9�
J�
J�
Jr'r�r;z
[^a-zA-Z0-9_]r>)rr
rrrz(?!�|�)z\$Nc�F��g|]}��|�j����Srg)r�r}r�s  �r%r�z1NinjaWriter.WriteNewNinjaRule.<locals>.<listcomp>bs,���H�H�H�C�D���s�D�$6�7�7�H�H�Hr'z.$unique_name.rsprr7z%%s gyp-win-tool action-wrapper $arch zcd %s; T)rA�restatrT�rspfile�rspfile_content)r1r�r�r�r-r�r�r�r�r+�subrwr�r7r|�BuildCygwinBashCommandLiner.�EncodeRspFileList�sysr!r�rzrArrrlr�)rPr�rSrQrRr�rTrArU�protectr�r��run_inrs`    `        r%rOzNinjaWriter.WriteNewNinjaRule;s�����{�e�����������d��&�6�6�
�d�.�7�0�0�k�k�	
���	�	�
J�
J�
J�
J�T�
J�
J�
J�d��'�5�5�k�3�G�G�k�
�	�I��|�x����3���%�%�i�
��t���I�����Y�7�7�I�
L�K�K�G��c�h�h�s�2�9�g�6�6�7�7�7�#�=�G��&��5��#�{�;�;�K�
�G��O�H�H�H�H�4�H�H�H�D��{�e����/�/�g��<�r�r�C�$�*<�$<�f�	�E��,�G�G��$�$�&�&����,�>�>�t�D�D��8�3�>�I���!�"�g�g�
�'�'��,�,�c��
�/�/��5�5�g��D�.�.��4�w�>�g�
	�J�O�O�I�w��W��d�#�_��F�F�F�	�J�������d�?�r'r )T)F))rcrdrerQr�r�r�r�r�r�rrr$r�r;r+r,r-r/r0r1r2r�r�rrrr�r�rLrhr�rqrrtr�r�r6rr�rOrgr'r%riri�s�������!�#>�#>�#>�#>�J����<
�
�
�D�D�D�D�("9�"9�"9�"9�H���� 4�4�4�U�U�U�n���0���#�#�#�J7�7�7�$�$�$�Lu�u�u�n���8
3�
3�
3����,,�,�,�\ � � �D"�"�"�.FJ�^�^�^�^�@K�K�K�"���86:�{�{�{�{�z2�2�2�h���.����F�F�F�F�
����	J�	J�	J�05�2�2�2�2�"'�"'�"'�H � � �B�B�B�09�09�09�09�d+C�+C�+C�+C�Z/�/�/�!%�@�@�@�@�@�@r'ric�@�tj�|��}|dkr�|�dd��|�dd��|�dtd��|�dtd��dd	lmcm}t|d
g��a	t|dg��a
t|dg��ad	S|d
kr�tjj
}|�dd
��d|dz|d<d|d<d|dz|d<d|d<d|dz|d<dd	lmcm}t|d
g��a	t|dg��a
tj�||��d	S|}|dkrd}|�d|��|�dd��|�dt$j�dd����|�dt$j�dd����d	S)zDCalculate additional variables for use in the build (called by gyp).r��OSr�z.dylib�SHARED_LIB_DIRr�LIB_DIRrN�+generator_additional_non_configuration_keys�"generator_additional_path_sections�!generator_extra_sources_for_rulesr)r;r!rrrrSrrrT�android�linuxz.sor
rr�)r-rz�	GetFlavor�
setdefaultr��gyp.generator.xcode�	generator�xcode�getattrr�r�r��MSVSUtil�TARGET_TYPE_EXT�gyp.generator.msvs�msvsr.�CalculateCommonVariablesr<r=rw)r��paramsr1�xcode_generator�exts�msvs_generator�operating_systems       r%r�r�~s����:����'�'�&��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;�/�)0��,�b�*2�*2�&�)0��+�R�)1�)1�%�%�%�
�����<�'�D�� � ��u�-�-�-�-0�4��3E�-E��)�*�-/��)�*�-0�4�8H�3I�-I��)�*�-/��)�*�-0�4�8H�3I�-I��)�*�0�/�/�/�/�/�/�/�/�29�.�5�r�3;�3;�/�)0��,�b�*2�*2�&���/�/�0A�6�J�J�J�J�J���
���� ��� � ��'7�8�8�8�� � �!4�e�<�<�<�� � �!1�!#����o�u�!E�!E�G�G�G�� � ��!#����o�u�!E�!E�G�G�G�G�Gr'c�(�tj�|djpd��}|�di���dd��}tj�tj�||����S)zEReturns the path from the toplevel_dir to the build output directory.�optionsr;r��
output_dirr�)r<r=r�generator_outputr�r�rw)r��
generator_dirr�s   r%�ComputeOutputDirr��sr���'�/�/�&��"3�"D�"K��L�L�-��z�z�+�R�0�0�4�4�\�5�I�I�*�
��	�	�"�'�,�,�}�j�A�A�	B�	B�Br'c��|dj}tj�tj�|t|��d����}||d�adS)zBCalled by __init__ to initialize generator values based on params.r��gypfiles)�toplevel�qualified_out_dirN)rr<r=r�rwr��generator_filelist_paths)r�r�r�s   r%�CalculateGeneratorInputInfor��sf���I�
�
+�(��g�&�&�r�w�|�|�� ��(�(�*�(6�(6�7�7��
�,�����r'r�c�`�tj�|��t||��S)z;Open |path| for writing, creating directories if necessary.)r-rz�EnsureDirExists�open)r=�modes  r%r�r��s(���*���T�"�"�"�	
�d�D�	�	�r'c�F�|�|d��}|r|dz|zS|S)Nrr7)r�)r�wrappers�prog�wrappers    r%�CommandWithWrapperr��s1���L�L��b�!�!�'�� ��S�=�4���	
�+r'c
�z�
�ttj�dd����}|r|Stjdvr�ddl�
G�
fd�d�
j��}|��}�
�|��|_	�
j
j��
�
|����td|jdz��}tdttj�d	d
������}t!||��Stj�d��r�tj�d��r�t)d��5}t+jd
��}|D]Z}|�|��}|s�tdt|�d����dz��ccddd��S	ddd��n#1swxYwYdStjdkr?	tt3jgd�����}	td|	d
z��S#YdSxYwdS)z6Returns a best-guess for a number of concurrent links.�GYP_LINK_CONCURRENCYr)�win32�cygwinNc
���eZdZd�jfd�jfd�jfd�jfd�jfd�jfd�jfd�jfd	�jfg	Zd
S)�1GetDefaultConcurrentLinks.<locals>.MEMORYSTATUSEX�dwLength�dwMemoryLoad�ullTotalPhys�ullAvailPhys�ullTotalPageFile�ullAvailPageFile�ullTotalVirtual�ullAvailVirtual�sullAvailExtendedVirtualN)rcrdre�c_ulong�c_ulonglong�_fields_)�ctypess�r%�MEMORYSTATUSEXr��sw�������	�V�^�$�	���(�	��+�,�	��+�,�	�V�/�0�	�V�/�0�	�F�.�/�	�F�.�/�	#�V�%7�8�
�h�h�hr'r�r�l�GYP_LINK_CONCURRENCY_MAXlr�z
/proc/meminfoz^MemTotal:\s*(\d*)\s*kBi��darwin)�sysctlz-nz
hw.memsize)rNr<r�r�r��platformr��	Structure�sizeofr��windll�kernel32�GlobalMemoryStatusEx�byref�maxr��minr!r=�existsr�r+�compiler,�group�
subprocess�check_output)�	pool_sizer��stat�	mem_limit�hard_cap�meminfo�memtotal_re�liner,�avail_bytesr�s          @r%�GetDefaultConcurrentLinksr�s�����"�*�.�.�!7��;�;�<�<�)������\�(�(�(��M�M�M���������)�����>���D��M�M�$�'�'�D�M�
�M��/�/����T�0B�0B�C�C�C��A�t�(�]�;�<�<�I��1�c�"�*�.�.�)C�U�K�K�L�L�M�M�H��y�(�#�#�#�
�|���w�'�'�
�	�w�~�~�o�&�&�@��� � �@�G��j�!;�<�<���	@�	@�D��#�#�D�)�)�%�����Q��E�K�K��N�N�+�+�
�>�?�?�
?�
?�@�@�@�@�@�@�@�@�	@�@�@�@�@�@�@�@�@�@�@�@����@�@�@�@�
�1�
�|�x�����
�/�0N�0N�0N�O�O�P�P�k���K�M�2�
3�
3�3���
�Q�Q����
�1s� A%G�G#�&G#�=5H3�3H8c��|rdndS)zwReturns the suffix used to select an appropriate linking rule depending on
  whether the manifest embedding is enabled.�_embedrrg��embed_manifests r%r8r8s��$�	+����+r'c	����fd�}t���}ttj�dd����dk}d|���z}tj�d|�d�}||dd	��}|�d
|z||ddd
d���|�d|z||ddd
d���tj�d|�d�}||dd��}|�d|zd|���z|ddd���dS)z7Adds link rules for Windows platform to |master_ninja|.c�D��ddd�|}dtj|||�d�zS)N�1�2)�exe�dllz�%(python)s gyp-win-tool link-with-manifests $arch %(embed)s %(out)s "%(ldcmd)s" %(resname)s $mt $rc "$intermediatemanifest" $manifests)�pythonr��ldcmd�resname�embed)r�r!)rr��binary_type�
resource_namers    �r%�FullLinkCommandz)_AddWinLinkRules.<locals>.FullLinkCommandsK���
�
�����M������'�&�)�)�)�)r'�GYP_USE_SEPARATE_MSPDBSRV�0rzLINK%s(DLL) $binaryz! gyp-win-tool link-wrapper $arch z7 $ld /nologo $implibflag /DLL /OUT:$binary @$binary.rspz$binaryrr z$binary.rspz$libs $in_newline $ldflagsT�	link_pool)rQrr�r�r�rTrz& $ld /nologo /OUT:$binary @$binary.rsprrzLINK%s $binaryz$in_newline $libs $ldflags)rQrr�r�rTN)	r8rNr<r�r��upperr�r!rl)�master_ninjarr�rule_name_suffix�use_separate_mspdbsrv�dlldesc�dllcmd�exe_cmds `      r%�_AddWinLinkRulesr#s����)�)�)�)�)�/�~�>�>��	�"�*�.�.�4�c�
:�
:�;�;�q�@��!�$4�$:�$:�$<�$<�<�'�"�n�n�n�.C�.C�.C�
E�&��?�6�9�e�4�4�&����H�/�/� '��)�$@��$��&�&�&����O�&6�6� '��)�$@��$��&�&�&��~�~�~�4�4�4�6�'�
�O�G�Y��6�6�'����F�-�-� 0�3C�3I�3I�3K�3K� K�#�)�$@�$��&�&�&�&�&r'c�N%���|d}tj�|��}|�di��}tj�tj�t|�������}tj�|j	|��}	ttj�|	d����}
tj|
d���}tj�
||	|��|dkrd}d}
d}d	}d
}nd}d}
d
}d}d}d}d}|}d}d}d}d}d}d}d}d}d}tj�|d��\}}}||�dg��}tj�||j	��} i}!|D�]7\}"}#|"dkr tj�| |#��}|"dkr tj�| |#��}|"dkr7tj�| |#��}
|
�d��r|
}|"dkr tj�| |#��}|"dkr"tj�| |#��}|#}|"dkr"tj�| |#��}|#}|"dkr tj�| |#��}|"dkr tj�| |#��}|"dkr tj�| |#��}|"d kr tj�| |#��}|"d!kr tj�| |#��}|"d"kr tj�| |#��}|"�d#��r9tj�| |#��|!|"dt#d#���<��9tj���D]}\}"}#|"����d#��rQ|"dt#d#���}$t+jd$d%|$��}$tj�| |#��|!|$<�~|�d&d��}%|%rd'|%z|!d(<|dkr��fd)�|D��}&d}'|�d*d��s tj�|&|��}'tj�|	||'t��}(t5|(�����D]P\})}*|r|}*t7d|!t9|*d����}+|r
|+|)d+krd,nd-z
}+|�d.|)z|+���Qt=d/dg|
��}
|�dt7d|!|
����t=d0dg|��}|�d1t7d|!|����|dkr�|�d2|��|�d3d4��|�d|��|�d5d6��|�d7d8��|�d9d:��|�d;d<��n�|�d2t7d(|!|����|�d=t7d(|!|����|�dt=d>dg|����|d?krL|�dt=d@dg|����|�dt=dAd!g|����t>�r�|s|
}|s|}|�dBt=dCg|����|�dDt=dEg|����|�dFt=dGg|����t=dHg|��}t=dIg|��}dJ|vr|r|� dJ|
��}dK|vr|r|� dK|��}|�dLt7d|!|����|�dMt7d|!|����|dkr|�dN|��nJ|�dNt7d(|!|����|�dOt7d(|!|����|�!��|�"dPtG���Q��|�!��|dkrdRndS},|dkrM|�$ddTdUdV|,�W��|�$dXdTdY�Z��|�$d1d[d\dV|,�W��n�d]}-d^}.|�$ddT|-d_d`|,�a��|�$d1d[|.d_db|,�a��|�$d3dcddtJj&z�Z��|�$d5dedftJj&z�Z��|�$dgdhditJj&z�Z��|d?kr�|dkr�|�$djdkdl�Z��|�$dmdkdn�Z��dodpdqdr�z}/|�$dsdtdu|/dvdwizdxdydP�z��|�$d{d|du|/dvdwizdxd}dP�z��|�$d~dd�dP�����n?|dkrK|�$djd�d�tJj&zd_d�����tO|du����tO|d������n�|�$d�d�d�dV|,�W��|�$d�d�d�dV|,�W��|�$djd�d��Z��|�$d�d�d��Z��|�$d�d�d�d�d�iz�Z��d�}0d�|0d�dr�z}/d�}1|�$dsd�du|/|1d�d��zdxd�dP�z��|�$d�d�du|0|1d�d��zdxd�dP�z��|�$d{d�du|/|1d�d��zdxd�dP�z��|�$d�d�du|0|1d�d��zdxd�dP�z��|�$d~d�d�dP����|�$d�d�d��Z��|�$d�d�d��Z��|�$d�d�d��Z��|�$d�d�d��Z��|�$d�d�d��Z��|�$d�d�d��Z��|�$d�d�d��Z��|�$d�d�d��Z��|dkr&|�$d�d�d�tJj&z�Z��n|�$d�d�d��Z��|dkr&|�$d�d�d�tJj&z�Z��n7|d�kr|�$d�d�dŬZ��n|�$d�d�dƬZ��|�!��tQ��}2|d�D]X}tj�)|�tj�|����D]}3|2�*|3����YtQ��}4i}5i}6tQ��}7tQ��}8|D�]�}9tj�|9��\}}:};||�dg��}<||<ksJd�|<�d�|������|9}=|d?kr&tj+�,|||=��tj�-||j	d���}tj�.||:|;��}>|>�/dʦ�}>taj1|>���2��}?tj�3|��}@d�}A|;d�kr|Ad�|;zz
}Atj�|A|@|:d�z��}Bti��}Ctk|?|5|@||C|	|B||j	�Ϧ	�	}D|D�6|=�|��}3|C�7��dkr�ttj�|	|B����5}E|E�8|C�9����ddd��n#1swxYwY|C�:��|�;|B��|3r�|:|3�<��kr5|=d�d�kr)|6�=|:g���>|3��|3|5|9<|9|2vr'|4�*|3�<����|8�*|:�����|7�*|:�����|6rb|�!��|�?dѦ�t5|6��D])}F|�@|Fd�dӄ|6|FD�����*|7|8z
}7|7rQ|�!��|�?dԦ�t5|7��D]}:|�@|:dҦ��|4ra|�!��|�@d�d�t5|4����|�A|�d�dզ���|
�:��dS)�Nr�r�zbuild.ninja�x)�widthr)zlib.exe�UNSETzlink.exez$ldr�r�zc++z$ccz$cxxr�r�r�r�r�make_global_settings�ARzAR.host�CCzclang-cl�CXXzCC.hostzCXX.host�LDzLD.host�NMzNM.host�READELFzREADELF.host�_wrapperz\.HOST$z.hostr�zexport DEVELOPER_DIR='%s' &&�LINKc�8��g|]}�|d���S)r�rg)r��qualified_targetr��target_dictss  ��r%r�z+GenerateOutputForConfig.<locals>.<listcomp>�s:���4�4�4�#��,�-�.>�?��L�4�4�4r'�"ninja_use_custom_environment_filesrkz -m32z -m64�cl_�	CC_target�
CXX_targetr�r�rzmidl.exer�zrc.exe�ml_x86zml.exe�ml_x64zml64.exe�mtzmt.exer��	AR_targetr��	NM_target�READELF_target�ar_host�AR_host�nm_host�NM_host�readelf_host�READELF_host�CC_host�CXX_hostz$(CC)z$(CXX)r�r��ld_host�	ldxx_hostr)�depth�msvc�gcczCC $outzU$cc -MMD -MF $out.d $defines $includes $cflags $cflags_c $cflags_pch_c -c $in -o $outz$out.d)rQrrA�depsr�zE$cc $defines $includes $cflags $cflags_c $cflags_pch_c -c $in -o $out)rQrzCXX $outzX$cxx -MMD -MF $out.d $defines $includes $cflags $cflags_cc $cflags_pch_cc -c $in -o $outz_ninja -t msvc -e $arch -- $cc /nologo /showIncludes /FC @$out.rsp /c $in /Fo$out /Fd$pdbname_c zaninja -t msvc -e $arch -- $cxx /nologo /showIncludes /FC @$out.rsp /c $in /Fo$out /Fd$pdbname_cc z$out.rspz$$defines $includes $cflags $cflags_c)rQrr�r�rKz%$defines $includes $cflags $cflags_cczIDL $inzd%s gyp-win-tool midl-wrapper $arch $outdir $tlb $h $dlldata $iid $proxy $in $midl_includes $idlflagszRC $inzU%s gyp-win-tool rc-wrapper $arch $rc $defines $resource_includes $rcflags /fo$out $inr�zASM $outzS%s gyp-win-tool asm-wrapper $arch $asm $defines $includes $asmflags /c /Fo $out $inr[zAR $outz'rm -f $out && $ar rcs $arflags $out $inrXz(rm -f $out && $ar rcsT $arflags $out $inz�if [ ! -e $lib -o ! -e $lib.TOC ]; then %(solink)s && %(extract_toc)s > $lib.TOC; else %(solink)s && %(extract_toc)s > $lib.tmp && if ! cmp -s $lib.tmp $lib.TOC; then mv $lib.tmp $lib.TOC ; fi; fiz;$ld -shared $ldflags -o $lib -Wl,-soname=$soname %(suffix)szI{ $readelf -d $lib | grep SONAME ; $nm -gD -f p $lib | cut -f1-2 -d' '; })r �extract_tocr zSOLINK $libT�suffixz@$link_file_listz$link_file_listz<-Wl,--whole-archive $in $solibs -Wl,--no-whole-archive $libs)rQr�rr�r�rTrzSOLINK(module) $libz3-Wl,--start-group $in $solibs $libs -Wl,--end-grouprz	LINK $outzH$ld $ldflags -o $out -Wl,--start-group $in $solibs $libs -Wl,--end-group)rQrrTzLIB $outzU%s gyp-win-tool link-wrapper $arch False $ar /nologo /ignore:4221 /OUT:$out @$out.rspz$in_newline $libflags)rQrr�r�r
Fr�z	OBJC $outz[$cc -MMD -MF $out.d $defines $includes $cflags $cflags_objc $cflags_pch_objc -c $in -o $outr�zOBJCXX $outz^$cxx -MMD -MF $out.d $defines $includes $cflags $cflags_objcc $cflags_pch_objcc -c $in -o $outzLIBTOOL-STATIC $out, POSTBUILDSzarm -f $out && ./gyp-mac-tool filter-libtool libtool $libtool_flags -static -o $out $in$postbuildsrzLIPO $out, POSTBUILDSz6rm -f $out && lipo -create $in -output $out$postbuildsrzSOLIPO $out, POSTBUILDSz\rm -f $lib $lib.TOC && lipo -create $in -output $lib$postbuilds &&%(extract_toc)s > $lib.TOCrLz]{ otool -l $lib | grep LC_ID_DYLIB -A 5; nm -gP $lib | cut -f1-2 -d' ' | grep -v U$$; true; }z($ld %(type)s $ldflags -o $lib %(suffix)sz�if [ ! -e $lib -o ! -e $lib.TOC ] || otool -l $lib | grep -q LC_REEXPORT_DYLIB ; then %(solink)s && %(extract_toc)s > $lib.TOC; else %(solink)s && %(extract_toc)s > $lib.tmp && if ! cmp -s $lib.tmp $lib.TOC; then mv $lib.tmp $lib.TOC ; fi; fiz@$link_file_list$postbuildszSOLINK $lib, POSTBUILDSz-shared)rMrFz$in $solibs $libs�solink_notoczSOLINK(module) $lib, POSTBUILDSz-bundle�solink_module_notoczLINK $out, POSTBUILDSz1$ld $ldflags -o $out $in $solibs $libs$postbuildsr�zPREPROCESS INFOPLIST $outzT$cc -E -P -Wno-trigraphs -x c $defines $in -o $out && plutil -convert xml1 $out $outr�zCOPY INFOPLIST $inz:$env ./gyp-mac-tool copy-info-plist $in $out $binary $keysr�zMERGE INFOPLISTS $inz-$env ./gyp-mac-tool merge-info-plist $out $inr�zCOMPILE XCASSETS $inz.$env ./gyp-mac-tool compile-xcassets $keys $inr�z2COMPILE HEADER MAPS AND COPY FRAMEWORK HEADERS $inz�$env ./gyp-mac-tool compile-ios-framework-header-map $out $framework $in && $env ./gyp-mac-tool copy-ios-framework-headers $framework $copy_headersr�zMACTOOL $mactool_cmd $inz1$env ./gyp-mac-tool $mactool_cmd $in $out $binaryrcz"PACKAGE FRAMEWORK $out, POSTBUILDSzG./gyp-mac-tool package-framework $out $version$postbuilds && touch $outraz&PACKAGE IOS FRAMEWORK $out, POSTBUILDSzC./gyp-mac-tool package-ios-framework $out $postbuilds && touch $outr�z
STAMP $outz%s gyp-win-tool stamp $outz${postbuilds}touch $outr{z
COPY $in $outz)%s gyp-win-tool recursive-mirror $in $out�zoszrm -rf $out && cp -fRP $in $outz>ln -f $in $out 2>/dev/null || (rm -rf $out && cp -af $in $out)�build_filesz;make_global_settings needs to be the same for all targets. z vs. zutf-8r�r�r;r�)rr�zShort names for targets.�phonyc�6�g|]}|�����Srg)r^)r�r!s  r%r�z+GenerateOutputForConfig.<locals>.<listcomp>�	s2��/O�/O�/O�1�q�}�}���/O�/O�/Or'z(Empty targets (output for completeness).�all�default_target)Br-rzr�r�r<r=r�rwr�rr�r6rq�CopyTool�ParseQualifiedTargetr{r�r"r�r��lowerr+r�r.�ExtractSharedMSVSSystemIncludes�GenerateEnvironmentFilesrdr�r2r�r�$generator_supports_multiple_toolsetsr0r�rTrrlr�r!r#rb�
AllTargetsrcr��MergeGlobalXcodeSettingsToSpec�RelativePath�QualifiedTarget�encodergrhrkr�rrir�tell�write�getvalue�closer�r^r�r��commentr��default)G�target_listr3�datar�r�r�r1r�rprs�master_ninja_filerr�r�r�r�rFr�rGr>r�r��cc_host_global_setting�cxx_host_global_setting�clang_clr�r@r�rB�
build_filer>r(�
build_to_rootr��keyr�
key_prefixr��configs�shared_system_includes�cl_pathsr@r=rrK�
cc_command�cxx_command�mtime_preserving_solink_base�solink_base�
solink_suffix�all_targetsr�rPrn�target_short_names�empty_target_names�non_empty_target_namesr2r�r��this_make_global_settingsr��qualified_target_for_hashrm�	base_pathr�r~�ninja_output�writerr��
short_namesG `  `                                                                  r%�GenerateOutputForConfigr�Hs=�����9��'��:����'�'�&��J�J�0�"�5�5�/��g����g�l�l�#�F�+�+�[�9�9�;�;�)��7�<�<�� 4�i�@�@�.� �����n�m�!L�!L�M�M���$�%6�c�B�B�B�,��*���f�n�o�>�>�>��u�_�_�	�B�
�B�
�C�	�B��G�G�	
�B�	
�B�
�C�	�B��D��G��I��'��'�
�(��� ��
�(��"��'��'��,��Z�4�4�[��^�D�D��*�a���j�)�-�-�.D�b�I�I���*�/�/�	�07�0D�F�F�-�
�(�(�L�L�j�c�5�
�d�{�{�
�7�<�<�
�u�-�-�b�
�i�������]�E�2�2�g�
�d�{�{�
�7�<�<�
�u�-�-�b�	���Z�	 �	 ����
�e�|�|��G�L�L���.�.�c�
�i�������]�E�2�2�g�$��
�j�������m�U�3�3�h� %��
�d�{�{�
�7�<�<�
�u�-�-�b�
�i�������]�E�2�2�g�
�d�{�{�
�7�<�<�
�u�-�-�b�
�i�������]�E�2�2�g�
�i�������]�E�2�2�g�
�n����W�\�\�-��7�7�l�
�|�|�J���L�)+����m�U�)K�)K�h�s�$�S��_�_�$�$�%�&���J�$�$�&�&�@�@�j�c�5�
�y�y�{�{���J�'�'�@��(��Z���(�(�)�j��6�*�g�z�:�:�j��W�\�\�-��?�?�h�z���%�)�)�*=�t�D�D���J�5�8I�I�H�V���u�_�_�4�4�4�4�4�'2�4�4�4�G�!�����C�Q�G�G�(�

�
�
<�
<���(�(���!�:�:���)?��M�M�H��X�^�^�-�-�.�.�	3�	3�
��d�	����"�4��
�T�5�
)�
)�+�+�g�	�;��t�u�}�}�G�G�'�:�����E�D�L�'�2�2�2�2��;��-�r�2�2�"�����0��x��D�D�E�E�E��L�%�0�#�6�6�#�����1�%��3�G�G�H�H�H��u�_�_����$��#�#�#����%��,�,�,����$��#�#�#����$��)�)�)����(�H�-�-�-����(�J�/�/�/����$��)�)�)�)����$� 2�6�8�R� H� H�I�I�I����&�"4�V�X�t�"L�"L�M�M�M����$� 2�K��3F�� K� K�L�L�L�
�������
�"�K��#6��;�;�=�=�=����
�'�)9�9�(E�w�O�O�Q�Q�Q�*�(����g����h����)�%7���W�%M�%M�N�N�N����)�%7���W�%M�%M�N�N�N����.�,�n�-=�|�L�L�N�N�N� �)��g�6�6�G�!�:�,��9�9�H��'���4��&�.�.�w��;�;�g��8��� 7��(�0�0��3�?�?�h����)�,�Y��'�J�J�L�L�L����*�,�Z��8�L�L�N�N�N�
�������I�w�/�/�/�/����I�'9�
�(�G�(%�(%�&�&�&����K�);�
�(�I�*'�*'�(�(�(����������K�'@�'B�'B��C�C�C��������U�?�?����$��u�_�_����
��-���
���������-��/�/�/�
�����.���
�����<�J�>�K����
����<��
�����������=��
���������*�,/�N�;��=�=�=����
��L��~��	� � � ������I��~��� � � ��u�_�_��5������
��7��9�9�9������8��:�:�:�	�L�:�<�<�		<�!������
�*�h�8J�-K�K��
H����������'�
�*�h�8J�-K�K��K�����������E����������������@��� ��/��1�1�1��\�$�7�7�7�7��\�%�8�8�8�8�8������1���
���������2���
�������
�3����������)�F��H�H�H�����+�'��I�
J�J�	�L�L�L�=�K�	
�"�G�H�H�	H�!�&2�M�����+�
�*�
�6?�.A�.A�A��)����������+�
��m�Y�G�G�G��)����������3�
�*�
�6?�.A�.A�A��)����������3�
��}�i�H�H�H��)����������)�.����������-�0��2�2�2�
����&�J��L�L�L�����(�=��?�?�?�����(�>��@�@�@����%�F�D��E�E�E�����,�A��C�C�C�����6������
����:������
�u�_�_����
��*�S�^�;��=�=�=�=�
���
��'��)�)�)��u�_�_�����!�9�C�N�J��L�L�L�L���������!�/��1�1�1�1�
����!�N��P�P�P����������+��=�)���j��*�'�'��(4�(*��(8�(8��(D�(D�F�F�����o�o�f���������+��.���
�u�u���5�5��%�6#�6#��	�
�'�'�(8�9�9��J��g�!%�Z� 0� 4� 4�5K�R� P� P���#<�<�<�<�<�	"�	"�	"�$8�$8�	:�=�<�<��(�)�D�
����	��8�8��j�9I�4�P�P�P�
��(�(��W�5I�).�0�0�J�!$�
� :� :�:�t�;B�!D�!D�� 9� @� @�� I� I���[�!:�;�;�E�E�G�G�N�����
�+�+�I�
�C��(���	�S�7�]��c��'�,�,�s�I�t�h��?�?�K��:�:�L�
����I�%�'���g�.B�D�D�D�F�
�
�
�d�K��
A�
A�F������Q����b�g�l�l�>�;�?�?�@�@�2�J�����.�.�0�0�1�1�1�2�2�2�2�2�2�2�2�2�2�2����2�2�2�2����������K�(�(�(�
�#�	
��#�#�%�%�	%�	%�$�y�/�X�*E�*E��%�%�d�B�/�/�6�6�v�>�>�>�)/�n�%�&�	�[�	(�	(�����*�*�,�,�-�-�-�� � ��&�&�&�&����T�"�"�"�"��P����������3�4�4�4��/�0�0�P�P�
�����W�/O�/O�/A�*�/M�/O�/O�/O�P�P�P�P�*�,B�B���(����������C�D�D�D��)�*�*�(�(������w�'�'�'�'��G����������u�g�v�k�':�':�;�;�;�����,�,�-=�u�E�E�F�F�F��������s�A(AB�BAB	�BAB	c���|d}|D]V}tj�|jd|��}dd|g}t	d|�d|����tj|���WdS)Nr�r�rrz-Cz
Building [z]: )r<r=rwrr�r��
check_call)rhr�r�r�r��builddir�	argumentss       r%�PerformBuildr��	sz���9��'��%�%�f��w�|�|�G�0�%��@�@�H��$��)�I�	�E������
3�4�4�4���)�$�$�$�$�	%�%r'c��tjtjtj��|\}}}}}t|||||��dSr )�signal�SIGINT�SIG_IGNr�)�arglistrgr3rhr�r�s      r%�CallGenerateOutputForConfigr��	sF��	�-��
�v�~�.�.�.�;B�8�;��d�F�K��+�|�T�6�;�O�O�O�O�Or'c���tj�|��}|�di���dd��}tj�|��dkr6t
j||��\}}t
j||t��\}}|rt|||||��dS||dd}|dr�	tjt|����}g}|D]}|�|||||f���|�t |��dS#t"$r}	|���|	�d}	~	wwxYw|D]}t|||||���dS)Nr�r�r)rr��parallel)r-r��&CloneConfigurationForDeviceAndEmulatorr�rzr�r��ShardTargets�InsertLargePdbShimsr�r��multiprocessing�Poolr"r�r�r��KeyboardInterrupt�	terminate)
rgr3rhr��user_config�config_namesrT�arglistsr��es
          r%�GenerateOutputr��	s����$�K�K����,��
�
�,�b�1�1�5�5�h��E�E�+��Z���&�!�!�U�*�*� (� 5�k�<� P� P��K�� (� <��\�#>�!@�!@��K���-��K��t�V�'�)�)�)�)�)� ��A��/�0@�A�L�
�j��-�	��#�C��$5�$5�6�6����'�	F�	F�K�
�/�/��L�$���D�F�F�F�F����,�h�7�7�7�7�7��
��������������������&�-�-�+���\�4�� +�	-�	-�	-�	-�-�-s�AD6�6
E�E�E)r�)7�
__future__rr�r{rgr�r��os.pathr<r+r�r�r�rir-�
gyp.commonr�gyp.msvs_emulation�gyp.MSVSUtilr��gyp.xcode_emulation�	cStringIOr�ImportError�ior�gyp.ninja_syntaxr6r�r�r�r�r�rz�CrossCompileRequestedr[r&r2r9rB�objectrDrir�r�r�r�r�rr8r#r�r�r�r�rgr'r%�<module>r�s-��
&�%�%�%�%�%�������������������������	�	�	�	�
�
�
�
�����
�
�
�
�
�
�
�
�
�
�
�
�����!�!�!�!�!�!���������������� � � � � � � ������������������*�)�)�)�)�)�'�'�'�'�'�'������+�0� �.�
�$� ���=���D/1�+�%'�"�$&�!���'*�z�'G�'G�'I�'I�$�
�
�
�	;�	;�	;�C�C�C�/�/�/�S<�S<�S<�S<�S<�V�S<�S<�S<�\b�b�b�b�b�&�b�b�b�J-2G�2G�2G�h
C�
C�
C�����������4
�4
�4
�n,�,�,�.&�.&�.&�bJ	�J	�J	�Z%�%�%�P�P�P�-�-�-�-�-s�A�A%�$A%