a
    	$a                  )   @   s  d dl 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m	Z	m
Z
mZmZmZ d dlmZ d dlmZ d dlmZ e	je
j_d dlT d dlmZ d dlT d dlT d dlT d dlT d dlT d dlT d dlT d dlT d dl T d dl!T d dl"Z"d dl#Z#d dl$Z$d dl%Z%d dl&Z&d dl'Z'd dl(Z(d dl)Z)d dl*Z*d dl+Z+d dl,Z,d dl-Z-dZ.d	e j/d
< ej0dvrpe1d e2d edd Z3dd Z4e4ej5_4dd Z6dBddZ7e7ej5_7dCddZ8e8ej5_8dDddZ9e9ej5_9dEd d!Z:e:ej5_:ddd"ddddddg dfd#d$Z;e;ej5_;e	j<d%d& Z=e=ej5_=d'd( Z>e>ej5_>dFd)d*Z?e?ej5_?d+d, Z@d-d. ZAeBdddddfd/d0ZCeBdddddfd1d2ZDeDej5_DeBddddfd3d4ZEeEej5_EdGd6d7ZFeFej5_FdHd8d9ZGeGej5_Gd:d; ZHeHej5_HdId<d=ZIeIej5_IeJd>eKd?d@dA ZLdS )J    N)BuildOptionsTaskUtilsTaskGenLogsContextErrors)conf)debug)SUBST_VARS_RECURSIVE)*)symlinkshared1ZPYTHONUNBUFFERED)i  z
Please use the version of waf that comes with Samba, not
a system installed version. See http://wiki.samba.org/index.php/Waf
for details.

Alternatively, please run ./configure and make as usual. That will
call the right version of waf.   c                 C   s0  | j  | j_ttj| jjt ttj| jjtd ttj| jjd ttj| jjd ttj| jjd dD ]8\}}tj| jjd| }tj	|st
d| | qtj| jjd}tj| j d	}t|d
  t|d  tj|rt| ntj|r,t| dS )z"create the samba build environmentZprivatemoduleszpython/samba/dcerpcdefault))r   r   )r   r   )pythonr   default/z../zdefault/pidl/blibz	pidl/blibz/man1z/man3N)bldnodeabspathenvZBUILD_DIRECTORYmkdir_pospathjoinLIB_PATHlexistsr   srcnodeislinkunlinkexistsshutilrmtree)r
   sourcetargetZlink_targetZblib_bldZblib_src r'   i/home/jack/SDK/ZBT-AX3000-OpenWrt-21.02/build_dir/hostpkg/samba-4.14.12/./buildtools/wafsamba/wafsamba.pySAMBA_BUILD_ENV3   s$    r)   c                 C   sR   |du rdS |  |dud|  t| d}||vr:g ||< || ||d dS )z0add an init_function to the list for a subsystemNz3You must specify a subsystem for init_function '%s'ZINIT_FUNCTIONS)ZTARGETZINIT_FUNCTION)ASSERTZLOCAL_CACHEappend)bld	subsystemr&   init_functioncacher'   r'   r(   ADD_INIT_FUNCTIONN   s    
r0   c                 C   s   | j d d dS )Nr    )outputswrite)taskr'   r'   r(   generate_empty_fileZ   s    r5   r1   TFmainLIBRARYc,           :      C   s  |'r|rt d| t| |r$d}'|+s8t| |d dS | j||d}|rV| ||}|dksf|g kr|dkr|dkrt| |d dS |d },| jd	| t|,d
 |,}t| |r|}-n|d }-|dkrd}.n|}.| j	|-||||||||	|||.||||%|*||||d t| |rdS t| ||s&dS |d| 7 }t
