3
;p_G                 @   sN  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mZ dd	lmZ dd
lmZm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% ej&Z&ej'Z'dZ(dd Z)dd Z*d$ddZ+dd Z,dd Z-dd Z.d d! Z/G d"d# d#eZ0dS )%zI
Create a wheel (.whl) distribution.

A wheel is a built archive format.
    N)OrderedDict)	Generator)Command)log)iglob)rmtree)get_config_var)ZIP_DEFLATED
ZIP_STORED   )write_pkg_info)calculate_macosx_platform_tag)pkginfo_to_metadata)tags)	WheelFile)__version__zcp3\dc               C   s   dj tjd S )Nzpy{}r   )formatsysversion_info r   r   4/tmp/pip-install-ofl94hr3/wheel/wheel/bdist_wheel.py
python_tag'   s    r   c             C   s@   t jj }|jdr&| dk	r&t| |}|dkr<tjdkr<d}|S )z0Return our platform name 'win32', 'linux_x86_64'macosxNlinux_x86_64i
linux_i686)	distutilsutilget_platform
startswithr   r   maxsize)archive_rootresultr   r   r   r   +   s    

r   Tc             C   s4   t | }|dkr,|r(tjdj| td |S ||kS )zfUse a fallback value for determining SOABI flags if the needed config
    var is unset or unavailable.Nz?Config variable '{0}' is unset, Python ABI tag may be incorrect   )r   warningswarnr   RuntimeWarning)varfallbackexpectedr$   valr   r   r   get_flag7   s    r*   c              C   s  t d} tj }|  r|dkrttdrd}d}d}tdttd|dkdrPd	}td
|dk|dkojtjdk dr~tjdk r~d}tdtjdkd|dkotjdk drtjdk rd}d|tj |||f }nB| r| j	drd| j
dd  }n | r| jddjdd}nd}|S )zXReturn the ABI tag based on SOABI (if available) or emulate SOABI
    (CPython 2, PyPy).SOABIcppp
maxunicode Py_DEBUGgettotalrefcount)r$   dWITH_PYMALLOC      mPy_UNICODE_SIZEi    )r(   r$   uz
%s%s%s%s%szcpython--r   ._N)r,   r-   )r4   r5   )r4   r5   )r4   r4   )r4   r4   )r   r   interpreter_namehasattrr   r*   r   r.   interpreter_versionr   splitreplace)soabiimplr2   r6   r9   abir   r   r   get_abi_tagC   s<    

rE   c             C   s   t | jddS )Nr:   r<   )	safe_namerA   )namer   r   r   
safer_nameg   s    rH   c             C   s   t | jddS )Nr:   r<   )safe_versionrA   )versionr   r   r   safer_versionk   s    rK   c             C   s*   t t|d  tj|tj | | d S )Nr   )printstroschmodstatS_IWRITE)funcpathexcinfor   r   r   remove_readonlyo   s    rU   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@dAdBdCdd
dj	d j
efd!d
d"e  fdDdEgZddddgZd'd( Zd)d* Zed+d, Zd-d. Zd/d0 Zd1e d2 fd3d4Zd5d6 Zed7d8 Zd9d: Zd
S )Fbdist_wheelzcreate a wheel distributionZstoreddeflated
bdist-dir=b1temporary directory for creating the distributionz
plat-name=pz;platform name to embed in generated filenames (default: %s)N	keep-tempkz/keep the pseudo-installation tree around after z!creating the distribution archive	dist-dir=r2   -directory to put final built distributions in
skip-build2skip rebuilding everything (for testing/debugging)relative7build the archive using relative paths (default: false)owner=r9   @Owner name used when creating a tar file [default: current user]group=gAGroup name used when creating a tar file [default: current group]	universal'make a universal wheel (default: false)zcompression=z6zipfile compression (one of: {}) (default: 'deflated')z, zpython-tag=z7Python implementation compatibility tag (default: '%s')build-number=qBuild number for this particular version. As specified in PEP-0427, this must start with a digit. [default: None]py-limited-api=?Python tag (cp32|cp33|cpNN) for abi3 wheel tag (default: false)c             C   sx   d | _ d | _d | _d | _d| _d| _d | _d | _d | _d | _	d| _
d | _d | _d| _d| _t | _d | _d| _d| _d S )NzipFrW   )	bdist_dirdata_dir	plat_nameplat_tagr   	keep_tempdist_diregginfo_dirroot_is_pure
skip_buildrb   ownergroupri   compressionr   build_numberpy_limited_apiplat_name_supplied)selfr   r   r   initialize_options   s&    zbdist_wheel.initialize_optionsc             C   s:  | j d kr&| jdj}tjj|d| _ | jd | _| jd k	| _	y| j
| j | _W n$ tk
rt   tdj| jY nX d}| jdt||  | jj p| jj  | _| jrtjt| j rtdt | jjd}d	|krtjd
 |d	 d j }|j dkrd| _| jd k	r6| jd d j   r6tdd S )Nbdistwheelz.datazUnsupported compression: {}ru   rr   rx   zpy-limited-api must match '%s'ri   z=The [wheel] section is deprecated. Use [bdist_wheel] instead.r   1trueyesTz1Build tag (build-number) must start with a digit.)ru   rr   rx   )r   )r   r   r   )!rp   get_finalized_command
