o
    LK&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&j1 2d¡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/html/venv/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 s¦w   Y  tjdkr¹|r»t 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>)Úkeyéÿÿÿÿz/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rŠtjdd|jgdd}dd l}| |¡ dd„ | d¡D ƒ}| s„| |¡ d|vr€d|vs‚J ‚d S d|v sŒJ ‚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s“J ‚t|ƒ}d|_| ¡  |jg d¢ks§J ‚|  |¡}d|_| ¡  |jddgks¼J ‚|  |¡}d|_| ¡  |jddgksÑJ ‚|  |¡}d |_| ¡  |jg ksäJ ‚|  |¡}d|_| ¡  |jddgksùJ ‚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ƒs˜J ‚|j	dksŸJ ‚t
|d
ƒr¦J ‚ddgddddgdœfg}t t¡ | |¡ W d   ƒ n1 sÈw   Y  ddg|d	 d d< | |¡ |d	 jdgksæJ ‚|d	 jdgksðJ ‚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s™J ‚d|_d |_| ¡  | ¡ d }tj |¡s±J ‚| |	¡s¸J ‚tj |¡}
|
|jksÅJ ‚| d¡}ddi|_| d¡}tj |¡d }||jksãJ ‚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s•J ‚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s†tƒ 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    



    