U
    aÊ¹j@.  ã                   @   sº   d 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
 ddlmZ ddlmZ ddlZdd	lmZ dd
lmZ ejdd�dd„ ƒZejdd�dd„ ƒZG dd„ dejƒZdS )z"Tests for distutils.unixccompiler.é    N)Ú	sysconfig)Úconsolidate_linker_args)ÚDistutilsPlatformError)ÚUnixCCompiler)Ú_clear_cached_macosx_veré   )Úsupport)ÚEnvironmentVarGuardT)Zautousec                 C   s4   |   tdtj¡ |   tdtj¡ |   tdtj¡ d S )NÚplatformÚget_config_varÚget_config_vars)ÚsetattrÚsysr
   r   r   r   )Úmonkeypatch© r   úm/var/www/html/bwave/python/venv/lib/python3.8/site-packages/setuptools/_distutils/tests/test_unixccompiler.pyÚsave_values   s    r   c                 C   s   G dd„ dt ƒ}|ƒ | j_d S )Nc                   @   s   e Zd Zdd„ ZdS )z)compiler_wrapper.<locals>.CompilerWrapperc                 S   s
   |   d¡S )Nz/foo)Zruntime_library_dir_option©Úselfr   r   r   Ú	rpath_foo   s    z3compiler_wrapper.<locals>.CompilerWrapper.rpath_fooN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   ÚCompilerWrapper   s   r   )r   ÚinstanceÚcc)Úrequestr   r   r   r   Úcompiler_wrapper   s    r   c                   @   sx   e Zd Zej d¡dd„ ƒZej d¡dd„ ƒZej d¡ej d¡dd„ ƒƒZ	ej d¡d	d
