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: //usr/lib/python3.6/site-packages/gyp/generator/__pycache__/ninja.cpython-36.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|�}d|ks�t|��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,�normpath�AssertionErrorrXr])r=r,�envZexpandedrrr�GypPathToNinja(s





zNinjaWriter.GypPathToNinjaTcCs�|j|�}|jd�st|��d}|jdkr:|d|j7}tjj|�\}}tjj|�sdtd|��|rv|jd|}tjj	tjj
||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.rt�obj�targetrcz5'%s' can not be absolute path (see crbug.com/462153).)rhrrx�toolsetr+r,�split�isabsrqrwrXrP)r=r,�	qualifiedr{Zpath_dirZ
path_basenamerrrre<s	



z!NinjaWriter.GypPathToUniqueOutputcCsx|dd�|D�kst|��t|�dkr4|s0t�dSt|�dksD|rp|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.cSsg|]}|r|�qSrr)�.0�trrr�
<listcomp>fsz:NinjaWriter.WriteCollapsedDependencies.<locals>.<listcomp>rN�z.stamp�stamp)�
order_only)rxrrerS�build�newline)r=rqZtargetsr�r�rrr�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�jj<��s�t=|���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�)r�r/)r=rr�	<genexpr>�sz(NinjaWriter.WriteSpec.<locals>.<genexpr>�dependenciesTcSsg|]}|r|�qSrr)r�r)rrrr��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)rz)r��o)r=rrr��szdWarning: Actions/rules writing object files don't work with multiarch targets, dropping. (target %s)r?)>rfrqr}r2r|�bool�get�is_standalone_static_libraryr�r ruZIsMacBundler#�
is_mac_bundle�xcode_settingsrjZ
XcodeSettingsr�r!ZMsvsSettingsZGetArchrS�variablerZZGetActiveArchs�archsr�dict�arch_subninjasrO�appendrErFr<r�r4r5�WriteActionsRulesCopiesr6�	TypeError�print�str�subninjar�ZVerifyMissingSourcesrVrzZPrecompiledHeaderrerYZMacPrefixHeader�WriteSources�collections�defaultdict�listr3r9r:�WriteTarget�WriteMacBundlerDrx)r=�specrf�generator_flagsrir�r/r�r��depr|�
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)rjZGetIdlBuildDatarfrzr�rSr��extend)r=ro�prebuild�outputsr.�vars�flags�inputr)r�r�r=ror�_WinIdlRules
	

zNinjaWriter._WinIdlRulecCsP|jdkst�|jj|�rgSg}x(tdd�|d�D]}|j|||�q6W|S)z3Writes rules to match MSVS's implicit idl handling.rcSs
|jd�S)Nz.idl)r�)�xrrrr�)sz.NinjaWriter.WriteWinIdlFiles.<locals>.<lambda>r�)r#rxrjZHasExplicitIdlRulesOrActions�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.
    r|z(%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)rz)r��i)ryr=rrr�vsz,NinjaWriter.WriteActions.<locals>.<listcomp>�inputs�process_outputs_as_sourcesr��'process_outputs_as_mac_bundle_resourcescsg|]}�j|���qSr)rz)r�r�)ryr=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)ryr=rr�`s6


