a
    $lJh+                     @   sD  d Z ddlZddlZddlZddlZddl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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  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*m+Z+ ddl,m-Z- ddl.m/Z/ ddl0m1Z1 ddl2m3Z3 e4e5Z6e7dej8Z9e
ee$ ee$ f Z:e;e<dddZ=e$e<dddZ>e$e<dddZ?e$e	e< ddd Z@e$ee;d!d"d#ZAe$e;dd$d%d&ZBe$e;e<ee; ee; e<e	e; d'd(d)ZCe$e;ee; ee; e<e	e; d*d+d,ZDe$ee; e<d-d.d/ZEee$ ee<ee; ee; e:d0d1d2ZFdS )3z:Orchestrator for building wheels from InstallRequirements.    N)IterableListOptionalTuple)canonicalize_namecanonicalize_version)InvalidVersionVersion)
WheelCache)InvalidWheelFilenameUnsupportedWheel)FilesystemWheelget_wheel_distribution)Link)Wheel)build_wheel_pep517)build_wheel_editable)build_wheel_legacy)InstallRequirement)
indent_log)
ensure_dir	hash_file)make_setuptools_clean_args)call_subprocess)TempDirectory)path_to_url)vcsz([a-z0-9_.]+)-([a-z0-9_.!+-]+))sreturnc                 C   s   t t| S )zjDetermine whether the string looks like an egg_info.

    :param s: The string to parse. E.g. foo-2.1
    )bool_egg_info_research)r    r"   M/var/www/shaz/venv/lib/python3.9/site-packages/pip/_internal/wheel_builder.py_contains_egg_info$   s    r$   )reqr   c                 C   s.   | j r
J | jrdS | jsJ | jr*| jS dS )zBReturn whether an InstallRequirement should be built into a wheel.FT)
constraintis_wheel
source_direditableZsupports_pyproject_editabler%   r"   r"   r#   _should_build,   s    

r+   c                 C   s   t | S N)r+   r*   r"   r"   r#    should_build_for_install_command>   s    r-   c                 C   s   | j s| jsdS | jrb| jjrb| j r(J | js2J t| jj}|sHJ || jj| jr^dS dS | jslJ | j	 \}}t
|rdS dS )z
    Return whether a built InstallRequirement can be stored in the persistent
    wheel cache, assuming the wheel cache is available, and _should_build()
    has determined a wheel needs to be built.
    FT)r)   r(   linkis_vcsr   get_backend_for_schemeschemeis_immutable_rev_checkouturlsplitextr$   )r%   vcs_backendbaseextr"   r"   r#   _should_cacheD   s    


r8   )r%   wheel_cacher   c                 C   s>   t |j}| jsJ |r.t| r.|| j}n|| j}|S )zdReturn the persistent or temporary cache directory where the built
    wheel need to be stored.
    )r   	cache_dirr.   r8   get_path_for_linkget_ephem_path_for_link)r%   r9   cache_availabler:   r"   r"   r#   _get_cache_dird   s    

r>   )r%   
wheel_pathr   c           	      C   s   t | jp
d}ttj|}t |j|krBtd|d|jtt||}t	|j
}t|t|j
krtd|d|j
|j}|d u rtdzt|}W n$ ty   d| }t|Y n0 |tdkrt|j
tstd|dd S )	N z)Wheel has unexpected file name: expected z, got zMissing Metadata-VersionzInvalid Metadata-Version: z1.2z+Metadata 1.2 mandates PEP 440 version, but z is not)r   namer   ospathbasenamer   r   r   strversionr   metadata_versionr   r	   r   
isinstance)	r%   r?   canonical_namewdistZdist_verstrZmetadata_version_valuerG   msgr"   r"   r#   _verify_onet   s8    


rM   )r%   
output_dirverifybuild_optionsglobal_optionsr)   r   c           	   
   C   s   |rdnd}zt | W n8 tyP } z td|| j| W Y d}~dS d}~0 0 | j  t| ||||}W d   n1 s~0    Y  |r|rzt| | W n< tt	fy } z td|| j| W Y d}~dS d}~0 0 |S )zaBuild one wheel.

    :return: The filename of the built wheel, or None if the build failed.
    r)   wheelzBuilding %s for %s failed: %sNzBuilt %s for %s is invalid: %s)
