HEX
Server: Apache
System: Linux p102.lithium.hosting 4.18.0-553.141.1.el8_10.x86_64 #1 SMP Fri Jul 10 17:48:02 UTC 2026 x86_64
User: bvzmoamr (9955)
PHP: 8.1.34
Disabled: syslog
Upload Files
File: //lib/python3.6/site-packages/gyp/generator/__pycache__/ninja.cpython-36.opt-1.pyc
3

?9�^8��@s�ddlmZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZ
ddlmZddlZ
ddljZddlZ
yddlmZWn ek
r�ddlmZYnXddlmZddljZdddddd	d
ddd
ddddd�Zgagagadae
j j!�Z"dd�Z#dd�Z$dd�Z%dd�Z&Gdd�de'�Z(Gdd�de'�Z)dd �Z*d!d"�Z+d#d$�Z,d8d&d'�Z-d(d)�Z.d*d+�Z/d,d-�Z0d.d/�Z1d0d1�Z2d2d3�Z3d4d5�Z4d6d7�Z5dS)9�)�print_functionN)�
OrderedSet)�StringIO)�GetEnvironFallback��libz.az$!INTERMEDIATE_DIRz$!PRODUCT_DIR/genz
$!PRODUCT_DIRz$|CONFIGURATION_NAMEz${root}z
${dirname}z	${source}z${ext}z${name})�EXECUTABLE_PREFIX�EXECUTABLE_SUFFIX�STATIC_LIB_PREFIX�STATIC_LIB_SUFFIX�SHARED_LIB_PREFIX�INTERMEDIATE_DIRZSHARED_INTERMEDIATE_DIR�PRODUCT_DIR�CONFIGURATION_NAME�RULE_INPUT_ROOT�RULE_INPUT_DIRNAME�RULE_INPUT_PATH�RULE_INPUT_EXT�RULE_INPUT_NAMEcCs|j|�r|t|�d�S|S)N)�
startswith�len)�arg�prefix�r�/usr/lib/python3.6/ninja.py�StripPrefixHs
rcCs8tjd|�r|S|dkr$tjj|�Sd|jdd�dS)zTQuote a string such that it will be interpreted as a single argument
  by the shell.z^[a-zA-Z0-9_=.\\/-]+$�win�'z"'"z'"'"z'"'"')�re�match�gyp�msvs_emulationZQuoteForRspFile�replace)r�flavorrrr�QuoteShellArgumentNs
r$cCs0|dkr|jddtd��}ttjd|�|�S)zYTakes a preprocessor define and returns a -D parameter that's ninja- and
  shell-escaped.r�#z\%03oz-D)r"�ordr$�ninja_syntax�escape)�dr#rrr�DefineZsr*cCstjj|�\}}d|||fS)z&Adds an arch string to an output path.z%s.%s%s)�os�path�splitext)�output�arch�	extensionrrr�AddArchdsr1c@s@eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�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".
  cCs@||_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)�selfr3rrr�__init__�szTarget.__init__cCs
|jdkS)z;Return true if this is a target that can be linked against.�static_library�shared_library)r?r@)r3)r=rrr�Linkable�szTarget.LinkablecCs|dks|jrdS|jdkS)zOReturn true if the target should produce a restat rule based on a TOC
    file.rFr@�loadable_module)r@rB)r8r3)r=r#rrr�UsesToc�szTarget.UsesToccCs$|j|�r|j�dS|j�p"|jS)z^Return the path, if any, that should be used as a dependency of
    any dependent action step.z.TOC)rC�FinalOutputr4)r=r#rrr�PreActionInput�s
zTarget.PreActionInputcCs|jp
|jS)z_Return the path, if any, that should be used as a dependency of
    any dependent compile step.)r6r5)r=rrr�PreCompileInput�szTarget.PreCompileInputcCs|jp|jp|jS)zKReturn the last output of the target, which depends on all prior
    steps.)r8r7r6)r=rrrrD�szTarget.FinalOutputN)
�__name__�
__module__�__qualname__�__doc__r>rArCrErFrDrrrrr2js
r2c@sXeZdZdPdd�ZdQdd�Zdd�ZdRdd	�ZdSdd�ZdTd
d�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�ZdUd+d,�Zd-d.�Zd/d0�ZdVd1d2�Zd3d4�Zd5d6�ZdWd7d8�ZdXd9d:�ZdYd;d<�Zd=d>�Z dZd@dA�Z!dBdC�Z"dDdE�Z#dFdG�Z$d[dHdI�Z%d\dJdK�Z&dLdM�Z'd]dNdO�Z(dS)^�NinjaWriterNc

Cs�||_||_||_||_tj|�|_||_||_||_	d|_
|	dk	r\tjj
tjj|	|��|_
|dkrhdnd|_|dkr�i|_xdD]}
d|
|j|
<q�Wtjj||	�}tjj||�|_tjj||	�}tjj||�|_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
    Nrz.objz.o�x86�x64zenvironment.)rLrM)�hash_for_rules�target_outputs�base_dir�	build_dirr'�Writer�ninja�toplevel_build�output_file_namer#�
abs_build_dirr+r,�abspath�join�obj_ext�win_envr �common�InvertRelativePath�
build_to_base�
base_to_build)
r=rNrOrPrQ�output_filerTrUr#�toplevel_dirr/Zbuild_to_topZbase_to_toprrrr>�s*


zNinjaWriter.__init__cCs�d}||krJ|r|j||�}n,|j|dd�}|j|dd�}|j|d�}d}||krz|jd�}|j|tjj|prd|��}d}|j||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.
    z
$!PRODUCT_DIR�/r�\�.z$!INTERMEDIATE_DIR�genz$|CONFIGURATION_NAME)r"�GypPathToUniqueOutputr+r,rX�config_name)r=r,�product_dirrr
Zint_dirrrrr�
ExpandSpecial�s
zNinjaWriter.ExpandSpecialcCsp|jdkr|jj||jd�}|jtd|�}|jtd|�}|jtd|�}|jtd|�}|jtd|�}|S)Nr)�configrrrrr)r#�
msvs_settings�ConvertVSMacrosrfr"�generator_default_variables)r=r,�root�dirname�source�ext�namerrr�ExpandRuleVariabless

