
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ¡ê,a/w  ã                   @   sN  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œ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Úwin32l        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Úx86Zamd64©r   z	win-amd64c                   @   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:   t D ](}|  ||¡}|r||kr||   S qt|ƒ‚d S ©N)ÚHKEYSÚread_valuesÚKeyError)ÚclsÚpathÚkeyÚbaseÚd© r   ú</opt/alt/python38/lib64/python3.8/distutils/msvc9compiler.pyÚ	get_value@   s
    zReg.get_valuec                 C   sn   zt ||ƒ}W n tk
r$   Y d S X g }d}zt||ƒ}W n tk
rT   Y qjY nX | |¡ |d7 }q.|S ©Nr   é   )ÚRegOpenKeyExÚRegErrorÚ
RegEnumKeyÚappend)r   r   r   ÚhandleÚLÚiÚkr   r   r   Ú	read_keysH   s    


zReg.read_keysc           	      C   s†   zt ||ƒ}W n tk
r$   Y d S X i }d}zt||ƒ\}}}W n tk
rZ   Y q‚Y nX | ¡ }|  |¡||  |¡< |d7 }q.|S r   )r   r   ÚRegEnumValueÚlowerÚconvert_mbcs)	r   r   r   r"   r   r$   ÚnameÚvalueÚtyper   r   r   r   Z   s    

zReg.read_valuesc                 C   s:   t | dd ƒ}|d k	r6z|dƒ} W n tk
r4   Y nX | S )NÚdecodeÚmbcs)ÚgetattrÚUnicodeError)ÚsZdecr   r   r   r)   p   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| | _|  |¡ d S r   )ÚmacrosÚVS_BASEÚvsbaseÚload_macros)ÚselfÚversionr   r   r   Ú__init__|   s    
zMacroExpander.__init__c                 C   s   t  ||¡| 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  |   d| jd d¡ |   d| jd d¡ |   dtd¡ z$|dkrP|   d	td
¡ ntd
ƒ‚W n tk
rv   tdƒ‚Y nX |dkr |   d| jd¡ |   dtd¡ nbd}tD ]X}zt||ƒ}W n tk
rÒ   Y q¨Y nX t	|dƒ}t
 |d||f ¡}|d | jd< q¨d S )NZVCInstallDirz	\Setup\VCÚ
productdirZVSInstallDirz	\Setup\VSZFrameworkDirZinstallrootç       @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;   „   s2    ÿÿ


zMacroExpander.load_macrosc                 C   s$   | j  ¡ D ]\}}| ||¡}q
|S r   )r8   ÚitemsÚreplace)r<   r1   r%   Úvr   r   r   Úsub£   s    zMacroExpander.subN)r2   r3   r4   r>   r?   r;   rI   r   r   r   r   r7   z   s   r7   c                  C   sš   d} t j | ¡}|dkrdS |t| ƒ }t j|d …  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   éþÿÿÿé   é   é   g      $@r   )Úsysr=   ÚfindÚlenÚsplitÚint)Úprefixr$   r1   ÚrestZmajorVersionZminorVersionr   r   r   Úget_build_version¨   s    rX   c                 C   s0   g }| D ]"}t j |¡}||kr| |¡ q|S r   )Úosr   Únormpathr!   )ÚpathsZreduced_pathsrD   Znpr   r   r   Únormalize_and_reduce_pathsÁ   s    r\   c                 C   s<   |   tj¡}g }|D ]}||kr| |¡ qtj |¡}|S r   )rT   rY   Úpathsepr!   Újoin)ZvariableZoldListZnewListr$   ZnewVariabler   r   r   ÚremoveDuplicatesÏ   s    r_   c                 C   s  t |  }zt d| d¡}W n" tk
r>   t d¡ d }Y nX |rPtj |¡sÆd|  }tj	 
|d ¡}|r¸tj |¡r¸tj |tjtjd¡}tj |¡}tj |¡sÆt d| ¡ d S nt d| ¡ |sØt d¡ d S tj |d	¡}tj |¡rö|S t 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.batúUnable to find vcvarsall.bat)r9   r   r   r   r
   ÚdebugrY   r   ÚisdirÚenvironÚgetr^   ÚpardirÚabspathÚisfile)r=   r:   r@   ZtoolskeyZtoolsdirÚ	vcvarsallr   r   r   Úfind_vcvarsallÚ   s4    
ÿ