|}||- | j||dkd}| j|"|dkd}"|'s|dkr|s|du r|du rt d| |
du rt d| |du rt d| |!durnt|dks|s|'s|r|}!n|dd}!nD|'dkr |du s$J |#s6|s6|r:d} t| |dd| |'}!t
|}| jd du rv|t
d d}/|r|/d7 }/|r|/d7 }/|#r|/d7 }/|r| jd r| jd }0d}1||0|1}2n|}2d}3| jjr|'r dtjjtjjf }4n|rd||f }4nd}4|4rd| }3| |2|#|4|3|$ t|!| jj}5| j|5}6| j|3}7|6srt d |5 |7st d!|3 | |6|7 | jrt|!d" | jj}8| | j|8| j|3 tj| j| j|3}3|  | | |/g |!|||||3|2||||d||||d#| j |#f |$|'|(|)d$}9|rB|"sBd%| }"|"rbd&t!j"v r\d'|" }"|"|9_#|
dur|'s|r| j$|
|| jd d( n| j$|
|d) |&durd*| jv r| jd* r| %|&| dS )+zdefine a Samba libraryz6private library '%s' must not have public header filesTDISABLEDNvarsr1   EMPTY.empty.c
%s_empty_cruler&   .objlistZ	librariesr6   )r%   depspublic_depsincludespublic_headerspublic_headers_installprivate_headersheader_pathcflags
cflags_endgroup	autoprotoautoproto_extra_source
depends_onhide_symbolsallow_warningspyembedpyextlocal_includeglobal_include PYTHON)r   z$public library '%s' must have a vnumz-public library '%s' must have pkg-config filez*public library '%s' must have header files_-ENABLE_RELRO-Wl,-z,relro,-z,nowz c cshlib symlink_lib install_lib pyext pyembedz
 abi_checkZPYTHON_SO_ABI_FLAGz%s_%sz
