
    擖gK                       S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
r
S SKrS SKrS SKrS SKJr  S SKrS SKJr  S SKJr  S SKJr  SSSSSSSS	S
SSSSSS.r/ q/ q/ qSq\R6                  R9                  5       rS rS rS r S r! " S S5      r" " S S5      r#S r$S r%S r&S%S jr'S r(S r)S r*S  r+S! r,S" r-S# r.S$ r/g)&    N)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                 N    U R                  U5      (       a  U [        U5      S  $ U $ N)
startswithlen)argprefixs     5/usr/lib/python3/dist-packages/gyp/generator/ninja.pyStripPrefixr$   C   s'    
~~f3v;=!!J    c                     [         R                  " SU 5      (       a  U $ US:X  a  [        R                  R	                  U 5      $ SU R                  SS5      -   S-   $ )zRQuote 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#   QuoteShellArgumentr0   I   sU    
 
xx(#..
!!11#66S"455;;r%   c                     US:X  a  U R                  SS[        S5      -  5      n [        [        R                  " SU -   5      U5      $ )zWTakes a preprocessor define and returns a -D parameter that's ninja- and
shell-escaped.r'   #z\%03oz-D)r.   ordr0   ninja_syntaxescape)dr/   s     r#   Definer7   U   sB      IIc8c#h./l11$(;VDDr%   c                 V    [         R                  R                  U 5      u  pU  SU U 3$ )z&Adds an arch string to an output path..)ospathsplitext)outputarch	extensions      r#   AddArchr@   _   s.    ((0FXQtfYK((r%   c                   <    \ rS rSrSrS rS rS rS rS r	S r
S	rg
)Targete   a\  Target 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                     Xl         S U l        S U l        S U l        S U l        S U l        S U l        S U l        S U l        SU l	        g )NF)
typepreaction_stampprecompile_stampactions_stampbinarybundlecomponent_objscompile_deps
import_libuses_cpp)selfrE   s     r#   __init__Target.__init__}   sW    	  $ !%!  #   r%   c                      U R                   S;   $ )z;Return true if this is a target that can be linked against.)static_libraryshared_library)rE   rO   s    r#   LinkableTarget.Linkable   s    yy@@@r%   c                 P    US:X  d  U R                   (       a  gU R                  S;   $ )zKReturn true if the target should produce a restat rule based on a TOC
file.r'   FrT   loadable_module)rJ   rE   rO   r/   s     r#   UsesTocTarget.UsesToc   s$     U?dkkyyAAAr%   c                     U R                  U5      (       a  U R                  5       S-   $ U R                  5       =(       d    U R                  $ )zZReturn the path, if any, that should be used as a dependency of
any dependent action step..TOC)r\   FinalOutputrF   r[   s     r#   PreActionInputTarget.PreActionInput   sA     <<##%..!9T%9%99r%   c                 @    U R                   =(       d    U R                  $ )z[Return the path, if any, that should be used as a dependency of
any dependent compile step.)rH   rG   rU   s    r#   PreCompileInputTarget.PreCompileInput   s     !!:T%:%::r%   c                 f    U R                   =(       d    U R                  =(       d    U R                  $ )zGReturn the last output of the target, which depends on all prior
steps.)rJ   rI   rH   rU   s    r#   r`   Target.FinalOutput   s"     {{?dkk?T-?-??r%   )
rH   rI   rJ   rL   rK   rM   rF   rG   rE   rN   N)__name__
__module____qualname____firstlineno____doc__rP   rV   r\   ra   rd   r`   __static_attributes__ r%   r#   rB   rB   e   s(    .>AB:;
@r%   rB   c                   :   \ rS rSr S*S jrS*S jrS rS*S jrS+S jrS*S jr	S	 r
S
 rS rS rS rS rS rS rS rS rS rS rS rS r S*S jrS rS r S*S jrS rS rS*S jrS*S jrS*S jr S  r! S,S! jr"S" r#S# r$S$ r%S*S% jr&S*S& jr'S' r( S*S( jr)S)r*g)-NinjaWriter   Nc
                    Xl         X l        X0l        X@l        [        R
                  " U5      U l        X`l        Xpl        Xl	        SU l
        U	bA  [        R                  R                  [        R                  R                  X5      5      U l
        US:X  a  SOSU l        US:X  a"  0 U l        S H  n
SU
-   U R                   U
'   M     ["        R$                  R'                  XI5      n[        R                  R                  X5      U l        ["        R$                  R'                  X95      n[        R                  R                  X5      U l        g)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_dirr4   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)rO   ru   rv   rw   rx   output_filer{   r|   r/   toplevel_dirr>   build_to_topbase_to_tops                r#   rP   NinjaWriter.__init__   s    & -, "!((5
, 0!#!#l1V!WD!'5vdU?DL&%3d%:T" ' zz44YMWW\\,Ajj33HKWW\\+Ar%   c                    SnX1;   aU  U(       a  UR                  X25      nO<UR                  US-   S5      nUR                  US-   S5      nUR                  US5      nSnXA;   aJ  U R                  S5      nUR                  U[        R                  R	                  U=(       d    SU5      5      nSnUR                  X`R
                  5      nU$ )	zExpand 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   \r9   r   genr	   )r.   GypPathToUniqueOutputr:   r;   r   config_name)rO   r;   product_dirr   r   int_dirr   s          r#   ExpandSpecialNinjaWriter.ExpandSpecial  s     &||K=||K#$5r:||K$$6;||K5/#007G << "'',,{/@b'"JD 4||.0@0@Ar%   c                 f   U R                   S:X  a#  U R                  R                  XR                  S9nUR	                  [
        S   U5      nUR	                  [
        S   U5      nUR	                  [
        S   U5      nUR	                  [
        S   U5      nUR	                  [
        S   U5      nU$ )Nr'   configr   r   r   r   r   )r/   msvs_settingsConvertVSMacrosr   r.   generator_default_variables)rO   r;   rootdirnamesourceextnames          r#   ExpandRuleVariablesNinjaWriter.ExpandRuleVariables"  s    ;;%%%55dCSCS5TD||78IJDQ||78LMwW||78IJFS||78HI3O||78IJDQr%   c                 T   U(       a_  U R                   S:X  a   [        R                  R                  X5      nO/U R                   S:X  a  [        R                  R                  X5      nUR                  S5      (       aB  U R                  U5      nU R                   S:X  a  [        R                  R                  U5      nU$ SU;   a  U R                  U5      nSU;  d   U5       e[        R                  R                  [        R                  R                  U R                  U5      5      $ )zTranslate 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$|$)r/   r+   xcode_emulationExpandEnvVarsr,   ExpandMacrosr   r   r:   r;   normpathr   r   )rO   r;   envexpandeds       r#   GypPathToNinjaNinjaWriter.GypPathToNinja,  s    
 {{e#**88C%))66tA??4  ))$/H{{e#77++H5O4<%%d+D$$$wwT-?-? FGGr%   c                    U R                  U5      nUR                  S5      (       a   U5       eSnU R                  S:w  a  USU R                  -   -  n[        R                  R                  U5      u  pE[        R                  R                  U5      (       a
   SU-  5       eU(       a  U R                  S-   U-   n[        R                  R                  [        R                  R                  X0R                  XE5      5      $ )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targetr9   z5'%s' can not be absolute path (see crbug.com/462153).)r   r   toolsetr:   r;   splitisabsr   r   r   rw   )rO   r;   	qualifiedr   path_dirpath_basenames         r#   r   !NinjaWriter.GypPathToUniqueOutput@  s     !!$'??3''--' <<8#3%%C"$''--"577==** 	
ChN	
*  IIOm;MwwGGLLmmXE
 	
r%   c                 P   X" Vs/ s H  oD(       d  M  UPM     sn:X  d   U5       e[        U5      S:X  a
  U(       a   eg[        U5      S:  d  U(       aI  U R                  US-   5      nU R                  R                  USX#S9nU R                  R	                  5         US   $ s  snf )zGiven 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.r   N   .stampstamp
order_only)r    r   rz   buildnewline)rO   r   targetsr   itemr   s         r#   WriteCollapsedDependencies&NinjaWriter.WriteCollapsedDependenciesf  s     G<GDt4G<<EgE<w<1!!>w<!z..th?Ejj&&ugw&VGJJ qz =s
   
B#B#c                 j    [         R                  R                  U R                  5      S   nU SU S3$ )Nr   r9   .ninja)r:   r;   r<   r|   )rO   r>   output_file_bases      r#   _SubninjaNameForArch NinjaWriter._SubninjaNameForArchv  s6    77++D,A,AB1E"#1TF&11r%   c                 d  ^  UT l         US   T l        US   T l        US   U   n[        US   5      T l        [        UR                  SS5      5      T l        UR                  SS5      T l        [        R                  R                  T R                  U5      T l        S	=T l        T l        T R                  S
:X  aN  [        R                  R!                  U5      T l        UR                  SS	5      nU(       a  UT R                  l        T R                  S:X  Ga  [        R$                  R'                  X5      T l        T R                  R)                  U5      nT R*                  R-                  ST R.                  U   5        T R*                  R-                  SSU-   5        T R*                  R-                  SSU-   5        T R*                  R-                  SSU-   5        T R*                  R-                  SSU-   5        T R*                  R-                  SSU-   5        T R                  S
:X  a  T R                  R1                  U5      T l        [5        T R2                  5      S:  ax  T R2                   Vs0 s H[  nU[6        R8                  " [;        [<        R>                  RA                  T RB                  T RE                  U5      5      S5      5      _M]     snT l#        / n/ nSU;   Ga  US    H  n	U	T RH                  ;   d  M  T RH                  U	   n
URK                  U
RM                  T R                  5      5        URK                  U
RO                  5       5        U
RP                  (       d  M  ST R                  l(        M     U Vs/ s H  o(       d  M  UPM     nnU Vs/ s H  o(       d  M  UPM     nnT RS                  SU5      nT RS                  SU5      nUT R                  l*        UT R                  l+        / n/ nT RY                  XX}5      T R                  l-        T R                  RZ                  =(       d    Un/ n XR                  S/ 5      -   nU(       Ga  T R                  S
:X  aV  [5        T R2                  5      S:  a=  T R2                   H-  nT R*                  Rc                  T RE                  U5      5        M/     S	nT R                  S:X  a  [        R$                  Re                  UT Rf                  UT Rh                  5        [        R$                  Rk                  T R                  UT Rh                  T Rl                  T Rn                  5      nO9[        R                  Rq                  T R                  T Rh                  U 4S j5      nT Rs                  T R*                  UUUUUU5      nU Vs/ s H'  nURu                  T Rn                  5      (       d  M%  UPM)     nnU(       a`  T R                  S
:w  d  [5        T R2                  5      S:X  a&  UU Vs/ s H  nT Ri                  U5      PM     sn-  nOU[_        SUS   -  5        OCT R                  S
:X  a3  [5        T R2                  5      S:  a  [v        Rx                  " [z        5      nT R                  RZ                  =(       d    UnT R                  S:X  a<  T R                  R|                  S :X  a"  UT R                  l?        UT R                  l@        S	nU(       + =(       a    U(       + nU(       d"  T R                  RZ                  (       d  U(       a5  T R                  XXOU5      nT R                  (       a  URK                  U5        T R                  (       a  T R                  XU5      nU(       d  g	T R                  R                  5       (       d   U5       eT R                  $ s  snf s  snf s  snf ! [\         a;    [_        S[a        U5      5        [_        S[a        UR                  S5      5      5        e f = fs  snf s  snf )!zThe 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   configurationsrE   standalone_static_libraryr   target_rpathz\$$ORIGIN/lib/Nr   mac_toolchain_dirr'   r>   ccz$cl_cxxcc_hostcxx_hostasmz$ml_r   wdependenciesTactions_dependscompile_dependssourceszextra_sources: zspec.get("sources"): c                 2   > TR                  U S-   U-   5      $ )N-)r   )r;   langrO   s     r#   <lambda>'NinjaWriter.WriteSpec.<locals>.<lambda>  s    t'A'A$*tBS'Tr%   zdWarning: Actions/rules writing object files don't work with multiarch targets, dropping. (target %s)rS   )Dr   r   r   rB   r   boolgetis_standalone_static_libraryr   r+   r   IsMacBundler/   is_mac_bundlexcode_settingsr   XcodeSettingsr   r,   MsvsSettingsGetArchrz   variabler   GetActiveArchsarchsr    r4   ry   
OpenOutputr:   r;   r   r{   r   arch_subninjasrv   appendra   rd   rN   r   rF   rG   WriteActionsRulesCopiesrH   	TypeErrorprintstrsubninjaVerifyMissingSourcesr}   r   PrecompiledHeaderr   r   MacPrefixHeaderWriteSourcesendswithcollectionsdefaultdictlistrE   rK   rL   WriteTargetWriteMacBundler`   )rO   specr   generator_flagsr   r   r>   r   r   depr   r   extra_sourcesmac_bundle_dependscompile_depends_stamp	link_depsr   pchfobj_outputsorL   r=   is_empty_bundles   `                       r#   	WriteSpecNinjaWriter.WriteSpecz  s    ''	I&'4T&\*,0HH0!4-
) ,//@QR 00<<T[[$O377d0;;%"%"5"5"C"CD"ID / 3 34G N 8I##5;;%!$!3!3!@!@!WD%%--k:DJJT(:;JJftm4JJv}5JJ	6D=9JJ
FTM:JJv}5;;%,,;;KHDJ4::" !%


' !+ ,--"GGLL $ 3 3T5N5Nt5T  	  !+
'#"  T!N+$---!005F#**6+@+@+MN#**6+A+A+CD/3, , 1@H4tOH0?H4tOH"==!?O #==!?O +:DKK'+:DKK(
 $($@$@%
! !% 9 9 L_ 		#hhy"&==G
 {{e#DJJ!(; !JJDJJ''(A(A$(GH ' C{{e#""77T//$BUBU ((::&&''..LL ))99''''T
 ))

%I '.JgDLL1I1gKJ;;%'3tzz?a+?+!N+Q$"5"5a"8+!NNICEI-EXY [[E!c$**o&9#//5I{{00CO;;%DKK$4$48H$H)2DKK&'3DKK$ '-B0B,B11_%%6lF !!"))&1 ((?SF{{&&((0&0({{K
': IH:  	#S%78)3txx	/B+CD	N K "Os>   5A"_
__"
_0__  9$`(!`(`- A`%c           	        ^ ^^ T R                   R                  TT R                  5      u  mpEnT R                  T5      mSUU U4S jjnU VV	s/ s H  u  pX" U	T5      4PM     nnn	U V
s/ s H
  o" U
5      PM     nn
UR	                  ST45        UR	                  SU45        T R                  T5      nT R
                  R                  USXUS9  UR                  U5        gs  sn	nf s  sn
f )zdHandle the implicit VS .idl rule for one source file. Fills |outputs|
with files that are generated.Nc                 @  > [         R                  R                  TU 5      n [         R                  R                  T5      u  p#[         R                  R	                  U5      u  pETR                  XUTXS5      n U(       a  [         R                  R                  X5      n U $ r   )r:   r;   r   r   r<   r   relpath)	r;   relr   basenamer   r   outdirrO   r   s	         r#   fix_path)NinjaWriter._WinIdlRule.<locals>.fix_path0  sr    77<<-D "f 5G((2ID++DWDwwt1Kr%   r  idlflagsidl	variablesr   r   )r   GetIdlBuildDatar   r   r   rz   r   extend)rO   r   prebuildoutputsr=   varsflagsr  r   valuepinputr  s   ``          @r#   _WinIdlRuleNinjaWriter._WinIdlRule(  s     '+&8&8&H&HD$$'
#e $$V,	 	 DHH4KDxv./4H'-.v!(1+v.Xv&'Z'(##F+

(Sv I.s   C#+C)c                     U R                   S:X  d   eU R                  R                  U5      (       a  / $ / n[        S US   5       H  nU R	                  XBU5        M     U$ )z3Writes rules to match MSVS's implicit idl handling.r'   c                 $    U R                  S5      $ )Nz.idlr   xs    r#   r   .NinjaWriter.WriteWinIdlFiles.<locals>.<lambda>G  s    qzz&'9r%   r   )r/   r   HasExplicitIdlRulesOrActionsfilterr  )rO   r   r  r  r   s        r#   WriteWinIdlFilesNinjaWriter.WriteWinIdlFilesA  sa    {{e###::4@@I94	?KFVw7 Lr%   c                    / nU R                   (       a  UR                  S/ 5      SS nO/ n/ nSU;   a  XPR                  US   X#U5      -  nSU;   a  XPR                  US   UUUU5      -  nSU;   a  XPR	                  US   X45      -  nSU;   a#  U R
                  S:X  a  XPR                  X5      -  nU R                  (       a1  U R                  R                  5       (       a  U R                  XU5        U R                  SU5      nU R                   (       a6  U R                  Xv-   U5      n	U R                  X5      n
U R                  X5        U$ )	zgWrite 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WriteCopiesr/   r(  r   IsIosFrameworkWriteiOSFrameworkHeadersr   WriteMacBundleResourcesWriteMacXCassetsWriteMacInfoPlist)rO   r   r   r  r   r  r+  extra_mac_bundle_resourcesr   xcassetspartial_info_plists              r#   r   #NinjaWriter.WriteActionsRulesCopiesK  s_   
 #'88,BB#G#J #% %'"((Y:T G d?W$* G t''XUUG!5,,T<<G4#6#6#E#E#G#G))$B//0FP33*ACUH "&!6!6x!T""#5Jr%   c                     U R                   S:w  a  USU R                   -  -  nU(       a  U SU R                  U5       3$ U SU R                   SU 3$ )zGenerate 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   )rO   verbmessagefallbacks       r#   GenerateDescriptionNinjaWriter.GenerateDescriptionw  s^     <<8#FT\\))DV1T//89::V1TYYKr(44r%   c                    U R                  5       n/ nU GH  nSR                  US   U R                  5      nU R                  SUR	                  SS 5      U5      n	U R
                  S:X  a  U R                  R                  U5      OS n
US   nUR	                  SS 5      nU(       a  U R                  XR                  5      n[        UR	                  SS	5      5      (       a  S
OS nU R                  XXX]US9u  pUS    Vs/ s H  nU R                  UU5      PM     nn[        UR	                  SS5      5      (       a  X'S   -  n[        UR	                  SS5      5      (       a  XGS   -  nUS    Vs/ s H  nU R                  UU5      PM     nnU R                  R                  UUUUS9  UU-  nU R                  R                  5         GM     U$ s  snf s  snf )N{}_{}action_nameACTIONr?  r'   actiondepfileninja_use_consoler   console)rH  inputsprocess_outputs_as_sourcesFr  'process_outputs_as_mac_bundle_resourcesr   )GetToolchainEnvformatru   rA  r   r/   r   GetRuleShellFlagsr   r   intWriteNewNinjaRuler   rz   r   r   )rO   r,  r   r  r8  r   all_outputsrG  r   descriptionwin_shell_flagsargsrH  pool	rule_name_irK  r  r  s                       r#   r0  NinjaWriter.WriteActions  s    ""$F>>&"79L9LMD22&**Y5tK
 ;;%' ""44V< 
 (#DjjD1G,,W6H6HI #FJJ/BA$F G G9TD11K#W 2 LI <B(;KL;Kad))!S1;KFL6:::EBCC	!226::GOPP*Y.??*<B9<MN<Mqt**1c2<MGN JJWiHM7"KJJ ? B  M
 Os    G3Gc                   ^" U R                  5       n/ nU GHK  nSU;  a  UR                  S/ 5      (       d  M#  SR                  US   U R                  5      n	US   n
U R	                  SUR                  SS 5      S[
        S   -   U	-  5      nU R                  S	:X  a  U R                  R                  U5      OS m"[        UR                  S
S5      5      (       a  SOS nU R                  XUT"Xl5      u  pSnS1nU
 H(  nU H  nSU-  U;   d  M  UR                  U5        M!     M*     [        U5      nU"4S jnUR                  S/ 5       Vs/ s H  nU R                  UU5      PM     nnUR                  S/ 5      n[        U5      nU(       a  US-  nUS:  a&  [        U5      S:  a  U R                  US   UUS9/n/ nU GH  n[         R"                  R%                  U5      n[         R"                  R'                  U5      u  nn[         R"                  R)                  U5      u  nnUS    Vs/ s H  nU R+                  UUUUUU5      PM     nn[        UR                  SS5      5      (       a  UU-  nUU;   nU(       d   [        UR                  SS5      5      (       a  UU-  nU(       a  UR-                  U5        / nU H  nUS:X  a  UR/                  SU" U5      45        M$  US:X  a7  U R1                  UU R2                  5      n UR/                  SU" U 5      45        Ma  US:X  a7  U R1                  UU R2                  5      n!UR/                  SU" U!5      45        M  US:X  a  UR/                  SU45        M  US:X  a  UR/                  SU" U5      45        M  Uc  M   [5        U5      5       e   U Vs/ s H  nU R                  UU5      PM     nnU R                  S	:X  a8  UR/                  S[6        R8                  " US   5      R;                  5       45        U R<                  R?                  UUU R                  U5      UUUS9  URA                  U5        GM     GMN     U$ s  snf s  snf s  snf )NrG  rule_sourcesrD  rX  RULEr?  z%s r   r'   rI  r   rJ  )r   r   r   r   r   r   z${%s}c                 \   > T(       a#  TR                   (       a  U R                  SS5      $ U $ )Nr   r   )cygwinr.   )r;   rU  s    r#   cygwin_munge,NinjaWriter.WriteRules.<locals>.cygwin_munge  s$    "'='=<<c22r%   rK  r      r   r  rL  FrM  r   r   r   r   unique_nameimplicitr   r  )!rN  r   rO  ru   rA  r   r/   r   rP  rQ  rR  addsortedr   r    r   r:   r;   r   r   r<   r   remover   r   r   reprhashlibmd5	hexdigestrz   r   r  )#rO   r-  r   r  r+  r8  r   rS  ruler   rV  rT  rW  rX  special_localsneeded_variablesargumentvarra  rZ  rK  r   
num_inputsr   r   r  r   r   r  r  was_mac_bundle_resourceextra_bindingsdirname_expandedsource_expandedrU  s#                                     @r#   r1  NinjaWriter.WriteRules  s    ""$Dt#DHH^R,H,H >>${"3T5H5HID>D22D)45FGG4OK ;;%' ""44T: 
 !$DHH-@!$D E E94D"44K#OI JN (z )C}0(,,S1 * !  &&67 <@88Hb;QR;Qad))!S1;QFR
 hh~r2GVJa
A~#g,"233[)6h 4 
  "))&1$&GGMM&$9!GG,,X6	c
 ")_, ,,QgvsHU,  
 txx <eDEE!W,M*04H*H'*cHHFN/ / /'9.
 /,33F;!#+Cf}&--v|D7I.JK	) ,0+=+=#T%7%7,( '--&5E(FG  +/*<*<VTEWEW*X&--xo9V.WX&--ucl;&--v|H7M.NO"{5DI5{1 ,4 AHH14..q#6H;;%'"))&GAJ(?(I(I(KL 

  ''/#', !  ""7+K "} J s S0^ Is   Q(/ Q-8Q2c           
         / nU R                   (       a*  U R                   R                  5       nU R                  US9nOU R                  5       nU GH  nUS    H  n[        R                  R                  U5      n[        R                  R                  U5      S   n	U R                  X5      n
U R                  [        R                  R                  US   U	5      U5      nX@R                  R                  USXS9-  nU R                  (       d  M  UR                  U R                   R                  5       5      (       d  M  UR                  U5        M     GM	     U$ )Nadditional_settingsfilesr   destinationcopyr   )r   GetPerTargetSettingsrN  r:   r;   r   r   r   r   rz   r   r   r   GetBundleContentsFolderPathr   )rO   r.  r  r   r  	extra_envr   to_copyr;   r  srcdsts               r#   r2  NinjaWriter.WriteCopies?  s*   ++@@BI&&9&EC&&(CG(ww''-77==.q1))$4))GGLL!7BC ::++C+RR%%% ~~++GGI  +11#6) ) . r%   c           
      L   U R                  5       nUS   nUS   nU R                  S5      nXpR                  l        [	        U R
                  [        S U5      5      nSU4S[	        U R
                  U5      4/n	UR                  U R                  R                  USUU	US95        g	)
zFPrebuild steps to generate hmap files and copy headers to destination.r   mac_framework_headerszheaders.hmapc                 $    U R                  S5      $ )Nz.hr"  r#  s    r#   r   6NinjaWriter.WriteiOSFrameworkHeaders.<locals>.<lambda>g  s    !**T2Br%   	frameworkcopy_headerscompile_ios_framework_headersr  N)
ComputeMacBundleOutputr   r   header_map_pathmapr   r'  r  rz   r   )
rO   r   r  r  r  all_sourcesr  r=   all_headersr  s
             r#   r4  $NinjaWriter.WriteiOSFrameworkHeaders_  s    //1	9o34++N;.4+(BK!P
 )$S!4!4lCD
	 	JJ/##  	
r%   c           
      b   / nU R                   R                  5       nU R                  US9nU R                  U5      nU R                   R	                  U R
                  5      n[        R                  R                  [        S   U R                   [        U R                  U5      5       H  u  pxU R                  U5      n[        R                  R                  U5      S   S:w  a6  U R                   R#                  USUSSU4SU4/S	9  UR%                  U5        Mr  UR%                  U5        M     U$ )
z.Writes ninja edges for 'mac_bundle_resources'.rz  r   z	.xcassetsmac_tool)mactool_cmdzcopy-bundle-resourcer   rI   r  )r   r  GetSortedXcodeEnvComputeExportEnvStringIsBinaryOutputFormatr   r+   r   GetMacBundleResourcesr   r  r   r   r:   r;   r<   rz   r   r   )	rO   	resourcesbundle_dependsr9  r  r   isBinaryr=   ress	            r#   r5  #NinjaWriter.WriteMacBundleResourcesw  s    ''<<>	$$$C))#.&&;;D<L<LM..DD'6##Y/
KF
 ''/Fww'+{:

  ?!8,	 ! 	 %%f-$'
( r%   c           
          U(       d  g0 nSSS.nU R                   R                   U R                     nUR                  5        H#  u  pgUR                  U5      nU(       d  M  XU'   M%     Sn	U(       a  U R	                  S5      n	XS'   / n
U
R                  [        R                  R                  U R                   R                  5       S5      5        U	(       a  U
R                  U	5        [        [        R                  " U5      U R                  5      nU R                   R                  5       nU R                  US9nU R!                  U5      nUR#                  U R$                  R'                  U
S	US
U4SU4/S95        U	$ )ay  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.Nzapp-iconzlaunch-image)XCASSETS_APP_ICONXCASSETS_LAUNCH_IMAGEz!assetcatalog_generated_info.plistzoutput-partial-info-plistz
Assets.carrz  compile_xcassetsr   keysr  )r   r   itemsr   r   r   r:   r;   r   GetBundleResourceFolderr0   jsondumpsr/   r  r  r  r  rz   r   )rO   r9  r  extra_argumentssettings_to_argsettingssettings_keyarg_namer  r:  r  r  r  r   s                 r#   r6  NinjaWriter.WriteMacXCassets  sp    !+%3
 &&55d6F6FG&5&;&;&="LLL.Eu,1) '>
 "!%!;!;3" <N78GGLL,,DDFU	
 NN-.!$**_"=t{{K''<<>	$$$C))#.JJ"!3<&$8	  	
 "!r%   c           	         [         R                  R                  [        S   U R                  U R
                  5      u  p4pVU(       d  gU R                  U5      nU(       a  U R                  [        R                  R                  U5      5      nSR                  U Vs/ s H  n[        XR                  5      PM     sn5      nU R                  R                  USUSU4/S9nU R!                  US9n	U R#                  U	5      n	U(       a/  U R                  S5      nU R                  R                  US	X/5      nU R                  R%                  U R&                  5      n
[)        [*        R,                  " U
5      U R                  5      n
U R                  R/                  U R&                  5      nU R                  R                  US
USU	4SU
4SU4/S9  UR1                  U5        gs  snf )z.Write build rules for bundle Info.plist files.r   Nr=  preprocess_infoplistdefinesr  rz  zmerged_info.plistmerge_infoplistcopy_infoplistr   r  rI   )r+   r   GetMacInfoPlistr   r   r   r   r   r:   r;   r  r   r7   r/   rz   r   r  r  GetExtraPlistItemsr   r0   r  r  r  r   )rO   r:  r  
info_plistoutr  r  intermediate_plistr6   r   r  r  s               r#   r7  NinjaWriter.WriteMacInfoPlist  s   .1.A.A.Q.Q'6/
+

   %!%!;!;  ," hhH1q++ 6HIG))"&%w/0	 * J $$$C))#.!%!;!;<O!P))"$58J7WJ ""55d6F6FG!$**T"2DKK@&&;;D<L<LM

s|fd^h5IJ	 	 	
 	c"5  Is   G#c                    U R                   S:X  a  U R                  R                  SS5        U R                  R                  SS5        U R                  R                  SS5        U R                  R                  SS	5        U R                  R                  S
S5        U R                  R                  SS5        U R                  R                  SS5        U R                  S:w  d  [	        U R
                  5      S:X  a!  U R                  U R                  UUUUUU5      $ U R
                   Vs0 s H&  nXR                  U R                  U   UUUUUUUS9_M(     sn$ s  snf ).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   r>   )r   rz   r   r/   r    r   WriteSourcesForArchr   )	rO   
ninja_filer   r   r   
predependsprecompiled_headerr   r>   s	            r#   r   NinjaWriter.WriteSources  sJ    <<6!JJj1JJj1JJ{3JJj1JJ5JJj1JJ	?;;;%3tzz?a#7++

" * !JJ 'D ..''-& / 	 	 '  s   --Ec	                 B   / n	U R                   S:X  a  U R                  R                  X(S9n
U R                  R                  U5      nU R                  R	                  U5      nS/U R                  R                  U5      -   nS/U R                  R                  U5      -   nGOU R                   S:X  Ga|  U R                  R                  U5      nU R                  R                  U5      n
U R                  R                  U5      nU R                  R	                  U5      nU R                  R                  U5      n	U R                  R                  X R                  5      =nnU(       d  SnU R                  S:w  a  USU R                  -   -  n[        R                  R                  [        R                  R!                  UU R"                  U R$                  5      5      nUS	-   nUS
-   nU R'                  USU/5        U R'                  USU/5        U R'                  USU R$                  /5        O6UR)                  S/ 5      n
UR)                  S/ 5      nUR)                  S/ 5      nU R                  S:X  a  [        R*                  R)                  SS5      R-                  5       [        R*                  R)                  SS5      R-                  5       -   U-   n[        R*                  R)                  SS5      R-                  5       [        R*                  R)                  SS5      R-                  5       -   U-   nOU R                  S:X  a  [        R*                  R)                  SS5      R-                  5       [        R*                  R)                  SS5      R-                  5       -   U-   n[        R*                  R)                  SS5      R-                  5       [        R*                  R)                  SS5      R-                  5       -   U-   nUR)                  S/ 5      U	-   nU R'                  USU Vs/ s H  n[/        UU R                   5      PM     sn5        U R                   S:X  a  U R'                  US[1        U R                  W5      5        U R'                  USU R                  R3                  X R4                  5       Vs/ s H(  n[7        U R                  U5      U R                   5      PM*     sn5        UR)                  S/ 5      nU R9                  5       nU R                   S:X  a  U R                  R;                  UU5      nU R'                  USU Vs/ s H,  n[7        SU R5                  UU5      -   U R                   5      PM.     sn5        U R                   S:X  ay  UR)                  S/ 5      nU R                  R=                  UU5      nU R'                  US U Vs/ s H,  n[7        SU R5                  UU5      -   U R                   5      PM.     sn5        UR?                  U5      nU R                   S:X  a9  S! H3  u  nnURA                  UU5      nU(       d  M!  URC                  UU5        M5     UR)                  S"/ 5      nU R'                  US[1        U R                  U
5      5        U R'                  US[1        U R                  U5      5        U R'                  US[1        U R                  U5      5        U R                   S:X  aN  U R'                  US#[1        U R                  W5      5        U R'                  US$[1        U R                  W5      5        U R'                  US"[1        U R                  U5      5        URE                  5         / n S%n!U GH  n"[        R                  RG                  U"5      u  n#nUS&S' nU RH                  n$US(;   a  S)n%S*U RJ                  l&        OUS+:X  d  US,:X  a  U R                   S:w  a  S-n%OUS.:X  a  U R                   S:w  a  S/n%OU R                   S:X  a+  US0;   a%  U R                  RO                  U5      (       d  S1n%S2n$OcU R                   S:X  a	  US3:X  a  S4n%OJU R                   S:X  a  US5:X  a  S6n%S*U RJ                  l&        O U R                   S:X  a  US7:X  a  S7n%S8n$S*n!OGM'  U R5                  U"5      n&U RQ                  U#U$-   5      n'Ub  [S        U'U5      n'URU                  U&/U'/U5      n(/ n)U R                   S:X  a%  URW                  U&U'U(U%UUU R                  5      u  n)n'n(URY                  U'U%U&U( V*V+s/ s H	  u    n*n+U+PM     sn+n*UU)S99  U R[                  U'5        GM     U!(       a]  UR)                  S:U5      n,U R'                  US;U, Vs/ s H,  n[7        SU R5                  UU5      -   U R                   5      PM.     sn5        U R]                  UU5        URE                  5         U $ s  snf s  snf s  snf s  snf s  sn+n*f s  snf )<r  r   r  z	$cflags_cz
$cflags_ccr'   r   r   r9   z.c.pdbz.cc.pdb	pdbname_c
pdbname_cc	pchprefixcflagscflags_c	cflags_ccCPPFLAGSr   CFLAGSCXXFLAGSr  CPPFLAGS_hostCFLAGS_hostCXXFLAGS_hostr  asmflagsrcflagsinclude_dirsincludesz-Imidl_include_dirsmidl_includes))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_s)r   r  r   z_asm.objr  objcr  objcxxrcz.resre  resource_include_dirsresource_includes)/r/   r   	GetCflags
GetCflagsCGetCflagsCCGetCflagsObjCGetCflagsObjCCr   GetAsmflagsGetComputedDefinesGetCompilerPdbNamer   r   r:   r;   r   r   rw   r   WriteVariableListr   environr   r7   r  
GetRcflagsr   r0   rN  AdjustIncludeDirsAdjustMidlIncludeDirsGetPchBuildCommands
GetIncluder   r   r<   r   r   rN   HasExplicitAsmRulesr   r@   GetObjDependenciesGetFlagsModificationsr   r   WritePchTargets)-rO   r  r   r   r   r  r  r   r>   extra_definesr  r  r  r  r  r  	pdbpath_c
pdbpath_ccr   pdbpathr  r6   r  r  r   rZ  r  pch_commandsr   rr  includer  r  has_rc_sourcer   filenamer   commandr  r=   rf  r  rY  gchr  s-                                                r#   r  NinjaWriter.WriteSourcesForArch!  sQ	    ;;%((22;2JF**55kBH++77DI&-$*=*=*K*KK*XXK(>D,?,?,N,N- L [[E!))55kBH''11+>F))44[AH**66{CI ..AA+NM%)%7%7%J%J//& I
 <<8+3--C''**277<<T]]DII+VW#h.	$y0
"":{YKH"":|j\J"":{TYYKHZZ"-Fzz*b1H

;3I <<8#

z2.446**..2.4467  

z2.446**..R06689 
 \\V#

399;**..399;<  

399;**.."5;;=>  **Y+m;	G#LGqF1dkk$:G#L	
 ;;%""JD,>,>(I "" "//::#%8%8 't'9'9!'<dkkJ	 zz."5""$;;%--??kL 	 &%A #4$*=*=a*E#Et{{S%	
 ;;% &

+> C $ 2 2 H H!;! "" /. 'td.A.A!S.I'I4;;W. *==dC;;%S -77TB7''W5 **Y+z8S9K9KV5TU
C(:(:H$E	
 	S););Y%G	
 ;;%""M3t/A/A;+O ""NC0B0BL,Q 	z9c$:L:Lg6VWFGG,,V4MHcab'CllG**'+$s
t{{e/Cu 4 u$<'**>>tDD %%#* %#+"'+$%#+  $ ''/E//70BCF .)<<eWvhPTUHI{{e#.@.V.V&&/+	68 /78x)!Q#x8%#   NN6"q t $*JJ/F$U!""# 32 'td.A.A!S.I'I4;;W2 	Z6q $M$v 9s$   , h>/h3h3hh$3hc                     U(       d  gU H;  u  p4pVSSSSS.U   nSSS	S
S.nUR                  U5      n	UR                  X9XgU4/S9  M=     g)z-Writes ninja rules to compile prefix headers.Nr  r  r  r  )r  r   r  r  r   r   r  r  r  )r   r   )
rO   r  r  r  	lang_flagr   r  var_namer  cmds
             r#   r  NinjaWriter.WritePchTargets  ss    +7'CD#%&(	
 H 	C ''$-CSuI9N8OP ,8r%   c                 ^   U R                   S:w  d  [        U R                  5      S:X  a  U R                  U R                  XX4U5      $ U R                  U5      nU R                   Vs/ s H'  nU R                  U R                  U   UUUXG   UUS9PM)     nn/ n	Un
U R                  (       d  U R                  XXf5        US   S;   aF  U R                  (       d5  U	R                  SU45        U R                  R                  XfS-   /SUU	S	9  U$ U R                  R                  U
S
XS	9  U$ s  snf )0Write out a link step. Fills out target.binary. r   r   r  rE   rY   r   r_   solipor  lipo)r/   r    r   WriteLinkForArchrz   ComputeOutputr   r   AppendPostbuildVariabler   r   )rO   r   r   r   r  rL   r=   r>   rK  ru  build_outputs              r#   	WriteLinkNinjaWriter.WriteLink  sQ   ;;%3tzz?a#7((

Dv,  ''-F !JJ 'D %%''-O  &  '    N!L%%,,^6R
 V EE**%%ufo6

  f_-,	 !  M 

  vv XMAs   '.D*c           	         SSSS.US      nSn	[        5       n
[        5       n[        5       nU(       a  UR                  U5        SU;   Ga  [        5       nUS    GH  nU R                  R                  U5      nU(       d  M(  UR	                  5       nU(       GaE  / nU R
                  S:X  aj  UR                  (       aY  U R                  R                  U5      (       a9  UR                  nUR                  (       a  UR                  UR                  5        OU R
                  S:X  a  UR                  (       a  UR                  /nOgUR                  U R
                  5      (       a:  UR                  UR                  5        U
R                  UR                  S	-   5        OUR                  /nU H-  nUU;  d  M  UR                  U5        UR                  U5        M/     UR                  5       nU(       a  UUR                  :w  d  GM  U
R                  U5        GM     / nU R                  R                   (       a!  U R
                  S:w  a  UR                  S
5        U R#                  X'5      nUc%  U R$                  (       d  U R'                  UUUU5        US   S:H  nU R(                  S:X  a/  [*        R,                  R                  SS5      R/                  5       nO>U R(                  S:X  a.  [*        R,                  R                  SS5      R/                  5       nU R
                  S:X  aE  U R0                  R3                  UU R5                  [6        S   5      U R8                  U5      nWU-   nGOU R
                  S:X  Ga	  U R;                  U R=                  U5      5      nU R                  R3                  UU R8                  U R4                  UUUU R>                  5      u  nnnWU-   nU RA                  USU5        U
RC                  U5      n
U(       a  U RA                  USU/5        [E        U R                  RG                  U5      5      n	U R                  RI                  U R8                  5      nU(       a  U
R                  U5        OWUR                  S/ 5      -   nU(       ax  [K        U5      (       ah  SnU R(                  S:w  a$  UU R(                  -  nUR                  SU-  5        OUR                  SU RL                  -  5        UR                  SU-  5        U RA                  US[O        U R4                  U5      5        UR                  S/ 5      nU R
                  S:X  ae  U Vs/ s H  nU R                  RQ                  UU5      PM!     nnU Vs/ s H+  nS[S        U R9                  U5      U R
                  5      -   PM-     nnO8U Vs/ s H+  n[S        SU R9                  U5      -   U R
                  5      PM-     nn[T        RV                  RY                  [O        U R4                  UR                  S/ 5      5      5      n U R
                  S:X  a  U R0                  R[                  U U5      n O+U R
                  S:X  a  U R                  R[                  U 5      n U RA                  USUU -   5        Un!US;   Ga  UR                  S[*        R\                  R/                  U5      S    45        UR                  S![T        RV                  R_                  U5      45        U R
                  S:w  a  Un"U R$                  (       a  U R0                  Ra                  5       n"U(       a  U"S"U-   -  n"U"S#-  n"U"Rc                  S$S%5      n"UR                  S&[T        RV                  R_                  U"5      45        U R
                  S:X  a  UR                  S'U45        S(U;  a  U R                  Re                  U5      (       d  US)-   U R                  l
        UR                  S*S+U R                  R                  -  45        U R                  Rg                  X0R4                  US,-   5      n#UU R                  R                  /nU#(       a  UR                  U#5        OvU R$                  (       d  UUS	-   /nO]US--   nOWU R
                  S:X  aG  UR                  S'U45        U R                  Rg                  X0R4                  US,-   5      n#U#(       a  UU#/n[K        U5      (       a9  UR                  S.[T        RV                  Ri                  [k        U5      5      45        URm                  UX-   U[k        U
5      [o        U5      US/9  U!$ s  snf s  snf s  snf )0r  linksolink_modulesolink)
executablerZ   rT   rE   r   r   r'   r_   )r  z$ldxxr"  r   LDFLAGSr  LDFLAGS_hostr   r   	manifestsintermediatemanifestldflagszlib/z-Wl,-rpath=\$$ORIGIN/%sz-Wl,-rpath=%sz-Wl,-rpath-link=%slibrary_dirsz	/LIBPATH:z-L	librarieslibs)r!  r   sonamer   r   r9   z.rspr=  rY  link_file_listrI   z/NOENTRYz.lib
implibflagz
/IMPLIB:%sz.pdb_notocsolibsre  )8setrg  rv   r   rV   r/   rK   r   IsUseLibraryDependencyInputsrL   rM   r\   rI   r   r`   r   rN   r  r   r  r   r:   r  r   r   
GetLdflagsr   r   r   r   ComputeOutputFileNamer{   r  union_GetWinLinkRuleNameSuffixIsEmbedManifest
GetDefFiler    r   r  r   r0   r+   r   uniquerAdjustLibrariesr;   EncodePOSIXShellArgumentGetWrapperNamer.   GetNoImportLibrary
GetPDBNameEncodePOSIXShellListrh  r   r   )$rO   r  r   r   r   r  rL   r>   r  command_suffiximplicit_depsr/  
order_depsextra_link_depsr   r   linkablenew_depsnew_depfinal_outputru  r=   is_executableenv_ldflagsr'  manifest_base_nameintermediate_manifestmanifest_filesdef_filerpathr(  library_dirr)  linked_binaryr,  pdbnames$                                       r#   r  NinjaWriter.WriteLinkForArchE  sc   
 !.&
 v,	
 U
 NN<(T!
 "eON+,,005!??,!Hu,"11 ..KKKXX#)#8#8!..&NN6+>+>?-&2C2C$*$5$5#644

6==1%))&--&*@A$*MM?#+"/9+//8%,,W5 $,
  &113<6==#@!%%l3; ,> ;;DKK5$8!!/2##D/< 2 2((vvNV4 <<8#**..B7==?K\\V#**..<BBDK;;%))44""#>}#MN##	G "G+G[[E!!%!;!;**40" ""--##"""##	% "G+G"":{NK)//?M$&& 69N8O 7""22;?N ))44T5H5HIH!!(+ "FJJy"$==GV<<8+T\\)ENN#=#EFNN?T5F5F#FG3e;<z9c$:L:Lg6VWzz."5;;% $0#/K ""22;L#/   $0 $0K $T%8%8%Et{{ST#/  L $0#/K #4$*=*=k*J#JDKKX#/  
 JJ&&""DHH["$=>
	 ;;%++;;I{SI[[E!**::9EIz6<)3KL11!!8RWW]]6-B1-E"FG!!5#***M*Mf*U"VW{{e#!'%% &*%8%8%G%G%IN"cDj0N&(
 "0!7!7S!A%%(

;;NK {{e#%%x&89g- ..AA+NN-3f_DKK*"))%|dkk6L6L'LM #00;;#%7%7&G %dkk&<&<=Fg.'' &6/2!H,[[E!!!8V"45((33//&G  '*v;;!!3::::6&>JK 	$M*J'$ 	 	
 ws   ,&e?2f2f	c           	        ^  [        U 4S jUR                  S/ 5       5       5      nUS   S:X  d  U(       d?  U(       d8  UT R                  l        ST R                  l        T R                  R                  $ US   S:X  Ga  T R                  U5      T R                  l        T R                  S;  aV  T R                  (       dE  T R                  R                  T R                  R                  SXES9  T R                  R                  $ / nT R                  (       a5  T R                  R                  U5      nU(       a  UR                  S	U45        T R                  (       a9  T R                  R                  UT R                  5      n	UR                  S
U	45        T R                  S:w  d  [!        T R"                  5      S:X  a  T R%                  XqT R                  R                  T R                  R                  5        T R                  R                  T R                  R                  SUUUS9  T R                  R                  $ / n
T R"                   HG  nT R                  X5      nT R&                  U   R                  USXK   UUS9  U
R                  U5        MI     T R%                  XqT R                  R                  T R                  R                  5        T R                  R                  T R                  R                  SU
US9   T R                  R                  $ T R)                  XX4U5      T R                  l        T R                  R                  $ )Nc              3      >#    U  H@  nUTR                   ;   d  M  TR                   R                  U5      R                  5       v   MB     g 7fr   )rv   r   rV   ).0r   rO   s     r#   	<genexpr>*NinjaWriter.WriteTarget.<locals>.<genexpr>%  sE      
3d))) 4D##C(11333s
   A0Ar   rE   nonerS   )iosr   netbsdopenbsdr'   
alink_thinr   libtool_flagslibflagsr   r   alink)r   r  r  )anyr   r   rI   rE   r  r/   r   rz   r   r   GetLibtoolflagsr   r   GetLibFlagsr   r    r   r  r   r  )rO   r   r   r   r  rL   rB  r  r\  r]  rK  r>   r=   s   `            r#   r   NinjaWriter.WriteTarget$  s    
xx3
 

 <6!)O ".DKK%DKK~ {{!!!} &\--!%!3!3D!9DKK#MM99

  KK&&i ! p {{!!!i 	&&$($7$7$G$G$TM$!((/=)IJ%%#11==#T%8%8 H $$j(%;<;;%'3tzz?a+?00!););T[[=O=O JJ$$**!#/"+ % J {{!!!;  F $

!%!3!3D!?++D177"#%O'3&/ 8  f- !+ 00!););T[[=O=O JJ$$** #, %  {{!!! "&6l"DKK {{!!!r%   c                 R   U R                   (       d   eUS   S;   nU R                  5       nU(       a  US-  n/ nU R                  UUUU R                  R                  U(       + S9  U(       a  U(       d  US   S:X  a8  U R
                  R                  (       a  U R                  R                  USUUS9  ObUR                  SU R
                  R                  5       45        U R                  R                  US	X&S9  OU R                  R                  US
X&S9  XPR                  l        U$ )NrE   rY   r   )is_command_startrT   package_ios_frameworkr  versionpackage_frameworkr   )r   r  r  r   rI   r   isIOSrz   r   r   GetFrameworkVersionrJ   )rO   r   r   is_emptyrg  r=   r  s          r#   r   NinjaWriter.WriteMacBundleo  s$   !!!! L,QQ,,.hF	$$KK!22 	% 	
 XF|//D4G4G4M4M

  +&'	 !    )T-@-@-T-T-V!WX

  /1C !  JJVW.@V#r%   c                 b    U R                  US9nU R                  S:X  a  U R                  US9nU$ )z:Returns the variables toolchain would set for build steps.rz  r'   )r  r/   GetMsvsToolchainEnv)rO   r{  r   s      r#   rN  NinjaWriter.GetToolchainEnv  s;    $$9L$M;;%**?R*SC
r%   c                 J    U R                   R                  SU R                  S9$ )z>Returns the variables Visual Studio would set for build steps.r   r   )r   GetVSMacroEnvr   )rO   r{  s     r#   rm  NinjaWriter.GetMsvsToolchainEnv  s+    !!//D$4$4 0 
 	
r%   c                     U R                   (       d   eU R                   n[        R                  R                  U R                  U[
        R                  R                  X R                  5      U R                  U5      $ )z6Returns the variables Xcode would set for build steps.)
r}   r+   r   r  r   r:   r;   r   r   r   )rO   r{  r}   s      r#   r  NinjaWriter.GetSortedXcodeEnv  sc    !!!!**""44GGLL(:(:;
 	
r%   c                 p    0 nU R                   R                  S5      nU(       a  X!S'   U R                  US9$ )z:Returns the variables Xcode would set for postbuild steps.CHROMIUM_STRIP_SAVE_FILErz  )r   GetPerTargetSettingr  )rO   postbuild_settingsstrip_save_files      r#   GetSortedXcodePostbuildEnv&NinjaWriter.GetSortedXcodePostbuildEnv  sF     --AA&
 =L9:%%:L%MMr%   c                 ^    U R                  X#XE5      nU(       a  UR                  SU45        gg)zAAdds a 'postbuild' variable if there is a postbuild for |output|.
postbuildsN)GetPostbuildCommandr   )rO   r  r   r=   rI   rd  	postbuilds          r#   r  #NinjaWriter.AppendPostbuildVariable  s1     ,,T6T	lI67 r%   c                    U R                   (       a  US   S:X  d  U(       d  g[        X R                  5      n[        R                  R                  USS9nUb  U R                   R                  U R                  [        R                  R                  [        R                  R                  U R                  U5      5      [        [        R                  R                  [        R                  R                  U R                  U5      5      U R                  5      USS9nU(       d  gUR                  S[        R                  R                  SU R                   /5      5        U R#                  U R%                  5       5      nUS-   S	R                  U Vs/ s H  n[&        R(                  " U5      PM     sn5      -   nUS
U-  -   S-   n	U(       a  SU	-   S	-   $ SU	-   $ s  snf )zReturns 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 ' && '.rE   rW  r   T)quietr   cdz (z && z$); G=$$?; ((exit $$G) || rm -rf %s) z&& exit $$G)(z$ && ()r   r0   r/   r+   r   GetSpecPostbuildCommandsAddImplicitPostbuildsr   r:   r;   r   r   r   insertr   r>  r   r  ry  r4   r5   )
rO   r   r=   output_binaryrd  r|  r   r  commandscommand_strings
             r#   r}  NinjaWriter.GetPostbuildCommand  s    ""d6lf&<F#FKK8((AA$dAS
$,,BB    d.@.@&!IJ"GG$$RWW\\$2D2Dm%TUKK  C 	J  	szz..d6H6H/IJ	
 ))$*I*I*KL kkzRzG<..w7zRST 	 )+122 	 	 '&00n,, Ss    G
c                     / nU HP  u  p4UR                  SU< S[        R                  " [        R                  R                  U5      5      < S35        MR     SR                  U5      $ )zGiven an environment, returns a string looking like
    'export FOO=foo; export BAR="${FOO} bar;'
that exports |env| to the shell.zexport =;r=  )r   r4   r5   r+   r   r:  r   )rO   r   
export_strkvs        r#   r  "NinjaWriter.ComputeExportEnvString  sY     
DAl))#***M*Ma*PQS 
 xx
##r%   c                     U R                   (       d   e[        S   nU R                  [        R                  R                  XR                  R                  5       5      5      $ )zDReturn the 'output' (full output path) to a bundle output directory.r   )r   r   r   r:   r;   r   r   r;  )rO   r;   s     r#   r  "NinjaWriter.ComputeMacBundleOutput  sM    !!!!*=9!!GGLL22AACD
 	
r%   c                     U(       d  US   n[         R                   " [        5      n[        USU R                  05        US   US   US   US   S.nUR	                  SUR	                  US5      5      nUS	   US	   US
   US   S.nUR	                  S5      nU(       a  SU-   OUR	                  US5      nSU;   a  US   nOUS   nUS:X  a  [        US5      nUS;   a  U U U 3$ US:X  a  SU-  $ [        SU-  5      e)z@Compute the filename of the final output for the current target.rE   r/   r   r   r   )rZ   rT   rS   r"  product_prefixr   SHARED_LIB_SUFFIXr   r   product_extensionr9   product_namer   r   )rS   rZ   rT   r"  rW  z%s.stampzUnhandled output type %s)r~  r   CalculateVariablesr/   r   r$   	Exception)	rO   r   rE   default_variablesDEFAULT_PREFIXr"   DEFAULT_EXTENSIONr?   r   s	            r#   r3  !NinjaWriter.ComputeOutputFileName  sP   <D II&AB,x.EF
  11DE/0CD/0CD+,?@	
 *N,>,>tR,HI
  11DE/0CD/0CD+,?@	
 HH01	'0C)O6G6K6KDRT6U	T!.)F -(F$VU3 
 
 XfXi[11V^&&6=>>r%   c                 4   US   nU R                   S:X  a9  U R                  R                  U R                  U R                  5      nU(       a  U$ Uc1  U R                   S:X  a!  US;   a  U R
                  R                  5       nOU R                  X5      nUc:  SU;   a4  [        R                  R                  US   U5      nU R	                  U5      $ SS/nU R                   S:X  a  U R                  S:X  a  US	S
/-  nO&U R                   S:X  a  U R                  S:X  a  US	/-  nUbh  SnU R                  S:w  a-  [        R                  R                  SSU R                  -  5      n[        R                  R                  U[        XR5      5      $ X7;   d  U R                  (       a  U$ US	:X  a^  Sn	U R                  S:w  a-  [        R                  R                  SSU R                  -  5      n	[        R                  R                  X5      $ U R                  USS9$ )z2Compute the path for the final output of the spec.rE   r'   r   )rS   r"  rT   rZ   r   r"  rZ   r   rT   rS   r>   z%sr   F)r   )r/   r   GetOutputNamer   r   r   GetExecutablePathr3  r:   r;   r   r   r@   r   r   )
rO   r   r>   rE   overrider  r;   type_in_output_rootarchdirlibdirs
             r#   r  NinjaWriter.ComputeOutput2  s   F|;;%))77  $"4"4H  Lu$TU **<<>H11$=H<MT177<<] 3X>D%%d++  ,->?;;%DLLH$<$46F#GG[[E!dllh&>$4#55 G||x''',,vtdll/BC77<<)@AA(D,M,MO%%F||x'eTDLL-@A77<<11--h%-HHr%   c                 ~    [        U[        5      (       a   eUc  / nUR                  USR                  U5      5        g )Nr=  )
isinstancer   r   r   )rO   r  rr  valuess       r#   r  NinjaWriter.WriteVariableListd  s8    fc****>FC&!12r%   c                    U R                   S:X  ab  U Vs/ s H1  nU R                  R                  XR                  U R                  S9PM3     nnU R                  R                  X0R                  S9nO^U R                   S:X  aN  U Vs/ s H"  n[
        R                  R                  X5      PM$     nn[
        R                  R                  X55      nU R                  n	U R                  S:X  a  U	SU R                  -   -  n	U	SU-   -  n	[        R                  " SSU	5      n	/ SQn
S	S
R                  [        [        R                  U
5      5      -   S-   n
[        R                  " U
S-   SU5      nSnSnU Vs/ s H  oR                  XR                  5      PM     nnU R                   S:X  a  U	S-   nUR                   (       a  SOSU R"                  -   nUR                   (       a&  U R                  R%                  X R"                  5      nO)[
        R&                  R)                  X$R*                  5      nS[,        R.                  -  U-   U-   nOEU R1                  U5      n[
        R2                  R5                  U5      nSU R"                  -  U-   U-   nU R6                  R9                  U	UUUSUUUS9  U R6                  R;                  5         X4$ s  snf s  snf s  snf )zWrite 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'   r   r   r   r9   z[^a-zA-Z0-9_]rY  )r
   r   r   r   r   z(?!|)z\$Nz.$unique_name.rspr   r=  z%%s gyp-win-tool action-wrapper $arch zcd %s; T)rH  restatrW  rspfilerspfile_content)r/   r   r   r   r   r+   r   r   r   r   r)   subr   r  r5   r   r`  r   BuildCygwinBashCommandLiner,   EncodeRspFileListquotesysr"  r  r   r>  rz   rn  r   )rO   r   rV  rT  rU  r   rW  rH  r!   rX  protectr  r  run_inr  s                  r#   rR  NinjaWriter.WriteNewNinjaRulej  s    ;;%
  	  C ""22++D4D4D 3   	   ,,<<$4$4 = K [[E!KOP4CC''55c?4DP--;;KMK
 II	<<8#t||++IS4Z	FF?C;	
 N#((3ryy'#:;;cAffWu_c;?
 GKLt""3(:(:;tL;;%"55G*11RsT=O=O7OF%%"&"4"4"O"O,,# #&"4"4"F"F//#1 8#..H  --c2Cjj55d;G$"4"44s:WDG
 	

+ 	 		
 	

Q Q0 Ms   8K)K5$K)r}   r   r   rw   r   rx   r   r   r/   ru   r   r   r   r   rz   r   r|   r   rv   r   r   r{   r   r   r   )T)F)+rh   ri   rj   rk   rP   r   r   r   r   r   r   r  r  r(  r   rA  r0  r1  r2  r4  r5  r6  r7  r   r  r  r  r  r   r   rN  rm  r  ry  r  r}  r  r  r3  r  r  rR  rm   rn   r%   r#   rp   rp      s     +BZ>H($
L 2l\2*X5'ROb@
0>1"f)#V+l bHQ,(V TX]~I"V@



N AF8--^
$
1?f0Id3 LPQr%   rp   c                    [         R                  R                  U5      nUS:X  a  U R                  SS5        U R                  SS5        U R                  S[        S   5        U R                  S[        S   5        SS	KJs  Jn  [        US
/ 5      q	[        US/ 5      q
[        US/ 5      qg	US:X  a  [         R                  R                  nU R                  SS5        SUS   -   U S'   SU S'   SUS   -   U S'   SU S'   SUS   -   U S'   SS	KJs  Jn  [        US
/ 5      q	[        US/ 5      q
[         R                   R#                  X5        g	UnUS:X  a  SnU R                  SU5        U R                  SS5        U R                  S[$        R&                  R)                  SS5      5        U R                  S[$        R&                  R)                  SS5      5        g	)zDCalculate additional variables for use in the build (called by gyp).r   OSr  z.dylibSHARED_LIB_DIRr   LIB_DIRr   N+generator_additional_non_configuration_keys"generator_additional_path_sections!generator_extra_sources_for_rulesr'   r9   r"  r   r   r   rS   r   r   rT   androidlinuxz.sor   r   r   )r+   r   	GetFlavor
setdefaultr   gyp.generator.xcode	generatorxcodegetattrr  r  r  MSVSUtilTARGET_TYPE_EXTgyp.generator.msvsmsvsr,   CalculateCommonVariablesr:   r;   r   )r  paramsr/   xcode_generatorextsmsvs_generatoroperating_systems          r#   r  r    s    ZZ!!&)F$$T51$$%8(C$$9-H	
 	$$2=A	
 	656=JB7
3 .5A2.
* -4@"-
) 
5||++$$T5114tL7I1I-.13-.14t<L7M1M-.13-.14t<L7M1M-. 	436=I27
3 .5@".
* 	334EN!Y&$$T+;<$$%8%@$$bggll?EB	
 	$$Y_e0TUr%   c                 (   [         R                  R                  U S   R                  =(       d    S5      nU R	                  S0 5      R	                  SS5      n[         R                  R                  [         R                  R                  X5      5      $ )zEReturns the path from the toplevel_dir to the build output directory.optionsr9   r   
output_dirr  )r:   r;   r  generator_outputr   r   r   )r  generator_dirr  s      r#   ComputeOutputDirr    sj     GGOOF9$5$F$F$M#NM -r266|UKJ 77BGGLLCDDr%   c                     U S   R                   n[        R                  R                  [        R                  R	                  U[        U 5      S5      5      nUUS.qg)zBCalled by __init__ to initialize generator values based on params.r  gypfiles)toplevelqualified_out_dirN)r   r:   r;   r   r   r  generator_filelist_paths)r  r  r  s      r#   CalculateGeneratorInputInfor  	  sS     i --H((
X/7D . r%   c                 V    [         R                  R                  U 5        [        X5      $ )z;Open |path| for writing, creating directories if necessary.)r+   r   EnsureDirExistsopen)r;   modes     r#   r   r     s    JJt$r%   c                 H    UR                  U S5      nU(       a  US-   U-   $ U$ )Nr   r=  )r   )r  wrappersprogwrappers       r#   CommandWithWrapperr    s)    ll3#G}t##Kr%   c            
        ^
 [        [        R                  R                  SS5      5      n U (       a  U $ [        R
                  S;   a  SSKm
 " U
4S jST
R                  5      nU" 5       nT
R                  U5      Ul	        T
R                  R                  R                  T
R                  U5      5        [        SUR                  S-  5      n[        S[        [        R                  R                  S	S
5      5      5      n[!        X45      $ [        R
                  R#                  S5      (       a  [        R$                  R'                  S5      (       a~  [)        S5       n[*        R,                  " S5      nU HM  nUR/                  U5      nU(       d  M  [        S[        UR1                  S5      5      S-  5      s  sSSS5        $    SSS5        gg[        R
                  S:X  a1   [        [2        R4                  " / SQ5      5      n	[        SU	S
-  5      $ g! , (       d  f       g= f! [2        R6                   a     gf = f)z6Returns a best-guess for a number of concurrent links.GYP_LINK_CONCURRENCYr   )win32r`  Nc            
         > \ rS rSrS Y R                  4S Y R                  4S Y R
                  4S Y R
                  4S Y R
                  4S Y R
                  4S Y R
                  4S	 Y R
                  4S
 Y R
                  4/	rSrg)1GetDefaultConcurrentLinks.<locals>.MEMORYSTATUSEXi.  dwLengthdwMemoryLoadullTotalPhysullAvailPhysullTotalPageFileullAvailPageFileullTotalVirtualullAvailVirtualsullAvailExtendedVirtualrn   N)rh   ri   rj   rk   c_ulongc_ulonglong_fields_rm   )ctypess   r#   MEMORYSTATUSEXr  .  s    V^^,0!3!34!3!34#V%7%78#V%7%78"F$6$67"F$6$67+V-?-?@
Hr%   r  r   l        GYP_LINK_CONCURRENCY_MAXl        r  z/proc/meminfoz^MemTotal:\s*(\d*)\s*kBi   darwin)sysctlz-nz
hw.memsize)rQ  r:   r  r   r  platformr  	Structuresizeofr  windllkernel32GlobalMemoryStatusExbyrefmaxr  minr   r;   existsr  r)   compiler*   group
subprocesscheck_outputCalledProcessError)	pool_sizer  stat	mem_limithard_capmeminfomemtotal_reliner*   avail_bytesr  s             @r#   GetDefaultConcurrentLinksr  %  s   BJJNN#91=>I
||**	V-- 	 d+33FLL4FG 4,,?@	q#bjjnn-GQRS9''		 	 	)	)77>>/**o&' jj)CD#D'--d3E  q#ekk!n"5-"HII '&# ' 		!	j556TUVK q+-899
 ' '&  ,, 		s%   AHH(/H* 
H'*I Ic                     U (       a  S$ S$ )zuReturns the suffix used to select an appropriate linking rule depending on
whether the manifest embedding is enabled._embedr   rn   embed_manifests    r#   r5  r5  \  s     &8-2-r%   c           
        ^ U4S jn[        T5      n[        [        R                  R	                  SS5      5      S:g  nSUR                  5       -  n[        R                  < SU< S3nU" USS	5      nU R                  S
U-   UUSSSSS9  U R                  SU-   UUSSSSS9  [        R                  < SU< S3nU" USS5      nU R                  SU-   SUR                  5       -  USSSS9  g)z7Adds link rules for Windows platform to |master_ninja|.c                 F   > SSS.U   nS[         R                  UU UT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  ldcmdresnameembed)r  r"  )r   r  binary_typeresource_namer  s       r#   FullLinkCommand)_AddWinLinkRules.<locals>.FullLinkCommande  s;     #C0= ..('		
r%   GYP_USE_SEPARATE_MSPDBSRV0r   zLINK%s(DLL) $binaryz! gyp-win-tool link-wrapper $arch z7 $ld /nologo $implibflag /DLL /OUT:$binary @$binary.rspz$binaryr  r!  z$binary.rspz$libs $in_newline $ldflagsT	link_pool)rT  r  r  r  r  rW  r   z& $ld /nologo /OUT:$binary @$binary.rspr  r  zLINK%s $binaryz$in_newline $libs $ldflags)rT  r  r  r  rW  N)	r5  rQ  r:   r  r   upperr  r"  rn  )master_ninjar  r%  rule_name_suffixuse_separate_mspdbsrvdlldescdllcmdexe_cmds    `      r#   _AddWinLinkRulesr1  b  s/   
 1@

/JC PQUVV#&6&<&<&>>G ..*?	A 
 VY6F##4   **4   >>0	2 
 gy%8G!!$'7'='='??4  r%   c                 !   US   n[         R                  R                  U5      nUR                  S0 5      n[        R
                  R                  [        R
                  R                  [        U5      U5      5      n[        R
                  R                  UR                  U5      n	[        [        R
                  R                  U	S5      5      n
[        R                  " U
SS9n[         R                  R                  XiU5        US:X  a  SnSnSnS	nS
nOSnSnSnSnSnSnSnUnS nS nS nS nS nSnSnSnSn[         R                  R                  U S   5      u  n  nUU   R                  S/ 5      n[         R                  R                  XR                  5      n 0 n!U GH  u  n"n#U"S:X  a   [        R
                  R                  U U#5      nU"S:X  a   [        R
                  R                  U U#5      nU"S:X  a8  [        R
                  R                  U U#5      nUR!                  S5      (       a  UnU"S:X  a   [        R
                  R                  U U#5      nU"S:X  a"  [        R
                  R                  U U#5      nU#nU"S:X  a"  [        R
                  R                  U U#5      nU#nU"S:X  a   [        R
                  R                  U U#5      nU"S:X  a   [        R
                  R                  U U#5      nU"S:X  a   [        R
                  R                  U U#5      nU"S :X  a   [        R
                  R                  U U#5      nU"S!:X  a   [        R
                  R                  U U#5      nU"S":X  a   [        R
                  R                  U U#5      nU"S#:X  a   [        R
                  R                  U U#5      nU"S$:X  a   [        R
                  R                  U U#5      nU"R!                  S%5      (       d  GMP  [        R
                  R                  U U#5      U!U"S [#        S%5      *  '   GM     [        R$                  R'                  5        Hv  u  n"n#U"R)                  5       R!                  S%5      (       d  M,  U"S [#        S%5      *  n$[*        R,                  " S&S'U$5      n$[        R
                  R                  U U#5      U!U$'   Mx     UR                  S(S 5      n%U%(       a  S)U%-  U!S*'   US:X  a  U  V&s/ s H  n&UU&   S+   U   PM     n'n&S n(UR                  S,S5      (       d   [         R.                  R1                  U'U5      n([         R.                  R3                  XU([        5      n)[5        U)R'                  5       5       HO  u  n*n+U(       a  Un+[7        SU![9        U+S5      5      n,U(       a  U,U*S-:X  a  S.OS/-  n,UR;                  S0U*-   U,5        MQ     [=        S1S/U5      nUR;                  S[7        SU!U5      5        [=        S2S/U5      nUR;                  S3[7        SU!U5      5        US:X  a  UR;                  S4U5        UR;                  S5S65        UR;                  SU5        UR;                  S7S85        UR;                  S9S:5        UR;                  S;S<5        UR;                  S=S>5        OUR;                  S4[7        S*U!U5      5        UR;                  S?[7        S*U!W5      5        UR;                  S[=        S@S/U5      5        USA:w  a<  UR;                  S[=        SBS!/U5      5        UR;                  S[=        SCS#/U5      5        [>        (       GaN  U(       d  UnU(       d  UnUR;                  SD[=        SE/U5      5        UR;                  SF[=        SG/U5      5        UR;                  SH[=        SI/U5      5        [=        SJ/U5      n[=        SK/U5      nSLU;   a  U(       a  URA                  SLU5      nSMU;   a  U(       a  URA                  SMU5      nUR;                  SN[7        SU!U5      5        UR;                  SO[7        SU!U5      5        US:X  a  UR;                  SPU5        O:UR;                  SP[7        S*U!U5      5        UR;                  SQ[7        S*U!W5      5        URC                  5         URE                  SR[G        5       SS9  URC                  5         US:X  a  STOSUn-US:w  a8  URI                  SSVSWSXU-SY9  URI                  SZSVS[S\9  URI                  S3S]S^SXU-SY9  OS_n.S`n/URI                  SSVU.SaSbU-Sc9  URI                  S3S]U/SaSdU-Sc9  URI                  S5SeSf[J        RL                  -  S\9  URI                  S7SgSh[J        RL                  -  S\9  URI                  SiSjSk[J        RL                  -  S\9  USl;  ar  URI                  SmSnSoS\9  URI                  SpSnSqS\9  SrSsStSu.-  n0URI                  SvSwSxU0SySz0-  S{S|SRS}9  URI                  S~SSxU0SySz0-  S{SSRS}9  URI                  SSSSRS9  GOUS:X  a:  URI                  SmSS[J        RL                  -  SaSS9  [O        USxS9  [O        USS9  GOpURI                  SSSSXU-SY9  URI                  SSSSXU-SY9  URI                  SmSSS\9  URI                  SSSS\9  URI                  SSSSS0-  S\9  Sn1SU1SSu.-  n0Sn2URI                  SvSSxU0U2SS.-  S{SSRS}9  URI                  SSSxU1U2SS.-  S{SSRS}9  URI                  S~SSxU0U2SS.-  S{SSRS}9  URI                  SSSxU1U2SS.-  S{SSRS}9  URI                  SSSSRS9  URI                  SSSS\9  URI                  SSSS\9  URI                  SSSS\9  URI                  SSSS\9  URI                  SSSS\9  URI                  SSSS\9  URI                  SSSS\9  URI                  SSSS\9  US:X  a#  URI                  SSS[J        RL                  -  S\9  OURI                  SSSS\9  US:X  a#  URI                  SSS[J        RL                  -  S\9  O)US:X  a  URI                  SSSS\9  OURI                  SSSS\9  URC                  5         [Q        5       n3US    HX  n[         R                  RS                  X[        R
                  R                  U5      5       H  n4U3RU                  U45        M     MZ     [Q        5       n50 n60 n7[Q        5       n8[Q        5       n9U  GH  n&[         R                  R                  U&5      u  nn:n;UU   R                  S/ 5      n<UU<:X  d   SU< SU 35       eUU&   n=USA:X  a#  [         RV                  RY                  UU   U=5        [         R                  R[                  UUR                  S5      n[         R                  R]                  UU:U;5      n>U>R_                  S5      n>[`        Rb                  " U>5      Re                  5       n?[        R
                  Rg                  U5      n@SnAU;S:w  a  WASU;-   -  nA[        R
                  R                  WAW@U:S-   5      nB[i        5       nC[k        U?U6U@UUCU	UBUUR                  S9	nDUDRm                  U=XG5      n4UCRo                  5       S:  ar  [        [        R
                  R                  U	WB5      5       nEUERq                  WCRs                  5       5        S S S 5        WCRu                  5         URw                  WB5        U4(       a|  U:U4Ry                  5       :w  a*  U=S   S:X  a!  U7R{                  U:/ 5      R}                  U45        U4U6U&'   U&U3;   a  U5RU                  U4Ry                  5       5        U9RU                  U:5        GM  U8RU                  U:5        GM     U7(       ah  URC                  5         UR                  S5        [5        U75       H8  nFUR                  UFSU7UF    VGs/ s H  nGUGRy                  5       PM     snG5        M:     U8U9-
  n8U8(       aE  URC                  5         UR                  S5        [5        U85       H  n:UR                  U:S5        M     U5(       aM  URC                  5         UR                  SS[5        U55      5        UR                  UR                  SS5      5        U
Ru                  5         g s  sn&f ! , (       d  f       GN= fs  snGf )Nr  r   zbuild.ninjax   )widthr'   zlib.exeUNSETzlink.exez$ldr  r   zc++z$ccz$cxxr  r  r  r  r   make_global_settingsARzAR.hostCCzclang-clCXXzCC.hostzCXX.hostLDzLD.hostLDXXz	LDXX.hostNMzNM.hostREADELFzREADELF.host_wrapperz\.HOST$z.hostr   zexport DEVELOPER_DIR='%s' &&LINKr   "ninja_use_custom_environment_filesrs   z -m32z -m64cl_	CC_target
CXX_targetr   r  r  zmidl.exer  zrc.exeml_x86zml.exeml_x64zml64.exemtzmt.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gcczCC $outzU$cc -MMD -MF $out.d $defines $includes $cflags $cflags_c $cflags_pch_c -c $in -o $outz$out.d)rT  r  rH  depsr  zE$cc $defines $includes $cflags $cflags_c $cflags_pch_c -c $in -o $out)rT  r  zCXX $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)rT  r  r  r  rW  z%$defines $includes $cflags $cflags_cczIDL $inzd%s gyp-win-tool midl-wrapper $arch $outdir $tlb $h $dlldata $iid $proxy $in $midl_includes $idlflagszRC $inzU%s gyp-win-tool rc-wrapper $arch $rc $defines $resource_includes $rcflags /fo$out $inr   zASM $outzS%s gyp-win-tool asm-wrapper $arch $asm $defines $includes $asmflags /c /Fo $out $in)rX  r   r'   r^  zAR $outz'rm -f $out && $ar rcs $arflags $out $inr[  z(rm -f $out && $ar rcsT $arflags $out $inzif [ ! -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!  zSOLINK $libTsuffixz@$link_file_listz$link_file_listz<-Wl,--whole-archive $in $solibs -Wl,--no-whole-archive $libs)rT  r  r  r  r  rW  r   zSOLINK(module) $libz3-Wl,--start-group $in $solibs $libs -Wl,--end-groupr  z	LINK $outzH$ld $ldflags -o $out -Wl,--start-group $in $solibs $libs -Wl,--end-group)rT  r  rW  zLIB $outzU%s gyp-win-tool link-wrapper $arch False $ar /nologo /ignore:4221 /OUT:$out @$out.rspz$in_newline $libflags)rT  r  r  r  r  Fr  z	OBJC $outz[$cc -MMD -MF $out.d $defines $includes $cflags $cflags_objc $cflags_pch_objc -c $in -o $outr  zOBJCXX $outz^$cxx -MMD -MF $out.d $defines $includes $cflags $cflags_objcc $cflags_pch_objcc -c $in -o $outzLIBTOOL-STATIC $out, POSTBUILDSzarm -f $out && ./gyp-mac-tool filter-libtool libtool $libtool_flags -static -o $out $in$postbuildsr  zLIPO $out, POSTBUILDSz6rm -f $out && lipo -create $in -output $out$postbuildsr  zSOLIPO $out, POSTBUILDSz\rm -f $lib $lib.TOC && lipo -create $in -output $lib$postbuilds &&%(extract_toc)s > $lib.TOCrX  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)szif [ ! -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$postbuildszSOLINK $lib, POSTBUILDSz-shared)rY  rE   z$in $solibs $libssolink_notoczSOLINK(module) $lib, POSTBUILDSz-bundlesolink_module_notoczLINK $out, POSTBUILDSz1$ld $ldflags -o $out $in $solibs $libs$postbuildsr  zPREPROCESS INFOPLIST $outzT$cc -E -P -Wno-trigraphs -x c $defines $in -o $out && plutil -convert xml1 $out $outr  zCOPY INFOPLIST $inz:$env ./gyp-mac-tool copy-info-plist $in $out $binary $keysr  zMERGE INFOPLISTS $inz-$env ./gyp-mac-tool merge-info-plist $out $inr  zCOMPILE 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  zMACTOOL $mactool_cmd $inz1$env ./gyp-mac-tool $mactool_cmd $in $out $binaryrg  z"PACKAGE FRAMEWORK $out, POSTBUILDSzG./gyp-mac-tool package-framework $out $version$postbuilds && touch $outre  z&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zoszrm -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. zutf-8r   r   r9   r   )r   r   zShort names for targets.phonyz(Empty targets (output for completeness).alldefault_target)Br+   r   r  r   r:   r;   r   r   r  r   r   r4   ry   CopyToolParseQualifiedTargetr   r   r    r  r  lowerr)   r  r,   ExtractSharedMSVSSystemIncludesGenerateEnvironmentFilesrh  r  r0   r   r   $generator_supports_multiple_toolsetsr.   r   rW  r  rn  r  r"  r1  r0  
AllTargetsrg  r   MergeGlobalXcodeSettingsToSpecRelativePathQualifiedTargetencoderk  rl  rm  r   r   rp   r  tellwritegetvaluecloser   r`   r  r   commentr   default)Htarget_listtarget_dictsdatar  r   r  r/   r   rx   r{   master_ninja_filer+  r  r   r   r  rR  r  rS  rJ  r   r   cc_host_global_settingcxx_host_global_settingclang_clr  rL  r  rN  
build_filerY  r6  build_to_rootr  keyr  
key_prefixr   qualified_targetconfigsshared_system_includescl_pathsr>   r;   r  rW  
cc_commandcxx_commandmtime_preserving_solink_basesolink_basesolink_suffixall_targetsr   rS  rv   target_short_namesempty_target_namesnon_empty_target_namesr   r   this_make_global_settingsr   qualified_target_for_hashru   	base_pathr   r   ninja_outputwriterr  
short_namer$  sH                                                                           r#   GenerateOutputForConfigr    sZ   YGZZ!!&)Fjj!2B7O   .>v.F!TUIWW\\'"6"6	BN"277<<#NO&&'8DL JJ@  	GGH!"H	BGGLzz66{1~FJ1
+//0FKJJ11)=Q=QRMH*
U$;mU3B)ggll=%8G$;mU3B{{:&&%<'',,}e4C)ggll=%8G%*"*ww||M59H&+#$;mU3B)ggll=%8G&=77<<u5D+]E:I$;mU3B)ggll=%8G)ggll=%8G. 77<<u=L<<
##02]E0RHS+C
O+,-E +J jj&&(
U99;
++/J/0J
GZ@J#%77<<u#EHZ 	 ) (++,?F9<MM %0
$/  )*+;<[I$/ 	 
 "&""#GKK%(%7%7%W%W&" %%>>-CZ
 !!12JD$(h 24 ?G dem7@!!%$,8 3 
[$/	4B$ 242 FG
lE2C
8C%!3E8S!IJdB'eZ0dB'dH-h1h
3dH-d$6vx$LMf&84&PQd$6T7JB$OPU? !!$(:K;NPR(ST!!-/?.KWU ,+GHi);YK)QRi);YK)QR./?N	
 %i[':%zlH= g"8,44WbAGx$;.66xEH))XwG	
 	*:xJ	
 U?!!)W5!!-fhH !!/)L k)B)DEu_6%D!/  	 		
 	!/	 	 	
 	"0  	 		
$6 	7 	
 	!B 	 	
 	"C 	 	
 	!+-0^^<	 	 	
 	 M..! 	 		
 	"J..!	 	 	
 **!= 	 	

 	!> 	 	
 X= 	% 	%0+,-%Q 	 	
 	-0H>P3QQ%Q 	 	
 	#F  	 	
 
5"?ADP 3 	 		
 	d;e<#2  	 		
 	%3  	 		
 	9 	 	
 	/L 	 	

 	1- " $K	 	 	
 A & G 	%( 610&	:;%/ 	 		
 	1]I"NN%/ 	 	
 	90&	:;%/ 	 		
 	!9]I"NN%/ 	 	
 	/K	 	 	
 	"31	 	 	
 	,P 	 	

 	.C 	 	

 	.D 	 	

 	+LB 	 	
 	2G 	 	

 	< 	 	
 	#@ 	 	
 $03>>A 	 	
 	7P 	 	
 '?#..P 	 	

 
5'5 	 	
 	'T 	 	

 %K]+
jj++rww'7'7
'C
F OOF#
 ,
 %K N 
  !U'$'JJ$C$CDT$U!
D'$($4$8$89OQS$T!#'@@ 	
I()/C.DF	
@
 ,-U?>>tJ?OQUV
 ZZ,,Z9M9MuU
$'JJ$>$>g%
! %>$D$DW$M! %>?IIKGGOOJ/	h3= Cggll3	4(?Cz --

 !!$E"BGGLLEF*  !6!6!89 G !!+.v))++Y80K"--dB7>>vF/5N+,;. 2 2 45"&&t,""4({ (~  	78 !34J*<Z*HI*HQ*HI 5 ,.DDGH-.DtW- / 5'6++>?_001A5IJm
V GF2 Js   (AC	 AC.AC C
AC	c                     US   nU HZ  n[         R                  R                  UR                  SU5      nSSU/n[	        SU SU 35        [
        R                  " U5        M\     g )Nr  r  rz   z-Cz
Building [z]: )r:   r;   r   r   r   r	  
check_call)rt  r   r  r  r   builddir	argumentss          r#   PerformBuildr  B  sa    YG 77<< 4 4eVDdH-	
6(#i[12i(	 !r%   c                     [         R                   " [         R                  [         R                  5        U u  pp4n[        XX4U5        g r   )signalSIGINTSIG_IGNr  )arglistrr  rs  rt  r  r   s         r#   CallGenerateOutputForConfigr  K  s2     MM&--0=D:[kKt[Qr%   c                    [         R                  R                  U5      nUR                  S0 5      R                  SS 5      n[         R                  R                  U5      S:X  a5  [        R                  " X5      u  p[        R                  " X[        5      u  pU(       a  [        XX#U5        g XS      S   nUS   (       aV   [        R                  " [        U5      5      n/ nU H  nUR                  XX#U45        M     UR                  [         U5        g U H  n[        XX#U5        M     g ! ["         a  n	WR%                  5         U	eS n	A	ff = f)Nr   r   r'   r   r   parallel)r+   r   &CloneConfigurationForDeviceAndEmulatorr   r   r  r  ShardTargetsInsertLargePdbShimsr   r  multiprocessingPoolr    r   r  r  KeyboardInterrupt	terminate)
rr  rs  rt  r  user_configconfig_namesrW  arglistsr   es
             r#   GenerateOutputr  T  s5   &&MML **.377$GK
zzF#u,$,$9$9+$T!$,$@$@'B%
! 4U#N34DE*
&++C,=>#/KOO$D+N $0 4h?
  ,'t[  ,	 %  s   AD0 0
E:EE)r   )0r   r~  rk  r  r  os.pathr:   r)   r  r	  r  r+   
gyp.commongyp.msvs_emulationgyp.MSVSUtilr  gyp.xcode_emulationior   r   gyp.ninja_syntaxr4   r   r  r  r  r  r   CrossCompileRequestedrf  r$   r0   r7   r@   rB   rp   r  r  r  r   r  r  r5  r1  r  r  r  r  rn   r%   r#   <module>r     s         	   
 
      ) '  -2"0 !&" 9 @ /1 +%' "$& ! '*zz'G'G'I $	<E)T@ T@`f fR7;V|
E4n.<~^
B)R!r%   