+
    UBi-                      ^ RI Ht ^ RIHtHt ^ RIHt ^ RIHtH	t	 ^ RI
Ht ^ RIHtHt ^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^R	IHt ^R
IHt ^RIHt ^RIHt ^RIHt ^RIHt ^RIH t  ^RI!H"t" ^RIH#t#H$t$ ^RI%H&t&H't' ^RIH(t(H)t)H*t*H+t+H,t,H-t-H.t.H/t/H0t0H1t1 ^RIH2t2H3t3H4t4 ^RI5H6t6 ^RIH7t7 ^RIH8t8H9t9 ]Pt                  '       dj   ^ RI;H<t< ^RI=H>t> ^RIH?t?H@t@ ^RIAHBtBHCtC ^RIDHEtE ^RIFHGtG ^RIHHItI ^RIHJtJ ^R IHKtK ]P                  ]P                  R!]N3,          ,          tO]<RE,          tPR"tQR#tRR$tSR%tTR& R' ltU]P                  ! 4       '       d   ]UtWR(R).tX. RFOtYM]0tW. tX. RGOtYR* R+ ltZ]P                  ! 4       t\0 RHmt]]P                  ! R,4      t_]P                  ! R-4      t`RIR. R/ llta] ! R0 R14      4       tb]	 ! R2 R3]4      4       tc ! R4 R!4      td] ! R5 R64      4       te ! R7 R84      tf ! R9 R:4      tg] ! R; R<4      4       th] ! R= R>4      4       ti] ! R? R@4      4       tj ! RA RB]P                  4      tlRC RD ltmR# )J    )annotations)defaultdictOrderedDict)	dataclass)Enumunique)	lru_cache)PurePathPath)dedentN)backends)modules)mesonlib)build)mlog)	compilers)
tooldetect)CompilerArgs)Compiler
is_library)ArLikeLinkerRSPFileSyntax)
FileLibTypeMachineChoiceMesonBugExceptionMesonException
OrderedSet
PerMachineProgressBar	quote_argunique_list)get_compiler_for_sourcehas_path_sepis_parent_path)	OptionKey)
CleanTrees)GeneratedListInvalidArguments)Literal)ImmutableListProtocol)ExtractedObjectsLibTypes)DynamicLinkerStaticLinker)
CsCompiler)FortranCompiler)RustCompiler)FileOrString)TargetIntrospectionDataNinjaCommandArgz$^\s*#?include\s*['\"](\w+\.\w+)['\"]z#^\s*\bmodule\b\s+(\w+)\s*(?:!+.*)*$z*^\s*\bsubmodule\b\s*\((\w+:?\w+)\)\s*(\w+)z0^\s*use,?\s*(?:non_intrinsic)?\s*(?:::)?\s*(\w+)c                    V ^8  d   QhRRRR/# )   argstrreturn )formats   "D/usr/lib/python3.14/site-packages/mesonbuild/backend/ninjabackend.py__annotate__r>   =   s      3 3     c                v    \         P                  ! R R V 4      p \         P                  ! RR V 4      p RV  R2p V # )z(\\*)"c                n    R \        V P                  ^4      4      ^,          ^,           ,          R,           # )\"lengroupms   &r=   <lambda>cmd_quote.<locals>.<lambda>B   s$    dc!''!*o.AA.E&F&Lr?   z(\\*)$c                R    R \        V P                  ^4      4      ^,          ,          # )rB   rD   rG   s   &r=   rI   rJ   D   s    dc!''!*o.A&Br?   rC   )resub)r8   s   &r=   	cmd_quoterN   =   s<    
 &&Lc
RC
&&BC
HCcU!*CJr?   cmd/cc                    V ^8  d   QhRRRR/# )r7   sr9   r:   r;   )r<   s   "r=   r>   r>   U   s      S S r?   c                <    V P                  R R4      p \        V 4      # )rB   \\)replace
quote_funcrR   s   &r=   gcc_rsp_quoterX   U   s     	
		$Aa=r?   z[$ :\n]z[$ \n]c               $    V ^8  d   QhRRRRRR/# )r7   textr9   is_build_lineboolr:   r;   )r<   s   "r=   r>   r>   k   s!      c $ 3 r?   c                    R V 9   d   RV  R2p\        V4      hV'       d   \        M\        pRV 9   g   RV 9   g   V'       d   RV 9   d   VP                  RV 4      # V # )
z<Ninja does not support newlines in rules. The content was:

zE

Please report this error with a test case to the Meson bug tracker. $:z$\g<0>)r   NINJA_QUOTE_BUILD_PATNINJA_QUOTE_VAR_PATrM   )rZ   r[   errmsgquote_res   &&  r=   ninja_quoterf   k   sd    t| DG
 V$$(5$;NH
d{cTkmt||It,,Kr?   c                  :    ] tR t^{t$ RtR]R&   R]R&   R]R&   RtR	# )
TargetDependencyScannerInfoa>  Information passed to the depscanner about a target.

:param private_dir: The private scratch directory for the target.
:param source2object: A mapping of source file names to the objects that
    will be created from them.
:param sources: a list of sources mapping them to the language rules to use
    to scan them.
r9   private_dirT.Dict[str, str]source2objectz/T.List[T.Tuple[str, Literal['cpp', 'fortran']]]sourcesr;   N)__name__
__module____qualname____firstlineno____doc____annotations____static_attributes__r;   r?   r=   rh   rh   {   s     ##<<r?   rh   c                  &    ] tR t^t^ t^t^t^tRtR# )Quotingr;   N)	rm   rn   ro   rp   bothnotShellnotNinjanoners   r;   r?   r=   ru   ru      s    DHHDr?   ru   c                  ^    ] tR t^t]P
                  3R R lltR R lt]R R l4       t	Rt
R# )	r5   c               $    V ^8  d   QhRRRRRR/# )r7   rR   r9   quotingru   r:   Noner;   )r<   s   "r=   r>   NinjaCommandArg.__annotate__   s!      #  4 r?   c                	    Wn         W n        R # N)rR   r|   )selfrR   r|   s   &&&r=   __init__NinjaCommandArg.__init__   s    r?   c                   V ^8  d   QhRR/# r7   r:   r9   r;   )r<   s   "r=   r>   r~      s       r?   c                	    V P                   # r   rW   r   s   &r=   __str__NinjaCommandArg.__str__   s    vvr?   c               $    V ^8  d   QhRRRRRR/# )r7   lT.List[str]qru   r:   zT.List[NinjaCommandArg]r;   )r<   s   "r=   r>   r~      s"     2 2 2 2,C 2r?   c                	B    V  Uu. uF  p\        W!4      NK  	  up# u upi r   )r5   )r   r   is   && r=   listNinjaCommandArg.list   s    /01q!%q111s   )r|   rR   N)rm   rn   ro   rp   ru   rv   r   r   staticmethodr   rs   r;   r?   r=   r5   r5      s'    29,,  2 2r?   c                  .    ] tR t^t$ R]R&   R R ltRtR# )NinjaCommentr9   commentc                    V ^8  d   QhRRRR/# r7   outfileT.TextIOr:   r}   r;   )r<   s   "r=   r>   NinjaComment.__annotate__   s      X $ r?   c                	    V P                   P                  R 4       F6  pVP                  R4       VP                  V4       VP                  R 4       K8  	  VP                  R 4       R# )r^   z# N)r   splitwrite)r   r   r   s   && r=   r   NinjaComment.write   sM    ##D)AMM$MM!MM$ * 	dr?   r;   N)rm   rn   ro   rp   rr   r   rs   r;   r?   r=   r   r      s    L r?   r   c                  x    ] tR t^tRRRR]P
                  3R R llt]]3R R ll4       t	R R lt
R	 R
 ltRtR# )	NinjaRuleFNc               <    V ^8  d   QhRRRRRRRRRRR	R
RR
RR
RR/	# )r7   ruler9   commandCommandArgOrStrargsdescriptionrspabler\   depsT.Optional[str]depfileextrarspfile_quote_styler   r;   )r<   s   "r=   r>   NinjaRule.__annotate__   sS     -( -(S -(? -(/ -(!-(,0-(@O-()-(9H-( '4-(r?   c
                	   R  R lp
Wn         V Uu. uF
  q! V4      NK  	  upV n        V Uu. uF
  q! V4      NK  	  upV n        W@n        W`n        Wpn        Wn        WPn        ^ V n        ^ V n	        Wn
        RP                  V P                  V P                  ,            Uu. uF  qP                  V4      NK  	  up4      V n        \        P                  ! RV P                  4       Uu. uF  pVP!                  ^4      R8w  g   K  VNK  	  upV n        V P
                  R8X  d   V ;P
                  R,          un        R# R# u upi u upi u upi u upi )c                    V ^8  d   QhRRRR/# )r7   czT.Union[NinjaCommandArg, str]r:   r5   r;   )r<   s   "r=   r>   (NinjaRule.__init__.<locals>.__annotate__   s     	& 	&< 	& 	&r?   c                   \        V \        4      '       d   V # V R 8X  d   \        V \        P                  4      # V P	                  R4      '       ds   \
        P                  ! RV 4      pVf   Q R4       hVP                  ^4      pV\        9  d   \        V \        P                  4      # \        V \        P                  4      # \        V 4      # )&&r`   z\$\{?(\w*)\}?for mypy)
isinstancer5   ru   rw   
startswithrL   matchrF   	raw_namesry   rx   )r   varpvars   &  r=   strToCommandArg+NinjaRule.__init__.<locals>.strToCommandArg   s    !_-- Dy&q'*:*:;;||C  xx 0!4'33'::a=i' +1gll;; +1g.>.>??"1%%r?   r_   z(\${\w+}|\$\w+)?[^$]*$DEPFILE	_UNQUOTEDN)namer   r   r   r   r   r   r   refcountrsprefcountr   join_quotercommand_strrL   finditerstartvar_refs)r   r   r   r   r   r   r   r   r   r   r   r   axrH   s   &&&&&&&&&&     r=   r   NinjaRule.__init__   s    
	&0 	MT0UW1CW0UJN-O$Qoa.@$-O	&	
#6 88dllTYY>V$W>V\\!_>V$WX$&KK0H$JZJZ$[ .$[qGGAJ", $[ . <<:%LLK'L & 1V-O %X.s   EE!E)EEc               $    V ^8  d   QhRRRRRR/# )r7   r   r5   qfzT.Callable[[str], str]r:   r9   r;   )r<   s   "r=   r>   r      s#     ' '? '(> 'PS 'r?   c                	V   V P                   \        P                  8X  d   V P                  # V P                   \        P                  8X  d   V! V P                  4      # V P                   \        P
                  8X  d   \        V P                  4      # \        V! \        V 4      4      4      # r   )r|   ru   ry   rR   rx   rw   rf   r9   )r   r   s   &&r=   r   NinjaRule._quoter   sn    99$33JYY'***acc7NYY'***qss##2c!f:&&r?   c                    V ^8  d   QhRRRR/# r   r;   )r<   s   "r=   r>   r      s     $  $ X $ $ $ r?   c                	V  a  S P                   pS P                  \        P                  \        P                  09   d?   \
        pV Uu. uF+  qDP                  R 8X  d   \        RVP                  4      MTNK-  	  ppM\        pR V 3R llpV! 4        EF  pVP                  RS P                   V R24       VR8X  Ed0   S P                  \        P                  J dZ   TP                  RP                  RP                  S P                   Uu. uF  pS P                  V4      NK  	  up4      4      4       MXTP                  R	P                  RP                  S P                   Uu. uF  pS P                  V4      NK  	  up4      4      4       VP                  R
4       TP                  RP                  RP                  V Uu. uF  pS P                  Ws4      NK  	  up4      4      4       M*VP                  RP                  S P                   4      4       S P"                  '       d    VP                  RS P"                   R24       S P$                  '       d    VP                  RS P$                   R24       VP                  RS P&                   R24       S P(                  '       dV   S P(                  P+                  R4       F6  pVP                  R4       VP                  V4       VP                  R4       K8  	  VP                  R4       EK  	  R# u upi u upi u upi u upi )$inz$in_newlinec                   V ^8  d   QhRR/# )r7   r:   zT.Iterable[str]r;   )r<   s   "r=   r>   %NinjaRule.write.<locals>.__annotate__   s     	 	? 	r?   c               3  l   <"   S P                   '       d   R x  S P                  '       d   Rx  R# R# 5i) _RSPN)r   r   r   s   r=   	rule_iter"NinjaRule.write.<locals>.rule_iter   s*     }}}  s   (44zrule r^   r   z% command = {} --option-file=$out.rsp
r_   z command = {} @$out.rsp
z rspfile = $out.rsp
z rspfile_content = {}
z command = {}
z deps = z depfile = z description = N)r   r   r   MSVCTASKINGrN   rR   r5   r|   rX   r   r   r<   r   r   r   r   r   r   r   r   r   )	r   r   rspfile_argsrspfile_quote_funcr8   r   rspr   r   s	   f&       r=   r   NinjaRule.write   s   yy##(:(:M<Q<Q'RR!*nz{nzgj55TY>OM3;;G_bbnzL{L!.	 	 ;CMME$))SE45f}++}/D/DDMM"J"Q"QRURZRZuy  vB  vB  \C  vBpq\`\h\hij\k  vB  \C  SD  #E  FMM"="D"DSXXhlhthtNuhtcdt||\]htNuEv"wx567>>sxx  wC  ID  wCqrVWIl  wC  ID  @E  F  G/66t7G7GHIyyy267|||DLL><=MMOD,<,<+=R@Azzz))$/AMM#&MM!$MM$' 0 MM$+  | \CNu IDs   1LL$L!L&c               (    V ^8  d   QhRRRRRRRR/# )r7   infilesr9   outfileselemsz!T.List[T.Tuple[str, T.List[str]]]r:   intr;   )r<   s   "r=   r>   r   
  s*      s c @EHr?   c                	   \        V4      pV P                  e   V P                  .VR&   V P                  e   V P                  .VR&   V.VR&   V.VR&   \        V P                  4      pV P
                   F  pWVP                  ^4      VP                  ^4      ,
          ,          pVP                  ^4      pV^,          R8X  d   V^R pM	VR,          pVP                  V. 4      pV\        RP                  V4      4      ,          pK  	  V# )	Nr   r   inout{   NNr_   r   )dictr   r   rE   r   r   endr   rF   getr   )r   r   r   r   
ninja_varsestimaterH   chunks   &&&&    r=   length_estimateNinjaRule.length_estimate
  s    
 %[
99 "&))Jv<<#%)\\NJy!#9
4%J
5 t''(Aa1771:--HGGAJEQx3ab	NN5"-ECHHUO,,H  r?   )r   r   r   r   r   r   r   r   r   r   r   r   r   )rm   rn   ro   rp   r   GCCr   r   rV   r   r   r   rs   r;   r?   r=   r   r      sC    38RV,046C6G6G-(^ AK ' '$ L r?   r   c                      ] tR tRt$ R]R&   RR R lltR R ltR	 R
 ltR R lt]	P                  R R l4       tR R ltR R ltR R ltRtR# )NinjaBuildElementi&  r   r   Nc                   V ^8  d   QhRR/# )r7   all_outputsz
T.Set[str]r;   )r<   s   "r=   r>   NinjaBuildElement.__annotate__*  s        J  r?   c                	\   T;'       g    . V n         \        V\        4      '       d
   V.V n        MW n        \        V\        4      '       g   Q hW0n        \        V\        4      '       d
   V.V n        MW@n        \        4       V n        \        4       V n        . V n	        Wn
        R V n        R# )r   N)implicit_outfilenamesr   r9   outfilenamesrulenameinfilenamessetr   	orderdepsr   r   output_errors)r   r   r   r   r   implicit_outss   &&&&&&r=   r   NinjaBuildElement.__init__*  s    %2%8%8b"lC((!-D ,(C(((( k3'' +}D*E	
&r?   c                    V ^8  d   QhRRRR/# )r7   depzT.Union[str, T.List[str]]r:   r}   r;   )r<   s   "r=   r>   r   <  s      4  r?   c                	    \        V\        4      '       d   V P                  P                  V4       R # V P                  P	                  V4       R # r   )r   r   r   updateaddr   r  s   &&r=   add_depNinjaBuildElement.add_dep<  s1    c4  IIS!IIMM#r?   c                   V ^8  d   QhRR/# r7   r:   r}   r;   )r<   s   "r=   r>   r   B  s     $ $4 $r?   c                	    \        V\        4      '       d   V P                  P                  V4       R # V P                  P	                  V4       R # r   )r   r   r   r  r  r  s   &&r=   add_orderdepNinjaBuildElement.add_orderdepB  s3    c4  NN!!#&NNs#r?   c               $    V ^8  d   QhRRRRRR/# )r7   r   r9   r   z'T.Union[str, T.List[str], CompilerArgs]r:   r}   r;   )r<   s   "r=   r>   r   H  s#     
; 
;S 
;)P 
;UY 
;r?   c                	   \        V\        4      '       d   VP                  4       p\        V\        4      '       d   V.pV P                  P                  W34       VR 8X  d'   V P                  P                  VR,           V34       R# R# )DEPFILEr   N)r   r   	to_nativer9   r   append)r   r   r   s   &&&r=   add_itemNinjaBuildElement.add_itemH  sn     e\**OO%EeS!!GE

4-(9JJtk159: r?   c                   V ^8  d   QhRR/# r7   r:   r\   r;   )r<   s   "r=   r>   r   U  s     F FT Fr?   c           	     	   V P                   R 8X  d   R# V P                  P                  '       g   R# RP                  V P                   Uu. uF  p\        VR4      NK  	  up4      pRP                  V P                   Uu. uF  p\        VR4      NK  	  up4      pV P                  P                  VVV P                  4      \        8  # u upi u upi )phonyFr_   T)
r   r   r   r   r   rf   r   r   r   rsp_threshold)r   r   r   r   s   &   r=   _should_use_rspfile%NinjaBuildElement._should_use_rspfileT  s     ==G#yy   hhd>N>NO>NAt 4>NOPxxt?P?P Q?P!Q!5?P QRyy(()5)-58EF 	F  P Qs   C
 Cc                   V ^8  d   QhRR/# r  r;   )r<   s   "r=   r>   r   d  s     ( (t (r?   c                	    V P                   R 8w  d]   V P                  '       d&   V P                  ;P                  ^,          un        R# V P                  ;P                  ^,          un        R# R# )r  N)r   r  r   r   r   r   s   &r=   count_rule_references'NinjaBuildElement.count_rule_referencesd  sI    ==G#'''		%%*%		""a'"	 $r?   c                    V ^8  d   QhRRRR/# r   r;   )r<   s   "r=   r>   r   k  s     9 9X 9$ 9r?   c                	   V P                   '       d   \        V P                   4      hR P                  V P                   Uu. uF  p\	        VR4      NK  	  up4      pR P                  V P
                   Uu. uF  p\	        VR4      NK  	  up4      pR P                  V P                   Uu. uF  p\	        VR4      NK  	  up4      pV'       d
   RV,           pV P                  pV'       d9   V P                  R,           p\        P                  ! RV P
                   R24       MV P                  pRV V RV R V 2p\        V P                  4      ^ 8  dM   TRR P                  \        V P                  4       U	u. uF  p	\	        V	R4      NK  	  up	4      ,           ,          p\        V P                  4      ^ 8  dg   V P                   U	u. uF  p	\        V	4      NK  	  p
p	TRR P                  \        V
4       U	u. uF  p	\	        V	R4      NK  	  up	4      ,           ,          pVR	,          pVP!                  R
R4      p\"        P$                  ! 4       '       d(   R P                  R VP'                  R 4       4       4      pVP)                  V4       V'       dH   V P*                  P,                  \.        P0                  \.        P2                  09   d   \4        pM\6        pM\8        pV P:                   F  pVw  rV\<        9  pR V R2p. pV FN  pV'       d   VR8X  d   VP?                  \	        V4      4       K.  VP?                  \	        V! V4      4      4       KP  	  VR P                  V4      ,          pVR	,          pVP)                  V4       K  	  VP)                  R	4       R# u upi u upi u upi u up	i u up	i u up	i )r_   Tz | r   zCommand line for building z is long, using a response filezbuild z: z || r^   rB   /c              3  z   "   T F1  pVP                  R 4      '       d   VP                  R R^4      MTx  K3  	  R# 5i)z//rT   N)r   rU   ).0r   s   & r=   	<genexpr>*NinjaBuildElement.write.<locals>.<genexpr>  s7      (A 01||D/A/A4+qH(s   ;;z = r   N) r   r   r   r   rf   r   r   r  r   r   debugrE   r   sortedr   r9   rU   r   
is_windowsr   r   r   r   r   r   r   rN   rX   rV   r   r   r  )r   r   r   insoutsr  use_rspfiler   liner   r   r   er   r   should_quotenewelemss   &&               r=   r   NinjaBuildElement.writek  s    !3!344hhd6F6FG6FAt,6FGHxxt7H7HI7H!Q-7HIJ@Z@Z![@Z1+a"6@Z![\!M1M..}}v-HJJ3D4E4E3FFefg}}Hvm_Bxj#?tyy>AECHHF499DU%VDUqk!T&:DU%VWWWDt~~")-8AQI8FSXXVIEV&WEV{1d';EV&WXXXD ||D#&   88 C D 	dyy,,1C1C]EZEZ0[["BAMTy0LtfC=DH#qDyOOKN3OOK1$67	 
 CHHX&&DDLDMM$  	dm HI![ &W8&Ws$   N'6N,+N1;N6N;;O c                   V ^8  d   QhRR/# r  r;   )r<   s   "r=   r>   r     s     $ $t $r?   c                	    V P                    F9  pWP                  9   d   R V R2V n        V P                  P                  V4       K;  	  R# )z%Multiple producers for Ninja target "z". Please rename your targets.N)r   r   r   r  )r   ns   & r=   check_outputsNinjaBuildElement.check_outputs  sD    ""A$$$'LQCOm%n"  # #r?   )	r   r   r   r   r   r   r   r   r   r   )rm   rn   ro   rp   rr   r   r	  r  r  r   lazy_propertyr  r   r   r7  rs   r;   r?   r=   r   r   &  sL    
O $$
; F F(9v$ $r?   r   c                  8    ] tR tRt$ R]R&   R]R&   R R ltRtR	# )
RustDepi  r9   r   r   cratec                   V ^8  d   QhRR/# r7   r:   zT.Dict[str, object]r;   )r<   s   "r=   r>   RustDep.__annotate__  s     
 
, 
r?   c                	6    R V P                   RV P                  /# r<  r   rA  r   s   &r=   to_jsonRustDep.to_json  s    TZZDII
 	
r?   r;   N)rm   rn   ro   rp   rr   rB  rs   r;   r?   r=   r;  r;    s     I J
 
r?   r;  c                      ] tR tRt$ R]R&   R]R&   R]R&   R]R&   R]R&   R	]R
&   R]R&   R]R&   R]R&   R]R&   RtR]R&   R R ltRtR# )	RustCratei  r   orderr9   display_nameroot_module
crate_typetarget_nameRUST_EDITIONSeditionT.List[RustDep]r   r   cfgr\   is_proc_macrois_workspace_memberNr   proc_macro_dylib_pathc                   V ^8  d   QhRR/# r>  r;   )r<   s   "r=   r>   RustCrate.__annotate__  s      , r?   c                	J   R V P                   RV P                  RV P                  RV P                  RV P                  RV P
                   Uu. uF  qP                  4       NK  	  up/pV P                  '       d%   V P                  f   Q R4       hV P                  VR&   V# u upi )rG  rH  rL  rN  rO  r   zThis shouldn't happenrQ  )rG  rH  rL  rN  rO  r   rB  rQ  )r   drets   &  r=   rB  RustCrate.to_json  s    D--4++t||488T//$))4)QYY[)4$
 --9R;RR9+/+E+EC'(
 5s   B r;   )rm   rn   ro   rp   rr   rQ  rB  rs   r;   r?   r=   rE  rE    sU    
 JO
	 -1?1 r?   rE  c                  6    ] tR tRt$ R]R&   R]R&   R]R&   RtR	# )
ImportStdInfoi  r   
gen_targetr9   gen_module_filer   gen_objectsr;   N)rm   rn   ro   rp   rr   rs   r;   r?   r=   rY  rY    s    !!r?   rY  c                  t  a  ] tR tRtR V 3R lltR R ltR R ltERR	 R
 lltR R ltR R lt	R R lt
R R ltR R ltR R ltERR R lltR R ltR R ltR R ltR R  ltR! R" ltR# R$ ltR% R& ltR' R( ltR) R* ltR+ R, ltR- R. ltR/ R0 ltR1 R2 ltR3 R4 ltR5 R6 ltR7 R8 ltR9 R: ltR; R< lt R= R> lt!R? R@ lt"RA RB lt#RC RD lt$RE RF lt%RG RH lt&RI RJ lt'RK RL lt(RM RN lt)RO RP lt*RQ RR lt+RS RT lt,RU RV lt-RW RX lt.RY RZ lt/R[ R\ lt0R] R^ lt1]2! 4       3R_ R` llt3Ra Rb lt4]5Rc Rd l4       t6]5Re Rf l4       t7Rg Rh lt8ERRi Rj llt9Rk Rl lt:Rm Rn lt;]5Ro Rp l4       t<]=ERRq Rr ll4       t>]=Rs Rt l4       t?]=Ru Rv l4       t@Rw Rx ltARy Rz ltBR{ R| ltCR} tDR~ R ltER R ltFR R ltGR R ltHR R ltIR R ltJR R ltKR R ltLR R ltMR R ltNR R ltOR R ltPR R ltQR R ltRR R ltSR R ltTR R ltUR R ltVR R ltWR R ltXR R ltYERR R lltZR R lt[R R lt\R R lt]R R lt^R R lt_R R lt`R R ltaR R ltb]c! RR7      R R l4       tdR R lteR R ltf]c! RR7      R R l4       tgR R lthERR R lltiR R ltjR R ltkR R ltlR R ltmR R ltnR R ltoR R ltpR R ltqR R ltrR R ltsERR R llttR R ltuR R ltvR R ltwR R ltxR tyR R ltz]c! RR7      R R l4       t{R t|R R lt}R R lt~ERR R lltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR ER  ltER ER ltER ER ltERER ER lltER ER ltER	 ER
 ltER ER ltER ER ltER ER ltER V 3ER lltERtV ;t# (  NinjaBackendi  c                   V ^8  d   QhRR/# )r7   r   zT.Optional[build.Build]r;   )r<   s   "r=   r>   NinjaBackend.__annotate__  s     : :5 :r?   c                	d  < \         SV `  V4       R V n        RV n        / V n        \        4       V n        \        \
        4      V n        \        4       V n	        / V n
        \        RR4      V n        / V n        . V n        RV n        / V n        \        \"        ,          ! RR4      V n        RV n        R# )ninjabuild.ninjaFTN)superr   r   ninja_filenamefortran_depsr   r   r   all_pchall_structured_sourcesintrospection_datar   created_llvm_ir_rulerust_cratesimplicit_meson_outs_uses_dyndeps_generated_header_cacher\   allow_thin_archives
