a
    6RhK                     @  s  U 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ZddlZddl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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e$fddddddddfddddddddfddddddddfddd d!d"d#d$dffZ%ej&j'd%e%d&d' e%D d(d)d* Z(ej)dd+d,Z*d-d. Z+d/d0 Z,d1d2 Z-d3d4 Z.G d5d6 d6Z/e0d7d8d9d:iie0d8gd;e,d<g d=d9gd>id?e0d@e0dAdBdCe0dDdEedFie0dGdEgfgdHe,d<g d=dEgdIid?e0dJdKedLie0e/dMdJdKgdNgdOe,dPdQdRg d=igid?e0dSdTedUie0dTgdVe,d<dTdRg d=igid?e0dWedXedYdZe0d[d\gd]e,d<dRd^d_d`dadbd[d\gigiid?e0dcdde,d<dRg deiiedfdge0dhdiej1djedkdle0dmdnej1dodpe0dqdrdsdtiedudve0dwdsdxej1dyiedzd{e0d|d}dsd~ieddve0dd8dd9d:iiie0d8gdgde,d<ddRg did8d9dd9gigigid?e0ddd9diie0dgdgde,d<ddRg didd9gigid?e0dd8d:dEedidie0d8gddgfgde,d<g d=d9dGdEgigd>id?fZ2de3d< ej&j'de2dd' e2D d(dd Z4dd Z5dd Z6dd Z7dd Z8dS )zwheel tests    )annotationsN)Any)path	parse_tag)canonicalize_name)PY_MAJORDistributionPathMetadata)Wheel   )tempdir)DALS)get_config_var)get_platformzinvalid.whlz&simplewheel-2.0-1-py2.py3-none-any.whlZsimplewheelz2.01zpy2.py3noneany)project_nameversionbuild
py_versionabiplatformz$simple.dist-0.1-py2.py3-none-any.whlzsimple.distz0.1z example_pkg_a-1-py3-none-any.whlZexample_pkg_apy3z9PyQt5-5.9-5.9.1-cp35.cp36.cp37-abi3-manylinux1_x86_64.whlZPyQt5z5.9z5.9.1zcp35.cp36.cp37abi3Zmanylinux1_x86_64filenameinfoc                 C  s   g | ]}|d  qS )r    .0tr   r   Q/opt/python-3.9.24/usr/lib/python3.9/site-packages/setuptools/tests/test_wheel.py
<listcomp>Q       r$   )Zidsc                   sj   t |r@t| t|  W d    n1 s20    Y  d S t|   fdd| D |ksfJ d S )Nc                   s   i | ]}|t  |qS r   )getattr)r!   kwr   r#   
<dictcomp>Y   r%   z#test_wheel_info.<locals>.<dictcomp>)inspectisclasspytestraisesr   keysr   r   r(   r#   test_wheel_infoP   s    
&r0   c                 k  s   dt d| di}| r$||  t P}t|| tjtj	dddf|d t

tj|ddd	 V  W d    n1 s0    Y  d S )
Nsetup.pyz
            # -*- coding: utf-8 -*-
            from setuptools import setup
            import setuptools
            setup(**%r)
            utf-8-qbdist_wheelcwddist*.whlr   )r   encodeupdater   r   r   
subprocess
check_callsys
executableglobosjoin)extra_file_defskwargs	file_defs
source_dirr   r   r#   build_wheel\   s$    

rF   c              
   C  sH   t  }t| D ]2\}}}|D ]"}|tjtj|| | qq|S N)setr@   walkaddr   rA   relpath)rootcontentsdirpathdirnames	filenamesr   r   r   r#   tree_setu   s
    "rQ   c                   sr   t  }|  D ]^\ }t|tr(t|}|D ]>}t|trV| fddt|D O }q,|tj | q,q|S )z8Flatten nested dicts and lists into a full list of pathsc                   s   h | ]}t j |qS r   )r@   r   rA   )r!   valnoder   r#   	<setcomp>   r%   zflatten_tree.<locals>.<setcomp>)	rH   items
isinstancedictflatten_treerJ   r@   r   rA   )treeoutputrM   elemr   rS   r#   rY   }   s    

