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

  \”w  ã               @   sP  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mZ d dlmZ d dlmZ d dlZejZejZejZejZejejejejfZej dko®ej!d%kZ"e"rÂd	Z#d
Z$dZ%ndZ#dZ$dZ%ddddœZ&G dd„ dƒZ'G dd„ dƒZ(dd„ Z)dd„ Z*dd„ Z+dd„ Z,d&dd „Z-e)ƒ Z.e.d!k �r<ed"e. ƒ‚G d#d$„ d$eƒZ/dS )'é    N)ÚDistutilsExecErrorÚDistutilsPlatformErrorÚCompileErrorÚLibErrorÚ	LinkError)Ú	CCompilerÚgen_preprocess_optionsÚgen_lib_options)Úlog)Úget_platformÚwin32é   é    z1Software\Wow6432Node\Microsoft\VisualStudio\%0.1fz5Software\Wow6432Node\Microsoft\Microsoft SDKs\Windowsz,Software\Wow6432Node\Microsoft\.NETFrameworkz%Software\Microsoft\VisualStudio\%0.1fz)Software\Microsoft\Microsoft SDKs\Windowsz Software\Microsoft\.NETFrameworkÚx86Úamd64Zia64)r   z	win-amd64zwin-ia64c               @   sL   e Zd Zdd„ ZeeƒZdd„ ZeeƒZdd„ ZeeƒZdd„ ZeeƒZd	S )
ÚRegc             C   s:   x,t D ]$}| j||ƒ}|r||kr|| S qW t|ƒ‚d S )N)ÚHKEYSÚread_valuesÚKeyError)ÚclsÚpathÚkeyÚbaseÚd© r   ú//usr/lib64/python3.6/distutils/msvc9compiler.pyÚ	get_valueA   s
    
zReg.get_valuec             C   sn   yt ||ƒ}W n tk
r"   d S X g }d}x<yt||ƒ}W n tk
rR   P Y nX |j|ƒ |d7 }q.W |S )Nr   é   )ÚRegOpenKeyExÚRegErrorÚ
RegEnumKeyÚappend)r   r   r   ÚhandleÚLÚiÚkr   r   r   Ú	read_keysI   s    
zReg.read_keysc       	      C   s†   yt ||ƒ}W n tk
r"   d S X i }d}xTyt||ƒ\}}}W n tk
rX   P Y nX |jƒ }| j|ƒ|| j|ƒ< |d7 }q.W |S )Nr   r   )r   r   ÚRegEnumValueÚlowerÚconvert_mbcs)	r   r   r   r"   r   r$   ÚnameÚvalueÚtyper   r   r   r   [   s    zReg.read_valuesc             C   s:   t | dd ƒ}|d k	r6y|dƒ} W n tk
r4   Y nX | S )NÚdecodeÚmbcs)ÚgetattrÚUnicodeError)ÚsZdecr   r   r   r)   q   s    zReg.convert_mbcsN)	Ú__name__Ú
__module__Ú__qualname__r   Úclassmethodr&   r   r)   Ústaticmethodr   r   r   r   r   =   s   r   c               @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚMacroExpanderc             C   s   i | _ t| | _| j|ƒ d S )N)ÚmacrosÚVS_BASEÚvsbaseÚload_macros)ÚselfÚversionr   r   r   Ú__init__}   s    
zMacroExpander.__init__c             C   s   t j||ƒ| jd| < d S )Nz$(%s))r   r   r8   )r<   Zmacror   r   r   r   r   Ú	set_macro‚   s    zMacroExpander.set_macroc             C   s  | j d| jd dƒ | j d| jd dƒ | j dtdƒ y$|dkrP| j d	td
ƒ ntd
ƒ‚W n tk
rv   tdƒ‚Y nX |dkr | j d| jdƒ | j dtdƒ ndd}x^tD ]V}yt||ƒ}W n tk
rÒ   wªY nX t	|dƒ}t
j|d||f ƒ}|d | jd< qªW d S )NZVCInstallDirz	\Setup\VCÚ
productdirZVSInstallDirz	\Setup\VSZFrameworkDirZinstallrootg       @ZFrameworkSDKDirzsdkinstallrootv2.0a  Python was built with Visual Studio 2008;
extensions must be built with a compiler than can generate compatible binaries.
Visual Studio 2008 was not found on this system. If you have Cygwin installed,
you can try compiling with MingW32, by passing "-c mingw32" to setup.py.g      "@ZFrameworkVersionzclr versionZWindowsSdkDirZcurrentinstallfolderz.Software\Microsoft\NET Framework Setup\Productr   z%s\%sr=   z$(FrameworkVersion))r?   r:   ÚNET_BASEr   r   ÚWINSDK_BASEr   r   r   r    r   r   r8   )r<   r=   Úpr   Úhr   r   r   r   r   r;   …   s.    

