
    <ho                   ^   S SK Jr  S SKJrJr  S SKJr  S SKJrJ	r	  S SK
Jr  S SKJrJr  S SKJr  S SKrS SKrS SKrS SKrS SKrS SKrS SKrS	S
KJr  SSKJr  SSKJrJr  SSKJr  SSKJr  SSKJ r   SSK!J"r"  SSK J#r#  SSK$J%r%J&r&  SSKJ'r'J(r(J)r)J*r*J+r+J,r,J-r-J.r.J/r/  SSKJ0r0J1r1J2r2  SSK3J4r4  S	SKJ5r5  SSKJ6r6J7r7  \Rp                  (       ac  S SK9J:r:  SSK;J<r<  SSKJ=r=J>r>  SSK?J@r@  SSKAJBrBJCrC  SSKDJErE  SSKFJGrG  SS KHJIrI  SS!KJJrJ  S	S"KJKrK  \R                  \R                  S#\N4      rO\:S$   rPS%rQS&rRS'rSS(rTSES) jrU\R                  " 5       (       a  \UrWS*S+/rX/ S,QrYO\/rW/ rX/ S-QrYSFS. jrZ\R                  " 5       r\1 S/kr]\R                  " S05      r_\R                  " S15      r`SGSHS2 jjra\ " S3 S45      5       rb\	 " S5 S6\5      5       rc " S7 S#5      rd\ " S8 S95      5       re " S: S;5      rf " S< S=5      rg\ " S> S?5      5       rh\ " S@ SA5      5       ri " SB SC\R                  5      rkSISD jrlg)J    )annotations)defaultdictOrderedDict)	dataclass)Enumunique)	lru_cache)PurePathPath)dedentN   )backends   )modules)environmentmesonlib)build)mlog)	compilers)CompilerArgs)Compiler)ArLikeLinkerRSPFileSyntax)	FileLibTypeMachineChoiceMesonBugExceptionMesonException
OrderedSet
PerMachineProgressBar	quote_arg)get_compiler_for_sourcehas_path_sepis_parent_path)	OptionKey)
CleanTrees)GeneratedListInvalidArguments)Literal)ImmutableListProtocol)ExtractedObjectsLibTypes)Interpreter)DynamicLinkerStaticLinker)
CsCompiler)FortranCompiler)RustCompiler)FileOrString)TargetIntrospectionDataNinjaCommandArg)201520182021z$^\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    [         R                  " SS U 5      n [         R                  " SS U 5      n SU  S3n U $ )Nz(\\*)"c                N    S[        U R                  S5      5      S-  S-   -  S-   $ )N\r   r   "lengroupms    ڀ/mnt/mint/home/seanl/mnt/public/Repos/ladybird/Build/vcpkg/downloads/tools/meson-1.9.0-d1fcc2/mesonbuild/backend/ninjabackend.py<lambda>cmd_quote.<locals>.<lambda>B   s$    dc!''!*o.AA.E&F&L    z(\\*)$c                B    S[        U R                  S5      5      S-  -  $ )Nr<   r   r   r>   rA   s    rC   rD   rE   D   s    dc!''!*o.A&BrF   r=   )resub)args    rC   	cmd_quoterK   =   s<    
 &&Lc
RC
&&BC
HCcU!*CJrF   cmd/c)delz/fz/sz/q{}&&)rmz-frO   rP   c                <    U R                  SS5      n [        U 5      $ )Nr<   \\)replace
quote_funcss    rC   gcc_rsp_quoterX   U   s     	
		$Aa=rF   >   DESCpooldyndep	targetdepdescriptionDEPFILE_UNQUOTEDz[$ :\n]z[$ \n]c                    SU ;   a  SU  S3n[        U5      eU(       a  [        O[        nSU ;   d  SU ;   d  U(       a  SU ;   a  UR                  SU 5      $ U $ )N
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_PATrI   )textis_build_lineerrmsgquote_res       rC   ninja_quoterj   k   sd    t| DG
 V$$(5$;NH
d{cTkmt||It,,KrF   c                  8    \ rS rSr% SrS\S'   S\S'   S\S'   S	rg
)TargetDependencyScannerInfo{   a>  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.
strprivate_dirT.Dict[str, str]source2objectz/T.List[T.Tuple[str, Literal['cpp', 'fortran']]]sources N)__name__
__module____qualname____firstlineno____doc____annotations____static_attributes__rs   rF   rC   rl   rl   {   s     ##<<rF   rl   c                  $    \ rS rSrSrSrSrSrSrg)Quoting   r   r   r      rs   N)	rt   ru   rv   rw   bothnotShellnotNinjanonerz   rs   rF   rC   r|   r|      s    DHHDrF   r|   c                  V    \ rS rSr\R
                  4SS jjrSS jr\S	S j5       r	Sr
g)
r6      c                    Xl         X l        g N)rW   quoting)selfrW   r   s      rC   __init__NinjaCommandArg.__init__   s    rF   c                    U R                   $ r   rV   r   s    rC   __str__NinjaCommandArg.__str__   s    vvrF   c                D    U  Vs/ s H  n[        X!5      PM     sn$ s  snf r   )r6   )lqis      rC   listNinjaCommandArg.list   s    /01q!%q111s   )r   rW   N)rW   rn   r   r|   returnNoner   rn   )r   T.List[str]r   r|   r   zT.List[NinjaCommandArg])rt   ru   rv   rw   r|   r   r   r   staticmethodr   rz   rs   rF   rC   r6   r6      s'    29,,  2 2rF   c                  *    \ rS rSr% S\S'   SS jrSrg)NinjaComment   rn   commentc                    U R                   R                  S5       H6  nUR                  S5        UR                  U5        UR                  S5        M8     UR                  S5        g )Nr`   z# )r   splitwrite)r   outfiler   s      rC   r   NinjaComment.write   sM    ##D)AMM$MM!MM$ * 	drF   rs   Nr   zT.TextIOr   r   )rt   ru   rv   rw   ry   r   rz   rs   rF   rC   r   r      s    LrF   r   c                      \ rS rSrSSSS\R
                  4           S	S jjr\\4S
S jj5       r	SS jr
    SS jrSrg)	NinjaRule   FNc
                   S	S jn
Xl         U Vs/ s H
  o" U5      PM     snU l        U Vs/ s H
  o" U5      PM     snU l        X@l        X`l        Xpl        Xl        XPl        SU l        SU l	        Xl
        SR                  U R                  U R                  -    Vs/ s H  oR                  U5      PM     sn5      U l        [        R                  " SU R                  5       Vs/ s H  nUR!                  S5      S:w  d  M  UPM     snU l        U R
                  S:X  a  U =R
                  S-  sl        g g s  snf s  snf s  snf s  snf )
