
    Kb                       d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlmZ d dlZd dlmZ d dlZ	 d dlmZ n# e$ r	 d dlmZ Y nw xY wd dlmZ d dlmZ dddddd	d
ddddddddZg ag ag ada ej!        "                                Z#d Z$d Z%d Z&d Z' G d de(          Z) G d de(          Z*d Z+d Z,d Z-d(dZ.d  Z/d! Z0d" Z1d# Z2d$ Z3d% Z4d& Z5d' Z6dS ))    )print_functionN)
OrderedSet)StringIO)GetEnvironFallback libz.a$!INTERMEDIATE_DIRz$!PRODUCT_DIR/gen$!PRODUCT_DIR$|CONFIGURATION_NAME${root}
${dirname}	${source}${ext}${name})EXECUTABLE_PREFIXEXECUTABLE_SUFFIXSTATIC_LIB_PREFIXSTATIC_LIB_SUFFIXSHARED_LIB_PREFIXINTERMEDIATE_DIRSHARED_INTERMEDIATE_DIRPRODUCT_DIRCONFIGURATION_NAMERULE_INPUT_ROOTRULE_INPUT_DIRNAMERULE_INPUT_PATHRULE_INPUT_EXTRULE_INPUT_NAMEc                 ^    |                      |          r| t          |          d          S | S N)
startswithlen)argprefixs     5/usr/lib/python3/dist-packages/gyp/generator/ninja.pyStripPrefixr&   I   s0    ^^F s6{{||	*    c                     t          j        d|           r| S |dk    rt          j                            |           S d|                     dd          z   dz   S )zTQuote a string such that it will be interpreted as a single argument
  by the shell.z^[a-zA-Z0-9_=.\\/-]+$win'z'"'"')rematchgypmsvs_emulationQuoteForRspFilereplace)r#   flavors     r%   QuoteShellArgumentr2   O   s]    
 X&,, Ju__--c222	s{{3 233	3s	::r'   c                     |dk    r&|                      ddt          d          z            } t          t          j        d| z             |          S )zYTakes a preprocessor define and returns a -D parameter that's ninja- and
  shell-escaped.r)   #z\%03oz-D)r0   ordr2   ninja_syntaxescape)dr1   s     r%   Definer9   [   sL     u__ 	
		#x#c((*++A	L/q996	B	BBr'   c                 X    t           j                            |           \  } }| d||S )z&Adds an arch string to an output path..)ospathsplitext)outputarch	extensions      r%   AddArchrB   e   s1    g&&v..&)ffddII	..r'   c                   6    e Zd ZdZd Zd Zd Zd Zd Zd Z	dS )	Targetaz  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                     || _         d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d| _	        d S )NF)
typepreaction_stampprecompile_stampactions_stampbinarybundlecomponent_objscompile_deps
import_libuses_cpp)selfrF   s     r%   __init__zTarget.__init__   s]    DI  D !DDDK DK DD DO DMMMr'   c                     | j         dv S )z;Return true if this is a target that can be linked against.)static_libraryshared_library)rF   rP   s    r%   LinkablezTarget.Linkable   s    9<<<r'   c                 2    |dk    s| j         rdS | j        dv S )zOReturn true if the target should produce a restat rule based on a TOC
    file.r)   FrT   loadable_module)rK   rF   rP   r1   s     r%   UsesToczTarget.UsesToc   s&     $+U9===r'   c                     |                      |          r|                                 dz   S |                                 p| j        S )z^Return the path, if any, that should be used as a dependency of
    any dependent action step..TOC)r[   FinalOutputrG   rZ   s     r%   PreActionInputzTarget.PreActionInput   sI     ||F )&((5!55r'   c                     | j         p| j        S )z_Return the path, if any, that should be used as a dependency of
    any dependent compile step.)rI   rH   rU   s    r%   PreCompileInputzTarget.PreCompileInput   s     6!66r'   c                 ,    | j         p| j        p| j        S )zKReturn the last output of the target, which depends on all prior
    steps.)rK   rJ   rI   rU   s    r%   r^   zTarget.FinalOutput   s     ;;$+;);;r'   N)
__name__
__module____qualname____doc__rQ   rV   r[   r_   ra   r^    r'   r%   rD   rD   k   sx         ,  >= = => > >6 6 67 7 7
< < < < <r'   rD   c                      e Zd Z	 d*dZd*dZd Zd*dZd+dZd*dZd	 Z	d
 Z
d Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z	 d*dZd Zd Z	 d*dZd Zd Zd*dZd*dZd*dZd  Z 	 d,d"Z!d# Z"d$ Z#d% Z$d*d&Z%d*d'Z&d( Z'	 d*d)Z(dS )-NinjaWriterNc
                    || _         || _        || _        || _        t	          j        |          | _        || _        || _        || _	        d| _
        |	Bt          j                            t          j                            |	|                    | _
        |dk    rdnd| _        |dk    ri | _        dD ]}
d|
z   | j        |
<   t"          j                            ||	          }t          j                            ||          | _        t"          j                            ||	          }t          j                            ||          | _        dS )z
    base_dir: path from source root to directory containing this gyp file,
              by gyp semantics, all input paths are relative to this
    build_dir: path from source root to build output
    toplevel_dir: path to the toplevel directory
    Nr)   z.objz.o)x86x64zenvironment.)hash_for_rulestarget_outputsbase_dir	build_dirr6   Writerninjatoplevel_buildoutput_file_namer1   abs_build_dirr<   r=   abspathjoinobj_extwin_envr-   commonInvertRelativePathbuild_to_basebase_to_build)rP   rm   rn   ro   rp   output_filers   rt   r1   toplevel_dirr@   build_to_topbase_to_tops                r%   rQ   zNinjaWriter.__init__   s8    )D(DDMDN$[11DJ(D,DDKD7??27<<8A,C ,C D Dd#u__66$DLdl  3 3$+d2T :00LIILlH==D*//,GGKk9==Dr'   c                    d}||v ra|r|                     ||          }nH|                     |dz   d          }|                     |dz   d          }|                     |d          }d}||v rK|                     d          }|                     |t          j                            |pd|                    }d}|                     || j                  }|S )	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   \r;   r	   genr   )r0   GypPathToUniqueOutputr<   r=   rw   config_name)rP   r=   product_dirr   r   int_dirr   s          r%   ExpandSpecialzNinjaWriter.ExpandSpecial   s     "Kd	 .||K55||K#-r22||K$.33||K--+4**511g \\*',,{'8b'BBD Dd 0<<*D,<==DKr'   c                    | j         dk    r!| j                            || j                  }|                    t
          d         |          }|                    t
          d         |          }|                    t
          d         |          }|                    t
          d         |          }|                    t
          d         |          }|S )Nr)   configr   r   r   r   r   )r1   msvs_settingsConvertVSMacrosr   r0   generator_default_variables)rP   r=   rootdirnamesourceextnames          r%   ExpandRuleVariableszNinjaWriter.ExpandRuleVariables  s    {e//
t' 0 ) )d<<34EFMMD<<34HI! !D<<34EFOOD<<34DEsKKD<<34EFMMDKr'   c                 2   |rW| j         dk    r!t          j                            ||          }n+| j         dk    r t          j                            ||          }|                    d          rA|                     |          }| j         dk    rt          j	        
                    |          }|S d|v r|                     |          }d|vs
J |            t          j	        
                    t          j	                            | j        |                    S )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$|$)r1   r-   xcode_emulationExpandEnvVarsr.   ExpandMacrosr!   r   r<   r=   normpathrw   r|   )rP   r=   envexpandeds       r%   GypPathToNinjazNinjaWriter.GypPathToNinja)  s    
  :			"00s;;;%!..tS99t ##D))h			7##H--ot||%%dd???D???7BGLL);TBBCCCr'   Tc                    |                      |          }|                    d          r
J |            d}| j        dk    r|d| j        z   z  }t          j                            |          \  }}t          j                            |          rJ d|z              |r| j        dz   |z   }t          j                            t          j        	                    || j
        ||                    S )a%  Translate a gyp path to a ninja path for writing output.

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

    See the above discourse on path conversions.r   objtargetr;   z5'%s' can not be absolute path (see crbug.com/462153).)r   r!   toolsetr<   r=   splitisabsr   r   rw   ro   )rP   r=   	qualifiedr   path_dirpath_basenames         r%   r   z!NinjaWriter.GypPathToUniqueOutput=  s     d##Ds##))T))) C|x	S4<c gmmD11Hmw}}X&& L L?(JL L L  6i#o5m7BGLLdmX)68 8 9 9 9r'   c                 @   |d |D             k    s
J |            t          |          dk    r|rJ dS t          |          dk    s|rO|                     |dz             }| j                            |d||          }| j                                         |d         S )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.c                     g | ]}||S rg   rg   ).0ts     r%   
<listcomp>z:NinjaWriter.WriteCollapsedDependencies.<locals>.<listcomp>g  s    ///QQ/q///r'   r   N   .stampstamp
order_only)r"   r   rr   buildnewline)rP   r   targetsr   r   s        r%   WriteCollapsedDependenciesz&NinjaWriter.WriteCollapsedDependenciesa  s     //'/////////
7||qT
7||a:((99e
  Z PPg
j1:r'   c                 f    t           j                            | j                  d         }|d|dS )Nr   r;   .ninja)r<   r=   r>   rt   )rP   r@   output_file_bases      r%   _SubninjaNameForArchz NinjaWriter._SubninjaNameForArchq  s5    w''(=>>qA,,,ddd33r'   c           	      ^    | _         |d          _        |d          _        |d         |         }t          |d                    _        t          |                    dd                     _        |                    dd           _        t          j
                             j        |           _        d	x _         _         j        d
k    rHt          j
                            |           _        |                    dd	          }|r| j        _         j        dk    rt          j                            ||           _         j                            |          } j                            d j        |                     j                            dd|z               j                            dd|z               j                            dd|z               j                            dd|z               j                            dd|z               j        d
k    r\ j                            |           _        t5           j                  dk    r%t7           fd j        D                        _        g }g }d|v r|d         D ]}	|	 j        v rt j        |	         }
|                    |
                     j                             |                    |
                                            |