zMacroExpander.load_macrosc             C   s(   x"| j jƒ D ]\}}|j||ƒ}qW |S )N)r8   ÚitemsÚreplace)r<   r1   r%   Úvr   r   r   Úsub¤   s    zMacroExpander.subN)r2   r3   r4   r>   r?   r;   rH   r   r   r   r   r7   {   s   r7   c              C   sš   d} t jj| ƒ}|d
krdS |t| ƒ }t j|d … jddƒ\}}t|d d… ƒd }|dkrf|d7 }t|dd… ƒd }|dkr†d	}|dkr–|| S d S )NzMSC v.r   é   ú r   é   é   g      $@r   éÿÿÿÿéþÿÿÿ)Úsysr=   ÚfindÚlenÚsplitÚint)Úprefixr$   r1   ÚrestZmajorVersionZminorVersionr   r   r   Úget_build_version©   s    rV   c             C   s4   g }x*| D ]"}t jj|ƒ}||kr
|j|ƒ q
W |S )N)Úosr   Únormpathr!   )ÚpathsZreduced_pathsrC   Znpr   r   r   Únormalize_and_reduce_pathsÂ   s    
rZ   c             C   s@   | j tjƒ}g }x|D ]}||kr|j|ƒ qW tjj|ƒ}|S )N)rR   rW   Úpathsepr!   Újoin)ZvariableZoldListZnewListr$   ZnewVariabler   r   r   ÚremoveDuplicatesÐ   s    
r]   c             C   s  t |  }ytjd| dƒ}W n" tk
r>   tjdƒ d }Y nX | sTtjj|ƒ rÊd|  }tj	j
|d ƒ}|r¼tjj|ƒr¼tjj|tjtjdƒ}tjj|ƒ}tjj|ƒsÊtjd| ƒ d S ntjd| ƒ |sÜtjdƒ d S tjj|d	ƒ}tjj|ƒrú|S tjd
ƒ d S )Nz%s\Setup\VCr@   z%Unable to find productdir in registryzVS%0.f0COMNTOOLSZVCz%s is not a valid directoryz Env var %s is not set or invalidzNo productdir foundzvcvarsall.batzUnable to find vcvarsall.bat)r9   r   r   r   r
   ÚdebugrW   r   ÚisdirÚenvironÚgetr\   ÚpardirÚabspathÚisfile)r=   r:   r@   ZtoolskeyZtoolsdirÚ	vcvarsallr   r   r   Úfind_vcvarsallÛ   s2    





rf   c             C   s8  t | ƒ}tdƒ}i }|d kr$tdƒ‚tjd|| ƒ tjd||f tjtjd�}z¨|jƒ \}}|j	ƒ d	krvt|j
d
ƒƒ‚|j
d
ƒ}xr|jdƒD ]d}tj|ƒ}d|kr¤qŒ|jƒ }|jddƒ\}	}
|	jƒ }	|	|krŒ|
jtjƒrä|
d d… }
t|
ƒ||	< qŒW W d |jjƒ  |jjƒ  X t|ƒt|ƒk�r4ttt|jƒ ƒƒƒ‚|S )NÚincludeÚlibÚlibpathr   zUnable to find vcvarsall.batz'Calling 'vcvarsall.bat %s' (version=%s)z"%s" %s & set)ÚstdoutÚstderrr   r.   Ú
ú=r   )rg   rh   ri   r   rM   )rf   Úsetr   r
   r^   Ú