%s.vscriptzunable to find fullpath for %sz"unable to find vscript path for %s.instz%s/%s)featuresr%   r&   rM   samba_ldflags
samba_depssamba_includesZversion_scriptversion_libnamerR   rS   vnumsonameinstall_pathsamba_inst_pathnameZsamba_realnamesamba_installabi_directory	abi_matchprivate_librarygrouping_libraryallow_undefined_symbolsz	shared/%szwaflib.extras.compat15r   )rb   Z
extra_name)rb   XSLTPROC_MANPAGES)&r	   WafErrorZLIB_MUST_BE_PRIVATESET_TARGET_TYPEEXPAND_VARIABLESSUBDIRSAMBA_GENERATORr5   BUILTIN_LIBRARYSAMBA_SUBSYSTEMTO_LISTr+   Zmap_shlib_extensionreplaceZPRIVATE_NAMEr   extendZHAVE_LD_VERSION_SCRIPTr   g_moduleAPPNAMEVERSIONZABI_VSCRIPTZapply_patterncshlib_PATTERNr   find_or_declareadd_manual_dependency
is_installr   r   r   SET_BUILD_GROUPsysr   	link_nameZPKG_CONFIG_FILESMANPAGES):r,   libnamer%   rA   rB   rC   rD   rE   rF   rG   Zpc_filesrb   rc   rH   rI   ldflagsZexternal_libraryrealnameZkeep_underscorerK   rL   rJ   rM   rR   rS   r:   subdirrd   installrP   rQ   Ztarget_typeZbundled_extensionbundled_namer   rh   ri   rN   manpagesrj   rk   rl   rO   enabledempty_c
obj_targetsubsystem_groupr]   Zabi_flagreplacementra   ZvscriptversionfullnamefullpathZvscriptpathZinstnametr'   r'   r(   SAMBA_LIBRARY_   sF   ,









r   c           $      C   s  |rd}|  dsd}|s*t| |d dS |sJ| jj|krJt| |d dS |rdd}|	du rd| jd }	t| |dstdS d}|r|d7 }|d	 }| j||d
}|r| ||}tt|}|dkrd} n|dkrd} n|} |
}!t|	}"| jd du r|!d7 }!|"td | jd du r&|"td | j	|||||!|| ||||||||d | 
| t|}|| | |g ||||||d|d|||"d}#|durd| jv r| jd r| || dS )zdefine a Samba binaryFENABLE_SELFTESTr8   NZFUZZ_TARGET_LDFLAGSZBINARYz"c cprogram symlink_bin install_binr[   r@   r9   Zbinariesr6   build_compilerscompiler_libraries
ENABLE_PIETz -fPIEz-pierX   rY   )r%   rA   rC   rH   rI   rJ   rK   subsystem_namerR   rS   
use_hostccrQ   rO   use_global_deps)r]   r%   r&   r_   r`   rR   rS   Zsamba_modulestopsamba_subsystemrd   re   rg   r^   rm   )
CONFIG_GETro   r   Zenable_fuzzingrp   rq   unique_listru   rw   rt   r   r+   r   )$r,   Zbinnamer%   rA   rC   rD   rF   rG   r   r   rH   rI   rK   r   r   compilerrJ   r   rR   rS   r   rO   rP   r:   r   r   rd   r   ZfuzzerZfor_selftestr]   r   r   Z
pie_cflagsZpie_ldflagsr   r'   r'   r(   SAMBA_BINARYR  s    



"r   samba_init_modulec                 C   s  |  |d|  | j||d}|r.| ||}|s<t| |rt| |dkrNdS | j||||||	|
|||||d | ||| dS |st| |d dS t| |dkrdS |}|d| 7 }|d| d r|t	d| d d }q||d r
|t	|d d }qd	||f }| 
|}|dr@|t	dd }q d
||f }|rb|
d||f 7 }
| j|||||
||||||||d| |||||d dS )zdefine a Samba module.z1You must specify a subsystem for SAMBA_MODULE(%s)r9   r8   N)
rA   rC   rK   rL   rH   rI   rR   rS   rO   r   rT   librV   z%s_module_%szmodules/%s/%sz -D%s=%sz${MODULESDIR}/%s)rA   rC   rH   rI   r   rK   rR   rS   r:   r   r   rd   rP   r   rl   rO   r   )r*   rp   rq   rs   ZGET_TARGET_TYPErt   r0   ro   
startswithlenZmake_libnamer   )r,   modnamer%   rA   rC   r-   r.   Zmodule_init_namerK   rL   rH   rI   Zinternal_modulerR   rS   r:   r   r   rP   r   rl   rO   r   r   Z
build_nameZbuild_link_namer'   r'   r(   SAMBA_MODULE  sv    
r   c           !      C   sZ  |st | |d dS |dks$|g krd|dkrD|dkrDt | |d dS |d }| jd| t|d |}t | |dstdS | j||d	}|r| ||}tt|}|d
| 7 }| | d}|r|d7 }|r|d7 }| |||t| ||
||d|t||||||||d} |dur| j	
t| |dur<| ||t|  |durV| j||	|d | S )zdefine a Samba subsystemr8   Nr1   r;   r<   r=   r>   Z	SUBSYSTEMr9   rT   crZ   r[   )rO   rN   )r]   r%   r&   samba_cflagsrM   r_   r`   rR   local_include_firstrS   r   Zsamba_use_hostccZsamba_use_global_depsrG   rE   )ro   rr   r5   rp   rq   r   ru   r   ZCURRENT_CFLAGSr   rw   ZSAMBA_AUTOPROTOPUBLIC_HEADERS)!r,   r   r%   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   Zinit_function_sentinelrK   rL   rM   rR   r   rS   r   r   r   r   r:   r   rN   rO   rQ   rP   r   r]   r   r'   r'   r(   rt   9  sj    




rt   
generatorsc                 C   s   t | |dsdS |sdS |d |d | | | || j||d|t|tdddd||d	
}|du rni }||j_|rd|_|dur| j	||
|d
 |S )z!A generic source generator target	GENERATORNZruledepsSAMBA_GENERATOR_VARSr9   Tr   z.c)
r?   r%   r&   shellZupdate_outputsbeforeext_outZ
samba_typedep_varsrf   r   )
ro   r+   r   rp   
isinstancestrr   r   alwaysr   )r,   rf   r?   r%   r&   rJ   r   rD   rE   rF   rG   r:   r   r   r   r'   r'   r(   rr     s:    


rr   c                 C   s   | j | _d| jd< | d | d | d | d | d | d | d	 | d
 | d | d | d | d | d | d | d dS )zZsetup build groups used to ensure that the different build
    phases happen consecutivelyTUSING_BUILD_GROUPSsetupZbuild_compiler_sourceZvscriptsZbase_librariesr   Zcompiler_prototypesr   r   build_sourceZ