j!        rd j        _!        d |D             }d |D             } "                    d|          } "                    d|          }| j        _#        | j        _$        g }g } %                    ||||           j        _&         j        j&        p|}g }	 ||                    dg           z   }n\# tN          $ rO tQ          dtS          |                     tQ          dtS          |                    d                                w xY w|rw j        d
k    rOt5           j                  dk    r7 j        D ]/} j        *                     +                    |                     0d	} j        dk    rdt          j        ,                    | j-        | j.                   t          j        /                     j        | j.         j0         j1                  }n.t          j
        2                     j         j.         fd           } 3                     j        ||||||          } fd!|D             }|rM j        d
k    st5           j                  dk    r| fd"|D             z  }nUtQ          d#|d         z             n< j        d
k    r1t5           j                  dk    rti          j5        tl                    } j        j&        p|} j        dk    r( j        j7        d$k    r| j        _8        | j        _9        d	}| o| }|s j        j&        s|r5 :                    |||||          } j        r|                    |            j        r ;                    |||          }|sd	S  j        <                                s
J |             j        S )%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   configurationsrF   standalone_static_libraryr   target_rpathz\$$ORIGIN/lib/Nr   mac_toolchain_dirr)   r@   ccz$cl_cxxcc_hostcxx_hostasmz$ml_r   c              3      K   | ]^}|t          j        t          t          j                            j                            |                    d                     fV  _dS )wN)r6   rq   
OpenOutputr<   r=   rw   rs   r   )r   r@   rP   s     r%   	<genexpr>z(NinjaWriter.WriteSpec.<locals>.<genexpr>  s       #$ #$
 	 <&27<<(;(,(A(A$(G(GI I   ! ! "#$ #$ #$ #$ #$ #$r'   dependenciesTc                     g | ]}||S rg   rg   r   r8   s     r%   r   z)NinjaWriter.WriteSpec.<locals>.<listcomp>      999qq9999r'   c                     g | ]}||S rg   rg   r   s     r%   r   z)NinjaWriter.WriteSpec.<locals>.<listcomp>  r   r'   actions_dependscompile_dependssourceszextra_sources: zspec.get("sources"): c                 :                         | dz   |z             S )N-)r   )r=   langrP   s     r%   <lambda>z'NinjaWriter.WriteSpec.<locals>.<lambda>  s    t99$*t:KLL r'   c                 H    g | ]}|                     j                  |S rg   )endswithrx   r   frP   s     r%   r   z)NinjaWriter.WriteSpec.<locals>.<listcomp>  s,    DDD11::dl+C+CDQDDDr'   c                 :    g | ]}                     |          S rg   r   )r   orP   s     r%   r   z)NinjaWriter.WriteSpec.<locals>.<listcomp>  s'    DDD1++A..DDDr'   zdWarning: Actions/rules writing object files don't work with multiarch targets, dropping. (target %s)rS   )=r   r   r   rD   r   boolgetis_standalone_static_libraryr   r-   r   IsMacBundler1   is_mac_bundlexcode_settingsr   XcodeSettingsr   r.   MsvsSettingsGetArchrr   variablery   GetActiveArchsarchsr"   dictarch_subninjasrn   appendr_   ra   rO   r   rG   rH   WriteActionsRulesCopiesrI   	TypeErrorprintstrsubninjar   VerifyMissingSourcesru   r   PrecompiledHeaderr   rx   MacPrefixHeaderWriteSourcescollectionsdefaultdictlistrF   rL   rM   WriteTargetWriteMacBundler^   )rP   specr   generator_flagsr   r   r@   r   r   depr   extra_sourcesmac_bundle_dependscompile_depends_stamp	link_depsr   pchobj_outputsrM   r?   is_empty_bundles   `                    r%   	WriteSpeczNinjaWriter.WriteSpecu  s<    #D]#DI	?DL"#K0Ff&&DK(,,a00)2 )2D% (++N<MNND,88dKKD/33D$,{e/==dCCd)--.A4HH	 B0A-{e-::4;JL Ld''44d
j&$,t"4555
j$...
j%$///
j)Vd]333
j*ftm444
j%$///{e&55kBBdj	TZ1		" #$ #$ #$ #$
 
#$ #$ #$ $ $ OO n% ( (#$%%%&s+&

 
 !6!6t{!C!C
D
D
D

 
 !7!7!9!9
:
:
:_ (#'DK 99O999o99O999o778I8GI Io778I8GI Io$3dk!%4dk"
 M $ < <m_.@!B !BDK "[6I/ IB 7 77gg   s=11222#S))<)<%=%=>>>  0			#dj//A"5"5 J 	? 	?D
*

d77==
>
>
>
>c			//T'$:M	O 	O 	O 22T-@&6 6 !11!4LLLLN N ##
*k674I3
 i EDDDDDDk	 %;%3tz??a#7#7
DDDDDDD
D))
 ;]#$ % % % 
		#dj//A"5"5)$//i;,?L{e 04D D D#,dk !-dk F#m>,>(>O *DK- * *k69 ,. .f		 *!!&)))  N""4);_MMf T;""$$,,f,,,;s   )O APc                    	  j                              j                  \  	}}}                     	          	d		 fd		fd|D             }fd|D             }|                    d	f           |                    d|f                                          } j                            |d|||           |                    |           dS )
zhHandle the implicit VS .idl rule for one source file. Fills |outputs|
    with files that are generated.Nc                 H   t           j                            |           } t           j                                      \  }}t           j                            |          \  }}                    | ||||          } |r t           j                            | |          } | S r    )r<   r=   rw   r   r>   r   relpath)	r=   relr   basenamer   r   outdirrP   r   s	         r%   fix_pathz)NinjaWriter._WinIdlRule.<locals>.fix_path  s    W\\&$''d'--//gx'""8,,idC%%
gvsH6 6d	 *wtS))kr'   c                 2    g | ]\  }}| |          fS rg   rg   )r   r   valuer  r  s      r%   r   z+NinjaWriter._WinIdlRule.<locals>.<listcomp>  s.    DDDeT88E6**+DDDr'   c                 &    g | ]} |          S rg   rg   )r   pr  s     r%   r   z+NinjaWriter._WinIdlRule.<locals>.<listcomp>  s!    ***ahhqkk***r'   r  idlflagsidl	variablesr   r    )r   GetIdlBuildDatar   r   r   rr   r   extend)
rP   r   prebuildoutputsr?   varsflagsinputr  r  s
   ``      @@r%   _WinIdlRulezNinjaWriter._WinIdlRule  s'    #'"4"D"D #" #"FFD%  ((F        EDDDDtDDDD****6***FKK6"###KKU#$$$''EJVUE8  - - -NN6r'   c                     | j         dk    sJ | j                            |          rg S g }t          d |d                   D ]}|                     |||           |S )z3Writes rules to match MSVS's implicit idl handling.r)   c                 ,    |                      d          S )Nz.idlr   xs    r%   r   z.NinjaWriter.WriteWinIdlFiles.<locals>.<lambda>*  s    1::f#5#5 r'   r   )r1   r   HasExplicitIdlRulesOrActionsfilterr  )rP   r   r  r  r   s        r%   WriteWinIdlFileszNinjaWriter.WriteWinIdlFiles$  sy    ;%66t<< iG55tIGG 2 2
vx1111Nr'   c                    g }| j         r|                    dg           dd         }ng }g }d|v r!||                     |d         |||          z  }d|v r"||                     |d         ||||          z  }d|v r ||                     |d         ||          z  }d|v r$| j        dk    r||                     ||          z  }| j        r0| j                                        r| 	                    |||           | 
                    d|          }| j         rE|                     ||z   |          }	|                     |	|          }
|                     |
|           |S )	zkWrite out the Actions, Rules, and Copies steps.  Return a path
    representing the outputs of these steps.mac_bundle_resourcesNactionsrulescopiesr   r)   actions_rules_copies)r   r   WriteActions
WriteRulesWriteCopiesr1   r$  r   IsIosFrameworkWriteiOSFrameworkHeadersr   WriteMacBundleResourcesWriteMacXCassetsWriteMacInfoPlist)rP   r   r   r  r   r  r&  extra_mac_bundle_resourcesr   xcassetspartial_info_plists              r%   r   z#NinjaWriter.WriteActionsRulesCopies.  s    G  !XX&<bAA!!!D!#D""4	?M8#=? ? ?g$gx!5!;= = =g 4!!$x.(<NOOOgDT[E11&&tX666g =t2AACC =
##D'8<<<++,BGLLE E--
$';
;=OQ Qh00;MNN
/1CDDDLr'   c                     | j         dk    r|d| j         z  z  }|r|d|                     |          S |d| j        d|S )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   )rP   verbmessagefallbacks       r%   GenerateDescriptionzNinjaWriter.GenerateDescriptionS  sc     |x
ft|##d 7d00999:: DD$)))XX66r'   c           
                                            g }|D ]}|d         d j        }                     d|                    dd           |          } j        dk    r j                            |          nd}	|d         }
|                    dd           }|r                     |          }t          |                    d	d
                    rdnd } 	                    ||
||	||          \  }} fd|d         D             }t          |                    dd                    r||d         z  }t          |                    dd                    r||d         z  } fd|d         D             } j
                            ||||           ||z  } j
                                         |S )Naction_name_ACTIONr9  r)   Factiondepfileninja_use_consoler   console)rA  c                 <    g | ]}                     |          S rg   r   r   ir   rP   s     r%   r   z,NinjaWriter.WriteActions.<locals>.<listcomp>w  s)    FFF##As++FFFr'   inputsprocess_outputs_as_sourcesr  'process_outputs_as_mac_bundle_resourcesc                 <    g | ]}                     |          S rg   r   r   r   r   rP   s     r%   r   z,NinjaWriter.WriteActions.<locals>.<listcomp>|  s)    HHH$$Q,,HHHr'   r   )GetToolchainEnvrm   r;  r   r1   r   IsRuleRunUnderCygwinr   intWriteNewNinjaRulerr   r   r   )rP   r'  r   r  r3  all_outputsr@  r   description	is_cygwinargsrA  pool	rule_namer>  rG  r  r   s   `                @r%   r+  zNinjaWriter.WriteActionsa  s    


 
 CK  }---t/B/BCd,,X-3ZZ	4-H-H-13 3k kU** %::6BBB05 Hd

9d++g	 .$$W--fjj)<a@@AAKYYtd++D$,5sD4; , = =li GFFFFVH5EFFFf	VZZ4e<<	=	= +	**	VZZA5II	J	J 8"fY&77"HHHHHfY6GHHHg jw	6"*  , , ,Wk
jr'   c                 (	                                       g }|D ]o}d|vr|                    dg           s|d         d j        }|d         }	                     d|                    dd           dt          d         z   |z            }
 j        d	k    r j                            |          nd
t          |                    dd                    rdnd } 	                    ||	|
|          \  }}	d}t          dg          }|	D ]#}|D ]}d|z  |v r|                    |           $t          |          }fd} fd|                    dg           D             }|                    dg           }t          |          }|r|dz  }|dk    r4t          |          dk    r!                     |d         ||          g}g }|D ] t          j                                        t          j                                       \  t          j                                      \    fd|d         D             }t          |                    dd
                    r||z  } |v }|s#t          |                    dd
                    r||z  }|r|                                g }|D ]}|dk    r!|                    d |          f           *|dk    r<                      j                  }|                    d ||          f           l|dk    r<                       j                  }|                    d ||          f           |dk    r|                    df           |dk    r!|                    d |          f           |d k    sJ t1          |                       fd|D             } j        d	k    rS|                    d t3          j        t7          j        |d                                                             f            j                            ||                                 |||!           |!                    |           q|S )"Nr@  rule_sourcesrU  r>  RULEr9  z%s r   r)   FrB  r   rC  )r   r   r   r   r   r   z${%s}c                 8    r|                      dd          S | S )Nr   r   )r0   )r=   rR  s    r%   cygwin_mungez,NinjaWriter.WriteRules.<locals>.cygwin_munge  s$     	)dC((
