a DOg[ @s~dZddlZddlZddlmZmZmZmZmZddl m Z m Z ddl m Z dZz,ddlZdZeZejZejZejZejZWndeyz4ddlZddlZdZeZejZejZejZejZWneye dYn0Yn0erejejejej fZ!d d Z"d d Z#d dZ$GdddZ%ddZ&ddZ'ddZ(Gddde Z)e&dkrze *de)Z+ddl,m)Z)ddl,m%Z%dS)zdistutils.msvccompiler Contains MSVCCompiler, an implementation of the abstract CCompiler class for the Microsoft Visual Studio. N)DistutilsExecErrorDistutilsPlatformError CompileErrorLibError LinkError) CCompilergen_lib_options)logFTzWarning: Can't read registry to find the necessary compiler setting Make sure that Python modules winreg, win32api or win32con are installed.cCsjzt||}Wnty"YdS0g}d}zt||}WntyPYqfYn0|||d7}q,|S)zReturn list of registry keys.Nr) RegOpenKeyExRegError RegEnumKeyappend)basekeyhandleLikr./usr/lib64/python3.9/distutils/msvccompiler.py read_keys7s     rcCs~zt||}Wnty"YdS0i}d}zt||\}}}WntyVYqzYn0|}t||t|<|d7}q,|S)zXReturn dict of registry keys and values. All names are converted to lowercase. Nrr )r r RegEnumValuelower convert_mbcs)rrrdrnamevaluetyperrr read_valuesHs    rcCs8t|dd}|dur4z |d}Wnty2Yn0|S)Ndecodembcs)getattr UnicodeError)sZdecrrrr]s   rc@s,eZdZddZddZddZddZd S) MacroExpandercCsi|_||dSN)macros load_macros)selfversionrrr__init__gszMacroExpander.__init__cCs2tD](}t||}|r|||jd|<q.qdS)Nz$(%s))HKEYSrr')r)Zmacropathrrrrrr set_macroks  zMacroExpander.set_macroc Csd|}|d|dd|d|ddd}|d|d z*|d krX|d |d n|d |d Wn,ty}ztdWYd}~n d}~00d}tD]T}zt||}WntyYqYn0t|d}t|d||f} | d|jd<qdS)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)) r.KeyErrorrr,r r r rr') r)r*Zvsbasenetexcprhrrrrrr(rs,   zMacroExpander.load_macroscCs$|jD]\}}|||}q |Sr&)r'itemsreplace)r)r$rvrrrsubszMacroExpander.subN)__name__ __module__ __qualname__r+r.r(r7rrrrr%fsr%cCsd}tj|}|dkrdS|t|}tj|ddd\}}t|ddd}|dkrf|d7}t|d d d }|dkrd }|dkr||SdS) zReturn the version of MSVC that was used to build Python. For Python 2.3 and up, the version number is included in sys.version. For earlier versions, assume the compiler is MSVC 6. zMSC v.N r g$@r)sysr*findlensplitint)prefixrr$restZ majorVersionZ minorVersionrrrget_build_versions  rIcCs@d}tj|}|dkrdStjd|}tj|t||S)zUReturn the processor architecture. Possible results are "Intel" or "AMD64". z bit (r;Intel))rBr*rCrD)rGrjrrrget_build_architectures  rMcCs0g}|D]"}tj|}||vr||q|S)znReturn a list of normalized paths with duplicates removed. The current order of paths is maintained. )osr-normpathr)pathsZ reduced_pathsr2Znprrrnormalize_and_reduce_pathss   rQc @seZdZdZdZiZdgZgdZdgZdgZ eeee Z dZ dZ d Z d Zd ZZd Zd+ddZddZd,ddZd-ddZd.ddZd/ddZddZddZd d!Zd0d"d#Zd$d%Zd1d'd(Zd)d*ZdS)2 MSVCCompilerzwConcrete class that implements an interface to Microsoft Visual C++, as defined by the CCompiler abstract class.Zmsvcz.c)z.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) NrJzSoftware\Microsoft\VisualStudiozSoftware\Microsoft\DevstudiozVisual Studio version %szMicrosoft SDK compiler %sr<F) rr+rI_MSVCCompiler__versionrM_MSVCCompiler__arch_MSVCCompiler__rootr%_MSVCCompiler__macros_MSVCCompiler__product initialized)r)verbosedry_runforcerrrr+s  zMSVCCompiler.__init__cCsg|_dtjvrDdtjvrD|drDd|_d|_d|_d|_d|_nx| d|_t |jd krlt d |j |d|_|d|_|d|_|d|_|d|_| d | d z&tjdd D]}|j|qWntyYn0t|j|_d |jtjd<d|_|jdkr|jdkrt|j||dS||dSq>|jdkrtD]&}t|d|jdur|d qqgS) zGet a list of devstudio directories (include, lib or path). Return a list of strings. The list will be empty if unable to access the registry or appropriate registry keys not found. z dirsrTz6%s\%0.1f\VC\VC_OBJECTS_PLATFORM_INFO\Win32\Directoriesz?%s\6.0\Build System\Components\Platforms\Win32 (%s)\Directoriesr_r<z%s\6.0NzIt 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_regrUrWr,rrXr7rEr)r)r-platformrrrrrrruKs,      zMSVCCompiler.get_msvc_pathscCs6|dkr|d}n ||}|r2d|tj|<dS)zSet environment variable 'name' to an MSVC path type value. This is equivalent to a SET command prior to execution of spawned commands. r^Zlibraryr_N)rurwrNro)r)rr2rrrrvos   zMSVCCompiler.set_path_env_var)rrr)rr})NNNrNNN)NrN) NNNNNrNNNN)r)r)r8r9r:__doc__Z compiler_typeZ executablesrrrrrrrZstatic_lib_extensionZshared_lib_extensionZstatic_lib_formatZshared_lib_formatZ exe_extensionr+r|rrrrrrrrrprurvrrrrrRs` B  X  S  $rRg @z3Importing new compiler from distutils.msvc9compiler)rR)r%)-rrBrNZdistutils.errorsrrrrrZdistutils.ccompilerrrZ distutilsr rwinregZhkey_modZ OpenKeyExr ZEnumKeyr Z EnumValuererrorr ImportErrorZwin32apiZwin32coninfoZ HKEY_USERSHKEY_CURRENT_USERHKEY_LOCAL_MACHINEZHKEY_CLASSES_ROOTr,rrrr%rIrMrQrRrZOldMSVCCompilerZdistutils.msvc9compilerrrrrs`         - 9