B
    È S]%+  ã               @   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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 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_warningsÚ	swap_itemc                   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
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_srcdir0   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_cwdB   s    

z0SysconfigTestCase.test_srcdir_independent_of_cwdc          
   C   sx   G dd„ dƒ}ddddddd	d
ddœ	}|ƒ }t  ¡ :}x(| ¡ D ]\}}| ttj||ƒ¡ q@W t |¡ W d Q R X |S )Nc               @   s   e Zd ZdZdd„ ZdS )z6SysconfigTestCase.customize_compiler.<locals>.compilerÚunixc             [   s
   || _ d S )N)Úexes)r   Úkwr   r   r   Úset_executablesS   s    zFSysconfigTestCase.customize_compiler.<locals>.compiler.set_executablesN)Ú__name__Ú
__module__Ú__qualname__Zcompiler_typer2   r   r   r   r   ÚcompilerP   s   r6   Zsc_arÚsc_ccÚsc_cxxz--sc-arflagsz--sc-cflagsz--sc-ccsharedÚsc_ldsharedÚsc_shutil_suffixÚTrue)	ÚARÚCCÚCXXÚARFLAGSÚCFLAGSZCCSHAREDÚLDSHAREDZSHLIB_SUFFIXÚCUSTOMIZED_OSX_COMPILER)Ú
contextlibÚ	ExitStackÚitemsÚenter_contextr   r   Z_config_varsÚcustomize_compiler)r   r6   Zsysconfig_varsÚcompÚcmÚkeyÚvaluer   r   r   rG   N   s     
z$SysconfigTestCase.customize_compilerr/   z+not testing if default compiler is not unixc             C   sÖ  t  ¡  dtjd< dtjd< dtjd< dtjd< d	tjd
< dtjd< dtjd< dtjd< dtjd< |  ¡ }|  |jd d¡ |  |jd d¡ |  |jd d¡ |  |jd d¡ |  |jd d¡ |  |jd d¡ |  |jd d¡ |  |jd¡ tjd= tjd= tjd= tjd= tjd
= tjd= tjd= tjd= tjd= |  ¡ }|  |jd d ¡ |  |jd d!¡ |  |jd d"¡ |  |jd d#¡ |  |jd d$¡ |  |jd d%¡ |  |jd d&¡ |  |jd¡ d S )'NZenv_arr<   Zenv_ccr=   Zenv_cppZCPPzenv_cxx --env-cxx-flagsr>   Zenv_ldsharedrA   z--env-ldflagsÚLDFLAGSz--env-arflagsr?   z--env-cflagsr@   z--env-cppflagsZCPPFLAGSZarchiverzenv_ar --env-arflagsZpreprocessorzenv_cpp --env-cppflagsr6   z.env_cc --sc-cflags --env-cflags --env-cppflagsZcompiler_soz<env_cc --sc-cflags --env-cflags --env-cppflags --sc-ccsharedZcompiler_cxxZ
linker_exeZ	linker_soz6env_ldshared --env-ldflags --env-cflags --env-cppflagsr:   zsc_ar --sc-arflagszsc_cc -Ezsc_cc --sc-cflagszsc_cc --sc-cflags --sc-ccsharedr8   r7   r9   )r   r   r   ÚenvironrG   r(   r0   Zshared_lib_extension)r   rH   r   r   r   Útest_customize_compilerl   sf    








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 )NrO   z,CONFIG_ARGS=  '--arg1=optarg1' 'ENV=\$$LIB'
zVAR=$OTHER
OTHER=fooz'--arg1=optarg1' 'ENV=\$LIB'rP   )rQ   rR   )r   r   rS   rT   rU   r   rV   r(   )r   rW   rX   r   r   r   Ú"test_parse_makefile_literal_dollar¶   s    

z4SysconfigTestCase.test_parse_makefile_literal_dollarc             C   s<   dd l }|  | d¡t  d¡¡ |  | d¡t  d¡¡ d S )Nr   r@   rL   )r   r(   r#   )r   Úglobal_sysconfigr   r   r   Útest_sysconfig_moduleÃ   s
    z'SysconfigTestCase.test_sysconfig_modulerB   zcompiler flags customizedc             C   sP   dd l }t  d¡r|  d¡ |  | d¡t  d¡¡ |  | d¡t  d¡¡ d S )Nr   rB   zcompiler flags customizedrA   r=   )r   r#   ZskipTestr(   )r   r[   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Ú r_   r^   )r   r`   r(   r   r#   )r   r   r   r   Útest_SO_valueé   s    zSysconfigTestCase.test_SO_valuec             C   s.   t  ¡ }|  |d ¡ |  |d |d ¡ d S )Nr_   r^   )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 )NrO   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: )rS   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)r3   r4   r5   r   r   r   r   r   r    r*   r.   rG   ÚunittestZ
skipUnlessr   rN   rY   rZ   r\   ZskipIfr   r#   r]   ra   rc   re   rt   Ú__classcell__r   r   )r   r   r	      s.   =r	   c              C   s   t  ¡ } |  t  t¡¡ | S )N)ru   Z	TestSuiteZaddTestZ	makeSuiter	   )Zsuiter   r   r   Ú
test_suite  s    rw   Ú__main__)Ú__doc__rC   r   r   rk   rn   ri   ru   Z	distutilsr   Zdistutils.ccompilerr   Zdistutils.testsr   Ztest.supportr   r   r   r   ZEnvironGuardZTestCaser	   rw   r3   r   r   r   r   Ú<module>   s     }