(r'   c                 <    g | ]}                     |          S rg   r   rE  s     r%   r   z*NinjaWriter.WriteRules.<locals>.<listcomp>  s)    LLL##As++LLLr'   rG  r      r   c           
      D    g | ]}                     |          S rg   )r   )r   r   r
  r   r   r   rP   r   s     r%   r   z*NinjaWriter.WriteRules.<locals>.<listcomp>  sH     - - - ++AtW,2CC C - - -r'   r  rH  rI  r   r   r   r   c                 <    g | ]}                     |          S rg   r   rK  s     r%   r   z*NinjaWriter.WriteRules.<locals>.<listcomp>  s)    @@@14&&q#..@@@r'   unique_nameimplicitr   r  )"rL  r   rm   r;  r   r1   r   rM  rN  rO  setaddsortedr"   r   r<   r=   r   r   r>   remover   r   r}   reprhashlibmd5sixensure_binary	hexdigestrr   r   r   r  )!rP   r(  r   r  r&  r3  rP  ruler   rS  rQ  rT  rU  special_localsneeded_variablesargumentvarrZ  rG  r   
num_inputsr  was_mac_bundle_resourceextra_bindingsdirname_expandedsource_expandedr
  r   r   r   rR  r   r   s!   `                         @@@@@@@r%   r,  zNinjaWriter.WriteRules  s   



 
 CK o$ o$			dhh~r&B&B	 [)))4+>+>?d(^d,,

((9d
#
#./@AAT
IK Kk
 kU** %::4@@@05 dhh':A>>??IYYTd..
k9c49 9oi DnhZ & &(! 	& 	&Cs]h&&  %%%	&   011     MLLLLTXXh5K5KLLLf
 ,,gv;;j	 a
	aCLL1,,11
{
V 2 : : ;  9$ 9$&!!&))GMM&11G$$X..	c- - - - - - - - - O- - - txx4e<<== 	#
7
"-"(,@"@" 	0BEJJKK	0
$
/
$ % 0 ''///# 	* 	*CF]]!!6<<+=+=">????i  $11'4;MNN!!9ll;K.L.L"MNNNNh #009KLLO!!8\\/-J-J"KLLLLe||!!5#,////f}}!!6<<+A+A"BCCCC$;;;S		;;;;@@@@@@@@;%


k#+GAJ7788BBDD!F G G G 	
)T-@-@-H-H"($,#1 	 	3 	3 	3
 	7####s9$v r'   c           	         g }| j         r0| j                                         }|                     |          }n|                                 }|D ]}|d         D ] }t          j                            |          }t          j                            |          d         }	|                     ||          }
|                     t          j                            |d         |	          |          }|| j	        
                    |d|
|          z  }| j        rA|                    | j                                                   r|                    |           |S )Nadditional_settingsfilesr   destinationcopyr   )r   GetPerTargetSettingsrL  r<   r=   r   r   r   rw   rr   r   r   r!   GetBundleContentsFolderPathr   )rP   r)  r  r   r  	extra_envr   r{  r=   r
  srcdsts               r%   r-  zNinjaWriter.WriteCopies  sV   G #%::<<i  Y ??cc  ""c + +w- + +$w%%7==&&q)!!$,,!!"',,tM/BH"M"M"%' '4:##C#JJJ 	+ ^^D/KKMMNN +%%c***!+$ Nr'   c           	      r   |                                  }|d         }|d         }|                     d          }|| j        _        t	          | j        t          d |                    }d|fdt	          | j        |          fg}	|                    | j        	                    |d||	|                     d	S )
zFPrebuild steps to generate hmap files and copy headers to destination.r   mac_framework_headerszheaders.hmapc                 ,    |                      d          S )Nz.hr  r   s    r%   r   z6NinjaWriter.WriteiOSFrameworkHeaders.<locals>.<lambda>"  s    ajj$&8&8 r'   	frameworkcopy_headerscompile_ios_framework_headersr  N)
ComputeMacBundleOutputr   r   header_map_pathmapr   r#  r  rr   r   )
rP   r   r  r  r  all_sourcesr  r?   all_headersr  s
             r%   r/  z$NinjaWriter.WriteiOSFrameworkHeaders  s    ++--Iy/K/0L''77F*0D'd)88+FFH HKy) #d&9<"H"HIKINN4:##/ $ 2 2 3 3 3 3 3r'   c           
         g }| j                                         }|                     |          }|                     |          }| j                             | j                  }t          j                            t          d         | j         t          | j        |                    D ]\  }}|                     |          }t          j                            |          d         dk    r;| j                            |d|dd|fd|fg	           |                    |           ~|                    |           |S )
z.Writes ninja edges for 'mac_bundle_resources'.rw  r   z	.xcassetsmac_tool)mactool_cmdzcopy-bundle-resourcer   rJ   r  )r   r|  GetSortedXcodeEnvComputeExportEnvStringIsBinaryOutputFormatr   r-   r   GetMacBundleResourcesr   r  r   r   r<   r=   r>   rr   r   r   )	rP   	resourcesbundle_dependsr4  r~  r   isBinaryr?   ress	            r%   r0  z#NinjaWriter.WriteMacBundleResources)  sI   H#88::I

 
 Y
 
?
?C

%
%c
*
*C"778HIIH*@@#M2S!4i@@B B 
 
 !!&))f			&	!	!"	%	4	4
S$K%*CL8X2F$H 	 	I 	I 	I 	f%%%%Or'   c           
         |sdS i }ddd}| j         j         | j                 }|                                D ]!\  }}|                    |          }|r|||<   "d}	|r|                     d          }	|	|d<   g }
|
                    t          j                            | j         	                                d                     |	r|
                    |	           t          t          j        |          | j                  }| j                                         }|                     |          }|                     |          }|                    | j                            |
d	|d
|fd|fg                     |	S )a  Writes ninja edges for 'mac_bundle_resources' .xcassets files.

    This add an invocation of 'actool' via the 'mac_tool.py' helper script.
    It assumes that the assets catalogs define at least one imageset and
    thus an Assets.car file will be generated in the application resources
    directory. If this is not the case, then the build will probably be done
    at each invocation of ninja.Nzapp-iconzlaunch-image)XCASSETS_APP_ICONXCASSETS_LAUNCH_IMAGEz!assetcatalog_generated_info.plistzoutput-partial-info-plistz
Assets.carrw  compile_xcassetsr   keysr  )r   r   itemsr   r   r   r<   r=   rw   GetBundleResourceFolderr2   jsondumpsr1   r|  r  r  r  rr   r   )rP   r4  r  extra_argumentssettings_to_argsettingssettings_keyarg_namer  r5  r  r  r~  r   s                 r%   r1  zNinjaWriter.WriteMacXCassets?  s     fO'!/ O "1$2BCH"1"7"7"9"9 * *hll<((e	 *$)! H55
-/ /5Go12GNN
7799	 	    )nn'(((dj994;GGD#88::I

 
 Y
 
?
?C

%
%c
*
*C$***#X3<&$0 + 2 2 3 3 3 r'   c           	          t           j                            t          d          j         j                  \  }}}}|sdS                      |          }|rt                     t          j	        
                    |                    }d                     fd|D                       } j                            |d|d|fg          }                     |          }                     |          }|r3                     d	          } j                            |d
||g          } j                             j                  }	t%          t'          j        |	           j                  }	 j                             j                  }
 j                            |d|d|fd|	fd|
fg           |                    |           dS )z.Write build rules for bundle Info.plist files.r   Nr7  c                 :    g | ]}t          |j                  S rg   r9   r1   r   r8   rP   s     r%   r   z1NinjaWriter.WriteMacInfoPlist.<locals>.<listcomp>y  s%    BBBQ&DK00BBBr'   preprocess_infoplistdefinesr  rw  zmerged_info.plistmerge_infoplistcopy_infoplistr   r  rJ   )r-   r   GetMacInfoPlistr   r   r   r   r   r<   r=   r
  rw   rr   r   r  r  GetExtraPlistItemsr   r2   r  r  r1   r  r   )rP   r5  r  
info_plistoutr  r~  intermediate_plistr   r  r  s   `          r%   r2  zNinjaWriter.WriteMacInfoPlistm  s   *-*=*M*M#M2T0+2 +2'JWi  f


S
!
!C +55
'

:
&
&( (BBBB'BBBCCg:##
4j() $ + +j 
 
 Y
 
?
?C

%
%c
*
*C ,556IJJ:##
/z
*, ,j 11$2BCCDdj..<<D"778HIIHJS*J!&vtn!)8 4 6  7 7 7 #r'   c           	      r     j         dk    r j                            dd            j                            dd            j                            dd            j                            dd	            j                            d
d            j                            dd            j                            dd            j        dk    st	           j                  dk    r                       j                  S t           fd j        D                       S ).Write build rules to compile all of |sources|.hostarz$ar_hostr   $cc_hostr   	$cxx_hostldz$ld_hostldxxz
$ldxx_hostnmz$nm_hostreadelfz$readelf_hostr   r   c              3   l   K   | ].}|                     j        |         |           fV  /dS )r@   N)WriteSourcesForArchr   )	r   r@   r   r   precompiled_header
predependsrP   r   r   s	     r%   r   z+NinjaWriter.WriteSources.<locals>.<genexpr>  so       " "  11%{FGZ4 2 1 1 2 " " " " " "r'   )r   rr   r   r1   r"   r   r  r   )rP   
ninja_filer   r   r   r  r  r   s   ` ``````r%   r   zNinjaWriter.WriteSources  se    |v
j$
+++
j$
+++
j%---
j$
+++
j&,///
j$
+++
j)_555{es4:!33%%
*k67J
d$ $ $  " " " " " " " " " " j" " " " " "r'   c	           
      n   ' g }	 j         dk    r j                            ||          }
 j                            |          } j                            |          }dg j                            |          z   }dg j                            |          z   }n j         dk    r` j                            |          } j                            |          }
 j                            |          } j                            |          } j        	                    |          }	 j        
                    | j                  x}}|sld} j        dk    r|d j        z   z  }t          j                            t          j                            | j         j                            }|d	z   }|d
