
    -Ph
                   p   d dl mZ d dlmZmZ d dlmZ d dlmZm	Z	 d dl
mZ d dlmZmZ d dlmZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd	d
lmZ ddlmZ ddlmZmZ ddlmZ ddlmZ ddlm Z  ddl!m"Z" ddl m#Z# ddl$m%Z%m&Z& ddlm'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ ddlm0Z0m1Z1m2Z2 ddl3m4Z4 d	dlm5Z5 ddlm6Z6m7Z7 ej8        rbd dl9m:Z: ddl;m<Z< ddlm=Z=m>Z> ddl?m@Z@ ddlAmBZBmCZC ddlDmEZE ddlFmGZG dd lHmIZI dd!lmJZJ d	d"lmKZK ejL        ejM        d#eNf                  ZOe:d$         ZPd%ZQd&ZRd'ZSd(ZTdVd,ZU ejV                    reUZWd-d.gZXg d/ZYne/ZWg ZXg d0ZYdWd2ZZ ej[                    Z\h d3Z] ej^        d4          Z_ ej^        d5          Z`dXdYd:Zae G d; d<                      Zbe	 G d= d>e                      Zc G d? d#          Zde G d@ dA                      Ze G dB dC          Zf G dD dE          Zge G dF dG                      Zhe G dH dI                      Zi G dJ dKejj                  ZkdZdUZldS )[    )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+)argstrreturnc                n    t          j        dd |           } t          j        dd |           } d|  d} | S )Nz(\\*)"c                ^    dt          |                     d                    dz  dz   z  dz   S )N\r   r   "lengroupms    _/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mesonbuild/backend/ninjabackend.py<lambda>zcmd_quote.<locals>.<lambda>B   s*    dc!''!**oo.AA.E&F&L     z(\\*)$c                R    dt          |                     d                    dz  z  S )Nr?   r   r   rA   rD   s    rF   rG   zcmd_quote.<locals>.<lambda>D   s     dc!''!**oo.A&B rH   r@   )resub)r:   s    rF   	cmd_quoterL   =   sD    
 &LLc
R
RC
&BBC
H
HC
c***CJrH   cmd/c)delz/fz/sz/q{}&&)rmz-frP   rQ   sc                L    |                      dd          } t          |           S )Nr?   \\)replace
quote_funcrS   s    rF   gcc_rsp_quoterY   U   s#     	
		$Aa==rH   >   DESCpooldyndep	targetdepdescriptionDEPFILE_UNQUOTEDz[$ :\n]z[$ \n]Ftextis_build_lineboolc                    d| v rd|  d}t          |          |rt          nt          }d| v s
d| v s|rd| v r|                    d|           S | S )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_PATrK   )r`   ra   errmsgquote_res       rF   ninja_quoterl   k   s    t||GG G G
 V$$$(5N$$;NH
d{{cTkkmkt||It,,,KrH   c                  2    e Zd ZU dZded<   ded<   ded<   dS )	TargetDependencyScannerInfoaV  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.
    r;   private_dirT.Dict[str, str]source2objectz/T.List[T.Tuple[str, Literal['cpp', 'fortran']]]sourcesN)__name__
__module____qualname____doc____annotations__ rH   rF   rn   rn   {   sB           ####<<<<<<rH   rn   c                      e Zd ZdZdZdZdZdS )Quotingr   r   r      N)rs   rt   ru   bothnotShellnotNinjanonerx   rH   rF   rz   rz      s"        DHHDDDrH   rz   c                  D    e Zd Zej        fddZddZedd            ZdS )r6   rS   r;   quotingrz   r<   Nonec                "    || _         || _        d S N)rS   r   )selfrS   r   s      rF   __init__zNinjaCommandArg.__init__   s    rH   c                    | j         S r   rX   r   s    rF   __str__zNinjaCommandArg.__str__   s	    vrH   lT.List[str]qT.List[NinjaCommandArg]c                     fd| D             S )Nc                0    g | ]}t          |          S rx   )r6   ).0ir   s     rF   
<listcomp>z(NinjaCommandArg.list.<locals>.<listcomp>   s#    111!1%%111rH   rx   )r   r   s    `rF   listzNinjaCommandArg.list   s    1111q1111rH   N)rS   r;   r   rz   r<   r   r<   r;   )r   r   r   rz   r<   r   )	rs   rt   ru   rz   r|   r   r   staticmethodr   rx   rH   rF   r6   r6      sf        29,         2 2 2 \2 2 2rH   c                  "    e Zd ZU ded<   d	dZdS )
NinjaCommentr;   commentoutfileT.TextIOr<   r   c                    | j                             d          D ]A}|                    d           |                    |           |                    d           B|                    d           d S )Nrd   z# )r   splitwrite)r   r   r   s      rF   r   zNinjaComment.write   sr    ##D)) 	  	 AMM$MM!MM$drH   Nr   r   r<   r   )rs   rt   ru   rw   r   rx   rH   rF   r   r      s3         LLL     rH   r   c                  X    e Zd Zddddej        fd"dZeefd#d            Zd$dZ	d%d!Z
dS )&	NinjaRuleFNruler;   commandCommandArgOrStrargsr^   rspablerb   depsT.Optional[str]depfileextrarspfile_quote_styler   c
                   
 dd
| _         
fd|D              _        
fd|D              _        | _        | _        | _        | _        | _        d _        d _	        |	 _
        d	                     fd
 j         j        z   D                        _        d t          j        d j                  D              _         j        dk    r xj        dz  c_        d S d S )NcT.Union[NinjaCommandArg, str]r<   r6   c                   t          | t                    r| S | dk    rt          | t          j                  S |                     d          rst          j        d|           }|
J d            |                    d          }|t          vrt          | t          j	                  S t          | t          j
                  S t          |           S )NrQ   rf   z\$\{?(\w*)\}?zfor mypyr   )
isinstancer6   rz   r}   
startswithrJ   matchrC   	raw_namesr   r~   )r   varpvars      rF   strToCommandArgz+NinjaRule.__init__.<locals>.strToCommandArg   s    !_--  Dyy&q'*:;;;||C   @x 0!44'''''::a==i'' +1gl;;; +1g.>???"1%%%rH   c                &    g | ]} |          S rx   rx   )r   r   r   s     rF   r   z&NinjaRule.__init__.<locals>.<listcomp>   s#    0U0U0U1C1C0U0U0UrH   c                &    g | ]} |          S rx   rx   )r   ar   s     rF   r   z&NinjaRule.__init__.<locals>.<listcomp>   s#    -O-O-OQooa.@.@-O-O-OrH   r   re   c                :    g | ]}                     |          S rx   _quoterr   xr   s     rF   r   z&NinjaRule.__init__.<locals>.<listcomp>   s#    $W$W$WT\\!__$W$W$WrH   c                D    g | ]}|                     d           dk    |S )r   )start)r   rE   s     rF   r   z&NinjaRule.__init__.<locals>.<listcomp>   s6     . . .qGGAJJ",, ,,,rH   z(\${\w+}|\$\w+)?[^$]*$DEPFILE	_UNQUOTED)r   r   r<   r6   )namer   r   r^   r   r   r   r   refcountrsprefcountr   joincommand_strrJ   finditervar_refs)r   r   r   r   r^   r   r   r   r   r   r   s   `         @rF   r   zNinjaRule.__init__   s   
	& 	& 	& 	&0 	0U0U0U0UW0U0U0U-O-O-O-O$-O-O-O	&	
#6 88$W$W$W$WdlTY>V$W$W$WXX. .BK0H$JZ$[$[ . . . <:%%LLK'LLLL &%rH   r   r6   qfT.Callable[[str], str]r<   c                    | j         t          j        k    r| j        S | j         t          j        k    r || j                  S | j         t          j        k    rt          | j                  S t           |t          |                               S r   )r   rz   r   rS   r~   r}   rl   r;   )r   r   s     rF   r   zNinjaRule._quoter   ss    9$$3JY'***2ac77NY'***qs###22c!ff::&&&rH   r   r   r   c           	     2     j         } j        t          j        t          j        hv rt
          d |D             }nt          d fd} |            D ]A}|                    d j         | d           |dk    r
 j        t          j        u rM|                    d	                    d	
                     fd
 j        D                                            nL|                    d	                    d	
                     fd j        D                                            |                    d           |                    d	                    d	
                     fd|D                                            n-|                    d	                     j                              j        r|                    d j         d            j        r|                    d j         d           |                    d j         d            j        r\ j                            d          D ]A}|                    d	           |                    |           |                    d           B|                    d           Cd S )Nc                R    g | ]$}|j         d k    rt          d|j                  n|%S )$inz$in_newline)rS   r6   r   )r   r:   s     rF   r   z#NinjaRule.write.<locals>.<listcomp>   s6    {{{gj35TY>>OM3;GGG_b{{{rH   r<   T.Iterable[str]c               3  <   K    j         rdV   j        rdV  d S d S )N _RSP)r   r   r   s   rF   	rule_iterz"NinjaRule.write.<locals>.rule_iter   s<      }   rH   zrule rd   r   z% command = {} --option-file=$out.rsp
re   c                :    g | ]}                     |          S rx   r   r   s     rF   r   z#NinjaRule.write.<locals>.<listcomp>   sB      \C  \C  \Cpq\`\h\hij\k\k  \C  \C  \CrH   z command = {} @$out.rsp
c                :    g | ]}                     |          S rx   r   r   s     rF   r   z#NinjaRule.write.<locals>.<listcomp>   s%    NuNuNucdt||\]NuNuNurH   z rspfile = $out.rsp
z rspfile_content = {}
c                <    g | ]}                     |          S rx   r   )r   r   rspfile_quote_funcr   s     rF   r   z#NinjaRule.write.<locals>.<listcomp>   sB      ID  ID  IDqrVWYkIlIl  ID  ID  IDrH   z command = {}
z deps = z depfile = z description = )r<   r   )r   r   r   MSVCTASKINGrL   rY   r   r   formatr   r   r   r   r   r^   r   r   )r   r   rspfile_argsr   rspr   r   s   `     @rF   r   zNinjaRule.write   s:   y#(:M<Q'RRR!*{{nz{{{LL!.	 	 	 	 	 	 9;; 	  	 CMM4$)4S444555f}}+}/DDDMM"J"Q"QRURZRZ  \C  \C  \C  \Cuy  vB  \C  \C  \C  SD  SD  #E  #E  F  F  F  FMM"="D"DSXXNuNuNuNuhlhtNuNuNuEvEv"w"wxxx56667>>sxx  ID  ID  ID  ID  ID  wC  ID  ID  ID  @E  @E  F  F  G  G  G  G/66t7GHHIIIy 86666777| ><DL<<<===MM@D,<@@@AAAz ())$// ( (AMM#&&&MM!$$$MM$''''MM$+	  	 rH   infilesoutfileselems!T.List[T.Tuple[str, T.List[str]]]intc                   t          |          }| j        | j        g|d<   | j        | j        g|d<   |g|d<   |g|d<   t          | j                  }| j        D ]}||                    d          |                    d          z
  z  }|                    d          }|d         dk    r|dd         }n
|dd          }|	                    |g           }|t          d	
                    |                    z  }|S )
Nr   r   inoutr   {r   r   re   )dictr   r   rB   r   r   endr   rC   getr   )r   r   r   r   
ninja_varsestimaterE   chunks           rF   length_estimatezNinjaRule.length_estimate
  s	   
 %[[
9 "&)Jv<#%)\NJy!#9
4%J
5 t'(( 	- 	-Aa1771::--HGGAJJEQx3adabb	NN5"--ECHHUOO,,,HH rH   )r   r;   r   r   r   r   r^   r;   r   rb   r   r   r   r   r   r   r   r   )r   r6   r   r   r<   r;   r   )r   r;   r   r;   r   r   r<   r   )rs   rt   ru   r   GCCr   r   rW   r   r   r   rx   rH   rF   r   r      s        38RV,046C6G-( -( -( -( -(^ AK ' ' ' ' \'$  $  $  $ L     rH   r   c                  v    e Zd ZU ded<   dddZddZddZddZej	        dd            Z
ddZddZddZdS ) NinjaBuildElementr   r   Nall_outputs
T.Set[str]c                ^   |pg | _         t          |t                    r	|g| _        n|| _        t          |t                    sJ || _        t          |t                    r	|g| _        n|| _        t                      | _        t                      | _        g | _	        || _
        d| _        d S Nr   )implicit_outfilenamesr   r;   outfilenamesrulenameinfilenamessetr   	orderdepsr   r   output_errors)r   r   r   r   r   implicit_outss         rF   r   zNinjaBuildElement.__init__*  s    %2%8b"lC(( 	-!-D ,D(C((((( k3'' 	+ +}D*DEE	
&rH   depT.Union[str, T.List[str]]r<   r   c                    t          |t                    r| j                            |           d S | j                            |           d S r   )r   r   r   updateaddr   r   s     rF   add_depzNinjaBuildElement.add_dep<  sJ    c4   	IS!!!!!IMM#rH   c                    t          |t                    r| j                            |           d S | j                            |           d S r   )r   r   r   r   r  r  s     rF   add_orderdepzNinjaBuildElement.add_orderdepB  sL    c4   	$N!!#&&&&&Ns#####rH   r   r;   r   'T.Union[str, T.List[str], CompilerArgs]c                   t          |t                    r|                                }t          |t                    r|g}| j                            ||f           |dk    r!| j                            |dz   |f           d S d S )NDEPFILEr   )r   r   	to_nativer;   r   append)r   r   r   s      rF   add_itemzNinjaBuildElement.add_itemH  s     e\** 	&OO%%EeS!! 	GE
4-(((9Jtk159::::: rH   rb   c                   | j         dk    rdS | j        j        sdS d                    d | j        D                       }d                    d | j        D                       }| j                            ||| j                  t          k    S )NphonyFre   c                .    g | ]}t          |d           S Trl   r   r   s     rF   r   z9NinjaBuildElement._should_use_rspfile.<locals>.<listcomp>]  s"    OOOAt 4 4OOOrH   c                .    g | ]}t          |d           S r  r  r  s     rF   r   z9NinjaBuildElement._should_use_rspfile.<locals>.<listcomp>^  s"     Q Q Q!Q!5!5 Q Q QrH   )	r   r   r   r   r   r   r   r   rsp_threshold)r   r   r   s      rF   _should_use_rspfilez%NinjaBuildElement._should_use_rspfileT  s     =G##5y  	5hhOOd>NOOOPPxx Q Qt?P Q Q QRRy(()5)-5 58EF 	FrH   c                    | j         dk    r5| j        r| j        xj        dz  c_        d S | j        xj        dz  c_        d S d S )Nr  r   )r   r  r   r   r   r   s    rF   count_rule_referencesz'NinjaBuildElement.count_rule_referencesd  sZ    =G##' (	%%*%%%%	""a'""""	 $#rH   r   r   c           	        | j         rt          | j                   d                    d | j        D                       }d                    d | j        D                       }d                    d | j        D                       }|rd|z   }| j        }|r(| j        dz   }t          j	        d| j         d           n| j        }d	| | d
| d| }t          | j                  dk    r7|dd                    d t          | j                  D                       z   z  }t          | j                  dk    rCd | j        D             }|dd                    d t          |          D                       z   z  }|dz  }|                    dd          }t          j                    r2d                    d |                    d          D                       }|                    |           |r4| j        j        t*          j        t*          j        hv rt0          }	nt2          }	nt4          }	| j        D ]}
|
\  }}|t8          v}d| d}g }|D ]X}|r|dk    r#|                    t=          |                     -|                    t=           |	|                               Y|d                    |          z  }|dz  }|                    |           |                    d           d S )Nre   c                .    g | ]}t          |d           S r  r  r  s     rF   r   z+NinjaBuildElement.write.<locals>.<listcomp>n  s"    GGGAt,,GGGrH   c                .    g | ]}t          |d           S r  r  r  s     rF   r   z+NinjaBuildElement.write.<locals>.<listcomp>o  s"    III!Q--IIIrH   c                .    g | ]}t          |d           S r  r  r  s     rF   r   z+NinjaBuildElement.write.<locals>.<listcomp>p  s"    ![![![1+a"6"6![![![rH   z | r   zCommand line for building z is long, using a response filezbuild z: r   c                .    g | ]}t          |d           S r  r  r   r   s     rF   r   z+NinjaBuildElement.write.<locals>.<listcomp>{  s"    %V%V%Vqk!T&:&:%V%V%VrH   c                ,    g | ]}t          |          S rx   )r;   r  s     rF   r   z+NinjaBuildElement.write.<locals>.<listcomp>}  s    888AQ888rH   z || c                .    g | ]}t          |d           S r  r  r  s     rF   r   z+NinjaBuildElement.write.<locals>.<listcomp>~  s"    &W&W&W{1d';';&W&W&WrH   rd   r?   /c              3  r   K   | ]2}|                     d           r|                    d dd          n|V  3dS )z//rU   r   N)r   rV   )r   r   s     rF   	<genexpr>z*NinjaBuildElement.write.<locals>.<genexpr>  s\         01||D/A/AH4+++q     rH   z = rQ   )r   r   r   r   r   r   r  r   r   debugrB   r   sortedr   rV   r   
is_windowsr   r   r   r   r   r   r   rL   rY   rW   r   r   r
  rl   )r   r   insoutsr   use_rspfiler   liner   r   er   r   should_quotenewelemsr   s                   rF   r   zNinjaBuildElement.writek  s8    	5 !3444hhGGd6FGGGHHxxIIt7HIIIJJ![![@Z![![![\\ 	2!M1M. 	%}v-HJfD4Efffgggg}H??m??x??#??ty>>AECHH%V%VF49DUDU%V%V%VWWWWDt~""88888IFSXX&W&WVIEVEV&W&W&WXXXXD ||D#&&   	 88  C    D 	d 	y,1C]EZ0[[["B 	  	 AMT5y0L t===DH 8 8# 8qDyyOOKNN3333OOK1$6$67777CHHX&&&DDLDMM$drH   c                v    | j         D ]0}|| j        v rd| d| _        | j                            |           1d S )Nz%Multiple producers for Ninja target "z". Please rename your targets.)r   r   r   r  )r   ns     rF   check_outputszNinjaBuildElement.check_outputs  sY    " 	$ 	$AD$$$%nQ%n%n%n"  ####	$ 	$rH   r   )r   r   )r   r   r<   r   r<   r   )r   r;   r   r  r<   r   r<   rb   r   )rs   rt   ru   rw   r   r  r  r  r   lazy_propertyr  r  r   r.  rx   rH   rF   r   r   &  s         OOO         $   $ $ $ $
; 
; 
; 
; F F F F( ( ( (9 9 9 9v$ $ $ $ $ $rH   r   c                  ,    e Zd ZU ded<   ded<   d	dZdS )
RustDepr;   r   r   crater<   T.Dict[str, object]c                     | j         | j        dS )Nr4  r   r7  r   s    rF   to_jsonzRustDep.to_json  s    ZI
 
 	
rH   Nr<   r5  )rs   rt   ru   rw   r8  rx   rH   rF   r3  r3    s@          III JJJ
 
 
 
 
 
rH   r3  c                      e Zd ZU ded<   ded<   ded<   ded<   ded<   ded	<   d
ed<   ded<   ded<   ded<   dZded<   ddZdS )	RustCrater   orderr;   display_nameroot_module
crate_typetarget_nameRUST_EDITIONSeditionT.List[RustDep]r   r   cfgrb   is_proc_macrois_workspace_memberNr   proc_macro_dylib_pathr<   r5  c                    | j         | j        | j        | j        | j        d | j        D             d}| j        r| j        
J d            | j        |d<   |S )Nc                6    g | ]}|                                 S rx   r8  )r   ds     rF   r   z%RustCrate.to_json.<locals>.<listcomp>  s     444QQYY[[444rH   )r=  r>  rB  rD  rE  r   zThis shouldn't happenrG  )r=  r>  rB  rD  rE  r   rG  )r   rets     rF   r8  zRustCrate.to_json  sv     -+|8!/44$)444$
 $
  	F-99;R999+/+EC'(
rH   r9  )rs   rt   ru   rw   rG  r8  rx   rH   rF   r;  r;    s         
 JJJOOO -11111     rH   r;  c                      e Zd Zd fdZddZd ZdddZddZddZddZ	ddZ
