
    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 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jB                  jE                         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& Z6y# e$ r	 d dlmZ Y w xY w)(    )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                 D    | j                  |      r| t        |      d  S | S N)
startswithlen)argprefixs     5/usr/lib/python3/dist-packages/gyp/generator/ninja.pyStripPrefixr&   I   s$    ^^Fs6{|	*    c                     t        j                  d|       r| S |dk(  rt        j                  j	                  |       S d| j                  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   sR    
 XX&,Ju_--c22	s{{3 23	3s	::r'   c                     |dk(  r| j                  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   [   sB     u_ 	
		#x#c(*+A	L//q96	BBr'   c                 X    t         j                  j                  |       \  } }| d||S )z&Adds an arch string to an output path..)ospathsplitext)outputarch	extensions      r%   AddArchrB   e   s(    gg&&v.&)dI	..r'   c                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	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| _	        y )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__   sY    DI  D !DDDK DK DD DO DMr'   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    99<<<r'   c                 B    |dk(  s| j                   ry| 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$     $++99===r'   c                     | j                  |      r| j                         dz   S | j                         xs | 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   s>     ||F&((5!5!55r'   c                 6    | j                   xs | 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!66r'   c                 R    | j                   xs | j                  xs | 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   s%    ,>=>6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(y)+NinjaWriterNc
                    || _         || _        || _        || _        t	        j
                  |      | _        || _        || _        || _	        d| _
        |	Bt        j                  j                  t        j                  j                  |	|            | _
        |dk(  rdnd| _        |dk(  r i | _        dD ]  }
d|
z   | j                   |
<    t"        j$                  j'                  ||	      }t        j                  j                  ||      | _        t"        j$                  j'                  ||	      }t        j                  j                  ||      | _        y)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__   s    )D(DDMDN$$[1DJ(D,DDKD77??277<<8A,C Dd#u_6$DLdl  3$+d2T3 ::00LILlH=D**//,GKk9=Dr'   c                    d}||v rQ|r|j                  ||      }n<|j                  |dz   d      }|j                  |dz   d      }|j                  |d      }d}||v rE| j                  d      }|j                  |t        j                  j	                  |xs d|            }d}|j                  || 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||K#-r2||K$.3||K-+4**51g \\*'',,{'8b'BDd 0<<*D,<,<=DKr'   c                 l   | j                   dk(  r'| j                  j                  || j                        }|j	                  t
        d   |      }|j	                  t
        d   |      }|j	                  t
        d   |      }|j	                  t
        d   |      }|j	                  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MD<<34HI!D<<34EFOD<<34DEsKD<<34EFMDKr'   c                 6   |r_| j                   dk(  r!t        j                  j                  ||      }n/| j                   dk(  r t        j                  j                  ||      }|j                  d      rA| j                  |      }| j                   dk(  rt        j                  j                  |      }|S d|v r| j                  |      }d|vsJ |       t        j                  j                  t        j                  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t##D)h		77##H-ot|%dd? D ?77BGGLL););TBCCr'   c                    | j                  |      }|j                  d      rJ |       d}| j                  dk7  r|d| j                  z   z  }t        j                  j                  |      \  }}t        j                  j                  |      r
J d|z         |r| j                  dz   |z   }t        j                  j                  t        j                  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 ggmmD1Hmww}}X& L?(JL& ii#o5m77BGGLLdmmX)68 9 9r'   c                 0   ||D cg c]  }|s|	 c}k(  sJ |       t        |      dk(  r|rJ yt        |      dkD  s|rM| j                  |dz         }| j                  j                  |d||      }| j                  j	                          |d   S c c}w )zGiven a list of targets, return a path for a single file
    representing the result of building all the targets or None.

    Uses a stamp file if necessary.r   N   .stampstamp
order_only)r"   r   rr   buildnewline)rP   r   targetsr   tr   s         r%   WriteCollapsedDependenciesz&NinjaWriter.WriteCollapsedDependenciesa  s     '/QQq//88/
7|q^
7|a:((9e

  Z Pg
jj1: 0s
   BBc                 j    t         j                  j                  | j                        d   }|d|dS )Nr   r;   .ninja)r<   r=   r>   rt   )rP   r@   output_file_bases      r%   _SubninjaNameForArchz NinjaWriter._SubninjaNameForArchq  s-    ww''(=(=>qA,d33r'   c           	          | _         |d    _        |d    _        |d   |   }t        |d          _        t        |j                  dd             _        |j                  dd       _        t        j                  j                   j                  |       _        d	x _         _         j                  d
k(  rIt        j                  j!                  |       _        |j                  dd	      }|r| j                  _         j                  dk(  rt        j$                  j'                  ||       _         j                  j)                  |      } j*                  j-                  d j.                  |           j*                  j-                  dd|z           j*                  j-                  dd|z           j*                  j-                  dd|z           j*                  j-                  dd|z           j*                  j-                  dd|z           j                  d
k(  r[ j                  j1                  |       _        t5         j2                        dkD  r#t7         fd j2                  D               _        g }g }d|v r|d   D ]  }	|	 j:                  v s j:                  |	   }
|j=                  |
j?                   j                               |j=                  |
jA                                |
jB                  swd j                  _!         |D cg c]  }|s|	 }}|D cg c]  }|s|	 }} jE                  d|      } jE                  d|      }| j                  _#        | j                  _$        g }g } jK                  ||||       j                  _&         j                  jL                  xs |}g }	 ||j                  dg       z   }|r׉ j                  d
k(  rSt5         j2                        dkD  r; j2                  D ],  } j*                  jU                   jW                  |             . d	} j                  dk(  rt        j$                  jY                  | jZ                  | j\                         t        j$                  j_                   j                  | j\                   j`                   jb                        }n8t        j                  je                   j                   j\                   fd      } jg                   j*                  ||||||      }|D cg c]   }|ji                   jb                        s|" }}|r j                  d
k7  st5         j2                        dk(  r#||D cg c]  } j]                  |       c}z  }nRtQ        d|d   z         n@ j                  d
k(  r1t5         j2                        dkD  rtk        jl                  tn              } j                  jL                  xs |} j                  dk(  r; j                  jp                  d k(  r"| j                  _9        | j                  _:        d	}| xr | }|s j                  jL                  s|r2 jw                  |||||      } j                  r|j=                  |        j                  r jy                  |||      }|sy	 j                  j{                         sJ |        j                  S c c}w c c}w # tN        $ r; tQ        dtS        |             tQ        dtS        |j                  d                    w xY wc c}w c c}w )!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                  j                  j                  |            d             f ^ yw)wN)r6   rq   
OpenOutputr<   r=   rw   rs   r   ).0r@   rP   s     r%   	<genexpr>z(NinjaWriter.WriteSpec.<locals>.<genexpr>  s^      #$
 	 <&&277<<(;(;(,(A(A$(GI ! "#$s   A"A%dependenciesTactions_dependscompile_dependssourceszextra_sources: zspec.get("sources"): c                 2    j                  | dz   |z         S )N-)r   )r=   langrP   s     r%   <lambda>z'NinjaWriter.WriteSpec.<locals>.<lambda>  s    t99$*t:KL r'   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endswithcollectionsdefaultdictlistrF   rL   rM   WriteTargetWriteMacBundler^   )rP   specr   generator_flagsr   r   r@   r   r   depr   r8   extra_sourcesmac_bundle_dependscompile_depends_stamp	link_depsr   pchfobj_outputsorM   r?   is_empty_bundles   `                       r%   	WriteSpeczNinjaWriter.WriteSpecu  s    #D]#DI	?DL"#K0Ff&DK(,,a0)2D% (++N<MND,,88dKD/33D$,{{e//==dCd)--.A4H	0A-{{e--::4;JLd''4d
jj&$,,t"45
jj$.
jj%$/
jj)Vd]3
jj*ftm4
jj%$/{{e&&55kBdj	TZZ1	" #$
 

#$ $ OO n% (#$%%%&&s+&

 
 !6!6t{{!C
D

 
 !7!7!9
:__#'DKK ( %49qq9o9$39qq9o9778I8GIo778I8GIo$3dkk!%4dkk"
 M $ < <m_.@!BDKK "[[66I/ IB 77g
 		#djj/A"5 JJ 	?D
**

d77=
>	? c		//T''$:M:M	O  22T-@-@&&6 !!11!4!4LN ##
**k674I3
i !(D11::dll+CQDkD	;;%3tzz?a#7
D1++A.D
D)
 ;]#$ % 
	#djj/A"5))$/i;;,,?L{{e 0 04D D#,dkk !-dkk F#m>,>(>ODKK--k69 ,.f			!!&) ""4);_Mf;;""$,f,$;;m :94  s=12#S))<%=>4 E Es7   [?%[?/\7\\	 1 ]]]	A]c           	           j                   j                   j                        \  }}} j                        d fd	}|D 	cg c]  \  }}	| ||	      f }}}	|D 
cg c]
  }
 ||
       }}
