403Webshell
Server IP : 216.92.14.13  /  Your IP : 216.73.216.171
Web Server : Apache
System : Linux vps4089.pairvps.com 5.15.0-190-generic #200-Ubuntu SMP Fri Aug 7 15:06:04 UTC 2026 x86_64
User : rmlac2fmr ( 1040637)
PHP Version : 8.2.32
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : ON
Directory :  /lib/scons/SCons/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /lib/scons/SCons/Action.pyc
�
�b3Qc@sdZdZddlZddlZddlZddlZddlZddlZddl	Z	ddl
mZddlZddl
ZddlZddlZejjZejjZdefd��YZdZdZdZd	�Zd
�ZyejZejZWnek
r$d�Zn
Xd�Zejd
�Zd�Z d�Z!d�Z"d�Z#d�Z$d�Z%d�Z&d�Z'd�Z(defd��YZ)de)fd��YZ*d�Z+da-d�Z.dd�Z/de*fd ��YZ0d!e)fd"��YZ1d#e1e0fd$��YZ2d%e*fd&��YZ3d'e)fd(��YZ4d)efd*��YZ5d+efd,��YZ6dS(-s�SCons.Action

This encapsulates information about executing any sort of action that
can build one or more target Nodes (typically files) from one or more
source Nodes (also typically files) given a specific Environment.

The base class here is ActionBase.  The base class supplies just a few
OO utility methods and some generic methods for displaying information
about an Action in response to the various commands that control printing.

A second-level base class is _ActionAction.  This extends ActionBase
by providing the methods that can be used to show and perform an
action.  True Action objects will subclass _ActionAction; Action
factory class objects will subclass ActionBase.

The heavy lifting is handled by subclasses for the different types of
actions we might execute:

    CommandAction
    CommandGeneratorAction
    FunctionAction
    ListAction

The subclasses supply the following public interface methods used by
other modules:

    __call__()
        THE public interface, "calling" an Action object executes the
        command or Python function.  This also takes care of printing
        a pre-substitution command for debugging purposes.

    get_contents()
        Fetches the "contents" of an Action for signature calculation
        plus the varlist.  This is what gets MD5 checksummed to decide
        if a target needs to be rebuilt because its action changed.

    genstring()
        Returns a string representation of the Action *without*
        command substitution, but allows a CommandGeneratorAction to
        generate the right action based on the specified target,
        source and env.  This is used by the Signature subsystem
        (through the Executor) to obtain an (imprecise) representation
        of the Action operation for informative purposes.


Subclasses also supply the following methods for internal use within
this module:

    __str__()
        Returns a string approximation of the Action; no variable
        substitution is performed.

    execute()
        The internal method that really, truly, actually handles the
        execution of a command or Python function.  This is used so
        that the __call__() methods can take care of displaying any
        pre-substitution representations, and *then* execute an action
        without worrying about the specific Actions involved.

    get_presig()
        Fetches the "contents" of a subclass for signature calculation.
        The varlist is added to this to produce the Action's contents.

    strfunction()
        Returns a substituted string representation of the Action.
        This is used by the _ActionAction.show() command to display the
        command/function that will be executed to generate the target(s).

There is a related independent ActionCaller class that looks like a
regular Action, and which serves as a wrapper for arbitrary functions
that we want to let the user specify the arguments to now, but actually
execute later (when an out-of-date check determines that it's needed to
be executed, for example).  Objects of this class are returned by an
ActionFactory class that provides a __call__() method as a convenient
way for wrapping up the functions.

