§
    Ö)ögÁ%  ã                   óÞ  — d Z ddlZddlZddlZddlZddlmZmZ ej         	                    dd¦  «        sªej
                             ¦   «         r< eej
        ¦  «         eej        ¦  «        k    r ej        ej
        ¦  «        e_
        ej                             ¦   «         r< eej        ¦  «         eej        ¦  «        k    r ej        ej        ¦  «        e_        ddlZej         	                    dd¦  «        Zej         	                    dd	¦  «        Zg Z	 dZ	 d
ddddddddddddœZdZ	 e n# e$ r dZY nw xY wd„ Z	 ej        Zn# e$ r d„ ZY nw xY wde_         d„ Z G d„ de¦  «        Z e¦   «         Z  ej!        dej"        ¦  «        Z# G d„ d ej$        ¦  «        Z% G d!„ d"ej&        ¦  «        Z' G d#„ d$ej(        ¦  «        Z)da*	 d%„ Z+d&„ Z,d'„ Z-d(„ Z.d)„ Z/d*„ Z0d1d,„Z1d-„ Z2d2d0„Z3dS )3z2
logging, colors, terminal width and pretty-print
é    N)ÚUtilsÚansitermÚNOSYNCFÚWAF_LOG_FORMATz,%(asctime)s %(c1)s%(zone)s%(c2)s %(message)sÚWAF_HOUR_FORMATz%H:%M:%STz[01;1mz[01;31mz[32mz[33mz[35mz[01;34mz[36mz[37mz[0mz[?25hz[?25l)ÚUSEÚBOLDÚREDÚGREENÚYELLOWÚPINKÚBLUEÚCYANÚGREYÚNORMALÚ	cursor_onÚ
cursor_offz
[K%s%s%sc                 ó’  — | dk    r¡t           j                             ¦   «         s t           j                             ¦   «         sd} t          j        r1t          j        dk    r!t          j         	                    dd¦  «        }n t          j         	                    dd¦  «        }|dv rd} | dk    rdt          j        d<   | t          d	<   d
S )a3  
	If *1* is given, then the system will perform a few verifications
	before enabling colors, such as checking whether the interpreter
	is running in a terminal. A value of zero will disable colors,
	and a value above *1* will force colors.

	:param use: whether to enable colors or not
	:type use: integer
	é   r   ÚjavaÚTERMÚ Údumb)r   ÚemacsÚvt100r   N)ÚsysÚstderrÚisattyÚstdoutr   Úis_win32ÚosÚnameÚenvironÚgetÚ
colors_lst)ÚuseÚterms     ú%/git_repos/midimsg-lv2/waflib/Logs.pyÚenable_colorsr)   :   sµ   € ð ˆ1‚H€HÝ
Œ*×
Ò
Ñ
Ô
ð ¥¤×!2Ò!2Ñ!4Ô!4ð Ø	
€3Ý
„^ð )�œ 6Ò)Ð)Ý
Œ*�.Š.˜ Ñ
$Ô
$€4€4å
Œ*�.Š.˜ Ñ
(Ô
(€4à	ÐÐÐØ	
€3àˆ1‚H€HØ…"„*ˆVÑà…ˆEÑÐÐó    c                  ó   — dS )NéP   © r-   r*   r(   Úget_term_colsr.   Y   s   € Ø	ˆr*   zf
	Returns the console width in characters.

	:return: the number of characters per line
	:rtype: int
	c                 óV   — t           d         rt                                | d¦  «        S dS )zÂ
	Returns the ansi sequence corresponding to the given color name.
	An empty string is returned when coloring is globally disabled.

	:param cl: color name in capital letters
	:type cl: string
	r   r   )r%   r$   )Úcls    r(   Ú	get_colorr1   c   s*   € õ ˆuÔð  Ý	�Š˜˜BÑ	Ô	ÐØ
ˆr*   c                   ó   — e Zd ZdZd„ Zd„ ZdS )Ú
color_dictz-attribute-based color access, eg: colors.PINKc                 ó    — t          |¦  «        S ©N©r1   ©ÚselfÚas     r(   Ú__getattr__zcolor_dict.__getattr__q   ó   € Ý	�1‰ŒÐr*   c                 ó    — t          |¦  «        S r5   r6   r7   s     r(   Ú__call__zcolor_dict.__call__s   r;   r*   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r:   r=   r-   r*   r(   r3   r3   o   s8   € € € € € Ø4Ð4ðð ð ðð ð ð ð r*   r3   z(\w+): (.*)c                   ó    — e Zd ZdZdd„Zd„ ZdS )Ú
log_filterzù
	Waf logs are of the form 'name: message', and can be filtered by 'waf --zones=name'.
	For example, the following::

		from waflib import Logs
		Logs.debug('test: here is a message')

	Will be displayed only when executing::

		$ waf --zones=test
	r   c                 óF   — t           j                             | |¦  «         d S r5   )ÚloggingÚFilterÚ__init__)r8   r"   s     r(   rG   zlog_filter.__init__…   s    € Ý	„.×Ò˜$ Ñ%Ô%Ð%Ð%Ð%r*   c                 ó`  — |j         |_        |j        t          j        k    rdS t
                               |j        ¦  «        }|r4|                     d¦  «        |_        |                     d¦  «        |_        t          r!t          |dd¦  «        t          v pdt          v S t          dk    sdS dS )zO
		Filters log records by zone and by logging level

		:param rec: log entry
		Tr   é   Úzoner   Ú*F)ÚmodulerJ   ÚlevelnorE   ÚINFOÚre_logÚmatchÚmsgÚgroupÚzonesÚgetattrÚverbose)r8   ÚrecÚms      r(   Úfilterzlog_filter.filterˆ   s™   € ð ŒZ€#„(Ø„[•G”LÒ Ð Ø
ˆ$å‡l‚l�3”7ÑÔ€!Øð Ø�gŠg�a‰jŒj€3„8Ø�WŠW�Q‰ZŒZ€3„7å
ð Ý
�#�v˜rÑ
"Ô
"¥eÐ
+Ð
;¨sµe¨|Ð;Ý�QŠ;ˆ;Ø
ˆ%Ø	ˆr*   N)r   )r>   r?   r@   rA   rG   rX   r-   r*   r(   rC   rC   y   sA   € € € € € ð
ð 
ð&ð &ð &ð &ðð ð ð ð r*   rC   c                   ó   — e Zd ZdZd„ Zd„ ZdS )Úlog_handlerzDDispatches messages to stderr/stdout depending on the severity levelc                 ó~  — 	 	 |j         | _         nV# t          $ rI |j        t          j        k    rt
          j        x|_         | _         nt
          j        x|_         | _         Y nw xY w|                      |¦  «         |  	                    ¦   «          dS # t          t          f$ r ‚  |                      |¦  «         Y dS xY w)zT
		Delegates the functionality to :py:meth:`waflib.Log.log_handler.emit_override`
		N)ÚstreamÚAttributeErrorrM   rE   ÚWARNINGr   r   r   Úemit_overrideÚflushÚKeyboardInterruptÚ
