o
    >hX                     @   sh  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Zd dl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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#Z$d dl%Z%d dl&Z&d d
l'm(Z( ddl)m*Z+ e&, dd Z-e j.dd Z/e j.dd Z0e&j12dG dd deZ3G dd de3Z4dS )    N)	sysconfig	build_ext)Distribution)CompileErrorDistutilsPlatformErrorDistutilsSetupErrorUnknownFileError)	Extension)missing_compiler_executable)TempdirManagercopy_xxmodule_cfixup_build_ext)StringIO)support   )py39c                 c   s    | j }| |_t|j|_ddlm} tj	}| t_	tj	|_	|j d V  W d    n1 s3w   Y  |t_	||_	t
jdkrJtd d S d S )Nr   r   cygwinr   )instancemkdtemptmp_dirpathPathtmp_pathdistutils.commandr   site	USER_BASEsysplatformtimesleep)requestselfr   orig_user_base r$   /var/www/vedio/testing/chatpythonscript.ninositsolution.com/env/lib/python3.10/site-packages/setuptools/_distutils/tests/test_build_ext.pyuser_site_dir$   s    


r&   c              
   c   s    t | > t| | }t | d V  W d    n1 s w   Y  W d    n1 s/w   Y  W d    d S W d    d S 1 sGw   Y  d S N)import_helperCleanImportextension_redirectDirsOnSysPath)namer   new_pathr$   r$   r%   safe_extension_import=   s   "r.   c                 c   s    t  dkrtj dkr|V  dS t| tj| }W d   n1 s'w   Y  tj	
|j}tjdd}tj	|tj	
|}t|j| |V  dS )z
    Tests will fail to tear down an extension module if it's been imported.

    Before importing, copy the file to a temporary directory that won't
    be cleaned up. Yield the new path.
    Windowsr   Ndeleteme)prefix)r   systemr   r(   r+   	importlibutil	find_specosr   basenameorigintempfiler   joinshutilcopy)modr   specfilename	trash_dirdestr$   r$   r%   r*   E   s   
r*   c                   @   s   e Zd Zdd Zejddgdd Zedd Z	d	d
 Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zejdejd d!d" Zejdejd d#d$ Zejdejd d%d& Zd'd( Zd)S )*TestBuildExtc                 O   s   t |i |S r'   r   )r"   argskwargsr$   r$   r%   r   \   s   zTestBuildExt.build_extcopy_soFc                 C   sz  t   t| j tj| jd}td|g}tjdkrW|s+td|gdgdgdgd}n,tjdkrWdd	 t	
d
D }t|dd d}t|d d td|gdgdgdgd}td|gd}| j|_| |}t| | j|_| j|_tj}tjs~t t_z|  |  W |t_n|t_w td| j | | W d    n1 sw   Y  tjdkr|rtd d S d S d S )Nz
xxmodule.cxxwin32/usr/libz)library_dirs	librariesruntime_library_dirslinuxc                 S   s   h | ]}t j|qS r$   )r6   r   realpath).0r,   r$   r$   r%   	<setcomp>o   s    z.TestBuildExt.test_build_ext.<locals>.<setcomp>z/usr/lib*/libz.so*c                 S   s   t | S r'   )len)lib_pathr$   r$   r%   <lambda>r   s    z-TestBuildExt.test_build_ext.<locals>.<lambda>)keyz/tmp/libxx_z.so/tmpxx_zr,   ext_modules)r   r   r   r6   r   r:   r
   r   r   globiglobsortedr;   copyfiler   package_dirr   r   	build_lib
build_tempstdoutr   verboser   ensure_finalizedrunr.   _test_xxunlink)r"   rE   xx_cxx_extlibz_sodistcmd
old_stdoutr$   r$   r%   test_build_ext_   sZ   




zTestBuildExt.test_build_extc                 C   s  dd l }dD ]	}t||sJ q|dddksJ |dddks$J |  d u s.J tjr:d	}|j|ks:J t|	 |j	sDJ t|
 |j
sNJ tjd
krtjdd|jgdd}dd l}|| dd |dD }| s|| d|vrd|vsJ d S d|v sJ d S d S )Nr   )errorfoonewroj                  z/This is a template module just for instruction.rM   readelfz-dT)universal_newlinesc                 S   s@   g | ]}d |v sd|v r|  d dd  dD ]}|qqS )RPATHRUNPATHrr   r   rU   :)split)rO   linerpathr$   r$   r%   
<listcomp>   s    z)TestBuildExt._test_xx.<locals>.<listcomp>
rH   z
/usr/lib64rV   )rF   hasattrro   rp   demor   HAVE_DOCSTRINGS__doc__
isinstanceNullStrr   r   
subprocesscheck_output__file__pprintr}   )rE   rF   attrdoc
so_headersr   rpathsr$   r$   r%   re      s4   


zTestBuildExt._test_xxc              	   C   s   t ddi}| |}tj}dt_ddlm} |d}d|d< z|  W |t_|d u r1|d= n||d< n|t_|d u rA|d= w ||d< w t|j	dksOJ d S )Nr,   rF   sunosr   )_config_varsPy_ENABLE_SHAREDT)
r   r   r   r   distutils.sysconfigr   getrc   rQ   rJ   )r"   rj   rk   oldr   old_varr$   r$   r%   test_solaris_enable_shared   s$   



