o
    ldpF                     @  s~  U 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	Z	d dl
Z
d dlZd dlmZ d dlmZ ejrYddlmZmZ ddlmZ ejedef Zeje Z	 dddZdddZdddZdddZda da!dZ"g Z#da$da%da&da'dej(v Z)e* Z+d a,da-de.d< dddZ/dddZ0dddZ1ddd Z2ddd$d%Z3dd(d)Z4dd+d,Z5G d-d dZ6G d.d/ d/Z7ddd2d3Z8ddd4d5Z9dd6d7Z:dd8d9Z;dd:d;Z<dd<d=Z=dd>d?Z>dd@dAZ?ddBdCZ@ddDdEZAddFdGZBddHdIZCddJdKZDddPdQZEdddRddVdWZFdddRddYdZZGdd\d]ZHdd_d`ZIdddadddbddedfZJddadddgddhdiZKddadddgddjdkZLddodpZMG dqdr drejNZOddaddadddadsddydzZPddaddaddd{dd|d}ZQddaddaddd{dd~dZRddaddaddd{dddZSddaddaddd{dddZTdddZUddddZVdddZWeddddSZXdddZYdddZZdddZ[dS )    )annotationsN)contextmanager)Path   )StringProtocolSizedStringProtocol)BaseNodeAnsiDecoratorreturnboolc                  C  s   t   } | dkS )Nwindows)platformsystemlower)Zplatname r   nhome/ych/rk3568/buildroot/output/rockchip_rk3568_recovery/host/lib/python3.10/site-packages/mesonbuild/mlog.py
is_windows)   s   r   c                  C  sh   ddl m} m} ddlm} | j}|d}| }||||s#dS t|	||j
dB p2tjdS )Nr   )windllbyref)DWORDiF   ZANSICON)ctypesr   r   Zctypes.wintypesr   kernel32ZGetStdHandleZGetConsoleModer   ZSetConsoleModevalueosenvironget)r   r   r   kernelstdoutmoder   r   r   _windows_ansi-   s   
"r    c                  C  s   t tjdd } | d ur| S z"t rttj ot } nttj o-tj	dddk} W n t
y:   d} Y nw | tj_| S )Ncolorize_consoleTERMZdumbF)getattrsysr   r   r   isattyfilenor    r   r   	Exceptionr!   )Z_colorize_consoler   r   r   r!   <   s   "r!   Nonec                   C  s2   t  rz	ttjd W d S  ty   Y d S w d S )Nr!   )r   delattrr$   r   AttributeErrorr   r   r   r   setup_consoleL   s   r+   zmeson-log.txtFZCIzT.Optional['subprocess.Popen']	log_pagerc                   C     da d S NTlog_disable_stdoutr   r   r   r   disablec      r1   c                   C  r-   NFr/   r   r   r   r   enableg   r2   r4   c                   C  r-   r.   log_errors_onlyr   r   r   r   	set_quietk   r2   r7   c                   C  r-   r3   r5   r   r   r   r   set_verboseo   r2   r8   logdirstrfatal_warningsc                 C  s$   | a ttj| tddda|ad S )Nwutf-8)encoding)log_diropenr   pathjoin	log_fnamelog_filelog_fatal_warnings)r9   r;   r   r   r   
initializes   s   rF   startfloatc                 C  s   | a d S N)log_timestamp_start)rG   r   r   r   set_timestamp_starty   r2   rK   T.Optional[str]c                  C  s,   t d urt j} t }d a |  | S t  d S rI   )rD   nameclose
stop_pager)rA   Zexception_around_goerr   r   r   shutdown}   s   rP   c                   @  s:   e Zd ZdZdddd	ZdddZdddZdddZdS )r	   z[0mFtextr:   codequotedr   c                 C  s   || _ || _|| _d S rI   )rQ   rR   rS   )selfrQ   rR   rS   r   r   r   __init__   s   
zAnsiDecorator.__init__
with_codesr
   c                 C  s8   | j }|r| jr| j| j  tj }| jrd| d}|S )N")rQ   rR   r	   
