
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ¡ê,aRN  ã                   @   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  qîY 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 |¡r¦d|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¡¡ qìd | _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 |r¨tj	 
|¡}|| jkr¾d| }�nD|| jkrØd| }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�ròt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 q°X 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„ |p˜g 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   #ü
ü