3 \”wã@sPddlZddlZddlZddlZddlmZmZmZmZm Z ddl m Z m Z m Z ddlmZddlmZddlZejZejZejZejZejejejejfZej dko®ej!d%kZ"e"rÂd Z#d Z$d Z%n d Z#d Z$dZ%ddddœZ&Gdd„dƒZ'Gdd„dƒZ(dd„Z)dd„Z*dd„Z+dd„Z,d&dd „Z-e)ƒZ.e.d!k�rr?r;rHrrrrr7{sr7cCsšd}tjj|ƒ}|d krdS|t|ƒ}tj|d…jddƒ\}}t|dd …ƒd}|dkrf|d7}t|dd…ƒd}|dkr†d }|dkr–||SdS) NzMSC v.réú r é ég$@réÿÿÿÿéþÿÿÿ)Úsysr=ÚfindÚlenÚsplitÚint)Úprefixr$r1ÚrestZ majorVersionZ minorVersionrrrÚget_build_version©s  rVcCs4g}x*|D]"}tjj|ƒ}||kr |j|ƒq W|S)N)ÚosrÚnormpathr!)ÚpathsZ reduced_pathsrCZnprrrÚnormalize_and_reduce_pathsÂs   rZcCs@|jtjƒ}g}x|D]}||kr|j|ƒqWtjj|ƒ}|S)N)rRrWÚpathsepr!Újoin)ZvariableZoldListZnewListr$Z newVariablerrrÚremoveDuplicatesÐs   r]c Cst|}ytjd|dƒ}Wn"tk r>tjdƒd}YnX| sTtjj|ƒ rÊd|}tj j |dƒ}|r¼tjj|ƒr¼tjj |tj tj dƒ}tjj |ƒ}tjj|ƒsÊtjd|ƒdSntjd|ƒ|sÜtjdƒdStjj |d ƒ}tjj|ƒrú|Stjd ƒ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.batzUnable to find vcvarsall.bat)r9rrrr ÚdebugrWrÚisdirÚenvironÚgetr\ÚpardirÚabspathÚisfile)r=r:r@ZtoolskeyZtoolsdirÚ vcvarsallrrrÚfind_vcvarsallÛs2         rfc Cs8t|ƒ}tdƒ}i}|dkr$tdƒ‚tjd||ƒtjd||ftjtjd�}z¨|jƒ\}}|j ƒd krvt|j d ƒƒ‚|j d ƒ}xr|j d ƒD]d}t j |ƒ}d |kr¤qŒ|jƒ}|j d d ƒ\} } | jƒ} | |krŒ| jtjƒrä| dd…} t| ƒ|| <qŒWWd|jjƒ|jjƒXt|ƒt|ƒk�r4ttt|jƒƒƒƒ‚|S)NÚincludeÚlibÚlibpathrzUnable to find vcvarsall.batz'Calling 'vcvarsall.bat %s' (version=%s)z "%s" %s & set)ÚstdoutÚstderrrr.Ú ú=r)rgrhrirrM)rfÚsetrr r^Ú subprocessÚPopenÚPIPEZ communicateÚwaitr-rRrr)Ústripr(ÚendswithrWr[r]rjÚcloserkrQÚ ValueErrorÚstrÚlistÚkeys) r=ZarchreZ interestingÚresultÚpopenrjrkÚlinerr+rrrÚquery_vcvarsallþs<         r}g @z(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.cxxz.rcz.mcz.resz.objz.libz.dllz%s%sz.exercCs8tj||||ƒ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>JszMSVCCompiler.__init__NcCs|dkrtƒ}d$}||kr(td|fƒ‚dtjkrfdtjkrf|jdƒrfd|_d|_d |_d |_d |_ nÂ|tƒksx|dkr‚t |}nt tƒd t |}t t |ƒ}|d j tjƒ|_|dtjd<|dtjd<t|jƒdkrìtd|jƒ‚|jdƒ|_|jdƒ|_|jd ƒ|_|jd ƒ|_|jd ƒ|_ y,x&tjd j dƒD]}|jj|ƒ�q||j k�r>|}d|}y"|j|jg| |g|gƒWqhtk �r8}zt|ƒ‚WYdd}~XqhXqhnÒ||jk�rtj j|ƒ}tj j|ƒ}yl|j|jgd|d|g|gƒtj jtj j|ƒƒ\}}tj j||dƒ}|j|jgd|g|gƒWqhtk �rú}zt|ƒ‚WYdd}~XqhXqhntd||fƒ‚d |}y&|j|jg| | ||g|ƒWqhtk �rj}zt|ƒ‚WYdd}~XqhXqhW| S) Nz/cz/Tcz/Tpz/foz-hz-rz.rcz"Don't know how to compile %s to %sz/Fo)r„r•Z_setup_compiler!Úextendr’r‘rrWrrcÚ _c_extensionsÚ_cpp_extensionsrœÚspawnrŽrrržÚdirnamer�r—r›r\rŒ)r<Zsourcesr r8Z include_dirsr^Ú extra_preargsÚextra_postargsZdependsZ compile_infoÚobjectsZpp_optsZbuildZ compile_optsÚobjÚsrcr¡Z input_optZ output_optÚmsgZh_dirZrc_dirrrˆZrc_filerrrÚcompileÊsj              zMSVCCompiler.compilec Csž|js|jƒ|j||ƒ\}}|j||d�}|j||ƒrŽ|d|g}|rJy|j|jg|ƒWqštk rŠ}zt|ƒ‚WYdd}~XqšXn t j d|ƒdS)N)r z/OUT:zskipping %s (up-to-date)) r„r•Ú_fix_object_argsÚlibrary_filenameÚ _need_linkr¦rhrrr r^) r<rªZoutput_libnamer r^Ú target_langÚoutput_filenameZlib_argsr­rrrÚcreate_static_libs zMSVCCompiler.create_static_libcCsX|js|jƒ|j||ƒ\}}|j|||ƒ}|\}}}|rL|jdt|ƒƒt||||ƒ}|dk rptjj ||ƒ}|j ||ƒ�rH|t j kr¬| rœ|j dd…}q¾|jdd…}n| r¸|j }n|j}g}x|pÊgD]}|jd|ƒqÌW||||d|g}tjj|dƒ} |dk �rPtjjtjj|ƒƒ\}}tjj | |j|ƒƒ}|jd|ƒ|j|| |ƒ| �rp| |dd…<| �r€|j| ƒ|jtjj|ƒƒy|j|jg|ƒWn,tk �rÔ}zt|ƒ‚WYdd}~XnX|j||ƒ}|dk �rT|\}}d||f}y|jdd d ||gƒWn,tk �rD}zt|ƒ‚WYdd}~XnXn tjd |ƒdS) Nz5I don't know what to do with 'runtime_library_dirs': rz/EXPORT:z/OUT:rz/IMPLIB:z-outputresource:%s;%szmt.exez-nologoz -manifestzskipping %s (up-to-date))r„r•r¯Z _fix_lib_argsÚwarnrwr rWrr\r±rÚ EXECUTABLEr”r“r!r§r—r›r°Úmanifest_setup_ldargsr£Zmkpathr¦r�rrÚmanifest_get_embed_infor r^)r<Ú target_descrªr³r Z librariesZ library_dirsZruntime_library_dirsZexport_symbolsr^r¨r©Ú build_tempr²Z fixed_argsZlib_optsZldflagsZ export_optsZsymÚld_argsZdll_nameZdll_extZ implib_filer­ZmfinfoZ mffilenameÚmfidZout_argrrrÚlink8sl           zMSVCCompiler.linkcCs,tjj|tjj|ƒdƒ}|jd|ƒdS)Nz .manifestz/MANIFESTFILE:)rWrr\r›r!)r<r³rºr»Ú temp_manifestrrrr·—sz"MSVCCompiler.manifest_setup_ldargscCs`x,|D] }|jdƒr|jddƒd}PqWdS|tjkr>d}nd}|j|ƒ}|dkrXdS||fS)Nz/MANIFESTFILE:ú:rr )Ú startswithrRrr¶Ú_remove_visual_c_ref)r<r¹r»Úargr¾r¼rrrr¸£s    z$MSVCCompiler.manifest_get_embed_infocCs²y˜t|ƒ}z |jƒ}Wd|jƒXtjdtjƒ}tj|d|ƒ}d}tj|d|ƒ}tjdtjƒ}tj||ƒdkrrdSt|dƒ}z|j|ƒ|S|jƒXWnt k r¬YnXdS)NzU|)r–z*\s*zI|)Úw) ÚopenÚreadruÚrer®ÚDOTALLrHÚsearchÚwriteÚOSError)r<Z manifest_fileZ manifest_fZ manifest_bufÚpatternrrrrÁ»s.     z!MSVCCompiler._remove_visual_c_refcCsd|S)Nz /LIBPATH:r)r<ÚdirrrrÚlibrary_dir_optionæszMSVCCompiler.library_dir_optioncCs tdƒ‚dS)NztjdjdƒD]*}tjjtjj|ƒ|ƒ}tjj|ƒrH|SqHW|S)NZPathr‰)r�rWrr\rcrdr`rR)r<ZexerCÚfnrrrr‹s   zMSVCCompiler.find_exe)rrr)N)rr–)NNNrNNN)NrN) NNNNNrNNNN)r)r2r3r4Z compiler_typeZ executablesr¤r¥rœržršr�rŸZstatic_lib_extensionZshared_lib_extensionZstatic_lib_formatZshared_lib_formatZ exe_extensionr>r•r¢r®r´r½r·r¸rÁrÍrÎrÏrÒr‹rrrrr~,sP  X  V  R + r~l)r)0rWrorOrÆ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_WIN64r9rBrAr�rr7rVrZr]rfr}rr~rrrrÚsL  >. # )