prototypesheadersr6   ZsymbolcheckZsyslibcheckfinalN)r   p_lnr   	add_group)r,   r'   r'   r(   SETUP_BUILD_GROUPS  s"    














r   c                 C   s   d| j vrdS | | dS )zset the current build groupr   N)r   	set_group)r,   rJ   r'   r'   r(   r     s    
r   c                 C   s   | j j|dd}| d t|D ]}|}|dur6|}tj ||}tj tj | j| j	d|}	t
|	 tj tj | j  |}
tj |	tj |}tj |rt||
krq"tj |rt| td|||f  t|
| q"dS )z]used to copy scripts from the source tree into the build directory
       for use by selftestTflatr   Nz..zsymlink: %s -> %s/%s)r   ant_globr   ru   r   r   dirnamer   r   r   r   normpathbasenamer    readlinkr!   r   infor   )r,   rf   patternZ
installdirZinstallnamer%   sZinamer&   ZtgtdirZlink_srcZlink_dstr'   r'   r(   SAMBA_SCRIPT  s"    
"
r   c           
      C   sF  d}| j d tjv r*| j d tjv r*d}n<| j d | j d krNd| j d  }nd| j d | j d f }| j d d d	rd
| j d d  }nd| j d d  }| jd | j }t| jd | j }t|d}d}|D ]R}|}	|dkr|d d dkr|}	n||v r|	||}	|
|	 |d }q|  t|d dS )Nz sys.path.insert(0, "bin/python")PYTHONARCHDIR	PYTHONDIRr1   zsys.path.insert(0, "%s")z1sys.path.insert(0, "%s")
sys.path.insert(1, "%s")rU   r   /#!%s
#!/usr/bin/env %s
w   #!r     )r   r   r   r   r2   bldpathopeninputssrcpathrv   r3   closer   chmod
r4   r   r   Zreplacement_shebangZinstalled_locationZsource_fileZinstalled_filelinenolinenewliner'   r'   r(   copy_and_fix_python_path  s8     




r   c           
      C   s  d}d}| j d | j d vr*d| j d  }| j d d dkrLd	| j d  }nd
| j d  }| jd | j }t| jd | j }t|d}d}|D ]Z}|}	|dkr| j d dkr|d d dkr|}	n||v r|||}	||	 |d }q|  t	
|d dS )Nzuse lib "$RealBin/lib";r1   PERL_LIB_INSTALL_DIRZPERL_INCzuse lib "%s";PERLr   r   r   r   r   PERL_SPECIFIEDTr   r   r   r   )r   r2   r   r   r   r   rv   r3   r   r   r   r   r'   r'   r(   copy_and_fix_perl_path"  s,    
&

r   c	                 C   s   t |ts| }| |}|s4|}|r4tj|}tj||}	|rn|d }
| jd| t	g d||
d |
}|r|d }
| jd| t
g d||
d |
}|rtj||}| j|	||d dS )	zinstall a filer\   z	python_%s)rU   ZPYTHON_SPECIFIEDr   r   )r?   r   r%   r&   zperl_%s)r   r   r   )r   N)r   r   r   rp   r   r   r   r   rr   r   r   
install_as)r,   destdirfiler   r   python_fixup
perl_fixupdestname	base_namedestZ	inst_filer'   r'   r(   install_file?  s:    



r   c	           
      C   s,   t |D ]}	t| ||	||||||d	 qdS )zinstall a set of files)r   r   r   r   r   r   N)ru   r   )
r,   r   filesr   r   r   r   r   r   fr'   r'   r(   INSTALL_FILESb  s
    r   c              	   C   s   t | jj|dd}|r>g }	|D ]}
|	tj|
| q |	}|rj|dd D ]}
t|
|rN||
 qNt| ||||||d dS )z2install a set of files matching a wildcard patternTr   N)r   r   r   r   )	ru   r   r   r+   r   relpathfnmatchremover   )r,   r   r   r   r   r   ZexcludeZ	trim_pathr   Zfiles2r   r'   r'   r(   INSTALL_WILDCARDm  s    r   r   c              
   C   s   |sg S |  |}tjjr4tjtjj|tj}| j	dkrtj