ddZd Z	 dd	d%Zd
d*Zdd+Zdd-Zdd3Zdd5Zdd6Zdd7Zd8 Zdd:Zdd;Zdd=ZddCZddEZddFZddGZddHZddIZddLZddMZ ddPZ!ddQZ"ddTZ#ddUZ$ddVZ%ddXZ&ddZZ'dd[Z(dd\Z)d] Z*dd^Z+dd_Z,ddbZ-dddZ.ddeZ/ddjZ0ddoZ1ddyZ2d d|Z3d!d~Z4	 dd"dZ5d#dZ6ddZ7e8d$d            Z9e:d%d&d            Z;e:d'd            Z<e:d'd            Z=d Z>d Z?d Z@d ZAd ZBddZCd(dZDddZEddZFddZGd)dZHddZId*dZJddZKddZLd+dZMd,dZNd-dZOddZPd.dZQd.dZRd/dZSd/dZTddZUddZVddZWddZXd0dZYddZZd1dZ[d Z\d Z]d2dZ^d3dZ_d4dZ` ead          d5dń            Zbd6dƄZcd7dȄZd ead          d8dʄ            Zed9d̄Zf	 	 	 	 d:d;d҄ZgddӄZhd<dԄZidՄ Zjd=dׄZkd>d؄Zldل Zmdڄ Zndۄ Zodd܄Zpd݄ ZqddބZrdd߄Zsd Ztd Zud?dZv ead          d@d            Zwd Zxd ZydAdZzdBdCdZ{d Z|ddZ}dDdZ~ddZdEdFdZddZddZddZddZdGdHdZddZddZdIdZddZddZdJ fd Z xZS (K  NinjaBackendr   T.Optional[build.Build]interpreterT.Optional[Interpreter]c                   t                                          ||           d| _        d| _        i | _        t                      | _        t          t
                    | _        t                      | _	        i | _
        t          dd          | _        i | _        g | _        d| _        i | _        t          t"                   dd          | _        d S )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_cacherb   allow_thin_archives)r   r   rP  	__class__s      rF   r   zNinjaBackend.__init__  s    ,,,	+<>'*uu0;C0@0@25%%#"$$.ue$<$<!3502 "JL$ $.d#3D$#?#?   rH   dummy_outfiler;   r   phony_infilenamer<   r   c                    |                     d          rt          d|          d| }t          | j        |d|          }|                     |           t          | j        |||          S )aL  
        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   rb  r   rc  to_nameelems         rF   create_phony_targetz NinjaBackend.create_phony_target  s     ##$677 	a !_m!_!_```4]44 !1='7SSt !17HFVWWWrH   c                   | j         j        j        j                                        D ]X}|j        dv r|j        dk    r't          j                    rt          dd          c S |
                                dk    r nYt          dd          S dt          j        |j                 d         z   }t          j                            | j                                         |          }t          |d	d          5 }|                    t#          d
                     ddd           n# 1 swxY w Y   t%          j        |                                dd|gz   | j                                         t$          j        t$          j                  }|                                \  }}t/          j        d          fd}	 |	|          p
 |	|          }
|
r|
S t3          d| d|           )z_VS 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/showIncludesrN   )cwdstdoutstderrs(   ^(.*\s)([a-zA-Z]:[\\/]|[\\\/]).*stdio.h$c                :   t          j        d|           D ]}                    |          }|rjt          d          5 }|                    d|                    d          z   dz              d d d            n# 1 swxY w Y   t          dd          c S d S )	Ns   \r?\nabs   msvc_deps_prefix = r      
r   rn  ro  )rJ   r   r   openr   rC   )r   r(  r   binfilematchretempfilenames       rF   detect_prefixz8NinjaBackend.detect_vs_dep_prefix.<locals>.detect_prefix;  s    C00 E Ed++ ElD11 WW&<u{{1~~&MPU&UVVVW W W W W W W W W W W W W W WcGDDDDDDE 4s    /A;;A?	A?	z=Could not determine vs dep dependency prefix string. output: re   )r   coredatar   hostvalueslanguageidr   r$  ry  get_argument_syntaxlang_suffixesospathr   get_scratch_dirr   r   
subprocessPopenget_exelistPIPEcommunicaterJ   compiler   )r   r|  compilerfilebasefilenamefpcrt  ru  r}  resultr{  s    `         @rF   detect_vs_dep_prefixz!NinjaBackend.detect_vs_dep_prefix	  si    (1;@GGII 	= 	=H  $777{e##(;(=(=#L#@@@@@@++--77 8 cG<<<<)"9(:K"LQ"OO7<< 0 @ @ B B (* *(C'222 	aGGF      	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 h2244.h?@"&"2"B"B"D"D%/_Z_N N N >>++ *IJJ	 	 	 	 	 	 v&&?--*?*? 	Mn]cnnflnnooos   ?#D..D25D2FNcapturerb   
vslite_ctxT.Optional[T.Dict]c                P   |rt          d          | j        rTt          D ]L}d| j        j        j        |         v r1t          j        d                    |                     d| j        |<   Mt          j	        d          }| j        j        j
                            t          d                    rt          | j                                                  }	 |                    t          j                              }n# t"          $ r Y nw xY wt%          j        t%          j                              }t          j                     t          j        d           t          j        | d	|            |t-          d
          |\  | _        | _        t%          j        | j        d          | _        t6          j                            | j                                        | j                  }|dz   }t?          |dd          5 }	|	                     d| j!        "                                 d           |	                     d           |	                     d           |	                     d           | j        j        j
                            d          }
|
dk    r|	                     d|
 d           d d d            n# 1 swxY w Y   | #                    |          5 }	| $                                 g | _%        | &                                 | '                    tQ          d                     |rti }| j!        )                                *                                D ]F}tW          |tB          j,                  r*| -                    |          ||.                                <   Gt_          | j!        )                                *                                d          D ]}| 0                    |           t          j1        d           | '                    tQ          d                     | 2                                 t          j1        d           | '                    tQ          d                     | 3                                 t          j1        d            | 4                                 t          j1        d!           t          d"          }|| j        j        j
        v r| j        j        j
                            d"          rt          j5        | j        j                  \  }}}}}}t          j        d#| d$| d%| d&| d'	           |s|rP|rN| '                    tQ          d(                     | 6                    |||           t          j1        d)           nt          j7        d*           | '                    tQ          d+                     | 8                                 t          j1        d,           | 9                                 | :                    |	           | ;                    |	           d-}|	                     |           d d d            n# 1 swxY w Y   t7          j<        ||           t          j=        |           t%          j        | j        d.          s!t%          j        | j        d          r| j>        st6          j        ?                    t6          j                            | j        j@        d/                    rTt          jB        | j        d0d1gz   | j        j@        2           t          jB        | j        d0d3gz   | j        j@        2           | C                                 | D                                 |r|S d S )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~rr  rn  ro  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rs  	cleandead)Er   r   r   r~  r   r   r"  r   r`   detect_ninja_command_and_versionoptstoreget_value_forr&   r   get_build_dirrelative_tors  
ValueErrorr   	join_argsget_meson_commandr  r   ninja_commandninja_versionversion_compareninja_has_dyndepsr  r  r   rV  ry  r   r   get_projectr  generate_rulesbuild_elementsgenerate_phonyadd_build_commentr   get_targetsr  r   BuildTarget)generate_common_compile_args_per_src_typeget_idr!   generate_targetlog_timestampgenerate_testsgenerate_installgenerate_distfind_coverage_toolsgenerate_coverage_ruleswarninggenerate_utilsgenerate_endingwrite_ruleswrite_buildsrV   cmd_ci_includer^  exists	build_dirr  callgenerate_compdbgenerate_rust_project_json)r   r  r  for_machinerS  builddirmeson_commandoutfilenamer|  r   	num_pools captured_compile_args_per_targettargettkey	gcovr_exegcovr_versionlcov_exelcov_versiongenhtml_exellvm_cov_exedefaults                         rF   generatezNinjaBackend.generateL  s    	m $$klll 	B, B BT-6@MMMJ   O   V   V  Wb   c   c  d  d  d<AD,[9<FFF$-;;Ig<N<NOO 	?D,::<<==H $//

;;   $.x/I/K/KLLMHJJJHpqqqH==8==>>>= !IJJJ380	T/!)!9$:Lj!Y!Ygll4#3#A#A#C#CTEXYY"S(,g666 	'MM`4:CYCYC[C[```aaaMMNOOOMM6777MM>???(1:HHI\]]I1}}      	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 &&|44 /	#!!!"$D!!!""<0I#J#JKKK  C350"j4466==?? C CF!&%*;<< CLPLzLz  |B  MC  MC8I !7!7!9!9!@!@!B!BI]^^^ ( ($$Q''''2333""<#=#=>>>!!!0111""<#@#@AAA!!###2333   /000L))Cd&/888$-6DD\RR 9^i^}  C  O  X  _Y  _Y[	=(L+|
rIrrrr8rrR^rrrsss ` `k `**<8H+I+IJJJ00M<XXX&'ABBBB L!^___""<#9#9:::!!!0111  """W%%%g&&&'GMM'"""_/	# /	# /	# /	# /	# /	# /	# /	# /	# /	# /	# /	# /	# /	# /	#d 	
<---K((( %d&8+FF 	f)$*<jII	fRVRd	fGNN27<<0@0JL#Y#YZZ	f OD.$1AAtGWGabbbbOD.$1DD$JZJdeeee''))) 	433	4 	4s8   &D 
DDB3KKK'M=Y00Y47Y4r   c                   | j         sdS t          t          j                            | j                                        d          dd          5 }| j        j        j        j	        d         
                                }t          j        |t          j                            |d          d | j                                         D             d	|d
           ddd           dS # 1 swxY w Y   dS )z;Generate a rust-analyzer compatible rust-project.json file.Nzrust-project.jsonrr  rn  ro  rustzlib/rustlib/src/rust/library/c                6    g | ]}|                                 S rx   rJ  r   r   s     rF   r   z;NinjaBackend.generate_rust_project_json.<locals>.<listcomp>  s     NNNqqyy{{NNNrH   )sysrootsysroot_srccrates   )indent)r\  ry  r  r  r   r   r  r~  r   r  get_sysrootjsondumpr  )r   r  r  s      rF   r  z'NinjaBackend.generate_rust_project_json  s3    	F"',,t/==??ATUU) ) ) 		,-&/9>vFRRTTGI&#%7<<9X#Y#YNND4D4K4K4M4MNNN 
 !   		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		 		s   B	C''C+.C+c                   g }t           D ]}| j        j        j        |                                         D ]}|d |                     |          fD             z  }|d |                     |          fD             z  }|                                dk    rH|                     d|j	                  }|
                    |           |
                    | d           t          j        | j        d          rdgng }| j        dd	gz   |z   |z   }| j                                        }	 t!          j        ||
          }t%          t&          j                            |d          d          5 }	|	                    |           d d d            d S # 1 swxY w Y   d S # t.          $ r t1          j        dd           Y d S w xY w)Nc                $    g | ]}d D ]}| | 	S )r   r   rx   r   r   exts      rF   r   z0NinjaBackend.generate_compdb.<locals>.<listcomp>  D     3 3 3T%13 3! ".3.. 3 3 3 3rH   c                $    g | ]}d D ]}| | 	S r  rx   r  s      rF   r   z0NinjaBackend.generate_compdb.<locals>.<listcomp>  r  rH   taskingtasking_mil_compiler   z>=1.9-xr  compdbr  zcompile_commands.jsonwbz&Could not create compilation database.F)fatal)r   r   r~  r   r  compiler_to_rule_namecompiler_to_pch_rule_namer  get_compiler_rule_namer  r
  r   r  r  r  r  r  check_outputry  r  r  r   r   	Exceptionr   r  )
r   rulesr  r  r   compdb_optionsninja_compdbr  jsondbr  s
             rF   r  zNinjaBackend.generate_compdb  sO    ) 
	0 
	0K ,5?LSSUU 	0 	0 3 3d6P6PQY6Z6Z5[ 3 3 3 3 3 3d6T6TU]6^6^5_ 3 3 3 3 ??$$	11667LhNbccDLL&&&LLD///	0 $,#;D<NPW#X#X`$^`)T8,<<~MPUU#1133	P,\xHHHFbgll8-DEEtLL  PQ                                    	P 	P 	PLAOOOOOOO	Ps7   *AF .FF FF FF  GGr  build.BuildTargetT.List[FileOrString]c           	        |                                 }|| j        v r| j        |         S g }|                                D ]}t          |t          j        t          j        f          r)|                                D ]F}| j        	                    |          r*|
                    |                     |||                     Gd|j        v r\t          |t          j                  sBt          j        |                     |          |j                  }|
                    |           t%          j        |j        |j                  D ]@}t          |t          j        t          j        f          r||                     |          z  }At          |t          j                  r'|                    |                                           || j        |<   |S )Nvala)r  r_  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           rF   r  z"NinjaBackend.get_generated_headers  s   mmoo$.../44,.3355 	\ 	\G'E$68O#PQQ **,, \ \#--c22 \&&t'D'DVWVY'Z'Z[[[\ V%%%jAQ.R.R%.t/B/B6/J/JFL^__K{+++?6#68QRR 	? 	?C# 3U5HIJJ ?t99#>>>fe122 	?v;;==>>>,7$S)rH   T.MutableMapping[str, File]c                    t                      }|                                D ]G}|                                D ]0}|                     |||          }t	          j        |          ||<   1H|S )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gensrcrS   rel_srcs         rF   get_target_generated_sourcesz)NinjaBackend.get_target_generated_sources  s     -8MM2244 	B 	BF'')) B B77JJ $ 8 A AWB rH   c                    t                      }|                                D ]I}t          |t                    st	          d|d          |                    | j                  }|||<   J|S )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  rS   r  s        rF   get_target_sourceszNinjaBackend.get_target_sources	  s{    ,7MM##%% 	 	A a&& e&'c'c'c'cddd!!$"344ADGGrH   c                   t          |t                    r|j        }| j                            |          s| j                            |          rdS t          j                            |          d         dd          	                                }t          j        D ]#}||j        vr||j        |         j        v r dS $dS )NFr   T)r   r   fnamer   
is_llvm_iris_assemblyr  r  splitextlowerr   LANGS_CANT_UNITYr   file_suffixes)r   r  sourcesuffixlangs        rF   get_target_source_can_unityz(NinjaBackend.get_target_source_can_unity  s    fd## 	"\F&&v.. 	''//	5!!&))!,QRR06688- 	 	D6+++)$/===uu >trH   build.Targetcompcompilers.Compilerunity_sources T.Optional[T.List[FileOrString]]c                    |                                 }|                                } j        |         }	|t          |          f}
|	                    |
d          }|~t          |t                    r|                    d          }|                    | j	                  }||j
                                        |                                |g g g d}||	|
<   d fd	|d
                             fd|D                        |d                             fd|D                        |r)|d                             fd|D                        dS dS )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_sourcesr8  filer4   r<   r;   c                    t          | t                    r |                     j        j                  S t
          j                            t
          j                            j        |                     S )z Make source files absolute )	r   r   absolute_path
source_dirr  r  r  normpathr   )r@  r   s    rF   compute_pathzENinjaBackend.create_target_source_introspection.<locals>.compute_pathL  sX    $%% K))$/4>JJJ7##BGLL$F$FGGGrH   rr   c              3  .   K   | ]} |          V  d S r   rx   r   r   rE  s     rF   r!  zBNinjaBackend.create_target_source_introspection.<locals>.<genexpr>R  s+      #E#ELLOO#E#E#E#E#E#ErH   r?  c              3  .   K   | ]} |          V  d S r   rx   rG  s     rF   r!  zBNinjaBackend.create_target_source_introspection.<locals>.<genexpr>S  s+      -Y-Y!ll1oo-Y-Y-Y-Y-Y-YrH   r8  c              3  .   K   | ]} |          V  d S r   rx   rG  s     rF   r!  zBNinjaBackend.create_target_source_introspection.<locals>.<genexpr>U  s+      -U-U!ll1oo-U-U-U-U-U-UrH   )r@  r4   r<   r;   )r  get_languagerZ  tupler   r   r   r	  &compute_parameters_with_absolute_pathsr  r  get_lower_case_namer  r  )r   r  r6  r>  rr   r?  r8  r  r3  tgtid_hash	src_blockrE  s   `           @rF   "create_target_source_introspectionz/NinjaBackend.create_target_source_introspection#  s   $ mmoo  ""%c*z**+GGGT**	*l33 ='11t1<<
DDZQUQ_``J !+??AA ,,..(%'!# I %CL	H 	H 	H 	H 	H 	H 	)###E#E#E#EW#E#E#EEEE%&---Y-Y-Y-YGX-Y-Y-YYYY 	Vo&---U-U-U-U}-U-U-UUUUUU	V 	VrH   linkerT.Union[Compiler, StaticLinker]r>  r   c                V   |                                 }| j        |         }t          |          }|                    |d           }|`|                    d          }t          |t                    r|                                }	n|                                }	|	|d}|||<   d S d S )NTr;  )rR  r>  )	r  rZ  rK  r   r	  r   r   get_linker_exelistr  )
r   r  rR  r>  r  rN  lnk_hash	lnk_block	paramlistlinkerss
             rF   "create_target_linker_introspectionz/NinjaBackend.create_target_linker_introspectionW  s    mmoo%c*$$GGHd++	",,$,77I&(++ / 3355 ,,.. "' I &CMMM rH   c           
         t          t          j                  r)t          j                                       d           t          t          j                  r                                t          t          j                  r 	                               g }i }
                                }| j        v rd S  j                            |           i  j        |<                                                                                                  t          t          j                  r                                d S                                 r                                d S dj        v r                                d S dj        v r                                d S t          t          j                  }dj        v r                               \  }}}nOdj        v r                               \  }}}n,                               }                               }g }                                                                                               }	g }
                                }g }g }g }| !                              z  }|rtE          j        #                                          }|$                    tJ          j&                  }|rzd'                    |          (                                x}}|tS          |          dk    rd	nd