zNinjaWriter.ExpandRuleVariablescCs�|r6|jdkrtjj||�}n|jdkr6tjj||�}|jd�rd|j|�}|jdkr`tj	j
|�}|Sd|krv|j|�}tj	j
tj	j|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.�macrz$!z$|)
r#r �xcode_emulation�
ExpandEnvVarsr!ZExpandMacrosrrhr+r,�normpathrXr])r=r,�envZexpandedrrr�GypPathToNinja(s





zNinjaWriter.GypPathToNinjaTcCsd|j|�}d}|jdkr&|d|j7}tjj|�\}}|rH|jd|}tjjtjj||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.�obj�targetrc)	rh�toolsetr+r,�splitrqrvrXrP)r=r,�	qualifiedryZpath_dirZ
path_basenamerrrre<s	

z!NinjaWriter.GypPathToUniqueOutputcCsTt|�dkrdSt|�dks |rL|j|d�}|jj|d||d�}|jj�|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.rN�z.stamp�stamp)�
order_only)rrerS�build�newline)r=rqZtargetsr�rrrr�WriteCollapsedDependencies`s
z&NinjaWriter.WriteCollapsedDependenciescCstjj|j�d}d||fS)Nrz%s.%s.ninja)r+r,r-rU)r=r/Zoutput_file_baserrr�_SubninjaNameForArchpsz NinjaWriter._SubninjaNameForArchcs�|�_|d�_|d�_|d|}t|d��_t|jdd���_|jdd��_t	j
j�j|��_
d	�_�_�jd
kr�t	j
j|��_|jdd	�}|r�|�j_�jdk�r8t	jj||��_�jj|�}�jjd
�j|��jjdd|��jjdd|��jjdd|��jjdd|��jjdd|��jd
k�r|�jj|��_t�j�dk�r|t�fdd��jD���_g}g}d|k�r,xX|dD]L}	|	�jk�r��j|	}
|j|
j�j��|j|
j ��|
j!�r�d�j_!�q�Wdd�|D�}dd�|D�}�j"d|�}�j"d|�}|�j_#|�j_$g}g}�j%||||��j_&�jj&�pT|}
g}y||jdg�}Wn:t'k
�r�t(d t)|��t(d!t)|jd����YnX|�rƈjd
k�r�t�j�dk�r�x"�jD]}�jj*�j+|���q�Wd	}�jdk�r4t	jj,|�j-|�j.�t	jj/�j|�j.�j0�j1�}nt	j
j2�j�j.�fd"d#��}�j3�j||||
||�}�fd$d�|D�}|�r�jd
k�s�t�j�dk�r�|�fd%d�|D�7}nt(d&|d�n&�jd
k�r�t�j�dk�r�t4j5t6�}�jj&�p�|}�jdk�r$�jj7d'k�r$|�j_8|�j_9d	}|�o4|}|�sL�jj&�sL|�rp�j:|||||�}�j
�rp|j|��j
�r��j;|||�}|�s�d	S�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{�configurationsr3Zstandalone_static_libraryr�target_rpathz\$$ORIGIN/lib/Nrs�mac_toolchain_dirrr/�ccz$cl_�cxx�cc_host�cxx_host�asmz$ml_r~c3s4|],}|tjttjj�j�j|��d��fVqdS)�wN)r'rR�
OpenOutputr+r,rXrTr�)�.0r/)r=rr�	<genexpr>�sz(NinjaWriter.WriteSpec.<locals>.<genexpr>�dependenciesTcSsg|]}|r|�qSrr)r�r)rrr�
<listcomp>�sz)NinjaWriter.WriteSpec.<locals>.<listcomp>cSsg|]}|r|�qSrr)r�r)rrrr��s�actions_depends�compile_depends�sourceszextra_sources: zspec.get("sources"): cs�j|d|�S)N�-)re)r,�lang)r=rr�<lambda>�sz'NinjaWriter.WriteSpec.<locals>.<lambda>csg|]}|j�j�r|�qSr)�endswithrY)r��f)r=rrr��scsg|]}�j|��qSr)rx)r��o)r=rrr��szdWarning: Actions/rules writing object files don't work with multiarch targets, dropping. (target %s)r?)<rfrqr{r2rz�bool�get�is_standalone_static_libraryr�r rtZIsMacBundler#�
is_mac_bundle�xcode_settingsrjZ
XcodeSettingsr�r!ZMsvsSettingsZGetArchrS�variablerZZGetActiveArchs�archsr�dict�arch_subninjasrO�appendrErFr<r�r4r5�WriteActionsRulesCopiesr6�	TypeError�print�str�subninjar�ZVerifyMissingSourcesrVrxZPrecompiledHeaderrerYZMacPrefixHeader�WriteSources�collections�defaultdict�listr3r9r:�WriteTarget�WriteMacBundle)r=�specrf�generator_flagsrir�r/r�r��deprz�
extra_sources�mac_bundle_dependsZcompile_depends_stamp�	link_depsr�ZpchZobj_outputsr:r.Zis_empty_bundler)r=r�	WriteSpects�








zNinjaWriter.WriteSpeccs��jj��j�\�}}}�j���d���fdd�	���fdd�|D�}�fdd�|D�}|jd�f�|jd|f��j��}�jj|d	|||d
�|j|�dS)zhHandle the implicit VS .idl rule for one source file. Fills |outputs|
    with files that are generated.NcsXtjj�|�}tjj��\}}tjj|�\}}�j|||�||�}|rTtjj||�}|S)N)r+r,rXr|r-rr�relpath)r,Zrelrn�basenamermrp)�outdirr=rorr�fix_pathsz)NinjaWriter._WinIdlRule.<locals>.fix_pathcsg|]\}}|�|��f�qSrr)r�rq�value)r�r�rrr�sz+NinjaWriter._WinIdlRule.<locals>.<listcomp>csg|]}�|��qSrr)r��p)r�rrr�sr�Zidlflags�idl)�	variablesr�)N)rjZGetIdlBuildDatarfrxr�rSr��extend)r=ro�prebuild�outputsr.�vars�flags�inputr)r�r�r=ror�_WinIdlRules
	

zNinjaWriter._WinIdlRulecCsB|jj|�rgSg}x(tdd�|d�D]}|j|||�q(W|S)z3Writes rules to match MSVS's implicit idl handling.cSs
|jd�S)Nz.idl)r�)�xrrrr�)sz.NinjaWriter.WriteWinIdlFiles.<locals>.<lambda>r�)rjZHasExplicitIdlRulesOrActions�filterr�)r=r�r�r�rorrr�WriteWinIdlFiles#szNinjaWriter.WriteWinIdlFilescCsg}|jr |jdg�dd�}ng}g}d|krH||j|d|||�7}d|krj||j|d||||�7}d|kr�||j|d||�7}d|kr�|jdkr�||j||�7}|jr�|jj�r�|j	|||�|j
d|�}|j�r|j|||�}	|j|	|�}
|j
|
|�|S)	zkWrite out the Actions, Rules, and Copies steps.  Return a path
    representing the outputs of these steps.�mac_bundle_resourcesN�actions�rules�copiesr�rZactions_rules_copies)r�r��WriteActions�
WriteRules�WriteCopiesr#r�r�ZIsIosFramework�WriteiOSFrameworkHeadersr��WriteMacBundleResources�WriteMacXCassets�WriteMacInfoPlist)r=r�r�r�r�r�r��extra_mac_bundle_resourcesr�xcassets�partial_info_plistrrrr�-s2z#NinjaWriter.WriteActionsRulesCopiescCsB|jdkr|d|j7}|r.d||j|�fSd||j|fSdS)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.
    rzz(%s)z%s %sz	%s %s: %sN)r{rhrq)r=Zverb�messageZfallbackrrr�GenerateDescriptionRs

zNinjaWriter.GenerateDescriptionc
sJ�j��g}�x6|D�],}d|d�jf}�jd|jdd�|�}�jdkrX�jj|�nd}	|d}
|jdd�}|r~�j|�}t|jd	d
��r�dnd}�j	||
||	�||d�\}
}��fd
d�|dD�}t|jdd��r�||d7}t|jdd���r||d7}��fdd�|dD�}�j
j||
||d�||7}�j
j�qW|S)Nz%s_%sZaction_nameZACTIONr�rF�action�depfile�ninja_use_consoler�console)r�csg|]}�j|���qSr)rx)r��i)rwr=rrr�vsz,NinjaWriter.WriteActions.<locals>.<listcomp>�inputs�process_outputs_as_sourcesr��'process_outputs_as_mac_bundle_resourcescsg|]}�j|���qSr)rx)r�r�)rwr=rrr�{s)r�)
�GetToolchainEnvrNr�r�r#rj�IsRuleRunUnderCygwinrh�int�WriteNewNinjaRulerSr�r�)r=r�r�r�r��all_outputsr�rq�description�	is_cygwin�argsr��pool�	rule_name�_r�r�r)rwr=rr�`s6


