
    Xh              	          d Z ddlZddlZddlmZ ddlmZmZmZm	Z	m
Z
mZ dedefdZ G d d	e          Zd
e	eeee         f                  dee         fdZdedefdZi fdedeeef         deeef         defdZdS )zPython module for generating .ninja files.

Note that this is emphatically not a required piece of Ninja; it's
just a helpful utility for build-file-generation systems that already
use Python.
    N)TextIOWrapper)DictListMatchOptionalTupleUnionwordreturnc                 ~    |                      dd                               dd                               dd          S )Nz$ z$$  :z$:replace)r
   s    d/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/ninja/ninja_syntax.pyescape_pathr      s6    <<e$$,,S$77??TJJJ    c                   z   e Zd Zd0dededdfdZd1dZdeddfd	Z	 d2dede	e
eeeeee         f                  deddfdZdededdfdZ	 	 	 	 	 	 	 	 d3dedede	e         de	e         dede	e         dede	e         de	e         de	e
eee         f                  ddfdZ	 	 	 	 	 	 	 d4de
eee         f         dede	e
eee         f                  d e	e
eee         f                  d!e	e
eee         f                  d"e	e
eeee	e
eee         f                  f                  eee	e
eee         f                  f         f                  d#e	e
eee         f                  de	e         d$e	e         dee         fd%Zd&eddfd'Zd&eddfd(Zd)e
eee         f         ddfd*Zd+ed,edefd-Zd2dededdfd.Zd1d/ZdS )5WriterN   outputwidthr   Nc                 "    || _         || _        d S N)r   r   )selfr   r   s      r   __init__zWriter.__init__!   s    


r   c                 :    | j                             d           d S )N
)r   writer   s    r   newlinezWriter.newline%   s    $r   textc                     t          j        || j        dz
  dd          D ]"}| j                            d|z   dz              #d S )N   F)break_long_wordsbreak_on_hyphensz# r   )textwrapwrapr   r   r   )r   r"   lines      r   commentzWriter.comment(   s]    M$
Q38: : : 	2 	2DKdTkD01111	2 	2r   r   keyvalueindentc                     |d S t          |t                    r#d                    t          d |                    }|                     |d||           d S )Nr   z = )
isinstancelistjoinfilter_line)r   r+   r,   r-   s       r   variablezWriter.variable-   s`     =FeT"" 	2HHVD%0011E

UU+V44444r   namedepthc                 f    |                      d|z             |                     d|d           d S )Nzpool %sr6      r-   r3   r4   )r   r5   r6   s      r   poolzWriter.pool9   s7    

9t#$$$guQ/////r   Fcommanddescriptiondepfile	generatorr;   restatrspfilerspfile_contentdepsc                 
   |                      d|z             |                     d|d           |r|                     d|d           |r|                     d|d           |r|                     ddd           |r|                     d	|d           |r|                     d
dd           |r|                     d|d           |	r|                     d|	d           |
r|                     d|
d           d S d S )Nzrule %sr<   r8   r9   r=   r>   r?   1r;   r@   rA   rB   rC   r:   )r   r5   r<   r=   r>   r?   r;   r@   rA   rB   rC   s              r   rulezWriter.rule=   sF    	

9t#$$$i333 	@MM-QM??? 	8MM)WQM777 	6MM+s1M555 	2MM&$qM111 	3MM(CM222 	8MM)WQM777 	HMM+_QMGGG 	2MM&$qM11111	2 	2r   outputsrF   inputsimplicit
order_only	variablesimplicit_outputsdyndepc
           	         t          |          }d |D             }
d t          |          D             }|rCd t          |          D             }|                    d           |                    |           |rCd t          |          D             }|                    d           |                    |           |rCd t          |          D             }|
                    d           |
                    |           |                     dd	                    |
          d
d	                    |g|z                        ||                     d|z             |	|                     d|	z             |rft          |t                    r"t          |                                          }nt          |          }|D ]\  }}| 	                    ||d           |S )Nc                 ,    g | ]}t          |          S  r   .0xs     r   
<listcomp>z Writer.build.<locals>.<listcomp>o   s    777!{1~~777r   c                 ,    g | ]}t          |          S rP   rQ   rR   s     r   rU   z Writer.build.<locals>.<listcomp>p   s    >>>k!nn>>>r   c                 ,    g | ]}t          |          S rP   rQ   rR   s     r   rU   z Writer.build.<locals>.<listcomp>s   s    BBB1ABBBr   |c                 ,    g | ]}t          |          S rP   rQ   rR   s     r   rU   z Writer.build.<locals>.<listcomp>w   s    FFFQ+a..FFFr   z||c                 ,    g | ]}t          |          S rP   rQ   rR   s     r   rU   z Writer.build.<locals>.<listcomp>{   s4      D  D  D$% !,A  D  D  Dr   zbuild r   z: z  pool = %sz  dyndep = %sr8   r9   )
as_listappendextendr3   r1   r/   dictiteritemsr4   )r   rG   rF   rH   rI   rJ   rK   rL   r;   rM   out_outputs
all_inputsiteratorr+   vals                  r   buildzWriter.build]   s*   " '""77w777>>gfoo>>>
 	(BB0A0ABBBHc"""h''' 	*FF'*2E2EFFFJd###j))) 	1 D  D)01A)B)B D  D  Ds###/000


SXXk%:%:%:%:%(XXtfz.A%B%B%BD 	E 	E 	EJJ}t+,,,JJ/000 	2)T** +	 1 122	??$ 2 2Sc3q1111r   pathc                 6    |                      d|z             d S )Nz
include %sr3   r   rf   s     r   includezWriter.include   s    

<$&'''''r   c                 6    |                      d|z             d S )Nzsubninja %srh   ri   s     r   subninjazWriter.subninja   s    

=4'(((((r   pathsc                 v    |                      dd                    t          |                    z             d S )Nz
default %sr   )r3   r1   r[   )r   rm   s     r   defaultzWriter.default   s1    

<#((75>>":"::;;;;;r   sic                 p    d}|dz
  }|dk    r(||         dk    r|dz  }|dz  }|dk    r||         dk    |S )z<Returns the number of '$' characters right in front of s[i].r   r8   $rP   )r   rp   rq   dollar_countdollar_indexs        r   _count_dollars_before_indexz"Writer._count_dollars_before_index   s`    1uQ1\?c#9#9ALAL Q1\?c#9#9 r   c                    d|z  }t          |          t          |          z   | j        k    r| j        t          |          z
  t          d          z
  }|}	 |                    dd|          }|dk     s|                     ||          dz  dk    rn<|dk     rD|dz
  }	 |                    d|dz             }|dk     s|                     ||          dz  dk    rn>|dk     rnf| j                            ||d|         z   dz              ||dz   d	         }d|dz   z  }t          |          t          |          z   | j        k    | j                            ||z   d
