U Æ:âe/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.dkr: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ú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)ÚvariableZoldListZnewListr$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 ÿ       rjc 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|ƒkr4ttt| ¡ƒƒƒ‚|S)NÚincludeÚlibZlibpathrraz'Calling 'vcvarsall.bat %s' (version=%s)z "%s" %s & set)ÚstdoutÚstderrrr.Ú ú=rrJ)rjrr rbÚ subprocessÚPopenÚPIPErmÚclosernÚ communicateÚwaitr-rTrr)Ústripr(ÚendswithrYr]r`rSÚ ValueErrorÚstrÚlistÚkeys) r=ZarchriZ interestingÚresultÚpopenrmrnÚ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<ÚverboseÚdry_runÚforcerrrr>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|_|jdkr¼dddddg|_ddddddg|_n&ddddddg|_dddddddg|_dddg|_|jdkrddd d!g|_dg|_d"|_dS)#Nrz--plat-name must be one of %sZDISTUTILS_USE_SDKZMSSdkzcl.exezlink.exezlib.exezrc.exezmc.exer Ú_rrlrkrzxPython 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 rrYrdÚfind_exeÚccÚlinkerrlÚ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 kr<|}d|}z"| |jg| |g|g¡Wqdtk r6}z t|ƒ‚W5d}~XYqdXqdnÒ||jkrþ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•rrYrrgÚ _c_extensionsÚ_cpp_extensionsr Úspawnr’rrr¢Údirnamer“r›rŸr^r)r<Zsourcesr¤r8Z include_dirsrbÚ 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ªrlrrr rb) r<r®Zoutput_libnamer¤rbÚ 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Úwarnrzr rYrr^r·rÚ EXECUTABLEr˜r—r!r«r›rŸr¶Úmanifest_setup_ldargsr§Zmkpathrªr‘rrÚmanifest_get_embed_infor rb)r<Ú target_descr®r¹r¤Z librariesZ library_dirsZruntime_library_dirsZexport_symbolsrbr¬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) ÚopenrtÚ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Úrrrrrr+sj ÿÿ Wý þ Xû ó _ + r)r )0rYrqrQrÍ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`rjr€rƒrrrrrÚsN  ýþ>. # )