subprocessÚPopenÚPIPEZcommunicateÚwaitr-   rR   r   r)   Ústripr(   ÚendswithrW   r[   r]   rj   Úcloserk   rQ   Ú
ValueErrorÚstrÚlistÚkeys)r=   Zarchre   ZinterestingÚresultÚpopenrj   rk   Úliner   r+   r   r   r   Úquery_vcvarsallþ   s<    



r}   g       @z(VC %0.1f is not supported by this modulec            
   @   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d0dd„Zd1dd„Zd2dd„Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd3d)d*„Zd+d,„ ZdS )4ÚMSVCCompilerZmsvcz.cz.ccz.cppz.cxxz.rcz.mcz.resz.objz.libz.dllz%s%sz.exer   c             C   s8   t j| |||ƒ t| _d| _g | _d | _d | _d| _d S )NzSoftware\Microsoft\VisualStudioF)	r   r>   ÚVERSIONÚ_MSVCCompiler__versionZ_MSVCCompiler__rootÚ_MSVCCompiler__pathsÚ	plat_nameÚ_MSVCCompiler__archÚinitialized)r<   ÚverboseZdry_runZforcer   r   r   r>   J  s    zMSVCCompiler.__init__Nc             C   s  |d krt ƒ }d$}||kr(td|f ƒ‚dtjkrfdtjkrf| jdƒrfd| _d| _d	| _d
| _d| _	nÂ|t ƒ ksx|dkr‚t
| }nt
t ƒ  d t
|  }tt|ƒ}|d jtjƒ| _|d tjd< |d tjd< t| jƒdkrìtd| j ƒ‚| jdƒ| _| jdƒ| _| jd	ƒ| _| jd
ƒ| _| jdƒ| _	y,x&tjd jdƒD ]}| jj|ƒ �q<W W n tk
�rj   Y nX t| jƒ| _dj| jƒtjd< d | _| jdk�rÀdddddg| _ddddddg| _n&ddddddg| _dddddddg| _dddg| _| jd k�rddd!d"g| _dg| _d#| _d S )%Nr   ú	win-amd64úwin-ia64z--plat-name must be one of %sZDISTUTILS_USE_SDKZMSSdkzcl.exezlink.exezlib.exezrc.exezmc.exeÚ_r   rh   rg   r   zxPython was built with %s, and extensions need to be built with the same version of the compiler, but it isn't installed.ú;r   z/nologoz/Oxz/MDz/W3z/DNDEBUGz/Odz/MDdz/Z7z/D_DEBUGz/GS-z/DLLz/INCREMENTAL:NOé   z/INCREMENTAL:noz/DEBUGT)r   r†   r‡   )r   r   rW   r`   Úfind_exeÚccÚlinkerrh   ÚrcÚmcÚPLAT_TO_VCVARSr}   r   rR   r[   r�   rQ   Z_MSVCCompiler__productr!   r   rZ   r\   Zpreprocess_optionsrƒ   Úcompile_optionsÚcompile_options_debugÚldflags_sharedr€   Úldflags_shared_debugZldflags_staticr„   )r<   r‚   Zok_platsZ	plat_specZvc_envrC   r   r   r   Ú
initializeU  sd    







