£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>
B
    YI~dM                 @   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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d dS X d}d }|  xt D ]}yt 	| |\}}}W n tk
r   P Y nX |rT|t j
krTt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 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/python37/lib64/python3.7/distutils/_msvccompiler.py_find_vc2015   s0    
r!   c           
   C   s   dd l } tjdptjd}|s(dS y8t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|   dS X tj|ddd}tj|rd|fS dS )Nr   zProgramFiles(x86)ZProgramFiles)NNz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:   s&    
r2   c             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 found)NNzvcvarsall.batz%s cannot be found)r2   r!   r	   r   r   r   r-   isfile)	plat_spec_r   r   	vcvarsallr   r   r    _find_vcvarsall\   s    


r7   c          
   C   s   t drdd t j D S t| \}}|s6tdy&tjd|| tj	dj
ddd	}W n@ tjk
r } z t|j td
|jW d 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>p   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   )r8   )r9   r   r5   r:   r   r   r    r;      s   c             s   s   | ]}| d V  qdS )=N)	partition)r9   liner   r   r    	<genexpr>   s    z_get_vc_env.<locals>.<genexpr>)r   getenvr)   itemsr7   r   r+   r,   formatZSTDOUTdecoder/   r	   erroroutputcmd
splitlines)r4   r6   r5   outexcenvr   r   r    _get_vc_envn   s$    


rM   c             C   sN   |st dt j}x2|D ]*}t jt j|| }t j|r|S qW | S )Nr   )r   rB   splitpathsepr   r-   abspathr3   )Zexepathspfnr   r   r    	_find_exe   s    	
rT   Zx86Z	x86_amd64)win32z	win-amd64c            
       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.cxxz.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_runforcer   r   r    rW      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
|| _x2|ddt	j
D ]}|r| |t	j qW x2|ddt	j
D ]}|r| |t	j qW 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)r_   )r_   )r`   ra   rb   )r`   ra   rb   )%r
   PLAT_TO_VCVARSr   rD   tuplerM   r*   _pathsrN   r   rO   rT   cclinkerr^   rcmc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_ldflagsrY   )rZ   rX   r4   Zvc_envrQ   dirldflagsZldflags_debugr   r   r    
initialize   sX    




zMSVCCompiler.initializer]   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)r9   ext)rZ   r   r    r;     s    z1MSVCCompiler.object_filenames.<locals>.<dictcomp>c                s   i | ]} j |qS r   )res_extension)r9   rt   )rZ   r   r    r;     s    r]   c                s   t j| \}}r"t j|}n2t j|\}}|t jjt jjfrT|dd  }yt j| |  S  t	k
r   t
d| Y nX d S )N   zDon't know how to compile {})r   r   splitextbasename
splitdrive
startswithrl   altsepr-   LookupErrorr   rD   )rR   basert   r5   )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)rZ   Zsource_filenamesr   r   r   r   )r~   r   rZ   r   r    object_filenames  s
    zMSVCCompiler.object_filenamesc	             C   s  | j s|   | ||||||}	|	\}}
}}}|p6g }|d |rT|| j n|| j d}x|
D ]}y|| \}}W n tk
r   wlY nX |rtj	
|}|| jkrd| }nD|| jkrd| }d}n*|| jkrB|}d| }y| | jg| ||g  W ql tk
r< } zt|W d d }~X Y qlX qln|| jkrtj	|}tj	|}y\| | jd|d||g tj	tj	|\}}tj	||d	 }| | jd| |g W ql tk
r } zt|W d d }~X Y qlX qlntd
||| jg| | }|r$|d || |d|  || y| | W ql tk
r } zt|W d d }~X Y qlX qlW |
S )Nz/cFz/Tcz/TpTz/foz-hz-rz.rcz"Don't know how to compile {} to {}z/EHscz/Fo)rY   rr   Z_setup_compileappendextendrn   rm   KeyErrorr   r   rP   _c_extensions_cpp_extensionsr   spawnrh   r   r   r   dirnameri   rw   rx   r-   rD   rf   )rZ   Zsourcesr   ZmacrosZinclude_dirsr   extra_preargsextra_postargsZdependsZcompile_infoobjectsZpp_optsZbuildZcompile_optsZadd_cpp_optsobjsrcrt   Z	input_optZ
output_optmsgZh_dirZrc_dirr}   r5   Zrc_fileargsr   r   r    compile9  sn    








zMSVCCompiler.compilec       	   
   C   s   | j s|   | ||\}}| j||d}| ||r|d| g }|rJy,td| jd| | 	| jg|  W q t
k
r } zt|W d d }~X Y qX ntd| d S )N)r   z/OUT:zExecuting "%s" %s zskipping %s (up-to-date))rY   rr   _fix_object_argslibrary_filename
_need_linkr	   r   r^   r-   r   r   r   )	rZ   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|}| | y,td| jd	| | | jg|  W n, tk
r } zt|W d 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   )r9   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))rY   rr   r   Z_fix_lib_argswarnstrr   r   r   r-   r   ro   r   rw   rx   r   r   r   rP   Zmkpathr	   r   rg   r   r   r   )rZ   Ztarget_descr   r   r   Z	librariesZlibrary_dirsZruntime_library_dirsZexport_symbolsr   r   r   Z
build_tempr   Z
fixed_argsZlib_optsrq   Zexport_optsZld_argsZdll_nameZdll_extZimplib_filer   r   r   r    link  sL    



zMSVCCompiler.linkc          	      s4   t d}z| jt jd< t |S |t jd< X d S )Nr   )r   rB   re   r)   superr   )rZ   rH   Zold_path)	__class__r   r    r     s
    
zMSVCCompiler.spawnc             C   s   d| S )Nz	/LIBPATH:r   )rZ   rp   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   )rZ   rp   r   r   r    runtime_library_dir_option  s    z'MSVCCompiler.runtime_library_dir_optionc             C   s
   |  |S )N)r   )rZ   r^   r   r   r    library_option  s    zMSVCCompiler.library_optionc             C   s`   |r|d |g}n|g}xB|D ]6}x0|D ](}t j|| |}t j|r(|S q(W qW d S d S )NZ_d)r   r   r-   r   r3   )rZ   dirsr^   r   Z	try_namesrp   nameZlibfiler   r   r    find_library_file  s    

zMSVCCompiler.find_library_file)r   r   r   )N)r   r]   )NNNr   NNN)Nr   N)
NNNNNr   NNNN)r   )__name__
__module____qualname__Zcompiler_typeZexecutablesr   r   r   r   r   ru   rs   Zstatic_lib_extensionZshared_lib_extensionZstatic_lib_formatZshared_lib_formatZexe_extensionrW   rr   r   r   r   r   r   r   r   r   r   __classcell__r   r   )r   r    rV      sJ   


P 
 
[  
         
8rV   )N)r   Zshutilstatr+   r   Zdistutils.errorsr   r   r   r   r   Zdistutils.ccompilerr   r   Z	distutilsr	   Zdistutils.utilr
   	itertoolsr   r!   r2   r7   rM   rT   rc   rV   r   r   r   r    <module>   s"   "