SystemExitÚhandleError)r8   Úrecords     r(   Úemitzlog_handler.emitŸ   sÌ   € ð
ð.Ø”-€D„K€KøÝ
ð .ð .ð .Ø„~�œÒ(Ð(Ý#&¤:Ð-€V„]�T”[�[å#&¤:Ð-€V„]�T”[øøð	.øøøð
 ×Ò�fÑÔÐØ‡:‚:�<„<€<€<€<øÝ
�ZÐ	(ð 	ð 	ð 	ØðØ×Ò�FÑÔÐÐÐÐøøøs'   ƒ �B �AA#Á B Á"A#Á#,B Â(B<c                 óÂ  — t          |dd¦  «        | _        | j        }t          �r| j                             |¦  «        }d| j        z   }	 t          |t          ¦  «        r…t          |dd¦  «        rt|                     |j        ¦  «        }	 | 	                    ||z  ¦  «         nZ# t          $ r3 | 	                    ||z                       |j        ¦  «        ¦  «         Y n w xY w| 	                    ||z  ¦  «         dS dS dS # t          $ r/ | 	                    ||z                       d¦  «        ¦  «         Y dS w xY wt          j                             | |¦  «         dS )zA
		Writes the log record to the desired stream (stderr/stdout)
		Ú
terminatorú
z%sÚencodingNúutf-8)rT   rg   r\   ÚunicodeÚ	formatterÚformatÚ
isinstanceÚdecoderi   ÚwriteÚUnicodeEncodeErrorÚencodeÚUnicodeErrorrE   ÚStreamHandlerre   )r8   rd   Úkwr\   rQ   Úfss         r(   r_   zlog_handler.emit_override³   s€  € õ ˜F L°$Ñ7Ô7€$„/ØŒ;€&Ýñ ,à	Œ×	Ò	˜vÑ	&Ô	&€3ØˆtŒÑ€2ð
-Ý�3�Ñ Ô ð ¥W¨V°ZÀÑ%FÔ%Fð Ø
�)Š)�F”OÑ
$Ô
$€Rð7Ø‡l‚l�2˜‘8ÑÔÐÐøÝð 7ð 7ð 7Ø‡l‚l�B˜‘H×$Ò$ V¤_Ñ5Ô5Ñ6Ô6Ð6Ð6Ð6ð7øøøð ‡\‚\�"�s‘(ÑÔÐÐÐð	 Ðà6Ð6øõ ð -ð -ð -Ø
‡L‚L�"�s‘(×"Ò" 7Ñ+Ô+Ñ,Ô,Ð,Ð,Ð,Ð,ð-øøøõ Ô×Ò˜d FÑ+Ô+Ð+Ð+Ð+s7   ÁA D ÂB% Â$D Â%:C"ÃD Ã!C"Ã"D Ä5D<Ä;D<N)r>   r?   r@   rA   re   r_   r-   r*   r(   rZ   rZ   �   s8   € € € € € ØKÐKðð ð ð(,ð ,ð ,ð ,ð ,r*   rZ   c                   ó   — e Zd ZdZd„ Zd„ ZdS )rl   z)Simple log formatter which handles colorsc                 ó\   — t           j                             | t          t          ¦  «         d S r5   )rE   Ú	FormatterrG   Ú
LOG_FORMATÚHOUR_FORMAT)r8   s    r(   rG   zformatter.__init__Í   s#   € Ý	Ô×Ò˜T¥:­{Ñ;Ô;Ð;Ð;Ð;r*   c                 ó  — 	 |j                              d¦  «        }n# t          $ r
 |j         }Y nw xY wt          d         }|dk    r|j                             ¦   «         s|dk    ržt          |dd¦  «        }|€gd}|j        t          j	        k    rt          j        }nC|j        t          j        k    rt          j        }n!|j        t          j        k    rt          j        }t          |dt          j        ¦  «        }|›|›|›�}nt#          j        d	d|¦  «        }|j        t          j        k    r|j        r
