U
    aÊ¹jº[  ã                   @  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
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mZmZmZmZmZ dd	lmZmZ dd
lmZmZ  ddl!m"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. e�r.ddl/m0Z0 dddœdd„Z1e2e' 3d¡d ƒZ4dZ5ddœdd„Z6ddœdd „Z7d!dd"œd#d$„Z8d9dddddd&œd'd(„Z9d!dœd)d*„Z:dddœd+d,„Z;d-dd.d/d0œd1d2„Z<d-dd3d/d4œd5d6„Z=G d7d8„ d8e&ƒZ>dS ):zI
Create a wheel (.whl) distribution.

A wheel is a built archive format.
é    )ÚannotationsN)ÚBytesGeneratorÚ	Generator)ÚEmailPolicy)Úiglob)Úrmtree)ÚTYPE_CHECKINGÚCallableÚIterableÚLiteralÚSequenceÚcast)ÚZIP_DEFLATEDÚ
ZIP_STORED)ÚtagsÚversion)Úpkginfo_to_metadata)Ú	WheelFileé   )ÚCommandÚ__version__)Ú
safer_name)ÚSetuptoolsDeprecationWarningé   )Úegg_info)Úlog)ÚExcInfoÚstr)r   Úreturnc                 C  sF   zt t | ¡ƒW S  tjk
r@   |  dd¡} t dd| ¡ Y S X dS )zB
    Convert an arbitrary string to a standard version string
    ú Ú.z[^A-Za-z0-9.]+ú-N)r   Ú_packaging_versionÚVersionÚInvalidVersionÚreplaceÚreÚsub©r   © r)   ú]/var/www/html/bwave/python/venv/lib/python3.8/site-packages/setuptools/command/bdist_wheel.pyÚsafe_version'   s
    r+   r    zcp3\dÚbool©r   c                   C  s   t  d¡dkS )NÚPé   )ÚstructÚcalcsizer)   r)   r)   r*   Ú_is_32bit_interpreter8   s    r2   c                   C  s   dt jd › �S )NÚpyr   )ÚsysÚversion_infor)   r)   r)   r*   Ú
python_tag<   s    r6   z
str | None)Úarchive_rootr   c                 C  s^   t  ¡ }| d¡r2| dk	r2ddlm} || |ƒ}n tƒ rR|dkrFd}n|dkrRd}| d	d
¡S )z0Return our platform name 'win32', 'linux_x86_64'ÚmacosxNr   )Úcalculate_macosx_platform_tagúlinux-x86_64z
linux-i686úlinux-aarch64zlinux-armv7lr!   Ú_)Ú	sysconfigÚget_platformÚ
startswithZwheel.macosx_libfiler9   r2   r%   )r7   Úresultr9   r)   r)   r*   r>   @   s    r>   T)ÚvarÚfallbackÚexpectedÚwarnr   c                 C  s:   t  | ¡}|dkr2|r.tjd| › d�tdd� |S ||kS )zfUse a fallback value for determining SOABI flags if the needed config
    var is unset or unavailable.NzConfig variable 'z+' is unset, Python ABI tag may be incorrectr   ©Ú
stacklevel)r=   Úget_config_varÚwarningsrD   ÚRuntimeWarning)rA   rB   rC   rD   Úvalr)   r)   r*   Úget_flagT   s    

ýrK   c                  C  sž  t  d¡} t ¡ }| sœ|dkrœttdƒrœd}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 ¡ › |› |› |› �}nþ| rÆ|dkrÆ|  	d¡rÆd|  
d¡d  }nÔ| rþ|dkrþ|  	d¡rþ|  
d¡d }ttdƒrü|d	7 }nœ| �r<|dk�r<d |  
d¡dd… ¡}| dd¡ dd¡}n^| �rz|dk�rzd |  
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ÚgettotalrefcountrM   )rD   ÚdÚWITH_PYMALLOC)é   é   ÚmÚcpythonr!   r   r   rN   Nr   r    r<   ÚgraalpyrU   )r=   rG   r   Úinterpreter_nameÚhasattrr4   rK   r5   Úinterpreter_versionr?   ÚsplitÚjoinr%   )ÚsoabiÚimplrS   rW   ÚuÚabir)   r)   r*   Úget_abi_tage   sB    
ýü

