U e5dRNã@sÒddlZddlZddlZddlZddlZddlmZmZmZm Z m Z ddl m Z m Z ddlmZddlmZddlmZdd„Zd d „Zd d d ddœZdd„Zdd„Zddd„Zd ddddœZGdd„de ƒZdS)éN)ÚDistutilsExecErrorÚDistutilsPlatformErrorÚ CompileErrorÚLibErrorÚ LinkError)Ú CCompilerÚgen_lib_options)Úlog)Ú get_platform)Úcountc CsztjtjdtjtjBd�}Wn tk r>t d¡YdSXd}d}|�¦tƒD]˜}zt  ||¡\}}}Wntk rˆYqîYnX|rT|tj krTt j   |¡rTztt|ƒƒ}Wnttfk rÐYqTYnX|dkrT||krT||}}qTW5QRX||fS)Nz'Software\Microsoft\VisualStudio\SxS\VC7)ÚaccesszVisual C++ is not registered©NNré)ÚwinregZ OpenKeyExÚHKEY_LOCAL_MACHINEZKEY_READZKEY_WOW64_32KEYÚOSErrorr Údebugr Z EnumValueZREG_SZÚosÚpathÚisdirÚintÚfloatÚ ValueErrorÚ TypeError)ÚkeyÚ best_versionÚbest_dirÚiÚvZvc_dirZvtÚversion©r ú//usr/lib64/python3.8/distutils/_msvccompiler.pyÚ _find_vc2015s2 ý     r"c Csªddl}tj d¡ptj d¡}|s(dSz8tjtj |ddd¡dd d d d d ddg ddd� ¡}Wntj t t fk r~YdSXtj |ddd¡}tj  |¡r¦d|fSdS)NrzProgramFiles(x86)Z ProgramFilesr zMicrosoft Visual StudioZ Installerz vswhere.exez-latestz -prereleasez -requiresz1Microsoft.VisualStudio.Component.VC.Tools.x86.x64z -propertyZinstallationPathz -productsÚ*ÚmbcsÚstrict)ÚencodingÚerrorsZVCZ AuxiliaryZBuildé) ÚjsonrÚenvironÚgetÚ subprocessÚ check_outputrÚjoinÚstripÚCalledProcessErrorrÚUnicodeDecodeErrorr)r)Úrootrr r r!Ú _find_vc2017:s2 úù r3Úx86Zx64ZarmZarm64)r4Ú x86_amd64Úx86_armÚ x86_arm64cCs\tƒ\}}|stƒ\}}|s*t d¡dStj |d¡}tj |¡sTt d|¡dS|dfS)Nz$No suitable Visual C++ version foundr z vcvarsall.batz%s cannot be found)r3r"r rrrr.Úisfile)Ú plat_specÚ_rrÚ vcvarsallr r r!Ú_find_vcvarsallcs     r<c Cs¾t d¡rdd„tj ¡DƒSt|ƒ\}}|s6tdƒ‚z&tjd ||¡tj d�j ddd �}Wn@tj k rœ}z t   |j¡td  |j¡ƒ‚W5d}~XYnXd d„d d „| ¡DƒDƒ}|S)NZDISTUTILS_USE_SDKcSsi|]\}}| ¡|“qSr ©Úlower)Ú.0rÚvaluer r r!Ú wsÿz_get_vc_env..zUnable to find vcvarsall.batzcmd /u /c "{}" {} && set)Ústderrzutf-16leÚreplace)r'zError executing {}cSs$i|]\}}}|r|r| ¡|“qSr r=)r?rr:r@r r r!rAŠs ýcss|]}| d¡VqdS)ú=N)Ú partition)r?Úliner r r!Ú �sz_get_vc_env..)rÚgetenvr*Úitemsr<rr,r-ÚformatZSTDOUTÚdecoder0r ÚerrorÚoutputÚcmdÚ splitlines)r9r;r:ÚoutÚexcÚenvr r r!Ú _get_vc_envus0 þ  þý  ÿýrScCsN|st d¡ tj¡}|D].}tj tj |¡|¡}tj |¡r|Sq|S©Nr)rrHÚsplitÚpathseprr.Úabspathr8)ZexeÚpathsÚpÚfnr r r!Ú _find_exe“s   r[r5r6r7)Zwin32z win-amd64z win-arm32z win-arm64c sÊeZdZdZiZdgZdddgZdgZdgZeeeeZ dZ d Z d Z d Z d ZZd Zd'dd„Zd(dd„Zd)dd„Zd*dd„Zd+dd„Zd,dd„Z‡fdd„Zdd „Zd!d"„Zd#d$„Zd-d%d&„Z‡ZS).Ú MSVCCompilerZmsvcz.cz.ccz.cppz.cxxú.rcz.mcz.resz.objz.libz.dllz%s%sz.exercCs t ||||¡d|_d|_dS)NF)rÚ__init__Ú plat_nameÚ initialized)ÚselfÚverboseZdry_runZforcer r r!r^ÍszMSVCCompiler.__init__NcCsü|dkrtƒ}|tkr(td ttƒ¡ƒ‚t|}t|ƒ}|sDtdƒ‚| dd¡|_|j t j ¡}t d|ƒ|_ t d|ƒ|_ t d|ƒ|_t d|ƒ|_t d |ƒ|_t d |ƒ|_| d d¡ t j ¡D]}|r¼| | t j¡¡q¼| d d¡ t j ¡D]}|rì| | t j¡¡qìd|_d dddddg|_d dddddg|_d ddg}d dddg}|d •|_|d!•|_|d"•|_|d#•|_|•|_|•|_tj df|jtj df|jtj df|jtj!df|jtj!df|jtj!df|jtj"df|jtj"df|jtj"df|ji |_#d|_$dS)$Nz--plat-name must be one of {}z7Unable to find a compatible Visual Studio installation.rÚzcl.exezlink.exezlib.exezrc.exezmc.exezmt.exeZincludeÚlibz/nologoz/Oxz/W3z/GLz/DNDEBUGz/MDz/Odz/MDdz/Ziz/D_DEBUGz/INCREMENTAL:NOz/LTCGz /DEBUG:FULLú/MANIFEST:EMBED,ID=1ú/DLLú/MANIFEST:EMBED,ID=2ú/MANIFESTUAC:NOFT)re)re)rfrgrh)rfrgrh)%r ÚPLAT_TO_VCVARSrrJÚtuplerSr+Ú_pathsrUrrVr[ÚccÚlinkerrdÚrcÚmcZmtZadd_include_dirÚrstripÚsepZadd_library_dirZpreprocess_optionsÚcompile_optionsÚcompile_options_debugZ ldflags_exeZldflags_exe_debugZldflags_sharedZldflags_shared_debugZldflags_staticZldflags_static_debugrZ EXECUTABLEZ SHARED_OBJECTZSHARED_LIBRARYÚ_ldflagsr`)rar_r9Zvc_envrXÚdirÚldflagsZ ldflags_debugr r r!Ú initializeÓs”ÿ      ÿÿÿÿ    ÷ zMSVCCompiler.initializerccsT‡fdd„ˆjDƒ‡fdd„ˆjˆjDƒ–‰ˆp4d‰‡‡‡fdd„}tt||ƒƒS)Ncsi|] }|ˆj“qSr )Ú obj_extension©r?Úext©rar r!rA&sz1MSVCCompiler.object_filenames..csi|] }|ˆj“qSr )Ú res_extensionryr{r r!rA'srccs”tj |¡\}}ˆr"tj |¡}n2tj |¡\}}| tjjtjjf¡rT|dd…}ztj ˆ|ˆ|¡WSt k rŽt d  |¡ƒ‚YnXdS)NézDon't know how to compile {}) rrÚsplitextÚbasenameÚ splitdriveÚ startswithrqÚaltsepr.Ú LookupErrorrrJ)rYÚbaserzr:)Úext_mapÚ output_dirÚ strip_dirr r!Ú make_out_path,s z4MSVCCompiler.object_filenames..make_out_path)Úsrc_extensionsÚ_rc_extensionsÚ_mc_extensionsÚlistÚmap)raZsource_filenamesr‡r†rˆr )r…r†rar‡r!Úobject_filenames!s þzMSVCCompiler.object_filenamesc  Cs†|js| ¡| ||||||¡} | \}} }} } |p6g} |  d¡|rT|  |j¡n |  |j¡d}| D�]}z| |\}}Wntk r–YqhYnX|r¨tj   |¡}||j kr¾d|}�nD||j krØd|}d}�n*||j k�r@|}d|}z| |jg| ||g¡Wqhtk �r:}z t|ƒ‚W5d}~XYqhXqhnÂ||jk�ròtj  |¡}tj  |¡}z\| |jd|d||g¡tj  tj  |¡¡\}}tj  ||d ¡}| |jd||g¡Wqhtk �rì}z t|ƒ‚W5d}~XYqhXqhntd  ||¡ƒ‚|jg| | }|�r"| d ¡| |¡| d |¡| |¡z| |¡Wqhtk �r~}z t|ƒ‚W5d}~XYqhXqh| S) Nz/cFz/Tcz/TpTz/foz-hz-rr]z"Don't know how to compile {} to {}z/EHscz/Fo)r`rwZ_setup_compileÚappendÚextendrsrrÚKeyErrorrrrWÚ _c_extensionsÚ_cpp_extensionsrŠÚspawnrnrrr‹Údirnameror~rr.rJrl)raZsourcesr†ZmacrosZ include_dirsrÚ extra_preargsÚextra_postargsZdependsZ compile_infoÚobjectsZpp_optsZbuildZ compile_optsZ add_cpp_optsÚobjÚsrcrzZ input_optZ output_optÚmsgZh_dirZrc_dirr„r:Zrc_fileÚargsr r r!ÚcompileBsx ÿ           ÿ   zMSVCCompiler.compilec Cs´|js| ¡| ||¡\}}|j||d�}| ||¡r¤|d|g}|rJz,t d|jd |¡¡|  |jg|¡Wq°t k r }z t |ƒ‚W5d}~XYq°Xn t d|¡dS)N)r†ú/OUT:úExecuting "%s" %sú úskipping %s (up-to-date)) r`rwÚ_fix_object_argsÚlibrary_filenameÚ _need_linkr rrdr.r”rr) rar˜Zoutput_libnamer†rÚ target_langÚoutput_filenameZlib_argsr›r r r!Úcreate_static_libœsÿ zMSVCCompiler.create_static_libc Cs¸|js| ¡| ||¡\}}| |||¡}|\}}}|rL| dt|ƒ¡t||||ƒ}|dk rptj  ||¡}|  ||¡�r¨|j || f}dd„|p˜gDƒ}||||d|g}tj  |d¡} |dk �r tj  tj |¡¡\}}tj  | | |¡¡}| d|¡| �r| |dd…<| �r.| | ¡tj  tj |¡¡}| |¡z,t d|jd  |¡¡| |jg|¡Wn,tk �r¤}z t|ƒ‚W5d}~XYnXn t d |¡dS) Nz5I don't know what to do with 'runtime_library_dirs': cSsg|] }d|‘qS)z/EXPORT:r )r?Zsymr r r!Ú Ùsz%MSVCCompiler.link..ržrz/IMPLIB:rŸr r¡)r`rwr¢Z _fix_lib_argsÚwarnÚstrrrrr.r¤rtr•r~rr£r�r�rWZmkpathr rrmr”rr)raZ target_descr˜r¦r†Z librariesZ library_dirsZruntime_library_dirsZexport_symbolsrr–r—Z build_tempr¥Z fixed_argsZlib_optsrvZ export_optsZld_argsZdll_nameZdll_extZ implib_filer›r r r!Úlink¶s`ÿ ÿþ ÿÿ  ÿþ   zMSVCCompiler.linkc s8t d¡}z|jtjd<tƒ |¡W¢S|tjd<XdSrT)rrHr*rkÚsuperr”)rarNZold_path©Ú __class__r r!r”ûs   zMSVCCompiler.spawncCsd|S)Nz /LIBPATH:r ©rarur r r!Úlibrary_dir_optionszMSVCCompiler.library_dir_optioncCs tdƒ‚dS)Nz:don't know how to set runtime library search path for MSVC)rr¯r r r!Úruntime_library_dir_option sÿz'MSVCCompiler.runtime_library_dir_optioncCs | |¡S)N)r£)rardr r r!Úlibrary_optionszMSVCCompiler.library_optioncCs\|r|d|g}n|g}|D]:}|D]0}tj || |¡¡}tj |¡r$|Sq$qdS)NZ_d)rrr.r£r8)raÚdirsrdrZ try_namesruÚnameZlibfiler r r!Úfind_library_files zMSVCCompiler.find_library_file)rrr)N)rrc)NNNrNNN)NrN) NNNNNrNNNN)r)Ú__name__Ú __module__Ú __qualname__Z compiler_typeZ executablesr’r“rŠr‹r‰r|rxZstatic_lib_extensionZshared_lib_extensionZstatic_lib_formatZshared_lib_formatZ exe_extensionr^rwrŽr�r§r«r”r°r±r²rµÚ __classcell__r r r­r!r\®sd ÿÿ  Pý "þ ]û ó E r\)N)rZshutilÚstatr,rZdistutils.errorsrrrrrZdistutils.ccompilerrrZ distutilsr Zdistutils.utilr Ú itertoolsr r"r3ZPLAT_SPEC_TO_RUNTIMEr<rSr[rir\r r r r!Ús2   #ü ü