a
    	$a.$                     @   sn   d dl Z d dlZd dlmZmZ d dlZd dlmZ dddZdd Z	G dd	 d	e
ZdddZdddZdS )    N)UtilsContext)find_gitc                 C   s   t |}|d u rdi fS ||_ttj}d|  |d< | |d< ttj|jd d|d}|	 }|rpt
|dk rxdi fS |d	 |d
 t|d |d d}d|d  }|jrtjd|j dd }|dkrd|d< nd	|d< |d7 }||fS )NzGIT-UNKNOWNz%s/.gitZGIT_DIRZGIT_WORK_TREEz4 show --pretty=format:"%h%n%ct%n%H%n%cd" --stat HEADT)silentenv   r            )GIT_COMMIT_ABBREVZGIT_COMMIT_FULLREVCOMMIT_TIMEZCOMMIT_DATEzGIT-r   z%s diff HEAD | wc -l)r   0ZCOMMIT_IS_CLEAN+)r   GITdictosenvironsamba_utils
get_stringr   Z
cmd_output
splitlineslenintZGIT_LOCAL_CHANGESstrip)pathr   gitr   linesfieldsretclean r   n/home/jack/SDK/ZBT-AX3000-OpenWrt-21.02/build_dir/hostpkg/samba-4.14.12/./buildtools/wafsamba/samba_version.pygit_version_summary   s0    


r!   c                 C   s   d }i }t | d  D ]x}|dkr(q|dr4qzB|d}|d dkrt|d }|d }|dkrl|}W q|||< W q   td|   Y q0 qd	|v rt|d	 |d	< |d u rd
|fS ||fS )Nz/.distversion #=r	   r   SUFFIXz/Failed to parse line %s from .distversion file.r   UNKNOWN)r   readfr   
startswithsplitprintr   )r   suffixr   line
split_linekeyvaluer   r   r    distversion_version_summary+   s0    


r0   c                   @   s   e Zd ZdddZdd ZdS )SambaVersionNTc           	      C   s  d| _ d| _d| _d| _d| _d| _d| _d| _d| _d| _	d| _
d| _d| _| D ]4\}}|dr~t| |dd | qVt| || qV| jdkrd| _	n | jdkrd| _	ntd| j t| j | _ t| j| _t| j| _d	| j | j| jf }| jdur|| j7 }| jdur2t| j| _|d
| j 7 }| jdurXt| j| _|d| j 7 }| jdur~t| j| _|d| j 7 }| jdurt| j| _|d| j 7 }| jdurt| j| _|d| j 7 }| j	rZ|sd}i | _n^tjtj|drt||d\}| _n2tjtj|dr8t|\}| _n
d}i | _|| jd< |d| 7 }ni | _|| _| jdur|d| j 7 }| j| _| jdur|d| j 7 }| j| _|| _| j
durd| j| j
f | _n| j| _dS )zDetermine the version number of samba

See VERSION for the format.  Entries on that file are
also accepted as dictionary entries here
        NTZSAMBA_VERSION_   yesnoFz%Unknown value for IS_GIT_SNAPSHOT: %sz%u.%u.%uztp%uzalpha%uzbeta%uzpre%uzrc%uZDEVELOPERBUILDz.git)r   z.distversionr&   r%   -z%s (%s))MAJORMINORRELEASEREVISION
TP_RELEASEALPHA_RELEASEBETA_RELEASEPRE_RELEASE
RC_RELEASEIS_SNAPSHOTRELEASE_NICKNAMEVENDOR_SUFFIXVENDOR_PATCHitemsr(   setattrZIS_GIT_SNAPSHOT	Exceptionr   
vcs_fieldsr   r   existsjoinr!   r0   OFFICIAL_STRINGSTRINGSTRING_WITH_NICKNAME)	selfversion_dictr   r   
is_installabZSAMBA_VERSION_STRINGr+   r   r   r    __init__M   s    




zSambaVersion.__init__c                 C   s  dd| j   d| j  d| j  }| jd ur:|d| j 7 }| jd urR|d| j 7 }| jd urj|d| j 7 }| jd ur|d| j 7 }| jd ur|d	| j 7 }| jd ur|d
| j 7 }t	| j
 D ]~}|d| 7 }| j
| }t}tjd dk rt}t||r
|d| 7 }n,t|tu r&|d| 7 }ntd||f |d7 }q|d| j d 7 }| jd ur|d| j d 7 }| jd ur|d| j d 7 }| jd ur|d| j d 7 }|d| j d 7 }|d| j d 7 }|S )Nz/* Autogenerated by waf */
z#define SAMBA_VERSION_MAJOR %u
z#define SAMBA_VERSION_MINOR %u
z!#define SAMBA_VERSION_RELEASE %u
z"#define SAMBA_VERSION_REVISION %u
z$#define SAMBA_VERSION_TP_RELEASE %u
z'#define SAMBA_VERSION_ALPHA_RELEASE %u
z&#define SAMBA_VERSION_BETA_RELEASE %u
z%#define SAMBA_VERSION_PRE_RELEASE %u
z$#define SAMBA_VERSION_RC_RELEASE %u
z#define SAMBA_VERSION_%s r   r
   z"%s"z%dzUnknown type for %s: %r
z'#define SAMBA_VERSION_OFFICIAL_STRING "z"
z$#define SAMBA_VERSION_VENDOR_SUFFIX z##define SAMBA_VERSION_VENDOR_PATCH z'#define SAMBA_VERSION_RELEASE_NICKNAME z
#ifdef SAMBA_VERSION_VENDOR_FUNCTION
#  define SAMBA_VERSION_STRING SAMBA_VERSION_VENDOR_FUNCTION
#else /* SAMBA_VERSION_VENDOR_FUNCTION */
#  define SAMBA_VERSION_STRING "z	"
#endif
z3/* Version for mkrelease.sh: 
SAMBA_VERSION_STRING=z
 */
)r6   r7   r8   r9   r:   r;   r<   r=   r>   sortedrF   keysstrsysversion_info
basestring
isinstancetyper   rE   rI   rA   rB   r@   rK   )rL   stringnamer/   Zstring_typesr   r   r    __str__   sZ    







zSambaVersion.__str__)NT)__name__
__module____qualname__rQ   r]   r   r   r   r    r1   K   s   
br1   Tc           	      C   s   t | d}i }|D ]v}| }|dkr(q|dr4qz4|d}|d dkrf|d d}|||d < W q   td|| f   Y q0 qt||||d	S )
z1Parse the version information from a VERSION filerr"   r#   r$   r	   "r   zFailed to parse line %s from %s)r   rN   )openr   r(   r)   r*   r1   )	Zversion_filer   r   rN   frM   r,   r-   r/   r   r   r    samba_version_file   s"    



re   c                 C   s*   | st  } tdd| |d}|jtj_|S )zcload samba versions either from ./VERSION or git
    return a version object for detailed breakdownz	./VERSION.)rN   )r   LOAD_ENVIRONMENTre   rJ   r   g_moduleVERSION)r   rN   versionr   r   r    load_version  s
    
rk   )N)NT)NT)r   rV   waflibr   r   r   	samba_gitr   r!   r0   objectr1   re   rk   r   r   r   r    <module>   s   
%  !
