§
    Ü+ög#R  ã                   ój  — 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mZ ddl	ZdZ
	 dZ	 dZ	 dZ	 dej        ej        efz  Z	 d	Z	 d
Z	 dZ	 dZ	 dZ	 dZ	 dZ	 dZ	 dZ	 dZ	  ej        ¦   «         Z	 dZ	 dZdZdZ g Z!	 d„ Z" G d„ de#¦  «        Z$ e$de%fi ¦  «        Z&	  G d„ de&¦  «        Z'i Z(	 dd„Z)dd„Z*dS )z3
Classes and functions enabling the command system
é    N)ÚUtilsÚErrorsÚLogsi  z2.0.11Ú(a97f6fb0941091b4966b625f15ec32fa783a8becé   z.wafpickle-%s-%d-%dÚAPPNAMEÚVERSIONÚtopÚoutÚwscriptÚ é   éÿÿÿÿc                 ój   — t           D ]}|j        | k    r
 ||i |¤Žc S Œt          |i |¤Ž}| |_        |S )a¿  
	Returns a new :py:class:`waflib.Context.Context` instance corresponding to the given command.
	Used in particular by :py:func:`waflib.Scripting.run_command`

	:param cmd_name: command name
	:type cmd_name: string
	:param k: arguments to give to the context class initializer
	:type k: list
	:param k: keyword arguments to give to the context class initializer
	:type k: dict
	:return: Context object
	:rtype: :py:class:`waflib.Context.Context`
	)ÚclassesÚcmdÚContextÚfun)Úcmd_nameÚkÚkwÚxÚctxs        ú#/git_repos/avwlv2/waflib/Context.pyÚcreate_contextr   I   s[   € õ ð ð €QØ„UˆhÒÐØ
ˆ!ˆQˆ+�"ˆ+ˆ+ÐÐÐð å�Ð�RÐÐ€Ø€„Ø€ó    c                   ó"   ‡ — e Zd ZdZˆ fd„Zˆ xZS )Ústore_contexta  
	Metaclass that registers command classes into the list :py:const:`waflib.Context.classes`
	Context classes must provide an attribute 'cmd' representing the command name, and a function
	attribute 'fun' representing the function name that the command uses.
	c                 óB  •— t          t          | ¦  «                             |||¦  «         | j        }|dv rd S 	 | j         n%# t
          $ r t          j        d|z  ¦  «        ‚w xY wt          | dd ¦  «        s| j        | _	        t                               d| ¦  «         d S )N)r   r   z.Missing command for the context class %r (cmd)r   r   )Úsuperr   Ú__init__Ú__name__r   ÚAttributeErrorr   ÚWafErrorÚgetattrr   r   Úinsert)ÚclsÚnameÚbasesÚdctÚ	__class__s       €r   r!   zstore_context.__init__d   sº   ø€ Ý��sÑÔ×$Ò$ T¨5°#Ñ6Ô6Ð6Ø	Œ€$à	ÐÐÐØ	€6ðRØ„7€7€7øÝ	ð Rð Rð RÝ	ŒÐIÈDÑPÑ	QÔ	QÐQðRøøøõ 
��e˜TÑ	"Ô	"ð ØŒW€3„7å	‡.‚.��CÑÔÐÐÐs   ºA Á"A$)r"   Ú
__module__Ú__qualname__Ú__doc__r!   Ú__classcell__)r+   s   @r   r   r   ^   sB   ø€ € € € € ðð ð
ð ð ð ð ð ð ð ð r   r   r   c                   ó†   — e Zd ZdZeZ	 i Z	 d„ Zd„ Zd„ Z	d„ Z
d„ Zd„ Zdd
„Zd„ Zd„ Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Zg fd„ZdS )r   aÒ  
	Default context for waf commands, and base class for new command contexts.

	Context objects are passed to top-level functions::

		def foo(ctx):
			print(ctx.__class__.__name__) # waflib.Context.Context

	Subclasses must define the class attributes 'cmd' and 'fun':

	:param cmd: command to execute as in ``waf cmd``
	:type cmd: string
	:param fun: function name to execute when the command is called
	:type fun: string

	.. inheritance-diagram:: waflib.Context.Context waflib.Build.BuildContext waflib.Build.InstallContext waflib.Build.UninstallContext waflib.Build.StepContext waflib.Build.ListContext waflib.Configure.ConfigurationContext waflib.Scripting.Dist waflib.Scripting.DistCheck waflib.Build.CleanContext

	c                 óz  — 	 |d         }n# t           $ r
 t          }Y nw xY wt          dt          j        j        fi ¦  «        | _        d| j        _        | | j        _        |                      dd ¦  «        | _        d | _	        | j         
                    |¦  «        | _        g | _        | | | | dœ| _        d | _        d S )NÚrun_dirÚNod3zwaflib.Noder   )r   ÚconfÚbldÚopt)ÚKeyErrorr2   ÚtypeÚwaflibÚNodeÚ
