£Á°è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~d/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oej!dkZ"e"rd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:   x,t D ]$}| ||}|r||kr|| S qW t|d S )N)HKEYSread_valuesKeyError)clspathkeybased r   </opt/alt/python37/lib64/python3.7/distutils/msvc9compiler.py	get_value@   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 || |d7 }q.W |S )Nr      )RegOpenKeyExRegError
RegEnumKeyappend)r   r   r   handleLikr   r   r   	read_keysH   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 | }| ||| |< |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   Z   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&   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 )N)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   r5   )r9   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 y$|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 ndd}x^tD ]V}yt||}W n tk
r   wY nX t	|d}t
|d||f }|d | jd< qW 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<   r7   NET_BASEr   r   WINSDK_BASEr   r   r   r   r   r   r5   )r9   r:   pr   hr   r   r   r   r   r8      s.    

zMacroExpander.load_macrosc             C   s(   x"| j  D ]\}}|||}qW |S )N)r5   itemsreplace)r9   r.   r"   vr   r   r   sub   s    zMacroExpander.subN)r/   r0   r1   r;   r<   r8   rE   r   r   r   r   r4   z   s   r4   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rd}|dkr|| S d S )NzMSC v.    r            g      $@r   )sysr:   findlensplitint)prefixr!   r.   restZmajorVersionZminorVersionr   r   r   get_build_version   s    rT   c             C   s4   g }x*| D ]"}t j|}||kr
|| q
W |S )N)osr   normpathr   )pathsZreduced_pathsr@   Znpr   r   r   normalize_and_reduce_paths   s    
rX   c             C   s@   |  tj}g }x|D ]}||kr|| qW tj|}|S )N)rP   rU   pathsepr   join)variableZoldListZnewListr!   ZnewVariabler   r   r   removeDuplicates   s    
r\   c             C   s  t |  }ytd| d}W n" tk
r>   td d }Y nX |rPtj|sd|  }tj	
|d }|rtj|rtj|tjtjd}tj|}tj|std|  d S ntd|  |st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.batzUnable to find vcvarsall.bat)r6   r   r   r   r
   debugrU   r   isdirenvirongetrZ   pardirabspathisfile)r:   r7   r=   ZtoolskeyZtoolsdir	vcvarsallr   r   r   find_vcvarsall   s2    





re   c             C   s<  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
}xr|
dD ]d}t|}d|krq| }|
dd\}	}
|	 }	|	|kr|
tjr|
d d }
t|
||	< qW W d |j  |j  X t|t|kr8ttt| |S )NincludelibZlibpathr   zUnable to find vcvarsall.batz'Calling 'vcvarsall.bat %s' (version=%s)z"%s" %s & set)stdoutstderrr   r+   
=r   rF   )re   r   r
   r]   
subprocessPopenPIPEZcommunicatewaitr*   rP   r   r&   stripr%   endswithrU   rY   r\   rh   closeri   rO   
ValueErrorstrlistkeys)r:   Zarchrd   Zinterestingresultpopenrh   ri   liner   r(   r   r   r   query_vcvarsall   s<    



rz   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 | ||| 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)r9   verboseZdry_run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rt
| }nt
t   d t
|  }tt|}|d tj| _|d tjd< |d tjd< t| jdkrtd| j | d| _| d| _| d| _| d| _| d	| _	y,x&tjd dD ]}| j| q<W W n tk
rj   Y nX t| j| _d| jtjd< d | _| jdkrd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 )#N)r   z	win-amd64z--plat-name must be one of %sZDISTUTILS_USE_SDKZMSSdkzcl.exezlink.exezlib.exezrc.exezmc.exer   _r   rg   rf   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   rU   r_   find_execclinkerrg   rcmcPLAT_TO_VCVARSrz   r|   rP   rY   r~   rO   Z_MSVCCompiler__productr   r   rX   rZ   Zpreprocess_optionsr   compile_optionscompile_options_debugldflags_sharedr}   ldflags_shared_debugZldflags_staticr   )r9   r   Zok_platsZ	plat_specZvc_envr@   r   r   r   
initializeT  sd    







