o
    'fQ                     @  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 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 Z-dd Z.dd Z/d-dd Z0d!d" Z1d#d$ Z2d%d& Z3d'd( Z4d)d* Z5G d+d, d,eZ6dS ).zI
Create a wheel (.whl) distribution.

A wheel is a built archive format.
    )annotationsN)BytesGenerator	Generator)EmailPolicy)iglob)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   I/home/ubuntu/flask/venv/lib/python3.10/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   t ddkS )NP   )structcalcsizer   r   r   r   _is_32bit_interpreter;   s   r)   c                   C  s   dt jd  S )Npyr   )sysversion_infor   r   r   r   
python_tag?      r-   c                 C  sR   t  }|dr| durt| |}nt r#|dkrd}n|dkr#d}|ddS )	z0Return our platform name 'win32', 'linux_x86_64'macosxNlinux-x86_64z
linux-i686linux-aarch64zlinux-armv7lr   _)	sysconfigget_platform
startswithr   r)   r#   )archive_rootresultr   r   r   r4   C   s   r4   Tc                 C  s:   t | }|du r|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 incorrect   
stacklevel)r3   get_config_varwarningswarnRuntimeWarning)varfallbackexpectedr=   valr   r   r   get_flagU   s   

rC   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 | re|dkre| 	dred| 
dd  }|S | ry|dkry| 	dry| 
dd }|S | r|dkrd| 
ddd }|dddd}|S | r|dkrd| 
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).SOABI)cppp
maxunicode Py_DEBUGgettotalrefcountrE   )r=   dWITH_PYMALLOC)      mcpythonr   r   r   rF   Nr8   r   r2   graalpyrM   )r3   r;   r   interpreter_namehasattrr+   rC   r,   interpreter_versionr5   splitjoinr#   )soabiimplrK   rO   uabir   r   r   get_abi_tagd   sH   

	r[   c                 C     t | ddS Nr   r2   )r   r#   r   r   r   r   
safer_name   r.   r^   c                 C  r\   r]   )r$   r#   r   r   r   r   safer_version   r.   r_   c                 C  s   t | ||d  d S )Nr   )remove_readonly_exc)funcpathexcinfor   r   r   remove_readonly   s   rd   c                 C  s   t |tj | | d S )N)oschmodstatS_IWRITE)ra   rb   excr   r   r   r`      s   r`   c                   @  s   e Zd ZdZeed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 distribution)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=rK   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=rY   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))ro   rq   rr   rt   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zipFrl   )	bdist_dirdata_dir	plat_nameplat_tagformat	keep_tempdist_diregginfo_dirroot_is_pure
skip_buildrr   ownergrouprt   compressionr-   build_numberpy_limited_apiplat_name_supplied)selfr   r   r   initialize_options   s&   
zbdist_wheel.initialize_optionsc                 C  sF  | j d u r| dj}tj|d| _ | jd}|  | j	d | _
| jd u| _z	| j| j | _W n tyB   td| j d w d}| jdgt||R   | j pZ| j  | _| jrmtt| jsmt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wheelegg_infoz.datazUnsupported compression: )r|   rx   r   zpy-limited-api must match '%s'rt   z=The [wheel] section is deprecated. Use [bdist_wheel] instead.r   )1trueyesTz1Build tag (build-number) must start with a digit.)"rv   get_finalized_command
bdist_basere   rb   rV   distributionget_command_objensure_finalizedwheel_dist_namerw   rx   r   supported_compressionsr   KeyError
ValueErrorset_undefined_optionsru   has_ext_moduleshas_c_librariesr~   r   r   matchPY_LIMITED_API_PATTERNget_option_dictr   warningstriplowerrt   r   isdigit)r   r   r   need_optionsr   rB   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   )r^   r   get_namer_   get_versionr   rV   )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 t r. dv r(d  dv r.d   ddd	dd
d | jrQ| j	rGd}n| j
}|d f}|S t }t }|| }| jrm|| drm| j}d}ntt  }|| f} fddt D }||v sJ d| |S )Nanyr/   )r0   linux_x86_64
linux_i686)r1   linux_aarch64linux_armv7lr   r2   r   r   zpy2.py3nonecp3abi3c                   s   g | ]	}|j |j fqS r   )interpreterrZ   ).0trx   r   r   
<listcomp>_  s    z'bdist_wheel.get_tag.<locals>.<listcomp>z'would build wheel with unsupported tag )r   rx   r~   r5   r4   rv   r)   r   r#   rt   r-   r   rR   rT   r   r   r[   sys_tags)r   rX   tag	impl_nameimpl_verabi_tagsupported_tagsr   r   r   get_tag-  sF   