bdist_baserN   rS   joinwheel_dist_namerq   rr   r~   supported_compressionsr{   KeyError
ValueErrorr   set_undefined_optionsro   distributionhas_ext_moduleshas_c_librariesrw   r}   rematchPY_LIMITED_API_PATTERNget_option_dictloggerr$   striplowerri   r|   isdigit)r   r   Zneed_optionsr   r)   r   r   r   finalize_options   s0    



"zbdist_wheel.finalize_optionsc             C   s8   t | jj t| jj f}| jr.|| jf7 }dj|S )z4Return distribution full name with - replaced with _r:   )rH   r   get_namerK   get_versionr|   r   )r   
componentsr   r   r   r      s
    zbdist_wheel.wheel_dist_namec             C   s  | j r| j}nH| jrd}n<| jr6| jjd r6| j}n
t| j}|dkrVtjdkrVd}|j j	ddj	d	d}| jr| j
rd
}n| j}|d|f}nztj }tj }|| }| jr|| jdr| j}d}ntt j }|||f}dd tj D }||kstdj||S )Nanyr   linux-x86_64r   ir   r:   r<   r;   zpy2.py3noneZcp3Zabi3c             S   s   g | ]}|j |j|jfqS r   )ZinterpreterrD   platform).0tr   r   r   
<listcomp>  s   z'bdist_wheel.get_tag.<locals>.<listcomp>z)would build wheel with unsupported tag {})r   r   )r~   rr   rw   r   r   rp   r   r   r   rA   ri   r   r   r=   r?   r}   rM   rE   Zsys_tagsAssertionErrorr   )r   rr   rC   tagZ	impl_nameimpl_verabi_tagsupported_tagsr   r   r   get_tag   s6    

zbdist_wheel.get_tagc             C   sD  | j d}d|_d|_| j d}d|_| js6| jd | j ddd}| j|_d|_| j|_d|_	| j d	}d|_
x(d#D ] }t|d| tjj| j| qvW d}tjdkrtjjtjj| jd}| | _| _t|| jrdnd| tjd| j | jd | j \}}}	dj| j|||	}
| js*| j}ntjj| j| j|j}| jdd$ djt| jj  t!| jj" }tjj| j|}| j#| j$| | j%| tjj&| j'stj(| j' tjj| j'|
d }t)|d| j*}|j+| W d Q R X t,| jdg j-ddjt.j/d d   |f | j0s@tjd!| j | j1s@t2| jt3d" d S )%Nbuild_scriptspythonT	build_extFbuildinstall)reinit_subcommandsinstall_scriptsheadersscriptsdatapurelibplatlibinstall_r/   ntz..install_purelibinstall_platlibzinstalling to %sz{}-{}-{}-{}install_egg_infotargetrv   z{}-{}.dist-infoz.whlw
dist_filesrV   z{}.{}r"   zremoving %s)onerror)r   r   r   r   r   )r   rv   )4reinitialize_command
executableforceZinplacerx   run_commandrp   rootcompilewarn_dirZno_epsetattrrN   rS   r   rq   rG   normpathinstall_libbaseinstall_librw   r   infor   r   r   rb   _ensure_relativeinstall_baser   rH   r   r   rK   r   egg2distrv   write_wheelfileexistsru   makedirsr   r{   Zwrite_filesgetattrappendr   r   rt   dry_runr   rU   )r   r   r   r   r   keyZbasedir_observedimpl_tagr   rs   Zarchive_basenamer    Zdistinfo_dirnamedistinfo_dir
wheel_pathZwfr   r   r   run  sn    