z   }                     |d|g                                |d|g                                |d j        g           nB|                    dg           }
|                    dg           }|                    dg           } j        dk    rt          j                            dd                                          t          j                            dd                                          z   |z   }t          j                            dd                                          t          j                            dd                                          z   |z   }nۉ j        dk    rt          j                            dd                                          t          j                            dd                                          z   |z   }t          j                            dd                                          t          j                            dd                                          z   |z   }|                    dg           |	z   }                     |d fd|D                         j         dk    rk                     |dt/           j        |                                          |d fd j                            | j                  D                        |                    dg           }                                 ' j         dk    r j                            ||          }                     |d' fd |D                         j         dk    rU|                    d!g           } j                            ||          }                     |d"' fd#|D                        |                    |          } j         dk    r6d$D ]3\  }}|                    ||          }|r|                    ||           4|                    d%g           }                     |dt/           j        |
                                          |dt/           j        |                                          |dt/           j        |                      j         dk    rT                     |d&t/           j        |                                          |d't/           j        |                                          |d%t/           j        |                     |                                  g }d(}|D ]}t          j        !                    |          \  }}|d)d*         } j"        } |d+v rd,}!d- j#        _$        n|d.k    s|d/k    r j         dk    rd0}!n|d1k    r j         dk    rd2}!n} j         dk    r%|d3k    r j        %                    |          sd3}!d4} nM j         dk    r	|d5k    rd6}!n9 j         dk    r|d7k    rd8}!d- j#        _$        n j         dk    r|d9k    rd9}!d:} d-}n                     |          }" &                    || z             }#|tO          |#|          }#|(                    |"g|#g|          }$g }% j         dk    r$|)                    |"|#|$|!|| j                  \  }%}#}$|*                    |#|!|"d; |$D             ||%<           |+                    |#           |r:|                    d=|          }&                     |d>' fd?|&D                         ,                    ||           |                                  |S )@r  r   r  z	$cflags_cz