||j        z  S |S ||_         t          j        |_        t          j        |_        t          j                             | |¦  «        S )
z…
		Formats records and adds colors as needed. The records do not get
		a leading hour format if the logging level is above *INFO*.
		rj   r   r   rI   Úc1Nr   Úc2z\r(?!\n)|\x1B\[(K|.*?(m|h|l)))rQ   ro   Ú	Exceptionr%   r\   r   rT   rM   rE   ÚERRORÚcolorsr
   r^   r   rN   r   r   ÚreÚsubÚargsr   r}   r~   ry   rm   )r8   rV   rQ   r&   r}   r~   s         r(   rm   zformatter.formatÐ   sk  € ð
Ø	Œ�Š˜Ñ	 Ô	 €3€3øÝ	ð ð ð Ø	Œ€3€3€3ðøøøõ 	�5Ô€#Ø	ˆQ‚h€h�3”:×$Ò$Ñ&Ô&€h¨3°!ª8¨8å��T˜4Ñ Ô €2Ø€jØ	€BØ
„{•g”mÒ#Ð#Ý
Œ*€R€RØ	Œ�œÒ	'Ð	'Ý
Œ-€R€RØ	Œ�œÒ	$Ð	$Ý
Œ,€RÝ��T�6œ=Ñ)Ô)€2Ø�R˜˜˜b˜bÐ	!€3€3õ 
ŒÐ0°"°cÑ	:Ô	:€3à„[•G”LÒ Ð à	„hð Ø�”‰>ÐØ
€:à€#„'ÝŒ;€#„&ÝŒ=€#„&Ý	Ô	×	!Ò	! $¨Ñ	,Ô	,Ð,s   ‚ �1°1N)r>   r?   r@   rA   rG   rm   r-   r*   r(   rl   rl   Ë   s8   € € € € € Ø0Ð0ð<ð <ð <ð&-ð &-ð &-ð &-ð &-r*   rl   c                  ó–   — t           rAt          | ¦  «        } | d                              dd¦  «        | d<   t          j        | i |¤Ž dS dS )ui   
	Wraps logging.debug and discards messages if the verbosity level :py:attr:`waflib.Logs.verbose` â‰¤ 0
	r   rh   ú N)rU   ÚlistÚreplaceÚlogÚdebug©Úkru   s     r(   rŠ   rŠ   û   sW   € õ ð Ý
ˆ1�g„g€!Ø	
ˆ1Œ�Š�d˜CÑ	 Ô	 €!€A�$Ý„)ˆQÐ�"ÐÐÐÐÐðð r*   c                  óŒ  — t          j        | i |¤Ž t          dk    r£t          j        ¦   «         }|r�|dd…         }g }|D ]N\  }}}}|                     d|||fz  ¦  «         |r*|                     d|                     ¦   «         z  ¦  «         ŒO|r3t                                d                     |¦  «        ¦  «         dS dS dS dS )uk   
	Wrap logging.errors, adds the stack trace when the verbosity level :py:attr:`waflib.Logs.verbose` â‰¥ 2
	rI   Néÿÿÿÿz  File %r, line %d, in %sz	%srh   )r‰   ÚerrorrU   Ú	tracebackÚextract_stackÚappendÚstripÚjoin)rŒ   ru   ÚstÚbufÚfilenameÚlinenor"   Úlines           r(   r�   r�     sî   € õ „ˆAÐ�ÐÐÐÝˆa‚K€KÝÔÑ Ô €"Øð Ø
