o
    OcJ                     @   sr  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&dk rddl'm(Z) n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 Z0dd  Z1d!d" Z2d#d$ Z3G d%d& d&eZ4dS )(zI
Create a wheel (.whl) distribution.

A wheel is a built archive format.
    N)OrderedDict)Command)log)BytesIO)iglob)rmtree)get_config_var)ZIP_DEFLATED
ZIP_STORED   )write_pkg_info)calculate_macosx_platform_tag)pkginfo_to_metadata)tags)	WheelFile)__version__   )	Generator)BytesGeneratorzcp3\dc                   C   s   d tjd S )Nzpy{}r   )formatsysversion_info r   r   3D:\Flask\env\lib\site-packages\wheel\bdist_wheel.py
python_tag+      r   c                 C   s@   t j }|dr| durt| |}|dkrtjdkrd}|S )z0Return our platform name 'win32', 'linux_x86_64'macosxNlinux_x86_64
linux_i686)	distutilsutilget_platform
startswithr   r   maxsize)archive_rootresultr   r   r   r#   /   s   

r#   Tc                 C   s4   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 '{0}' is unset, Python ABI tag may be incorrect   )r   warningswarnr   RuntimeWarning)varfallbackexpectedr*   valr   r   r   get_flag;   s   
r0   c                  C   sN  t d} t }| sd|dv rdttdrdd}d}d}tdttd|dkdr'd	}td
|dk|dko4tjdk dr>tjdk r>d}tdtjdkd|dkoMtjdk drWtjdk rWd}d|t |||f }|S | rv| 	drvd| 
dd  }|S | r| 	drd| 
ddd }|dddd}|S | r| dddd}|S d}|S )zXReturn the ABI tag based on SOABI (if available) or emulate SOABI
    (CPython 2, PyPy).SOABI)cppp
maxunicode Py_DEBUGgettotalrefcountr2   )r*   dWITH_PYMALLOC)r      mPy_UNICODE_SIZEi    )r   r   )r.   r*   uz
%s%s%s%s%szcpython--r   zpypy-Nr(   ._)r   r   interpreter_namehasattrr   r0   r   r4   interpreter_versionr$   splitjoinreplace)Zsoabiimplr8   r;   r>   abir   r   r   get_abi_tagG   sT   	rJ   c                 C      t | ddS Nr?   rA   )	safe_namerG   )namer   r   r   
safer_nameo   r   rO   c                 C   rK   rL   )safe_versionrG   )versionr   r   r   safer_versions   r   rR   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_readonlyw   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  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=r8   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=r>   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))ra   rc   rd   rf   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_tagr   	keep_tempdist_diregginfo_dirroot_is_pure
skip_buildrd   ownergrouprf   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: {})rm   rj   rp   zpy-limited-api must match '%s'rf   z=The [wheel] section is deprecated. Use [bdist_wheel] instead.r   )1trueyesTz1Build tag (build-number) must start with a digit.)!rh   get_finalized_command
bdist_baserU   rZ   rF   wheel_dist_nameri   rj   rv   supported_compressionsrs   KeyError
ValueErrorr   set_undefined_optionsrg   distributionhas_ext_moduleshas_c_librariesro   ru   rematchPY_LIMITED_API_PATTERNget_option_dictloggerr*   striplowerrf   rt   isdigit)rw   r   Zneed_optionsrz   r/   r   r   r   finalize_options   s8   


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?   )rO   r   get_namerR   get_versionrt   rF   )rw   
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 | jrI| j
r?d	}n| j}|d
 f}|S t }t }|| }| jre|| dre| j}d}ntt  }|| f} fddt D }||v sJ d||S )Nanyr   )zlinux-x86_64r   r   r    r?   rA   r@   zpy2.py3noneZcp3abi3c                    s   g | ]	}|j |j fqS r   )interpreterrI   ).0trj   r   r   
<listcomp>  s    z'bdist_wheel.get_tag.<locals>.<listcomp>z)would build wheel with unsupported tag {})rv   rj   ro   r$   r#   rh   r   r%   r   rG   rf   r   r   rB   rD   ru   rT   rJ   sys_tagsr   )rw   rH   tagZ	impl_nameZimpl_verabi_tagZsupported_tagsr   r   r   get_tag   s:   