rc   c                 C  s   t | ƒ dd¡S )Nr!   r<   )r+   r%   r(   r)   r)   r*   Úsafer_version�   s    rd   zCallable[..., object]r   ÚNone)ÚfuncÚpathÚexcinfor   c                 C  s   t | ||d ƒ d S )Nr   )Úremove_readonly_exc)rf   rg   rh   r)   r)   r*   Úremove_readonly”   s    rj   ÚBaseException)rf   rg   Úexcr   c                 C  s   t  |tj¡ | |ƒ d S )N)ÚosÚchmodÚstatÚS_IWRITE)rf   rg   rl   r)   r)   r*   ri   œ   s    ri   c                   @  s,  e Zd ZdZeedœZddddedƒ› d�fd	d
dddddddd d 	e¡¡fddde
ƒ › d�fdddgZddddgZddœdd „Zddœd!d"„Zddœd#d$„Zed%dœd&d'„ƒZd(dœd)d*„Zd+d,„ Zd-e› d.�fd%d%dd/œd0d1„Zd%d%d2œd3d4„Zed5dœd6d7„ƒZd%d%dd8œd9d:„Zd;dœd<d=„ZdS )>Úbdist_wheelzcreate a wheel distribution)ZstoredÚdeflated)z
bdist-dir=Úbz1temporary directory for creating the distributionz
plat-name=Úpz8platform name to embed in generated filenames [default: Nú])ú	keep-tempÚkzPkeep the pseudo-installation tree around after creating the distribution archive)z	dist-dir=rS   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=ra   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])Ú	universalNz4*DEPRECATED* make a universal wheel [default: false]zcompression=z6zipfile compression (one of: {}) [default: 'deflated']z, zpython-tag=z3Python implementation compatibility tag [default: 'z'])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dist-info-dir=Nz‰directory where a pre-generated dist-info can be found (e.g. as a result of calling the PEP517 'prepare_metadata_for_build_wheel' method)rv   rx   ry   r{   re   r-   c                 C  s~   d | _ d | _d | _d | _d| _d| _d | _d | _d | _d | _	d| _
d| _d | _d | _d| _d| _tƒ | _d | _d| _d| _d S )NÚzipFrr   )Ú	bdist_dirÚdata_dirÚ	plat_nameÚplat_tagÚformatÚ	keep_tempÚdist_dirÚdist_info_dirÚegginfo_dirÚroot_is_pureÚ
skip_buildry   ÚownerÚgroupr{   Úcompressionr6   Úbuild_numberÚpy_limited_apiÚplat_name_supplied©Úselfr)   r)   r*   Úinitialize_optionsî   s(    zbdist_wheel.initialize_optionsc                 C  s  | j s"|  d¡j}tj |d¡| _ | jd krFtt| j	 
d¡ƒ}| ¡  | jd | _t| jƒ| _d}| jdt||ƒžŽ  | j	 ¡ pˆ| j	 ¡  | _|  ¡  | j	 d¡}d|krÖt d¡ |d d  ¡ }| ¡ d	krÖd
| _| jrìtjdddd� | jd k	�r| jd d…   ¡ �st!dƒ‚d S )NÚbdistÚwheelr   z.data)rƒ   r   r‡   r{   z=The [wheel] section is deprecated. Use [bdist_wheel] instead.r   )Ú1ÚtrueÚyesTz#bdist_wheel.universal is deprecatedaj  
                With Python 2.7 end-of-life, support for building universal wheels
                (i.e., wheels that support both Python 2 and Python 3)
                is being obviated.
                Please discontinue using this option, or if you still need it,
                file an issue with pypa/setuptools describing your use case.
                )ié  rV   é   )Zdue_datez1Build tag (build-number) must start with a digit.)r‘   )"r}   Úget_finalized_commandÚ
