509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3

  \KT  ã               @   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„ Zdd„ Zddd„ZdddœZedgƒ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ü   yt jt jdt jt jB d�} W n tk
r<   tjdƒ dS X d}d }| �¤ xœtƒ D ]’}yt j	| |ƒ\}}}W n tk
r„   P Y nX |rT|t j
krTtjj|ƒrTytt|ƒƒ}W n ttfk
rÊ   wTY nX |dkrT||krT|| }}qTW W d Q R X ||fS )Nz'Software\Microsoft\VisualStudio\SxS\VC7)ÚaccesszVisual C++ is not registeredr   é   )NN)Ú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ÚvÚvc_dirZvtÚversion© r    ú//usr/lib64/python3.6/distutils/_msvccompiler.pyÚ_find_vc2015   s0    
r"   c                 sü   dd l ‰ dd l} d}d }g ‰‡ ‡fdd„}| j|d�}|jƒ  |jƒ  x†ˆD ]~\}}}}d|krLtjj|dddƒ}	tjj|	ƒs€qLytd	d
„ |j	dƒD ƒƒ}
W n t
tfk
r¶   wLY nX |
|krL|
|	 }}qLW y|d }W n tk
rò   d }Y nX ||fS )Nr   c                  s   ˆj ˆ jƒ ƒ d S )N)ÚextendÚfindallr    )Ú_distutils_findvsÚall_packagesr    r!   Ú_getallD   s    z_find_vc2017.<locals>._getall)Útargetz1Microsoft.VisualStudio.Component.VC.Tools.x86.x64ZVCZ	AuxiliaryZBuildc             s   s   | ]}t |ƒV  qd S )N)r   )Ú.0r   r    r    r!   ú	<genexpr>P   s    z_find_vc2017.<locals>.<genexpr>Ú.)r   )r%   Ú	threadingZThreadÚstartÚjoinr   r   r   ÚtupleÚsplitr   r   Ú
IndexError)r,   r   r   r'   ÚtÚnameZversion_strr   Zpackagesr   r   r    )r%   r&   r!   Ú_find_vc2017:   s2    
r4   c             C   s
  t ƒ \}}d }d| krdnd}|rztjj|ddddddd	ƒ}yd
d l}|j|dd�d }W n tttfk
rx   d }Y nX |s tƒ \}}|r tjj|d|dd	ƒ}|s²t	j
dƒ dS tjj|dƒ}tjj|ƒsÜt	j
d|ƒ dS | pîtjj|ƒ �rt	j
d|ƒ d }||fS )NÚamd64Zx64Úx86z..ZredistZMSVCz**zMicrosoft.VC141.CRTzvcruntime140.dllr   T)Ú	recursiveé   zMicrosoft.VC140.CRTz$No suitable Visual C++ version foundzvcvarsall.batz%s cannot be foundéÿÿÿÿ)NN)NN)r4   r   r   r.   ÚglobÚImportErrorr   ÚLookupErrorr"   r	   r   Úisfile)Ú	plat_specr   r   Ú	vcruntimeZvcruntime_platZvcredistr:   Ú	vcvarsallr    r    r!   Ú_find_vcvarsall[   s6    