zMSVCCompiler.initialize c             C   s   |d krd}g }x|D ]}t j|\}}t j|d }|t j|d  }|| jkrdtd| |rtt j|}|| jkr|	t j
||| j  q|| jkr|	t j
||| j  q|	t j
||| j  qW |S )Nr   r   zDon't know how to compile %s)rU   r   splitext
splitdriveisabssrc_extensionsr   basename_rc_extensionsr   rZ   res_extension_mc_extensionsobj_extension)r9   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|   | ||||||}	|	\}}
}}}|p6g }|d |rT|| j n|| j x|
D ]}y|| \}}W n tk
r   whY nX |rtj	
|}|| jkrd| }nT|| jkrd| }n>|| jkr>|}d| }y"| | jg| |g |g  W qh tk
r8 } zt|W d d }~X Y qhX qhn|| jkr tj	|}tj	|}yl| | jgd|d|g |g  tj	tj	|\}}tj	||d }| | jgd| g |g  W qh tk
r } zt|W d d }~X Y qhX qhntd||f d	| }y&| | jg| | ||g |  W qh tk
rj } zt|W d d }~X Y 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   rU   r   rb   _c_extensions_cpp_extensionsr   spawnr   r   r   r   dirnamer   r   r   rZ   r   )r9   Zsourcesr   r5   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||d}| ||r|d| g }|rJy| | 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skipping %s (up-to-date))r   r   _fix_object_argslibrary_filename
_need_linkr   rg   r   r   r
   r]   )	r9   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|   | ||\}}| |||}|\}}}|rL| dt|  t| |||}|d k	rptj	||}| 
||rH|tjkr|	r| jdd  }q| jdd  }n|	r| j}n| j}g }x|pg D ]}|d|  qW || | | d| g }tj|d }|d k	rPtjtj|\}}tj	|| |}|d|  | ||| |
rp|
|d d< |r|| | tj| y| | jg|  W n, tk
r } zt|W d d }~X Y nX | ||}|d k	rT|\}}d||f }y| dd	d
||g W n, tk
rD } 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': 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warnrt   r	   rU   r   rZ   r   r   
EXECUTABLEr   r   r   r   r   r   r   manifest_setup_ldargsr   Zmkpathr   r   r   r   manifest_get_embed_infor
   r]   )r9   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   link6  sl    





zMSVCCompiler.linkc             C   s,   t j|t j|d }|d|  d S )Nz	.manifestz/MANIFESTFILE:)rU   r   rZ   r   r   )r9   r   r   r   temp_manifestr   r   r   r     s    z"MSVCCompiler.manifest_setup_ldargsc             C   s`   x,|D ] }| dr|ddd }P qW d S |tjkr>d}nd}| |}|d krXd S ||fS )Nz/MANIFESTFILE::r   rK   )
startswithrP   r   r   _remove_visual_c_ref)r9   r   r   argr   r   r   r   r   r     s    



z$MSVCCompiler.manifest_get_embed_infoc             C   s   yt |}z| }W d |  X tdtj}t|d|}d}t|d|}tdtj}t||d krrd S t |d}z|| |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)
openreadrr   rer   DOTALLrE   searchwriteOSError)r9   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   )r9   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   )r9   r   r   r   r   runtime_library_dir_option  s    z'MSVCCompiler.runtime_library_dir_optionc             C   s
   |  |S )N)r   )r9   rg   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)rU   r   rZ   r   exists)r9   dirsrg   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tj||}tj|r|S qW x>tjd dD ]*}tjtj||}tj|rH|S qHW |S )NZPathr   )r~   rU   r   rZ   rb   rc   r_   rP   )r9   Zexer@   fnr   r   r   r     s    	zMSVCCompiler.find_exe)r   r   r   )N)r   r   )NNNr   NNN)Nr   N)
NNNNNr   NNNN)r   )r/   r0   r1   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   


W 
 
V  
         
R+
r{   )r   )0rU   rl   rM   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_WIN64r6   r?   r>   r   r   r4   rT   rX   r\   re   rz   r|   r{   r   r   r   r   <module>   sJ   >.#
)
