B
    @)H[ >  ã               @   s  d 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m	Z	 ddl
mZ ddlmZ ddlmZ ddlmZ ddlZdd	lmZmZmZmZ dd
lmZmZ ddlmZ ddlmZ ddlm Z  ddl!mZ ddl!m"Z# ej$Z$ej%Z%dZ&dd„ Z'dd„ Z(G dd„ deƒZ)dS )zI
Create a wheel (.whl) distribution.

A wheel is a built archive format.
é    N)Ú	Generator)ÚCommand)Úget_python_version)Úlog)Úrmtreeé   )Úget_abbr_implÚget_impl_verÚget_abi_tagÚget_platform)ÚnativeÚopen_for_csv)Úarchive_wheelfile)Úwrite_pkg_info)Úpkginfo_to_metadata)Ú
pep425tags)Ú__version__zcp3\dc             C   s   t | ƒ dd¡S )Nú-Ú_)Ú	safe_nameÚreplace)Úname© r   úTC:\Users\HIRONO~1\AppData\Local\Temp\pip-install-qz7kpjmn\wheel\wheel\bdist_wheel.pyÚ
safer_name%   s    r   c             C   s   t | ƒ dd¡S )Nr   r   )Úsafe_versionr   )Úversionr   r   r   Úsafer_version)   s    r   c               @   s¼   e Zd ZdZddddeƒ  fdddd	d
dddddeƒ d  fddgZddddgZdd„ Zdd„ Z	e
dd„ ƒZdd„ Zdd „ Zd!d"„ Zd#e d$ fd%d&„Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ ZdS )/Úbdist_wheelzcreate a wheel distribution)z
bdist-dir=Úbz1temporary directory for creating the distributionz
plat-name=Úpz;platform name to embed in generated filenames (default: %s))z	keep-tempÚkzPkeep the pseudo-installation tree around after creating the distribution archive)z	dist-dir=Údz-directory to put final built distributions in)z
skip-buildNz2skip rebuilding everything (for testing/debugging))ÚrelativeNz6build the archive using relative paths(default: false))zowner=Úuz@Owner name used when creating a tar file [default: current user])zgroup=ÚgzAGroup name used when creating a tar file [default: current group])Ú	universalNz'make a universal wheel (default: false)zpython-tag=Nz7Python implementation compatibility tag (default: py%s)r   )zbuild-number=NzqBuild number for this particular version. As specified in PEP-0427, this must start with a digit. [default: None])zpy-limited-api=Nz?Python tag (cp32|cp33|cpNN) for abi3 wheel tag (default: false)z	keep-tempz
skip-buildr#   r&   c             C   s€   d | _ d | _d | _d | _d| _d| _d | _d | _d | _d | _	d | _
d| _d | _d | _d| _dtƒ d  | _d | _d| _d| _d S )NÚzipFÚpyr   )Ú	bdist_dirÚdata_dirÚ	plat_nameÚplat_tagÚformatÚ	keep_tempÚdist_dirÚdistinfo_dirÚegginfo_dirÚroot_is_pureÚ
skip_buildr#   ÚownerÚgroupr&   r	   Ú
python_tagÚbuild_numberÚpy_limited_apiÚplat_name_supplied)Úselfr   r   r   Úinitialize_optionsW   s&    zbdist_wheel.initialize_optionsc             C   sì   | j d kr&|  d¡j}tj |d¡| _ | jd | _| jd k	| _	d}| j
dt||ƒžŽ  | j ¡ ph| j ¡  | _| jrŽt t| j¡sŽtdt ƒ‚| j d¡}d|krÄ|d d  ¡ }| ¡ dkrÄd	| _| jd k	rè| jd d…  ¡ sètd
ƒ‚d S )NÚbdistÚwheelz.data)r/   r+   r3   zpy-limited-api must match '%s'r&   r   )Ú1ÚtrueÚyesTz1Build tag (build-number) must start with a digit.)r<   )r)   Úget_finalized_commandÚ
bdist_baseÚosÚpathÚjoinÚwheel_dist_namer*   r+   r9   Úset_undefined_optionsr'   ÚdistributionÚhas_ext_modulesÚhas_c_librariesr2   r8   ÚreÚmatchÚPY_LIMITED_API_PATTERNÚ
ValueErrorÚget_option_dictÚstripÚlowerr&   r7   Úisdigit)r:   rB   Zneed_optionsr=   Úvalr   r   r   Úfinalize_optionsl   s&    

zbdist_wheel.finalize_optionsc             C   s8   t | j ¡ ƒt| j ¡ ƒf}| jr.|| jf7 }d |¡S )z4Return distribution full name with - replaced with _r   )r   rH   Úget_namer   Úget_versionr7   rE   )r:   Ú
componentsr   r   r   rF   Š   s
    zbdist_wheel.wheel_dist_namec             C   s  | j r| j}n.| jrd}n"| jp$tƒ }|dkr<tjdkr<d}| dd¡ dd¡}| jrt| jrbd}n| j}|d	|f}n t	ƒ }t