zbdist_wheel.get_tagc                 C   sX  |  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 |  \}}}	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 sw   Y  t,| jdg -ddjt.j/d d  |f | j0s(td| j | j1s*t2| 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_r5   ntz..Zinstall_purelibZinstall_platlibzinstalling to %sz{}-{}-{}-{}Zinstall_egg_info)targetrn   z{}-{}.dist-infoz.whlw
dist_filesr]   z{}.{}r(   zremoving %s)onerror)4reinitialize_command
executableforceinplacerp   run_commandrh   rootcompileZwarn_dirZno_epsetattrrU   rZ   rF   ri   rN   normpathZinstall_libbaseinstall_libro   r   infor   r   r   rd   _ensure_relativeinstall_baser   rO   r   r   rR   r   egg2distrn   write_wheelfileexistsrm   makedirsr   rs   Zwrite_filesgetattrappendr   r   rl   dry_runr   r\   )rw   r   r   r   r   keyZbasedir_observedimpl_tagr   rk   Zarchive_basenamer&   Zdistinfo_dirnameZdistinfo_dirZ
wheel_pathZwfr   r   r   run"  s   







zbdist_wheel.runzbdist_wheel ()c                 C   s0  ddl m} tjdk rt|ts|d}| }d|d< ||d< t| j |d< | j	d ur3| j	|d	< | 
 \}}}|d
D ]}|d
D ]}	|d
D ]}
d||	|
f|d< qMqFq?tj|d}td| t }t|dd| t|d}|| dd W d    d S 1 sw   Y  d S )Nr   )Messager   zutf-8z1.0zWheel-Versionr   zRoot-Is-PurelibBuildr@   r?   TagZWHEELzcreating %s)maxheaderlenwbs   
   )email.messager   r   r   
isinstancerT   encodero   r   rt   r   rE   rF   rU   rZ   r   r   r   r   flattenopenwritegetvaluerG   )rw   Zwheelfile_base	generatorr   msgr   r   rk   rH   rI   platZwheelfile_pathbufferfr   r   r   r   v  s.   


"zbdist_wheel.write_wheelfilec                 C   s6   t j|\}}|dd t jkr||dd   }|S )Nr   r   )rU   rZ   
splitdrivesep)rw   rZ   driver   r   r   r     s   zbdist_wheel._ensure_relativec                 C   s   | j d}t }tdd |ddd  D }d|v r-tdt |	|d d  d|vr7d|vr7d	}|D ]+}t
|D ]$}|d
rMtd| q?||vrctj|rctd|| |	| q?q9|S )Nmetadatac                 S   s   h | ]}|qS r   r   )r   optionr   r   r   	<setcomp>  s    z,bdist_wheel.license_paths.<locals>.<setcomp>license_files)r5   r5   r   license_filezEThe "license_file" option is deprecated. Use "license_files" instead.)zLICEN[CS]E*zCOPYING*zNOTICE*zAUTHORS*~z4ignoring license file "%s" as it looks like a backupz/adding license file "%s" (matched pattern "%s"))r   r   setsortedgetrE   r)   r*   DeprecationWarningaddr   endswithr   debugrU   rZ   isfiler   )rw   r   filespatternspatternrZ   r   r   r   license_paths  s.   

	zbdist_wheel.license_pathsc                 C   sh  dd }|| t j|s<ddl}t jt j|d}||}d|f }|r8t j|d }|d|f 7 }t|t j|rO|}	t	||}
t 
| n>t j|d}	t	||	}
tj||d	d
 d t j|d}t|d}|  }W d   n1 sw   Y  |s|| tt j|d|
 | 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)rU   rZ   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requires.txtr   zSOURCES.txtznot-zip-safer   )xyr   r   r   <lambda>  s    z&bdist_wheel.egg2dist.<locals>.<lambda>)ignorezdependency_links.txtrMETADATA)rU   rZ   r   globrF   dirnamebasenamer   r   r   mkdirr   copytreer   readr   r   r   copy)rw   Zegginfo_pathZdistinfo_pathr   r   patpossibleerrZaltZpkginfo_pathpkg_infoZdependency_links_pathZdependency_links_filedependency_linksZlicense_pathfilenamer   r   r   r     s>   




zbdist_wheel.egg2dist)__name__
__module____qualname__descriptionr   r
   r	   r   r#   r   rF   r   user_optionsboolean_optionsrx   r   propertyr   r   r   wheel_versionr   r   r   r   r   r   r   r   r]   }   sV    ($
0T
r]   )TT)5__doc__r!   rU   r   rW   r   r   r)   collectionsr   distutils.corer   r   r   ior   r   r   r   	sysconfigr   zipfiler	   r
   pkg_resourcesZpkginfor   Zmacosx_libfiler   r   r   Zvendored.packagingr   Z	wheelfiler   r5   r   r  r   email.generatorr   r   rM   rP   r   r   r#   r0   rJ   rO   rR   r\   r]   r   r   r   r   <module>   sJ    

(