|j	                  df       |j	                  d|f        j                        } j
                  j                  |d|||       |j                  |       yc c}	}w c c}
w )zhHandle the implicit VS .idl rule for one source file. Fills |outputs|
    with files that are generated.Nc                 @   t         j                  j                  |       } t         j                  j                        \  }}t         j                  j	                  |      \  }}j                  | ||||      } |r t         j                  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    WW\\&$'d''--/gx''""8,idC%%
gvsH6d	wwtS)kr'   r  idlflagsidl	variablesr   r    )r   GetIdlBuildDatar   r   r   rr   r   extend)rP   r   prebuildoutputsr?   varsflagsr  r   valuepinputr  s   ``          @r%   _WinIdlRulezNinjaWriter._WinIdlRule  s     #'"4"4"D"D  #"FFD%  (F @DDeT8E6*+DDD#)*ahqk*F*KK6"#KKU#$'EJJVUE8  -NN6 E*s   C#)C)c                     | j                   dk(  sJ | j                  j                  |      rg S g }t        d |d         D ]  }| j	                  |||        |S )z3Writes rules to match MSVS's implicit idl handling.r)   c                 $    | j                  d      S )Nz.idlr   xs    r%   r   z.NinjaWriter.WriteWinIdlFiles.<locals>.<lambda>*  s    1::f#5 r'   r   )r1   r   HasExplicitIdlRulesOrActionsfilterr  )rP   r   r	  r
  r   s        r%   WriteWinIdlFileszNinjaWriter.WriteWinIdlFiles$  sd    ;;%66t<iG5tIG 2
vx12Nr'   c                 z   g }| j                   r|j                  dg       dd }ng }g }d|v r|| j                  |d   |||      z  }d|v r|| j                  |d   ||||      z  }d|v r|| j	                  |d   ||      z  }d|v r$| j
                  dk(  r|| j                  ||      z  }| j                  r-| j                  j                         r| j                  |||       | j                  d|      }| j                   r9| j                  ||z   |      }	| j                  |	|      }
| j                  |
|       |S )	zkWrite out the Actions, Rules, and Copies steps.  Return a path
    representing the outputs of these steps.mac_bundle_resourcesNactionsrulescopiesr   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.  so    G!XX&<bA!D!#D""4	?M8#=? ?g$gx!5!;= =g 4!!$x.(<NOOgDT[[E1&&tX66gt22AAC
##D'8<++,BGLE--
$';
;=OQh00;MN
/1CDLr'   c                     | j                   dk7  r|d| j                   z  z  }|r|d| j                  |      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  sM     ||x
ft||##dd009:: $))X66r'   c           
      n   | j                         }g }|D ]  }|d   d| j                  }| j                  d|j                  dd       |      }	| j                  dk(  r| j
                  j                  |      nd}
|d   }|j                  dd       }|r| j                  |      }t        |j                  d	d
            rdnd }| j                  |||	|
|||      \  }}|d   D cg c]  }| j                  ||       }}t        |j                  dd            r||d   z  }t        |j                  dd            r||d   z  }|d   D cg c]  }| j                  ||       }}| j                  j                  ||||       ||z  }| j                  j                           |S c c}w c c}w )Naction_name_ACTIONr-  r)   Factiondepfileninja_use_consoler   console)r5  inputsprocess_outputs_as_sourcesr
  'process_outputs_as_mac_bundle_resourcesr   )GetToolchainEnvrm   r/  r   r1   r   IsRuleRunUnderCygwinr   intWriteNewNinjaRuler   rr   r   r   )rP   r  r   r	  r'  r   all_outputsr4  r   description	is_cygwinargsr5  pool	rule_namer2  ir8  r   r
  s                       r%   r  zNinjaWriter.WriteActionsa  s    


 CK }-t/B/BCd,,X-3ZZ	4-H-13k kkU* %%::6B05 Hd

9d+g	$$W-fjj)<a@AYtd++D$,5sD4; , =li 6<H5EF##As+FfF	VZZ4e<	=	**	VZZA5I	J"fY&77"6<Y6GH$$Q,HgH jjw	6"*  ,Wk
jj;>  G
 Is   'F-F2c                   " | j                         }g }|D ]  }d|vr|j                  dg       s|d   d| j                  }	|d   }
| j                  d|j                  dd       dt        d   z   |	z        }| j
                  d	k(  r| j                  j                  |      nd
"t        |j                  dd            rdnd }| j                  |	|
|"||      \  }}
d}t        dg      }|
D ]"  }|D ]  }d|z  |v s|j                  |        $ t        |      }"fd}|j                  dg       D cg c]  }| j                  ||       }}|j                  dg       }t        |      }|r|dz  }|dkD  r(t        |      dkD  r| j                  |d   ||      g}g }|D ]  }t         j"                  j%                  |      }t         j"                  j'                  |      \  }}t         j"                  j)                  |      \  }}|d   D cg c]  }| j+                  ||||||       }}t        |j                  dd
            r||z  }||v }|st        |j                  dd
            r||z  }|r|j-                  |       g }|D ]  }|dk(  r|j/                  d ||      f       "|dk(  r6| j1                  || j2                        } |j/                  d ||       f       ]|dk(  r6| j1                  || j2                        }!|j/                  d ||!      f       |dk(  r|j/                  d|f       |dk(  r|j/                  d ||      f       |d k(  rJ t5        |              |D cg c]  }| j                  ||       }}| j
                  d	k(  rJ|j/                  dt7        j8                  t;        j<                  |d               j?                         f       | j@                  jC                  ||| j                  |      |||       |jE                  |         |S c c}w c c}w c c}w )Nr4  rule_sourcesrD  r2  RULEr-  z%s r   r)   Fr6  r   r7  )r   r   r   r   r   r   z${%s}c                 0    r| j                  dd      S | S )Nr   r   )r0   )r=   rA  s    r%   cygwin_mungez,NinjaWriter.WriteRules.<locals>.cygwin_munge  s    dC(
(r'   r8  r      r   r
  r9  r:  r   r   r   r   unique_nameimplicitr   r  )#r;  r   rm   r/  r   r1   r   r<  r=  r>  setaddsortedr   r"   r   r<   r=   r   r   r>   r   remover   r   r}   reprhashlibmd5sixensure_binary	hexdigestrr   r   r  )#rP   r  r   r	  r  r'  r   r?  ruler   rB  r@  rC  rD  special_localsneeded_variablesargumentvarrJ  rE  r8  r   
num_inputsr   r   r   r   r   r   r
  was_mac_bundle_resourceextra_bindingsdirname_expandedsource_expandedrA  s#                                     @r%   r   zNinjaWriter.WriteRules  s   



 CK o$		dhh~r&B [)4+>+>?d(^d,,

((9d
#./@AAT
IKk
 kkU* %%::4@05 dhh':A>?YTd..
k9c49oi DnhZ &(! 	&Cs]h&  %	&&   01 6:XXh5KL##As+LfL
 ,gv;j	a
	aCL1,11
{
V 2 : ;  9$&!!&)GGMM&1GG$$X.	c
 !O- ++AtW,2CC - - txx4e<=
7
"-"(,@"@"BEJK
$
/
$ % ''/# 	*CF]!!6<+=">?i  $11'4;M;MN!!9l;K.L"MNh #009K9KLO!!8\/-J"KLe|!!5#,/f}!!6<+A"BC$;)S	);)	*, 9@@14&&q#.@@;;%


kk#++GAJ78BBD!F G 	

)T-@-@-H"($,#1 	 	3
 	7#s9$mo$b U M*-P As   7P7P<:Qc           	         g }| j                   r-| j                   j                         }| j                  |      }n| j                         }|D ]  }|d   D ]  }t        j                  j                  |      }t        j                  j                  |      d   }	| j                  ||      }
| j                  t        j                  j                  |d   |	      |      }|| j                  j                  |d|
|      z  }| j                  s|j                  | j                   j                               s|j                  |         |S )Nadditional_settingsfilesr   destinationcopyr   )r   GetPerTargetSettingsr;  r<   r=   r   r   r   rw   rr   r   r   r!   GetBundleContentsFolderPathr   )rP   r  r	  r   r
  	extra_envr   rh  r=   r   srcdsts               r%   r!  zNinjaWriter.WriteCopies  s*   G%%::<i  Y ?c  "c +w- +$ww%77==&q)!!$,!!"'',,tM/BH"M"%'4::##C#JJ ^^D//KKMN%%c*!++& Nr'   c           	      T   | j                         }|d   }|d   }| j                  d      }|| j                  _        t	        | j
                  t        d |            }d|fdt	        | j
                  |      fg}	|j                  | j                  j                  |d||	|             y	)
