a
    	”$a’  ã                   @   sª   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mZm	Z	 d dl
mZ d dlmZ dadZdZdZdad	d
„ Zdd„ ZG dd„ dejjƒZeddd„ƒZedd„ ƒZdS )é    N)ÚUtilsÚLogsÚOptionsÚErrorsÚContext©Úconf)Úsamba_utils)éþ   Ú )é   r   )r   r   Fc                 C   sæ   zt | dƒ}W n$   t d|  ¡ t d¡ Y n0 |\}}| ¡ }t| d¡ƒdkrZd}||f}|tkrz| 	d| ¡ n`|t
kr’| 	d| ¡ nH|tkrª| 	d| ¡ n0|d	krÆ| 	d
||f ¡ n| 	d|||f ¡ | ¡  dS )z'add an answer to a set of cross answersÚaz$Unable to open cross-answers file %sr   Ú
r   z%s: OK
z%s: UNKNOWN
z%s: NO
r   z	%s: "%s"
z%s: (%d, "%s")
N)Úopenr   ÚerrorÚsysÚexitÚstripÚlenÚsplitÚ	ANSWER_OKÚwriteÚANSWER_UNKNOWNÚ	ANSWER_NOÚclose)Úca_fileÚmsgZanswerÚfÚretcodeÚ	retstring© r    úl/home/jack/SDK/ZBT-AX3000-OpenWrt-21.02/build_dir/hostpkg/samba-4.14.12/./buildtools/wafsamba/samba_cross.pyÚ
add_answer   s(    r"   c                 C   s‚  zt | dƒ}W n   t Y S 0 |D ]N}| ¡ }|dks$|d dkrHq$| d¡dkr$| dd¡}|d  ¡ }||krxq$|d  ¡ }|dks”|d	kr¤| ¡  t  S |d
kr¼| ¡  t  S |dksÌ|dkrÜ| ¡  t  S |d dkr| ¡  d| d¡f  S |d dkr,| ¡  d| d¡f  S t 	d|¡}|rb| ¡  t
| d¡ƒ| d¡f  S t d|| f ¡‚q$| ¡  tS )z6return a (retcode,retstring) tuple from a answers fileÚrr   r   ú#ú:éÿÿÿÿr   ZOKZYESÚUNKNOWNZFAILÚNOú"ú'z\(\s*(-?\d+)\s*,\s*"(.*)"\s*\)é   zBad answer format '%s' in %s)r   r   r   Úfindr   r   r   r   ÚreÚmatchÚintÚgroupr   ÚWafError)r   r   r   Úliner   ZthismsgÚansÚmr    r    r!   Úcross_answer0   sH    

r5   c                   @   s   e Zd ZdZdd„ ZdS )Úcross_Popenz#cross-compilation wrapper for Popenc                  O   s(  | \}}d}t }d|v rHd}| d¡}||d  }||d  }t||ƒ}d|v rØ|t krØ| d¡}t ||d  ¡}	|	 |d|… ¡ |rÔt|	tjj	tjj	| 
di ¡d	}
|
 ¡ \}}|
jt |¡f}t|||ƒ n|	}|r|t krödat|||ƒ |\}}d
dd||f g}tj||fi |¤Ž d S )NFú--cross-answersTr   r+   ú--cross-executer   Úenv)ÚstdoutÚstderrr9   z/bin/shz-czecho -n '%s'; exit %d)r   Úindexr5   Úshlexr   ÚextendÚ
real_Popenr   Ú
subprocessÚPIPEÚgetÚcommunicateÚ
returncoder	   Ú
get_stringr"   Úcross_answers_incompleteÚ__init__)ÚkÚkwÚobjÚargsZuse_answersr3   Úir   r   ZnewargsÚpZce_outZce_errr   r   r    r    r!   rG   \   s<    




ýzcross_Popen.__init__N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rG   r    r    r    r!   r6   Z   s   r6   c                 C   s¨   | j jsg S tdu r:tjjattj_tjt_tj	 t_
t_g }| j jrX| d| j jg¡ | j jr’|du rrt d¡‚| dtj tj| j j¡|g¡ |g kr¤t d¡‚|S )z:get test_args to pass when running cross compiled binariesNr8   z%Cannot have NULL msg in cross-answersr7   zFCannot cross-compile without either --cross-execute or --cross-answers)r9   ÚCROSS_COMPILEr?   r   r@   ÚPopenr6   Úrun_regular_processÚrun_processÚnadaÚget_processÚalloc_process_poolZCROSS_EXECUTEr>   ÚCROSS_ANSWERSr   r1   ÚosÚpathÚjoinr   Ú
launch_dir)r   r   Úretr    r    r!   ÚSAMBA_CROSS_ARGS   s"    
 
r_   c                 C   s"   | j jrtrt d| j j ¡‚dS )z*check if we have some unanswered questionsz#Cross answers file %s is incompleteT)r9   rR   rF   r   r1   rY   r   r    r    r!   ÚSAMBA_CROSS_CHECK_COMPLETE©   s    r`   )N)rZ   r   r-   r=   Úwaflibr   r   r   r   r   Úwaflib.Configurer   Úwafsambar	   r?   r   r   r   rF   r"   r5   r@   rS   r6   r_   r`   r    r    r    r!   Ú<module>   s    *3