|sz&td| t| t|| W nB ty } z*tj
|std||f W Y d}~n
d}~0 0 dS )z@Install a directory if it doesn't exist, always set permissions.r   z* create %sz)Cannot create the folder '%s' (error: %s)N)rp   r   optionsr   r   r   r   lstripsepr~   isdirr   r   makedirsr   OSErrorr	   rn   )r,   r   r   r   Zdestpather'   r'   r(   INSTALL_DIR  s    


r   c                 C   s>   |  |}|  |}t|D ]}t| tj|||| qdS )zinstall a set of directoriesN)rp   ru   r   r   r   r   )r,   r   dirsr   r   dr'   r'   r(   INSTALL_DIRS  s    

r   c                 C   sR   d| j _| D ]<}|d }| j|||ddd |r| jd|d  |dd	 qd
S )build and install manual pageszGhttp://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl.xmlr   z:${XSLTPROC} --xinclude -o ${TGT} --nonet ${MAN_XSL} ${SRC})r%   r&   rJ   r?   ${MANDIR}/man%sTr   N)r   ZMAN_XSLsplitrr   r   )r,   r   r   mr%   r'   r'   r(   r     s    r   c              	   C   s   | j  d | j_| j  d | j_| j d | j_d| jj | j_| D ]N}|d }|durj||g}| j	|||dg dd	d
 | j
d|d  |dd qNdS )r   z"/docs-xml/xslt/expand-sambadoc.xslz/docs-xml/xslt/man.xslz/docs-xml/build/catalog.xmlzCfile:///etc/xml/catalog file:///usr/local/share/xml/catalog file://r   Nr   )SAMBA_MAN_XSLSAMBA_EXPAND_XSLSAMBA_CATALOGaX  XML_CATALOG_FILES="${SAMBA_CATALOGS}"
                                    export XML_CATALOG_FILES
                                    ${XSLTPROC} --xinclude --stringparam noreference 0 -o ${TGT}.xml --nonet ${SAMBA_EXPAND_XSL} ${SRC[0].abspath(env)}
                                    ${XSLTPROC} --nonet -o ${TGT} ${SAMBA_MAN_XSL} ${TGT}.xml)r%   r&   rJ   r   r?   r   r   Tr   )r   r   r   r  r  r   r  ZSAMBA_CATALOGSr  rr   r   )r,   r   Zextra_sourcer  r%   r'   r'   r(   SAMBAMANPAGES  s     
r  
apply_linkcshlibc                 C   s^   | j d st| ddrZt| dd sZz$| j d d | j d d W n tyX   Y n0 d S )N	MACBUNDLE
mac_bundleFrb   	LINKFLAGSz-dynamiclibz-single_module)r   getattrr   
ValueError)selfr'   r'   r(   $apply_bundle_remove_dynamiclib_patch  s    r  ))r1   r1   r1   NTNNNNNr1   Nr1   FNFNr1   r6   r1   TTNNNTFFr7   FNNNNFNFFFFT)r1   r1   NNNNNr1   NNFTNr6   NTTNFFNNTNTFF)r1   r1   NNr   Nr1   r1   NTTTNNTFNFFT)r1   r1   r1   NTNNr1   Nr6   NNr1   r1   TTTNTFTNNFFFF)N)r   N)r   N)N)Mr   r   rer#   r   waflibr   r   r   r   r   r   r   r	   waflib.Configurer
   Zwaflib.Logsr   samba_utilsr   nadatask_genZapply_verifr   samba_versionZsamba_autoconfZsamba_patternsZ
samba_pidlZsamba_autoprotoZsamba_pythonZ
samba_perlr_   Zsamba_bundledZsamba_third_partyZsamba_crossrg   Zsamba_conftestsZ	samba_abiZsamba_headersZ
generic_cc
samba_distsamba_wildcardZsymbolsZ	pkgconfigZconfigure_fileZsamba_waf18r   environ
HEXVERSIONerrorexitr)   r0   BuildContextr5   r   r   r   rt   rr   run_oncer   r   r   r   r   ZMODE_644r   r   r   r   r   r   r  afterfeaturer  r'   r'   r'   r(   <module>   s  ((




	                                         
 p                           
~                    
a                           
\
,

 
#