zNinjaWriter.WriteActionsc
s`�j��g}�xL|D�]B}d|kr2|jdg�r2qd|d�jf}|d}	�jd|jdd�dtd|�}
�jd	kr��jj|�nd
�t|jdd��r�d
nd}�j	||	|
��|�\}}	d$}
t
dg�}x0|	D](}x"|
D]}d||kr�|j|�q�Wq�Wt|�}�fdd�}��fdd�|jdg�D�}|jdg�}t
|�}|�rJ|d7}|dk�r|t
|�dk�r|�j|d||d�g}g}�x�|D�]Ήtjj���tjj��\��tjj��\��������fdd�|dD�}t|jdd
���r�||7}�|k}|�st|jdd
���r(||7}|�r(|j��g}x�|D]�}|dk�rT|jd|��f�n�|dk�r��j��j�}|jd||�f�nd|dk�r��j��j�}|jd||�f�n8|dk�r�|jd�f�n|dk�r2|jd|��f�n�q2W��fd d�|D�}�jd	k�r*|jd!tj|dd
d"�j�f��jj||�j��|||d#�|j|��q�WqW|S)%Nr�Zrule_sourcesz%s_%sr�ZRULEr�z%s rrFr�rr�rormrnrprqz${%s}cs�r|jdd�S|S)Nrbra)r")r,)r�rr�cygwin_munge�sz,NinjaWriter.WriteRules.<locals>.cygwin_mungecsg|]}�j|���qSr)rx)r�r�)rwr=rrr��sz*NinjaWriter.WriteRules.<locals>.<listcomp>r�r~�)r�c	s g|]}�j|�������qSr)rr)r�r�)r�rnrprmr=rorrr��sr�r�r�csg|]}�j|���qSr)rx)r�r�)rwr=rrr��sZunique_name)�usedforsecurity)�implicitr�r�)rormrnrprq)r�r�rNr�rlr#rjr�r�r��set�add�sortedrr�r+r,rvr|r-�remover�rhr^�hashlib�md5�	hexdigestrSr�rxr�)r=r�r�r�r�r�r��rulerqr�r�r�r�Zspecial_localsZneeded_variablesZargument�varr�r�r�Z
num_inputsr�Zwas_mac_bundle_resource�extra_bindingsZdirname_expandedZsource_expandedr)r�rnrwrpr�rmr=rorr��s�










zNinjaWriter.WriteRulesc	Cs�g}|jr"|jj�}|j|d�}n|j�}x�|D]�}x�|dD]~}tjj|�}tjj|�d}	|j||�}
|jtjj|d|	�|�}||j	j
|d|
|d�7}|jr>|j|jj
��r>|j|�q>Wq0W|S)N)�additional_settings�filesr~Zdestination�copy)r�)r��GetPerTargetSettingsr�r+r,rvr|rxrXrSr�r�rZGetBundleContentsFolderPathr�)r=r�r�r�r��	extra_envrwr�r,r��src�dstrrrr��s"

zNinjaWriter.WriteCopiesc
Csx|j�}|d}|d}|jd�}||j_t|jtdd�|��}d|fdt|j|�fg}	|j|jj	|d||	|d	��d
S)zFPrebuild steps to generate hmap files and copy headers to destination.r�Zmac_framework_headerszheaders.hmapcSs
|jd�S)Nz.h)r�)r�rrrr�!sz6NinjaWriter.WriteiOSFrameworkHeaders.<locals>.<lambda>�	framework�copy_headers�compile_ios_framework_headers)r�r�N)
�ComputeMacBundleOutputrer�Zheader_map_path�maprxr�r�rSr�)
r=r�r�r�rZall_sourcesrr.Zall_headersr�rrrr�s

z$NinjaWriter.WriteiOSFrameworkHeadersc		Cs�g}|jj�}|j|d�}|j|�}|jj|j�}x�tjjt	d|jt
|j|��D]^\}}|j|�}t
jj|�ddkr�|jj|d|dd|fd	|fgd
�|j|�qR|j|�qRW|S)
z.Writes ninja edges for 'mac_bundle_resources'.)r�rr~z	.xcassets�mac_tool�mactool_cmd�copy-bundle-resourcerwr7)r����)r	r
)r�r��GetSortedXcodeEnv�ComputeExportEnvString�IsBinaryOutputFormatrfr rtZGetMacBundleResourcesrlrrxrhr+r,r-rSr�r�)	r=Z	resources�bundle_dependsr�rrw�isBinaryr.�resrrrr�(s 


z#NinjaWriter.WriteMacBundleResourcescCs�|sdSi}ddd�}|jj|j}x*|j�D]\}}|j|�}|r.|||<q.Wd}	|rj|jd�}	|	|d<g}
|
jtjj|jj	�d��|	r�|
j|	�t
tj|�|j
�}|jj�}|j|d�}
|j|
�}
|j|jj|
d	|d
|
fd|fgd��|	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)ZXCASSETS_APP_ICONZXCASSETS_LAUNCH_IMAGEz!assetcatalog_generated_info.plistzoutput-partial-info-plistz
Assets.car)r��compile_xcassetsrw�keys)r�)r�rf�itemsr�rer�r+r,rXZGetBundleResourceFolderr$�json�dumpsr#r�rr
r�rSr�)r=r�rZextra_argumentsZsettings_to_argZsettingsZsettings_keyZarg_namer�r�r�rrrwrrrr�>s<




zNinjaWriter.WriteMacXCassetscstjjtd�j�j�\}}}}|s(dS�j|�}|rz�jtj	j
|��}dj�fdd�|D��}�jj
|d|d|fgd�}�j|d	�}�j|�}|r��jd
�}�jj
|d||g�}�jj�j�}	ttj|	��j�}	�jj�j�}
�jj
|d|d
|fd|	fd|
fgd�|j|�dS)z.Write build rules for bundle Info.plist files.rN� csg|]}t|�j��qSr)r*r#)r�r))r=rrr�xsz1NinjaWriter.WriteMacInfoPlist.<locals>.<listcomp>�preprocess_infoplist�defines)r�)r�zmerged_info.plist�merge_infoplist�copy_infoplistrwrr7)r rtZGetMacInfoPlistrlr�rxrhrer+r,r�rXrSr�rr
ZGetExtraPlistItemsrfr$rrr#rr�)r=r�rZ
info_plist�outrrZintermediate_plistrwrrr)r=rr�ls6



zNinjaWriter.WriteMacInfoPlistcs��jdkrl�jjdd��jjdd��jjdd��jjdd	��jjd
d��jjdd
��jjdd��jdks�t�j�dkr��j�j�������St�������fdd��jD��SdS)z.Write build rules to compile all of |sources|.�host�arz$ar_hostr�z$cc_hostr�z	$cxx_host�ldz$ld_host�ldxxz
$ldxx_host�nmz$nm_host�readelfz
$readelf_hostrsr~c3s2|]*}|�j�j|������|d�fVqdS))r/N)�WriteSourcesForArchr�)r�r/)rirf�precompiled_header�
predependsr=r�r�rrr��sz+NinjaWriter.WriteSources.<locals>.<genexpr>N)r{rSr�r#rr�r#r�)r=�
ninja_filerfrir�r%r$r�r)rirfr$r%r=r�r�rr��s
zNinjaWriter.WriteSourcesc	'	sg}	�jdkr^�jj||d�}
�jj|�}�jj|�}dg�jj|�}
dg�jj|�}�n�jdk�r<�jj|�}�jj|�}
�jj|�}�jj|�}�jj	|�}	�jj
|�j�}}|�sd}�jdkr�|d�j7}t
jjt
jj|�j�j��}|d	}|d
}�j|d|g��j|d|g��j|d
�jg�n$|jdg�}
|jdg�}|jdg�}�jdk�r�t
jjdd�j�t
jjdd�j�|}t
jjdd�j�t
jjdd�j�|}n\�jdk�rt
jjdd�j�t
jjdd�j�|}t
jjdd�j�t
jjdd�j�|}|jdg�|	}�j|d�fdd�|D���jdk�r��j|dt�j|���j|d�fdd��jj|�j�D��|jdg�}�j���jdk�r��jj||�}�j|d ��fd!d�|D���jdk�r |jd"g�}�jj||�}�j|d#��fd$d�|D��|j|�}�jdk�rhx0dHD](\}}|j||�}|�r<|j||��q<W|jd-g�}�j|dt�j|
���j|dt�j|���j|dt�j|���jdk�r�j|d.t�j|
���j|d/t�j|���j|d-t�j|��|j �g}d0}�x�|D�]�}t
jj!|�\}}|d1d2�}�j"} |dIk�r\d4}!d5�j#_$n�|d%k�s||d6k�r��jdk�r�d'}!n�|d7k�r��jdk�r�d8}!n��jdk�r�|d9k�rΈjj%|��r�d9}!d:} nh�jdk�r�|d)k�r�d;}!nL�jdk�r|d+k�rd<}!d5�j#_$n(�jdk�r|d=k�rd=}!d>} d5}n�q�j|�}"�j&|| �}#|d2k	�rbt'|#|�}#|j(|"g|#g|�}$g}%�jdk�r�|j)|"|#|$|!||�j�\}%}#}$|j*|#|!|"d?d�|$D�||%d@�|j+|#��qW|�r|jdA|�}&�j|dB��fdCd�|&D���j,||�|j �|S)Jz.Write build rules to compile all of |sources|.rs)r/z	$cflags_cz
$cflags_ccrryrzrcz.c.pdbz.cc.pdbZ	pdbname_cZ
pdbname_ccZ	pchprefix�cflags�cflags_c�	cflags_cc�CPPFLAGSr�CFLAGSZCXXFLAGSrZ
CPPFLAGS_hostZCFLAGS_hostZ
CXXFLAGS_hostrcsg|]}t|�j��qSr)r*r#)r�r))r=rrr��sz3NinjaWriter.WriteSourcesForArch.<locals>.<listcomp>�asmflagsZrcflagscsg|]}t�j|��j��qSr)r$rhr#)r�r�)r=rrr��s�include_dirsZincludescs$g|]}td�j|���j��qS)z-I)r$rxr#)r�r�)rwr=rrr��s�midl_include_dirsZ
midl_includescs$g|]}td�j|���j��qS)z-I)r$rxr#)r�r�)rwr=rrr��s�c�cflags_pch_cr��
cflags_pch_cc�m�cflags_pch_objc�mm�cflags_pch_objcc�arflags�cflags_objc�cflags_objccFr~N�cppr�T�S�s�cc_sr�z_asm.obj�objc�objcxx�rcz.rescSsg|]\}}}|�qSrr)r�r��gchrrrr�5s)r�r�r��resource_include_dirsZresource_includescs$g|]}td�j|���j��qS)z-I)r$rxr#)r�r�)rwr=rrr�<s�r/r0�r�r1�r2r3�r4r5)rBrCrDrE)r�r9r�)-r#r�Z	GetCflagsZ
GetCflagsCZGetCflagsCCZ
GetCflagsObjCZGetCflagsObjCCrjZGetAsmflagsZGetComputedDefinesZGetCompilerPdbNamerhr{r+r,rvrXrPrq�WriteVariableListr��environr|rZ
GetRcflagsrxr�ZAdjustIncludeDirsZAdjustMidlIncludeDirsZGetPchBuildCommandsZ
GetIncluder�r�r-rYrzr<ZHasExplicitAsmRulesrer1ZGetObjDependenciesZGetFlagsModificationsr�r��WritePchTargets)'r=r&rfrir�r%r$r�r/Z
extra_definesr'r(r)r7r8r,Z	pdbpath_cZ
pdbpath_ccryZpdbpathrr-r.�pch_commandsrpr��includer6r�Z
has_rc_sourcero�filenamerY�commandr�r.r�r�rAr)rwr=rr#�s

(*((





 






zNinjaWriter.WriteSourcesForArchc
Csd|sdSxV|D]N\}}}}ddddd�|}ddd	d
d�}|j|�}	|j||	|||fgd�qWdS)z-Writes ninja rules to compile prefix headers.Nr0r1r3r5)r/r�r2r4r�r�r=r>)r�)r�r�)
r=r&rIr@Z	lang_flagr�r�Zvar_namer�cmdrrrrHDs
zNinjaWriter.WritePchTargetsc
s��jdkst�j�dkr.�j�j������S�j��}������fdd��jD�}g}|}	�jst�j|�||��ddkr��jr�|jd|f��jj	||d	gd
||d�n�jj	|	d||d�|Sd
S)z0Write out a link step. Fills out target.binary. rsr~cs.g|]&}�j�j|����|�|d��qS))r/)�WriteLinkForArchr�)r�r/)r:rirfr�r=r�rrr�\sz)NinjaWriter.WriteLink.<locals>.<listcomp>r3r@rBrz.TOC�solipo)r��lipoN)r@rB)
r#rr�rNrS�
ComputeOutputr��AppendPostbuildVariabler�r�)
r=r�rfrir�r:r.r�r�Zbuild_outputr)r:rirfr�r=r�r�	WriteLinkUs"


zNinjaWriter.WriteLinkc#s�dddd�|d}d}	t�}
t�}t�}|r8|j|�d|k�rVt�}
�x
|dD�]�}�jj|�}|slqT|j�}|�r.g}�jdkr�|jr��jj��r�|j}|j	r�|j|j	�nL�jdkr�|j
r�|j
g}n2|j�j�r�|j|j�|
j|jd	�n|jg}x,|D]$}||
k�r|
j|�|j
|��qW|j�}|�sH||jkrT|
j|�qTWg}�jj�rz�jdk�rz|j
d3��j||�}|dk�r��j�r��j||||�|dd
k}�jdk�r�tjjdd�j�}n�jdk�r�tjjdd�j�}�jdk�r*�jj��jtd��j|�}||}�n�jdk�rЈj�j|��}�jj��j�j|||�j�\}}}||}�j |d|�|
j!|�}
|�r��j |d|g�t"�jj#���}	�jj$�j�}|�r8|
j|�nh||jdg�}|�r8t%|��r8d}�jdk�r|�j7}|j
d|�n|j
d�j&�|j
d|��j |dt'�j|��|jdg�}�jdk�r���fdd�|D�}�fdd�|D�}n�fdd�|D�}t(j)j*t'�j|jd g���}�jdk�r؈jj+|��}n�jdk�r�jj+|�}�j |d!||�|} |d4k�rH|j
d"tj,j|�d#f�|j
d$t(j)j-|�f��jdk�r�|}!�j�rb�jj.�}!|�rt|!d%|7}!|!d&7}!|!j/d'd(�}!|j
d)t(j)j-|!�f��jdk�r(|j
d*|f�d+|k�rF�jj0���rF|d,�j_
|j
d-d.�jj
f��jj1��j|d/�}"|�jj
g}|"�rF|j
|"�n�j�s>||d	g}n|d0}n>�jdk�r�|j
d*|f��jj1��j|d/�}"|"�r�||"g}t%|��r�|j
d1t(j)j2t3|��f�|j4|||	|t3|
�t5|�|d2�| S)5z0Write out a link step. Fills out target.binary. �link�
solink_module�solink)�
executablerBr@r3rr�rz.TOCr�$ldxxNrWrz�LDFLAGSrZLDFLAGS_hostrsrZ	manifestsZintermediatemanifest�ldflagszlib/z-Wl,-rpath=\$$ORIGIN/%sz
-Wl,-rpath=%sz-Wl,-rpath-link=%s�library_dirscsg|]}�jj|���qSr)rjrk)r��l)rfr=rrr��sz0NinjaWriter.WriteLinkForArch.<locals>.<listcomp>cs"g|]}dt�j|��j��qS)z	/LIBPATH:)r$rxr#)r�r\)r=rrr��scs"g|]}td�j|��j��qS)z-L)r$rxr#)r�r\)r=rrr��s�	librariesZlibsZsonamer~rrcz.rsprr��link_file_listr7z/NOENTRYz.libZ
implibflagz
/IMPLIB:%sz.pdbZ_notoc�solibs)r�r�r�)rrX)rVrU)6r�r�rOr�rAr#r9rjZIsUseLibraryDependencyInputsr:r;rCr7r�rDrzr<rQr�rRr{r+rGr|r�Z
GetLdflagsrhrlrxre�ComputeOutputFileNamerTrF�union�_GetWinLinkRuleNameSuffixZIsEmbedManifestZ
GetDefFilerr�rr r[ZuniquerZAdjustLibrariesr,�EncodePOSIXShellArgument�GetWrapperNamer"ZGetNoImportLibraryZ
GetPDBName�EncodePOSIXShellListr�r�r�)#r=r&r�rfrir�r:r/rLZcommand_suffixZ
implicit_depsr_Z
order_deps�extra_link_depsr�rzZlinkableZnew_depsZnew_depZfinal_outputr�r.Z
is_executableZenv_ldflagsrZZmanifest_base_nameZintermediate_manifestZmanifest_filesZdef_fileZrpathr[r]Z
linked_binaryr^Zpdbnamer)rfr=rrNps



















zNinjaWriter.WriteLinkForArchc
s�t�fdd�|jdg�D��}|ddks6|rJ|rJ|�j_d�j_�nv|ddk�r��j|��j_�jdkr��jr��jj	�jjd||d��q�g}�j
r��j
j|�}|r�|jd
|f��j
r�j
j|�j�}	|jd|	f��jdkp�t�j�dk�r.�j||�jj�jj��jj	�jjd|||d�nzg}
xD�jD]:}�j||�}�j|j	|d||||d�|
j|��q:W�j||�jj�jj��jj	�jjd|
|d�n�j|||||��j_�jjS)Nc3s(|] }|�jkr�jj|�j�VqdS)N)rOr�rA)r�r�)r=rrr�.sz*NinjaWriter.WriteTarget.<locals>.<genexpr>r�r3�noner?rs�openbsd�netbsdr�
alink_thin)r��
libtool_flags�libflagsr~�alink)r�r�)r�)rsrhrir)�anyr�rzr7r3rQr#r�rSr�r�ZGetLibtoolflagsr�rjZGetLibFlagsrxrr�rRr�rS)
r=r�rfrir�r:rfr�rkrlr�r/r.r)r=rr�-sN


zNinjaWriter.WriteTargetcCs�|ddk}|j�}|r |d7}g}|j||||jj|d�|r�|r�|ddkrr|jjrr|jj|d||d�q�|jd|jj	�f�|jj|d	||d�n|jj|d
||d�||j_
|S)Nr3r@rBz.stamp)�is_command_start�package_ios_framework)r��version�package_frameworkr)r@rB)rrRrzr7r�ZisIOSrSr�r�ZGetFrameworkVersionr8)r=r�r�Zis_emptyrrr.r�rrrr�as$



zNinjaWriter.WriteMacBundlecCs&|j|d�}|jdkr"|j|d�}|S)z:Returns the variables toolchain would set for build steps.)r�r)rr#�GetMsvsToolchainEnv)r=r�rwrrrr�xs

zNinjaWriter.GetToolchainEnvcCs|jjd|jd�S)z>Returns the variables Visual Studio would set for build steps.z
$!PRODUCT_DIR)ri)rjZ
GetVSMacroEnvrf)r=r�rrrrs�szNinjaWriter.GetMsvsToolchainEnvcCs*|j}tjj|j|tjj||j�|j	|�S)z6Returns the variables Xcode would set for build steps.)
rVr rtrr�r+r,rXr]rf)r=r�rVrrrr�s
zNinjaWriter.GetSortedXcodeEnvcCs(i}|jjd�}|r||d<|j|d�S)z:Returns the variables Xcode would set for postbuild steps.ZCHROMIUM_STRIP_SAVE_FILE)r�)r�ZGetPerTargetSettingr)r=Zpostbuild_settingsZstrip_save_filerrr�GetSortedXcodePostbuildEnv�sz&NinjaWriter.GetSortedXcodePostbuildEnvFcCs&|j||||�}|r"|jd|f�dS)zAAdds a 'postbuild' variable if there is a postbuild for |output|.�
postbuildsN)�GetPostbuildCommandr�)r=r�r�r.r7roZ	postbuildrrrrR�sz#NinjaWriter.AppendPostbuildVariablec	Cs|js|ddks|rdSt||j�}tjj|dd�}|dk	r�|jj|jtj	j
tj	j|j|��ttj	j
tj	j|j|��|j�|dd�}|s�dS|j
dtjjd|jg��|j|j��}|d	d
jdd�|D��}|d
|d}|r�d|d
Sd|SdS)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 ' && '.r3rgrT)�quietNrZcdz (z && cSsg|]}tj|��qSr)r'r()r�rLrrrr��sz3NinjaWriter.GetPostbuildCommand.<locals>.<listcomp>z$); G=$$?; ((exit $$G) || rm -rf %s) z&& exit $$G)�(z$ && ()r�r$r#r rtZGetSpecPostbuildCommandsZAddImplicitPostbuildsrfr+r,rvrXr^�insertr[rer]r
rt)	r=r�r.Z
output_binaryrorurwZcommandsZcommand_stringrrrrv�s.
zNinjaWriter.GetPostbuildCommandcCs@g}x0|D](\}}|jd|tjtjj|��f�q
Wdj|�S)z�Given an environment, returns a string looking like
        'export FOO=foo; export BAR="${FOO} bar;'
    that exports |env| to the shell.z
export %s=%s;r)r�r'r(r r[rcrX)r=rwZ
export_str�k�vrrrr
�s
z"NinjaWriter.ComputeExportEnvStringcCs"td}|jtjj||jj���S)zDReturn the 'output' (full output path) to a bundle output directory.r)rlrhr+r,rXr�rd)r=r,rrrr�sz"NinjaWriter.ComputeMacBundleOutputc	Cs�|s|d}tjt�}t|d|ji�|d|d|d|dd�}|jd|j|d��}|d	|d	|d
|dd�}|jd�}|r�d
|}n|j|d�}d|kr�|d}n|d}|dkr�t|d�}|dkr�d|||fS|dkr�d|Std|��dS)z@Compute the filename of the final output for the current target.r3r#rr
r)rBr@r?rWZproduct_prefixr�SHARED_LIB_SUFFIXrr	Zproduct_extensionrcZproduct_namer�rr?rBr@rWz%s%s%srgz%s.stampzUnhandled output type %sN)r?rBr@rW)r�rl�CalculateVariablesr#r�r�	Exception)	r=r�r3�default_variablesZDEFAULT_PREFIXrZDEFAULT_EXTENSIONr0rzrrrr`�s8