node_classr,   r   ÚrootÚ
cur_scriptÚfind_dirÚpathÚ
stack_pathÚ	exec_dictÚlogger)Úselfr   Úrds      r   r!   zContext.__init__–   s¿   € ðØ
ˆ9Œ€2€2øÝ	ð ð ð Ý€2€2€2ðøøøõ ˜¥&¤+Ô"2Ð!4°bÑ9Ô9€$„/Ø,€$„/ÔØ€$„/Ôà�oŠo˜b $Ñ'Ô'€$„)Ø€$„/ØŒi× Ò  Ñ$Ô$€$„)à€$„/Ø t°4¸tÐDÐD€$„.Ø€$„+€+€+s   ‚ ‹žc                 ó€   — 	 | j         }t          j        |¦  «         t          | d¦  «         dS # t          $ r Y dS w xY w)z3
		Called to free resources such as logger files
		rB   N)rB   r   Úfree_loggerÚdelattrr#   )rC   rB   s     r   ÚfinalizezContext.finalize©   s[   € ðØŒK€6õ Ô�FÑÔÐÝ
ˆ4�ÑÔÐÐÐøõ	 
ð ð ð Ø€4€4ðøøøs   ‚/ ¯
=¼=c                 óF  — t          j        |¦  «        }t          j        |                     dd¦  «        ¦  «        }|                     dd¦  «        }|D ]K}t          |||¬¦  «        }t	          ||                     d| j        ¦  «        d¦  «        }	|	r |	| ¦  «         ŒLdS )a+  
		Loads a Waf tool as a module, and try calling the function named :py:const:`waflib.Context.Context.fun`
		from it.  A ``tooldir`` argument may be provided as a list of module paths.

		:param tool_list: list of Waf tool names to load
		:type tool_list: list of string or space-separated string
		Útooldirr   Úwith_sys_pathT)rK   r(   N)r   Úto_listÚgetÚ	load_toolr%   r   )
rC   Ú	tool_listr   r   Útoolsr?   rK   ÚtÚmoduler   s
             r   ÚloadzContext.loadµ   s§   € õ Œ-˜	Ñ
"Ô
"€%Ý	Œ�r—v’v˜i¨Ñ,Ô,Ñ	-Ô	-€$Ø—&’&˜¨$Ñ/Ô/€-àð ð €aÝ�a˜¨]Ð;Ñ;Ô;€6Ý	�˜Ÿš ¨¬Ñ1Ô1°4Ñ	8Ô	8€3Ø	ð Ø€Cˆ�I„I€Iøð	ð r   c                 ó€   — |                       t          j                             t          j        ¦  «        g¦  «         dS )z‘
		Here, it calls the function name in the top-level wscript file. Most subclasses
		redefine this method to provide additional functionality.
		N)ÚrecurseÚosr?   ÚdirnameÚg_moduleÚ	root_path)rC   s    r   ÚexecutezContext.executeÇ   s0   € ð
 ‡,‚,•”—’¥Ô 2Ñ3Ô3Ð4Ñ5Ô5Ð5Ð5Ð5r   c                 ój   — | j                              | j        ¦  «         || _        |j        | _        dS )a!  
		Method executed immediately before a folder is read by :py:meth:`waflib.Context.Context.recurse`.
		The current script is bound as a Node object on ``self.cur_script``, and the current path
		is bound to ``self.path``

		:param node: script
		:type node: :py:class:`waflib.Node.Node`
		N)r@   Úappendr=   Úparentr?   ©rC   Únodes     r   Úpre_recursezContext.pre_recurseÎ   s0   € ð „/×Ò˜œÑ)Ô)Ð)à€$„/ØŒk€$„)€)€)r   c                 óv   — | j                              ¦   «         | _        | j        r| j        j        | _        dS dS )z¸
		Restores ``self.cur_script`` and ``self.path`` right after :py:meth:`waflib.Context.Context.recurse` terminates.

		:param node: script
		:type node: :py:class:`waflib.Node.Node`
		N)r@   Úpopr=   r]   r?   r^   s     r   Úpost_recursezContext.post_recurseÜ   s=   € ð ”O×'Ò'Ñ)Ô)€$„/Ø	„_ð &ØŒÔ%€4„9€9€9ð&ð &r   NTc                 óÖ  — 	 | j         }n# t          $ r i x}| _         Y nw xY wt          j        |¦  «        D �]°}t          j                             |¦  «        s7t          j                             | j                             ¦   «         |¦  «        }t          j                             |t          ¦  «        }|dz   |p| j
        z   }	| j                             |	¦  «        }
|
rž|r|
|vr˜d||
<   |                      |
¦  «         	 |
                     d|¦  «        }t          t!          ||
                     ¦   «         d¦  «        | j        ¦  «         |                      |
¦  «         �Œ-# |                      |
¦  «         w xY w|
�sf| j                             |¦  «        }
|
|p| j
        f}|
rç|r||vrád||<   |                      |
¦  «         	 t'          |
                     ¦   «         |¬¦  «        }t)          ||p| j
        d¦  «        }|sM|s	 |                      |
¦  «         �Œét+          j        d|p| j
        ›d|
                     ¦   «         ›�¦  «        ‚ || ¦  «         |                      |
