o
    .h0                     @   s  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
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+m,Z, ddl-m.Z. ddl/m0Z0 ddl1m2Z2 ddl3m4Z4 ddl5m6Z6 e7e8Z9e:dej;Z<ee&ge=f Z>ee
e& e
e& f Z?de@de=fddZAde&de=de>de=fddZBde&de=fd d!ZCde&de>de=fd"d#ZDde&dee= fd$d%ZEde&d&ede@fd'd(ZFd)ede=fd*d+ZGde&d,e@ddfd-d.ZHde&d/e@d0e=d1e
e@ d2e
e@ d3e=dee@ fd4d5ZIde&d/e@d1e
e@ d2e
e@ d3e=dee@ fd6d7ZJde&d2e
e@ de=fd8d9ZKd:e	e& d&ed0e=d1e
e@ d2e
e@ de?fd;d<ZLdS )=z;Orchestrator for building wheels from InstallRequirements.
    N)AnyCallable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is_wheel_installed)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%   Z/var/www/supernova/superenvnew/lib/python3.10/site-packages/pip/_internal/wheel_builder.py_contains_egg_info&   s   r'   req
need_wheelcheck_binary_allowedc                 C   s   | j rdS | jr|rtd| j dS |rdS | jsdS | jr#|  S | jr(dS || s5td| j dS t	 sAtd| j dS dS )zBReturn whether an InstallRequirement should be built into a wheel.Fz(Skipping %s, due to already being wheel.TzCSkipping wheel build for %s, due to binaries being disabled for it.zOUsing legacy 'setup.py install' for %s, since package 'wheel' is not installed.)

constraintis_wheelloggerinfoname
source_direditablesupports_pyproject_editable
use_pep517r   )r(   r)   r*   r%   r%   r&   _should_build.   s<   r4   c                 C   s   t | dtdS )NTr)   r*   )r4   _always_true)r(   r%   r%   r&   should_build_for_wheel_commandc   s   r7   c                 C   s   t | d|dS )NFr5   )r4   )r(   r*   r%   r%   r&    should_build_for_install_commandi   s   r8   c                 C   s   | j s| jsdS | jr1| jjr1| j rJ | jsJ t| jj}|s$J || jj| jr/dS dS | js6J | j	 \}}t
|rCd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)r1   r0   linkis_vcsr   get_backend_for_schemeschemeis_immutable_rev_checkouturlsplitextr'   )r(   vcs_backendbaseextr%   r%   r&   _should_cacher   s   


rC   wheel_cachec                 C   s@   t |j}| js
J |rt| r|| j}|S || j}|S )zdReturn the persistent or temporary cache directory where the built
    wheel need to be stored.
    )r"   	cache_dirr9   rC   get_path_for_linkget_ephem_path_for_link)r(   rD   cache_availablerE   r%   r%   r&   _get_cache_dir   s   

rI   _c                 C   s   dS )NTr%   )rJ   r%   r%   r&   r6      s   r6   
wheel_pathc           	      C   s   t | jpd}ttj|}t |j|krtd||jtt	||}t
|j}t|t|jkr=td||j|j}|d u rHtdzt|}W n ty^   d| }t|w |tdkrrt|jtsttd|d S d S )N z7Wheel has unexpected file name: expected {!r}, got {!r}zMissing Metadata-VersionzInvalid Metadata-Version: z1.2z6Metadata 1.2 mandates PEP 440 version, but {!r} is not)r   r/   r   ospathbasenamer   formatr   r   strversionr	   metadata_versionr   r   r
   
isinstance)	r(   rK   canonical_namewdistdist_verstrmetadata_version_valuerS   msgr%   r%   r&   _verify_one   s:   



r[   
output_dirverifybuild_optionsglobal_optionsr1   c           	   
   C   s   |rdnd}zt | W n ty( } ztd|| j| W Y d}~dS d}~ww | j t| ||||}W d   n1 s?w   Y  |ro|rozt| | W |S  tt	fyn } ztd|| j| W Y d}~dS d}~ww |S )zaBuild one wheel.

    :return: The filename of the built wheel, or None if the build failed.
    r1   wheelzBuilding %s for %s failed: %sNzBuilt %s for %s is invalid: %s)