z!NinjaWriter.ComputeOutputFileNamec
Csx|d}|jdkr,|jj|j|j�}|r,|S|dkrR|jdkrR|dkrR|jj�}n|j||�}|dkr�d	|kr�tj	j
|d	|�}|j|�Sddg}|jdkr�|jd
kr�|ddg7}n|jdkr�|jd
kr�|dg7}|dk	�rd}|jd
k�rtj	j
dd|j�}tj	j
|t||��S||k�s&|j
�r*|S|dk�rfd
}	|jd
k�rXtj	j
d
d|j�}	tj	j
|	|�S|j|dd�SdS)z2Compute the path for the final output of the spec.r3rNrsr?rWr@rBrgrzr/z%srF)r})r?rWr@rB)r#rjZ
GetOutputNamerfrhr�ZGetExecutablePathr`r+r,rXr{r1r�re)
r=r�r/r3�overriderKr,Ztype_in_output_rootZarchdirZlibdirrrrrQs>





zNinjaWriter.ComputeOutputcCs"|dkrg}|j|dj|��dS)Nr)r�rX)r=r&r��valuesrrrrF4szNinjaWriter.WriteVariableListc
s��jdkr0�fdd�|D�}�jj|�jd�}n*�jdkrZ�fdd�|D�}tjj|��}�j}�jdkrx|d�j7}|d|7}t	j
d	d
|�}ddd
ddg}	ddjtt	j
|	��d}	t	j
|	dd
|�}d}
d}�fdd�|D�}�jdk�rF|d}
|�rdnd�j}|�r&�jj|�j�}ntjj|�}dtj|
|}
n(�j���tjj|�}
d�j�|
}
�jj||
||d||
|d��jj�||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.rcs"g|]}�jj|�j�jd��qS))ri)rjrkr^rf)r�r)r=rrr�Bsz1NinjaWriter.WriteNewNinjaRule.<locals>.<listcomp>)rirscsg|]}tjj|���qSr)r rtru)r�r)rwrrr�Isrzrcz
[^a-zA-Z0-9_]r�z${root}z
${dirname}z	${source}z${ext}z${name}z(?!�|�)z\$Ncsg|]}�j|�j��qSr)rhr^)r�r)r=rrr�asz.$unique_name.rsprrz%%s gyp-win-tool action-wrapper $arch zcd %s; T)r��restatr��rspfile�rspfile_content)r#rjrkrfr rtrurqr{r�subrXrr(r]ZBuildCygwinBashCommandLiner!ZEncodeRspFileList�sysrWr
r[rerSr�r�)r=rqr�r�r�rwr�r�r�Zprotectr�r�Zrun_inrLr)rwr=rr�:sF






zNinjaWriter.WriteNewNinjaRule)N)N)N)T)N)N)N)N)N)N)F)N)N)N))rGrHrIr>rhrrrxrer�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r#rHrSrNr�r�r�rsrrtrRrvr
rr`rQrFr�rrrrrK�sR
#


