U
    f4K                     @  s  U d Z ddlmZ ddlm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mZ ddlZddl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<d=d>d?d@gd9gdAidBe0dCe0dDdEdFe0dGdHe#dIie0dJdHgfgdKe,d<d=d>d?d@gdHgdLidBe0dMdNe#dOie0e/dPdMdNgdQgdRe,dSdTdUd=d>d?d@gigidBe0dVdWe#dXie0dWgdYe,d<dWdUd=d>d?d@gigidBe0dZe#d[e#d\d]e0d^d_gd`e,d<dUd=d>d?d@dad^d_gigiidBe0dbdce,d<dUd=d>d?ddd@giie#dedfe0dgdhej1 e#didje0dkdlej1 dme0dndodpdqie#drdse0dtdpduej1 ie#dvdwe0dxdydpdzie#d{dse0d|d8d}d9d:iiie0d8gd~gde,d<ddUd=d>d?dd@gid8d9d}d9gigigidBe0ddd9diie0dgdgde,d<ddUd=d>d?dd@gidd9gigidBe0dd8d:dHe#didie0d8gddgfgde,d<d=d>d?d@gd9dJdHgigdAidBfZ2de3d< ej&j'de2dd' e2D d(dd Z4dd Z5dd Z6dd Z7dd Z8dS )zwheel tests    )annotations)get_config_var)get_platformN)Any)path)DistributionPathMetadataPY_MAJOR)canonicalize_name	parse_tag)Wheel   )tempdir)DALSzinvalid.whlz&simplewheel-2.0-1-py2.py3-none-any.whlZsimplewheelz2.01zpy2.py3Z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_aZpy3z9PyQt5-5.9-5.9.1-cp35.cp36.cp37-abi3-manylinux1_x86_64.whlZPyQt5z5.9z5.9.1zcp35.cp36.cp37Zabi3Zmanylinux1_x86_64filenameinfoc                 C  s   g | ]}|d  qS )r    .0tr   r   :lib/python3.8/site-packages/setuptools/tests/test_wheel.py
<listcomp>Q   s     r!   )Zidsc              	     sV   t |r,t| t|  W 5 Q R X d S t|   fdd| D |ksRtd S )Nc                   s   i | ]}|t  |qS r   )getattr)r   kwr   r    
<dictcomp>Y   s      z#test_wheel_info.<locals>.<dictcomp>)inspectZisclasspytestraisesr   keysAssertionErrorr   r   r$   r    test_wheel_infoP   s    
r,   c              	   k  sz   dt d| di}| r$||  t F}t|| tjtj	dddf|d t

tj|ddd	 V  W 5 Q R X 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&    

 rB   c              
   C  sH   t  }t| D ]2\}}}|D ]"}|tjtj|| | qq|S N)setr<   walkaddr   r=   relpath)rootcontentsdirpathZdirnames	filenamesr   r   r   r    tree_setu   s
    "rL   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   r=   )r   valZnoder   r    	<setcomp>   s     zflatten_tree.<locals>.<setcomp>)	rD   items
isinstancedictflatten_treerF   r<   r   r=   )treeoutputrI   elemr   rN   r    rS   }   s    

rS   c                 C  s   dd | D S )Nc                 S  s*   h | ]"}|j tt td p tddqS )Z
EXT_SUFFIXZSO)r   r   Z	shlib_ext)formatr	   r   r   )r   xr   r   r    rO      s   z&format_install_tree.<locals>.<setcomp>r   )rT   r   r   r    format_install_tree   s    rY   c                 C  s   t | }tj|| }|| |d k	rRt|}t|}	||	sRt	||	 t
|tj|d}
tj||
d}|j|kst	|j|kst	|d kr|drt	n||d kst	d S )NEGG-INFO)metadatarequires.txt)r   r<   r   r=   egg_nameZinstall_as_eggrY   rL   issubsetr+   r   r   Zfrom_filenamer   r   Zhas_metadataZget_metadatalstrip)r   install_dirZinstall_tree_includesr   r   requires_txtr%   Zegg_pathinstall_treeZexpr[   r3   r   r   r    _check_wheel_install   s    
rc   c                   @  s   e Zd Zdd Zdd ZdS )Recordc                 K  s   || _ || _d S rC   Z_id_fields)selfidr?   r   r   r    __init__   s    zRecord.__init__c                 C  s   d| j | jf S )Nz%s(**%r)re   )rg   r   r   r    __repr__   s    zRecord.__repr__N)__name__
__module____qualname__ri   rj   r   r   r   r    rd      s   rd   Zbasicfoo__init__.py )packagesfoo-1.0-py{py_version}.eggPKG-INFORECORDWHEELtop_level.txt)rZ   rn   rh   r@   setup_kwargsrb   r.   u   Description accentuée)Zdescription)rh   rx   datazdata.txtz.
                Some data...
                data_dir)