zFPrebuild steps to generate hmap files and copy headers to destination.r   mac_framework_headerszheaders.hmapc                 $    | j                  d      S )Nz.hr  r  s    r%   r   z6NinjaWriter.WriteiOSFrameworkHeaders.<locals>.<lambda>"  s    ajj$&8 r'   	frameworkcopy_headerscompile_ios_framework_headersr  N)
ComputeMacBundleOutputr   r   header_map_pathmapr   r  r  rr   r   )
rP   r   r
  r	  rq  all_sourcesrr  r?   all_headersr  s
             r%   r#  z$NinjaWriter.WriteiOSFrameworkHeaders  s    ++-Iy/K/0L''7F*0D'd))8+FHKy) #d&9&9<"HIKINN4::##/ $ 2 3r'   c           
      h   g }| j                   j                         }| j                  |      }| j                  |      }| j                   j	                  | j
                        }t        j                  j                  t        d   | j                   t        | j                  |            D ]  \  }}| j                  |      }t        j                  j                  |      d   dk7  r8| j                   j#                  |d|dd|fd|fg	       |j%                  |       t|j%                  |        |S )
z.Writes ninja edges for 'mac_bundle_resources'.rd  r   z	.xcassetsmac_tool)mactool_cmdzcopy-bundle-resourcer   rJ   r  )r   ri  GetSortedXcodeEnvComputeExportEnvStringIsBinaryOutputFormatr   r-   r   GetMacBundleResourcesr   rv  r   r   r<   r=   r>   rr   r   r   )	rP   	resourcesbundle_dependsr(  rk  r   isBinaryr?   ress	            r%   r$  z#NinjaWriter.WriteMacBundleResources)  s%   H##88:I

 
 Y
 
?C

%
%c
*C""778H8HIH**@@#M2S!4!4i@B 
 !!&)f			&	!"	%	4

S$K%*CL8X2F$H 	 	I 	f%
 Or'   c           
         |syi }ddd}| j                   j                   | j                     }|j                         D ]  \  }}|j                  |      }|s|||<     d}	|r| j	                  d      }	|	|d<   g }
|
j                  t        j                  j                  | j                   j                         d             |	r|
j                  |	       t        t        j                  |      | j                        }| j                   j                         }| j                  |      }| 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.carrd  compile_xcassetsr   keysr}  )r   r   itemsr   r   r   r<   r=   rw   GetBundleResourceFolderr2   jsondumpsr1   ri  r~  r  r  rr   r   )rP   r(  r  extra_argumentssettings_to_argsettingssettings_keyarg_namer  r)  r
  r  rk  r   s                 r%   r%  zNinjaWriter.WriteMacXCassets?  sx    O'!/O ""11$2B2BCH"1"7"7"9 *hll<(e	$)!*
 55
-/5Go12GNN
779	 nn'(djj94;;GD##88:I

 
 Y
 
?C

%
%c
*C$****#X3<&$0 + 2 3 r'   c           	         t         j                  j                  t        d   | j                  | j
                        \  }}}}|sy| j                  |      }|r| j                  t        j                  j                  |            }dj                  |D cg c]  }t        || j                         c}      }| j                  j                  |d|d|fg      }| j!                  |      }	| j#                  |	      }	|r0| j                  d      }| j                  j                  |d	||g      }| j                  j%                  | j&                        }
t)        t+        j,                  |
      | j                        }
| j                  j/                  | j&                        }| j                  j                  |d
|d|	fd|
fd|fg       |j1                  |       yc c}w )z.Write build rules for bundle Info.plist files.r   Nr+  preprocess_infoplistdefinesr}  rd  zmerged_info.plistmerge_infoplistcopy_infoplistr   r  rJ   )r-   r   GetMacInfoPlistr   r   r   r   r   r<   r=   r   rw   r9   r1   rr   r   r~  r  GetExtraPlistItemsr   r2   r  r  r  r   )rP   r)  r  
info_plistoutr  rk  intermediate_plistr8   r   r  r  s               r%   r&  zNinjaWriter.WriteMacInfoPlistm  s   *-*=*=*M*M#M2T00+2'JWi 


S
!C55
''

:
&('BQ&DKK0BCg::##
4j() $ +j 
 
 Y
 
?C

%
%c
*C556IJ::##
/z
*,j 11$2B2BCDdjj.<D""778H8HIHJJS*J!&vtn!)8 4 6  7 #) Cs   Gc           	           j                   dk(  rĉ j                  j                  dd        j                  j                  dd        j                  j                  dd        j                  j                  dd	        j                  j                  d
d        j                  j                  dd        j                  j                  dd        j                  dk7  st	         j
                        dk(  r! j                   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   n   K   | ],  }|j                  j                  |   |       f . yw)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 2 "s   25)r   rr   r   r1   r"   r   r  r   )rP   