z  }| d| dj*        d}tW          j,        tW          j-        d          |           g }|#                                D ]O}t]          j/        |          } j0        1                    |          r|rx 2                    |          rb|3                    |           t          j4        '                     j0        5                                |          }|3                    |           |3                    |            j0        6                    |          r|
3                    |            j0        7                    |          stq          j9        |          r!|r|3                    |           :|3                    |           Qg }|D ]} j0        :                    |          r ;                    |          \  }}n <                    |d|          \  }}|3                    |           |||<   |
3                    |           |=                    d          d         t*          j>        d         v r|3                    |           ĉ ?                              }|r,@                                r A                    |          }ng } B                              \  }}|
C                    |            D                    |          }g }E                                rt          jG         fd|D                       }j        d         } H                                D ]>}!|C                    | I                     J                    |!          d                     ?g }"|D ][}t]          j/        |          } j0        K                    |          r|3                    |           F|"3                    |           \|"D ]3} <                    |dg |          \  }}|
3                    |           4|L                                D ]8} j0        K                    |          r|r j0        :                    |          r/ ;                    |          \  }}|
3                    |           i|r{ 2                    |          ret          j4        '                     j0        5                                |M                     jN                            }|3                    |            <                    |dg ||z   |z   |          \  }}|
3                    |           |3                    |           |||<   :|rl O                    |          D ]U} <                    |d||z   |z   |||          \  }}|
3                    |           |3                    |           |||<   V|rd S  P                              \  }#}$t          t          jQ                  s|
}%n jR        r S                    |
          }%n|
}% T                    |	|%|#||$          }& U                    |||            V                    |&           t          t          jW                  rr j0        jX        jY                 Z                                rKj[        rFt           j]        |#^                    |	          d|	g          }& V                    |&           d S d S d S d S )NTexist_okcsswiftr  cythonz, 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   rK  )r  c                    g | ]K}|                                 j        d                                                  |          d          LS )rl  F)	is_system)uses_fortranr   get_include_argsget_target_private_dir)r   r  r   r  s     rF   r   z0NinjaBackend.generate_target.<locals>.<listcomp>  st     1b 1b 1bEFPQP^P^P`P`1b1A)1L1]1]++A..% 2^ 2A 2A 1b 1b 1brH   rl  F)stdlib_args
AIX_LINKER)_r   r   r  r  makedirsget_target_private_dir_absr  generate_custom_target	RunTargetgenerate_run_targetr  processed_targetsr  rZ  process_target_dependenciesgenerate_shlib_aliasesr  Jargenerate_jar_target	uses_rustgenerate_rust_targetr   generate_cs_targetgenerate_swift_targetr  generate_vala_compilegenerate_cython_transpiler(  r"  scan_fortran_module_outputsgenerate_generator_list_rulesget_target_filenameis_unityr  r   keysintersectionr   r/  r   upperrB   r   r   r  redr   r  r   	is_sourcer4  r
  r  r  	is_object
is_libraryr   is_module_libraryr+  generate_llvm_ir_compilegenerate_single_compiler   r  target_uses_pchhas_pchgenerate_pchflatten_object_listr  get_fortran_order_depsrf  r   listifyget_all_linked_targetsrg  rh  r	  r  r&  r'  generate_unity_files determine_linker_and_stdlib_argsr  prelinkgenerate_prelinkgenerate_linkgenerate_dependency_scan_targetrf  r  machinesr  is_aixaix_so_archiver   r   get_archive_name)'r   r  compiled_sourcesrq   r   is_compile_targettarget_sourcesr?  transpiled_sourcesoutnameobj_listr~  r  	unity_src
unity_depslangs
langs_cant	langs_aremsggenerated_source_filesr!  raw_srcabs_srcd_generated_depsr  orS   use_pchpch_objectsodfortran_order_depsfortran_inc_argsfcr  transpiled_source_filesrR  ri  final_obj_listrh  s'   ``                                     rF   r  zNinjaBackend.generate_targetj  sA   fe/00 	PK77??$OOOOfe011 	0''///feo.. 	-$$V,,,(**,}}4)))F""4((((*%((000##FD,?,?,G,GHHH fei(( 	$$V,,,F 	%%f---F6#####F+++Ff&&&&&v...F 'vu/BCC V%%% &*%?%?%G%G#N-"")))%)%C%CF%K%K#N-""!44V<<N $ A A& I I!#((000**6222 **622==((	
t11&999 		1(--//00E++H,EFFJ 1$(IIj$9$9$?$?$A$AA	Es:':':VVE	" Y Y5 Y Y(.Y Y Y'**C000 02(--// 	, 	,G.w77G))'22 , ; @ @ Q Q ;%%g... gll4+;+I+I+K+KWUUG$$W----*11'::::!++G44 
,((((!,,W55 ,9RSZ9[9[ ," ,&--g6666
 ""7++++ 
 * 		+ 		+C**3// _44VSAA1133FCR]3^^1##A&&& M!OOAwws||B9#:3#??? ''***&&v.. 	v~~'' 	++F+LLKKK((002!88<<(*   		<'/ 1b 1b 1b 1b 1bJL1b 1b 1b  c  c
 !),B2244 < < ''(;(;//22E); ); < < < < #%% 
	8 
	8C.s33G ))#.. 8""7++++'..w7777* 	 	C//T2{SSDAqOOA "((** 	) 	)C#--c22 )6G )#..s33 )88EEDAqOOA&&&& 
)$"B"B63"O"O 
) gll4+;+I+I+K+K+.+>+>t?P+Q+QS SG$$W----77UB8CFV8VYk8k8HJ JDAq OOA&&&$++A...'(M!$ 	%00CC % %33FCzT_G_brGr4FHXZce e1""" ''***#$a   	F"CCFKK&%"566 	&%NN^ 	&!2268DDNN%N!!&'>6;do!pp,,V5E}Vhiiit fe122 	%t7G7PQWQc7d7k7k7m7m 	%$ %()96;R;RSZ;[;[]ilsktuut$$$$$	% 	% 	% 	%% %rH   'build.BuildTarget'c                   | j         sdS d|j        v rdS d|j        vrdS d|j        d         v rdS |j        d         }|                                dk    rdS |                     |t          d|j        |j                            }|d	vrdS t          j	                    sdS t          j
        |j        d
          rdS dS )NFrl  Tcppz-fmodules-tsrq  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       rF   should_use_dyndeps_for_targetz*NinjaBackend.should_use_dyndeps_for_targetI  s    % 	5(((4(((5V.u5554u%::<<6!!5++FIiFLFXIOIZ5\ 5\ 5\ ] ]
 BBB5355 	5#CK@@ 	5trH   r  r   rq   rp   object_depsc           	     v                          |          sd S d _                             |          \  }}|j        dz   }t          j                                                 |          |                              dd          }t          j                             	                    |          |                              dd          }	d}
t                               |                    }t                               |          ||          }d}t          j                            |	          rBt          |	d          5 }t          j        |          }d d d            n# 1 swxY w Y   ||k    }|r=t          |	d          5 }t          j        ||           d d d            n# 1 swxY w Y   t%           j        ||
|          }|D ]"}|j                            |d                    #|j                            |           |                    d	|j                                        |           t5                      }|                                D ]E}                      |          r.|                                         |          d                    F                     |          \  }}|                     fd
|D                        t%           j        |d|gt;          |          z             }|                    d	|j                                        |           d S )NTz.datr?   r  depscanrbr  r   r   c                n    h | ]1}|                                                     |          d          2S )r   )rf  get_dep_scan_file_forr   r  r   s     rF   	<setcomp>z?NinjaBackend.generate_dependency_scan_target.<locals>.<setcomp>  s;    YYYQHXHXY22155a8YYYrH   depaccumulate)r  r^  r  r   r  r  r   rh  rV   rl  r   select_sources_to_scanrn   r  ry  pickleloadr  r   r   r   r  r   r   r  rf  r   r  r  r#  )r   r  r  rq   r  	json_filedepscan_filepickle_basepickle_file
pickle_abs	rule_namescan_sourcesscaninfor   poldrh  rS   r   r  _r  s   `                     rF   r  z,NinjaBackend.generate_dependency_scan_targeta  s    11&99 	F!"&"<"<V"D"D	<kF*gll4#>#>v#F#FTT\\]acfggW\\$"A"A&"I"I;WW__`dfijj
	D778HIIJJ.''//N N 7>>*%% 	$j$'' %1k!nn% % % % % % % % % % % % % % %8OE 	)j$'' )1Ha((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) !!19iUU  	  	 AIMM!A$k***ffk***t!ee..00 	> 	>A11!44 >D66q99!<===((002YYYY"YYYZZZ !1<S\R]`fgn`o`oRoppffk***ts$   	E**E.1E.F//F36F33T.Iterable[T.Tuple[str, Literal['cpp', 'fortran']]]c              #    K   |D ]}t          |t          j                  r|                    | j                  }t
          j                            |          d         dd          }|                                t          j
        d         v s|dk    r|dfV  |                                t          j
        d         v r|dfV  d S )Nr   r  Crl  )r   r   r   r&  r'  r  r  r-  r.  r   r  )r   r  r1  r  s       rF   r  z#NinjaBackend.select_sources_to_scan  s      
 ' 	( 	(F&(-00 C//0ABB'""6**1-abb1Cyy{{i5e<<<s

em####	 7	 BBBi''''	( 	(rH   c                    |                                 D ]2}|                                | j        vr|                     |           3d S r   )get_dependenciesr  rp  r  )r   r  r  s      rF   rq  z(NinjaBackend.process_target_dependencies  sR    ((** 	( 	(Axxzz!777$$Q'''	( 	(rH   c                z    |j         D ]2}t          |t          j                  r|                     ||           3d S r   )rr   r   r   r(   generate_genlist_for_target)r   r  rS   s      rF   custom_target_generator_inputsz+NinjaBackend.custom_target_generator_inputs  sI     	< 	<A!U011 <00F;;;	< 	<rH   c           	     ,   g }|                                 D ]|}t          |t                    r|d         }|                                D ]H}|                    t
          j                            |                     |          |                     I}|S )Nr   )	r  r   r   r  r
  r  r  r   r  )r   r  r   r   outputs        rF   unwrap_dep_listzNinjaBackend.unwrap_dep_list  s    ((** 	J 	JA!T"" aD--// J JBGLL)<)<Q)?)?HHIIIIJrH   build.CustomTargetc           	     V   |                      |           |                     |          \  }}}|                     |          }||                     |          z  }|j        r|                    d           |j        d}nd}t          | j        |||          }|	                    |           |j
        D ]_}|                                D ]H}	|	                    t          j                            |                     |          |	                     I`|                     |j        d         |dd          |                                |j        r|d         nd |j        r|d         nd |j        |j                  \  }}
|
rd|
 d}nd	}|j        |                    |j                  }t          j                            |                     |          |          }t          j                            | j                                        |                     |                    }t          j        |d
           |                    d|           |j        r|                    dd           t;          |j        |j                                                   }|                    d|           |                    d|j!        "                    |          |z              | #                    |           | j$        %                    |&                                           d S )NPHONYCUSTOM_COMMANDCUSTOM_COMMAND_DEPr   r   )extra_bdepsr  feedenvverbose (wrapped by meson )r   Tr\  r  r[   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  get_dep_outnamer   r   r  rk  r  r   subdirr   as_posixr^   r   rf  rp  r  r  )r   r  r  
ofilenamesrM   r   r   rh  rK  r  reasoncmd_typer   	rel_dfileabs_pdir	full_names                   rF   rm  z#NinjaBackend.generate_custom_target  s   ++F333"&"A"A&"I"Iz3##F++,,V444$ 	!KK   >!'HH+H !1:xNNT% 	K 	KA--// K KRW\\$*=*=a*@*@&IIJJJJK //q0A3qrr7<B<c<c<e<eIO8a
1]a@F5UT!WWQU4:J8> 0 H HV  	6V666HHH>%,,T-=>>GT%8%8%@%@'JJIw||D$4$B$B$D$DdFYFYZ`FaFabbHK40000MM)Y///> 	-MM&),,,44==??	i%%%mV%7%>%>y%I%IH%TUUUt""6==??33333rH   c                H    |j         dk    r|j          d}nd}| |j         S )Nr   z@@)r  r   )r   r  subproject_prefixs      rF   build_run_target_namez"NinjaBackend.build_run_target_name  s>    ""#)#4 8 8 8 "#2V[222rH   build.RunTargetc                   |                      |          }|j        st          | j        |dg           }n|                     |          }|                     |          \  }}}|                     |j        d         |dd          |d          \  }}|rd| dnd}	|                     |d	g           }|                    d
|           |                    dd|j	         |	            |                    dd           | 
                    |          }
|
|                     |          z  }
|                    |
           |                     |           | j                            |                                           d S )Nr  r   r   T)r  r  r  r  r   r  r  r^   zRunning external command r[   r  )r   r   r   r   get_run_target_envr  r  ri  r  r   r  r  r  rf  rp  r  r  )r   r  r@  rh  
target_envr  rM   meson_exe_cmdr  r  r   s              rF   ro  z NinjaBackend.generate_run_target  s   0088~ 	- %T%5{GRPPDD0088J77??IAq#$($=$=fnQ>OQTUVUWUWQXBLFJ %> %L %L!M6 ;AH6V6666bH++K9I2NNDMM)]333MM-)\V[)\RZ)\)\]]]MM&),,,##F++,,V444Tt""6==??33333rH   rh  outputsr  r   r  c           
        | j                                                                         }d}g }||d|gz  }||d|gz  }|D ]d}t          |d          s|j                                        D ]7}	|	                                dk    r|	j                                        sd} n8e|                    d| j	        
                                dd	gz   |z   | j	                                        t          j                            | j	                                        | j                                                   | j	                                        | j	                                        gz   |z   |rd
gng z              d S )NFz--gcovz
--llvm-covr   clangTr  
--internalcoveragez--use-llvm-cov)r   r  r  hasattrr   r  info	is_darwinr  r   get_build_commandget_source_dirr  r  r   get_subproject_dirr  get_log_dir)
r   rh  r  r  r  targetsuse_llvm_covexe_argsr  r  s
             rF   generate_coverage_commandz&NinjaBackend.generate_coverage_command  s   *((**1133 9--H#|44H 	 	F6;// ",3355  ??$$//8O8O8Q8Q/#'LEi!1!C!C!E!E#Z0"1" '6688w||D$4$C$C$E$E$(J$A$A$C$CE E'5577'3355	7"7 " .:A())r	"C 		D 		D 		D 		D 		DrH   r  c                    |                      ddd          }|                     |g ||           |                    dd           |                     |           |                     |||           d S )Nr
  r  r  r^   zGenerating coverage reports)ri  r  r  rf  generate_coverage_legacy_rulesr   r  r  r  r)  s        rF   r  z$NinjaBackend.generate_coverage_rules  sy    $$Z1A7KK&&q"iFFF	

="?@@@q++I}lSSSSSrH   c                   |                      ddd          }|                     |dg||           |                    dd           |                     |           |r(|                      ddd          }|                     |dg||           |                    dd	           |                     |           |                      d
dd          }|                     |dg||           |                    dd           |                     |           t	          j        |d          r_|                      ddd          }|                     |dg||           |                    dd           |                     |           d S d S d S )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)ri  r  r  rf  r   r  r  s        rF   r  z+NinjaBackend.generate_coverage_legacy_rules  s   $$_6FPP&&q8*iNNN	

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

=*TUUUq!!!!!	" 	"" "rH   c                l   |                                   |                     ddd          }|                    d           |                    dd           |                    d| j                                        ddgz              |                    d	d
           |                     |           d S )Ninstallr  r  allrZ   zInstalling filesr  --no-rebuildr[   r  )create_install_data_filesri  r  r  r   r  rf  r   rh  s     rF   r  zNinjaBackend.generate_install6  s    &&(((''	3CWMMUf0111i!1!C!C!E!ETbHc!cdddfi(((trH   c                F   |                                   | j                            d          ddgz   }| j        j        j                            t          d                    s|dgz  }| j        j        j                            t          d                    r|dgz  }|                     ddg d	          }|                    d
|           |                    dd           |                    dd           | 	                    |           | j                            d          g dz   }|                     ddg d          }|                    d
|           |                    dd           |                    dd           | 	                    |           d S )NTtestr  stdsplitz--no-stdsplit	errorlogsz--print-errorlogsr  )r  meson-test-prereqr  r  rZ   zRunning all testsr[   r  )r!  z--benchmarkz	--logbasebenchmarklogz--num-processes=1r  	benchmark)r  meson-benchmark-prereqr  zRunning benchmark suite)
serialize_testsr   r  r~  r  r  r&   ri  r  rf  r   rM   rh  s      rF   r  zNinjaBackend.generate_tests?  s   0066&.9QQ(1??	*@U@UVV 	%O$$C$-;;Ik<R<RSS 	)'((C''0@BgBgBghhi%%%f1222fi(((t 0066 :A :A :A A ''5EGqGqGqrri%%%f7888fi(((trH   c                   g | _         i | _        |                     t          d                     |                                  |                     t          d                     |                                  |                     t          d                     |                                  |                                  |                     t          d                     |                     t          ddgg dd	                     |                     t          d
dgg dddd                     |                     t          d| j
                                        ddgz   ddgd                     | j
                                        dd| j
                                        dgz   }|                     t          d|g dd	                     d S )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
regeneraterc  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     rF   r  zNinjaBackend.generate_rulesV  s   
l+GHHIII##%%%l+ABBCCC##%%%l+?@@AAA'')))((***l=99::: 	i 0:,G&24 4 4 	5 	5 	5i 4zlB%*J&24 4 4 	5 	5 	5 	iT-=-O-O-Q-QUaciTj-j!&1FH H 	I 	I 	I ..00,,..  	i 2 !2 :&57 7 7 	8 	8 	8 	8 	8rH   r   r   c                :    | j                             |           d S r   )r  r
  r   r   s     rF   r3  zNinjaBackend.add_rule_commentx  s    
'"""""rH   c                :    | j                             |           d S r   )r  r
  r:  s     rF   r  zNinjaBackend.add_build_comment{  s    ""7+++++rH   r   r   c                    |j         | j        v rt          d|j          d          | j                            |           || j        |j         <   d S )NzTried to add rule z twice.)r   r2  r   r  r
  )r   r   s     rF   r8  zNinjaBackend.add_rule~  sW    9%% !Hdi!H!H!HIII
$#'di   rH   c                    |j                      | j                            |           |j        dk    rM|j        | j        v r| j        |j                 |_        d S t          j        d|j         d|j                    d S d S )Nr  zbuild statement for z references nonexistent rule )	r.  r  r
  r   r2  r   r   r  r   )r   r   s     rF   rf  zNinjaBackend.add_build  s    ""5)))>W$$~..!]5>:


uE4Fuuejesuuvvvvv %$rH   r   r   c                    | j         D ]+}t          |t                    r|                                 ,| j        D ]}|                    |           d S r   )r  r   r   r  r  r   )r   r   brs       rF   r  zNinjaBackend.write_rules  sj    $ 	* 	*A!.// *''))) 	 	AGGG	 	rH   c                    t          | j        d          D ]}|                    |           t          j        d           d S )NzWriting build.ninjar  zbuild.ninja generated)r!   r  r   r   r  )r   r   r?  s      rF   r  zNinjaBackend.write_builds  sO    T07LMMM 	 	AGGG233333rH   c                    |                      t          d                     t          | j        ddd          }|                     |           d S )Nz&Phony build target, always out of dater  r  r   )r  r   r   r   rf  r  s     rF   r  zNinjaBackend.generate_phony  sM    |,TUUVVV !17GRHHtrH   	build.Jarc           	                                          }t          j                                                           |          }                                }                                }j        d         }d}d}d}	d}
                                }|dk    rd}	 	                              }g }|
                                D ]@}t          j        |          }|                    d          r|                    |           A                     |          }                     ||z   ||          } fd|D             }t          j                                                           d	d
          }t          j                             j                                        |          }t          j        t          j                            |          d           t-          |dd          5 }t/          j                  rP|                    d            fdj        D             }|                    d                    |                     |                    d           d d d            n# 1 swxY w Y   d}||z   |	z   |
z   g}|                    |           |	dk    r|                    |           |                                                              |d                               dgz  }t7           j        ||g           }|                    |           |rO|                                         tA                                                   |          d                    |!                    d|            "                    |            #                    ||||           d S )Njavar   rE   r   r  r)  .javac                v    g | ]5}t           j                                                          |          6S rx   r  r  r   rh  )r   r   r   r  s     rF   r   z4NinjaBackend.generate_jar_target.<locals>.<listcomp>  s8    cccST"',,t'B'B6'J'JANNcccrH   zMETA-INFzMANIFEST.MFTr\  rr  rn  ro  zClass-Path: c                    g | ]G}t           j                                                |          |                                          HS rx   r  r  r   r  get_filenamer   r   r   s     rF   r   z4NinjaBackend.generate_jar_target.<locals>.<listcomp>  sB    pppWXBGLL)<)<Q)?)?AQAQRRppprH   re   rd   java_LINKER-Crc  r   ARGS)$rK  r  r  r   r  r%  get_java_resourcesr   get_main_classr"  r  r   r  endswithr
  determine_java_compile_argsgenerate_java_compilerh  r   r  rk  dirnamery  anyr  r   r}  r   r   r  r  )_NinjaBackend__generate_sources_structurer   r  rf  rQ  )r   r  r*  outname_relsrc_list	resourcesr  r   rE   r)  r  
main_classr?  gen_src_listr!  r  compile_args
class_listclass_dep_listmanifest_pathmanifest_fullpathmanifestcp_pathsjar_rulecommandsrh  s   ``                        rF   rt  z NinjaBackend.generate_jar_target  s   ##%%gll4#6#6v#>#>FF%%''--//	#F+**,,
A !==fEE(--// 	- 	-G.w77G(( -##G,,,77II//<0GQY[ghh
cccccXbcccT%@%@%H%H*VcddGLL)9)G)G)I)I=YY
BGOO$566FFFF#S7;;; 	!x6&'' 3~...pppp\b\opppsxx11222NN4   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! !EAIM?&&&77OOJ'''0088999 	T466v>>DD !1;"MM^$$$ 	zd??TE`E`agEhEh@i@iktuuvwxyyyfh'''t//,PXZfgggggs   ?A:JJ	J	!T.Tuple[T.List[str], T.List[str]]c                >   g }g }|j         D ]}t          j                            | j        |j        |          }|                    d          rd|z   }n.|                    d          s|                    d          rt          j                            t          j                            |                    d         dz   }t          j                            | 	                    |          |          }t          | j        |d|          }	|	                    dd||g           |	                    d	d
|            |                     |	           |                    |           d|z   }nt          d| d          |                    |           ||fS )Nz
.resourcesz
-resource:z.txtz.resxr   r  r  resgenrZ   zCompiling resource zUnknown resource file rc  )rZ  r  r  r   r'  r  rR  r-  basenamerh  r   r   r  rf  r
  r)   )
r   r  r   r   r@  rel_sourcefiler   	ofilebase	ofilenamerh  s
             rF   generate_cs_resource_tasksz'NinjaBackend.generate_cs_resource_tasks  s   ! 	 	AW\\$*;V]ANNNzz,'' F >1F## 
