a
    6RhV                     @  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mZ ddlmZ ddlmZ ddl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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) dddddZ*e+e,dd Z-dZ.ddddZ/ddddZ0ddd d!d"Z1d-dddddd$d%d&Z2ddd'd(Z3dddd)d*Z4G d+d, d,eZ5dS ).zI
Create a wheel (.whl) distribution.

A wheel is a built archive format.
    )annotationsN)IterableSequence)BytesGenerator)iglob)Literalcast)ZIP_DEFLATED
ZIP_STORED)tagsversion)	WheelFile   )Command__version___shutil)_safe_license_file)
safer_name)SetuptoolsDeprecationWarning   )egg_info)logstr)r   returnc                 C  sD   zt t| W S  tjy>   | dd} tdd|  Y S 0 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$   T/opt/python-3.9.24/usr/lib/python3.9/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_interpreter3   s    r-   c                   C  s   dt jj S )Npy)sysversion_infomajorr$   r$   r$   r%   
python_tag7   s    r2   z
str | None)archive_rootr   c                 C  s^   t  }|dr2| du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_libfiler5   r-   r    )r3   resultr5   r$   r$   r%   r:   ;   s    r:   T)varfallbackexpectedwarnr   c                 C  s:   t | }|du 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)r9   get_config_varwarningsr@   RuntimeWarning)r=   r>   r?   r@   valr$   r$   r%   get_flagO   s    