r   OSErrorloggerwarningrA   	build_env_build_one_inside_envrM   r   r   )	r%   rN   rO   rP   rQ   r)   Zartifacter?   r"   r"   r#   
_build_one   s,    
"rY   )r%   rN   rP   rQ   r)   r   c                 C   s  t ddl}| jsJ | jr| js(J | js2J |rDtd| j |rVtd| j |rtt| j| j| j|jd}qt	| j| j| j|jd}nt
| j| j| j|||jd}|d urVtj|}tj||}zPt|\}	}
t|| td| j||
|	  td| |W W  d    S  tyT } ztd	| j| W Y d }~n
d }~0 0 | jsht| | W d    d S 1 s0    Y  d S )
NrR   )kindz7Ignoring --global-option when building %s using PEP 517z6Ignoring --build-option when building %s using PEP 517)rA   backendmetadata_directorytempd)rA   setup_py_pathr(   rQ   rP   r]   z3Created wheel for %s: filename=%s size=%d sha256=%szStored in directory: %sz Building wheel for %s failed: %s)r   rA   
use_pep517r\   pep517_backendrT   rU   r   rC   r   r   r^   unpacked_source_directoryrB   rD   joinr   shutilmoveinfo	hexdigest	Exception_clean_one_legacy)r%   rN   rP   rQ   r)   temp_dirr?   
wheel_name	dest_path
wheel_hashlengthrX   r"   r"   r#   rW      st    


	

rW   )r%   rQ   r   c                 C   sZ   t | j|d}td| j zt|d| jd W dS  tyT   td| j Y dS 0 d S )N)rQ   zRunning setup.py clean for %szpython setup.py clean)command_desccwdTz Failed cleaning build dir for %sF)	r   r^   rT   re   rA   r   r(   rg   error)r%   rQ   
clean_argsr"   r"   r#   rh      s    rh   )requirementsr9   rO   rP   rQ   r   c           
   	   C   s2  | sg g fS t dddd | D  t  g g  }}| D ]}|jsLJ t||}t||||||jol|j}	|	r|j	dur|
||j	 tt|	|_|jj|_|jjsJ || q>|| q>W d   n1 s0    Y  |rt dddd	 |D  |r*t d
ddd	 |D  ||fS )zBuild wheels.

    :return: The list of InstallRequirement that succeeded to build and
        the list of InstallRequirement that failed to build.
    z*Building wheels for collected packages: %sz, c                 s   s   | ]}|j V  qd S r,   rA   .0r%   r"   r"   r#   	<genexpr>!      zbuild.<locals>.<genexpr>NzSuccessfully built %s c                 S   s   g | ]
}|j qS r"   rs   rt   r"   r"   r#   
<listcomp>D  rw   zbuild.<locals>.<listcomp>zFailed to build %sc                 S   s   g | ]
}|j qS r"   rs   rt   r"   r"   r#   ry   I  rw   )rT   re   rb   r   rA   r>   rY   r)   Zpermit_editable_wheelsZdownload_infoZrecord_download_originr   r   r.   	file_pathlocal_file_pathr'   append)
rr   r9   rO   rP   rQ   build_successesbuild_failuresr%   r:   
wheel_filer"   r"   r#   build  sL    





*r   )G__doc__loggingos.pathrB   rerc   typingr   r   r   r   pip._vendor.packaging.utilsr   r   Zpip._vendor.packaging.versionr   r	   pip._internal.cacher
   pip._internal.exceptionsr   r   Zpip._internal.metadatar   r   pip._internal.models.linkr   pip._internal.models.wheelr   $pip._internal.operations.build.wheelr   Z-pip._internal.operations.build.wheel_editabler   +pip._internal.operations.build.wheel_legacyr   Zpip._internal.req.req_installr   pip._internal.utils.loggingr   pip._internal.utils.miscr   r   $pip._internal.utils.setuptools_buildr   pip._internal.utils.subprocessr   pip._internal.utils.temp_dirr   pip._internal.utils.urlsr   pip._internal.vcsr   	getLogger__name__rT   compile
IGNORECASEr    ZBuildResultrE   r   r$   r+   r-   r8   r>   rM   rY   rW   rh   r   r"   r"   r"   r#   <module>   s   
	!'G