¦  «         �Œ># |                      |
¦  «         w xY w|
sV|s�Œ^	 t	          j        |¦  «         n%# t0          $ r t+          j        d	|z  ¦  «        ‚w xY wt+          j        d
|z  ¦  «        ‚�Œ²dS )aÅ  
		Runs user-provided functions from the supplied list of directories.
		The directories can be either absolute, or relative to the directory
		of the wscript file

		The methods :py:meth:`waflib.Context.Context.pre_recurse` and
		:py:meth:`waflib.Context.Context.post_recurse` are called immediately before
		and after a script has been executed.

		:param dirs: List of directories to visit
		:type dirs: list of string or space-separated string
		:param name: Name of function to invoke from the wscript
		:type  name: string
		:param mandatory: whether sub wscript files are required to exist
		:type  mandatory: bool
		:param once: read the script file once for a particular context
		:type once: bool
		Ú_TÚrÚexec)ÚencodingNzNo function z defined in zCannot read the folder %rzNo wscript file in directory %s)Úrecurse_cacher#   r   rL   rV   r?   ÚisabsÚjoinÚabspathÚWSCRIPT_FILEr   r<   Ú	find_noder`   Úreadrg   ÚcompilerA   rc   Úload_moduler%   r   r$   ÚlistdirÚOSError)rC   Údirsr(   Ú	mandatoryÚoncerh   ÚcacheÚdÚWSCRIPTÚWSCRIPT_FUNr_   Úfunction_codeÚtupÚwscript_moduleÚuser_functions                  r   rU   zContext.recurseç   s:  € ð&#ØÔ€5€5øÝ	ð #ð #ð #Ø "Ð"€5ˆ4ÔÐÐð#øøøõ Œ=˜ÑÔð )Bñ )B€aå