z'TestBuildExt.test_solaris_enable_sharedc                 C   s   dd l }tddi}| |}dd |jD }d|v sJ d|_tj|jd}tj|jd	}t	| t	| |
  ||jv sEJ ||jv sLJ ||jv sSJ d S )
Nr   r,   rF   c                 S   s   g | ]\}}}|qS r$   r$   )rO   r,   shortlabelr$   r$   r%   r      s    z/TestBuildExt.test_user_site.<locals>.<listcomp>userTlibinclude)r   r   r   user_optionsr   r6   r   r:   r   mkdirrc   rJ   r   include_dirs)r"   r   rj   rk   optionsr   inclr$   r$   r%   test_user_site   s   


zTestBuildExt.test_user_sitec                 C   s   t ddgddg}td|d}| |}|  tttf |  W d    n1 s/w   Y  t ddgddg}td|d}| |}|  |  d S )Nro   xxxFoptionalrF   rX   T)	r
   r   r   rc   pytestraisesr	   r   rd   r"   modulesrj   rk   r$   r$   r%   test_optional_extension   s   


z$TestBuildExt.test_optional_extensionc                 C   s  t ddgddg}td|d}| |}|  t }|tjj	D ]	}||j
v s-J q$tjdd}|tjj	D ]	}||j
v sDJ q;| |}d	|_|  |jg d
ksZJ | |}dtj	 d|_|  d|jv srJ d|jv syJ | |}dtj	 d|_|  |jddgksJ t|}d|_|  |jg dksJ | |}d|_|  |jddgksJ | |}d|_|  |jddgksJ | |}d |_|  |jg ksJ | |}d|_|  |jddgksJ d S )Nro   r   Fr   rF   rX   T)plat_specificzmy_lib, other_lib lastlib)my_lib	other_liblastlib
my_lib_dirother_lib_dironetwozone two,three)r   r   threezone,two)r   1)r   r   z1 2r   2)r
   r   r   finalize_optionsr   get_python_incr}   r6   r   pathsepr   rK   rJ   r   link_objectsdefineundef	swig_opts)r"   r   rj   rk   
py_includepplat_py_includer$   r$   r%   test_finalize_options   sV   







z"TestBuildExt.test_finalize_optionsc                 C   s  t  }| |}|  tt |d W d    n1 s!w   Y  ddg}tt || W d    n1 s?w   Y  dg}tt || W d    n1 s\w   Y  dg}tt || W d    n1 syw   Y  ddgdddfg}|| |d	 }t|tsJ |j	dksJ t
|d
rJ ddgddddgdfg}tt || W d    n1 sw   Y  ddg|d	 d d< || |d	 jdgksJ |d	 jdgksJ d S )Nro   )barro   r   )zfoo-bar )foo.barr   r   r   r   )sourcesrK   somer   r   )r   r   3)r   rK   r   macros)r   r   )r   r   r   r   )r   r   r   r   r   r   check_extensions_listr   r
   rK   r   undef_macrosdefine_macros)r"   rj   rk   extsextr$   r$   r%   test_check_extensions_listC  sN   


z'TestBuildExt.test_check_extensions_listc                 C   sH   t ddgddg}td|d}| |}|  | dgks"J d S )Nro   r   Fr   rF   rX   )r
   r   r   rc   get_source_filesr   r$   r$   r%   test_get_source_files  s
   
z"TestBuildExt.test_get_source_filesc                 C   s   t ddgddt ddgddg}td|d}| |}|  td	||d
 js.J td||d js<J ||d
 dgksHJ ||d dgksTJ d S )Nro   aaaFr   u   fööuuurF   rX   zfoo(_d)?\..*r   u   föö(_d)?\..*r   
PyInit_fooPyInitU_f_1gaa)	r
   r   r   rc   researchget_ext_filenamer,   get_export_symbolsr   r$   r$   r%   test_unicode_module_names  s   
z&TestBuildExt.test_unicode_module_namesc                 C   sl   t ddgt ddgg}td|d}| |}|  ||d dgks(J ||d	 d
gks4J d S )Nzfoo.__init__r   u   föö.__init__r   rF   rX   r   r   r   r   )r
   r   r   rc   r   r   r$   r$   r%   test_export_symbols__init__  s   


z(TestBuildExt.test_export_symbols__init__c                 C   s8   t  }| |}d|_|  |  |jdksJ d S )Nunix)r   r   compilerrc   rd   )r"   rj   rk   r$   r$   r%   test_compiler_option  s   
z!TestBuildExt.test_compiler_optionc              	   C   sF  t   |  }tj|d}| |d td|gdd}td|gd}| |}t	| |
  t| dks;J tj| jd	|_tj| jd