$

%&w."
 
=4


	
$

2
-rKcCsjtjj|�}|dkr~|jdd�|jdd�|jdtd�|jdtd�dd	ljj}t|d
g�a	t|dg�a
t|dg�an�|d
k�rtjj
}|jdd
�d|d|d<d|d<d|d|d<d|d<d|d|d<dd	ljj}t|d
g�a	t|dg�a
tjj||�nV|}|dk�r"d}|jd|�|jdd�|jdtjjdd��|jdtjjdd��d	S)zDCalculate additional variables for use in the build (called by gyp).rsZOSr|z.dylibZSHARED_LIB_DIRrZLIB_DIRrN�+generator_additional_non_configuration_keys�"generator_additional_path_sections�!generator_extra_sources_for_rulesrrcrWr	rr
r?rrr@Zandroid�linuxz.soz
$!PRODUCT_DIRrry)r r[�	GetFlavor�
setdefaultrlZgyp.generator.xcode�	generatorZxcode�getattrr�r�r��MSVSUtilZTARGET_TYPE_EXTZgyp.generator.msvsZmsvsr!ZCalculateCommonVariablesr+r,rX)r�paramsr#Zxcode_generatorZextsZmsvs_generatorZoperating_systemrrrr}}sL




r}cCs@tjj|djpd�}|jdi�jdd�}tjjtjj||��S)zEReturns the path from the toplevel_dir to the build output directory.�optionsrcr��
output_dirr)r+r,r�Zgenerator_outputr�rvrX)r�Z
generator_dirr�rrr�ComputeOutputDir�sr�cCs4|dj}tjjtjj|t|�d��}||d�adS)zBCalled by __init__ to initialize generator values based on params.r�Zgypfiles)�toplevel�qualified_out_dirN)r`r+r,rvrXr��generator_filelist_paths)r�r�r�rrr�CalculateGeneratorInputInfo�s

r�r�cCstjj|�t||�S)z;Open |path| for writing, creating directories if necessary.)r r[ZEnsureDirExists�open)r,�moderrrr��sr�cCs |j|d�}|r|d|S|S)Nrr)r�)rM�wrappers�prog�wrapperrrr�CommandWithWrapper�sr�c
sPttjjdd��}|r|Stjdkr�ddl�G�fdd�d�j�}|�}�j|�|_	�j
jj�j
|��td|jd�}tdttjjdd���}t||�Stjjd��rtjjd��rtd��D}tjd�}x2|D]*}|j|�}|s�q�tdt|jd��d�SWWdQRXdStjdk�rHy"ttjdddg��}	td|	d�SdSndSdS) z6Returns a best-guess for a number of concurrent links.ZGYP_LINK_CONCURRENCYr�win32�cygwinNc
sXeZdZd�jfd�jfd�jfd�jfd�jfd�jfd�jfd�jfd	�jfg	Zd
S)z1GetDefaultConcurrentLinks.<locals>.MEMORYSTATUSEX�dwLengthZdwMemoryLoad�ullTotalPhysZullAvailPhysZullTotalPageFileZullAvailPageFileZullTotalVirtualZullAvailVirtualZsullAvailExtendedVirtualN)rGrHrIZc_ulongZc_ulonglongZ_fields_r)�ctypesrr�MEMORYSTATUSEX�sr�r~�r��ZGYP_LINK_CONCURRENCY_MAX� r�z
/proc/meminfoz^MemTotal:\s*(\d*)\s*kB���darwinZsysctlz-nz
hw.memsize�)r�r�i@llii�i@l)r�r+rGr�r��platformr�Z	StructureZsizeofr�ZwindllZkernel32ZGlobalMemoryStatusExZbyref�maxr��minrr,�existsr�r�compiler�group�
subprocessZcheck_output)
Z	pool_sizer��statZ	mem_limitZhard_capZmeminfoZmemtotal_re�linerZavail_bytesr)r�r�GetDefaultConcurrentLinks�s:






$r�cCs|rdSdS)zwReturns the suffix used to select an appropriate linking rule depending on
  whether the manifest embedding is enabled.Z_embedrr)�embed_manifestrrrrbsrbc	s��fdd�}t��}ttjjdd��dk}d|j�}dtj|f}||dd	�}|jd
|||ddd
dd�|jd|||ddd
dd�dtj|f}||dd�}|jd|d|j�|dddd�dS)z7Adds link rules for Windows platform to |master_ninja|.cs$ddd�|}dtj|||�d�S)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�ldcmdZresnameZembed)r�rW)r�rZbinary_typeZ
resource_name)r�rr�FullLinkCommandsz)_AddWinLinkRules.<locals>.FullLinkCommandZGYP_USE_SEPARATE_MSPDBSRV�0rzLINK%s(DLL) $binaryz\%s gyp-win-tool link-wrapper $arch %s $ld /nologo $implibflag /DLL /OUT:$binary @$binary.rspz$binaryr�rVz$binary.rspz$libs $in_newline $ldflagsT�	link_pool)r�rLr�r�r�r�rUzK%s gyp-win-tool link-wrapper $arch %s $ld /nologo /OUT:$binary @$binary.rspr�rTzLINK%s $binaryz$in_newline $libs $ldflags)r�rLr�r�r�N)	rbr�r+rGr��upperr�rWr�)�master_ninjar�r�Zrule_name_suffixZuse_separate_mspdbsrvZdlldescZdllcmdZexe_cmdr)r�r�_AddWinLinkRuless8




r�cGs�|d}tjj|�}|jdi�}tjjtjjt|����}tjj|j	|�}	t
tjj|	d��}
tj|
dd�}tjj
||	|�|dkr�d}d}
d}d	}d
}nd}d}
d
}d}d}d}d}|}d}d}d}d}d}d}d}d}d}tjj|d�\}}}||jdg�}tjj||j	�} i}!�xx|D�]n\}"}#|"dk�r@tjj| |#�}|"dk�rXtjj| |#�}|"dk�r�tjj| |#�}
|
jd��r�|
}|"dk�r�tjj| |#�}|"dk�r�tjj| |#�}|#}|"dk�r�tjj| |#�}|#}|"dk�r�tjj| |#�}|"dk�rtjj| |#�}|"dk�rtjj| |#�}|"d k�r0tjj| |#�}|"d!k�rHtjj| |#�}|"d"k�r`tjj| |#�}|"jd#��rtjj| |#�|!|"dtd#��<�qWxZtjj�D]L\}"}#|"j�jd#��r�|"dtd#��}$tjd$d%|$�}$tjj| |#�|!|$<�q�W|jd&d�}%|%�rd'|%|!d(<|dk�r���fd)d*�|D�}&d}'|jd+d��sJtjj|&|�}'tjj|	||'t
�}(xbt|(j��D]R\})}*|�r||}*td|!t|*d��}+|�r�|+|)d,k�r�d-nd.7}+|jd/|)|+��qjWtd0dg|
�}
|jdtd|!|
��td1dg|�}|jd2td|!|��|dk�rd|jd3|�|jd4d5�|jd|�|jd6d7�|jd8d9�|jd:d;�|jd<d=�nt|jd3td(|!|��|jd>td(|!|��|jdtd?dg|��|d@k�r�|jdtdAdg|��|jdtdBd!g|��t�r�|�s�|
}|�s�|}|jdCtdDg|��|jdEtdFg|��|jdGtdHg|��tdIg|�}tdJg|�}dK|k�rb|�rb|j dK|
�}dL|k�r~|�r~|j dL|�}|jdMtd|!|��|jdNtd|!|��|dk�r�|jdO|�n(|jdOtd(|!|��|jdPtd(|!|��|j!�|j"dQt#�dR�|j!�|dk�rdSndT},|dk�r\|j$ddUdVdW|,dX�|j$dYdUdZd[�|j$d2d\d]dW|,dX�nvd�}-d�}.|j$ddU|-dadb|,dc�|j$d2d\|.dadd|,dc�|j$d4dedft%j&d[�|j$d6dgdht%j&d[�|j$didjdkt%j&d[�|d@k�rj|dk�rj|j$dldmdnd[�|j$dodmdpd[�dqdrdsdt�}/|j$dudvdw|/dxdyidzd{dQd|�|j$d}d~dw|/dxdyidzddQd|�|j$d�d�d�dQd���n�|dk�r�|j$dld�d�t%j&dad�d��t'|dwd��t'|d�d���n�|j$d�d�d�dW|,dX�|j$d�d�d�dW|,dX�|j$dld�d�d[�|j$d�d�d�d[�|j$d�d�d�d�d�id[�d�}0d�|0d�dt�}/d�}1|j$dud�dw|/|1d�d��dzd�dQd|�|j$d�d�dw|0|1d�d��dzd�dQd|�|j$d}d�dw|/|1d�d��dzd�dQd|�|j$d�d�dw|0|1d�d��dzd�dQd|�|j$d�d�d�dQd��|j$d�d�d�d[�|j$d�d�d�d[�|j$d�d�d�d[�|j$d�d�d�d[�|j$d�d�d�d[�|j$d�d�d�d[�|j$d�d�d�d[�|j$d�d�d�d[�|dk�	r\|j$d�d�d�t%j&d[�n|j$d�d�d�d[�|dk�	r�|j$d�d�d�t%j&d[�n,|d�k�	r�|j$d�d�d�d[�n|j$d�d�d�d[�|j!�t(�}2x@|d�D]4}x,tjj)|�tjj|��D]}3|2j*|3��	q�W�	q�Wt(�}4i}5i}6t(�}7t(�}8�x�|D�]�}9tjj|9�\}}:};||jdg�}<�|9}=|d@k�
rxtj+j,|||=�tjj-||j	d��}tjj.||:|;�}>|>j/dʃ}>t0j1|>d�dˍj2�}?tjj3|�}@d�}A|;d�k�
r�|Ad�|;7}Atjj|A|@|:d��}Bt4�}Ct5|?|5|@||C|	|B||j	dЍ	}D|Dj6|=�|�}3|Cj7�dk�rlt
tjj|	|B���}E|Ej8|Cj9��WdQRX|Cj:�|j;|B�|3�r�|:|3j<�k�r�|=d�d�k�r�|6j=|:g�j>|3�|3|5|9<|9|2k�r�|4j*|3j<��|8j*|:�n
|7j*|:��
q,W|6�r$|j!�|j?d҃x.t|6�D]"}F|j@|Fd�d�d*�|6|FD���q�W|7|8}7|7�rd|j!�|j?dՃxt|7�D]}:|j@|:dӃ�qNW|4�r�|j!�|j@d�d�t|4��|jA|jd�dփ�|
j:�dS)�Nr�r�zbuild.ninja�x)�widthrzlib.exeZUNSETzlink.exez$ldrr�zc++z$ccz$cxxz$cc_hostz	$cxx_hostr!r"r�make_global_settings�ARzAR.host�CCzclang-cl�CXXzCC.hostzCXX.hostZLDzLD.hostZNMzNM.host�READELFzREADELF.hostZ_wrapperz\.HOST$z.hostr�zexport DEVELOPER_DIR='%s' &&ZLINKcsg|]}�|d��qS)r�r)r��qualified_target)rf�target_dictsrrr��sz+GenerateOutputForConfig.<locals>.<listcomp>Z"ninja_use_custom_environment_filesrLz -m32z -m64Zcl_Z	CC_targetZ
CXX_targetr�rr�zmidl.exer?zrc.exeZml_x86zml.exeZml_x64zml64.exeZmtzmt.exer Z	AR_targetrsZ	NM_targetZREADELF_target�ar_hostZAR_host�nm_hostZNM_host�readelf_hostZREADELF_hostZCC_hostZCXX_hostz$(CC)z$(CXX)r�r��ld_host�	ldxx_hostr�)�depthZmsvc�gcczCC $outzU$cc -MMD -MF $out.d $defines $includes $cflags $cflags_c $cflags_pch_c -c $in -o $outz$out.d)r�rLr��depsr<zE$cc $defines $includes $cflags $cflags_c $cflags_pch_c -c $in -o $out)r�rLzCXX $outzX$cxx -MMD -MF $out.d $defines $includes $cflags $cflags_cc $cflags_pch_cc -c $in -o $outzninja-build -t msvc -e $arch zH-- $cc /nologo /showIncludes /FC @$out.rsp /c $in /Fo$out /Fd$pdbname_c zJ-- $cxx /nologo /showIncludes /FC @$out.rsp /c $in /Fo$out /Fd$pdbname_cc z$out.rspz$$defines $includes $cflags $cflags_c)r�rLr�r�r�z%$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 $inrmzAR $outz'rm -f $out && $ar rcs $arflags $out $inrjz(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' '; })rV�extract_tocrVzSOLINK $libT�suffixz@$link_file_listz$link_file_listz<-Wl,--whole-archive $in $solibs -Wl,--no-whole-archive $libs)r�r�rLr�r�r�rUzSOLINK(module) $libz3-Wl,--start-group $in -Wl,--end-group $solibs $libsrTz	LINK $outzH$ld $ldflags -o $out -Wl,--start-group $in -Wl,--end-group $solibs $libs)r�rLr�zLIB $outzU%s gyp-win-tool link-wrapper $arch False $ar /nologo /ignore:4221 /OUT:$out @$out.rspz$in_newline $libflags)r�rLr�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$postbuildsrPzLIPO $out, POSTBUILDSz6rm -f $out && lipo -create $in -output $out$postbuildsrOzSOLIPO $out, POSTBUILDSz\rm -f $lib $lib.TOC && lipo -create $in -output $lib$postbuilds &&%(extract_toc)s > $lib.TOCr�z]{ 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)r�r3z$in $solibs $libsZsolink_notoczSOLINK(module) $lib, POSTBUILDSz-bundleZsolink_module_notoczLINK $out, POSTBUILDSz1$ld $ldflags -o $out $in $solibs $libs$postbuildsrzPREPROCESS INFOPLIST $outzT$cc -E -P -Wno-trigraphs -x c $defines $in -o $out && plutil -convert xml1 $out $outrzCOPY INFOPLIST $inz:$env ./gyp-mac-tool copy-info-plist $in $out $binary $keysrzMERGE INFOPLISTS $inz-$env ./gyp-mac-tool merge-info-plist $out $inrzCOMPILE XCASSETS $inz.$env ./gyp-mac-tool compile-xcassets $keys $inrz2COMPILE 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_headersrzMACTOOL $mactool_cmd $inz1$env ./gyp-mac-tool $mactool_cmd $in $out $binaryrrz"PACKAGE FRAMEWORK $out, POSTBUILDSzG./gyp-mac-tool package-framework $out $version$postbuilds && touch $outrpz&PACKAGE IOS FRAMEWORK $out, POSTBUILDSzC./gyp-mac-tool package-ios-framework $out $postbuilds && touch $outrz
STAMP $outz%s gyp-win-tool stamp $outz${postbuilds}touch $outr�z
COPY $in $outz)%s gyp-win-tool recursive-mirror $in $outZzoszrm -rf $out && cp -fRP $in $outz>ln -f $in $out 2>/dev/null || (rm -rf $out && cp -af $in $out)Zbuild_fileszutf-8)r�ryrzrcz.ninja)r`r{zShort names for targets.ZphonycSsg|]}|j��qSr)rD)r�r�rrrr�	sz(Empty targets (output for completeness).�allZdefault_targetzeninja-build -t msvc -e $arch -- $cc /nologo /showIncludes /FC @$out.rsp /c $in /Fo$out /Fd$pdbname_c zgninja-build -t msvc -e $arch -- $cxx /nologo /showIncludes /FC @$out.rsp /c $in /Fo$out /Fd$pdbname_cc )Br r[r�r�r+r,rvrXr�r`r�r'rRZCopyToolZParseQualifiedTargetr\r�rrGr�lowerrr�r!ZExtractSharedMSVSSystemIncludesZGenerateEnvironmentFilesr�r�r$r�r�$generator_supports_multiple_toolsetsr"r�r�r�r�r�rWr�r�Z
AllTargetsr�rtZMergeGlobalXcodeSettingsToSpecZRelativePathZQualifiedTarget�encoder�r�r�rnrrKr��tell�write�getvalue�closer�rDr�r�Zcommentr��default)G�target_listr��datar�rfr�r#r�rQrTZmaster_ninja_filer�rr�r�rr�r r�r�r�r�Zcc_host_global_settingZcxx_host_global_settingZclang_clr!r�r"r�Z
build_filer�r�Z
build_to_rootr��keyr�Z
key_prefixr�ZconfigsZshared_system_includesZcl_pathsr/r,rLr�Z
cc_commandZcxx_commandZmtime_preserving_solink_baseZsolink_baseZ
solink_suffixZall_targetsrzr�rOZtarget_short_namesZempty_target_namesZnon_empty_target_namesr�rqr{Zthis_make_global_settingsr�Zqualified_target_for_hashrN�	base_pathryr_Zninja_output�writerr&Z
short_namer)rfr�r�GenerateOutputForConfigGsR	











