3 \\�@s�ddlZddlZddlmZmZmZmZmZddlm Z m Z m Z ddl m Z dZy,ddlZdZeZejZejZejZejZWnhek r�y4ddlZddlZdZeZejZejZejZejZWnek r�e jd�YnXYnXer�ejejejej fZ!dd �Z"d d �Z#d d �Z$Gdd�d�Z%dd�Z&dd�Z'dd�Z(Gdd�de �Z)e&�dk�r~e j*d�e)Z+ddl,m)Z)ddl,m%Z%dS)�N)�DistutilsExecError�DistutilsPlatformError� CompileError�LibError� LinkError)� CCompiler�gen_preprocess_options�gen_lib_options)�logFTz�Warning: Can't read registry to find the necessary compiler setting Make sure that Python modules winreg, win32api or win32con are installed.cCsnyt||�}Wntk r"dSXg}d}x||j k�r>|}d|}y"|j|jg| |g|g�Wqhtk �r8}zt|��WYdd}~XqhXqhn�||jk�rtj j|�}tj j|�}yl|j|jgd|d|g|g�tj jtj j|��\}}tj j||d�}|j|jgd|g|g�Wqhtk �r�}zt|��WYdd}~XqhXqhntd||f��d |}y&|j|jg| | ||g|�Wqhtk �rj}zt|��WYdd}~XqhXqhW| S) Nz/cz/Tcz/Tpz/foz-hz-rz.rcz"Don't know how to compile %s to %sz/Fo)rXrkZ_setup_compiler�extendrhrgr/rMr-�abspath� _c_extensions�_cpp_extensionsrr�spawnrbrrrt�dirnamercrmrqrfr`)r)Zsourcesrvr'Z include_dirs�debug� extra_preargs�extra_postargsZdependsZ compile_info�objectsZpp_optsZbuildZ compile_opts�obj�srcrwZ input_optZ output_opt�msgZh_dirZrc_dirr�_Zrc_filerrr�compileWsj              zMSVCCompiler.compilec Cs�|js|j�|j||�\}}|j||d�}|j||�r�|d|g}|rJy|j|jg|�Wq�tk r�}zt|��WYdd}~Xq�Xn t j d|�dS)N)rvz/OUT:zskipping %s (up-to-date)) rXrk�_fix_object_args�library_filename� _need_linkr}rZrrr r) r)r�Zoutput_libnamervr� target_lang�output_filenameZlib_argsr�rrr�create_static_lib�s zMSVCCompiler.create_static_libcCs�|js|j�|j||�\}}|j|||�}|\}}}|rL|jdt|��t||||�}|dk rptjj ||�}|j ||��r�|t j kr�| r�|j dd�}q�|jdd�}n| r�|j }n|j}g}x|p�gD]}|jd|�q�W||||d|g}|dk �rLtjjtjj|��\}}tjj tjj|d�|j|��}|jd|�| �r^| |dd�<| �rn|j| �|jtjj|��y|j|jg|�Wn,tk �r�}zt|��WYdd}~XnXn tjd|�dS)Nz5I don't know what to do with 'runtime_library_dirs': r z/EXPORT:z/OUT:rz/IMPLIB:zskipping %s (up-to-date))rXrkr�Z _fix_lib_args�warn�strr rMr-rfr�rZ EXECUTABLErjrirrmrqr~r�ryZmkpathr}rarrr r)r)Z target_descr�r�rvZ librariesZ library_dirsZruntime_library_dirsZexport_symbolsrr�r�Z build_tempr�Z fixed_argsZlib_optsZldflagsZ export_optsZsymZld_argsZdll_nameZdll_extZ implib_filer�rrr�link�sV       zMSVCCompiler.linkcCsd|S)Nz /LIBPATH:r)r)�dirrrr�library_dir_optionszMSVCCompiler.library_dir_optioncCs td��dS)Nztjdjd�D]*}tjjtjj|�|�}tjj|�rH|SqHW|S)NZPathr\)r]rMr-rfrz�isfiler^rD)r)Zexer1�fnrrrr_5s   zMSVCCompiler.find_exe�x86cCs�tsgS|d}|jdkr,d|j|jf}nd|j|f}xHtD]@}t||�}|r@|jdkrr|jj||�jd�S||jd�Sq@W|jdkr�x,tD]$}t|d|j�dk r�|jd�Pq�WgS) Nz dirsrRz6%s\%0.1f\VC\VC_OBJECTS_PLATFORM_INFO\Win32\Directoriesz?%s\6.0\Build System\Components\Platforms\Win32 (%s)\Directoriesr\r:z%s\6.0z�It 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_regrSrUr,r rVr6rDr�)r)r-�platformrrrrrrrdKs(        zMSVCCompiler.get_msvc_pathscCs6|dkr|jd�}n |j|�}|r2dj|�tj|<dS)NrZZlibraryr\)rdrfrMr^)r)rr1rrrreos   zMSVCCompiler.set_path_env_var)rrr)rrl)NNNrNNN)NrN) NNNNNrNNNN)r)r�)r7r8r9Z compiler_typeZ executablesr{r|rrrtrprsruZstatic_lib_extensionZshared_lib_extensionZstatic_lib_formatZshared_lib_formatZ exe_extensionr+rkrxr�r�r�r�r�r�r�r_rdrerrrrrQ�sN  B  V  F  $rQg @z3Importing new compiler from distutils.msvc9compiler)rQ)r&)-rArMZdistutils.errorsrrrrrZdistutils.ccompilerrrr Z distutilsr r��winregZhkey_modZ OpenKeyExr ZEnumKeyrZ EnumValuer�errorr � ImportErrorZwin32apiZwin32con�infoZ HKEY_USERS�HKEY_CURRENT_USER�HKEY_LOCAL_MACHINEZHKEY_CLASSES_ROOTr,rr rr&rHrLrPrQrZOldMSVCCompilerZdistutils.msvc9compilerrrrr� s\      - 9