$cflags_ccr)   r   r   r;   z.c.pdbz.cc.pdb	pdbname_c
pdbname_cc	pchprefixcflagscflags_c	cflags_ccCPPFLAGSr   CFLAGSCXXFLAGSr  CPPFLAGS_hostCFLAGS_hostCXXFLAGS_hostr  c                 :    g | ]}t          |j                  S rg   r  r  s     r%   r   z3NinjaWriter.WriteSourcesForArch.<locals>.<listcomp>  s%    DDDqF1dk22DDDr'   asmflagsrcflagsc                 `    g | ]*}t                              |          j                  +S rg   )r2   r   r1   r   s     r%   r   z3NinjaWriter.WriteSourcesForArch.<locals>.<listcomp>  sI     H H H d0033T[AA H H Hr'   include_dirsincludesc           	      h    g | ].}t          d                     |          z   j                  /S z-Ir2   r   r1   rE  s     r%   r   z3NinjaWriter.WriteSourcesForArch.<locals>.<listcomp>  sJ     	  	  	  
D4#6#6q##>#>>	L	L 	  	  	 r'   midl_include_dirsmidl_includesc           	      h    g | ].}t          d                     |          z   j                  /S r  r  rE  s     r%   r   z3NinjaWriter.WriteSourcesForArch.<locals>.<listcomp>  sJ     ' ' ' dT%8%8C%@%@@$+NN ' ' 'r'   ))ccflags_pch_c)r   cflags_pch_cc)mcflags_pch_objc)mmcflags_pch_objccarflagscflags_objccflags_objccFr   N)r   cppr   r   Tr  Sr   scc_sr   z_asm.objr  objcr  objcxxrcz.resc                     g | ]\  }}}|	S rg   rg   )r   r>  gchs      r%   r   z3NinjaWriter.WriteSourcesForArch.<locals>.<listcomp>6  s     ? ? ?As ? ? ?r'   r`  resource_include_dirsresource_includesc           	      h    g | ].}t          d                     |          z   j                  /S r  r  rE  s     r%   r   z3NinjaWriter.WriteSourcesForArch.<locals>.<listcomp>=  sJ     + + + dT%8%8C%@%@@$+NN + + +r'   )-r1   r   	GetCflags
GetCflagsCGetCflagsCCGetCflagsObjCGetCflagsObjCCr   GetAsmflagsGetComputedDefinesGetCompilerPdbNamer   r   r<   r=   r   rw   ro   r   WriteVariableListr   environr   r  
GetRcflagsr   rL  AdjustIncludeDirsAdjustMidlIncludeDirsGetPchBuildCommands
GetIncluder   r   r>   rx   r   rO   HasExplicitAsmRulesr   rB   GetObjDependenciesGetFlagsModificationsr   r   WritePchTargets)(rP   r  r   r   r   r  r  r   r@   extra_definesr  r  r  r  r  r  	pdbpath_c
pdbpath_ccr   pdbpathr  r  r  pch_commandsr   rp  includer  r  has_rc_sourcer   filenamerx   commandr  r?   ra  r  r  r   s(   `                                      @r%   r  zNinjaWriter.WriteSourcesForArch  s$
    M{e",,[t,DDf$//<<h%11+>>i M'55kBBCk"^(77DDEll			#//<<h!++K88f#..{;;h$00==i(;;KHHm#1DD
t) +  + +i* )<8##
t|#
##'""27<<T]DI#N#NOOh&	y(

ZykBBB
Z
|DDD
ZtykBBBBzz(B''fJ++h**["--i |x*..R006688*..2..446679ABh:>>*b117799:>>*b117799:<EFii			*.."55;;==*..3399;;<>FGh:>>/266<<>>:>>/266<<>>?AJKi jjB''-7G:yDDDDGDDDF F F{e
Z !3X>>@ @ @
ZH H H H&11+262EG GH H HI I I
 ::nb11L



 
 C{e'99,:EG Gl:z	  	  	  	  	 	  	  	 ! ! ! {e **%8"==,BB
[* *
Z' ' ' ' '%' ' '( ( ( &99$??L{eM 6 6(#s$//T::5J''W555jjB''G:xt16::< < <:zt18<<> > >:{t19==? ? ?{e
Z !3[AAC C C
Z !3\BBD D D:yt17;;= = =GM * *g&&v..mhGcg	$	$	$##::#**)=)=#::$+..K5  SE\\"66t<< &2 ;%C3JJ;%C4KK#;%C4KK 	!!&))e))(W*<==f		&&#66w$OOhi			&8&N&N68Wh	'  ' #	68 vw ? ?h ? ? ?",	  C C C nnV ,$jj)@,OO
Z)<+ + + + +)+ + +, , , 	\222Nr'   c                     |sdS |D ]L\  }}}}ddddd|         }ddd	d
d}|                     |          }	|                    ||	|||fg           MdS )z-Writes ninja rules to compile prefix headers.Nr  r  r  r  )r  r   r  r  r   r   r  r  r  )r   r   )
rP   r  r
  r  	lang_flagr   r  var_namer  cmds
             r%   r  zNinjaWriter.WritePchTargetsE  s     f'3 
K 
K#Ye 	 
 	h u6DDcGGDMMcsCHi3H2IJJJJ
K 
Kr'   c                 
     j         dk    st           j                  dk    r                      j                  S                                } fd j        D             }g }|}	 j        s                     |||           d         dv rB j        s;|                    d|f            j        	                    ||dz   gd||	           n j        	                    |	d
||	           |S )0Write out a link step. Fills out target.binary. r   r   c                 j    g | ]/}                     j        |         |         |           0S )r  )WriteLinkForArchr   )r   r@   rM   r   r   r  rP   r   s     r%   r   z)NinjaWriter.WriteLink.<locals>.<listcomp>]  s\     ( ( (  %%d&9$&?&169T?&2 & ? ? ( ( (r'   rF   rX   r   r]   solipor  lipo)
r1   r"   r   r  rr   ComputeOutputr   AppendPostbuildVariabler   r   )
rP   r   r   r   r  rM   r?   rG  rs  build_outputs
   ``````    r%   	WriteLinkzNinjaWriter.WriteLinkV  so   {es4:!33""
*dKLJ J J !!$''f( ( ( ( ( ( ( ( ( !J( ( (f nl K$$^T66JJJ v,?
?
?  @ufo...
&&6/2Hf$ 	 	& 	& 	& 	& 	
vvPPPmr'   c           	          dddd|d                  }d}	t                      }
t                      }t                      }|r|                    |           d|v rt                      }|d         D ]k} j                            |          }|s |                                }|rg } j        dk    rJ|j        rC j                                      r)|j        }|j	        r|                    |j	                   nu j        dk    r|j
        r	|j
        g}nZ|                     j                  r8|                    |j                   |
                    |j        d	z              n|j        g}|D ]0}||vr*|                    |           |                    |           1|                                }|r||j        k    r|
                    |           mg } j        j        r  j        dk    r|                    d
                                ||          }| j        s                     ||||           |d         dk    } j        dk    r3t*          j                            dd                                          }n= j        dk    r2t*          j                            dd                                          } j        dk    rG j                                                 t6          d                    j        |          }||z   }n j        dk    r                                          |                    } j                             j         j        ||| j                  \  }}}||z   }                      |d|           |
!                    |          }
|r                      |d|g           tE           j        #                                        }	 j        $                     j                  }|r|
                    |           n||                    dg           z   }|rttK          |          red} j        dk    r#| j        z  }|                    d|z             n|                    d j&        z             |                    d|z                                   |dtO           j        |                     |                    dg           } j        dk    r fd|D             } fd|D             }n fd|D             }tP          j)        *                    tO           j        |                    dg                               } j        dk    r j        +                    |          }n% j        dk    r j        +                    |          }                      |d||z              |} |d v r|                    d!t*          j,                            |          d"         f           |                    d#tP          j)        -                    |          f            j        dk    r{|}! j        r j        .                                }!|r|!d$|z   z  }!|!d%z  }!|!/                    d&d'          }!|                    d(tP          j)        -                    |!          f            j        dk    r|                    d)|f           d*|vr j        0                              s||d+z    j        _
        |                    d,d- j        j
        z  f            j        1                     j        |d.z             }"| j        j
        g}|"r|                    |"           na j        s||d	z   g}nR|d/z   }nL j        dk    rA|                    d)|f            j        1                     j        |d.z             }"|"r||"g}tK          |          rA|                    d0tP          j)        2                    tg          |                    f           |4                    |||	z   |tg          |
          tk          |          |1           | S )2r  linksolink_modulesolink)
executablerY   rT   rF   r   r   r)   r]   )r  z$ldxxNr!  r   LDFLAGSr  LDFLAGS_hostr   r   	manifestsintermediatemanifestldflagszlib/z-Wl,-rpath=\$$ORIGIN/%sz-Wl,-rpath=%sz-Wl,-rpath-link=%slibrary_dirsc                 F    g | ]}j                             |          S rg   )r   r   )r   lr   rP   s     r%   r   z0NinjaWriter.WriteLinkForArch.<locals>.<listcomp>  s<     - - - (88KHH - - -r'   c                 f    g | ]-}d t                              |          j                  z   .S )z	/LIBPATH:r  r   r)  rP   s     r%   r   z0NinjaWriter.WriteLinkForArch.<locals>.<listcomp>  sS     - - - "$6t7J7J17M7M7;{%D %D D - - -r'   c                 f    g | ]-}t          d                     |          z   j                  .S )z-Lr  r+  s     r%   r   z0NinjaWriter.WriteLinkForArch.<locals>.<listcomp>  sM     - - - )0C0CA0F0F)F)-6 6 - - -r'   	librarieslibs)r   r  sonamer   r   r;   z.rspr7  r>  link_file_listrJ   z/NOENTRYz.lib
implibflagz
/IMPLIB:%sz.pdb_notocsolibsr`  )6rb  rc  rn   r   rV   r1   rL   r   IsUseLibraryDependencyInputsrM   rN   r[   rJ   r   r^   r   rO   r  r   r  r   r<   r  r   r   
GetLdflagsr   r   r   r   ComputeOutputFileNamers   r  union_GetWinLinkRuleNameSuffixIsEmbedManifest
GetDefFiler"   r   r  r-   rz   uniquerAdjustLibrariesr=   EncodePOSIXShellArgumentGetWrapperNamer0   GetNoImportLibrary
GetPDBNameEncodePOSIXShellListrd  r   r   )#rP   r  r   r   r   r  rM   r@   r  command_suffiximplicit_depsr3  
order_depsextra_link_depsr   r   linkablenew_depsnew_depfinal_outputrs  r?   is_executableenv_ldflagsr&  manifest_base_nameintermediate_manifestmanifest_filesdef_filerpathr'  r-  linked_binaryr0  pdbnames#   `  `                               r%   r  zNinjaWriter.WriteLinkForArchq  s	     (!  6l	G
 NEEMUUFJ # nn\"""
 on% * *#$((-- 	
??$$ 	((kU""# # ==kJJ # ,H" 2nnV0111{e##(9#)*HH~~dk** 'JJv}%%%fmf45555H! ( (go--!!'***w'''))++ 	*<6=88


L
)
)
)N{ -u 4 4O,,,d++F|D.|
"">4HHHLL0M |xJNN9b117799kk			JNN>266<<>>k{e#..{


8G
H
H

t% %g g%gg			55

$
$T
*
*, , 

'
'T5H(,(:<N(.(,(;= = 5g$n
 g%g
ZnEEE#)).99m	 I.1F0G	I 	I 	I0


,
,[
9
9; ;n#..t/BCCh	 $(### fjjB777g	 53v;; 5<8##
4<
%
..3e;
<
<
<
<
..4+<<
=
=
=+e3444:yt17;;= = = ::nb11L{e- - - - -+- - -l- - - -+- - -ll- - - -+- - -l 
""3t'9'+xxR'@'@$B $B C CI{e%55iMMii			$44Y??i:v|i/GHHHM---Xrw}}V'<'<Q'?@AAAUJ??GGI J J J			 	@  .==??. 	'
C$J
&.& 
 (//S99J//??A	B 	B 	B 
		x0111g%%"55kBB &#)F?$+
 


!-0F!F!H I I I&114-v@ @'DK23& #MM'"""! %&6/*H$			Xv.///"--
t)6F?< <g	 #'" 6{{ <X
*
)
)&..
9
9; < < < VW~5y$]33 $Z 0 0-  / / / r'   c                 4    t           fd|                    dg           D                       }|d         dk    s|s|s| j        _        d j        _        n3|d         dk    r                     |           j        _         j        dvr1 j        s* j        	                     j        j        d||           ng } j
        r3 j
                            |          }|r|                    d	|f            j        r7 j                            | j                  }	|                    d
|	f            j        dk    st!           j                  dk    rV                     || j        j         j        j                    j        	                     j        j        d|||           ng }
 j        D ]X}                     ||          } j        |         	                    |d||         ||           |
                    |           Y                     || j        j         j        j                    j        	                     j        j        d|
|           n#                     |||||           j        _         j        j        S )Nc              3      K   | ]9}|j         v j                             |                                          V  :d S r    )rn   r   rV   )r   r   rP   s     r%   r   z*NinjaWriter.WriteTarget.<locals>.<genexpr>/  sZ       9 9! D$777 -11#66??AA77779 9r'   r   rF   nonerS   )r   openbsdnetbsdr)   
alink_thinr   libtool_flagslibflagsr   r   alink)r   r  r  )anyr   r   rJ   rF   r  r1   r   rr   r   r   GetLibtoolflagsr   r   GetLibFlagsr   r"   r   r  r   r  )rP   r   r   r   r  rM   rE  r  rY  rZ  rG  r@   r?   s   `            r%   r   zNinjaWriter.WriteTarget.  s    9 9 9 9%)XXnb%A%A9 9 9 9 9O F|vi (dkdk	f)	)	)--d33dk
+@
@
@

+ A
+\9$0 	 	2 	2 	2 	2 	 	?-==kJJ- ?o}=>>> 	3'33K484GI I(


J1
2
2
2;%3tz??a#7#7

&
&y$'+{'94;;MO O O
*

4;-w	&2i  I I I I &j " "d''d33F%++FGYt_7C6? , A A A MM&!!!! 
&
&y$'+{'94;;MO O O
*

4;-w &/  0 0 0 0
  >>$VY*68 8dk;r'   c                    | j         sJ |d         dv }|                                 }|r|dz  }g }|                     |||| j        j        |            |r|s|d         dk    r+| j        j        r| j                            |d||           nk|	                    d| j        
                                f           | j                            |d	||           n| j                            |d
||           || j        _        |S )NrF   rX   r   )is_command_startrT   package_ios_frameworkr  versionpackage_frameworkr   )r   r  r  r   rJ   r   isIOSrr   r   r   GetFrameworkVersionrK   )rP   r   r   is_emptyrc  r?   r  s          r%   r   zNinjaWriter.WriteMacBundleb  sh   V(MM((**F fI  D&$+:L6G2G ! I I I 
, 
,	f)	)	)d.A.G	)
!8:L#, 	 	. 	. 	. 	. 	)T%8%L%L%N%NOPPP
!46H#, 	 	. 	. 	. 	. jvw(:!*  , , ,DKMr'   c                 t    |                      |          }| j        dk    r|                     |          }|S )z:Returns the variables toolchain would set for build steps.rw  r)   )r  r1   GetMsvsToolchainEnv)rP   rx  r   s      r%   rL  zNinjaWriter.GetToolchainEnvy  sH    

 
 5H
 
I
IC{e$$1 % 3 3cJr'   c                 D    | j                             d| j                  S )z>Returns the variables Visual Studio would set for build steps.r
   r   )r   GetVSMacroEnvr   )rP   rx  s     r%   rh  zNinjaWriter.GetMsvsToolchainEnv  s-    ++O484D , F F Fr'   c                     | j         sJ | j         }t          j                            | j        |t
          j                            || j                  | j	        |          S )z6Returns the variables Xcode would set for build steps.)
ru   r-   r   r  r   r<   r=   rw   r|   r   )rP   rx  ru   s      r%   r  zNinjaWriter.GetSortedXcodeEnv  sZ    &M00]
]D$6779I  r'   c                 t    i }| j                             d          }|r||d<   |                     |          S )z:Returns the variables Xcode would set for postbuild steps.CHROMIUM_STRIP_SAVE_FILErw  )r   GetPerTargetSettingr  )rP   postbuild_settingsstrip_save_files      r%   GetSortedXcodePostbuildEnvz&NinjaWriter.GetSortedXcodePostbuildEnv  sR     )=="$ $O G7F34!!6H!IIIr'   Fc                 l    |                      ||||          }|r|                    d|f           dS dS )zAAdds a 'postbuild' variable if there is a postbuild for |output|.
postbuildsN)GetPostbuildCommandr   )rP   r  r   r?   rJ   r`  	postbuilds          r%   r  z#NinjaWriter.AppendPostbuildVariable  sO     ((vv?OPPI 2i0111112 2r'   c                 V   | j         r|d         dk    s|sdS t          || j                  }t          j                            |d          }|| j                             | j        t          j	        
                    t          j	                            | j        |                    t          t          j	        
                    t          j	                            | j        |                    | j                  |d          }|sdS |                    dt          j                            d| j        g                     |                     |                                           }|d	z   d
                    d |D                       z   }|d|z  z   dz   }|rd|z   d
z   S d|z   S )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 ' && '.rF   rU  r   T)quietNr   cdz (z && c                 6    g | ]}t          j        |          S rg   )r6   r7   )r   r  s     r%   r   z3NinjaWriter.GetPostbuildCommand.<locals>.<listcomp>  s#    LLLg\(11LLLr'   z$); G=$$?; ((exit $$G) || rm -rf %s) z&& exit $$G)(z$ && ()r   r2   r1   r-   r   GetSpecPostbuildCommandsAddImplicitPostbuildsr   r<   r=   r   rw   r}   insertrz   rA  r|   r  rq  )	rP   r   r?   output_binaryr`  rs  r   commandscommand_strings	            r%   rt  zNinjaWriter.GetPostbuildCommand  s     $v,&"8"8"8R44F$==d$=OOJ &<<


'

27<<(:FCC
D
D
grw||D,>NNOOk  D = " "j  R a88	t!"$ $ % % %

%
%d&E&E&G&G
H
HC TzLLLLLMMNH "35;"< <>LMN  '>!F**&&r'   c                     g }|D ]P\  }}|                     d|dt          j        t          j                            |                    d           Qd                    |          S )zGiven an environment, returns a string looking like
        'export FOO=foo; export BAR="${FOO} bar;'
    that exports |env| to the shell.zexport =;r7  )r   r6   r7   r-   rz   r=  rw   )rP   r   
export_strkvs        r%   r  z"NinjaWriter.ComputeExportEnvString  s     J L L111l!#*"E"Ea"H"HIIIIK L L L L88Jr'   c                     | j         sJ t          d         }|                     t          j                            || j                                                            S )zDReturn the 'output' (full output path) to a bundle output directory.r   )r   r   r   r<   r=   rw   r   r>  )rP   r=   s     r%   r  z"NinjaWriter.ComputeMacBundleOutput  sX    &}5D
T4.==??@@B B Br'   c                 T   |s|d         }t          j         t                    }t          |d| j        i           |d         |d         |d         |d         d}|                    d|                    |d                    }|d	         |d	         |d
         |d         d}|                    d          }|rd|z   }n|                    |d          }d|v r	|d         }n|d         }|dk    rt          |d          }|dv r|||S |dk    rd|z  S t          d|z            )z@Compute the filename of the final output for the current target.rF   r1   r   r   r   )rY   rT   rS   r!  product_prefixr   SHARED_LIB_SUFFIXr   r   product_extensionr;   product_namer   r   )rS   rY   rT   r!  rU  z%s.stampzUnhandled output type %s)r{  r   CalculateVariablesr1   r   r&   	Exception)	rP   r   rF   default_variablesDEFAULT_PREFIXr$   DEFAULT_EXTENSIONrA   r   s	            r%   r6  z!NinjaWriter.ComputeOutputFileName  s    &\d	"=>>(8T[*ABBB
 ++>?)*=>)*=>%&9:	 N XX&(:(:4(D(DEEF
 --@A+,?@+,?@'(;<	  ,--I 2	/ii#''b11iN#ff M"f	5VU++ & & &33	&  047888r'   c                    |d         }| j         dk    r)| j                            | j        | j                  }|r|S |)| j         dk    r|dv r| j                                        }n|                     ||          }|?d|v r;t          j	        
                    |d         |          }|                     |          S ddg}| j         dk    r| j        d	k    r|d
dgz  }n| j         dk    r| j        d	k    r|d
gz  }|cd}| j        d	k    r(t          j	        
                    dd| j        z            }t          j	        
                    |t          ||                    S ||v s| j        r|S |d
k    rUd}	| j        d	k    r(t          j	        
                    dd| j        z            }	t          j	        
                    |	|          S |                     |d          S )z2Compute the path for the final output of the spec.rF   r)   Nr   )rS   r!  rT   rY   r   r!  rY   r   rT   rS   r@   z%sr   F)r   )r1   r   GetOutputNamer   r   r   GetExecutablePathr6  r<   r=   rw   r   rB   r   r   )
rP   r   r@   rF   overrider  r=   type_in_output_rootarchdirlibdirs
             r%   r  zNinjaWriter.ComputeOutput  s   <D{e#11$2B262DF Fh	 |u,, :M 2M 2M$6688hh++D$77h|--W\\$}-x88d%%% ():;{e 8 8.0@AA			$,(":":.// g		!	!',,vtdl':;;W\\'78T#:#:;;;	$	$	$(I	$o	!	!	!f		!	!eTDL%899W\\&(+++''E'BBBr'   c                     t          |t                    rJ |g }|                    |d                    |                     d S )Nr7  )
isinstancer   r   rw   )rP   r  rp  valuess       r%   r  zNinjaWriter.WriteVariableList5  sJ    &#&&&&&~fSXXf--.....r'   c           
           j         dk    r0 fd|D             } j                            | j                  }n9 j         dk    r.fd|D             }t          j                            |          } j        } j        dk    r|d j        z   z  }|d|z   z  }t          j
        dd	|          }g d
}	dd                    t          t          j        |	                    z   dz   }	t          j
        |	dz   d	|          }d}
d} fd|D             } j         dk    rk|dz   }
|rdn	d j        z   }|r! j                            | j                  }nt          j                            |          }dt$          j        z  |
z   |z   }nD                               t          j                            |          }d j        z  z   |z   } j                            ||||d||
|            j                                         ||fS )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)   c                 ^    g | ])}j                             |j        j                   *S )r   )r   r   r}   r   r   r#   rP   s     r%   r   z1NinjaWriter.WriteNewNinjaRule.<locals>.<listcomp>C  sP         00t)$2B 1 D D   r'   r   r   c                 P    g | ]"}t           j                            |          #S rg   )r-   r   r   )r   r#   r   s     r%   r   z1NinjaWriter.WriteNewNinjaRule.<locals>.<listcomp>J  s,    JJJcc!//S99JJJr'   r   r;   z[^a-zA-Z0-9_]r>  )r   r   r   r   r   z(?!|)z\$Nc                 F    g | ]}                     |j                  S rg   )r   r}   r  s     r%   r   z1NinjaWriter.WriteNewNinjaRule.<locals>.<listcomp>b  s,    HHHCDsD$677HHHr'   z.$unique_name.rspr   r7  z%%s gyp-win-tool action-wrapper $arch zcd %s; T)rA  restatrT  rspfilerspfile_content)r1   r   r   r   r-   r   r   r   r   r+   subrw   r  r7   r|   BuildCygwinBashCommandLiner.   EncodeRspFileListsysr!  r  rz   rA  rr   rl  r   )rP   r   rS  rQ  rR  r   rT  rA  rU  protectr  r  run_inr  s   `    `        r%   rO  zNinjaWriter.WriteNewNinjaRule;  s    {e     d &66
d. 7 0 0kk			JJJJTJJJd'55k3GGk
 	I|x3%%itIY77I
 LKKGchhs29g66777#=G&5#{;;K
 GOHHHH4HHHD{e//g<rrC$*<$<f	 E,GG$$& & ,>>tDD83>I!"gg '',,c
//55gD..4w>g
 	JOOIwWd#_  F F F 	Jd?r'   r    )T)F))rc   rd   re   rQ   r   r   r   r   r   r   r  r  r$  r   r;  r+  r,  r-  r/  r0  r1  r2  r   r  r  r  r  r   r   rL  rh  r  rq  r  rt  r  r  r6  r  r  rO  rg   r'   r%   ri   ri      s        !#> #> #> #>J   <
 
 
D D D D("9 "9 "9 "9H    4 4 4U U Un  0  # # #J7 7 7$ $ $Lu u un  83 3 3  ,, , ,\     D" " ". FJ^ ^ ^ ^@K K K"  8 6:{ { { {z2 2 2h  .   F F F F
   	J 	J 	J 052 2 2 2"' "' "'H     B B B09 09 09 09d+C +C +C +CZ/ / / !%@ @ @ @ @ @r'   ri   c                 @   t           j                            |          }|dk    r|                     dd           |                     dd           |                     dt          d                    |                     dt          d                    dd	lmc m} t          |d
g           a	t          |dg           a
t          |dg           ad	S |dk    rt           j        j        }|                     dd           d|d         z   | d<   d| d<   d|d         z   | d<   d| d<   d|d         z   | d<   dd	lmc m} t          |d
g           a	t          |dg           a
t           j                            | |           d	S |}|dk    rd}|                     d|           |                     dd           |                     dt$          j                            dd                     |                     dt$          j                            dd                     d	S )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)   r;   r!  r   r   r   rS   r   r   rT   androidlinuxz.sor
   r   r   )r-   rz   	GetFlavor
setdefaultr   gyp.generator.xcode	generatorxcodegetattrr  r  r  MSVSUtilTARGET_TYPE_EXTgyp.generator.msvsmsvsr.   CalculateCommonVariablesr<   r=   rw   )r  paramsr1   xcode_generatorextsmsvs_generatoroperating_systems          r%   r  r  ~  s    :''&u__  u---  !4h???  !1!<]!KM M M  !<]!KM M M
 21111111129/5r3; 3;/)0,b*2 *2& )0+R)1 )1%%%<'D  u----043E-E)*-/)*-048H3I-I)*-/)*-048H3I-I)* 0////////29.5r3; 3;/)0,b*2 *2& //0A6JJJJJ   '7888  !4e<<<  !1!#ou!E!EG G G  !#ou!E!EG G G G Gr'   c                 (   t           j                            | d         j        pd          }|                     di                               dd          }t           j                            t           j                            ||                    S )zEReturns the path from the toplevel_dir to the build output directory.optionsr;   r   
output_dirr  )r<   r=   r  generator_outputr   r   rw   )r  generator_dirr  s      r%   ComputeOutputDirr    sr     '//&"3"D"KLL- zz+R0044\5II* 
		"',,}jAA	B	BBr'   c                     | d         j         }t          j                            t          j                            |t          |           d                    }||dadS )zBCalled by __init__ to initialize generator values based on params.r  gypfiles)toplevelqualified_out_dirN)r   r<   r=   r   rw   r  generator_filelist_paths)r  r  r  s      r%   CalculateGeneratorInputInfor    sf     I+(g&&rw|| ((*(6 (6 7 7
 , r'   r   c                 `    t           j                            |            t          | |          S )z;Open |path| for writing, creating directories if necessary.)r-   rz   EnsureDirExistsopen)r=   modes     r%   r   r     s(    *T"""	dD		r'   c                 F    |                     | d          }|r|dz   |z   S |S )Nr   r7  )r   )r  wrappersprogwrappers       r%   CommandWithWrapperr    s1    LLb!!'  S=4	+r'   c            
      z  
 t          t          j                            dd                    } | r| S t          j        dv rddl
 G 
fdd
j                  } |            }
                    |          |_	        
j
        j                            
                    |                     t          d|j        dz            }t          dt          t          j                            d	d
                              }t!          ||          S t          j                            d          rt          j                            d          rt)          d          5 }t+          j        d          }|D ]Z}|                    |          }|st          dt          |                    d                    dz            c cddd           S 	 ddd           n# 1 swxY w Y   dS t          j        dk    r?	 t          t3          j        g d                    }	t          d|	d