import_std)r   r   	__class__s   &&r=   r   NinjaBackend.__init__  s    	+<>'*u0;C0@25%#"$$.ue$<!3502 "JL$ $.d#3D$#? 59r?   c               (    V ^8  d   QhRRRRRRRR/# )r7   dummy_outfiler9   r   phony_infilenamer:   r   r;   )r<   s   "r=   r>   r`    s0     X X X XWZ X_p Xr?   c                    VP                  R4      '       d   \        RV: 24      hRV 2p\        V P                  VRV4      pV P	                  V4       \        V P                  WBV4      # )a  
We need to use aliases for targets that might be used as directory
names to workaround a Ninja bug that breaks `ninja -t clean`.
This is used for 'reserved' targets such as 'test', 'install',
'benchmark', etc, and also for RunTargets.
https://github.com/mesonbuild/meson/issues/1644
zmeson-internal__z*Invalid usage of create_phony_target with r  )r   AssertionErrorr   r   	add_build)r   rt  r   ru  to_nameelems   &&&&  r=   create_phony_target NinjaBackend.create_phony_target  sn     ##$677 #MmM^!_``$]O4 !1!1='7St !1!17FVWWr?   c                    V ^8  d   QhRRRR/# )r7   tempfilenamer9   r:   r   r;   )r<   s   "r=   r>   r`    s"     Ap Ap Ap Apr?   c                h  aa V P                   P                  P                  P                  P	                  4        Fi  pVP
                  R9   d   K  VP                  R8X  d,   \        P                  ! 4       '       d   \        SRRR7      u # VP                  4       R8X  g   Ki   M	  \        SRRR7      # R\        P                  VP
                  ,          ^ ,          ,           p\        P                  P                  V P                   P                  4       V4      p\        VRRR7      ;_uu_ 4       pVP!                  \#        R4      4       R	R	R	4       \$        P&                  ! VP)                  4       R
RV.,           V P                   P                  4       \$        P*                  \$        P*                  R7      pVP-                  4       w  rx\.        P0                  ! R4      oR VV3R llp	V	! V4      ;'       g	    V	! V4      p
V
'       d   V
# \3        RV RV 24      h  + '       g   i     L; i)zWVS writes its dependency in a locale dependent format.
Detect the search prefix to use.pgir   utf-8encodingmsvcz
incdetect.wzI                #include<stdio.h>
                int dummy;
            Nz/showIncludesrP   )cwdstdoutstderrs(   ^(.*\s)([a-zA-Z]:[\\/]|[\\\/]).*stdio.h$c                    V ^8  d   QhRRRR/# )r7   r   bytesr:   r   r;   )r<   s   "r=   r>   7NinjaBackend.detect_vs_dep_prefix.<locals>.__annotate__B  s     	 	u 	 	r?   c           	     R  < \         P                  ! R V 4       Fw  pSP                  V4      pV'       g   K  \        SR4      ;_uu_ 4       pVP	                  RVP                  ^4      ,           R,           4       RRR4       \        SRRR7      u # 	  R#   + '       g   i     L$; i)s   \r?\nabs   msvc_deps_prefix =    
Nr   r  r  )rL   r   r   openr   rF   )r   r/  r   binfilematchrer~  s   &   r=   detect_prefix8NinjaBackend.detect_vs_dep_prefix.<locals>.detect_prefixB  s|    C0d+5lD11W&<u{{1~&MPU&UV 2cGDD 1  21s   /BB&z=Could not determine vs dep dependency prefix string. output: r_   >   masmfortran)environmentcoredatar   hostvalueslanguageidr   r+  r  get_argument_syntaxlang_suffixesospathr   get_scratch_dirr   r   
subprocessPopenget_exelistPIPEcommunicaterL   compiler   )r   r~  compilerfilebasefilenamefpcr  r  r  resultr  s   &f         @r=   detect_vs_dep_prefix!NinjaBackend.detect_vs_dep_prefix  s    ((11;;@@GGIH   $77{{e#(;(;(=(=L#@@++-7 J cG<<)"9"9(:K:K"LQ"OO77<< 0 0 @ @ B (*(C'22aGGF    3 h224.h?@"&"2"2"B"B"D%/__Z__N >>+ **IJ	 	 v&??-*?M\]c\ddeflemnooY 32s   3H!!H1	Nc               $    V ^8  d   QhRRRRRR/# )r7   capturer\   
vslite_ctxzT.Optional[T.Dict]r:   r;   )r<   s   "r=   r>   r`  S  s(     k4 k4 k4:L k4Xj k4r?   c                	   V'       d   \        R 4      hV P                  '       dp   \         Fe  pRV P                  P                  P                  V,          9   g   K1  \
        P                  ! RP                  V4      4       RV P                  V&   Kg  	  \        P                  ! RR7      pV P                  P                  P                  P                  \        R4      4      '       d   \        V P                  P                  4       4      p VP!                  \        P"                  ! 4       4      p\&        P(                  ! \&        P*                  ! 4       4      p\
        P,                  ! 4        \
        P,                  ! R4       \
        P,                  ! V RV 24       Vf   \/        R
4      hVw  V n        V n        \&        P4                  ! V P2                  R4      V n        \8        P:                  P=                  V P                  P                  4       V P>                  4      pVR,           p\A        VRRR7      ;_uu_ 4       p	V	PC                  RV PD                  PG                  4        R24       V	PC                  R4       V	PC                  R4       V	PC                  R4       V P                  P                  P                  P                  R4      p
V
^ 8  d   V	PC                  RV
 R24       R	R	R	4       V PI                  V4      ;_uu_ 4       p	V PK                  4        . V n&        V PO                  4        V PQ                  \S        R4      4       V'       du   / pV PD                  PU                  4       PW                  4        FF  p\Y        V\D        PZ                  4      '       g   K%  V P]                  V4      WP_                  4       &   KH  	  \a        V PD                  PU                  4       PW                  4       RR7       F  pV Pc                  V4       K  	  \
        Pd                  ! R4       V PQ                  \S        R4      4       V Pg                  4        \
        Pd                  ! R4       V PQ                  \S        R4      4       V Pi                  4        \
        Pd                  ! R4       V Pk                  4        \
        Pd                  ! R 4       \        R!4      pWP                  P                  P                  9   d   V P                  P                  P                  P                  R!4      '       d   \        Pl                  ! V P                  P                  4      w  pppppp\
        P                  ! R"V R#V R$V R%V R&2	4       V'       g   V'       dM   V'       dE   V PQ                  \S        R'4      4       V Po                  VVV4       \
        Pd                  ! R(4       M\
        Pp                  ! R)4       V PQ                  \S        R*4      4       V Ps                  4        \
        Pd                  ! R+4       V Pu                  4        V Pw                  V	4       V Py                  V	4       R,pV	PC                  V4       R	R	R	4       \8        Pz                  ! W4       \
        P|                  ! V4       \&        P4                  ! V P2                  R-4      '       g:   \&        P4                  ! V P2                  R4      '       d   V P~                  '       g   \8        P:                  P                  \8        P:                  P=                  V P                  P                  R.4      4      '       d   \        P                  ! V P0                  R/R0.,           V P                  P                  R17       \        P                  ! V P0                  R/R2.,           V P                  P                  R17       V P                  4        V P                  4        V'       d   X# R	#   \$         d     ELi ; i  + '       g   i     ELE; i  + '       g   i     EL; i)3zCWe do not expect the ninja backend to be given a valid 'vslite_ctx'cudazmcuda enabled globally, disabling thin archives for {}, since nvcc/nvlink cannot handle thin archives nativelyFT)logvsenvzYVisual Studio environment is needed to run Ninja. It is recommended to use Meson wrapper:z compile -C Nz&Could not detect Ninja v1.8.2 or newerz>=1.10.0~r  r  r  z&# This is the build file for project "z"
z1# It is autogenerated by the Meson build system.
z# Do not edit by hand.

z ninja_required_version = 1.8.2

backend_max_linkszpool link_pool
  depth = z

zBuild rules for targetszGenerating targetsdesczTargets generatedz
Test ruleszTests generatedzInstall ruleszInstall generatedzDist generated
b_coveragezUsing z (z),  and z for code coveragezCoverage ruleszCoverage rules generatedz;Need gcovr or lcov/genhtml to generate any coverage reportsSuffixzUtils generatedzdefault all

z	>= 1.12.0z
.ninja_log-trestatr  	cleandead)Fr   r  r   r  r   r   r)  r<   ro  r    detect_ninja_command_and_versionoptstoreget_value_forr&   r   get_build_dirrelative_tor  
ValueErrorr   	join_argsget_meson_commandr  r   ninja_commandninja_versionversion_compareninja_has_dyndepsr  r  r   re  r  r   r   get_projectr  generate_rulesbuild_elementsgenerate_phonyadd_build_commentr   get_targetsr  r   BuildTarget)generate_common_compile_args_per_src_typeget_idr    generate_targetlog_timestampgenerate_testsgenerate_installgenerate_distfind_coverage_toolsgenerate_coverage_ruleswarninggenerate_utilsgenerate_endingwrite_ruleswrite_buildsrU   cmd_ci_includerm  exists	build_dirr  callgenerate_compdbgenerate_rust_project_json)r   r  r  for_machinerb  builddirmeson_commandoutfilenamer~  r   	num_pools captured_compile_args_per_targettargettkey	gcovr_exegcovr_versionlcov_exelcov_versiongenhtml_exellvm_cov_exedefaults   &&&                   r=   generateNinjaBackend.generateS  s\    $$kll,T--66@@MMJJ   O   V   V  Wb   c  d<AD,,[9  -
 ;;E$$--;;Ig<NOOD,,::<=H $//
; %..x/I/I/KLMHHJHHpqHHl8*=>= !IJJ380	T/!)!9!9$:L:Lj!Yggll4#3#3#A#A#CTEXEXY"S(,g66'MMB4::CYCYC[B\\_`aMMNOMM67MM>?((11::HHI\]I1} #+   7 &&|44!"$D!""<0I#JK 350"jj446==?F!&%*;*;<<LPLzLz  |B  MC8I @ !!7!7!9!@!@!BI]^$$Q' _23""<#=>!01""<#@A!!#23 /0L)C&&//888$$--66DD\RR^h^|^|  ~B  ~N  ~N  ~W  ~W  _X[	=(L+|

VI;bs8*ER^Q__qrsk**<8H+IJ00M<X&&'AB LL!^_""<#9:!01  "W%g&'GMM'"_ 5d 	

<-K( %%d&8&8+FF))$*<*<jIIRVRdRdRdGGNN277<<0@0@0J0JL#YZZOOD..$1AAtGWGWGaGabOOD..$1DD$JZJZJdJde'')33 o   766 544sM   $` B,`.Ba,Fa<Aaa a(Ca`+*`+.`?	a	c                   V ^8  d   QhRR/# r  r;   )r<   s   "r=   r>   r`    s      D r?   c                l   V P                   '       g   R# \        \        P                  P	                  V P
                  P                  4       R4      RRR7      ;_uu_ 4       pV P
                  P                  P                  P                  R,          P                  4       p\        P                  ! RTR\        P                  P	                  VR	4      R
V P                   P                  4        Uu. uF  q3P                  4       NK  	  up/V^R7       RRR4       R# u upi   + '       g   i     R# ; i)z;Generate a rust-analyzer compatible rust-project.json file.Nzrust-project.jsonr  r  r  rustsysrootsysroot_srczlib/rustlib/src/rust/library/crates)indent)rk  r  r  r  r   r  r  r  r   r  get_sysrootjsondumpr  rB  )r   r  r  r   s   &   r=   r  'NinjaBackend.generate_rust_project_json  s    "'',,t//==?ATU) ),-&&//99>>vFRRTGIIw!277<<9X#YD4D4D4K4K4MN4Mqyy{4MN
 !) ) O) ) )s   !BD"0DD"D""D3	c                   V ^8  d   QhRR/# r  r;   )r<   s   "r=   r>   r`    s     P P Pr?   c           
     	Z   . p\          EF  pV P                  P                  P                  V,          P	                  4        F  pYP                  V4      3 UUu. uF  pR F	  pV V 2NK  	  K  	  upp,          pYP                  V4      3 UUu. uF  pR F	  pV V 2NK  	  K  	  upp,          pVP                  4       R8X  g   K  V P                  RVP                  4      pVP                  V4       VP                  V R24       K  	  EK	  	  \        P                  ! V P                  R4      '       d   R.M. pV P                  RR.,           V,           V,           pV P                  P                  4       p \         P"                  ! WxR7      p	\%        \&        P(                  P+                  VR	4      R
4      ;_uu_ 4       p
V
P-                  V	4       RRR4       R# u uppi u uppi   + '       g   i     R# ; i  \.         d    \0        P2                  ! RRR7        R# i ; i)r   r   taskingtasking_mil_compilez>=1.9-xr  compdbr  zcompile_commands.jsonwbNz&Could not create compilation database.F)fatal)r   r   )r   r  r  r   r  compiler_to_rule_namecompiler_to_pch_rule_namer  get_compiler_rule_namer  r  r   r  r  r  r  r  check_outputr  r  r  r   r   	Exceptionr   r  )r   rulesr  r  r   extcompdb_optionsninja_compdbr  jsondbr  s   &          r=   r  NinjaBackend.generate_compdb  s    )=K ,,55??LSSU6P6PQY6Z5[ 35[T%1c "F3%.%1 )5[ 3 36T6TU]6^5_ 35_T%1c "F3%.%1 )5_ 3 3 ??$	1667LhNbNbcDLL&LLD6/ V ) $,#;#;D<N<NPW#X#X$^`))T8,<<~MPUU##113	P,,\HFbggll8-DEtLLPQ ML33 MLL 	PLLAOO	Ps=   G#G)>A	H G/H /H 	:H  H #H*)H*c                    V ^8  d   QhRRRR/# )r7   r  build.BuildTargetr:   T.List[FileOrString]r;   )r<   s   "r=   r>   r`    s      ,= BV r?   c           	     	   VP                  4       pW P                  9   d   V P                  V,          # . pVP                  4        F  p\        V\        P
                  \        P                  34      '       d   K5  VP                  4        FB  p\        P                  ! V4      '       g   K!  VP                  V P                  WV4      4       KD  	  K  	  VP                  '       dB   \        P                  ! V P                  V4      VP                  4      pVP                  V4       \         P"                  ! VP$                  VP&                  4       FL  p\        V\        P(                  \        P*                  34      '       g   K5  W0P-                  V4      ,          pKN  	  \        V\        P.                  4      '       d    VP1                  VP-                  4       4       W0P                  V&   V# r   )r  rn  get_generated_sourcesr   r   CustomTargetCustomTargetIndexget_outputsr   	is_headerr  get_target_generated_dirvala_headerr   from_built_fileget_target_dir	itertoolschainlink_targetslink_whole_targetsStaticLibrarySharedLibraryget_generated_headersCompileTargetextend)r   r  tidheader_depsgenlistsrcr"  r  s   &&      r=   r+  "NinjaBackend.get_generated_headers  su   mmo...//44,.335G'E$6$68O8O#PQQ**,&&s++&&t'D'DVVY'Z[ - 6 ..t/B/B6/JFL^L^_K{+??6#6#68Q8QRC# 3 3U5H5HIJJ99#>> S fe1122v;;=>,7$$S)r?   c                    V ^8  d   QhRRRR/# r7   r  r  r:   zT.MutableMapping[str, File]r;   )r<   s   "r=   r>   r`    s      3D Id r?   c                    \        4       pVP                  4        FD  pVP                  4        F-  pV P                  WV4      p\        P
                  ! V4      W%&   K/  	  KF  	  V# )z
Returns a dictionary with the keys being the path to the file
(relative to the build directory) and the value being the File object
representing the same path.
)r   r  r  r!  r   from_built_relative)r   r  srcsgensrcrR   rel_srcs   &&    r=   get_target_generated_sources)NinjaBackend.get_target_generated_sources  s\     -8M224F'')77J $ 8 8 A * 5 r?   c                    V ^8  d   QhRRRR/# r4  r;   )r<   s   "r=   r>   r`    s     
 
): 
?Z 
r?   c                	    \        4       pVP                  4        FH  p\        V\        4      '       g   \	        R V: R24      hVP                  V P                  4      pW2V&   KJ  	  V# )All sources in target z must be of type mesonlib.File)r   get_sourcesr   r   r)   rel_to_builddirbuild_to_src)r   r  r7  rR   r  s   &&   r=   get_target_sourcesNinjaBackend.get_target_sources  se    ,7M##%A a&&&)?uDb'cdd!!$"3"34AG & r?   c                    V ^8  d   QhRRRR/# )r7   sourcer3   r:   r\   r;   )r<   s   "r=   r>   r`    s      , 4 r?   c                	   \        V\        4      '       d   VP                  p\        P                  ! V4      '       g   \        P
                  ! V4      '       d   R # \        P                  P                  V4      ^,          R,          P                  4       p\        P                   F9  pWAP                  9  d   K  W1P                  V,          P                  9   g   K8   R # 	  R# )Fr   T)r   r   fnamer   
