<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
U
    .ep                     @   s0  d Z ddlmZ ddlmZ ddlZddl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G dd deZG dd	 d	eZG d
d deZdd Zdd Zdd Zdd ZdZdd Zdd Zdd Zd(ddZdd ZG dd  d eZG d!d" d"eZd#d$ Zddddd$hZd%d& Ze d'kr,e  dS ))ag  This is invoked in a subprocess to call the build backend hooks.

It expects:
- Command line args: hook_name, control_dir
- Environment variables:
      PEP517_BUILD_BACKEND=entry.point:spec
      PEP517_BACKEND_PATH=paths (separated with os.pathsep)
- control_dir/input.json:
  - {"kwargs": {...}}

Results:
- control_dir/output.json
  - {"return_val": ...}
    )glob)import_moduleN)joinc                   @   s   e Zd ZdZdd ZdS )BackendUnavailablez&Raised if we cannot import the backendc                 C   s
   || _ d S N	tracebackselfr    r   B/usr/lib/python3.8/site-packages/pip/_vendor/pep517/_in_process.py__init__   s    zBackendUnavailable.__init__N__name__
__module____qualname____doc__r   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdd ZdS )BackendInvalidz Raised if the backend is invalidc                 C   s
   || _ d S r   )message)r
   r   r   r   r   r   %   s    zBackendInvalid.__init__Nr   r   r   r   r   r   #   s   r   c                   @   s   e Zd ZdZdS )HookMissingzARaised if a hook is missing and we are not executing the fallbackNr   r   r   r   r   r   r   r   r   )   s   r   c                 C   s<   t jt j| } t jt j|}t j| |g|kS )z5Test if a file is located within the given directory.)ospathnormcaseabspathcommonprefix)filenameZ	directoryr   r   r   contained_in-   s    r   c                     s   t jd} | r*| t j}|tjdd< t jd }|d\}}}zt| W n  t	k
rp   t
t Y nX | rt fdd|D std|r|d	D ]}t | q S )
zFind and load the build backendZPEP517_BACKEND_PATHNr   ZPEP517_BUILD_BACKEND:c                 3   s   | ]}t  j|V  qd S r   )r   __file__).0r   objr   r   	<genexpr>D   s   z!_build_backend.<locals>.<genexpr>z(Backend was not loaded from backend-path.)r   environgetsplitpathsepsysr   	partitionr   ImportErrorr   r   
format_excanyr   getattr)Zbackend_pathZextra_pathitemsZepZmod_path_Zobj_pathZ	path_partr   r!   r   _build_backend4   s&    
r0   c                 C   s6   t  }z
|j}W n tk
r(   g  Y S X || S dS zfInvoke the optional get_requires_for_build_wheel hook

    Returns [] if the hook is not defined.
    N)r0   get_requires_for_build_wheelAttributeErrorconfig_settingsbackendhookr   r   r   r2   P   s    

r2   c                 C   sJ   t  }z
|j}W n* tk
r:   |s*t t|| | Y S X || |S dS )zInvoke optional prepare_metadata_for_build_wheel

    Implements a fallback by building a wheel if the hook isn't defined,
    unless _allow_fallback is False in which case HookMissing is raised.
    N)r0    prepare_metadata_for_build_wheelr3   r   _get_wheel_metadata_from_wheel)metadata_directoryr5   Z_allow_fallbackr6   r7   r   r   r   r8   ^   s    

r8   ZPEP517_ALREADY_BUILT_WHEELc                 C   s@   g }|   D ]}td|}|r|| q|r4|S tddS )z6Identify the .dist-info folder inside a wheel ZipFile.z[^/\\]+-[^/\\]+\.dist-info/z#No .dist-info folder found in wheelN)Znamelistrematchappend	Exception)Zwhl_zipresr   mr   r   r   _dist_info_filest   s    rA   c              	   C   s   ddl m} | ||}ttj|td W 5 Q R X tj||}||}t|}|j	||d W 5 Q R X |d 
dd S )zBuild a wheel and extract the metadata from it.

    Fallback for when the build backend does not
    define the 'get_wheel_metadata' hook.
    r   )ZipFilewb)r   members/)ZzipfilerB   build_wheelopenr   r   r   WHEEL_BUILT_MARKERrA   Z
extractallr'   )r6   r:   r5   rB   Zwhl_basenameZwhl_fileZzipfZ	dist_infor   r   r   r9      s    

r9   c                 C   sl   | sdS t j| }t jt|ts*dS tt j|d}|sLtd dS t	|dkrdtd dS |d S )zHCheck for a wheel already built during the get_wheel_metadata hook.
    Nz*.whlz+Found wheel built marker, but no .whl files   zHFound multiple .whl files; unspecified behaviour. Will call build_wheel.r   )
r   r   dirnameisfilepjoinrH   r   r   printlen)r:   Zmetadata_parentZ	whl_filesr   r   r   _find_already_built_wheel   s    rO   c                 C   s4   t |}|r$t||  tj|S t | ||S )zInvoke the mandatory build_wheel hook.

    If a wheel was already built in the
    prepare_metadata_for_build_wheel fallback, this
    will copy it rather than rebuilding the wheel.
    )rO   shutilZcopy2r   r   basenamer0   rF   )Zwheel_directoryr5   r:   Zprebuilt_whlr   r   r   rF      s    
rF   c                 C   s6   t  }z
|j}W n tk
r(   g  Y S X || S dS r1   )r0   get_requires_for_build_sdistr3   r4   r   r   r   rR      s    

rR   c                   @   s   e Zd ZdZdS )_DummyExceptionz(Nothing should ever raise this exceptionNr   r   r   r   r   rS      s   rS   c                   @   s   e Zd ZdZdd ZdS )GotUnsupportedOperationz9For internal use when backend raises UnsupportedOperationc                 C   s
   || _ d S r   r   r	   r   r   r   r      s    z GotUnsupportedOperation.__init__Nr   r   r   r   r   rT      s   rT   c                 C   sB   t  }z|| |W S  t|dtk
r<   tt Y nX dS )z&Invoke the mandatory build_sdist hook.UnsupportedOperationN)r0   build_sdistr.   rS   rT   r   r,   )Zsdist_directoryr5   r6   r   r   r   rV      s
    rV   c               
   C   sN  t tjdk rtd tjd } tjd }| tkrBtd|   t |  }tt|d}dd d}z|f |d	 |d
< W n t	k
r } zd|d< |j
|d< W 5 d }~X Y n tk
r } zd|d< |j|d< W 5 d }~X Y nR tk
r } zd|d< |j
|d< W 5 d }~X Y n tk
r2   d|d< Y nX tj|t|ddd d S )N   z"Needs args: hook_name, control_dirrI      zUnknown hook: %sz
input.jsonF)unsupported
return_valkwargsrZ   TZ
no_backendr   Zbackend_invalidZbackend_errorrY   Zhook_missingzoutput.json)indent)rN   r)   argvexit
HOOK_NAMESglobalscompatZ	read_jsonrL   r   r   r   r   rT   r   Z
write_json)Z	hook_nameZcontrol_dirr7   Z
hook_inputZjson_outer   r   r   main   s.    




rc   __main__)N)!r   r   	importlibr   r   Zos.pathr   rL   r;   rP   r)   r   ra   r>   r   r   r   r   r0   r2   r8   rH   rA   r9   rO   rF   rR   rS   rT   rV   r_   rc   r   r   r   r   r   <module>   sF   

	