&
























r�cCsP|d}xB|D]:}tjj|jd|�}dd|g}td||f�tj|�qWdS)Nr�rzninja-buildz-CzBuilding [%s]: %s)r+r,rXr`r�r�Z
check_call)r�r�r�r�riZbuilddirZ	argumentsrrr�PerformBuild�	s

r�cCs2tjtjtj�|\}}}}}t|||||�dS)N)�signal�SIGINT�SIG_IGNr�)Zarglistr�r�r�r�rfrrr�CallGenerateOutputForConfig�	sr�c
Cstjj|�}|jdi�jdd�}tjj|�dkrRtj||�\}}tj||t	�\}}|rht
|||||�n�||dd}|dr�yDtjt
|��}g}x |D]}|j|||||f�q�W|jt|�Wn.tk
r�}	z|j�|	�WYdd}	~	XnXnx|D]}t
|||||�q�WdS)Nr�rirrr�Zparallel)r rtZ&CloneConfigurationForDeviceAndEmulatorr�r[r�r�ZShardTargetsZInsertLargePdbShimsrlr��multiprocessingZPoolrr�rr��KeyboardInterruptZ	terminate)
r�r�r�r�Zuser_configZconfig_namesr�Zarglistsrf�errr�GenerateOutput�	s2



r�)r�)6Z
__future__rr�r�r�rr�Zos.pathr+rr�r�r�r Z
gyp.commonrZgyp.msvs_emulationZgyp.MSVSUtilr�Zgyp.xcode_emulationZ	cStringIOr�ImportError�iorZgyp.ninja_syntaxr'rlr�r�r�r�r[ZCrossCompileRequestedr�rr$r*r1�objectr2rKr}r�r�r�r�r�rbr�r�r�r�r�rrrr�<module>s�




n04

71Q