plain_coderS   )rT   rV   rQ   r   r   r   get_text   s   
zAnsiDecorator.get_textintc                 C  s
   t | jS rI   )lenrQ   rT   r   r   r   __len__      
zAnsiDecorator.__len__c                 C  s   |  t S rI   )rY   r!   r\   r   r   r   __str__   s   zAnsiDecorator.__str__NF)rQ   r:   rR   r:   rS   r   )rV   r   r
   r:   r
   rZ   r
   r:   )__name__
__module____qualname__rX   rU   rY   r]   r_   r   r   r   r   r	      s    

c                   @  s*   e Zd ZdddZdddZdd
dZdS )AnsiTextargs'SizedStringProtocol'c                 G  s
   || _ d S rI   )rg   )rT   rg   r   r   r   rU      r^   zAnsiText.__init__r
   rZ   c                 C  s   t dd | jD S )Nc                 s      | ]}t |V  qd S rI   )r[   .0xr   r   r   	<genexpr>       z#AnsiText.__len__.<locals>.<genexpr>)sumrg   r\   r   r   r   r]      s   zAnsiText.__len__r:   c                 C  s   d dd | jD S )N c                 s  ri   rI   )r:   rj   r   r   r   rm      rn   z#AnsiText.__str__.<locals>.<genexpr>)rB   rg   r\   r   r   r   r_      s   zAnsiText.__str__N)rg   rh   ra   rb   )rc   rd   re   rU   r]   r_   r   r   r   r   rf      s    

rf   rQ   rS   c                 C     t | d|dS )Nz[1mrS   r	   rQ   rS   r   r   r   bold      ru   c                 C  rq   )Nz[3mrr   rs   rt   r   r   r   italic   rv   rw   c                 C  
   t | dS )Nrp   rs   rQ   r   r   r   plain   r^   rz   c                 C  rx   )Nz[1;31mrs   ry   r   r   r   red   r^   r{   c                 C  rx   )Nz[1;32mrs   ry   r   r   r   green   r^   r|   c                 C  rx   )Nz[1;33mrs   ry   r   r   r   yellow   r^   r}   c                 C  rx   )Nz[1;34mrs   ry   r   r   r   blue   r^   r~   c                 C  rx   )Nz[1;36mrs   ry   r   r   r   cyan   r^   r   c                 C  rx   )Nz[31mrs   ry   r   r   r   
normal_red   r^   r   c                 C  rx   )Nz[32mrs   ry   r   r   r   normal_green   r^   r   c                 C  rx   )Nz[33mrs   ry   r   r   r   normal_yellow   r^   r   c                 C  rx   )Nz[34mrs   ry   r   r   r   normal_blue   r^   r   c                 C  rx   )Nz[36mrs   ry   r   r   r   normal_cyan   r^   r   rg   T.Sequence[TV_Loggable]keepT.List[str]c                 C  sx   g }t d urdt t  g}| D ]'}|d u rqt|tr$|| qt|tr2||| q|t| q|S )Nz[{:.3f}])	rJ   formattime	monotonic
isinstancer:   appendr	   rY   )rg   r   arrargr   r   r   process_markup   s   

r   )sependnestedr   r   c                 G  s   t rd S t }t||||d | }tr?| rtd d nd}g }|dD ]}| }||r6|| nd q(d	|}zt
rEt
jnd }	t|d|	d W d S  tyi   |ddd}
t|
dd	 Y d S w )
N)r   r   filez| rp   
)r   r   asciireplace)r   )r0   ioStringIOprintgetvalue	log_depthsplitstripr   rB   r,   stdinUnicodeEncodeErrorencodedecode)r   r   r   rg   Ziostrrawprependlinesloutputcleanedr   r   r   force_print   s&   
r   TV_Loggablec                 G  s4   t |d}td urt|t| |d t  d S d S )NFr   r   r   )r   rD   r   flush)r   r   rg   r   r   r   r   debug   s
   