ninja_filer   r   r   r  r  r   s   ` ``````r%   r   zNinjaWriter.WriteSources  s    ||v
jj$
+
jj$
+
jj%-
jj$
+
jj&,/
jj$
+
jj)_5{{es4::!3%%
**k67J
d$ $  " " jj" " "r'   c	                    g }	| j                   dk(  r| j                  j                  ||      }
| j                  j                  |      }| j                  j	                  |      }dg| j                  j                  |      z   }dg| j                  j                  |      z   }n| j                   dk(  rw| j                  j                  |      }| j                  j                  |      }
| j                  j                  |      }| j                  j	                  |      }| j                  j                  |      }	| j                  j                  || j                        x}}|sd}| j                  dk7  r|d| j                  z   z  }t        j                  j                  t        j                  j!                  || j"                  | j$                              }|d	z   }|d
z   }| j'                  |d|g       | j'                  |d|g       | j'                  |d| j$                  g       n6|j)                  dg       }
|j)                  dg       }|j)                  dg       }| j                  dk(  rt        j*                  j)                  dd      j-                         t        j*                  j)                  dd      j-                         z   |z   }t        j*                  j)                  dd      j-                         t        j*                  j)                  dd      j-                         z   |z   }n| j                  dk(  rt        j*                  j)                  dd      j-                         t        j*                  j)                  dd      j-                         z   |z   }t        j*                  j)                  dd      j-                         t        j*                  j)                  dd      j-                         z   |z   }|j)                  dg       |	z   }| j'                  |d|D cg c]  }t/        || j                          c}       | j                   dk(  r| j'                  |dt1        | j                               | j'                  |d| j                  j3                  || j4                        D cg c]'  }t7        | j                  |      | j                         ) c}       |j)                  dg       }| j9                         }| j                   dk(  r| j                  j;                  ||      }| j'                  |d|D cg c]+  }t7        d| j5                  ||      z   | j                         - c}       | j                   dk(  rv|j)                  dg       }| j                  j=                  ||      }| j'                  |d |D cg c]+  }t7        d| j5                  ||      z   | j                         - c}       |j?                  |      }| j                   dk(  r1d!D ],  \  }}|jA                  ||      }|s|jC                  ||       . |j)                  d"g       }| j'                  |dt1        | j                  |
             | j'                  |dt1        | j                  |             | j'                  |dt1        | j                  |             | j                   dk(  rN| j'                  |d#t1        | j                               | j'                  |d$t1        | j                               | j'                  |d"t1        | j                  |             |jE                          g } d%}!|D ]  }"t        j                  jG                  |"      \  }#}|d&d' }| jH                  }$|d(v rd)}%d*| jJ                  _&        n|d+k(  s|d,k(  r| j                   dk7  rd-}%n|d.k(  r| j                   dk7  rd/}%n| j                   dk(  r%|d0k(  r | j                  jO                  |      sd0}%d1}$n\| j                   dk(  r|d2k(  rd3}%nE| j                   dk(  r|d4k(  rd5}%d*| jJ                  _&        n| j                   dk(  r|d6k(  rd6}%d7}$d*}!n| j5                  |"      }&| jQ                  |#|$z         }'|tS        |'|      }'|jU                  |&g|'g|      }(g })| j                   dk(  r%|jW                  |&|'|(|%||| j                        \  })}'}(|jY                  |'|%|&|(D *+cg c]  \  }*}*}+|+
 c}+}*||)8       | j[                  |'        |!rZ|j)                  d9|      },| j'                  |d:|,D cg c]+  }t7        d| j5                  ||      z   | j                         - c}       | j]                  ||       |jE                          | S c c}w c c}w c c}w c c}w c c}+}*w c c}w );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  asmflagsrcflagsinclude_dirsincludesz-Imidl_include_dirsmidl_includes))ccflags_pch_c)r   cflags_pch_cc)mcflags_pch_objc)mmcflags_pch_objccarflagscflags_objccflags_objccFr   N)r   cppr   r   Tr  Sr   scc_sr   z_asm.objr  objcr  objcxxrcz.resrM  resource_include_dirsresource_includes)/r1   r   	GetCflags
GetCflagsCGetCflagsCCGetCflagsObjCGetCflagsObjCCr   GetAsmflagsGetComputedDefinesGetCompilerPdbNamer   r   r<   r=   r   rw   ro   r   WriteVariableListr   environr   r9   rv  
GetRcflagsr   r2   r;  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  r8   r   r  r   rE  r  pch_commandsr   r]  includer  r
  has_rc_sourcer   filenamerx   commandr  r?   rN  r  r2  gchr  s-                                                r%   r  zNinjaWriter.WriteSourcesForArch  s	    M{{e"",,[t,Df$$//<h%%11+>i M''55kBCk"^((77DEl		##//<h!!++K8f##..{;h$$00=i((;;KHm#11DD
t)) + +i*<<8#
t||#
##''""277<<T]]DII#NOh&	y(

ZykB
Z
|D
ZtyykBzz(B'fJ+h**["-i ||x**..R0668**..2.44679ABh::>>*b1779::>>*b1779:<EFi		**.."5;;=**..399;<>FGh::>>/26<<>::>>/26<<>?AJKi jjB'-7G:y<CDqF1dkk2DF{{e
Z !3!3X>@
Z&&11+262E2EGH d003T[[A HI
 ::nb1L



 C{{e''99,:EGl:z	  
D4#6#6q##>>	L 	 ! {{e **%8"=,,BB
[*
Z%' dT%8%8C%@@$++N '( &99$?L{{eM 6(#s$//T:J''W56
 jjB'G:xt116:<:zt118<>:{t119=?{{e
Z !3!3[AC
Z !3!3\BD:yt117;=GM *gg&&v.mhGcg	$	$##:#*)=#:$++.KK5 SE\""66t< ;;%C3J;;%C4K#;;%C4K 	!!&)e))(W*<=f		&#66w$Ohi		&8&N&N68Wh	' #	68 vw6> ?As ?",	  C nnVU*X $jj)@,O
Z)<)+ dT%8%8C%@@$++N +, 	\2NU E
H	 'J !@+s$   'g6,g	0g0gg)0gc                     |sy|D ]A  \  }}}}ddddd|   }ddd	d
d}|j                  |      }	|j                  ||	|||fg       C y)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_namerv  cmds
             r%   r  zNinjaWriter.WritePchTargetsE  s{    '3 
K#Ye 	
 	h u6DcGGDMcsCHi3H2IJ
Kr'   c                 \   | j                   dk7  st        | j                        dk(  r | j                  | j                  |||||      S | j                  |      }| j                  D cg c]*  }| j                  | j                  |   |||||   ||      , }}g }	|}
| j                  s| j                  |	|||       |d   dv rE| j                  s9|	j                  d|f       | j                  j                  ||dz   gd||		       |S | j                  j                  |
d
||		       |S c c}w )0Write out a link step. Fills out target.binary. r   r   r  rF   rX   r   r]   solipor}  lipo)r1   r"   r   WriteLinkForArchrr   ComputeOutputr   r   AppendPostbuildVariabler   r   )rP   r   r   r   r   rM   r?   r@   r8  r`  build_outputs              r%   	WriteLinkzNinjaWriter.WriteLinkV  sS   {{es4::!3""
**dKLJ J !!$'f !JJ(  %%d&9&9$&?&169T?&2 & ? (f ( nl$$^T66J v,?
?  ufo.

&&6/2Hf$ 	 	& m 	

vvPm%(s   '/D)c           	          dddd|d      }d}	t               }
t               }t               }|r|j                  |       d|v rt               }|d   D ]  }| j                  j                  |      }|s"|j	                         }|r%g }| j
                  dk(  r[|j                  rO| j                  j                  |      r4|j                  }|j                  r|j                  |j                         n| j
                  dk(  r|j                  r|j                  g}nb|j                  | j
                        r:|j                  |j                         |
j                  |j                  d	z          n|j                  g}|D ])  }||vs|j                  |       |j                  |       + |j                         }|r||j                  k7  s}|
j                  |        g }| j                  j                   r | j
                  dk7  r|j                  d
       | j#                  ||      }| | j$                  s| j'                  ||||       |d   dk(  }| j(                  dk(  r/t*        j,                  j                  dd      j/                         }n=| j(                  dk(  r.t*        j,                  j                  dd      j/                         }| j
                  dk(  rE| j0                  j3                  || j5                  t6        d         | j8                  |      }|z   }n| j
                  dk(  r| j;                  | j=                  |            }| j                  j3                  || j8                  | j4                  |||| j>                        \  }}}|z   }| jA                  |d|       |
jC                  |      }
|r| jA                  |d|g       tE        | j                  jG                  |            }	| j                  jI                  | j8                        }|r|
j                  |       n|j                  dg       z   }|rrtK        |      rgd}| j(                  dk7  r$|| j(                  z  }|j                  d|z         n|j                  d| jL                  z         |j                  d|z         | jA                  |dtO        | j4                  |             |j                  dg       }| j
                  dk(  r_|D cg c]  }| j                  jQ                  ||        }}|D cg c]*  }dtS        | j9                  |      | j
                        z   , }}n5|D cg c]*  }tS        d| j9                  |      z   | j
                        , }}tT        jV                  jY                  tO        | j4                  |j                  dg                   } | j
                  dk(  r| j0                  j[                  | |      } n*| j
                  dk(  r| j                  j[                  |       } | jA                  |d|| z          |}!|dv r|j                  dt*        j\                  j/                  |      d    f       |j                  d!tT        jV                  j_                  |      f       | j
                  dk7  ry|}"| j$                  r| j0                  ja                         }"|r|"d"|z   z  }"|"d#z  }"|"jc                  d$d%      }"|j                  d&tT        jV                  j_                  |"      f       | j
                  dk(  r|j                  d'|f       d(|vr| j                  je                  |      s |d)z   | j                  _
        |j                  d*d+| j                  j                  z  f       | j                  jg                  || j4                  |d,z         }#|| j                  j                  g}|#r~|j                  |#       nl| j$                  s||d	z   g}nX|d-z   }nR| j
                  dk(  rC|j                  d'|f       | j                  jg                  || j4                  |d,z         }#|#r||#g}tK        |      r9|j                  d.tT        jV                  ji                  tk        |            f       |jm                  |||	z   |tk        |
      to        |      |/       |!S c c}w c c}w c c}w )0r  linksolink_modulesolink)