zMSVCCompiler.initializeÚ c             C   sâ   |d krd}g }xÌ|D ]Ä}t jj|ƒ\}}t jj|ƒd }|t jj|ƒd … }|| jkrdtd| ƒ‚|rtt jj|ƒ}|| jkrš|j	t jj
||| j ƒƒ q|| jkrÀ|j	t jj
||| j ƒƒ q|j	t jj
||| j ƒƒ qW |S )Nr–   r   zDon't know how to compile %s)rW   r   ÚsplitextÚ
splitdriveÚisabsÚsrc_extensionsr   ÚbasenameÚ_rc_extensionsr!   r\   Úres_extensionÚ_mc_extensionsÚobj_extension)r<   Zsource_filenamesZ	strip_dirÚ
output_dirZ	obj_namesZsrc_namer   Úextr   r   r   Úobject_filenames«  s(     



zMSVCCompiler.object_filenamesc	             C   st  | j s| jƒ  | j||||||ƒ}	|	\}}
}}}|p6g }|jdƒ |rT|j| jƒ n|j| jƒ �x|
D �]}y|| \}}W n tk
r”   whY nX |r¦tj	j
|ƒ}|| jkr¼d| }�nT|| jkrÒd| }�n>|| jk�r>|}d| }y"| j| jg| |g |g ƒ W qh tk
�r8 } zt|ƒ‚W Y d d }~X qhX qhnÒ|| jk�r tj	j|ƒ}tj	j|ƒ}yl| j| jgd|d|g |g ƒ tj	jtj	j|ƒƒ\}}tj	j||d ƒ}| j| jgd| g |g ƒ W qh tk
�rú } zt|ƒ‚W Y d d }~X qhX qhntd||f ƒ‚d	| }y&| j| jg| | ||g | ƒ W qh tk
�rj } zt|ƒ‚W Y d d }~X qhX qhW |
S )
Nz/cz/Tcz/Tpz/foz-hz-rz.rcz"Don't know how to compile %s to %sz/Fo)r„   r•   Z_setup_compiler!   Úextendr’   r‘   r   rW   r   rc   Ú_c_extensionsÚ_cpp_extensionsrœ   ÚspawnrŽ   r   r   rž   Údirnamer�   r—   r›   r\   rŒ   )r<   Zsourcesr    r8   Zinclude_dirsr^   Úextra_preargsÚextra_postargsZdependsZcompile_infoÚobjectsZpp_optsZbuildZcompile_optsÚobjÚsrcr¡   Z	input_optZ
output_optÚmsgZh_dirZrc_dirr   rˆ   Zrc_filer   r   r   ÚcompileÊ  sj    




zMSVCCompiler.compilec       	      C   sž   | j s| jƒ  | j||ƒ\}}| j||d�}| j||ƒrŽ|d| g }|rJy| 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skipping %s (up-to-date))r„   r•   Ú_fix_object_argsÚlibrary_filenameÚ
_need_linkr¦   rh   r   r   r
   r^   )	r<   rª   Zoutput_libnamer    r^   Útarget_langÚoutput_filenameZlib_argsr­   r   r   r   Úcreate_static_lib  s    zMSVCCompiler.create_static_libc             C   sX  | j s| jƒ  | j||ƒ\}}| j|||ƒ}|\}}}|rL| jdt|ƒ ƒ t| |||ƒ}|d k	rptjj	||ƒ}| j
||ƒ�rH|tjkr¬|	rœ| jdd … }q¾| jdd … }n|	r¸| j}n| j}g }x|pÊg D ]}|jd| ƒ qÌW || | | d| g }tjj|d ƒ}|d k	�rPtjjtjj|ƒƒ\}}tjj	|| j|ƒƒ}|jd| ƒ | j|||ƒ |
�rp|
|d d…< |�r€|j|ƒ | jtjj|ƒƒ y| j| jg| ƒ W n, tk
�rÔ } zt|ƒ‚W Y d d }~X nX | j||ƒ}|d k	�rT|\}}d||f }y| jdd	d
||gƒ W n, tk
�rD } 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': r   z/EXPORT:z/OUT:r   z/IMPLIB:z-outputresource:%s;%szmt.exez-nologoz	-manifestzskipping %s (up-to-date))r„   r•   r¯   Z_fix_lib_argsÚwarnrw   r	   rW   r   r\   r±   r   Ú
EXECUTABLEr”   r“   r!   r§   r—   r›   r°   Úmanifest_setup_ldargsr£   Zmkpathr¦   r�   r   r   Úmanifest_get_embed_infor
   r^   )r<   Útarget_descrª   r³   r    Z	librariesZlibrary_dirsZruntime_library_dirsZexport_symbolsr^   r¨   r©   Ú
