o
    LK&h.                     @   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   ]/var/www/html/venv/lib/python3.10/site-packages/setuptools/_distutils/tests/test_sysconfig.py_gen_makefile   s   r   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   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   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&   IncludezPython.h)r'   r(   r   r)   joinpathis_file_is_python_source_dirstr)r   r&   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&   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   )itemsr9   )r   kwkvr   r   r   set_executablesZ   s   zBTestSysconfig.customize_compiler.<locals>.compiler.set_executablesN)__name__
__module____qualname__compiler_typer   executablesr;   r@   r   r   r   r   compilerS   s
    rF   sc_arsc_ccsc_cxxz--sc-arflagsz--sc-cflagsz--sc-ccsharedsc_ldsharedsc_shutil_suffix)ARCCCXXARFLAGSCFLAGSCCSHAREDLDSHAREDSHLIB_SUFFIX)
contextlib	ExitStackr<   enter_contextr   r   _config_varscustomize_compiler)r   rF   sysconfig_varscompcmkeyvaluer   r   r   rX   Q   s&   

z TestSysconfig.customize_compilerz-not isinstance(new_compiler(), UnixCCompiler)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 ),Nenv_arrL   env_ccrM   env_cppCPPzenv_cxx --env-cxx-flagsrN   env_ldsharedrR   z--env-ldflagsLDFLAGSz--env-arflagsrO   z--env-cflagsrP   z--env-cppflagsCPPFLAGS
env_ranlibRANLIBarchiverzenv_ar --env-arflagspreprocessorzenv_cpp --env-cppflagsrF   z"env_cc --env-cflags --env-cppflagscompiler_soz0env_cc --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-cppflagsrK   darwinranlibzsc_ar --sc-arflagszsc_cc -Ezsc_cc --sc-cflagszsc_cc --sc-cflags --sc-ccsharedzsc_cxx --sc-cflagsrH   rJ   )	r   r!   r   environrX   r9   shared_lib_extensionsysplatform)r   rZ   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   parse_makefiler   r   r   dr   r   r   test_parse_makefile_base      
z&TestSysconfig.test_parse_makefile_basec                 C   ru   )Nzr
            CONFIG_ARGS=  '--arg1=optarg1' 'ENV=\$$LIB'
            VAR=$OTHER
            OTHER=foo
            z'--arg1=optarg1' 'ENV=\$LIB'rv   rw   rz   r|   r   r   r   "test_parse_makefile_literal_dollar   r   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   rP   rd   r   r)   r   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   CUSTOMIZED_OSX_COMPILERzcompiler flags customizedrR   rM   )r   r)   pytestskipr   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)r   warnsDeprecationWarningr   r)   r:   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Popenrr   
executablePIPESTDOUTcommunicate
returncode)r   r   pouts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 )Nr   )r   )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)   endswithr:   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   envsVEnv
clean_optscreate_optsr   
ensure_envexer   r	   dirname	distutils__file__r   check_outputrp   )r   r   r   cmd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-existr   )namer   r   r   override8  s   
zFTestSysconfig.test_get_python_inc_missing_config_dir.<locals>.overrider)   N)setattrr   r   r	   existsget_python_inc)r   monkeypatchr   r   r   r   &test_get_python_inc_missing_config_dir.  s   
z4TestSysconfig.test_get_python_inc_missing_config_dirN)rA   rB   rC   r   r   markskipifr   r    r%   xfailr.   r5   r7   rX   usefixturesrt   r~   r   r   r   r   r   r   r   casefoldrr   r   r   r   r   r   r   r   r      sN    









 
;









r   )__doc__rT   r   r   r'   r   rr   r   distutils.ccompilerr   distutils.unixccompilerr   jaraco.envsr   r	   r   jaraco.textr   test.supportr   r   r   r   r   r   r   r   r   <module>   s$    
