U e5d \� @s�ddlZddlZddlmZmZmZmZmZddlm Z m Z m Z ddl m Z dZz,ddlZdZeZejZejZejZejZWnhek r�z4ddlZddlZdZeZejZejZejZejZWnek r�e �d�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 �*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.cCsnzt||�}Wntk r$YdSXg}d}zt||�}Wntk rTYqjYnX|�|�|d7}q.|S�Nr�)� RegOpenKeyEx�RegError� RegEnumKey�append)�base�key�handle�L�i�k�r�./usr/lib64/python3.8/distutils/msvccompiler.py� read_keys7s   rcCs�zt||�}Wntk r$YdSXi}d}zt||�\}}}Wntk rZYq~YnX|��}t|�|t|�<|d7}q.|Sr )r r� RegEnumValue�lower� convert_mbcs)rrr�dr�name�value�typerrr� read_valuesHs  r!cCs:t|dd�}|dk r6z |d�}Wntk r4YnX|S)N�decode�mbcs)�getattr� UnicodeError)�sZdecrrrr]s  rc@s,eZdZdd�Zdd�Zdd�Zdd�Zd S) � MacroExpandercCsi|_|�|�dS�N)�macros� load_macros)�self�versionrrr�__init__gszMacroExpander.__init__cCs2tD](}t||�}|r|||jd|<q.qdS)Nz$(%s))�HKEYSr!r))r+Zmacro�pathrrrrrr� set_macroks  zMacroExpander.set_macroc Cs�d|}|�d|dd�|�d|dd�d}|�d|d �z*|d krX|�d |d �n|�d |d �Wn*tk r�}z td��W5d}~XYnXd}tD]V}zt||�}Wntk r�Yq�YnXt|d�}t|d||f�} | d|jd<q�dS)Nz%Software\Microsoft\VisualStudio\%0.1fZ VCInstallDirz \Setup\VCZ productdirZ VSInstallDirz \Setup\VSz Software\Microsoft\.NETFrameworkZ FrameworkDirZ installrootg@ZFrameworkSDKDirzsdkinstallrootv1.1ZsdkinstallrootaPython 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\Productrz%s\%sr,z$(FrameworkVersion)) r0�KeyErrorrr.r rrr!r)) r+r,ZvsbaseZnet�exc�pr�hrrrrrr*rs,�  zMacroExpander.load_macroscCs$|j��D]\}}|�||�}q |Sr()r)�items�replace)r+r&r�vrrr�sub�szMacroExpander.subN)�__name__� __module__� __qualname__r-r0r*r8rrrrr'fsr'cCs�d}tj�|�}|dkrdS|t|�}tj|d��dd�\}}t|dd��d}|dkrf|d7}t|dd ��d }|dkr�d }|dkr�||SdS) NzMSC v.������� r ������ ��g$@r)�sysr,�find�len�split�int)�prefixrr&�restZ majorVersionZ minorVersionrrr�get_build_version�s  rJcCs@d}tj�|�}|dkrdStj�d|�}tj|t|�|�S)Nz bit (r<�Intel�))rCr,rDrE)rHr�jrrr�get_build_architecture�s  rNcCs0g}|D]"}tj�|�}||kr|�|�q|Sr()�osr/�normpathr)�pathsZ reduced_pathsr3Znprrr�normalize_and_reduce_paths�s   rRc @s�eZdZdZiZdgZdddgZdgZdgZeeeeZ dZ d Z d Z d Z d ZZd Zd,dd�Zdd�Zd-dd�Zd.dd�Zd/dd�Zd0dd�Zdd�Zdd �Zd!d"�Zd1d#d$�Zd%d&�Zd2d(d)�Zd*d+�ZdS)3� MSVCCompilerZmsvcz.cz.ccz.cppz.cxx�.rcz.mcz.resz.objz.libz.dllz%s%sz.exercCsvt�||||�t�|_t�|_|jdkr\|jdkrHd|_t|j�|_nd|_d|j|_ nd|jd|_ d|_ dS) NrK�zSoftware\Microsoft\VisualStudiozSoftware\Microsoft\DevstudiozVisual Studio version %szMicrosoft SDK compiler %sr=F) rr-rJ�_MSVCCompiler__versionrN�_MSVCCompiler__arch�_MSVCCompiler__rootr'�_MSVCCompiler__macros�_MSVCCompiler__product� initialized)r+�verboseZdry_runZforcerrrr-�s  zMSVCCompiler.__init__cCs�g|_dtjkrDdtjkrD|�d�rDd|_d|_d|_d|_d|_nx|� d�|_t |j�d krlt d |j ��|�d�|_|�d�|_|�d�|_|�d�|_|�d�|_|� d �|� d �z&tjd�d �D]}|j�|�q�Wntk r�YnXt|j�|_d �|j�tjd<d|_|jdk�rPddddddg|_dddddddg|_n&ddddddg|_dddddddg|_dddg|_|jdk�r�ddddg|_ndddddg|_dg|_d |_dS)!NZDISTUTILS_USE_SDKZMSSdkzcl.exezlink.exezlib.exezrc.exezmc.exer/rzxPython was built with %s, and extensions need to be built with the same version of the compiler, but it isn't installed.�libZinclude�;rKz/nologoz/Oxz/MDz/W3z/GXz/DNDEBUGz/Odz/MDdz/Z7z/D_DEBUGz/GS-z/DLLz/INCREMENTAL:NOrUz/INCREMENTAL:noz/DEBUGz /pdb:NoneT)�_MSVCCompiler__pathsrO�environ�find_exe�cc�linkerr]�rc�mc�get_msvc_pathsrErrZ�set_path_env_varrFrr1rR�joinZpreprocess_optionsrW�compile_options�compile_options_debug�ldflags_sharedrV�ldflags_shared_debugZldflags_staticr[)r+r3rrr� initialize�sr �          � � � �  ��zMSVCCompiler.initialize�cCs�|dkr d}g}|D]�}tj�|�\}}tj�|�d}|tj�|�d�}||jkrbtd|��|rrtj�|�}||jkr�|� tj� |||j ��q||j kr�|� tj� |||j ��q|� tj� |||j ��q|S)Nrnr zDon't know how to compile %s)rOr/�splitext� splitdrive�isabs�src_extensionsr�basename�_rc_extensionsrrh� res_extension�_mc_extensions� obj_extension)r+Zsource_filenamesZ strip_dir� output_dirZ obj_namesZsrc_namer�extrrr�object_filenames8s.     �  � �zMSVCCompiler.object_filenamesNc  Csp|js|��|�||||||�} | \}} }} } |p6g} | �d�|rT| �|j�n | �|j�| D�]}z| |\}}Wntk r�YqdYnX|r�tj � |�}||j kr�d|}�nT||j kr�d|}�n>||j k�r<|}d|}z"|�|jg| |g|g�Wqdtk �r6}z t|��W5d}~XYqdXqdn�||jk�r�tj �|�}tj �|�}zl|�|jgd|d|g|g�tj �tj �|��\}}tj �||d�}|�|jgd|g|g�Wqdtk �r�}z t|��W5d}~XYqdXqdntd||f��d |}z&|�|jg| | ||g|�Wqdtk �rh}z t|��W5d}~XYqdXqd| S) Nz/cz/Tcz/Tpz/foz-hz-rrTz"Don't know how to compile %s to %sz/Fo)r[rmZ_setup_compiler�extendrjrir1rOr/�abspath� _c_extensions�_cpp_extensionsrt�spawnrdrrrv�dirnamererorsrhrb)r+Zsourcesrxr)Z include_dirs�debug� extra_preargs�extra_postargsZdependsZ compile_info�objectsZpp_optsZbuildZ compile_opts�obj�srcryZ input_optZ output_opt�msgZh_dirZrc_dirr�_Zrc_filerrr�compileWs� �          ��     �� �� ��� zMSVCCompiler.compilec Cs�|js|��|�||�\}}|j||d�}|�||�r�|d|g}|rJz|�|jg|�Wq�tk r�}z t|��W5d}~XYq�Xn t � d|�dS)N)rx�/OUT:�skipping %s (up-to-date)) r[rm�_fix_object_args�library_filename� _need_linkrr]rrr r�) r+r�Zoutput_libnamerxr�� target_lang�output_filenameZlib_argsr�rrr�create_static_lib�s� zMSVCCompiler.create_static_libc Cs�|js|��|�||�\}}|�|||�}|\}}}|rL|�dt|��t||||�}|dk rptj� ||�}|� ||��r�|t j kr�| r�|j dd�}q�|jdd�}n| r�|j }n|j}g}|p�gD]}|�d|�q�||||d|g}|dk �rHtj�tj�|��\}}tj� tj�|d�|�|��}|�d|�| �rZ| |dd�<| �rj|�| �|�tj�|��z|�|jg|�Wn,tk �r�}z t|��W5d}~XYnXn t�d|�dS)Nz5I don't know what to do with 'runtime_library_dirs': r z/EXPORT:r�rz/IMPLIB:r�)r[rmr�Z _fix_lib_args�warn�strr rOr/rhr�rZ EXECUTABLErlrkrrorsr�r�r{Zmkpathrrcrrr r�)r+Z target_descr�r�rxZ librariesZ library_dirsZruntime_library_dirsZexport_symbolsr�r�r�Z build_tempr�Z fixed_argsZlib_optsZldflagsZ export_optsZsymZld_argsZdll_nameZdll_extZ implib_filer�rrr�link�sj� ��   ��  ��  zMSVCCompiler.linkcCsd|S)Nz /LIBPATH:r�r+�dirrrr�library_dir_optionszMSVCCompiler.library_dir_optioncCs td��dS)Nz|jdkrt|j�||��d�S||�d�Sq>|jdkr�tD]&}t|d|j�dk r�|�d�q�q�gS) Nz dirsrUz6%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_regrVrXr.r!rYr8rFr�)r+r/�platformrrrrrrrfKs,  ��    zMSVCCompiler.get_msvc_pathscCs6|dkr|�d�}n |�|�}|r2d�|�tj|<dS)Nr]Zlibraryr^)rfrhrOr`)r+rr3rrrrgos   zMSVCCompiler.set_path_env_var)rrr)rrn)NNNrNNN)NrN) NNNNNrNNNN)r)r�)r9r:r;Z compiler_typeZ executablesr}r~rtrvrrrurwZstatic_lib_extensionZshared_lib_extensionZstatic_lib_formatZshared_lib_formatZ exe_extensionr-rmrzr�r�r�r�r�r�r�rarfrgrrrrrS�sh �� B� � X� � S  $rSg @z3Importing new compiler from distutils.msvc9compiler)rS)r')-rCrOZdistutils.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'rJrNrRrSr�ZOldMSVCCompilerZdistutils.msvc9compilerrrrr� s^     � - 9