z              d	S )z3Write 'text' word-wrapped at self.width characters.z  z $Tr   r   r$   r8   z $
Nr   )lenr   rfindrv   findr   r   )r   r"   r-   leading_spaceavailable_spacespaces         r   r3   zWriter._line   s   v-  3t99,tz99
 #j3}+=+==D		IO#E

3511AII44T5AAAEJJ	 qyy'!+ IIc51955E		88uEEIQNN	
 qyyKmd1U7m;fDEEEa>D !F1H-M; -  3t99,tz99> 	-$.566666r   c                 8    | j                                          d S r   )r   closer    s    r   r   zWriter.close   s    r   )r   )r   N)r   )NNFNFNNN)NNNNNNN)__name__
__module____qualname__r   intr   r!   strr*   r   r	   boolfloatr   r4   r;   rF   r   r   re   rj   rl   ro   rv   r3   r   rP   r   r   r   r       s        } S $           2C 2D 2 2 2 2 	
5 
5
5 dCT#Y>?@
5 	
5
 

5 
5 
5 
50 0S 0T 0 0 0 0 &*!%"!%)-042 22 2 c]	2
 #2 2 sm2 2 #2 "#2 uS$s)^,-2 
2 2 2 2H 37486: <@" $3 3sDI~&3 3 sDI~./	3
 5d3i013 U3S	>233 U3sDI~)> ??@AS(5d3i#899:<
3 #5d3i#893 sm3 3  
c!3 3 3 3j(C (D ( ( ( ()S )T ) ) ) )<U3S	>2 <t < < < <S S S    "7 "7# "7s "74 "7 "7 "7 "7H     r   r   inputc                 >    | g S t          | t                    r| S | gS r   )r/   r0   )r   s    r   r[   r[      s*    }	% 7Nr   stringc                 J    d| vs
J d            |                      dd          S )zbEscape a string such that it can be embedded into a Ninja file without
    further interpretation.r   z$Ninja syntax does not allow newlinesrs   z$$r   )r   s    r   escaper      s2     vE>>#t$$$r   vars
local_varsc                 r    dt           t                   dt          ffd}t          j        d||           S )zExpand a string containing $vars as Ninja would.

    Note: doesn't handle the full Ninja variable syntax, but it's enough
    to make configure.py's use of it work.
    mr   c                     |                      d          }|dk    rdS                     |                    |d                    S )Nr8   rs    )groupget)r   varr   r   s     r   expzexpand.<locals>.exp   sB    ggajj#::3~~c488C#4#4555r   z
\$(\$|\w*))r   r   resub)r   r   r   r   s    `` r   expandr      sO    6uSz 6c 6 6 6 6 6 6 6
 6-f---r   )__doc__r   r'   ior   typingr   r   r   r   r   r	   r   r   objectr   r[   r   r   rP   r   r   <module>r      sq  "  
			        < < < < < < < < < < < < < < < <Kc Kc K K K Ki i i i iV i i iX8E#tCy.12 tCy    %3 %3 % % % % LN . .3 .d38n .$sCx. .RU . . . . . .r   