<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
a
    XC?h'N                     @   s   d dl Z d dlZd dlZd dlmZmZmZmZmZ d dl	m
Z
mZ d dlmZ d dlmZ d dlmZ dd Zd	d
 ZdddddZdd Zdd ZdddZdddddZG dd de
ZdS )    N)DistutilsExecErrorDistutilsPlatformErrorCompileErrorLibError	LinkError)	CCompilergen_lib_options)log)get_platform)countc                  C   s  zt jt jdt jt jB d} W n ty<   td Y dS 0 d}d }|  t D ]}zt 	| |\}}}W n ty   Y  qY n0 |rR|t j
krRtj|rRztt|}W n ttfy   Y qRY n0 |dkrR||krR|| }}qRW d    n1  s0    Y  ||fS )Nz'Software\Microsoft\VisualStudio\SxS\VC7)accesszVisual C++ is not registeredNNr      )winregZ	OpenKeyExHKEY_LOCAL_MACHINEZKEY_READZKEY_WOW64_32KEYOSErrorr	   debugr   Z	EnumValueZREG_SZospathisdirintfloat
ValueError	TypeError)keybest_versionbest_dirivZvc_dirZvtversion r    </opt/alt/python39/lib64/python3.9/distutils/_msvccompiler.py_find_vc2015   s2    




,r"   c               
   C   s   t jdpt jd} | s dS z8tjt j| dddddd	d
ddddg	ddd }W n tjt	t
fyt   Y dS 0 t j|ddd}t j|rd|fS dS )NzProgramFiles(x86)ZProgramFilesr   zMicrosoft Visual StudioZ	Installerzvswhere.exez-latestz-prereleasez	-requiresz1Microsoft.VisualStudio.Component.VC.Tools.x86.x64z	-propertyZinstallationPathz	-products*mbcsstrict)encodingerrorsZVCZ	AuxiliaryZBuild   )r   environget
subprocesscheck_outputr   joinstripCalledProcessErrorr   UnicodeDecodeErrorr   )rootr   r    r    r!   _find_vc20178   s(    
r2   x86Zx64ZarmZarm64)r3   	x86_amd64x86_arm	x86_arm64c                 C   s\   t  \}}|st \}}|s*td dS tj|d}tj|sTtd| dS |d fS )Nz$No suitable Visual C++ version foundr   zvcvarsall.batz%s cannot be found)r2   r"   r	   r   r   r   r-   isfile)	plat_spec_r   r   	vcvarsallr    r    r!   _find_vcvarsall_   s    


r;   c              
   C   s   t drdd t j D S t| \}}|s6tdz&tjd|| tj	dj
ddd	}W nB tjy } z(t|j td
|jW Y d }~n
d }~0 0 dd dd | D D }|S )NZDISTUTILS_USE_SDKc                 S   s   i | ]\}}|  |qS r    lower).0r   valuer    r    r!   
<dictcomp>s   s   z_get_vc_env.<locals>.<dictcomp>zUnable to find vcvarsall.batzcmd /u /c "{}" {} && set)stderrzutf-16lereplace)r'   zError executing {}c                 S   s$   i | ]\}}}|r|r|  |qS r    r<   )r>   r   r9   r?   r    r    r!   r@      s   c                 s   s   | ]}| d V  qdS )=N)	partition)r>   liner    r    r!   	<genexpr>       z_get_vc_env.<locals>.<genexpr>)r   getenvr)   itemsr;   r   r+   r,   formatZSTDOUTdecoder/   r	   erroroutputcmd
splitlines)r8   r:   r9   outexcenvr    r    r!   _get_vc_envq   s.    


rS   c                 C   sN   |st dt j}|D ].}t jt j|| }t j|r|  S q| S Nr   )r   rH   splitpathsepr   r-   abspathr7   )Zexepathspfnr    r    r!   	_find_exe   s    	
r[   r4   r5   r6   )Zwin32z	win-amd64z	win-arm32z	win-arm64c                
       s   e Zd ZdZi ZdgZg dZdgZdgZee e e Z	dZ
