o
    JAfp+  ã                   @   s¾   	 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 d dlmZ d dlmZ G dd	„ d	ejejƒZd
d„ Zedkr]eeƒ ƒ dS dS )é    N)Ú	sysconfig)Úget_default_compiler)Úsupport)Úrun_unittestÚ	swap_item)ÚTESTFN)Ú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
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"u d#¡d$d%„ ƒZe e d!¡d"u d#¡d&d'„ ƒZe e d!¡d"u d#¡d(d)„ ƒZd*d+„ Z‡  ZS ),ÚSysconfigTestCasec                    s   t t| ƒ ¡  d | _d S ©N)Úsuperr	   ÚsetUpÚmakefile©Úself©Ú	__class__© ú5/usr/lib/python3.10/distutils/tests/test_sysconfig.pyr      s   
zSysconfigTestCase.setUpc                    s0   | j d urt | j ¡ |  ¡  tt| ƒ ¡  d S r
   )r   ÚosÚunlinkÚcleanup_testfnr   r	   ÚtearDownr   r   r   r   r      s   
zSysconfigTestCase.tearDownc                 C   s8   t j t¡rt  t¡ d S t j t¡rt t¡ d S d S r
   )r   ÚpathÚisfiler   ÚremoveÚisdirÚshutilÚrmtreer   r   r   r   r      s
   ÿz SysconfigTestCase.cleanup_testfnc                 C   s    t  ¡ }|  tj |¡|¡ d S r
   )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 r
   )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r8tj |dd¡}|  tj 	|¡|¡ |  t  
|¡¡ d S tjdkrK|  tj t  ¡ ¡|¡ d S 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_srcdir3   s   

þÿzSysconfigTestCase.test_srcdirc              	   C   sR   t  d¡}t ¡ }zt d¡ t  d¡}W t |¡ nt |¡ w |  ||¡ d S )Nr%   z..)r   r'   r   ÚgetcwdÚchdirr,   )r   r%   ÚcwdZsrcdir2r   r   r   Útest_srcdir_independent_of_cwdE   s   

z0SysconfigTestCase.test_srcdir_independent_of_cwdc              
   C   sŠ   G dd„ dƒ}ddddddd	d
ddœ	}|ƒ }t  ¡ !}| ¡ D ]\}}| ttj||ƒ¡ qt |¡ W d   ƒ |S 1 s>w   Y  |S )Nc                   @   s   e Zd ZdZdd„ ZdS )z6SysconfigTestCase.customize_compiler.<locals>.compilerÚunixc                 [   s
   || _ d S r
   )Úexes)r   Úkwr   r   r   Úset_executablesV   s   
zFSysconfigTestCase.customize_compiler.<locals>.compiler.set_executablesN)Ú__name__Ú
__module__Ú__qualname__Zcompiler_typer6   r   r   r   r   ÚcompilerS   s    r:   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   r:   Zsysconfig_varsÚcompÚcmÚkeyÚvaluer   r   r   rK   Q   s(   õ

ýûz$SysconfigTestCase.customize_compilerr3   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_ccrA   Zenv_cppZCPPzenv_cxx --env-cxx-flagsrB   Zenv_ldsharedrE   z--env-ldflagsÚLDFLAGSz--env-arflagsrC   z--env-cflagsrD   z--env-cppflagsZCPPFLAGSZarchiverzenv_ar --env-arflagsZpreprocessorzenv_cpp --env-cppflagsr:   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-ccsharedr<   r;   r=   )r   r"   r   ÚenvironrK   r,   r4   Zshared_lib_extension)r   rL   r   r   r   Útest_customize_compilero   s‚   








ÿÿÿÿÿÿÿÿÿÿÿÿÿÿz)SysconfigTestCase.test_customize_compilerc                 C   ó`   t | _t| jdƒ}z| d¡ | d¡ W | ¡  n| ¡  w t | j¡}|  |dddœ¡ d S )NÚwz)CONFIG_ARGS=  '--arg1=optarg1' 'ENV=LIB'
úVAR=$OTHER
OTHER=fooz'--arg1=optarg1' 'ENV=LIB'Úfoo©ZCONFIG_ARGSZOTHER©r   r   ÚopenÚwriteÚcloser   Zparse_makefiler,   ©r   ÚfdÚdr   r   r   Útest_parse_makefile_base­   ó   
ÿz*SysconfigTestCase.test_parse_makefile_basec                 C   rS   )NrT   z,CONFIG_ARGS=  '--arg1=optarg1' 'ENV=\$$LIB'
rU   z'--arg1=optarg1' 'ENV=\$LIB'rV   rW   rX   r\   r   r   r   Ú"test_parse_makefile_literal_dollar¹   r`   z4SysconfigTestCase.test_parse_makefile_literal_dollarc                 C   s<   dd l }|  | d¡t  d¡¡ |  | d¡t  d¡¡ d S )Nr   rD   rP   )r   r,   r'   ©r   Zglobal_sysconfigr   r   r   Útest_sysconfig_moduleÆ   s   ÿÿz'SysconfigTestCase.test_sysconfig_modulerF   úcompiler flags customizedc                 C   sP   dd l }t  d¡r|  d¡ |  | d¡t  d¡¡ |  | d¡t  d¡¡ d S )Nr   rF   rd   rE   rA   )r   r'   ZskipTestr,   rb   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   sJ   t dtfƒ |  t d¡t d¡¡ W d   ƒ d S 1 sw   Y  d S )NÚ rg   rf   )r   rh   r,   r   r'   r   r   r   r   Útest_SO_valueì   s
   ÿ"ÿzSysconfigTestCase.test_SO_valuec                 C   s.   t  ¡ }|  |d ¡ |  |d |d ¡ d S )Nrg   rf   )r   r"   ZassertIsNotNoner,   )r   Úvarsr   r   r   Útest_SO_in_varsó   s   z!SysconfigTestCase.test_SO_in_varsc                 C   s~   t tdƒ}| t d¡¡ W d   ƒ n1 sw   Y  tjttj	ƒtgtj
tjdd}| ¡ \}}|  d|jd| ¡ d S )NrT   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ÚstderrÚuniversal_newlinesr   zSubprocess failed: )rY   r   Ú
writelinesÚtextwrapÚdedentÚ
subprocessÚPopenÚstrÚsysÚ
executableÚPIPEÚSTDOUTÚ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)r7   r8   r9   r   r   r   r   r!   r$   r.   r2   rK   ÚunittestZ
skipUnlessr   rR   r_   ra   rc   ZskipIfr   r'   re   ri   rk   rm   r   Ú__classcell__r   r   r   r   r	      sD    ÿ
<ÿ
ÿ
ÿ
ÿ
r	   c                  C   s   t  ¡ } |  t  t¡¡ | S r
   )r€   Z	TestSuiteZaddTestZ	makeSuiter	   )Zsuiter   r   r   Ú
test_suite  s   r‚   Ú__main__)rG   r   r   rt   rw   rr   r€   Z	distutilsr   Zdistutils.ccompilerr   Zdistutils.testsr   Ztest.supportr   r   Ztest.support.os_helperr   Ztest.support.warnings_helperr   ZEnvironGuardZTestCaser	   r‚   r7   r   r   r   r   Ú<module>   s(     }ÿ