a
    і.^=                     @   s4  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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 dd	lmZ dd
lmZ ddlmZmZ ddlZddlmZmZ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,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)OrderedDict)	Generator)Command)get_python_version)log)iglob)rmtree)warn)ZIP_DEFLATED
ZIP_STORED   )get_abbr_implget_impl_verget_abi_tagget_platform)write_pkg_info)pkginfo_to_metadata)	WheelFile)
pep425tags)__version__zcp3\dc                 C   s   t | ddS N-_)	safe_namereplace)name r   3/usr/lib/python3/dist-packages/wheel/bdist_wheel.py
safer_name&   s    r   c                 C   s   t | ddS r   )safe_versionr   )versionr   r   r   safer_version*   s    r!   c                 C   s*   t t|d  t|tj | | d S )Nr   )printstroschmodstatS_IWRITE)funcpathexcinfor   r   r   remove_readonly.   s    r+   c                   @   s   e Zd ZdZedefdefgZdddded fd	d
dddddddd	d
efddde d  fddgZg dZdd Zdd Zedd Zdd  Zd!d" Zd#e d$ fd%d&Zd'd( Zed)d* Zd+d, ZdS )-bdist_wheelzcreate a wheel distributionZstoreddeflated)z
bdist-dir=bz1temporary directory for creating the distributionz
plat-name=pz;platform name to embed in generated filenames (default: %s)N)	keep-tempkzPkeep the pseudo-installation tree around after creating the distribution archive)z	dist-dir=dz-directory to put final built distributions in)
skip-buildNz2skip rebuilding everything (for testing/debugging))relativeNz7build 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compression=z6zipfile compression (one of: {}) (default: 'deflated')z, zpython-tag=z7Python 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))r0   r3   r4   r7   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zipFr-   pyr   )	bdist_dirdata_dir	plat_nameplat_tagformat	keep_tempdist_diregginfo_dirroot_is_pure
skip_buildr4   ownergroupr7   compressionr   
python_tagbuild_numberpy_limited_apiplat_name_supplied)selfr   r   r   initialize_optionsg   s&    zbdist_wheel.initialize_optionsc                 C   s8  | j d u r&| dj}tj|d| _ | jd | _| jd u| _	z| j
| j | _W n" tyr   td| jY n0 d}| jdgt||R   | j p| j  | _| jrtt| jstdt | jd}d|v rtd |d d	  }| d
v rd| _| jd ur4| jd d	   s4tdd S )NZbdistwheelz.datazUnsupported compression: {})r@   r<   rC   zpy-limited-api must match '%s'r7   z=The [wheel] section is deprecated. Use [bdist_wheel] instead.r   )1trueZyesTz1Build tag (build-number) must start with a digit.)!r:   Zget_finalized_command
bdist_baser$   r)   joinwheel_dist_namer;   r<   rJ   supported_compressionsrF   KeyError
ValueErrorr>   set_undefined_optionsr8   distributionZhas_ext_modulesZhas_c_librariesrB   rI   rematchPY_LIMITED_API_PATTERNget_option_dictloggerr	   striplowerr7   rH   isdigit)rK   rP   Zneed_optionsrM   valr   r   r   finalize_options|   s4    



 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   rW   get_namer!   get_versionrH   rQ   )rK   Z
componentsr   r   r   rR      s    zbdist_wheel.wheel_dist_namec                 C   s8  | j r| j}nF| jrd}n:| jr4| jds4| j}n
t| j}|dv rTtjdkrTd}|dddd}| jr| j	rzd	}n| j
}|d
|f}nt }t }|| }| jr|| dr| j}d}ntt  }|||f}tj| j| j r|nd d}| js||d ksJ d||d f ||v s4J d||S )NanyZmacosx)zlinux-x86_64Zlinux_x86_64iZ
linux_i686r   r   .zpy2.py3ZnoneZcp3Zabi3)Zsupplied_platformr   z%s != %sz)would build wheel with unsupported tag {})rJ   r<   rB   
startswithr   r:   sysmaxsizer   r7   rG   r   r   rI   r#   r   r^   r   Zget_supportedr>   )rK   r<   impltagZ	impl_nameZimpl_verabi_tagZsupported_tagsr   r   r   get_tag   s>    