executablerY   rT   rF   r   r   r)   r]   )r  z$ldxxr  r   LDFLAGSr  LDFLAGS_hostr   r   	manifestsintermediatemanifestldflagszlib/z-Wl,-rpath=\$$ORIGIN/%sz-Wl,-rpath=%sz-Wl,-rpath-link=%slibrary_dirsz	/LIBPATH:z-L	librarieslibs)r  r   sonamer   r   r;   z.rspr+  r2  link_file_listrJ   z/NOENTRYz.lib
implibflagz
/IMPLIB:%sz.pdb_notocsolibsrM  )8rO  rP  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   rv  r   r2   r-   rz   uniquerAdjustLibrariesr=   EncodePOSIXShellArgumentGetWrapperNamer0   GetNoImportLibrary
GetPDBNameEncodePOSIXShellListrQ  r   r   )$rP   r  r   r   r   r   rM   r@   r  command_suffiximplicit_depsr  
order_depsextra_link_depsr   r   linkablenew_depsnew_depfinal_outputr`  r?   is_executableenv_ldflagsr  manifest_base_nameintermediate_manifestmanifest_filesdef_filerpathr  lr	  linked_binaryr  pdbnames$                                       r%   r  zNinjaWriter.WriteLinkForArchq  sc     (! 6l	G
 NEMUFJ nn\"
 on% *#$$((-
??$(kkU"##  ==kJ,,H""nnV001{{e#(9(9))*H~~dkk*JJv}}%fmmf45H! (go-!!'*w'(
 ))+<6==8


L
)7*: N{{u 4O,d+F|D..
"">4HLL0M ||xJJNN9b1779k		JJNN>26<<>k{{e##..{


8G
H


t%g g%g		55

$
$T
*, 


'
'T5H5H(,(:(:<N(.(,(;(;= 5g$n
 g%g
ZnE#)).9m	.1F0G	I0



,
,[
9;n##..t/B/BCh	(# fjjB77g	3v;<<8#
4<<
%
..3e;
<
..4+<+<<
=+e34:yt117;= ::nb1L{{e+- ((88KH -l -  ,- "$6t7J7J17M7;{{%D D -l -  ,- )0C0CA0F)F)-6 -l - 

""3t'9'9'+xxR'@$B CI{{e%%55iMi		$$44Y?i:v|i/GHM--Xrww}}V'<Q'?@AUJJ??GI J		  ..==?.
C$J
&.& 
 (//S9JJ//?A	B 
	x01g%""55kB#)F?$++
 


!-0F0F!F!H I&&114--v@'DKK223&MM'"!!&6/*H$		Xv./""--
t))6F?<g	'" 6{X
**
)
)&.
9; < VW~5y$]3 $Z 0-  / U---s   #c14/c6*/c;c                     t         fd|j                  dg       D              }|d   dk(  s|s:|s8| j                  _        d j                  _         j                  j                  S |d   dk(  r j                  |       j                  _         j                  dvrU j                  sI j                  j                   j                  j                  d||        j                  j                  S g } j                  r0 j                  j                  |      }|r|j                  d	|f        j                  r9 j                  j                  | j                        }	|j                  d
|	f        j                  dk7  st!         j"                        dk(  r j%                  || j                  j                   j                  j                          j                  j                   j                  j                  d|||        j                  j                  S g }
 j"                  D ]K  } j                  ||      } j&                  |   j                  |d||   ||       |
j                  |       M  j%                  || j                  j                   j                  j                          j                  j                   j                  j                  d|
|        j                  j                  S  j)                  |||||       j                  _         j                  j                  S )Nc              3      K   | ];  }|j                   v r+j                   j                  |      j                          = y wr    )rn   r   rV   )r   r   rP   s     r%   r   z*NinjaWriter.WriteTarget.<locals>.<genexpr>/  sA      9! D$7$77 --11#6??A 9s   AA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   r!  r  r6  r7  r8  r@   r?   s   `            r%   r   zNinjaWriter.WriteTarget.  s    9%)XXnb%A9 9O F|vi (dkkdkkT ;;S 
f)	)--d3dkk
++@
@

+
+

++\9$0 	 	2J ;;E 	--==kJ-o}=>''33K484G4GI(


J1
2;;%3tzz?a#7

&
&y$'+{{'9'94;;;M;MO
**

4;;--w	&2i  I* ;;% &jj "d''d3F%++FGYt_7C6? , A MM&!" 
&
&y$'+{{'9'94;;;M;MO
**

4;;--w &/  0 ;;  >>$VY*68dkk;;r'   c                 2   | j                   sJ |d   dv }| j                         }|r|dz  }g }| j                  |||| j                  j                  |        |r|s|d   dk(  r6| j
                  j                  r | j                  j                  |d||       nj|j                  d| j
                  j                         f       | j                  j                  |d	||       n| j                  j                  |d
||       || j                  _        |S )NrF   rX   r   )is_command_startrT   package_ios_frameworkr}  versionpackage_frameworkr   )r   rt  r  r   rJ   r   isIOSrr   r   r   GetFrameworkVersionrK   )rP   r   r   is_emptyr@  r?   r  s          r%   r   zNinjaWriter.WriteMacBundleb  s)   V(MM((*FfI  D&$++:L:L6G2G ! I	f)	)d.A.A.G.G

!8:L#, 	 	. 	)T%8%8%L%L%NOP

!46H#, 	 	. jjvw(:!*  ,DKKMr'   c                 l    | j                  |      }| j                  dk(  r| j                  |      }|S )z:Returns the variables toolchain would set for build steps.rd  r)   )r~  r1   GetMsvsToolchainEnv)rP   re  r   s      r%   r;  zNinjaWriter.GetToolchainEnvy  s?    

 
 5H
 
IC{{e$$1 % 3cJr'   c                 P    | j                   j                  d| j                        S )z>Returns the variables Visual Studio would set for build steps.r
   r   )r   GetVSMacroEnvr   )rP   re  s     r%   rE  zNinjaWriter.GetMsvsToolchainEnv  s-    ++O484D4D , F Fr'   c                     | j                   sJ | j                   }t        j                  j                  | j                  |t
        j                  j                  || j                        | j                  |      S )z6Returns the variables Xcode would set for build steps.)
ru   r-   r   r~  r   r<   r=   rw   r|   r   )rP   re  ru   s      r%   r~  zNinjaWriter.GetSortedXcodeEnv  sc    &&M00]
]D$6$679I9I r'   c                 n    i }| j                   j                  d      }|r||d<   | j                  |      S )z:Returns the variables Xcode would set for postbuild steps.CHROMIUM_STRIP_SAVE_FILErd  )r   GetPerTargetSettingr~  )rP   postbuild_settingsstrip_save_files      r%   GetSortedXcodePostbuildEnvz&NinjaWriter.GetSortedXcodePostbuildEnv  sG     ))=="$O7F34!!6H!IIr'   c                 X    | j                  ||||      }|r|j                  d|f       yy)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  s6     ((vv?OPIi01 r'   c                    | j                   r
|d   dk(  s|syt        || j                        }t        j                  j                  |d      }|| j                   j                  | j                  t        j                  j                  t        j                  j                  | j                  |            t        t        j                  j                  t        j                  j                  | j                  |            | j                        |d      }|sy|j                  dt        j                  j                  d| j                   g             | j#                  | j%                               }|dz   d	j                  |D cg c]  }t'        j(                  |       c}      z   }|d
|z  z   dz   }	|rd|	z   d	z   S d|	z   S c c}w )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   r2  r   T)quietr   cdz (z && z$); G=$$?; ((exit $$G) || rm -rf %s) z&& exit $$G)(z$ && ()r   r2   r1   r-   r   GetSpecPostbuildCommandsAddImplicitPostbuildsr   r<   r=   r   rw   r}   insertrz   r  r|   r  rN  r6   r7   )
rP   r   r?   output_binaryr=  rP  r   r  commandscommand_strings
             r%   rQ  zNinjaWriter.GetPostbuildCommand  s    $v,&"84F$$==d$=OJ &&<<