Fqzz'':': 
FG,,RW-=-=a-@-@AA!D|S	GLL)D)DV)L)LiXX	()99FVXfggi(NI)NOOOf&LN&L&LMMMt$$$I&&& 9,&'D'D'D'DEEEKKNNNNTzrH   c                    |                                 }t          j                                                 |          |          }|                                }|j        d         } fd|D             }g }                     ||          }||j        d         z  }t          |t          j                  r|                    d           n?t          |t          j                  r|                    d           nt          d                               |          \  }	}
||	z  }||
z  }||                    |          z  }|j        D ]t}t          j                                                 |          |                                           }||                    |          z  }|                    |           ud|v r||dz   g}n|g}                     |          }g }|                                D ]}|                                                    d          r2|                    t          j                            |                     |                    t          j                            |                     |                                D ])}|                    |                                           *t5           j        |                     |          ||z             }|                    |           |                    d	|                                |                                 |            !                    |||||           d S )
Nr^  c                ~    g | ]9}t           j                            |                    j                            :S rx   )r  r  rD  r&  r'  )r   rS   r   s     rF   r   z3NinjaBackend.generate_cs_target.<locals>.<listcomp>  s:    ]]]qBG$$Q%6%6t7H%I%IJJ]]]rH   z-target:exez-target:libraryzUnknown C# target type.-gz.mdbz.csrO  )"rK  r  r  r   r  r%  r   generate_basic_compiler_argsr  r   r   r  r
  r  r   rm  get_output_argsr  get_link_argsr"  r  r.  rR  rD  get_external_depsextend_directr   r   r  r  r  rf  r|  rQ  )r   r  r*  rX  rY  r  rel_srcsr   re  resource_argsresource_depsr   lnamer  r?  generated_rel_srcsr!  r   rh  s   `                  rF   rw  zNinjaBackend.generate_cs_target  sN   ##%%gll4#6#6v#>#>FF%%''#D)]]]]T\]]]44VXFFF%d++fe.// 	<OOM**** 344 	<OO-.... !:;;;)-)H)H)P)P&M!H,,[999$ 	 	AGLL!4!4Q!7!79I9IJJE..u555HKK8"K&$89GG"mG ==fEE(--// 	3 	3G}}''.. E"))"'*:*:7*C*CDDDKK((112222++-- 	8 	8C""3#4#4#6#67777 !17D<V<VW_<`<`bjmb  A  ATfh'''t**6222//(HVhiiiiirH   c                   g }|                      ||          }||                                z  }||                    |                     |                    z  }||                                z  }|                                }t          j                            | j	        |          t          j
        z   }|t          j                            |          t          j
        z   z  }|j        D ]T}|                                D ]=}|t          j                            | j	        |j        |          t          j
        z   z  }>U|d|gz  }|S )Nz-sourcepath)rq  get_java_argsrr  rh  get_classpath_args
get_subdirr  r  r   r'  pathseprD  include_dirsget_incdirscurdir)r   r  r  r   r  
sourcepathr   idirs           rF   rS  z(NinjaBackend.determine_java_compile_args  s2   00BB$$&&&(()D)DV)L)LMMM))+++""$$W\\$"3V<<rzI
bg&&v..;;
$ 	[ 	[A [ [bgll4+<ahMMPRPZZZ

[
++rH   c                R     fd|j         D             }                     |          }|                                D ],}|                    d          r|                    |           -g }g }	g }
|D ]}|                     j                  }|                    |           |j        d d         dz   }|	                    |           t          j	        
                                         |          |          }|
                    |           t           j        |
                     |          |          }|                    |           |                    d|           |                    d                     |                                          |           |	S )Nc                    g | ]G}t           j                                                |          |                                          HS rx   rJ  rL  s     rF   r   z6NinjaBackend.generate_java_compile.<locals>.<listcomp>)  sA    ddd1T0033Q^^5E5EFFdddrH   rF  classrO  FOR_JAR)r  r"  r  rR  r
  r&  r'  r*  r  r  r   rh  r   r   r  r  r  r}  rf  )r   r  r  r  r   r   r?  r!  rv  plain_class_pathsrel_objsr  plain_class_pathrel_objelements   `              rF   rT  z"NinjaBackend.generate_java_compile(  s   ddddPVPcddd ==fEE(--// 	% 	%G(( %G$$$ 	% 	%C))$*;<<GOOG$$$"y"~7$$%5666gll4#>#>v#F#FHXYYGOOG$$$$#D$4h@Z@Z[c@d@dfnoo&&&D$<$<V$D$DEEEw  rH   c                `    d}ddg}d}|                      t          ||g |                     d S )NrM  jar$ARGSzCreating JAR $out)r8  r   )r   r   r   r^   s       rF   generate_java_linkzNinjaBackend.generate_java_linkA  s<    '")igr;??@@@@@rH   c                   t                      }t          j        |j        |j                  D ]}|                                s|j        D ]}t          |d          r|j        }|	                    d          d         t          j        d         v rQ|j        }t          j                            |                     |          |          }|                    |            nt%          |          S )a  
        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*  rc  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          rF   determine_dep_vapisz NinjaBackend.determine_dep_vapisG  s     ?6#68QRR 
	 
	C))++ [  1g&&  A773<<#y'>v'FFF"}H!w||D,?,?,D,DhOOHJJx(((E	 G
 F||rH   r  yT.Tuple[T.MutableMapping[str, File], T.MutableMapping[str, File], T.Tuple[T.MutableMapping[str, File], T.MutableMapping]]c                |   t                      }t                      }t                      }t                      }|                                D ]}}t          |t                    st	          d|d|          |                    | j                  }|                    d          r|}n|                    d          r|}n|}|||<   ~|                                D ]}	|		                                D ]}| 
                    ||	|          }|                    d          r|}n|                    d          r|}n|}||v rl||         |	urbd                    |t          |	          j        |	j        ||         j        t          ||                   j                  }
t	          |
          |	||<   ||||ffS )a}  
        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'  rR  r  r  r
  r   typers   r   )r   r  r  vapiothers	othersgenrS   r  srctyper   r  s              rF   split_vala_sourceszNinjaBackend.split_vala_sources\  s    -8MM,7MM.9mm1<	 	 	A a&& p&'n'n'nij'n'nooo!!$"344Azz*++ !G$$ ! GAJJ--// 	$ 	$F'')) $ $11!VQ??::.// ("GGZZ(( ("GG (G<<GAJf$<$<#VAtF||'<fk$+AJOT'!*5E5E5NP P  +3///#

%$& TFI...rH   NT.Tuple[T.MutableMapping[str, File], T.MutableMapping[str, File], T.List[str]]c                   |                      |          \  }}}g }|st          d|j        d          |j        d         }|                     |          }g }g }	t          |          }
t          j                            | j	        |
                                          }|                                D ]\  }}|
                    |           t          |t          j        t          j        f          s|j        r*t          j                            t          j                            |                    d         dz   }t          j                            | j                                        |
                                          }t          j                            | j                                        |          }t/          ||          rTt1          |          j                            |          }t          j                            t7          |          |          }nt          j                            | j	        |
                                          }|                    |          rGt          j                            t          j                            ||                    d         dz   }nEt          j                            t          j                            |                    d         dz   }t          j                            ||          }|                    |           |	                    |           |                     ||          }||                    |                      |d                    z  }|d|gz  }|d|gz  }|!                                r|d	|j        gz  }t          j                            | "                    |          |j#                  }|d
|gz  }| $                    |          r|dgz  }|	                    |           t          j                            | "                    |          |j%                  }|dt          j                            d|j%                  gz  }|	                    |           tM          |j'                  dk    r0|j'        d         du r!| j        (                                |j'        d<   tM          |j'                  dk    rO|j'        d         du r@t          j                            | j        )                                dd          |j'        d<   t          |j*        t6                    r&t          j                            | "                    |          |j*                  }|dt          j                            d|j*                  gz  }|	                    |           |+                    d          }t          |t          j,                  r|d| -                    |          gz  }tM          |j'                  dk    rN|j'        d         du r?t          j                            | j        )                                d          |j'        d<   g }|d         .                                D ]}t          |t^          j0                  r}| 1                    |          \  }|d|z   gz  }|j2        D ]}||gz  }	|3                                \  }|t          j                            | "                    |          |          gz  }ti          |          D ]}|d| gz  }| 5                    |          }||z  }|6                    | 7                    |                     ||8                    d          z  }ts          | j:        |	| ;                    |          |
|z             }|<                    d|           |=                    |           | >                    |           | ?                    ||||
g            |d         |d         |fS )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=rO  )@r  r)   r   r   rh  r   r  r  r   r'  r~  itemsr
  r   r   r  r(   is_builtr-  ri  r   r  r  r%   r
   parentr  r;   r   relpathrq  get_colorout_argsr  r  r  r  r~  r  rB   install_dirget_includedirget_datadirvala_girr   r  get_target_filename_for_linkingr  r   GResourceTargetget_custom_target_sourcessource_dirsr  r   r  r  r  get_extra_argsr   r   r  r  r  rf  rQ  )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_xmlrC  gres_cgres_dirdependency_vapisr  s                                  rF   ry  z"NinjaBackend.generate_vala_compile  s    +/*A*A&*I*I'8Y 	g"#e6;#e#e#efff (//77	"$
 "NN	W\\$"3V5F5F5H5HII
#+>>#3#3  	.  	.YY''' &5#5u7J"KLL ZPVP_ Z g..rw/?/?	/J/JKKANQUU!#d.>.M.M.O.OQWQbQbQdQd!e!e "T-=-K-K-M-My Y Y!.-@@ P$,]$;$;$B$N$N~$^$^M"$',,s=/A/A;"O"OK!#d.?ARARATAT!U!U''77 Z"$'"2"227??9n3]3]"^"^_`"adh"hKK"$'"2"2273C3CI3N3N"O"OPQ"RUY"YK',,y+>>Kk***  ----00??''(>(>v|(T(TUUU 		**j))$$&& "	d[&+..DGLL!4!4V!<!<f>PQQEZ''D}}V$$ )
 ((  '''w||D$7$7$?$?AQRRH Xrw||D&2BCCDDD  ***6%&&**v/A!/D/L/L(,(8(G(G(I(I"1%6%&&**v/A!/D/L/L(*T5E5Q5Q5S5SU[]c(d(d"1%&/3// 	d',,t':':6'B'BFOTT"',,tV_"E"EFF$$W--- &

8 4 4mU-@AA f/1U1UVc1d1deeDv)**Q..63Ea3HD3P3P,.GLL9I9U9U9W9WYb,c,cF&q)	l))++ 
	W 
	WF&'"9:: 	W ::6BB	8344"("4 . .J*-II !,,..BGLL1D1DV1L1Lf$U$U#VV"9-- 	4 	4H22233DD33F;;++t;;FCCDDD%%f---#D$4m$($>$>u$E$E$-0@$@B B 	&&&(((w//tYPRSSS|Yq\:55rH   c                
   t                      }t                      }g }|j        d         }g }||                                z  }||                    |                     |d                    z  }||                    |                     |d                    z  }||                    || j        |j                  z  }||	                    || j        |j                  z  }|| j
                            ||j                  z  }|| j
                            ||j        |j                  z  }||                    d          z  }|                     |t          d|j                            }g }|                                D ]2}	|	                    d          rt$          j                            |                     |          |	 d|           }
t-          | j        |
g|                     |          |	                    | j                                        | j                                                  g          }|                    d|           |                     |           |                    |
           |                    |           |	||	                    | j                   <   4g }|!                                D ]}|"                                D ]}tG          |tH                    r4t$          j                            |                     |          |          }n2t$          j                            |%                                |          }|                    d          rt$          j                            |                     |          | d|           }
t-          | j        |
g|                     |          |g          }|                    d|           |                     |           |                    |           |                    |
           NtL          j'        (                    |%                                |          ||<   | j        )                    |          s]| j        *                    |          sC| j        +                    |          s)tY          j-        |          s|                    |           |D ]}|.                    |           |||fS )	z7Generate rules for transpiling Cython files to C or C++r`  r"  optimizationcython_language)r=  z.pyxrc  rO  )/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%  rR  r  r  r   rh  r   r   r  rB  r  r  r  rf  r
  r&  r'  r  r  r   r(   r~  r   r   r  r  r  r  r   r  r  )r   r  static_sourcesr?  cython_sourcesr`  r   r  pyx_sourcesr  r  r  r  genssrcr1  s                   rF   rz  z&NinjaBackend.generate_cython_transpile  s    7Bmm9D&(!(+&&(((%%d&<&<VW&M&MNNN,,T-C-CFN-[-[\\\..vt7GIZ[[[**643CVEVWWW
**663EFFF
++FF4EvGYZZZ%%h///$$VY7HRXRd-e-e-eff%%'' 	M 	MC||F## Md&A&A&&I&Ic>>TW>>ZZ+$vh..v66&&t'7'F'F'H'H$JZJhJhJjJjkkln n   ...w'''%%f---""7++++ILs2243DEEFF//11 	1 	1C)) 1 1c=11 @7<<(C(CF(K(KTRRDD7<<(8(8$??D==(( 1W\\$*E*Ef*M*MRVY\__F/(6(226::   G $$VT222NN7+++&&w///"))&1111.6m.K.KCNNL\L\^b.c.c%d+  +55d;; 1 $ 0 : :4 @ @1 $ 0 ; ;D A A1 !( 9$ ? ?1 $**4000112 " 	- 	-F,,,,0.@@rH   r  r4   r  r   c                *   t          |t                    r+|                    | j        j        | j        j                  }n|}t          | j        t          |          gd|g          }|	                    |           | 
                    |           dS )zCCreate a target to copy a source file from one location to another.r.  N)r   r   rB  r   rC  r  r   r   r;   r  rf  )r   r  r  instrrh  s        rF   _generate_copy_targetz"NinjaBackend._generate_copy_targetR  s    c4   	%%d&6&A4CSC]^^EEE !1CKK=+PUwWW%   trH   rootstructured_sourcesbuild.StructuredSources%T.Tuple[T.List[str], T.Optional[str]]c           
     r   d }g }|j                                         D ]\  }}|D ]}t          |t                    ri||z  t	          |j                  j        z  }|                    t          |                     | 	                    ||           |t          |          }|
                                D ]u}	||z  |	z  }|                    t          |                     | 	                    t          t	          |j                  |	z            |           |t          |          }v||fS r   )rr   r  r   r   r   r*  r   r
  r;   r  r  r  )
r   r  r  
first_filer   r  filesr@  r   r  s
             rF   __generate_sources_structurez)NinjaBackend.__generate_sources_structure\  sD   &*
!#	-5;;== 	2 	2KD% 2 2dD)) 2+TZ(8(8(==C$$SXX.....tS999!)%(XX
!--// 2 2"TkAo!((S222223tDK7H7H17L3M3MsSSS%-),SJ22 *$$rH   r   main_rust_filer   r?  r@  from_subprojectrG  r   rC  c	                   t          j        t          |          d           }	|	sdn|	                    d          d         }
g }t	          |          }|D ]j}|dk    r#|                    t          |                     +|                    d          r*|                    |t          d          d                     kt          t          | j
                  |||||
||| |d u|          }|| j
        |<   d S )Nc                ,    |                      d          S )Nz	--edition)r   )r   s    rF   rG   z6NinjaBackend._add_rust_project_entry.<locals>.<lambda>t  s    PQP\P\]hPiPi rH   r7   =r   z--cfg)rF  rE  rG  )r   firstreversedr   iterr
  nextr   rB   r;  r\  )r   r   r  r   r?  r@  r  rG  r   raw_editionrB  rD  arg_itrr:   r4  s                  rF   _add_rust_project_entryz$NinjaBackend._add_rust_project_entryp  s    (0~htnnFiFi'j'j/:!Z@Q@QRU@V@VWY@Z#':: 	/ 	/Cg~~

4==))))(( /

3s7||}}-... !!$3 3/t;"7
 
 
 "'rH   
dependencyr-   c                t    |j                             |j        |j                                      dd          S )N-r  )rust_dependency_mapr   r   rV   )r   r  r  s      rF   _get_rust_dependency_namez&NinjaBackend._get_rust_dependency_name  s3     )--jozOOWWX[]`aaarH   T.Tuple[T.List[str], str]c                8    g }d }|j         r|j                                         rC                     t                               |                    dz  |j                   \  }}n|j                                         }t          |t                    r|                     j	                  }nt          |t                    rLt          j                                                 |          |                                d                   }nJt          j                            |                                |                                d                   }g }|j                                         D ]yt          t                    r.|                                         j	                             E|                     fd                                D                        z j                            |           |                    |           |                                D ]}||                     j	                  }|                                D ]}|                                D ]}t          |t                    r4t          j                                                 |          |          }n2t          j                            |                                |          }||}|                    |           ||fS )N
structuredr   c                f    g | ]-}t           j                            j        j        |          .S rx   )r  r  r   r'  r  )r   rS   r  r   s     rF   r   z6NinjaBackend.generate_rust_sources.<locals>.<listcomp>  s@     %? %? %?)* &(W\\$2CQXq%Q%Q %? %? %?rH   )r  
needs_copyrW  r   rh  r  r   r   r&  r'  r(   r  r  r   r  r~  as_listr
  r  rY  r   r%  r  )	r   r  r   r  _odsgr   r*  r  s	   `       @rF   generate_rust_sourcesz"NinjaBackend.generate_rust_sources  s   !#	
 $ 	#(3355 @'+'H'H//77J9 J9;GJHIOIb(d (d$nn -88::a&& V%&%6%6t7H%I%INN=11 V%'W\\$2M2Mf2U2UWXWdWdWfWfghWi%j%jNN%'W\\!,,..!--//RSBT%U%UN2::<< @ @A!!T** @A$5$5d6G$H$HIIII %? %? %? %? %?./mmoo%? %? %? @ @ @ @'..t444T"""##%% 	F 	FA%!"!2!243D!E!E--// 	( 	(A]]__ ( (a// <GLL)D)DV)L)LaPPEEGLL;;E!)%*N  ''''( .((rH   rustcr   src_crate_typer   c                   t          j        ||| j                  }|                     |          }|                    d|g           |j        dv r'|                    |                                           ||                     ||          z  }|d|j        	                    dd          	                    dd          	                    dd          gz  }|r||
                    ||          z  }||                    |          z  }|dd	|                                z   gz  }||                    d
          z  }|S )Nz--crate-type>   bindylibz--crate-namer  r  re   rc  rN  z	metadata=r  )r   get_base_compile_argsr   r}  r  rust_crate_typeget_linker_always_argsrq  r   rV   get_dependency_gen_argsrr  r  r  )r   r  r  r   r   r   r@  s          rF   get_rust_compiler_argsz#NinjaBackend.get_rust_compiler_args  sE    .vud>NOO..v66^^4555 !%555KK446677711&%@@@!4!4S#!>!>!F!FsC!P!P!X!XY\^a!b!bcc 	HE11+wGGGD%%k222{V]]__455%%f---rH   ?T.Tuple[T.List[str], T.List[str], T.List[RustDep], T.List[str]]c           	        g }g }g t          |t          j                  s^	 |                     |d          }|                     |d          }|                    ||          z  n# t
          t          f$ r Y nw xY wt          j        |j	        d          rdnddd fd}| 
                    |          \  }}	|D ]/}
                    d|
            |                    |
           0|                     |	          }t          j                    }|j                                        }|                                }|D ]+}|                    |j                   |                    |                     |                     t          |t          j                  r|                    |j                   |                                r|t-          j        |j        |j                  vr|                     ||          }dd                    ||                     |                    gz  |                    t;          || j        |j                 j                              -| !                    |          }||j        v }t          |t          j                  s.t          |t          j"                  rf|#                                rRt          |t          j                  }rtH          j%        &                    |          n|j        } ||||           |r,|j'        (                    |g          }d |D             z                      d|            -|D ]5}|)                                D ]}||j*        v r|+                    d          r                    |           8|,                    d          rt          |t          j                  rtH          j%        -                    |          \  }}|                    |           sAtH          j%        .                    |          \  }}|+                    d          r
|dd          }|,                    d          } |||                               d|            7|D ]}|pd}                    d|                                d |/                    d          D                        ta          d |D                       }ta          d |D                       }|j1        dv s|rddgz  t          |t          j2                  s|r| 3                    ||          z  |||fS )!N	buildtypeb_vscrtz	>= 1.67.0z	+verbatimr   Flibnamer;   staticrb   bundlec                    |rdnd}g }|s|r|                     d           r|                                |r|dd                    |          z   z  }                     d| d|             d S )Nr  r  z-bundlerg   ,-lr  )r
  r   )r  r  r  type_	modifiersr   verbatims        rF   _link_libraryzCNinjaBackend.get_rust_compiler_deps_and_args.<locals>._link_library  s     &3HHGEI ,f ,  +++ +  *** 3sxx	2222KK.U..W../////rH   -Clink-arg=z--externz{}={})r  c                    g | ]}d | S )r  rx   r   r   s     rF   r   z@NinjaBackend.get_rust_compiler_deps_and_args.<locals>.<listcomp>*  s!    DDDq*q**DDDrH   -L)z.dllz.soz.dylib.a.liblibr{   )r  r  rc  c              3      K   | ]	}d | V  
