U
    ui@.                     @   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   R/tmp/pip-unpacked-wheel-9osl9suo/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std d }
|
t_j tddgkstdt _d!d }
|
t_j d"kst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st	|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st
| jjdg ddd |jd d }ddddg}|dd |kst
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st	|tjddd  ||d	d
ddkst	|t
|d	d
ddkst	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   compilerZ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   rz   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    



