U
    aÊ¹jê.  ã                   @   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ZddlZddlZddlmZ ddlmZ dd	„ Zej d
¡G dd„ dƒƒZdS )zTests for distutils.sysconfig.é    N)Ú	sysconfig)Únew_compiler)ÚUnixCCompiler)Útrim)Ú	swap_itemc                 C   s   t j dt|ƒi| ¡ | d S )NÚMakefile)ÚjaracoÚpathÚbuildr   )ÚrootÚcontents© r   úi/var/www/html/bwave/python/venv/lib/python3.8/site-packages/setuptools/_distutils/tests/test_sysconfig.pyÚ_gen_makefile   s    r   Zsave_envc                   @   sv  e Zd Zdd„ Zej d¡ej d¡dd„ ƒƒZdd„ Zd	d
„ Z	ej d¡ej d¡ej 
d¡dd„ ƒƒƒZej d¡ej d¡dd„ ƒƒZdd„ Zdd„ Zej d¡ej d¡dd„ ƒƒZdd„ Zdd„ Zdd „ Zej d!¡d"d#„ ƒZej d$¡d%d&„ ƒZd'd(„ Zd)d*„ Zej d+¡ej d¡d,d-„ ƒƒZej d+¡ej d¡ejjd. ¡ ej ¡ kd/d0�d1d2„ ƒƒƒZd3d4„ Zd5S )6ÚTestSysconfigc                 C   s   t  ¡ }tj |¡st‚d S ©N)r   Úget_config_h_filenameÚosr	   ÚisfileÚAssertionError)ÚselfÚconfig_hr   r   r   Útest_get_config_h_filename   s    z(TestSysconfig.test_get_config_h_filenamezplatform.system() == 'Windows'z$sys.implementation.name != 'cpython'c                 C   s   t  ¡ }tj |¡st‚d S r   )r   Úget_makefile_filenamer   r	   r   r   )r   Úmakefiler   r   r   Útest_get_makefile_filename   s    z(TestSysconfig.test_get_makefile_filenamec                 C   s   t  ¡ t j|d�kst‚d S )N)Úprefix)r   Úget_python_libr   )r   Útmp_pathr   r   r   Útest_get_python_lib%   s    z!TestSysconfig.test_get_python_libc                 C   s"   t  ¡ }t|tƒst‚|st‚d S r   )r   Úget_config_varsÚ
isinstanceÚdictr   )r   Zcvarsr   r   r   Útest_get_config_vars(   s    z"TestSysconfig.test_get_config_varszsysconfig.IS_PYPYzsysconfig.python_buildzplatform.system() == "Windows"c                 C   sJ   t  t d¡¡}| ¡ st‚| ¡ s(t‚t  t ¡ ¡}|j 	|¡sFt‚d S )NÚsrcdir)
ÚpathlibÚPathr   Úget_config_varÚabsoluter   Úis_dirr   ÚparentÚsamefile)r   r$   r   r   r   r   Útest_srcdir_simple-   s
    z TestSysconfig.test_srcdir_simpleznot sysconfig.python_buildc                 C   sL   t  t d¡¡}| dd¡}| ¡ s(t‚t |¡s6t‚t t|ƒ¡sHt‚d S )Nr$   ÚIncludezPython.h)	r%   r&   r   r'   ÚjoinpathÚis_filer   Ú_is_python_source_dirÚstr)r   r$   ZPython_hr   r   r   Útest_srcdir_python_build:   s
    z&TestSysconfig.test_srcdir_python_buildc              	   C   s:   t  d¡}t d¡� t  d¡}W 5 Q R X ||ks6t‚dS )zO
        srcdir should be independent of the current working directory
        r$   z..N)r   r'   r	   r&   r   )r   r$   Zsrcdir2r   r   r   Útest_srcdir_independent_of_cwdG   s    
z,TestSysconfig.test_srcdir_independent_of_cwdc              	   C   sr   G dd„ dƒ}ddddddd	d
dœ}|ƒ }t  ¡ �6}| ¡ D ]\}}| ttj||ƒ¡ q<t |¡ W 5 Q R X |S )Nc                   @   s&   e Zd ZdZejZdd„ Zdd„ ZdS )z2TestSysconfig.customize_compiler.<locals>.compilerÚunixc                 S   s
   i | _ d S r   )Úexes©r   r   r   r   Ú__init__W   s    z;TestSysconfig.customize_compiler.<locals>.compiler.__init__c                 [   s    |  ¡ D ]\}}|| j|< qd S r   )Úitemsr5   )r   ÚkwÚkÚvr   r   r   Úset_executablesZ   s    zBTestSysconfig.customize_compiler.<locals>.compiler.set_executablesN)Ú__name__Ú