dS )r  Nrx   r  s     rF   r!  z?NinjaBackend.get_rust_compiler_deps_and_args.<locals>.<genexpr>G  s+      SS!%!%%SSSSSSrH   r  c              3  J   K   | ]}t          |t          j                  V  d S r   )r   r   r  r   r   s     rF   r!  z?NinjaBackend.get_rust_compiler_deps_and_args.<locals>.<genexpr>I  s/      ZZsje.ABBZZZZZZrH   c              3  T   K   | ]#}|                                 o
|j        d k    V  $dS )r  N)ru  r  r   s     rF   r!  z?NinjaBackend.get_rust_compiler_deps_and_args.<locals>.<genexpr>J  sO       #; #;'* $'==?? $F'*':g'E#; #; #; #; #; #;rH   >   r  
proc-macrorN  zprefer-dynamicF)r  r;   r  rb   r  rb   )4r   r   r  r  get_crt_link_argsKeyErrorAttributeErrorr   r  r  r  r
  r  r   external_depsr<  r  r  r  get_dependency_filenamer  uses_rust_abir  r  r  r  r  r   r}  r3  r\  r   r<  r  r  get_crt_staticr  r  ri  rR  get_link_whole_forrs  native_static_libsr   rR  r   r-  get_used_stdlib_argsrV  r  r  get_build_rpath_args)r   r  r  r   project_depsr  crtr  objsr  r  r  linkdirsr'  target_depsrK  d_namer  
link_wholer  r  link_whole_argsr)  r   dir_r  has_shared_depshas_rust_shared_depsr   r  s                               @@rF   get_rust_compiler_deps_and_argsz,NinjaBackend.get_rust_compiler_deps_and_args  s   (*
 &%"566 	 226;GG	,,VY??//Y???n-    #EM;?? 	"HHH		0 		0 		0 		0 		0 		0 		0 		0 ++F33b 	 	AKK)a))***KKNNNN!88<<&((,1133--// '	1 '	1ALL"""KK44Q77888!U011 6$$Q_555   
IOF,?AZ[[[[ 77BBW^^FD<T<TUV<W<W%X%XYY##GFD4DQV4L4R$S$STTT 66q99Cf77J&%"566 1:feN^;_;_ 1didxdxdzdz 1#Au':;;3;G"'**3///gvjAAAAA 1"',"A"A3%"H"HDDODDDD/#//0000 	3 	3A__&& 3 3000\\$'' 3KKNNNNZZ GHH 
3ZX^`e`sMtMt 
3 "a 0 0ID#LL&&&# *#%7#3#3C#8#8S>>%00 *"%abb'CZZ77F!M#v....KK 1a 1 12222!3$  	" 	"ASAKKQ!!!! 	SSv/J/J6/R/RSSSSSSZZkZZZZZ" #; #;.9#; #; #;  ;  ; !%<<<@T< T+,,Dfe122 	=o 	=D--fe<<<D't;;s   AA* *A>=A>c           
     >   t          j        d|j        d                   }|                     |           |                                D ]<}|                    |          s%t          d|                                 d          =|                                D ]S}|	                                D ]<}|                    |          s%t          d|                                 d          =T| 
                    |          \  }}|                     |          }|t          d          |                                }t          j                            |                     |          |j        dz             }	||                     |||j        |	          z  }|                     ||          \  }
}}}||z  }d }|j        dk    r|                     |          }|                     |j        t          j                            t          j                            | j        j        |                    ||j        |t7          |j                  ||           |                     |          }t=          | j        |||          }|r|                     |           |r|                     |           |
r|!                    |
           |"                    d|           |"                    d	|	           | #                    |           tI          |tJ          j&                  r| '                    |           | (                    ||||gg            |j)        r|j)        j*        J |+                    | j                  }|,                                }||                     |j)        j*        ||j                  z  }|                     |j)        j*        |          \  }}}}||z  }|-                                |gz   |j)        j.        z   |j)        _.        d S d S )
