B
    dM                 @  s  d Z ddlm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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% ddl$m&Z' ddl(m)Z) dd Z*dd Z+e,ej-dd Z.dZ/dd Z0dd Z1d+dd Z2d!d" Z3d#d$ Z4d%d& Z5d'd( Z6G d)d* d*eZ7dS ),zI
Create a wheel (.whl) distribution.

A wheel is a built archive format.
    )annotationsN)OrderedDict)BytesGenerator	Generator)EmailPolicy)iglob)BytesIO)rmtree)ZIP_DEFLATED
ZIP_STORED)Command   )__version__)calculate_macosx_platform_tag)pkginfo_to_metadata)log)tags)version)	WheelFilec             C  s   t dd| S )zConvert an arbitrary string to a standard distribution name
    Any runs of non-alphanumeric/. characters are replaced with a single '-'.
    z[^A-Za-z0-9.]+-)resub)name r   C/var/www/html/venv/lib/python3.7/site-packages/wheel/bdist_wheel.py	safe_name$   s    r   c             C  s@   yt t| S  tjk
r:   | dd} tdd| S X dS )zB
    Convert an arbitrary string to a standard version string
     .z[^A-Za-z0-9.]+r   N)str_packaging_versionVersionInvalidVersionreplacer   r   )r   r   r   r   safe_version+   s
    r#   r   zcp3\dc               C  s   dt jd  S )Npyr   )sysversion_infor   r   r   r   
python_tag<   s    r'   c             C  sH   t  }|dr&| dk	r&t| |}n|dkr<tjdkr<d}|ddS )z0Return our platform name 'win32', 'linux_x86_64'macosxNzlinux-x86_64iz
linux-i686r   _)	sysconfigget_platform
startswithr   r%   maxsizer"   )archive_rootresultr   r   r   r+   @   s    r+   Tc             C  s6   t | }|dkr.|r*td| 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 '{}' is unset, Python ABI tag may be incorrect   )r*   get_config_varwarningswarnformatRuntimeWarning)varfallbackexpectedr3   valr   r   r   get_flagL   s    
r:   c              C  s  t d} t }| s|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  | | | }nz| r|dkrd| 	dd  }nZ| r|dkrd
| 	ddd }|dddd}n | r| dddd}nd}|S )zJReturn the ABI tag based on SOABI (if available) or emulate SOABI (PyPy2).SOABI)cppp
maxunicode Py_DEBUGgettotalrefcountr<   )r3   dWITH_PYMALLOC)      mr   r   r=   Nr0   r   r)   )r*   r1   r   interpreter_namehasattrr%   r:   r&   interpreter_versionsplitjoinr"   )ZsoabiimplrB   rF   uabir   r   r   get_abi_tag\   s0    

rO   c             C  s   t | ddS )Nr   r)   )r   r"   )r   r   r   r   
safer_name}   s    rP   c             C  s   t | ddS )Nr   r)   )r#   r"   )r   r   r   r   safer_version   s    rQ   c             C  s*   t t|d  t|tj | | d S )Nr   )printr   oschmodstatS_IWRITE)funcpathexcinfor   r   r   remove_readonly   s    rZ   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  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%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)z	keep-tempkzPkeep the pseudo-installation tree around after creating the distribution archive)z	dist-dir=rB   z-directory to put final built distributions in)z
skip-buildNz2skip rebuilding everything (for testing/debugging))relativeNz7build the archive using relative paths (default: false))zowner=rM   z@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: '%s'))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`   rb   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zipFr\   )	bdist_dirdata_dir	plat_nameplat_tagr4   	keep_tempdist_diregginfo_dirroot_is_pure
skip_buildr`   ownergrouprb   compressionr'   build_numberpy_limited_apiplat_name_supplied)selfr   r   r   initialize_options   s&    zbdist_wheel.initialize_optionsc             C  s6  | j d kr&| dj}tj|d| _ | jd | _| jd k	| _	y| j
| j | _W n$ tk
rt   td| j Y nX d}| jdt||  | j p| j  | _| jrtt| jstdt | jd}d|kr
td |d d	  }| d
kr
d| _| jd k	r2| jd d	  s2tdd S )Nbdistwheelz.datazUnsupported compression: )ri   rf   rl   zpy-limited-api must match '%s'rb   z=The [wheel] section is deprecated. Use [bdist_wheel] instead.r   )1trueyesTz1Build tag (build-number) must start with a digit.)ru   ) rd   get_finalized_command
bdist_baserS   rX   rK   wheel_dist_namere   rf   rr   supported_compressionsro   KeyError
ValueErrorset_undefined_optionsrc   distributionhas_ext_moduleshas_c_librariesrk   rq   r   matchPY_LIMITED_API_PATTERNget_option_dictr   warningstriplowerrb   rp   isdigit)rs   r{   Zneed_optionsrv   r9   r   r   r   finalize_options   s0    



 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   )rP   r   get_namerQ   get_versionrp   rK   )rs   
componentsr   r   r   r|     s
    zbdist_wheel.wheel_dist_namec               s  | j r| j nF| jrd n:| jr4| jds4| j n