data_files)rZ   rz   	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)nameZsources)Zext_modulesz%foo-1.0-py{py_version}-{platform}.eggzextension{shlib_ext}rZ   headerzheader.hz
                )ZheadersscriptX
                #/usr/bin/python
                print('hello world!')
                N
                #/bin/sh
                echo 'hello world!'
                	script.py	script.shr   r   scriptsr   Z	requires1zfoobar==2.0r\   z%
            foobar==2.0
            )rh   install_requiresrb   ra   Z	requires2z:
        bar
        foo<=2.0; %r in sys_platform
        z2
            bar
            foo<=2.0
            )rh   r   ra   Z	requires3z)
        bar; %r != sys_platform
        )rh   r   Z	requires4z
        foo
        Zextrazfoobar>3zG
            foo

            [extra]
            foobar>3
            )rh   r   extras_requirera   Z	requires5zfoobar; %r != sys_platformz!
            [extra]
            )rh   r   ra   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_packageZbarzfoo.bar)Znamespace_packagesrq   z foo-1.0-py{py_version}-nspkg.pthznamespace_packages.txtZempty_namespace_packageZfoobarz7__import__('pkg_resources').declare_namespace(__name__)Zdata_in_packagez>
                        Some data...
                        )ro   rz   zfoo/data_dirzfoo/data_dir/data.txt)rq   r{   ztuple[dict[str, Any], ...]WHEEL_INSTALL_TESTSparamsc                 C  s   g | ]}|d  qS )rh   r   )r   r   r   r   r    r!   ,  s     c              
   C  s   |  dd}|  dd}|  dg }|  di }|  dd }|  d}|  d	i }|  d
i }tf |||||d|*}	t }
t|	|
|||| W 5 Q R X W 5 Q R X d S )Nr}   rn   r   1.0r   r   ra   rb   r@   rx   r}   r   r   r   r>   )getrB   r   rc   )r   r   r   r   r   ra   rb   r@   rx   r   r`   r   r   r    test_wheel_install)  s:    
      r   c               
   C  sh   d} d}t | |dJ}t 8}|| t| }t|| t||d t| |d  W 5 Q R X W 5 Q R X d S )NZFoo_Barr   )r}   r   )rB   r   replacer
   shutilZmoverc   )r   r   r   r`   Znew_filenamer   r   r    test_wheel_install_pep_503D  s(     r   c                  C  s   d} d}d | |}t ^}tj||}t|d  t .}t	t
 t||d | |d  W 5 Q R X W 5 Q R X W 5 Q R X d S )NZ
nodistinfor   z{0}-{1}-py2.py3-none-any.whlr%   )rW   r   r<   r   r=   zipfileZZipFilecloser(   r)   
ValueErrorrc   )r   r   Z
wheel_namerA   Z
wheel_pathr`   r   r   r    test_wheel_no_dist_dirW  s          r   c                 C  s(   dd }|  d| td s$td S )Nc                   S  s   dd t dD S )Nc                 S  s   h | ]}|j |j|jfqS r   )Zinterpreterr   r   r   r   r   r    rO   h  s   z=test_wheel_is_compatible.<locals>.sys_tags.<locals>.<setcomp>zcp36-cp36m-manylinux1_x86_64r   r   r   r   r    sys_tagsg  s    z*test_wheel_is_compatible.<locals>.sys_tagsz$setuptools.wheel._get_supported_tagsz2onnxruntime-0.1.2-cp36-cp36m-manylinux1_x86_64.whl)setattrr   Zis_compatibler+   )Zmonkeypatchr   r   r   r    test_wheel_is_compatiblef  s    r   c                  C  s>  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 x}t|||||d  t|}	t	
||	  }
|
d d d }| sttjdkr&tt| jdks&tW 5 Q R X W 5 Q R X d S )Nc              	   {  s   dt d| di}| r$||  t `}t|| t|d }t	|d t
jtjdddf|d ttj|d	d
d V  W 5 Q R X d S )Nr-   z
                # -*- coding: utf-8 -*-
                from setuptools import setup
                import setuptools
                setup(**%r)
                r.   r   i  r/   r0   r1   r3   r4   r   )r   r5   r6   r   r   r   pathlibPathr<   chmodr7   r8   r9   r:   r;   r=   )r>   r?   r@   rA   Zrunshr   r   r    rB   r  s*    

 z$test_wheel_mode.<locals>.build_wheelr   r   r   r   r   r   r   rr   rZ   rs   rt   ru   rv   r   rw   r}   rn   r   r   rb   r@   rx   r   Zwin32Z0o777)N)
contextlibcontextmanagerrR   r   rS   r   r   rc   r   r   r   r]   existsr+   r9   r   octstatS_IMODEst_mode)rB   r   r   r   rb   r@   rx   r   r`   r%   baseZ	script_shr   r   r    test_wheel_modeq  st    
 
      r   )N)9__doc__Z
__future__r   Zdistutils.sysconfigr   Zdistutils.utilr   r   r   r   r;   r'   r<   r   r7   r9   typingr   r   r(   Zjaracor   Zpkg_resourcesr   r   r	   Zpackaging.utilsr
   Zpackaging.tagsr   Zsetuptools.wheelr   Zcontextsr   textwrapr   r   ZWHEEL_INFO_TESTSZmarkZparametrizer,   r   rB   rL   rS   rY   rc   rd   rR   r   r   __annotations__r   r   r   r   r   r   r   r   r    <module>   s  1  
	

 

 -  D 
    
 
! 
    r