z            S #  Y dS xY wdS )z6Returns a best-guess for a number of concurrent links.GYP_LINK_CONCURRENCYr   )win32cygwinNc            
           e Zd Zd j        fd j        fd j        fd j        fd j        fd j        fd j        fd j        fd	 j        fg	Zd
S )1GetDefaultConcurrentLinks.<locals>.MEMORYSTATUSEXdwLengthdwMemoryLoadullTotalPhysullAvailPhysullTotalPageFileullAvailPageFileullTotalVirtualullAvailVirtualsullAvailExtendedVirtualN)rc   rd   re   c_ulongc_ulonglong_fields_)ctypess   r%   MEMORYSTATUSEXr    sw        	V^$	(	+,	+,	V/0	V/0	F./	F./	#V%78
hhhr'   r  r   l        GYP_LINK_CONCURRENCY_MAXl        r  z/proc/meminfoz^MemTotal:\s*(\d*)\s*kBi   darwin)sysctlz-nz
hw.memsize)rN  r<   r  r   r  platformr  	Structuresizeofr  windllkernel32GlobalMemoryStatusExbyrefmaxr  minr!   r=   existsr  r+   compiler,   group
subprocesscheck_output)	pool_sizer  stat	mem_limithard_capmeminfomemtotal_reliner,   avail_bytesr  s             @r%   GetDefaultConcurrentLinksr    s   "*..!7;;<<) \(((MMM      )    >DMM$''DM
M//T0B0BCCC At(];<<I1c"*..)CUKKLLMMHy(###
|w'' 	w~~o&& @   @Gj!;<< 	@ 	@D##D))% QEKKNN++>??
?
?@ @ @ @ @ @ @ @	@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 1
|x
/0N0N0NOOPPk KM2333QQ 1s    A%GG#&G#=5H3 3H8c                     | rdndS )zwReturns the suffix used to select an appropriate linking rule depending on
  whether the manifest embedding is enabled._embedr   rg   embed_manifests    r%   r8  r8    s     $	++r'   c           	         fd}t                    }t          t          j                            dd                    dk    }d|                                z  }t          j        d|d} ||dd	          }|                     d