Nr3   r  zRust target z! contains a non-rust source file.zKA Rust target has no Rust sources. This is weird. Also a bug. Please reportz.dr"  rO  r]   )/Tcastr   r|  r%  can_compiler)   get_basenamer  r  r  r}  RuntimeErrorcompiler_argsr  r  r   rh  r   r  r  r:  get_target_filename_absr  abspathr   r  rb   r  r  r   r   r  r  r  rf  r   r   r  generate_shsymrQ  doctestsr  get_rustdocget_exe_argsr	  cmd_args)r   r  r  r   r  r   r  r@  r   r   r   r  r/  	deps_argsrG  compiler_namer  rustdocr  s                      rF   rv  z!NinjaBackend.generate_rust_targetY  s7   ~v'7'?@@**6222##%% 	p 	pA$$Q'' p&'nf6I6I6K6K'n'n'nooop--// 	t 	tA]]__ t t((++ t*+r&:M:M:O:O+r+r+rssstt %)$>$>v$F$F!	>..v66!lmmm""$$',,t::6BBFKRVDVWW++FE6;QSZ[[[<@<`<`agin<o<o9 ,		 $!\11$($@$@$H$H!$$V[%'W__RW\\$BRB\^l5m5m%n%n%)6+A;%)&*;%<%<%:%1	3 	3 	3 22599#D$4k=R`aa 	,  +++ 	5  !3444 	"OOD!!!&&&g...wfe122 	('''//tnEUWYZZZ? 	f?)555''(899G''))DD//0FQWQghhhD!%!E!EfoF\^e!f!fAq!YID'+~~'7'7>:J'JV_Me'eFO$$$	f 	frH   r  r   c                .    t          dd          |          S )N
_FOR_BUILDr   )r    )r  s    rF   get_rule_suffixzNinjaBackend.get_rule_suffix  s    ,++K88rH   COMPILERr3  modec                :    | d| |                      |           S )Nr  )rN  )clsr3  r  rP  s       rF   r  z#NinjaBackend.get_compiler_rule_name  s)    AAAs22;??AAArH   r  c                h    |                      |                                |j        |j                  S r   )r  rJ  r  rP  rR  r  s     rF   r  z"NinjaBackend.compiler_to_rule_name  s-    ))(*?*?*A*A8CWYaYfgggrH   c                ^    |                      |                                |j        d          S )NPCH)r  rJ  r  rT  s     rF   r  z&NinjaBackend.compiler_to_pch_rule_name  s*    ))(*?*?*A*A8CWY^___rH   c                    t           j                            |                     |          |                     |          dz             S )Nz.swiftmodule)r  r  r   rh  target_swift_modulenamer   r  s     rF   swift_module_file_namez#NinjaBackend.swift_module_file_name  sC    w||D77?? 88@@>QS S 	SrH   c                    |j         S r   )r   rY  s     rF   rX  z$NinjaBackend.target_swift_modulename  s
    {rH   c                    g }|j         D ]?}|                     |          r(|                    |                     |                     @|S r   )r  is_swift_targetr
  rZ  r   r  r  r   s       rF   determine_swift_dep_modulesz(NinjaBackend.determine_swift_dep_modules  sU    $ 	> 	>A##A&& >d99!<<===rH   c                n    g }|j         D ]*}|                    |                     |                     +|S r   )r  r
  r}  r^  s       rF   get_swift_link_depsz NinjaBackend.get_swift_link_deps  sA    $ 	7 	7AMM$221556666rH   c                    |                      |          }g }g }|D ]B}|                    d          r|                    |           -|                    |           C||fS )Nz.swift)r"  rR  r
  )r   r  all_srcsr  r  r   s         rF   split_swift_generated_sourcesz*NinjaBackend.split_swift_generated_sources  sr    44V<< 	! 	!Azz(## !Aa    V|rH   c           	                               |          }|j        d         }g }g }g }g }|                                D ]}|                    |          r|                     j                  }	t          j                            t          j        	                     j
                                        |	                    }
|                    |	           |                    |
            j
                            |          r|                     j                  }t          j                            t          j        	                     j
                                        |                    }|                    |           ||                    |          z  }ht          d|                                 d          t          j                             |          d                                ||          }||                    |          z  }t+          |                                          D ]}|                                }|                                D ]}|dvr!t          j        	                    ||          }n|}t          j                            t          j        	                     j
                                         j        |                    }|                    |d          }||z  }||                    d          z  }|                    t          j        	                     j
                                                             |                              }| j                            ||j        |j                   z  }| j        !                    ||j                   z  } "                    |          } #                    |          } $                    |          } %                    |          }g }|D ]}||                    |d          z  } &                    |          } fd|D             }|j'        D ]x} (                    |          }|d	k    rd
}|dt          j                            t          j        	                     j
                                        |                    gz  }y )                    |          \  }} fd|D             }g } g }!||z   D ]}t          j        *                    |          }"t          j        +                    |"          d         dz   }#|                     |#           |!                    t          j        	                     "                    |          |#                      ,                    |          }$t[           j.        |!|$|          }%|%/                    ||z              |%/                    |           |%0                    d|1                                |z   |z   |z   |z              |%0                    d|            2                    |%           d |D             }&t[           j.        ||$|          }%|%/                    ||z              |%0                    d|3                                |&z   |z   |z              |%0                    d|            2                    |%           ti          |t:          j5                  rV 6                    |                     |          |! j        j7        |j                            }% 2                    |%           nti          |t:          j8                  rt[           j.                             |          |$g           }%|%/                    |!           |%/                    |           |%0                    d||9                                z   | z   |z              |%0                    d|            2                    |%           ntu          d           ;                    ||||z   |z   ||           d S )Nr_  zSwift target z" contains a non-swift source file.Tr\  r   rc  Fc                ~    g | ]9}t           j                            j                                        |          :S rx   r  r  r   r   r  r   s     rF   r   z6NinjaBackend.generate_swift_target.<locals>.<listcomp>  s8    ^^^qd&6&D&D&F&FJJ^^^rH   r   rc  r  c                ~    g | ]9}t           j                            j                                        |          :S rx   rh  r   s     rF   r   z6NinjaBackend.generate_swift_target.<locals>.<listcomp>  s8    bbbqd&6&D&D&F&FJJbbbrH   r   z.orO  RUNDIRc                    g | ]
}|d k    |S )rp  rx   )r   els     rF   r   z6NinjaBackend.generate_swift_target.<locals>.<listcomp>	  s    @@@rR4ZZZZZrH   z:Swift supports only executable and static library targets.)<rX  r   r%  r>  r&  r'  r  r  rD  r   r   r  r
  r	  get_header_import_argsr)   r?  rk  rl  rq  get_module_argsr  get_include_dirs
get_curdirr  rg  r  rr  r}  r   get_project_link_argsr  r  get_global_link_argsrh  rZ  r_  determine_swift_dep_dirsra  r  r  rd  ri  r-  r  r   r   r  r  get_compile_only_argsrf  get_mod_gen_argsr   r  r  static_linkerr  get_std_exe_link_argsr   rQ  )'r   r  module_nameswiftcabssrcrelsrcabs_headersheader_importsr   relsabssrelhabshr]  basedirrK  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   rh  mod_gen_argss'   `                                      rF   rx  z"NinjaBackend.generate_swift_target  s    226::!'*##%% 	r 	rA!!!$$ r(():;;w''T5E5S5S5U5UW[(\(\]]d###d####!++A.. r(():;;w''T5E5S5S5U5UW[(\(\]]""4(((&"?"?"E"EE&'pv7J7J7L7L'p'p'pqqq
D33F;;dKKKK88HH..{;;;&113344 		& 		&AllnnG]]__ & &I%%W\\'155FF$FW--bgll4;K;Y;Y;[;[]a]npv.w.wxx
//
EBB%& 	--g666**27<<8H8V8V8X8XZ^ZrZrsyZzZz+{+{||	TZ55ff>OQWQcddd	TZ44VV=OPPP	,,V4455f==::6BB77??  	A 	AAv66q%@@@OO,,V44	^^^^T]^^^$ 	j 	jA((++F||$ 0 0d>N>\>\>^>^`f1g1g h hiiII!??GGbbbbTabbb -' 	Y 	YA7##A&&DG$$T**1-4ENN5!!!rw||D,G,G,O,OQVWWXXXX--f55 !!1;&QQ_}4555[!!!ff::<<|Kn\_llo~~h'''t A@\@@@ !1?HfUU_}4555ff5577,FVYhhiiih'''tfe122 	_%%fd.F.Fv.N.N&14:3KFL^3_a aDNN4     011 	_$T%5t7O7OPV7W7WYaceffDLL%%%LL###MM&)f.J.J.L.L"Lw"VYf"fgggMM(F+++NN4     !]^^^//~@]`o@oqw  zG  	H  	H  	H  	H  	HrH   tool4T.Union['Compiler', 'StaticLinker', 'DynamicLinker'])T.Dict[str, T.Union[bool, RSPFileSyntax]]c                p    d|                                 i}|d         r|                                |d<   |S )zHelper method to get rsp options.

        rsp_file_syntax() is only guaranteed to be implemented if
        can_linker_accept_rsp() returns True.
        r   r   )can_linker_accept_rsprsp_file_syntax)r   r  optionss      rF   _rsp_optionszNinjaBackend._rsp_options&	  sD     d88::;9 	D-1-A-A-C-CG)*rH   c           	        | j         j        j                            d          }d| j         j        j        j        v r|                                  t          D ]}| j        j	        |         }|d
                    |                     |                    }g }dg}t          |t                    r,t          j                    st           d t"          D             z   }||                                z  }|dgz  }|t&                              |                    d          t,          j                  z  }|j        dk    rU|                    |           g }| j                             |d	          }|d	g}|                    d
g|z   ddgz              d}|dk    rd}	nd }	|                     |          }
|                     t;          ||||fi |
d|	i           d S )Nr  rE  zSTATIC_LINKER{}r   c                8    g | ]}|                     d           S )r/  )r   r  s     rF   r   z;NinjaBackend.generate_static_link_rules.<locals>.<listcomp>D	  s$    ,U,U,U!QXXf-=-=,U,U,UrH   
$LINK_ARGSr/  applearranlibrQ   -czLinking static target $outr   pool = link_poolr   )r   r~  r  r  r   r  r  r   r   rv  r   rN  r   r   r   r$  execute_wrapperrmfile_prefixr  r6   r   rr  rz   r   r  r  lookup_binary_entryr  r8  r   )r   r  r  rv  r   cmdlistr   r  r^   r[   r  s              rF   r6  z'NinjaBackend.generate_static_link_rules1	  s   $-6DDEXYY	T%.8===##%%%( *	^ *	^K J4[AM$$++D,@,@,M,MNND=?G7D
 -66 Vx?R?T?T V *,U,U},U,U,UU}00222G~%G++M,I,I&,Q,QSZS_```G
 9,, t$$$ )==k8TT>&ZFv$?@@@6K1}})''66GMM)D'4\\\\W[\\\]]]]U*	^ *	^rH   c           
     V   | j         j        j                            d          }t          D ]}| j         j        j        |         }|                                D ]\  }}|dv r
d                    ||                     |                    }|	                                }dgt                              |                    d          t          j                  z   ddgz   }d}	|d	k    rd
}
nd }
|                     |          }|                     t#          ||||	fi |d|
i           | j         j        |                                         rk|rid                    |                     |                    }d}	|                                }g }i }|                     t#          ||||	fi |dd i           | j                                         dd| j                                         dddgz   }d}|dgz   }d}d}|                     t#          ||g ||                     d S )Nr  >   r^  rE  r  r  r`  z{}_LINKER{}r  r/  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   r~  r  r  r   r   r  r   rN  rU  r6   r   get_linker_output_argsrz   r   r  r8  r   r  r  get_command_to_archive_shlibr  r  )r   r  r  complistlangnamer  r   r   r   r^   r[   r  r  symrulesymcmdsyndescsynstats                    rF   r7  z(NinjaBackend.generate_dynamic_link_rulesa	  su   $-6DDEXYY	( 	b 	bK'0:;GH&.nn&6&6 b b"(GGG$++Hd6J6J;6W6WXX"5577y?#7#78W8WX^8_8_aham#n#nnrw  zF  rG  G3q==-DDD++H55igt[``G``[_```aaaa(5<<>> b8 b%,,T-A-A+-N-NOO<"??AAigt[``G``[_```aaa1133++-- 
"/iWGLLLMMMMMrH   c                    |                      |          }|                                ddgz   }d}|                     t          ||g |                     d S )Nr  r   z#Compiling Java sources for $FOR_JARr  r  r8  r   r   r  r   r   r^   s        rF   generate_java_compile_rulez'NinjaBackend.generate_java_compile_rule	  s[    ))(33&&((GU+;;;igr;??@@@@@rH   'CsCompiler'c                    |                      |          }|                                }ddg}d}|                     t          ||||t	          j                    |                                                     d S )Nr  r   zCompiling C Sharp target $out)r   r   )r  r  r8  r   r   r$  r  )r   r  r   r   r   r^   s         rF   generate_cs_compile_rulez%NinjaBackend.generate_cs_compile_rule	  s    ))(33&&((5igt[(0(;(=(=4<4L4L4N4NP P P 	Q 	Q 	Q 	Q 	QrH   c           	         |                      |          }|                                ddgz   }d}|                     t          ||g |d                     d S )Nr  r   zCompiling Vala source $inr+  r,  r  r  s        rF   generate_vala_compile_rulesz(NinjaBackend.generate_vala_compile_rules	  s`    ))(33&&((GU+;;1igr;lSSSTTTTTrH   
'Compiler'c           
     n   |                      |          }d}|                                }|                    dd          }|rdnd }|ddgz   }|t                              |                    d          t          j                  z  }|                     t          |||z   g ||d                     d S )	NzCompiling Cython source $inr/  r   z$out.depr  r   r+  )r   r   )
r  r  r  r6   r   rr  rz   r   r8  r   )r   r  r   r^   r   depargsr   r   s           rF   generate_cython_compile_rulesz*NinjaBackend.generate_cython_compile_rules	  s    ))(333&&((226:FF '1**T'5))$$X%=%=f%E%Ew|TTTignb +(/&24 4 4 	5 	5 	5 	5 	5rH   c           
         |                      |          }|                                ddgz   }d}d}d}|                     t          ||g |||                     d S )Nr  r   zCompiling Rust source $inz
$targetdepr-  r   r   r  )r   r  r   r   r^   r   depstyles          rF   generate_rust_compile_rulesz(NinjaBackend.generate_rust_compile_rules	  s}    ))(33&&((GU+;;1igr;X(/1 1 1 	2 	2 	2 	2 	2rH   c           	     X   |                      |          }|                    d          }||                                |z   }n5| j                                        g dz   }||                                z   }|ddgz   }d}|                     t          ||g |d                     d S )N$RUNDIR)r	  
dirchangerr  r  r   zCompiling Swift source $inr+  r,  )r  get_working_directory_argsr  r   r  r8  r   )r   r  r   wd_argsinvocfull_exer   r^   s           rF   generate_swift_compile_rulesz)NinjaBackend.generate_swift_compile_rules	  s    ))(3355i@@((**W4EE'99;; ? ? ? H
 x33555E7E**2igr;lSSSTTTTTrH   c                    | j         S )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    rF   use_dyndeps_for_fortranz$NinjaBackend.use_dyndeps_for_fortran	  s     %%rH   T.List[build.BuildTarget]T.List[File]c                L                                       rg S  fd|D             S )Nc           
         g | ]S}|                                 t          d gt          j                                                |                    R  TS r  )rf  r   r  r  r   r}  r  s     rF   r   z7NinjaBackend.get_fortran_order_deps.<locals>.<listcomp>	  sc     % % %A>>##%TGBGMM$*B*B1*E*EFFGGG % % %rH   )r  )r   r   s   ` rF   r  z#NinjaBackend.get_fortran_order_deps	  sI     '')) 	I% % % %QU % % % 	%rH   crstrc           	        |                                  rd S d| }t          j                    rddg}ndg}|                     t	          d                     |                     t          ||g dd                     d S )	NFORTRAN_DEP_HACKrM   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$  r3  r   r8  r   )r   r  r   rM   s       rF   generate_fortran_dep_hackz&NinjaBackend.generate_fortran_dep_hack	  s    '')) 	F)%))   	$-CC(Cl ,6 7 7 	8 	8 	8 	ic2zNNNOOOOOrH   c                   | j         |j                 rd S |                     d|j                  }|                                }dgt                              |                    d          t          j                  z   |	                                z   dgz   }d}| 
                    |          }|                     t          ||||fi |           d| j         |j        <   d S )Nllvm_irr  r/  r   zCompiling LLVM IR object $inT)r[  r  r  r  r6   r   rr  rz   r   rt  r  r8  r   r   r  r   r   r   r^   r  s          rF   generate_llvm_ir_compile_rulez*NinjaBackend.generate_llvm_ir_compile_rule	  s    $X%9: 	F**9h6JKK&&((y?//0H0H0P0PRYR^___bj  cA  cA  cC  cC  C  GL  FM  M4##H--igt[LLGLLMMM:>!("6777rH   c           	        |                      d|j                  }t                              |                    dd          t
          j                  }|                                }dg|z   t                              |                    d          t
          j                  z   ddgz   }d}|	                                dk    rd}d }nd	}d}| 
                    |          }	|                     t          ||||fi |	||d
           d S )Nr  r/  r   r  z-cmr   zCompiling to C object $inrq  r-  r  )r  r  r6   r   r  rz   r   r  rr  r  r  r8  r   )
r   r  r   r  r   r   r^   r   r   r  s
             rF   "generate_tasking_mil_compile_rulesz/NinjaBackend.generate_tasking_mil_compile_rules	  s   **+@(BVWW!&&x'G'GPZ'['[]d]ijj&&((y7"_%9%9(:R:RSY:Z:Z\c\h%i%iimrtylzz1''))V33DGGD G##H--igt[hhGhRV`ghhhhiiiiirH   c                \   |                      d|j                  }|                                }ddgt                              |                    d          t          j                  z   ddgz   }d}|                     |          }| 	                    t          ||||fi |           d S )Ntasking_mil_linkr  z
--mil-linkr/  r  r   zMIL linking object $out)r  r  r  r6   r   rr  rz   r   r  r8  r   r  s          rF   generate_tasking_mil_link_rulesz,NinjaBackend.generate_tasking_mil_link_rules
  s    **+=x?STT&&((&)=)=h>V>VW]>^>^`g`l)m)mmquw|p}}/##H--igt[LLGLLMMMMMrH   r  c           	     F   |dk    r|                      |           d S |dk    r;| j        j                            |j                  r|                     |           d S |dk    r|                     |           d S |dk    r|                     |           d S |dk    r;| j        j                            |j                  r|                     |           d S |dk    r| 	                    |           d S | 
                    |j                  }|                     |          }|dk    r|                     |           d|d	<   |                     |          }|d
k    r:t                              |                    dd          t"          j                  }n9t                              |                    dd          t"          j                  }|                                }dg|z   t                              |                    d          t"          j                  z   |                                z   dgz   }d|                                 d}	|                                dk    rd}
d }nd}
d}|                     t3          ||||	fi ||
|d           d S )NrE  r^  r  r  r_  r`  rl  r+  r   r  z$CUDA_ESCAPED_TARGETr   r/  r  r   z
Compiling z object $outrq  r-  r  )r  r   r  matches_build_machiner  r  r  r  r  r  rN  r  r  r  r6   r   r  rz   r   r  rr  rt  get_display_languager  r8  r   )r   r  r  r  r  r   r  r   r   r^   r   r   s               rF   generate_compile_rule_forz&NinjaBackend.generate_compile_rule_for
  s   v++H555Ft(>>x?STT 8--h777Fv,,X666Fv,,X666Fw(>>x?STT <11(;;;Fx..x888F$$X%9::##H--y  **5111  ,GG))(33v%**8+K+KLbdn+o+oqxq}~~GG%**8+K+KFT^+_+_ahamnnG&&((y7"_%9%9(:R:RSY:Z:Z\c\h%i%iilt  mK  mK  mM  mM  M  QV  PW  WP8#@#@#B#BPPP''))V33DGGD Gigt[ < <G <%)7< < < < 	= 	= 	= 	= 	=rH   c           
        |dvrd S |                      |          }|                    dd          }|                                dk    rg }n8t                              |                    d          t          j                  }d|j        v r0d|d         _	        |
                                dgz   |z   |z   d	gz   }n7|
                                dgz   |z   |z   |                                z   d	gz   }d
}|                                dk    rd}d }	nd}d}	|                     t          ||g |||	                     d S )N>   r   r  r/  r   rq  mwccz-precompiler   r  r   zPrecompiling header $inr-  r  )r  r  r  r6   r   rr  rz   r   r  rS   r  rt  r8  r   )
r   r  r  r   r  r  r   r^   r   r   s
             rF   generate_pch_rule_forz"NinjaBackend.generate_pch_rule_for:
  sl   <''F--h77226:FF''))V33FF$))(*B*B6*J*JGLYYFX[  'F1IK**,,y87BVKugUGG**,,y87BVKhNlNlNnNnnrwqxxG/''))V33DGGD Gigr;T(/1 1 1 	2 	2 	2 	2 	2rH   c                P   d}|| j         v rd S | j                                        ddgz   }g d}d}t          ||||          }|                     |           d}| j                                        ddgz   }ddg}d}t          ||||          }|                     |           d S )	Nr  r	  )z$picklefiler/  r   z!Scanning target $name for modulesr  r/  r   z:Generating dynamic dependency information for target $name)r2  r   r  r   r8  )r   r   r   r   r^   r   s         rF   r4  z#NinjaBackend.generate_scanner_rulesT
  s    t}$$F"44669%&---97D+>>d""4466?+,R7D+>>drH   c                   t           D ]}| j        j        j        |         }|                                D ]\  }}|                                dk    r|                     |           |                                dk    r|                     |           |                     ||           | 	                    ||           |
                                D ]}|                     ||           d S )Nr  r  )r   r   r~  r   r  r  r  r  r  r  	get_modes)r   r  clistr  r  rP  s         rF   r5  z#NinjaBackend.generate_compile_rulesi
  s   ( 
	C 
	CK$-7DE&+kkmm C C"(??$$//66x@@@??$$	11;;HEEE..xBBB**8X>>>$..00 C CD228TBBBBCC
	C 
	CrH   c                    |                                 D ]?}t          |t          j        t          j        f          r)|                     ||           @d S r   )r  r   r   r  r  r  )r   r  r  s      rF   r|  z*NinjaBackend.generate_generator_list_rulesv
  sb     3355 	> 	>G'E$68O#PQQ ,,Wf====	> 	>rH   c                    |r&t           j                             j        |          n                     |                               |           fd|D             }fd|D             } fd|D             }d |D             }|S )Nc                n    g | ]1}|                     d j                                       d          2S )z@SOURCE_DIR@z@BUILD_DIR@rV   r'  )r   r   reloutr   s     rF   r   z.NinjaBackend.replace_paths.<locals>.<listcomp>
  sK        		.$*;<<DD]TZ[[   rH   c                <    g | ]}|                     d           S )z@CURRENT_SOURCE_DIR@rV   )r   r   source_target_dirs     rF   r   z.NinjaBackend.replace_paths.<locals>.<listcomp>
  s)    SSS		02CDDSSSrH   c                n    g | ]1}|                     d j                                       dd          2S )z@SOURCE_ROOT@z@BUILD_ROOT@rc  r  r   s     rF   r   z.NinjaBackend.replace_paths.<locals>.<listcomp>
  sK        		/4+<==EEnVYZZ   rH   c                :    g | ]}|                     d d          S )r?   r  r  r  s     rF   r   z.NinjaBackend.replace_paths.<locals>.<listcomp>
  s&    333		$$$333rH   )r  r  r   r'  get_target_source_dirrh  )r   r  r   override_subdirr  r  s   `   @@rF   replace_pathszNinjaBackend.replace_paths
  s     	C "T-> P P $ : :6 B B,,V44      SSSSdSSS     33d333rH   r  build.GeneratedListc                p    |j         D ]2}t          |t          j                  r                     |           3|                                }|j        }|                                }|                                } 	                    |          }|D ]}	|	
                     j                                                 |                              }
|                    |	          } fd|D             }t          |j                  dk    r	|d         n|	 |j        d}|
}nXd}|                              }t&          j                                                           |          fd|
D             }fd|D             }                     |                               |          }                     ||          }                     |                     ||          |j        r|d         nd |j        	          \  }}t&          j                             j                                                                                 }t'          j        |d
           tA           j!        ||          }|"                     fd|j         D                        |j        |#                    d           t          |          dk    r|"                    |           t          |j                  dk    r}nd}|rd| d}|#                    dd| |            t          |t          j$                  r(|"                     %                    |                     |#                    d|            &                    |           d S )Nc                v    g | ]5}t           j                                                          |          6S rx   rH  )r   ofr   r  s     rF   r   z<NinjaBackend.generate_genlist_for_target.<locals>.<listcomp>
  s8    eeeVXBGLL)D)DV)L)LbQQeeerH   r   r   r  r  c                <    g | ]}|                     d           S )z	@DEPFILE@r  )r   r   r   s     rF   r   z<NinjaBackend.generate_genlist_for_target.<locals>.<listcomp>
  s'    KKKA		+w77KKKrH   c                d    g | ],}|                     d                                d          -S )z@INPUT@z@OUTPUT@r  )r   r   
infilenamesole_outputs     rF   r   z<NinjaBackend.generate_genlist_for_target.<locals>.<listcomp>
  sG     # # # IIi44<<ZUU # # #rH   )r  )r  r  Tr\  c                :    g | ]}                     |          S rx   )r}  r   s     rF   r   z<NinjaBackend.generate_genlist_for_target.<locals>.<listcomp>
  s'    QQQ!$22155QQQrH   r  zfrom r  r  rZ   zGenerating r  )'dependsr   r   r(   r  get_generatorr  get_exe
get_inputsr  r&  r'  rh  get_arglistget_outputs_forrB   r  r   r  r  r  r   replace_outputsr  r  replace_extra_argsr  r  r   r  r  rk  r   r   r  r  r  r}  rf  )r   r  r  r   	generatorr  exe
infilelistextra_dependenciescurfile	base_argsr   outfilesprivr   r   depfilenamer  r  r  rh  whatr   r  r   s   ` `                  @@@rF   r  z(NinjaBackend.generate_genlist_for_target
  s    	< 	<A!U011 <00F;;;))++	!!''))
!99'BB! 1	! 1	!G 001BDD_D_`fDgDghhJ!--j99I..w77Heeeee\deeeL9$%%***1o!(l (+ /'77
CC',,t'B'B6'J'JKXXKKKKKKK# # # # #!# # #D''d.I.I&.Q.QS[\\D%%fdF%KKD"778<8O8OPTV]8^8^S\Sd@nQjn<CK 8 I IOGV w||D$4$B$B$D$DdFYFYZ`FaFabbHK40000$T%5|XzZZDLLQQQQy?PQQQRRR ,i111%&&**/0009$%%**%) /{.. 98v888MM&">">f">">???#u011 <T55c::;;;MM)W---NN4    c1	! 1	!rH   c                .   |                                  rdS d}| j        j        j        j                                        D ]\  }}|dk    r|} n|i | j        |                                <   dS t          j	        t          t          j                  }t          j	        t          t          j                  }i }i }|                                D ]}	|                    |	          s|	                    | j                                        | j                                                  }
t%          |
dd          5 }|D ]}|                    |          }|P|                    d                                          }||v rt-          d| d||          d	|	 d
          |	||<   j|                    |          }||                    d                                                              d          }|d         dz   |                    d                                          z   }||v rt-          d| d||          d	|	 d
          |	||<   	 ddd           n# 1 swxY w Y   i ||| j        |                                <   dS )zV
        Find all module and submodule made available in a Fortran code file.
        Nrl  asciiignorerp  errorsr   zNamespace collision: module z defined in two files r  rc  rg   r   r  r   zNamespace collision: submodule )r  r   r~  r   r  r  rW  r?  rJ   r  FORTRAN_MODULE_PAT
IGNORECASEFORTRAN_SUBMOD_PATr%  r>  rB  r  r  ry  r   rC   r.  r)   r   )r   r  r  r3  r   modresubmodremodule_filessubmodule_filesrS   r  r  r(  modmatchmodnamesubmodmatchparents
submodnames                     rF   r{  z(NinjaBackend.scan_fortran_module_outputs
  sR    '')) 	F'0:?EEGG 	 	GD!y   ! 79Df11334F
-r}==:0"-@@##%% 	< 	<A ''** t'7'F'F'H'H'+'7'E'E'G'GI IH hBBB <a < <D${{400H+"*.."3"3"9"9";";"l22"2!Nw !N !N-9'-B!N !NIJ!N !N !N#O #O O 12W--&.nnT&:&:&2&1&7&7&:&:&@&@&B&B&H&H&M&MG)0c)9K<M<Ma<P<P<V<V<X<X)XJ)_<<&6%Xj %X %X1@1L%X %XST%X %X %X'Y 'Y !Y ;<OJ7)<< < < < < < < < < < < < < < <. 4Wl3Vo3V&--//000s    DI((I,	/I,	r2   c                   |                                  rg S t          |                     |                    }| j        |                                         }t          | j                  }t          |||||          }|S )zJ
        Find all module and submodule needed by a Fortran target
        )r  r   rh  rW  r?  rC  _scan_fortran_file_deps)r   r  r  r  rU  tdepssrcdir	mod_filess           rF   get_fortran_depszNinjaBackend.get_fortran_deps
  s{     '')) 	It226::;;!&"5"5"7"78do&&+C%RR	rH   c                    t          |d          r2|j        | j        j        |j                 v r|                                S g S )Nr  )r  r  r   stdlibsr  get_no_stdlib_link_args)r   r  rR  s      rF   r,  z$NinjaBackend.get_no_stdlib_link_args  sE    6:&& 	46?dj>PQWQc>d+d+d11333	rH   c                    |                                 rC|                     |          }|s|                     |          }|                    |d          S |                    |d          S )NT)pchF)r  get_target_debug_filename_absrB  get_compile_debugfile_args)r   r  r  objfile	tfilenames        rF   r0  z'NinjaBackend.get_compile_debugfile_args  sy    b >> 	K::6BBI A 88@@	66yd6KKK66wE6JJJrH   c                ^    |                      |          }|r|                    |          S d S r   )get_target_debug_filenameget_link_debugfile_namer   rR  r  r  s       rF   r5  z$NinjaBackend.get_link_debugfile_nameK  s6    11&99 	<11(;;;trH   c                ^    |                      |          }|r|                    |          S g S r   )r4  get_link_debugfile_argsr6  s       rF   r8  z$NinjaBackend.get_link_debugfile_argsQ  s6    11&99 	<11(;;;	rH   c                Z   t          |j                                        |          }|                                }|t          j        ||| j                  z  }t          |t                    r:|j        r+t          j
                            |j        |j                  }nI|j        }nAt          j
                            |          r t          j
                            |          }n|}|                     |          }t          j
                            |                     |          |          }|d| j        j        |j                                                 z   z  }||                     |||          z  }t          |t                    r*|j        r|j        }n-|                    | j                  }nt1          d|          |                     d|j                  }	t5          | j        ||	|          }
|
                    d|           |                     |
           ||fS )Nrc  Invalid source type: r  rO  )r#   r   r  rA  r  r   r   r   r  r  r  r   r  r*  isabsri  canonicalize_filenamerh  r  r  get_object_suffixr0  r&  r'  r)   r  r   r   r  rf  )r   r  r  r  re  src_filenameobj_basenamer  r!  rJ  r  s              rF   r  z%NinjaBackend.generate_llvm_ir_compileW  s   *6+;+B+B+D+DcJJ))++I3FHdFVWWWc4   	| )!w||CJ	BB"yW]]3 	7++C00LLL11,??',,t::6BBLQQ3)263EFXXZZZZD33HfgNNNc4   	D| A)--d.?@@"#B3#B#BCCC33Ix?STT#D$4g}gVV***w!!rH   )maxsizerK  r  re  CT.Tuple['ImmutableListProtocol[str]', 'ImmutableListProtocol[str]']c                   |dvr>t           j                            t           j                            ||                    }n|}t           j                            t           j                            | j        |                    }|                    ||          }t           j                            t           j                            | j                                        |                    r|                    ||          }ng }||fS )Nrf  )	r  r  rD  r   r'  rg  isdirr   r  )	r   r  rK  r  re  r  r  r  bargss	            rF   generate_inc_dirzNinjaBackend.generate_inc_dirw  s     IW%%bgll7A&>&>??FFFW%%bgll43Df&M&MNN
))*i@@ 7==d&6&D&D&F&FOOPP 	--fi@@EEEu~rH   c                d    |                      ||          }||                     ||          z  }|S r   )"_generate_single_compile_base_args$_generate_single_compile_target_argsr   r  r  re  s       rF   _generate_single_compilez%NinjaBackend._generate_single_compile  s6    ::68LLD==fhOOOrH   'CompilerArgs'c                    |                                 }||                    |j                  z  }|t          j        ||| j                  z  }|S r   )rA  gnu_symbol_visibility_argsgnu_symbol_visibilityr   r  r   rI  s       rF   rG  z/NinjaBackend._generate_single_compile_base_args  s]     ))++H778TUUU 	I3F4<d>NP P 	PrH   ImmutableListProtocol[str]c                   |                      ||          }|j        r||                     ||          z  }t          |                                          D ]}|                                }t          |                                          D ],}|                     ||||j                  \  }}||z  }||z  }-|	                                D ] }||
                    ||j                  z  }!||                     |                    |                                                    z  }|j        dk    r#||                    |j        | j                  z  }|j        r||                     ||          z  }|j        r||                     ||          z  }||
                    |                     |          d          z  }|S )NrK  F)rq  implicit_include_directories"get_custom_target_dir_include_argsr  ro  rp  r  rE  re  get_extra_build_dirsrg  escape_extra_argsr  rJ  r  get_feature_args
d_featuresr'  get_source_dir_include_argsget_build_dir_include_argsrh  )	r   r  r  re  r   r  rK  compile_objincludeargss	            rF   rH  z1NinjaBackend._generate_single_compile_target_args  s    44VXFF . 	R??QQQH &113344 	F 	FAllnnG ammoo.. ( (-1-B-B8QPWYZYd-e-e*kK'K'++-- F FH55aEEEF 	D**6+@+@AVAVAXAX+Y+YZZZ ##11&2CTEVWWWH . 	K88JJJH. 	J77IIIH 	H--d.I.I&.Q.QSXYYYrH   dict[str, list[str]]c                   i }|                      |          }|j                                        D ]}|j        |         }|                     ||          }|r"d|j        vr||                     ||          z  }||                     ||          z  }|r"d|j        v r||                     ||          z  }|j                            |          }|	                                ||<   |S )Nmw)
r  r   r  rG  r  get_pch_include_argsrH  r  rA  r	  )r   r  src_type_to_argsr  src_type_strr  re  s          rF   r  z6NinjaBackend.generate_common_compile_args_per_src_type  s   &&v..",1133 	B 	BL'5H>>vxPPH  H4x{22D55hGGGAA&(SSSH  H48;..D55hGGG(66x@@H-5-?-?-A-A\**rH   is_generatedrb  r  T.Optional[T.List[str]]T.Tuple[str, str]c                $   ||ng }||ng }t          |t                    r'|                    d          rt          d|          t	          |j                                        |          }|                     ||          }	|                     |          }
|
r"d|j	        vr|	| 
                    ||          z  }	|	|                     ||          z  }	|
r"d|j	        v r|	| 
                    ||          z  }	|	j                            |	          }	|du r|                     |||	|gg |           n|                     |||	g |g|           | j                                        }t          |t"                    rr|                    | j                  }t(          j                            |          r8|j        r1|                    |          sJ |t3          |          dz   d         }n&|rt          d|          t5          d|          |                     |||          }t(          j                            |                     |          |          }|                    |          }|	|                     |||          z  }	|                     |          r|                     |j!                  }ng }|sg }ns|j	        d	k    rg }neg }t(          j                            |                     |          |"                    |d
                             }|#                    |           |}|$                                dk    r| %                    |tM          d|j'        |j(                            }t          |tR          j*                  r|j+        s|rJ|,                    dd          d         t
          j-        d         v r| .                    d|j'                  }n+| /                    |          }n| /                    |          }g }|0                                dk    r9|s,tc          |          |z  }|| 2                    |||          z  }| 3                                s| j4        |5                                         6                                D ]\  }}t(          j                            |                     |          |7                    |                    }||k    rI| 8                    |j'                  }ts          | j:        |d|z   |          }| ;                    |           |	|<                    |                     |                    z  }	||	=                    |           ts          | j:        |||          }| >                    |||           |D ]}|?                    |           |D ]}t          |t"                    r|                    | j                  }nH| @                    |          s3t(          j                            |                     |          |          }|A                    |           |?                    |           | 3                                s.| B                    ||          D ]}|?                    |           |r|C                    d|           |0                                dk    r#dd}|C                    d ||                     |C                    d|	           | D                    ||||           | ;                    |           t          |t                    sJ t          |t                    sJ ||E                    dd          fS )zE
        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 r:  intelr   r  b_ltor  rc  r   r  rl  r  r  r  
targetNamer;   r<   c                    d}t          |           D ]T\  }}|dv r/t          |dz
  dd          D ]}| |         dk    r|dz  } |dz  }n|dk    r|dz  }n|dk    r|dz  }||z  }U|S )Nr   >   	re   r   r   r?   rf   #)	enumeraterange)rg  r  r   r   js        rF   quote_make_targetz?NinjaBackend.generate_single_compile.<locals>.quote_make_targets  s    '
33    FQK''!&q1ub"!5!5 & &A)!}44 &$ %$c#c$aKFFrH   CUDA_ESCAPED_TARGETrO  r?   r  )rg  r;   r<   r;   )Fr   r;   rR  re  r#   r   r  rG  r  r  r^  rH  r  rA  rQ  r   r  r   r&  r'  r  r  r;  r  r   rB   r)   object_filename_from_sourcer   rh  depfile_for_objectr0  get_pchr  get_pch_namer
  r  r  r&   r  r  r   r  r  rsplitr  r  r  rJ  r   r)  r  rW  r?  r  module_name_to_filenamerN  r   r   rf  get_module_outdir_argsr  add_header_depsr  has_dir_partr  get_fortran_module_depsr  )add_dependency_scanner_entries_to_elementrV   ) r   r  r  ra  r  rb  r  r8  r  re  r  r  r!  r?  r  dep_filepchlistpch_deparrr   
target_ltorJ  
extra_depsr  r   srcfilemodfiler  depelemr  rK  rn  s                                    rF   r  z$NinjaBackend.generate_single_compile  s    &1%<kk"#-#9ZZr
c3 	UCLL$6$6 	U !SC!S!STTT*6+;+B+B+D+DcJJ::68LL &&v.. 	Dt8;..11(FCCCHD==fhOOO  	Dtx{**11(FCCCH$228<< 5  33FHhQTPUWY[hiiii33FHhPRUXTY[hiii$2244	c4   	D))$*;<<Gw}}W%% ; < ;"--i88888%c)nnq&8&9&9:G 	D !ZSV!Z!Z[[["#B3#B#BCCC77#NN',,t::6BBLQQ..w77 	D33HfgNNN '' 	nnX%677GGG 	GG[G##GGCT88@@(BWBWX_`aXbBcBcddAJJqMMMG ??	))//	'SYSerx  sD  9E  9E  9E  F  FJFE$788 EV^ EPZ E`c`j`jknpq`r`rst`u  zC  zQ  RU  zV  aV  aV $ ; ;<QS[Sg h h $ : :8 D D 66x@@M
  ""i//
   Oy//G3d33HgvNNN
//11 0 )-(9&:M:M:O:O(P(V(V(X(X 
0 
0$GW gll4+F+Fv+N+N+3+K+KG+T+TV VG #~~ $ 4 4V5G H H"3D4D4;4F4N4;#= #= w///778S8STZ8[8[\\\H!OOJ'''#D$4g}gVVVWk::: 	 	AOOA 	$ 	$A!T"" I%%d&788&&q)) IGLL!<!<V!D!DaHH  ####   ++-- 	#11&(CC # #"""" 	2Y111  ""f,,   & 24E4Eg4N4NOOO***66vxRUVVVw'3''''''3'''''s3344rH   c                   |                      |          sd S t          |t          j                  rd S t          j                            |j                  d         dd          }|dk    r|                                }|t          j
        d         v s|t          j
        d         v sd S |                     |          d         }|                    d|           |                    |           d S )Nr   r  rl  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          rF   rz  z6NinjaBackend.add_dependency_scanner_entries_to_element  s    11&99 	Ffe122 	FG$$SY//21226	!))IY4Y???9PYPghmPnCnCnF226::1==111]+++++rH   c                    |                      |          }t          j                            |d          t          j                            |d          fS )Nzdepscan.jsonz