''

277<<(:(:FC
D
ggrww||D,>,>NOkk D = "j  a88	t!!"$ %

%
%d&E&E&G
HC TzLg\((1LMNH "35;"< <>LMN >!F**&& Ms   	G
c                     g }|D ]M  \  }}|j                  d|dt        j                  t        j                  j                  |            d       O dj                  |      S )zGiven an environment, returns a string looking like
        'export FOO=foo; export BAR="${FOO} bar;'
    that exports |env| to the shell.zexport =;r+  )r   r6   r7   r-   rz   r  rw   )rP   r   
export_strkvs        r%   r  z"NinjaWriter.ComputeExportEnvString  sc     J L1l!!#**"E"Ea"HIK LL 88Jr'   c                     | j                   sJ t        d   }| j                  t        j                  j                  || 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%   rt  z"NinjaWriter.ComputeMacBundleOutput  sQ    &}5D
T4..==?@B Br'   c                    |s|d   }t        j                   t              }t        |d| j                  i       |d   |d   |d   |d   d}|j	                  d|j	                  |d            }|d	   |d	   |d
   |d   d}|j	                  d      }|rd|z   }n|j	                  |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  r2  z%s.stampzUnhandled output type %s)rh  r   CalculateVariablesr1   r   r&   	Exception)	rP   r   rF   default_variablesDEFAULT_PREFIXr$   DEFAULT_EXTENSIONrA   r   s	            r%   r  z!NinjaWriter.ComputeOutputFileName  sJ   &\d		"=>(8T[[*AB
 ++>?)*=>)*=>%&9:	N XX&(:(:4(DEF
 --@A+,?@+,?@'(;<	 ,-I	/i#''b1iN#f M"f	5VU+ & &33	&  04788r'   c                 
   |d   }| j                   dk(  r4| j                  j                  | j                  | j                        }|r|S |.| j                   dk(  r|dv r| j
                  j                         }n| j                  ||      }|8d|v r4t        j                  j                  |d   |      }| j	                  |      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  }|hd}| j                  dk7  r-t        j                  j                  dd| j                  z        }t        j                  j                  |t        ||            S ||v s| j                  r|S |d	k(  r^d}	| j                  dk7  r-t        j                  j                  dd| j                  z        }	t        j                  j                  |	|      S | j                  |d      S )z2Compute the path for the final output of the spec.rF   r)   r   )rS   r  rT   rY   r   r  rY   r   rT   rS   r@   z%sr   F)r   )r1   r   GetOutputNamer   r   r   GetExecutablePathr  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$2B2B262D2DFh	|u, :M 2M$$668h++D$7h|-WW\\$}-x8d%% ():;{{e 8.0@AA		$,,(":.// g		!'',,vtdll':;WW\\'78T#:;;	$	$(I(Io	!	!f		!eTDLL%89WW\\&(++''E'BBr'   c                 r    t        |t              rJ |g }|j                  |dj                  |             y )Nr+  )
isinstancer   r   rw   )rP   r  r]  valuess       r%   r  zNinjaWriter.WriteVariableList5  s5    &#&&&~fSXXf-.r'   c           
      n   | j                   dk(  rg|D cg c]4  }| j                  j                  || j                  | j                        6 }}| j                  j                  || j                        }n\| j                   dk(  rM|D cg c]"  }t
        j                  j                  ||      $ }}t
        j                  j                  ||      }| j                  }	| j                  dk(  r|	d| j                  z   z  }	|	d|z   z  }	t        j                  dd|	      }	g d}
d	d
j                  t        t        j                  |
            z   dz   }
t        j                  |
dz   d|      }d}d}|D cg c]  }| j                  || j                          }}| j                   dk(  rz|	dz   }|rdnd| j                   z   }|r'| j                  j#                  || j                         }nt
        j$                  j'                  |      }dt(        j*                  z  |z   |z   }nE| j-                  |      }t
        j.                  j1                  |      }d| j                   z  |z   |z   }| j2                  j5                  |	|||d|||       | j2                  j7                          |	|fS c c}w c c}w c c}w )zWrite out a new ninja "rule" statement for a given command.

    Returns the name of the new rule, and a copy of |args| with variables
    expanded.r)   r   r   r   r;   z[^a-zA-Z0-9_]r2  )r   r   r   r   r   z(?!|)z\$Nz.$unique_name.rspr   r+  z%%s gyp-win-tool action-wrapper $arch zcd %s; T)r5  restatrC  rspfilerspfile_content)r1   r   r   r}   r   r-   r   r   r   r   r+   subrw   rv  r7   r   r|   BuildCygwinBashCommandLiner.   EncodeRspFileListsysr  r  rz   r  rr   rY  r   )rP   r   rB  r@  rA  r   rC  r5  r#   rD  protectr|  r}  run_inr  s                  r%   r>  zNinjaWriter.WriteNewNinjaRule;  s    {{e    00t))$2B2B 1 D d  &&66
d.. 7 0k		EIJcc!!//S9JdJ''55k3Gk
 		I||x3%%itIY7I
 LGchhs299g677#=G&&5#{;K
 GOCGHCDsD$6$67HDH{{e//grC$*<*<$<f	,,GG$$$& ,,>>tD83>>I!"g '',c

//5gD...4w>g
 	JJOOIwWd#_  F 	JJd?q K0 Is   9J(
'J-4#J2r    )T)F))rc   rd   re   rQ   r   r   r   r   r   r   r   r  r  r   r/  r  r   r!  r#  r$  r%  r&  r   r  r  r  r  r   r   r;  rE  r~  rN  r  rQ  r  rt  r  r  r  r>  rg   r'   r%   ri   ri      s     !#>J<
D("9H 4Un0#J7$Lun83,,\ D". FJ^@K"8 6:{z2h.F
	J 052"'H B09d+CZ/ !%@r'   ri   c                    t         j                  j                  |      }|dk(  r| j                  dd       | j                  dd       | j                  dt        d          | j                  dt        d          dd	lmc m} t        |d
g       a	t        |dg       a
t        |dg       ay	|dk(  rt         j                  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                   j#                  | |       y	|}|dk(  rd}| j                  d|       | j                  dd       | j                  dt$        j&                  j)                  dd             | j                  dt$        j&                  j)                  dd             y	)zDCalculate additional variables for use in the build (called by gyp).r   OSrf  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   )rk  paramsr1   xcode_generatorextsmsvs_generatoroperating_systems          r%   ri  ri  ~  s    ::'&u_  u-  !4h?  !1!<]!KM  !<]!KM
 2129/5r3;/)0,b*2& )0+R)1%<<''D  u--043E-E)*-/)*-048H3I-I)*-/)*-048H3I-I)* 0/29.5r3;/)0,b*2& //0A6J   '78  !4e<  !1!#ou!EG  !#ou!EGr'   c                     t         j                  j                  | d   j                  xs d      }| j	                  di       j	                  dd      }t         j                  j                  t         j                  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    sl     ''//&"3"D"D"KL- zz+R044\5I* 
		"'',,}jA	BBr'   c                     | d   j                   }t        j                  j                  t        j                  j	                  |t        |       d            }||day)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    sU     I++(gg&&rww|| (*(6 7
 ,r'   c                 X    t         j                  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                 >    |j                  | d      }|r|dz   |z   S |S )Nr   r+  )r   )r  wrappersprogwrappers       r%   CommandWithWrapperr    s)    LLb!'S=4	+r'   c            
      $  
 t        t        j                  j                  dd            } | r| S t        j
                  dv rddl
 G 