t| j  dkrTtjdkrTd   	dd	dd	d	d | jr| j
rd
}n| j}|d f}n~t }t }|| }| jr|| dr| j}d}ntt  }|| f} fddt D }||kstd| |S )Nanyr(   )zlinux-x86_64linux_x86_64i
linux_i686r   r)   r   r   zpy2.py3noneZcp3abi3c               s   g | ]}|j |j fqS r   )interpreterrN   ).0t)rf   r   r   
<listcomp>G  s    z'bdist_wheel.get_tag.<locals>.<listcomp>z'would build wheel with unsupported tag )rr   rf   rk   r,   r+   rd   r%   r-   r   r"   rb   r'   r   rG   rI   rq   r   rO   sys_tagsAssertionError)rs   rL   tagZ	impl_nameZimpl_verabi_tagsupported_tagsr   )rf   r   get_tag  s8    

 
zbdist_wheel.get_tagc          	   C  sV  |  d}d|_d|_|  d}d|_| js6| d | j ddd}| j|_d|_| j|_d|_	|  d	}d|_
x(d
D ] }t|d| tj| j| qvW d}tjdkrtjtj| jd}| | _| _t|| jrdnd| td| j  | d |  \}}}	| j d| d| d|	 }
| js8| 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 Q R X t,| jdg -ddjt.j/d d  |f | j0sRtd| j  | j1sRt2| 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 r   install_egg_info)targetrj   z{}-{}.dist-infoz.whlw
dist_filesr[   z{}.{}r0   z	removing )onerror)4reinitialize_command
executableforceZinplacerl   run_commandrd   rootcompilewarn_dirZno_epsetattrrS   rX   rK   re   r   normpathinstall_libbaseinstall_librk   r   infor   r|   r`   _ensure_relativeinstall_baser   r4   rP   r   r   rQ   r   egg2distrj   write_wheelfileexistsri   makedirsr   ro   Zwrite_filesgetattrappendr%   r&   rh   dry_runr	   rZ   )rs   r   r   r   r   keyZbasedir_observedimpl_tagr   rg   Zarchive_basenamer.   Zdistinfo_dirnamedistinfo_dir
wheel_pathZwfr   r   r   runN  sh    




 


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
< qW qrW qbW t	j
|d}td|  t }t|dd| t|d}|| dd W d Q R X d S )Nr   )Messagez1.0zWheel-Versionr   zRoot-Is-PurelibZBuildr   r   TagZWHEELz	creating )maxheaderlenwbs   
   )email.messager   r   rk   r   rp   r   rJ   rK   rS   rX   r   r   r   r   flattenopenwritegetvaluer"   )rs   Zwheelfile_base	generatorr   msgr   r   rg   rL   rN   platZwheelfile_pathbuffer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   )rS   rX   
splitdrivesep)rs   rX   driver   r   r   r     s    zbdist_wheel._ensure_relativec          	   C  s  t dkr| jjjpdS t }| jd}t dkr<| jjj}nd|krV|d d  }nd}d|krtdt	 |
|d d  |s|st|tsd	}xr|D ]j}xdt|D ]X}|d
rtd| d q||krtj|rtd| d| d |
| qW qW |S )N9   r   metadata*   license_filesr   Zlicense_filezEThe "license_file" option is deprecated. Use "license_files" instead.)zLICEN[CS]E*zCOPYING*zNOTICE*zAUTHORS*~zignoring license file "z" as it looks like a backupzadding license file "z" (matched pattern "z"))setuptools_major_versionr   r   r   setr   rJ   r2   r3   DeprecationWarningadd
isinstancelistr   endswithr   debugrS   rX   isfiler   )rs   filesr   patternspatternrX   r   r   r   license_paths  s6    

zbdist_wheel.license_pathsc          	   C  s  dd }|| t j|s|ddl}t jt j|d}||}d| d}|rtt j|d }|d| d	7 }t|t j|r|}	t	||}
t 
| nlt j|d
}	t	||	}
tj||dd d t j|d}t|dd}|  }W dQ R X |s|| t j|d}tdddd}t|ddd}t||d|
 W dQ R X x2| jD ](}t j|}t|t j|| q^W || 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)rS   rX   r   islinkisdirshutilr	   unlink)r^   r   r   r   adios  s    $z#bdist_wheel.egg2dist.<locals>.adiosr   Nz
*.egg-infozEgg metadata expected at z but not foundz (z) 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.txtzutf-8)encodingMETADATATF)utf8mangle_from_max_line_lengthr   )policy)rS   rX   r   globrK   dirnamebasenamer   r   r   mkdirr   copytreer   readr   r   r   r   r   copy)rs   Zegginfo_pathZdistinfo_pathr   r  patpossibleerrZaltZpkginfo_pathpkg_infoZdependency_links_pathZdependency_links_fileZdependency_linksZpkg_info_pathZserialization_policyoutZlicense_pathfilenamer   r   r   r     sJ    


	zbdist_wheel.egg2dist)__name__
__module____qualname__descriptionr   r   r
   r}   r+   r4   rK   r'   user_optionsboolean_optionsrt   r   propertyr|   r   r   wheel_versionr   r   r   r   r   r   r   r   r[      sF   
(8X,r[   )TT)8__doc__
__future__r   rS   r   r   rU   r%   r*   r2   collectionsr   email.generatorr   r   email.policyr   r  r   ior   r	   zipfiler
   r   
setuptoolsr   r?   r   r  Zmacosx_libfiler   r   r   utilr   Zvendored.packagingr   r   r   Z	wheelfiler   r   r#   intrJ   r   r   r'   r+   r:   rO   rP   rQ   rZ   r[   r   r   r   r   <module>   sH   
!