
    eN                       d 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
Z
ddlZddlZddlmZ ddlmZmZ ddlmZ ej        r+ddlmZmZ dd	lmZ ej        ed
ef         Zej        e         Zd:dZ d:dZ!d:dZ"d;dZ#dej$        v Z% G d dej&                  Z'e G d d                      Z( e(            Z)e)j*        Z*e)j+        Z+e)j,        Z,e)j-        Z-e)j.        Z.e)j/        Z/e)j0        Z0e)j1        Z1e)j2        Z2e)j3        Z3e)j4        Z4e)j5        Z5e)j6        Z6e)j7        Z7e)j8        Z8e)j9        Z9e)j:        Z:e)j;        Z;e)j<        Z<e)j=        Z=e)j>        Z>e)j?        Z?e)j@        Z@e)jA        ZA G d d
          ZB G d d          ZCd<d=dZDd<d=dZEd>d ZFd>d!ZGd>d"ZHd>d#ZId>d$ZJd>d%ZKd>d&ZLd>d'ZMd>d(ZNd>d)ZOd>d*ZPd?d/ZQd@d3ZRdAd6ZSdBd9ZTdS )CzThis is (mostly) a standalone module used to write logging
information about Meson runs. Some output goes to screen,
some to logging dir and some goes to both.    )annotationsN)contextmanager)	dataclassfield)Path   )StringProtocolSizedStringProtocol)BaseNodeAnsiDecoratorreturnboolc                 X    t          j                                                    } | dk    S )Nwindows)platformsystemlower)platnames    4/usr/lib/python3.11/site-packages/mesonbuild/mlog.py
is_windowsr   +   s&      &&((Hy      c                 @   ddl m} m} ddlm} | j        }|                    d          } |            }|                    | ||                    sdS t          |	                    ||j
        dz            pt          j                            d                    S )Nr   )windllbyref)DWORDiF   ANSICON)ctypesr   r   ctypes.wintypesr   kernel32GetStdHandleGetConsoleModer   SetConsoleModevalueosenvironget)r   r   r   kernelstdoutmodes         r   _windows_ansir+   /   s    $$$$$$$$%%%%%%_F  %%F577D  t55 u %%fdj3.>??\2:>>R[C\C\]]]r   c                    t          t          j        dd           } | | S 	 t                      r?t	          j        t          j                                                  ot                      } nTt	          j        t          j                                                  o#t          j        	                    dd          dk    } n# t          $ r d} Y nw xY w| t          j        _        | S )Ncolorize_consoleTERMdumbF)getattrsysr)   r   r%   isattyfilenor+   r&   r'   	Exceptionr-   )_colorize_consoles    r   r-   r-   >   s    %cj2DdKK$  "<< 	l "	#**;*;*=*= > > R=?? "	#**;*;*=*= > > k2:>>RXZ`CaCaekCk " " "!" #4CJs   B!C CCNonec                 ~    t                      r.	 t          t          j        d           d S # t          $ r Y d S w xY wd S )Nr-   )r   delattrr1   r)   AttributeError r   r   setup_consoler;   N   sZ     || 	CJ 233333 	 	 	DD	 s   , 