Nc                   [        U [        5      (       a  U $ U S:X  a  [        U [        R                  5      $ U R	                  S5      (       ap  [
        R                  " SU 5      nUc   S5       eUR                  S5      nU[        ;  a  [        U [        R                  5      $ [        U [        R                  5      $ [        U 5      $ )NrP   rb   z\$\{?(\w*)\}?zfor mypyr   )
isinstancer6   r|   r   
startswithrH   matchr@   	raw_namesr   r   )cvarpvars      rC   strToCommandArg+NinjaRule.__init__.<locals>.strToCommandArg   s    !_-- Dy&q'*:*:;;||C  xx 0!4'33'::a=i' +1gll;; +1g.>.>??"1%%rF   r   ra   z(\${\w+}|\$\w+)?[^$]*r   $DEPFILE	_UNQUOTED)r   zT.Union[NinjaCommandArg, str]r   r6   )namecommandargsr]   depsdepfileextrarspablerefcountrsprefcountrspfile_quote_stylejoin_quotercommand_strrH   finditerstartvar_refs)r   ruler   r   r]   r   r   r   r   r   r   r   axrB   s                  rC   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   D9D>E'EEc                P   U R                   [        R                  :X  a  U R                  $ U R                   [        R                  :X  a  U" U R                  5      $ U R                   [        R
                  :X  a  [        U R                  5      $ [        U" [        U 5      5      5      $ r   )r   r|   r   rW   r   r   rj   rn   )r   qfs     rC   r   NinjaRule._quoter   sn    99$33JYY'***acc7NYY'***qss##2c!f:&&rF   c                L  ^  T R                   nT R                  [        R                  [        R                  1;   a>  [
        nU Vs/ s H*  oDR                  S:X  a  [        SUR                  5      OUPM,     nnO[        nSU 4S jjnU" 5        GH}  nUR                  ST R                   U S35        US:X  Ga1  T R                  [        R                  L aZ  UR                  SR                  SR                  T R                   Vs/ s H  nT R                  U5      PM     sn5      5      5        OYUR                  S	R                  SR                  T R                   Vs/ s H  nT R                  U5      PM     sn5      5      5        UR                  S
5        UR                  SR                  SR                  U Vs/ s H  nT R                  Xs5      PM     sn5      5      5        O*UR                  SR                  T R                   5      5        T R"                  (       a  UR                  ST R"                   S35        T R$                  (       a  UR                  ST R$                   S35        UR                  ST R&                   S35        T R(                  (       aU  T R(                  R+                  S5       H6  nUR                  S5        UR                  U5        UR                  S5        M8     UR                  S5        GM     g s  snf s  snf s  snf s  snf )N$inz$in_newlinec               3  d   >#    T R                   (       a  Sv   T R                  (       a  Sv   g g 7f)N _RSP)r   r   r   s   rC   	rule_iter"NinjaRule.write.<locals>.rule_iter   s%     }}  s   -0zrule r`   r   z% command = {} --option-file=$out.rsp
ra   z command = {} @$out.rsp
z rspfile = $out.rsp
z rspfile_content = {}
z command = {}
z deps = z depfile = z description = )r   zT.Iterable[str])r   r   r   MSVCTASKINGrK   rW   r6   r   rX   r   r   formatr   r   r   r   r   r   r]   r   r   )	r   r   rspfile_argsrspfile_quote_funcrJ   r   rspr   r   s	   `        rC   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yy267||DLL><=MMOD,<,<+=R@Azz))$/AMM#&MM!$MM$' 0 MM$+  | \CNu IDs   1LL!LL!c                   [        U5      nU R                  b  U R                  /US'   U R                  b  U R                  /US'   U/US'   U/US'   [        U R                  5      nU R
                   H|  nXVR                  S5      UR                  S5      -
  -  nUR                  S5      nUS   S:X  a  USS nOUSS  nUR                  U/ 5      nU[        S	R                  U5      5      -  nM~     U$ )
Nr   r   inoutr   {r   r   ra   )dictr   r   r?   r   r   endr   r@   getr   )r   infilesoutfileselems
ninja_varsestimaterB   chunks           rC   length_estimateNinjaRule.length_estimate
  s    
 %[
99 "&))Jv<<#%)\\NJy!#9
4%J
5 t''(Aa1771:--HGGAJEQx3aab	NN5"-ECHHUO,,H  rF   )r   r   r   r   r   r]   r   r   r   r   r   r   r   )r   rn   r   CommandArgOrStrr   r   r]   rn   r   boolr   T.Optional[str]r   r   r   r   r   r   )r   r6   r   zT.Callable[[str], str]r   rn   r   )r   rn   r   rn   r   z!T.List[T.Tuple[str, T.List[str]]]r   int)rt   ru   rv   rw   r   GCCr   r   rU   r   r   r   rz   rs   rF   rC   r   r      s    38RV,046C6G6G-(!-(,0-(@O-()-(9H-( '4-(^ AK ' '$ L@EHrF   r   c                      \ rS rSr% S\S'   SSS jjrSS jrSS jrSS jr\	R                  SS	 j5       rSS
 jrSS jrSS jrSrg)NinjaBuildElementi&  r   r   Nc                R   U=(       d    / U l         [        U[        5      (       a	  U/U l        OX l        [        U[        5      (       d   eX0l        [        U[        5      (       a	  U/U l        OX@l        [        5       U l        [        5       U l        / U l	        Xl
        SU l        g Nr   )implicit_outfilenamesr   rn   outfilenamesrulenameinfilenamessetr   	orderdepsr   all_outputsoutput_errors)r   r   r   r   r   implicit_outss         rC   r   NinjaBuildElement.__init__*  s    %2%8b"lC((!-D ,(C(((( k3'' +}D*E	
&rF   c                    [        U[        5      (       a  U R                  R                  U5        g U R                  R	                  U5        g r   )r   r   r   updateaddr   deps     rC   add_depNinjaBuildElement.add_dep<  s1    c4  IIS!IIMM#rF   c                    [        U[        5      (       a  U R                  R                  U5        g U R                  R	                  U5        g r   )r   r   r   r   r   r   s     rC   add_orderdepNinjaBuildElement.add_orderdepB  s3    c4  NN!!#&NNs#rF   c                   [        U[        5      (       a  UR                  5       n[        U[        5      (       a  U/nU R                  R                  X45        US:X  a!  U R                  R                  US-   U45        g g )NDEPFILEr   )r   r   	to_nativern   r   append)r   r   r   s      rC   add_itemNinjaBuildElement.add_itemH  sn     e\**OO%EeS!!GE

4-(9JJtk159: rF   c           	        U R                   S:X  a  gU R                  R                  (       d  gSR                  U R                   Vs/ s H  n[        US5      PM     sn5      nSR                  U R                   Vs/ s H  n[        US5      PM     sn5      nU R                  R                  UUU R                  5      [        :  $ s  snf s  snf )NphonyFra   T)
r   r   r   r   r   rj   r   r   r   rsp_threshold)r   r   r   r   s       rC   _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                    U R                   S:w  aQ  U R                  (       a   U R                  =R                  S-  sl        g U R                  =R                  S-  sl        g g )Nr  r   )r   r  r   r   r   r   s    rC   count_rule_references'NinjaBuildElement.count_rule_referencesd  sF    ==G#''		%%*%		""a'"	 $rF   c                8   U R                   (       a  [        U R                   5      eSR                  U R                   Vs/ s H  n[	        US5      PM     sn5      nSR                  U R
                   Vs/ s H  n[	        US5      PM     sn5      nSR                  U R                   Vs/ s H  n[	        US5      PM     sn5      nU(       a  SU-   nU R                  nU(       a4  U R                  S-   n[        R                  " SU R
                   S35        OU R                  nSU U SU SU 3n[        U R                  5      S	:  aE  USSR                  [        U R                  5       V	s/ s H  n	[	        U	S5      PM     sn	5      -   -  n[        U R                  5      S	:  a`  U R                   V	s/ s H  n	[        U	5      PM     n
n	US
SR                  [        U
5       V	s/ s H  n	[	        U	S5      PM     sn	5      -   -  nUS-  nUR!                  SS5      n["        R$                  " 5       (       a'  SR                  S UR'                  S5       5       5      nUR)                  U5        U(       aF  U R*                  R,                  [.        R0                  [.        R2                  1;   a  [4        nO[6        nO[8        nU R:                   H  nUu  pU[<        ;  nSU S3n/ nU HL  nU(       a  US:X  a  UR?                  [	        U5      5        M,  UR?                  [	        U" U5      5      5        MN     USR                  U5      -  nUS-  nUR)                  U5        M     UR)                  S5        g s  snf s  snf s  snf s  sn	f s  sn	f s  sn	f )Nra   Tz | r   zCommand line for building z is long, using a response filezbuild z: r   z || r`   r<   /c              3  x   #    U  H0  nUR                  S 5      (       a  UR                  S SS5      OUv   M2     g7f)z//rS   r   N)r   rT   ).0r   s     rC   	<genexpr>*NinjaBuildElement.write.<locals>.<genexpr>  s7      (A 01||D/A/A4+qH(s   8:z = rP   ) r   r   r   r   rj   r   r   r  r   r   debugr?   r   sortedr   rn   rT   r   
is_windowsr   r   r   r   r   r   r   rK   rX   rU   r   r   r	  )r   r   r   insoutsr   use_rspfiler   liner   r   r   er   r   should_quotenewelemss                    rC   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$    M>6N,N2N:N+Nc                    U R                    H8  nXR                  ;   a  SU S3U l        U R                  R                  U5        M:     g )Nz%Multiple producers for Ninja target "z". Please rename your targets.)r   r   r   r   )r   ns     rC   check_outputsNinjaBuildElement.check_outputs  sD    ""A$$$'LQCOm%n"  # #rF   )	r   r   r   r   r   r   r   r   r   r   )r   z
T.Set[str])r   zT.Union[str, T.List[str]]r   r   r   r   )r   rn   r   z'T.Union[str, T.List[str], CompilerArgs]r   r   r   r   r   )rt   ru   rv   rw   ry   r   r  r  r
  r   lazy_propertyr  r  r   r'  rz   rs   rF   rC   r   r   &  sG    
O $$
; F F(9v$rF   r   c                  4    \ rS rSr% S\S'   S\S'   S	S jrSrg)
RustDepi  rn   r   r   cratec                4    U R                   U R                  S.$ )Nr.  r   r0  r   s    rC   to_jsonRustDep.to_json  s    ZZII
 	
rF   rs   Nr   zT.Dict[str, object])rt   ru   rv   rw   ry   r1  rz   rs   rF   rC   r-  r-    s     I J
rF   r-  c                      \ rS rSr% S\S'   S\S'   S\S'   S\S'   S\S'   S	\S
'   S\S'   S\S'   S\S'   S\S'   SrS\S'   SS jrSrg)	RustCratei  r   orderrn   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           
     >   U R                   U R                  U R                  U R                  U R                  U R
                   Vs/ s H  oR                  5       PM     snS.nU R                  (       a#  U R                  c   S5       eU R                  US'   U$ s  snf )N)r7  r8  r<  r>  r?  r   zThis shouldn't happenrA  )r7  r8  r<  r>  r?  r   r1  rA  )r   drets      rC   r1  RustCrate.to_json  s     --++||88!//*.))4)QYY[)4$
 --9R;RR9+/+E+EC'(
 5s   Brs   r3  )rt   ru   rv   rw   ry   rA  r1  rz   rs   rF   rC   r5  r5    sP    
 JO
	 -1?1rF   r5  c                  
  ^  \ rS rSrSU 4S jjrSS jrS rSSS jjrSS jrSS jr	SS	 jr
SS
 jrSS jrS r S   SS jjrSS jrSS jrSS jr        SS jr  SS jrSS jrSS jrS rSS jrSS jrSS jr      SS jrSS jrSS jrSS jrSS jrSS jrSS jr SS  jr!SS! jr"SS" jr#SS# jr$SS$ jr%SS% jr&SS& jr'SS' jr(SS( jr)SS) jr*S* r+SS+ jr,SS, jr-  SS- jr.  SS. jr/  SS/ jr0SS0 jr1SS1 jr2            SS2 jr3SS3 jr4SS4 jr5 S   SS5 jjr6    SS6 jr7    SS7 jr8\9SS8 j5       r:\;SSS9 jj5       r<\;SS: j5       r=\;SS; j5       r>S< r?S= r@S> rAS? rBSS@ jrCSSA jrDSSB jrESSC jrFSSD jrGSSE jrHSSF jrISSG jrJSSH jrKSSI jrLSSJ jrMSSK jrNSSL jrOSSM jrPSSN jrQSSO jrRSSP jrSSSQ jrTSSR jrUSSS jrVSST jrWSSU jrXSSV jrYSSW jrZSSX jr[SY r\SZ r]SS[ jr^SS\ jr_SS] jr`\a" SS^9  SS_ j5       rbSS` jrcSSa jrd\a" SS^9SSb j5       reSSc jrf    S         SSd jjrgSSe jrhSSf jriSg rjSSh jrkSSi jrlSj rmSk rnSl roSSm jrpSn rqSSo jrrSSp jrsSq rtSr ruSSs jrv\a" SS^9SSt j5       rwSu rxSv rySSw jrzSSSx jjr{Sy r|SSz jr}SS{ jr~SS| jrSSS} jjrSS~ jrSS jrSS jrSS jrSSS jjrSS jrSS jrSS jrSS jrSS jrSU 4S jjrSrU =r$ )NinjaBackendi  c                L  > [         TU ]  X5        SU l        SU l        0 U l        [        5       U l        [        [
        5      U l        [        5       U l	        0 U l
        [        SS5      U l        0 U l        / U l        SU l        0 U l        [        ["           " SS5      U l        g )Nninjabuild.ninjaFT)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)r   r   interpreter	__class__s      rC   r   NinjaBackend.__init__  s    ,	+<>'*u0;C0@25%#"$$.ue$<!3502 "JL$ $.d#3D$#? rF   c                    UR                  S5      (       a  [        SU< 35      eSU 3n[        U R                  USU5      nU R	                  U5        [        U R                  XBU5      $ )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   dummy_outfiler   phony_infilenameto_nameelems         rC   create_phony_target NinjaBackend.create_phony_target  sn     ##$677 #MmM^!_``$]O4 !1!1='7St !1!17FVWWrF   c                
  ^^ U R                   R                  R                  R                  R	                  5        Hb  nUR
                  S;   a  M  UR                  S:X  a'  [        R                  " 5       (       a  [        TSSS9s  $ UR                  5       S:X  d  Mb    O   [        TSSS9$ S[        R                  UR
                     S   -   n[        R                  R                  U R                   R                  5       U5      n[        US	SS9 nUR!                  [#        S
5      5        SSS5        [$        R&                  " UR)                  5       SSU/-   U R                   R                  5       [$        R*                  [$        R*                  S9nUR-                  5       u  px[.        R0                  " S5      mUU4S jn	U	" U5      =(       d    U	" U5      n
U
(       a  U
$ [3        SU SU 35      e! , (       d  f       N= f)zWVS writes its dependency in a locale dependent format.
Detect the search prefix to use.>   masmfortranpgir   utf-8encodingmsvcz
incdetect.r   wzI                #include<stdio.h>
                int dummy;
            Nz/showIncludesrM   )cwdstdoutstderrs(   ^(.*\s)([a-zA-Z]:[\\/]|[\\\/]).*stdio.h$c                $  > [         R                  " SU 5       Hc  nTR                  U5      nU(       d  M  [        TS5       nUR	                  SUR                  S5      -   S-   5        S S S 5        [        TSSS9s  $    g ! , (       d  f       N= f)	Ns   \r?\nabs   msvc_deps_prefix = r      
r   rg  rh  )rH   r   r   openr   r@   )r   r   r   binfilematchretempfilenames       rC   detect_prefix8NinjaBackend.detect_vs_dep_prefix.<locals>.detect_prefix;  sy    C0d+5lD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: ra   )r   coredatar   hostvalueslanguageidr   r  rr  get_argument_syntaxlang_suffixesospathr   get_scratch_dirr   r   
subprocessPopenget_exelistPIPEcommunicaterH   compiler   )r   ru  compilerfilebasefilenamefpcrm  rn  rv  resultrt  s    `         @rC   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'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   G44
HNc                   U(       a  [        S5      eU R                  (       aj  [         H`  nSU R                  R                  R                  U   ;   d  M,  [
        R                  " SR                  U5      5        SU R                  U'   Mb     [        R                  " SS9nU R                  R                  R                  R                  [        S5      5      (       a  [        U R                  R                  5       5      n UR                  [        R                   " 5       5      n[$        R&                  " [$        R(                  " 5       5      n[
        R*                  " 5         [
        R*                  " S5        [
        R*                  " U S	U 35        Uc  [-        S
5      eUu  U l        U l        [$        R2                  " U R0                  S5      U l        [6        R8                  R;                  U R                  R                  5       U R<                  5      nUS-   n[?        USSS9 n	U	RA                  SU RB                  RE                  5        S35        U	RA                  S5        U	RA                  S5        U	RA                  S5        U R                  R                  R                  R                  S5      n
U
S:  a  U	RA                  SU
 S35        S S S 5        U RG                  U5       n	U RI                  5         / U l%        U RM                  5         U RO                  [Q        S5      5        U(       as  0 nU RB                  RS                  5       RU                  5        HE  n[W        U[B        RX                  5      (       d  M$  U R[                  U5      XR]                  5       '   MG     [_        U RB                  RS                  5       RU                  5       SS9 H  nU Ra                  U5        M     [
        Rb                  " S5        U RO                  [Q        S5      5        U Re                  5         [
        Rb                  " S5        U RO                  [Q        S5      5        U Rg                  5         [
        Rb                  " S 5        U Ri                  5         [
        Rb                  " S!5        [        S"5      nXR                  R                  R                  ;   a  U R                  R                  R                  R                  S"5      (       a  [        Rj                  " U R                  R                  5      u  nnnnnn[
        R                  " S#U S$U S%U S&U S'3	5        U(       d  U(       aK  U(       aD  U RO                  [Q        S(5      5        U Rm                  UUU5        [
        Rb                  " S)5        O[
        Rn                  " S*5        U RO                  [Q        S+5      5        U Rq                  5         [
        Rb                  " S,5        U Rs                  5         U Ru                  U	5        U Rw                  U	5        S-nU	RA                  U5        S S S 5        [6        Rx                  " X5        [
        Rz                  " U5        [$        R2                  " U R0                  S.5      (       d7  [$        R2                  " U R0                  S5      (       a  U R|                  (       d  [6        R8                  R                  [6        R8                  R;                  U R                  R                  S/5      5      (       ap  [        R                  " U R.                  S0S1/-   U R                  R                  S29  [        R                  " U R.                  S0S3/-   U R                  R                  S29  U R                  5         U R                  5         U(       a  W$ g ! ["         a     GNf = f! , (       d  f       GN= f! , (       d  f       GN= f)4NzCWe 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 z&Could not detect Ninja v1.8.2 or newerz>=1.10.0~rk  rg  rh  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_linksr   z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rl  	cleandead)Er   r   r   rx  r   r   r  r   rV   detect_ninja_command_and_versionoptstoreget_value_forr&   r   get_build_dirrelative_torl  
ValueErrorr   	join_argsget_meson_commandr  r   ninja_commandninja_versionversion_compareninja_has_dyndepsr  r  r   rL  rr  r   r   get_projectr  generate_rulesbuild_elementsgenerate_phonyadd_build_commentr   get_targetsrz  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_buildsrT   cmd_ci_includerT  exists	build_dirr  callgenerate_compdbgenerate_rust_project_json)r   capture
vslite_ctxfor_machinerI  builddirmeson_commandoutfilenameru  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                         rC   generateNinjaBackend.generateL  sJ    $$kll,T--66@@MMJJ   O   V   V  Wb   c  d<AD,,[9  -
 <<F$$--;;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'MMB4::CYCYC[B\\_`aMMNOMM67MM>?((11::HHI\]I1} #+   7 &&|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^i^}^}  C  O  O  X  X  _Y[	=(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IRVRdRdGGNN277<<0@0@0J0JL#YZZOOD..$1AAtGWGWGaGabOOD..$1DD$JZJZJdJde'')33 o   76 54s3   $_ +B+_+/B_=K_=
_('_(+
_:=
`c           
     :   U R                   (       d  g[        [        R                  R	                  U R
                  R                  5       S5      SSS9 nU R
                  R                  R                  R                  S   R                  5       n[        R                  " U[        R                  R	                  US5      U R                   R                  5        Vs/ s H  o3R                  5       PM     snS.US	S
9  SSS5        gs  snf ! , (       d  f       g= f)z;Generate a rust-analyzer compatible rust-project.json file.Nzrust-project.jsonrk  rg  rh  rustzlib/rustlib/src/rust/library/)sysrootsysroot_srccrates   )indent)rR  rr  r  r  r   r   r  rx  r   ry  get_sysrootjsondumprz  r1  )r   r  r  r   s       rC   r  'NinjaBackend.generate_rust_project_json  s    "'',,t//==?ATU),-&&//99>>vFRRTGII&#%77<<9X#Y484D4D4K4K4MN4Mqyy{4MN
 !) ) O) )s   BDD5	DD
Dc           
        / n[          H  nU R                  R                  R                  U   R	                  5        H  nXR                  U5      4 VVs/ s H  nS  H	  nU U 3PM     M     snn-  nXR                  U5      4 VVs/ s H  nS  H	  nU U 3PM     M     snn-  nUR                  5       S:X  d  M  U R                  SUR                  5      nUR                  U5        UR                  U S35        M     M     [        R                  " U R                  S5      (       a  S/O/ nU R                  SS/-   U-   U-   nU R                  R                  5       n [         R"                  " XxS	9n	[%        [&        R(                  R+                  US
5      S5       n
U
R-                  U	5        S S S 5        g s  snnf s  snnf ! , (       d  f       g = f! [.         a    [0        R2                  " SSS9   g f = f)N)r   r   taskingtasking_mil_compiler   z>=1.9-xr  compdbr  zcompile_commands.jsonwbz&Could not create compilation database.F)fatal)r   r   rx  r   rz  compiler_to_rule_namecompiler_to_pch_rule_namer  get_compiler_rule_namer  r	  r   r  r  r  r  r  check_outputrr  r  r  r   r   	Exceptionr   r  )r   rulesr  r  r   extcompdb_optionsninja_compdbr  jsondbr  s              rC   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LPQ ML33 ML 	PLLAO	Ps<   F?
G&>G $G6G 
GG G G>=G>c           	        UR                  5       nX R                  ;   a  U R                  U   $ / nUR                  5        H  n[        U[        R
                  [        R                  45      (       a  M4  UR                  5        HF  nU R                  R                  U5      (       d  M%  UR                  U R                  XU5      5        MH     M     SUR                  ;   a`  [        U[        R                  5      (       dA  [        R                  " U R!                  U5      UR"                  5      nUR                  U5        [$        R&                  " UR(                  UR*                  5       HG  n[        U[        R,                  [        R.                  45      (       d  M4  X0R1                  U5      -  nMI     [        U[        R2                  5      (       a  UR5                  UR1                  5       5        X0R                  U'   U$ )Nvala)r  rU  get_generated_sourcesr   r   CustomTargetCustomTargetIndexget_outputsr   	is_headerr	  get_target_generated_dirr   
Executabler   from_built_fileget_target_dirvala_header	itertoolschainlink_targetslink_whole_targetsStaticLibrarySharedLibraryget_generated_headersCompileTargetextend)r   r  tidheader_depsgenlistsrcr  r   s           rC   r	  "NinjaBackend.get_generated_headers  s   mmo...//44,.335G'E$6$68O8O#PQQ**,##--c22&&t'D'DVVY'Z[ - 6 V%%%jAQAQ.R.R..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)rF   c                    [        5       nUR                  5        HD  nUR                  5        H-  nU R                  XU5      n[        R
                  " U5      X%'   M/     MF     U$ )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gensrcrW   rel_srcs         rC   get_target_generated_sources)NinjaBackend.get_target_generated_sources  s\     -8M224F'')77J $ 8 8 A * 5 rF   c                    [        5       nUR                  5        HG  n[        U[        5      (       d  [	        SU< S35      eUR                  U R                  5      nX2U'   MI     U$ )NAll sources in target z must be of type mesonlib.File)r   get_sourcesr   r   r)   rel_to_builddirbuild_to_src)r   r  r  rW   r  s        rC   get_target_sourcesNinjaBackend.get_target_sources	  se    ,7M##%A a&&&)?uDb'cdd!!$"3"34AG & rF   c                   [        U[        5      (       a  UR                  nU R                  R	                  U5      (       d   U R                  R                  U5      (       a  g[        R                  R                  U5      S   SS  R                  5       n[        R                   H2  nXAR                  ;  a  M  X1R                  U   R                  ;   d  M2    g   g)NFr   T)r   r   fnamer   
is_llvm_iris_assemblyr  r  splitextlowerr   LANGS_CANT_UNITYr   file_suffixes)r   r  sourcesuffixlangs        rC   get_target_source_can_unity(NinjaBackend.get_target_source_can_unity  s    fd##\\F&&v..''//!!&)!,QR0668--D+++))$/===	 .
 rF   c                f  ^ ^ UR                  5       nUR                  5       nT R                  U   n	U[        U5      4n
U	R	                  U
S5      nUct  [        U[        5      (       a  UR                  SS9nUR                  UT R                  5      nUUR                  R                  5       UR                  5       U/ / / S.nXU
'   SU 4S jjmUS   R                  U4S jU 5       5        US   R                  U4S	 jU 5       5        U(       a  US
   R                  U4S jU 5       5        gg)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copy)r{  machiner  
parametersrr   generated_sourcesunity_sourcesc                  > [        U [        5      (       a&  U R                  TR                  TR                  5      $ [
        R                  R                  [
        R                  R                  TR                  U 5      5      $ )zMake source files absolute )	r   r   absolute_path
source_dirr  r  r  normpathr   )filer   s    rC   compute_pathENinjaBackend.create_target_source_introspection.<locals>.compute_pathL  sS    $%%))$//4>>JJ77##BGGLL$FGGrF   rr   c              3  4   >#    U  H  nT" U5      v   M     g 7fr   rs   r  r   r8  s     rC   r  BNinjaBackend.create_target_source_introspection.<locals>.<genexpr>R  s     #EWLOOW   r1  c              3  4   >#    U  H  nT" U5      v   M     g 7fr   rs   r;  s     rC   r  r<  S  s     -YGX!l1ooGXr=  r2  c              3  4   >#    U  H  nT" U5      v   M     g 7fr   rs   r;  s     rC   r  r<  U  s     -U}!l1oo}r=  )r7  r4   r   rn   )r  get_languagerP  tupler   r   r   r  &compute_parameters_with_absolute_pathsr  r  get_lower_case_namer  r  )r   r  compr0  rr   r1  r2  r  r)  tgtid_hash	src_blockr8  s   `           @rC   "create_target_source_introspection/NinjaBackend.create_target_source_introspection#  s(   $ mmo  "%%c*z*+GGGT*	*l33'11t1<
DDZQUQ_Q_`J !++??A ,,.(%'!#I %L	H 	)###EW#EE%&---YGX-YYo&---U}-UU rF   c                    UR                  5       nU R                  U   n[        U5      nUR                  US 5      nUcO  UR	                  SS9n[        U[        5      (       a  UR                  5       n	OUR                  5       n	U	US.nXuU'   g g )NTr-  )linkerr0  )	r  rP  rA  r   r  r   r   get_linker_exelistr  )
r   r  rK  r0  r  rE  lnk_hash	lnk_block	paramlistlinkerss
             rC   "create_target_linker_introspection/NinjaBackend.create_target_linker_introspectionW  s    mmo%%c*$GGHd+	",,$,7I&(++ 335 ,,. "'I &M rF   c           
        [        U[        R                  5      (       a$  [        R                  " U R                  U5      SS9  [        U[        R                  5      (       a  U R                  U5        [        U[        R                  5      (       a  U R                  U5        / n0 nUR                  5       nX@R                  ;   a  g U R                  R                  U5        0 U R                  U'   U R                  U5        U R                  XR!                  U5      5        U R#                  U5        [        U[        R$                  5      (       a  U R'                  U5        g SUR(                  ;   a  U R+                  U5        g SUR(                  ;   a  U R-                  U5        g [        U[        R.                  5      nSUR(                  ;   a  U R1                  U5      u  pgnOISUR(                  ;   a  U R3                  U5      u  pgnO$U R5                  U5      nU R7                  U5      n/ nU R9                  U5        U R;                  U5      n	/ n
U R=                  U5      n/ n/ n/ nXR?                  U5      -  nU(       a  [A        UR(                  RC                  5       5      nURE                  [F        RH                  5      nU(       ax  SRK                  U5      RM                  5       =nnU[O        U5      S:  a  S	OS
-  nU SU SURP                  < S3n[R        RT                  " [R        RV                  " S5      U5        / nURC                  5        GHd  n[X        RZ                  " U5      nU R\                  R_                  U5      (       a  U(       as  U Ra                  UU5      (       a\  URc                  U5        [        Rd                  RK                  U R\                  Rg                  5       U5      nURc                  U5        M  URc                  U5        M  U R\                  Ri                  U5      (       a  U
Rc                  U5        M  U R\                  Rk                  U5      (       d  [l        Rn                  " U5      (       a  GM8  U(       a  URc                  U5        GMS  URc                  U5        GMg     / nU H  nU R\                  Rq                  U5      (       d  M%  U R\                  Rs                  U5      (       a  U Ru                  UU5      u  nnOU Rw                  UUSUS9u  nnURc                  U5        UUU'   U
Rc                  U5        URy                  S5      S   [(        Rz                  S   ;   d  M  URc                  U5        M     U R}                  U5      nU(       a%  UR                  5       (       a  U R                  XS9nO/ nU R                  U5      u  nnU
R                  U5        U R                  U5      n/ nUR                  5       (       a  [        R                  " U V s/ s HF  n U R                  5       (       d  M  UR(                  S   R                  U R                  U 5      SS9PMH     sn 5      nUR(                  S   n!UR                  5        H3  n UR                  U!R                  U R                  U 5      S5      5        M5     / n"U H]  n[X        RZ                  " U5      nU R\                  R                  U5      (       a  URc                  U5        ML  U"Rc                  U5        M_     U" H,  nU Rw                  UUS/ U5      u  nnU
Rc                  U5        M.     UR                  5        GH`  nU R\                  Rq                  U5      (       d  M&  U R\                  R                  U5      (       a	  U(       d  MO  U R\                  Rs                  U5      (       a(  U Ru                  UU5      u  nnU
Rc                  U5        M  U(       a|  U Ra                  UU5      (       ae  [        Rd                  RK                  U R\                  Rg                  5       UR                  U R                  5      5      nURc                  U5        GM  U Rw                  UUS/ UU-   U-   U5      u  nnU
Rc                  U5        URc                  U5        UUU'   GMc     U(       a^  U R                  X5       HI  nU Rw                  UUSX-   U-   UUU5      u  nnU
Rc                  U5        URc                  U5        UUU'   MK     U(       a  g U R                  U5      u  n#n$[        U[        R                  5      (       d  U
n%O%UR                  (       a  U R                  X5      n%OU
n%U R                  XUU5        UR                  5       (       a  U R                  XU%U5        g U R                  XU%U#UU$S9n&U R                  U&5        [        U[        R                  5      (       a  U R\                  R                  UR                     R                  5       (       aL  UR                  (       a:  [        U R                  U#R                  U	5      SU	/5      n&U R                  U&5        g g g g s  sn f )NTexist_okcsswiftr  cython, r   z arez isz' not supported in Unity builds yet, so z sources in the z! target will be compiled normallyFIXME)
order_deps.r   rC  )r  re  F)	is_system)stdlib_args
AIX_LINKER)`r   r   r  r  makedirsget_target_private_dir_absr  generate_custom_target	RunTargetgenerate_run_targetr  processed_targetsr   rP  process_target_dependenciesgenerate_shlib_aliasesr  generate_generator_list_rulesJargenerate_jar_targetr   generate_cs_targetgenerate_swift_targetr
  generate_vala_compilegenerate_cython_transpiler  r  scan_fortran_module_outputsget_target_filenameis_unityr	  r   keysintersectionr   r%  r   upperr?   r   r   r  redr   r  r   	is_sourcer*  r	  r  r  	is_object
is_libraryr   is_module_libraryis_separate_compiler!  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  rz  r  r  generate_unity_files determine_linker_and_stdlib_argsr  prelinkgenerate_prelinkgenerate_dependency_scan_target	uses_rustgenerate_rust_targetgenerate_linkr\  r  machinesr  is_aixaix_so_archiver   r   get_archive_name)'r   r  compiled_sourcesrq   r   is_compile_targettarget_sourcesr1  transpiled_sourcesoutnameobj_listrq  r  	unity_src
unity_depslangs
langs_cant	langs_aremsggenerated_source_filesr  raw_srcabs_srcd_generated_depsr  orW   use_pchpch_objectsodfortran_order_depsfortran_inc_argsr  fctranspiled_source_filesrK  r^  final_obj_listr`  s'                                          rC   r  NinjaBackend.generate_targetj  sY	   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 V%%% &*%?%?%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))'22 @ @ Q Q%%g. ggll4+;+;+I+I+KWUG$$W-*11':!!++G44(!!,,W559R9RSZ9[9["&--g6
 ""7+' 0. 
 *C##77<<**3//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 ))#..""7+'..w7 & +C//T2{SDAqOOA +
 "((*C##77<<))#..7H**3//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   =j>0j>c           	        U R                   (       d  gSUR                  ;   a  gSUR                  ;  a  gSUR                  S   ;   a  gUR                  S   nUR                  5       S:w  a  gU R	                  U[        SUR                  UR                  S95      nUS	;  a  g[        R                  " 5       (       d  g[        R                  " UR                  S
5      (       a  gg)NFre  Tcppz-fmodules-tsrj  cpp_stdr/  
subproject)latestz	c++latestz
vc++latestz<19.28.28617)r  r   
extra_argsr  get_target_optionr&   r  r  r   current_vs_supports_modulesr  version)r   r  r  
cppversions       rC   should_use_dyndeps_for_target*NinjaBackend.should_use_dyndeps_for_targetR  s    %%((((((V..u55u%::<6!++FIiFLFXFXIOIZIZ5\ ]
 BB3355##CKK@@rF   c           	     v   U R                  U5      (       d  g SU l        U R                  U5      u  pVUR                  S-   n[        R
                  R                  U R                  U5      U5      R                  SS5      n[        R
                  R                  U R                  U5      U5      R                  SS5      n	Sn
[        U R                  U5      5      n[        U R                  U5      X;5      nSn[        R
                  R                  U	5      (       a0  [        U	S5       n[        R                   " U5      nS S S 5        WU:g  nU(       a+  [        U	S5       n[        R"                  " X5        S S S 5        [%        U R&                  XZU5      nU H!  nUR(                  R+                  US   5        M#     UR,                  R/                  U5        UR1                  S	UR                  5        U R3                  U5        [5        5       nUR7                  5        H>  nU R                  U5      (       d  M  UR+                  U R                  U5      S   5        M@     U R9                  U5      u  nnUR/                  U Vs1 s H.  nUR;                  5       (       d  M  U R                  U5      S   iM0     sn5        [%        U R&                  US
U/[=        U5      -   5      nUR1                  S	UR                  5        U R3                  U5        g ! , (       d  f       GN= f! , (       d  f       GN= fs  snf )NTz.datr<   r  depscanrbr  r   r   depaccumulate)r  rT  get_dep_scan_file_forr   r  r  r   r  rT   ra  r   select_sources_to_scanrl   r  rr  pickleloadr  r   r   r   r   r   r   r
  r\  r   r  r  r  r  )r   r  r  rq   object_deps	json_filedepscan_filepickle_basepickle_file
pickle_abs	rule_namescan_sourcesscaninfor   poldr`  rW   r   r  _r  s                         rC   r  ,NinjaBackend.generate_dependency_scan_targetj  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"YZ !1!1<S\R]`fgn`oRopffkk*t7 ('
 ('$ Zs$   (LL$L6 L6
L!$
L3c              #    #    U H  n[        U[        R                  5      (       a  UR                  U R                  5      n[
        R                  R                  U5      S   SS  nUR                  5       [        R                  S   ;   d  US:X  a  US4v   M  UR                  5       [        R                  S   ;   d  M  US4v   M     g 7f)Nr   r  Cre  )r   r   r   r  r  r  r  r#  r$  r   r~  )r   r  r'  r  s       rC   r  #NinjaBackend.select_sources_to_scan  s     
 'F&(--00//0A0AB''""6*1-ab1Cyy{i55e<<s
em#	 7 7	 BBi'' 's   B;CCc                    UR                  5        H4  nUR                  5       U R                  ;  d  M#  U R                  U5        M6     g r   )get_dependenciesr  re  r  )r   r  r  s      rC   rf  (NinjaBackend.process_target_dependencies  s7    ((*Axxz!7!77$$Q' +rF   c                    UR                    H5  n[        U[        R                  5      (       d  M$  U R	                  X!5        M7     g r   )rr   r   r   r(   generate_genlist_for_target)r   r  rW   s      rC   custom_target_generator_inputs+NinjaBackend.custom_target_generator_inputs  s1    A!U001100;  rF   c           	        / nUR                  5        Hr  n[        U[        5      (       a  US   nUR                  5        HA  nUR	                  [
        R                  R                  U R                  U5      U5      5        MC     Mt     U$ )Nr   )	r  r   r   r  r	  r  r  r   r  )r   r  r   r   outputs        rC   unwrap_dep_listNinjaBackend.unwrap_dep_list  sm    ((*A!T""aD--/BGGLL)<)<Q)?HI * + rF   c                ^   U R                  U5        U R                  U5      u  p#nU R                  U5      nXPR                  U5      -  nUR                  (       a  UR                  S5        UR                  c  SnOSn[        U R                  X6U5      nUR                  U5        UR                   HX  nUR                  5        HA  n	UR                  [        R                  R                  U R                  U5      U	5      5        MC     MZ     U R!                  UR"                  S   USS  UR%                  5       UR&                  (       a  US   OS UR(                  (       a  US   OS UR*                  UR,                  UR.                  S9u  pJU
(       a  SU
 S3nOS	nUR                  b  UR1                  UR2                  5      n[        R                  R                  U R                  U5      U5      n[        R                  R                  U R4                  R7                  5       U R                  U5      5      n[        R8                  " US
S9  UR;                  SU5        UR.                  (       a  UR;                  SS5        [=        UR>                  UR@                  5      RC                  5       nUR;                  SU5        UR;                  SURD                  RG                  U5      U-   5        U RI                  U5        U RJ                  RM                  URO                  5       5        g )NPHONYCUSTOM_COMMANDCUSTOM_COMMAND_DEPr   r   )extra_bdepsr  feedenvcan_use_rsp_fileverbose (wrapped by meson )r   TrT  r  rZ   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   r\  re  r   r  )r   r  r  
ofilenamesrL   r   r   r`  rC  r  reasoncmd_typer   	rel_dfileabs_pdir	full_names                   rC   rb  #NinjaBackend.generate_custom_target  sq   ++F3"&"A"A&"I3##F+,,V44$$KK >>!'H+H !1!1:NT%%A--/RWW\\$*=*=a*@&IJ * &
 //q0A3qr7<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==?3rF   c                f    UR                   S:w  a  UR                    S3nOSnU UR                   3$ )Nr   z@@)r  r   )r   r  subproject_prefixs      rC   build_run_target_name"NinjaBackend.build_run_target_name  s>    "#)#4#4"5R 8 "#$V[[M22rF   c                   U R                  U5      nUR                  (       d  [        U R                  US/ 5      nOU R	                  U5      nU R                  U5      u    pVU R                  UR                  S   USS  USS9u  pxU(       a  SU S3OSn	U R                  US	/ 5      nUR                  S
U5        UR                  SSUR                   U	 35        UR                  SS5        U R                  U5      n
XR                  U5      -  n
UR                  U
5        U R                  U5        U R                  R                  UR!                  5       5        g )Nr  r   r   T)r  r  r  r  r   r  r  r]   zRunning external command rZ   r  )r  r   r   r   get_run_target_envr  r  ra  r
  r   r  r  r  r\  re  r   r  )r   r  r:  r`  
target_envr  rL   meson_exe_cmdr  r  r   s              rC   rd   NinjaBackend.generate_run_target  sG   008~~ %T%5%5{GRPD008J77?IAq$($=$=fnnQ>OQTUVUWQXBLFJ %> %L!M ;A,VHA6bH++K9I2NDMM)]3MM-+DV[[MRZQ[)\]MM&),##F+,,V44Tt""6==?3rF   c           
     0   U R                   R                  5       R                  5       nSn/ nUb  USU/-  nUb  USU/-  nU Hq  n[        US5      (       d  M  UR                  R                  5        H=  n	U	R                  5       S:X  d  M  U	R                  R                  5       (       a  M:  Sn  Mo     Ms     UR                  SU R                  R                  5       SS	/-   U-   U R                  R                  5       [        R                  R                  U R                  R                  5       U R                   R                  5       5      U R                  R!                  5       U R                  R#                  5       /-   U-   U(       a  S
/O/ -   5        g )NFz--gcovz
--llvm-covr   clangTr  
--internalcoveragez--use-llvm-cov)r   r  rz  hasattrr   r  info	is_darwinr
  r   get_build_commandget_source_dirr  r  r   get_subproject_dirr  get_log_dir)
r   r`  outputsr  r  targetsuse_llvm_covexe_argsr  r  s
             rC   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rF   c                    U R                  SSS5      nU R                  U/ X5        UR                  SS5        U R                  U5        U R	                  XU5        g )Nr  r  r  r]   zGenerating coverage reports)ra  r  r
  r\  generate_coverage_legacy_rulesr   r  r  r  r!  s        rC   r  $NinjaBackend.generate_coverage_rules"  sT    $$Z1A7K&&q"iF	

="?@q++IlSrF   c                   U R                  SSS5      nU R                  US/X5        UR                  SS5        U R                  U5        U(       a  U R                  SSS5      nU R                  US/X5        UR                  SS	5        U R                  U5        U R                  S
SS5      nU R                  US/X5        UR                  SS5        U R                  U5        [        R
                  " US5      (       aK  U R                  SSS5      nU R                  US/X5        UR                  SS5        U R                  U5        g g g )Nz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 report)ra  r  r
  r\  r   r  r  s        rC   r  +NinjaBackend.generate_coverage_legacy_rules)  s5   $$_6FP&&q8*iN	

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

=*TUq!	 @ rF   c                4   U R                  5         U R                  SSS5      nUR                  S5        UR                  SS5        UR                  SU R                  R                  5       SS/-   5        UR                  S	S
5        U R                  U5        g )Ninstallr  r  allrY   zInstalling filesr  --no-rebuildrZ   r  )create_install_data_filesra  r  r
  r   r
  r\  r   r`  s     rC   r  NinjaBackend.generate_install@  s    &&(''	3CWMUf01i!1!1!C!C!ETbHc!cdfi(trF   c                    U R                  5         U R                  R                  S5      SS/-   nU R                  R                  R                  R                  [        S5      5      (       d  US/-  nU R                  R                  R                  R                  [        S5      5      (       a  US/-  nU R                  SS/ S	Q5      nUR                  S
U5        UR                  SS5        UR                  SS5        U R                  U5        U R                  R                  S5      / SQ-   nU R                  SS/ SQ5      nUR                  S
U5        UR                  SS5        UR                  SS5        U R                  U5        g )NTtestr  stdsplitz--no-stdsplit	errorlogsz--print-errorlogsr  )r  meson-test-prereqr  r  rY   zRunning all testsrZ   r  )r"  z--benchmarkz	--logbasebenchmarklogz--num-processes=1r  	benchmark)r  meson-benchmark-prereqr  zRunning benchmark suite)
serialize_testsr   r
  rx  r  r  r&   ra  r
  r\  r   rL   r`  s      rC   r  NinjaBackend.generate_testsI  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rF   c                
   / U l         0 U l        U R                  [        S5      5        U R	                  5         U R                  [        S5      5        U R                  5         U R                  [        S5      5        U R                  5         U R                  5         U R                  [        S5      5        U R                  [        SS// SSS	95        U R                  [        S
S// SSSSS95        U R                  [        SU R                  R                  5       SS/-   SS/S5      5        U R                  R                  5       SSU R                  R                  5       S/-   nU R                  [        SU/ SSS	95        g )Nz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  r.  r   $outzCopying $in to $out
regenerater\  REGENERATE_BUILDzRegenerating build fileszgenerator = 1)r  ruledictadd_rule_commentr   generate_scanner_rulesgenerate_compile_rulesgenerate_static_link_rulesgenerate_dynamic_link_rulesadd_ruler   r   r
  r  )r   r   s     rC   r  NinjaBackend.generate_rules`  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 	8rF   c                :    U R                   R                  U5        g r   )r  r	  r   r   s     rC   r5  NinjaBackend.add_rule_comment  s    

'"rF   c                :    U R                   R                  U5        g r   )r  r	  r=  s     rC   r  NinjaBackend.add_build_comment  s    ""7+rF   c                    UR                   U R                  ;   a  [        SUR                    S35      eU R                  R	                  U5        XR                  UR                   '   g )NzTried to add rule z twice.)r   r4  r   r  r	  )r   r   s     rC   r:  NinjaBackend.add_rule  sM    99% #5dii[!HII

$#'dii rF   c                P   UR                   " 5         U R                  R                  U5        UR                  S:w  aj  UR                  U R                  ;   a  U R                  UR                     Ul        g [        R                  " SUR                   SUR                   35        g g )Nr  zbuild statement for z references nonexistent rule )	r'  r  r	  r   r4  r   r   r  r   )r   r   s     rC   r\  NinjaBackend.add_build  s    ""5)>>W$~~.!]]5>>:
3E4F4F3GGdejesesdtuv %rF   c                    U R                    H*  n[        U[        5      (       d  M  UR                  5         M,     U R                   H  nUR                  U5        M     g r   )r  r   r   r  r  r   )r   r   brs       rC   r  NinjaBackend.write_rules  sH    $$A!.//'') % AGGG rF   c                    [        U R                  SS9 H  nUR                  U5        M     [        R                  " S5        g )NzWriting build.ninjar  zbuild.ninja generated)r!   r  r   r   r  )r   r   rF  s      rC   r  NinjaBackend.write_builds  s6    T007LMAGGG N23rF   c                    U R                  [        S5      5        [        U R                  SSS5      nU R	                  U5        g )Nz&Phony build target, always out of dater  r  r   )r  r   r   r   r\  r  s     rC   r  NinjaBackend.generate_phony  s8    |,TUV !1!17GRHtrF   c           	        UR                  5       n[        R                  R                  U R	                  U5      U5      nUR                  5       nUR                  5       nUR                  S   nSnSnSn	Sn
UR                  5       nUS:w  a  Sn	U R                  U5      n/ nUR                  5        HB  n[        R                  " U5      nUR                  S5      (       d  M1  UR                  U5        MD     U R                  X5      nU R!                  XM-   XU5      nU Vs/ s H2  n[        R                  R                  U R#                  U5      U5      PM4     nn[        R                  R                  U R#                  U5      SS	5      n[        R                  R                  U R$                  R'                  5       U5      n[        R(                  " [        R                  R+                  U5      S
S9  [-        USSS9 n[/        UR0                  5      (       a  UR3                  S5        UR0                   Vs/ s H@  n[        R                  R                  U R	                  U5      UR                  5       5      PMB     nnUR3                  SR                  U5      5        UR3                  S5        S S S 5        SnXx-   U	-   U
-   /nUR                  U5        U	S:w  a  UR                  U5        UR                  U R5                  U5      5        USU R#                  U5      S/-  n[7        U R8                  UU/ 5      nUR;                  U5        U(       a<  UR=                  U R?                  [A        U R#                  U5      5      U5      S   5        URC                  SU5        U RE                  U5        U RG                  XUXM5        g s  snf s  snf ! , (       d  f       GN(= f)Njavar   rB   r   r  r!  .javazMETA-INFzMANIFEST.MFTrT  rk  rg  rh  zClass-Path: ra   r`   java_LINKER-Cr\  r   ARGS)$get_filenamer  r  r   r  r  get_java_resourcesr   get_main_classr  rr  r   r  endswithr	  determine_java_compile_argsgenerate_java_compiler  r   r  r`  dirnamerr  anyr  r   rp  r   r   r  r  )_NinjaBackend__generate_sources_structurer   r
  r\  rH  )r   r  r   outname_relsrc_list	resourcesr  r   rB   r!  r  
main_classr1  gen_src_listr  r  compile_args
class_listr   class_dep_listmanifest_pathmanifest_fullpathmanifestr   cp_pathsjar_rulecommandsr`  s                               rC   rj   NinjaBackend.generate_jar_target  s7   ##%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%   "9O:O<AO3OO
O&c                *   / n/ nUR                    GH|  n[        R                  R                  U R                  UR
                  U5      nUR                  S5      (       a  SU-   nGOUR                  S5      (       d  UR                  S5      (       a  [        R                  R                  [        R                  R                  U5      5      S   S-   n[        R                  R                  U R                  U5      U5      n[        U R                  USU5      n	U	R                  SSXX/5        U	R                  S	S
U 35        U R                  U	5        UR                  U5        SU-   nO[        SU S35      eUR                  U5        GM     X#4$ )Nz
.resourcesz
-resource:z.txtz.resxr   r  r  resgenrY   zCompiling resource zUnknown resource file r\  )r^  r  r  r   r  r  rV  r#  basenamer  r   r   r
  r\  r	  r)   )
r   r  r   r   rG  rel_sourcefiler   	ofilebase	ofilenamer`  s
             rC   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rF   c                   UR                  5       n[        R                  R                  U R	                  U5      U5      nUR                  5       nUR                  S   nU Vs/ s H;  n[        R                  R                  UR                  U R                  5      5      PM=     nn/ nU R                  X5      n	XR                  S   -  n	[        U[        R                  5      (       a  U	R                  S5        O<[        U[        R                   5      (       a  U	R                  S5        O[#        S5      eU R%                  U5      u  pX-  n	X-  nXR'                  U5      -  n	UR(                   Hd  n[        R                  R                  U R	                  U5      UR                  5       5      nXR+                  U5      -  n	UR                  U5        Mf     SU	;   a  X3S-   /nOU/nU R-                  U5      n/ nUR/                  5        H  nUR1                  5       R3                  S5      (       a.  UR                  [        R                  R                  U5      5        UR                  [        R                  R                  U5      5        M     UR5                  5        H"  nU	R7                  UR+                  5       5        M$     [9        U R:                  XR=                  U5      UU-   5      nUR?                  U5        URA                  SU	5        U RC                  U5        U RE                  XXU5        g s  snf )	NrV  z-target:exez-target:libraryzUnknown C# target type.-gz.mdbz.csrR  )#rS  r  r  r   r  r  r   r6  r  r  generate_basic_compiler_argsr  r   r   r  r	  r  r   rq  get_output_argsr  get_link_argsr  rr  r$  rV  get_external_depsextend_directr   r   r  r  r
  r\  rH  )r   r  r   r\  r]  r  rW   rel_srcsr   ri  resource_argsresource_depsr   lnamer  r1  generated_rel_srcsr  r   r`  s                       rC   rk  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L;c                   / nU R                  X5      nX1R                  5       -  nX2R                  U R                  U5      5      -  nX1R	                  5       -  nUR                  5       n[        R                  R                  U R                  U5      [        R                  -   nU[        R                  R                  U5      [        R                  -   -  nUR                   Hc  nUR                  5        HL  nU[        R                  R                  U R                  UR                  U5      [        R                  -   -  nMN     Me     USU/-  nU$ )Nz-sourcepath)ru  get_java_argsrv  r  get_classpath_args
get_subdirr  r  r   r  pathsepr6  include_dirsget_incdirscurdir)r   r  r  r   r  
sourcepathr   idirs           rC   rW  (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
 ( % 	
++rF   c                   UR                    Vs/ s H@  n[        R                  R                  U R	                  U5      UR                  5       5      PMB     nnU R                  U5      nUR                  5        H,  nUR                  S5      (       d  M  UR                  U5        M.     / n	/ n
/ nU H  nUR                  U R                  5      nU	R                  U5        UR                  S S S-   nU
R                  U5        [        R                  R                  U R                  U5      U5      nUR                  U5        M     [        U R                  XR!                  U5      U	5      nUR#                  U5        UR%                  SU5        UR%                  SU R'                  U5      5        U R)                  U5        U
$ s  snf )NrO  classrR  FOR_JAR)r  r  r  r   r  rS  r  rr  rV  r	  r  r  r   r  r   r   r  r  r
  rp  r\  )r   r  r  r  r   r   r   r1  r  rz  plain_class_pathsrel_objsr  plain_class_pathrel_objelements                   rC   rX  "NinjaBackend.generate_java_compile1  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                L    SnSS/nSnU R                  [        X/ U5      5        g )NrP  jar$ARGSzCreating JAR $out)r:  r   )r   r   r   r]   s       rC   generate_java_linkNinjaBackend.generate_java_linkJ  s+    '")ir;?@rF   c                   [        5       n[        R                  " UR                  UR                  5       H  nUR                  5       (       d  M  UR                   H  n[        US5      (       a  UR                  nUR                  S5      S   [        R                  S   ;   d  MK  UR                  n[        R                  R                  U R!                  U5      U5      nUR#                  U5          M     M     [%        U5      $ )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   r\  r   r  )r   r  r  r  r  is_linkable_targetrr   r  r   r   r   r~  	vala_vapir  r  r   r  r   r   )r   r  r  r   r   vapinamefullnames          rC   determine_dep_vapis NinjaBackend.determine_dep_vapisP  s     ??6#6#68Q8QRC))++[[1g&&A773<#y'>'>v'FF"}}H!ww||D,?,?,DhOHJJx( ! S F|rF   c                D   [        5       n[        5       n[        5       n[        5       nUR                  5        H~  n[        U[        5      (       d  [	        SU< SU< 35      eUR                  U R                  5      nUR                  S5      (       a  UnOUR                  S5      (       a  UnOUnXhU'   M     UR                  5        H  n	U	R                  5        H  nU R                  XU5      nUR                  S5      (       a  UnOUR                  S5      (       a  UnOUnXx;   ae  X   U	La^  SR                  U[        U	5      R                  U	R                  X   R                  [        X   5      R                  5      n
[	        U
5      eXU'   M     M     X#XE44$ )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.valaz.gsz.vapizNDuplicate output {0!r} from {1!r} {2!r}; conflicts with {0!r} from {4!r} {3!r})r   r  r   r   r)   r  r  rV  r  r  r  r   typert   r   )r   r  r  vapiothers	othersgenrW   r  srctyper  r  s              rC   split_vala_sourcesNinjaBackend.split_vala_sourcese  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...rF   c                t   U R                  U5      u  p#n/ nU(       d  [        SUR                  < S35      eUR                  S   nU R	                  U5      n/ n/ n	[        U5      n
[        R                  R                  U R                  UR                  5       5      nUR                  5        GH  u  pU
R                  U5        [        U[        R                  [        R                   45      (       d  UR"                  (       Ga  [        R                  R%                  [        R                  R'                  U5      5      S   S-   n[        R                  R                  U R(                  R+                  5       UR                  5       5      n[        R                  R                  U R(                  R-                  5       U5      n[/        UU5      (       aM  [1        U5      R2                  R5                  U5      n[        R                  R                  [7        U5      U5      nO[        R                  R                  U R                  UR                  5       5      nUR9                  U5      (       aD  [        R                  R%                  [        R                  R;                  UU5      5      S   S-   nOB[        R                  R%                  [        R                  R'                  U5      5      S   S-   n[        R                  R                  X~5      nUR                  U5        U	R                  U5        GM     U R=                  X5      nUUR?                  U RA                  US5      5      -  nUSU/-  nUSU/-  nURC                  5       (       Ga  US	UR                  /-  n[        R                  R                  U RE                  U5      URF                  5      nUS
U/-  nU RI                  U5      (       a  US/-  nU	R                  U5        [        R                  R                  U RE                  U5      URJ                  5      nUS[        R                  R                  SURJ                  5      /-  nU	R                  U5        [M        URN                  5      S:  a9  URN                  S   SL a'  U R(                  RQ                  5       URN                  S'   [M        URN                  5      S:  aX  URN                  S   SL aF  [        R                  R                  U R(                  RS                  5       SS5      URN                  S'   [        URT                  [6        5      (       Ga.  [        R                  R                  U RE                  U5      URT                  5      nUS[        R                  R                  SURT                  5      /-  nU	R                  U5        URW                  S5      n[        U[        RX                  5      (       a  USUR[                  5       /-  n[M        URN                  5      S:  aW  URN                  S   SL aE  [        R                  R                  U R(                  RS                  5       S5      URN                  S'   / nUS   R]                  5        H  n[        U[^        R`                  5      (       d  M$  U Rc                  U5      u  nUSU-   /-  nURd                   H	  nUU/-  nM     URg                  5       u  nU[        R                  R                  U RE                  U5      U5      /-  nM     [i        U5       H  nUSU 3/-  nM     U Rk                  U5      nUU-  nURm                  U Ro                  U5      5        UURq                  S5      -  n[s        U Rt                  U	U Rw                  U5      U
U-   5      nURy                  SU5        UR{                  U5        U R}                  U5        U R                  XUU
/ 5        US   US   U4$ )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  r   z.c
b_coloroutz--directoryz	--basedirz	--libraryz--headerz--use-headerz--vapiz..r   Tr   r  z--girsharedz--shared-libraryr~   zgir-1.0z--gresources=z--gresourcesdir=rR  )@r  r)   r   r   r  r   r  r  r   r  r  itemsr	  r   r   r  r(   is_builtr#  rm  r   r  r  r%   r
   parentr  rn   r   relpathru  get_colorout_argsr  r  r  r  rq  r  r?   install_dirget_includedirget_datadirvala_girr   r  rS  rz  r   GResourceTargetget_custom_target_sourcessource_dirsr  r   r  r  r  get_extra_argsr   r   r  r
  r  r\  rH  )r   r  vala_srcvapi_src	other_srcextra_dep_filesvalac	c_out_dir
vala_c_srcvalac_outputs	all_files
srcbasedir	vala_filer  vala_c_fileabs_srcbasedirabs_vala_filevala_c_subdirpath_to_targetr   hnamer  girnameshared_target	gres_dirsgres_xmlr5  gres_cgres_dirdependency_vapisr  s                                  rC   rm  "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GGLL!4!4V!<f>P>PQEZ''D}}V$$
 ((  'ww||D$7$7$?AQAQRH Xrww||D&2B2BCDDD  *6%%&*v/A/A!/D/L(,(8(8(G(G(I""1%6%%&*v/A/A!/D/L(*T5E5E5Q5Q5SU[]c(d""1%&//3//'',,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 	&(w//tYPRS|Yq\:55rF   c                	   [        5       n[        5       n/ nUR                  S   n/ nXeR                  5       -  nXeR                  U R	                  US5      5      -  nXeR                  U R	                  US5      5      -  nXeR                  XR                  UR                  5      -  nXeR                  XR                  UR                  5      -  nX`R                  R                  XQR                  5      -  nX`R                  R                  XQR                  UR                  5      -  nXaR                  S5      -  nU R	                  U[        SUR                  S95      n/ nUR!                  5        GH  n	U	R#                  S5      (       a  [$        R&                  R)                  U R+                  U5      U	 SU 35      n
[-        U R.                  U
/U R1                  U5      U	R3                  U R                  R5                  5       U R                  R7                  5       5      /5      nUR9                  SU5        U R;                  U5        UR=                  U
5        UR=                  U5        M  XU	R?                  U R@                  5      '   GM     / nURC                  5        GH  nURE                  5        GH  n[G        U[H        5      (       a0  [$        R&                  R)                  U R+                  U5      U5      nO.[$        R&                  R)                  URK                  5       U5      nUR#                  S5      (       a  [$        R&                  R)                  U R+                  U5      U SU 35      n
[-        U R.                  U
/U R1                  U5      U/5      nUR9                  SU5        U R;                  U5        UR=                  U5        UR=                  U
5        GM2  [L        RN                  RQ                  URK                  5       U5      X>'   U R                  RS                  U5      (       a  GM  U R                  RU                  U5      (       a  GM  U R                  RW                  U5      (       a  GM  [X        RZ                  " U5      (       a  GM  UR=                  U5        GM     GM     U H  nUR]                  U5        M     X#U4$ )	z7Generate rules for transpiling Cython files to C or C++rX  r  optimizationcython_language)r/  z.pyxr\  rR  )/r   r   get_always_argsget_debug_argsr  get_optimization_argsget_option_compile_argsr   r  get_option_std_argsr   get_global_argsr  get_project_argsr  r&   r  rV  r  r  r   r  r   r   r  r4  r  r  r
  r\  r	  r  r  r  r  r   r(   r  r   r   r   rv  rw  rx  r   ry  r  )r   r  static_sourcesr1  cython_sourcesrX  r   r  pyx_sourcesr  r  r  r  genssrcr'  s                   rC   rn  &NinjaBackend.generate_cython_transpile  s    7Bm9D&(!!(+&&((%%d&<&<VW&MNN,,T-C-CFN-[\\..v7G7GIZIZ[[**63C3CVEVEVWW

**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%+  ++55d;; $ 0 0 : :4 @ @ $ 0 0 ; ;D A A ' 9 9$ ? ?#**401 * 24 "F, " .@@rF   c                2   [        U[        5      (       a;  UR                  U R                  R                  U R                  R
                  5      nOUn[        U R                  [        U5      /SU/5      nUR                  U5        U R                  U5        g)zCCreate a target to copy a source file from one location to another.r0  N)r   r   r4  r   r5  r  r   r   rn   r  r\  )r   r  r  instrr`  s        rC   _generate_copy_target"NinjaBackend._generate_copy_target[  sw    c4  %%d&6&6&A&A4CSCSC]C]^EE !1!1CK=+PUwW% trF   c           
     F   S n/ nUR                   R                  5        H  u  pVU H  n[        U[        5      (       aa  X-  [	        UR
                  5      R                  -  nUR                  [        U5      5        U R                  Xx5        Uc  [        U5      nMw  My  UR                  5        He  n	X-  U	-  nUR                  [        U5      5        U R                  [        [	        UR                  5      U	-  5      U5        Ub  MZ  [        U5      nMg     M     M     XC4$ r   )rr   r  r   r   r   r   r   r	  rn   r  r  r  )
r   rootstructured_sources
first_filer   r  filesr7  r   r  s
             rC   __generate_sources_structure)NinjaBackend.__generate_sources_structuree  s    &*
!#	-55;;=KDdD))+TZZ(8(=(==C$$SX...t9!)%(X
 * "--/"kAo!((S2223tDKK7H17L3MsS%-),SJ 0  > $$rF   c	                   [         R                  " [        U5      S 5      n	U	(       d  SOU	R                  S5      S   n
/ n[	        U5      nU HZ  nUS:X  a  UR                  [        U5      5        M%  UR                  S5      (       d  M=  UR                  U[        S5      S  5        M\     [        [        U R                  5      UUUUU
UUU(       + US LUS9nXR                  U'   g )Nc                $    U R                  S5      $ )Nz	--edition)r   )r   s    rC   rD   6NinjaBackend._add_rust_project_entry.<locals>.<lambda>}  s    PQP\P\]hPirF   r7   =r   z--cfg)r@  r?  rA  )r   firstreversedr   iterr	  nextr   r?   r5  rR  )r   r   main_rust_filer   r9  r:  from_subprojectrA  r   raw_editionr<  r>  arg_itrrJ   r.  s                  rC   _add_rust_project_entry$NinjaBackend._add_rust_project_entryy  s     (0~~htnFi'j/:@Q@QRU@VWY@Z#':Cg~

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

3s7|}-.	    !$3 3/t;"7
 "'rF   c                    UR                   R                  UR                  UR                  5      R                  SS5      $ )N-r  )rust_dependency_mapr   r   rT   )r   r  
dependencys      rC   _get_rust_dependency_name&NinjaBackend._get_rust_dependency_name  s4     ))--joozOWWX[]`aarF   c                z   / nS nUR                   (       Ga0  UR                   R                  5       (       a;  U R                  [        U R	                  U5      5      S-  UR                   5      u  pCGOUR                   R                  5       n[        U[        5      (       a  UR                  U R                  5      nO[        U[        5      (       aA  [        R                  R                  U R	                  U5      UR                  5       S   5      nO?[        R                  R                  UR                  5       UR                  5       S   5      n/ nUR                   R!                  5        H  n[        U[        5      (       a,  UR#                  UR                  U R                  5      5        MD  UR%                  UR                  5        Vs/ s H8  n[        R                  R                  U R                  UR&                  U5      PM:     sn5        M     U R(                  R+                  U5        UR%                  U5        X#4$ UR-                  5        H#  nUb  M  UR                  U R                  5      nM%     UR/                  5        H  nUR                  5        H  n[        U[        5      (       a0  [        R                  R                  U R	                  U5      U5      n	O.[        R                  R                  UR                  5       U5      n	Uc  U	nUR#                  U	5        M     M     X#4$ s  snf )N
structuredr   )r  
needs_copyr[  r   r  r  r   r   r  r  r(   r  r  r   r  r  as_listr	  r  r  rO  r   r  r  )
r   r  r   r  _odsgr  rW   r   r   s
             rC   generate_rust_sources"NinjaBackend.generate_rust_sources  s   !#	
 $$$((3355'+'H'H//7J9;GJHIOIbIb(d$n --88:a&&%&%6%6t7H7H%IN=11%'WW\\$2M2Mf2UWXWdWdWfghWi%jN%'WW\\!,,.!--/RSBT%UN22::<A!!T**A$5$5d6G6G$HI./mmo%?.= &(WW\\$2C2CQXXq%Q.=%? @	 = ''..t4T",,##%A%!"!2!243D3D!E & --/A]]_a//GGLL)D)DV)LaPEGGLL;E!)%*N  ' % 0 (('%?s   ?L8
c                F   [         R                  " XU R                  5      nU R                  U5      nUR	                  SU/5        UR
                  S;   a  UR	                  UR                  5       5        XPR                  X5      -  nUSUR                  R                  SS5      R                  SS5      R                  SS5      /-  nU(       a  XRR                  Xd5      -  nXRR                  U5      -  nUSS	UR                  5       -   /-  nXQR                  S
5      -  nU$ )Nz--crate-type>   bindylibz--crate-namer  r  ra   r\  rQ  z	metadata=r  )r   get_base_compile_argsr   rp  r  rust_crate_typeget_linker_always_argsru  r   rT   get_dependency_gen_argsrv  r  r  )r   r  rustcsrc_crate_typer   r   r:  s          rC   get_rust_compiler_args#NinjaBackend.get_rust_compiler_args  s    ..vd>N>NO..v6^^45 !!%55KK446711&@@!4!4S#!>!F!FsC!P!X!XY\^a!bcc11+GGD%%k22{V]]_455%%f--rF   c           	     @  ^^ / n/ n/ m[        U[        R                  5      (       d9   U R                  US5      nU R                  US5      nTUR	                  Xv5      -  m[        R                  " UR                  S5      (       a  SmOSmSSUU4S jjjnU H(  n	TR                  SU	 35        UR                  U	5        M*     [        R                  " 5       n
UR                  R                  5       nUR                  5       nU GHO  nU
R                  UR                   5        UR                  U R#                  U5      5        [        U[        R                  5      (       a  UR%                  UR                  5        UR'                  5       (       a  U[(        R*                  " UR,                  UR.                  5      ;  a  M  U R1                  X5      nTSS	R3                  XR5                  U5      5      /-  mUR                  [7        XR8                  UR:                     R<                  5      5        GM3  U R?                  U5      nXR.                  ;   n[        U[        R                  5      (       d4  [        U[        R@                  5      (       al  URC                  5       (       aW  [        U[        R                  5      nT(       a  [D        RF                  RI                  U5      OUR:                  nU" UUUS
9  GM  U(       a8  URJ                  RM                  U/5      nTU Vs/ s H  nSU 3PM
     sn-  mGM;  TR                  SU 35        GMR     U GH5  nURO                  5        GH  nUURP                  ;   a  M  URS                  S5      (       a  TR                  U5        M?  URU                  S5      (       a  [D        RF                  RW                  U5      u  nnU
R                  U5        [        U[        R                  5      (       aa  T(       d=  [D        RF                  RY                  U5      u  nnURS                  S5      (       a  USS  nURU                  S5      nU" UU5        GM  TR                  SU 35        GM     GM8     U
 H"  nU=(       d    SnTR                  SU 35        M$     TR%                  S UR[                  S5       5       5        []        S U 5       5      n[]        S U 5       5      nUR^                  S;   a  SnO4U R                  US5      (       a  UR^                  S:X  a  [a        S5      eSnU(       a  TSS/-  mU(       d  U(       a  TU Rc                  X5      -  mXET4$ ! [
        [        4 a     GN6f = fs  snf )N	buildtypeb_vscrtz	>= 1.67.0z	+verbatimr   c                   > U(       a  SOSn/ nU(       d  U(       a  UR                  S5        T(       a  UR                  T5        U(       a  USSR                  U5      -   -  nTR                  SU SU  35        g )Nstaticr  z-bundlerc   ,-lr  )r	  r   )libnamer  bundletype_	modifiersr   verbatims        rC   _link_libraryCNinjaBackend.get_rust_compiler_deps_and_args.<locals>._link_library  si     &HGEIf  +  *sxx	222KK"UG1WI./rF   -Clink-arg=z--externz{}={})r  -L)z.dllz.soz.dylib.a.liblibr~   )r$  r%  r\  c              3  ,   #    U  H
  nS U 3v   M     g7f)r"  Nrs   )r  r   s     rC   r  ?NinjaBackend.get_rust_compiler_deps_and_args.<locals>.<genexpr>T  s     S/R!k!%/Rs   r  c              3  V   #    U  H  n[        U[        R                  5      v   M!     g 7fr   )r   r   r  r  r   s     rC   r  r(  V  s      Zksje.A.ABBks   ')c              3  n   #    U  H+  nUR                  5       =(       a    UR                  S :H  v   M-     g7f)r  N)r  r  r*  s     rC   r  r(  W  s7      #;.9s $'==? $F'*':':g'E$F.9s   35>   r  
proc-macroTrust_dynamic_std	staticlibz6rust_dynamic_std does not support staticlib crates yetrQ  zprefer-dynamicF)r  rn   r  r   r  r   )2r   r   r  r  get_crt_link_argsKeyErrorAttributeErrorr   r  r  r	  r   external_depsr.  r  r   r  get_dependency_filenamer  uses_rust_abir  r  r  r  r  r   rp  r-  rR  r   r6  get_target_filename_for_linkingr  get_crt_staticr  r  rm  rK  get_link_whole_forrw  native_static_libsr   rV  r   r#  get_used_stdlib_argsrZ  r  r   get_build_rpath_args)r   r  r  r  r   project_depsr  crtr   r  linkdirsr3  target_depsrC  d_namer&  
link_wholer  r  link_whole_argsr   r!  dir_r  has_shared_depshas_rust_shared_depsr   r  s                             @@rC   get_rust_compiler_deps_and_args,NinjaBackend.get_rust_compiler_deps_and_args  s   (*
 &%"5"566 226;G	,,VY?//?? ##EMM;??"HH		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':':;3;"''**3/gvjA"',,"A"A3%"HODOq;qc*ODDk#/0O R A__&000\\$''KKNZZ GHH "a 0ID#LL&!&%*=*=>>'')ww'7'7'<HC"~~e44&)!"g!"N!;%c62 k!-.) ' . ASAKK"QC!  	Sv/J/J6/RSSZkZZ" #;.9#;  ; !!%<< $( ##F,>??%%4 %%]^^#' T+,,D2D--f<<D4''} n- ~ Es   8V *VVVc           
        U R                  U5      u  pVUc  [        S5      e[        R                  " SUR                  S   5      nUR                  5       n[        R                  R                  U R                  U5      UR                  S-   5      n	XR                  XUR                  U	5      -  nU R                  XU5      u  pnX-  nS nUR                  S:X  a  U R                  U5      nU R                  UR                  [        R                  R!                  [        R                  R                  U R"                  R$                  U5      5      XR                  U['        UR(                  5      UU5        U R+                  U5      n[-        U R.                  X.U5      nU(       a  UR1                  U5        U(       a  UR1                  U5        U
(       a  UR3                  U
5        UR5                  SU5        UR5                  SU	5        U R7                  U5        [9        U[:        R<                  5      (       a  U R?                  U5        U RA                  XX// 5        URB                  (       a  URB                  RD                  c   eURG                  U R"                  5      nURI                  5       nXR                  URB                  RD                  UUR                  5      -  nU R                  URB                  RD                  UU5      u    nnX-  nURK                  5       U/-   URB                  RL                  -   URB                  l&        g g )NzKA Rust target has no Rust sources. This is weird. Also a bug. Please reportr3   r  z.dr,  rR  r\   )'r  RuntimeErrorTcastr   compiler_argsr  r  r   r  r   r  r  rF  get_target_filename_absr  abspathr   r  r   r  r  r   r   r  r  r
  r\  r   r   r  generate_shsymrH  doctestsr  get_rustdocget_exe_argsr  cmd_args)r   r  r:  r  r  r   r  r  r   r   r   r<  	deps_argsrA  compiler_namer  rustdocr  s                     rC   r  !NinjaBackend.generate_rust_targett  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''(8(89G'')D//0F0FQWQgQghhD #BB6??CYCY[bdlmOAq)D'+~~'7>:J'JV__MeMe'eFOO$ rF   c                     [        SS5      U    $ )N
_FOR_BUILDr   )r    )r  s    rC   get_rule_suffixNinjaBackend.get_rule_suffix  s    ,+K88rF   c                2    U SU U R                  U5       3$ )Nr  )rZ  )clsr)  r  modes       rC   r  #NinjaBackend.get_compiler_rule_name  s#    qs22;?@AArF   c                l    U R                  UR                  5       UR                  UR                  5      $ r   )r  r@  r  r^  r]  r  s     rC   r  "NinjaBackend.compiler_to_rule_name  s-    ))(*?*?*A8CWCWYaYfYfggrF   c                X    U R                  UR                  5       UR                  S5      $ )NPCH)r  r@  r  ra  s     rC   r  &NinjaBackend.compiler_to_pch_rule_name  s'    ))(*?*?*A8CWCWY^__rF   c                z    [         R                  R                  U R                  U5      UR                  S-   5      $ )Nz.swiftmodule)r  r  r   r  swift_module_namer   r  s     rC   swift_module_file_name#NinjaBackend.swift_module_file_name  s4    ww||D77?"44~EG 	GrF   c                    / nUR                    H;  nU R                  U5      (       d  M  UR                  U R                  U5      5        M=     U$ r   )r  is_swift_targetr	  ri  r   r  r  r   s       rC   determine_swift_dep_modules(NinjaBackend.determine_swift_dep_modules  sF    $$A##A&&d99!<= % rF   c                p    / nUR                    H#  nUR                  U R                  U5      5        M%     U$ r   )r  r	  rp  rm  s       rC   get_swift_link_deps NinjaBackend.get_swift_link_deps  s3    $$AMM$22156 %rF   c                    U R                  U5      n/ n/ nU H=  nUR                  S5      (       a  UR                  U5        M,  UR                  U5        M?     X44$ )Nz.swift)r  rV  r	  )r   r  all_srcsr  r  r   s         rC   split_swift_generated_sources*NinjaBackend.split_swift_generated_sources  sV    44V<Azz(##Aa 	 
 |rF   c           
        UR                   nUR                  S   n/ n/ n/ n/ nUR                  5       (       d  UR                   Vs/ s H  oR                  5       (       d  M  UPM     n	nU	/ :w  a  [	        U	5      S:  a  SOSn
SR                  S U	S S  5       5      n[	        U	5      S:  a  SOS	n[        U	S   R                  5      n[	        U	5      S:  a  S
OSn[        SR                  [        UR                  5      XXU5      5      eUR                  5        GH  nUR                  U5      (       a  UR                  U R                  5      n[        R                  R!                  [        R                  R                  U R"                  R%                  5       U5      5      nUR'                  U5        UR'                  U5        M  U R"                  R)                  U5      (       a  UR                  U R                  5      n[        R                  R!                  [        R                  R                  U R"                  R%                  5       U5      5      nUR'                  U5        XsR+                  U5      -  nGMe  [-        SUR/                  5        S35      e   [        R0                  " U R3                  U5      SS9  U R5                  X5      nUUR7                  U5      -  nUUR9                  U5      -  nUU R:                  R=                  X1R>                  UR@                  5      -  nUU R:                  RC                  X1R@                  5      -  n[E        U[:        RF                  [:        RH                  45      (       aH  [	        U5      S:X  a9  [        R                  RK                  US   5      S:w  a  UURM                  5       -  n[O        URQ                  5       5       H  nURS                  5       nURU                  5        H  nUS;  a!  [        R                  R                  UU5      nOUn[        R                  R!                  [        R                  R                  U R"                  R%                  5       U R                  U5      5      nURW                  US5      nUU-  nM     M     UURY                  S5      -  nUR[                  [        R                  R                  U R"                  R%                  5       U R]                  U5      5      5      nUU R:                  R_                  X1R>                  UR@                  5      -  nUU R:                  Ra                  X1R@                  5      -  nU Rc                  U5      nU Re                  U5      nU Rg                  U5      nU Ri                  U5      n/ nU H  n UURW                  U S5      -  nM     U Rk                  U5      n!U! V s/ s H;  n [        R                  R                  U R"                  R%                  5       U 5      PM=     n"n UR                   Hv  nU Rm                  U5      n#U#S	:X  a  Sn#US[        R                  R!                  [        R                  R                  U R"                  R%                  5       U#5      5      /-  nMx     U Ro                  U5      u  n$n%U$ V s/ s H;  n [        R                  R                  U R"                  R%                  5       U 5      PM=     n&n / n'/ n(UU&-    H  n[        R                  RK                  U5      n)[        R                  Rq                  U)5      S   S-   n*U'R'                  U*5        U(R'                  [        R                  R                  U Rc                  U5      U*5      5        M     U Rs                  U5      n+[u        U Rv                  U(U+U5      n,U,Ry                  UU$-   5        U,Ry                  U5        U,R{                  SUR}                  5       U-   U-   U&-   U-   5        U,R{                  SU5        U R                  U,5        U V-s/ s H  n-U-S:w  d  M  U-PM     n.n-[u        U Rv                  UU+U5      n,U,Ry                  UU$-   5        U,R{                  SUR                  5       U.-   U&-   U-   5        U,R{                  SU5        U R                  U,5        [E        U[:        RF                  5      (       aU  U R                  XR]                  U5      U(U R:                  R                  UR@                     5      n,U R                  U,5        O[E        U[:        R                  5      (       a  [u        U Rv                  U R]                  U5      U+/ 5      n,U,Ry                  U(5        U,Ry                  U!5        U,R{                  SUUR                  5       -   U'-   U"-   5        U,R{                  SU5        U R                  U,5        O[        S5      eU R                  XUU-   U-   UU$5        g s  snf s  sn f s  sn f s  sn-f )NrW  r   r  r  rY  c              3  L   #    U  H  n[        UR                  5      v   M     g 7fr   )reprr   )r  r  s     rC   r  5NinjaBackend.generate_swift_target.<locals>.<genexpr>  s     !I8H1$qvv,,8Hs   "$r   r  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.TrT  r   z
main.swiftr   r\  Fr\  r#  z.orR  RUNDIRrt  z:Swift supports only executable and static library targets.)Frg  r   uses_swift_cpp_interopr  r?   r   ry  r   r   r   r  can_compiler  r  r  r  r6  r   r  r	  r  get_header_import_argsr)   get_basenamer`  ra  ru  get_module_argsget_cxx_interoperability_argsr   r  r  r  r  r   r  r  rm  get_library_argsr  get_include_dirs
get_curdirr  r  r  rv  rp  get_project_link_argsget_global_link_argsr  ri  rn  determine_swift_dep_dirsrq  r  ru  r#  r  r   r   r  r
  get_compile_only_argsr\  get_mod_gen_argsr  static_linkerr  get_std_exe_link_argsrH  )/r   r  module_nameswiftcabssrcrelsrcabs_headersheader_importsr  cpp_targetstarget_wordr  and_wordlastenable_wordr   relsabssrelhabshra  basedirrC  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   r`  elmod_gen_argss/                                                  rC   rl  "NinjaBackend.generate_swift_target  s   ..!!'*,,..&,&9&9X&9=U=U=W1&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#!!++A..(():):;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&   h<#h<5AiAi
i-ic                d    SUR                  5       0nUS   (       a  UR                  5       US'   U$ )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   tooloptionss      rC   _rsp_optionsNinjaBackend._rsp_optionsN	  s8     d88:;9-1-A-A-CG)*rF   c           	        U R                   R                  R                  R                  S5      nSU R                   R                  R                  R
                  ;   a  U R                  5         [         GH  nU R                  R                  U   nUc  M"  SR                  U R                  U5      5      n/ nS/n[        U[        5      (       aF  [        R                  " 5       (       d,  [         ["         Vs/ s H  owR                  S5      PM     sn-   nXSR%                  5       -  nUS/-  nU[&        R)                  UR+                  S5      [,        R.                  5      -  nUR0                  S:X  aO  UR3                  U5        / nU R                   R5                  US5      nUc  S/nUR3                  S	/U-   S
S/-   5        Sn	US:  a  Sn
OS n
U R7                  U5      nU R9                  [;        XEXi40 UDSU
0D65        GM     g s  snf )Nr  rN  zSTATIC_LINKER{}r   r1  
$LINK_ARGSapplearranlibrP   -czLinking static target $outr   pool = link_poolr   )r   rx  r  r  r   ry  r  r   r   r  r   rZ  r   r   r   r  execute_wrapperrmfile_prefixr  r6   r   rv  r|   r   r|  r  lookup_binary_entryr  r:  r   )r   r  r  r  r   cmdlistr   r   r  r]   rZ   r  s               rC   r8  'NinjaBackend.generate_static_link_rulesY	  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   7Hc           
     >   U R                   R                  R                  R                  S5      n[         GH  nU R                   R                  R
                  U   nUR                  5        H  u  pEUS;   a  M  SR                  X@R                  U5      5      nUR                  5       nS/[        R                  UR                  S5      [        R                  5      -   SS/-   nSn	US	:  a  S
n
OS n
U R                  U5      nU R!                  [#        XgX40 UDSU
0D65        M     U R                   R$                  U   R'                  5       (       d  GM!  U(       d  GM+  SR                  U R                  U5      5      nSn	WR)                  5       n/ n0 nU R!                  [#        XlX40 UDSS 0D65        GM     U R                   R+                  5       SSU R                   R-                  5       SSS/-   nSnUS/-   nSnSnU R!                  [#        X/ UUS95        g )Nr  >   rV  rN  r  r  rX  z{}_LINKER{}r  r1  r   r  zLinking target $outr   r  r   zAIX_LINKER{}zArchiving AIX shared libraryr  symbolextractorz$IMPLIBSHSYMz$CROSSzGenerating symbol file $outr-  r.  )r   rx  r  r  r   r   r  r   rZ  rL  r6   r   get_linker_output_argsr|   r   r  r:  r   r  r  get_command_to_archive_shlibr
  r  )r   r  r  complistlangnamer  r   r   r   r]   rZ   r  r  symrulesymcmdsyndescsynstats                    rC   r9  (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<<>>88%,,T-A-A+-NO<"??Ait`G`[_`a- )0 113++- 
"/iWGLMrF   c                    U R                  U5      nUR                  5       SS/-   nSnU R                  [        X#/ U5      5        g )Nr  r   z#Compiling Java sources for $FOR_JARr  r  r:  r   r   r  r   r   r]   s        rC   generate_java_compile_rule'NinjaBackend.generate_java_compile_rule	  sD    ))(3&&(GU+;;;ir;?@rF   c                    U R                  U5      nUR                  5       nSS/nSnU R                  [        X#XE[        R
                  " 5       UR                  5       S95        g )Nr  r   zCompiling C Sharp target $out)r   r   )r  r  r:  r   r   r  r  )r   r  r   r   r   r]   s         rC   generate_cs_compile_rule%NinjaBackend.generate_cs_compile_rule	  s`    ))(3&&(5it(0(;(;(=4<4L4L4NP 	QrF   c           
         U R                  U5      nUR                  5       SS/-   nSnU R                  [        X#/ USS95        g )Nr  r   zCompiling Vala source $inr-  r.  r  r  s        rC   generate_vala_compile_rules(NinjaBackend.generate_vala_compile_rules	  sF    ))(3&&(GU+;;1ir;lSTrF   c                <   U R                  U5      nSnUR                  5       nUR                  SS5      nU(       a  SOS nUSS/-   nU[        R	                  UR                  S5      [        R                  5      -  nU R                  [        X$U-   / UUSS95        g )	NzCompiling Cython source $inr1  r   z$out.depr  r   r-  )r   r   )
r  r  r  r6   r   rv  r|   r   r:  r   )r   r  r   r]   r   depargsr   r   s           rC   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 	5rF   c                    U R                  U5      nUR                  5       SS/-   nSnSnSnU R                  [        X#/ XFUS95        g )Nr  r   zCompiling Rust source $inz
$targetdepr/  r   r   r  )r   r  r   r   r]   r   depstyles          rC   generate_rust_compile_rules(NinjaBackend.generate_rust_compile_rules	  sU    ))(3&&(GU+;;1ir;(/1 	2rF   c           
         U R                  U5      nUR                  S5      nUb  UR                  5       U-   nO1U R                  R	                  5       / SQ-   nXQR                  5       -   nUSS/-   nSnU R                  [        X&/ USS95        g )N$RUNDIR)r  
dirchangerr  r  r   zCompiling Swift source $inr-  r.  )r  get_working_directory_argsr  r   r
  r:  r   )r   r  r   wd_argsinvocfull_exer   r]   s           rC   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TrF   c                    U R                   $ )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    rC   use_dyndeps_for_fortran$NinjaBackend.use_dyndeps_for_fortran	  s     %%%rF   c                    U R                  5       (       a  / $ U Vs/ s HR  nUR                  5       (       d  M  [        S/[        R                  R                  U R                  U5      5      Q76 PMT     sn$ s  snf )NT)r  r  r   r  r  r   rp  )r   r   r  s      rC   r  #NinjaBackend.get_fortran_order_deps	  sl     ''))IQU %QUA>># HTGBGGMM$*B*B1*EFGQU % 	% %s
   A8<A8c           
         U R                  5       (       a  g SU 3n[        R                  " 5       (       a  SS/nOS/nU R                  [	        S5      5        U R                  [        X#/ SSS95        g )	NFORTRAN_DEP_HACKrL   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 hackr-  r.  )r  r   r  r5  r   r:  r   )r   crstrr   rL   s       rC   generate_fortran_dep_hack&NinjaBackend.generate_fortran_dep_hack	  sr    ''))!%)  $-C(Cl ,6 7 	8 	i2zNOrF   c                   U R                   UR                     (       a  g U R                  SUR                  5      nUR                  5       nS/[        R                  UR                  S5      [        R                  5      -   UR                  5       -   S/-   nSnU R                  U5      nU R                  [        X#XE40 UD65        SU R                   UR                  '   g )Nllvm_irr  r1  r   zCompiling LLVM IR object $inT)rQ  r  r  r  r6   r   rv  r|   r   r  r  r:  r   r   r  r   r   r   r]   r  s          rC   generate_llvm_ir_compile_rule*NinjaBackend.generate_llvm_ir_compile_rule
  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7rF   c           	        U R                  SUR                  5      n[        R                  UR	                  SS5      [
        R                  5      nUR                  5       nS/U-   [        R                  UR                  S5      [
        R                  5      -   SS/-   nSnUR                  5       S:X  a  SnS nOS	nSnU R                  U5      n	U R                  [        X$XV40 U	DXxS
.D65        g )Nr  r1  r   r  z-cmr   zCompiling to C object $inrj  r/  r  )r  r  r6   r   r  r|   r   r  rv  r}  r  r:  r   )
r   r  r   r  r   r   r]   r   r   r  s
             rC   "generate_tasking_mil_compile_rules/NinjaBackend.generate_tasking_mil_compile_rules
  s    **+@(BVBVW!&&x'G'GPZ'[]d]i]ij&&(y7"_%9%9(:R:RSY:Z\c\h\h%iimrtylzz1'')V3DGD G##H-ithGhRVhirF   c                4   U R                  SUR                  5      nUR                  5       nSS/[        R	                  UR                  S5      [        R                  5      -   SS/-   nSnU R                  U5      nU R                  [        X#XE40 UD65        g )Ntasking_mil_linkr  z
--mil-linkr1  r  r   zMIL linking object $out)r  r  r  r6   r   rv  r|   r   r  r:  r   r  s          rC   generate_tasking_mil_link_rules,NinjaBackend.generate_tasking_mil_link_rules*
  s    **+=x?S?ST&&(&)=)=h>V>VW]>^`g`l`l)mmquw|p}}/##H-itLGLMrF   c           	        US:X  a  U R                  U5        g US:X  aF  U R                  R                  R                  UR                  5      (       a  U R                  U5        g US:X  a  U R                  U5        g US:X  a  U R                  U5        g US:X  aF  U R                  R                  R                  UR                  5      (       a  U R                  U5        g US:X  a  U R                  U5        g U R                  UR                  5      nU R                  U5      nUS:X  a  U R                  U5        SUS	'   U R                  U5      nUS
:X  a5  [        R                  UR!                  SS5      ["        R$                  5      nO4[        R                  UR!                  SS5      ["        R$                  5      nUR'                  5       nS/U-   [        R                  UR)                  S5      ["        R$                  5      -   UR+                  5       -   S/-   nSUR-                  5        S3n	UR/                  5       S:X  a  Sn
S nOSn
SnU R1                  [3        XWX40 UDXS.D65        g )NrN  rV  r  r  rW  rX  re  r-  r   r  z$CUDA_ESCAPED_TARGETr   r1  r  r   z
Compiling z object $outrj  r/  r  )r  r   r  matches_build_machiner  r  r  r  r  r  rZ  r  r  r  r6   r   r  r|   r   r  rv  r  get_display_languager}  r:  r   )r   r  r  r  r  r   r  r   r   r]   r   r   s               rC   generate_compile_rule_for&NinjaBackend.generate_compile_rule_for4
  sa   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'')V3DGD Git <G <%)< 	=rF   c                0   US;  a  g U R                  U5      nUR                  SS5      nUR                  5       S:X  a  / nO3[        R	                  UR                  S5      [        R                  5      nSUR                  ;   a)  SUS   l	        UR                  5       S/-   U-   U-   S	/-   nO/UR                  5       S/-   U-   U-   UR                  5       -   S	/-   nS
nUR                  5       S:X  a  SnS n	OSnSn	U R                  [        X6/ XxU	S95        g )N>   r   r  r1  r   rj  mwccz-precompiler   r  r   zPrecompiling header $inr/  r  )r  r  r}  r6   r   rv  r|   r   r|  rW   r  r  r:  r   )
r   r  r  r   r  r  r   r]   r   r   s
             rC   generate_pch_rule_for"NinjaBackend.generate_pch_rule_forb
  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/'')V3DGD Gir;(/1 	2rF   c                4   SnXR                   ;   a  g U R                  R                  5       SS/-   n/ SQnSn[        XX45      nU R	                  U5        SnU R                  R                  5       SS/-   nSS/nSn[        XX45      nU R	                  U5        g )	Nr  r  )z$picklefiler1  r   z!Scanning target $name for modulesr  r1  r   z:Generating dynamic dependency information for target $name)r4  r   r
  r   r:  )r   r   r   r   r]   r   s         rC   r6  #NinjaBackend.generate_scanner_rules|
  s    }}$""4469%&-9D>d"""446?+,RD>drF   c                   [          H  nU R                  R                  R                  U   nUR	                  5        H  u  p4UR                  5       S:X  a  U R                  U5        UR                  5       S:X  a  U R                  U5        U R                  X45        U R                  X45        UR                  5        H  nU R                  X55        M     M     M     g )Nr  r  )r   r   rx  r   r  r  r  r   r	  r  	get_modes)r   r  clistr  r  r^  s         rC   r7  #NinjaBackend.generate_compile_rules
  s    (K$$--77DE&+kkm"??$/66x@??$	1;;HE..xB**8>$..0D228B 1 '4 )rF   c                    UR                  5        HE  n[        U[        R                  [        R                  45      (       a  M4  U R                  X!5        MG     g r   )r  r   r   r  r  r  )r   r  r  s      rC   rh  *NinjaBackend.generate_generator_list_rules
  sF     335G'E$6$68O8O#PQQ,,W= 6rF   c                J   U(       a+  [         R                  R                  U R                  U5      nOU R	                  U5      nU R                  U5      nU Vs/ s H/  nUR                  SU R                  5      R                  SU5      PM1     nnU Vs/ s H  ofR                  SU5      PM     nnU Vs/ s H/  nUR                  SU R                  5      R                  SS5      PM1     nnU Vs/ s H  ofR                  SS5      PM     nnU$ s  snf s  snf s  snf s  snf )	Nz@SOURCE_DIR@z@BUILD_DIR@z@CURRENT_SOURCE_DIR@z@SOURCE_ROOT@z@BUILD_ROOT@r\  r<   r  )r  r  r   r  get_target_source_dirr  rT   )r   r  r   override_subdirsource_target_dirreloutr   s          rC   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   6DD66D2D c           	     .   UR                    H5  n[        U[        R                  5      (       d  M$  U R	                  X25        M7     UR                  5       nUR                  nUR                  5       nUR                  5       nU R                  U5      nU GHh  n	U	R                  U R                  U R                  U5      5      n
UR                  U
5      nUR                  U	5      nU Vs/ s H2  n[        R                   R#                  U R                  U5      U5      PM4     nn[%        UR&                  5      S:X  a  US   nOU	 nUR(                  c  SnUnOcSnUR+                  U
5      n[        R                   R#                  U R                  U5      U5      nU Vs/ s H  o3R-                  SU5      PM     nnU Vs/ s H%  nUR-                  SU
5      R-                  SU5      PM'     nnU R/                  UU R                  U5      U5      nU R1                  UUUS9nU R3                  UU R5                  UU5      UR6                  (       a  US   OS UR8                  S	9u  nn[        R                   R#                  U R:                  R=                  5       U R?                  U5      5      n[        R@                  " US
S9  [C        U RD                  UUU
5      nURG                  UR                    Vs/ s H  o0RI                  U5      PM     sn5        UR(                  b  URK                  SW5        [%        U5      S:  a  URG                  U5        [%        UR&                  5      S:X  a  U< nOSU< 3nU(       a  SU S3nURK                  SSU U 35        [        U[        RL                  5      (       a   URG                  U RI                  U5      5        URK                  SU5        U RO                  U5        GMk     g s  snf s  snf s  snf s  snf )Nr   r   r  r  z	@DEPFILE@z@INPUT@z@OUTPUT@)r  )r  r  TrT  r  zfrom r  r  rY   zGenerating r  )(dependsr   r   r(   r  get_generatorr  get_exe
get_inputsr  r  r  r  get_arglistget_outputs_forr  r  r   r?   r  r   r  rT   replace_outputsr  r  replace_extra_argsr  r  r   r  r  r`  r   r   r  rp  r
  r  r\  )r   r  r  r   	generatorr  exe
infilelistextra_dependenciescurfile
infilename	base_argsr   ofoutfilesprivsole_outputr   r   depfilenamer   r  r  r  r`  whats                            rC   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\SdSd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   *9PP ,P3P
c                   U R                  5       (       a  gSnU R                  R                  R                  R                  R                  5        H  u  p4US:X  d  M  Un  O   Uc  0 U R                  UR                  5       '   g[        R                  " [        [        R                  5      n[        R                  " [        [        R                  5      n0 n0 nUR                  5        GH^  n	UR                  U	5      (       d  M  U	R                  U R                  R!                  5       U R                  R#                  5       5      n
[%        U
SSS9 nU H  nUR'                  U5      nUbA  UR)                  S5      R+                  5       nX;   a  [-        SU SX~    S	U	 S
35      eXU'   MX  UR'                  U5      nUc  Mn  UR)                  S5      R+                  5       R/                  S5      nUS   S-   UR)                  S5      R+                  5       -   nUU;   a  [-        SU SUU    S	U	 S
35      eXU'   M     SSS5        GMa     0 UEUEU R                  UR                  5       '   g! , (       d  f       GM  = f)zF
Find all module and submodule made available in a Fortran code file.
Nre  asciiignoreri  errorsr   zNamespace collision: module z defined in two files r  r\  rc   r   r  r   zNamespace collision: submodule )r  r   rx  r   ry  r  rM  r  rH   r  FORTRAN_MODULE_PAT
IGNORECASEFORTRAN_SUBMOD_PATr  r  r4  r  r  rr  r   r@   r$  r)   r   )r   r  r  r)  r   modresubmodremodule_filessubmodule_filesrW   r  r  r   modmatchmodnamesubmodmatchparents
submodnames                     rC   ro  (NinjaBackend.scan_fortran_module_outputs
  sw    ''))''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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Bs   A-I0A<I00
J 	c                    U R                  5       (       a  / $ [        U R                  U5      5      nU R                  UR	                  5          n[        U R
                  5      n[        X&XEU5      nU$ )z:
Find all module and submodule needed by a Fortran target
)r  r   r  rM  r  r5  _scan_fortran_file_deps)r   r  r  r  rY  tdepssrcdir	mod_filess           rC   get_fortran_depsNinjaBackend.get_fortran_deps'  sh     ''))It226:;!!&"5"5"78doo&+CR	rF   c                    [        US5      (       aA  UR                  U R                  R                  UR                     ;   a  UR                  5       $ / $ )Nr{  )r  r{  r   stdlibsr  get_no_stdlib_link_args)r   r  rK  s      rC   rO  $NinjaBackend.get_no_stdlib_link_args5  sD    6:&&6??djj>P>PQWQcQc>d+d1133	rF   c                    UR                  5       (       a9  U R                  U5      nU(       d  U R                  U5      nUR                  USS9$ UR                  USS9$ )NT)pchF)r~  get_target_debug_filename_absrM  get_compile_debugfile_args)r   r  r  objfile	tfilenames        rC   rT  'NinjaBackend.get_compile_debugfile_args:  sa    b >>::6BI 88@	66yd6KK66wE6JJrF   c                V    U R                  U5      nU(       a  UR                  U5      $ g r   )get_target_debug_filenameget_link_debugfile_namer   rK  r  r  s       rC   rZ  $NinjaBackend.get_link_debugfile_names  s)    11&911(;;rF   c                X    U R                  U5      nU(       a  UR                  U5      $ / $ r   )rY  get_link_debugfile_argsr[  s       rC   r^  $NinjaBackend.get_link_debugfile_argsy  s+    11&911(;;	rF   c                   [        UR                  R                  5       U5      nUR                  5       nU[        R                  " XU R
                  5      -  n[        U[        5      (       aS  UR                  (       a5  [        R                  R                  UR                  UR                  5      nOSUR                  nOF[        R                  R                  U5      (       a   [        R                  R                  U5      nOUnU R!                  U5      n[        R                  R                  U R#                  U5      U5      nUSU R
                  R$                  UR&                     R)                  5       -   -  nX@R+                  X1U5      -  n[        U[        5      (       a:  UR                  (       a  UR                  nO+UR-                  U R.                  5      nO[1        SU< 35      eU R3                  SUR&                  5      n	[5        U R6                  XyU5      n
U
R9                  SU5        U R;                  U
5        Xx4$ )Nr\  Invalid source type: r  rR  )r#   r   rz  rL  r  r   r   r   r  r  r  r   r  r   isabsrm  canonicalize_filenamer  r  r  get_object_suffixrT  r  r  r)   r  r   r   r
  r\  )r   r  r  r  ri  src_filenameobj_basenamer  r  rU  r  s              rC   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!!rF   )maxsizec                "   US;  a=  [         R                  R                  [         R                  R                  X25      5      nOUn[         R                  R                  [         R                  R                  U R                  U5      5      nUR                  Xd5      n[         R                  R                  [         R                  R                  U R                  R                  5       U5      5      (       a  UR                  XT5      nXx4$ / nXx4$ )Nr}  )	r  r  r6  r   r  r  isdirr   r  )	r   r  rC  r  r]  r  r  r  bargss	            rC   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~rF   c                N    U R                  X5      nX0R                  X5      -  nU$ r   )"_generate_single_compile_base_args$_generate_single_compile_target_argsr   r  r  ri  s       rC   _generate_single_compile%NinjaBackend._generate_single_compile  s*    ::6L==fOOrF   c                    UR                  5       nX2R                  UR                  5      -  nU[        R                  " UX R
                  5      -  nU$ r   )rL  gnu_symbol_visibility_argsgnu_symbol_visibilityr   r  r   rq  s       rC   ro  /NinjaBackend._generate_single_compile_base_args  sV     ))+778T8TUU 	I33F4<>N>NP 	PrF   c                j   U R                  X5      nUR                  (       a  X0R                  X5      -  n[        UR	                  5       5       H  nUR                  5       n[        UR                  5       5       H)  nU R                  X&XTR                  5      u  pxX7-  nX8-  nM+     UR                  5        H   nX2R                  XdR                  5      -  nM"     M     X0R                  UR                  UR                  5       5      5      -  nUR                  S:X  a(  X2R                  UR                   U R"                  5      -  nUR                  (       a  X0R%                  X5      -  nUR                  (       a  X0R'                  X5      -  nX2R                  U R)                  U5      S5      -  nU$ )NrC  F)ru  implicit_include_directories"get_custom_target_dir_include_argsr  r  r  r  rl  r]  get_extra_build_dirsr  escape_extra_argsr  r@  r{  get_feature_args
d_featuresr  get_source_dir_include_argsget_build_dir_include_argsr  )	r   r  r  ri  r   r  rC  compile_objincludeargss	            rC   rp  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rF   c                   0 nU R                  U5      nUR                  R                  5        H  nUR                  U   nU R                  X5      nU(       a#  SUR                  ;  a  X`R                  XQ5      -  nX`R                  X5      -  nU(       a#  SUR                  ;   a  X`R                  XQ5      -  nUR                  R                  U5      nUR                  5       X$'   M     U$ )Nmw)
r}  r   rr  ro  r|  get_pch_include_argsrp  r  rL  r  )r   r  src_type_to_argsr  src_type_strr  ri  s          rC   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$  rF   c           	     j   Ub  UO/ nUb  UO/ n[        U[        5      (       a%  UR                  S5      (       a  [        SU< 35      e[	        UR
                  R                  5       U5      nU R                  X5      n	U R                  U5      n
U
(       a#  SUR                  ;  a  XR                  X5      -  n	XR                  X5      -  n	U
(       a#  SUR                  ;   a  XR                  X5      -  n	U	R                  R                  U	5      n	USL a  U R                  XX// U5        OU R                  XU	/ U/U5        U R                  R!                  5       n[        U["        5      (       az  UR%                  U R&                  5      n[(        R*                  R-                  U5      (       a:  UR.                  (       a)  UR1                  U5      (       d   eU[3        U5      S-   S nO%U(       a  [        SU< 35      e[5        SU< 35      eU R7                  XU5      n[(        R*                  R9                  U R;                  U5      U5      nUR=                  U5      nXR?                  XU5      -  n	U R                  U5      (       a  URA                  URB                  5      nO/ nU(       d  / nOiUR                  S	:X  a  / nOV/ n[(        R*                  R9                  U R;                  U5      URE                  US
   5      5      nURG                  U5        UnURI                  5       S:X  a  U RK                  U[M        SURN                  URP                  S95      n[        U[R        RT                  5      (       a  URV                  (       d  U(       aG  URY                  SS5      S   [
        RZ                  S   ;   a  U R]                  SURN                  5      nO#U R_                  U5      nOU R_                  U5      n/ nURa                  5       S:X  Ga$  U(       d$  [c        U5      U-  nUU Re                  UUU5      -  nU Rg                  5       (       d  U Rh                  URk                  5          Rm                  5        H  u  nn[(        R*                  R9                  U R;                  U5      URo                  U5      5      nUU:X  d  ML  U Rq                  URN                  5      n[s        U Rt                  USU-   U5      nU Rw                  U5        M     XRy                  U R;                  U5      5      -  n	Ub  U	R{                  U5        [s        U Rt                  UUU5      nU R}                  UUU5        U H  nUR                  U5        M     U H  n[        U["        5      (       a  UR%                  U R&                  5      nOEU R                  U5      (       d/  [(        R*                  R9                  U R;                  U5      U5      nUR                  U5        M     UR                  U5        U Rg                  5       (       d)  U R                  X5       H  nUR                  U5        M     U(       a  UR                  SU5        URa                  5       S:X  a  SS jnUR                  SU" U5      5        UR                  SU	5        U R                  XUU5        U Rw                  U5        [        U[        5      (       d   e[        U[        5      (       d   eXR                  SS5      4$ )z5
Compiles C/C++, ObjC/ObjC++, Fortran, and D sources
Nz.hz(BUG: sources should not contain headers r  Fr   z/BUG: broken generated source file handling for ra  intelr   r  b_ltor  r\  r   r  re  r  r  r  c                    Sn[        U 5       HR  u  p#US;   a,  [        US-
  SS5       H  nX   S:X  a  US-  nM    O   US-  nOUS:X  a  US-  nOUS:X  a  US-  nX-  nMT     U$ )Nr   >   	ra   r   r   r<   rb   #)	enumeraterange)
targetNamer  r   r   js        rC   quote_make_target?NinjaBackend.generate_single_compile.<locals>.quote_make_target  s    '
3FQK'!&q1ub"!5A)}4 &$ %	 "6 $c#c$KF 4 rF   CUDA_ESCAPED_TARGETrR  r<   r  )r  rn   r   rn   )Fr   rn   rV  r[  r#   r   rz  ro  r}  r|  r  rp  r  rL  rH  r   r  r   r  r  r  r  rb  r  r   r?   r)   object_filename_from_sourcer   r  depfile_for_objectrT  get_pchr{  get_pch_namer	  r  r  r&   r  r  r   r  r  rsplitr~  r  r  r@  r   rK  r  rM  r  r  module_name_to_filenamerZ  r   r   r\  get_module_outdir_argsr  add_header_depsr  has_dir_partr  get_fortran_module_depsr
  )add_dependency_scanner_entries_to_elementrT   ) r   r  r  is_generatedr  r[  r  r2  r  ri  r  r  r  rf  r  dep_filepchlistpch_deparrr   
target_ltorU  
extra_depsr  rA  srcfilemodfiler  depelemr  rC  r  s                                    rC   r|  $NinjaBackend.generate_single_compile  sc    &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 ''nnX%6%67G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!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4rF   c                   U R                  U5      (       d  g [        U[        R                  5      (       a  g [        R
                  R                  UR                  5      S   SS  nUS:w  a  UR                  5       nU[        R                  S   ;   d  U[        R                  S   ;   d  g U R                  U5      S   nUR                  SU5        UR                  U5        g )Nr   r  re  r  r[   )r  r   r   r
  r  r  r#  r   r$  r   r~  r  r
  r  )r   r  r  r  r  	extensiondep_scan_files          rC   r  6NinjaBackend.add_dependency_scanner_entries_to_element  s    11&99fe1122GG$$SYY/2126	!)IY44Y??9PYPgPghmPnCn226:1==1]+rF   c                    U R                  U5      n[        R                  R                  US5      [        R                  R                  US5      4$ )Nzdepscan.jsonz
depscan.dd)r  r  r  r   )r   r  privs      rC   r  "NinjaBackend.get_dep_scan_file_for  s;    **62ww||D.1277<<l3SSSrF   c                $   U H  n[        U[        5      (       a  UR                  U R                  5      nOEU R	                  U5      (       d/  [
        R                  R                  U R                  U5      U5      nUR                  U5        M     g r   )
r   r   r  r  r  r  r  r   r  r  )r   r  ninja_elementr  rC  s        rC   r  NinjaBackend.add_header_deps  sm    A!T""%%d&7&78&&q))GGLL!<!<V!DaH&&q) rF   c                `    [        U[        5      (       a  UR                  S:g  $ [        U5      $ r   )r   r   r  r$   )r   r   s     rC   r  NinjaBackend.has_dir_part  s)    eT""<<2%%E""rF   c                H   UR                   S:w  d  U R                  5       (       a  / $ [        R                  " UR                  UR
                  5       Vs/ s H@  n[        R                  R                  U R                  U5      UR                  5       5      PMB     sn$ s  snf )Nre  )r{  r  r  r  r  r  r  r  r   r  rS  )r   r  r  lts       rC   r  $NinjaBackend.get_fortran_module_deps  s     	)T-I-I-K-KI  oof&9&96;T;TU
U GGLL,,R0"//2CDU
 	
 
s   ABc                   US   nUR                  U5      n[        R                  R                  U R	                  U5      U5      n/ nXpR                  X5      -  n[        U5      S:X  a  U R                  XR                  5       US   5      n[        R                  R                  [        R                  R                  U R                  UR                  5       U5      5      n	XrR                  U	S5      -  nO<[        R                  R                  U R                  UR                  5       US   5      n[        R                  R                  U5      n
UR                  XU5      u  pX|-  nXpR                  X5      -  nXpR!                  X!U5      -  nUS-   UR#                  5       -   nUR%                  5       (       a  U/O/ nX}XnU4$ )Nr   r   Fr\  )r  r  r  r   r  ru  r?   create_msvc_pch_implementationr@  rY  r  get_source_subdirr  rm  gen_pch_argsrr  rT  get_depfile_suffixshould_link_pch_object)r   r  r  rR  headerpchnamedstri  r'  pch_header_dir	just_nameobjnamepch_argsr   link_objectss                  rC   generate_msvc_pch_command&NinjaBackend.generate_msvc_pch_command  s   Q''/ggll466v>H55fGGs8q=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7rF   c                x   U R                  X5      nUR                  S5      S   S:X  a  UR                  S:X  a  USS/-  n[        R                  R                  U R                  U5      [        R                  R                  U5      S-   UR                  5       -   5      nUS-   UR                  5       -   nXFU/ 4$ )Nr\  r   hr  r  z
c++-header)
rr  r   r{  r  r  r   r  rm  get_pch_suffixr  r   r  r  rR  ri  r  r   s          rC   generate_gcc_pch_command%NinjaBackend.generate_gcc_pch_command  s    00B99S>"$):):e)C |,,Hggll466v>77++C0369P9P9RRTCi(5577c2%%rF   c                Z   U R                  X5      n[        R                  R                  U R	                  U5      [        R                  R                  U5      S-   UR                  5       -   5      n[        R                  R                  U5      S   S-   UR                  5       -   nXFU/ 4$ )Nr\  r   )	rr  r  r  r   r  rm  r  r#  r  r  s          rC   generate_mwcc_pch_command&NinjaBackend.generate_mwcc_pch_command  s    00Bggll466v>77++C0369P9P9RRTggs#A&,x/J/J/LLc2%%rF   c                   Ub  UO/ n/ nS GH^  nUR                  U5      nU(       d  M  [        US   5      (       a  [        US   5      (       d   SUR                  5       < S3n[        U5      eUR                  U   nUR                  5       S:X  aS  U R                  XU5      u  ppn[        R                  R                  U R                  UR                  5       US   5      nOUR                  S:X  a  M  SUR                  ;   aW  [        R                  R                  U R                  UR                  5       US   5      nU R                  XUS   5      u  ppS nOV[        R                  R                  U R                  UR                  5       US   5      nU R                  XUS   5      u  ppS nX;-  nU R                  U5      n[!        U R"                  X/-   X5      nUb  UR%                  U5        U R'                  XU5        UR)                  S	U5        UR)                  S
U	5        U R+                  U5        U R,                  UR                     R/                  X/-   5        GMa     U$ )N)r   r  r   r   zPrecompiled header of zN must not be in the same directory as source, please put it in a subdirectory.rj  r  r  rR  r  )r  r$   r  r)   r   r}  r  r  r  r   r  r  r|  r  r  r  r   r   r  r  r
  r\  rN  r   )r   r  r  r  r)  rR  r  r  ri  r   r  objsr  extradepr   r`  s                   rC   r  NinjaBackend.generate_pch  s=   %0%<k" D..&CA''|CG/D/D.v/B/B/D.G HN N&s++!'!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\:A !B rF   c                    U R                  U5      n[        R                  R                  X!R	                  5       S-   5      $ )Nz.symbols)r  r  r  r   rS  )r   r  	targetdirs      rC   get_target_shsym_filename&NinjaBackend.get_target_shsym_filename<  s3    //7	ww||I':':'<z'IJJrF   c                t   U R                  U5      n[        U[        R                  5      (       a  UR                  (       a  U R
                  R                  UR                     R                  5       (       a  UR                  5       u  p4UR                  UR                  5       S   5      UR                  5       S'   UR                  5       S   n[        R                  R                  U R                  U5      U5      nU R!                  U5      n[#        U R$                  USU5      nUR'                  SU R)                  U5      5        U R
                  R+                  5       (       a@  UR'                  SSU R
                  R                  UR                     R,                  -   5        U R/                  U5        g )Nr   r  IMPLIBCROSSz--cross-host=)rp  r   r   r  r  r   r  r  r  $get_clink_dynamic_linker_and_stdlibsr  r  r  r  r   r  r  r   r   r
  r6  is_cross_buildsystemr\  )r   r  target_filerK  r^  symnamer`  s          rC   rO  NinjaBackend.generate_shsymA  sS   ..v6fe1122v7L7L((););<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rF   c                t    [         R                  R                  U R                  U5      UR                  5      $ r   )r  r  r   r  import_filenamerh  s     rC   get_import_filename NinjaBackend.get_import_filenameQ  s(    ww||D//79O9OPPrF   c           	     2   / n[        U[        R                  5      (       a  X2R                  5       -  nUR                  (       a  X2R                  U R                  5      -  nUR                  (       a"  X2R                  U R                  U5      5      -  nUR                  (       a  X2R                  5       -  nUR                  (       aG  [        US5      (       a6  X2R                  UR                  R                  U R                   5      5      -  nU$ [        U[        R"                  5      (       Gah  [        U[        R$                  5      (       a  X2R'                  U5      -  nOX2R)                  5       -  nX2R+                  5       -  n[        U[        R$                  5      (       a  UR,                  (       aT  X2R/                  U R                  UR0                  UR2                  UR4                  UR6                  UR8                  5      -  nUR                  (       aG  [        US5      (       a6  X2R                  UR                  R                  U R                   5      5      -  nUR                  (       a"  X2R                  U R                  U5      5      -  nU$ [        U[        R:                  5      (       aU  U R<                  UR>                     =(       a    URA                  5       (       + nX2RC                  U R                  U5      -  nU$ [E        S5      e)Ngen_vs_module_defs_argszUnknown build target type.)#r   r   r  r  export_dynamicgen_export_dynamic_link_argsr   r  gen_import_library_argsr  pieget_pie_link_argsvs_module_defsr  r  r  r  r  SharedModuleget_std_shared_module_link_argsget_std_shared_lib_link_argsget_pic_argsforce_sonameget_soname_argsprefixr   r(  	soversiondarwin_versionsr  rV  r  should_installget_std_link_argsrI  )r   r  rK  ri  produce_thin_archives        rC   get_target_type_link_args&NinjaBackend.get_target_type_link_argsT  so   fe..//4466H$$??@P@PQQ%%::4;S;STZ;[\\zz4466$$9R)S)S::6;P;P;`;`aearar;stt0 /  3 344&%"4"455BB6JJ??AA++--Hfe&8&899V=P=P22$$fmmV[[&--$$f&<&<> > $$9R)S)S::6;P;P;`;`aearar;stt%%::4;S;STZ;[\\   3 344#'#;#;F<N<N#O#oX^XmXmXoTo 001A1ACWXXH  ;<<rF   c                   / n[        U[        R                  5      (       aj  U R                  R                  UR
                     nUR                  5       (       d  UR                  5       (       a  X2R                  UR                  5      -  nU$ r   )
r   r   r  r   r  r  r  	is_cygwinget_win_subsystem_argswin_subsystem)r   r  rK  ri  rB   s        rC   +get_target_type_link_args_post_dependencies8NinjaBackend.get_target_type_link_args_post_dependencies|  sk    fe..//   ))&*<*<=A||~~99&:N:NOOrF   c                   SnUR                   S:X  a(  [        R                  " UR                  S5      (       a  SnU(       a^  / nUR                   HJ  nUR                  S5      nX@R                  U5      -  nUR                  U R                  U5      S   5        ML     U$ U R                  XR                  5      nU(       a  UR                  U5      $ / $ )NFrj  z<19.00.23918Tr   )r|  r   r  r  r  extract_all_objectsdetermine_ext_objsr  r  build_target_link_argumentsr8  )r   rK  r  
use_customobjects_from_static_libsr   r   target_argss           rC   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PrF   c                    SSK Jn  U HP  nU HG  nUR                  XvU5      nU(       d  M  UR                  U R                  U5      nU(       d  MC  Us  s  $    MR     g )Nr   )	CCompiler)compilers.cr  _get_trials_from_pattern_get_file_from_listr   )	r   rK  r  search_dirspatternsr  rC  r  trials	            rC   guess_library_absolute_path(NinjaBackend.guess_library_absolute_path  sT    +A!::1I!55d6F6FN  rF   c                   [        5       n[        5       n/ nU R                  R                  5       n[        UR	                  U5      5      n	U	 GHz  n
X;   a  U
R                  S5      (       d  M!  U
R                  S5      (       aw  [        U
5      S:  a  U
SS  nO [        U	5      n[        R                  R                  U5      (       d  [        R                  R                  X5      nUR                  U5        M  U
R                  S5      (       a4  [        U
5      S:  a  U
SS  nO [        U	5      nUR                  U5        M  [        R                  R                  U
5      (       d  GM  U R                  R!                  U
5      (       d  GMB  [        R                  R#                  U
5      (       d  GMi  UR%                  U
5        GM}     / n UR'                  U R                  [(        R*                  SS9nUR'                  U R                  [(        R,                  SS9n[/        U5      [/        UR1                  U R                  5      5      -   nU H  nU R3                  UUX^5      nU R3                  UUX_5      nU(       a-  UR%                  UR5                  5       R7                  5       5        U(       d  Mf  UR%                  UR5                  5       R7                  5       5        M     X-   $ ! [         a    [        R                  " S5           GMG  f = f! [         a    [        R                  " S5           GMp  f = f! [8        R:                  [<        4 a  nS	[?        U5      ;  a  e  S nAX-   $ S nAff = f)
Nr  r#  r   z?Generated linker command has -L argument without following pathr  zIGenerated linker command has '-l' argument without following library nameT)strictget_library_naming) r   r   r  r  native_args_to_unixr   r?   r  StopIterationr   r  r  r  rb  r   r   rx  isfiler	  r  r   STATICSHAREDrA  get_library_dirsr  resolver  r   r   r2  rn   )r   rK  r  ri  internalr  libsabsolute_libsr  ititemr  r&  guessed_dependenciesstatic_patternsshared_patternsr  
staticlibs
sharedlibsr!  s                       rC    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=qr(C"2h t$$)9)9)D)DT)J)Jrww~~^bOcOc$$T*7 :  "	$778H8H'..ae7fO$778H8H'..ae7fO,uV5L5LTM]M]5^/__K "==fg>I\
!==fg>I\
(//
0B0B0D0M0M0OP:(//
0B0B0D0M0M0OP   $33Q ) %fg ) %pq0 ''8 	#3q61 2 $33		sC   K.'LC&M  91M  . LL L=<L= M7M22M7c                   [        U[        R                  5      (       d   e[        R                  R                  U R                  U5      UR                  S-   5      n[        U R                  U/SU5      nUR                  5       nUR                  S S  nUR                  X25      u  p'Xg-  nUR                  5       (       aQ  U R                  X5      nXR                  X5      -  nUR                   R#                  U5      nXhR%                  5       -  nU R'                  X5      nUR)                  SU5        UR)                  SSU 35        U R+                  U5        U$ )Nz
-prelink.or  r  r]   zPrelinking )r   r   r  r  r  r   r  r   r   r   get_prelinkerexelistget_prelink_argsget_prelink_append_compile_argsro  rp  r  rL  r  r  r
  r\  )	r   r  r  prelink_namer`  	prelinkerrL   r   ra  s	            rC   r  NinjaBackend.generate_prelink  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rF   c                   [        UR                  5      (       aW  [        R                  R	                  [        R                  R                  UR                  5      U R                  U5      5      nOU R                  U5      nUR                  U R                  U R                  R                  5       UU5      u  oAl
        U$ r   )r$   r   r  r  r   rY  r  build_rpath_argsr   r  rpath_dirs_to_remove)r   r  rK  target_slashname_workaround_dir
rpath_argss        rC   r;  !NinjaBackend.get_build_rpath_args  s    $$ /1ggll277??6;;;W;?;N;Nv;V/X+ /3.A.A&.I+##D$4$4$($4$4$B$B$D$C$*, 	20
 rF   c                   Ub  UO/ nUb  UO/ n/ n[        U[        R                  5      (       a  SnOUR                  5       n[        U[        R                  5      (       a  U R                  U5        U R                  UR                  5      n	US-   U	-   n
UR                  5       n[        U[        R                  5      (       a  XR                  XU R                  5      -  nO%U[        R                  " UUU R                  5      -  nXR                  X5      -  nXR                  5       -  nXR                  U R                  US5      5      -  nU R                  US5      (       a,  XR!                  XA5      -  nU R#                  XA5      nUb  X|/-  nXR%                  X5      -  n[        U[        R                  5      (       d  XR'                  XA5      -  n[        U[        R                  5      (       d  XR                  R)                  XAR*                  UR                  5      -  nXR                  R-                  XAR                  5      -  nXR                  R.                  R1                  UR                  UR                  5       5      -  nXR3                  X5      -  nUS:X  a  / nOUR5                  5       nU R7                  XM5      nX-  n[        U[        R                  5      (       d  XR9                  U5      -  nUR;                  5        H#  nUR=                  UR?                  U5      5        M%     UR5                  5        H  n[        U[        R                  5      (       d  M$  UR;                  5        H`  nUR?                  U5      nUR@                  S:X  a+  URC                  5       S:w  a  SSK"J#n  URI                  U5      nUR=                  U5        Mb     M     XRK                  X5      -  n[        U[L        5      (       a  XRO                  XR                  5      -  n/ nURQ                  U RS                  XAX5      5        U RU                  U5      nX-  nUU-  nX-  nURQ                  U Vs/ s H  nU RW                  U5      PM     sn5        URQ                  URX                   Vs/ s H  nU RW                  U5      PM     sn5        [[        U R\                  X*X7S	9nUR_                  UU-   5        URa                  5       S
:X  a  [c        UU-    Vs/ s H  nURe                  S5      (       d  M  UPM     sn5      S:  aO  U R                  U[g        SUR*                  UR                  5      5      (       d  [i        SUR@                   S35      eURa                  5       S;   a  / n[j         Hs  nU R                  R.                  R                  U   nURm                  5        H9  u  nnUS;   d  M  URa                  5       S;   d  M$  UU Ro                  UU5      -  nM;     Mu     URq                  SU5        URq                  SU5        U Rs                  XU5        U$ s  snf s  snf s  snf )Nr  _LINKERr  r  _rust_native_static_libsrj  r   )VisualStudioLikeLinker)r   r  z.mar   r  z Tried to link the target named 'zY' with a MIL archive without LTO enabled! This causes the compiler to ignore the archive.>   tic2000c6000>   r   r  rR  	LINK_ARGS):r   r   r  r@  r  rO  rZ  r  rL  get_base_link_argsr   r   rO  r  get_optimization_link_argsr  r^  rZ  r  r  r  r  r  rx  get_external_link_argsr;  r  r	  get_target_link_argsrx  extend_preserving_lflagsget_dependency_link_argsr   r}  linkers.linkersr@  r  r  r   get_option_link_argsr  r-  $get_custom_target_provided_librariesr4  link_dependsr   r   r  r  r?   rV  r&   r   r   r  ru  r
  rQ  )r   r  r  r  rK  r  r^  r   linker_baser  linker_ruleri  	debugfiledependenciesr#  r   rC  r  r@  dep_targetscustom_target_librariesr  r`  r   ra  r  r  r  r  s                                rC   r  NinjaBackend.generate_link  s   #-#9Zr
%0%<k"fe1122"K --/Kfe1122'$$V%7%78!I-5 '') fe112211&$BRBRSSH	44V5;595E5EG GH 	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3FI&%"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<L<LMMH4@@QYde #'"K"KF"S++\R\D88;\RS%+%8%8:%8 !88;%8: 	; !1!17o[#::;==?i'{-DDZD!

SXHYA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   <Y+7Y0"Y5 Y5c                   [        U[        R                  5      (       a  U R                  U5      $ [        U[        R
                  5      (       ac  UR                  (       a  UR                  5       $ UR                  U R                  R                  5       U R                  R                  5       5      $ U R                  U5      $ r   )r   r   r  r  r   r   r  relative_namer4  r   r  r  rp  )r   r  s     rC   r4  $NinjaBackend.get_dependency_filename  s    a,,--11!448==))zz((t'7'7'F'F'H'+'7'7'E'E'GI I''**rF   c                ,   UR                  5        H  u  p4n[        R                  R                  X#5      n[        R                  R                  U R                  R                  5       X#5      n [        R                  " U5         [        R                  " XG5        U R                  R                  U5        M     g ! [         a     NCf = f! [         a    [        R                  " S5         M  [         a    [        R                  " S5         GM  f = f)Nz?Library versioning disabled because symlinks are not supported.zOLibrary versioning disabled because we do not have symlink creation privileges.)get_aliasesr  r  r   r   r  remover  symlinkrS  r	  NotImplementedErrorr   r  OSError)r   r  outdiraliastotag	aliasfileabs_aliasfiles           rC   rg  #NinjaBackend.generate_shlib_aliases  s    $002NEsV3IGGLL)9)9)G)G)I6YM		-(;

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

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

lmmns*   /B<C<
C	C	 D/DDc                    U R                  SSS5      n[        U R                  R                  5       U5      n[        R
                  R                  U R                  R                  5       S5      nUR                  SU R                  R                  5       SSU/-   5        UR                  SS	5        U R                  U5        [        US
5       n[        R                  " X55        S S S 5        g! , (       d  f       g= f)Nzclean-ctlistr  r  zcleantrees.datr  r  
cleantreesr]   z"Cleaning custom target directoriesr  )ra  r'   r   r  r  r  r   r  r
  r
  r\  rr  r  r  )r   treesr!  rC  d_fileofiles         rC   generate_custom_target_clean)NinjaBackend.generate_custom_target_clean  s    $$^5EwOt''557?d..>>@BRS	

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

="FGq&$5KK!    s   C//
C=c                   U R                  SSS5      nUR                  S[        R                  " 5       / SQ-   5        UR                  SS5        U R	                  U5        U R                  SSS5      nUR                  S[        R                  " 5       / S	Q-   5        UR                  SS
5        U R	                  U5        g )N
clean-gcnor  r  r  )r  delwithsuffixr\  gcnor]   zDeleting gcno files
clean-gcda)r  ro  r\  gcdazDeleting gcda files)ra  r
  r   r  r\  )r   	gcno_elem	gcda_elems      rC   generate_gcov_clean NinjaBackend.generate_gcov_clean  s    ,,\;KWU	9h&@&@&BEq&qr=*?@y!,,\;KWU	9h&@&@&BEq&qr=*?@y!rF   c                   U(       a  / $ / nU R                   R                  R                  R                  5        H  u  p4U R                   R                  R                  R	                  U5      (       d  M;  UR                  S[        U5      -   S-   [        UR                  [        5      (       a  UR                  O"[        UR                  5      R                  5       -   5        M     [        U5      $ )Nz-Dr  )r   rx  r  r  is_project_optionr	  rn   r   valuer$  r  )r   shut_up_pylintcmdskvs        rC   get_user_option_args!NinjaBackend.get_user_option_args  s    I$$--66<<>DA((11CCAFFD3q6MC/jRU>V>V177\_`a`g`g\h\n\n\pqr ? d|rF   c                    U R                  SSS5      nUR                  SS5        UR                  SU R                  R                  5       S/-   5        UR                  SS5        U R	                  U5        g )	Ndistr  r  rY   zCreating source packagesr  rZ   r  )ra  r
  r   r
  r\  r  s     rC   r  NinjaBackend.generate_dist  sd    ''0@'Jf89i!1!1!C!C!E!PQfi(trF   c                .   SU R                   ;   d  U R                  S5      (       d  g U R                  R                  5       SSU R                  R                  /-   nU R                  SSS5      nUR                  SU5        UR                  SS5        U R                  R                  5        H0  nUR                  S	;   d  M  UR                  UR                  5        M2     UR                  [        U R                  5      5        U R                  U5        g )
Nclippyr  r  r  r  r  rZ   r  >   rlibr  r,  r   have_languager   r
  r  ra  r
  rR  rz  r9  r  r:  r   rO  r\  r   rL   r`  r.  s       rC   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rF   c                .   SU R                   ;   d  U R                  S5      (       d  g U R                  R                  5       SSU R                  R                  /-   nU R                  SSS5      nUR                  SU5        UR                  SS5        U R                  R                  5        H0  nUR                  S	;   d  M  UR                  UR                  5        M2     UR                  [        U R                  5      5        U R                  U5        g )
NrV  r  r  r  r  r  rZ   r  >   r  r  r,  r  r  s       rC   generate_rustdocNinjaBackend.generate_rustdoc  s    (((0B0B60J0J0029d&6&6&@&@AB''	3CWMi%fi(%%,,.E#BBU../ / 	T$5567trF   c                   [         R                  " 5       (       d  g SU R                  ;   a  g U R                   R                  5       SSU R                   R                  U R                   R
                  U R                  R                  5       /-   U R                   R                  5       -   S/-   U R                  5       -   nU R                  SSS5      nUR                  SU5        UR                  SS	5        U R                  U5        g )
Nz
scan-buildr  	scanbuildsetupr  r  r  rZ   r  )r   detect_scanbuildr   r
  r5  r  r   r  r~  ra  r
  r\  r*  s      rC   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rF   c                   SU-   n/ nU(       a  USU 3-  nUR                  SU 35        [        S5      U R                  R                  R                  ;   a/  U R                  R                  R                  R                  S5      OSnUR                  SU/5        [        R                  R                  [        R                  R                  U R                  R                  SU-   5      5      (       dZ  [        R                  R                  [        R                  R                  U R                  R                  SU-   5      5      (       d  g X@R                  ;   a  g U(       a)  [        U R                  R                  5       5      S	1::  d  g U R                  R!                  5       S
S	U-   U R                  R                  U R                  R"                  /-   U-   nU R%                  USS5      nUR'                  SU5        UR'                  SS5        U(       a'  UR)                  [+        U R                  S	   5      5        U R-                  U5        g )Nzclang-r  z--r  alwaysz--colorz.clang-z_clang-r  r  r  r  r  rZ   r  )r	  r&   r   rx  r  	get_valuer  r  r  r  r   r5  r   r   rN  rr  r
  r  ra  r
  r  r   r\  )	r   r   	extra_argneed_pchr:  r  coloroutrL   r`  s	            rC   generate_clangtoolNinjaBackend.generate_clangtool  s   o
Qyk?*K9+./&$*:*:*C*C*L*LL ##,,55??MRZ 	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rF   c                    [         R                  " 5       (       d  g U R                  S5        U R                  SS5        g )Nr   check)r   detect_clangformatr  r   s    rC   generate_clangformat!NinjaBackend.generate_clangformat2  s2    --//)'2rF   c                    [         R                  " 5       (       d  g U R                  SSS9  [         R                  " 5       (       d  g U R                  SSSS9  g )NtidyT)r  fix)r   detect_clangtidyr  detect_clangapplyr   s    rC   generate_clangtidyNinjaBackend.generate_clangtidy8  sN    ++--6,,..=rF   c                R   SS K nUR                  U5      (       d  g X R                  ;   a  g U R                  R	                  5       SSXR                  R
                  /-   nU R                  USS5      nUR                  SU5        UR                  SS5        U R                  U5        g )	Nr   r  tagsr  r  r  rZ   r  )	shutilwhichr   r   r
  r5  ra  r
  r\  )r   r  r:  r  rL   r`  s         rC   generate_tagsNinjaBackend.generate_tags@  s    ||D!!***00264)9)9)D)DEF''5EwOi%fi(trF   c                   U R                  5         U R                  5         U R                  5         U R                  5         U R	                  5         U R                  SS5        U R                  SS5        U R                  SS5        U R                  R                  5       SS/-   nU R                  SSS5      nUR                  S	U5        UR                  S
S5        U R                  U5        g )NetagsTAGSctagscscoper  	uninstallr  r  r  rZ   r  )r  r  r  r  r  r  r   r
  ra  r
  r\  r*  s      rC   r  NinjaBackend.generate_utilsN  s    !!!#!7F+7G,8X.002lK5PP''5EwOi%fi(trF   c           	     T   SU R                  5       4SU R                  5       4SU R                  S5      44 GHB  u  p/ nUR                  5        H  n[        U[        R
                  5      (       a  UR                  (       a{  U R                  R                  UR                     R                  5       (       aE  UR                  5       u  pVUR                  UR                  5       S   5      UR                  5       S'   UR                  [        R                   R#                  U R%                  U5      UR                  5       S   5      5        M     ['        U R(                  USU5      nU R+                  U5        GME     U R-                  SSS	5      nUR/                  S
U R0                  SS/-   5        UR/                  SS5        / nU R                  R3                  5       R                  5        Hy  n[        U[        R4                  5      (       d  M$  UR                  5        HA  n	UR                  [        R                   R#                  U R%                  U5      U	5      5        MC     M{     U(       a   UR7                  U R9                  U5      5        [;        S5      U R                  R<                  R>                  ;   af  U R                  R<                  R>                  RA                  S5      (       a2  U RC                  5         UR7                  S5        UR7                  S5        U R+                  U5        U RE                  5       n['        U R(                  SSU5      nUR/                  SS5        U R+                  U5        U RF                  (       a3  ['        U R(                  SSU RF                  5      nU R+                  U5        ['        U R(                  SSS	5      nUR/                  SS5        U R+                  U5        ['        U R(                  USS5      nU R+                  U5        g )Nr  r%  r(  Tr   r  cleanr  r  r  r  r]   Cleaningr  rq  rn  rJ  r3  rZ   r  zmeson-implicit-outsreconfigurer   )$get_build_by_default_targetsget_testlike_targetsrz  r   r   r  r  r   r  r  r  r  r  r  r	  r  r  r   r  r   r   r\  ra  r
  r  r  r  r  rk  r&   rx  r  r  ru  get_regen_filelistrS  )
r   targr   
targetlistr  rK  r^  r`  ctlistr  s
             rC   r  NinjaBackend.generate_ending]  s8   99;<$d&?&?&AB)4+D+DT+JKMJD J[[] a!4!455!: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rF   c                   > U R                   R                  U5      nU(       d  [        TU ]  X5      $ [	        UR                  5       5      $ r   )rP  r   rK  get_introspection_datar   rz  )r   	target_idr  datarX  s       rC   r  #NinjaBackend.get_introspection_data  s=    &&**9571)DDDKKM""rF   )rU  rT  r   rN  rO  rV  r  rQ  rM  rS  rP  r   r  rL  r  r  r4  r  rR  )r   zT.Optional[build.Build]rW  zT.Optional[Interpreter])r]  rn   r   rn   r^  rn   r   r   )FN)r  r   r  T.Optional[T.Dict]r   r  r)  )r  build.BuildTargetr   T.List[FileOrString])r  r  r   zT.MutableMapping[str, File]r   )r  build.TargetrD  zcompilers.Compilerr2   T.Optional[T.List[FileOrString]]r   r   )r  r  rK  T.Union[Compiler, StaticLinker]r0  r   r   r   )r  z'build.BuildTarget'r   r   )
r  r  r  r   rq   rp   r  r  r   r   )r  r   r   z3T.Iterable[T.Tuple[str, Literal['cpp', 'fortran']]])r  zbuild.CustomTargetr   r   r   )r  zbuild.RunTargetr   r   )
r`  r   r  r   r  r   r  r   r   r   )r  r   r  r   r  r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   r   )r  z	build.Jarr   r   )r   z!T.Tuple[T.List[str], T.List[str]])r  r  r   r   )r   r   )r  r  r   zyT.Tuple[T.MutableMapping[str, File], T.MutableMapping[str, File], T.Tuple[T.MutableMapping[str, File], T.MutableMapping]])r  r  r   zNT.Tuple[T.MutableMapping[str, File], T.MutableMapping[str, File], T.List[str]])r  r4   r  r   r   r   )r  r   r  zbuild.StructuredSourcesr   z%T.Tuple[T.List[str], T.Optional[str]])r   rn   r  rn   r   r   r9  rn   r:  rn   r  r   rA  r   r   r=  r   r   )r  r  r  r-   r   rn   )r  r  r   zT.Tuple[T.List[str], str])
r  r  r  r   r  rn   r   r   r   r   )r  r  r  r   r  r   r   z2T.Tuple[T.List[str], T.List[RustDep], T.List[str]])
r  r  r:  rn   r  r   r  r   r   r   )r  r   r   rn   )COMPILER)r)  rn   r  r   r^  rn   r   rn   )r  r   r   rn   )r  z4T.Union['Compiler', 'StaticLinker', 'DynamicLinker']r   z)T.Dict[str, T.Union[bool, RSPFileSyntax]])r  z'CsCompiler'r   r   )r  
'Compiler'r   r   r*  )r   zT.List[build.BuildTarget]r   zT.List[File])r  rn   r   r   )r  r   r   r   )r  rn   r  r   r   r   )r  zbuild.GeneratedListr  r  r   r   )r  r2   r  r   r   r   )rK  r  r  r  r   r   )rK  r  r  r  r   r   )r  r4   )
r  r  rC  rn   r  rn   r]  r   r   zCT.Tuple['ImmutableListProtocol[str]', 'ImmutableListProtocol[str]'])r  r  r  r   r   r   )r  r  r  r  r   z'CompilerArgs')r  r  r  r   r   zImmutableListProtocol[str])r  r  r   zdict[str, list[str]])FNNNN)r  r  r  r   r[  r  r  zT.Optional[T.List[str]]r2  r  r   T.Tuple[str, str])r  r  r   r  )r   r4   r   r   )r  r  r  r   r   r   )rK  r/   )r   r   )r  r  rK  r  r   r   )NN)r  r  rK  z#T.Union['Compiler', 'StaticLinker'])rh  r   r   rn   )T)rz  r   r   r   )NF)r   rn   r  r   r  r   r   r   )r  rn   r:  rn   r   r   )r  rn   r  r  r   zT.List[TargetIntrospectionData])rt   ru   rv   rw   r   ra  r  r  r  r  r	  r  r  r*  rH  rQ  r  r  r  r  rf  r  r  rb  r  rd  r  r  r  r  r  r  r5  r  r:  r\  r  r  r  rj  rq  rk  rW  rX  r  r  r  rm  rn  r  r[  r  r  r  r  rF  r  r   rZ  classmethodr  r  r  ri  rn  rq  ru  rl  r  r8  r9  r  r  r  r  r  r  r  r  r  r  r   r  r	  r  r6  r7  rh  r  r  ro  rK  rO  rT  rZ  r^  r{  r	   rl  rr  ro  rp  r  r|  r  r  r  r  r  r  r  r  r  r  rO  r  r  r  r  r  r-  r  r;  r  r4  rg  rk  ru  r~  r  r  r  r  r  r  r  r  r  r  r  rz   __classcell__)rX  s   @rC   rG  rG    s   @,X"ApFk4Z P60
 ^b2V:Z2Vfj2Vh&&f%P0.:E.7G. 6J. OS.`($W((
<
	)4V34.D-<DL[D`dD8T".. 8D#,(	w4

4hl**jX!2A*3/L3/jx6Zx6tEAZEAN%(',/'>A'15'N]' '6' ;?'>b0)f ;?(7CN,L(2=L(BtL(\3f1<3fAE3fj 9 9 B B h h ` `G	wHr	.^`%NNAQU52U$&%P?j"N,=\24*C>:!x4Wl
7Kr"@ tO *
 t5 5t 4 IMOSFJRV	Z5.2Z5,LZ5 -DZ5 0P	Z5
 &7Z5x,T*#
86	&&$LK
 Q&P
Q( t @4D* Sj	+;"
	"
63>=~# #rF   rG  c                   [         R                  " [        [         R                  5      n[         R                  " [        [         R                  5      n[         R                  " [
        [         R                  5      n/ n[        U 5      n U R                  SSS9 n	U	 GH  n
UR                  U
5      nUbe  U R                  UR                  S5      -  nUR                  R                  5       SS UR                  ;   a  UR                  [        XX#U5      5        UR                  U
5      nUb  UR                  S5      R                  5       nUS:X  a  M  X;  a  M  XU   R                   -  nUR#                  5       (       d  UR$                  U R$                  :w  a  OGM  UR'                  U 5      (       a  GM  UR)                  U5      nUR+                  [-        UU-  5      5        GMM  UR                  U
5      nUc  GMd  UR                  S5      R                  5       R/                  S5      n[1        U5      S;   d
   S	U 35       eS
R3                  U5      nUU;  aI  [5        SR7                  UR                  S5      R                  5       UR/                  S
SS9S   5      5      eXU   R                   -  nUR#                  5       (       d  UR$                  U R$                  :w  a  OGMO  UR'                  U 5      (       a  GMh  UR)                  U5      nUR+                  [-        UU-  5      5        GM     SSS5        U$ ! , (       d  f       U$ = f)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`
r5  r6  r7  Nr   	intrinsicrc   >   r   r   zHsubmodule ancestry must be specified as ancestor:parent but Meson found r  z=submodule {} relies on ancestor module {} that was not found.r   )maxsplitr   )rH   r  FORTRAN_INCLUDE_PATr:  FORTRAN_USE_PATr;  r   rr  r   r  r@   r(  r$  r&  r  rG  r   is_filer   samefiler  r	  rn   r   r?   r   r   r   )r  rI  rY  rH  r  increuserer=  rJ  r  r   incmatchincfileusematchusenamer  mod_namerB  rC  ancestor_childsubmodsrcfiles                        rC   rG  rG    s*   " JJ*BMM:EJJ6Ezz,bmm<HI
s)C	78	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   E"M D7M
M)rJ   rn   r   rn   )rW   rn   r   rn   r/  )rf   rn   rg   r   r   rn   )r  r   rI  r   rY  r   rH  zT.Dict[str, File]r  r2   r   r   )m
__future__r   collectionsr   r   dataclassesr   enumr   r   	functoolsr	   pathlibr
   r   textwrapr   r  r  r  r  rH   r  typingrJ  r   r   r   r   r   r   r   r   arglistr   r   rP  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-   rW  r.   rK  r/   r0   compilers.csr1   compilers.fortranr2   compilers.rustr3   r4   r5   ListUnionrn   r   r;  r  r9  r;  r  rK   r  rU   r  r  rX   get_rsp_thresholdr  r   r  rd   re   rj   rl   r|   r6   r   r   r   r-  r5  BackendrG  rG  rs   rF   rC   <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A7#8## A7#HnSrF   