rY   c                 C  s   dd | D S )Nc                 S  s*   h | ]"}|j tt td p tddqS )
EXT_SUFFIXSO)r   r   Z	shlib_ext)formatr   r   r   )r!   xr   r   r#   rU      s   z&format_install_tree.<locals>.<setcomp>r   )rZ   r   r   r#   format_install_tree   s    ra   c                 C  s   t | }tj|| }|| |d urRt|}t|}	||	sRJ ||	 t	|tj|d}
t
j||
d}|j|ksJ |j|ksJ |d u r|drJ n||d ksJ d S )NEGG-INFO)metadatarequires.txt)r   r@   r   rA   egg_nameZinstall_as_eggra   rQ   issubsetr
   r	   from_filenamer   r   has_metadataget_metadatalstrip)r   install_dirZinstall_tree_includesr   r   requires_txtr)   Zegg_pathinstall_treeexprc   r7   r   r   r#   _check_wheel_install   s    
ro   c                   @  s"   e Zd Zdd ZddddZdS )Recordc                 K  s   || _ || _d S rG   Z_id_fields)selfidrC   r   r   r#   __init__   s    zRecord.__init__str)returnc                 C  s   | j  d| jdS )Nz(**)rq   )rs   r   r   r#   __repr__   s    zRecord.__repr__N)__name__
__module____qualname__ru   ry   r   r   r   r#   rp      s   rp   basicfoo__init__.py )packagesfoo-1.0-py{py_version}.egg)PKG-INFORECORDWHEELtop_level.txt)rb   r~   rt   rD   setup_kwargsrm   r2   u   Description accentuée)description)rt   r   datazdata.txtz.
                Some data...
                data_dir)
data_files)rb   r   	extensionzextension.can  
                #include "Python.h"

                #if PY_MAJOR_VERSION >= 3

                static struct PyModuleDef moduledef = {
                        PyModuleDef_HEAD_INIT,
                        "extension",
                        NULL,
                        0,
                        NULL,
                        NULL,
                        NULL,
                        NULL,
                        NULL
                };

                #define INITERROR return NULL

                PyMODINIT_FUNC PyInit_extension(void)

                #else

                #define INITERROR return

                void initextension(void)

                #endif
                {
                #if PY_MAJOR_VERSION >= 3
                    PyObject *module = PyModule_Create(&moduledef);
                #else
                    PyObject *module = Py_InitModule("extension", NULL);
                #endif
                    if (module == NULL)
                        INITERROR;
                #if PY_MAJOR_VERSION >= 3
                    return module;
                #endif
                }
                zsetuptools.Extension)namesources)ext_modulesz%foo-1.0-py{py_version}-{platform}.eggzextension{shlib_ext}rb   headerzheader.hz
                )headersscriptX
                #/usr/bin/python
                print('hello world!')
                N
                #/bin/sh
                echo 'hello world!'
                	script.py	script.shr   r   scriptsr   r   r   r   r   Z	requires1zfoobar==2.0)r   r   r   rd   r   z%
            foobar==2.0
            )rt   install_requiresrm   rl   Z	requires2z
        bar
        foo<=2.0; z in sys_platform
        z2
            bar
            foo<=2.0
            )rt   r   rl   Z	requires3z
        bar; z != sys_platform
        )rt   r   Z	requires4z
        foo
        extrazfoobar>3zG
            foo

            [extra]
            foobar>3
            )rt   r   extras_requirerl   Z	requires5zfoobar; z != sys_platformz!
            [extra]
            )rt   r   rl   Zrequires_ensure_orderz9
        foo
        bar
        baz
        qux
        za
            foobar>3
            barbaz>4
            bazqux>5
            quxzap>6
            z
            foo
            bar
            baz
            qux

            [extra]
            foobar>3
            barbaz>4
            bazqux>5
            quxzap>6
            Znamespace_packagebarzfoo.bar)namespace_packagesr   z foo-1.0-py{py_version}-nspkg.pth)r   r   r   znamespace_packages.txtr   Zempty_namespace_packageZfoobarz7__import__('pkg_resources').declare_namespace(__name__)Zdata_in_packagez>
                        Some data...
                        )r   r   zfoo/data_dirzfoo/data_dir/data.txt)r   r   ztuple[dict[str, Any], ...]WHEEL_INSTALL_TESTSparamsc                 C  s   g | ]}|d  qS )rt   r   )r!   r   r   r   r#   r$   *  r%   c              	   C  s   |  dd}|  dd}|  dg }|  di }|  dd }|  d}|  d	i }|  d