is_llvm_iris_assemblyr  r  splitextlowerr   LANGS_CANT_UNITYfile_suffixes)r   r  rE  suffixlangs   &&&  r=   get_target_source_can_unity(NinjaBackend.get_target_source_can_unity  s    fd##\\F''  ((!!&)!,R0668--D+++))$/===	 .
 r?   c               (    V ^8  d   QhRRRRRRRR/# )	r7   r  build.Targetcompzcompilers.Compilerunity_sources T.Optional[T.List[FileOrString]]r:   r}   r;   )r<   s   "r=   r>   r`  *  s1     2V 2V 2VM_ 2V:Z2Vfj2Vr?   c                  a a VP                  4       pVP                  4       pS P                  V,          p	V\        V4      3p
V	P	                  V
R4      pVf   \        V\        4      '       d   VP                  RR7      pVP                  VS P                  4      pRVRVP                  P                  4       RVP                  4       RVR. R	. R
. /pWV
&   R V 3R lloVR,          P                  V3R lV 4       4       VR	,          P                  V3R lV 4       4       V'       d%   VR
,          P                  V3R lV 4       4       R# R# )a  
Adds the source file introspection information for a language of a target

Internal introspection storage format:
self.introspection_data = {
    '<target ID>': {
        <id tuple>: {
            'language: 'lang',
            'compiler': ['comp', 'exe', 'list'],
            'parameters': ['UNIQUE', 'parameter', 'list'],
            'sources': [],
            'generated_sources': [],
        }
    }
}
NTcopyr  machiner  
parametersrl   generated_sourcesrU  c                    V ^8  d   QhRRRR/# )r7   filer3   r:   r9   r;   )r<   s   "r=   r>   ENinjaBackend.create_target_source_introspection.<locals>.__annotate__S  s     	H 	H| 	H 	Hr?   c                
  < \        V \        4      '       d'   V P                  SP                  SP                  4      # \
        P                  P                  \
        P                  P                  SP                  V 4      4      # )zMake source files absolute )	r   r   absolute_path
source_dirr  r  r  normpathr   )r^  r   s   &r=   compute_pathENinjaBackend.create_target_source_introspection.<locals>.compute_pathS  sS    $%%))$//4>>JJ77##BGGLL$FGGr?   c              3  4   <"   T F  pS! V4      x  K  	  R # 5ir   r;   r&  r   rd  s   & r=   r'  BNinjaBackend.create_target_source_introspection.<locals>.<genexpr>Y  s     #EWLOOW   c              3  4   <"   T F  pS! V4      x  K  	  R # 5ir   r;   rg  s   & r=   r'  rh  Z  s     -YGX!l1ooGXri  c              3  4   <"   T F  pS! V4      x  K  	  R # 5ir   r;   rg  s   & r=   r'  rh  \  s     -U}!l1oo}ri  )r  get_languageri  tupler   r   r   r  &compute_parameters_with_absolute_pathsr  r  get_lower_case_namer  r-  )r   r  rT  r[  rl   r\  rU  r.  rO  tgtid_hash	src_blockrd  s   f&&&&&&     @r=   "create_target_source_introspection/NinjaBackend.create_target_source_introspection*  s<   $ mmo  "%%c*z*+GGGT*	*l33'11t1<
DDZQUQ_Q_`J D4++??AD,,.j2#RI %L	H 	H 	)###EW#EE%&---YGX-YYo&---U}-UU r?   c               (    V ^8  d   QhRRRRRRRR/# )	r7   r  rS  linkerT.Union[Compiler, StaticLinker]r[  r   r:   r}   r;   )r<   s   "r=   r>   r`  ^  s3     & & &On &  }I &  NR &r?   c                	8   VP                  4       pV P                  V,          p\        V4      pVP                  VR 4      pVfV   VP	                  RR7      p\        V\        4      '       d   VP                  4       p	MVP                  4       p	RV	RV/pWuV&   R # R # )NTrX  rv  r[  )	r  ri  rm  r   r  r   r   get_linker_exelistr  )
r   r  rv  r[  r.  rp  lnk_hash	lnk_block	paramlistlinkerss
   &&&&      r=   "create_target_linker_introspection/NinjaBackend.create_target_linker_introspection^  s    mmo%%c*$GGHd+	",,$,7I&(++ 335 ,,. 'iI &M r?   c                    V ^8  d   QhRRRR/# )r7   r  z?T.Union[build.BuildTarget, build.CustomTarget, build.RunTarget]r:   r}   r;   )r<   s   "r=   r>   r`  q  s      h% h%&e h%jn h%r?   c           
     	   \        V\        P                  4      '       d(   \        P                  ! V P                  V4      R R7       \        V\        P                  4      '       d   V P                  V4       R# \        V\        P                  4      '       d   V P                  V4       R# . p/ pVP                  4       pW@P                  9   d   R# V P                  P                  V4       / V P                  V&   V P                  V4       V P                  WP!                  V4      4       V P#                  V4       \        V\        P$                  4      '       d   V P'                  V4       R# RVP(                  9   d   V P+                  V4       R# RVP(                  9   d   V P-                  V4       R# \        V\        P.                  4      pVP1                  4       '       d   V P3                  V4      w  rgpMJRVP(                  9   d   V P5                  V4      w  rgpM$V P7                  V4      pV P9                  V4      p. pV P;                  V4       V P=                  V4      p	. p
V P?                  V4      p. p. p. pWPA                  V4      ,          pV'       d   \C        VP(                  PE                  4       4      pVPG                  \H        PJ                  4      pV'       d~   RPM                  V4      PO                  4       ;ppT\Q        V4      ^8  d   RMR,          pV R	V R
VPR                  : R2p\T        PV                  ! \T        PX                  ! R4      V4       . pVPE                  4        EF\  p\Z        P\                  ! V4      p\(        P^                  ! V4      '       d   V'       du   V Pa                  VV4      '       d]   VPc                  V4       \        Pd                  PM                  V Pf                  Pi                  4       V4      pVPc                  V4       K  VPc                  V4       K  \(        Pj                  ! V4      '       d   V
Pc                  V4       K  \(        Pl                  ! V4      '       g   \n        Pp                  ! V4      '       d   EK/  V'       d   VPc                  V4       EKK  VPc                  V4       EK_  	  . pV F  p\(        Pr                  ! V4      '       g   K!  \(        Pt                  ! V4      '       d   V Pw                  VV4      w  ppMV Py                  VVR VR7      w  ppVPc                  V4       VVV&   V
Pc                  V4       VP{                  R4      R,          \(        P|                  R,          9   g   K  VPc                  V4       K  	  V P                  V4      pV'       d*   VP                  4       '       d   V P                  WR7      pM. pV P                  V4      w  ppV
P                  V4       V P                  V4      p. pVP                  4       '       d   \        P                  ! V U u. uFN  p V P                  4       '       g   K  VP(                  R,          P                  V P                  V 4      RR7      NKP  	  up 4      pVP(                  R,          p!VP                  4        F3  p VP                  V!P                  V P                  V 4      R4      4       K5  	  . p"V FY  p\Z        P\                  ! V4      p\(        P                  ! V4      '       d   VPc                  V4       KH  V"Pc                  V4       K[  	  V" F,  pV Py                  VVR . V4      w  ppV
Pc                  V4       K.  	  VP                  4        EF_  p\(        Pr                  ! V4      '       g   K"  \(        P                  ! V4      '       d   V'       g   KH  \(        Pt                  ! V4      '       d)   V Pw                  VV4      w  ppV
Pc                  V4       K  V'       d~   V Pa                  VV4      '       df   \        Pd                  PM                  V Pf                  Pi                  4       VP                  V P                  4      4      pVPc                  V4       EK  V Py                  VVR. VV,           V,           V4      w  ppV
Pc                  V4       VPc                  V4       VVV&   EKb  	  V'       dg   V P                  W4       FQ  pV Py                  VVR W,           V,           VVV4      w  ppV
Pc                  V4       VPc                  V4       VVV&   KS  	  V'       d   R# V P                  V4      w  p#p$\        V\        P                  4      '       g   T
p%M&VP                  '       d   V P                  W4      p%MT
p%V P                  WVV4       VP                  4       '       d   V P                  WV%V4       R# V P                  WV%V#VV$R7      p&V P                  V&4       \        V\        P                  4      '       d   V Pf                  P                  VP                  ,          P                  4       '       dP   VP                  '       d<   \        V P                  V#P                  V	4      RV	.4      p&V P                  V&4       R# R# R# R# u up i )Texist_okNcsswiftcython, z arez isz' not supported in Unity builds yet, so z sources in the z! target will be compiled normallyFIXME)
order_deps.rU  )r/  r  F)	is_system)stdlib_args
AIX_LINKERr   )ar   r   r  r  makedirsget_target_private_dir_absr  generate_custom_target	RunTargetgenerate_run_targetr  processed_targetsr  ri  process_target_dependenciesgenerate_shlib_aliasesr$  generate_generator_list_rulesJargenerate_jar_targetr   generate_cs_targetgenerate_swift_targetr,  	uses_valagenerate_vala_compilegenerate_cython_transpilerB  r:  scan_fortran_module_outputsget_target_filenameis_unityr+  r   keysintersectionr   rL  r   upperrE   r   r   r  redr   r6  	is_sourcerP  r  r  r  r  	is_objectr   r   is_module_libraryis_separate_compilerH  generate_llvm_ir_compilegenerate_single_compiler   r  target_uses_pchhas_pchgenerate_pchflatten_object_listr-  get_fortran_order_depsuses_fortranr   listifyget_include_argsget_target_private_dirget_all_linked_targetsr   r  r@  rA  generate_unity_files determine_linker_and_stdlib_argsr)  prelinkgenerate_prelinkgenerate_dependency_scan_target	uses_rustgenerate_rust_targetgenerate_linkrx  r*  machinesr  is_aixaix_so_archiver   r   get_archive_name)'r   r  compiled_sourcesrk   r   is_compile_targettarget_sourcesr\  transpiled_sourcesoutnameobj_listr  r/  	unity_src
unity_depslangs
langs_cant	langs_aremsggenerated_source_filesr9  raw_srcabs_srcd_generated_depsr1  orR   use_pchpch_objectsodfortran_order_depsfortran_inc_argsr  fctranspiled_source_filesrv  r  final_obj_listrz  s'   &&                                     r=   r  NinjaBackend.generate_targetq  s.	   fe//00KK77?$Ofe0011''/feoo..$$V,(**,}})))""4((*%((0##F,?,?,GH 	**62 feii(($$V,6#####F+f&&&&&v. 'vu/B/BC  &*%?%?%G#N")))%)%C%CF%K#N"!44V<N $ A A& I!#((0 **62==(	
11&99((--/0E++H,E,EFJ$(IIj$9$?$?$AA	Es:':VE	"#J5' R((.6WY'*C0 02(--/G..w7G""7++ @ @ Q Q%%g. ggll4+;+;+I+I+KWUG$$W-*11':$$W--(%%g..'2K2KG2T2T"&--g6
 ""7+' 0. 
 *C0055##C((44VSA133FCR]3^1##A& M!OOAwws|B9#:#:3#?? ''* * &&v.v~~''++F+LKK((02!88<(*  '//JL1bJLQPQP^P^P`2A1A1A)1L1]1]++A.% 2^ 2AJL1b  c
 !!),B224 ''(;(;//2E); < 5 #%%C..s3G ""3''""7+'..w7 & +C//T2{SDAqOOA +
 "((*C0055""3''0A##C((44VSA1"d>>vsKK'',,t'7'7'E'E'G'*':':4;L;L'MO  )33FC4?BR4RUg4g4DF1 " ''*#$a % +( 00C33FCzG_brGr4FHXZce1" ''*#$a  D "CCFK&%"5"566%N^^^!226DN%N,,V}Vhi%%f~GYZ!!&>6;do!pt fe1122t7G7G7P7PQWQcQc7d7k7k7m7m$$$()9)96;R;RSZ;[]ilsktut$ % 8n2i1bs   #l 7lc                    V ^8  d   QhRRRR/# )r7   r  z'build.BuildTarget'r:   r\   r;   )r<   s   "r=   r>   r`  [  s      4G D r?   c           	     	   V P                   '       g   R # RVP                  9   d   R# RVP                  9  d   R # RVP                  R,          9   d   R# VP                  R,          pVP                  4       R8w  d   R # V P	                  V\        RVP                  VP                  R7      4      pVR	9  d   R # \        P                  ! 4       '       g   R # \        P                  ! VP                  R4      '       d   R # R# )
Fr  Tcppz-fmodules-tsr  cpp_stdrZ  
subprojectz<19.28.28617)latestz	c++latestz
vc++latest)r  r   
extra_argsr  get_target_optionr&   r  r  r   current_vs_supports_modulesr  version)r   r  r  
cppversions   &&  r=   should_use_dyndeps_for_target*NinjaBackend.should_use_dyndeps_for_target[  s    %%%((((((V..u55u%::<6!++FIiFLFXFXIOIZIZ5\ ]
 BB3355##CKK@@r?   c          
     ,    V ^8  d   QhRRRRRRRRR	R
/# )r7   r  r  r  r   rk   rj   object_depsr  r:   r}   r;   )r<   s   "r=   r>   r`  s  s;     . .6G .:E.7G. 6J. OS.r?   c           	     	   V P                  V4      '       g   R # RV n        V P                  V4      w  rVVP                  R,           p\        P
                  P                  V P                  V4      V4      P                  RR4      p\        P
                  P                  V P                  V4      V4      P                  RR4      p	Rp
\        V P                  V4      4      p\        V P                  V4      W;4      pRp\        P
                  P                  V	4      '       d9   \        V	R4      ;_uu_ 4       p\        P                   ! V4      pR R R 4       XV8g  pV'       d4   \        V	R4      ;_uu_ 4       p\        P"                  ! W4       R R R 4       \%        V P&                  WZV4      pV F%  pVP(                  P+                  V^ ,          4       K'  	  VP,                  P/                  V4       VP1                  RVP                  4       V P3                  V4       \5        4       pVP7                  4        FC  pV P                  V4      '       g   K  VP+                  V P                  V4      ^ ,          4       KE  	  V P9                  V4      w  ppTP/                  V Uu0 uF3  pVP;                  4       '       g   K  V P                  V4      ^ ,          kK5  	  up4       \%        V P&                  VR	V.\=        V4      ,           4      pVP1                  RVP                  4       V P3                  V4       R #   + '       g   i     EL; i  + '       g   i     EL; iu upi )
NTz.datrB   r$  depscanrbr  r   depaccumulate)r  rm  get_dep_scan_file_forr   r  r  r   r  rU   r  r   select_sources_to_scanrh   r  r  pickleloadr  r   r   r   r  r   r  r  rx  r   r  r  r  r*  )r   r  r  rk   r  	json_filedepscan_filepickle_basepickle_file
pickle_abs	rule_namescan_sourcesscaninfor   poldrz  rR   r   r  _r  s   &&&&&                 r=   r  ,NinjaBackend.generate_dependency_scan_targets  s    11&99!"&"<"<V"D	kkF*ggll4#>#>v#FT\\]acfgWW\\$"A"A&"I;W__`dfij
	D778HIJ.''/N 77>>*%%j$''1kk!n (8OEj$''1H( ( !!1!19U AIIMM!A$ k*ffkk*t!e..0A11!44D66q9!<= 1 ((02"Y"QHX82215a88"YZ !1!1<S\R]`fgn`oRopffkk*t7 (''
 (''$ Zs$   7L<7M$M$M$<M	M!	c                    V ^8  d   QhRRRR/# )r7   r  r   r:   z3T.Iterable[T.Tuple[str, Literal['cpp', 'fortran']]]r;   )r<   s   "r=   r>   r`    s     ( ({ ($W(r?   c              #  	  "   V F  p\        V\        P                  4      '       d   VP                  V P                  4      p\
        P                  P                  V4      ^,          R,          pVP                  4       \        P                  R,          9   g   VR8X  d	   VR3x  K  VP                  4       \        P                  R,          9   g   K  VR3x  K  	  R# 5i)r   r   r  Cr  N)r   r   r   r@  rA  r  r  rJ  rK  r   r  )r   r  rE  r  s   &&  r=   r  #NinjaBackend.select_sources_to_scan  s     
 'F&(--00//0A0AB''""6*1-b1Cyy{i55e<<s
em#	 7 7	 BBi'' 's   CC!C!c                   V ^8  d   QhRR/# r  r;   )r<   s   "r=   r>   r`    s     ( (T (r?   c                	    VP                  4        F5  pVP                  4       V P                  9  g   K$  V P                  V4       K7  	  R # r   )get_dependenciesr  r  r  )r   r  r  s   && r=   r  (NinjaBackend.process_target_dependencies  s7    ((*Axxz!7!77$$Q' +r?   c                   V ^8  d   QhRR/# r  r;   )r<   s   "r=   r>   r`    s     < < <r?   c                	    VP                    F6  p\        V\        P                  4      '       g   K%  V P	                  W!4       K8  	  R # r   )rl   r   r   r(   generate_genlist_for_target)r   r  rR   s   && r=   custom_target_generator_inputs+NinjaBackend.custom_target_generator_inputs  s1    A!U001100;  r?   c                    V ^8  d   QhRRRR/# )r7   r  z,T.Union[build.CustomTarget, build.RunTarget]r:   r   r;   )r<   s   "r=   r>   r`    s     	 	&R 	Wb 	r?   c           	     	    . pVP                  4        Fw  p\        V\        4      '       d
   V^ ,          pVP                  4        FA  pVP	                  \
        P                  P                  V P                  V4      V4      4       KC  	  Ky  	  V# )r   )	r  r   r   r  r  r  r  r   r$  )r   r  r   r   outputs   &&   r=   unwrap_dep_listNinjaBackend.unwrap_dep_list  sm    ((*A!T""aD--/BGGLL)<)<Q)?HI * + r?   c                    V ^8  d   QhRRRR/# )r7   r  zbuild.CustomTargetr:   r}   r;   )r<   s   "r=   r>   r`    s     )4 )4-? )4D )4r?   c                	   V P                  V4       V P                  V4      w  r#pV P                  V4      pWPP                  V4      ,          pVP                  '       d   VP                  R 4       VP                  f   RpMRp\        V P                  W6V4      pVP                  V4       VP                   FX  pVP                  4        FA  p	VP                  \        P                  P                  V P                  V4      V	4      4       KC  	  KZ  	  T P!                  VP"                  ^ ,          VR,          VP%                  4       VP&                  '       d
   V^ ,          MRVP(                  '       d
   V^ ,          MRVP*                  VP,                  VP.                  R7      w  rJV
'       d   RV
 R2pMRpVP                  e   VP1                  VP2                  4      p\        P                  P                  V P                  V4      V4      p\        P                  P                  V P4                  P7                  4       V P                  V4      4      p\        P8                  ! VR	R
7       VP;                  RV4       VP.                  '       d   VP;                  RR4       \=        VP>                  VP@                  4      PC                  4       pVP;                  RV4       VP;                  RVPD                  PG                  V4      V,           4       V PI                  V4       V PJ                  PM                  VPO                  4       4       R# )PHONYNCUSTOM_COMMANDCUSTOM_COMMAND_DEPr   )extra_bdepsr  feedenvcan_use_rsp_fileverbose (wrapped by meson )r   Tr  r  poolconsoleCOMMANDr   )(r
  eval_custom_target_commandr  get_target_depend_filesbuild_always_staler  r   r   r   r	  extra_dependsr  r  r  r   r$  as_meson_exe_cmdliner    get_transitive_build_target_depsr  r  r  r   r  get_dep_outnamer   r  r  r  r  r   subdirr   as_posixr   r<   rx  r  r  r  )r   r  r7  
ofilenamesrO   r   r   rz  rU  r  reasoncmd_typer   	rel_dfileabs_pdir	full_names   &&              r=   r  #NinjaBackend.generate_custom_target  sx   ++F3"&"A"A&"I3##F+,,V44$$$KK >>!'H+H !1!1:NT%%A--/RWW\\$*=*=a*@&IJ * &
 //q0A3r7<B<c<c<eIO
1]a@FT!WQU4:JJAG8> 0 H ,VHA6HH>>%,,T-=-=>GT%8%8%@'JIww||D$4$4$B$B$DdFYFYZ`FabHKK40MM)Y/>>>MM&),4==?	i%mV%7%7%>%>y%IH%TUt""6==?3r?   c                    V ^8  d   QhRRRR/# )r7   r  build.RunTargetr:   r9   r;   )r<   s   "r=   r>   r`    s     3 3O 3 3r?   c                	h    VP                   R 8w  d   VP                    R2pMR pV VP                   2# )r   z@@)r  r   )r   r  subproject_prefixs   && r=   build_run_target_name"NinjaBackend.build_run_target_name  s>    "#)#4#4"5R 8 "#$V[[M22r?   c                    V ^8  d   QhRRRR/# )r7   r  r1  r:   r}   r;   )r<   s   "r=   r>   r`    s     4 4/ 4d 4r?   c                	   V P                  V4      pVP                  '       g   \        V P                  VR . 4      pMV P	                  V4      pV P                  V4      w   rVV P                  VP                  ^ ,          VR,          VRR7      w  rxV'       d   RV R2MRp	V P                  VR. 4      pVP                  RV4       VP                  R	R
VP                   V	 24       VP                  RR4       V P                  V4      p
WP                  V4      ,          p
VP                  V
4       V P                  V4       V P                  P                  VP!                  4       4       R# )r  r   T)r  r  r  r  r   r  r  r   zRunning external command r  r  N)r4  r   r   r   get_run_target_envr   r$  r{  r  r   r  r!  r	  rx  r  r  r  )r   r  rJ  rz  
target_envr  rO   meson_exe_cmdr*  r+  r   s   &&         r=   r   NinjaBackend.generate_run_target  sF   008~~~ %T%5%5{GRPD008J77?IAq$($=$=fnnQ>OQTUWQXBLFJ %> %L!M ;A,VHA6bH++K9I2NDMM)]3MM-+DV[[MRZQ[)\]MM&),##F+,,V44Tt""6==?3r?   c          
     ,    V ^8  d   QhRRRRRRRRRR	/# )
r7   rz  r   outputsr   r  r   r  r:   r}   r;   )r<   s   "r=   r>   r`    s:     D D.? D+ D-<DL[D`dDr?   c           
     	v   V P                   P                  4       P                  4       pR p. pVe   VRV.,          pVe   VRV.,          pV Ft  p\        VR4      '       g   K  VP                  P                  4        F?  p	V	P                  4       R8X  g   K  V	P                  P                  4       '       d   K<  Rp Kr  	  Kv  	  TP                  RV P                  P                  4       RR	.,           V,           V P                  P                  4       \        P                  P                  V P                  P                  4       V P                   P                  4       4      V P                  P!                  4       V P                  P#                  4       .,           V,           V'       d   R
.M. ,           4       R# )FNz--gcovz
--llvm-covr   clangTr  
--internalcoveragez--use-llvm-cov)r   r  r  hasattrr   r  info	is_darwinr  r  get_build_commandget_source_dirr  r  r   get_subproject_dirr  get_log_dir)
r   rz  r=  r  r  targetsuse_llvm_covexe_argsr  r  s
   &&&&&     r=   generate_coverage_command&NinjaBackend.generate_coverage_command  su   **((*113 9--H#|44HF6;//",,335??$/8O8O8Q8Q#'L 6  	i!1!1!C!C!E#Z0"1" ''668ww||D$4$4$C$C$E$(JJ$A$A$CE''557''335	7"7 " .:()r	"C 		Dr?   c               (    V ^8  d   QhRRRRRRRR/# r7   r  r   r  r  r:   r}   r;   )r<   s   "r=   r>   r`  +  s5     T T TQ` Tp T  EI Tr?   c                	    V P                  R RR4      pV P                  V. W4       VP                  RR4       V P                  V4       V P	                  WV4       R# )rA  r  r  r   zGenerating coverage reportsN)r{  rL  r  rx  generate_coverage_legacy_rulesr   r  r  r  r0  s   &&&& r=   r  $NinjaBackend.generate_coverage_rules+  sT    $$Z1A7K&&q"iF	

="?@q++IlSr?   c               (    V ^8  d   QhRRRRRRRR/# rO  r;   )r<   s   "r=   r>   r`  2  s3     " " "Xg "  xG "  LP "r?   c                	   V P                  R RR4      pV P                  VR.W4       VP                  RR4       V P                  V4       V'       Ed    V P                  RRR4      pV P                  VR.W4       VP                  RR4       V P                  V4       V P                  R	RR4      pV P                  VR
.W4       VP                  RR4       V P                  V4       \        P
                  ! VR4      '       dM   V P                  RRR4      pV P                  VR.W4       VP                  RR4       V P                  V4       R# R# R# )zcoverage-htmlr  r  z--htmlr   zGenerating HTML coverage reportzcoverage-xmlz--xmlzGenerating XML coverage reportzcoverage-textz--textzGenerating text coverage reportz>=4.2zcoverage-sonarqubez--sonarqubez(Generating Sonarqube XML coverage reportN)r{  rL  r  rx  r   r  rR  s   &&&& r=   rQ  +NinjaBackend.generate_coverage_legacy_rules2  s7   $$_6FP&&q8*iN	

="CDq9((9I7SA**1wiQJJ}&FGNN1((:JGTA**1xj)RJJ}&GHNN1''w??,,-ACSU\]..q=/9[

=*TUq!	 @ r?   c                   V ^8  d   QhRR/# r  r;   )r<   s   "r=   r>   r`  I  s      $ r?   c                	>   V P                  4        V P                  R RR4      pVP                  R4       VP                  RR4       VP                  RV P                  P                  4       R R.,           4       VP                  RR	4       V P                  V4       R
# )installr  r  allDESCzInstalling filesr  --no-rebuildr  r  N)create_install_data_filesr{  r	  r  r  rE  rx  r   rz  s   & r=   r  NinjaBackend.generate_installI  s    &&(''	3CWMUf01i!1!1!C!C!ETbHc!cdfi(tr?   c                   V ^8  d   QhRR/# r  r;   )r<   s   "r=   r>   r`  R  s       r?   c                	F   V P                  4        V P                  P                  R 4      RR.,           pV P                  P                  P                  P                  \        R4      4      '       g   VR.,          pV P                  P                  P                  P                  \        R4      4      '       d   VR.,          pV P                  RR. RO4      pVP                  RV4       VP                  R	R
4       VP                  RR4       V P                  V4       V P                  P                  R 4      . RO,           pV P                  RR. RO4      pVP                  RV4       VP                  R	R4       VP                  RR4       V P                  V4       R# )Ttestr\  stdsplitz--no-stdsplit	errorlogsz--print-errorlogsr  r  r[  zRunning all testsr  r  	benchmarkzRunning benchmark suiteN)rZ  meson-test-prereqr  )rb  z--benchmarkz	--logbasebenchmarklogz--num-processes=1r\  )rZ  meson-benchmark-prereqr  )
serialize_testsr  rE  r  r  r  r&   r{  r  rx  r   rO   rz  s   &  r=   r  NinjaBackend.generate_testsR  sY   006&.9QQ((11??	*@UVVO$$C$$--;;Ik<RSS'((C''0@Bghi%f12fi(t 006 :A A ''5EGqri%f78fi(tr?   c                   V ^8  d   QhRR/# r  r;   )r<   s   "r=   r>   r`  i  s      8  8  8r?   c                	.   . V n         / V n        V P                  \        R 4      4       V P	                  4        V P                  \        R4      4       V P                  4        V P                  \        R4      4       V P                  4        V P                  4        V P                  \        R4      4       V P                  \        RR.. RRR7      4       V P                  \        R	R.. RR
RRR7      4       V P                  \        RV P                  P                  4       RR.,           RR.R4      4       V P                  P                  4       RRV P                  P                  4       R.,           pV P                  \        RV. RRR7      4       R# )zRules for module scanning.zRules for compiling.zRules for linking.zOther rulesr  z$COMMANDz$DESC
restat = 1r   r  gccr   )r   r   r   	COPY_FILEr@  rY  r   $outzCopying $in to $out
regenerater  REGENERATE_BUILDzRegenerating build fileszgenerator = 1N)r  ruledictadd_rule_commentr   generate_scanner_rulesgenerate_compile_rulesgenerate_static_link_rulesgenerate_dynamic_link_rulesadd_ruler   r  rE  rF  )r   r   s   & r=   r  NinjaBackend.generate_rulesi  sx   
l+GHI##%l+ABC##%l+?@A'')((*l=9: 	i 0:,G&24 	5i 4zlB%*J&24 	5 	iT-=-=-O-O-QUaciTj-j!&1FH 	I ..0,,.  	i 2 !2 :&57 	8r?   c                    V ^8  d   QhRRRR/# r7   r   r   r:   r}   r;   )r<   s   "r=   r>   r`    s     # # # #r?   c                	<    V P                   P                  V4       R # r   )r  r  r   r   s   &&r=   rv  NinjaBackend.add_rule_comment  s    

'"r?   c                    V ^8  d   QhRRRR/# r~  r;   )r<   s   "r=   r>   r`    s     , , ,$ ,r?   c                	<    V P                   P                  V4       R # r   )r  r  r  s   &&r=   r  NinjaBackend.add_build_comment  s    ""7+r?   c                    V ^8  d   QhRRRR/# )r7   r   r   r:   r}   r;   )r<   s   "r=   r>   r`    s     ( (Y (4 (r?   c                	    VP                   V P                  9   d   \        R VP                    R24      hV P                  P	                  V4       WP                  VP                   &   R# )zTried to add rule z twice.N)r   ru  r   r  r  )r   r   s   &&r=   r{  NinjaBackend.add_rule  sM    99% #5dii[!HII

$#'dii r?   c                    V ^8  d   QhRRRR/# )r7   r   r   r:   r}   r;   )r<   s   "r=   r>   r`    s     	w 	w0 	wT 	wr?   c                	b   VP                   ! 4        V P                  P                  V4       VP                  R 8w  dr   VP                  V P                  9   d%   V P                  VP                  ,          Vn        R# \        P                  ! RVP                   RVP                   24       R# R# )r  zbuild statement for z references nonexistent rule N)	r7  r  r  r   ru  r   r   r  r   )r   r   s   &&r=   rx  NinjaBackend.add_build  s    ""5)>>W$~~.!]]5>>:
3E4F4F3GGdejesesdtuv %r?   c                    V ^8  d   QhRRRR/# r   r;   )r<   s   "r=   r>   r`    s      8  r?   c                	    V P                    F+  p\        V\        4      '       g   K  VP                  4        K-  	  V P                   F  pVP                  V4       K  	  R # r   )r  r   r   r   r  r   )r   r   brs   &&  r=   r  NinjaBackend.write_rules  sH    $$A!.//'') % AGGG r?   c                    V ^8  d   QhRRRR/# r   r;   )r<   s   "r=   r>   r`    s     4 4H 4 4r?   c                	    \        V P                  R R7       F  pVP                  V4       K  	  \        P                  ! R4       R# )zWriting build.ninjar  zbuild.ninja generatedN)r    r  r   r   r  )r   r   r  s   && r=   r  NinjaBackend.write_builds  s6    T007LMAGGG N23r?   c                   V ^8  d   QhRR/# r  r;   )r<   s   "r=   r>   r`    s       r?   c                	    V P                  \        R 4      4       \        V P                  RRR4      pV P	                  V4       R# )z&Phony build target, always out of dater  r  r   N)r  r   r   r   rx  r^  s   & r=   r  NinjaBackend.generate_phony  s8    |,TUV !1!17GRHtr?   c                    V ^8  d   QhRRRR/# )r7   r  z	build.Jarr:   r}   r;   )r<   s   "r=   r>   r`    s     4h 4h) 4h 4hr?   c           
     	2   VP                  4       p\        P                  P                  V P	                  V4      V4      pVP                  4       pVP                  4       pVP                  R ,          pRpRpRp	Rp
VP                  4       pVR8w  d   Rp	V P                  V4      p. pVP                  4        FC  p\        P                  ! V4      pVP                  R4      '       g   K2  VP                  V4       KE  	  V P                  W4      pV P!                  WM,           WV4      pV Uu. uF2  p\        P                  P                  V P#                  V4      V4      NK4  	  pp\        P                  P                  V P#                  V4      RR4      p\        P                  P                  V P$                  P'                  4       V4      p\        P(                  ! \        P                  P+                  V4      R	R
7       \-        VRRR7      ;_uu_ 4       p\/        VP0                  4      '       d   VP3                  R4       VP0                   Uu. uF@  p\        P                  P                  V P	                  V4      VP                  4       4      NKB  	  ppVP3                  RP                  V4      4       VP3                  R4       RRR4       RpWx,           V	,           V
,           .pVP                  V4       V	R8w  d   VP                  V4       VP                  V P5                  V4      4       VRV P#                  V4      R.,          p\7        V P8                  VV. 4      pVP;                  V4       V'       dA   VP=                  V P?                  \A        V P#                  V4      4      V4      ^ ,          4       VPC                  RV4       V PE                  V4       V PG                  WVWM4       R# u upi u upi   + '       g   i     ELA; i)javar   rH   r   r  r0  .javazMETA-INFzMANIFEST.MFTr  r  r  r  zClass-Path: r_   r^   Njava_LINKER-Cr  ARGS)$get_filenamer  r  r   r$  r?  get_java_resourcesr   get_main_classr:  r  r   r6  endswithr  determine_java_compile_argsgenerate_java_compiler  r  r  r  dirnamer  anyr'  r   r  r   r   r	  r  )_NinjaBackend__generate_sources_structurer   r  rx  rs  )r   r  rG  outname_relsrc_list	resourcesr  r   rH   r0  r  
main_classr\  gen_src_listr9  r  compile_args
class_listr   class_dep_listmanifest_pathmanifest_fullpathmanifestr   cp_pathsjar_rulecommandsrz  s   &&                          r=   r   NinjaBackend.generate_jar_target  s=   ##%ggll4#6#6v#>F%%'--/	##F+**,
A !==fE(--/G..w7G((##G, 0
 77I//0G[gh
XbcXbST"'',,t'B'B6'JANXbcT%@%@%H*VcdGGLL)9)9)G)G)I=Y
BGGOO$56F#S7;;x6&&''~.\b\o\op\oWXBGGLL)<)<Q)?AQR\opsxx12NN4  < !EAIM?&7OOJ'0089 	T466v>DD !1!1;"M^$d??TE`E`agEh@iktuvwxyfh't//,PXg9 d q <;;s%   ,8O;;PAP 3P PP	c                   V ^8  d   QhRR/# )r7   r:   z!T.Tuple[T.List[str], T.List[str]]r;   )r<   s   "r=   r>   r`    s      4U r?   c                	P   . p. pVP                    EF  p\        P                  P                  V P                  VP
                  V4      pVP                  R 4      '       d   RV,           pEM#VP                  R4      '       g   VP                  R4      '       d   \        P                  P                  \        P                  P                  V4      4      ^ ,          R ,           p\        P                  P                  V P                  V4      V4      p\        V P                  VRV4      p	V	P                  RRWX.4       V	P                  RRV 24       V P                  V	4       VP                  V4       RV,           pM\        R	V R
24      hVP                  V4       EK  	  W#3# )z
.resourcesz
-resource:z.txtz.resxr  r  resgenr[  zCompiling resource zUnknown resource file r  )r  r  r  r   rA  r'  r  rJ  basenamer  r   r   r  rx  r  r)   )
r   r  r   r   r  rel_sourcefiler   	ofilebase	ofilenamerz  s
   &&        r=   generate_cs_resource_tasks'NinjaBackend.generate_cs_resource_tasks  sL   !!AWW\\$*;*;V]]ANNzz,'' >1F##qzz'':':GG,,RWW-=-=a-@A!D|S	GGLL)D)DV)LiX	()9)99FVXfgi(N)NOf(;N;K&LMt$I& 9,&)?s!'DEEKKN "  zr?   c                    V ^8  d   QhRRRR/# r7   r  r  r:   r}   r;   )r<   s   "r=   r>   r`    s     *j *j): *jt *jr?   c                	   VP                  4       p\        P                  P                  V P	                  V4      V4      pVP                  4       pVP                  R ,          pV Uu. uF;  p\        P                  P                  VP                  V P                  4      4      NK=  	  pp. pV P                  W4      p	WP                  R ,          ,          p	\        V\        P                  4      '       d   V	P                  R4       M=\        V\        P                   4      '       d   V	P                  R4       M\#        R4      hV P%                  V4      w  rW,          p	W,          pWP'                  V4      ,          p	VP(                   Fh  p\        P                  P                  V P	                  V4      VP                  4       4      pWP+                  V4      ,          p	VP                  V4       Kj  	  RV	9   d   W3R,           .pMV.pV P-                  V4      p. pVP/                  4        F  pVP1                  4       P3                  R4      '       d/   VP                  \        P                  P                  V4      4       VP                  \        P                  P                  V4      4       K  	  VP5                  4        F"  pV	P7                  VP+                  4       4       K$  	  \9        V P:                  WP=                  V4      VV,           4      pVP?                  V4       VPA                  RV	4       V PC                  V4       V PE                  WWV4       R# u upi )	r  z-target:exez-target:libraryzUnknown C# target type.-gz.mdbz.csr  N)#r  r  r  r   r$  r?  r   rc  r@  rA  generate_basic_compiler_argsr  r   r   
Executabler  r*  r   r  get_output_argsr'  get_link_argsr:  r  rK  r  get_external_depsextend_directr   r   r  r	  r  rx  rs  )r   r  rG  r  r  r  rR   rel_srcsr   r  resource_argsresource_depsr   lnamer=  r\  generated_rel_srcsr9  r  rz  s   &&                  r=   r  NinjaBackend.generate_cs_target  s   ##%ggll4#6#6v#>F%%'##D)T\]T\qBGG$$Q%6%6t7H7H%IJT\]44VF%%d++fe..//OOM* 3 344OO-. !:;;)-)H)H)P&!,,[99$$AGGLL!4!4Q!79IJE..u55HKK % 8"&$89G"mG ==fE(--/G}}''.."))"''*:*:7*CDKK((12 0
 ++-C""3#4#4#67 . !!1!17<V<VW_<`bjmb  ATfh't//(VhiK ^s   'AM#c                   V ^8  d   QhRR/# r7   r:   r   r;   )r<   s   "r=   r>   r`  +  s      { r?   c                	   . pV P                  W4      pW1P                  4       ,          pW2P                  V P                  V4      4      ,          pW1P	                  4       ,          pVP                  4       p\        P                  P                  V P                  V4      \        P                  ,           pV\        P                  P                  V4      \        P                  ,           ,          pVP                   Fk  pVP                  4        FT  pV\        P                  P                  V P                  VP                  V4      \        P                  ,           ,          pKV  	  Km  	  VR V.,          pV# )z-sourcepath)r  get_java_argsr  r  get_classpath_args
get_subdirr  r  r   rA  pathseprc  include_dirsget_incdirscurdir)r   r  r  r   r  
sourcepathr   idirs   &&&     r=   r  (NinjaBackend.determine_java_compile_args+  s   00B$$&&(()D)DV)LMM))++""$WW\\$"3"3V<rzzI
bgg&&v.;;
$$Abggll4+<+<ahhMPRPZPZZZ
 ( % 	
++r?   c                   V ^8  d   QhRR/# r   r;   )r<   s   "r=   r>   r`  :  s     ! !S !r?   c                	   VP                    Uu. uF@  p\        P                  P                  V P	                  V4      VP                  4       4      NKB  	  ppV P                  V4      pVP                  4        F-  pVP                  R 4      '       g   K  VP                  V4       K/  	  . p	. p
. pV F  pVP                  V P                  4      pV	P                  V4       VP                  RR R,           pV
P                  V4       \        P                  P                  V P                  V4      V4      pVP                  V4       K  	  \        V P                  WP!                  V4      V	4      pVP#                  V4       VP%                  RV4       VP%                  RV P'                  V4      4       V P)                  V4       V
# u upi )r  Nclassr  FOR_JAR)r'  r  r  r   r$  r  r:  r  r  r  r@  rA  rG  r  r   r   r  r	  r  r  rx  )r   r7  r  r  r   r   r   r\  r9  r  plain_class_pathsrel_objsr1  plain_class_pathrel_objelements   &&&&&           r=   r  "NinjaBackend.generate_java_compile:  s   PVPcPcdPc1T003Q^^5EFPcd ==fE(--/G((G$ 0 C))$*;*;<GOOG$"yy"~7$$%56ggll4#>#>v#FHXYGOOG$  $D$4$4h@Z@Z[c@dfno&D$<$<V$DEw  - es   AGc                   V ^8  d   QhRR/# r  r;   )r<   s   "r=   r>   r`  S  s     A AD Ar?   c                	N    R pRR.pRpV P                  \        W. V4      4       R# )r  jar$ARGSzCreating JAR $outN)r{  r   )r   r   r   r   s   &   r=   generate_java_linkNinjaBackend.generate_java_linkS  s+    '")ir;?@r?   c                    V ^8  d   QhRRRR/# )r7   r  r  r:   r   r;   )r<   s   "r=   r>   r`  Y  s      *;  r?   c                H   \        4       p\        P                  ! VP                  VP                  4       F  p\        V\        P                  4      '       d   VP                  4       '       g   K;  VP                   F  pVP                  R4      R,          \        P                  R,          9   g   K7  VP                  f   KG  VP                  p\        P                  P!                  V P#                  V4      V4      pVP%                  V4        K  	  K  	  \'        V4      # )z
Peek into the sources of BuildTargets we're linking with, and if any of
them was built with Vala, assume that it also generated a .vapi file of
the same name as the BuildTarget and return the path to it relative to
the build directory.
r  valar   )r   r%  r&  r'  r(  r   r   r  is_linkable_targetrl   r   r   r  	vala_vapir  r  r   r$  r  r   )r   r  r  r  r   vapinamefullnames   &&     r=   determine_dep_vapis NinjaBackend.determine_dep_vapisY  s     #-,??6#6#68Q8QRCsE$5$5663;Q;Q;S;S[[773<#y'>'>v'FF}}0#&==#%77<<0C0CC0H(#S

8, ! S F|r?   c                    V ^8  d   QhRRRR/# )r7   r  r  r:   zyT.Tuple[T.MutableMapping[str, File], T.MutableMapping[str, File], T.Tuple[T.MutableMapping[str, File], T.MutableMapping]]r;   )r<   s   "r=   r>   r`  m  s     3/ 3/$5 3/L3/r?   c                j   \        4       p\        4       p\        4       p\        4       pVP                  4        F  p\        V\        4      '       g   \	        RV: RV: 24      hVP                  V P                  4      pVP                  R4      '       d   TpMVP                  R4      '       d   TpMTpWhV&   K  	  VP                  4        F  p	V	P                  4        F  pV P                  WV4      pVP                  R4      '       d   TpMVP                  R4      '       d   TpMTpWx9   ds   W,          V	Jdg   RP                  V\        V	4      P                  V	P                  W,          P                  \        W,          4      P                  4      p
\	        V
4      hWV&   K  	  K  	  W#WE33# )aM  
Splits the target's sources into .vala, .gs, .vapi, and other sources.
Handles both preexisting and generated sources.

Returns a tuple (vala, vapi, others) each of which is a dictionary with
the keys being the path to the file (relative to the build directory)
and the value being the object that generated or represents the file.
r>  z$ must be of type mesonlib.File, not z.vapizNDuplicate output {0!r} from {1!r} {2!r}; conflicts with {0!r} from {4!r} {3!r})z.valaz.gs)r   r?  r   r   r)   r@  rA  r  r  r  r!  r<   typerm   r   )r   r  r  vapiothers	othersgenrR   r  srctyper8  r  s   &&         r=   split_vala_sourcesNinjaBackend.split_vala_sourcesm  s    -8M,7M.9m1<	A a&&&)?uDhijhm'noo!!$"3"34Azz*++G$$ AJ ! --/F'')11!Q?::.//"GZZ(("G (G<GJf$<#VAtF|'<'<fkk$+JOOT'*5E5N5NP  +3//#
% * 0( F...r?   c                    V ^8  d   QhRRRR/# r7   r  r  r:   zNT.Tuple[T.MutableMapping[str, File], T.MutableMapping[str, File], T.List[str]]r;   )r<   s   "r=   r>   r`    s      |6 |6,= |6Z|6r?   c                L   V P                  V4      w  r#p. pV'       g   \        RVP                  : R24      hVP                  R,          pV P	                  V4      p. p. p	\        V4      p
\        P                  P                  V P                  VP                  4       4      pVP                  4        EF  w  rV
P                  V4       \        V\        P                  \        P                   34      '       g   VP"                  '       Ed)   \        P                  P%                  \        P                  P'                  V4      4      ^ ,          R,           p\        P                  P                  V P(                  P+                  4       VP                  4       4      p\        P                  P                  V P(                  P-                  4       V4      p\/        VV4      '       dN   \1        V4      P2                  P5                  V4      p\        P                  P                  \7        V4      V4      pM\        P                  P                  V P                  VP                  4       4      pVP9                  V4      '       dM   \        P                  P%                  \        P                  P;                  VV4      4      ^ ,          R,           pMJ\        P                  P%                  \        P                  P'                  V4      4      ^ ,          R,           p\        P                  P                  W~4      pVP                  V4       V	P                  V4       EK  	  V P=                  W4      pVVP?                  V PA                  VR4      4      ,          pVRV.,          pVRV.,          pVPC                  4       '       Ed@   VRVP                  .,          pVPD                  ew   \        P                  P                  V PG                  V4      VPD                  4      pVR	V.,          pV PI                  V4      '       d   VR
.,          pV	P                  V4       VPJ                  e~   \        P                  P                  V PG                  V4      VPJ                  4      pVR\        P                  P                  RVPJ                  4      .,          pV	P                  V4       \M        VPN                  4      ^8  d?   VPN                  ^,          RJ d(   V P(                  PQ                  4       VPN                  ^&   \M        VPN                  4      ^8  d^   VPN                  ^,          RJ dG   \        P                  P                  V P(                  PS                  4       RR4      VPN                  ^&   VPT                  Ee>   \        P                  P                  V PG                  V4      VPT                  4      pVR\        P                  P                  RVPT                  4      .,          pV	P                  V4       VPW                  R4      p\        V\        PX                  4      '       d   VRVP[                  4       .,          p\M        VPN                  4      ^8  d]   VPN                  ^,          RJ dF   \        P                  P                  V P(                  PS                  4       R4      VPN                  ^&   . pV^,          P]                  4        F  p\        V\^        P`                  4      '       g   K%  V Pc                  V4      w  pVRV,           .,          pVPd                   F  pVV.,          pK  	  VPg                  4       w  pV\        P                  P                  V PG                  V4      V4      .,          pK  	  \i        V4       F  pVRV 2.,          pK  	  V Pk                  V4      pVV,          pVPm                  V Po                  V4      4       VVPq                  R4      ,          p\s        V Pt                  V	V Pw                  V4      V
V,           4      pVPy                  RV4       VP{                  \        P                  P                  V PG                  V4      VP                  4      4      pVPy                  RV4       VP}                  V4       V P                  V4       V P                  WVV
. 4       V^ ,          V^,          V3# )z?Vala is compiled into C. Set up all necessary build steps here.zVala library z# has no Vala or Genie source files.r  z.c
b_coloroutz--directoryz	--basedirz	--libraryz--headerz--use-headerz--vapiz..Tr  z--girsharedz--shared-libraryzgir-1.0z--gresources=z--gresourcesdir=r  r  )Ar  r)   r   r   r  r   r  r  r   rA  r  itemsr  r   r   r  r(   is_builtrJ  r  r  rF  r  r%   r
   parentr  r9   r   relpathr  get_colorout_argsr  r  r"  r$  r  r  rE   install_dirget_includedirget_datadirvala_girr   r*  r  r  r   GResourceTargetget_custom_target_sourcessource_dirsr  r   r  r-  r!  get_extra_argsr   r   r  r  depfile_for_objectr	  rx  rs  ) r   r  vala_srcvapi_src	other_srcextra_dep_filesvalac	c_out_dir
vala_c_srcvalac_outputs	all_files
srcbasedir	vala_filer8  vala_c_fileabs_srcbasedirabs_vala_filevala_c_subdirpath_to_targetr   hnamer  girnameshared_target	gres_dirsgres_xmlrb  gres_cgres_dirdependency_vapisr  r   s    &&                              r=   r  "NinjaBackend.generate_vala_compile  s    +/*A*A&*I'Y"]6;;/Ad#eff  (//7	"$
 "N	WW\\$"3"3V5F5F5HI
#+>>#3YY' &5#5#5u7J7J"KLLPVP_P_P_ gg..rww/?/?	/JKANQUU!#d.>.>.M.M.OQWQbQbQd!e "T-=-=-K-K-My Y!.-@@$,]$;$B$B$N$N~$^M"$'',,s=/A;"OK!#d.?.?ARARAT!U''77"$''"2"2277??9n3]"^_`"adh"hK"$''"2"22773C3CI3N"OPQ"RUY"YK'',,y>Kk*  -A $4D 00?''(>(>v|(TUU 		**j))$$&&[&++..D!!-T%8%8%@&BTBTUU++==((
 ^,,D$$U++77<<(;(;F(CVEUEUV 277<<f6F6F#GHH$$X.6%%&*v/A/A!/D/L(,(8(8(G(G(I""1%6%%&*v/A/A!/D/L(*T5E5E5Q5Q5SU[]c(d""1%*'',,t':':6'BFOOT"'',,tV__"EFF$$W- &

8 4mU-@-@AA/1K1K1MNNDv))*Q.63E3Ea3HD3P,.GGLL9I9I9U9U9WYb,cF&&q)	l))+F&'"9"9:: ::6B	8344"("4"4J*-I #5
 !,,.BGGLL1D1DV1Lf$U#VV , #9-H'z233D .33F;++t;;FCD%%f--#D$4$4m$($>$>u$E$-0@$@B 	&**277<<8K8KF8SU[U`U`+abG,(w//tYPRS|Yq\:55r?   c                    V ^8  d   QhRRRR/# r  r;   )r<   s   "r=   r>   r`     s$     EA EA0A EAZEAr?   c                	   \        4       p\        4       p. pVP                  R,          p. pWeP                  4       ,          pWeP                  V P	                  VR4      4      ,          pWeP                  V P	                  VR4      4      ,          pWeP                  WP                  4      ,          pWeP                  WP                  4      ,          pW`P                  P                  WQP                  4      ,          pW`P                  P                  WQP                  VP                  4      ,          pWaP                  R4      ,          pV P	                  V\        RVP                  R7      4      p. pVP                  4        EF  p	V	P!                  R4      '       d   \"        P$                  P'                  V P)                  V4      V	 RV 24      p
\+        V P,                  V
.V P/                  V4      V	P1                  V P2                  P5                  4       V P2                  P7                  4       4      .4      pVP9                  RV4       V P;                  V4       VP=                  V
4       VP=                  V4       K  WV	P?                  V P@                  4      &   EK  	  . pVPC                  4        EF
  pVPE                  4        EF  p\G        V\H        4      '       d1   \"        P$                  P'                  V P)                  V4      V4      pM.\"        P$                  P'                  VPK                  4       V4      pVP!                  R4      '       d   \"        P$                  P'                  V P)                  V4      V RV 24      p
\+        V P,                  V
.V P/                  V4      V.4      pVP9                  RV4       V P;                  V4       VP=                  V4       VP=                  V
4       EK4  \L        PN                  PQ                  VPK                  4       V4      W>&   \        PR                  ! V4      '       d   EK  \        PT                  ! V4      '       d   EK  \        PV                  ! V4      '       d   EK  \X        PZ                  ! V4      '       d   EK  VP=                  V4       EK  	  EK  	  V F  pVP]                  V4       K  	  W#V3# )	z7Generate rules for transpiling Cython files to C or C++r  r)  optimizationcython_language)rZ  z.pyxr  r  )/r   r   get_always_argsget_debug_argsr  get_optimization_argsget_option_compile_argsr  get_option_std_argsr   get_global_argsr  get_project_argsr  r&   r?  r  r  r  r   r  r   r   r  ra  r  rF  r  r  rx  r  r@  rA  r  r  r   r(   r  r   r   r#  r  r  r   r   r  r  )r   r  static_sourcesr\  cython_sourcesr  r   r  pyx_sourcesr1  r  r  r/  genssrcrE  s   &&              r=   r  &NinjaBackend.generate_cython_transpile   s    7Bm9D&(!!(+&&((%%d&<&<VW&MNN,,T-C-CFN-[\\..v7H7HII**63D3DEE

**63E3EFF

++F4E4EvGYGYZZ%%h//$$VY7HRXRdRd-ef%%'C||F##d&A&A&&IcURSTWSX>Z+$$vh..v6&&t'7'7'F'F'H$JZJZJhJhJjkln   .w'%%f-""7+ILs2243D3DEF ( //1C)c=1177<<(C(CF(KTRD77<<(8$?D==((WW\\$*E*Ef*MRVQWWXY\X]_F/((6(226: G $$VT2NN7+&&w/"))&1.6mm.K.KCNNL\^b.c%+ %..t44 ) 3 3D 9 9 ) 4 4T : : ' 9 9$ ? ?#**401 * 24 "F, " .@@r?   c               $    V ^8  d   QhRRRRRR/# )r7   r1  r3   r  r   r:   r}   r;   )r<   s   "r=   r>   r`  g  s!       t  r?   c                6   \        V\        4      '       d<   VP                  V P                  P                  V P                  P
                  4      pMTp\        V P                  \        V4      .RV.4      pVP                  V4       V P                  V4       R# )zCCreate a target to copy a source file from one location to another.rq  N)r   r   ra  r  rb  r  r   r   r9   r  rx  )r   r1  r  instrrz  s   &&&  r=   _generate_copy_target"NinjaBackend._generate_copy_targetg  sw    c4  %%d&6&6&A&A4CSCSC]C]^EE !1!1CK=+PUwW% tr?   c               (    V ^8  d   QhRRRRRRRR/# )	r7   rootr   structured_sourceszbuild.StructuredSourcesmain_file_extzT.Union[str, T.Tuple[str, ...]]r:   z%T.Tuple[T.List[str], T.Optional[str]]r;   )r<   s   "r=   r>   r`  q  s+     % % %Kb %4S%*O%r?   c           
     	   R p. pVP                   P                  4        EF;  w  rgV EF.  p\        V\        4      '       d}   W,          \	        VP
                  4      P                  ,          p	V P                  W4       \        V	4      p
VP                  V
4       Vf   V
P                  V4      '       d   T
pK  K  K  VP                  4        F  pW,          V,          p	\        V	4      p
VP                  V
4       V P                  \        \	        VP                  4      V,          4      V	4       Ve   Ki  V
P                  V4      '       g   K  T
pK  	  EK1  	  EK>  	  WT3# r   )rl   r  r   r   r   rG  r   r>  r9   r  r  r  r'  )r   rA  rB  rC  
first_filer   r  filesr^  r   out_sr  s   &&&&        r=   __generate_sources_structure)NinjaBackend.__generate_sources_structureq  s     '+
!#	-55;;=KDdD))+TZZ(8(=(==C..t9HE$$U+!)enn].K.K%*
 /L) "--/"kAo #C!((/223tDKK7H17L3MsS%-%..2O2O).J 0  >" $$r?   c               <    V ^8  d   QhRRRRRRRRRRRR	R
RRRRR/	# )r7   r   r9   main_rust_filer   r   rI  rJ  from_subprojectr\   rQ  r   r   rM  r:   r}   r;   )r<   s   "r=   r>   r`    sU     ' 'C ' 'L ',/'>A'15'N]' '6' ;?'r?   c	                	   \         P                  ! \        V4      R  4      p	V	'       g   RMV	P                  R4      R,          p
. p\	        V4      pV F\  pVR8X  d   VP                  \        V4      4       K&  VP                  R4      '       g   K?  VP                  V\        R4      R 4       K^  	  \        \        V P                  4      V P                  V4      VVVV
VVV'       * VRJVR7      pWP                  V&   R# )c                $    V P                  R 4      # )z	--edition)r   )r   s   &r=   rI   6NinjaBackend._add_rust_project_entry.<locals>.<lambda>  s    PQP\P\]hPir?   2015=z--cfgN)rP  rO  rQ  r   )r   firstreversedr   iterr  nextr   rE   rE  rk  _get_rust_crate_name)r   r   rK  r   rI  rJ  rL  rQ  r   raw_editionrL  rN  arg_itrr8   r<  s   &&&&&&&&&      r=   _add_rust_project_entry$NinjaBackend._add_rust_project_entry  s     (0~~htnFi'j/:@Q@QRU@VWY@Z#':Cg~

4=)((

3s7|}-.	    !%%d+$3 3/t;"7
 "'r?   c                    V ^8  d   QhRRRR/# )r7   rJ  r9   r:   r;   )r<   s   "r=   r>   r`    s     + +# +# +r?   c                	    V P                  R R4      P                  RR4      P                  RR4      pVP                  R^4      ^ ,          # )-r  r_   r  +)rU   r   )rJ  
crate_names   & r=   rV  !NinjaBackend._get_rust_crate_name  sI     !((c2::3DLLSRUV
Q'**r?   c               $    V ^8  d   QhRRRRRR/# )r7   r  r  
dependencyr-   r:   r9   r;   )r<   s   "r=   r>   r`    s(     A A*; A AVY Ar?   c                	   V P                   P                  VP                  R 4      pVfE   \        P	                  VP                  4      pV P                   P                  W1P                  4      p\        P	                  V4      # r   )rust_dependency_mapr   r   r^  rV  )r  rb  crate_name_rawdependency_crate_names   &&  r=   _get_rust_dependency_name&NinjaBackend._get_rust_dependency_name  sg    3377
N!$0$E$Ejoo$V!#77;;<QSbSbcN00@@r?   c                    V ^8  d   QhRRRR/# )r7   r  r  r:   zT.Tuple[T.List[str], str]r;   )r<   s   "r=   r>   r`    s     :) :),= :)B[ :)r?   c                	   . pR pVP                   '       Ed   VP                   P                  4       '       d[   V P                  \        V P	                  V4      4      R,          VP                   R4      w  rCVf   \        RVP                  4      hEMVP                   P                  R,           EF'  p\        V\        4      '       d4   VP                  R4      '       d   VP                  V P                  4      pM\        V\        4      '       da   VP                  4        FK  pVP                  R4      '       g   K  \        P                   P#                  V P	                  V4      V4      p Ma	  M^VP                  4        FJ  pVP                  R4      '       g   K  \        P                   P#                  VP%                  4       V4      p M	  Vf   EK(   M	  . pVP                   P'                  4        F  p\        V\        4      '       d-   VP)                  VP                  V P                  4      4       KE  TP+                  VP                  4        Uu. uF8  p\        P                   P#                  V P                  VP,                  V4      NK:  	  up4       K  	  V P.                  P1                  V4       VP+                  V4       W#3# VP3                  4        F=  p	Ve   K	  V	P                  R4      '       g   K"  V	P                  V P                  4      pK?  	  VP5                  4        F  pVP                  4        F  p	\        V\        4      '       d1   \        P                   P#                  V P	                  V4      V	4      p
M.\        P                   P#                  VP%                  4       V	4      p
Vf   V
P                  R4      '       d   T
pVP)                  V
4       K  	  K  	  W#3# u upi )N
structuredz.rsz9Could not find a rust file to treat as the main file for r   )rB  
needs_copyr  r   r  r   r   rl   r   r   r  r@  rA  r(   r  r  r  r   r  as_listr  r-  r'  rh  r  r?  r  )r   r  r   rK  _odsghr  rR   r   rG  s   &&         r=   generate_rust_sources"NinjaBackend.generate_rust_sources  s   !#	
 +/$$$((3355'+'H'H//7J9;GJHIOIbIbdi(k$!)()dflfqfqrr *  22::2>>A!!T**::e,,-.->->t?P?P-QN#A}55!"A zz%0013d>Y>YZ`>acd1e % "1
 "#A zz%0013allna1P % "1 &1 ?" 22::<A!!T**A$5$5d6G6G$HI./mmo%?.= &(WW\\$2C2CQXXq%Q.=%? @	 = ''..t4T",,##%A%!**U*;*;!"!2!243D3D!E & --/A]]_a//GGLL)D)DV)LaPEGGLL;E!)ennU.C.C%*N  ' % 0 (('%?s   >O5
c          
     ,    V ^8  d   QhRRRRRRRRR	R
/# )r7   r  r  rustcr   src_crate_typer9   r   r   r:   r   r;   )r<   s   "r=   r>   r`    s3      -> x ad (7CNr?   c                	   \         P                  ! WV P                  4      pV P                  V4      pVP	                  R V.4       VP
                  R9   dH   VP	                  VP                  4       4       V\         P                  ! WV P                  4      ,          pWPP                  W4      ,          pVRV P                  VP                  4      .,          pV'       d   WRP                  Wd4      ,          pWRP                  V4      ,          pVRRVP                  4       ,           .,          pWQP                  R4      ,          pV# )z--crate-typez--crate-namer  z	metadata=r  >   bindylibcdylib)r   get_base_compile_argsr  r  r-  rust_crate_typeget_linker_always_argsget_base_link_argsr  rV  r   get_dependency_gen_argsr  r  r  )r   r  rt  ru  r   r   rJ  s   &&&&&  r=   get_rust_compiler_args#NinjaBackend.get_rust_compiler_args  s    ..vd>N>NO..v6^^45 !!%??KK4467I00@P@PQQD11&@@!:!:6;;!GHH11+GGD%%k22{V]]_455%%f--r?   c               (    V ^8  d   QhRRRRRRRR/# )	r7   r  r  rt  r   r  r   r:   z2T.Tuple[T.List[str], T.List[RustDep], T.List[str]]r;   )r<   s   "r=   r>   r`  	  s2     C( C(6G C(PX C(2=C(BtC(r?   c           	     		  aaa . p. p. oRR VVV3R lllpV F(  pSP                  RV 24       VP                  V4       K*  	  \        P                  ! 4       oVP                  P	                  4       pVP                  4       p	V	 EF1  p
SP                  V
P                  4       VP                  V P                  V
4      4       \        V
\        P                  4      '       d   VP                  V
P                  4       V
P                  4       '       d   V
\        P                  ! VP                   VP"                  4      9  d   K  V P%                  W4      pSRRP'                  WP)                  V
4      4      .,          oVP                  \+        WP,                  V
P.                  ,          P0                  4      4       EK>  V P3                  V
4      pWP"                  9   p\        V\        P                  4      '       g7   \        V\        P4                  4      '       d>   SP7                  4       '       d(   \        V
\        P                  4      pV! WVR7       EK  V'       d<   SP8                  P;                  V.4      pSV Uu. uF  pRV 2NK
  	  up,          oEK  SP                  RV 24       EK4  	  V F  pVP=                  4        F  pVP?                  R4      '       d   SP                  V4       K-  \A        V4      '       dp   \        V\        P                  4      '       d   VPC                  R4      pV! VV4       Kz  \D        PF                  PI                  V4      w  ppSP                  V4       SP                  RV 24       K  	  K  	  S F#  p
T
;'       g    Rp
SP                  RV
 24       K%  	  SP                  R	 VPK                  R
4       4       4       \L        ;QJ d    R V	 4       F  '       g   K   RM	  R M! R V	 4       4      p\L        ;QJ d    R V	 4       F  '       g   K   RM	  R M! R V	 4       4      pVPN                  R9   d   RpM6V PQ                  VR4      '       d   VPN                  R8X  d   \S        R4      hRpV'       d   SRR.,          oV'       g	   V'       d   SV PU                  VS4      ,          oWES3# u upi )Fc               (    V ^8  d   QhRRRRRRRR/# )r7   libnamer9   staticr\   bundler:   r}   r;   )r<   s   "r=   r>   BNinjaBackend.get_rust_compiler_deps_and_args.<locals>.__annotate__  s(     	0 	03 	0 	0d 	0t 	0r?   c                  < T pV'       d   R MRp. p\         P                  P                  V 4      w  r`SP                  V4       V'       g   V'       d   VP	                  R4       S	P                  4       '       d   VP	                  R4       M'S	P                  V 4      p V f   \        RV RV R24      hV'       d    VRR	P                  V4      ,           ,          pSP	                  R
V RV  24       R# )r  rx  z-bundlez	+verbatimNzrustc does not implement '-lz:+verbatim'; cannot link to 'z' due to nonstandard namera   ,-lrQ  )	r  r  r   r  r  has_verbatimlib_file_to_l_argr   r   )
r  r  r  orig_libnametype_	modifiersdir_r   linkdirsrt  s
   &&&    r=   _link_libraryCNinjaBackend.get_rust_compiler_deps_and_args.<locals>._link_library  s    "L &HGEIGGMM'2MDLLf  +!!##  -11':?(+GwNklxky  zS  *T  U  Usxx	222KK"UG1WI./r?   -Clink-arg=z--externz{}={})r  -Lr  c              3  ,   "   T F
  pR V 2x  K  	  R# 5i)r  Nr;   )r&  r   s   & r=   r'  ?NinjaBackend.get_rust_compiler_deps_and_args.<locals>.<genexpr>n  s     S/R!k!%/Rs   r  c              3  V   "   T F  p\        V\        P                  4      x  K!  	  R # 5ir   )r   r   r*  r&  r  s   & r=   r'  r  p  s      Zksje.A.ABBks   ')Tc              3  p   "   T F,  pVP                  4       ;'       d    VP                  R 8H  x  K.  	  R# 5i)rx  N)r  r{  r  s   & r=   r'  r  q  s=      #;.9s $'==? $F $F'*':':g'E$F.9s   66rust_dynamic_std	staticlibz6rust_dynamic_std does not support staticlib crates yetr  zprefer-dynamicF)z.az.lib>   rx  
proc-macro)+r  r   r   external_depsrY  r  r  r'  get_dependency_filenamer   r   r)  r-  uses_rust_abir%  r&  r'  r(  rg  r<   r  r;  rk  r   rF  get_target_filename_for_linkingr  get_crt_staticrv  get_link_whole_forr  r   r   r  r  r  r   get_used_stdlib_argsr  r{  r  r   get_build_rpath_args)r   r  rt  r  r   project_depsr  r  r  target_depsrU  d_namelib
link_wholer  link_whole_argsr   r0  r  r  has_shared_depshas_rust_shared_depsr   r  s   &&f&                  @@r=   get_rust_compiler_deps_and_args,NinjaBackend.get_rust_compiler_deps_and_args	  s   (*	0 	0( AKK+aS)*KKN  &&(,,113--/A LL"KK44Q78!U0011$$Q__5  IOOF,?,?AZAZ[[ 77BW^^F<T<TUV<W%XYY##GF4D4DQVV4L4R4R$ST 66q9C777J&%"5"566:feN^N^;_;_didxdxdzdz#Au':':;c*=="',,"A"A3%"HODOq;qc*ODDk#/0Y \ A__&<<%%KKN]]!&%*=*=>>!"N!;%a0  ggmmA.GD!LL&k!-. '   ASAKK"QC!  	Sv/J/J6/RSS#ZkZ###ZkZZ"s #;.9#;sss #;.9#;  ; !!%<< $( ##F,>??%%4 %%]^^#' T+,,D2D--fe<<D4''q Es   	Sc          
     ,    V ^8  d   QhRRRRRRRRRR	/# )
r7   r  r  rJ  r9   r  r   r  r:   r}   r;   )r<   s   "r=   r>   r`    s:     5f 5f+< 5f3 5fZe 5f1<5fAE5fr?   c           
     	`   V P                  V4      w  rVVf   \        R4      h\        P                  ! RVP                  R,          4      pVP                  4       p\        P                  P                  V P                  V4      VP                  R,           4      p	WP                  WVP                  V	4      ,          pV P                  WV4      w  rpW,          pR pVP                  R8X  d   V P                  V4      pV P                  VP                  \        P                  P!                  \        P                  P                  V P"                  P$                  V4      4      WP                  V\'        VP(                  4      VV4       V P+                  V4      p\-        V P.                  W.V4      pV'       d   VP1                  V4       V'       d   VP1                  V4       V
'       d   VP3                  V
4       VP5                  RV4       VP5                  RV	4       V P7                  V4       \9        V\:        P<                  4      '       d   V P?                  V4       V PA                  WW.. 4       VPB                  '       Ed#   VPB                  PD                  f   Q hVPG                  4       pVPI                  4       pWP                  VPB                  PD                  VVP                  4      ,          pV PK                  VPB                  PD                  4      w  pp\M        VV,           4      pV P                  VPB                  PD                  VV4      w   ppW,          pVPO                  4       V.,           VPB                  PP                  ,           VPB                  n(        R # R # )NzKA Rust target has no Rust sources. This is weird. Also a bug. Please reportr2   r  z.dr  r  	targetdep))rq  RuntimeErrorTcastr   compiler_argsr  r  r   r  r   r  r{  r  get_target_filename_absrY  abspathr  r  r\   r  r  r   r   r  r	  r  rx  r   r   r*  generate_shsymrs  doctestsr  get_rustdocget_exe_argsr  r"   r  cmd_args)r   r  rJ  r  r  r   rK  rt  r   r   r   r  	deps_argsrQ  compiler_namer  rustdocr  r  s   &&&&&              r=   r  !NinjaBackend.generate_rust_target  s   $($>$>v$F!	!lmm~v'7'7'?@""$'',,t::6BFKKRVDVW++F6;Q;QSZ[[(,(L(LV\d(e%I $!!\1$($@$@$H!$$V[[%'WW__RWW\\$BRBRB\B\^l5m%n%)+A+A;%)&*;*;%<%:%1	3 2259#D$4$4kR`a  +  !34OOD!&g.wfe1122'//tEUWYZ?????))555'')G'')D//0F0FQWQgQghhD++FOO,B,BCDAq"8a<0H #BB6??CYCY[bdlmOAq)D'+~~'7>:J'JV__MeMe'eFOO$ r?   c                    V ^8  d   QhRRRR/# )r7   r  r   r:   r9   r;   )r<   s   "r=   r>   r`    s     9 9] 9s 9r?   c                	(    \        R R4      V ,          # )
_FOR_BUILDr   )r   )r  s   &r=   get_rule_suffixNinjaBackend.get_rule_suffix  s    ,+K88r?   c               (    V ^8  d   QhRRRRRRRR/# )r7   rO  r9   r  r   moder:   r;   )r<   s   "r=   r>   r`    s0     B B# BM BQT Bfi Br?   c                	2    V R V V P                  V4       2# )r  )r  )clsrO  r  r  s   &&&&r=   r  #NinjaBackend.get_compiler_rule_name  s#    qs22;?@AAr?   c                    V ^8  d   QhRRRR/# r7   r  r   r:   r9   r;   )r<   s   "r=   r>   r`    s     h hX h# hr?   c                	l    V P                  VP                  4       VP                  VP                  4      # r   )r  rl  r  r  r  r  s   &&r=   r  "NinjaBackend.compiler_to_rule_name  s-    ))(*?*?*A8CWCWYaYfYfggr?   c                    V ^8  d   QhRRRR/# r  r;   )r<   s   "r=   r>   r`    s     ` ` `c `r?   c                	X    V P                  VP                  4       VP                  R 4      # )PCH)r  rl  r  r  s   &&r=   r  &NinjaBackend.compiler_to_pch_rule_name  s'    ))(*?*?*A8CWCWY^__r?   c                   V ^8  d   QhRR/# r   r;   )r<   s   "r=   r>   r`    s     G G Gr?   c                	    \         P                  P                  V P                  V4      VP                  R ,           4      # )z.swiftmodule)r  r  r   r  swift_module_namer   r  s   &&r=   swift_module_file_name#NinjaBackend.swift_module_file_name  s4    ww||D77?"44~EG 	Gr?   c                   V ^8  d   QhRR/# r  r;   )r<   s   "r=   r>   r`    s      [ r?   c                	    . pVP                    F<  pV P                  V4      '       g   K  VP                  V P                  V4      4       K>  	  V# r   )r'  is_swift_targetr  r  r   r  r  r   s   &&  r=   determine_swift_dep_modules(NinjaBackend.determine_swift_dep_modules  sF    $$A##A&&d99!<= % r?   c                   V ^8  d   QhRR/# r  r;   )r<   s   "r=   r>   r`    s      [ r?   c                	p    . pVP                    F#  pVP                  V P                  V4      4       K%  	  V# r   )r'  r  r  r  s   &&  r=   get_swift_link_deps NinjaBackend.get_swift_link_deps  s3    $$AMM$22156 %r?   c                	    V P                  V4      p. p. pV F>  pVP                  R 4      '       d   VP                  V4       K-  VP                  V4       K@  	  W43# )z.swift)r:  r  r  )r   r  all_srcsr7  r  r   s   &&    r=   split_swift_generated_sources*NinjaBackend.split_swift_generated_sources  sV    44V<Azz(##Aa 	 
 |r?   c                   V ^8  d   QhRR/# r  r;   )r<   s   "r=   r>   r`    s     wH wHt wHr?   c           
     	   VP                   pVP                  R ,          p. p. p. p. pVP                  4       '       g   VP                   Uu. uF  qP                  4       '       g   K  VNK  	  p	pV	. 8w  d   \	        V	4      ^8  d   RMRp
RP                  R V	RR  4       4      p\	        V	4      ^8  d   RMRp\        V	R,          P                  4      p\	        V	4      ^8  d   RMR	p\        R
P                  \        VP                  4      WWV4      4      hVP                  4        EF  pVP                  V4      '       d   VP                  V P                  4      p\        P                  P!                  \        P                  P                  V P"                  P%                  4       V4      4      pVP'                  V4       VP'                  V4       K  \        P(                  ! V4      '       d   VP                  V P                  4      p\        P                  P!                  \        P                  P                  V P"                  P%                  4       V4      4      pVP'                  V4       WsP+                  V4      ,          pEKf  \-        RVP/                  4        R24      h	  \        P0                  ! V P3                  V4      RR7       V P5                  W4      pVVP7                  V4      ,          pVVP9                  V4      ,          pVV P:                  P=                  W1P>                  VP@                  4      ,          pVV P:                  PC                  W1P@                  4      ,          p\E        V\:        PF                  \:        PH                  34      '       dS   \	        V4      ^8X  dC   \        P                  PK                  V^ ,          4      R8w  d   VVPM                  4       ,          p\O        VPQ                  4       4       F  pVPS                  4       pVPU                  4        F  pVR9  d"   \        P                  P                  VV4      pMTp\        P                  P!                  \        P                  P                  V P"                  P%                  4       V P                  V4      4      pVPW                  VR4      pVV,          pK  	  K  	  VVPY                  R 4      ,          pVP[                  \        P                  P                  V P"                  P%                  4       V P]                  V4      4      4      pVV P:                  P_                  W1P>                  VP@                  4      ,          pVV P:                  Pa                  W1P@                  4      ,          pV Pc                  V4      pV Pe                  V4      pV Pg                  V4      pV Pi                  V4      p. pV F  p VVPW                  V R4      ,          pK  	  V Pk                  V4      p!V! U u. uF;  p \        P                  P                  V P"                  P%                  4       V 4      NK=  	  p"p VP                   F{  pV Pm                  V4      p#V#R8X  d   Rp#VR\        P                  P!                  \        P                  P                  V P"                  P%                  4       V#4      4      .,          pK}  	  V Po                  V4      w  p$p%V$ U u. uF;  p \        P                  P                  V P"                  P%                  4       V 4      NK=  	  p&p . p'. p(VV&,            F  p\        P                  PK                  V4      p)\        P                  Pq                  V)4      ^ ,          R,           p*V'P'                  V*4       V(P'                  \        P                  P                  V Pc                  V4      V*4      4       K  	  V Ps                  V4      p+\u        V Pv                  V(V+V4      p,V,Py                  VV$,           4       V,Py                  V4       V,P{                  RVP}                  4       V,           V,           V&,           V,           4       V,P{                  RV4       V P                  V,4       V U-u. uF  p-V-R8w  g   K  V-NK  	  p.p-\u        V Pv                  VV+V4      p,V,Py                  VV$,           4       V,P{                  RVP                  4       V.,           V&,           V,           4       V,P{                  RV4       V P                  V,4       \E        V\:        PF                  4      '       dZ   V P                  WP]                  V4      V(V P:                  P                  VP@                  ,          4      p,V P                  V,4       M\E        V\:        P                  4      '       d   \u        V Pv                  V P]                  V4      V+. 4      p,V,Py                  V(4       V,Py                  V!4       V,P{                  RVVP                  4       ,           V',           V",           4       V,P{                  RV4       V P                  V,4       M\        R4      hV P                  WVV,           V,           VV$4       R# u upi u up i u up i u up-i )r  rI  r  r  c              3  L   "   T F  p\        VP                  4      x  K  	  R # 5ir   )reprr   )r&  r  s   & r=   r'  5NinjaBackend.generate_swift_target.<locals>.<genexpr>  s     !I8H1$qvv,,8Hs   "$Nr  r   enableenableszSwift target {0} links against {1} {2}{3}{4} which {5} C++ interoperability. This requires {0} to also have it enabled. Add "swift_interoperability_mode: 'cpp'" to the definition of {0}.zSwift target z" contains a non-swift source file.Tr  z
main.swiftr  Fr  z.or  RUNDIRr  z:Swift supports only executable and static library targets.r   r   r  )Fr  r   uses_swift_cpp_interopr'  rE   r   r  r   r   r<   r?  can_compiler@  rA  r  r  rc  r  r  r  r   get_header_import_argsr)   get_basenamer  r  r  get_module_argsget_cxx_interoperability_argsr   r4  r  r  r3  r   r)  r*  r  get_library_argsrS  get_include_dirs
get_curdirr  r  r  r  r  get_project_link_argsget_global_link_argsr  r  r  determine_swift_dep_dirsr  r$  r  rJ  r  r   r   r	  r  get_compile_only_argsrx  get_mod_gen_argsr  static_linkerr  get_std_exe_link_argsrs  )/r   r  module_nameswiftcabssrcrelsrcabs_headersheader_importsr  cpp_targetstarget_wordrR  and_wordlastenable_wordr   relsabssrelhabshr  basedirrU  expdir
srctreedirsargs	link_argsrundirout_module_namein_module_filesabs_module_dirsmodule_includesr   	link_depsabs_link_depsreldirrel_generatedr  abs_generatedobjectsrel_objectsbaseonamer   rz  elmod_gen_argss/   &&                                             r=   r  "NinjaBackend.generate_swift_target  s   ..!!'*,,..&,&9&9X&9=U=U=W11&9KXb +.{+;a+?iX		!ICR8H!II&)+&6&:7KO001*-k*:Q*>hI$ &l '-fT&++->T\do&pr r
 ##%A!!!$$(():):;ww''T5E5E5S5S5UW[(\]d#d#$$Q''(():):;ww''T5E5E5S5S5UW[(\]""4("?"?"EE&v7J7J7L6MMo'pqq & 	D33F;dK88H..{;;<<VDD