r   cmdc                 C  s0   t sd S dd |D }td| d| d S )Nc                 S  s   g | ]}d | d qS )rW   r   rj   r   r   r   
<listcomp>  s    z"_debug_log_cmd.<locals>.<listcomp>z!meson_ci!/{} {} )_in_cir   r   rB   )r   rg   r   r   r   _debug_log_cmd   s   r   r   c                 C  s   t d| g d S )NZ
ci_include)r   )r   r   r   r   cmd_ci_include     r   T)is_erroroncer   r   r   r   r   c                 G  s4   |rt || |||d d S t|| |||d d S )Nr   r   r   r   )log_once_log)r   r   r   r   r   rg   r   r   r   log
  s   r   r   c                 G  s^   t |d}td urt|t||d t  t rt |d}tr"| r-t||||d d S d S )NFr   T)r   r   r   )r   rD   r   r   r!   r6   r   )r   r   r   r   rg   r   r   r   r   r     s   

r   c                   sN   ddd t  fdd|D }|tv rd	S t| t|| |||d
 d	S )zLog variant that only prints a given message one time per meson invocation.

    This considers ansi decorated values by the values they wrap without
    regard for the AnsiDecorator itself.
    rl   r   r
   r:   c                 S  s&   t | tr| S t | tr| jS t| S rI   )r   r:   r	   rQ   )rl   r   r   r   to_str(  s
   

zlog_once.<locals>.to_strc                 3  s    | ]} |V  qd S rI   r   rk   ar   r   r   rm   .  rn   zlog_once.<locals>.<genexpr>Nr   )rl   r   r
   r:   )tuple_logged_onceaddr   )r   r   r   r   rg   tr   r   r   r      s   

r   fnamelinenorZ   c                 C  s   |  d| dS )N:r   )r   r   r   r   r   get_error_location_string;  r   r   c                   @  s,   e Zd Ze Ze Ze Ze ZdS )	_SeverityN)	rc   rd   re   enumautoNOTICEWARNINGERRORDEPRECATIONr   r   r   r   r   ?  s
    r   r   fatallocationr   r   r   r   severityrargsr   r   T.Optional[BaseNode]c                G  s   ddl m}	m}
 | tju rtdg}n | tju rtdg}n| tju r)t	dg}n
| tj
u r3t	dg}|t| }|d urV|
|jt }t||j}td|g}|| }t||||||d td7 atrm|ro|	d	d S d S )
Nr   )MesonExceptionrelpathzNOTICE:zWARNING:ERROR:zDEPRECATION:TV_LoggableList)r   r   r   r   r   z Fatal warnings enabled, aborting)mesonlibr   r   r   r   ru   r   r}   r   r{   r   listfilenamer   getcwdr   r   Tcastr   log_warnings_counterrE   )r   r   r   r   r   r   r   r   r   r   r   labelrg   Zlocation_fileZlocation_strZlocation_listr   r   r   
_log_errorG  s(   




r   )r   r   r   r   r   r   c              
   G  $   t tjg|R | |||||ddS NTr   )r   r   r   r   r   r   r   r   r   rg   r   r   r   errorl     r   c              
   G  r   r   )r   r   r   r   r   r   r   warningt  r   r   c              
   G  r   r   )r   r   r   r   r   r   r   deprecation|  r   r   c              
   G  r   )NFr   )r   r   r   r   r   r   r   notice  r   r   targetr   currentc              	   C  s\   dg}|g|j D ]"}z| |}tg ||R  W   S  ty%   Y nw |dg7 }q	| S )z#Get the path to target from current.z..)parentsrelative_tor   