ˆ3ˆBˆ3Œ€2Ø	€3Ø')ð &ð &Ñ#€x�˜˜tØ‡J‚JÐ*¨h¸ÀÐ-EÑEÑFÔFÐFØð &Ø‡Z‚Z�˜Ÿ
š
™œÑ$Ñ%Ô%Ð%øØ	ð Ý‡I‚Iˆd�iŠi˜‰nŒnÑÔÐÐÐð €Kðð ðð r*   c                  ó(   — t          j        | i |¤Ž dS )z
	Wraps logging.warn
	N)r‰   Úwarnr‹   s     r(   r›   r›     ó   € õ „ˆ1Ð�ÐÐÐÐÐr*   c                  ó(   — t          j        | i |¤Ž dS )z
	Wraps logging.info
	N)r‰   Úinfor‹   s     r(   rž   rž     rœ   r*   c                  ó„  — t          j        d¦  «        ag t          _        g t          _        t          ¦   «         } |                      t          ¦   «         ¦  «         t                               | ¦  «         t           	                    t          ¦   «         ¦  «         t                               t           j        ¦  «         dS )z5
	Initializes the logger :py:attr:`waflib.Logs.log`
	ÚwaflibN)rE   Ú	getLoggerr‰   ÚhandlersÚfiltersrZ   ÚsetFormatterrl   Ú
addHandlerÚ	addFilterrC   ÚsetLevelÚDEBUG)Úhdlrs    r(   Úinit_logrª   !  s…   € õ
 Ô˜Ñ"Ô"€Ø…„Ø…„Ý‰Œ€Ø×Ò•9‘;”;ÑÔÐÝ‡‚�ÑÔÐÝ‡‚�z‰|Œ|ÑÔÐÝ‡‚�gŒmÑÔÐÐÐr*   c                 ó^  — t          j        |¦  «        }t          j        dk    rt          j        j        }nd}t          j        | d|¬¦  «        }t          j        d¦  «        }|                     |¦  «         | 	                    |¦  «         | 
                    t           j        ¦  «         |S )a8  
	Creates a simple logger, which is often used to redirect the context command output::

		from waflib import Logs
		bld.logger = Logs.make_logger('test.log', 'build')
		bld.check(header_name='sadlib.h', features='cxx cprogram', mandatory=False)

		# have the file closed immediately
		Logs.free_logger(bld.logger)

		# stop logging
		bld.logger = None

	The method finalize() of the command will try to free the logger, if any

	:param path: file name to write the log output to
	:type path: string
	:param name: logger name (loggers are reused)
	:type name: string
	i   NÚw)ri   ú%(message)s)rE   r¡   r   Ú
hexversionr   ri   ÚFileHandlerry   r¤   r¥   r§   r¨   )Úpathr"   Úloggerri   r©   rl   s         r(   Úmake_loggerr²   /  sš   € õ* Ô
˜DÑ
!Ô
!€Ý„N�YÒÐÝŒZÔ €(€(à€(ÝÔ˜D #°Ð9Ñ9Ô9€ÝÔ˜}Ñ-Ô-€Ø×Ò�9ÑÔÐØ×Ò�4ÑÔÐØ‡‚•”ÑÔÐØ€r*   é    c                 ó  — ddl m} t          j        | ¦  «        } |||¬¦  «        }t          j        d¦  «        }|                     |¦  «         |                     |¦  «         ||_        |                     t          j	        ¦  «         |S )zL
	Creates a memory logger to avoid writing concurrently to the main logger
	r   )ÚMemoryHandler)Útargetr­   )