rA   c             C   sÊ   t jdƒrdd„ t jjƒ D ƒS t| ƒ\}}|s6tdƒ‚y&tjdj|| ƒtj	d�j
ddd	�}W n@ tjk
rœ } z"tj|jƒ td
j|jƒƒ‚W Y d d }~X nX dd„ dd„ |jƒ D ƒD ƒ}|rÆ||d< |S )NZDISTUTILS_USE_SDKc             S   s   i | ]\}}||j ƒ “qS r    )Úlower)r)   r   Úvaluer    r    r!   ú
<dictcomp>   s   z_get_vc_env.<locals>.<dictcomp>zUnable to find vcvarsall.batzcmd /u /c "{}" {} && set)Ústderrzutf-16leÚreplace)ÚerrorszError executing {}c             S   s$   i | ]\}}}|r|r||j ƒ “qS r    )rB   )r)   r   Ú_rC   r    r    r!   rD   ’   s   c             s   s   | ]}|j d ƒV  qdS )ú=N)Ú	partition)r)   Úliner    r    r!   r*   •   s    z_get_vc_env.<locals>.<genexpr>Úpy_vcruntime_redist)r   ÚgetenvÚenvironÚitemsrA   r   Ú
subprocessZcheck_outputÚformatZSTDOUTÚdecodeZCalledProcessErrorr	   ÚerrorÚoutputÚcmdÚ
splitlines)r>   r@   r?   ÚoutÚexcÚenvr    r    r!   Ú_get_vc_env}   s(    


rZ   c             C   sN   |st jdƒjt jƒ}x2|D ]*}t jjt jj|ƒ| ƒ}t jj|ƒr|S qW | S )Nr   )r   rM   r0   Úpathsepr   r.   Úabspathr=   )ZexeÚpathsÚpÚfnr    r    r!   Ú	_find_exe�   s    	
r`   r6   Z	x86_amd64)Zwin32z	win-amd64zvcruntime140.dllc            
       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dd„ Z‡ fdd „Zd!d"„ Zd#d$„ Zd%d&„ Zd/d'd(„Z‡  ZS )0ÚMSVCCompilerZmsvcz.cz.ccz.cppz.cxxz.rcz.mcz.resz.objz.libz.dllz%s%sz.exer   c             C   s    t j| |||ƒ d | _d| _d S )NF)r   Ú__init__Ú	plat_nameÚinitialized)ÚselfÚverboseZdry_runZforcer    r    r!   rb   Û   s    zMSVCCompiler.__init__Nc             C   s>  |d krt ƒ }|tkr(tdjttƒƒƒ‚t| }t|ƒ}|sDtdƒ‚|jddƒ| _| jjt	j
ƒ}td|ƒ| _td|ƒ| _td|ƒ| _td|ƒ| _td	|ƒ| _td
|ƒ| _|jddƒ| _x2|jddƒjt	j
ƒD ]}|rÌ| j|jt	jƒƒ qÌW x6|jddƒjt	j
ƒD ]}|�r | j|jt	jƒƒ �q W d | _dddddg| _| jj| j�rJdndƒ ddddddg| _dddg}| j�s~|jd$ƒ 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.exerL   ÚincludeÚlibz/nologoz/Oxz/W3z/GLz/DNDEBUGz/MDz/MTz/Odz/MDdz/Ziz/D_DEBUGz/INCREMENTAL:NOz/LTCGú/nodefaultlib:libucrt.libúucrt.libz/DEBUG:FULLú/MANIFEST:EMBED,ID=1ú/DLLú/MANIFEST:EMBED,ID=2ú/MANIFESTUAC:NOFT)rj   rk   )rl   )rl   )rm   rn   ro   )rm   rn   ro   )(r
   ÚPLAT_TO_VCVARSr   rQ   r/   rZ   ÚgetÚ_pathsr0   r   r[   r`   ÚccÚlinkerri   ÚrcÚmcZmtÚ_vcruntime_redistZadd_include_dirÚrstripÚsepZadd_library_dirZpreprocess_optionsÚcompile_optionsÚappendÚcompile_options_debugr#   Zldflags_exeZldflags_exe_debugZldflags_sharedZldflags_shared_debugZldflags_staticZldflags_static_debugr   Z
