
    ] h              	           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y)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                 f    | j                  dd      j                  dd      j                  dd      S )Nz$ z$$  :z$:replace)r
   s    n/home/developers/rajanand/mypropertyqr-fmb-refixing-v2/venv/lib/python3.12/site-packages/ninja/ninja_syntax.pyescape_pathr      s-    <<e$,,S$7??TJJ    c                      e Zd Zd-dededdfdZd.dZdeddfdZ	 d/d	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	 	 	 	 	 	 	 	 d0d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	 	 	 	 	 	 	 d1d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d/dededdfd+Zd.d,Zy)2Writeroutputwidthr   Nc                      || _         || _        y N)r   r   )selfr   r   s      r   __init__zWriter.__init__!   s    
r   c                 :    | j                   j                  d       y )N
)r   writer   s    r   newlinezWriter.newline%   s    $r   textc                     t        j                  || j                  dz
  dd      D ]#  }| j                  j	                  d|z   dz          % y )N   F)break_long_wordsbreak_on_hyphensz# r   )textwrapwrapr   r   r   )r   r!   lines      r   commentzWriter.comment(   sF    MM$

Q38: 	2DKKdTkD01	2r   keyvalueindentc                     |y t        |t              rdj                  t        d |            }| j	                  |d||       y )Nr   z = )
isinstancelistjoinfilter_line)r   r*   r+   r,   s       r   variablezWriter.variable-   s>     =eT"HHVD%01E

U+V4r   namedepthc                 T    | j                  d|z         | j                  d|d       y )Nzpool %sr5      r,   r2   r3   )r   r4   r5   s      r   poolzWriter.pool9   s%    

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

9t#$i3MM-QM?MM)WQM7MM+s1M5MM&$qM1MM(CM2MM)WQM7MM+_QMGMM&$qM1 r   outputsrE   inputsimplicit
order_only	variablesimplicit_outputsdyndepc
           	         t        |      }|D 
cg c]  }
t        |
       }}
t        |      D 
cg c]  }
t        |
       }}
|rCt        |      D 
cg c]  }
t        |
       }}
|j                  d       |j                  |       |rCt        |      D 
cg c]  }
t        |
       }}
|j                  d       |j                  |       |rCt        |      D 
cg c]  }
t        |
       }}
|j                  d       |j                  |       | j	                  ddj                  |      ddj                  |g|z                || j	                  d|z         |	| j	                  d|	z         |rSt        |t              rt        |j                               }nt        |      }|D ]  \  }}| j                  ||d	        |S c c}
w c c}
w c c}
w c c}
w c c}
w )
N|z||zbuild r   z: z  pool = %sz  dyndep = %sr7   r8   )as_listr   appendextendr2   r0   r.   dictiteritemsr3   )r   rF   rE   rG   rH   rI   rJ   rK   r:   rL   xout_outputs
all_inputsiteratorr*   vals                   r   buildzWriter.build]   s   " '"/67!{1~77.5fo>k!n>
>070AB1ABHBc"h'29*2EFQ+a.FJFd#j))01A)B D$% !,A  D  Ds#/0

SXXk%:%(XXtfz.A%BD 	EJJ}t+,JJ/0)T*	 12	?$ 2Sc3q12 C 8> C G Ds   GGGGG$pathc                 ,    | j                  d|z         y )Nz
include %sr2   r   r[   s     r   includezWriter.include   s    

<$&'r   c                 ,    | j                  d|z         y )Nzsubninja %sr]   r^   s     r   subninjazWriter.subninja   s    

=4'(r   pathsc                 \    | j                  ddj                  t        |            z         y )Nz
default %sr   )r2   r0   rO   )r   rb   s     r   defaultzWriter.default   s     

<#((75>"::;r   sic                 ^    d}|dz
  }|dkD  r ||   dk(  r|dz  }|dz  }|dkD  r	||   dk(  r|S )z<Returns the number of '$' characters right in front of s[i].r   r7   $ )r   re   rf   dollar_countdollar_indexs        r   _count_dollars_before_indexz"Writer._count_dollars_before_index   sT    1uQ1\?c#9ALAL Q1\?c#9 r   c                    d|z  }t        |      t        |      z   | j                  kD  r| j                  t        |      z
  t        d      z
  }|}	 |j                  dd|      }|dk  s| j                  ||      dz  dk(  rn2|dk  r:|dz
  }	 |j	                  d|dz         }|dk  s| j                  ||      dz  dk(  rn4|dk  rnY| j
                  j                  ||d| z   dz          ||dz   d }d|dz   z  }t        |      t        |      z   | j                  kD  r| j
                  j                  ||z   d	z          y)
z3Write 'text' word-wrapped at self.width characters.z  z $r   r   r#   r7   z $
Nr   )lenr   rfindrl   findr   r   )r   r!   r,   leading_spaceavailable_spacespaces         r   r2   zWriter._line   s`   v- 3t9,tzz9
 #jj3}+==D	IO#E

351AI44T5AAEJ	  qy'!+ IIc5195E	88uEIQN	 
 qyKKmd1Um;fDEa>D !F1H-M; - 3t9,tzz9> 	-$.56r   c                 8    | j                   j                          y r   )r   closer   s    r   ru   zWriter.close   s    r   )N   )r   N)r   )NNFNFNNN)NNNNNNN)__name__
__module____qualname__r   intr   r    strr)   r   r	   boolfloatr   r3   r:   rE   r   r   rZ   r_   ra   rd   rl   r2   ru   ri   r   r   r   r       s    } S $  2C 2D 2 	
5
5 dCT#Y>?@
5 	
5
 

50 0S 0T 0 &*!%"!%)-0422 2 c]	2
 #2 2 sm2 2 #2 "#2 uS$s)^,-2 
2H 37486: <@" $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j(C (D ()S )T )<U3S	>2 <t <S S S "7# "7s "74 "7Hr   r   inputc                 4    | g S t        | t              r| S | gS r   )r.   r/   )r~   s    r   rO   rO      s"    }	%7Nr   stringc                 <    d| vsJ d       | j                  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 newlinesrh   z$$r   )r   s    r   escaper      s)     vEEE>>#t$$r   vars
local_varsc                 h    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                 v    | j                  d      }|dk(  ryj                  |j                  |d            S )Nr7   rh    )groupget)r   varr   r   s     r   expzexpand.<locals>.exp   s6    ggaj#:~~c488C#455r   z
\$(\$|\w*))r   r{   resub)r   r   r   r   s    `` r   expandr      s/    6uSz 6c 6
 66-f--r   )__doc__r   r&   ior   typingr   r   r   r   r   r	   r{   r   objectr   rO   r   r   ri   r   r   <module>r      s   " 
   < <Kc Kc KiV iX8E#tCy.12 tCy %3 %3 % LN .3 .d38n .$sCx. .RU .r   