dZdZd	Zd
 ZZdZd%ddZd&ddZd'ddZd(ddZd)ddZd*ddZ fddZdd Zdd  Zd!d" Zd+d#d$Z  ZS ),MSVCCompilerZmsvcz.c)z.ccz.cppz.cxx.rcz.mcz.resz.objz.libz.dllz%s%sz.exer   c                 C   s    t | ||| d | _d| _d S )NF)r   __init__	plat_nameinitialized)selfverboseZdry_runZforcer    r    r!   r^      s    zMSVCCompiler.__init__Nc                 C   s
  |d u rt  }|tvr(tdttt| }t|}|sDtd|dd| _| jt	j
}td|| _td|| _td|| _td|| _td	|| _td
|| _|ddt	j
D ]}|r| |t	j q|ddt	j
D ]}|r| |t	j qd | _g d| _g d| _g d}g d}g |d| _g |d| _g |ddd| _g |ddd| _g || _g || _tj d f| jtj df| jtj df| jtj!d f| jtj!df| jtj!df| jtj"d f| jtj"df| jtj"df| ji	| _#d| _$d S )Nz--plat-name must be one of {}z7Unable to find a compatible Visual Studio installation.r    zcl.exezlink.exezlib.exezrc.exezmc.exezmt.exeZincludelib)/nologoz/Ox/W3z/GLz/DNDEBUGz/MD)re   z/Odz/MDdz/Zirf   z/D_DEBUG)re   /INCREMENTAL:NO/LTCG)re   rg   rh   z/DEBUG:FULLz/MANIFEST:EMBED,ID=1z/DLLz/MANIFEST:EMBED,ID=2z/MANIFESTUAC:NOFT)%r
   PLAT_TO_VCVARSr   rJ   tuplerS   r*   _pathsrU   r   rV   r[   cclinkerrd   rcmcZmtZadd_include_dirrstripsepZadd_library_dirZpreprocess_optionscompile_optionscompile_options_debugZldflags_exeZldflags_exe_debugZldflags_sharedZldflags_shared_debugZldflags_staticZldflags_static_debugr   Z
EXECUTABLEZSHARED_OBJECTZSHARED_LIBRARY_ldflagsr`   )ra   r_   r8   Zvc_envrX   dirldflagsZldflags_debugr    r    r!   
initialize   s\    



zMSVCCompiler.initializerc   c                    sX   i fddj D fddjj D  p8d fdd}tt||S )Nc                    s   i | ]}| j qS r    )obj_extensionr>   extra   r    r!   r@   "  rG   z1MSVCCompiler.object_filenames.<locals>.<dictcomp>c                    s   i | ]}| j qS r    )res_extensionry   r{   r    r!   r@   #  rG   rc   c                    s   t j| \}}r"t j|}n2t j|\}}|t jjt jjfrT|dd  }zt j| |  W S  t	y   t
d| Y n0 d S )N   zDon't know how to compile {})r   r   splitextbasename
splitdrive
startswithrq   altsepr-   LookupErrorr   rJ   )rY   baserz   r9   )ext_map
output_dir	strip_dirr    r!   make_out_path(  s    z4MSVCCompiler.object_filenames.<locals>.make_out_path)src_extensions_rc_extensions_mc_extensionslistmap)ra   Zsource_filenamesr   r   r   r    )r   r   ra   r   r!   object_filenames  s    zMSVCCompiler.object_filenamesc	                 C   s  | j s|   | ||||||}	|	\}}
}}}|p6g }|d |rT|| j n|| j d}|
D ]}z|| \}}W n ty   Y qhY n0 |rtj	
|}|| jv rd| }nH|| jv rd| }d}n.|| jv r@|}d| }z| | jg| ||g  W qh ty: } zt|W Y d }~qhd }~0 0 qhn|| jv rtj	|}tj	|}z\| | jd|d||g tj	tj	|\}}tj	||d	 }| | jd| |g W qh ty } zt|W Y d }~qhd }~0 0 qhntd
||| jg| | }|r$|d || |d|  || z| | W qh ty } zt|W Y d }~qhd }~0 0 qh|
S )Nz/cFz/Tcz/TpTz/foz-hz-rr]   z"Don't know how to compile {} to {}z/EHscz/Fo)r`   rw   Z_setup_compileappendextendrs   rr   KeyErrorr   r   rW   _c_extensions_cpp_extensionsr   spawnrn   r   r   r   dirnamero   r~   r   r-   rJ   rl   )ra   Zsourcesr   ZmacrosZinclude_dirsr   extra_preargsextra_postargsZdependsZcompile_infoobjectsZpp_optsZbuildZcompile_optsZadd_cpp_optsobjsrcrz   Z	input_optZ
output_optmsgZh_dirZrc_dirr   r9   Zrc_fileargsr    r    r!   compile>  sr    








 zMSVCCompiler.compilec           	   
   C   s   | j s|   | ||\}}| j||d}| ||r|d| g }|rJz,td| jd| | 	| jg|  W q t