33F<M<MvOaOabb

226;M;MNNfu22E4G4GHII
 6{aBGG$4$4VAY$?<$O 7 7 99&1134AllnG]]_I%WW\\'15F$FWW--bggll4;K;K;Y;Y;[]a]n]npv.wx
//
EB% % 5 	--g66**277<<8H8H8V8V8XZ^ZrZrsyZz+{|	TZZ55f>O>OQWQcQcdd	TZZ44V=O=OPP	,,V455f=::6B77? Av66q%@@O !,,V4	T]^T]qd&6&6&D&D&FJT]^$$A((+F|$ 0 0d>N>N>\>\>^`f1g hiiI	 %
 "??GTabTaqd&6&6&D&D&FJTab -''A77##A&DGG$$T*1-4ENN5!rww||D,G,G,OQVWX	 ( --f5 !!1!1;&Q_}45[!ff::<|Kn\_llo~~h't &2@\rR4Z\@ !1!1?HfU_}45ff557,FVYhhih'tfe1122%%f.F.Fv.N&14::3K3KFL^L^3_aDNN4  0 011$T%5%5t7O7OPV7WYacefDLL%LL#MM&)f.J.J.L"Lw"VYf"fgMM(F+NN4  !]^^//~@]`o@oqw  zG  	H] Yx _ c, As&   k(k6AkAk	kkc                    V ^8  d   QhRRRR/# )r7   toolz4T.Union['Compiler', 'StaticLinker', 'DynamicLinker']r:   z)T.Dict[str, T.Union[bool, RSPFileSyntax]]r;   )r<   s   "r=   r>   r`  j	  s      	 	!U 	  [D 	r?   c                n    RVP                  4       /pVR,          '       d   VP                  4       VR&   V# )zHelper method to get rsp options.

rsp_file_syntax() is only guaranteed to be implemented if
can_linker_accept_rsp() returns True.
r   r   )can_linker_accept_rsprsp_file_syntax)r   r)  optionss   && r=   _rsp_optionsNinjaBackend._rsp_optionsj	  s;     d88:;9-1-A-A-CG)*r?   c                   V ^8  d   QhRR/# r  r;   )r<   s   "r=   r>   r`  u	  s     .^ .^D .^r?   c           	     	^   V P                   P                  P                  P                  R 4      pRV P                   P                  P                  P
                  9   d   V P                  4        \         EF  pV P                  P                  V,          pVf   K'  RP                  V P                  V4      4      p. pR.p\        V\        4      '       dK   \        P                  ! 4       '       g0   \         \"         Uu. uF  qwP                  R4      NK  	  up,           pWSP%                  4       ,          pVR.,          pV\&        P)                  VP+                  R4      \,        P.                  4      ,          pVP0                  R8X  dY   VP3                  V4       . pV P                   P5                  VR4      pVf   R.pVP3                  R	.V,           R