i }tf |||||d|H}	t "}
t|	|
|||| W d    n1 s0    Y  W d    n1 s0    Y  d S )Nr   r~   r   1.0r   r   rl   rm   rD   r   r   r   r   r   rB   )getrF   r   ro   )r   r   r   r   r   rl   rm   rD   r   r   rk   r   r   r#   test_wheel_install'  s2    
	r   c               	   C  s   d} d}t | |dh}t B}|| t| }t|| t||d t| |d  W d    n1 sd0    Y  W d    n1 s0    Y  d S )NZFoo_Barr   )r   r   )rF   r   replacer   shutilmovero   )r   r   r   rk   Znew_filenamer   r   r#   test_wheel_install_pep_503E  s*    r   c               
   C  s   d} d}|  d| d}t  }tj||}t|d  t  L}tt	" t
||d | |d  W d    n1 sx0    Y  W d    n1 s0    Y  W d    n1 s0    Y  d S )NZ
nodistinfor   -z-py2.py3-none-any.whlr)   )r   r@   r   rA   zipfileZipFilecloser-   r.   
ValueErrorro   )r   r   
wheel_namerE   
wheel_pathrk   r   r   r#   test_wheel_no_dist_dir[  s    r   c                 C  s(   dd }|  d| td s$J d S )Nc                   S  s   dd t dD S )Nc                 S  s   h | ]}|j |j|jfqS r   )interpreterr   r   r    r   r   r#   rU   l  s   z=test_wheel_is_compatible.<locals>.sys_tags.<locals>.<setcomp>zcp36-cp36m-manylinux1_x86_64r   r   r   r   r#   sys_tagsk  s    z*test_wheel_is_compatible.<locals>.sys_tagsz$setuptools.wheel._get_supported_tagsz2onnxruntime-0.1.2-cp36-cp36m-manylinux1_x86_64.whl)setattrr   is_compatible)Zmonkeypatchr   r   r   r#   test_wheel_is_compatiblej  s    r   c                  C  sj  t jddd} tdtdtddtddgd	td
ddddddddgigiid}|dd}|dd}|d}|di }|di }| f ||g i |d|}t }t|||||d  t|}	t	
||	  }
|
d d d }| sJ tjdkr&tt| jdks&J W d    n1 s<0    Y  W d    n1 s\0    Y  d S )Nc                 {  s   dt d| di}| r$||  t j}t|| t|d }t	|d t
jtjdddf|d ttj|d	d
d V  W d    n1 s0    Y  d S )Nr1   z
                # -*- coding: utf-8 -*-
                from setuptools import setup
                import setuptools
                setup(**%r)
                r2   r   i  r3   r4   r5   r7   r8   r   )r   r9   r:   r   r   r   pathlibPathr@   chmodr;   r<   r=   r>   r?   rA   )rB   rC   rD   rE   Zrunshr   r   r#   rF   v  s(    

z$test_wheel_mode.<locals>.build_wheelr   r   r   r   r   r   r   r   rb   r   r   r   r   r   r   r   r~   r   r   rm   rD   r   r   win32Z0o777)N)
contextlibcontextmanagerrX   r   rY   r   r   ro   r   r   r   re   existsr=   r   octstatS_IMODEst_mode)rF   r   r   r   rm   rD   r   r   rk   r)   baseZ	script_shr   r   r#   test_wheel_modeu  sl    
 
	r   )N)9__doc__
__future__r   r   r?   r+   r@   r   r   r   r;   r=   r   typingr   r-   Zjaracor   Zpackaging.tagsr   Zpackaging.utilsr   pkg_resourcesr   r	   r
   Zsetuptools.wheelr   Zcontextsr   textwrapr   distutils.sysconfigr   distutils.utilr   r   ZWHEEL_INFO_TESTSmarkZparametrizer0   r   rF   rQ   rY   ra   ro   rp   rX   r   r   __annotations__r   r   r   r   r   r   r   r   r#   <module>   sf  1
	

-D

 
!
    p