Œ'�-Š-˜Ñ
Ô
ð -å
Œ�Š�T”Y×&Ò&Ñ(Ô(¨!Ñ,Ô,€Aå”—’˜a¥Ñ.Ô.€7Ø˜3‘ $Ð"2¨$¬(Ñ3€;à
Œ)×
Ò
˜kÑ
*Ô
*€4Ø
ð B�Dð B˜D¨Ð-Ð-Ø€Eˆ$�KØ×Ò�TÑÔÐðØ—Y’Y˜s HÑ-Ô-€]Ý	�'�- §¢¡¤°Ñ
8Ô
8¸$¼.ÑIÔIÐIà	×Ò�tÑÔÐÑø€T×Ò�tÑÔÐÐøøøØñ BØŒ9×Ò˜wÑ'Ô'€DØ�Ð!˜œÐ
"€CØð B�Tð B˜S¨Ð-Ð-Ø€Uˆ3�ZØ	×Ò�dÑÔÐð	Ý" 4§<¢<¡>¤>¸HÐEÑEÔE€nÝ˜n¨tÐ/?°t´xÀ$ÑGÔG€mØð bØð Øð ×Ò˜ÑÔÐÑõ Œ_ˆ_¸tÐ?OÀtÄxÐ?OÐ?OÐQU×Q]ÒQ]ÑQ_ÔQ_ÐQ_Ð`ÑaÔaÐaØ€m�DÑÔÐà
×Ò˜ÑÔÐÑø€d×Ò˜ÑÔÐÐøøøØð BØð Ùð=Ý„j��m„m€m€møÝð =ð =ð =ÝŒOÐ7¸!Ñ;Ñ<Ô<Ð<ð=øøøåŒ?Ð<¸qÑ@ÑAÔAÐAùðS)Bð )Bs7   ‚
 Š Ÿ ÄAE$Å$E;Ç	?I5È >I5É5JÊJ+Ê+"Kc                 ó  — t           j        rzt          j                             d¦  «        }|dk    r)t          |t          ¦  «        st          j        |¦  «        }t          j	        d|¦  «         t          j	        d|¦  «         d S d S )NÚWAF_CMD_FORMATÚstringz
runner: %rzrunner_env: kw=%s)
r   ÚverboserV   ÚenvironrM   Ú
isinstanceÚstrr   Úshell_escapeÚdebug)rC   r   r   Úfmts       r   Úlog_commandzContext.log_command*  s€   € Ý	„\ð 'Ý	Œ�ŠÐ(Ñ	)Ô	)€3Ø	ˆX‚o€oÝ�c�3ÑÔð #ÝÔ˜cÑ"Ô"€SÝ„:ˆl˜CÑ Ô Ð Ý„:Ð! 2Ñ&Ô&Ð&Ð&Ð&ð'ð 'r   c                 óV  — t           j        }t          |t          ¦  «        |d<   |                      ||¦  «         | j        r| j                             |¦  «         d|vr
|j        |d<   d|vr
|j        |d<   t          j	        r?|d         s7t          j
        |d         ¦  «        st          j        d|d         z  ¦  «        ‚i }d|v r't          j        dk    r|d         |d<   d|vrd	|d<   |d= d
|v r |d
         r|d
         |d
<   |j        |d<   |d
= d|v r8t          |d         t          ¦  «        s|d                              ¦   «         |d<   |                     dt"          ¦  «        }	 t          j        |||¦  «        \  }}}n8# t&          $ r+}	t          j        dt          |	¦  «        z  |	¬¦  «        ‚d}	~	ww xY w|rrt          |t          ¦  «        s|                     |d¬¦  «        }| j        r| j                             d|¦  «         n#t          j        |t          j        ddœ¬¦  «         |rtt          |t          ¦  «        s|                     |d¬¦  «        }| j        r| j                             d|z  ¦  «         n#t          j        |t          j        ddœ¬¦  «         |S )a.  
		Runs an external process and returns the exit status::

			def run(tsk):
				ret = tsk.generator.bld.exec_command('touch foo.txt')
				return ret

		If the context has the attribute 'log', then captures and logs the process stderr/stdout.
		Unlike :py:meth:`waflib.Context.Context.cmd_and_log`, this method does not return the
		stdout/stderr values captured.

		:param cmd: command argument for subprocess.Popen
		:type cmd: string or list
		:param kw: keyword arguments for subprocess.Popen. The parameters input/timeout will be passed to wait/communicate.
		:type kw: dict
		:returns: process exit status
		:rtype: integer
		:raises: :py:class:`waflib.Errors.WafError` if an invalid executable is specified for a non-shell process
		:raises: :py:class:`waflib.Errors.WafError` in case of execution failure
		ÚshellÚstdoutÚstderrr   zProgram %s not found!Útimeouté  Ústart_new_sessionTÚinputÚstdinÚcwdÚ	decode_asúExecution failure: %s©ÚexNÚreplace©Úerrorsúout: %sr   )ÚstreamÚc1)Úextraúerr: %s)r   Ú
subprocessr„   r…   r‰   rB   ÚinfoÚPIPEr   r‚   Ú	check_exer   r$   ÚsysÚ
hexversionrl   rb   Údefault_encodingÚrun_processÚ	ExceptionÚdecoder‡   rŒ   Úerrorr�   )
rC   r   r   r    Úcargsrh   Úretr   ÚerrÚes
             r   Úexec_commandzContext.exec_command3  sà  € õ* Ô€*Ý˜3¥Ñ$Ô$€"€W�+Ø×Ò�3˜ÑÔÐà	„[ð Ø„;×Ò�CÑÔÐà�RÐÐØ”/€2€h�<Ø�RÐÐØ”/€2€h�<å	„\ð ;˜"˜Wœ+ð ;­e¬o¸cÀ!¼fÑ.EÔ.Eð ;Ý	ŒÐ0°3°q´6Ñ9Ñ	:Ô	:Ð:à
€%Ø�"€_€_Ý	„n˜	Ò!Ð!Ø˜)”}€Eˆ)ÑØ "Ð$Ð$Ø#€RÐÑØ	ˆ)€}Ø�€]€]Øˆ„kð "Ø˜”[€Eˆ'�NØ”/€B€w�KØ	ˆ'€{à
ˆb€[€[Ý
�R˜”Y¥Ñ
$Ô
$ð $Ø�5”	×!Ò!Ñ#Ô#€B€u�Ià�VŠV�KÕ!1Ñ2Ô2€(ðAÝÔ$ S¨"¨eÑ4Ô4�=€3ˆˆSˆSøÝ	ð Að Að AÝ	ŒÐ0µ3°q±6´6Ñ9¸aÐ	@Ñ	@Ô	@Ð@øøøøðAøøøð 	ð :Ý
�S�#Ñ
Ô
ð 1Ø
�*Š*�X iˆ*Ñ
0Ô
0€CØ
„kð :Ø„K×Ò�i Ñ%Ô%Ð%Ð%å„Iˆc¥3¤:°RÐ8Ð8Ð9Ñ9Ô9Ð9Øð :Ý
�S�#Ñ
Ô
ð 1Ø
�*Š*�X iˆ*Ñ
0Ô
0€CØ
„kð :Ø„K×Ò�i #‘oÑ&Ô&Ð&Ð&å„Iˆc¥3¤:°RÐ8Ð8Ð9Ñ9Ô9Ð9à	€*s   Å,F Æ
F<Æ&F7Æ7F<c                 óÄ  — t           j        }t          |t          ¦  «        |d<   |                      ||¦  «         |                     dd¦  «        }|                     dt          ¦  «        }t          j        r?|d         s7t          j	        |d         ¦  «        st          j        d|d         z  ¦  «        ‚|j        x|d<   |d<   |€|                      |¦  «         i }d	|v r't          j        d
k    r|d	         |d	<   d|vrd|d<   |d	= d|v r |d         r|d         |d<   |j        |d<   |d= d|v r8t          |d         t          ¦  «        s|d                              ¦   «         |d<   |                     dt"          ¦  «        }	 t          j        |||¦  «        \  }}	}
n8# t&          $ r+}t          j        dt          |¦  «        z  |¬¦  «        ‚d}~ww xY wt          |	t          ¦  «        s|	                     |d¬¦  «        }	t          |
t          ¦  «        s|
                     |d¬¦  «        }
|	r.|t          k    r#|t*          k    r|                      d|	z  ¦  «         |
r.|t,          k    r#|t*          k    r|                      d|
z  ¦  «         |r1t          j        d|›d|›�¦  «        }||_        |
|_        |	|_        |‚|t*          k    r|	|
fS |t,          k    r|
S |	S )a»  
		Executes a process and returns stdout/stderr if the execution is successful.
		An exception is thrown when the exit status is non-0. In that case, both stderr and stdout
		will be bound to the WafError object (configuration tests)::

			def configure(conf):
				out = conf.cmd_and_log(['echo', 'hello'], output=waflib.Context.STDOUT, quiet=waflib.Context.BOTH)
				(out, err) = conf.cmd_and_log(['echo', 'hello'], output=waflib.Context.BOTH)
				(out, err) = conf.cmd_and_log(cmd, input='\n'.encode(), output=waflib.Context.STDOUT)
				try:
					conf.cmd_and_log(['which', 'someapp'], output=waflib.Context.BOTH)
				except Errors.WafError as e:
					print(e.stdout, e.stderr)

		:param cmd: args for subprocess.Popen
		:type cmd: list or string
		:param kw: keyword arguments for subprocess.Popen. The parameters input/timeout will be passed to wait/communicate.
		:type kw: dict
		:returns: a tuple containing the contents of stdout and stderr
		:rtype: string
		:raises: :py:class:`waflib.Errors.WafError` if an invalid executable is specified for a non-shell process
		:raises: :py:class:`waflib.Errors.WafError` in case of execution failure; stdout/stderr/returncode are bound to the exception object
		r‹   ÚquietNÚoutputr   zProgram %r not found!rŒ   r�   rŽ   r�   r�   Tr‘   r’   r“   r”   r•   r–   r˜   r™   r›   rŸ   zCommand z
 returned )r   r    r„   r…   r‰   rb   ÚSTDOUTr   r‚   r£   r   r$   r¢   Úto_logr¤   r¥   rl   r¦   r§   r¨   r©   ÚBOTHÚSTDERRÚ
returncoder�   rŒ   )rC   r   r   r    r±   Úto_retr«   rh   r¬   r   r­   r®   s               r   Úcmd_and_logzContext.cmd_and_log€  s  € õ0 Ô€*Ý˜3¥Ñ$Ô$€"€W�+Ø×Ò�3˜ÑÔÐà
�&Š&�˜$Ñ
Ô
€%Ø�6Š6�(�FÑ#Ô#€&å	„\ð ;˜"˜Wœ+ð ;­e¬o¸cÀ!¼fÑ.EÔ.Eð ;Ý	ŒÐ0°3°q´6Ñ9Ñ	:Ô	:Ð:à *¤Ð/€"€X�,��H‘Ø
€]Ø‡;‚;ˆsÑÔÐà
€%Ø�"€_€_Ý	„n˜	Ò!Ð!Ø˜)”}€Eˆ)ÑØ "Ð$Ð$Ø#€RÐÑØ	ˆ)€}Ø�€]€]Øˆ„kð "Ø˜”[€Eˆ'�NØ”/€B€w�KØ	ˆ'€{à
ˆb€[€[Ý
�R˜”Y¥Ñ
$Ô
$ð $Ø�5”	×!Ò!Ñ#Ô#€B€u�Ià�VŠV�KÕ!1Ñ2Ô2€(ðAÝÔ$ S¨"¨eÑ4Ô4�=€3ˆˆSˆSøÝ	ð Að Að AÝ	ŒÐ0µ3°q±6´6Ñ9¸aÐ	@Ñ	@Ô	@Ð@øøøøðAøøøõ 
�C�Ñ	Ô	ð 0Ø	�Š�H YˆÑ	/Ô	/€3Ý	�C�Ñ	Ô	ð 0Ø	�Š�H YˆÑ	/Ô	/€3àð  ˆU•fŠ_ˆ_ ­$¢ Ø‡;‚;ˆy˜3‰ÑÔÐØð  ˆU•fŠ_ˆ_ ­$¢ Ø‡;‚;ˆy˜3‰ÑÔÐàð Ý„€°3°3°3¸¸Ð<Ñ=Ô=€1Ø€1„<Ø€1„8Ø€1„8Ø	
€7à�t‚^€^Ø�ˆ*ÐØ•ÒÐØ
€:Ø	€*s   ÆF! Æ!
GÆ+&GÇGc                 óŽ  — | j         r7| j                              d| j                             ¦   «         ›d|›�¦  «         	 | j         j        d         j        }t          j                             d¦  «        rd|›dt          j
        |¦  «        ›d�}n|›d|›d	�}n# t          $ r Y nw xY w| j                             ||¬
¦  «        ‚)af  
		Prints an error message in red and stops command execution; this is
		usually used in the configuration section::

			def configure(conf):
				conf.fatal('a requirement is missing')

		:param msg: message to display
		:type msg: string
		:param ex: optional exception object
		:type ex: exception
		:raises: :py:class:`waflib.Errors.ConfigurationError`
		zfrom z: r   ÚWAF_PRINT_FAILURE_LOGz
Log from (z):
ú
z
(complete log in ú)r–   )rB   r¡   r?   rl   ÚhandlersÚbaseFilenamerV   rƒ   rM   r   Úreadfr#   rš   ÚConfigurationError)rC   Úmsgr—   Úlogfiles       r   ÚfatalzContext.fatalÕ  së   € ð 
„[ð @Ø„;×ÒÐ T¤Y×%6Ò%6Ñ%8Ô%8Ð%8Ð%8¸#¸#Ð>Ñ?Ô?Ð?ð	6ØŒ[Ô! !Ô$Ô1€7õ 	„j‡n‚nÐ,Ñ-Ô-ð 6ð 6à$+ G G­U¬[¸Ñ-AÔ-AÐ-AÐ-AÐ
B€C€Cà(+¨¨¨W¨W¨WÐ
5€C€Cøõ 
ð ð ð Ø€4ðøøøð 	Œ×&Ò& s¨rÐ&Ñ2Ô2Ð2s   Á B Â
B(Â'B(c                 óè   — |sdS | j         r| j                              |¦  «         dS t          j                             t          |¦  «        ¦  «         t          j                             ¦   «          dS )a  
		Logs information to the logger (if present), or to stderr.
		Empty messages are not printed::

			def build(bld):
				bld.to_log('starting the build')

		Provide a logger on the context class or override this method if necessary.

		:param msg: message
		:type msg: string
		N)rB   r¡   r¤   r�   Úwriter…   Úflush)rC   rÂ   s     r   r´   zContext.to_logñ  sm   € ð 
ð 
Ø	€6Ø	„[ð Ø„;×Ò�CÑÔÐÐÐå„:×Ò•C˜‘H”HÑÔÐÝ„:×ÒÑÔÐÐÐr   c                 ó(  — 	 |d         }n# t           $ r |d         }Y nw xY w | j        |fi |¤Ž 	 |d         }n# t           $ r |d         }Y nw xY w|                     d¦  «        }t          |t          ¦  «        s|rdpd} | j        ||fi |¤Ž dS )	a  
		Prints a configuration message of the form ``msg: result``.
		The second part of the message will be in colors. The output
		can be disabled easly by setting ``in_msg`` to a positive value::

			def configure(conf):
				self.in_msg = 1
				conf.msg('Checking for library foo', 'ok')
				# no output

		:param msg: message to display to the user
		:type msg: string
		:param result: result to display
		:type result: string or boolean
		:param color: color to use, see :py:const:`waflib.Logs.colors_lst`
		:type color: string
		rÂ   r   Úresultr   ÚcolorÚGREENÚYELLOWN)r7   Ú	start_msgrM   r„   r…   Úend_msg)rC   r   r   rÂ   rÉ   rÊ   s         r   rÂ   zContext.msg  sâ   € ð$Ø	ˆEŒ€3€3øÝ	ð ð ð Ø	
ˆ1Œ€3€3€3ðøøøð €$„.�ÐÐ˜ÐÐÐðØˆxŒL€6€6øÝ	ð ð ð ØˆaŒD€6€6€6ðøøøð �&Š&�‰/Œ/€%Ý	�E�3Ñ	Ô	ð *ØÐ�gÐ) €5à€$„,ˆv�uÐ#Ð# Ð#Ð#Ð#Ð#Ð#s   ‚ ‹ Ÿ ²; »AÁAc                 óT  — |                      d¦  «        rdS |                      d¦  «        p|d         }	 | j        r| xj        dz  c_        dS n# t          $ r
 d| _        Y nw xY w| xj        dz  c_        	 t          | j        t          |¦  «        ¦  «        | _        n2# t          $ r% t          dt          |¦  «        ¦  «        | _        Y nw xY w| j        dz  |fD ]}|                      |¦  «         Œt          j        dd	| 	                    | j        ¦  «        z  d
¬¦  «         dS )ze
		Prints the beginning of a 'Checking for xxx' message. See :py:meth:`waflib.Context.Context.msg`
		r±   NrÂ   r   r   é(   ú-ÚNORMALz%s :r   )Úsep)
rM   Úin_msgr#   ÚmaxÚ	line_justÚlenr´   r   ÚpprintÚljust)rC   r   r   rÂ   r   s        r   rÍ   zContext.start_msg+  sF  € ð ‡V‚VˆG�_„_ð 
Ø	€6à
�Šˆu‰ŒÐ˜˜1œ€#ðØ
„kð Ø€K„K�1Ñ€K„KØ
€Fðøõ 
ð ð ð Ø€4„;€;€;ðøøøà€+„+�Ñ€+„+ð&Ý˜œ­¨C©¬Ñ1Ô1€4„>€>øÝ	ð &ð &ð &Ý˜�C ™HœHÑ%Ô%€4„>€>€>ð&øøøàŒN˜SÑ  #Ð&ð ð €aØ‡;‚;ˆq�>„>€>€>Ý„+ˆh˜ §¢¨4¬>Ñ!:Ô!:Ñ:ÀÐCÑCÔCÐCÐCÐCs#   ¶A ÁA$Á#A$Á8'B  Â ,CÃCc                 óÊ  — |                      d¦  «        rdS | xj        dz  c_        | j        rdS |                      d¦  «        p|d         }d}|du rd}n|sd	}d
}nt          |¦  «        }|                      |¦  «         	 |d         }nB# t          $ r5 t          |¦  «        dk    r|d         t          j        v r	|d         }n|}Y nw xY wt          j        ||¦  «         dS )zUPrints the end of a 'Checking for' message. See :py:meth:`waflib.Context.Context.msg`r±   Nr   rÉ   r   rË   TÚokz	not foundrÌ   rÊ   )	rM   rÔ   r…   r´   r7   r×   r   Ú
colors_lstrØ   )rC   r   r   rÉ   ÚdefcolorrÂ   rÊ   s          r   rÎ   zContext.end_msgC  s  € à‡V‚VˆG�_„_ð 
Ø	€6Ø€+„+�Ñ€+„+Ø	„[ð 
Ø	€6à�6Š6�(ÑÔÐ#˜q œt€&à€(Øˆt€^€^Ø	€3€3Øð Ø	€3Ø€8€8å	ˆV‰Œ€3à‡+‚+ˆcÑÔÐðØˆgŒ;€5€5øÝ	ð ð ð Ý	ˆ!�f„fˆq‚j€j�Q�q”T�Tœ_Ð,Ð,àˆaŒD€E€Eà€Eøøðøøøõ „+ˆe�SÑÔÐÐÐs   ÂB Â<CÃ
Cc                 óô  — t           j                             t          ¦  «        r}| j                             t          ¦  «                             d¦  «                             |¦  «        }|D ]3}|j        |vr(t          |j         	                    dd¦  «        ¦  «         Œ4dS ddl
m}  |t          ¦  «        }|                     ¦   «         }|D ]©}t          j        d| 	                    dd¦  «        z  |¦  «        sŒ/t           j                             |¦  «        }d	}|D ]/}	|	 	                    dd¦  «        }
t          j        |
|¦  «        rd
}Œ0|s%| 	                    dd¦  «        }t          |¦  «         ŒªdS )a   
		Loads third-party extensions modules for certain programming languages
		by trying to list certain files in the extras/ directory. This method
		is typically called once for a programming language group, see for
		example :py:mod:`waflib.Tools.compiler_c`

		:param var: glob expression, for example 'cxx\_\*.py'
		:type var: string
		:param ban: list of exact file names to exclude
		:type ban: list of string
		zwaflib/extrasz.pyr   r   )Ú	PyZipFilezwaflib/extras/%sÚ*z.*FTN)rV   r?   ÚisdirÚwaf_dirr<   rn   Úant_globr(   rN   r˜   Úzipfilerß   ÚnamelistÚreÚmatchÚbasename)rC   ÚvarÚbanÚlstr   rß   ÚwaflibsÚfÚdobanÚbrf   s              r   Úload_special_toolszContext.load_special_toolsa  s�  € õ „W‡]‚]•7ÑÔð Ø	Œ×	Ò	�WÑ	%Ô	%×	/Ò	/°Ñ	@Ô	@×	IÒ	IÈ#Ñ	NÔ	N€3Øð *ð *€qØŒ6�Sˆ=ˆ=ÝˆqŒv�~Š~˜e RÑ(Ô(Ñ)Ô)Ð)øð*ð *ð !Ð Ð Ð Ð Ð ØˆY•wÑÔ€7Ø	×	Ò	Ñ	Ô	€3Øð ð €qÝŒ8Ð&¨¯ª°S¸$Ñ)?Ô)?Ñ?ÀÑEÔEð ØÝ
Œ×Ò˜ÑÔ€AØ€EØð ð ˆØ	
�Š�3˜Ñ	Ô	€QÝ
Œ��A‰Œð Ø€eøØð Ø	
�Š�5˜"Ñ	Ô	€QÝˆq�\„\€\øðð r   )NTTN©N)r"   r,   r-   r.   r   rš   rP   r!   rH   rS   rZ   r`   rc   rU   r‰   r¯   r¹   rÄ   r´   rÂ   rÍ   rÎ   rð   © r   r   r   r   x   sO  € € € € € ðð ð& €ðð 
€ððð ð ð&
ð 
ð 
ðð ð ð$6ð 6ð 6ðð ð ð	&ð 	&ð 	&ðABð ABð ABð ABðF'ð 'ð 'ðKð Kð KðZSð Sð Sðj3ð 3ð 3ð 3ð8ð ð ð,"$ð "$ð "$ðHDð Dð Dð0ð ð ð< (*ð  ð  ð  ð  ð  ð  r   r   c                 óT  — 	 t           |          S # t          $ r Y nw xY wt          j        t          ¦  «        }	 t          j        | d|¬¦  «        }n%# t          $ r t          j	        d| z  ¦  «        ‚w xY wt          j                             | ¦  «        }t          j                             d|¦  «         	 t          t!          || d¦  «        |j        ¦  «         t          j                             |¦  «         n$# t          j                             |¦  «         w xY w|t           | <   |S )zÎ
	Loads a wscript file as a python module. This method caches results in :py:attr:`waflib.Context.cache_modules`

	:param path: file path
	:type path: string
	:return: Loaded Python module
	:rtype: module
	rf   )Úmrh   zCould not read the file %rr   rg   )Úcache_modulesr7   ÚimpÚ