depscan.dd)rh  r  r  r   )r   r  privs      rF   r  z"NinjaBackend.get_dep_scan_file_for  s@    **622w||D.1127<<l3S3SSSrH   c                *   |D ]}t          |t                    r|                    | j                  }nH|                     |          s3t
          j                            |                     |          |          }|	                    |           d S r   )
r   r   r&  r'  rx  r  r  r   rh  r  )r   r  ninja_elementr  rK  s        rF   rw  zNinjaBackend.add_header_deps  s     	* 	*A!T"" I%%d&788&&q)) IGLL!<!<V!D!DaHH&&q))))	* 	*rH   r*  c                `    t          |t                    r|j        dk    S t          |          S r   )r   r   r  r$   )r   r*  s     rF   rx  zNinjaBackend.has_dir_part  s/    eT"" 	&<2%%E"""rH   c                     |j         dk    s                                 rg S  fdt          j        |j        |j                  D             S )Nrl  c                    g | ]G}t           j                                                |          |                                          HS rx   rJ  )r   ltr   s     rF   r   z8NinjaBackend.get_fortran_module_deps.<locals>.<listcomp>  sQ     
 
 
 GLL,,R00"//2C2CDD
 
 
rH   )r  r  r  r  r  r  )r   r  r  s   `  rF   ry  z$NinjaBackend.get_fortran_module_deps  sf     	))T-I-I-K-K)I
 
 
 
of&96;TUU
 
 
 	
rH   c                   |d         }|                     |          }t          j                            |                     |          |          }g }||                     ||          z  }t          |          dk    r|                     ||                                |d                   }t          j        	                    t          j                            | j
        |                                |                    }	||                    |	d          z  }n>t          j                            | j
        |                                |d                   }t          j                            |          }
|                    |
||          \  }}||z  }||                     ||          z  }||                     |||          z  }|dz   |                                z   }|                                r|gng }|||||fS )Nr   r   Frc  )rs  r  r  r   rh  rq  rB   create_msvc_pch_implementationrJ  rU  r'  get_source_subdirrg  ri  gen_pch_argsrJ  r0  get_depfile_suffixshould_link_pch_object)r   r  r  r.  headerpchnamedstre  r1  pch_header_dir	just_nameobjnamepch_argsr   link_objectss                  rF   generate_msvc_pch_commandz&NinjaBackend.generate_msvc_pch_command  s   Q''//gll466v>>HHD55fhGGGs88q==88AVAVAXAXZ]^_Z`aaFW__RW\\$:KVMeMeMgMgio-p-pqqN11.%HHHHHW\\$"3V5M5M5O5OQTUVQWXXFG$$V,,	&33IvsKK(HD11&(CCCD33HfgNNNCi(55777$,$C$C$E$EMyy2c<77rH   c                   |                      ||          }|                    d          d         dk    r|j        dk    r|ddgz  }t          j                            |                     |          t          j                            |          dz   |                                z             }|dz   |	                                z   }|||g fS )Nrc  r   hr  r  z
c++-header)
rJ  r   r  r  r  r   rh  ri  get_pch_suffixr  r   r  r  r.  re  r  r   s          rF   generate_gcc_pch_commandz%NinjaBackend.generate_gcc_pch_command  s    00BB99S>>"$$):e)C)C |,,Hgll466v>>7++C00369P9P9R9RRT TCi(55777c2%%rH   c                   |                      ||          }t          j                            |                     |          t          j                            |          dz   |                                z             }t          j                            |          d         dz   |                                z   }|||g fS )Nrc  r   )	rJ  r  r  r   rh  ri  r  r-  r  r  s          rF   generate_mwcc_pch_commandz&NinjaBackend.generate_mwcc_pch_command  s    00BBgll466v>>7++C00369P9P9R9RRT Tgs##A&,x/J/J/L/LLc2%%rH   c                F   ||ng }g }dD ]}|                     |          }|st          |d                   rt          |d                   s'd|                                d}t          |          |j        |         }|                                dk    r\|                     |||          \  }}	}
}}t          j        	                    | j
        |                                |d                   }n|j        dk    rd|j        v rct          j        	                    | j
        |                                |d                   }|                     |||d                   \  }}	}
}d }nbt          j        	                    | j
        |                                |d                   }|                     |||d                   \  }}	}
}d }||z  }|                     |          }t!          | j        ||
gz   ||          }||                    |           |                     |||           |                    d	|           |                    d
|	           |                     |           | j        |j                                     ||
gz              |S )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.rq  re  r  rO  r  )rr  r$   r?  r)   r   r  r  r  r  r   r'  r  r  r  r  r  r   r   r  rw  r  rf  rX  r   )r   r  r  r  r3  r.  r  r  re  r   r  r1  r  extradepr   rh  s                   rF   r  zNinjaBackend.generate_pch  s   %0%<kk"   	;  	;D..&&C A'' ,|CG/D/D ,Nv/B/B/D/D N N N&s+++!'!1$!7H++--77262P2PQWYacf2g2g/3T37<<(96;S;S;U;UWZ[\W]^^''8;&&gll4#4f6N6N6P6PRUVWRXYY-1-K-KFT\^abc^d-e-e*3Tgll4#4f6N6N6P6PRUVWRXYY-1-J-J6S[]`ab]c-d-d*3T4K55h??H$T%5tse|XsSSD#X&&&  {;;;MM&(+++MM)S)))NN4   L%,,TSE\::::rH   c                    |                      |          }t          j                            ||                                dz             S )Nz.symbols)rh  r  r  r   rK  )r   r  	targetdirs      rF   get_target_shsym_filenamez&NinjaBackend.get_target_shsym_filename  s<    //77	w||Iv':':'<'<z'IJJJrH   c                |   |                      |          }t          |t          j                  r|j        r| j        j        |j                                                 r|	                                \  }}|
                    |                                d                   |                                d<   |                                d         }t          j                            |                     |          |          }|                     |          }t#          | j        |d|          }|                    d|                     |                     | j                                        r3|                    dd| j        j        |j                 j        z              |                     |           d S )Nr   r  IMPLIBCROSSz--cross-host=)r}  r   r   r  r  r   r  r  r  $get_clink_dynamic_linker_and_stdlibsr  r  r  r  r   r  r  r   r   r  r  is_cross_buildsystemrf  )r   r  target_filerR  ri  symnamerh  s          rF   rD  zNinjaBackend.generate_shsym  s   ..v66fe122 	Uv7L 	U();<CCEE U&,&Q&Q&S&S#*0*A*A&BTBTBVBVWXBY*Z*Z""$$Q'$002215 gll4+>+>v+F+FTT0088 !17G[QQh D DV L LMMM**,, 	kMM'?T5E5NvOa5b5i#ijjjtrH   c                r    t           j                            |                     |          |j                  S r   )r  r  r   r  import_filenamerY  s     rF   get_import_filenamez NinjaBackend.get_import_filename)  s)    w||D//779OPPPrH   c           	     |   g }t          |t          j                  r||                                z  }|j        r||                    | j                  z  }|j        r+||                    | 	                    |                    z  }|j
        r||                                z  }|j        rEt          |d          r5||                    |j                            | j                            z  }nt          |t          j                  r<t          |t          j                  r||                    |          z  }n||                                z  }||                                z  }t          |t          j                  r|j        r;||                    | j        |j        |j        |j        |j        |j                  z  }|j        rEt          |d          r5||                    |j                            | j                            z  }|j        r+||                    | 	                    |                    z  }not          |t          j                  rF| j        |j                 o|                                  }||!                    | j        |          z  }ntE          d          |S )Ngen_vs_module_defs_argszUnknown build target type.)#r   r   r  rw  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   r2  	soversiondarwin_versionsr  r`  r  should_installget_std_link_argsr@  )r   r  rR  re  produce_thin_archives        rF   get_target_type_link_argsz&NinjaBackend.get_target_type_link_args,  s   fe.// #	=44666H$ RF??@PQQQ% ]F::4;S;STZ;[;[\\\z 7F44666$ u9R)S)S uF::6;P;`;`aear;s;sttt 344 	=&%"455 BFBB6JJJF??AAA++---Hfe&899 >V=P >F22$fmV[&-$f&<> > > $ u9R)S)S uF::6;P;`;`aear;s;sttt% ]F::4;S;STZ;[;[\\\ 344 	=#'#;F<N#O#oX^XmXmXoXoTo 001ACWXXXHH;<<<rH   c                    g }t          |t          j                  r\| j        j        |j                 }|                                s|                                r||                    |j	                  z  }|S r   )
r   r   r  r   r  r  r$  	is_cygwinget_win_subsystem_argswin_subsystem)r   r  rR  re  rE   s        rF   +get_target_type_link_args_post_dependenciesz8NinjaBackend.get_target_type_link_args_post_dependenciesT  ss    fe.// 	P  )&*<=A||~~ P PF99&:NOOOrH   r/   c                   d}|j         dk    rt          j        |j        d          rd}|rig }|j        D ]]}|                    d          }||                     |          z  }|                    |                     |          d                    ^|S | 	                    ||j                  }|r|
                    |          ng S )NFrq  z<19.00.23918Tr   )r  r   r  r  r  extract_all_objectsdetermine_ext_objsr  r  build_target_link_argumentsr+  )r   rR  r  
use_customobjects_from_static_libsr   r   target_argss           rF   get_link_whole_argsz NinjaBackend.get_link_whole_args`  s    
9 'GG "!
 
	QAC$0 R R++E22(D,C,CA,F,FF((//0H0H0M0Ma0PQQQQ++::66C\]]K=HP6,,[999bPrH   c                    ddl m} |D ]D}|D ]?}|                    |||          }|s|                    | j        |          }|s:|c c S Ed S )Nr   )	CCompiler)compilers.cr  _get_trials_from_pattern_get_file_from_listr   )	r   rR  r  search_dirspatternsr  rK  r  trials	            rF   guess_library_absolute_pathz(NinjaBackend.guess_library_absolute_patht  s    ++++++ 		 		A  !::1aII !55d6FNN 		 		rH   c                *   t                      }t                      }g }| j                                        }t          |                    |                    }	|	D ]}
|
|v r|
                    d          s|
                    d          rt          |
          dk    r|
dd          }n7	 t          |	          }n&# t          $ r t          j
        d           Y  nHw xY wt          j                            |          s t          j                            ||          }|                    |           |
                    d          rkt          |
          dk    r|
dd          }n6	 t          |	          }n%# t          $ r t          j
        d           Y  nw xY w|                    |           \t          j                            |
          rN| j                            |
          r4t          j                            |
          r|                    |
           g }	 |                    | j        t(          j        d          }|                    | j        t(          j        d          }t/          |          t/          |                    | j                            z   }|D ]}|                     ||||          }|                     ||||          }|r9|                    |                                                                           |r9|                    |                                                                           n5# t8          j        t<          f$ r}d	t?          |          vr Y d }~nd }~ww xY w||z   S )
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   rB   r  StopIterationr   r  r  r  r;  r   r  r  isfiler
  r  r   STATICSHAREDrK  get_library_dirsr  resolver  r   r   r&  r;   )r   rR  r  re  internalr  libsabsolute_libsr  ititemr  r  guessed_dependenciesstatic_patternsshared_patternsr  
staticlibs
sharedlibsr)  s                       rF    guess_external_link_dependenciesz-NinjaBackend.guess_external_link_dependencies  s    !ll||$2244	&,,X6677 	+ 	+Dx(<(<t$$ +t99q==8DD#Bxx(   %fggg w}}T** 97<<	488D%%%%&& +t99q==qrr(CC"2hh(   %pqqq t$$ +)9)D)DT)J)J +rw~~^bOcOc +$$T***!	$778H'.ae7ffO$778H'.ae7ffO,,uV5L5LTM]5^5^/_/__K 
Q 
Q "==fg>I?\ \
!==fg>I?\ \
 Q(//
0B0B0D0D0M0M0O0OPPP Q(//
0B0B0D0D0M0M0O0OPPP
Q '8 	 	 	#3q6611 21111	 $m33s=   -B==C C ,E<<FF*D0M N1NNc                   t          |t          j                  sJ t          j                            |                     |          |j        dz             }t          | j	        |gd|          }|
                                }|j        d d          }|                    ||          \  }}||z  }|                                r`|                     ||          }||                     ||          z  }|j                            |          }||                                z  }|                     ||          }|                    d|           |                    dd|            |                     |           |S )Nz
-prelink.or  r  r^   zPrelinking )r   r   r  r  r  r   rh  r   r   r   get_prelinkerexelistget_prelink_argsget_prelink_append_compile_argsrG  rH  r  rA  r	  r  r  rf  )	r   r  r  prelink_namerh  	prelinkerrM   r   r]  s	            rF   r  zNinjaBackend.generate_prelink  sp   &%"566666w||D$?$?$G$GWcIcdd !1L>CSU]^^((**	""33L(KK$t4466 	,BB69UULDEEfiXXXL'0>>|LLL<))+++C  --i%%%m%A<%A%ABBBtrH   c                   t          |j                  rVt          j                            t          j                            |j                  |                     |                    }n|                     |          }|                    | j        | j        	                                || 
                    |          |j        |j                  \  }|_        |S r   )r$   r   r  r  r   rU  r  build_rpath_argsr   r  determine_rpath_dirsbuild_rpathinstall_rpathrpath_dirs_to_remove)r   r  rR  target_slashname_workaround_dir
rpath_argss        rF   r.  z!NinjaBackend.get_build_rpath_args  s    $$ 	J /1gll27??6;;W;W;?;N;Nv;V;V/X /X++ /3.A.A&.I.I+##D$4$($4$B$B$D$D$C$($=$=f$E$E$*$6$*$8: : 	2V0 rH   #T.Union['Compiler', 'StaticLinker']c                    ||ng }||ng }g }t          |t          j                  rd}n|                                }t          |t          j                  r                     |                                |j                  }	|dz   |	z   }
|                                }t          |t          j                  r ||	                    || j
                  z  }n|t          j	        || j
                  z  }|                     ||          z  }||                                z  }||                                         |d                    z  }                     |d          r7|                     ||          z  }                     ||          }|||gz  }|                     ||          z  }t          |t          j                  s|                     ||          z  }t          |t          j                  s| j                            ||j        |j                  z  }| j                            ||j                  z  }| j
        j                            |j        |                                          z  }|                     ||          z  }|dk    rg }n|                                }                     ||          }||z  }t          |t          j                  s||                    |          z  }|                                D ]*}|                    |                    |                     +|                                D ]}t          |t          j                  r|                                D ]j}|                    |          }|j         dk    r3|!                                dk    rddl"m#} |$                    |          }|                    |           k| %                    ||          z  }t          |tL                    r||'                    | j
                  z  }g }|(                     )                    ||||                      *                    |          }||z  }||z  }||z  }|(                     fd	|D                        |(                     fd
|j+        D                        tY           j-        ||
||          }|.                    ||z              |/                                dk    rgta          d ||z   D                       dk    rG                     |tc          d|j        |j                            ste          d|j          d          |/                                dv rg }tf          D ]f} j
        j        j        |         }|4                                D ]8\  }}|dv r/|/                                dv r| 5                    ||          z  }9g|6                    d|           |6                    d|            7                    |||           |S )Nr  _LINKERr  r"  _rust_native_static_libsrq  r   )VisualStudioLikeLinkerc                :    g | ]}                     |          S rx   r(  r  s     rF   r   z.NinjaBackend.generate_link.<locals>.<listcomp>i  s'    RRRD88;;RRRrH   c                :    g | ]}                     |          S rx   r
  r  s     rF   r   z.NinjaBackend.generate_link.<locals>.<listcomp>j  s7     : : : ! !88;; : : :rH   )r   r  c                <    g | ]}|                     d           |S )z.ma)rR  r  s     rF   r   z.NinjaBackend.generate_link.<locals>.<listcomp>o  s*    ZZZ!