rG   c                  C  sh  t d} t }| sf|dv rfttdrfd}d}tdttd|dkdrLd	}| t  | | }n| r|dkr| d
rd| 	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^| rD|dkrDd
| 	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gettotalrefcountrI   )r@   dcpythonr   r   r   rJ   Nr   r   r8   Zgraalpy   )r9   rC   r   interpreter_namehasattrr/   rG   interpreter_versionr;   splitjoinr    )ZsoabiimplrO   uabir$   r$   r%   get_abi_tag`   s0    


rZ   c                 C  s   t | ddS )Nr   r8   )r&   r    r#   r$   r$   r%   safer_version   s    r[   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 dfddde	  dfdddgZ
g d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-d.d/Zd#d#d0d1d2Zed3dd4d5Zd#d#dd6d7d8Zd9d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=rO   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=rX   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=zzipfile compression (one of: z, z) [default: 'deflated']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=Nzdirectory where a pre-generated dist-info can be found (e.g. as a result of calling the PEP517 'prepare_metadata_for_build_wheel' method))ra   rc   rd   rf   Noner(   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 )NrL   zipFr]   )	bdist_dirdata_dir	plat_nameplat_tagformat	keep_tempdist_dirdist_info_diregginfo_dirroot_is_pure
skip_buildrd   ownergrouprf   compressionr2   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 u rFtt| j	
d}|  | jd | _t| j| _d}| jdgt||R   | j	 p| j	  | _|   | j	d}d|v rtd |d d  }| d	v rd
| _| jrtjdddd | jd ur| jd d   st!dd S )Nbdistwheelr   z.data)ro   rk   rs   rf   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        )Zdue_datez1Build tag (build-number) must start with a digit.)"ri   get_finalized_command
bdist_baseospathrV   rp   r   egg_info_clsdistributionget_command_objensure_finalizedwheel_dist_namerj   r'   rk   ry   set_undefined_optionsrh   has_ext_moduleshas_c_librariesrr   _validate_py_limited_apiget_option_dictr   r@   striplowerrf   r   emitrw   isdigit
ValueError)r{   r   r   Zneed_optionsr~   rF   r$   r$   r%   finalize_options   s6    

 zbdist_wheel.finalize_optionsc                 C  sH   | j s
d S tt| j s(tdt dtdrDtd| j dd S )Nzpy-limited-api must match ''ZPy_GIL_DISABLEDz`py_limited_api=z` not supported. `Py_LIMITED_API` is currently incompatible with `Py_GIL_DISABLED`.See https://github.com/python/cpython/issues/111506.)rx   r!   matchPY_LIMITED_API_PATTERNr   r9   rC   rz   r$   r$   r%   r     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_namer[   get_versionrw   appendrV   )r{   
componentsr$   r$   r%   r   $  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v rVd  dv rbd   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 }||v s$J d| |S )Nanyr4   )r6   linux_x86_64
linux_i686)r7   linux_aarch64linux_armv7lr   r8   r   r   zpy2.py3noneZcp3abi3c                   s   g | ]}|j |j fqS r$   )interpreterrY   ).0trk   r$   r%   
<listcomp>a  s   z'bdist_wheel.get_tag.<locals>.<listcomp>z'would build wheel with unsupported tag )ry   rk   rr   r;   r:   ri   r-   r   r    rf   r2   r   rR   rT   rx   r   rZ   sys_tags)r{   rW   tagZ	impl_nameZimpl_verabi_tagsupported_tagsr$   r   r%   get_tag/  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rtjtj| jd}| | _| _t|| jrd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"rt#d| j"  t$%| j"| t&'| j( n| )| j(| | *| tj+| j,st-| j, tj| j,|
d }t.|d| / }|0| W d    n1 s<0    Y  t1| jdg 2dt3j4j5 dt3j4j6 |f | j7std| j  | j8st&'| j d S )Nbuild_scriptspythonT	build_extFbuildinstall)reinit_subcommandsinstall_scripts)headersscriptsdatapurelibplatlibinstall_rL   ntz..install_purelibinstall_platlibzinstalling to r   install_egg_info)targetrq   z
.dist-infozreusing z.whlw
dist_filesr\   r   z	removing )9reinitialize_command
executableforceZinplacers   run_commandri   rootcompilewarn_dirZno_epsetattrr   r   rV   rj   namenormpathinstall_libbaseinstall_librr   r   infor   r   rd   _ensure_relativeinstall_baser   r   r   r   r[   r   rp   debugshutilcopytreer   rmtreerq   egg2distwrite_wheelfileexistsro   makedirsr   _zip_compressionZwrite_filesgetattrr   r/   r0   r1   minorrn   dry_run)r{   r   r   r   r   keyZbasedir_observedimpl_tagr   rl   Zarchive_basenamer3   Zdistinfo_dirnamedistinfo_dir
wheel_pathZwfr$   r$   r%   runi  sx    






*zbdist_wheel.runzsetuptools ())wheelfile_base	generatorr   c                 C  s   ddl m} | }d|d< ||d< t| j |d< | jd u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 d    n1 s0    Y  d S )Nr   )Messagez1.0zWheel-Version	GeneratorzRoot-Is-PurelibZBuildr   r   TagWHEELz	creating wb)maxheaderlen)email.messager   r   rr   r   rw   r   rU   rV   r   r   r   r   openr   flatten)r{   r   r   r   msgr   r   rl   rW   rY   platZwheelfile_pathfr$   r$   r%   r     s     

zbdist_wheel.write_wheelfile)r   r   c                 C  s6   t j|\}}|dd t jkr2||dd   }|S )Nr   r   )r   r   
splitdrivesep)r{   r   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t  }| jd}t dkrJttt | jjj}nd|v rd|d d 	 }nd}d|v rt
jdtd	d
 ||d d  |s|st|tsd}|D ]f}t|D ]X}|drtd| d q||vrtj|rtd| d| d || qq|S )N9   r$   metadata*   license_filesr   Zlicense_filezEThe "license_file" option is deprecated. Use "license_files" instead.r   rA   )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   rU   rD   r@   DeprecationWarningadd
isinstancelistr   endswithr   r   r   r   isfiler   )r{   filesr   patternspatternr   r$   r$   r%   license_paths  s>    


zbdist_wheel.license_paths)egginfo_pathdistinfo_pathr   c                 C  sr  ddddd}|| t j|sddl}t jt j|d}||}d	| d
}|r|t j|d }|d| d7 }t|t j|d}	tj	||dd d t j|d}
t
|
dd}|  }W d   n1 s0    Y  |s||
 t j|d}t|	| t j|d}| jD ]>}t|}t j||}t jt j|dd t|| q&|| dS )z:Convert an .egg-info directory into a .dist-info directoryr   rg   )r_   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)r   r   r   islinkisdirr   r   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?)PKG-INFOc                 S  s   h dS )N>   zrequires.txtzSOURCES.txtr  znot-zip-safer$   )xyr$   r$   r%   <lambda>6      z&bdist_wheel.egg2dist.<locals>.<lambda>)ignorezdependency_links.txtzutf-8)encodingMETADATAZlicensesT)exist_ok)r   r   r   globrV   dirnamebasenamer   r   r   r   readr   copyr  r   r   )r{   r  r  r  r  patpossibleerrZaltZpkginfo_pathZdependency_links_pathZdependency_links_fileZdependency_linksZmetadata_pathZlicenses_folder_pathZlicense_pathZ	safe_pathZdist_info_license_pathr$   r$   r%   r     s>    
*
zbdist_wheel.egg2distintc                 C  sT   t | jtr"| j| j v r"| jS | jt| j}|d ur@|S td| jd S )NzUnsupported compression: )r   rv   r  supported_compressionsvaluesgetr   r   )r{   rv   r$   r$   r%   r   Q  s    
zbdist_wheel._zip_compression)__name__
__module____qualname__descriptionr
   r	   r  r:   rV   r2   user_optionsboolean_optionsr|   r   r   propertyr   r   r   r   r   r   r  r   r   r$   r$   r$   r%   r\      sZ   ?/
:_
,>r\   )TT)6__doc__
__future__r   r   r!   r   r+   r/   r9   rD   collections.abcr   r   email.generatorr   r  r   typingr   r   zipfiler	   r
   	packagingr   r   r   Zwheel.wheelfiler   rL   r   r   r   Z_core_metadatar   Z_normalizationr   r   r   r   	distutilsr   r&   r  rU   r   r   r-   r2   r:   rG   rZ   r[   r\   r$   r$   r$   r%   <module>   s@    #