new_modulerm   r   rÀ   ÚEnvironmentErrorr   r$   rV   r?   rW   r¤   r&   rg   rp   Ú__dict__Úremove)r?   rh   rR   ÚcodeÚ
module_dirs        r   rq   rq   ‰  s  € ðÝ	�tÔ	ÐøÝð ð ð Ø€$ðøøøõ Œ.�Ñ
&Ô
&€ð=Ý	Œ�T˜S¨8Ð	4Ñ	4Ô	4€$€$øÝð =ð =ð =ÝŒÐ4°tÑ;Ñ<Ô<Ð<ð=øøøõ Œg�oŠo˜dÑ#Ô#€Ý„‡‚��JÑÔÐðÝ…wˆt�T˜6Ñ"Ô" F¤OÑ4Ô4Ð4å„(‡/‚/�*ÑÔÐÐø…#„(‡/‚/�*ÑÔÐÐøøøà…ˆtÑØ€s#   ‚ �
›¹A Á"A3Â6$C: Ã:!DTc                 óô  — | dk    rd} n|                       dd¦  «        } |st          j        }g t          _        	 |rüt          |t          ¦  «        sJ ‚|t          j        z   t          _        	 t          | ¦  «         n1# t          $ r$}t	          t          j        ¦  «        |_        ‚ d}~ww xY w	 |D ]!}t          j                             |¦  «         Œ"n)# |D ]!}t          j                             |¦  «         Œ"w xY wt          j	        |          }|t          j        | <   ||st          xj        |z  c_        S S |s%t          j                             dt          ¦  «         	 dD ](}	 t          || z  ¦  «          n!# t          $ r d}Y Œ%w xY wt          | ¦  «         n1# t          $ r$}t	          t          j        ¦  «        |_        ‚ d}~ww xY w|s$t          j                             t          ¦  «         n,# |s%t          j                             t          ¦  «         w w xY wt          j	        || z           }|t          j        | <   ||st          xj        |z  c_        S S # |st          xj        |z  c_        w xY w)a�  
	Importx a Waf tool as a python module, and stores it in the dict :py:const:`waflib.Context.Context.tools`

	:type  tool: string
	:param tool: Name of the tool
	:type  tooldir: list
	:param tooldir: List of directories to search for the tool module
	:type  with_sys_path: boolean
	:param with_sys_path: whether or not to search the regular sys.path, besides waf_dir and potentially given tooldirs
	ÚjavaÚjavawz++ÚxxNr   )zwaflib.Tools.%szwaflib.extras.%sz	waflib.%sz%s)r˜   r¤   r?   r„   ÚlistÚ