::CIc                      e Zd Z ej                    Z ej                    Z ej                    Z ej                    ZdS )	_SeverityN)	__name__
__module____qualname__enumautoNOTICEWARNINGERRORDEPRECATIONr:   r   r   r>   r>   [   sB        TY[[FdikkGDIKKE$)++KKKr   r>   c                  j   e Zd ZU dZded<    ee          Zded<   dZded<   dZ	d	ed
<   dZ
dZdZ ee          Zded<   dZdZded<   dZded<   ed[d            Zed[d            Zd\dZd\dZd]dZd^dZd\dZd\d Zd_d`d%Zdadbd+Zddd,dcd0Zddd&d1ddd3Zdd&ddd&d4ded6Zdfd8Z dgd:Z!ddd&ddd&d;dhd=Z"did>Z#dd&ddd&d4ded?Z$dd&dd&ddd&d@djdGZ%dd&dd&dddHdkdIZ&dd&dd&dddHdkdJZ'dd&dd&dddHdkdKZ(dd&dd&dddHdkdLZ)dldmdQZ*edndodU            Z+dpdVZ,dqdXZ-ed[dY            Z.dqdZZ/dS )r_LoggerNT.Optional[str]log_dir)default_factoryT.List[str]	log_depthzT.Optional[T.TextIO]log_filezT.Optional[float]log_timestamp_startFzT.Set[T.Tuple[str, ...]]logged_oncer   zT.Optional['subprocess.Popen']	log_pagerzmeson-log.txtzT.ClassVar[str]
_LOG_FNAMEr   T.Iterator[None]c              #  H   K   d| _         	 d V  d| _         d S # d| _         w xY w)NTFlog_disable_stdoutselfs    r   
no_loggingz_Logger.no_loggingr   s>      "&	,EEE&+D###eD#++++s    	!c              #  V   K   | j         }d| _         	 d V  || _         d S # || _         w xY wNFrV   )rY   restores     r   force_loggingz_Logger.force_loggingz   sF      )"'	.EEE&-D###gD#----    	(r6   c                    d| _         d S )NTlog_errors_onlyrX   s    r   	set_quietz_Logger.set_quiet   s    #r   c                    d| _         d S r\   ra   rX   s    r   set_verbosez_Logger.set_verbose   s    $r   startfloatc                    || _         d S N)rP   )rY   rf   s     r   set_timestamp_startz_Logger.set_timestamp_start   s    #(   r   c                    | j         0| j         j        }| j         }d | _         |                                 |S |                                  d S ri   )rO   nameclose
stop_pager)rY   pathexception_around_goers      r   shutdownz_Logger.shutdown   sO    =$=%D$(M! DM!'')))Ktr   c                   t                      sd S g }dt          j        v r%t          j        t          j        d                   }nt          j        d          }|sgt                      rYt          j        d          }|rCt          |          j	        d         dz  dz  }t          j        dt          |                    }|r|g}|sd S 	 t          j                                        }d|vrd	|d<   d
|vrd|d
<   t          j        |t          j        dd|          | _        d S # t           $ r:}dt          j        v r!ddlm}  |dt          |                     Y d }~d S d }~ww xY w)NPAGERlessgitr   usrbin)ro   LESSRXFLVz-cTutf-8)stdintextencodingenv)MesonExceptionzFailed to start pager: )r-   r%   r&   shlexsplitshutilwhichr   r   parentsstrcopy
subprocessPopenPIPErR   r4   mesonlibr   )rY   	pager_cmdrt   ru   ro   r   er   s           r   start_pagerz_Logger.start_pager   s   !! 	F	bj  BJw$788II<''D @JLL @l5)) @99,Q/%7%?D!<SYY???D #!F	 	F	I *//##CS  #F3 D	'-iz37'sT T TDNNN 	I 	I 	I"*$$444444$n%Gs1vv%G%GHHH %$$$$$	Is   AD' '
E+1/E&&E+c                    | j         rp	 | j         j                                         | j         j                                         n# t          $ r Y nw xY w| j                                          d | _         d S d S ri   )rR   r|   flushrm   OSErrorwaitrX   s    r   rn   z_Logger.stop_pager   s    > 	"$**,,,$**,,,,   N!!!!DNNN	" 	"s   <A 
AAlogdirr   fatal_warningsr   c                    || _         t          t          j                            || j                  dd          | _        || _        d S )Nwr{   )r~   )rK   openr%   ro   joinrS   rO   log_fatal_warnings)rY   r   r   s      r   
initializez_Logger.initialize   s@    RW\\&$/BBCRYZZZ"0r   TargsT.Sequence[TV_Loggable]keepdisplay_timestampc                   g }| j         1|r/d                    t          j                    | j         z
            g}|D ]}|t	          |t
                    r|                    |           0t	          |t                    r)|                    |                    |                     n|                    t          |                     |S )Nz[{:.3f}])	rP   formattime	monotonic
isinstancer   appendr   get_text)rY   r   r   r   arrargs         r   process_markupz_Logger.process_markup   s    #/4E/$$T^%5%58P%PQQRC 	% 	%C{#s## %

3C// %

3<<--....

3s88$$$$
r   )sependnestedr   r   c               \   | j         rd S t          j                    }t          ||||d |                                }| j        rs|r| j        d         dz   nd}g }|                    d          D ]2}	|	                                }	|                    |	r||	z   nd           3d	                    |          }	 | j
        r| j
        j        nd }
t          |d|
           d S # t          $ r> |                    dd                              d          }t          |d	           Y d S w xY w)
N)r   r   filez|  
)r   r   asciireplace)r   )rW   ioStringIOprintgetvaluerN   r   stripr   r   rR   r|   UnicodeEncodeErrorencodedecode)rY   r   r   r   r   iostrrawprependlinesloutputcleaneds               r   force_printz_Logger.force_print   sT   " 	Ft#E2222nn> 	#39AdnR(4//rGEYYt__ 7 7GGIIA5Wq[[26666))E""C	#-1^ET^))F#2F++++++! 	# 	# 	#jj)44;;GDDG'r"""""""	#s   :'C# #AD+*D+)r   r   r   TV_Loggablec                   t          |d|          }| j        .t          || j        ||d | j                                         d S d S )NFr   r   r   )r   rO   r   r   )rY   r   r   r   r   r   s         r   debugz_Logger.debug   sW    T5*;<<=$3T]====M!!!!! %$r   is_errorr   r   r   r   r   c                   t          |d|          }| j        ,t          || j        ||d | j                                         t	                      rt          |d|          }| j        r|rt          ||||d d S d S )NFr   T)r   r   r   )r   rO   r   r   r-   rb   r   )rY   r   r   r   r   r   r   r   s           r   _logz_Logger._log   s     T5*;<<=$3T]====M!!! 	@ t->??C# 	?x 	?V#>>>>>>	? 	?r   cmdc                    t           sd S d |D             }|                     d                    |d                    |                               d S )Nc                    g | ]}d | d 	S )"r:   .0xs     r   
<listcomp>z*_Logger._debug_log_cmd.<locals>.<listcomp>  s     '''QA'''r   z!meson_ci!/{} {} )_in_cir   r   r   )rY   r   r   s      r   _debug_log_cmdz_Logger._debug_log_cmd  sU     	F''$'''

%,,S#((4..AABBBBBr   r   c                4    |                      d|g           d S )N
ci_include)r   )rY   r   s     r   cmd_ci_includez_Logger.cmd_ci_include  s     L4&11111r   )r   oncer   r   r   r   r   c          	     R    |r | j         ||||||d d S  | j        ||||||d d S )Nr   )	_log_oncer   )rY   r   r   r   r   r   r   r   s           r   logz_Logger.log  sZ    
  	vDND8FQThyzzzzzzDIthv3Cctuuuuuur   c                ,    | j         r | j        |  d S d S ri   )rP   r   rY   r   s     r   log_timestampz_Logger.log_timestamp  s(    # 	DHdOOOO	 	r   c          	         d	dt          fd|D                       }|| j        v rdS | j                            |            | j        ||||||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.
        r   r   r   r   c                    t          | t                    r| S t          | t                    r| j        S t          |           S ri   )r   r   r   r}   )r   s    r   to_strz!_Logger._log_once.<locals>.to_str$  s=    !S!! !]++ vq66Mr   c              3  .   K   | ]} |          V  d S ri   r:   )r   ar   s     r   	<genexpr>z$_Logger._log_once.<locals>.<genexpr>*  s+      **&&))******r   Nr   )r   r   r   r   )tuplerQ   addr   )	rY   r   r   r   r   r   r   tr   s	           @r   r   z_Logger._log_once  s    	 	 	 	 ****T*****   FQ	4(6s_pqqqqqqr   r   fatallocationr   r   r   r   severityr>   rargsr   r   T.Optional[BaseNode]c          	     D   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 rt          d          g}|t          |	          z   }|R ||j        t          j                              }t          ||j                  }t#          j        d|g          }||z   }t'          ||||||d | xj        dz  c_        | j        r|r |
d	          d S d S )
Nr   )r   relpathzNOTICE:zWARNING:ERROR:zDEPRECATION:TV_LoggableList)r   r   r   r   r   z Fatal warnings enabled, aborting)r   r   r   r>   rD   boldrE   yellowrF   redrG   listfilenamer%   getcwdget_error_location_stringlinenoTcastr   log_warnings_counterr   )rY   r   r   r   r   r   r   r   r   r   r   r   labelr   location_filelocation_strlocation_lists                    r   
_log_errorz_Logger._log_error0  sc    	65555555 y'''&*9oo%6EE***J''(EE((]]OEE...(()EtE{{"#GH$5ry{{CCM4]HOTTL F#4|nEEM 4'DTV#QQQQ!!Q&!!" 	Eu 	E .!CDDD	E 	E 	E 	Er   )r   r   r   r   r   r   c               D     | j         t          j        g|R ||||||ddS NTr   )r  r>   rF   rY   r   r   r   r   r   r   r   s           r   errorz_Logger.errorT  sK    
 ty O O ODX`&,#3O O O 	Or   c               D     | j         t          j        g|R ||||||ddS r  )r  r>   rE   r  s           r   warningz_Logger.warning\  sL    
 ty0 O4 O Od%Zb&,#3O O O 	Or   c               D     | j         t          j        g|R ||||||ddS r  )r  r>   rG   r  s           r   deprecationz_Logger.deprecationd  sL    
 ty4 Ot O O$e^f&,#3O O O 	Or   c               D     | j         t          j        g|R ||||||ddS )NFr   )r  r>   rD   r  s           r   noticez_Logger.noticel  sL    
 ty/ P$ P PTYa&,#3P P P 	Pr   r   r4   prefixT.Optional[AnsiDecorator]c                B   |t          d          }|                                  g }t          fddD                       rht          t	          j                  t	          t          j                                        }|                    | dj	         dj
         d           |r|                    |           |                    t                               |                                 5   | j        |ddi d d d            d S # 1 swxY w Y   d S )Nr   c              3  >   K   | ]}t          |d           d uV  d S ri   )r0   )r   r   r   s     r   r   z$_Logger.exception.<locals>.<genexpr>y  s4      TT1wq!T""$.TTTTTTr   )r   r   colno:r   T)r   r   allget_relative_pathr   r   r%   r   r   r   r  r   r^   )rY   r   r  r   ro   s    `   r   	exceptionz_Logger.exceptiont  s`   >]]F


46TTTT8STTTTT 	9 %T!&\\4	3D3DEEDKK477!(77QW777888 	 KKCFF!! 	+ 	+DHd*T***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s   9DDDr   rl   T.Generator[None, None, None]c              #     K   | j                             |           	 d V  | j                                          d S # | j                                          w xY wri   )rN   r   pop)rY   rl   s     r   r   z_Logger.nested  s^      d###	!EEEN     DN    s	   = Ac                    | j         S ri   )rK   rX   s    r   get_log_dirz_Logger.get_log_dir  s
    |r   intc                *    t          | j                  S ri   )lenrN   rX   s    r   get_log_depthz_Logger.get_log_depth  s    4>"""r   c              #  V   K   | j         }d| _         	 d V  || _         d S # || _         w xY w)Nr   r   )rY   olds     r   nested_warningsz_Logger.nested_warnings  sF      '$%!	,EEE(+D%%%D%++++r_   c                    | j         S ri   r   rX   s    r   get_warning_countz_Logger.get_warning_count  s    ((r   )r   rT   r   r6   )rf   rg   r   r6   )r   rJ   F)r   r   r   r   r   r6   )T)r   r   r   r   r   r   r   rM   )
r   r   r   r   r   rJ   r   rJ   r   r6   )
r   r   r   rJ   r   rJ   r   r   r   r6   )r   r   r   r   r   r   r   rJ   r   rJ   r   r   r   r6   )r   r   r   rM   r   r6   )r   r   r   r6   )r   r   r   r   r   r   r   r   r   rJ   r   rJ   r   r   r   r6   )r   r   r   r6   )r   r>   r   r   r   r   r   r   r   r   r   r   r   rJ   r   rJ   r   r   r   r6   )r   r   r   r   r   r   r   r   r   r   r   rJ   r   rJ   r   r6   ri   )r   r4   r  r  r   r6   )r   )rl   r   r   r  r   r   r   r  )0r?   r@   rA   rK   __annotations__r   r   rN   rO   rP   r   rW   rb   setrQ   r   rR   rS   r   rZ   r^   rc   re   rj   rq   r   rn   r   r   r   r   r   r   r   r   r   r   r  r  r  r
  r  r  r   r  r  r"  r$  r:   r   r   rI   rI   b   s          $G####"U4888I8888%)H))))-11111O,1E#,F,F,FKFFFF04I4444"1J1111, , , ^, . . . ^.$ $ $ $% % % %) ) ) )   $I $I $I $IL" " " "1 1 1 1 1
     LP+/# # # # # #0 @D%)T" " " " " " 9> $(D
? 
? 
? 
? 
? 
?C C C C2 2 2 2 8=t#'#'&*	v v v v v v    >C!%d)-r r r r r r* !&T48"&t*.$("E "E "E "E "E "EJ !/3!$%)	O O O O O O #$15#D'+	O O O O O O "'d59#'+/	O O O O O O "04"4&*	P P P P P P+ + + + +" ! ! ! ! ^!   # # # # , , , ^,) ) ) ) ) )r   rI   c                  4    e Zd ZdZdddZddZddZddZdS )r   z[0mFr}   r   codequotedr   c                0    || _         || _        || _        d S ri   )r}   r,  r-  )rY   r}   r,  r-  s       r   __init__zAnsiDecorator.__init__  s    		r   
with_codesr   c                x    | j         }|r#| j        r| j        | j         z   t          j        z   }| j        rd| d}|S )Nr   )r}   r,  r   
plain_coder-  )rY   r0  r}   s      r   r   zAnsiDecorator.get_text  sN    y 	D$) 	D9ty(=+CCD; 	t;;;Dr   r  c                *    t          | j                  S ri   )r  r}   rX   s    r   __len__zAnsiDecorator.__len__  s    49~~r   c                D    |                      t                                S ri   )r   r-   rX   s    r   __str__zAnsiDecorator.__str__  s    }}-//000r   Nr&  )r}   r   r,  r   r-  r   )r0  r   r   r   r(  r'  )r?   r@   rA   r2  r/  r   r4  r6  r:   r   r   r   r     sn        J    
      1 1 1 1 1 1r   c                  &    e Zd Zd
dZddZddZd	S )AnsiTextr   'SizedStringProtocol'c                    || _         d S ri   )r   r   s     r   r/  zAnsiText.__init__  s    			r   r   r  c                >    t          d | j        D                       S )Nc              3  4   K   | ]}t          |          V  d S ri   )r  r   s     r   r   z#AnsiText.__len__.<locals>.<genexpr>  s(      --a3q66------r   )sumr   rX   s    r   r4  zAnsiText.__len__  s!    --49------r   r   c                J    d                     d | j        D                       S )Nr   c              3  4   K   | ]}t          |          V  d S ri   )r   r   s     r   r   z#AnsiText.__str__.<locals>.<genexpr>  s(      11!s1vv111111r   )r   r   rX   s    r   r6  zAnsiText.__str__  s%    ww11ty111111r   N)r   r9  r(  r'  )r?   r@   rA   r/  r4  r6  r:   r   r   r8  r8    sP           . . . .2 2 2 2 2 2r   r8  Fr}   r   r-  c                &    t          | d|          S )Nz[1mr-  r   r}   r-  s     r   r   r         y8888r   c                &    t          | d|          S )Nz[3mrA  rB  rC  s     r   italicrF    rD  r   c                "    t          | d          S )Nr   rB  r}   s    r   plainrI    s    r"""r   c                "    t          | d          S )Nz[1;31mrB  rH  s    r   r   r         |,,,r   c                "    t          | d          S )Nz[1;32mrB  rH  s    r   greenrM    rK  r   c                "    t          | d          S )Nz[1;33mrB  rH  s    r   r   r     rK  r   c                "    t          | d          S )Nz[1;34mrB  rH  s    r   bluerP    rK  r   c                "    t          | d          S )Nz[1;36mrB  rH  s    r   cyanrR    rK  r   c                "    t          | d          S )Nz[31mrB  rH  s    r   
normal_redrT        z***r   c                "    t          | d          S )Nz[32mrB  rH  s    r   normal_greenrW    rU  r   c                "    t          | d          S )Nz[33mrB  rH  s    r   normal_yellowrY    rU  r   c                "    t          | d          S )Nz[34mrB  rH  s    r   normal_bluer[    rU  r   c                "    t          | d          S )Nz[36mrB  rH  s    r   normal_cyanr]    rU  r   fnamer	   r   r  c                    |  d| dS )Nr  r:   )r^  r   s     r   r   r     s    fr   targetr   currentc                    dg}|g|j         D ]>}	 |                     |          }t          g ||R  c S # t          $ r Y nw xY w|dgz  }?| S )z#Get the path to target from current.z..)r   relative_tor   
ValueError)r`  ra  accpartro   s        r   r  r    s     %C+7?+  	%%d++D##d###### 	 	 	D	v Ms   "6
AA
input_listrM   c                    t          |           }|dk    r8d                    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   r   )r  r   )rh  r   s     r   format_listrk    sx    JA1uu||TYYz#2#77BHIII	
a||J'''	
a!}rr   liner  c                    |  d| dd|z   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:   )r}   rl  r  s      r   	code_linero  !  s'     ,,d,,cEk,,,,r   )r   r   r%  r&  )r}   r   r-  r   r   r   )r}   r   r   r   )r^  r	   r   r  r   r   )r`  r   ra  r   r   r   )rh  rM   r   r   )r}   r   rl  r   r  r  r   r   )U__doc__
__future__r   rB   r%   r   r1   r   r   r   r   r   typingr   
contextlibr   dataclassesr   r   pathlibr   TYPE_CHECKING_typingr	   r
   mparserr   Unionr   r   Listr   r   r+   r-   r;   r&   r   Enumr>   rI   _loggerr   r   r
  r  r  r   r  r  r$  r   r   r   r   r"  rZ   r  r   rc   rj   re   rq   r   rn   r  r   r8  r   rF  rI  r   rM  r   rP  rR  rT  rW  rY  r[  r]  r   r  rk  ro  r:   r   r   <module>r}     s^  . . # " " " " "  				 				 



             % % % % % % ( ( ( ( ( ( ( (      ? *<<<<<<<<!!!!!!'#>?Kf[)O! ! ! !^ ^ ^ ^        
	    	    z) z) z) z) z) z) z) z)x	 '))'!	!%!- 
k%	)
	'	1 !!

/1 1 1 1 1 1 1 1,2 2 2 2 2 2 2 29 9 9 9 99 9 9 9 9# # # #- - - -- - - -- - - -- - - -- - - -+ + + ++ + + ++ + + ++ + + ++ + + +          "	 	 	 	- - - - - -r   