|z   ||dddd           |                     d|z   ||dddd           t          j        d|d} ||dd          }|                     d|z   d|                                z  |ddd           dS )z7Adds link rules for Windows platform to |master_ninja|.c                 D    ddd|         }dt           j        || |dz  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%   FullLinkCommandz)_AddWinLinkRules.<locals>.FullLinkCommand  sK      M '&) )) )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)rQ  r  r  r  r  rT  r  z& $ld /nologo /OUT:$binary @$binary.rspr  r  zLINK%s $binaryz$in_newline $libs $ldflags)rQ  r  r  r  rT  N)	r8  rN  r<   r  r   upperr  r!  rl  )master_ninjar  r  rule_name_suffixuse_separate_mspdbsrvdlldescdllcmdexe_cmds    `      r%   _AddWinLinkRulesr#    s   ) ) ) ) ) /~>>	"*..4c
:
:;;q@ !$4$:$:$<$<<' "nnn.C.C.CE& ?69e44&H// ')$@$  & & & O&66 ')$@$  & & & ~~~4446' OGY66'F-- 03C3I3I3K3K K#)$@$  & & & & &r'   c                 N%   |d         }t           j                            |          }|                    di           }t          j                            t          j                            t          |                              }t          j                            |j	        |          }	t          t          j                            |	d                    }
t          j        |
d          }t           j                            ||	|           |dk    rd}d}d}d	}d
}nd}d}d}d}d}d}d}|}d }d }d }d }d }d}d}d}d}t           j                            | d                   \  }}}||                             dg           }t           j                            ||j	                  } i }!|D ]7\  }"}#|"dk    r t          j                            | |#          }|"dk    r t          j                            | |#          }|"dk    r7t          j                            | |#          }|                    d          r|}|"dk    r t          j                            | |#          }|"dk    r"t          j                            | |#          }|#}|"dk    r"t          j                            | |#          }|#}|"dk    r t          j                            | |#          }|"dk    r t          j                            | |#          }|"dk    r t          j                            | |#          }|"d k    r t          j                            | |#          }|"d!k    r t          j                            | |#          }|"d"k    r t          j                            | |#          }|"                    d#          r9t          j                            | |#          |!|"d t#          d#                    <   9t          j                                        D ]}\  }"}#|"                                                    d#          rQ|"d t#          d#                    }$t+          j        d$d%|$          }$t          j                            | |#          |!|$<   ~|                    d&d           }%|%rd'|%z  |!d(<   |dk    rfd)| D             }&d }'|                    d*d          s t           j                            |&|          }'t           j                            |	||'t                    }(t5          |(                                          D ]P\  })}*|r|}*t7          d|!t9          |*d                    }+|r|+|)d+k    rd,nd-z  }+|                    d.|)z   |+           Qt=          d/dg|          }|                    dt7          d|!|                     t=          d0dg|          }|                    d1t7          d|!|                     |dk    r|                    d2|           |                    d3d4           |                    d|           |                    d5d6           |                    d7d8           |                    d9d:           |                    d;d<           n|                    d2t7          d(|!|                     |                    d=t7          d(|!|                     |                    dt=          d>dg|                     |d?k    rL|                    dt=          d@dg|                     |                    dt=          dAd!g|                     t>          r|s|}|s|}|                    dBt=          dCg|                     |                    dDt=          dEg|                     |                    dFt=          dGg|                     t=          dHg|          }t=          dIg|          }dJ|v r|r|                     dJ|          }dK|v r|r|                     dK|          }|                    dLt7          d|!|                     |                    dMt7          d|!|                     |dk    r|                    dN|           nJ|                    dNt7          d(|!|                     |                    dOt7          d(|!|                     |!                                 |"                    dPtG                      Q           |!                                 |dk    rdRndS},|dk    rM|$                    ddTdUdV|,W           |$                    dXdTdYZ           |$                    d1d[d\dV|,W           nd]}-d^}.|$                    ddT|-d_d`|,a           |$                    d1d[|.d_db|,a           |$                    d3dcddtJ          j&        z  Z           |$                    d5dedftJ          j&        z  Z           |$                    dgdhditJ          j&        z  Z           |d?k    r|dk    r|$                    djdkdlZ           |$                    dmdkdnZ           dodpdqdrz  }/|$                    dsdtdu|/dvdwiz  dxdydPz           |$                    d{d|du|/dvdwiz  dxd}dPz           |$                    d~dddP           n?|dk    rK|$                    djddtJ          j&        z  d_d           tO          |du           tO          |d           n|$                    ddddV|,W           |$                    ddddV|,W           |$                    djddZ           |$                    dddZ           |$                    dddddiz  Z           d}0d|0ddrz  }/d}1|$                    dsddu|/|1ddz  dxddPz           |$                    dddu|0|1ddz  dxddPz           |$                    d{ddu|/|1ddz  dxddPz           |$                    dddu|0|1ddz  dxddPz           |$                    d~dddP           |$                    dddZ           |$                    dddZ           |$                    dddZ           |$                    dddZ           |$                    dddZ           |$                    dddZ           |$                    dddZ           |$                    dddZ           |dk    r&|$                    dddtJ          j&        z  Z           n|$                    dddZ           |dk    r&|$                    dddtJ          j&        z  Z           n7|dk    r|$                    dddŬZ           n|$                    dddƬZ           |!                                 tQ                      }2|d         D ]X}t           j        )                    | t          j                            |                    D ]}3|2*                    |3           YtQ                      }4i }5i }6tQ                      }7tQ                      }8| D ]}9t           j                            |9          \  }}:};||                             dg           }<||<k    sJ d|<d|            |9         }=|d?k    r&t           j+        ,                    ||         |=           t           j        -                    ||j	        d          }t           j        .                    ||:|;          }>|>/                    dʦ          }>ta          j1        |>          2                                }?t          j        3                    |          }@d}A|;dk    r|Ad|;z   z  }At          j                            |A|@|:dz             }Bti                      }Ctk          |?|5|@||C|	|B||j	        Ϧ	  	        }D|D6                    |=|          }3|C7                                dk    rt          t          j                            |	|B                    5 }E|E8                    |C9                                           d d d            n# 1 swxY w Y   |C:                                 |;                    |B           |3r|:|3<                                k    r5|=d         dk    r)|6=                    |:g           >                    |3           |3|5|9<   |9|2v r'|4*                    |3<                                           |8*                    |:           |7*                    |:           |6rb|!                                 |?                    dѦ           t5          |6          D ])}F|@                    |Fddӄ |6|F         D                        *|7|8z
  }7|7rQ|!                                 |?                    dԦ           t5          |7          D ]}:|@                    |:dҦ           |4ra|!                                 |@                    ddt5          |4                     |A                    |                    ddզ                     |
