o
    PtdM                     @  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 '-'.
    [^A-Za-z0-9.]+-)resubname r   9D:\rfid_django\env\lib\site-packages\wheel\bdist_wheel.py	safe_name$   s   r   c                 C  s@   zt t| W S  tjy   | dd} tdd|  Y S w )zB
    Convert an arbitrary string to a standard version string
     .r   r   )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<      r*   c                 C  sH   t  }|dr| durt| |}n|dkrtjdkrd}|ddS )z0Return our platform name 'win32', 'linux_x86_64'macosxNlinux-x86_64z
linux-i686r   _)	sysconfigget_platform
startswithr   r(   maxsizer%   )archive_rootresultr   r   r   r1   @   s   r1   Tc                 C  s6   t | }|du 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   )r0   get_config_varwarningswarnformatRuntimeWarning)varfallbackexpectedr9   valr   r   r   get_flagL   s   
r@   c                  C  s   t d} t }| sO|dv rOttdrOd}d}d}tdttd|dkdr(d	}td
|dk|dko5tjdk dr?tjdk r?d}| t  | | | }|S | r`|dkr`d| 	dd  }|S | r~|dkr~d
| 	ddd }|dddd}|S | r| dddd}|S d}|S )zJReturn the ABI tag based on SOABI (if available) or emulate SOABI (PyPy2).ZSOABI)cppp
maxunicode Py_DEBUGgettotalrefcountrA   )r9   dWITH_PYMALLOC)      mr   r   rB   Nr6   r    r/   )r0   r7   r   interpreter_namehasattrr(   r@   r)   interpreter_versionsplitjoinr%   )soabiimplrG   rK   uabir   r   r   get_abi_tag\   s<   

rU   c                 C     t | ddS Nr   r/   )r   r%   r   r   r   r   
safer_name}   r+   rX   c                 C  rV   rW   )r&   r%   r   r   r   r   safer_version   r+   rY   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   rb   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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=rG   z-directory to put final built distributions in)
skip-buildNz2skip rebuilding everything (for testing/debugging))relativeNz7build the archive using relative paths (default: false))zowner=rS   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))rg   ri   rj   rl   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zipFrd   )	bdist_dirdata_dir	plat_nameplat_tagr:   	keep_tempdist_diregginfo_dirroot_is_pure
skip_buildrj   ownergrouprl   compressionr*   build_numberpy_limited_apiplat_name_supplied)selfr   r   r   initialize_options   s&   
zbdist_wheel.initialize_optionsc                 C  s0  | j d u r| dj}tj|d| _ | jd | _| jd u| _	z	| j
| j | _W n ty7   td| j w d}| jdgt||R   | j pO| j  | _| jrbtt| jsbtdt | jd}d|v rtd |d d	  }| d
v rd| _| jd ur| jd d	  stdd S d S )Nbdistwheelz.datazUnsupported compression: )rs   rp   rv   zpy-limited-api must match '%s'rl   z=The [wheel] section is deprecated. Use [bdist_wheel] instead.r   )1trueyesTz1Build tag (build-number) must start with a digit.) rn   get_finalized_command
bdist_baser[   r`   rP   wheel_dist_namero   rp   r|   supported_compressionsry   KeyError
ValueErrorset_undefined_optionsrm   distributionhas_ext_moduleshas_c_librariesru   r{   r   matchPY_LIMITED_API_PATTERNget_option_dictr   warningstriplowerrl   rz   isdigit)r}   r   Zneed_optionsr   r?   r   r   r   finalize_options   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   )rX   r   get_namerY   get_versionrz   rP   )r}   
componentsr   r   r   r     s   
zbdist_wheel.wheel_dist_namec                   s  | j r| j n#| jrd n| jr| jds| j nt| j  dv r*tjdkr*d   	dd	dd	d	d | jrM| j
rCd
}n| j}|d f}|S t }t }|| }| jri|| dri| j}d}ntt  }|| f} fddt D }||v sJ d| |S )Nanyr,   )r-   linux_x86_64r.   
linux_i686r   r/   r    r   zpy2.py3noneZcp3abi3c                   s   g | ]	}|j |j fqS r   )interpreterrT   ).0trp   r   r   
<listcomp>F  s    z'bdist_wheel.get_tag.<locals>.<listcomp>z'would build wheel with unsupported tag )r|   rp   ru   r2   r1   rn   r(   r3   r   r%   rl   r*   r   rL   rN   r{   r!   rU   sys_tags)r}   rR   tagZ	impl_nameZimpl_verabi_tagZsupported_tagsr   r   r   get_tag  sH   



zbdist_wheel.get_tagc                 C  sj  |  d}d|_d|_|  d}d|_| js| d | j ddd}| j|_d|_| j|_d|_	|  d	}d|_
d
D ]}t|d| tj| j| q:d}tjdkrdtjtj| jd}| | _| _t|| jrkdnd| td| j  | d |  \}}}	| j d| d| d|	 }
| 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 sw   Y  t,| jdg -ddjt.j/d d  |f | j0s1td| j  | j1s3t2| jt3d d S d S d S )Nbuild_scriptspythonT	build_extFbuildinstall)reinit_subcommandsinstall_scripts)headersscriptsdatapurelibplatlibZinstall_rD   ntz..Zinstall_purelibZinstall_platlibzinstalling to r   Zinstall_egg_info)targetrt   z{}-{}.dist-infoz.whlw
dist_filesrc   z{}.{}r6   z	removing )onerror)4reinitialize_command
executableforceinplacerv   run_commandrn   rootcompileZwarn_dirZno_epsetattrr[   r`   rP   ro   r   normpathZinstall_libbaseinstall_libru   r   infor   r   rj   _ensure_relativeinstall_baser   r:   rX   r   r   rY   r   egg2distrt   write_wheelfileexistsrs   makedirsr   ry   Zwrite_filesgetattrappendr(   r)   rr   dry_runr	   rb   )r}   r   r   r   r   keyZbasedir_observedimpl_tagr   rq   Zarchive_basenamer4   Zdistinfo_dirnameZdistinfo_dirZ
wheel_pathZwfr   r   r   runN  sx   