__module__Ú__qualname__Úcompiler_typer   Zexecutablesr7   r<   r   r   r   r   ÚcompilerS   s   rA   Zsc_arÚsc_ccZsc_cxxz--sc-arflagsz--sc-cflagsz--sc-ccsharedÚsc_ldsharedÚsc_shutil_suffix)ÚARÚCCÚCXXÚARFLAGSÚCFLAGSÚCCSHAREDÚLDSHAREDÚSHLIB_SUFFIX)Ú
contextlibÚ	ExitStackr8   Úenter_contextr   r   Ú_config_varsÚcustomize_compiler)r   rA   Zsysconfig_varsÚcompÚcmÚkeyÚvaluer   r   r   rQ   Q   s     ø
z TestSysconfig.customize_compilerz-not isinstance(new_compiler(), UnixCCompiler)Zdisable_macos_customizationc                 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< dtjd< |  ¡ }|jd dks†t‚|jd dks˜t‚|jd dksªt‚|jd dks¼t‚|jd dksÎt‚|jd dksàt‚|jd  d!ksòt‚|jd"k�st‚tj	d#k�r$|jd$ dk�s4t‚nd$|jk�s4t‚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= tjd= |  ¡ }|jd d%k�s t‚|jd d&k�s´t‚|jd d'k�sÈt‚|jd d(k�sÜt‚|jd d)k�sðt‚|jd d*k�st‚|jd  d+k�st‚|jd"k�s(t‚d$|jk�s8t‚d S ),NZenv_arrE   Zenv_ccrF   Zenv_cppÚCPPzenv_cxx --env-cxx-flagsrG   Zenv_ldsharedrK   z--env-ldflagsÚLDFLAGSz--env-arflagsrH   z--env-cflagsrI   z--env-cppflagsÚCPPFLAGSZ
env_ranlibZRANLIBÚarchiverzenv_ar --env-arflagsÚpreprocessorzenv_cpp --env-cppflagsrA   z.env_cc --sc-cflags --env-cflags --env-cppflagsÚcompiler_soz<env_cc --sc-cflags --env-cflags --env-cppflags --sc-ccsharedÚcompiler_cxxz2env_cxx --env-cxx-flags --sc-cflags --env-cppflagsÚ
linker_exeÚ	linker_soz6env_ldshared --env-ldflags --env-cflags --env-cppflagsrD   ÚdarwinZranlibzsc_ar --sc-arflagszsc_cc -Ezsc_cc --sc-cflagszsc_cc --sc-cflags --sc-ccsharedzsc_cxx --sc-cflagsrB   rC   )
r   r    r   ÚenvironrQ   r5   r   Úshared_lib_extensionÚsysÚplatform)r   rR   r   r   r   Útest_customize_compilerq   sd    









ÿÿÿÿz%TestSysconfig.test_customize_compilerc                 C   s*   t |dƒ}t |¡}|dddœks&t‚d S )Nzo
            CONFIG_ARGS=  '--arg1=optarg1' 'ENV=LIB'
            VAR=$OTHER
            OTHER=foo
            z'--arg1=optarg1' 'ENV=LIB'Úfoo©ÚCONFIG_ARGSÚOTHER©r   r   Úparse_makefiler   ©r   r   r   Údr   r   r   Útest_parse_makefile_base®   s    þ
z&TestSysconfig.test_parse_makefile_basec                 C   s*   t |dƒ}t |¡}|dddœks&t‚d S )Nzr
            CONFIG_ARGS=  '--arg1=optarg1' 'ENV=\$$LIB'
            VAR=$OTHER
            OTHER=foo
            z'--arg1=optarg1' 'ENV=\$LIB're   rf   ri   rk   r   r   r   Ú"test_parse_makefile_literal_dollarº   s    þ
z0TestSysconfig.test_parse_makefile_literal_dollarc                 C   s<   dd l }| d¡t  d¡ks t‚| d¡t  d¡ks8t‚d S )Nr   rI   rW   )r   r'   r   ©r   Zglobal_sysconfigr   r   r   Útest_sysconfig_moduleÆ   s    ÿ
ÿz#TestSysconfig.test_sysconfig_modulez3sysconfig.get_config_var('CUSTOMIZED_OSX_COMPILER')c                 C   sP   dd l }t  d¡rt d¡ | d¡t  d¡ks4t‚| d¡t  d¡ksLt‚d S )Nr   ÚCUSTOMIZED_OSX_COMPILERzcompiler flags customizedrK   rF   )r   r'   ÚpytestÚskipr   ro   r   r   r   Útest_sysconfig_compiler_varsÝ   s    

