a
    	”$a¬  ã                   @   sŒ   d dl Z d dlmZmZ d dlmZmZ d dlmZm	Z	m
Z
 ddd	„Zeej_dd
d„Zeej_edƒedƒdd„ ƒƒZdd„ Zeej_dS )é    N)ÚBuildÚUtils)ÚfeatureÚbefore)ÚSET_TARGET_TYPEÚTO_LISTÚLOCAL_CACHEÚ Ú.Tc                 C   sÖ  |dd… }t j |¡}d|| ¡ f }t| |dƒs8dS |  d¡ ddd	d
ddddddddœ}d}	g }
t|ƒ}|D ]N}||v rrt|| ƒ}|D ]0}|
 t j ||| ¡¡ |dkrŽt	|
ƒd }	qŽqrt|ƒ}z
| j
}W nD ty   | jjddd| _
| j
 | jjddd¡ | j
}Y n0 d}d}|  d¡rt|  d¡dkrtt|  d¡tƒrfdd |  d¡¡ }nd|  d¡ }|dkr‚d}| jd r”d}nd}|  d ¡rÚt|  d ¡tƒrÌd!d |  d ¡¡ }nd!|  d ¡ }| d"|||f d#d$d%d%||
|dd&	}| j | j¡|j_| j d'¡}| | j¡|j_t|ƒ|j_|j |d ¡}| | j¡|j_| j | j¡d( | j |¡ | j¡ |j_|  ||¡ |r¾|	dur¾t| d)ƒ}| j |
|	 ¡g||< d*| j | j¡ |_ dS )+ziBuild a IDL file using pidl.
       This will produce up to 13 output files depending on the options usedr   éüÿÿÿz%s_%sÚPIDLNÚbuild_sourcez%s.hzndr_%s.c ndr_%s.hzsrv_%s.c srv_%s.hzcli_%s.c cli_%s.hz
ndr_%s_s.cz!ndr_%s_scompat.c ndr_%s_scompat.hzndr_%s_c.c ndr_%s_c.hzpy_%s.cztdr_%s.c tdr_%s.hz%s_p.czcom_%s.h)z--headerz--ndr-parserz--samba3-ndr-serverz--samba3-ndr-clientz--serverz--server-compatú--clientz--pythonz--tdr-parserz--dcom-proxyz--com-headerzndr_%s.hé   zpidl/lib/Parse/**/*.pmF)ÚflatÚpidlr	   ZCPPzCPP="%s"ú z	CPP=xlc_rÚPIDL_DEVELOPER_MODEzPIDL_DEVELOPER=1 ÚCCzCC="%s"zkcd ${PIDL_LAUNCH_DIR} && %s%s %s ${PERL} ${PIDL} --quiet ${OPTIONS} --outputdir ${OUTPUTDIR} -- "${IDLSRC}"ú.cÚcT)	ÚruleÚext_outr   Úupdate_outputsÚshellÚsourceÚtargetÚnameÚ
samba_typez	pidl/pidlú/ÚPIDL_HEADERSú#)!ÚosÚpathÚbasenameÚupperr   ÚSET_BUILD_GROUPr   ÚappendÚjoinÚlenZpidl_files_cacheÚAttributeErrorÚsrcnodeÚant_globÚextendÚ
CONFIG_SETÚ
CONFIG_GETÚ
isinstanceÚlistÚenvÚ	path_fromÚbldnodeZPIDL_LAUNCH_DIRÚfind_resourcer   ZOPTIONSZIDLSRCÚfind_dirZ	OUTPUTDIRÚadd_manual_dependencyr   Úfind_or_declareÚmore_includes)ÚbldZpnamer   ÚoptionsÚ
output_dirÚgenerate_tablesZbnamer   Zoptions_mapZtable_header_idxZ	out_filesZoptions_listÚoZofilesÚfZpidl_src_nodesZcppÚccZpidl_devÚtZpnodeZsnodeÚpidl_headers© rC   úk/home/jack/SDK/ZBT-AX3000-OpenWrt-21.02/build_dir/hostpkg/samba-4.14.12/./buildtools/wafsamba/samba_pidl.pyÚ
SAMBA_PIDL   s    
ö

ø*
rE   c           	      C   sr   t |ƒD ]d}| j|||||d |r|r|dd… }| j|ddd d|v r| j|ddd | j|dd	d qd
S )z)A wrapper for building a set of IDL files)r;   r<   r=   r   r   TZTYPE_STRUCT)Z	auto_depsZ	fuzz_typer   ZTYPE_INZTYPE_OUTN)r   rE   ZSAMBA_NDR_FUZZ)	r:   r   r   r;   r<   r=   Zgenerate_fuzzersÚpZ	interfacerC   rC   rD   ÚSAMBA_PIDL_LISTp   s"    þþþrG   ÚcollectÚ	exec_rulec                 C   s†   t | jdƒ}t | j¡| _| ¡ D ]^\}}| j |¡}| j |d ud| ¡ | ¡  |D ]&}| j |d ud| ¡ | j 	|¡ qXq"d S )Nr    zFailed to find PIDL header %sz3Got None as build node generating PIDL table for %s)
r   r:   r   Úto_listr   ÚitemsÚget_tgen_by_nameÚASSERTÚpostr'   )ÚselfrB   r   ZhdÚyÚnoderC   rC   rD   rH   ‘   s    c                 C   s@   |   d¡ | ddddddd||d	}tj | j ¡ d	¡|j_d
S )z!generate the pidl NDR tables fileÚmainrH   z${PERL} ${SRC} > ${TGT}r   r   Tz../../librpc/tables.pl)	Úfeaturesr   r   r   r   r   r   r   r   ZlibrpcN)r&   r"   r#   r(   r+   Úabspathr2   ZLIBRPC)r:   r   r   rA   rC   rC   rD   ÚSAMBA_PIDL_TABLES    s    
÷
rU   )r	   r
   T)r	   r
   TT)r"   Úwaflibr   r   Úwaflib.TaskGenr   r   Úsamba_utilsr   r   r   rE   ÚBuildContextrG   rH   rU   rC   rC   rC   rD   Ú<module>   s&      ý
f    ü
