o ?Ogv@sJ ddlZddlZddlZddlZddlmZmZmZmZm Z ddl m Z m Z ddl mZddlmZddlZejZejZejZejZejejejejfZejdkoVej dkZ!e!r`dZ"d Z#d Z$nd Z"d Z#d Z$dddZ%GdddZ&GdddZ'ddZ(ddZ)ddZ*ddZ+d#ddZ,e(Z-e-dkred e-Gd!d"d"e Z.dS)$N)DistutilsExecErrorDistutilsPlatformError CompileErrorLibError LinkError) CCompilergen_lib_options)log) get_platformwin32lz1Software\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\.NETFrameworkx86Zamd64r z win-amd64c@sNeZdZ ddZeeZddZeeZddZeeZddZeeZd S) RegcCs6tD]}|||}|r||vr||Sqt|N)HKEYS read_valuesKeyError)clspathkeybasedr>/opt/alt/python310/lib64/python3.10/distutils/msvc9compiler.py get_value?s    z Reg.get_valuecCsh zt||}Wn tyYdSwg}d} zt||}Wn ty)Y|Sw|||d7}qNrT) RegOpenKeyExRegError RegEnumKeyappend)rrrhandleLikrrr read_keysGs$   z Reg.read_keysc Cs zt||}Wn tyYdSwi}d} z t||\}}}Wn ty,Y|Sw|}|||||<|d7}qr)rr RegEnumValuelower convert_mbcs) rrrr!rr#namevaluetyperrrrYs&  zReg.read_valuescCs<t|dd}|durz|d}W|StyY|Sw|S)Ndecodembcs)getattr UnicodeError)sZdecrrrr(os   zReg.convert_mbcsN) __name__ __module__ __qualname__r classmethodr%rr( staticmethodrrrrr;s rc@s,eZdZddZddZddZddZd S) MacroExpandercCsi|_t||_||dSr)macrosVS_BASEvsbase load_macros)selfversionrrr__init__{s zMacroExpander.__init__cCst|||jd|<dS)Nz$(%s))rrr7)r;Zmacrorrrrr set_macroszMacroExpander.set_macroc Cs|d|jdd|d|jdd|dtdz|dkr(|d td ntd Wn ty8td w|d krN|d |jd|dtddSd}tD])}zt||}Wn tydYqRwt |d}t |d||f}|d|j d<qRdS)NZ VCInstallDirz \Setup\VC productdirZ VSInstallDirz \Setup\VSZ FrameworkDirZ installroot @ZFrameworkSDKDirzsdkinstallrootv2.0aPython 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"@ZFrameworkVersionz clr versionZ WindowsSdkDirZcurrentinstallfolderz.Software\Microsoft\NET Framework Setup\Productrz%s\%sr<z$(FrameworkVersion)) r>r9NET_BASErr WINSDK_BASErrrrrrr7)r;r<prhrrrrrr:s:   zMacroExpander.load_macroscCs$|jD] \}}|||}q|Sr)r7itemsreplace)r;r0r$vrrrsubszMacroExpander.subN)r1r2r3r=r>r:rHrrrrr6ys  r6cCs d}tj|}|dkrdS|t|}tj|ddd\}}t|ddd}|dkr4|d7}t|dd d }|dkrDd }|dkrL||SdS) NzMSC v. r g$@r)sysr<findlensplitint)prefixr#r0restZ majorVersionZ minorVersionrrrget_build_versions   rWcCs2 g}|D]}tj|}||vr||q|Sr)osrnormpathr )pathsZ reduced_pathsrCZnprrrnormalize_and_reduce_pathss  r[cCs> |tj}g}|D] }||vr||q tj|}|Sr)rSrXpathsepr join)ZvariableZoldListZnewListr#Z newVariablerrrremoveDuplicatess   r^cCs t|}z td|d}Wntytdd}Ynw|r(tj|scd|}tj |d}|r\tj|r\tj |tj tj d}tj |}tj|s[td|dSntd||sltddStj |d }tj|r{|Std dS) Nz %s\Setup\VCr?z%Unable to find productdir in registryzVS%0.f0COMNTOOLSZVCz%s is not a valid directoryz Env var %s is not set or invalidzNo productdir foundz vcvarsall.batUnable to find vcvarsall.bat)r8rrrr debugrXrisdirenvirongetr]pardirabspathisfile)r<r9r?ZtoolskeyZtoolsdir vcvarsallrrrfind_vcvarsalls:        rhc CsH t|}hd}i}|durtdtd||tjd||ftjtjd}z\|\}}|dkrrZlibpathlibincluder_z'Calling 'vcvarsall.bat %s' (version=%s)z "%s" %s & set)stdoutstderrrr- =rrI)rhrr r` subprocessPopenPIPEZ communicatewaitr,rSrr(stripr'endswithrXr\r^rkcloserlrR ValueErrorstrlistkeys) r<ZarchrgZ interestingresultpopenrkrllinerr*rrrquery_vcvarsallsH         r}r@z(VC %0.1f is not supported by this modulec@seZdZ dZiZdgZgdZdgZdgZeeeeZ dZ dZ dZ d Z d ZZd Zd+d dZd,ddZ d-ddZ d.ddZ  d/ddZ         d0ddZddZddZdd Zd!d"Zd#d$Zd%d&Zd1d'd(Zd)d*ZdS)2 MSVCCompilerZmsvcz.c)z.ccz.cppz.cxx.rcz.mcz.resz.objz.libz.dllz%s%sz.exercCs8t||||t|_d|_g|_d|_d|_d|_dS)NzSoftware\Microsoft\VisualStudioF) rr=VERSION_MSVCCompiler__versionZ_MSVCCompiler__root_MSVCCompiler__paths plat_name_MSVCCompiler__arch initialized)r;verboseZdry_runZforcerrrr=Hs zMSVCCompiler.__init__NcCs|durt}d}||vrtd|fdtjvr3dtjvr3|dr3d|_d|_d|_d|_d |_ na|tks<|d krAt |}n t td t |}t t |}|d  tj|_|d tjd <|dtjd<t|jdkrvtd|j|d|_|d|_|d|_|d|_|d |_ ztjd  dD]}|j|qWn tyYnwt|j|_d|jtjd <d|_|jdkrgd|_gd|_n gd|_gd|_gd|_|jdkrgd|_dg|_d|_dS)Nr z--plat-name must be one of %sZDISTUTILS_USE_SDKZMSSdkzcl.exezlink.exezlib.exezrc.exezmc.exer _rrirjrzxPython was built with %s, and extensions need to be built with the same version of the compiler, but it isn't installed.;r )/nologo/Ox/MD/W3/DNDEBUG)r/Od/MDdr/Z7/D_DEBUG)rrrr/GS-r)rrrrrrr)/DLLrz/INCREMENTAL:NO)rrz/INCREMENTAL:noz/DEBUGrT)r rrXrbfind_execclinkerrircmcPLAT_TO_VCVARSr}rrSr\rrRZ_MSVCCompiler__productr rr[r]Zpreprocess_optionsrcompile_optionscompile_options_debugldflags_sharedrldflags_shared_debugZldflags_staticr)r;rZok_platsZ plat_specZvc_envrCrrr initializeSsf                   zMSVCCompiler.initializecCs|durd}g}|D]b}tj|\}}tj|d}|tj|d}||jvr1td||r9tj|}||jvrL| tj |||j q ||j vr_| tj |||j q | tj |||j q |S)NrrzDon't know how to compile %s)rXrsplitext splitdriveisabssrc_extensionsrbasename_rc_extensionsr r] res_extension_mc_extensions obj_extension)r;Zsource_filenamesZ strip_dir output_dirZ obj_namesZsrc_namerextrrrobject_filenamess,         zMSVCCompiler.object_filenamesc  Cs8|js||||||||} | \}} }} } |pg} | d|r*| |jn| |j| D]}z| |\}}Wn tyEYq2w|rNtj |}||j vrXd|}n||j vrbd|}n||j vr|}d|}z||jg| |g|gWnty}zt|d}~wwq2||jvrtj |}tj |}z6||jgd|d|g|gtj tj |\}}tj ||d}||jgd|g|gWnty}zt|d}~wwq2td||fd |}z||jg| | ||g|Wq2ty}zt|d}~ww| S) Nz/cz/Tcz/Tpz/foz-hz-rrz"Don't know how to compile %s to %sz/Fo)rrZ_setup_compiler extendrrrrXrre _c_extensions_cpp_extensionsrspawnrrrrdirnamerrrr]r)r;Zsourcesrr7Z include_dirsr` extra_preargsextra_postargsZdependsZ compile_infoobjectsZpp_optsZbuildZ compile_optsobjsrcrZ input_optZ output_optmsgZh_dirZrc_dirrrZrc_filerrrcompiles                  zMSVCCompiler.compilec Cs|js||||\}}|j||d}|||rC|d|g}|r& z ||jg|WdStyB}zt|d}~wwt d|dS)N)r/OUT:skipping %s (up-to-date)) rr_fix_object_argslibrary_filename _need_linkrrirrr r`) r;rZoutput_libnamerr` target_langoutput_filenameZlib_argsrrrrcreate_static_libs" zMSVCCompiler.create_static_libc Cs<|js||||\}}||||}|\}}}|r&|dt|t||||}|dur8tj ||}| ||r|t j krV| rN|j dd}n|jdd}n | r\|j }n|j}g}|pdgD] }|d|qe||||d|g}tj|d} |durtjtj|\}}tj | ||}|d|||| || r| |dd<| r|| |tj|z ||jg|Wnty}zt|d}~ww|||}|dur|\}}d||f}z |dd d ||gWdSty}zt|d}~wwdStd |dS) Nz5I don't know what to do with 'runtime_library_dirs': rz/EXPORT:rrz/IMPLIB:z-outputresource:%s;%szmt.exez-nologoz -manifestr)rrrZ _fix_lib_argswarnrwrrXrr]rr EXECUTABLErrr rrrrmanifest_setup_ldargsrZmkpathrrrrmanifest_get_embed_infor r`)r; target_descrrrZ librariesZ library_dirsZruntime_library_dirsZexport_symbolsr`rr build_temprZ fixed_argsZlib_optsZldflagsZ export_optsZsymld_argsZdll_nameZdll_extZ implib_filerZmfinfoZ mffilenamemfidZout_argrrrlink5s             zMSVCCompiler.linkcCs,tj|tj|d}|d|dS)Nz .manifest/MANIFESTFILE:)rXrr]rr )r;rrr temp_manifestrrrrs z"MSVCCompiler.manifest_setup_ldargscCs^|D]}|dr|ddd}nqdS|tjkrd}nd}||}|dur+dS||fS)Nr:rrN) startswithrSrr_remove_visual_c_ref)r;rrargrrrrrrs   z$MSVCCompiler.manifest_get_embed_infocCszUt|}z |}W|n|wtdtj}t|d|}d}t|d|}tdtj}t||dur>WdSt|d}z |||W|WS|wt y_YdSw)NzU|)rz*\s*zI|)w) openreadrurerDOTALLrHsearchwriteOSError)r;Z manifest_fileZ manifest_fZ manifest_bufpatternrrrrs4     z!MSVCCompiler._remove_visual_c_refcCsd|S)Nz /LIBPATH:rr;dirrrrlibrary_dir_optionszMSVCCompiler.library_dir_optioncCstd)NzsR  >. #)