Úlogging.handlersrµ   rE   r¡   ry   r¤   r¥   Ú
memhandlerr§   r¨   )r"   Úto_logÚsizerµ   r±   r©   rl   s          r(   Úmake_mem_loggerr»   P  s“   € ð ,Ð+Ð+Ð+Ð+Ð+Ý
Ô
˜DÑ
!Ô
!€Øˆ�d 6Ð*Ñ*Ô*€ÝÔ˜}Ñ-Ô-€Ø×Ò�9ÑÔÐØ×Ò�4ÑÔÐØ€ÔØ‡‚•”ÑÔÐØ€r*   c                 ó�   — 	 | j         D ]+}|                     ¦   «          |                      |¦  «         Œ,dS # t          $ r Y dS w xY w)z°
	Frees the resources held by the loggers created through make_logger or make_mem_logger.
	This is used for file cleanup and for handler removal (logger objects are re-used).
	N)r¢   ÚcloseÚremoveHandlerr   )r±   Úxs     r(   Úfree_loggerrÀ   ^  sj   € ð
ØŒ?ð ð €aØ‡7‚7�9„9€9Ø	×Ò˜ÑÔÐÐðð øõ 	ð ð ð Ø€$€$ðøøøs   ‚37 ·
AÁAr   rh   c           	      ób   — t          dt          | ¦  «        |t          j        |d|i¬¦  «         dS )aÊ  
	Prints messages in color immediately on stderr::

		from waflib import Logs
		Logs.pprint('RED', 'Something bad just happened')

	:param col: color name to use in :py:const:`Logs.colors_lst`
	:type col: string
	:param msg: message to display
	:type msg: string or a value that can be printed by %s
	:param label: a message to add after the colored output
	:type label: string
	:param sep: a string to append at the end (line separator)
	:type sep: string
	z	%s%s%s %srg   )ÚextraN)rž   r�   r   )ÚcolrQ   ÚlabelÚseps       r(   ÚpprintrÆ   j  s2   € õ  €k•6˜#‘;”; ¥V¤]°EÀ,ÈsÐASÐTÑTÔTÐTÐTÐTr*   )r³   )r   rh   )4rA   r!   r‚   r�   r   r    r   r   r#   r$   r   r   ÚidÚ
__stdout__ÚAnsiTermr   Ú
__stderr__rE   rz   r{   rS   rU   r%   Ú	indicatorrk   Ú	NameErrorr)   r.   r]   r1   Úobjectr3   r�   ÚcompileÚMrO   rF   rC   rt   rZ   ry   rl   r‰   rŠ   r�   r›   rž   rª   r²   r»   rÀ   rÆ   r-   r*   r(   ú<module>rÐ      s¬  ðð
ð ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "Ð "Ð "à	„z‡~‚~�h Ñ&Ô&ð -à„J×ÒÑÔð -˜B˜B˜sœz™NœN¨b¨b°´Ñ.@Ô.@Ò@Ð@Ø ˆxÔ  ¤Ñ,Ô,€#„*Ø„J×ÒÑÔð -˜B˜B˜sœz™NœN¨b¨b°´Ñ.@Ô.@Ò@Ð@Ø ˆxÔ  ¤Ñ,Ô,€#„*ð €€€àŒZ�^Š^Ð,Ð.\Ñ]Ô]€
ØŒj�nŠnÐ.°
Ñ;Ô;€à
€ðð €ðð
 	Ø	Ø	Ø	Ø	Ø	Ø	Ø	Ø	Ø	ØØðð €
ð €	ðØ€€øØð ð ð Ø€€€ðøøøðð ð ð8ØÔ'€€øØð ð ð ðð ð ð ð ðøøøð€Ô ð
ð 
ð 
ðð ð ð ð �ñ ô ð ð 
ˆ‰Œ€à	ˆŒ�N B¤DÑ	)Ô	)€ð"ð "ð "ð "ð "�”ñ "ô "ð "ðH,,ð ,,ð ,,ð ,,ð ,,�'Ô'ñ ,,ô ,,ð ,,ð\+-ð +-ð +-ð +-ð +-�Ô!ñ +-ô +-ð +-ðZ €Ø 3ðð ð ðð ð ð"ð ð ðð ð ðð ð ðð ð ðBð ð ð ð
ð 
ð 
ðUð Uð Uð Uð Uð Us$   Ä2D5 Ä5D?Ä>D?ÅE ÅEÅE