fdd
j                        } |       }
j                  |      |_	        
j                  j                  j                  
j                  |             t        d|j                  dz        }t        dt        t        j                  j                  d	d
                  }t!        ||      S t        j
                  j#                  d      rt        j$                  j'                  d      rwt)        d      5 }t+        j,                  d      }|D ]G  }|j/                  |      }|st        dt        |j1                  d            dz        c cddd       S  	 ddd       yyt        j
                  dk(  r0	 t        t3        j4                  g d            }	t        d|	d
z        S y# 1 sw Y   yxY w#  Y yxY w)z6Returns a best-guess for a number of concurrent links.GYP_LINK_CONCURRENCYr   )win32cygwinNc            
          e Zd ZdW  j                  fdW  j                  fdW  j                  fdW  j                  fdW  j                  fdW  j                  fdW  j                  fdW  j                  fd	W  j                  fg	Zy
)1GetDefaultConcurrentLinks.<locals>.MEMORYSTATUSEXdwLengthdwMemoryLoadullTotalPhysullAvailPhysullTotalPageFileullAvailPageFileullTotalVirtualullAvailVirtualsullAvailExtendedVirtualN)rc   rd   re   c_ulongc_ulonglong_fields_)ctypess   r%   MEMORYSTATUSEXr    s    	V^^$	(	++,	++,	V//0	V//0	F../	F../	#V%7%78
hr'   r  r   l        GYP_LINK_CONCURRENCY_MAXl        r  z/proc/meminfoz^MemTotal:\s*(\d*)\s*kBi   darwin)sysctlz-nz
hw.memsize)r=  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;<)\\(())  DMM$'DM
MM//T0BC At((];<I1c"**..)CUKLMHy(##
||w'	ww~~o&  @Gjj!;< 	@D##D)%QEKKN+>?
?@ @	@@ 
||x
//0NOPk KM233
 '@ s   AG?/G?.H ?HHc                     | rdS 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%   r  r    s     $++r'   c           	         fd}t              }t        t        j                  j	                  dd            dk7  }d|j                         z  }t        j                  d|d} ||dd	      }| j                  d
|z   ||dddd       | j                  d|z   ||dddd       t        j                  d|d} ||dd      }| j                  d|z   d|j                         z  |ddd       y)z7Adds link rules for Windows platform to |master_ninja|.c                 F    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  sC     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)r@  r  r|  r}  r{  rC  r   z& $ld /nologo /OUT:$binary @$binary.rspr  r  zLINK%s $binaryz$in_newline $libs $ldflags)r@  r  r|  r}  rC  N)	r  r=  r<   r  r   upperr  r  rY  )master_ninjar  r  rule_name_suffixuse_separate_mspdbsrvdlldescdllcmdexe_cmds    `      r%   _AddWinLinkRulesr    s%   ) /~>	"**..4c
:;q@ !$4$:$:$<<' "nn.CE& 69e4&H// ')$@$  & O&66 ')$@$  & ~~46' GY6'F-- 03C3I3I3K K#)$@$  &r'   c                 !   |d   }t         j                  j                  |      }|j                  di       }t        j
                  j                  t        j
                  j                  t        |      |            }t        j
                  j                  |j                  |      }	t        t        j
                  j                  |	d            }
t        j                  |
d      }t         j                  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                  j                  | d         \  }}}||   j                  dg       }t         j                  j                  ||j                        } i }!|D ]  \  }"}#|"dk(  r t        j
                  j                  | |#      }|"dk(  r t        j
                  j                  | |#      }|"dk(  r3t        j
                  j                  | |#      }|j!                  d      r|}|"dk(  r t        j
                  j                  | |#      }|"dk(  r"t        j
                  j                  | |#      }|#}|"dk(  r"t        j
                  j                  | |#      }|#}|"dk(  r t        j
                  j                  | |#      }|"dk(  r t        j
                  j                  | |#      }|"dk(  r t        j
                  j                  | |#      }|"d k(  r t        j
                  j                  | |#      }|"d!k(  r t        j
                  j                  | |#      }|"d"k(  r t        j
                  j                  | |#      }|"j!                  d#      st        j
                  j                  | |#      |!|"d t#        d#        <    t        j$                  j'                         D ]n  \  }"}#|"j)                         j!                  d#      s&|"d t#        d#        }$t+        j,                  d$d%|$      }$t        j
                  j                  | |#      |!|$<   p |j                  d&d       }%|%rd'|%z  |!d(<   |dk(  r| D &cg c]  }&||&   d)   |    }'}&d }(|j                  d*d      s t         j.                  j1                  |'|      }(t         j.                  j3                  |	||(t              })t5        |)j'                               D ]C  \  }*}+|r|}+t7        d|!t9        |+d            },|r|,|*d+k(  rd,nd-z  },|j;                  d.|*z   |,       E t=        d/dg|      }|j;                  dt7        d|!|             t=        d0dg|      }|j;                  d1t7        d|!|             |dk(  r|j;                  d2|       |j;                  d3d4       |j;                  d|       |j;                  d5d6       |j;                  d7d8       |j;                  d9d:       |j;                  d;d<       n|j;                  d2t7        d(|!|             |j;                  d=t7        d(|!             |j;                  dt=        d>dg|             |d?k7  r<|j;                  dt=        d@dg|             |j;                  dt=        dAd!g|             t>        r5|s|}|s|}|j;                  dBt=        dCg|             |j;                  dDt=        dEg|             |j;                  dFt=        dGg|             t=        dHg|      }t=        dIg|      }dJ|v r|r|jA                  dJ|      }dK|v r|r|jA                  dK|      }|j;                  dLt7        d|!|             |j;                  dMt7        d|!|             |dk(  r|j;                  dN|       n:|j;                  dNt7        d(|!|             |j;                  dOt7        d(|!             |jC                          |jE                  dPtG               Q       |jC                          |dk(  rdRndS}-|dk7  rA|jI                  ddTdUdV|-W       |jI                  dXdTdYZ       |jI                  d1d[d\dV|-W       nd]}.d^}/|jI                  ddT|.d_d`|-a       |jI                  d1d[|/d_db|-a       |jI                  d3dcddtJ        jL                  z  Z       |jI                  d5dedftJ        jL                  z  Z       |jI                  dgdhditJ        jL                  z  Z       |d?k7  r|dk7  r|jI                  djdkdlZ       |jI                  dmdkdnZ       dodpdqdrz  }0|jI                  dsdtdu|0dvdwiz  dxdydPz       |jI                  d{d|du|0dvdwiz  dxd}dPz       |jI                  d~dddP       n|dk(  rC|jI                  djddtJ        jL                  z  d_d       tO        |du       tO        |d       n|jI                  ddddV|-W       |jI                  ddddV|-W       |jI                  djddZ       |jI                  dddZ       |jI                  dddddiz  Z       d}1d|1ddrz  }0d}2|jI                  dsddu|0|2ddz  dxddPz       |jI                  dddu|1|2ddz  dxddPz       |jI                  d{ddu|0|2ddz  dxddPz       |jI                  dddu|1|2ddz  dxddPz       |jI                  d~dddP       |jI                  dddZ       |jI                  dddZ       |jI                  dddZ       |jI                  dddZ       |jI                  dddZ       |jI                  dddZ       |jI                  dddZ       |jI                  dddZ       |dk(  r&|jI                  dddtJ        jL                  z  Z       n|jI                  dddZ       |dk(  r&|jI                  dddtJ        jL                  z  Z       n.|dk(  r|jI                  dddŬZ       n|jI                  dddƬZ       |jC                          tQ               }3|d   D ]V  }t         j                  jS                  | |t        j
                  j                  |            D ]  }4|3jU                  |4        X tQ               }5i }6i }7tQ               }8tQ               }9| D ]  }&t         j                  j                  |&      \  }}:};||   j                  dg       }<||<k(  sJ d|<d|       ||&   }=|d?k(  r#t         jV                  jY                  ||   |=       t         j                  j[                  ||j                  d      }t         j                  j]                  ||:|;      }>|>j_                  dʫ      }>ta        jb                  |>      je                         }?t        j
                  jg                  |      }@d}A|;dk7  rAd|;z   z  }At        j
                  j                  A@|:dz         }Bti               }Ctk        |?|6|@||C|	|B||j                  ϫ	      }D|Djm                  |=||      }4|Cjo                         dkD  rrt        t        j
                  j                  |	B            5 }E|Ejq                  Cjs                                d d d        Cju                          |jw                  B       |4rw|:|4jy                         k7  r)|=d   dk(  r!|7j{                  |:g       j}                  |4       |4|6|&<   |&|3v r|5jU                  |4jy                                |9jU                  |:       |8jU                  |:        |7rc|jC                          |j                  dѫ       t5        |7      D ]4  }F|j                  |Fd|7|F   D Gcg c]  }G|Gjy                          c}G       6 |8|9z
  }8|8rC|jC                          |j                  dӫ       t5        |8      D ]  }:|j                  |:dҫ        |5rM|jC                          |j                  ddt5        |5             |j                  |j                  ddԫ             |