ƒ }|| }| jr¨||  d
¡r¨| j}d}nttƒ ƒ ¡ }|||f}tj| j rÎ|nd d�}| jsü||d ksütd||d f ƒ‚||k�std |¡ƒ‚|S )NÚany)zlinux-x86_64Úlinux_x86_64iÿÿÿÚ
linux_i686r   r   Ú.zpy2.py3ÚnoneZcp3Zabi3)Zsupplied_platformr   z%s != %sz)would build wheel with unsupported tag {})r9   r+   r2   r   ÚsysÚmaxsizer   r&   r6   r   r	   r8   Ú
startswithÚstrr
   rQ   r   Úget_supportedÚAssertionErrorr-   )r:   r+   ÚimplÚtagZ	impl_nameÚimpl_verÚabi_tagZsupported_tagsr   r   r   Úget_tag“   s6    
 zbdist_wheel.get_tagc             C   s$   |   ¡ \}}}d| j|||f }|S )z%Return archive name without extensionz%s-%s-%s-%s)rg   rF   )r:   Úimpl_tagrf   r,   Úarchive_basenamer   r   r   Úget_archive_basename¹   s    z bdist_wheel.get_archive_basenamec       
      C   s  |   d¡}d|_| js |  d¡ | j ddd�}| j|_d|_| j|_d|_|   d¡}d|_x(d	D ] }t	|d
| t
j | j|¡ƒ q`W d}t
jdkr¶t
j t
j | jd¡¡}| | _| _t	|| jrÄdnd|ƒ t d| j¡ |  d¡ |  ¡ }t
j | j|¡}| j�s| j}nt
j | j|  |j¡¡}|  dd¡ t
j | jd| j ¡| _|  | j| j¡ |  | j¡ |   | j| j¡ t
j !| j¡�s�t
 "| j¡ t#||ƒ}	dt
j$k�r¼t% &t
j$d d|	g¡ t'| j(dg ƒ )dt*ƒ |	f¡ | j+�s t d| j¡ | j,�s t-| jƒ d S )NÚbuild_scriptsÚpythonÚbuildÚinstallT)Úreinit_subcommandsFÚinstall_scripts)ÚheadersÚscriptsÚdataÚpurelibÚplatlibÚinstall_Ú Úntz..Úinstall_purelibÚinstall_platlibzinstalling to %sÚinstall_egg_info)Útargetr1   z%s.dist-infoZ
WHEEL_TOOLÚsignÚ
dist_filesr   zremoving %s).Úreinitialize_commandÚ
executabler3   Úrun_commandr)   ÚrootÚcompileÚwarn_dirZno_epÚsetattrrC   rD   rE   r*   r   ÚnormpathÚinstall_libbaseÚinstall_libr2   ÚloggerÚinforj   r/   r#   Ú_ensure_relativeÚinstall_baserG   rF   r0   Úegg2distr1   Úwrite_wheelfileÚwrite_recordÚexistsÚmakedirsr   ÚenvironÚ
subprocessÚcallÚgetattrrH   Úappendr   r.   Údry_runr   )
r:   rk   rn   rp   ÚkeyZbasedir_observedri   Zpseudoinstall_rootZarchive_rootÚ
wheel_namer   r   r   ÚrunÅ   sf    







zbdist_wheel.runzbdist_wheel (ú)c          	   C   sì   ddl m} |ƒ }d|d< ||d< t| jƒ ¡ |d< | jd k	rH| j|d< |  ¡ \}}}xN| d¡D ]@}x:| d¡D ],}	x&| d¡D ]}
d	 ||	|
f¡|d
< q‚W qrW qbW t	j
 |d¡}t d|¡ t|dƒ�}t|dd� |¡ W d Q R X d S )Nr   )ÚMessagez1.0zWheel-Versionr   zRoot-Is-PurelibZBuildr[   r   ZTagÚWHEELzcreating %sÚw)Úmaxheaderlen)Úemail.messagerœ   r`   r2   rQ   r7   rg   ÚsplitrE   rC   rD   r‰   rŠ   Úopenr   Úflatten)r:   Zwheelfile_baseÚ	generatorrœ   Úmsgrh   rf   r,   rc   ÚabiÚplatZwheelfile_pathÚfr   r   r   rŽ     s     

 zbdist_wheel.write_wheelfilec             C   s6   t j |¡\}}|dd… t jkr2||dd …  }|S )Nr   r   )rC   rD   Ú
