<!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>
U
    ifRN                     @   s   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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k
r>   td Y dS X d}d }|  t D ]}zt 	| |\}}}W n tk
r   Y  qY nX |rT|t j
krTtj|rTztt|}W n ttfk
r   Y qTY nX |dkrT||krT|| }}qTW 5 Q R X ||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/python38/lib64/python3.8/distutils/_msvccompiler.py_find_vc2015   s2    




r"   c               
   C   s   dd l } 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k
r~   Y dS X tj|ddd}tj|rd|fS dS )Nr   z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   )jsonr   environget
subprocesscheck_outputr   joinstripCalledProcessErrorr   UnicodeDecodeErrorr   )r)   rootr   r    r    r!   _find_vc2017:   s2    
    r3   x86Zx64ZarmZarm64)r4   	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)r3   r"   r	   r   r   r   r.   isfile)	plat_spec_r   r   	vcvarsallr    r    r!   _find_vcvarsallc   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 n@ tjk
r } z t|j td
|jW 5 d }~X Y nX dd dd | D D }|S )NZDISTUTILS_USE_SDKc                 S   s   i | ]\}}|  |qS r    lower).0r   valuer    r    r!   
<dictcomp>w   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   r:   r@   r    r    r!   rA      s
     c                 s   s   | ]}| d V  qdS )=N)	partition)r?   liner    r    r!   	<genexpr>   s     z_get_vc_env.<locals>.<genexpr>)r   getenvr*   itemsr<   r   r,   r-   formatZSTDOUTdecoder0   r	   erroroutputcmd
splitlines)r9   r;   r:   outexcenvr    r    r!   _get_vc_envu   s0    

 
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.   abspathr8   )Zexepathspfnr    r    r!   	_find_exe   s    	
r[   r5   r6   r7   )Zwin32z	win-amd64z	win-arm32z	win-arm64c                
       s   e Zd ZdZi ZdgZdddg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.cz.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 krt  }|tk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 | _ddddddg| _ddddddg| _dddg}ddddg}|d | _|d!| _|d"| _|d#| _|| _|| _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libz/nologoz/Oxz/W3z/GLz/DNDEBUGz/MDz/Odz/MDdz/Ziz/D_DEBUGz/INCREMENTAL:NOz/LTCGz/DEBUG:FULL/MANIFEST:EMBED,ID=1/DLL/MANIFEST:EMBED,ID=2/MANIFESTUAC:NOFT)re   )re   )rf   rg   rh   )rf   rg   rh   )%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_   r9   Zvc_envrX   dirldflagsZldflags_debugr    r    r!   
initialize   s                   



         zMSVCCompiler.initializerc   c                    sT   fddj D fddjj D  p4d fdd}tt||S )Nc                    s   i | ]}| j qS r    )obj_extensionr?   extra   r    r!   rA   &  s      z1MSVCCompiler.object_filenames.<locals>.<dictcomp>c                    s   i | ]}| j qS r    )res_extensionry   r{   r    r!   rA   '  s      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	k
r   t
d| Y nX d S )N   zDon't know how to compile {})r   r   splitextbasename
splitdrive
startswithrq   altsepr.   LookupErrorr   rJ   )rY   baserz   r:   )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k
r   Y qhY nX |rtj	
|}|| jkrd| }nD|| jkrd| }d}n*|| jkr@|}d| }z| | jg| ||g  W qh tk
r: } zt|W 5 d }~X Y qhX qhn|| jkrtj	|}tj	|}z\| | jd|d||g tj	tj	|\}}tj	||d	 }| | jd| |g W qh tk
r } zt|W 5 d }~X Y qhX qhntd
||| jg| | }|r"|d || |d|  || z| | W qh tk
r~ } zt|W 5 d }~X Y qhX 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   r:   Zrc_fileargsr    r    r!   compileB  sx    
  




 


zMSVCCompiler.compilec           	   
   C   s   | j s|   | ||\}}| j||d}| ||r|d| g }|rJz,td| jd| | 	| jg|  W q t
k
r } zt|W 5 d }~X Y qX 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 k	rptj	||}| 
||r| j||	f }dd |pg D }|| | | d| g }tj|d }|d k	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k
r } zt|W 5 d }~X Y nX 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>  s     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              	      s8   t d}z| jt jd< t |W S |t jd< X d S rT   )r   rH   r*   rk   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   r8   )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\      sd   


P  
"            
]   
          
Er\   )N)r   Zshutilstatr,   r   Zdistutils.errorsr   r   r   r   r   Zdistutils.ccompilerr   r   Z	distutilsr	   Zdistutils.utilr
   	itertoolsr   r"   r3   ZPLAT_SPEC_TO_RUNTIMEr<   rS   r[   ri   r\   r    r    r    r!   <module>   s2   #
