o
    Zh.                     @   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   a/var/www/html/lang_env/lib/python3.10/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 vd/d0d1d2 Zd3d4 Zd5S )6TestSysconfigc                 C      t  }tj|sJ d S N)r   get_config_h_filenameosr	   isfile)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   r   r   )r   get_makefile_filenamer   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J d S )N)prefix)r   Zget_python_lib)r   tmp_pathr   r   r   test_get_python_lib%   s   z!TestSysconfig.test_get_python_libc                 C   s"   t  }t|tsJ |sJ d S r   )r   get_config_vars
isinstancedict)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J | sJ t t }|j|s#J d S )Nsrcdir)	pathlibPathr   get_config_varabsolute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J t|sJ tt|s$J d S )Nr#   ZIncludezPython.h)r$   r%   r   r&   joinpathis_file_is_python_source_dirstr)r   r#   ZPython_hr   r   r   test_srcdir_python_build:   s
   z&TestSysconfig.test_srcdir_python_buildc                 C   sN   t d}td t d}W d   n1 sw   Y  ||ks%J dS )zO
        srcdir should be independent of the current working directory
        r#   z..N)r   r&   r	   r%   )r   r#   Zsrcdir2r   r   r   test_srcdir_independent_of_cwdG   s
   
z,TestSysconfig.test_srcdir_independent_of_cwdc              	   C   s   G 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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   )itemsr3   )r   kwkvr   r   r   set_executablesZ   s   zBTestSysconfig.customize_compiler.<locals>.compiler.set_executablesN)__name__
__module____qualname__Zcompiler_typer   Zexecutablesr5   r:   r   r   r   r   compilerS   s
    r>   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	ExitStackr6   enter_contextr   r   Z_config_varscustomize_compiler)r   r>   Zsysconfig_varscompcmkeyvaluer   r   r   rM   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sCJ |jd dksLJ |jd dksUJ |jd dks^J |jd dksgJ |jd dkspJ |jd  d!ksyJ |jd"ksJ tjd#kr|jd$ dksJ nd$|jvsJ 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sJ |jd d&ksJ |jd d'ksJ |jd d(ksJ |jd d)ksJ |jd d*ksJ |jd  d+ksJ |jd"ks
J d$|jvsJ d S ),NZenv_arrB   Zenv_ccrC   Zenv_cppZCPPzenv_cxx --env-cxx-flagsrD   Zenv_ldsharedrH   z--env-ldflagsLDFLAGSz--env-arflagsrE   z--env-cflagsrF   z--env-cppflagsCPPFLAGSZ
env_ranlibZRANLIBZarchiverzenv_ar --env-arflagsZpreprocessorzenv_cpp --env-cppflagsr>   z"env_cc --env-cflags --env-cppflagsZcompiler_soz0env_cc --env-cflags --env-cppflags --sc-ccsharedZcompiler_cxxz2env_cxx --env-cxx-flags --sc-cflags --env-cppflagsZ
linker_exeZ	linker_soz6env_ldshared --env-ldflags --env-cflags --env-cppflagsrA   darwinZranlibzsc_ar --sc-arflagszsc_cc -Ezsc_cc --sc-cflagszsc_cc --sc-cflags --sc-ccsharedzsc_cxx --sc-cflagsr?   r@   )	r   r   r   environrM   r3   Zshared_lib_extensionsysplatform)r   rN   r   r   r   test_customize_compilerq   sb   










z%TestSysconfig.test_customize_compilerc                 C   *   t |d}t|}|dddksJ d S )Nzo
            CONFIG_ARGS=  '--arg1=optarg1' 'ENV=LIB'
            VAR=$OTHER
            OTHER=foo
            z'--arg1=optarg1' 'ENV=LIB'fooCONFIG_ARGSOTHERr   r   Zparse_makefiler   r   r   dr   r   r   test_parse_makefile_base      
z&TestSysconfig.test_parse_makefile_basec                 C   rY   )Nzr
            CONFIG_ARGS=  '--arg1=optarg1' 'ENV=\$$LIB'
            VAR=$OTHER
            OTHER=foo
            z'--arg1=optarg1' 'ENV=\$LIB'rZ   r[   r^   r_   r   r   r   "test_parse_makefile_literal_dollar   rb   z0TestSysconfig.test_parse_makefile_literal_dollarc                 C   s<   dd l }|dt dksJ |dt dksJ d S )Nr   rF   rR   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sJ |dt dks&J d S )Nr   ZCUSTOMIZED_OSX_COMPILERzcompiler flags customizedrH   rC   )r   r&   pytestskipre   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 d    d S 1 sw   Y  d S )NSO)rg   ZwarnsDeprecationWarningr   r&   r4   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s-J 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PopenrV   
executablePIPESTDOUTcommunicate
returncode)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   s   t  }i }t|dd}t j||d}W d    n1 sw   Y  ||u s)J t|dd}t |}W d    n1 s?w   Y  t|tsKJ d S )Nrn   )rr   )g)r   r   openparse_config_hr    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
J t ddksJ d S )N
EXT_SUFFIXz.pyd)r   r&   endswithr4   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   sp   t j }|j|_||_|  | ddg}tj	
tj	
tj}tj|i tjd|id}|dks6J 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__rs   check_outputrU   )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J 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-existrd   )namer   r   r   override8  s   
zFTestSysconfig.test_get_python_inc_missing_config_dir.<locals>.overrider&   N)setattrr   r   r	   existsZget_python_inc)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   rg   markZskipifr   r   r"   Zxfailr+   r0   r1   rM   usefixturesrX   ra   rc   rf   ri   rl   r{   r   r   casefoldrV   ru   r   r   r   r   r   r   r      sN    









 
;









r   )__doc__rJ   r   r   r$   rs   rV   r   Zdistutils.ccompilerr   Zdistutils.unixccompilerr   Zjaraco.envsr   r	   rg   Zjaraco.textr   Ztest.supportr   r   r   r   r   r   r   r   r   <module>   s$    