"zbdist_wheel.get_tagc                 C   sH  |  d}d|_d|_|  d}d|_| js6| d | j ddd}| j|_d|_| j|_d|_	|  d	}d|_
d
D ] }t|d| tj| j| qtd}tjdkrtjtj| jd}| | _| _t|| jrdnd| td| j | d |  \}}}	d| j|||	}
| js&| j}ntj| j| |j}| dd dt| j  t!| j" }tj| j|}| #| j$| | %| tj&| j'st(| j' tj| j'|
d }t)|d| j*}|+| W d    n1 s0    Y  t,| jdg -dt. |f | j/sDtd| j | j0sDt1| jt2d d S )Nbuild_scriptspythonT	build_extFZbuildinstall)Zreinit_subcommandsinstall_scripts)ZheadersZscriptsdataZpurelibZplatlibZinstall_ ntz..Zinstall_purelibZinstall_platlibzinstalling to %sz{}-{}-{}-{}Zinstall_egg_info)targetrA   z{}-{}.dist-infoz.whlwZ
dist_filesr,   zremoving %s)onerror)3Zreinitialize_command
executableZforceZinplacerC   Zrun_commandr:   rootcompileZwarn_dirZno_epsetattrr$   r)   rQ   r;   r   normpathZinstall_libbaseZinstall_librB   r\   inforl   r>   rR   r4   _ensure_relativeZinstall_baserV   r   rW   rb   r!   rc   egg2distrA   write_wheelfileexistsr@   makedirsr   rF   Zwrite_filesgetattrappendr   r?   Zdry_runr   r+   )rK   rm   ro   rp   rq   keyZbasedir_observedimpl_tagrk   r=   Zarchive_basenameZarchive_rootZdistinfo_dirnameZdistinfo_dirZ
wheel_pathZwfr   r   r   run   sv    







*
zbdist_wheel.runzbdist_wheel ()c                 C   s   ddl m} | }d|d< ||d< t| j |d< | jd urH| j|d< |  \}}}|dD ]8}|dD ](}	|dD ]}
d	||	|
f|d
< q|qnq`t	j
|d}td| t|d"}t|dd| W d    n1 s0    Y  d S )Nr   )Messagez1.0zWheel-Versionr   zRoot-Is-PurelibZBuildre   r   ZTagZWHEELzcreating %srv   )Zmaxheaderlen)Zemail.messager   r#   rB   r^   rH   rl   splitrQ   r$   r)   r\   r}   openr   Zflatten)rK   Zwheelfile_base	generatorr   msgr   rk   r=   ri   ZabiZ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   )r$   r)   
splitdrivesep)rK   r)   Zdriver   r   r   r~   =  s    zbdist_wheel._ensure_relativec                 C   s   | j d}t }tdd |ddd  D }d|v rXtdt ||d d  d|vrld|vrld	}|D ]>}t	|D ]0}||vr|t
j|r|td
|| || q|qp|S )Nmetadatac                 S   s   h | ]}|qS r   r   ).0Zoptionr   r   r   	<setcomp>H  s   z,bdist_wheel.license_paths.<locals>.<setcomp>Zlicense_files)rs   rs   r   Zlicense_filezEThe "license_file" option is deprecated. Use "license_files" instead.)zLICEN[CS]E*zCOPYING*zNOTICE*zAUTHORS*z/adding license file "%s" (matched pattern "%s"))rW   r[   setsortedgetr   r	   DeprecationWarningaddr   r$   r)   isfiler\   r}   )rK   r   filesZpatternspatternr)   r   r   r   license_pathsD  s$    zbdist_wheel.license_pathsc                 C   sn  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 
| nt j|d}	t	||	}
tj||d	d
 d t j|d}t|d}|  }W d   n1 s0    Y  |s|| tt j|d|
 | jD ](}t j|}t|t j|| q8|| 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)r$   r)   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?)PKG-INFOc                 S   s   h dS )N>   zSOURCES.txtr   zrequires.txtznot-zip-safer   )xyr   r   r   <lambda>      z&bdist_wheel.egg2dist.<locals>.<lambda>)ignorezdependency_links.txtrZMETADATA)r$   r)   r   globrQ   dirnamebasenamerU   r   r   mkdirr   Zcopytreer   readr]   r   r   copy)rK   Zegginfo_pathZdistinfo_pathr   r   ZpatpossibleerrZaltZpkginfo_pathZpkg_infoZdependency_links_pathZdependency_links_fileZdependency_linksZlicense_pathfilenamer   r   r   r   \  s<    



,
zbdist_wheel.egg2dist)__name__
__module____qualname__Zdescriptionr   r   r
   rS   r   r>   rQ   r   Zuser_optionsZboolean_optionsrL   ra   propertyrR   rl   r   wheel_versionr   r~   r   r   r   r   r   r   r,   4   sV   ($
-R
r,   )/__doc__r$   r   r&   rg   rX   collectionsr   Zemail.generatorr   Zdistutils.corer   Zdistutils.sysconfigr   Z	distutilsr   r\   r   r   r   warningsr	   Zzipfiler
   r   Zpkg_resourcesr   r   r   r   r   Zpkginfor   r   r   Z	wheelfiler   rs   r   r   r   r   rZ   r   r!   r+   r,   r   r   r   r   <module>   s8   