R.,           4       Rp	V^ 8  d   Rp
MRp
V P7                  V4      pV P9                  \;        WEWi3/ VBRV
/B 4       EK  	  R# u upi )r  r  NzSTATIC_LINKER{}r   rr  
$LINK_ARGSapplearranlibr   -czLinking static target $outpool = link_poolr   )r  r  r  r  r   r  r  r   r   r  r<   r  r   r   r   r+  execute_wrapperrmfile_prefixr  r5   r   r  ru   ry   r  r-  lookup_binary_entryr.  r{  r   )r   r  r  r  r   cmdlistr   r   r4  r   r  r-  s   &           r=   ry  'NinjaBackend.generate_static_link_rulesu	  s   $$--66DDEXY	T%%..88===##%(=K JJ44[AM$$++D,@,@,MND=?G7D
 -66x?R?R?T?T *},U}!XXf-=},UU0022G~%G++M,I,I&,QSZS_S_``G
 9, t$ ))==k8T>&ZFv$?@6K1})''6GMM)D4\\W[\]U ) -Vs   ?H*c                   V ^8  d   QhRR/# r  r;   )r<   s   "r=   r>   r`  	  s     ,N ,NT ,Nr?   c           
     	   V P                   P                  P                  P                  R 4      p\         EF  pV P                   P                  P
                  V,          pVP                  4        F  w  rEVR9   d   K  RP                  W@P                  V4      4      pVP                  4       pR.\        P                  VP                  R4      \        P                  4      ,           RR.,           pRp	V^ 8  d   Rp
MRp
V P                  V4      pV P!                  \#        WgW3/ VBR	V
/B 4       K  	  V P                   P$                  V,          P'                  4       '       d_   V'       dW   R
P                  V P                  V4      4      pRp	XP)                  4       p. p/ pV P!                  \#        WlW3/ VBR	R/B 4       V P                   P$                  V,          P+                  4       '       g   EK  V'       g   EK  RP                  V P                  V4      4      pRp	R.p. ROp/ pV P!                  \#        WgW3/ VBR	R/B 4       EK  	  V P                   P-                  4       RRV P                   P/                  4       RRR.,           pRpVR.,           pRpRpV P!                  \#        W. VVR7      4       R# )r  z{}_LINKER{}r  rr  r   r2  zLinking target $outr6  Nr   zAIX_LINKER{}zArchiving AIX shared libraryzIMPORTLIB{}zGenerating import library $outemximpr@  symbolextractorz$IMPLIBSHSYMz$CROSSzGenerating symbol file $outrn  ro  >   r  r  r  r  r  )z-orr  r   )r  r  r  r  r   r   r  r<   r  ry  r5   r   get_linker_output_argsru   ry   r.  r{  r   r  r  get_command_to_archive_shlibis_os2rE  r  )r   r  r  complistlangnamer  r   r   r   r   r  r-  r:  symrulesymcmdsyndescsynstats   &                r=   rz  (NinjaBackend.generate_dynamic_link_rules	  s   $$--66DDEXY	(=K''00::;GH&.nn&6"GG$++H6J6J;6WX"557y?#7#78W8WX^8_ahamam#nnrw  zF  rG  G3q=-DD++H5it`G`[_`a '7 ((5<<>>8%,,T-A-A+-NO<"??Ait`G`[_`a((5<<>>88$++D,@,@,MN>#*,it`G`[_`a; )> 113++- 
"/iWGLMr?   c                   V ^8  d   QhRR/# r  r;   )r<   s   "r=   r>   r`  	  s     A Ad Ar?   c                	    V P                  V4      pVP                  4       R R.,           pRpV P                  \        W#. V4      4       R# )r  r   z#Compiling Java sources for $FOR_JARNr  r  r{  r   )r   r  r   r   r   s   &&   r=   generate_java_compile_rule'NinjaBackend.generate_java_compile_rule	  sD    ))(3&&(GU+;;;ir;?@r?   c                    V ^8  d   QhRRRR/# )r7   r  z'CsCompiler'r:   r}   r;   )r<   s   "r=   r>   r`  	  s     Q Q Q$ Qr?   c                	    V P                  V4      pVP                  4       pR R.pRpV P                  \        W#WE\        P
                  ! 4       VP                  4       R7      4       R# )r  r   zCompiling C Sharp target $out)r   r   N)r  r  r{  r   r   r+  r,  )r   r  r   r   r   r   s   &&    r=   generate_cs_compile_rule%NinjaBackend.generate_cs_compile_rule	  s`    ))(3&&(5it(0(;(;(=4<4L4L4NP 	Qr?   c                   V ^8  d   QhRR/# r  r;   )r<   s   "r=   r>   r`  	  s     5 5t 5r?   c                	   V P                  V4      pVP                  4       pR pVP                  RR4      pV'       d   RMRpV'       d   RMRpVRR.,           pV P                  \	        W#V,           . VVVRR7      4       R# )	zCompiling Vala source $inrr  r   Nrp  r  r   rn  )r   r   r   )r  r  r~  r{  r   )	r   r  r   r   r   depargsr   depstyler   s	   &&       r=   generate_vala_compile_rules(NinjaBackend.generate_vala_compile_rules	  s~    ))(3&&(1226:F '*T#5'5))inb+(/%-&24 	5r?   c                    V ^8  d   QhRRRR/# )r7   r  