|_tj|  }t }t| zd|_|  | d }W t| nt| w tj|sJ td}	||	sJ tj|}
|
|ksJ d|_d |_|  | d }tj|sJ ||	sJ tj|}
|
|jksJ |d}ddi|_|d}tj|d }||jksJ d|_tj|  }t }t| z|d}W t| nt| w tj|d }tj|d }|dks!J d S )Nzfoo.czvoid PyInit_foo(void) {}
ro   Fr   rF   rX   r   buildtemptTr   
EXT_SUFFIXbuild_pyr   r   rU   )r   r   r6   r   r:   
write_filer
   r   r   r   rc   rQ   get_outputsr   r_   r`   rN   getcwdchdirinplacerd   existsr   get_config_varendswithdirnamer   get_finalized_commandr^   get_ext_fullpathr}   )r"   r   c_filer   rj   rk   other_tmp_dirold_wdso_file
ext_suffixso_dirr   r   lastdirr$   r$   r%   test_get_outputs  s`   






zTestBuildExt.test_get_outputsc                 C   s.  t d}t }| |}d|_ddi|j_ddg|j_t	 }tj
|ddd| }|d}||ks6J d	|_tj
|d
|_tj
|d
dd| }|d}||ksWJ |d}i |_ddg|j_|d}tj
|d
ddd| }||ks|J d|_|d}tj
|ddd| }||ksJ d S )Nr   Tr   srclxmlz	lxml.htmletreez
lxml.etreeFtmpdirr   twistedztwisted.runner.portmaprunnerportmap)r   r   r   r   r   distributionr^   packagesr6   r   r   r:   r   r_   r   )r"   r   rj   rk   curdirwantedr   r   r$   r$   r%   test_ext_fullpath  s2   






zTestBuildExt.test_ext_fullpathzplatform.system() != "Darwin"save_envc                 C   s   |  dd  d S )Nz==)_try_compile_deployment_targetr"   r$   r$   r%   test_deployment_target_default  s   z+TestBuildExt.test_deployment_target_defaultc                 C   s<   t t | dd W d    d S 1 sw   Y  d S )N>z10.1)r   r   r   r  r  r$   r$   r%   test_deployment_target_too_low  s   "z+TestBuildExt.test_deployment_target_too_lowc                 C   sZ   t d}|r+dd |dD }|d  d7  < ddd |D }| d	| d S d S )
NMACOSX_DEPLOYMENT_TARGETc                 S   s   g | ]}t |qS r$   )int)rO   xr$   r$   r%   r   (  s    zATestBuildExt.test_deployment_target_higher_ok.<locals>.<listcomp>.rU   r   c                 s   s    | ]}t |V  qd S r'   )str)rO   ir$   r$   r%   	<genexpr>*  s    z@TestBuildExt.test_deployment_target_higher_ok.<locals>.<genexpr><)r   r   r}   r:   r  )r"   	deptargetr$   r$   r%    test_deployment_target_higher_ok  s   
z-TestBuildExt.test_deployment_target_higher_okc                 C   sR  |d u rt jdrt jd= n|t jd< tjdtd| di| j t	
d}ttt|ddd }|d d dk rCd	}nt|dkrLd
}nd}|j| }td| jd gd| gd}td|gd}| j|_| |}| j|_| j|_ztj}tjst t_z|  |  W |t_W d S |t_w  ty   |  d Y d S w )Nr  zdeptargetmodule.czt                    #include <AvailabilityMacros.h>

                    int dummy;

                    #if TARGET z MAC_OS_X_VERSION_MIN_REQUIRED
                    #else
                    #error "Unexpected target"
                    #endif

                    r
  r   rr   )
   r  z{:02}{:01}0z{:02}{:02}00z	{:02}0000r  z	-DTARGET=)extra_compile_argsrX   z*Wrong deployment target during compilation)!r6   environr   jaracor   r   textwrapdedentr   r   r   tuplemapr  r}   rQ   formatr
   r   r   r^   r   r_   r`   r   ra   r   rb   r   rc   rd   r   fail)r"   operatortargettmpldeptarget_extrj   rk   rl   r$   r$   r%   r  -  sR   






z+TestBuildExt._try_compile_deployment_targetN)__name__
__module____qualname__r   r   markparametrizerm   staticmethodre   r   r   r   r   r   r   r   r   r   r   r   skipifusefixturesr  r  r  r  r$   r$   r$   r%   rB   Z   s6    
3
%H<?
%




rB   c                       s   e Zd Z fddZ  ZS )TestParallelBuildExtc                    s   t  j|i |}d|_|S )NT)superr   parallel)r"   rC   rD   r   	__class__r$   r%   r   q  s   zTestParallelBuildExt.build_ext)r  r   r!  r   __classcell__r$   r$   r*  r%   r'  p  s    r'  )5
contextlibrZ   r3   os.pathr6   r   r   r;   r   r   r   r9   r  r   	distutilsr   distutils.command.build_extr   distutils.corer   distutils.errorsr   r   r   r	   distutils.extensionr
   distutils.testsr   distutils.tests.supportr   r   r   ior   jaraco.pathr  r   r   testr   compatr   r(   fixturer&   contextmanagerr.   r*   r"  r&  rB   r'  r$   r$   r$   r%   <module>   sN    



    