EXECUTABLEZSHARED_OBJECTZSHARED_LIBRARYÚ_ldflagsrd   )re   rc   r>   Zvc_envr]   ÚdirÚldflagsZldflags_debugr    r    r!   Ú
initializeá   s`    





zMSVCCompiler.initializerg   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)re   r    r!   rD   8  s    z1MSVCCompiler.object_filenames.<locals>.<dictcomp>c                s   i | ]}ˆ j |“qS r    )Úres_extension)r)   r‚   )re   r    r!   rD   9  s    rg   c                s’   t jj| ƒ\}}ˆr"t jj|ƒ}n2t jj|ƒ\}}|jt jjt jjfƒrT|dd … }yt jjˆ|ˆ |  ƒS  t	k
rŒ   t
dj| ƒƒ‚Y nX d S )Nr8   zDon't know how to compile {})r   r   ÚsplitextÚbasenameÚ
splitdriveÚ
startswithry   Úaltsepr.   r<   r   rQ   )r^   Úbaser‚   rH   )Ú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)re   Zsource_filenamesrŒ   r‹   r�   r    )rŠ   r‹   re   rŒ   r!   Úobject_filenames3  s
    zMSVCCompiler.object_filenamesc	             C   sŠ  | j s| jƒ  | j||||||ƒ}	|	\}}
}}}|p6g }|jdƒ |rT|j| jƒ n|j| jƒ d}�x|
D �]}y|| \}}W n tk
r˜   wlY nX |rªtj	j
|ƒ}|| jkrÀd| }�nD|| jkrÚd| }d}�n*|| jk�rB|}d| }y| j| jg| ||g ƒ W ql tk
�r< } zt|ƒ‚W Y d d }~X qlX qlnÂ|| jk�rôtj	j|ƒ}tj	j|ƒ}y\| j| jd|d||gƒ tj	jtj	j|ƒƒ\}}tj	j||d	 ƒ}| j| jd| |gƒ W ql tk
�rî } zt|ƒ‚W Y d d }~X qlX qlntd
j||ƒƒ‚| jg| | }|�r$|jdƒ |j|ƒ |jd| ƒ |j|ƒ y| j|ƒ W ql tk
�r€ } zt|ƒ‚W Y d d }~X qlX qlW |
S )Nz/cFz/Tcz/TpTz/foz-hz-rz.rcz"Don't know how to compile {} to {}z/EHscz/Fo)rd   r€   Z_setup_compiler{   r#   r|   rz   ÚKeyErrorr   r   r\   Ú_c_extensionsÚ_cpp_extensionsr�   Úspawnru   r   r   r�   Údirnamerv   r„   r…   r.   rQ   rs   )re   Zsourcesr‹   ZmacrosZinclude_dirsr   Úextra_preargsÚextra_postargsZdependsZcompile_infoÚobjectsZpp_optsZbuildZcompile_optsZadd_cpp_optsÚobjÚsrcr‚   Z	input_optZ
output_optÚmsgZh_dirZrc_dirr‰   rH   Zrc_fileÚargsr    r    r!   ÚcompileT  sn    








zMSVCCompiler.compilec       	      C   s´   | j s| jƒ  | j||ƒ\}}| j||d�}| j||ƒr¤|d| g }|rJy,tjd| jdj|ƒƒ | j	| jg| ƒ W q° t
k
r  } zt|ƒ‚W Y d d }~X q°X ntjd|ƒ d S )N)r‹   z/OUT:zExecuting "%s" %sú zskipping %s (up-to-date))rd   r€   Ú_fix_object_argsÚlibrary_filenameÚ
_need_linkr	   r   ri   r.   r—   r   r   )	re   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| jƒ  | j||ƒ\}}| j|||ƒ}|\}}}|rL| jdt|ƒ ƒ t| |||ƒ}|d k	rptjj	||ƒ}| j
||ƒ�r²| j||	f }dd„ |p˜g D ƒ}|| | | d| g }tjj|d ƒ}|d k	�rtjjtjj|ƒƒ\}}tjj	|| j|ƒƒ}|jd| ƒ |
�r|
|d d…< |�r.|j|ƒ tjjtjj|ƒƒ}| j|ƒ y6tjd| jdj	|ƒƒ | j| jg| ƒ | j|ƒ W n, tk
�r® } zt|ƒ‚W Y d d }~X nX ntj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>z/OUT:r   z/IMPLIB:zExecuting "%s" %sr¡   zskipping %s (up-to-date))rd   r€   r¢   Z_fix_lib_argsÚwarnÚstrr   r   r   r.   r¤   r}   r˜   r„   r…   r£   r{   r#   r\   Zmkpathr	   r   rt   r—   Ú_copy_vcruntimer   r   )re   Ztarget_descr›   r¦   r‹   Z	librariesZlibrary_dirsZruntime_library_dirsZexport_symbolsr   r™   rš   Z
build_tempr¥   Z
fixed_argsZlib_optsr   Zexport_optsZld_argsZdll_nameZdll_extZimplib_filerž   r    r    r!   ÚlinkÈ  sN    



zMSVCCompiler.linkc             C   s`   | j }| stjj|ƒ rd S tjj|ƒjƒ tkr6d S tjd|ƒ t	j
||ƒ}tj|tjƒ d S )NzCopying "%s")rw   r   r   r=   r…   rB   Ú_BUNDLED_DLLSr	   r   ÚshutilÚcopyÚchmodÚstatÚS_IWRITE)re   r‹   r?   r    r    r!   r«     s    zMSVCCompiler._copy_vcruntimec                s4   t jdƒ}z| jt jd< tƒ j|ƒS |t jd< X d S )Nr   )r   rM   rr   rN   Úsuperr—   )re   rU   Zold_path)Ú	__class__r    r!   r—     s
    
zMSVCCompiler.spawnc             C   s   d| S )Nz	/LIBPATH:r    )re   r~   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   )re   r~   r    r    r!   Úruntime_library_dir_option)  s    z'MSVCCompiler.runtime_library_dir_optionc             C   s
   | j |ƒS )N)r£   )re   ri   r    r    r!   Úlibrary_option-  s    zMSVCCompiler.library_optionc             C   s`   |r|d |g}n|g}xB|D ]6}x0|D ](}t jj|| j|ƒƒ}t jj|ƒr(|S q(W qW d S d S )NZ_d)r   r   r.   r£   r=   )re   Údirsri   r   Z	try_namesr~   r3   Zlibfiler    r    r!   Úfind_library_file0  s    

zMSVCCompiler.find_library_file)r   r   r   )N)r   rg   )NNNr   NNN)Nr   N)
NNNNNr   NNNN)r   )Ú__name__Ú
__module__Ú__qualname__Zcompiler_typeZexecutablesr•   r–   r�   r�   rŽ   rƒ   r�   Zstatic_lib_extensionZshared_lib_extensionZstatic_lib_formatZshared_lib_formatZexe_extensionrb   r€   r“   r    r§   r¬   r«   r—   rµ   r¶   r·   r¹   Ú__classcell__r    r    )r´   r!   ra   ¼   sL   


T 
 
[  
         
9ra   )N)r   r®   r±   rP   r   Zdistutils.errorsr   r   r   r   r   Zdistutils.ccompilerr   r   Z	distutilsr	   Zdistutils.utilr
   Ú	itertoolsr   r"   r4   rA   rZ   r`   rp   Ú	frozensetr­   ra   r    r    r    r!   Ú<module>   s$   !" 