ÿ
z*TestSysconfig.test_sysconfig_compiler_varsz*not sysconfig.get_config_var('EXT_SUFFIX')c              	   C   s$   t  t¡� t d¡ W 5 Q R X d S )NÚSO)rr   ZwarnsÚDeprecationWarningr   r'   r6   r   r   r   Útest_SO_deprecationè   s    z!TestSysconfig.test_SO_deprecationc                 C   s^   t j dtdƒi|¡ tjtj|d gtjtj	ddd�}| 
¡ \}}d|jksZtd| ƒ‚d S )NÚfilea[  
                    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úutf-8)ÚstdoutÚstderrÚuniversal_newlinesÚencodingr   zSubprocess failed: )r   r	   r
   r   Ú
subprocessÚPopenrb   Ú
executableÚPIPEÚSTDOUTÚcommunicateÚ
returncoder   )r   r   ÚpZoutsZerrsr   r   r   Ú.test_customize_compiler_before_get_config_varsí   s     ÿ	öûz<TestSysconfig.test_customize_compiler_before_get_config_varsc              	   C   sr   t  ¡ }i }t|dd��}t j||d�}W 5 Q R X ||ks>t‚t|dd��}t  |¡}W 5 Q R X t|tƒsnt‚d S )Nry   )r}   )Úg)r   r   ÚopenÚparse_config_hr   r!   r"   )r   r   ÚinputÚfÚresultr   r   r   Útest_parse_config_h  s    z!TestSysconfig.test_parse_config_hzplatform.system() != 'Windows'c                 C   s*   t  d¡ d¡st‚t  d¡dks&t‚d S )NÚ
EXT_SUFFIXz.pyd)r   r'   Úendswithr   r6   r   r   r   Útest_win_ext_suffix  s    z!TestSysconfig.test_win_ext_suffixz	\PCbuild\z*Need sys.executable to be in a source tree)Úreasonc                 C   sl   t j ¡ }|j|_||_| ¡  | ¡ ddg}tj	 
tj	 
tj¡¡}tj|tjd|i–d�}|dksht‚dS )zAEnsure distutils.sysconfig detects venvs from source tree builds.z-czCimport distutils.sysconfig; print(distutils.sysconfig.python_build)Ú
PYTHONPATH)ÚenvÚTrueN)r   ZenvsZVEnvZ
clean_optsZcreate_optsr   Z
ensure_envÚexer   r	   ÚdirnameÚ	distutilsÚ__file__r~   Úcheck_outputr`   r   )r   r   r“   ÚcmdZdistutils_pathÚoutr   r   r   Ú$test_win_build_venv_from_source_tree  s    
ý ÿz2TestSysconfig.test_win_build_venv_from_source_treec                 C   s.   dd„ }|  td|¡ tj t ¡ ¡s*t‚dS )a5  
        In portable Python installations, the sysconfig will be broken,
        pointing to the directories where the installation was built and
        not where it currently is. In this case, ensure that the missing
        directory isn't used for get_python_inc.

        See pypa/distutils#178.
        c                 S   s   | dkrdS t  | ¡S )NÚ	INCLUDEPYz/does-not-exist)r   r'   )Únamer   r   r   Úoverride8  s    zFTestSysconfig.test_get_python_inc_missing_config_dir.<locals>.overrider'   N)Úsetattrr   r   r	   ÚexistsÚget_python_incr   )r   ZmonkeypatchrŸ   r   r   r   Ú&test_get_python_inc_missing_config_dir.  s    
z4TestSysconfig.test_get_python_inc_missing_config_dirN)r=   r>   r?   r   rr   ÚmarkZskipifr   r   r#   Zxfailr,   r2   r3   rQ   Úusefixturesrd   rm   rn   rp   rt   rw   r†   r�   r�   Úcasefoldrb   r€   rœ   r£   r   r   r   r   r      sL   








 

;









þr   )Ú__doc__rM   r—   r   r%   r~   rb   r   Údistutils.ccompilerr   Zdistutils.unixccompilerr   Zjaraco.envsr   r	   rr   Zjaraco.textr   Ztest.supportr   r   r¤   r¥   r   r   r   r   r   Ú<module>   s"   
