a
    	$a{%                     @   s
  d dl Z d dlmZmZmZ d dlmZ d dlmZ dd Z	dd Z
d	d
 Zeej_dd Zeej_d$ddZeej_dd Zedd Zedd Zedd Zeddg dddfddZeddg ddddddddfddZdd Zed%d d!Zd"d# Zeej_dS )&    N)BuildOptionsLogs)conf)samba_utilsc                 C   sP   |s|S |r|S | j j}|r.|d| r.|S |rD|d| rD|S d||f S )z8possibly rename a library to include a bundled extensionz%sz%s-%s)envZPRIVATE_EXTENSION
startswithendswith)bldnameZprivate_extensionprivate_library	extension r   n/home/jack/SDK/ZBT-AX3000-OpenWrt-21.02/build_dir/hostpkg/samba-4.14.12/./buildtools/wafsamba/samba_bundled.pyPRIVATE_NAME   s    r   c                 C   sJ   |D ]@}| |kr dS d|  |kr( dS |dkr6 dS |dkr dS q|S )NT!FALLNONEr   )targetlstdefaultlr   r   r   target_in_list    s    r   c                 C   s   t || jjdS )zXreturn True if a library should be builtin
       instead of being built as a shared libF)r   r   ZBUILTIN_LIBRARIESr
   r   r   r   r   BUILTIN_LIBRARY-   s    r   c                 C   s    dt jjv rdS |t jjd< dS )zHset a comma separated default list of builtin libraries for this packageZBUILTIN_LIBRARIES_DEFAULTNr   options__dict__)optbuiltinsr   r   r   BUILTIN_DEFAULT4   s    r     c                 C   s,   dt jjv rdS |t jjd< |t jjd< dS )z'set a default private library extensionPRIVATE_EXTENSION_DEFAULTNZPRIVATE_EXTENSION_EXCEPTIONr   )r   r   Znoextensionr   r   r   r"   <   s    r"   c                 C   sj   t jj}|s|S |dD ]J}|d}t|dkrLtd|  td |d |kr|d   S q|S )z0allow override of mininum system library version,:   z.Bad syntax for --minimum-library-version of %s   r   )	r   r   ZMINIMUM_LIBRARY_VERSIONsplitlenr   errorsysexit)r   libnamer   Zminlistmar   r   r   minimum_library_versionE   s    

r/   c                 C   sH   || j jv rdS || j jv r dS d| | j jv r4dS d| j jv rDdS dS )NFT!%sr   )r   SYSTEM_LIBSBUNDLED_LIBSr   r,   r   r   r   LIB_MAY_BE_BUNDLEDV   s    r4   c                 C   s8   || j jv rdS d| | j jv r$dS d| j jv r4dS dS )NTr0   Fr   )r   r2   r3   r   r   r   LIB_MUST_BE_BUNDLEDb   s    r5   c                 C   s   d| j jv p|| j jv S )Nr   )r   ZPRIVATE_LIBSr3   r   r   r   LIB_MUST_BE_PRIVATEl   s    
r6   0.0.0c              	   C   s   | j |||||||dS )z_check if a library is available as a system library.

    This only tries using pkg-config
    )
minversion
maxversionversion_blacklistonlyifimplied_depspkg)CHECK_BUNDLED_SYSTEM)r   r,   r8   r9   r:   r;   r<   r=   r   r   r   CHECK_BUNDLED_SYSTEM_PKGq   s    r?   Tc                    s  g }|rft |D ]R}d| }|jvrPtd d d||f   td j| s|| qd }|jv rj| S rdj|< dS |r҈	std|f  td dj|< dS  fdd	}t
|}d
 g }|dkr|d|  |dur2|d|  |D ]}|d|  q6|g krhdd| 7  }du r~d|f }|dur|d|f 7 }|dfdd|D 7 }jd| |dr| r|rd dj|< |	r|	 dS durV| rVdj|< |	r@|	 |rRd dS dj|< 	std|f  td dS )zcheck if a library is available as a system library.
    this first tries via pkg-config, then if that fails
    tries by testing for a specified function in the specified lib
    zFOUND_SYSTEMLIB_%sz"ERROR: CHECK_BUNDLED_SYSTEM(%s) - zmissing prerequisite check for zsystem library %s, onlyif=%rr&   FzNERROR: Use of system library %s depends on missing system library/libraries %rc                     s~   rrj dsdS dur>jddd} | s>dS  durzd  }j d|d} | | szdS dS )z(helper function for CHECK_BUNDLED_SYSTEM)libFN)headers
empty_decl
set_targetzCHECK_BUNDLED_SYSTEM_%s)r@   rA   local_includemsgdefineT)CHECK_HEADERSCHECK_FUNCS_INupper
CHECK_CODECONFIG_RESET)okrF   )	checkcodecheckfunctionsr   rA   r,   rE   require_headersr   r   check_functions_headers_code   s$    

z:CHECK_BUNDLED_SYSTEM.<locals>.check_functions_headers_codezChecking for system %sr7   z>=%sNz<=%sz!=%sz (%s) z%s >= %sz	 %s <= %sr!   c                 3   s   | ]}d  |f V  qdS )z	 %s != %sNr   ).0v)r=   r   r   	<genexpr>       z'CHECK_BUNDLED_SYSTEM.<locals>.<genexpr>z"%s" --cflags --libs)packageargsrE   uselib_storeSYSLIBTzGERROR: System library %s of version %s not found, and bundling disabled)r   TO_LISTr   r   r)   r*   r+   appendr5   r4   r/   joinrI   	CHECK_CFGSET_TARGET_TYPESET_SYSLIB_DEPS)r   r,   r8   r9   r:   rN   rA   rM   r;   r<   rO   r=   rC   missingr   ffoundrP   Zmsg_verrS   rX   Zversion_checksr   )rM   rN   r   rA   r,   rE   r=   rO   r   r>      s    





















r>   c                 C   s   t dd | dD S )Nc                 S   s   g | ]}t |qS r   )int)rR   xr   r   r   
<listcomp>   rU   z#tuplize_version.<locals>.<listcomp>.)tupler'   )versionr   r   r   tuplize_version   s    ri   c                 C   s   |  |rdS t| ||}zt|}W n ty<   d}Y n40 z
|j}W n ty^   d}Y n0 t|t|k}|s| |st	d||f  t
d |S )zccheck if a python module is available on the system and
    has the specified minimum version.
    FzFERROR: Python module %s of version %s not found, and bundling disabledr&   )r5   r/   
__import__ImportError__version__AttributeErrorri   r4   r   r)   r*   r+   )r   r,   Z
modulenamer8   r-   rb   rh   r   r   r   CHECK_BUNDLED_SYSTEM_PYTHON   s     




rn   c                 C   s   t || jjdS )zFreturn True if a binary should be built without non-system shared libsF)r   r   NONSHARED_BINARIESr   r   r   r   NONSHARED_BINARY  s    rp   )r!   )r7   )r*   waflibr   r   r   waflib.Configurer   wafsambar   r   r   r   BuildContextr    OptionsContextr"   r/   r4   r5   r6   r?   r>   ri   rn   rp   r   r   r   r   <module>   sF   


	
j