bdist_baserm   rg   r^   r„   r   Úegg_info_clsÚdistributionÚget_command_objÚensure_finalizedÚwheel_dist_namer~   r,   r   r�   Úset_undefined_optionsr|   Úhas_ext_modulesÚhas_c_librariesr†   Ú_validate_py_limited_apiÚget_option_dictr   rD   ÚstripÚlowerr{   r   Úemitr‹   ÚisdigitÚ
ValueError)r�   r˜   r   Zneed_optionsr’   rJ   r)   r)   r*   Úfinalize_options  s6    
ÿ
÷ zbdist_wheel.finalize_optionsc                 C  sP   | j s
d S t t| j ¡s(tdt› d�ƒ‚t d¡rLtd| j ›dtj›d�ƒ‚d S )Nzpy-limited-api must match 'ú'ÚPy_GIL_DISABLEDz`py_limited_api=za` not supported. `Py_LIMITED_API` is currently incompatible with `Py_GIL_DISABLED` (sys.abiflags=z7). See https://github.com/python/cpython/issues/111506.)	rŒ   r&   ÚmatchÚPY_LIMITED_API_PATTERNr§   r=   rG   r4   ÚabiflagsrŽ   r)   r)   r*   r¡   3  s    
ÿz$bdist_wheel._validate_py_limited_apir   c                 C  s8   t | j ¡ ƒt| j ¡ ƒg}| jr.| | j¡ d |¡S )z4Return distribution full name with - replaced with _r!   )r   rš   Úget_namerd   Úget_versionr‹   Úappendr^   )r�   Ú
componentsr)   r)   r*   r�   B  s    þzbdist_wheel.wheel_dist_nameztuple[str, str, str]c                   s(  | j r| jr| j‰ nN| jr d‰ nB| jr:| j d¡s:| j‰ n
t| jƒ‰ tƒ rbˆ dkrVd‰ ˆ dkrbd‰ ˆ  ¡  dd¡ d	d¡ d
d¡‰ | jr¦| j	r”d}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Úanyr8   )r:   Úlinux_x86_64Ú
linux_i686)r;   Úlinux_aarch64Zlinux_armv7lr!   r<   r    r   zpy2.py3ÚnoneZcp3Úabi3c                   s   g | ]}|j |jˆ f‘qS r)   )Úinterpreterrb   )Ú.0Út©r   r)   r*   Ú
<listcomp>  s    z'bdist_wheel.get_tag.<locals>.<listcomp>z'would build wheel with unsupported tag )r�   r   r†   r?   r>   r}   r2   r¤   r%   r{   r6   r   rZ   r\   rŒ   r   rc   Úsys_tagsÚAssertionError)r�   r`   ÚtagZ	impl_nameZimpl_verÚabi_tagÚsupported_tagsr)   r»   r*   Úget_tagM  sD    
ÿ

ÿÿzbdist_wheel.get_tagc              	   C  sª  |   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rÈtj tj | jd¡¡}| | _| _t|| jrÖdnd|ƒ t d| j› �¡ |  d¡ |  ¡ \}}}	| j› d|› d|› d|	› �}
| j�s4| j}ntj | j|  |j¡¡}|  dd¡ t| j ¡ ƒ› dt | j !¡ ƒ› d�}tj | j|¡}| j"�rÂt #d| j"› �¡ t$ %| j"|¡ t$ &| j'¡ n|  (| j'|¡ |  )|¡ tj *| j+¡�söt ,| j+¡ tj | j+|
d ¡}t-|d|  .¡ ƒ�}| /|¡ W 5 Q R X t0| jdg ƒ 1ddj2t3j4d d… Ž |f¡ | j5�s¦t d| j› �¡ | j6�s¦t3j4dk �r˜t&| jt7d� nt&| jt8d � d S )!NÚbuild_scriptsÚpythonTÚ	build_extFÚbuildÚinstall)Úreinit_subcommandsÚinstall_scripts)ÚheadersÚscriptsÚdataÚpurelibÚplatlibÚinstall_rP   Úntz..Úinstall_purelibÚinstall_platlibzinstalling to r!   Úinstall_egg_info)Útargetr…   z
.dist-infozreusing z.whlÚwÚ
dist_filesrq   z{}.{}r   z	removing )rU   é   )Úonerror)Úonexc)9Úreinitialize_commandÚ
executableÚforceZinplacer‡   Úrun_commandr}   ÚrootÚcompileÚwarn_dirZno_epÚsetattrrm   rg   r^   r~   ÚnameÚnormpathÚinstall_libbaseÚinstall_libr†   r   ÚinforÂ   r�   ry   Ú_ensure_relativeÚinstall_baserž   r   rš   r®   rd   r¯   r„   ÚdebugÚshutilÚcopytreer   r…   Úegg2distÚwrite_wheelfileÚexistsrƒ   Úmakedirsr   Ú_zip_compressionZwrite_filesÚgetattrr°   r�   r4   r5   r‚   Údry_runrj   ri   )r�   rÃ   rÅ   rÇ   rÉ   ÚkeyZbasedir_observedÚimpl_tagrÀ   r€   Zarchive_basenamer7   Zdistinfo_dirnameÚdistinfo_dirÚ
wheel_pathZwfr)   r)   r*   Úrun‡  sz    




ý
 
ÿ"ÿ
ýzbdist_wheel.runzsetuptools (ú))Úwheelfile_baseÚ	generatorr   c              	   C  sä   ddl m} |ƒ }d|d< ||d< t| jƒ ¡ |d< | jd k	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 5 Q R X d S )Nr   )ÚMessagez1.0zWheel-Versionr   zRoot-Is-PurelibZBuildr    r!   ÚTagÚWHEELz	creating Úwb)Úmaxheaderlen)Úemail.messagerû   r   r†   r¤   r‹   rÂ   r]   r^   rm   rg   r   ræ   Úopenr   Úflatten)r�   rù   rú   rû   Úmsgrô   rÀ   r€   r`   rb   ÚplatZwheelfile_pathÚfr)   r)   r*   rí   è  s     