s5src/engine/SCons/Action.py  2013/03/03 09:48:35 garyoi����N(tlogInstanceCreationt_nullcBseZRS((t__name__t
__module__(((s/usr/lib/scons/SCons/Action.pyRzsiicCs'y|j�SWntk
r"|SXdS(N(trfiletAttributeError(tn((s/usr/lib/scons/SCons/Action.pyR�s
cCs|S(N((ts((s/usr/lib/scons/SCons/Action.pytdefault_exitstatfunc�scCs|S(N((tx((s/usr/lib/scons/SCons/Action.pyt<lambda>�scCs�g}t|�}d}x}||kr�||}t|�}|tkr}|tkrp|j|||d!�n|d}q|j|�|d}qWdj|�S(Niiit(tlentordt
HAVE_ARGUMENTt
SET_LINENOtappendtjoin(tcodetresultRtitctop((s/usr/lib/scons/SCons/Action.pytremove_set_lineno_codes�s


s^['"](.*)['"]$cCszyt|j�SWnbtk
ruyt|jj�SWqvtk
rqyt|�SWqrtk
rmt|�SXqvXnXdS(s?Return the signature contents of a callable Python object.
    N(t_function_contentstim_funcRt__call__t_code_contents(tobj((s/usr/lib/scons/SCons/Action.pyt_callable_contents�s


cCs�yt|j�SWn�tk
r�yt|jj�SWq�tk
r�yt|�SWq�tk
r�yt|�SWq�tk
r�ytj|�SWq�tjtfk
r�t	|�SXq�Xq�Xq�XnXdS(s�Return the signature contents of any Python object.

    We have to handle the case where object contains a code object
    since it can be pickled directly.
    N(
RRRRRtpickletdumpst
PicklingErrort	TypeErrortstr(R((s/usr/lib/scons/SCons/Action.pyt_object_contents�s 



cCsg}|jd|jt|j�f�y-|jdt|j�t|j�f�Wntk
rv|jd�nX|jddjtt	|j
d��d�|jddjtt	|j��d�|jdtt
|j��d�dj|�S(	s�Return the signature contents of a code object.

    By providing direct access to the code object of the
    function, Python makes this extremely easy.  Hooray!

    Unfortunately, older versions of Python include line
    number indications in the compiled byte code.  Boo!
    So we remove the line number byte codes to prevent
    recompilations from moving a Python function.
    s%s,%ss,%s,%ss,0,0s,(t,it)R(Rtco_argcountRtco_varnamestco_cellvarstco_freevarsRRtmapR#t	co_conststco_namesR"Rtco_code(Rtcontents((s/usr/lib/scons/SCons/Action.pyR�s#-

.*$cCs�t|j�g}|jrH|jddjtt|j��d�n
|jd�y|jpdg}Wntk
r�g}nXy&g|D]}t|j	�^q�}Wntk
r�g}nX|jddj|�d�dj|�S(s,Return the signature contents of a function.s,(R$R%s,()R(
Rt	func_codet
func_defaultsRRR*R#tfunc_closureRt
cell_contents(tfuncR.tclosureR	txxx((s/usr/lib/scons/SCons/Action.pyR
s	-


&

cCs�t|�}t|�}|dkr(|S|dkr8|St|t�r�t|t�rjt|j|j�St|j|g�Sn3t|t�r�t|g|j�St||g�SdS(N(tActiontNonet
isinstancet
ListActiontlist(tact1tact2ta1ta2((s/usr/lib/scons/SCons/Action.pyt
_actionAppend)scCs|jdd	�}t|�r*|f}nt|�|d<|r�|d}|dksbt|�ro||d<n+t|�r�||d<ntjjd��t|�dkr�|d|d|d<q�n|jdt	�t	k	r
|jdt	�t	k	r
tjjd��ndS(
sThis converts any arguments after the action argument into
    their equivalent keywords and adds them to the kw argument.
    tvarlistitcmdstrtstrfunctions�Invalid command display variable type. You must either pass a string or a callback which accepts (target, source, env) as parameters.is8Cannot have both strfunction and cmdstr args to Action()N((
tgett	is_StringttupleR7tcallabletSConstErrorst	UserErrorRR(targstkwtvt
cmdstrfunc((s/usr/lib/scons/SCons/Action.pyt_do_create_keywords>s$


			cCs4t|t�r|St|�r,t||�St|�r�y|d}|d=Wntk
rfd}nX|rvt}nt}|||�St|�r�t	j
j|�}|r�t||�St
|�jd�}t|�dkr�t|d|�St||�St|t�st|t�r0td|��ndS(sbThis is the actual "implementation" for the
    Action factory method, below.  This handles the
    fact that passing lists to Action() itself has
    different semantics than passing lists as elements
    of lists.

    The former will create a ListAction, the latter
    will create a CommandAction by converting the inner
    list elements to strings.t	generatoris
is5Don't know how to create an Action from a number (%s)N(R8t
ActionBasetis_Listt
CommandActionRFtKeyErrortCommandGeneratorActiontFunctionActionRDRGtUtiltget_environment_vart
LazyActionR"tsplitRt_do_create_list_actiontinttfloatR!R7(tactRKtgentaction_typetvartcommands((s/usr/lib/scons/SCons/Action.pyt_do_create_actionYs2



	


cCszg}x9|D]1}t||�}|dk	r
|j|�q
q
W|sRtg�St|�dkrl|dSt|�SdS(shA factory for list actions.  Convert the input list into Actions
    and then wrap them in a ListAction.iiN(RbR7RR9R(R]RKtactstataa((s/usr/lib/scons/SCons/Action.pyRZ�s

cOs3t||�t|�r&t||�St||�S(sA factory for action objects.(RNRQRZRb(R]RJRK((s/usr/lib/scons/SCons/Action.pyR6�s

RPcBsheZdZd�Zd�ZeZd�Zd�Zd�Zd�Z	d�Z
d
d�Zd	�Z
RS(s�Base class for all types of action objects that can be held by
    other objects (Builders, Executors, etc.)  This provides the
    common methods for manipulating and combining those actions.cCst|j|�S(N(tcmpt__dict__(tselftother((s/usr/lib/scons/SCons/Action.pyt__cmp__�scCsdS(N(R7(Rhtenvttargettsource((s/usr/lib/scons/SCons/Action.pytno_batch_key�scCs
t|�S(N(R"(RhRlRmRk((s/usr/lib/scons/SCons/Action.pyt	genstring�scCs�|j|||�g}|j|||�}t|�rE|f}nx,|D]$}|j|jd|d��qLWdj|�S(Ns${t}R(t
get_presigtget_varlistRDRtsubstR(RhRlRmRkRtvlRL((s/usr/lib/scons/SCons/Action.pytget_contents�s
"cCs
t||�S(N(R?(RhRi((s/usr/lib/scons/SCons/Action.pyt__add__�scCs
t||�S(N(R?(RhRi((s/usr/lib/scons/SCons/Action.pyt__radd__�scCs+||_t|�jd�}d|_|S(Ns
(t
presub_envR"RYR7(RhRktlines((s/usr/lib/scons/SCons/Action.pytpresub_lines�s		cCs|jS(N(R@(RhRlRmRktexecutor((s/usr/lib/scons/SCons/Action.pyRr�scCs|jS(sg
        Returns the type of targets ($TARGETS, $CHANGED_TARGETS) used
        by this action.
        (ttargets(RhRkR{((s/usr/lib/scons/SCons/Action.pytget_targets�sN(RRt__doc__RjRnt	batch_keyRoRuRvRwRzR7RrR}(((s/usr/lib/scons/SCons/Action.pyRP�s							t
_ActionActionc	BsSeZdZeededdddd�Zd�Zeeeeedd�ZRS(s2Base class for actions that create output objects.s$TARGETSc	Ks�||_|tk	r9|dkr-d|_q9||_n||_||_||_|sct}n||_||_	|r�t
|�s�d�}
|
}ntjj
||d�ndS(NcSst|�t|�fS(N(tid(RhRkRlRm((s/usr/lib/scons/SCons/Action.pytdefault_batch_key�sR(RARR7RBR@tpresubtchdirRtexitstatfuncR|RFRGRVt	AddMethod(RhRARBR@R�R�R�RR|RKR�((s/usr/lib/scons/SCons/Action.pyt__init__�s"									cCsJytjjt|d��Wn%tk
rEtjj|d�nXdS(Ns
(tsyststdouttwritetunicodetUnicodeDecodeError(RhRRlRmRk((s/usr/lib/scons/SCons/Action.pytprint_cmd_line�s	
c
Cs�t|�s|g}nt|�s0|g}n|tkr]|j}|tkr]t}q]n|tkru|j}n|tkr�t}n|tkr�t}n|tkr�|j}nd}
|rAt	j
�}
yt|j�}WqAt
k
r=t|�s>|	r$t|	jdjdj�}q:t|dj�}q>qAXn|r�|	rh|	j�}|	j�}ndjtt|��}dj|j|��}d||f}
tjj|
�nd}|r�|jr�|	r�|	j�}|	j�}ny|j||||	�}Wn&tk
r5|j|||�}nX|r�|rYdt|�|}ny
|j}Wnt
k
r�|j}nX|d�}|s�|j}n|||||�q�nd}|rc|r�t	j|�nzj|j|||d|	�}t |t!j"j#�r9||j$�}|r0||_$qE|}n||�}Wd|
r_t	j|
�nXn|r�|
r�|dt|
�|||�n|S(	Nis and s
  uBuilding %s with action:
  %s
s
os.chdir(%s)
tPRINT_CMD_LINE_FUNCR{sos.chdir(%s)(%RQRR�tprint_actions_presubR�t
print_actionstexecute_actionsR�R7tostgetcwdR"tabspathRRDtbatchesR|tdirtget_all_targetstget_all_sourcesRR*RzR�R�R�RBR!treprRCR�texecuteR8RGRHt
BuildErrortstatus(RhRlRmRkR�R�tshowR�R�R{tsave_cwdtttltouttcmdRCt
print_functstatR((s/usr/lib/scons/SCons/Action.pyRs�			
 



	 (N(RRR~RR7R�R�R(((s/usr/lib/scons/SCons/Action.pyR��s			cCscg}xMtt|�D]<}d|ks4d|krEd|d}n|j|�qWdj|�S(s\Takes a list of command line arguments and returns a pretty
    representation for printing.t s	t"(R*R"RR(tcmd_listtcltarg((s/usr/lib/scons/SCons/Action.pyt_string_from_cmd_listZscCsMy|dSWn:tk
rHtsDddl}|jj�dantSXdS(NtENVi����(RStdefault_ENVtSCons.EnvironmenttEnvironment(RkRG((s/usr/lib/scons/SCons/Action.pytget_default_ENVjs
tignorecKs�|jd�}t|�r=|dkr=ttj�|d<n|jd�}t|�r}|dkr}ttjd�|d<n|jd�}t|�r�|dkr�ttjd�|d<n|jdd
�}|d
kr�t|�}ni}xj|j�D]\\}}t|�rIt	j
j|�}tjj
tt|��||<q�t|�||<q�W||d<ytj||�SWnBtk
r�}	|dkr��ndtfd	��Y}
|
|	�SXd
S(s-Do common setup for a subprocess.Popen() calltstdintdevnullR�twtstderrRktraiset
dummyPopencBsLeZd�Zd�Zd�ZdZdefd��YZe�Z	Z
RS(cSs
||_dS(N(t	exception(Rhte((s/usr/lib/scons/SCons/Action.pyR��scSsdS(NR(RR((Rh((s/usr/lib/scons/SCons/Action.pytcommunicate�scSs|jjS(N(R�terrno(Rh((s/usr/lib/scons/SCons/Action.pytwait�stfcBseZd�Zd�ZRS(cSsdS(NR((Rh((s/usr/lib/scons/SCons/Action.pytread�scSsdS(NR((Rh((s/usr/lib/scons/SCons/Action.pytreadline�s(RRR�R�(((s/usr/lib/scons/SCons/Action.pyR��s	N(RRR�R�R�R7R�tobjectR�R�R�(((s/usr/lib/scons/SCons/Action.pyR��s			N(RCRDtopenR�R�R7R�titemsRQRGRVtflatten_sequencetpathsepRR*R"t
subprocesstPopentEnvironmentErrorR�(t	scons_envR�terrorRKtioR�tnew_envtkeytvalueR�R�((s/usr/lib/scons/SCons/Action.pyt_subproc}s4"
	RRcBs\eZdZd�Zd�Zdd�Zdd�Zdd�Zdd�Z	dd�Z
RS(	s$Class for command-execution actions.cKs]t|d�tj||�t|�rPttt|��rPtd��qPn||_dS(NsAction.CommandActions3CommandAction should be given only a single command(RR�R�RQR:tfilterR!R�(RhR�RK((s/usr/lib/scons/SCons/Action.pyR��s

cCs5t|j�r(djtt|j��St|j�S(NR�(RQR�RR*R"(Rh((s/usr/lib/scons/SCons/Action.pyt__str__�sc	Cs|r$|j|jdd|�}n|j|jd||�}d}d}xtr�y|ddd}Wntk
r�d}nX|dkr�d}n|dkr�d}nP|ddd|dd<qNWy'|dds�|dd|d<nWntk
rnX|||fS(NiR{t@it-(t
subst_listR�R7tTruet
IndexError(	RhRlRmRkR{RtsilentR�R((s/usr/lib/scons/SCons/Action.pytprocess�s,	

		
c
Cs�|jdkrdS|jtk	r~ddlm}|rV|j|j|d|�}n|j|j|||�}|r~|Sn|j||||�\}}}	|	r�dSt|d�S(Ni����(t	SUBST_RAWR{Ri(RAR7RtSCons.SubstR�RsR�R�(
RhRlRmRkR{R�RR�R�R�((s/usr/lib/scons/SCons/Action.pyRB�s!cCstjj}tjj}y|d}Wn#tk
rKtjjd��nXy|d}Wn#tk
rtjjd��n.Xt|�r�|j	|dddd��}n|j
d	d
��}	t|�}
xs|
j�D]e\}}t|�s�t
|�r-||�}tjjtt|��|
|<q@t|�|
|<q�q�W|re|j�}|j�}n|j|ttt|��||�\}
}}x~tt|
�D]m}|||	�}|||	|d||
�}|r�|r�d|}tjjd
|d|d|d|�Sq�WdS(sVExecute a command action.

        This will handle lists of commands as well as individual commands,
        because construction variable substitution may turn a single
        "command" into a list.  This means that this class can actually
        handle lists of commands, even though that's not how we use it
        externally.
        tSHELLs$Missing SHELL construction variable.tSPAWNs$Missing SPAWN construction variable.trawitconvcSs|S(N((R	((s/usr/lib/scons/SCons/Action.pyR
stESCAPEcSs|S(N((R	((s/usr/lib/scons/SCons/Action.pyR
	sisError %sterrstrR�tactiontcommand(RGtSubsttescape_listRVR�RSRHRIRDRsRCR�R�RQR�R�RR*R"R�R�R�R:RR�RR�(RhRlRmRkR{R�R�tshelltspawntescapeR�R�R�R�R�R�tcmd_lineRtmsg((s/usr/lib/scons/SCons/Action.pyR��sD	

!"0

cCs�ddlm}|j}t|�r@djtt|��}nt|�}|rh|j||d|�S|j||||�SdS(s�Return the signature contents of this action's command line.

        This strips $(-$) and everything in between the string,
        since those parts don't affect signatures.
        i����(t	SUBST_SIGR�R{N(R�R�R�RQRR*R"tsubst_target_source(RhRlRmRkR{R�R�((s/usr/lib/scons/SCons/Action.pyRq/s	cCs2|jdt�}t|�r@|d dkr@|j|�}n|sS|d
krWgSddlm}|r�|j|j|d|�}n|j|j|||�}g}x|D]w}	|	r�t|	d	�}
t	j
|
�}|r�|jd�}
n|j|
�}
|
r*|j
|jj|
��q*q�q�W|S(NtIMPLICIT_COMMAND_DEPENDENCIESit$t0R7i����(R�R{i(R�sNone(RCR�RDRsR�R�R�R�R"tstrip_quotestmatchtgrouptWhereIsRtfstFile(RhRlRmRkR{ticdR�R�tresR�tdtm((s/usr/lib/scons/SCons/Action.pytget_implicit_deps@s(
#N(RRR~R�R�R7R�RBR�RqR�(((s/usr/lib/scons/SCons/Action.pyRR�s		?RTcBs�eZdZd�Zdd�Zd�Zd�Zdd�Ze	e	e	e	e	dd�Z
dd�Zdd�Zdd	�Z
d
�ZRS(s$Class for command-generator actions.cCsMt|d�||_||_|jdd�|_|jdd�|_dS(NsAction.CommandGeneratorActionR@R|s$TARGETS((RROtgen_kwRCR@R|(RhRORK((s/usr/lib/scons/SCons/Action.pyR�Ys

		c	Cs�t|�s|g}n|r9|j�}|j�}n|jd|d|d|d|�}t||j�}|s�tjjdt	|���n|S(NRlRmRkt
for_signaturesNObject returned from command generator: %s cannot be used to create an Action.(
RQR�R�ROR6R�RGRHRIR�(RhRlRmRkR�R{trettgen_cmd((s/usr/lib/scons/SCons/Action.pyt	_generate`s	cCsgy
|j}Wntk
r&d}nX|dkrEtjj�}n|jgg|d�}t|�S(Ni(RxRR7RGtDefaultstDefaultEnvironmentR�R"(RhRkR]((s/usr/lib/scons/SCons/Action.pyR�rs


cCs%|j|||d�j|||�S(Ni(R�R(RhRkRlRm((s/usr/lib/scons/SCons/Action.pyR|scCs(|j|||d|�j|||�S(Ni(R�Ro(RhRlRmRkR{((s/usr/lib/scons/SCons/Action.pyRosc

Cs�|j|||d|	�}
|
dkrptjjdtttt|���tttt|���f��n|
|||||||||	�	S(NisGWhile building `%s': Cannot deduce file extension from source files: %s(	R�R7RGRHRIR�R:R*R"(RhRlRmRkR�R�R�R�R�R{R]((s/usr/lib/scons/SCons/Action.pyR�s=cCs(|j|||d|�j|||�S(s�Return the signature contents of this action's command line.

        This strips $(-$) and everything in between the string,
        since those parts don't affect signatures.
        i(R�Rq(RhRlRmRkR{((s/usr/lib/scons/SCons/Action.pyRq�scCs(|j|||d|�j|||�S(Ni(R�R�(RhRlRmRkR{((s/usr/lib/scons/SCons/Action.pyR��scCs+|j|||d|�j||||�S(Ni(R�Rr(RhRlRmRkR{((s/usr/lib/scons/SCons/Action.pyRr�scCs%|jdd|d|�j||�S(Ni(R�R7R}(RhRkR{((s/usr/lib/scons/SCons/Action.pyR}�sN(RRR~R�R7R�R�RRoRRRqR�RrR}(((s/usr/lib/scons/SCons/Action.pyRTWs		
		RXcBsMeZd�Zd�Zd�Zdd�Zd�Zd�Zdd�Z	RS(cCsJt|d�tj|d|d|�tjj|�|_||_dS(NsAction.LazyActions${Rp(RRRR�RGRVt	to_StringR`R�(RhR`RK((s/usr/lib/scons/SCons/Action.pyR��s
cCs2|j|j�}t|�r.d|kr.tStS(Ns
(RCR`RDRRRT(RhRkR((s/usr/lib/scons/SCons/Action.pytget_parent_class�scCsh|r|j|jd�}nd}t||j�}|sdtjjd|jt|�f��n|S(NRs0$%s value %s cannot be used to create an Action.(RCR`R6R�RGRHRIR�(RhRkRR�((s/usr/lib/scons/SCons/Action.pyt_generate_cache�s(cCs
|j|�S(N(R(RhRlRmRkR�R{((s/usr/lib/scons/SCons/Action.pyR��scOs+|j|�}|j||||||�S(N(RR(RhRlRmRkRJRKR((s/usr/lib/scons/SCons/Action.pyR�scCs%|j|�}|j||||�S(N(RRq(RhRlRmRkR((s/usr/lib/scons/SCons/Action.pyRq�scCs(|j|�}|j|||||�S(N(RRr(RhRlRmRkR{R((s/usr/lib/scons/SCons/Action.pyRr�sN(
RRR�RRR7R�RRqRr(((s/usr/lib/scons/SCons/Action.pyRX�s			
		RUcBsSeZdZd�Zd�Zdd�Zd�Zdd�Zd�Z	d�Z
RS(	s"Class for Python function actions.cCs�t|d�||_yt|�|_WnDtk
roy|j|_Wqptk
rkt|�|_qpXnXtj	||�dS(NsAction.FunctionAction(
RtexecfunctionRtfunccontentsRRutgcR#R�R�(RhRRK((s/usr/lib/scons/SCons/Action.pyR��s
	

cCsLy|jjSWn7tk
rGy|jjjSWqHtk
rCdSXnXdS(Ntunknown_python_function(RRRt	__class__(Rh((s/usr/lib/scons/SCons/Action.pyt
function_name�s

cCs|jdkrdS|jtk	r~ddlm}|rV|j|j|d|�}n|j|j|||�}|r~|Snd�}y|jj}Wntk
r�n-X|dkr�dSt	|�r�||||�S|j
�}	||�}
||�}d|	|
|fS(Ni����(R�R{cSs'd�}ddjt||��dS(NcSs:y
|j}Wntk
r,t|�}n
X|�}|S(N(tstr_for_displayRR�(RR((s/usr/lib/scons/SCons/Action.pytquotes

	t[s, t](RR*(RdR	((s/usr/lib/scons/SCons/Action.pytarrays	s
%s(%s, %s)(RAR7RR�R�RsRRBRRFR(RhRlRmRkR{R�RRtstrfunctnamettstrtsstr((s/usr/lib/scons/SCons/Action.pyRB�s,	

cCs-|j�}|dkr%t|j�Sd|S(NtActionCallers%s(target, source, env)(RR"R(RhR((s/usr/lib/scons/SCons/Action.pyR�s
c	Csed}zT|r*|j�}|j�}nttt|��}y"|jd|d|d|�}WnOtk
ry}�n:tk
r�}�n%t	k
r�}|}t
j�}nX|rUtj
j||�}||_||_y|j||||�|_Wn)tk
r*|j|||�|_nX|drUt|dt�rU|�qUn|SWd~XdS(NRlRmRki(NNN(R7R�R�R:R*RRtKeyboardInterruptt
SystemExitt	ExceptionR�texc_infoRGRHtconvert_to_BuildErrortnodeR�RBR�R!R8R�(	RhRlRmRkR{RtrsourcesRR�((s/usr/lib/scons/SCons/Action.pyR�s8"		

cCs3y|j|||�SWntk
r.|jSXdS(s6Return the signature contents of this callable action.N(RRR(RhRlRmRk((s/usr/lib/scons/SCons/Action.pyRqJs
cCsgS(N((RhRlRmRk((s/usr/lib/scons/SCons/Action.pyR�QsN(RRR~R�RR7RBR�R�RqR�(((s/usr/lib/scons/SCons/Action.pyRU�s			#	,	R9cBskeZdZd�Zd�Zd�Zd�Zd�Zeeeeed	d�Z
d�Zd	d�ZRS(
s!Class for lists of other actions.cCsDt|d�d�}tt||��|_d|_d|_dS(NsAction.ListActioncSst|t�r|St|�S(N(R8RPR6(R	((s/usr/lib/scons/SCons/Action.pytlist_of_actionsXss$TARGETS((RR:R*R@R|(Rht
actionlistR((s/usr/lib/scons/SCons/Action.pyR�Vs

		cCs2djg|jD]}|j|||�^q�S(Ns
(RR:Ro(RhRlRmRkRd((s/usr/lib/scons/SCons/Action.pyRobscCsdjtt|j��S(Ns
(RR*R"R:(Rh((s/usr/lib/scons/SCons/Action.pyR�escCs/tjjg|jD]}|j|�^q�S(N(RGRVR�R:Rz(RhRkRd((s/usr/lib/scons/SCons/Action.pyRzhs	cCs2djg|jD]}|j|||�^q�S(s|Return the signature contents of this action list.

        Simple concatenation of the signatures of the elements.
        R(RR:Ru(RhRlRmRkR	((s/usr/lib/scons/SCons/Action.pyRqlsc
Csg|	r!|	j�}|	j�}nx?|jD]4}
|
|||||||||	�	}|r+|Sq+WdS(Ni(R�R�R:(RhRlRmRkR�R�R�R�R�R{R]R�((s/usr/lib/scons/SCons/Action.pyRsscCs:g}x-|jD]"}|j|j|||��qW|S(N(R:textendR�(RhRlRmRkRR]((s/usr/lib/scons/SCons/Action.pyR�s cCs`tjj�}x>|jD]3}x*|j||||�D]}t||<q8WqWt|j��S(N(RGRVtOrderedDictR:RrR�tkeys(RhRlRmRkR{RR]R`((s/usr/lib/scons/SCons/Action.pyRr�s
N(
RRR~R�RoR�RzRqRR7RR�Rr(((s/usr/lib/scons/SCons/Action.pyR9Ts						RcBsYeZdZd�Zd�Zd�Zd�Zd�Zd	d�Z	d�Z
d�ZRS(
scA class for delaying calling an Action function with specific
    (positional and keyword) arguments until the Action is actually
    executed.

    This class looks to the rest of the world like a normal Action object,
    but what it's really doing is hanging on to the arguments until we
    have a target, source and env to use for the expansion.
    cCs||_||_||_dS(N(tparentRJRK(RhRRJRK((s/usr/lib/scons/SCons/Action.pyR��s		cCs�|jj}yt|jj�}WnMtk
rqyt|jjjj�}Wqrtk
rmt|�}qrXnXt|�}|S(N(	RtactfuncR"R/R-RRRR(RhRlRmRkRR.((s/usr/lib/scons/SCons/Action.pyRu�s

cCs�t|�rRg}x-|D]%}|j|j||||��qW|jj|�S|dkrb|St|�r�|j|d||�S|jj|�S(Ns$__env__i(RQRRsRtconvertRD(RhRRlRmRkRtelem((s/usr/lib/scons/SCons/Action.pyRs�s
#cCs,g|jD]}|j||||�^q
S(N(RJRs(RhRlRmRkR	((s/usr/lib/scons/SCons/Action.pyt
subst_args�scCsGi}x:|jj�D])}|j|j||||�||<qW|S(N(RKRRs(RhRlRmRkRKR�((s/usr/lib/scons/SCons/Action.pytsubst_kw�s'cCs=|j|||�}|j|||�}|jj||�S(N(R"R#RR(RhRlRmRkR{RJRK((s/usr/lib/scons/SCons/Action.pyR�scCs=|j|||�}|j|||�}|jj||�S(N(R"R#RR
(RhRlRmRkRJRK((s/usr/lib/scons/SCons/Action.pyRB�scCs|jj|j|j�S(N(RR
RJRK(Rh((s/usr/lib/scons/SCons/Action.pyR��sN(RRR~R�RuRsR"R#R7RRBR�(((s/usr/lib/scons/SCons/Action.pyR�s						t
ActionFactorycBs&eZdZd�d�Zd�ZRS(sfA factory class that will wrap up an arbitrary function
    as an SCons-executable Action object.

    The real heavy lifting here is done by the ActionCaller class.
    We just collect the (positional and keyword) arguments that we're
    called with and give them to the ActionCaller object we create,
    so it can hang onto them until it needs them.
    cCs|S(N((R	((s/usr/lib/scons/SCons/Action.pyR
�scCs||_||_||_dS(N(RR
R (RhRR
R ((s/usr/lib/scons/SCons/Action.pyR��s		cOs+t|||�}t|d|j�}|S(NRB(RR6RB(RhRJRKtacR�((s/usr/lib/scons/SCons/Action.pyR�s(RRR~R�R(((s/usr/lib/scons/SCons/Action.pyR$�s(7R~t__revision__tSCons.compatRGtdisR�RtreR�R�tSCons.DebugRtSCons.ErrorstSCons.Executort
SCons.UtilR�RVRDRQR�RR�R�R�RRRRRRtcompileR�RR#RRR?RNRbRZR6RPR�R�R7R�R�R�RRRTRXRUR9RR$(((s/usr/lib/scons/SCons/Action.pyt<module>Msd			


			&	.				3		7�		4�Y){8F

Youez - 2016 - github.com/yon3zu
LinuXploit