B
    Üö›\  ã               @   s    d 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 G dd„ dejejƒZd	d
„ Zedkrœeeƒ ƒ dS )zTests for distutils.sysconfig.é    N)Ú	sysconfig)Úget_default_compiler)Úsupport)ÚTESTFNÚrun_unittestÚcheck_warningsc                   s  e Zd Z‡ fdd„Z‡ fdd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
e eƒ dkd¡dd„ ƒZdd„ Zdd„ Zdd„ Ze e d¡d¡dd„ ƒZe e d¡d kd!¡d"d#„ ƒZe e d¡d kd!¡d$d%„ ƒZe e d¡d kd!¡d&d'„ ƒZd(d)„ Z‡  ZS )*ÚSysconfigTestCasec                s   t t| ƒ ¡  d | _d S )N)Úsuperr   ÚsetUpÚmakefile)Úself)Ú	__class__© ú/lib/python3.7/distutils/tests/test_sysconfig.pyr
      s    zSysconfigTestCase.setUpc                s0   | j d k	rt | j ¡ |  ¡  tt| ƒ ¡  d S )N)r   ÚosÚunlinkÚcleanup_testfnr	   r   ÚtearDown)r   )r   r   r   r      s    
zSysconfigTestCase.tearDownc             C   s2   t j t¡rt  t¡ nt j t¡r.t t¡ d S )N)r   ÚpathÚisfiler   ÚremoveÚisdirÚshutilZrmtree)r   r   r   r   r      s    z SysconfigTestCase.cleanup_testfnc             C   s    t  ¡ }|  tj |¡|¡ d S )N)r   Zget_config_h_filenameÚ
assertTruer   r   r   )r   Zconfig_hr   r   r   Útest_get_config_h_filename   s    z,SysconfigTestCase.test_get_config_h_filenamec             C   s   |   t ¡ tjtd¡ d S )N)Úprefix)ZassertNotEqualr   Zget_python_libr   )r   r   r   r   Útest_get_python_lib#   s    
z%SysconfigTestCase.test_get_python_libc             C   s"   t  ¡ }|  |t¡ |  |¡ d S )N)r   Úget_config_varsZassertIsInstanceÚdictr   )r   Zcvarsr   r   r   Útest_get_config_vars*   s    z&SysconfigTestCase.test_get_config_varsc             C   s”   t  d¡}|  tj |¡|¡ |  tj |¡|¡ t jrntj |dd¡}|  tj 	|¡|¡ |  t  
|¡¡ n"tjdkr|  tj t  ¡ ¡|¡ d S )NÚsrcdirZIncludezPython.hÚposix)r   Úget_config_varr   r   r   Úisabsr   Zpython_buildÚjoinÚexistsZ_is_python_source_dirÚnameÚassertEqualÚdirnameZget_makefile_filename)r   r    ZPython_hr   r   r   Útest_srcdir/   s    

zSysconfigTestCase.test_srcdirc          	   C   sH   t  d¡}t ¡ }zt d¡ t  d¡}W d t |¡ X |  ||¡ d S )Nr    z..)r   r"   r   ÚgetcwdÚchdirr'   )r   r    ÚcwdZsrcdir2r   r   r   Útest_srcdir_independent_of_cwdA   s    

z0SysconfigTestCase.test_srcdir_independent_of_cwdÚunixz+not testing if default compiler is not unixc             C   sH   dt jd< dt jd< G dd„ dƒ}|ƒ }t |¡ |  |jd d¡ d S )	NZmy_arZARz-arflagsZARFLAGSc               @   s   e Zd ZdZdd„ ZdS )z;SysconfigTestCase.test_customize_compiler.<locals>.compilerr.   c             [   s
   || _ d S )N)Úexes)r   Úkwr   r   r   Úset_executablesW   s    zKSysconfigTestCase.test_customize_compiler.<locals>.compiler.set_executablesN)Ú__name__Ú
__module__Ú__qualname__Zcompiler_typer1   r   r   r   r   ÚcompilerT   s   r5   Zarchiverzmy_ar -arflags)r   Úenvironr   Zcustomize_compilerr'   r/   )r   r5   Úcompr   r   r   Útest_customize_compilerM   s    