ju                          y c c}&w # 1 sw Y   xY wc c}Gw )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' &&LINKr   "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)r@  r  r5  depsr  zE$cc $defines $includes $cflags $cflags_c $cflags_pch_c -c $in -o $out)r@  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)r@  r  r|  r}  r   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 $inr8  zAR $outz'rm -f $out && $ar rcs $arflags $out $inr5  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)r@  r{  r  r|  r}  rC  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)r@  r  rC  zLIB $outzU%s gyp-win-tool link-wrapper $arch False $ar /nologo /ignore:4221 /OUT:$out @$out.rspz$in_newline $libflags)r@  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.TOCr!  z]{ otool -l $lib | grep LC_ID_DYLIB -A 5; nm -gP $lib | cut -f1-2 -d' ' | grep -v U$$; true; }z($ld %(type)s $ldflags -o $lib %(suffix)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)r"  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 $inrs  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 $binaryr@  z"PACKAGE FRAMEWORK $out, POSTBUILDSzG./gyp-mac-tool package-framework $out $version$postbuilds && touch $outr>  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 $outrh  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.phonyz(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GenerateEnvironmentFilesrQ  r  r2   r   r   $generator_supports_multiple_toolsetsr0   r   rC  r  rY  r  r  r  rO  
AllTargetsrP  r   MergeGlobalXcodeSettingsToSpecRelativePathQualifiedTargetencoderT  rU  rX  r   r   ri   r   tellwritegetvaluecloser   r^   r  r   commentr   default)Htarget_listtarget_dictsdatar  r   r  r1   r   rp   rs   master_ninja_filer  r  r   r   r  r  r  r  r  r   r   cc_host_global_settingcxx_host_global_settingclang_clr  r  r  r  
build_filer2  r   build_to_rootr  keyr  
key_prefixr   qualified_targetconfigsshared_system_includescl_pathsr@   r=   r  r   
cc_commandcxx_commandmtime_preserving_solink_basesolink_basesolink_suffixall_targetsr   r?  rn   target_short_namesempty_target_namesnon_empty_target_namesr   r   this_make_global_settingsr   qualified_target_for_hashrm   	base_pathr   r~   ninja_outputwriterr  
short_namer  sH                                                                           r%   GenerateOutputForConfigrY  H  sK   9'::'&JJ0"5/ ggggll#F+[9;) 77<< 4 4i@. nm!LM$$%6cB, **fno> u_	B 
B
C	BG	B	B
C	BDGI''( ("'',ZZ44[^D*aj)--.DbI**//	070D0DF-(( Ljc5
d{77<<u-b
i]E2g
d{77<<u-b	Z	 
e|GGLL.c
i]E2g$
jmU3h %
d{77<<u-b
i]E2g
d{77<<u-b
i]E2g
i]E2g
nWW\\-7l
||J)+mU)Khs$S_$%&=LB JJ$$& @jc5
yy{J'(Z()j66*gz:jWW\\-?hz	@ &))*=tD58IIHVu_'24# ,-.>?L 4G 4!CQG



<
<(  !!::)?MHX^^-. 	3
d	"4
T5
)+g	tu}G':EDL'2	3 ;-r2"0xDEL%0#6#1%3GHu_$#%,$#$)(H-(J/$)$ 268R HI&"4VXt"LM$ 2K3F KL 
"K#6;=
')99(EwOQ *gh)%7W%MN)%7W%MN.,n-=|LN )g6G!:,9H '4&..w;g8 7(003?h),Y'JL*,Z8LNIw/I'9
(G(% &K);
(I*' ( K'@'BCU?$u_
-   -  /
 .  <J>K 
<   =   *,/NN;  = 
L~~	    I~~    u_57  9 8  :	 L:<		< ! *h8J-KK
H   '*h8J-KKK   E   @  /  1 \$7\%81   2   3   )F  H +'IJJ	  L =K	 "GH	H !& 2M+*6?.A A)   +mYGG)   3*6?.A A)   3}iHH)   ).   -0  2
 &J  L (=  ? (>  @ %FD  E ,A  C 6  
 :  
 u_*S^^;  =
 '  ) u_!9CNNJ  L !/  1
 !N  P +=) j**''(4(*(8(8(DF  oof
 + . 
 u 5% 6# 	

''(89 Jg !%Z 0 4 45KR P#<< ;	"$8	:;< ()D	88j9I4P
 ((W5I5I).0J !$

 : ::t;B!D 9 @ @ I[[!:;EEGN
+I
C(	S7]c'',,sIth?K:LI%'g.B.BDF
 dKAFQbggll>;?@ 2J..012K(	##%	%$y/X*E%%dB/66v>)/n%&	[	(**,-  &T"m6#p  34/0 P
W/A*/M/O1q}} /O PP *,BBCD)* (w'( ugvk':;,,-=uEFG4v2 2,/Os   7AA4 AA9*ABA9AB	c                     |d   }|D ]X  }t         j                  j                  |j                  d|      }dd|g}t	        d|d|       t        j                  |       Z y )Nr  r  rr   z-Cz
Building [z]: )r<   r=   rw   r   r   r  
check_call)r=  r   r  r  r   builddir	argumentss          r%   PerformBuildr^  	  s^    9' %fww||G00%@H$)I	
34)$	%r'   c                     t        j                   t         j                  t         j                         | \  }}}}}t        |||||       y r    )signalSIGINTSIG_IGNrY  )arglistr;  r<  r=  r  r   s         r%   CallGenerateOutputForConfigrd  	  s:     	--v~~.;B8;dFK+|T6;Or'   c                    t         j                  j                  |      }|j                  di       j                  dd       }t         j                  j                  |      dk(  r7t        j                  | |      \  } }t        j                  | |t              \  } }|rt        | ||||       y || d      d   }|d   rU	 t        j                  t        |            }g }|D ]  }|j                  | ||||f        |j                  t         |       y |D ]  }t        | ||||        y # t"        $ r}	j%                          |	d }	~	ww xY w)Nr   r   r)   r   r   parallel)r-   r   &CloneConfigurationForDeviceAndEmulatorr   rz   r  r  ShardTargetsInsertLargePdbShimsr   rY  multiprocessingPoolr"   r   rv  rd  KeyboardInterrupt	terminate)
r;  r<  r=  r  user_configconfig_namesrC  arglistsr   es
             r%   GenerateOutputrr  	  s^   $$KK, 

,b155hE+ZZ&!U* ( 5 5k< PK ( < <\#>!@K KtV')  A/0@ALj	##C$56' 	FK
//L$DF	F 	,h7
 & -+\4 +	--	  s   >AD) )	E	2EE	)r   )7
__future__r   r   rh  rT  r  rj  os.pathr<   r+   r`  r  r  rV  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   ri  r  r  r   r  r  r  r  rY  r^  rd  rr  rg   r'   r%   <module>r     s@  
 &       	   
 
 
  !     * '  +0 .
 $ = D /1 +%' "$& ! '*zz'G'G'I $	;C/S<V S<\b& bJ-2Gh
C4n,.&bJ	Z%P-[L  s   C C+*C+