o
    5‘ði7  ã                   @   s¦   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 d dlZddlmZ ej d¡ZG dd	„ d	e	jƒZG d
d„ dejƒZG dd„ dƒZdS )é    N)ÚDistutilsPlatformError)Úsupport)Úget_platformé   )Úmsvcznot hasattr(msvc, "winreg")c                   @   sx   e Zd Zdd„ Zejje ¡  	d¡ dd�ej 
dddd	eƒ fg¡d
d„ ƒƒZedd„ ƒZeej 
dd¡dd„ ƒƒZd	S )ÚTestmsvccompilerc                 C   sP   dd„ }|  td|¡ t t¡� t d¡ W d   ƒ d S 1 s!w   Y  d S )Nc                 S   s   dS )N)NN© )Ú	plat_specr   r   úp/root/parts/websockify/install/lib/python3.10/site-packages/setuptools/_distutils/compilers/C/tests/test_msvc.pyÚ_find_vcvarsall   s   z:Testmsvccompiler.test_no_compiler.<locals>._find_vcvarsallr   zwont find this version)Úsetattrr   ÚpytestÚraisesr   Ú_get_vc_env)ÚselfÚmonkeypatchr   r   r   r
   Útest_no_compiler   s   ÿ"ÿz!Testmsvccompiler.test_no_compilerÚwinz-Only run test for non-mingw Windows platforms)Úreasonzplat_name, expected)ú	win-arm64r   )ú	win-amd64r   Nc                    s0   t  ¡ }‡ fdd„}| t d|¡ | |¡ dS )zS
        Ensure a specified target platform is passed to _get_vcvars_spec.
        c                    s   |ˆ ksJ ‚d S ©Nr   )Úhost_platformÚplatform©Úexpectedr   r
   Ú_get_vcvars_spec2   s   zPTestmsvccompiler.test_cross_platform_compilation_paths.<locals>._get_vcvars_specr   N)r   ÚCompilerr   Ú
initialize)r   r   Ú	plat_namer   Úcompilerr   r   r   r
   Ú%test_cross_platform_compilation_paths    s   z6Testmsvccompiler.test_cross_platform_compilation_pathsc              	   C   s�   d}d}t j dd ¡}|t j|< z)t d¡}| ¡ |v sJ ‚||| ¡  ks(J ‚W t j |¡ |r8|t jd< d S d S t j |¡ |rG|t jd< w )Nu   á¹°á¸–á¹¤á¹ªâ”…á¹¼áº¨á¹œu	   â‚ƒâ�´â‚…ÚDISTUTILS_USE_SDKÚx86)ÚosÚenvironÚpopr   r   Úlower)r   Útest_varÚ
test_valueÚold_distutils_use_sdkÚenvr   r   r
   Útest_get_vc_env_unicode8   s   

ÿÿz(Testmsvccompiler.test_get_vc_env_unicodeÚver©iß  iá  c                 C   s^   t td|› �ƒ}dddœ| }|ƒ \}}|st d|› d�¡ ||ks%J ‚tj |¡s-J ‚d S )NÚ_find_vcé   é   r.   zVS z is not installed)Úgetattrr   r   Úskipr$   ÚpathÚisdir)r   r-   ÚlookupÚexpected_versionÚversionr4   r   r   r
   Útest_get_vcI   s   
zTestmsvccompiler.test_get_vc)Ú__name__Ú
__module__Ú__qualname__r   r   ÚmarkÚskipifÚ	sysconfigr   Ú
startswithÚparametrizer!   Úneeds_winregr,   r9   r   r   r   r
   r      s&    þýþ
r   c                       s(   e Zd ZdZ‡ fdd„Zdd„ Z‡  ZS )ÚCheckThreadNc                    s0   zt ƒ  ¡  W d S  ty   t ¡ | _Y d S w r   )ÚsuperÚrunÚ	ExceptionÚsysÚexc_info©r   ©Ú	__class__r   r
   rE   Z   s
   ÿzCheckThread.runc                 C   s   | j  S r   )rH   rI   r   r   r
   Ú__bool__`   s   zCheckThread.__bool__)r:   r;   r<   rH   rE   rL   Ú__classcell__r   r   rJ   r
   rC   W   s    rC   c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú	TestSpawnc                    sj   t  ¡ ‰dˆ_d}tjd|g‰ ‡ ‡fdd„tdƒD ƒ}|D ]}| ¡  q|D ]}| ¡  q&t|ƒs3J ‚dS )zK
        Concurrent calls to spawn should have consistent results.
        r   z2import os; assert os.environ["PATH"] == "expected"z-cc                    s   g | ]
}t ˆjˆ gd �‘qS ))ÚtargetÚargs)rC   Úspawn)Ú.0Ún©Úcommandr    r   r
   Ú
<listcomp>n   s    ÿz2TestSpawn.test_concurrent_safe.<locals>.<listcomp>éd   N)	r   r   Ú_pathsrG   Ú
executableÚrangeÚstartÚjoinÚall)r   Ú	inner_cmdÚthreadsÚthreadr   rT   r
   Útest_concurrent_safee   s   ÿ

zTestSpawn.test_concurrent_safec                 C   sx   ddl m} t ¡ }d|_dd„ }tj |jd|¡� | 	dg¡ W d  ƒ n1 s+w   Y  t
j d	¡dks:J ‚dS )
zy
        If CCompiler.spawn has been monkey-patched without support
        for an env, it should still execute.
        r   )Ú	ccompilerr   c                 S   s   t jd dks	J ‚dS )z A spawn without an env argument.ÚPATHr   N)r$   r%   )r   Úcmdr   r   r
   ÚCCompiler_spawn�   s   z@TestSpawn.test_concurrent_safe_fallback.<locals>.CCompiler_spawnrQ   zn/aNrc   )Ú	distutilsrb   r   r   rX   ÚmockÚpatchÚobjectÚ	CCompilerrQ   r$   r%   Úget)r   rb   r    re   r   r   r
   Útest_concurrent_safe_fallbackw   s   ÿz'TestSpawn.test_concurrent_safe_fallbackN)r:   r;   r<   ra   rl   r   r   r   r
   rN   d   s    rN   )r$   rG   r?   Ú	threadingÚunittest.mockrg   Údistutils.errorsr   Údistutils.testsr   Údistutils.utilr   r   Ú r   r=   r>   rB   ÚTempdirManagerr   ÚThreadrC   rN   r   r   r   r
   Ú<module>   s    F