U
    eQ                     @  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   M/var/www/html/apps/cwerp/env/lib/python3.8/site-packages/wheel/bdist_wheel.py	safe_name#   s    r   c                 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
     .r   r   N)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?   s    r-   c                 C  sR   t  }|dr&| dk	r&t| |}n t rF|dkr:d}n|dkrFd}|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   r3   C   s    r3   Tc                 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 incorrect   
stacklevel)r2   get_config_varwarningswarnRuntimeWarning)varfallbackexpectedr<   valr   r   r   get_flagU   s    

rB   c                  C  s  t d} t }| s|dkrttdrd}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rd| 
dd  }n| r|dkr| 	dr| 
dd }n| r*|dkr*d| 
ddd }|dddd}n^| rh|dkrhd| 
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gettotalrefcountrD   )r<   dWITH_PYMALLOC)      mcpythonr   r   r   rE   Nr7   r   r1   ZgraalpyrL   )r2   r:   r   interpreter_namehasattrr+   rB   r,   interpreter_versionr4   splitjoinr#   )ZsoabiimplrJ   rN   uabir   r   r   get_abi_tagd   s>    
rX   c                 C  s   t | ddS Nr   r1   )r   r#   r   r   r   r   
safer_name   s    rZ   c                 C  s   t | ddS rY   )r$   r#   r   r   r   r   safer_version   s    r[   c                 C  s   t | ||d  d S )Nr   )remove_readonly_exc)funcpathexcinfor   r   r   remove_readonly   s    r`   c                 C  s   t |tj | | d S )N)oschmodstatS_IWRITE)r]   r^   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ddddg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)Z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=rJ   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=rV   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)rj   rl   rm   ro   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zipFrg   )	bdist_dirdata_dir	plat_nameplat_tagformat	keep_tempdist_diregginfo_dirroot_is_pure
skip_buildrm   ownergroupro   compressionr-   build_numberpy_limited_apiplat_name_supplied)selfr   r   r   initialize_options   s&    zbdist_wheel.initialize_optionsc                 C  sL  | j d kr&| dj}tj|d| _ | jd}|  | j	d | _
| jd k	| _z| j| j | _W n& tk
r   td| j d Y nX d}| jdt||  | j p| j  | _| jrtt| jstdt | jd}d|kr td	 |d d
  }| dkr d| _| j d k	rH| j d d
 ! sHtdd S )Nbdistwheelegg_infoz.datazUnsupported compression: )rw   rs   rz   zpy-limited-api must match '%s'ro   z=The [wheel] section is deprecated. Use [bdist_wheel] instead.r   )1trueyesTz1Build tag (build-number) must start with a digit.)r   )"rq   get_finalized_command
bdist_basera   r^   rT   distributionget_command_objensure_finalizedwheel_dist_namerr   rs   r   supported_compressionsr}   KeyError
ValueErrorset_undefined_optionsrp   has_ext_moduleshas_c_librariesry   r   r   matchPY_LIMITED_API_PATTERNget_option_dictr   warningstriplowerro   r~   isdigit)r   r   r   Zneed_optionsr   rA   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   )rZ   r   get_namer[   get_versionr~   rT   )r   
componentsr   r   r   r   "  s    zbdist_wheel.wheel_dist_namec                   s"  | j r| j nN| jrd nB| jr4| jds4| j n
t| j t r\ dkrPd  dkr\d   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 }||kstd| |S )Nanyr.   )r/   linux_x86_64
linux_i686)r0   linux_aarch64linux_armv7lr   r1   r   r   zpy2.py3noneZcp3abi3c                   s   g | ]}|j |j fqS r   )interpreterrW   ).0trs   r   r   
<listcomp>_  s    z'bdist_wheel.get_tag.<locals>.<listcomp>z'would build wheel with unsupported tag )r   rs   ry   r4   r3   rq   r)   r   r#   ro   r-   r   rP   rR   r   r   rX   sys_tagsAssertionError)r   rU   tagZ	impl_nameZimpl_verabi_tagsupported_tagsr   r   r   get_tag-  sF    


zbdist_wheel.get_tagc              	   C  sn  |  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 dt| j  t!| j" }tj| j|}| #| j$| | %| tj&| j'st(| j' tj| j'|
d }t)|d| j*}|+| W 5 Q R X t,| jdg -ddjt.j/d d  |f | j0sjtd| j  | j1sjt.j/dk r\t2| jt3d nt2| jt4d d S ) Nbuild_scriptspythonT	build_extFbuildinstall)reinit_subcommandsinstall_scripts)headersscriptsdatapurelibplatlibinstall_rG   ntz..install_purelibinstall_platlibzinstalling to r   install_egg_info)targetrx   z{}-{}.dist-infoz.whlw
dist_filesrf   z{}.{}r7   z	removing )rL      )onerror)onexc)5reinitialize_command
executableforceZinplacerz   run_commandrq   rootcompilewarn_dirZno_epsetattrra   r^   rT   rr   r   normpathinstall_libbaseinstall_libry   r   infor   r   rm   _ensure_relativeinstall_baser   ru   rZ   r   r   r[   r   egg2distrx   write_wheelfileexistsrw   makedirsr   r}   Zwrite_filesgetattrappendr+   r,   rv   dry_runr   r`   r\   )r   r   r   r   r   keyZbasedir_observedimpl_tagr   rt   Zarchive_basenamer5   Zdistinfo_dirnamedistinfo_dir
wheel_pathZwfr   r   r   rung  sx    





 

zbdist_wheel.runzbdist_wheel ()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   TagZWHEELz	creating wb)maxheaderlen)email.messager   r   ry   r   r~   r   rS   rT   ra   r^   r   r   openr   flatten)r   Zwheelfile_base	generatorr   msgr   r   rt   rU   rW   platZwheelfile_pathfr   r   r   r     s     

zbdist_wheel.write_wheelfilec                 C  s6   t j|\}}|dd t jkr2||dd   }|S )Nr   r   )ra   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|krV|d d  }nd}d|krtjdt	d	d
 |
|d d  |s|st|tsd}|D ]f}t|D ]X}|drtd| d q||k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.r7   r8   )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   rS   r;   r<   DeprecationWarningadd
isinstancelistr   endswithr   debugra   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}|rtt 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 directoryc                 S  sJ   t j| r0t j| s0t j| r0t|  nt j| rFt |  dS )z-Appropriately delete directory, file or link.N)ra   r^   r   islinkisdirshutilr   unlink)ri   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   ddddhS )Nr	  zrequires.txtzSOURCES.txtznot-zip-safer   )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)ra   r^   r   globrT   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_fileZdependency_linksZpkg_info_pathZserialization_policyoutZlicense_pathfilenamer   r   r   r     sN    



zbdist_wheel.egg2dist)__name__
__module____qualname__descriptionr	   r   r   r3   ru   rT   r-   user_optionsboolean_optionsr   r   propertyr   r   r   wheel_versionr   r   r  r   r   r   r   r   rf      s\   ;+

:[


,rf   )TT)7__doc__
__future__r   ra   r   r  rc   r'   r+   r2   r;   email.generatorr   r   email.policyr   r  r   r   zipfiler   r	   
setuptoolsr
   rG   r   r(  Zmacosx_libfiler   r   r   utilr   Zvendored.packagingr   r   r    Z	wheelfiler   r   r$   intrS   r   r   r)   r-   r3   rB   rX   rZ   r[   r`   r\   rf   r   r   r   r   <module>   sJ   
(