:                                 d S )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NMzNM.hostREADELFzREADELF.host_wrapperz\.HOST$z.hostr   zexport DEVELOPER_DIR='%s' &&LINKc                 8    g | ]}|         d                   S )r   rg   )r   qualified_targetr   target_dictss     r%   r   z+GenerateOutputForConfig.<locals>.<listcomp>  s:     4 4 4# ,-.>?L 4 4 4r'   "ninja_use_custom_environment_filesrk   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)rQ  r  rA  depsr  zE$cc $defines $includes $cflags $cflags_c $cflags_pch_c -c $in -o $out)rQ  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)rQ  r  r  r  rK  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 $inr[  zAR $outz'rm -f $out && $ar rcs $arflags $out $inrX  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)rQ  r  r  r  r  rT  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)rQ  r  rT  zLIB $outzU%s gyp-win-tool link-wrapper $arch False $ar /nologo /ignore:4221 /OUT:$out @$out.rspz$in_newline $libflags)rQ  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.TOCrL  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)rM  rF   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 $binaryrc  z"PACKAGE FRAMEWORK $out, POSTBUILDSzG./gyp-mac-tool package-framework $out $version$postbuilds && touch $outra  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   r;   r   )r   r   zShort names for targets.phonyc                 6    g | ]}|                                 S rg   )r^   )r   r!  s     r%   r   z+GenerateOutputForConfig.<locals>.<listcomp>	  s2     /O /O /O1q}} /O /O /Or'   z(Empty targets (output for completeness).alldefault_target)Br-   rz   r  r   r<   r=   r   rw   r  r   r   r6   rq   CopyToolParseQualifiedTargetr{   r   r"   r  r  lowerr+   r  r.   ExtractSharedMSVSSystemIncludesGenerateEnvironmentFilesrd  r  r2   r   r   $generator_supports_multiple_toolsetsr0   r   rT  r  rl  r  r!  r#  rb  
AllTargetsrc  r   MergeGlobalXcodeSettingsToSpecRelativePathQualifiedTargetencoderg  rh  rk  r   r   ri   r  tellwritegetvaluecloser   r^   r  r   commentr   default)Gtarget_listr3  datar  r   r  r1   r   rp   rs   master_ninja_filer  r  r   r   r  rF  r  rG  r>  r   r   cc_host_global_settingcxx_host_global_settingclang_clr  r@  r  rB  
build_filer>  r(  build_to_rootr  keyr  
key_prefixr   configsshared_system_includescl_pathsr@   r=   r  rK  
cc_commandcxx_commandmtime_preserving_solink_basesolink_basesolink_suffixall_targetsr   rP  rn   target_short_namesempty_target_namesnon_empty_target_namesr2  r   r   this_make_global_settingsr   qualified_target_for_hashrm   	base_pathr   r~   ninja_outputwriterr  
short_namesG    `  `                                                                  r%   GenerateOutputForConfigr  H  s=   9':''&JJ0"55/ ggll#F++[99; ;) 7<< 4i@@. nm!L!LMM$%6cBBB, *fno>>> u__	B 
B
C	BGG	B	B
C	BDGI''( ("'',Z44[^DD*aj)--.DbII*//	070DF F-(( L Ljc5
d{{7<<u--b
i]E22g
d{{7<<u--b	Z	 	  
e||GLL..c
i]E22g$
jmU33h %
d{{7<<u--b
i]E22g
d{{7<<u--b
i]E22g
i]E22g
nW\\-77l
||J L)+mU)K)Khs$S__$$%& J$$&& @ @jc5
yy{{J'' @(Z(()j6*gz::jW\\-??hz%))*=tDD J58IIHVu__4 4 4 4 4'24 4 4G!CQGG (


<
<( (  !::)?M MHX^^--.. 	3 	3
d	 "4
T5
)
)+ +g	 ;tu}}GG':EDL'2222;-r22"0xDDEEEL%0#66#1%3GGHHHu__$###%,,,$###$)))(H---(J///$))))$ 268R H HIII&"4VXt"L"LMMM$ 2K3F K KLLL 
"K#6;;= = =
')99(EwOOQ Q Q * ( g h)%7W%M%MNNN)%7W%M%MNNN.,n-=|LLN N N )g66G!:,99H '4&..w;;g8 7(003??h),Y'JJL L L*,Z8LLN N NIw////I'9
(G(% (% & & &K);
(I*' *' ( ( ( K'@'B'BCCCU??$u__
-     -  / / /
 .     <J>K 
<     =     *,/N;  = = = 
L~	        I~        u__57  9 9 9 8  : : :	 L:< <		< ! *h8J-KK
H     '*h8J-KKK     E      @  /  1 1 1 \$7777\%888881     2     3     )F  H H H +'IJJ	  L L L =K	 "GH H	H !& 2M+*6?.A .A A)     +mYGGG)     3*6?.A .A A)     3}iHHH)     ).     -0  2 2 2
 &J  L L L (=  ? ? ? (>  @ @ @ %FD  E E E ,A  C C C 6    
 :    
 u__*S^;  = = = =
 '  ) ) ) u__!9CNJ  L L L L !/  1 1 1 1
 !N  P P P +=)  j*''(4(*(8(8(D(DF F   oof + . 
 uu 55% 6# 6# 	
''(899 Jg !%Z 0 4 45KR P P#<<<<<	"	"	"$8$8	: =<< ()D	88j9I4PPP
 ((W5I).0 0J !$
 : ::t;B!D !D 9 @ @ I I[!:;;EEGGN
++I
C(	S7]c',,sIth??K::LI%'g.BD D DF
 dKAAFQbgll>;??@@ 2J..001112 2 2 2 2 2 2 2 2 2 2 2 2 2 2K((( #	##%%	%	%$y/X*E*E%%dB//66v>>>)/n%&	[	(	(**,,---  &&&&T"""" P 3444/00 P P
W /O /O/A*/M/O /O /O P P P P *,BB (CDDD)** ( (w'''' Gugvk':':;;;,,-=uEEFFFs   A(ABBAB	BAB	c                     |d         }|D ]V}t           j                            |j        d|          }dd|g}t	          d|d|           t          j        |           Wd S )Nr  r  rr   z-Cz
Building [z]: )r<   r=   rw   r   r   r  
check_call)rh  r   r  r  r   builddir	argumentss          r%   PerformBuildr  	  sz    9' % %fw||G0%@@H$)I	E
3444)$$$$	% %r'   c                     t          j         t           j        t           j                   | \  }}}}}t          |||||           d S r    )signalSIGINTSIG_IGNr  )arglistrg  r3  rh  r  r   s         r%   CallGenerateOutputForConfigr  	  sF     	-v~...;B8;dFK+|T6;OOOOOr'   c                    t           j                            |          }|                    di                               dd           }t           j                            |          dk    r6t          j        | |          \  } }t          j        | |t                    \  } }|rt          | ||||           d S || d                  d         }|d         r	 t          j        t          |                    }g }|D ]}|                    | ||||f           |                    t           |           d S # t"          $ r}	|                                 |	d }	~	ww xY w|D ]}t          | ||||           d S )Nr   r   r)   r   r   parallel)r-   r   &CloneConfigurationForDeviceAndEmulatorr   rz   r  r  ShardTargetsInsertLargePdbShimsr   r  multiprocessingPoolr"   r   r  r  KeyboardInterrupt	terminate)
rg  r3  rh  r  user_configconfig_namesrT  arglistsr   es
             r%   GenerateOutputr  	  s   $KK , 

,b1155hEE+Z&!!U** ( 5k< P PK ( <\#>!@ !@K  -KtV') ) ) ) )  A/0@ALj -	#C$5$566' 	F 	FK
//L$DF F F F,h77777    & - -+\4 +	- 	- 	- 	-- -s   AD6 6
E EE)r   )7
__future__r   r   r{  rg  r  r  os.pathr<   r+   r  r  r  ri  r-   
gyp.commonr   gyp.msvs_emulationgyp.MSVSUtilr  gyp.xcode_emulation	cStringIOr   ImportErrorior   gyp.ninja_syntaxr6   r   r  r  r  r  rz   CrossCompileRequestedr[  r&   r2   r9   rB   objectrD   ri   r  r  r  r   r  r  r8  r#  r  r  r  r  rg   r'   r%   <module>r     s-  
 & % % % % %             				      



 



 



     ! ! ! ! ! !                         * ) ) ) ) ) ' ' ' ' ' '  +0 .
 $ =  D /1 +%' "$& ! '*z'G'G'I'I $  	; 	; 	;C C C/ / /S< S< S< S< S<V S< S< S<\b b b b b& b b bJ-2G 2G 2Gh
C 
C 
C       4 4 4n, , ,.& .& .&bJ	 J	 J	Z% % %P P P- - - - -s   A A%$A%