zNinjaWriter.WriteActionsc
sv�j��g}�xb|D�]X}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�nz|dk�r��j��j�}|jd||�f�nN|dk�r�|jd�f�n4|dk�r�|jd|��f�n|dk�s2tt|����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)rz)r�r�)ryr=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)rz)r�r�)ryr=rrr��sZunique_name)�usedforsecurity)�implicitr�r�)rormrnrprq)!r�r�rNr�rlr#rjr�r�r��set�add�sortedrr�r+r,rwr~r-�remover�rhr^rx�repr�hashlib�md5�	hexdigestrSr�rzr�)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�rnryrpr�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,rwr~rzrXrSr�r�rZGetBundleContentsFolderPathr�)r=r�r�r�r��	extra_envryrr,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�maprzr�r�rSr�)
r=r�r�r�rZall_sourcesr	r.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'.)rrr�z	.xcassets�mac_tool�mactool_cmd�copy-bundle-resourceryr7)r����)rr)r�r�GetSortedXcodeEnv�ComputeExportEnvString�IsBinaryOutputFormatrfr ruZGetMacBundleResourcesrlrrzrhr+r,r-rSr�r�)	r=Z	resources�bundle_dependsr�rry�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_xcassetsry�keys)r�)r�rf�itemsr�rer�r+r,rXZGetBundleResourceFolderr$�json�dumpsr#rrrr�rSr�)r=r�rZextra_argumentsZsettings_to_argZsettingsZsettings_keyZarg_namer�r�r�rrryrrrr�>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�)rzmerged_info.plist�merge_infoplist�copy_infoplistryrr7)r ruZGetMacInfoPlistrlr�rzrhrer+r,r�rXrSr�rrZGetExtraPlistItemsrfr$rrr#rr�)r=r�rZ
info_plist�outrrZintermediate_plistryrrr)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_ccrr{r|rcz.c.pdbz.cc.pdbZ	pdbname_cZ
pdbname_ccZ	pchprefix�cflags�cflags_c�	cflags_cc�CPPFLAGSr�CFLAGSZCXXFLAGSr"Z
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$rzr#)r�r�)ryr=rrr��s�midl_include_dirsZ
midl_includescs$g|]}td�j|���j��qS)z-I)r$rzr#)r�r�)ryr=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$rzr#)r�r�)ryr=rrr�<s�r4r5�r�r6�r7r8�r9r:)rGrHrIrJ)r�r>r�)-r#r�Z	GetCflagsZ
GetCflagsCZGetCflagsCCZ
GetCflagsObjCZGetCflagsObjCCrjZGetAsmflagsZGetComputedDefinesZGetCompilerPdbNamerhr}r+r,rwrXrPrq�WriteVariableListr��environr~rZ
GetRcflagsrzr�ZAdjustIncludeDirsZAdjustMidlIncludeDirsZGetPchBuildCommandsZ
GetIncluder�r�r-rYr|r<ZHasExplicitAsmRulesrer1ZGetObjDependenciesZGetFlagsModificationsr�r��WritePchTargets)'r=r+rfrir�r*r)r�r/Z
extra_definesr,r-r.r<r=r1Z	pdbpath_cZ
pdbpath_ccr{Zpdbpathrr2r3�pch_commandsrpr��includer;r�Z
has_rc_sourcero�filenamerY�commandr�r.r�r�rFr)ryr=rr(�s

(*((





 






zNinjaWriter.WriteSourcesForArchc
Csd|sdSxV|D]N\}}}}ddddd�|}ddd	d
d�}|j|�}	|j||	|||fgd�qWdS)z-Writes ninja rules to compile prefix headers.Nr5r6r8r:)r4r�r7r9r�r�rBrC)r�)r�r�)
r=r+rNrEZ	lang_flagr�r�Zvar_namer�cmdrrrrMDs
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�rSrS�
ComputeOutputr��AppendPostbuildVariabler�r�)
r=r�rfrir�r:r.r�rZ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$�$ldxxNr\r|�LDFLAGSr"Z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$rzr#)r�ra)r=rrr��scs"g|]}td�j|��j��qS)z-L)r$rzr#)r�ra)r=rrr��s�	librariesZlibsZsonamer�rrcz.rsprr��link_file_listr7z/NOENTRYz.libZ
implibflagz
/IMPLIB:%sz.pdbZ_notoc�solibs)r�r�r�)r$r])r[rZ)6r�r�rOr�rAr#r9rjZIsUseLibraryDependencyInputsr:r;rCr7r�rDr|r<rVr�rWr}r+rLr~r�Z
GetLdflagsrhrlrzre�ComputeOutputFileNamerTrK�union�_GetWinLinkRuleNameSuffixZIsEmbedManifestZ
GetDefFilerr�rr r[ZuniquerZAdjustLibrariesr,�EncodePOSIXShellArgument�GetWrapperNamer"ZGetNoImportLibraryZ
GetPDBName�EncodePOSIXShellListr�r�r�)#r=r+r�rfrir�r:r/rQZcommand_suffixZ
implicit_depsrdZ
order_deps�extra_link_depsr�r|ZlinkableZnew_depsZnew_depZfinal_outputrr.Z
is_executableZenv_ldflagsr_Zmanifest_base_nameZintermediate_manifestZmanifest_filesZdef_fileZrpathr`rbZ
linked_binaryrcZpdbnamer)rfr=rrSps



















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�)rsrmrnr)�anyr�r|r7r3rVr#r�rSr�r�ZGetLibtoolflagsr�rjZGetLibFlagsrzrr�rWr�rX)
r=r�rfrir�r:rkr�rprqr�r/r.r)r=rr�-sN


zNinjaWriter.WriteTargetcCs�|js
t�|ddk}|j�}|r*|d7}g}|j||||jj|d�|r�|r�|ddkr||jjr||jj	|d||d�q�|j
d|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)
r�rxrrWr|r7r�ZisIOSrSr�r�ZGetFrameworkVersionr8)r=r�r�Zis_emptyrwr.r�rrrr�as&




zNinjaWriter.WriteMacBundlecCs&|j|d�}|jdkr"|j|d�}|S)z:Returns the variables toolchain would set for build steps.)rr)rr#�GetMsvsToolchainEnv)r=rryrrrr�xs

zNinjaWriter.GetToolchainEnvcCs|jjd|jd�S)z>Returns the variables Visual Studio would set for build steps.z
$!PRODUCT_DIR)ri)rjZ
GetVSMacroEnvrf)r=rrrrrx�szNinjaWriter.GetMsvsToolchainEnvcCs4|js
t�|j}tjj|j|tjj||j	�|j
|�S)z6Returns the variables Xcode would set for build steps.)rVrxr rurr�r+r,rXr]rf)r=rrVrrrr�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.r7rtZ	postbuildrrrrW�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 ' && '.r3rlrT)�quietNrZcdz (z && cSsg|]}tj|��qSr)r'r()r�rQrrrr��sz3NinjaWriter.GetPostbuildCommand.<locals>.<listcomp>z$); G=$$?; ((exit $$G) || rm -rf %s) z&& exit $$G)�(z$ && ()r�r$r#r ruZGetSpecPostbuildCommandsZAddImplicitPostbuildsrfr+r,rwrXr^�insertr[rjr]rry)	r=r�r.Z
output_binaryrtrzryZcommandsZcommand_stringrrrr{�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[rhrX)r=ryZ
export_str�k�vrrrr�s
z"NinjaWriter.ComputeExportEnvStringcCs,|js
t�td}|jtjj||jj���S)zDReturn the 'output' (full output path) to a bundle output directory.r)	r�rxrlrhr+r,rXr�ri)r=r,rrrr�s
z"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?r\Zproduct_prefixr�SHARED_LIB_SUFFIXrr	Zproduct_extensionrcZproduct_namer�rr?rBr@r\z%s%s%srlz%s.stampzUnhandled output type %sN)r?rBr@r\)rrl�CalculateVariablesr#r�r�	Exception)	r=r�r3�default_variablesZDEFAULT_PREFIXrZDEFAULT_EXTENSIONr0r|rrrre�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?r\r@rBrgr|r/z%srF)r�)r?r\r@rB)r#rjZ
GetOutputNamerfrhr�ZGetExecutablePathrer+r,rXr}r1r�re)
r=r�r/r3�overriderPr,Ztype_in_output_rootZarchdirZlibdirrrrrVs>





zNinjaWriter.ComputeOutputcCs2t|t�st�|dkrg}|j|dj|��dS)Nr)�
isinstancer�rxr�rX)r=r+r��valuesrrrrK4szNinjaWriter.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 rurv)r�r)ryrrr�Isr|rcz
[^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 rurvrqr}r�subrXrr(r]ZBuildCygwinBashCommandLiner!ZEncodeRspFileList�sysr\rr[rjrSr�r�)r=rqr�r�r�ryr�r�r�Zprotectr�r�Zrun_inrQr)ryr=rr�:sF






zNinjaWriter.WriteNewNinjaRule)N)N)N)T)N)N)N)N)N)N)F)N)N)N))rGrHrIr>rhrrrzrer�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r(rMrXrSr�r�r�rxrryrWr{rrrerVrKr�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_rulesrrcr\r	rr
r?rrr@Zandroid�linuxz.soz
$!PRODUCT_DIRrr{)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�rwrX)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,rwrXr��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�)rR�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+rLr�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_manifestrrrrgsrgc	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�r\)r�r!Zbinary_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�r[z$binary.rspz$libs $in_newline $ldflagsT�	link_pool)r�rQr�r�r�r�rZzK%s gyp-win-tool link-wrapper $arch %s $ld /nologo /OUT:$binary @$binary.rspr�rYzLINK%s $binaryz$in_newline $libs $ldflags)r�rQr�r�r�N)	rgr�r+rLr��upperr�r\r�)�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�}<||<k�
snt+d�|<|f���|9}=|d@k�
r�tj,j-|||=�tjj.||j	d��}tjj/||:|;�}>|>j0d˃}>t1j2|>d�d̍j3�}?tjj4|�}@d�}A|;d�k�
r�|Ad�|;7}Atjj|A|@|:d��}Bt5�}Ct6|?|5|@||C|	|B||j	dэ	}D|Dj7|=�|�}3|Cj8�dk�r�t
tjj|	|B���}E|Ej9|Cj:��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|jA|Fd�d�d*�|6|FD���qW|7|8}7|7�r~|j!�|j@dփxt|7�D]}:|jA|:dԃ�qhW|4�r�|j!�|jAd�d�t|4��|jB|jd�d׃�|
j;�dS)�Nr�r�zbuild.ninja�x)�widthrzlib.exeZUNSETzlink.exez$ldr#r�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�r$r�zmidl.exerDzrc.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�rQr��depsrAzE$cc $defines $includes $cflags $cflags_c $cflags_pch_c -c $in -o $out)r�rQzCXX $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�rQr�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 $inrrzAR $outz'rm -f $out && $ar rcs $arflags $out $inroz(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)r�r�rQr�r�r�rZzSOLINK(module) $libz3-Wl,--start-group $in -Wl,--end-group $solibs $libsrYz	LINK $outzH$ld $ldflags -o $out -Wl,--start-group $in -Wl,--end-group $solibs $libs)r�rQr�zLIB $outzU%s gyp-win-tool link-wrapper $arch False $ar /nologo /ignore:4221 /OUT:$out @$out.rspz$in_newline $libflags)r�rQr�r�)r�FrBz	OBJC $outz[$cc -MMD -MF $out.d $defines $includes $cflags $cflags_objc $cflags_pch_objc -c $in -o $outrCzOBJCXX $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$postbuildsrUzLIPO $out, POSTBUILDSz6rm -f $out && lipo -create $in -output $out$postbuildsrTzSOLIPO $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 $outr zCOPY 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 $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 $binaryrwz"PACKAGE FRAMEWORK $out, POSTBUILDSzG./gyp-mac-tool package-framework $out $version$postbuilds && touch $outruz&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 $outrz
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_fileszDmake_global_settings needs to be the same for all targets. %s vs. %szutf-8)r�r{r|rcz.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 )Cr r[r�r�r+r,rwrXr�r`r�r'rRZCopyToolZParseQualifiedTargetr\r�rrLr�lowerrr�r!ZExtractSharedMSVSSystemIncludesZGenerateEnvironmentFilesr�r�r$r�r�$generator_supports_multiple_toolsetsr"r�r�r�r�r�r\r�r�Z
AllTargetsr�rxruZMergeGlobalXcodeSettingsToSpecZRelativePathZQualifiedTarget�encoder�r�r�rnrrKr��tell�write�getvalue�closer�rDr�r�Zcommentr��default)G�target_listr��datar�rfr�r#r�rQrTZmaster_ninja_filer�r#r�r�r$r�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,rQr�Z
cc_commandZcxx_commandZmtime_preserving_solink_baseZsolink_baseZ
solink_suffixZall_targetsr|r�rOZtarget_short_namesZempty_target_namesZnon_empty_target_namesr�rqr}Zthis_make_global_settingsr�Zqualified_target_for_hashrN�	base_pathr{r_Zninja_output�writerr+Z
short_namer)rfr�r�GenerateOutputForConfigGsX	











&
























r�cCsP|d}xB|D]:}tjj|jd|�}dd|g}td||f�tj|�qWdS)Nr�r!zninja-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 ruZ&CloneConfigurationForDeviceAndEmulatorr�r[r�r�ZShardTargetsZInsertLargePdbShimsrlr��multiprocessingZPoolrr�rr��KeyboardInterruptZ	terminate)
r�r�r�r�Zuser_configZconfig_namesr�Zarglistsrf�errr�GenerateOutput�	s2



r�)r�)6Z
__future__rr�rr�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�rgr�r�r�r�r�rrrr�<module>s�




n04

71Q