SXHYHYZAZZZrH   r   rf  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  rO  	LINK_ARGS)8r   r   r  rJ  r  rD  rN  r  rA  get_base_link_argsr   r   r,  r  get_optimization_link_argsr  r8  r5  r  r  rq  r  rr  r~  get_external_link_argsr.  r  r  get_target_link_argsrt  extend_preserving_lflagsget_dependency_link_argsr   r  linkers.linkersr  r  r  r   get_option_link_argsr  r  $get_custom_target_provided_librarieslink_dependsr   r   r  r  rB   r&   r   r   r  rq  r  rZ  )r   r  r  r  rR  r  ri  r   linker_baser  linker_rulere  	debugfiledependenciesr  r   rK  r  r  dep_targetscustom_target_librariesrh  r]  r  r  r  r  s   `                          rF   r  zNinjaBackend.generate_link  s?   #-#9ZZr
%0%<kk"fe122 	0"KK --//Kfe122 	('''$$V%788!I-5 '')) fe122 	G11&&$BRSSSHH	4V5;595EG G GH 	D00@@@F11333F55d6L6LVUc6d6deee!!&'22 	-44VVDDDH44VVDDI$), 	D2266BBB &%"566 	A00@@@H&%"566 	t
88ARTZTfgggH 
77@RSSSH (1HHI[]c]p]p]r]rsssH 	D--ff=== ("" LL!2244L33FLIIH&%"566 	E 33F;;;H//11 X X 11&2Q2QRU2V2VWWWW,,.. E Ea!455 
E 2244 	E 	E$*$C$CC$H$H	
 8'AAAfF`F`FbFbflFlFlPPPPPP(>(R(RS\(](]I 99)DDDD 	DDDVVTTT fh'' 	N 33FD<LMMMH4@@QY[cddeee #'"K"KF"S"SJ++KRRRR\RRRSSS : : : :%+%8: : : 	; 	; 	; !17Kanooo[#::;;;==??i''ZZ{-DDZZZ[[^___hlh~h~  @F  HQ  RY  [a  [l  nt  n@  HA  HA  iB  iB_$  &q  &q  &q  &q  r  r  r ==??666L, \ \(1;KH*/++-- \ \&Hh<//HOO4E4EIa4a4a$(I(I&RZ([([[\ MM&,///k8,,,//IIIrH   c                |   t          |t          j                  r|                     |          S t          |t          j                  r_|j        r|                                S |                    | j	        
                                | j	                                                  S |                     |          S r   )r   r   r  r  r   r   r  relative_namerB  r   r  r  r}  )r   r  s     rF   r(  z$NinjaBackend.get_dependency_filename  s    a,-- 	I11!4448=)) 	Iz I(((t'7'F'F'H'H'+'7'E'E'G'GI I I''***rH   c                   |                                 D ]\  }}}t          j                            ||          }t          j                            | j                                        ||          }	 t          j        |           n# t          $ r Y nw xY w	 t          j        ||           | j	        
                    |           # t          $ r t          j        d           Y t          $ r t          j        d           Y w xY wd S )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  symlinkr]  r
  NotImplementedErrorr   r"  OSError)r   r  outdiraliastotag	aliasfileabs_aliasfiles           rF   rr  z#NinjaBackend.generate_shlib_aliases  s8   $0022 	; 	;NE2sVU33IGLL)9)G)G)I)I6SXYYM	-((((   ;
2}--- (//	:::: ' ^ ^ ^
\]]]]] n n n
lmmmmmn	; 	;s*   4B		
BBC

D
*D
	D
treesc                &   |                      ddd          }t          | j                                        |          }t          j                            | j                                        d          }|                    d| j        	                                dd|gz              |                    dd	           | 
                    |           t          |d
          5 }t          j        ||           d d d            n# 1 swxY w Y   dS )Nzclean-ctlistr  r  zcleantrees.datr  r	  
cleantreesr^   z"Cleaning custom target directoriesr  )ri  r'   r   r  r  r  r   r  r  r  rf  ry  r  r  )r   r/  r)  rK  d_fileofiles         rF   generate_custom_target_cleanz)NinjaBackend.generate_custom_target_clean  s.   $$^5EwOOt'5577??d.>>@@BRSS	

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

="FGGGq&$ 	"5K5!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"~s   $DD
D
c                   |                      ddd          }|                    dt          j                    g dz              |                    dd           |                     |           |                      ddd          }|                    dt          j                    g d	z              |                    dd
           |                     |           d S )N
clean-gcnor  r  r  )r	  delwithsuffixrc  gcnor^   zDeleting gcno files
clean-gcda)r	  r7  rc  gcdazDeleting gcda files)ri  r  r   r  rf  )r   	gcno_elem	gcda_elems      rF   generate_gcov_cleanz NinjaBackend.generate_gcov_clean  s    ,,\;KWUU	9h&@&B&BEqEqEq&qrrr=*?@@@y!!!,,\;KWUU	9h&@&B&BEqEqEq&qrrr=*?@@@y!!!!!rH   Tshut_up_pylintc                   |rg S g }| j         j        j                                        D ]\  }}| j         j        j                            |          rp|                    dt          |          z   dz   t          |j        t                    r|j        n%t          |j                  	                                z              t          |          S )Nz-Dr  )r   r~  r  r  is_project_optionr
  r;   r   valuer.  r#  )r   r>  cmdskvs        rF   get_user_option_argsz!NinjaBackend.get_user_option_args  s     	I$-6<<>> 	s 	sDAq(1CCAFF sD3q66MC/jRU>V>V3p177\_`a`g\h\h\n\n\p\pqrrr d||rH   c                   |                      ddd          }|                    dd           |                    d| j                                        dgz              |                    dd           |                     |           d S )	Ndistr  r  rZ   zCreating source packagesr  r[   r  )ri  r  r   r  rf  r  s     rF   r  zNinjaBackend.generate_dist  s    ''0@'JJf8999i!1!C!C!E!E!PQQQfi(((trH   c                   d| j         v s|                     d          sd S | j                                        dd| j        j        gz   }|                     ddd          }|                    d|           |                    dd           | j                                        D ]%}|j	        d	v r|
                    |j                   &|
                    t          | j                             |                     |           d S )
Nclippyr  r	  r  r  r  r[   r     rlibr  r"  r   have_languager   r  r  ri  r  r\  r  r?  r  r@  r   rY  rf  r   rM   rh  r4  s       rF   generate_clippyzNinjaBackend.generate_clippy  s
   t'''t/A/A&/I/I'F00228T%5%?@A''2BGLLi%%%fi(((%,,.. 	0 	0E#BBBU.///T$566777trH   c                   d| j         v s|                     d          sd S | j                                        dd| j        j        gz   }|                     ddd          }|                    d|           |                    dd           | j                                        D ]%}|j	        d	v r|
                    |j                   &|
                    t          | j                             |                     |           d S )
NrK  r  r	  r  r  r  r[   r  rJ  rL  rN  s       rF   generate_rustdoczNinjaBackend.generate_rustdoc  s
   (((0B0B60J0J(F00229d&6&@AB''	3CWMMi%%%fi(((%,,.. 	0 	0E#BBBU.///T$566777trH   c                   t          j                    sd S d| j        v rd S | j                                         dd| j         j        | j         j        | j                                        gz   | j                                         z   dgz   |                                 z   }| 	                    ddd          }|
                    d|           |
                    dd	           |                     |           d S )
Nz
scan-buildr	  	scanbuildsetupr  r  r  r[   r  )r   detect_scanbuildr   r  rC  r  r   r  rE  ri  r  rf  r)  s      rF   generate_scanbuildzNinjaBackend.generate_scanbuild  s
   +-- 	F4+++F0022;(8(CTEUE_aeaka~a~  bA  bA  BB..0014;9=?C?X?X?Z?Z[ ''6FPPi%%%fi(((trH   	extra_argneed_pchc                4   d|z   }g }|r |d| z  }|                     d|            t          d          | j        j        j        v r$| j        j        j                            d          nd}|                    d|g           t          j        	                    t          j        
                    | j        j        d|z                       sLt          j        	                    t          j        
                    | j        j        d|z                       sd S || j        v rd S |r-t          | j                                                  d	hk    sd S | j                                        d
d	|z   | j        j        | j        j        gz   |z   }|                     |dd          }|                    d|           |                    dd           |r-|                    t+          | j        d	                              |                     |           d S )Nzclang-r  z--r  alwaysz--colorz.clang-z_clang-r  r	  r  r  r  r[   r  )r
  r&   r   r~  r  	get_valuer  r  r  r  r   rC  r   r   rX  r  r  r  ri  r  r  r   rf  )	r   r   rW  rX  r@  r  coloroutrM   rh  s	            rF   generate_clangtoolzNinjaBackend.generate_clangtool  s   o
 	0?y??*K.9..///&&$*:*C*LLL #,5??MMMRZ 	9h/000w~~bgll4+;+F	TXHXYYZZ 	GNN27<<0@0KYY]M]#^#^__	F$***F 	C 1 1 3 344	AAF00227T>4+;+FHXHbcd ''5EwOOi%%%fi((( 	6LLdl7344555trH   c                    t          j                    sd S |                     d           |                     dd           d S )Nr   check)r   detect_clangformatr]  r   s    rF   generate_clangformatz!NinjaBackend.generate_clangformat  sH    -// 	F)))'22222rH   c                    t          j                    sd S |                     dd           t          j                    sd S |                     ddd           d S )NtidyT)rX  fix)r   detect_clangtidyr]  detect_clangapplyr   s    rF   generate_clangtidyzNinjaBackend.generate_clangtidy  sh    +-- 	F666,.. 	F=====rH   c                V   dd l }|                    |          sd S || j        v rd S | j                                        dd|| j        j        gz   }|                     |dd          }|                    d|           |                    dd           |                     |           d S )	Nr   r	  tagsr  r  r  r[   r  )	shutilwhichr   r   r  rC  ri  r  rf  )r   r  r@  rj  rM   rh  s         rF   generate_tagszNinjaBackend.generate_tags  s    ||D!! 	F$***F002264)9)DEF''5EwOOi%%%fi(((trH   c                >   |                                   |                                  |                                  |                                  |                                  |                     dd           |                     dd           |                     dd           | j                                        ddgz   }|                     ddd          }|	                    d	|           |	                    d
d           | 
                    |           d S )NetagsTAGSctagscscoper	  	uninstallr  r  r  r[   r  )rV  ra  rg  rO  rQ  rl  r   r  ri  r  rf  r)  s      rF   r  zNinjaBackend.generate_utils(  s   !!!!!###!!!7F+++7G,,,8X...0022lK5PP''5EwOOi%%%fi(((trH   c           	        d|                                  fd|                                 fd|                     d          ffD ]N\  }}g }|                                D ]}t          |t          j                  r|j        r| j        j        |j	                 
                                rY|                                \  }}|                    |                                d                   |                                d<   |                    t          j                            |                     |          |                                d                              t'          | j        |d|          }|                     |           P|                     ddd	          }|                    d
| j        ddgz              |                    dd           g }| j                                                                        D ]y}t          |t          j                  r]|                                D ]H}	|                    t          j                            |                     |          |	                     Iz|r(|                    |                     |                     t;          d          | j        j        j        v rb| j        j        j                             d          r>| !                                 |                    d           |                    d           |                     |           | "                                }t'          | j        dd|          }|                    dd           |                     |           | j#        r1t'          | j        dd| j#                  }|                     |           t'          | j        ddd	          }|                    dd           |                     |           t'          | j        |dd          }|                     |           d S )Nr  r$  r'  Tr   r  cleanr  r  r  r  r^   Cleaningr  r9  r6  rT  r1  r[   r  zmeson-implicit-outsreconfigurer   )$get_build_by_default_targetsget_testlike_targetsr  r   r   r  r  r   r  r  r  r  r  r  r
  r  r  r   r  r   r   rf  ri  r  r  r  r  r  r4  r&   r~  r  r  r=  get_regen_filelistr]  )
r   targr   
targetlistr  rR  ri  rh  ctlistr  s
             rF   r  zNinjaBackend.generate_ending7  s   99;;<$d&?&?&A&AB)4+D+DT+J+JKM 	! 	!JD$ J[[]] \ \ a!455 Y!:J Y'0?FFHH Y./.T.T.V.V+-3-D-DQ]]__UVEW-X-X*!!"',,t/B/B1/E/Eq}}WXGY"Z"Z[[[[$T%5tWjQQDNN4    ''1A7KKi!3tWo!EFFFmZ000 ''))0022 	K 	KA!U/00 K K KAMM"',,t/B/B1/E/Eq"I"IJJJJ 	DLL::6BBCCC\""d&6&?&HHH$-;;LII I$$&&&LL&&&LL&&&t&&(( !1=BTVZ[[fi(((t # 	!$T%57LgW[WoppDNN4    !1=BTV]^^fi(((t !14"EEtrH   	target_idT.List[TargetIntrospectionData]c                    | j                             |          }|s"t                                          ||          S t	          |                                          S r   )rZ  r   rU  get_introspection_datar   r  )r   r}  r  datara  s       rF   r  z#NinjaBackend.get_introspection_datav  sR    &**955 	E7711)VDDDDKKMM"""rH   )r   rO  rP  rQ  )rb  r;   r   r;   rc  r;   r<   r   )FN)r  rb   r  r  r<   r  r/  )r  r  r<   r  )r  r  r<   r  r   )r  r5  r6  r7  r8  r9  r<   r   )r  r5  rR  rS  r>  r   r<   r   )r  r  r<   rb   )
r  r  r  r   rq   rp   r  r  r<   r   )r  r   r<   r  )r  r  r<   r   r   )r  r  r<   r   )
rh  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  rC  r<   r   )r<   rf  )r  r  r<   r   )r<   r   )r  r  r<   r  )r  r  r<   r  )r  r4   r  r   r<   r   )r  r   r  r  r<   r  )r   r;   r  r;   r   r   r?  r;   r@  r;   r  rb   rG  r   r   rC  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;   )rO  )r3  r;   r  r   rP  r;   r<   r;   )r  r   r<   r;   )r  r  r<   r  )r  r  r<   r   )r  r  r<   r   r0  )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  r2   r  r   r<   r   )rR  rS  r  r  r<   r   )rR  rS  r  r  r<   r   )r  r4   )
r  r  rK  r;   r  r;   re  rb   r<   rA  )r  r  r  r   r<   r   )r  r  r  r  r<   rK  )r  r  r  r   r<   rO  )r  r  r<   r[  )FNNNN)r  r  ra  rb   rb  r9  r  rb  r8  r9  r<   rc  )r  r  r<   rc  )r*  r4   r<   rb   )r  r  r  r   r<   r   )rR  r/   )r<   r   )r  r  rR  rS  r<   r   )NN)r  r  rR  r  )r/  r   r<   r;   r  )r>  rb   r<   r   )NF)r   r;   rW  r   rX  rb   r<   r   )r  r;   r@  r;   r<   r   )r}  r;   r  r5  r<   r~  )rs   rt   ru   r   ri  r  r  r  r  r  r"  r(  r4  rQ  rZ  r  r  r  r  rq  r  r  rm  r   ro  r  r  r  r  r  r  r3  r  r8  rf  r  r  r  rt  rm  rw  rS  rT  r  r  r  ry  rz  r  rW  r  r  r  r  r:  rv  r   rN  classmethodr  r  r  rZ  rX  r_  ra  rd  rx  r  r6  r7  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r4  r5  r|  r  r  r{  r)  r,  r0  r5  r8  r  r	   rE  rJ  rG  rH  r  r  rz  r  rw  rx  ry  r  r  r  r  r  rD  r  r  r  r  r  r  r  r.  r  r(  rr  r4  r=  rE  r  rO  rQ  rV  r]  ra  rg  rl  r  r  r  __classcell__)ra  s   @rF   rN  rN    s       @ @ @ @ @ @,X X X X"Ap Ap ApFk4 k4 k4 k4 k4Z    P P P P6   0   
 
 
 
   ^b2V 2V 2V 2V 2Vh& & & &&]% ]% ]% ]%~   0. . . .`( ( ( (( ( ( (
< < < <
	 	 	(4 (4 (4 (4T3 3 3 34 4 4 4.D D D D8T T T T" " " ".      . 8  8  8  8D# # # #, , , ,( ( ( (	w 	w 	w 	w   4 4 4 4
   
4h 4h 4h 4hl   *+j +j +j +jZ   ! ! !2A A A A   *3/ 3/ 3/ 3/jx6 x6 x6 x6tEA EA EA EAN   % % % %(' ' ' '>b b b b/) /) /) /)d ;?    ,{< {< {< {<z;f ;f ;f ;fz 9 9 9 \9 B B B B [B h h h [h ` ` ` [`S S S      	 	 	_H _H _H _HB	 	 	 	.^ .^ .^ .^`%N %N %N %NNA A A AQ Q Q QU U U U5 5 5 52 2 2 2U U U U$& & & &% % % %P P P P? ? ? ?j j j j"N N N N,= ,= ,= ,=\2 2 2 24   *C C C C> > > >   :! :! :! :!x4W 4W 4W 4Wl     
7K 7K 7Kr      " " " "@ Yt   *   
    Yt5 5 5 5t       4 IMOSFJRV	Z5 Z5 Z5 Z5 Z5x, , , ,T T T T* * *# # # #
 
 
 
8 8 86	& 	& 	&& & &$ $ $ $LK K K
    Q Q Q Q& & &P
 
 
Q Q Q Q( Yt   @4 @4 @4D  *   $S S S S Sj	+ 	+ 	+; ; ; ;"
 
 
 
	" 	" 	" 	"
 
 
 
 
                63 3 3 3> > > >      = = = =~# # # # # # # # # #rH   rN  r  r   r'  rU  r&  T.Dict[str, File]r  r2   r   c                   t          j        t          t           j                  }t          j        t          t           j                  }t          j        t
          t           j                  }g }t          |           } |                     dd          5 }	|	D ]}
|                    |
          }|k| j	        |
                    d          z  }|j                                        dd         |j        v r&|                    t          |||||                     |                    |
          }||
                    d                                          }|dk    r||vr|||         j        z  }|                                s|j        | j        k    rn|                    |           r|                    |          }|                    t-          ||z                       Y|                    |
          }|\|
                    d                                                              d          }t1          |          dv sJ d	|             d
                    |          }||vrct5          d                    |
                    d                                          |                    d
d          d                             |||         j        z  }|                                s|j        | j        k    rn||                    |           r|                    |          }|                    t-          ||z                       	 ddd           n# 1 swxY w Y   |S )a  
    scan a Fortran file for dependencies. Needs to be distinct from target
    to allow for recursion induced by `include` statements.er

    It makes a number of assumptions, including

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

    Regex
    -----

    * `incre` works for `#include "foo.f90"` and `include "foo.f90"`
    * `usere` works for legacy and Fortran 2003 `use` statements
    * `submodre` is for Fortran >= 2008 `submodule`
    r  r  r  Nr   	intrinsicrg   >   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   )rJ   r  FORTRAN_INCLUDE_PATr  FORTRAN_USE_PATr  r   ry  r   r  rC   r2  r.  r0  r  r%  r*  is_filer   samefileru  r
  r;   r   rB   r   r   r   )r  r'  rU  r&  r  increuserer  r(  r  r(  incmatchincfileusematchusenamer  mod_namer!  r"  ancestor_childsubmodsrcfiles                        rF   r%  r%  ~  s   " J*BM::EJ66Ez,bm<<HI
s))C	78	4	4 ;> :	> :	>D{{4((H#*x~~a'8'88 >''))!""-1GGG$$%<WfgW\^f%g%ghhh{{4((H#"..++1133k))%''  5>#77(( |sx// %%c** #;;GDD  Wx%7!8!89999&nnT22*)//2288::@@EEGw<<6111F<CF F 211 &)XXg%6%6N%U22,-l-s-st  uF  uF  GH  uI  uI  uO  uO  uQ  uQ  Sa  Sg  Sg  hk  vw  Sg  Sx  Sx  yz  S{  .|  .|  }  }  }$*U>-B-H$HM(0022 !(-99 $&//44 ! '??OOH$$S8);%<%<===u:	>;> ;> ;> ;> ;> ;> ;> ;> ;> ;> ;> ;> ;> ;> ;>x s   KM44M8;M8)r:   r;   r<   r;   )rS   r;   r<   r;   r#  )r`   r;   ra   rb   r<   r;   )r  r   r'  r   rU  r   r&  r  r  r2   r<   r   )m
__future__r   collectionsr   r   dataclassesr   enumr   r   	functoolsr	   pathlibr
   r   textwrapr   r  r  r  r  rJ   r  typingr<  r   r   r   r   r   r   r   r   arglistr   r   rY  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-   rP  r.   r  r/   r0   compilers.csr1   compilers.fortranr2   compilers.rustr3   r4   r5   ListUnionr;   r   rA  r  r  r  r  rL   r$  rW   r  r  rY   get_rsp_thresholdr  r   r  rh   ri   rl   rn   rz   r6   r   r   r   r3  r;  BackendrN  r%  rx   rH   rF   <module>r     s  
 # " " " " " 0 0 0 0 0 0 0 0 ! ! ! ! ! !               " " " " " " " "            				  				                     $ $ $ $ $ $ $ $                   " " " " " "             1 1 1 1 1 1 1 1                      M L L L L L L L L L                   3 3 3 3 3 3 3 3? 4))))))//////22222222))))))========))))))333333------''''''111111fQW%6%;<=O23M > ; B E    8 -JdmO999MMJO,,,M    +*,, WVV	"
:..  bj++       = = = = = = = =      d   
2 
2 
2 
2 
2 
2 
2 
2        z z z z z z z zxD$ D$ D$ D$ D$ D$ D$ D$L 
 
 
 
 
 
 
 
 " " " " " " " "J[6# [6# [6# [6# [6#8# [6# [6# [6#|lS S S S S SrH   