'Compiler'r:   r}   r;   )r<   s   "r=   r>   r`  	  s     5 5j 5T 5r?   c                	^   V P                  V4      pR pVP                  4       pVP                  RR4      pV'       d   RMRpVRR.,           pV\        P	                  VP                  R4      \        P                  4      ,          pV P                  \        W$V,           . VVRR7      4       R# )	zCompiling Cython source $inrr  r   z$out.depNr  r   rn  )r   r   )
r  r  r~  r5   r   r  ru   ry   r{  r   )r   r  r   r   r   rV  r   r   s   &&      r=   generate_cython_compile_rules*NinjaBackend.generate_cython_compile_rules	  s    ))(33&&(226:F '*T'5))$$X%=%=f%Ew||TTinb +(/&24 	5r?   c                   V ^8  d   QhRR/# r  r;   )r<   s   "r=   r>   r`  
  s     2 2t 2r?   c                	    V P                  V4      pVP                  4       R R.,           pRpRpRpV P                  \        W#. WFVR7      4       R# )r  r   zCompiling Rust source $inz
$targetdeprp  r   r   NrM  )r   r  r   r   r   r   rW  s   &&     r=   generate_rust_compile_rules(NinjaBackend.generate_rust_compile_rules
  sU    ))(3&&(GU+;;1ir;(/1 	2r?   c                   V ^8  d   QhRR/# r  r;   )r<   s   "r=   r>   r`  

  s     U U Ur?   c           
     	J   V P                  V4      pVP                  R 4      pVe   VP                  4       V,           pM9V P                  P	                  4       . RO,           pWQP                  4       ,           pVRR.,           pRpV P                  \        W&. VRR7      4       R# )$RUNDIRNr  r   zCompiling Swift source $inrn  ro  )r@  
dirchangerrf  )r  get_working_directory_argsr  r  rE  r{  r   )r   r  r   wd_argsinvocfull_exer   r   s   &&      r=   generate_swift_compile_rules)NinjaBackend.generate_swift_compile_rules

  s    ))(355i@((*W4E''99; ? H
 3355E7E**2ir;lSTr?   c                   V ^8  d   QhRR/# r  r;   )r<   s   "r=   r>   r`  
  s     & & &r?   c                    V P                   # )zUse the new Ninja feature for scanning dependencies during build,
rather than up front. Remove this and all old scanning code once Ninja
minimum version is bumped to 1.10.)r  r   s   &r=   use_dyndeps_for_fortran$NinjaBackend.use_dyndeps_for_fortran
  s     %%%r?   c                    V ^8  d   QhRRRR/# )r7   r   zT.List[build.BuildTarget]r:   T.List[File]r;   )r<   s   "r=   r>   r`  "
  s     % %+D % %r?   c                	    V P                  4       '       d   . # V Uu. uFT  pVP                  4       '       g   K  \        R .\        P                  P                  V P                  V4      4      O5!  NKV  	  up# u upi )T)rp  r  r   r  r  r   r  )r   r   r  s   && r=   r  #NinjaBackend.get_fortran_order_deps"
  sl     ''))IQU %QUA>># HTGBGGMM$*B*B1*EFGQU % 	% %s
   A:=A:c                    V ^8  d   QhRRRR/# )r7   crstrr9   r:   r}   r;   )r<   s   "r=   r>   r`  ,
  s     P Ps Pt Pr?   c           
     	    V P                  4       '       d   R # RV 2p\        P                  ! 4       '       d   RR.pMR.pV P                  \	        R4      4       V P                  \        W#. RRR7      4       R # )	NFORTRAN_DEP_HACKrO   z/CtruezWorkaround for these issues:
https://groups.google.com/forum/#!topic/ninja-build/j-2RfBIOd_8
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485zDep hackrn  ro  )rp  r   r+  rv  r   r{  r   )r   rw  r   rO   s   &&  r=   generate_fortran_dep_hack&NinjaBackend.generate_fortran_dep_hack,
  sr    ''))!%)  $-C(Cl ,6 7 	8 	i2zNOr?   c                   V ^8  d   QhRR/# r  r;   )r<   s   "r=   r>   r`  9
  s     ? ? ?r?   c                	   V P                   VP                  ,          '       d   R # V P                  RVP                  4      pVP                  4       pR.\        P                  VP                  R4      \        P                  4      ,           VP                  4       ,           R.,           pRpV P                  V4      pV P                  \        W#WE3/ VB 4       RV P                   VP                  &   R # )Nllvm_irr  rr  r   zCompiling LLVM IR object $inT)rj  r  r  r  r5   r   r  ru   ry   r  r.  r{  r   r   r  r   r   r   r   r-  s   &&     r=   generate_llvm_ir_compile_rule*NinjaBackend.generate_llvm_ir_compile_rule9
  s    $$X%9%9::**9h6J6JK&&(y?//0H0H0PRYR^R^__bj  cA  cA  cC  C  GL  FM  M4##H-itLGLM:>!!("6"67r?   c                    V ^8  d   QhRRRR/# r7   r  r   r:   r}   r;   )r<   s   "r=   r>   r`  F
  s     j j8 j jr?   c           
     	   V P                  R VP                  4      p\        P                  VP	                  RR4      \
        P                  4      pVP                  4       pR.V,           \        P                  VP                  R4      \
        P                  4      ,           RR.,           pRpVP                  4       R8X  d   RpRpMR	pRpV P                  V4      p	V P                  \        W$WV3/ V	BR
VRV/B 4       R# )r  rr  r   r  z-cmr   zCompiling to C object $inr  Nrp  r   r   )r  r  r5   r   r~  ru   ry   r  r  get_depfile_formatr.  r{  r   )
r   r  r   rV  r   r   r   r   r   r-  s
   &&        r=   "generate_tasking_mil_compile_rules/NinjaBackend.generate_tasking_mil_compile_rulesF
  s    **+@(BVBVW!&&x'G'GPZ'[]d]i]ij&&(y7"_%9%9(:R:RSY:Z\c\h\h%iimrtylzz1&&(F2DGD G##H-ithGhRVh`ghir?   c                    V ^8  d   QhRRRR/# r  r;   )r<   s   "r=   r>   r`  W
  s     N N NT Nr?   c                	F   V P                  R VP                  4      pVP                  4       pRR.\        P	                  VP                  R4      \        P                  4      ,           RR.,           pRpV P                  V4      pV P                  \        W#WE3/ VB 4       R# )tasking_mil_linkr  z
--mil-linkrr  r5  r   zMIL linking object $outN)r  r  r  r5   r   r  ru   ry   r.  r{  r   r  s   &&     r=   generate_tasking_mil_link_rules,NinjaBackend.generate_tasking_mil_link_rulesW
  s    **+=x?S?ST&&(&)=)=h>V>VW]>^`g`l`l)mmquw|p}}/##H-itLGLMr?   c               $    V ^8  d   QhRRRRRR/# r7   rE  r9   r  r   r:   r}   r;   )r<   s   "r=   r>   r`  a
  s!     ,= ,=# ,= ,=d ,=r?   c           
     	,   VR 8X  d   V P                  V4       R# VR8X  dI   V P                  P                  P                  VP                  4      '       d   V P                  V4       R# VR8X  d   V P                  V4       R# VR8X  d   V P                  V4       R# VR8X  dI   V P                  P                  P                  VP                  4      '       d   V P                  V4       R# VR8X  d   V P                  V4       R# V P                  VP                  4      pV P                  V4      pVR8X  d   V P                  V4       RVR	&   V P                  V4      pVR
8X  d6   \        P                  VP!                  RR4      \"        P$                  4      pM4\        P                  VP!                  RR4      \"        P$                  4      pVP'                  4       pR.V,           \        P                  VP)                  R4      \"        P$                  4      ,           VP+                  4       ,           R.,           pRVP-                  4        R2p	VP/                  4       R8X  d   Rp
RpMRp
RpV P1                  \3        WWW3/ VBRV
RV/B 4       R# )r  Nr  r  r  r  r  r  rn  r   r  z$CUDA_ESCAPED_TARGETr   rr  r  r   z
Compiling z object $outr  rp  r   r   )rN  r  r  matches_build_machiner  rR  rX  rb  rl  r]  r  r.  r{  r  r5   r   r~  ru   ry   r  r  r  get_display_languager  r{  r   )r   rE  r  rw  r-  r   rV  r   r   r   r   r   s   &&&         r=   generate_compile_rule_for&NinjaBackend.generate_compile_rule_fora
  si   v++H5t((>>x?S?STT--h7v,,X6v,,X6w((>>x?S?STT11(;x..x8$$X%9%9:##H-y **51  ,GG))(3v%**8+K+KLbdn+oqxq}q}~G%**8+K+KFT^+_ahamamnG&&(y7"_%9%9(:R:RSY:Z\c\h\h%iilt  mK  mK  mM  M  QV  PW  W"8#@#@#B"C<P&&(F2DGD Git <G <%)<3:< 	=r?   c               $    V ^8  d   QhRRRRRR/# r  r;   )r<   s   "r=   r>   r`  
  s!     2 2c 2X 2$ 2r?   c                	   VR9  d   R# V P                  V4      pVP                  RR4      pVP                  4       R8X  d   . pM3\        P	                  VP                  R4      \        P                  4      pRVP                  9   d>   RV^ ,          n	        VP                  4       R.,           V,           V,           R.,           pMCVP                  4       R.,           V,           V,           VP                  4       ,           R.,           pR	pVP                  4       R8X  d   RpRp	MR
pRp	V P                  \        W6. WxV	R7      4       R# )r   Nrr  r   r  mwccz-precompiler  r   zPrecompiling header $inrp  ra  >   r   r  )r  r~  r  r5   r   r  ru   ry   r  rR   r  r  r  r{  r   )
r   rE  r  r   rV  r  r   r   r   r   s
   &&&       r=   generate_pch_rule_for"NinjaBackend.generate_pch_rule_for
  s   <'--h7226:F'')V3F$))(*B*B6*JGLLYFX[[ 'F1IK**,y87BVKugUG**,y87BVKhNlNlNnnrwqxxG/&&(F2DGD Gir;(/1 	2r?   c                   V ^8  d   QhRR/# r  r;   )r<   s   "r=   r>   r`  
  s       r?   c                	J   R pWP                   9   d   R# V P                  P                  4       RR .,           p. ROpRp\        WW44      pV P	                  V4       RpV P                  P                  4       RR.,           pRR.pRp\        WW44      pV P	                  V4       R# )	r  Nr@  rr  r   z!Scanning target $name for modulesr  z:Generating dynamic dependency information for target $name)z$picklefilerr  r   )ru  r  rE  r   r{  )r   r   r   r   r   r   s   &     r=   rw  #NinjaBackend.generate_scanner_rules
  s    }}$""4469%&-9D>d"""446?+,RD>dr?   c                   V ^8  d   QhRR/# r  r;   )r<   s   "r=   r>   r`  
  s     C C Cr?   c                	   \          F  pV P                  P                  P                  V,          pVP	                  4        F  w  r4VP                  4       R 8X  d   V P                  V4       VP                  4       R8X  d   V P                  V4       V P                  W44       V P                  W44       VP                  4        F  pV P                  W54       K  	  K  	  K  	  R# )r?  r  N)r   r  r  r   r  r  r  r  r  r  	get_modes)r   r  clistrE  r  r  s   &     r=   rx  #NinjaBackend.generate_compile_rules
  s    (K$$--77DE&+kkm"??$/66x@??$	1;;HE..xB**8>$..0D228B 1 '4 )r?   c                   V ^8  d   QhRR/# r  r;   )r<   s   "r=   r>   r`  
  s     > >t >r?   c                	    VP                  4        FF  p\        V\        P                  \        P                  34      '       d   K5  V P                  W!4       KH  	  R # r   )r  r   r   r  r  r	  )r   r  r0  s   && r=   r  *NinjaBackend.generate_generator_list_rules
  sF     335G'E$6$68O8O#PQQ,,W= 6r?   c                    V ^8  d   QhRRRR/# )r7   r   r   r:   r;   )r<   s   "r=   r>   r`  
  s      + P[ r?   c                	D   V'       d,   \         P                  P                  V P                  V4      pMV P	                  V4      pV P                  V4      pV Uu. uF/  pVP                  R V P                  4      P                  RV4      NK1  	  ppV Uu. uF  qfP                  RV4      NK  	  ppV Uu. uF/  pVP                  RV P                  4      P                  RR4      NK1  	  ppV Uu. uF  qfP                  RR4      NK  	  ppV# u upi u upi u upi u upi )z@SOURCE_DIR@z@BUILD_DIR@z@CURRENT_SOURCE_DIR@z@SOURCE_ROOT@z@BUILD_ROOT@r  rB   r$  )r  r  r   rA  get_target_source_dirr  rU   )r   r  r   override_subdirsource_target_dirreloutr   s   &&&&   r=   replace_pathsNinjaBackend.replace_paths
  s    "T->-> P $ : :6 B,,V4A 		.$*;*;<DD]TZ[ 	 NRSd		02CDdSA 		/4+<+<=EEnVYZ 	 .23d		$$d3S3s   5DD55D0Dc               $    V ^8  d   QhRRRRRR/# )r7   r0  zbuild.GeneratedListr  r  r:   r}   r;   )r<   s   "r=   r>   r`  
  s$     :! :!3F :!Pa :!fj :!r?   c           	     	\   VP                    F6  p\        V\        P                  4      '       g   K%  V P	                  W24       K8  	  VP                  4       pVP                  pVP                  4       pVP                  4       pV P                  V4      pV EF}  p	V	P                  V P                  V P                  V4      4      p
VP                  V
4      pVP                  V	4      pV Uu. uF2  p\        P                   P#                  V P                  V4      V4      NK4  	  pp\%        VP&                  4      ^8X  d   V^ ,          pMT	 pVP(                  f   RpTpMbRpVP+                  V
4      p\        P                   P#                  V P                  V4      V4      pV Uu. uF  q3P-                  RV4      NK  	  ppV Uu. uF%  pVP-                  RV
4      P-                  RV4      NK'  	  ppV P/                  VV P                  V4      V4      pV P1                  VVVR7      pT P3                  TV P5                  VV4      VP6                  '       d
   V^ ,          MRVP8                  R7      w  pp\        P                   P#                  V P:                  P=                  4       V P?                  V4      4      p\        P@                  ! VR	R
7       \C        V PD                  VVV
4      pTPG                  VP                    Uu. uF  q0PI                  V4      NK  	  up4       VP(                  e   VPK                  RX4       \%        V4      ^ 8  d   VPG                  V4       \%        VP&                  4      ^8X  d   V: pMRV: 2pV'       d   RV R2pVPK                  RRV V 24       \        V\        PL                  4      '       d!   VPG                  V PI                  V4      4       VPK                  RV4       V PO                  V4       EK  	  R# u upi u upi u upi u upi )r   Nr  r  z	@DEPFILE@z@INPUT@z@OUTPUT@)r  )r  r  Tr  r  zfrom r  r  r[  zGenerating r  )(dependsr   r   r(   r	  get_generatorr'  get_exe
get_inputsr!  r@  rA  r  get_arglistget_outputs_forr  r  r   rE   r=  r   r&  rU   replace_outputsr  r$  replace_extra_argsr  r  r  r  r$  r  r   r   r	  r  r  r  rx  )r   r0  r  r   	generatorr'  exe
infilelistextra_dependenciescurfile
infilename	base_argsr   ofoutfilesprivsole_outputr   r   depfilenamer   r:  r*  r-  rz  whats   &&&                      r=   r	  (NinjaBackend.generate_genlist_for_target
  s   A!U001100; ! ))+	!'')
!99'B!G 001B1BDD_D_`fDghJ!--j9I..w7H\de\dVXBGGLL)D)DV)LbQ\dLe9$$%**1o!(	  (+ /'77
C'',,t'B'B6'JKXAJKA		+w7K!#! IIi4<<ZU!  #''d.I.I&.QS[\D%%fdF%KD"778<8O8OPTV]8^S\SdSdSdQjn<CKK 8 IOGV ww||D$4$4$B$B$DdFYFYZ`FabHKK40$T%5%5|XzZDLLy?P?PQ?P!2215?PQR  ,i1%&*/09$$%*% {o..vha8MM&KvfX">?#u0011T55c:;MM)W-NN4 c " f L# Rs   +8P%P+P$P)
c                   V ^8  d   QhRR/# r  r;   )r<   s   "r=   r>   r`    s     4W 4WT 4Wr?   c                `   V P                  4       '       d   R# RpV P                  P                  P                  P                  P                  4        F  w  r4VR8X  g   K  Tp M	  Vf    / V P                  VP                  4       &   R# \        P                  ! \        \        P                  4      p\        P                  ! \        \        P                  4      p/ p/ pVP                  4        EF  p	VP                  V	4      '       g   K  V	P                  V P                  P!                  4       V P                  P#                  4       4      p
\%        V
RRR7      ;_uu_ 4       pV F  pVP'                  V4      pVeG   VP)                  ^4      P+                  4       pW9   d   \-        RV RW~,           RV	 R	24      hWV&   K^  VP'                  V4      pVf   Ku  VP)                  ^4      P+                  4       P/                  R
4      pV^ ,          R,           VP)                  ^4      P+                  4       ,           pVV9   d   \-        RV RVV,           RV	 R	24      hWV&   EK  	  RRR4       EK  	  / VCVCV P                  VP                  4       &   R#   + '       g   i     EK  ; i)zF
Find all module and submodule made available in a Fortran code file.
Nr  asciiignorer  errorszNamespace collision: module z defined in two files r  r  ra   r  zNamespace collision: submodule )rp  r  r  r   r  r  rf  r  rL   r  FORTRAN_MODULE_PAT
IGNORECASEFORTRAN_SUBMOD_PATr?  r  ra  rF  r  r  r   rF   rK  r)   r   )r   r  r  rO  r   modresubmodremodule_filessubmodule_filesrR   r  r  r/  modmatchmodnamesubmodmatchparents
submodnames   &&                r=   r  (NinjaBackend.scan_fortran_module_outputs  s}    ''))''00::??EEGGDy  H 79Df1134

-r}}=::0"--@##%A ''**t'7'7'F'F'H'+'7'7'E'E'GIH hBBaD${{40H+"*.."3"9"9";"2"2">wi H--9-B,C51!N#O O 12W-&.nnT&:&2&1&7&7&:&@&@&B&H&H&MG)0c)9K<M<Ma<P<V<V<X)XJ)_<&6&Ej\ R11@1L0MUSTRUUV%X'Y !Y ;<J7)  CB &@ 4Wl3Vo3V&--/0/ CBBs   %A3JBJJ-c               $    V ^8  d   QhRRRRRR/# )r7   r  r1   r1  r   r:   r   r;   )r<   s   "r=   r>   r`  T  s"       t P[ r?   c                    V P                  4       '       d   . # \        V P                  V4      4      pV P                  VP	                  4       ,          p\        V P
                  4      p\        W&WEV4      pV# )z:
Find all module and submodule needed by a Fortran target
)rp  r   r  rf  r  rb  _scan_fortran_file_deps)r   r  r1  r  r  tdepssrcdir	mod_filess   &&&&    r=   get_fortran_depsNinjaBackend.get_fortran_depsT  sh     ''))It226:;!!&"5"5"78doo&+CR	r?   c                   V ^8  d   QhRR/# r  r;   )r<   s   "r=   r>   r`  b  s       r?   c                	    \        VR 4      '       dG   VP                  V P                  P                  VP                  ,          9   d   VP                  4       # . # )r  )rB  r  r   stdlibsr  get_no_stdlib_link_args)r   r  rv  s   &&&r=   r  $NinjaBackend.get_no_stdlib_link_argsb  sD    6:&&6??djj>P>PQWQcQc>d+d1133	r?   c                   V ^8  d   QhRR/# r  r;   )r<   s   "r=   r>   r`  g  s     7K 7K{ 7Kr?   c                	    VP                  4       '       d>   V P                  V4      pV'       g   V P                  V4      pVP                  VR R7      # VP                  VRR7      # )T)pchF)r  get_target_debug_filename_absr  get_compile_debugfile_args)r   r  r  objfile	tfilenames   &&&& r=   r  'NinjaBackend.get_compile_debugfile_argsg  sa    b >>::6BI 88@	66yd6KK66wE6JJr?   c               $    V ^8  d   QhRRRRRR/# )r7   rv  rw  r  r  r:   r   r;   )r<   s   "r=   r>   r`    s$      .M Wh m| r?   c                	Z    V P                  V4      pV'       d   VP                  V4      # R # r   )get_target_debug_filenameget_link_debugfile_namer   rv  r  r  s   &&& r=   r  $NinjaBackend.get_link_debugfile_name  s)    11&911(;;r?   c               $    V ^8  d   QhRRRRRR/# )r7   rv  rw  r  r  r:   r   r;   )r<   s   "r=   r>   r`    s$      .M Wh mx r?   c                	Z    V P                  V4      pV'       d   VP                  V4      # . # r   )r  get_link_debugfile_argsr  s   &&& r=   r  $NinjaBackend.get_link_debugfile_args  s+    11&911(;;	r?   c                    V ^8  d   QhRRRR/# )r7   r1  r3   r:   T.Tuple[str, str]r;   )r<   s   "r=   r>   r`    s     " "L "EV "r?   c                	   \        VP                  P                  4       V4      pVP                  4       pV\        P                  ! WV P
                  4      ,          p\        V\        4      '       dU   VP                  '       d6   \        P                  P                  VP                  VP                  4      pMTVP                  pMG\        P                  P                  V4      '       d!   \        P                  P                  V4      pMTpV P!                  V4      p\        P                  P                  V P#                  V4      V4      pVR V P
                  P$                  VP&                  ,          P)                  4       ,           ,          pW@P+                  W1V4      ,          p\        V\        4      '       d<   VP                  '       d   VP                  pM+VP-                  V P.                  4      pM\1        RV: 24      hV P3                  RVP&                  4      p	\5        V P6                  WyV4      p
V
P9                  RV4       V P;                  V
4       Wx3# )r  Invalid source type: r  r  )r#   r   r  r  rz  r  r   r   r  r  r  r   r'  rG  isabsr  canonicalize_filenamer  r  r  get_object_suffixr  r@  rA  r)   r  r   r   r  rx  )r   r  r1  r  r  src_filenameobj_basenamer  r9  r  r  s   &&&        r=   r  %NinjaBackend.generate_llvm_ir_compile  s   *6+;+;+B+B+DcJ))+I33FdFVFVWWc4  |||!ww||CJJ		B"yyWW]]377++C0LL11,?'',,t::6BLQ3))2263E3EFXXZZZ33HgNNc4  |||))--d.?.?@"%:3'#BCC33Ix?S?ST#D$4$4ggV*w!!r?   )maxsizec          
     ,    V ^8  d   QhRRRRRRRRRR	/# )
r7   r  r[  rU  r9   r  r  r\   r:   zCT.Tuple['ImmutableListProtocol[str]', 'ImmutableListProtocol[str]']r;   )r<   s   "r=   r>   r`    s1        c VZ Or?   c                	&   VR9  d>   \         P                  P                  \         P                  P                  W24      4      pMTp\         P                  P                  \         P                  P                  V P                  V4      4      pVP                  Wd4      p\         P                  P                  \         P                  P                  V P                  P                  4       V4      4      '       d   VP                  WT4      pWx3# . pWx3# )r   r  )	r  r  rc  r   rA  r  isdirr  r  )	r   r  rU  r  r  r  r  r  bargss	   &&&&&    r=   generate_inc_dirNinjaBackend.generate_inc_dir  s     IWW%%bggll7&>?FFWW%%bggll43D3Df&MN
))*@ 77==d&6&6&D&D&FOPP--f@E ~ E~r?   c               $    V ^8  d   QhRRRRRR/# )r7   r  r  r  r   r:   r   r;   )r<   s   "r=   r>   r`    s#      /@ H Ye r?   c                	V    V P                  W4      pW0P                  W4      ,          pV# r   )"_generate_single_compile_base_args$_generate_single_compile_target_argsr   r  r  r  s   &&& r=   _generate_single_compile%NinjaBackend._generate_single_compile  s*    ::6L==fOOr?   c               $    V ^8  d   QhRRRRRR/# )r7   r  r  r  r[  r:   z'CompilerArgs'r;   )r<   s   "r=   r>   r`    s$      9J V` es r?   c                	    VP                  4       pW2P                  VP                  4      ,          pV\        P                  ! VW P
                  4      ,          pV# r   )r  gnu_symbol_visibility_argsgnu_symbol_visibilityr   rz  r  r  s   &&& r=   r	  /NinjaBackend._generate_single_compile_base_args  sV     ))+778T8TUU 	I33F4<>N>NP 	Pr?   c               $    V ^8  d   QhRRRRRR/# )r7   r  r  r  r   r:   zImmutableListProtocol[str]r;   )r<   s   "r=   r>   r`    s$     5 5;L 5X` 5e 5r?   c                	   V P                  W4      pVP                  '       d   W0P                  W4      ,          p\        VP	                  4       4       F  pVP                  4       p\        VP                  4       4       F1  pV P                  W&WTP                  4      w  rxW7,          pW8,          pK3  	  VP                  4        F$  pW2P                  WdP                  4      ,          pK&  	  K  	  W0P                  VP                  VP                  4       4      4      ,          pVP                  R 8X  d-   W2P                  VP                   V P"                  4      ,          pVP                  '       d   W0P%                  W4      ,          pVP                  '       d   W0P'                  W4      ,          pW2P                  V P)                  V4      R4      ,          pV# )rU  F)r  implicit_include_directories"get_custom_target_dir_include_argsrS  r  r  r  r  r  get_extra_build_dirsr  escape_extra_argsr  rl  r  get_feature_args
d_featuresrA  get_source_dir_include_argsget_build_dir_include_argsr  )	r   r  r  r  r   r  rU  compile_objincludeargss	   &&&      r=   r
  1NinjaBackend._generate_single_compile_target_args  s    44VF ...??QQH &1134AllnG ammo.-1-B-B8PWYdYd-e*''	 /
 ++-55aEE . 5 	**6+@+@AVAVAX+YZZ #11&2C2CTEVEVWWH ...88JJH...77IIH 	--d.I.I&.QSXYYr?   c                    V ^8  d   QhRRRR/# )r7   r  r  r:   zdict[str, list[str]]r;   )r<   s   "r=   r>   r`  /  s        @Q  Vj  r?   c                	   / pV P                  V4      pVP                  P                  4        F  pVP                  V,          pV P                  W4      pV'       d)   R VP                  9  d   W`P                  WQ4      ,          pW`P                  W4      ,          pV'       d)   R VP                  9   d   W`P                  WQ4      ,          pVP                  P                  V4      pVP                  4       W$&   K  	  V# )mw)
r  r   r  r	  r  get_pch_include_argsr
  r  r  r  )r   r  src_type_to_argsr  src_type_strr  r  s   &&     r=   r  6NinjaBackend.generate_common_compile_args_per_src_type/  s    &&v.",,113L''5H>>vPH 4x{{255hGGAA&SSH 48;;.55hGG((66x@H-5-?-?-A*# 4$  r?   c               0    V ^8  d   QhRRRRRRRRR	RR
R/# )r7   r  r  is_generatedr\   r  rV  r  zT.Optional[T.List[str]]rU  r:   r  r;   )r<   s   "r=   r>   r`  H  sL     _5 _5.? _5.2_5,L_5 -D_5 0P	_5
 &7_5r?   c           	        Ve   TM. pVe   TM. p\        V\        4      '       d'   VP                  R4      '       d   \        RV: 24      h\	        VP
                  P                  4       V4      pV P                  W4      p	V P                  V4      p
V
'       d)   RVP                  9  d   WP                  W4      ,          p	WP                  W4      ,          p	V
'       d)   RVP                  9   d   WP                  W4      ,          p	V	P                  P                  V	4      p	VRJ d   V P                  WW.. V4       MV P                  WV	. V.V4       V P                  P!                  4       p\        V\"        4      '       d   VP%                  V P&                  4      p\(        P*                  P-                  V4      '       dA   VP.                  '       d/   VP1                  V4      '       g   Q hV\3        V4      ^,           R pM&V'       d   \        RV: 24      h\5        RV: 24      hV P7                  WV4      p\(        P*                  P9                  V P;                  V4      V4      pVP=                  V4      pWP?                  WV4      ,          p	VP@                  R9   dL   VPC                  4       '       d6   V P                  V4      '       d   VPD                  VP@                  ,          pMRpV'       g   . pMnVP                  R	8X  d   . pMZ. p\(        P*                  P9                  V P;                  V4      VPG                  V^ ,          4      4      pVPI                  V4       TpVPK                  4       R
8X  d   V PM                  V\O        RVPP                  VPR                  R7      4      p\        V\T        PV                  4      '       d   VPX                  '       g	   V'       dQ   VP[                  R^4      ^,          \
        P\                  R,          9   d   V P_                  RVPP                  4      pM#V Pa                  V4      pMV Pa                  V4      p. pVPc                  4       R8X  Ed<   V'       g-   \e        V4      V,          pVV Pg                  VVV4      ,          pV Pi                  4       '       g   V Pj                  VPm                  4       ,          Po                  4        F  w  pp\(        P*                  P9                  V P;                  V4      VPq                  V4      4      pVV8X  g   KM  V Ps                  VPP                  4      p\u        V Pv                  VRV,           V4      pV Py                  V4       K  	  WP{                  V P;                  V4      4      ,          p	V P}                  W4      w  ppV	P                  V4       VV,          pVe   V	P                  V4       \u        V Pv                  VVV4      pV P                  VVV4       V F  p VP                  V 4       K  	  V F  p \        V \"        4      '       d   V P%                  V P&                  4      p MFV P                  V 4      '       g0   \(        P*                  P9                  V P;                  V4      V 4      p VP                  V 4       K  	  VP                  V4       V Pi                  4       '       g*   V P                  W4       F  pVP                  V4       K  	  V'       d   VP                  RV4       VPc                  4       R8X  d   R R lp!VP                  RV!! V4      4       VP                  RV	4       V P                  WVV4       V Py                  V4       \        V\        4      '       g   Q h\        V\        4      '       g   Q hWP                  RR4      3# )z5
Compiles C/C++, ObjC/ObjC++, Fortran, and D sources
Nz.hz(BUG: sources should not contain headers r"  Fz/BUG: broken generated source file handling for r  r   intelr  b_ltor  r  r  r  ry  r  r  c                    V ^8  d   QhRRRR/# )r7   
targetNamer9   r:   r;   )r<   s   "r=   r>   :NinjaBackend.generate_single_compile.<locals>.__annotate__  s      c c r?   c                   R p\        V 4       Fr  w  r#VR9   d>   \        V^,
          RR4       F  pW,          R8X  d   VR,          pK   M	  VR,          pM!VR8X  d   VR,          pMVR8X  d
   VR,          pW,          pKt  	  V# )r   rB   r`   #>   	r_   r   )	enumeraterange)r-  r  r   r   js   &    r=   quote_make_target?NinjaBackend.generate_single_compile.<locals>.quote_make_target  s    '
3FQK'!&q1ub"!5A)}4 &$ %	 "6 $c#c$KF 4 r?   CUDA_ESCAPED_TARGETr  rB   r$  >   r   r  )Hr   r9   r  rw  r#   r   r  r	  r  r  r#  r
  r  r  rs  r  r  r   r@  rA  r  r  r  r  r   rE   r)   object_filename_from_sourcer   r  r  r  r  r  r  get_pch_namer  r  r  r&   r  r  r   r)  r  rsplitr  r  r  rl  r   r  rp  rf  r  r  module_name_to_filenamer  r   r   rx  get_module_outdir_argshandle_cpp_import_stdr-  add_header_depsr	  has_dir_partr  get_fortran_module_depsr  )add_dependency_scanner_entries_to_elementrU   )"r   r  r1  r(  r/  r  r  rU  r  r  r  r  r9  r  r  dep_filepchlistpch_deparrr   
target_ltor  
extra_depsr  r  srcfilemodfilerw  depelem	istd_argsistd_depr  rU  r5  s"   &&&&&&&&                          r=   r  $NinjaBackend.generate_single_compileH  s    &1%<k"#-#9Zr
c3CLL$6$6 #KC7!STT*6+;+;+B+B+DcJ::6L &&v.t8;;.11(CCH==fOO tx{{*11(CCH$$228< 5 33FhPUWY[hi33FhPRUXTY[hi$$224	c4  ))$*;*;<Gww}}W%% <<<"--i8888%c)nq&8&9:G #RSVRY!Z[["%:3'#BCC77#N'',,t::6BLQ..w7 	33HgNN ,1A1AdFZFZ[aFbFbjj!2!23GGG[[G#GCT88@(BWBWX_`aXbBcdAJJqMG ??	)//	'SYSeSerx  sD  sD  9E  FJFE$7$788V^^^PZ`c`j`jknpq`rst`u  zC  zQ  zQ  RU  zV  aV $ ; ;<QS[SgSg h $ : :8 D 66x@M
  "i/
  y/G3d33HgvNN
//11 )-(9(9&:M:M:O(P(V(V(X$GW ggll4+F+Fv+N+3+K+KG+TVG #~ $ 4 4V5G5G H"3D4D4D4;4F4N4;#= w/ )Y 778S8STZ8[\\H #88J	8	"x!OOJ'#D$4$4g}gVVWk:AOOA A!T""%%d&7&78&&q))GGLL!<!<V!DaH  #  	 ++--11&C" DY1  "f,& 24Eg4NO*66vRUVw'3'''''3''''s344r?   c                    V ^8  d   QhRRRR/# )r7   r  r  r:   r\   r;   )r<   s   "r=   r>   r`    s      -> 4 r?   c                	    R VP                   9  d   R# RV P                  P                  P                  9  d   R# V P                  P                  P	                  VR4      R8X  d   R# R# )r  Fcpp_importstdfalseT)r   r  r  r  get_option_for_targetr  s   &&r=   target_uses_import_std#NinjaBackend.target_uses_import_std  sX    ((($"2"2";";"D"DD$$::6?SW^^r?   c                   V ^8  d   QhRR/# r7   r  r  r;   )r<   s   "r=   r>   r`    s     )] )],= )]r?   c                	
   . p. pV P                  V4      '       g   W43# \        P                  ! R 4       VP                  R8X  d   V P                  f   RpRp\        V P                  WV.R. 4      pVP                  WP                  4      pWP                  WP                  4      ,          pV. RO,          pVP                  RVP                  V,           4       V P                  V4       \        WuV.4      V n        R.p\        RRV P                  P                  4      .pW43# VP                  R	8X  Ed5   V P                  Ef   R
pRp\!        \"        P$                  R,          4      R,          p	V	P'                  4       '       g   \)        R4      h\+        V	4      p
\        V P                  WV.RV
.4      pVP                  WP                  4      pWP                  WP                  4      ,          pVRRRV
.,          pVP                  RVP                  V,           4       V P                  V4       \        WuV.4      V n        \        RRV P                  P                  4      .pW43# \-        RVP                   R24      h)zOImport std support is experimental and might break compatibility in the future.rp  zgcm.cache/std.gcmzstd.or  	-fmodulesr  Tr   r  zstd.ifczstd.objVCToolsInstallDirzmodules/std.ixxz*VS std import header could not be located.z/nologorP   z/O2z%Import std not supported on compiler z yet.)r5  rX  z-fsearch-include-pathzbits/std.cc)rS  r   r  r  rp  r   r   r1  r  r2  r  exelistrx  rY  r   r[  r   r  environis_file
SystemExitr9   r   )r   r  r  rK  rL  mod_filemod_obj_filerz  r  in_filein_file_strs   &&&        r=   r=  "NinjaBackend.handle_cpp_import_std  s9   	**622&&fg ;;%&.&()9)9H;SUegij'??HXHXY < <VEUEU VV [[i)9)9L)HIt$"/"O$IT2t'F'FGHH&&[[F"&$(rzz*=>?BSS(($%QRR!'l()9)9H;SUehsgtu'??HXHXY < <VEUEU VVD% EEi)9)9L)HIt$"/"OT2t'F'FGHH&& #HUZ![\\r?   c                    V ^8  d   QhRRRR/# r  r;   )r<   s   "r=   r>   r`    s     , ,@Q ,nr ,r?   c                	   V P                  V4      '       g   R # \        V\        P                  4      '       d   R # \        P
                  P                  VP                  4      ^,          R,          pVR8w  d   VP                  4       pV\        P                  R,          9   g   V\        P                  R,          9   g   R # V P                  V4      ^,          pVP                  RV4       VP                  V4       R # )Nr   r  r  r  dyndep)r  r   r   r,  r  r  rJ  rG  rK  r   r  r  r  r  )r   r  r  r  r1  	extensiondep_scan_files   &&&&&  r=   rA  6NinjaBackend.add_dependency_scanner_entries_to_element  s    11&99fe1122GG$$SYY/226	!)IY44Y??9PYPgPghmPnCn226:1==1]+r?   c                    V ^8  d   QhRRRR/# )r7   r  r  r:   r  r;   )r<   s   "r=   r>   r`  +  s      T T,= TBS Tr?   c                	    V P                  V4      p\        P                  P                  VR 4      \        P                  P                  VR4      3# )zdepscan.jsonz
depscan.dd)r  r  r  r   )r   r  privs   && r=   r  "NinjaBackend.get_dep_scan_file_for+  s;    **62ww||D.1277<<l3SSSr?   c                   V ^8  d   QhRR/# r  r;   )r<   s   "r=   r>   r`  /  s     * *T *r?   c                	*   V F  p\        V\        4      '       d   VP                  V P                  4      pMFV P	                  V4      '       g0   \
        P                  P                  V P                  V4      V4      pVP                  V4       K  	  R # r   )
r   r   r@  rA  r?  r  r  r   r  r  )r   r  ninja_elementr/  rU  s   &&&& r=   r>  NinjaBackend.add_header_deps/  sm    A!T""%%d&7&78&&q))GGLL!<!<V!DaH&&q) r?   c                    V ^8  d   QhRRRR/# )r7   rG  r3   r:   r\   r;   )r<   s   "r=   r>   r`  7  s     # #, #4 #r?   c                	b    \        V\        4      '       d   VP                  R 8g  # \        V4      # )r   )r   r   r'  r$   )r   rG  s   &&r=   r?  NinjaBackend.has_dir_part7  s)    eT""<<2%%E""r?   c               $    V ^8  d   QhRRRRRR/# )r7   r  r  r  r   r:   r   r;   )r<   s   "r=   r>   r`  E  s#     
 
.? 
8 
Xc 
r?   c                	J   VP                   R 8w  g   V P                  4       '       d   . # \        P                  ! VP                  VP
                  4       Uu. uF@  p\        P                  P                  V P                  V4      VP                  4       4      NKB  	  up# u upi )r  )r  rp  r%  r&  r'  r(  r  r  r   r$  r  )r   r  r  lts   &&& r=   r@  $NinjaBackend.get_fortran_module_depsE  s     	)T-I-I-K-KI  oof&9&96;T;TU
U GGLL,,R0"//2CDU
 	
 
s   AB c                   V ^8  d   QhRR/# )r7   r  zT.Tuple[str, T.Optional[str]]r;   )r<   s   "r=   r>   r`  O  s     8 8?\ 8r?   c                	   V^ ,          pVP                  V4      p\        P                  P                  V P	                  V4      V4      p. pWpP                  W4      ,          pV^,          f   V P                  WP                  4       V^ ,          4      p\        P                  P                  \        P                  P                  V P                  VP                  4       V4      4      p	WrP                  V	R4      ,          pM@\        P                  P                  V P                  VP                  4       V^,          4      p\        P                  P                  V4      p
VP                  WV4      w  rW|,          pWpP                  W4      ,          pWpP                  W!V4      ,          pVR,           VP!                  4       ,           pVP#                  4       '       d   V.M. pW}WnV3# )r   Fr  )r9  r  r  r   r  r  create_msvc_pch_implementationrl  r  rA  get_source_subdirr  r  gen_pch_argsr  r  get_depfile_suffixshould_link_pch_object)r   r  r  r  headerpchnamedstr  rE  pch_header_dir	just_nameobjnamepch_argsr  link_objectss   &&&&           r=   generate_msvc_pch_command&NinjaBackend.generate_msvc_pch_commandO  s   Q''/ggll466v>H55fGGq6>88AVAVAXZ]^_Z`aFWW__RWW\\$:K:KVMeMeMgio-pqN11.%HHHWW\\$"3"3V5M5M5OQTUVQWXFGG$$V,	&33IsK11&CC33HgNNCi(5577$,$C$C$E$Ey2c77r?   c                   V ^8  d   QhRR/# r7   r  r9   r;   )r<   s   "r=   r>   r`  j  s     	& 	&c 	&r?   c                	   V P                  W4      pVP                  R 4      R,          R8X  d   VP                  R8X  d   VRR.,          p\        P                  P                  V P                  V4      \        P                  P                  V4      R ,           VP                  4       ,           4      pVR ,           VP                  4       ,           pWFV. 3# )r  rp  r  r	  z
c++-headerr   )
r  r   r  r  r  r   r  r  get_pch_suffixr}  r   r  r  r  r  r  r  s   &&&&   r=   generate_gcc_pch_command%NinjaBackend.generate_gcc_pch_commandj  s    00B99S>"$):):e)C |,,Hggll466v>77++C0369P9P9RRTCi(5577c2%%r?   c                   V ^8  d   QhRR/# r  r;   )r<   s   "r=   r>   r`  u  s     & &s &r?   c                	   V P                  W4      p\        P                  P                  V P	                  V4      \        P                  P                  V4      R ,           VP                  4       ,           4      p\        P                  P                  V4      ^ ,          R ,           VP                  4       ,           pWFV. 3# )r  )	r  r  r  r   r  r  r  rJ  r}  r  s   &&&&   r=   generate_mwcc_pch_command&NinjaBackend.generate_mwcc_pch_commandu  s    00Bggll466v>77++C0369P9P9RRTggs#A&,x/J/J/LLc2%%r?   c                   V ^8  d   QhRR/# rV  r;   )r<   s   "r=   r>   r`  |  s        #4  r?   c                	   Ve   TM. p. pR EFG  pVP                   V,          pV'       g   K!  VP                  V,          pVP                  4       R8X  dX   V P                  WV4      w  rxrp\        P
                  P                  V P                  VP                  4       V^ ,          4      pMVP                  R8X  d   K  RVP                  9   d`   \        P
                  P                  V P                  VP                  4       V^ ,          4      pV P                  WV^ ,          4      w  rxrR pM^\        P
                  P                  V P                  VP                  4       V^ ,          4      pV P                  WV^ ,          4      w  rxrR pW:,          pV P                  V4      p\        V P                  W.,           W4      pVe   VP                  V4       V P!                  WV4       VP#                  RV4       VP#                  RV4       V P%                  V4       V P&                  VP                  ,          P)                  W.,           4       EKJ  	  V# )Nr  r*  r  r  r  )r   r  )r  r   r  r  r  r  r   rA  r{  r  r  r  r  r   r   r	  r>  r  rx  rg  r  )r   r  r/  r  rO  r  r  r  r  r  objsr1  extradepr   rz  s   &&&            r=   r  NinjaBackend.generate_pch|  s   %0%<k" D**T"C!'!1!1$!7H++-7262P2PQWcf2g/377<<(9(96;S;S;UWZ[\W]^'8;;&ggll4#4#4f6N6N6PRUVWRXY-1-K-KF^abc^d-e*ggll4#4#4f6N6N6PRUVWRXY-1-J-J6]`ab]c-d*K55h?H$T%5%5te|XSD#X&  {;MM&(+MM)S)NN4 LL%,,TE\:9 !: r?   c                   V ^8  d   QhRR/# r   r;   )r<   s   "r=   r>   r`    s     K K3 Kr?   c                	    V P                  V4      p\        P                  P                  W!P	                  4       R ,           4      # )z.symbols)r  r  r  r   r  )r   r  	targetdirs   && r=   get_target_shsym_filename&NinjaBackend.get_target_shsym_filename  s3    //7	ww||I':':'<z'IJJr?   c                   V ^8  d   QhRR/# r  r;   )r<   s   "r=   r>   r`    s       r?   c                	@   V P                   P                  VP                  ,          P                  4       '       d   V P	                  V4      pMV P                  V4      p\        V\        P                  4      '       d   VP                  '       d   V P                   P                  VP                  ,          P                  4       '       d   VP                  4       w  r4VP                  VP                  4       ^ ,          4      VP                  4       ^ &   VP                  4       ^ ,          p\        P                  P!                  V P#                  V4      V4      pV P%                  V4      p\'        V P(                  VRV4      pVP+                  RV P	                  V4      4       V P                   P-                  4       '       dI   VP+                  RRV P                   P                  VP                  ,          P.                  ,           4       V P1                  V4       R# )r   r@  IMPLIBCROSSz--cross-host=N)r  r  r  rC  r  r  r   r   r*  r  r  $get_clink_dynamic_linker_and_stdlibsr  r  r  r  r   r$  r  r   r   r  is_cross_buildsystemrx  )r   r  target_filerv  r  symnamerz  s   &&     r=   r  NinjaBackend.generate_shsym  s    $$V%7%78??AA>>vFK226:Kfe1122v7L7L7L((););<CCEE&,&Q&Q&S#*0*A*A&BTBTBVWXBY*Z""$Q'$00215 ggll4+>+>v+FT008 !1!17G[Qh D DV LM**,,MM'?T5E5E5N5NvOaOa5b5i5i#ijtr?   c                   V ^8  d   QhRR/# r   r;   )r<   s   "r=   r>   r`    s     Q QS Qr?   c                	t    \         P                  P                  V P                  V4      VP                  4      # r   )r  r  r   r$  import_filenamer  s   &&r=   get_import_filename NinjaBackend.get_import_filename  s(    ww||D//79O9OPPr?   c                    V ^8  d   QhRRRR/# )r7   r  r  rv  r   r;   )r<   s   "r=   r>   r`    s     % %0A %8 %r?   c                	D   . p\        V\        P                  4      '       d   W2P                  4       ,          pVP                  '       d   W2P                  4       ,          pVP                  '       d'   W2P                  V P                  V4      4      ,          pVP                  '       d   W2P                  4       ,          pVP                  '       d;   W2P                  VP                  P                  V P                  4      4      ,          pV# \        V\        P                  4      '       Edj   \        V\        P                   4      '       d   W2P#                  V4      ,          pMW2P%                  4       ,          pW2P'                  4       ,          p\        V\        P                   4      '       d   VP(                  '       dN   W2P+                  VP,                  VP.                  VP0                  VP2                  VP4                  4      ,          pVP                  '       d;   W2P                  VP                  P                  V P                  4      4      ,          pVP                  '       d'   W2P                  V P                  V4      4      ,          pV# \        V\        P6                  4      '       d_   V P8                  VP:                  ,          ;'       d    VP=                  4       '       * pW2P?                  V P@                  V4      ,          pV# \C        R 4      h)zUnknown build target type.)"r   r   r  r  export_dynamicgen_export_dynamic_link_argsr  gen_import_library_argsr  pieget_pie_link_argsvs_module_defsgen_vs_module_defs_argsr@  rA  r*  SharedModuleget_std_shared_module_link_argsget_std_shared_lib_link_argsget_pic_argsforce_sonameget_soname_argsprefixr   rN  	soversiondarwin_versionsr)  ro  r  should_installget_std_link_argsr  r  )r   r  rv  r  produce_thin_archives   &&&  r=   get_target_type_link_args&NinjaBackend.get_target_type_link_args  s\    "fe..//4466H$$$??AA%%%::4;S;STZ;[\\zzz4466$$$::6;P;P;`;`aearar;stt. -  3 344&%"4"455BB6JJ??AA++--Hfe&8&899V=P=P=P22MM6;;$$f&<&<> > $$$::6;P;P;`;`aearar;stt%%%::4;S;STZ;[\\   3 344#'#;#;F<N<N#O#o#oX^XmXmXoTo 001A1ACWXXH  ;<<r?   c                	2   . p\        V\        P                  4      '       du   V P                  P                  VP
                  ,          pVP                  4       '       g   VP                  4       '       d"   W2P                  VP                  4      ,          pV# r   )
r   r   r  r  r  r  r+  	is_cygwinget_win_subsystem_argswin_subsystem)r   r  rv  r  rH   s   &&&  r=   +get_target_type_link_args_post_dependencies8NinjaBackend.get_target_type_link_args_post_dependencies  sk    fe..//   ))&*<*<=A||~~99&:N:NOOr?   c                   V ^8  d   QhRR/# )r7   rv  r.   r;   )r<   s   "r=   r>   r`    s     Q Q- Qr?   c                	   R pVP                   R8X  d*   \        P                  ! VP                  R4      '       d   RpV'       dg   . pVP                   FR  pVP                  R 4      pW@P                  V4      ,          pVP                  V P                  V4      ^ ,          4       KT  	  V# V P                  WP                  4      pV'       d   VP                  V4      # . # )Fr  z<19.00.23918T)r  r   r  r  r(  extract_all_objectsdetermine_ext_objsr-  r  build_target_link_argumentsr  )r   rv  r  
use_customobjects_from_static_libsr  r   target_argss   &&&     r=   get_link_whole_args NinjaBackend.get_link_whole_args  s    
99 ''GG!
AC$00++E2(,C,CA,FF((//0H0H0Ma0PQ 1
 ,+::6C\C\]K=H6,,[9PbPr?   c                   V ^8  d   QhRR/# )r7   r:   r   r;   )r<   s   "r=   r>   r`    s      UY r?   c                	    ^RI Hp V FR  pV FI  pVP                  WvV4      pV'       g   K  VP                  V P                  V4      pV'       g   KE  Vu u # 	  KT  	  R# )r7   )	CCompilerN)compilers.cr  _get_trials_from_pattern_get_file_from_listr  )	r   rv  r  search_dirspatternsr  rU  r  trials	   &&&&&    r=   guess_library_absolute_path(NinjaBackend.guess_library_absolute_path  sT    +A!::1I!55d6F6FN  r?   c                	   \        4       p\        4       p. pV P                  P                  4       p\        VP	                  V4      4      p	V	 EF  p
W9   d   V
P                  R 4      '       g   K#  V
P                  R4      '       d~   \        V
4      ^8  d   V
R,          pM \        V	4      p\        P                  P                  V4      '       g    \        P                  P                  W4      pVP                  V4       K  V
P                  R4      '       d;   \        V
4      ^8  d   V
R,          pM \        V	4      pVP                  V4       EK  \        P                  P                  V
4      '       g   EK0  \         P"                  ! V
4      '       g   EKO  \        P                  P%                  V
4      '       g   EKw  VP'                  V
4       EK  	  . p VP)                  \*        P,                  RR7      pVP)                  \*        P.                  RR7      p\1        V4      \1        VP3                  4       4      ,           pV F  pV P5                  VVW^4      pV P5                  VVW_4      pV'       d.   VP'                  VP7                  4       P9                  4       4       V'       g   Kh  VP'                  VP7                  4       P9                  4       4       K  	  W,           #   \         d    \        P                  ! R4         EK7  i ; i  \         d    \        P                  ! R4         EKa  i ; i  \:        P<                  \>        3 d#   pR\A        T4      9  d   h  R	p?Y,           # R	p?ii ; i)
r]  r  :r7   NNz?Generated linker command has -L argument without following pathr  zIGenerated linker command has '-l' argument without following library nameT)strictget_library_namingN)!r   r  r  rT  native_args_to_unixr   rE   rU  StopIterationr   r  r  r  r  r   r  r   r   isfiler  r  r   STATICSHAREDrm  get_library_dirsr  resolver(  r   r   AttributeErrorr9   )r   rv  r  r  internalr  libsabsolute_libsr  ititemr  r  guessed_dependenciesstatic_patternsshared_patternsr  
staticlibs
sharedlibsr0  s   &&&&&               r=    guess_external_link_dependencies-NinjaBackend.guess_external_link_dependencies  s    !l|$$224	&,,X67D(<(<t$$t9q=8D#Bx ww}}T**77<<	8D%&&t9q=r(C"2h t$$)=)=d)C)CW[H\H\$$T*7 :  "	$77t7TO$77t7TO,uV5L5L5N/OOK "==fg>I\
!==fg>I\
(//
0B0B0D0M0M0OP:(//
0B0B0D0M0M0OP   $33Q ) %fg ) %pq0 ''8 	#3q61 2 $33		sC   "K+6LCL? 21L? +!LL!L<;L<?M<M77M<c                   V ^8  d   QhRR/# r  r;   )r<   s   "r=   r>   r`  R  s      K r?   c                	   \        V\        P                  4      '       g   Q h\        P                  P                  V P                  V4      VP                  R ,           4      p\        V P                  V.RV4      pVP                  4       pVP                  R,          pVP                  W24      w  r'Wg,          pVP                  4       '       dZ   V P                  W4      pWP                  W4      ,          pVP                   P#                  V4      pWhP%                  4       ,          pV P'                  W4      pVP)                  RV4       VP)                  RRV 24       V P+                  V4       V# )z
-prelink.or  :NNNr  r   zPrelinking )r   r   r)  r  r  r   r  r   r   r   get_prelinkerrZ  get_prelink_argsget_prelink_append_compile_argsr	  r
  r  r  r  r  r  rx  )	r   r  r  prelink_namerz  	prelinkerrO   r   r  s	   &&&      r=   r  NinjaBackend.generate_prelinkR  s2   &%"5"56666ww||D$?$?$GWcIcd !1!1L>CSU]^((*	""33LK4466BB6ULEEfXXL'00>>|LL))++C  -i%m{<.%ABtr?   c               $    V ^8  d   QhRRRRRR/# )r7   r  r  rv  rw  r:   r   r;   )r<   s   "r=   r>   r`  g  s$      +< Fe ju r?   c                	p   \        VP                  4      '       dX   \        P                  P	                  \        P                  P                  VP                  4      V P                  V4      4      pMV P                  V4      pVP                  V P                  P                  4       VV4      w  qAn
        V# r   )r$   r   r  r  r   r  r$  build_rpath_argsr  r  rpath_dirs_to_remove)r   r  rv  target_slashname_workaround_dir
rpath_argss   &&&  r=   r  !NinjaBackend.get_build_rpath_argsg  s    $$ /1ggll277??6;;;W;?;N;Nv;V/X+ /3.A.A&.I+##D$4$4$B$B$D$C$*, 	20 r?   c                    V ^8  d   QhRRRR/# )r7   r  r  rv  z#T.Union['Compiler', 'StaticLinker']r;   )r<   s   "r=   r>   r`  v  s      [ [$5 [Ru [r?   c                	2   Ve   TM. pVe   TM. p. p\        V\        P                  4      '       d   RpMVP                  4       p\        V\        P                  4      '       d   V P                  V4       V P                  P                  VP                  ,          P                  4       '       dL   V P                  V4      p	V P                  V4      p
\        V P                  V
RV	4      pV P                  V4       V P                  VP                  4      pVR,           V,           pVP!                  4       p\        V\        P                  4      '       d   VP#                  WV P                  4      pM"\$        P"                  ! VVV P                  4      pWP'                  W4      ,          pWP)                  W4      ,          pWP+                  4       ,          pWP-                  V P/                  VR4      4      ,          pV P/                  VR4      '       d7   WP1                  WA4      ,          pV P3                  WA4      pVe   VV.,          pWP5                  W4      ,          p\        V\        P                  4      '       g   WP7                  WA4      ,          p\        V\        P                  4      '       g   WP                  P9                  WAP:                  VP                  4      ,          pWP                  P=                  WAP                  4      ,          pWP                  P>                  PA                  VP                  VP                  4       4      ,          pWPC                  W4      ,          pVR8X  d   . pMVPE                  4       pV PG                  VV4      pVV,          p\        V\        P                  4      '       g   WPI                  V4      ,          pVPK                  4        F#  pVPM                  VPO                  V4      4       K%  	  VPE                  4        F  p\        V\        P                  4      '       g   K%  VPK                  4        Fb  pVPO                  V4      pVPP                  R8X  d-   VPS                  4       R8w  d   ^RI*H+p VPY                  V4      pVPM                  V4       Kd  	  K  	  WP[                  W4      ,          p\        V\\        4      '       d   WP_                  V4      ,          p. pVPa                  V Pc                  WAVV4      4       W0Pe                  V4      ,          pV Pg                  V4      pW,          pVV,          pW,          pTPa                  V Uu. uF  pV Pi                  V4      NK  	  up4       TPa                  VPj                   Uu. uF  pV Pi                  V4      NK  	  up4       \        V P                  W-W7R	7      pVPm                  VV,           4       VPo                  4       R
8X  d   \q        VV,            Uu. uF  pVPs                  R4      '       g   K  VNK   	  up4      ^ 8  dQ   V P/                  V\u        RVP:                  VP                  4      4      '       g   \w        RVPP                   R24      hVPo                  4       R9   d   . p\x         F}  pV P                  P>                  P$                  V,          pVP{                  4        F?  w  ppVR9   g   K  VPo                  4       R9   g   K&  VV P}                  VV4      ,          pKA  	  K  	  VP                  RV4       VP                  RV4       V P                  WV4       V# u upi u upi u upi )Nr  	IMPORTLIB_LINKERr,  r)  _rust_native_static_libsr  )VisualStudioLikeLinker)r  r  z.mar+  z Tried to link the target named 'zY' with a MIL archive without LTO enabled! This causes the compiler to ignore the archive.r  	LINK_ARGS>   tic2000c6000>   r   r  )Ar   r   r)  rl  r*  r  r  r  r  rC  r  r  r   r   rx  r  r  r}  r   transform_link_argsr  r|  get_optimization_link_argsr  r  r  r  r  r  r  r  r  get_external_link_argsr  r  r  get_target_link_argsr  extend_preserving_lflagsget_dependency_link_argsr   r  linkers.linkersr
  r  r  r   get_option_link_argsr-  r  get_import_std_object$get_custom_target_provided_librariesr  link_dependsr	  r  rE   r  r&   r   r   r  r  r  r~  ) r   r  r  r  rv  r  r  r  linker_baser  import_namerz  rw  linker_ruler  base_link_args	debugfiledependenciesr  r  rU  r  r
  dep_targetscustom_target_librariesr  r   r  r  r  rE  r  s    &&&&&&&                         r=   r  NinjaBackend.generate_linkv  s   #-#9Zr
%0%<k"fe1122"K --/Kfe1122'((););<CCEE"66v>"66v>()9)9;U`at$$$V%7%78!I-5 '') fe1122#66vtGWGWXN&99&:@:>:J:JLN 	,,VDD00@@113355d6L6LVUc6dee!!&'2244VDDH44VDI$), 	226BB &%"5"56600@@H&%"5"566

88ARARTZTfTfggH 

77@R@RSSH ((11HHI[I[]c]p]p]rssH 	--f== (" L!224L33FLIH&%"5"566 33F;;H//1 11&2Q2QRU2VW 2 ,,.a!4!455 224$*$C$CC$H	
 88'AAfF`F`FbflFlP(>(R(RS\(]I 99)D  5 / 	DDVTT fh'' 33F;;H4@@QY[cde..v66 #'"K"KF"S++\R\D88;\RS%+%8%8:%8 !88;%8: 	; !1!17o[#::;==?i'{-DDZD!

SXHYAADZ[^__hlh~h~  @F  HQ  RY  [a  [l  [l  nt  n@  n@  HA  iB  iB$'H  Vp  &q  r  r ==?66L,((11;;KH*/++-&Hh</HOO4EIa4a$(I(I&RZ([[ +8  -
 MM&,/k8,//I+ S:
 [s   ^
>^4^^c                    V ^8  d   QhRRRR/# )r7   r  r  r:   rs  r;   )r<   s   "r=   r>   r`    s     + +,= +, +r?   c                	`    V P                  V4      '       g   . # V P                  P                  # r   )rS  rp  r\  r  s   &&r=   r  "NinjaBackend.get_import_std_object  s(    **622I***r?   c                   V ^8  d   QhRR/# r   r;   )r<   s   "r=   r>   r`    s     + +C +r?   c                	   \        V\        P                  4      '       dJ   VP                  4       '       d#   VP                  R 8X  d   V P                  V4      # V P                  V4      # \        V\        P                  4      '       de   VP                  '       d   VP                  4       # VP                  V P                  P                  4       V P                  P                  4       4      # V P                  V4      # )r  )r   r   r*  r  r{  r  r  r   r   r  relative_namera  r  rF  r  )r   r  s   &&r=   r  $NinjaBackend.get_dependency_filename  s    a,,--{{}}!2!2l!B//2255a888==))zzz((t'7'7'F'F'H'+'7'7'E'E'GI I''**r?   c                   V ^8  d   QhRR/# r  r;   )r<   s   "r=   r>   r`  &  s     ; ; ;r?   c                	4   VP                  4        F  w  r4p\        P                  P                  W#4      p\        P                  P                  V P                  P                  4       W#4      p \        P                  ! V4        \        P                  ! WG4       V P                  P                  V4       K  	  R#   \         d     LEi ; i  \         d    \        P                  ! R 4        K  \         d    \        P                  ! R4        EK  i ; i)z?Library versioning disabled because symlinks are not supported.zOLibrary versioning disabled because we do not have symlink creation privileges.N)get_aliasesr  r  r   r  r  remover  symlinkrl  r  NotImplementedErrorr   r)  OSError)r   r  outdiraliastotag	aliasfileabs_aliasfiles   &&&     r=   r  #NinjaBackend.generate_shlib_aliases&  s    $002NEsV3IGGLL)9)9)G)G)I6YM		-(;

2- ((//	: 3
   ' ^

\] n

lmmns0   /B=C=C
C!D2D;DDc                    V ^8  d   QhRRRR/# )r7   treesr   r:   r9   r;   )r<   s   "r=   r>   r`  7  s     
 
+ 
# 
r?   c                	    V P                  R RR4      p\        V P                  P                  4       V4      p\        P
                  P                  V P                  P                  4       R4      pVP                  RV P                  P                  4       RRV.,           4       VP                  RR4       V P                  V4       \        VR	4      ;_uu_ 4       p\        P                  ! W54       R
R
R
4       R #   + '       g   i     R # ; i)zclean-ctlistr  r  zcleantrees.datr  r@  
cleantreesr   z"Cleaning custom target directoriesr  N)r{  r'   r  r  r  r  r   r  r  rE  rx  r  r  r  )r   r9  r0  rU  d_fileofiles   &&    r=   generate_custom_target_clean)NinjaBackend.generate_custom_target_clean7  s    $$^5EwOt''557?d..>>@BRS	

9d..@@BlT`bhEiij	

="FGq&$5KK!    s   C<<D	c                   V ^8  d   QhRR/# r  r;   )r<   s   "r=   r>   r`  C  s     	" 	"T 	"r?   c                	   V P                  R RR4      pVP                  R\        P                  ! 4       . R	O,           4       VP                  RR4       V P	                  V4       V P                  RRR4      pVP                  R\        P                  ! 4       . R
O,           4       VP                  RR4       V P	                  V4       R# )
clean-gcnor  r  r  r   zDeleting gcno files
clean-gcdazDeleting gcda filesN)r@  delwithsuffixr  gcno)r@  rD  r  gcda)r{  r  r   r  rx  )r   	gcno_elem	gcda_elems   &  r=   generate_gcov_clean NinjaBackend.generate_gcov_cleanC  s    ,,\;KWU	9h&@&@&BEq&qr=*?@y!,,\;KWU	9h&@&@&BEq&qr=*?@y!r?   c                   V ^8  d   QhRR/# r  r;   )r<   s   "r=   r>   r`  N  s      k r?   c                	   . pV P                   P                  P                  P                  4        F  w  r#V P                   P                  P                  P	                  V4      '       g   K<  TP                  R \        V4      ,           R,           \        VP                  \        4      '       d   VP                  M"\        VP                  4      P                  4       ,           4       K  	  \        V4      # )z-DrQ  )r  r  r  r  is_project_optionr  r9   r   valuerK  r*  )r   cmdskvs   &   r=   get_user_option_args!NinjaBackend.get_user_option_argsN  s    $$--66<<>DA((11CCAFFD3q6MC/jRU>V>V177\_`a`g`g\h\n\n\pqr ? d|r?   c                   V ^8  d   QhRR/# r  r;   )r<   s   "r=   r>   r`  X  s      t r?   c                	    V P                  R RR4      pVP                  RR4       VP                  RV P                  P                  4       R .,           4       VP                  RR4       V P	                  V4       R# )	distr  r  r[  zCreating source packagesr  r  r  N)r{  r  r  rE  rx  r^  s   & r=   r  NinjaBackend.generate_distX  sd    ''0@'Jf89i!1!1!C!C!E!PQfi(tr?   c                   V ^8  d   QhRR/# r  r;   )r<   s   "r=   r>   r`  _  s       r?   c                	@   R V P                   9   g   V P                  R4      '       g   R# V P                  P                  4       RR V P                  P                  .,           pV P                  R RR4      pVP                  RV4       VP                  RR4       V P                  P                  4        F1  pVP                  R	9   g   K  VP                  VP                  4       K3  	  VP                  \        V P                  4      4       V P                  V4       R# )
clippyr  Nr@  r  r  r  r  r     rlibrx  r  r   have_languager  rE  r  r{  r  rk  r  rI  r	  rJ  r   rh  rx  r   rO   rz  r<  s   &   r=   generate_clippyNinjaBackend.generate_clippy_  s    t'''t/A/A&/I/I0028T%5%5%?%?@A''2BGLi%fi(%%,,.E#BBU../ / 	T$5567tr?   c                   V ^8  d   QhRR/# r  r;   )r<   s   "r=   r>   r`  n  s      $ r?   c                	@   R V P                   9   g   V P                  R4      '       g   R# V P                  P                  4       RR V P                  P                  .,           pV P                  R RR4      pVP                  RV4       VP                  RR4       V P                  P                  4        F1  pVP                  R	9   g   K  VP                  VP                  4       K3  	  VP                  \        V P                  4      4       V P                  V4       R# )
r  r  Nr@  r  r  r  r  r  r[  r]  r_  s   &   r=   generate_rustdocNinjaBackend.generate_rustdocn  s    (((0B0B60J0J0029d&6&6&@&@AB''	3CWMi%fi(%%,,.E#BBU../ / 	T$5567tr?   c                   V ^8  d   QhRR/# r  r;   )r<   s   "r=   r>   r`  }  s      D r?   c                	:   \         P                  ! 4       '       g   R # RV P                  9   d   R # V P                  P	                  4       RRV P                  P
                  V P                  P                  V P                  P                  4       .,           V P                  P	                  4       ,           R.,           V P                  4       ,           pV P                  RRR4      pVP                  RV4       VP                  RR	4       V P                  V4       R # )
Nz
scan-buildr@  	scanbuildsetupr  r  r  r  r  )r   detect_scanbuildr   r  rE  rb  r  r   rG  rR  r{  r  rx  rj  s   &  r=   generate_scanbuildNinjaBackend.generate_scanbuild}  s    **,,4+++002;(8(8(C(CTEUEUE_E_aeakaka~a~  bA  BB..014;9=?C?X?X?Z[ ''6FPi%fi(tr?   c               (    V ^8  d   QhRRRRRRRR/# )	r7   r   r9   	extra_argr   need_pchr\   r:   r}   r;   )r<   s   "r=   r>   r`    s*      s  Y] jn r?   c                	<   R V,           p. pV'       d!   VRV 2,          pVP                  RV 24       \        R4      V P                  P                  P                  9   d0   V P                  P                  P                  P                  R4      MRp\        V\        4      '       g   Q R4       hVP                  RV.4       \        P                  P                  \        P                  P                  V P                  P                  RV,           4      4      '       ga   \        P                  P                  \        P                  P                  V P                  P                  RV,           4      4      '       g   R	# W@P                  9   d   R	# V'       d,   \        V P                   P#                  4       4      R
08:  g   R	# V P                  P%                  4       RR
V,           V P                  P                  V P                  P&                  .,           V,           pV P)                  VRR4      pVP+                  RV4       VP+                  RR4       V'       d,   VP-                  \/        V P                   R
,          4      4       V P1                  V4       R	# )zclang-r]  z--r  alwaysr   z--colorz.clang-z_clang-Nr?  r@  r  r  r  r  r  )r  r&   r  r  r  r  r   r9   r-  r  r  r  r   rb  r   r   rg  r  rE  r  r{  r  r	  r   rx  )	r   r   rn  ro  rJ  r  coloroutrO   rz  s	   &&&&     r=   generate_clangtoolNinjaBackend.generate_clangtool  s   o
Qyk?*K9+./&$*:*:*C*C*L*LL ##,,55CCLQRZ 	(C((4*4(9h/0ww~~bggll4+;+;+F+F	TXHXYZZGGNN277<<0@0@0K0KYY]M]#^__***C 1 1 34	A0027T>4+;+;+F+FHXHXHbHbcd ''5EwOi%fi(LLdll7345tr?   c                   V ^8  d   QhRR/# r  r;   )r<   s   "r=   r>   r`    s     3 3d 3r?   c                	    \         P                  ! 4       '       g   R # V P                  R4       V P                  RR4       R # )Nr<   check)r   detect_clangformatrs  r   s   &r=   generate_clangformat!NinjaBackend.generate_clangformat  s2    ,,..)'2r?   c                   V ^8  d   QhRR/# r  r;   )r<   s   "r=   r>   r`    s     > >D >r?   c                	    \         P                  ! 4       '       g   R # V P                  RRR7       \         P                  ! 4       '       g   R # V P                  RRRR7       R # )NtidyT)ro  fix)r   detect_clangtidyrs  detect_clangapplyr   s   &r=   generate_clangtidyNinjaBackend.generate_clangtidy  sN    **,,6++--=r?   c               $    V ^8  d   QhRRRRRR/# )r7   r)  r9   rJ  r:   r}   r;   )r<   s   "r=   r>   r`    s!      # C D r?   c                	d   ^ RI pVP                  V4      '       g   R# W P                  9   d   R# V P                  P	                  4       RRWP                  P
                  .,           pV P                  VRR4      pVP                  RV4       VP                  RR4       V P                  V4       R# )	r   Nr@  tagsr  r  r  r  r  )	shutilwhichr   r  rE  rb  r{  r  rx  )r   r)  rJ  r  rO   rz  s   &&&   r=   generate_tagsNinjaBackend.generate_tags  s    ||D!!***00264)9)9)D)DEF''5EwOi%fi(tr?   c                   V ^8  d   QhRR/# r  r;   )r<   s   "r=   r>   r`    s       r?   c                	   V P                  4        V P                  4        V P                  4        V P                  4        V P	                  4        V P                  R R4       V P                  RR4       V P                  RR4       V P                  P                  4       RR.,           pV P                  RRR4      pVP                  RV4       VP                  R	R
4       V P                  V4       R# )etagsTAGSctagscscoper@  	uninstallr  r  r  r  r  N)rk  ry  r  r`  rd  r  r  rE  r{  r  rx  rj  s   &  r=   r  NinjaBackend.generate_utils  s    !!!#!7F+7G,8X.002lK5PP''5EwOi%fi(tr?   c                   V ^8  d   QhRR/# r  r;   )r<   s   "r=   r>   r`    s     = = =r?   c           	     	   R V P                  4       P                  4       3RV P                  4       3RV P                  R4      33 EFE  w  r. pV EF  p\        V\        P
                  4      '       d   VP                  '       d   V P                  P                  VP                  ,          P                  4       '       dJ   VP                  4       w  rVVP                  VP                  4       ^ ,          4      VP                  4       ^ &   VP                  \        P                   P#                  V P%                  V4      VP                  4       ^ ,          4      4       EK  	  \'        V P(                  VRV4      pV P+                  V4       EKH  	  V P-                  RRR4      pVP/                  RV P0                  R	R.,           4       VP/                  R
R4       . pV P                  P3                  4       P                  4        Fz  p\        V\        P4                  4      '       g   K%  VP                  4        FA  p	VP                  \        P                   P#                  V P%                  V4      V	4      4       KC  	  K|  	  V'       d!   VP7                  V P9                  V4      4       \;        R4      V P                  P<                  P>                  9   dh   V P                  P<                  P>                  PA                  R4      '       d3   V PC                  4        VP7                  R4       VP7                  R4       V P+                  V4       V PE                  4       p\'        V P(                  RRV4      pVP/                  RR4       V P+                  V4       V PF                  '       d4   \'        V P(                  RRV PF                  4      pV P+                  V4       \'        V P(                  RRR4      pVP/                  RR4       V P+                  V4       \'        V P(                  VRR4      pV P+                  V4       R# )rZ  rf  rh  Tr  cleanr  r  r  r  r   Cleaningr  rC  rB  rc  rt  r  r  zmeson-implicit-outsreconfigurer   N)$get_build_by_default_targetsr  get_testlike_targetsr   r   r*  r  r  r  r  r  r  r  r  r  r  r  r   r$  r   r   rx  r{  r  r  r  r  r	  r>  r&   r  r  r  rI  get_regen_filelistrl  )
r   targr   
targetlistr  rv  r  rz  ctlistr  s
   &         r=   r  NinjaBackend.generate_ending  sA   99;BBDE$d&?&?&AB)4+D+DT+JKMJD J a!4!455!:J:J:J''00?FFHH./.T.T.V+-3-D-DQ]]_UVEW-X*!!"'',,t/B/B1/Eq}}WXGY"Z[  %T%5%5tWjQDNN4 !M$ ''1A7Ki!3!3tWo!EFmZ0 '')002A!U//00AMM"'',,t/B/B1/Eq"IJ ) 3
 LL::6BC\"d&6&6&?&?&H&HH$$--;;LII$$&LL&LL&t&&( !1!1=BTVZ[fi(t ###$T%5%57LgW[WoWopDNN4  !1!1=BTV]^fi(t !1!14"Etr?   c               $    V ^8  d   QhRRRRRR/# )r7   	target_idr9   r  rS  r:   zT.List[TargetIntrospectionData]r;   )r<   s   "r=   r>   r`    s"     # # #\ #Nm #r?   c                	   < V P                   P                  V4      pV'       g   \        SV `  W4      # \	        VP                  4       4      # r   )ri  r   rd  get_introspection_datar   r  )r   r  r  datarq  s   &&& r=   r  #NinjaBackend.get_introspection_data  s=    &&**9571)DDDKKM""r?   )rn  rm  r   rg  rh  ro  r  rj  rf  rl  rp  ri  r   r  re  r  r  ru  r  rk  )FNr   )COMPILER)FNNNN)NN)NF)rm   rn   ro   rp   r   r{  r  r  r  r  r+  r:  rB  rP  rs  r~  r  r  r  r  r  r
  r  r  r4  r  rL  r  rQ  r  r  r  rv  r  r{  rx  r  r  r  r  r  r  r  r  r  r  r  r  r  r>  rm  r  rY  r   rV  rg  rq  r  r  r  r  classmethodr  r  r  r  r  r  r  r  r.  ry  rz  rN  rR  rX  r]  rb  rl  rp  r  r{  r  r  r  r  r  rw  rx  r  r  r	  r  r  r  r  r  r  r  r	   r  r  r	  r
  r  r  rS  r=  rA  r  r>  r?  r@  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r>  rI  rR  r  r`  rd  rk  rs  ry  r  r  r  r  r  rs   __classcell__)rq  s   @r=   r^  r^    s   : :.X"ApFk4 k4Z P60
2V 2Vh&&h%T0.`((
<
	)4V34.D8T".. 8D#,(	w4

4hl**jX!2A(3/j|6|EAN W\V]%0'> + + A A:)x ,C(J5fn 9 9 B B h h ` `G	wHr	.^`,N\AQ5 52U$&%P?j"N,=\24*C> :!x4Wl
7Kr"@ t *
 t5 5t 2_5 _5B)]V,T*#
86	&&   DK
*Q%N
Q( t @4D*[ [z+
+;"
	" 83>=~# # #r?   r^  c               0    V ^8  d   QhRRRRRRRRRRR	R
/# )r7   r1  r   r  r  r  zT.Dict[str, File]r  r1   r:   r   r;   )r<   s   "r=   r>   r>     sE     S S St Sd SK\ Shw S  }H Sr?   c                *   \         P                  ! \        \         P                  4      p\         P                  ! \        \         P                  4      p\         P                  ! \
        \         P                  4      p. p\        V 4      p V P                  RRR7      ;_uu_ 4       p	V	 EF  p
VP                  V
4      pVeo   V P                  VP                  ^4      ,          pVP                  P                  4       R,          VP                  9   d   VP                  \        WW#V4      4       VP                  V
4      pVe   VP                  ^4      P                  4       pVR8X  d   K  W9  d   K  WV,          P                   ,          pVP#                  4       '       g    VP$                  V P$                  8w  d   MEK  VP'                  V 4      '       d   EK4  VP)                  V4      pVP+                  \-        VV,          4      4       EKi  VP                  V
4      pVf   EK  VP                  ^4      P                  4       P/                  R4      p\1        V4      R9   g   Q RV 24       hR	P3                  V4      pVV9  dQ   \5        R
P7                  VP                  ^4      P                  4       VP/                  R	^R7      ^ ,          4      4      hWV,          P                   ,          pVP#                  4       '       g    VP$                  V P$                  8w  d   MEK  VP'                  V 4      '       d   EK  VP)                  V4      pVP+                  \-        VV,          4      4       EK  	  RRR4       V#   + '       g   i     T# ; i)a  
scan a Fortran file for dependencies. Needs to be distinct from target
to allow for recursion induced by `include` statements.er

It makes a number of assumptions, including

* `use`, `module`, `submodule` name is not on a continuation line

Regex
-----

* `incre` works for `#include "foo.f90"` and `include "foo.f90"`
* `usere` works for legacy and Fortran 2003 `use` statements
* `submodre` is for Fortran >= 2008 `submodule`
r  r  r  Nr   	intrinsicra   zHsubmodule ancestry must be specified as ancestor:parent but Meson found r  z=submodule {} relies on ancestor module {} that was not found.)maxsplit>   r   r7   )rL   r  FORTRAN_INCLUDE_PATr  FORTRAN_USE_PATr  r   r  r   r  rF   rN  rK  rM  r-  r  rG  r\  r   samefiler;  r  r9   r   rE   r   r   r<   )r1  r  r  r  r  increuserer  r  r  r/  incmatchincfileusematchusenamerH  mod_namer  r  ancestor_childsubmodsrcfiles   &&&&&                r=   r  r    s+   " JJ*BMM:EJJ6Ezz,bmm<HI
s)C	78	4	4D{{4(H#**x~~a'88 >>'')"-1G1GG$$%<Wg^f%gh{{4(H#"..+113k)'  >#7#77((||sxx/ %%c**#;;GD  Wx%7!89&nnT2*)//288:@@EGw<61 G<<C9FG1 &)XXg%6N%U2,-l-s-st  uF  uF  GH  uI  uO  uO  uQ  Sa  Sg  Sg  hk  vw  Sg  Sx  yz  S{  .|  }  }$*>-B-H-H$HM(0022(--9 $&//44 '??OH$$S8);%<=u  
5x y 
5	4x s!   $D3NA
N(DN=:NN	)rP  20182021)delz/fz/sz/q{}r   )rmz-fr  r   >   r[  r  re  r  r   DEPFILE_UNQUOTEDr  )n
__future__r   collectionsr   r   dataclassesr   enumr   r   	functoolsr	   pathlibr
   r   textwrapr   r%  r  r  r  rL   r  typingr  r   r   r   r   r   r   r   r   arglistr   r   r   r}  r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r-  r&   r'   r(   r)   TYPE_CHECKINGtyping_extensionsr*   _typingr+   r,   r-   r  r.   r/   compilers.csr0   compilers.fortranr1   compilers.rustr2   r3   r4   ListUnionr9   r   rK  r  r  r  r  rN   r+  rV   r7  r8  rX   get_rsp_thresholdr  r   r  rb   rc   rf   rh   ru   r5   r   r   r   r;  rE  rY  Backendr^  r  r;   r?   r=   <module>r     s&  
 # 0 !   "    	  	          " , 1   M L    3???)/2=)3-'1ffQWW%6%;<=O23M > ; B E JdmO9MJO,M **, W	

:. jj+   = = =  d  
2 
2   z zxD$ D$L 
 
 
 " " "J   
o8#8## o8#dqSr?   