r   OSErrorr-   warningr/   	build_env_build_one_inside_envr[   r   r   )	r(   r\   r]   r^   r_   r1   artifacterK   r%   r%   r&   
_build_one   s8   

rg   c                 C   s  t dd}| jsJ | jrF| jsJ | jsJ |r!td| j |r*td| j |r9t| j| j| j|jd}nt	| j| j| j|jd}nt
| j| j| j|||jd}|d urtj|}tj||}z(t|\}	}
t|| td| j||
|	  td| |W W  d    S  ty } ztd	| j| W Y d }~nd }~ww | jst| | 	 W d    d S 1 sw   Y  d S )
Nr`   )kindz7Ignoring --global-option when building %s using PEP 517z6Ignoring --build-option when building %s using PEP 517)r/   backendmetadata_directorytempd)r/   setup_py_pathr0   r_   r^   rk   z3Created wheel for %s: filename=%s size=%d sha256=%szStored in directory: %sz Building wheel for %s failed: %s)r   r/   r3   rj   pep517_backendr-   rb   r   rN   r   r   rl   unpacked_source_directoryrM   rO   joinr   shutilmover.   	hexdigest	Exception_clean_one_legacy)r(   r\   r^   r_   r1   temp_dirrK   
wheel_name	dest_path
wheel_hashlengthrf   r%   r%   r&   rd      s|   


	4
$rd   c                 C   sV   t | j|d}td| j zt|d| jd W dS  ty*   td| j Y dS w )N)r_   zRunning setup.py clean for %szpython setup.py clean)command_desccwdTz Failed cleaning build dir for %sF)	r   rl   r-   r.   r/   r   r0   rs   error)r(   r_   
clean_argsr%   r%   r&   rt   1  s   rt   requirementsc           
   	   C   s  | sg g fS t dddd | D  t H g g }}| D ]8}|js&J t||}t||||||jo6|j}	|	rRt	t
|	|_|jj|_|jjsLJ || q|| qW d   n1 sbw   Y  |rwt dddd	 |D  |rt 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 )Nr/   .0r(   r%   r%   r&   	<genexpr>T  s    zbuild.<locals>.<genexpr>NzSuccessfully built %s c                 S      g | ]}|j qS r%   r   r   r%   r%   r&   
<listcomp>q      zbuild.<locals>.<listcomp>zFailed to build %sc                 S   r   r%   r   r   r%   r%   r&   r   v  r   )r-   r.   ro   r   r/   rI   rg   r1   permit_editable_wheelsr   r   r9   	file_pathlocal_file_pathr,   append)
r~   rD   r]   r^   r_   build_successesbuild_failuresr(   rE   
wheel_filer%   r%   r&   buildB  sL   




r   )M__doc__loggingos.pathrM   rerp   typingr   r   r   r   r   r   pip._vendor.packaging.utilsr   r	   pip._vendor.packaging.versionr
   r   pip._internal.cacher   pip._internal.exceptionsr   r   pip._internal.metadatar   r   pip._internal.models.linkr   pip._internal.models.wheelr   $pip._internal.operations.build.wheelr   -pip._internal.operations.build.wheel_editabler   +pip._internal.operations.build.wheel_legacyr   pip._internal.req.req_installr   pip._internal.utils.loggingr   pip._internal.utils.miscr   r   r   $pip._internal.utils.setuptools_buildr   pip._internal.utils.subprocessr   pip._internal.utils.temp_dirr   pip._internal.utils.urlsr   pip._internal.vcsr   	getLogger__name__r-   compile
IGNORECASEr#   r"   BinaryAllowedPredicateBuildResultrQ   r'   r4   r7   r8   rC   rI   r6   r[   rg   rd   rt   r   r%   r%   r%   r&   <module>   s     

5

	
 

&
G