zbdist_wheel.write_wheelfile)rg   r   c                 C  s6   t j |¡\}}|dd… t jkr2||dd …  }|S )Nr   r   )rm   rg   Ú
splitdriveÚsep)r�   rg   Údriver)   r)   r*   rç      s    zbdist_wheel._ensure_relativezIterable[str]c              	   C  s  t dkr| jjjpdS tƒ }| j d¡}t dkrFttt | jjjƒ}nd|kr`|d d  	¡ }nd}d|krŽt
jdtd	d
� | |d d ¡ |s¤|s¤t|tƒs¤d}|D ]f}t|ƒD ]X}| d¡rÖt d|› d�¡ q´||kr´tj |¡r´t d|› d|› d�¡ | |¡ q´q¨|S )Né9   r)   Úmetadataé*   Úlicense_filesr   Zlicense_filezEThe "license_file" option is deprecated. Use "license_files" instead.r   rE   )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¢   r   r   r   r]   rH   rD   ÚDeprecationWarningÚaddÚ
isinstanceÚlistr   Úendswithr   ré   rm   rg   Úisfileræ   )r�   Úfilesr
  ÚpatternsÚpatternrg   r)   r)   r*   Úlicense_paths  s>    ý

ÿÿzbdist_wheel.license_paths)Úegginfo_pathÚdistinfo_pathr   c              	   C  s–  dddœ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 |¡r¦t	||ƒ}	t  
|¡ nlt j |d¡}
t	||
ƒ}	tj||dd„ d� t j |d¡}t|dd��}| ¡  ¡ }W 5 Q R X |�s||ƒ t j |d¡}tdddd�}t|ddd��}t||d� |	¡ W 5 Q R X | jD ](}t j |¡}t |t j ||¡¡ �q`||ƒ dS )z:Convert an .egg-info directory into a .dist-info directoryr   re   )rt   r   c                 S  sJ   t j | ¡r0t j | ¡s0t j | ¡r0t | ¡ nt j | ¡rFt  | ¡ dS )z-Appropriately delete directory, file or link.N)rm   rg   rî   ÚislinkÚisdirrê   r   Úunlink)rt   r)   r)   r*   Úadios7  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   ddddhS )Nr   z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)rm   rg   rî   Úglobr^   ÚdirnameÚbasenamer§   r  r   Úmkdirrê   rë   r  Úreadr£   r   r   r  r  Úcopy)r�   r  r  r  r+  ÚpatÚpossibleÚerrZaltÚpkg_infoZpkginfo_pathZdependency_links_pathZdependency_links_fileZdependency_linksZpkg_info_pathZserialization_policyÚoutZlicense_pathÚfilenamer)   r)   r*   rì   4  sL    


ýý
zbdist_wheel.egg2distÚintc                 C  sT   t | jtƒr"| j| j ¡ kr"| jS | j t| jƒ¡}|d k	r@|S td| j›�ƒ‚d S )NzUnsupported compression: )r  rŠ   r7  Úsupported_compressionsÚvaluesÚgetr   r§   )r�   rŠ   r)   r)   r*   rð   {  s    
ÿþzbdist_wheel._zip_compression)Ú__name__Ú
__module__Ú__qualname__Údescriptionr   r   r8  r>   r�   r^   r6   Úuser_optionsÚboolean_optionsr�   r¨   r¡   Úpropertyr�   rÂ   r÷   r   rí   rç   r  rì   rð   r)   r)   r)   r*   rq   £   sZ   þýÿýýÈA/
:b
ÿ,Grq   )TT)?Ú__doc__Ú
__future__r   rm   r&   rê   ro   r0   r4   r=   rH   Úemail.generatorr   r   Úemail.policyr   r+  r   r   Útypingr   r	   r
   r   r   r   Úzipfiler   r   Ú	packagingr   r   r"   Zwheel.metadatar   Zwheel.wheelfiler   rP   r   r   Z_normalizationr   r   r   r™   Ú	distutilsr   Z	_typeshedr   r+   r7  r]   r  r¬   r2   r6   r>   rK   rc   rd   rj   ri   rq   r)   r)   r)   r*   Ú<module>   sN       ÿ+