y } zt|W Y d }~qd }~0 0 ntd| d S )N)r   /OUT:Executing "%s" %s skipping %s (up-to-date))r`   rw   _fix_object_argslibrary_filename
_need_linkr	   r   rd   r-   r   r   r   )	ra   r   Zoutput_libnamer   r   target_langoutput_filenameZlib_argsr   r    r    r!   create_static_lib  s     zMSVCCompiler.create_static_libc              
   C   s  | j s|   | ||\}}| |||}|\}}}|rL| dt|  t| |||}|d urptj	||}| 
||r| j||	f }dd |pg D }|| | | d| g }tj|d }|d urtjtj|\}}tj	|| |}|d|  |
r|
|d d< |r.|| tjtj|}| | z,td| jd	| | | jg|  W n. ty } zt|W Y d }~n
d }~0 0 ntd	| d S )
Nz5I don't know what to do with 'runtime_library_dirs': c                 S   s   g | ]}d | qS )z/EXPORT:r    )r>   Zsymr    r    r!   
<listcomp>  rG   z%MSVCCompiler.link.<locals>.<listcomp>r   r   z/IMPLIB:r   r   r   )r`   rw   r   Z_fix_lib_argswarnstrr   r   r   r-   r   rt   r   r~   r   r   r   r   rW   Zmkpathr	   r   rm   r   r   r   )ra   Ztarget_descr   r   r   Z	librariesZlibrary_dirsZruntime_library_dirsZexport_symbolsr   r   r   Z
build_tempr   Z
fixed_argsZlib_optsrv   Zexport_optsZld_argsZdll_nameZdll_extZimplib_filer   r    r    r!   link  s^    





 zMSVCCompiler.linkc              	      s@   t d}z$| jt jd< t |W |t jd< S |t jd< 0 d S rT   )r   rH   rk   r)   superr   )ra   rN   Zold_path	__class__r    r!   r     s    

zMSVCCompiler.spawnc                 C   s   d| S )Nz	/LIBPATH:r    ra   ru   r    r    r!   library_dir_option  s    zMSVCCompiler.library_dir_optionc                 C   s   t dd S )Nz:don't know how to set runtime library search path for MSVC)r   r   r    r    r!   runtime_library_dir_option  s    z'MSVCCompiler.runtime_library_dir_optionc                 C   s
   |  |S )N)r   )ra   rd   r    r    r!   library_option
  s    zMSVCCompiler.library_optionc                 C   s\   |r|d |g}n|g}|D ]:}|D ]0}t j|| |}t j|r$|    S q$qd S )NZ_d)r   r   r-   r   r7   )ra   dirsrd   r   Z	try_namesru   nameZlibfiler    r    r!   find_library_file  s    zMSVCCompiler.find_library_file)r   r   r   )N)r   rc   )NNNr   NNN)Nr   N)
NNNNNr   NNNN)r   )__name__
__module____qualname__Zcompiler_typeZexecutablesr   r   r   r   r   r|   rx   Zstatic_lib_extensionZshared_lib_extensionZstatic_lib_formatZshared_lib_formatZexe_extensionr^   rw   r   r   r   r   r   r   r   r   r   __classcell__r    r    r   r!   r\      sZ   

P  
"  
]   
          
Er\   )N)r   r+   r   Zdistutils.errorsr   r   r   r   r   Zdistutils.ccompilerr   r   Z	distutilsr	   Zdistutils.utilr
   	itertoolsr   r"   r2   ZPLAT_SPEC_TO_RUNTIMEr;   rS   r[   ri   r\   r    r    r    r!   <module>   s.   !