splitdriveÚsep)r:   rD   Údriver   r   r   r‹   ,  s    zbdist_wheel._ensure_relativec             C   s$   | j  d¡}d|krdS |d d S )zFReturn license filename from a license-file key in setup.cfg, or None.ÚmetadataÚlicense_fileNr   )rH   rO   )r:   r¬   r   r   r   r­   3  s    zbdist_wheel.license_filec          	   C   sP  dd„ }||ƒ t j |¡sxddl}t j t j |¡d¡}| |¡}d|f }|rpt j |d ¡}|d|f 7 }t|ƒ‚t j |¡rž|}	t	||ƒ}
t  
|¡ njt j |d¡}	t	||	ƒ}
tj||d	d
„ d� t j |d¡}t|dƒ�}| ¡  ¡ }W dQ R X |�s||ƒ tt j |d¡|
ƒ |  ¡ }|�rDd}t |t j ||¡¡ ||ƒ dS )z:Convert an .egg-info directory into a .dist-info directoryc             S   sJ   t j | ¡r0t j | ¡s0t j | ¡r0t | ¡ nt j | ¡rFt  | ¡ dS )z-Appropriately delete directory, file or link.N)rC   rD   r�   ÚislinkÚisdirÚshutilr   Úunlink)r    r   r   r   Úadios<  s    $z#bdist_wheel.egg2dist.<locals>.adiosr   Nz
*.egg-infoz)Egg metadata expected at %s but not foundz- (%s found - possible misnamed archive file?)zPKG-INFOc             S   s   ddddhS )NzPKG-INFOzrequires.txtzSOURCES.txtznot-zip-safer   )ÚxÚyr   r   r   Ú<lambda>`  s   z&bdist_wheel.egg2dist.<locals>.<lambda>)Úignorezdependency_links.txtÚrÚMETADATAzLICENSE.txt)rC   rD   r�   ÚglobrE   ÚdirnameÚbasenamerN   Úisfiler   Úmkdirr°   Úcopytreer¢   ÚreadrP   r   r­   Úcopy)r:   Zegginfo_pathZdistinfo_pathr²   r¹   ÚpatÚpossibleÚerrZaltZpkginfo_pathÚpkg_infoZdependency_links_pathZdependency_links_fileÚdependency_linksÚlicenseZlicense_filenamer   r   r   r�   :  s<    



zbdist_wheel.egg2distc                s   ddl m} tj |d¡}tj |ˆ ¡‰‡ fdd„}‡fdd„}t|dƒ�Ì}t |¡}xº|ƒ D ]°}	tj |	ˆ ¡}
||
ƒr‚d	}d	}nDt	|	d
ƒ�}| 
¡ }W d Q R X t |¡ ¡ }dt||ƒƒ }t|ƒ}tj |	ˆ ¡ tjjd¡}t|tƒrþ| t ¡ ¡ d¡}| |||f¡ q^W W d Q R X d S )Nr   )Úurlsafe_b64encodeÚRECORDc              3   sH   xBt  ˆ ¡D ]4\} }}| ¡  x t|ƒD ]}t j | |¡V  q(W qW d S )N)rC   ÚwalkÚsortÚsortedrD   rE   )ÚdirÚdirsÚfilesr¨   )r)   r   r   rÉ   {  s    z&bdist_wheel.write_record.<locals>.walkc                s   | ˆ kS )z!Wheel hashes every possible file.r   )rD   )Úrecord_relpathr   r   Úskip�  s    z&bdist_wheel.write_record.<locals>.skipzw+rw   Úrbzsha256=ú/zutf-8)ÚutilrÇ   rC   rD   rE   Úrelpathr   ÚcsvÚwriterr¢   r¿   ÚhashlibÚsha256Údigestr   Úlenr   rª   Ú
isinstanceÚbytesÚdecoder]   ÚgetfilesystemencodingÚencodeÚwriterow)r:   r)   r0   rÇ   Zrecord_pathrÉ   rÐ   Zrecord_filerÖ   rD   rÔ   ÚhashÚsizer¨   rs   rÙ   r   )r)   rÏ   r   r�   u  s*    

zbdist_wheel.write_record)Ú__name__Ú
__module__Ú__qualname__Údescriptionr   r	   Úuser_optionsÚboolean_optionsr;   rT   ÚpropertyrF   rg   rj   rš   Úwheel_versionrŽ   r‹   r­   r�   r�   r   r   r   r   r   -   s:   	&R;r   )*Ú__doc__rÕ   r×   rC   r“   r°   r]   rK   Úemail.generatorr   Údistutils.corer   Údistutils.sysconfigr   Ú	distutilsr   r‰   r   Úpkg_resourcesr   r   r	   r
   r   rÓ   r   r   Úarchiver   Zpkginfor   r¬   r   rw   r   rê   r   r   rM   r   r   r   r   r   r   r   Ú<module>   s4   