zbdist_wheel.get_tagc                 C  s  |  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 t| j  dt | j!  d}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sBtd| j  | j1sDt.j/dk r9t2| jt3d d S t2| jt4d d S d S d S ) Nbuild_scriptspythonT	build_extFbuildinstall)reinit_subcommandsinstall_scripts)headersscriptsdatapurelibplatlibinstall_rH   ntz..install_purelibinstall_platlibzinstalling to r   install_egg_info)targetr}   z
.dist-infoz.whlw
dist_filesrj   z{}.{}r8   z	removing )rM      )onerror)onexc)5reinitialize_command
executableforceinplacer   run_commandrv   rootcompilewarn_dirno_epsetattrre   rb   rV   rw   r   normpathinstall_libbaseinstall_libr~   r   infor   r   rr   _ensure_relativeinstall_baser   r^   r   r   r_   r   egg2distr}   write_wheelfileexistsr|   makedirsr   r   write_filesgetattrappendrz   r+   r,   r{   dry_runr   rd   r`   )r   r   r   r   r   keybasedir_observedimpl_tagr   ry   archive_basenamer6   distinfo_dirnamedistinfo_dir
wheel_pathwfr   r   r   rung  s|   






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|d}t|dd| W d    d S 1 svw   Y  d S )Nr   )Messagez1.0zWheel-Versionr   zRoot-Is-PurelibBuildr   r   TagWHEELz	creating wb)maxheaderlen)email.messager   r   r~   r   r   r   rU   rV   re   rb   r   r   openr   flatten)r   wheelfile_base	generatorr   msgr   r   ry   rX   rZ   platwheelfile_path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   )re   rb   
splitdrivesep)r   rb   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 rBtjdt	d	d
 |
|d d  |sM|sMt|tsMd}|D ]3}t|D ],}|drftd| d qU||vrtj|rtd| d| d |
| qUqO|S )N9   r   metadata*   license_filesr   license_filezEThe "license_file" option is deprecated. Use "license_files" instead.r8   r9   )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   rU   r<   r=   DeprecationWarningadd
isinstancelistr   endswithr   debugre   rb   isfiler   )r   filesr  patternspatternrb   r   r   r   license_paths  sB   


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)re   rb   r   islinkisdirshutilr   unlink)rn   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>   SOURCES.txtnot-zip-saferequires.txtr  r   )xyr   r   r   <lambda>7  s    z&bdist_wheel.egg2dist.<locals>.<lambda>)ignorezdependency_links.txtzutf-8)encodingMETADATATF)utf8mangle_from_max_line_lengthr   )policy)re   rb   r   globrV   dirnamebasenamer   r  r   mkdirr  copytreer   readr   r   r   r   r  copy)r   egginfo_pathdistinfo_pathr  r+  patpossibleerraltpkginfo_pathpkg_infodependency_links_pathdependency_links_filedependency_linkspkg_info_pathserialization_policyoutlicense_pathfilenamer   r   r   r     sR   



zbdist_wheel.egg2dist)__name__
__module____qualname__descriptionr	   r   r   r4   rz   rV   r-   user_optionsboolean_optionsr   r   propertyr   r   r   wheel_versionr   r   r  r   r   r   r   r   rj      s^    ;+

:
[

,rj   )TT)7__doc__
__future__r   re   r   r  rg   r'   r+   r3   r<   email.generatorr   r   email.policyr   r+  r   r   zipfiler   r	   
setuptoolsr
   rH   r   rI  macosx_libfiler   r  r   utilr   vendored.packagingr   r   r    	wheelfiler   r   r$   intrU   r  r   r)   r-   r4   rC   r[   r^   r_   rd   r`   rj   r   r   r   r   <module>   sL    
(