a XC?hõvã@sJddlZddlZddlZddlZddlmZmZmZmZm Z ddl m Z m Z ddl mZddlmZddlZejZejZejZejZejejejejfZejdkoª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-dkr6ed e-ƒ‚Gd!d"„d"e ƒZ.dS)$éN)ÚDistutilsExecErrorÚDistutilsPlatformErrorÚ CompileErrorÚLibErrorÚ LinkError)Ú CCompilerÚ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||vr||Sqt|ƒ‚dS©N)ÚHKEYSÚ read_valuesÚKeyError)ÚclsÚpathÚkeyÚbaseÚd©rúr9ÚNET_BASErrÚ WINSDK_BASErrrrrrr7)r;r<ÚprÚhrrrrrr:ƒs2ÿ  ÿ    zMacroExpander.load_macroscCs$|j ¡D]\}}| ||¡}q |Sr)r7ÚitemsÚreplace)r;r0r$ÚvrrrÚsub¢szMacroExpander.subN)r1r2r3r=r>r:rHrrrrr6ysr6cCsš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#r0ÚrestZ majorVersionZ minorVersionrrrÚget_build_version§s  rWcCs0g}|D]"}tj |¡}||vr| |¡q|Sr)ÚosrÚnormpathr )ÚpathsZ reduced_pathsrCZnprrrÚnormalize_and_reduce_pathsÀs   r[cCs<| tj¡}g}|D]}||vr| |¡qtj |¡}|Sr)rSrXÚpathsepr Újoin)ZvariableZoldListZnewListr#Z newVariablerrrÚremoveDuplicatesÎs   r^cCst|}zt d|d¡}Wn ty<t d¡d}Yn0|rNtj |¡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)r8rrrr ÚdebugrXrÚisdirÚenvironÚgetr]ÚpardirÚabspathÚisfile)r<r9r?ZtoolskeyZtoolsdirÚ vcvarsallrrrÚfind_vcvarsallÙs4 ÿ        rhc CsHt|ƒ}hd£}i}|dur$tdƒ‚t d||¡tjd||ftjtjd}z¸| ¡\}}| ¡dkrvt|  d¡ƒ‚|  d¡}|  d¡D]d}t   |¡}d |vr¢qŠ|  ¡}|  d d ¡\} } |  ¡} | |vrŠ|  tj¡râ| dd …} t| ƒ|| <qŠW|j ¡|j ¡n|j ¡|j ¡0t|ƒt|ƒkrDttt| ¡ƒƒƒ‚|S) N>rÚlibZlibpathÚincluder_z'Calling 'vcvarsall.bat %s' (version=%s)z "%s" %s & set)ÚstdoutÚstderrrr-Ú ú=rrI)rhrr r`Ú subprocessÚPopenÚPIPEZ communicateÚwaitr,rSrr(Ústripr'ÚendswithrXr\r^rkÚcloserlrRÚ ValueErrorÚstrÚlistÚkeys) r<ZarchrgZ interestingÚresultÚpopenrkrlÚlinerr*rrrÚquery_vcvarsallüsBþ        ÿ  r}r@z(VC %0.1f is not supported by this modulec @sØeZdZdZiZdgZgd¢ZdgZdgZeeeeZ dZ dZ dZ d Z d ZZd Zd+d d„Zd,dd„Zd-dd„Zd.dd„Zd/dd„Zd0dd„Zdd„Zdd„Zdd „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=HszMSVCCompiler.__init__NcCsò|durtƒ}d}||vr(td|fƒ‚dtjvrfdtjvrf| 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:WntydYn0t|jƒ|_d |j¡tjd <d|_|jdkr¬gd¢|_gd¢|_ngd¢|_gd¢|_gd¢|_|jdkràgd¢|_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)r‰rŠr‹rŒú/GS-r)r‰rŽrrŒr’rr‘)ú/DLLr‰z/INCREMENTAL:NOé)r“r‰z/INCREMENTAL:noz/DEBUGr‰T)r rrXrbÚfind_exeÚccÚlinkerriÚrcÚmcÚPLAT_TO_VCVARSr}r€rSr\r‚rRZ_MSVCCompiler__productr rr[r]Zpreprocess_optionsr„Úcompile_optionsÚcompile_options_debugÚldflags_sharedrÚldflags_shared_debugZldflags_staticr…)r;rƒZok_platsZ plat_specZvc_envrCrrrÚ initializeSsbÿ  ÿ ý              zMSVCCompiler.initializeÚcCsÞ|dur d}g}|D]Ä}tj |¡\}}tj |¡d}|tj |¡d…}||jvrbtd|ƒ‚|rrtj |¡}||jvr˜|  tj  |||j ¡¡q||j vr¾|  tj  |||j ¡¡q|  tj  |||j ¡¡q|S)Nr rzDon't know how to compile %s)rXrÚ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  Cst|js| ¡| ||||||¡} | \}} }} } |p6g} |  d¡|rT|  |j¡n |  |j¡| D]}z| |\}}WntyYqdYn0|r¢tj   |¡}||j vr¸d|}nX||j vrÎd|}nB||j vr<|}d|}z"| |jg| |g|g¡Wqdty6}zt|ƒ‚WYd}~qdd}~00qdnÔ||jvrtj  |¡}tj  |¡}zl| |jgd|d|g|g¡tj  tj  |¡¡\}}tj  ||d¡}| |jgd|g|g¡Wqdtyú}zt|ƒ‚WYd}~qdd}~00qdntd||fƒ‚d |}z&| |jg| | ||g|¡Wqdtyl}zt|ƒ‚WYd}~qdd}~00qd| S) Nz/cz/Tcz/Tpz/foz-hz-rrz"Don't know how to compile %s to %sz/Fo)r…rŸZ_setup_compiler Úextendrœr›rrXrreÚ _c_extensionsÚ_cpp_extensionsr¦Úspawnr˜rrr¨Údirnamer™r¡r¥r]r–)r;Zsourcesrªr7Z 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Çs„ ÿ           ÿÿ     ÿÿ ÿÿ ÿÿþ  zMSVCCompiler.compilec Cs |js| ¡| ||¡\}}|j||d}| ||¡r|d|g}|rJz| |jg|¡WqœtyŒ}zt|ƒ‚WYd}~qœd}~00n t   d|¡dS)N)rªú/OUT:úskipping %s (up-to-date)) r…rŸÚ_fix_object_argsÚlibrary_filenameÚ _need_linkr°rirrr r`) r;r´Zoutput_libnamerªr`Ú target_langÚoutput_filenameZlib_argsr·rrrÚcreate_static_libsÿ  zMSVCCompiler.create_static_libc CsX|js| ¡| ||¡\}}| |||¡}|\}}}|rL| dt|ƒ¡t||||ƒ}|durptj  ||¡}|  ||¡rH|t j kr¬| rœ|j dd…}q¾|jdd…}n| r¸|j }n|j}g}|pÈgD]}| d|¡qÊ||||d|g}tj |d¡} |durLtj tj |¡¡\}}tj  | | |¡¡}| d|¡| || |¡| rl| |dd…<| r|| | ¡| tj |¡¡z| |jg|¡Wn.tyÒ}zt|ƒ‚WYd}~n d}~00| ||¡}|durT|\}}d||f}z| dd d ||g¡Wn.tyD}zt|ƒ‚WYd}~n d}~00n 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ÚwarnrwrrXrr]r½rÚ EXECUTABLEržrr 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Úlink5s€ÿ ÿþ   ÿÿ  ÿþ      ÿ  zMSVCCompiler.linkcCs,tj |tj |¡d¡}| d|¡dS)Nz .manifestú/MANIFESTFILE:)rXrr]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) ÚopenÚreadruÚrer¸ÚDOTALLrHÚsearchÚwriteÚOSError)r;Z manifest_fileZ manifest_fZ manifest_bufÚpatternrrrrθs6  ýþ  þ z!MSVCCompiler._remove_visual_c_refcCsd|S)Nz /LIBPATH:r©r;ÚdirrrrÚlibrary_dir_optionãszMSVCCompiler.library_dir_optioncCs tdƒ‚dS)NzsN  ýþ>. # )