z)SysconfigTestCase.test_customize_compilerc             C   sX   t | _t| jdƒ}z| d¡ | d¡ W d | ¡  X t | j¡}|  |dddœ¡ d S )NÚwz)CONFIG_ARGS=  '--arg1=optarg1' 'ENV=LIB'
zVAR=$OTHER
OTHER=fooz'--arg1=optarg1' 'ENV=LIB'Úfoo)ÚCONFIG_ARGSÚOTHER)r   r   ÚopenÚwriteÚcloser   Úparse_makefiler'   )r   ÚfdÚdr   r   r   Útest_parse_makefile_base^   s    

z*SysconfigTestCase.test_parse_makefile_basec             C   sX   t | _t| jdƒ}z| d¡ | d¡ W d | ¡  X t | j¡}|  |dddœ¡ d S )Nr9   z,CONFIG_ARGS=  '--arg1=optarg1' 'ENV=\$$LIB'
zVAR=$OTHER
OTHER=fooz'--arg1=optarg1' 'ENV=\$LIB'r:   )r;   r<   )r   r   r=   r>   r?   r   r@   r'   )r   rA   rB   r   r   r   Ú"test_parse_makefile_literal_dollarj   s    

z4SysconfigTestCase.test_parse_makefile_literal_dollarc             C   s<   dd l }|  | d¡t  d¡¡ |  | d¡t  d¡¡ d S )Nr   ZCFLAGSZLDFLAGS)r   r'   r"   )r   Úglobal_sysconfigr   r   r   Útest_sysconfig_modulew   s
    z'SysconfigTestCase.test_sysconfig_moduleÚCUSTOMIZED_OSX_COMPILERzcompiler flags customizedc             C   sP   dd l }t  d¡r|  d¡ |  | d¡t  d¡¡ |  | d¡t  d¡¡ d S )Nr   rG   zcompiler flags customizedZLDSHAREDZCC)r   r"   ZskipTestr'   )r   rE   r   r   r   Útest_sysconfig_compiler_vars~   s    

z.SysconfigTestCase.test_sysconfig_compiler_varsÚ
EXT_SUFFIXNz!EXT_SUFFIX required for this testc             C   s   |   ttjd¡ d S )NÚSO)ZassertWarnsÚDeprecationWarningr   r"   )r   r   r   r   Útest_SO_deprecation—   s    z%SysconfigTestCase.test_SO_deprecationc          	   C   s4   t dtfƒ |  t d¡t d¡¡ W d Q R X d S )NÚ rJ   rI   )r   rK   r'   r   r"   )r   r   r   r   Útest_SO_value   s    zSysconfigTestCase.test_SO_valuec             C   s.   t  ¡ }|  |d ¡ |  |d |d ¡ d S )NrJ   rI   )r   r   ZassertIsNotNoner'   )r   Úvarsr   r   r   Útest_SO_in_vars¤   s    z!SysconfigTestCase.test_SO_in_varsc          	   C   sj   t tdƒ}| t d¡¡ W d Q R X tjttj	ƒtgtj
tjdd}| ¡ \}}|  d|jd| ¡ d S )Nr9   aB                  from distutils.core import Distribution
                config = Distribution().get_command_obj('config')
                # try_compile may pass or it may fail if no compiler
                # is found but it should not raise an exception.
                rc = config.try_compile('int x;')
                T)ÚstdoutÚstderrZuniversal_newlinesr   zSubprocess failed: )r=   r   Ú
writelinesÚtextwrapÚdedentÚ
subprocessÚPopenÚstrÚsysÚ
executableÚPIPEZSTDOUTZcommunicater'   Ú
returncode)r   ÚfÚpZoutsZerrsr   r   r   Ú.test_customize_compiler_before_get_config_vars«   s    z@SysconfigTestCase.test_customize_compiler_before_get_config_vars)r2   r3   r4   r
   r   r   r   r   r   r)   r-   ÚunittestZ
skipUnlessr   r8   rC   rD   rF   ZskipIfr   r"   rH   rL   rN   rP   r_   Ú__classcell__r   r   )r   r   r      s,   r   c              C   s   t  ¡ } |  t  t¡¡ | S )N)r`   Z	TestSuiteZaddTestZ	makeSuiter   )Zsuiter   r   r   Ú
test_suite¿   s    rb   Ú__main__)Ú__doc__r   r   rV   rY   rT   r`   Z	distutilsr   Zdistutils.ccompilerr   Zdistutils.testsr   Ztest.supportr   r   r   ZEnvironGuardZTestCaser   rb   r2   r   r   r   r   Ú<module>   s    2