„ ƒZ
dd„ Zdd„ ZdS )ÚTestUnixCCompilerzplatform.system == "Windows"c                    sn  dt _d‰ d}d}d|fd|fd|fd|fd	|fd
|fd|fd|fd|fd|fd|fdg}‡ fdd„‰‡ ‡‡fdd„}|D ]`\}}|\}}||||ƒ |d krª|d||ƒ |d kr¾||d|ƒ |d krz|d krz|dd|ƒ qztj}	dt _dd„ }
|
t_ˆj ¡ ddgk�st‚dd„ }
|
t_ˆj ¡ ddgk�s4t‚dd„ }
|
t_ˆj ¡ ddgk�sZt‚|	t_dt _dd„ }
|
t_ˆj ¡ tddgƒk�s�t‚d d„ }
|
t_ˆj ¡ tddgƒk�sºt‚dt _d!d„ }
|
t_ˆj ¡ d"k�sât‚dt _d#d„ }
|
t_ˆj ¡ tddgƒk�st‚dt _d$d„ }
|
t_ˆj ¡ tddgƒk�sBt‚dt _d%d„ }
|
t_ˆj ¡ d"k�sjt‚d S )&NÚdarwinÚMACOSX_DEPLOYMENT_TARGETz-Wl,-rpath,/fooz-L/foo)NN)NÚ11)Ú10N)ú10.3N)z10.3.1N)ú10.5N)z10.5.1N)r#   r#   )r#   r$   )r$   r#   )r$   r!   ))z10.4r"   Nc                    s   ‡‡ fdd„}|S )Nc                    s   | ˆ krˆS dS ©NZxxxr   )Úvar)Údarwin_ver_varÚsyscfg_macosx_verr   r   ÚgcvC   s    zRTestUnixCCompiler.test_runtime_libdir_option.<locals>.make_darwin_gcv.<locals>.gcvr   )r(   r)   )r'   )r(   r   Úmake_darwin_gcvB   s    zETestUnixCCompiler.test_runtime_libdir_option.<locals>.make_darwin_gcvc              	      sØ   t j}d| ›d|›d�}tj}| ˆ ¡}tƒ  ˆ| ƒt_|d k	rJ||ˆ < nˆ |kr\| ˆ ¡ |d k	r|ˆj ¡ |ks¤t	|ƒ‚n(t
jtˆ d d�� ˆj ¡  W 5 Q R X |d k	r¶||ˆ < nˆ |krÈ| ˆ ¡ |t_tƒ  d S )NzmacOS version = (sysconfig=z, env=ú)z	 mismatch)Úmatch)ÚosÚenvironr   r   Úgetr   Úpopr   r   ÚAssertionErrorÚpytestZraisesr   )r(   Úenv_macosx_verÚexpected_flagÚenvÚmsgÚold_gcvZold_env_macosx_ver©r'   r*   r   r   r   Údo_darwin_testJ   s.    



 ÿ

zDTestUnixCCompiler.test_runtime_libdir_option.<locals>.do_darwin_testÚ zhp-uxc                 S   s   dS r%   r   ©Úvr   r   r   r)   {   s    z9TestUnixCCompiler.test_runtime_libdir_option.<locals>.gcvz+sc                 S   s   dS )NÚgccr   r;   r   r   r   r)   �   s    z-Wl,+sc                 S   s   dS )Nzg++r   r;   r   r   r   r)   ‡   s    Úbarc                 S   s   | dkrdS | dkrdS d S )NÚCCr=   ÚGNULDÚyesr   r;   r   r   r   r)   ’   s    z-Wl,--enable-new-dtagsc                 S   s   | dkrdS | dkrdS d S )Nr?   zgcc -pthread -B /barr@   rA   r   r;   r   r   r   r)   ž   s    c                 S   s   | dkrdS | dkrdS d S )Nr?   r=   r@   Únor   r;   r   r   r   r)   ­   s    z
-Wl,-R/fooc                 S   s   | dkrdS | dkrdS d S )Nr?   zx86_64-pc-linux-gnu-gcc-4.4.2r@   rA   r   r;   r   r   r   r)   º   s    c                 S   s   | dkrdS | dkrdS d S )Nr?   r   r@   rA   r   r;   r   r   r   r)   É   s    c                 S   s   | dkrdS | dkrdS d S )Nr?   r   r@   rB   r   r;   r   r   r   r)   Ø   s    )r   r
   r   r   r   r   r1   r   )r   Zdarwin_rpath_flagZdarwin_lib_flagZdarwin_test_casesr9   Zmacosx_versr4   r(   r3   r7   r)   r   r8   r   Útest_runtime_libdir_option#   s–    ô!
þ
þ
þ
þz,TestUnixCCompiler.test_runtime_libdir_optionc              	   C   sh   dd„ }t jdœdd„}|t _|t _tƒ � }d|d< |d= t  | j¡ W 5 Q R X | jjd	 dksdt‚d S )
Nc                 S   s   | dkrdS dS ©NÚLDSHAREDú*gcc-4.2 -bundle -undefined dynamic_lookup úgcc-4.2r   r;   r   r   r   r)   å   s    z9TestUnixCCompiler.test_cc_overrides_ldshared.<locals>.gcv©Ú_origc                 W   s   |rt ttj|ƒƒS | ƒ S ©N©ÚlistÚmapr   r   ©rI   Úargsr   r   r   Úgcvsê   s    z:TestUnixCCompiler.test_cc_overrides_ldshared.<locals>.gcvsÚmy_ccr?   rE   r   ©r   r   r   r	   Úcustomize_compilerr   Ú	linker_sor1   ©r   r)   rP   r5   r   r   r   Útest_cc_overrides_ldsharedá   s    z,TestUnixCCompiler.test_cc_overrides_ldsharedZdisable_macos_customizationc                 C   s  dd„ }t jdœdd„}|t _|t _tjj| jddd��Ø}tjj| jd	d
d��¸ tjj| jddd��˜ tƒ �†}d|d< d|d< |d= t  | j¡ | jj	dd… ddgks¬t
‚| jjdg ddd� |jd d }ddddg}|dd… |ksît
‚W 5 Q R X W 5 Q R X W 5 Q R X W 5 Q R X dS )z�
        Ensure that setting CC env variable also changes default linker
        correctly when building C++ extensions.

        pypa/distutils#126
        c                 S   s4   | dkrdS | dkrdS | dkr$dS | dkr0dS d	S )
NrE   rF   ÚLDCXXSHAREDz*g++-4.2 -bundle -undefined dynamic_lookup ÚCXXzg++-4.2r?   rG   r:   r   r;   r   r   r   r)     s    zKTestUnixCCompiler.test_cc_overrides_ldshared_for_cxx_correctly.<locals>.gcvrH   c                 W   s   |rt ttj|ƒƒS | ƒ S rJ   rK   rN   r   r   r   rP     s    zLTestUnixCCompiler.test_cc_overrides_ldshared_for_cxx_correctly.<locals>.gcvsÚspawnN)Zreturn_valueZ
_need_linkTÚmkpathzccache my_ccr?   Zmy_cxxrX   rE   r   é   ZccacherQ   za.outzc++)Ztarget_langz-bundlez
-undefinedZdynamic_lookupé   )r   r   r   ÚmockÚpatchÚobjectr   r	   rS   rT   r1   ÚlinkÚ	call_args)r   r)   rP   Z
mock_spawnr5   ra   Úexpectedr   r   r   Ú,test_cc_overrides_ldshared_for_cxx_correctly÷   sD    
  ÿ   ÿþ  ÿüúz>TestUnixCCompiler.test_cc_overrides_ldshared_for_cxx_correctlyc              	   C   sj   dd„ }t jdœdd„}|t _|t _tƒ �"}d|d< d|d	< t  | j¡ W 5 Q R X | jjd
 dksft‚d S )Nc                 S   s   | dkrdS dS rD   r   r;   r   r   r   r)   )  s    z5TestUnixCCompiler.test_explicit_ldshared.<locals>.gcvrH   c                 W   s   |rt ttj|ƒƒS | ƒ S rJ   rK   rN   r   r   r   rP   .  s    z6TestUnixCCompiler.test_explicit_ldshared.<locals>.gcvsrQ   r?   zmy_ld -bundle -dynamicrE   r   Zmy_ldrR   rU   r   r   r   Útest_explicit_ldshared$  s    z(TestUnixCCompiler.test_explicit_ldsharedc                 C   s&   d| j _t |  ¡ ¡ | j  d¡ d S )NZscratchÚabort)r   Ú
output_dirr-   ÚchdirÚmkdtempZhas_functionr   r   r   r   Útest_has_function;  s    z#TestUnixCCompiler.test_has_functionc                 C   sÖ   t ƒ }dd„ |_| tjddd„ ¡ tjdkr2dnd}d}| |d	¡ d
d¡d|› �ks\t	‚| t
|ƒd	¡ d
d¡d|› �ks‚t	‚| tjddd„ ¡ | |d	¡ d
d¡dks²t	‚| t
|ƒd	¡ d
d¡dksÒt	‚d S )Nc                 S   s   | S rJ   r   )Údirr   r   r   Ú<lambda>E  ó    z:TestUnixCCompiler.test_find_library_file.<locals>.<lambda>Úexistsc                 S   s   d| kS )NÚexistingr   ©Údr   r   r   rk   F  rl   Úcygwinzlibabc.dylibz
cygabc.dll)z/foo/bar/missingz/foo/bar/existingÚabcú\ú/z/foo/bar/existing/c                 S   s   d| kod| kod| kS )Nrn   z.az.dll.ar   ro   r   r   r   rk   V  rl   z/foo/bar/existing/libabc.a)r   Z_library_rootr   r-   Úpathr   r
   Zfind_library_fileÚreplacer1   Úreversed)r   r   ÚcompilerÚlibnameÚdirsr   r   r   Útest_find_library_fileC  s4    
ÿÿÿÿýÿÿÿÿz(TestUnixCCompiler.test_find_library_fileN)r   r   r   r2   ÚmarkZskipifrC   rV   Zusefixturesrc   rd   ri   r{   r   r   r   r   r   "   s   

 >



+

r   )Ú__doc__r-   r   Zunittest.mockr]   Ú	distutilsr   Zdistutils.compatr   Údistutils.errorsr   Zdistutils.unixccompilerr   Údistutils.utilr   r2   r:   r   Zcompat.py38r	   Zfixturer   r   ZTempdirManagerr   r   r   r   r   Ú<module>   s    