zbdist_wheel.runzbdist_wheel ()c                 C  s  ddl m} | }d|d< ||d< t| j |d< | jd ur$| j|d< |  \}}}|dD ]}|dD ]}	|dD ]}
d	||	|
f|d
< q>q7q0t	j
|d}td|  t }t|dd| t|d}|| dd W d    d S 1 sw   Y  d S )Nr   )Messagez1.0zWheel-Versionr   zRoot-Is-PurelibBuildr    r   TagZWHEELz	creating )maxheaderlenwbs   
   )email.messager   r!   ru   r   rz   r   rO   rP   r[   r`   r   r   r   r   flattenopenwritegetvaluer%   )r}   Zwheelfile_base	generatorr   msgr   r   rq   rR   rT   platZwheelfile_pathbufferfr   r   r   r     s*   

"zbdist_wheel.write_wheelfilec                 C  s6   t j|\}}|dd t jkr||dd   }|S )Nr   r   )r[   r`   
splitdrivesep)r}   r`   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|v r+|d d  }nd}d|v r@tdt	 |
|d d  |sK|sKt|tsKd	}|D ]3}t|D ],}|d
rdtd| d qS||vrtj|rtd| d| d |
| qSqM|S )N9   r   metadata*   license_filesr   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   rO   r8   r9   DeprecationWarningadd
isinstancelistr   endswithr   debugr[   r`   isfiler   )r}   filesr   patternspatternr`   r   r   r   license_paths  s@   


zbdist_wheel.license_pathsc                 C  s  dd }|| t j|s>ddl}t jt j|d}||}d| d}|r:t j|d }|d| d	7 }t|t j|rQ|}	t	||}
t 
| n?t j|d
}	t	||	}
tj||dd d t j|d}t|dd}|  }W d   n1 sw   Y  |s|| t j|d}tdddd}t|ddd}t||d|
 W d   n1 sw   Y  | jD ]}t j|}t|t j|| q|| dS )z:Convert an .egg-info directory into a .dist-info directoryc                 S  sP   t j| rt j| st j| rt|  dS t j| r&t |  dS dS )z-Appropriately delete directory, file or link.N)r[   r`   r   islinkisdirshutilr	   unlink)rf   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?)PKG-INFOc                 S  s   h dS )N>   znot-zip-safezrequires.txtzSOURCES.txtr   r   )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)r[   r`   r   globrP   dirnamebasenamer   r   r   mkdirr   copytreer   readr   r   r   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_linksZpkg_info_pathZserialization_policyoutZlicense_pathfilenamer   r   r   r     sR   



zbdist_wheel.egg2dist)__name__
__module____qualname__descriptionr   r   r
   r   r1   r:   rP   r*   user_optionsboolean_optionsr~   r   propertyr   r   r   wheel_versionr   r   r   r   r   r   r   r   rc      s\    :(

8
X

+rc   )TT)8__doc__
__future__r   r[   r   r   r]   r(   r0   r8   collectionsr   email.generatorr   r   email.policyr   r  r   ior   r	   zipfiler
   r   
setuptoolsr   rD   r   r  Zmacosx_libfiler   r   r   utilr   Zvendored.packagingr   r   r"   Z	wheelfiler   r   r&   intrO   r   r   r*   r1   r@   rU   rX   rY   rb   rc   r   r   r   r   <module>   sJ    
!