???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................3

  \\                 @   s  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Zy,d dlZdZeZejZejZejZejZW nh ek
r   y4d dlZd dlZdZeZejZejZejZejZW n ek
r   ejd Y nX Y nX erejejejej fZ!dd	 Z"d
d Z#dd Z$G dd dZ%dd Z&dd Z'dd Z(G dd de	Z)e& dkr~ej*d e)Z+d dl,m)Z) d dl,m%Z% dS )    N)DistutilsExecErrorDistutilsPlatformErrorCompileErrorLibError	LinkError)	CCompilergen_preprocess_optionsgen_lib_options)logFTzWarning: Can't read registry to find the necessary compiler setting
Make sure that Python modules winreg, win32api or win32con are installed.c             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)basekeyhandleLik r   ./usr/lib64/python3.6/distutils/msvccompiler.py	read_keys7   s    
r   c             C   s   yt | |}W n tk
r"   d S X i }d}xPyt||\}}}W n tk
rX   P Y nX |j }t||t|< |d7 }q.W |S )Nr   r   )r   r   RegEnumValuelowerconvert_mbcs)r   r   r   dr   namevaluetyper   r   r   read_valuesH   s    r    c             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   ]   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 | _ | j| d S )N)macrosload_macros)selfversionr   r   r   __init__g   s    zMacroExpander.__init__c             C   s4   x.t D ]&}t||}|r|| | jd| < P qW d S )Nz$(%s))HKEYSr    r'   )r)   Zmacropathr   r   r   r   r   r   	set_macrok   s
    

zMacroExpander.set_macroc       
      C   s   d| }| j d|d d | j d|d d d}| j d|d	 y*|d
krX| j d|d n| j d|d W n* tk
r } ztdW Y d d }~X nX d}x\tD ]T}yt||}W n tk
r   wY nX t|d}t|d||f }	|	d | jd< qW d S )Nz%Software\Microsoft\VisualStudio\%0.1fZVCInstallDirz	\Setup\VCZ
productdirZVSInstallDirz	\Setup\VSz Software\Microsoft\.NETFrameworkZFrameworkDirZinstallrootg      @ZFrameworkSDKDirzsdkinstallrootv1.1Zsdkinstallroota  Python was built with Visual Studio 2003;
extensions must be built with a compiler than can generate compatible binaries.
Visual Studio 2003 was not found on this system. If you have Cygwin installed,
you can try compiling with MingW32, by passing "-c mingw32" to setup.py.z.Software\Microsoft\NET Framework Setup\Productr   z%s\%sr*   z$(FrameworkVersion))	r.   KeyErrorr   r,   r   r   r   r    r'   )
r)   r*   ZvsbaseZnetexcpr   hr   r   r   r   r   r(   r   s*    

zMacroExpander.load_macrosc             C   s(   x"| j j D ]\}}|j||}qW |S )N)r'   itemsreplace)r)   r%   r   vr   r   r   sub   s    zMacroExpander.subN)__name__
__module____qualname__r+   r.   r(   r6   r   r   r   r   r&   f   s   r&   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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    rH   c              C   s@   d} t jj| }|dkrdS t jjd|}t j|t|  | S )Nz bit (r   Intel)r?   )rA   r*   rB   rC   )rF   r   jr   r   r   get_build_architecture   s    rL   c             C   s4   g }x*| D ]"}t jj|}||kr
|j| q
W |S )N)osr-   normpathr   )pathsZreduced_pathsr1   Znpr   r   r   normalize_and_reduce_paths   s    
rP   c            
   @   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 Zd-ddZd.ddZd/ddZd0ddZdd Zdd  Zd!d" Zd1d#d$Zd%d& Zd2d(d)Zd*d+ ZdS )3MSVCCompilerZmsvcz.cz.ccz.cppz.cxxz.rcz.mcz.resz.objz.libz.dllz%s%sz.exer   c             C   sv   t j| ||| t | _t | _| jdkr\| jdkrHd| _t| j| _nd| _d| j | _	nd| jd  | _	d| _
d S )	NrI      zSoftware\Microsoft\VisualStudiozSoftware\Microsoft\DevstudiozVisual Studio version %szMicrosoft SDK compiler %sr:   F)r   r+   rH   _MSVCCompiler__versionrL   _MSVCCompiler__arch_MSVCCompiler__rootr&   _MSVCCompiler__macros_MSVCCompiler__productinitialized)r)   verboseZdry_runZforcer   r   r   r+      s    