__import__ÚImportErrorÚwaf_sys_pathrú   Úmodulesr   rP   r&   râ   )	ÚtoolrJ   r   rK   Ú	back_pathr®   rx   r¬   r   s	            r   rN   rN   §  s®  € ð 	ˆF‚N€NØ	€$€$à	�Š�d˜DÑ	!Ô	!€$àð ÝŒh€)Ø…#„(ð&Øð "Ý
�W�dÑ
#Ô
#Ð#Ð#Ð#Ø�œÑ …3„8ðÝˆtÑÔÐÐøÝ
ð 
ð 
ð 
Ý�#œ(‘^”^€A„NØ	øøøøð
øøøð ð
 ð ð ˆÝ„X‡_‚_�QÑÔÐÐðøˆWð ð ˆÝ„X‡_‚_�QÑÔÐÐðøøøå	Œ�TÔ	€3Ø…7„=�ÑØ
ð. 
ð Ý€8„8ˆyÑ€8„8€8ðð+ ð  Ý„H‡O‚O�A•wÑÔÐðØGð ð ˆðÝ��T‘ÑÔÐØ€eøÝð ð ð Ø
€a€a€aðøøøõ �ÑÔÐøøÝ
ð 
ð 
ð 
Ý�#œ(‘^”^€A„NØ	øøøøð
øøøð ð Ý„X‡_‚_•WÑÔÐøøð ð Ý„X‡_‚_•WÑÔÐÐðøøøå	Œ�Q˜‘XÔ	€3Ø…7„=�ÑØ
à	ð Ý€8„8ˆyÑ€8„8€8ðøˆð Ý€8„8ˆyÑ€8„8€8€8€8€8s¡   »2I Á.A> Á=C Á>
B,ÂB'Â'B,Â,C Â0%I Ã&C;Ã;%I Ä9'I Å!F Å&E:Å8F Å:F	ÆF ÆF	Æ	F ÆG4 Æ
G
Æ&GÇG
Ç
G4 Ç'I Ç4)HÈ(I ÉI7rñ   )NNT)+r.   rV   ræ   rö   r¤   r9   r   r   r   Úwaflib.NodeÚ
HEXVERSIONÚ
WAFVERSIONÚWAFREVISIONÚABIÚplatformr¥   ÚDBFILEr   r	   ÚTOPÚOUTrm   Ú
launch_dirr2   Útop_dirÚout_dirrâ   Úconsole_encodingr¦   rX   r³   r¶   rµ   r   r   r8   r   Úobjectr   r   rõ   rq   rN   rò   r   r   ú<module>r     sò  ðð
ð ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ø Ð Ð Ð ð €
Ø &à€
Ø &à6€Ø 2à€Ø ]à	 #¤,°´ÀÐ!DÑ	D€Ø 8à
€Ø 5à
€Ø 8à€Ø Dà€Ø Aà€Ø "à€
Ø .Ø
€Ø <Ø
€Ø LØ
€Ø JØ
€Ø *à)�5Ô)Ñ+Ô+Ð Ø ?à€ðð 
€Ø	€Ø	
€à
€ðð
ð ð ð*ð ð ð ð �Dñ ô ð ð. €m�E˜F˜9 bÑ)Ô)€Ø CðIð Ið Ið Ið Iˆcñ Iô Ið IðV €ðð
ð ð ð ð<9ð 9ð 9ð 9ð 9ð 9r   