ri   c                 C   s8  t | ƒ}ddddh}i }|d kr(tdƒ‚t d|| ¡ tjd||f tjtjd�}z¤| 
¡ \}}| ¡ d	krzt| d
¡ƒ‚| d
¡}| d¡D ]d}t |¡}d|kr¦qŽ| ¡ }| dd¡\}	}
|	 ¡ }	|	|krŽ|
 tj¡ræ|
d d… }
t|
ƒ||	< qŽW 5 |j ¡  |j	 ¡  X t|ƒt|ƒk�r4ttt| ¡ ƒƒƒ‚|S )NÚincludeÚlibZlibpathr   r`   z'Calling 'vcvarsall.bat %s' (version=%s)z"%s" %s & set)ÚstdoutÚstderrr   r.   Ú
ú=r   rJ   )ri   r   r
   ra   Ú
subprocessÚPopenÚPIPErl   Úcloserm   ZcommunicateÚwaitr-   rT   r   r)   Ústripr(   ÚendswithrY   r]   r_   rS   Ú
ValueErrorÚstrÚlistÚkeys)r=   Zarchrh   ZinterestingÚresultÚpopenrl   rm   Úliner   r+   r   r   r   Úquery_vcvarsallý   s>    þ


r~   rA   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.cxxú.rcz.mcz.resz.objz.libz.dllz%s%sz.exer   c                 C   s8   t  | |||¡ 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>   I  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|  d¡rfd| _d| _d| _d| _d	| _	nÂ|t ƒ ksx|d
kr‚t
| }nt
t ƒ  d t
|  }tt|ƒ}|d  tj¡| _|d tjd< |d tjd< t| jƒdkrìtd| j ƒ‚|  d¡| _|  d¡| _|  d¡| _|  d¡| _|  d	¡| _	z(tjd  d¡D ]}| j |¡ �q:W n tk
�rf   Y nX t| jƒ| _d | 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   z--plat-name must be one of %sZDISTUTILS_USE_SDKZMSSdkzcl.exezlink.exezlib.exezrc.exezmc.exer   Ú_r   rk   rj   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   rY   rc   Úfind_exeÚccÚlinkerrk   ÚrcÚmcÚPLAT_TO_VCVARSr~   r�   rT   r]   rƒ   rS   Z_MSVCCompiler__productr!   r   r\   r^   Zpreprocess_optionsr…   Úcompile_optionsÚcompile_options_debugÚldflags_sharedr‚   Úldflags_shared_debugZldflags_staticr†   )r<   r„   Zok_platsZ	plat_specZvc_envrD   r   r   r   Ú
initializeT  s~    ÿ
ÿ
ýÿ ÿ
ÿ
 ÿ   ÿzMSVCCompiler.initializeÚ c                 C   sÞ   |d krd}g }|D ]Ä}t j |¡\}}t j |¡d }|t j |¡d … }|| jkrbtd| ƒ‚|rrt j |¡}|| jkr˜| 	t j 
||| j ¡¡ q|| jkr¾| 	t j 
||| j ¡¡ q| 	t j 
||| j ¡¡ q|S )Nr–   r   zDon't know how to compile %s)rY   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   sp  | j s|  ¡  |  ||||||¡}	|	\}}
}}}|p6g }| d¡ |rT| | j¡ n| | j¡ |
D �]}z|| \}}W n tk
r’   Y qdY nX |r¤tj	 
|¡}|| jkrºd| }�nT|| jkrÐd| }�n>|| jk�r<|}d| }z"|  | jg| |g |g ¡ W qd tk
�r6 } zt|ƒ‚W 5 d }~X Y qdX qdnÒ|| jk�rþtj	 |¡}tj	 |¡}zl|  | jgd|d|g |g ¡ tj	 tj	 |¡¡\}}tj	 ||d ¡}|  | jgd| g |g ¡ W qd tk
�rø } zt|ƒ‚W 5 d }~X Y qdX qdntd||f ƒ‚d	| }z&|  | jg| | ||g | ¡ W qd tk
�rh } zt|ƒ‚W 5 d }~X Y qdX qd|
S )
Nz/cz/Tcz/Tpz/foz-hz-rr€   z"Don't know how to compile %s to %sz/Fo)r†   r•   Z_setup_compiler!   Úextendr’   r‘   r   rY   r   rf   Ú_c_extensionsÚ_cpp_extensionsrœ   ÚspawnrŽ   r   r   rž   Údirnamer�   r—   r›   r^   rŒ   )r<   Zsourcesr    r8   Zinclude_dirsra   Ú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È  sˆ    
  ÿ




ÿÿ


ÿÿ
ÿÿ
ÿÿþ
zMSVCCompiler.compilec           	   
   C   sž   | j s|  ¡  |  ||¡\}}| j||d�}|  ||¡rŽ|d| g }|rJz|  | jg| ¡ W qš tk
rŠ } zt|ƒ‚W 5 d }~X Y qšX nt	 
d|¡ d S )N)r    ú/OUT:úskipping %s (up-to-date))r†   r•   Ú_fix_object_argsÚlibrary_filenameÚ
_need_linkr¦   rk   r   r   r
   ra   )	r<   rª   Zoutput_libnamer    ra   Útarget_langÚoutput_filenameZlib_argsr­   r   r   r   Úcreate_static_lib  s    ÿzMSVCCompiler.create_static_libc              
   C   sT  | j s|  ¡  |  ||¡\}}|  |||¡}|\}}}|rL|  dt|ƒ ¡ t| |||ƒ}|d k	rptj 	||¡}|  
||¡�rD|tjkr¬|	rœ| jdd … }q¾| jdd … }n|	r¸| j}n| j}g }|pÈg D ]}| d| ¡ qÊ|| | | d| g }tj |d ¡}|d k	�rLtj tj |¡¡\}}tj 	||  |¡¡}| d| ¡ |  |||¡ |
�rl|
|d d…< |�r|| |¡ |  tj |¡¡ z|  | jg| ¡ W n, tk
�rÐ } zt|ƒ‚W 5 d }~X Y nX |  ||¡}|d k	�rP|\}}d||f }z|  dd	d
||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': r   z/EXPORT:r¯   r   z/IMPLIB:z-outputresource:%s;%szmt.exez-nologoz	-manifestr°   )r†   r•   r±   Z_fix_lib_argsÚwarnrx   r	   rY   r   r^   r³   r   Ú
EXECUTABLEr”   r“   r!   r§   r—   r›   r²   Úmanifest_setup_ldargsr£   Zmkpathr¦   r�   r   r   Úmanifest_get_embed_infor
   ra   )r<   Útarget_descrª   rµ   r    Z	librariesZlibrary_dirsZruntime_library_dirsZexport_symbolsra   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   Úlink6  s„    ÿ
ÿ þ

ÿÿ

ÿþ


 ÿ
zMSVCCompiler.linkc                 C   s,   t j |t j |¡d ¡}| d| ¡ d S )Nz	.manifestú/MANIFESTFILE:)rY   r   r^   r›   r!   )r<   rµ   r¼   r½   Útemp_manifestr   r   r   r¹   •  s
    þz"MSVCCompiler.manifest_setup_ldargsc                 C   s^   |D ]"}|  d¡r| dd¡d } q,qd S |tjkr<d}nd}|  |¡}|d krVd S ||fS )NrÀ   ú:r   rO   )Ú
startswithrT   r   r¸   Ú_remove_visual_c_ref)r<   r»   r½   ÚargrÁ   r¾   r   r   r   rº   ¡  s    


z$MSVCCompiler.manifest_get_embed_infoc                 C   sº   z t |ƒ}z| ¡ }W 5 | ¡  X t dtj¡}t |d|¡}d}t |d|¡}t dtj¡}t ||¡d krtW d S t |dƒ}z| |¡ |W ¢W S | ¡  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)
Úopenrs   ÚreadÚrer®   ÚDOTALLrI   ÚsearchÚwriteÚOSError)r<   Zmanifest_fileZ
manifest_fZmanifest_bufÚpatternr   r   r   rÄ   ¹  s2    	
ýþ


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   Úruntime_library_dir_optionç  s    ÿz'MSVCCompiler.runtime_library_dir_optionc                 C   s
   |   |¡S r   )r²   )r<   rk   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)rY   r   r^   r²   Úexists)r<   Údirsrk   ra   Z	try_namesrÐ   r*   Zlibfiler   r   r   Úfind_library_fileï  s    zMSVCCompiler.find_library_filec                 C   sz   | j D ].}tj tj |¡|¡}tj |¡r|  S qtjd  d¡D ].}tj tj |¡|¡}tj |¡rF|  S qF|S )NÚPathr‰   )rƒ   rY   r   r^   rf   rg   rc   rT   )r<   ZexerD   Ú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   +  sj   
ÿÿ

W  ý
             þ
X   û
          ó
_+
r   )r   )0rY   rp   rQ   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   rC   rB   r�   r   r7   rX   r\   r_   ri   r~   r�   r   r   r   r   r   Ú<module>   sN   ýþ>.#
)
