3 Õì2aKTã@sÊddlZddlZddlZddlZddlZddlmZmZmZm Z m Z ddl m Z m Z ddlmZddlmZddlmZdd„Zd d „Zd d „Zd d„Zddd„ZdddœZedgƒZGdd„de ƒZdS)éN)ÚDistutilsExecErrorÚDistutilsPlatformErrorÚ CompileErrorÚLibErrorÚ LinkError)Ú CCompilerÚgen_lib_options)Úlog)Ú get_platform)Úcountc$CsüytjtjdtjtjBd�}Wntk r<tjdƒdSXd}d}|�¤xœtƒD]’}ytj ||ƒ\}}}Wntk r„PYnX|rT|tj krTt j j |ƒrTytt|ƒƒ}Wnttfk rÊwTYnX|dkrT||krT||}}qTWWdQRX||fS)Nz'Software\Microsoft\VisualStudio\SxS\VC7)ÚaccesszVisual C++ is not registeredré)NN)Ú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ÚvÚvc_dirZvtÚversion©r ú2/opt/alt/python36/lib64/python3.6/_msvccompiler.pyÚ _find_vc2015s0  r"c süddl‰ddl}d }d}g‰‡‡fdd„}|j|d�}|jƒ|jƒx†ˆD]~\}}}}d|krLtjj|dddƒ} tjj| ƒs€qLytd d „|j d ƒDƒƒ} Wnt t fk r¶wLYnX| |krL| | }}qLWy |d}Wnt k ròd}YnX||fS) NrcsˆjˆjƒƒdS)N)ÚextendÚfindallr )Ú_distutils_findvsÚ all_packagesr r!Ú_getallDsz_find_vc2017.._getall)Útargetz1Microsoft.VisualStudio.Component.VC.Tools.x86.x64ZVCZ AuxiliaryZBuildcss|]}t|ƒVqdS)N)r)Ú.0rr r r!ú Psz_find_vc2017..Ú.)r) r%Ú threadingZThreadÚstartÚjoinrrrÚtupleÚsplitrrÚ IndexError) r,rrr'ÚtÚnameZ version_strrZpackagesrrr )r%r&r!Ú _find_vc2017:s2    r4cCs tƒ\}}d}d|krdnd}|rztjj|ddddddd ƒ}yd dl}|j|d d �d}Wntttfk rxd}YnX|s tƒ\}}|r tjj|d|dd ƒ}|s²t j dƒdStjj|dƒ}tjj |ƒsÜt j d|ƒdS| pîtjj |ƒ �rt j d|ƒd}||fS)NÚamd64Zx64Úx86z..ZredistZMSVCz**zMicrosoft.VC141.CRTzvcruntime140.dllrT)Ú recursiveézMicrosoft.VC140.CRTz$No suitable Visual C++ version foundz vcvarsall.batz%s cannot be foundéÿÿÿÿ)NN)NN) r4rrr.ÚglobÚ ImportErrorrÚ LookupErrorr"r rÚisfile)Ú plat_specrrÚ vcruntimeZvcruntime_platZvcredistr:Ú vcvarsallr r r!Ú_find_vcvarsall[s6        rAcCsÊtjdƒrdd„tjjƒDƒSt|ƒ\}}|s6tdƒ‚y&tjdj||ƒtj d�j ddd �}Wn@tj k rœ}z"t j |jƒtd j|jƒƒ‚WYdd}~XnXd d„d d „|jƒDƒDƒ}|rÆ||d<|S)NZDISTUTILS_USE_SDKcSsi|]\}}||jƒ“qSr )Úlower)r)rÚvaluer r r!ú sz_get_vc_env..zUnable to find vcvarsall.batzcmd /u /c "{}" {} && set)Ústderrzutf-16leÚreplace)ÚerrorszError executing {}cSs$i|]\}}}|r|r||jƒ“qSr )rB)r)rÚ_rCr r r!rD’scss|]}|jdƒVqdS)ú=N)Ú partition)r)Úliner r r!r*•sz_get_vc_env..Úpy_vcruntime_redist)rÚgetenvÚenvironÚitemsrArÚ subprocessZ check_outputÚformatZSTDOUTÚdecodeZCalledProcessErrorr ÚerrorÚoutputÚcmdÚ splitlines)r>r@r?ÚoutÚexcÚenvr r r!Ú _get_vc_env}s(     rZcCsN|stjdƒjtjƒ}x2|D]*}tjjtjj|ƒ|ƒ}tjj|ƒr|SqW|S)Nr)rrMr0Úpathseprr.Úabspathr=)ZexeÚpathsÚpÚfnr r r!Ú _find_exe�s   r`r6Z x86_amd64)Úwin32z win-amd64zvcruntime140.dllc sÒeZdZdZiZdgZdddgZdgZdgZeeeeZ dZ d Z d Z d Z d ZZd Zd)dd„Zd*dd„Zd+dd„Zd,dd„Zd-dd„Zd.dd„Zdd„Z‡fdd „Zd!d"„Zd#d$„Zd%d&„Zd/d'd(„Z‡ZS)0Ú MSVCCompilerZmsvcz.cz.ccz.cppz.cxxz.rcz.mcz.resz.objz.libz.dllz%s%sz.exercCs tj||||ƒd|_d|_dS)NF)rÚ__init__Ú plat_nameÚ initialized)ÚselfÚverboseZdry_runÚforcer r r!rcÛszMSVCCompiler.__init__NcCs>|dkrtƒ}|tkr(tdjttƒƒƒ‚t|}t|ƒ}|sDtdƒ‚|jddƒ|_|jjt j ƒ}t d|ƒ|_ t d|ƒ|_ t d|ƒ|_t d|ƒ|_t d |ƒ|_t d |ƒ|_|jd dƒ|_x2|jd dƒjt j ƒD]}|rÌ|j|jt jƒƒqÌWx6|jd dƒjt j ƒD]}|�r|j|jt jƒƒ�qWd|_dddddg|_|jj|j�rJdndƒddddddg|_dddg}|j�s~|jd$ƒddddg}|d%•|_|d&•|_|d'•|_|d(•|_|•|_ |•|_!t"j#df|jt"j#d"f|jt"j#d#f|jt"j$df|jt"j$d"f|jt"j$d#f|jt"j%df|j t"j%d"f|j t"j%d#f|j!i |_&d#|_'dS))Nz--plat-name must be one of {}z7Unable to find a compatible Visual Studio installation.rÚzcl.exezlink.exezlib.exezrc.exezmc.exezmt.exerLÚincludeÚlibz/nologoz/Oxz/W3z/GLz/DNDEBUGz/MDz/MTz/Odz/MDdz/Ziz/D_DEBUGz/INCREMENTAL:NOz/LTCGú/nodefaultlib:libucrt.libúucrt.libz /DEBUG:FULLú/MANIFEST:EMBED,ID=1ú/DLLú/MANIFEST:EMBED,ID=2ú/MANIFESTUAC:NOFT)rlrm)rn)rn)rorprq)rorprq)(r ÚPLAT_TO_VCVARSrrQr/rZÚgetÚ_pathsr0rr[r`ÚccÚlinkerrkÚrcÚmcÚmtÚ_vcruntime_redistZadd_include_dirÚrstripÚsepZadd_library_dirZpreprocess_optionsÚcompile_optionsÚappendÚcompile_options_debugr#Z ldflags_exeZldflags_exe_debugZldflags_sharedZldflags_shared_debugZldflags_staticZldflags_static_debugrZ EXECUTABLEZ SHARED_OBJECTZSHARED_LIBRARYÚ_ldflagsre)rfrdr>Zvc_envr]ÚdirÚldflagsZ ldflags_debugr r r!Ú initializeás`                      zMSVCCompiler.initializericsT‡fdd„ˆjDƒ‡fdd„ˆjˆjDƒ–‰ˆp4d‰‡‡‡fdd„}tt||ƒƒS)Ncsi|] }ˆj|“qSr )Ú obj_extension)r)Úext)rfr r!rD8sz1MSVCCompiler.object_filenames..csi|] }ˆj|“qSr )Ú res_extension)r)r…)rfr r!rD9sric s’tjj|ƒ\}}ˆr"tjj|ƒ}n2tjj|ƒ\}}|jtjjtjjfƒrT|dd…}ytjjˆ|ˆ|ƒSt k rŒt dj |ƒƒ‚YnXdS)Nr8zDon't know how to compile {}) rrÚsplitextÚbasenameÚ splitdriveÚ startswithr|Úaltsepr.r<rrQ)r^Úbaser…rH)Ú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)rfZsource_filenamesr�rŽr�r )r�rŽrfr�r!Úobject_filenames3s zMSVCCompiler.object_filenamesc CsŠ|js|jƒ|j||||||ƒ} | \}} }} } |p6g} | jdƒ|rT| j|jƒn | j|jƒd}�x| D�]}y| |\}}Wntk r˜wlYnX|rªtj j |ƒ}||j krÀd|}�nD||j krÚd|}d}�n*||j k�rB|}d|}y|j|jg| ||gƒWqltk �r<}zt|ƒ‚WYdd}~XqlXqlnÂ||jk�rôtj j|ƒ}tj j|ƒ}y\|j|jd|d||gƒtj jtj j|ƒƒ\}}tj j||d ƒ}|j|jd||gƒWqltk �rî}zt|ƒ‚WYdd}~XqlXqlntd j||ƒƒ‚|jg| | }|�r$|jd ƒ|j|ƒ|jd |ƒ|j|ƒy|j|ƒWqltk �r€}zt|ƒ‚WYdd}~XqlXqlW| S) Nz/cFz/Tcz/TpTz/foz-hz-rz.rcz"Don't know how to compile {} to {}z/EHscz/Fo)rerƒZ_setup_compiler~r#rr}ÚKeyErrorrrr\Ú _c_extensionsÚ_cpp_extensionsr’Úspawnrwrrr“Údirnamerxr‡rˆr.rQru)rfZsourcesrŽZmacrosZ include_dirsrÚ extra_preargsÚextra_postargsZdependsZ compile_infoÚobjectsZpp_optsZbuildZ compile_optsZ add_cpp_optsÚobjÚsrcr…Z input_optZ output_optÚmsgZh_dirZrc_dirrŒrHZrc_fileÚargsr r r!ÚcompileTsn               zMSVCCompiler.compilec Cs´|js|jƒ|j||ƒ\}}|j||d�}|j||ƒr¤|d|g}|rJy,tjd|jdj|ƒƒ|j |jg|ƒWq°t k r }zt |ƒ‚WYdd}~Xq°Xn tjd|ƒdS)N)rŽz/OUT:zExecuting "%s" %sú zskipping %s (up-to-date)) rerƒÚ_fix_object_argsÚlibrary_filenameÚ _need_linkr rrkr.ršrr) rfržZoutput_libnamerŽrÚ target_langÚoutput_filenameZlib_argsr¡r r r!Úcreate_static_lib®s zMSVCCompiler.create_static_libcCsÂ|js|jƒ|j||ƒ\}}|j|||ƒ}|\}}}|rL|jdt|ƒƒt||||ƒ}|dk rptjj ||ƒ}|j ||ƒ�r²|j || f}dd„|p˜gDƒ}||||d|g}tjj |dƒ} |dk �r tjj tjj|ƒƒ\}}tjj | |j|ƒƒ}|jd|ƒ| �r| |dd…<| �r.|j| ƒtjj tjj|ƒƒ}|j|ƒy6tjd|jdj |ƒƒ|j|jg|ƒ|j|ƒWn,tk �r®}zt|ƒ‚WYdd}~XnXn tjd |ƒ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..z/OUT:rz/IMPLIB:zExecuting "%s" %sr¤zskipping %s (up-to-date))rerƒr¥Z _fix_lib_argsÚwarnÚstrrrrr.r§r€r›r‡rˆr¦r~r#r\Zmkpathr rrvršÚ_copy_vcruntimerr)rfZ target_descržr©rŽZ librariesZ library_dirsZruntime_library_dirsZexport_symbolsrrœr�Z build_tempr¨Z fixed_argsZlib_optsr‚Z export_optsZld_argsZdll_nameZdll_extZ implib_filer¡r r r!ÚlinkÈsN       zMSVCCompiler.linkcCs`|j}| stjj|ƒ rdStjj|ƒjƒtkr6dStjd|ƒt j ||ƒ}tj |t j ƒdS)Nz Copying "%s")rzrrr=rˆrBÚ _BUNDLED_DLLSr rÚshutilÚcopyÚchmodÚstatÚS_IWRITE)rfrŽr?r r r!r®s  zMSVCCompiler._copy_vcruntimec s4tjdƒ}z|jtjd<tƒj|ƒS|tjd<XdS)Nr)rrMrtrNÚsuperrš)rfrUZold_path)Ú __class__r r!ršs    zMSVCCompiler.spawncCsd|S)Nz /LIBPATH:r )rfr�r r r!Úlibrary_dir_option&szMSVCCompiler.library_dir_optioncCs tdƒ‚dS)Nz:don't know how to set runtime library search path for MSVC)r)rfr�r r r!Úruntime_library_dir_option)sz'MSVCCompiler.runtime_library_dir_optioncCs |j|ƒS)N)r¦)rfrkr r r!Úlibrary_option-szMSVCCompiler.library_optioncCs`|r|d|g}n|g}xB|D]6}x0|D](}tjj||j|ƒƒ}tjj|ƒr(|Sq(WqWdSdS)NZ_d)rrr.r¦r=)rfÚdirsrkrZ try_namesr�r3Zlibfiler r r!Úfind_library_file0s    zMSVCCompiler.find_library_file)rrr)N)rri)NNNrNNN)NrN) NNNNNrNNNN)r)Ú__name__Ú __module__Ú __qualname__Z compiler_typeZ executablesr˜r™r’r“r‘r†r„Zstatic_lib_extensionZshared_lib_extensionZstatic_lib_formatZshared_lib_formatZ exe_extensionrcrƒr–r£rªr¯r®ršr¸r¹rºr¼Ú __classcell__r r )r·r!rb¼sL   T  [  9 rb)N)rr±r´rPrZdistutils.errorsrrrrrZdistutils.ccompilerrrZ distutilsr Zdistutils.utilr Ú itertoolsr r"r4rArZr`rrÚ frozensetr°rbr r r r!Ús$   !"