zbdist_wheel.runzbdist_wheel ()c             C   s   ddl m} | }d|d< ||d< t| jj |d< | jd k	rH| j|d< | j \}}}xN|jdD ]@}x:|jdD ],}	x&|jdD ]}
d	j||	|
f|d
< qW qrW qbW t	j
j|d}tjd| t|d}t|ddj| W d Q R X d S )Nr   )Messagez1.0zWheel-Versionr   zRoot-Is-PurelibZBuildr;   r:   ZTagWHEELzcreating %sr   )maxheaderlen)email.messager   rM   rw   r   r|   r   r@   r   rN   rS   r   r   openr   flatten)r   Zwheelfile_base	generatorr   msgr   r   rs   rC   rD   platZwheelfile_pathfr   r   r   r   m  s     

 zbdist_wheel.write_wheelfilec             C   s6   t jj|\}}|dd t jkr2||dd   }|S )Nr   r   )rN   rS   
splitdrivesep)r   rS   driver   r   r   r     s    zbdist_wheel._ensure_relativec             C   s   | j jd}t }tdd |jddd j D }d|krZtjdt |j	|d d  d|krnd|krnd}xb|D ]Z}xTt
|D ]H}|jdrtjd| q||krtjj|rtjd|| |j	| qW qtW |S )Nmetadatac             S   s   h | ]}|qS r   r   )r   optionr   r   r   	<setcomp>  s   z,bdist_wheel.license_paths.<locals>.<setcomp>Zlicense_filesr/   r   Zlicense_filezEThe "license_file" option is deprecated. Use "license_files" instead.LICEN[CS]E*COPYING*NOTICE*AUTHORS*~z4ignoring license file "%s" as it looks like a backupz/adding license file "%s" (matched pattern "%s"))r/   r/   )r   r   r   r   )r   r   setsortedgetr@   r#   r$   DeprecationWarningaddr   endswithr   debugrN   rS   isfiler   )r   r   filespatternspatternrS   r   r   r   license_paths  s&    

zbdist_wheel.license_pathsc             C   s\  dd }|| t jj|sxddl}t jjt jj|d}|j|}d|f }|rpt jj|d }|d|f 7 }t|t jj|r|}	t	||}
t j
| njt jj|d}	t	||	}
tj||d	d
 d t jj|d}t|d}|j j }W dQ R X |s|| tt jj|d|
 x2| jD ](}t jj|}tj|t jj|| q$W || dS )z:Convert an .egg-info directory into a .dist-info directoryc             S   sL   t jj| r2t jj|  r2t jj| r2tj|  nt jj| rHt j|  dS )z-Appropriately delete directory, file or link.N)rN   rS   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METADATA)rN   rS   r   globr   dirnamebasenamer   r   r   mkdirr   copytreer   readr   r   r   copy)r   Zegginfo_pathZdistinfo_pathr   r  patpossibleerrZaltZpkginfo_pathpkg_infoZdependency_links_pathZdependency_links_fileZdependency_linksZlicense_pathfilenamer   r   r   r     s:    



zbdist_wheel.egg2dist)rX   rY   rZ   Pkeep the pseudo-installation tree around after creating the distribution archive)r\   r]   r  )r^   r2   r_   )r`   Nra   )rb   Nrc   )rd   r9   re   )rf   rg   rh   )ri   Nrj   )rk   Nrl   )rm   Nrn   )__name__
__module____qualname__descriptionr   r
   r	   r   r   r   r   r   user_optionsboolean_optionsr   r   propertyr   r   r   wheel_versionr   r   r   r   r   r   r   r   rV   u   sX    
          $	/TrV   )TT)1__doc__r   rN   r   rP   r   r   r#   collectionsr   email.generatorr   distutils.corer   r   r   r  r   r   	sysconfigr   zipfiler	   r
   pkg_resourcesZpkginfor   Zmacosx_libfiler   r   r   Zvendored.packagingr   Z	wheelfiler   r/   r   r  rF   rI   r   r   r   r*   rE   rH   rK   rU   rV   r   r   r   r   <module>   sB   
$