U e5d/wã@sNddlZddlZddlZddlZddlmZmZmZmZm Z ddl m Z m Z m Z ddlmZddlmZddlZejZejZejZejZejejejejfZej dko®ej!dkZ"e"rÂdZ#d Z$d Z%n d Z#d Z$d Z%dddœZ&Gdd„dƒZ'Gdd„dƒZ(dd„Z)dd„Z*dd„Z+dd„Z,d#dd„Z-e)ƒZ.e.dk�r:ed e.ƒ‚Gd!d"„d"e ƒZ/dS)$éN)ÚDistutilsExecErrorÚDistutilsPlatformErrorÚ CompileErrorÚLibErrorÚ LinkError)Ú CCompilerÚgen_preprocess_optionsÚgen_lib_options)Úlog)Ú get_platformÚwin32lz1Software\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\.NETFrameworkÚx86Zamd64©r z win-amd64c@sLeZdZdd„ZeeƒZdd„ZeeƒZdd„ZeeƒZdd„ZeeƒZd S) ÚRegcCs:tD](}| ||¡}|r||kr||Sqt|ƒ‚dS©N)ÚHKEYSÚ read_valuesÚKeyError)ÚclsÚpathÚkeyÚbaseÚd©rú//usr/lib64/python3.8/distutils/msvc9compiler.pyÚ get_value@s   z Reg.get_valuecCsnzt||ƒ}Wntk r$YdSXg}d}zt||ƒ}Wntk rTYqjYnX| |¡|d7}q.|S©Nré)Ú RegOpenKeyExÚRegErrorÚ RegEnumKeyÚappend)rrrÚhandleÚLÚiÚkrrrÚ read_keysHs   z Reg.read_keysc Cs†zt||ƒ}Wntk r$YdSXi}d}zt||ƒ\}}}Wntk rZYq‚YnX| ¡}| |¡|| |¡<|d7}q.|Sr)rrÚ RegEnumValueÚlowerÚ convert_mbcs) rrrr"rr$ÚnameÚvalueÚtyperrrrZs  zReg.read_valuescCs:t|ddƒ}|dk r6z |dƒ}Wntk r4YnX|S)NÚdecodeÚmbcs)ÚgetattrÚ UnicodeError)ÚsZdecrrrr)ps  zReg.convert_mbcsN) Ú__name__Ú __module__Ú __qualname__rÚ classmethodr&rr)Ú staticmethodrrrrr<src@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) Ú MacroExpandercCsi|_t||_| |¡dSr)ÚmacrosÚVS_BASEÚvsbaseÚ load_macros)ÚselfÚversionrrrÚ__init__|s zMacroExpander.__init__cCst ||¡|jd|<dS)Nz$(%s))rrr8)r<ZmacrorrrrrÚ set_macro�szMacroExpander.set_macroc Cs| d|jdd¡| d|jdd¡| dtd¡z$|dkrP| d td ¡ntd ƒ‚Wntk rvtd ƒ‚YnX|d kr | d |jd¡| dtd¡nbd}tD]X}zt||ƒ}Wntk rÒYq¨YnXt |dƒ}t   |d||f¡}|d|j d<q¨dS)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?r:ÚNET_BASErrÚ WINSDK_BASErrrr rrr8)r<r=ÚprÚhrrrrrr;„s2ÿ ÿ   zMacroExpander.load_macroscCs$|j ¡D]\}}| ||¡}q |Sr)r8ÚitemsÚreplace)r<r1r%ÚvrrrÚsub£szMacroExpander.subN)r2r3r4r>r?r;rIrrrrr7zsr7cCsš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)Úprefixr$r1ÚrestZ majorVersionZ minorVersionrrrÚget_build_version¨s  rXcCs0g}|D]"}tj |¡}||kr| |¡q|Sr)ÚosrÚnormpathr!)ÚpathsZ reduced_pathsrDZnprrrÚnormalize_and_reduce_pathsÁs   r\cCs<| tj¡}g}|D]}||kr| |¡qtj |¡}|Sr)rTrYÚpathsepr!Újoin)ZvariableZoldListZnewListr$Z newVariablerrrÚremoveDuplicatesÏs   r_cCst|}zt d|d¡}Wn"tk r>t d¡d}YnX|rPtj |¡sÆd|}tj   |d¡}|r¸tj |¡r¸tj  |tj tj d¡}tj  |¡}tj |¡sÆt d|¡dSnt d|¡|sØt d¡dStj  |d ¡}tj |¡rö|St d ¡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.batúUnable to find vcvarsall.bat)r9rrrr ÚdebugrYrÚisdirÚenvironÚgetr^ÚpardirÚabspathÚisfile)r=r:r@ZtoolskeyZtoolsdirÚ vcvarsallrrrÚfind_vcvarsallÚs4 ÿ       ric Cs8t|ƒ}ddddh}i}|dkr(tdƒ‚t d||¡tjd||ftjtjd�}z¤|  ¡\}}|  ¡d krzt|  d ¡ƒ‚|  d ¡}|  d ¡D]d}t |¡}d |kr¦qŽ| ¡}|  d d ¡\} } |  ¡} | |krŽ|  tj¡ræ| dd…} t| ƒ|| <qŽW5|j ¡|j  ¡Xt|ƒt|ƒk�r4ttt| ¡ƒƒƒ‚|S)NÚincludeÚlibZlibpathrr`z'Calling 'vcvarsall.bat %s' (version=%s)z "%s" %s & set)ÚstdoutÚstderrrr.Ú ú=rrJ)rirr raÚ subprocessÚPopenÚPIPErlÚclosermZ communicateÚwaitr-rTrr)Ústripr(ÚendswithrYr]r_rSÚ ValueErrorÚstrÚlistÚkeys) r=ZarchrhZ interestingÚresultÚpopenrlrmÚlinerr+rrrÚquery_vcvarsallýs> þ        r~rAz(VC %0.1f is not supported by this modulec @sÚeZdZdZiZdgZdddgZdgZdgZeeeeZ dZ d Z d Z d Z d ZZd Zd-dd„Zd.dd„Zd/dd„Zd0dd„Zd1dd„Zd2dd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd3d)d*„Zd+d,„ZdS)4Ú MSVCCompilerZmsvcz.cz.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>IszMSVCCompiler.__init__NcCs|dkrtƒ}d}||kr(td|fƒ‚dtjkrfdtjkrf| d¡rfd|_d|_d|_d|_d |_ nÂ|tƒksx|d kr‚t |}nt tƒd t |}t t |ƒ}|d   tj¡|_|d tjd <|dtjd<t|jƒdkrìtd|jƒ‚| d¡|_| d¡|_| d¡|_| d¡|_| d ¡|_ z(tjd   d¡D]}|j |¡�q:Wntk �rfYnXt|jƒ|_d |j¡tjd <d|_|jdk�r¼dddddg|_ddddddg|_n&ddddddg|_dddddddg|_dddg|_|jdk�rddd d!g|_dg|_d"|_dS)#Nrz--plat-name must be one of %sZDISTUTILS_USE_SDKZMSSdkzcl.exezlink.exezlib.exezrc.exezmc.exer Ú_rrkrjrzxPython was built with %s, and extensions need to be built with the same version of the compiler, but it isn't installed.ú;r z/nologoz/Oxz/MDz/W3z/DNDEBUGz/Odz/MDdz/Z7z/D_DEBUGz/GS-z/DLLz/INCREMENTAL:NOéz/INCREMENTAL:noz/DEBUGT)r rrYrcÚfind_exeÚccÚlinkerrkÚrcÚmcÚPLAT_TO_VCVARSr~r�rTr]rƒrSZ_MSVCCompiler__productr!rr\r^Zpreprocess_optionsr…Úcompile_optionsÚcompile_options_debugÚldflags_sharedr‚Úldflags_shared_debugZldflags_staticr†)r<r„Zok_platsZ plat_specZvc_envrDrrrÚ initializeTs~ÿ  ÿ ý       ÿÿ ÿ ÿ  ÿ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)Nr–rzDon't know how to compile %s)rYrÚsplitextÚ splitdriveÚisabsÚsrc_extensionsrÚbasenameÚ_rc_extensionsr!r^Ú res_extensionÚ_mc_extensionsÚ obj_extension)r<Zsource_filenamesZ strip_dirÚ output_dirZ obj_namesZsrc_namerÚextrrrÚobject_filenames©s.     ÿ  ÿ ÿzMSVCCompiler.object_filenamesc  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-rr€z"Don't know how to compile %s to %sz/Fo)r†r•Z_setup_compiler!Úextendr’r‘rrYrrfÚ _c_extensionsÚ_cpp_extensionsrœÚspawnrŽrrržÚdirnamer�r—r›r^rŒ)r<Zsourcesr r8Z include_dirsraÚ extra_preargsÚextra_postargsZdependsZ compile_infoÚobjectsZpp_optsZbuildZ compile_optsÚobjÚsrcr¡Z input_optZ output_optÚmsgZh_dirZrc_dirrrˆZrc_filerrrÚcompileÈsˆ ÿ          ÿÿ     ÿÿ ÿÿ ÿÿþ zMSVCCompiler.compilec Csž|js| ¡| ||¡\}}|j||d�}| ||¡rŽ|d|g}|rJz| |jg|¡Wqštk rŠ}z t|ƒ‚W5d}~XYqšXn t   d|¡dS)N)r ú/OUT:úskipping %s (up-to-date)) r†r•Ú_fix_object_argsÚlibrary_filenameÚ _need_linkr¦rkrrr ra) r<rªZoutput_libnamer raÚ target_langÚoutput_filenameZlib_argsr­rrrÚcreate_static_libsÿ zMSVCCompiler.create_static_libc CsT|js| ¡| ||¡\}}| |||¡}|\}}}|rL| dt|ƒ¡t||||ƒ}|dk rptj  ||¡}|  ||¡�rD|t j kr¬| rœ|j dd…}q¾|jdd…}n| r¸|j }n|j}g}|pÈgD]}| d|¡qÊ||||d|g}tj |d¡} |dk �rLtj tj |¡¡\}}tj  | | |¡¡}| d|¡| || |¡| �rl| |dd…<| �r|| | ¡| tj |¡¡z| |jg|¡Wn,tk �rÐ}z t|ƒ‚W5d}~XYnX| ||¡}|dk �rP|\}}d||f}z| dd d ||g¡Wn,tk �r@}z t|ƒ‚W5d}~XYnXn t d |¡dS) Nz5I don't know what to do with 'runtime_library_dirs': rz/EXPORT:r¯rz/IMPLIB:z-outputresource:%s;%szmt.exez-nologoz -manifestr°)r†r•r±Z _fix_lib_argsÚwarnrxr rYrr^r³rÚ EXECUTABLEr”r“r!r§r—r›r²Úmanifest_setup_ldargsr£Zmkpathr¦r�rrÚmanifest_get_embed_infor ra)r<Ú target_descrªrµr Z librariesZ library_dirsZruntime_library_dirsZexport_symbolsrar¨r©Ú build_tempr´Z fixed_argsZlib_optsZldflagsZ export_optsZsymÚld_argsZdll_nameZdll_extZ implib_filer­ZmfinfoZ mffilenameÚmfidZout_argrrrÚlink6s„ÿ ÿþ   ÿÿ  ÿþ      ÿ zMSVCCompiler.linkcCs,tj |tj |¡d¡}| d|¡dS)Nz .manifestú/MANIFESTFILE:)rYrr^r›r!)r<rµr¼r½Ú temp_manifestrrrr¹•s þz"MSVCCompiler.manifest_setup_ldargscCs^|D]"}| d¡r| dd¡d}q,qdS|tjkr|)r–z*\s*zI|)Úw) ÚopenrsÚreadÚrer®ÚDOTALLrIÚsearchÚwriteÚOSError)r<Z manifest_fileZ manifest_fZ manifest_bufÚpatternrrrrĹs2   ýþ   z!MSVCCompiler._remove_visual_c_refcCsd|S)Nz /LIBPATH:r©r<ÚdirrrrÚlibrary_dir_optionäszMSVCCompiler.library_dir_optioncCs tdƒ‚dS)Nzr•r¢r®r¶r¿r¹rºrÄrÑrÒrÓrÖr‹rrrrr+sj ÿÿ Wý þ Xû ó _ + r)r )0rYrprQrÉZdistutils.errorsrrrrrZdistutils.ccompilerrrr Z distutilsr Zdistutils.utilr ÚwinregZ OpenKeyExrZEnumKeyr Z EnumValuer'ÚerrorrZ HKEY_USERSÚHKEY_CURRENT_USERÚHKEY_LOCAL_MACHINEZHKEY_CLASSES_ROOTrÚplatformÚmaxsizeZ NATIVE_WIN64r9rCrBr�rr7rXr\r_rir~r�rrrrrÚsN  ýþ>. # )