ValueError)r   r   accpartrA   r   r   r   get_relative_path  s   
r   er'   prefixT.Optional[AnsiDecorator]c                   s   |d u rt d}t  g }t fdddD r4tt jtt }|| d j	 d j
 d |r;|| |t  t}|rIt  t|ddi |rWt  d S d S )Nr   c                 3  s     | ]}t  |d d uV  qd S rI   )r#   r   r   r   r   rm     s    zexception.<locals>.<genexpr>)r   r   colnor   r   T)r{   r   allr   r   r   r   r   r   r   r   r:   r0   r4   r1   )r   r   rg   rA   restorer   r   r   	exception  s"    

r   
input_listc                 C  sV   t | }|dkrdd| d d | d gS |dkr!d| S |dkr)| d S dS )N   z and z, r   r   r   rp   )r[   rB   )r   r   r   r   r   format_list  s    
r   rp   rM   T.Generator[None, None, None]c                 c  s,    t |  z
d V  W t   d S t   w rI   )r   r   pop)rM   r   r   r   r     s
   
c               
   C  s(  t  sd S g } dtjv rttjd } n*td}|s:t r:td}|r:t|j	d d d }tjdt
|d}|r?|g} | sCd S td u sIJ z#tj }d|vrWd	|d< d
|vr_d|d
< tj| tjdd|daW d S  ty } zdtjv rddlm} |dt
| W Y d }~d S d }~ww )NZPAGERlessgitr   Zusrbin)rA   LESSZRXFLVz-cTr=   )r   rQ   r>   env)r   zFailed to start pager: )r!   r   r   shlexr   shutilwhichr   r   r   r:   r,   copy
subprocessPopenPIPEr'   r   r   )Z	pager_cmdr   r   rA   r  r   r   r   r   r   start_pager  s@   






r  c                   C  sD   t r zt j  t j  W n	 ty   Y nw t   d a d S d S rI   )r,   r   r   rN   BrokenPipeErrorwaitr   r   r   r   rO     s   
rO   liner   c                 C  s   |  d| dd|  dS )a  Print a line with a caret pointing to the colno

    :param text: A message to display before the line
    :param line: The line of code to be pointed to
    :param colno: The column number to point at
    :return: A formatted string of the text, line, and a caret
    r   r   ^r   )rQ   r  r   r   r   r   	code_line  s   r  )r
   r   )r
   r(   r`   )r9   r:   r;   r   r
   r(   )rG   rH   r
   r(   )r
   rL   )rQ   r:   rS   r   r
   r	   )rQ   r:   r
   r	   )rg   r   r   r   r
   r   )
rg   r:   r   r   r   rL   r   rL   r
   r(   )rg   r   r   rL   r   rL   r
   r(   )r   r:   rg   r   r
   r(   )r   r:   r
   r(   )rg   r   r   r   r   r   r   r   r   rL   r   rL   r
   r(   )rg   r   r   r   r   r   r   rL   r   rL   r
   r(   )r   r:   r   rZ   r
   r:   )r   r   r   r   r   r   r   r   r   r   r   r   r   rL   r   rL   r   r   r
   r(   )rg   r   r   r   r   r   r   r   r   r   r   rL   r   rL   r
   r(   )r   r   r   r   r
   r   rI   )r   r'   r   r   r
   r(   )r   r   r
   r:   )rp   )rM   r:   r
   r   )rQ   r:   r  r:   r   rZ   r
   r:   )\
__future__r   r   r   r   r$   r   r   r  r	  r  typingr   
contextlibr   pathlibr   TYPE_CHECKINGZ_typingr   r   Zmparserr   Unionr:   r   Listr   r   r    r!   r+   r?   rD   rC   r   rJ   rE   r0   r6   r   r   setr   r   r,   __annotations__r1   r4   r7   r8   rF   rK   rP   r	   rf   ru   rw   rz   r{   r|   r}   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Enumr   r   r   r   r   r   r   r   r   r   r  rO   r  r   r   r   r   <module>   s   




























	&			



(