zMSVCCompiler.__init__c             C   s  g | _ dtjkrDdtjkrD| jdrDd| _d| _d| _d| _d| _nx| j	d| _ t
| j d	krltd
| j | jd| _| jd| _| jd| _| jd| _| jd| _| jd | jd y*x$tjd jdD ]}| j j| qW W n tk
r   Y nX t| j | _ dj| j tjd< d | _| jdkrTddddddg| _d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rddddg| _ndddddg| _dg| _d | _d S )!NZDISTUTILS_USE_SDKZMSSdkzcl.exezlink.exezlib.exezrc.exezmc.exer-   r   zxPython was built with %s, and extensions need to be built with the same version of the compiler, but it isn't installed.libinclude;rI   z/nologoz/Oxz/MDz/W3z/GXz/DNDEBUGz/Odz/MDdz/Z7z/D_DEBUGz/GS-z/DLLz/INCREMENTAL:NOrR   z/INCREMENTAL:noz/DEBUGz	/pdb:NoneT)_MSVCCompiler__pathsrM   environfind_execclinkerrZ   rcmcget_msvc_pathsrC   r   rW   set_path_env_varrD   r   r/   rP   joinZpreprocess_optionsrT   compile_optionscompile_options_debugldflags_sharedrS   ldflags_shared_debugZldflags_staticrX   )r)   r1   r   r   r   
initialize   sR    







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 )Nrl   r   zDon't know how to compile %s)rM   r-   splitext
splitdriveisabssrc_extensionsr   basename_rc_extensionsr   rf   res_extension_mc_extensionsobj_extension)r)   Zsource_filenamesZ	strip_dir
output_dirZ	obj_namesZsrc_namer   extr   r   r   object_filenames8  s(     



zMSVCCompiler.object_filenamesNc	             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 |rtj	j
|}|| jkrd| }nT|| jkrd| }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)rX   rk   Z_setup_compiler   extendrh   rg   r/   rM   r-   abspath_c_extensions_cpp_extensionsrr   spawnrb   r   r   rt   dirnamerc   rm   rq   rf   r`   )r)   Zsourcesrv   r'   Zinclude_dirsdebugextra_preargsextra_postargsZdependsZcompile_infoobjectsZpp_optsZbuildZcompile_optsobjsrcrw   Z	input_optZ
output_optmsgZh_dirZrc_dirr   _Zrc_filer   r   r   compileW  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 qX nt	j
d| d S )N)rv   z/OUT:zskipping %s (up-to-date))rX   rk   _fix_object_argslibrary_filename
_need_linkr}   rZ   r   r   r
   r   )	r)   r   Zoutput_libnamerv   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|tjkr|	r| jdd  }q| jdd  }n|	r| j}n| j}g }x|pg D ]}|jd|  qW || | | d| g }|d k	rLtjjtjj|\}}tjj	tjj|d | j|}|jd|  |
r^|
|d d< |rn|j| | jtjj| y| j| jg|  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': r   z/EXPORT:z/OUT:r   z/IMPLIB:zskipping %s (up-to-date))rX   rk   r   Z_fix_lib_argswarnstrr	   rM   r-   rf   r   r   Z
EXECUTABLErj   ri   r   rm   rq   r~   r   ry   Zmkpathr}   ra   r   r   r
   r   )r)   Ztarget_descr   r   rv   Z	librariesZlibrary_dirsZruntime_library_dirsZexport_symbolsr   r   r   Z
build_tempr   Z
fixed_argsZlib_optsZldflagsZexport_optsZsymZld_argsZdll_nameZdll_extZimplib_filer   r   r   r   link  sV    



zMSVCCompiler.linkc             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)   rZ   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)rM   r-   rf   r   exists)r)   dirsrZ   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]   rM   r-   rf   rz   isfiler^   rD   )r)   Zexer1   fnr   r   r   r_   5  s    	zMSVCCompiler.find_exex86c             C   s   t sg S |d }| jdkr,d| j| jf }nd| j|f }xHtD ]@}t||}|r@| jdkrr| jj|| jdS || jdS q@W | jdkrx,tD ]$}t|d| j d k	r| jd P qW g S )	Nz dirsrR   z6%s\%0.1f\VC\VC_OBJECTS_PLATFORM_INFO\Win32\Directoriesz?%s\6.0\Build System\Components\Platforms\Win32 (%s)\Directoriesr\   r:   z%s\6.0zIt seems you have Visual Studio 6 installed, but the expected registry settings are not present.
You must at least run the Visual Studio GUI once so that these entries are created.)	_can_read_regrS   rU   r,   r    rV   r6   rD   r   )r)   r-   platformr   r   r   r   r   r   rd   K  s(    






zMSVCCompiler.get_msvc_pathsc             C   s6   |dkr| j d}n
| j |}|r2dj|tj|< d S )NrZ   Zlibraryr\   )rd   rf   rM   r^   )r)   r   r1   r   r   r   re   o  s
    
zMSVCCompiler.set_path_env_var)r   r   r   )r   rl   )NNNr   NNN)Nr   N)
NNNNNr   NNNN)r   )r   )r7   r8   r9   Zcompiler_typeZexecutablesr{   r|   rr   rt   rp   rs   ru   Zstatic_lib_extensionZshared_lib_extensionZstatic_lib_formatZshared_lib_formatZexe_extensionr+   rk   rx   r   r   r   r   r   r   r   r_   rd   re   r   r   r   r   rQ      sN   

B 
 
V  
         
F

$rQ   g       @z3Importing new compiler from distutils.msvc9compiler)rQ   )r&   )-rA   rM   Zdistutils.errorsr   r   r   r   r   Zdistutils.ccompilerr   r   r	   Z	distutilsr
   r   winregZhkey_modZ	OpenKeyExr   ZEnumKeyr   Z	EnumValuer   errorr   ImportErrorZwin32apiZwin32coninfoZ
HKEY_USERSHKEY_CURRENT_USERHKEY_LOCAL_MACHINEZHKEY_CLASSES_ROOTr,   r   r    r   r&   rH   rL   rP   rQ   r   ZOldMSVCCompilerZdistutils.msvc9compilerr   r   r   r   <module>   s\   


	-   9