build_tempr²   Z
fixed_argsZlib_optsZldflagsZexport_optsZsymÚld_argsZdll_nameZdll_extZimplib_filer­   ZmfinfoZ
mffilenameÚmfidZout_argr   r   r   Úlink8  sl    





zMSVCCompiler.linkc             C   s,   t jj|t jj|ƒd ƒ}|jd| ƒ d S )Nz	.manifestz/MANIFESTFILE:)rW   r   r\   r›   r!   )r<   r³   rº   r»   Útemp_manifestr   r   r   r·   —  s    z"MSVCCompiler.manifest_setup_ldargsc             C   s`   x,|D ] }|j dƒr|jddƒd }P qW d S |tjkr>d}nd}| j|ƒ}|d krXd S ||fS )Nz/MANIFESTFILE:ú:r   r   )Ú
startswithrR   r   r¶   Ú_remove_visual_c_ref)r<   r¹   r»   Úargr¾   r¼   r   r   r   r¸   £  s    



z$MSVCCompiler.manifest_get_embed_infoc             C   s²   y˜t |ƒ}z|jƒ }W d |jƒ  X tjdtjƒ}tj|d|ƒ}d}tj|d|ƒ}tjdtjƒ}tj||ƒd krrd S t |dƒ}z|j|ƒ |S |jƒ  X W n t	k
r¬   Y nX d S )NzU<assemblyIdentity.*?name=("|')Microsoft\.VC\d{2}\.CRT("|').*?(/>|</assemblyIdentity>)r–   z*<dependentAssembly>\s*</dependentAssembly>zI<assemblyIdentity.*?name=(?:"|')(.+?)(?:"|').*?(?:/>|</assemblyIdentity>)Úw)
ÚopenÚreadru   Úrer®   ÚDOTALLrH   ÚsearchÚwriteÚOSError)r<   Zmanifest_fileZ
manifest_fZmanifest_bufÚpatternr   r   r   rÁ   »  s.    	


z!MSVCCompiler._remove_visual_c_refc             C   s   d| S )Nz	/LIBPATH:r   )r<   Údirr   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   r   Úruntime_library_dir_optioné  s    z'MSVCCompiler.runtime_library_dir_optionc             C   s
   | j |ƒS )N)r°   )r<   rh   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)rW   r   r\   r°   Úexists)r<   Údirsrh   r^   Z	try_namesrÌ   r*   Zlibfiler   r   r   Úfind_library_fileñ  s    

zMSVCCompiler.find_library_filec             C   sz   x4| j D ]*}tjjtjj|ƒ|ƒ}tjj|ƒr|S qW x>tjd jdƒD ]*}tjjtjj|ƒ|ƒ}tjj|ƒrH|S qHW |S )NZPathr‰   )r�   rW   r   r\   rc   rd   r`   rR   )r<   ZexerC   Úfnr   r   r   r‹     s    	zMSVCCompiler.find_exe)r   r   r   )N)r   r–   )NNNr   NNN)Nr   N)
NNNNNr   NNNN)r   )r2   r3   r4   Zcompiler_typeZexecutablesr¤   r¥   rœ   rž   rš   r�   rŸ   Zstatic_lib_extensionZshared_lib_extensionZstatic_lib_formatZshared_lib_formatZexe_extensionr>   r•   r¢   r®   r´   r½   r·   r¸   rÁ   rÍ   rÎ   rÏ   rÒ   r‹   r   r   r   r   r~   ,  sP   


X 
 
V  
         
R+
r~   l        )r   )0rW   ro   rO   rÆ   Zdistutils.errorsr   r   r   r   r   Zdistutils.ccompilerr   r   r	   Z	distutilsr
   Zdistutils.utilr   ÚwinregZ	OpenKeyExr   ZEnumKeyr    Z	EnumValuer'   Úerrorr   Z
HKEY_USERSÚHKEY_CURRENT_USERÚHKEY_LOCAL_MACHINEZHKEY_CLASSES_ROOTr   ÚplatformÚmaxsizeZNATIVE_WIN64r9   rB   rA   r�   r   r7   rV   rZ   r]   rf   r}   r   r~   r   r   r   r   Ú<module>   sL   >.#
)
