a „oe>¹ã@s2dZddlZddlmZddlmZmZddlmZm Z m Z m Z ddl m Z ddlZddlZddlZddl Z ddlZddlmZe ¡dkr¢ddlZdd lmZnGd d „d ƒZeƒZd d „Zdd„ZdddddœZdd„Zdd„Zdd„Zd&dd„ZGdd„dƒZ Gd d!„d!ƒZ!Gd"d#„d#ƒZ"Gd$d%„d%ƒZ#dS)'a› Improved support for Microsoft Visual C++ compilers. Known supported compilers: -------------------------- Microsoft Visual C++ 14.X: Microsoft Visual C++ Build Tools 2015 (x86, x64, arm) Microsoft Visual Studio Build Tools 2017 (x86, x64, arm, arm64) Microsoft Visual Studio Build Tools 2019 (x86, x64, arm, arm64) This may also support compilers shipped with compatible Visual Studio versions. éN)Úopen)ÚlistdirÚpathsep)ÚjoinÚisfileÚisdirÚdirname)ÚCalledProcessError)Úunique_everseenÚWindows)Úenvironc@seZdZdZdZdZdZdS)ÚwinregN)Ú__name__Ú __module__Ú __qualname__Ú HKEY_USERSÚHKEY_CURRENT_USERÚHKEY_LOCAL_MACHINEÚHKEY_CLASSES_ROOT©rrú0C:\Program Files\Certbot\pkgs\setuptools\msvc.pyr sr c Cszt tjddtjtjB¡}Wnty2YdS0d}d}|�ªt ¡D]�}zt ||¡\}}}Wnty|YqÜYn0|rJ|tj krJt |ƒrJzt t |ƒƒ}Wnt tfy¾YqJYn0|dkrJ||krJ||}}qJWdƒn1sð0Y||fS)ú0Python 3.8 "distutils/_msvccompiler.py" backportz'Software\Microsoft\VisualStudio\SxS\VC7r©NNNé)r ÚOpenKeyrÚKEY_READÚKEY_WOW64_32KEYÚOSErrorÚ itertoolsÚcountÚ EnumValueÚREG_SZrÚintÚfloatÚ ValueErrorÚ TypeError)ÚkeyÚ best_versionÚbest_dirÚiÚvZvc_dirZvtÚversionrrrÚ_msvc14_find_vc2015)s2 ü     *r,c CsÀt d¡pt d¡}|sdSd}|D]–}t ttt¡�tt t |dddƒdd d |d d d dg ¡j ddd�  ¡}t |dddƒ}t |ƒrœd|fWdƒSWdƒq$1s°0Yq$dS)a€Python 3.8 "distutils/_msvccompiler.py" backport Returns "15, path" based on the result of invoking vswhere.exe If no install is found, returns "None, None" The version is returned to avoid unnecessarily changing the function result. It may be ignored when the path is not None. If vswhere.exe is not available, by definition, VS 2017 is not installed. úProgramFiles(x86)Ú ProgramFilesr)z1Microsoft.VisualStudio.Component.VC.Tools.x86.x64z)Microsoft.VisualStudio.Workload.WDExpresszMicrosoft Visual StudioZ Installerz vswhere.exez-latestz -prereleasez -requiresz -propertyÚinstallationPathz -productsÚ*ÚmbcsÚstrict)ÚencodingÚerrorsÚVCZ AuxiliaryZBuildéN) r ÚgetÚ contextlibÚsuppressr rÚUnicodeDecodeErrorÚ subprocessÚ check_outputrÚdecodeÚstripr)ÚrootZsuitable_componentsZ componentÚpathrrrÚ_msvc14_find_vc2017Gs6 ÿõÿñÿ:rAÚx86Úx64ZarmZarm64)rBZ x86_amd64Zx86_armZ x86_arm64c Csàtƒ\}}d}|tvr t|}nd|vr,dnd}|rˆt|ddddd|d d ƒ }zd dl}|j|d d �d}Wntttfy†d}Yn0|sªtƒ\}}|rªt|d|dd ƒ}|s²dSt|dƒ}t|ƒsÈdS|rÔt|ƒsØd}||fS)rNÚamd64rCrBz..ÚredistZMSVCz**zMicrosoft.VC14*.CRTzvcruntime140.dllrT)Ú recursiveéÿÿÿÿzMicrosoft.VC140.CRTrz vcvarsall.bat) rAÚPLAT_SPEC_TO_RUNTIMErÚglobÚ ImportErrorrÚ LookupErrorr,r) Ú plat_specÚ_r(Ú vcruntimeZvcruntime_platZvcredistrIr'Ú vcvarsallrrrÚ_msvc14_find_vcvarsall‚sP  ÷   û  rPc CsÆdtvrdd„t ¡DƒSt|ƒ\}}|s6tj d¡‚z&tjd ||¡tj d�j ddd �}Wn<tj y˜}z"tj d  |j ¡¡|‚WYd }~n d }~00d d„d d„|  ¡DƒDƒ}|rÂ||d<|S)rZDISTUTILS_USE_SDKcSsi|]\}}| ¡|“qSr©Úlower)Ú.0r&ÚvaluerrrÚ ºóz&_msvc14_get_vc_env..zUnable to find vcvarsall.batzcmd /u /c "{}" {} && set)Ústderrzutf-16leÚreplace)r4zError executing {}NcSs$i|]\}}}|r|r| ¡|“qSrrQ)rSr&rMrTrrrrUÊsþcss|]}| d¡VqdS)ú=N)Ú partition)rSÚlinerrrÚ ÌrVz%_msvc14_get_vc_env..Úpy_vcruntime_redist)r ÚitemsrPÚ distutilsr4ÚDistutilsPlatformErrorr;r<ÚformatZSTDOUTr=r ÚcmdÚ splitlines)rLrOrNÚoutÚexcÚenvrrrÚ_msvc14_get_vc_env·s0   þý  ÿþþrgc CsDz t|ƒWStjjy>}zt|dƒ‚WYd}~n d}~00dS)a* Patched "distutils._msvccompiler._get_vc_env" for support extra Microsoft Visual C++ 14.X compilers. Set environment without use of "vcvarsall.bat". Parameters ---------- plat_spec: str Target architecture. Return ------ dict environment ç,@N)rgr_r4r`Ú_augment_exception)rLrerrrÚmsvc14_get_vc_envÕs   rjÚcCs¤|jd}d| ¡vs"d| ¡vr˜d}|jfitƒ¤Ž}d}|dkrj| ¡ d¡dkr`|d 7}q˜|d 7}n.|d krˆ|d 7}||d 7}n|dkr˜|d7}|f|_dS)zl Add details to the exception message to help guide the user as to what action will resolve it. rrOzvisual cz;Microsoft Visual C++ {version:0.1f} or greater is required.z-www.microsoft.com/download/details.aspx?id=%dç"@Zia64rGz( Get it with "Microsoft Windows SDK 7.0"z% Get it from http://aka.ms/vcpython27ç$@z* Get it with "Microsoft Windows SDK 7.1": iW rhzd Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/N)ÚargsrRraÚlocalsÚfind)rer+ÚarchÚmessageZtmplZ msdownloadrrrriïs"   ÿric@sbeZdZdZe dd¡ ¡Zdd„Ze dd„ƒZ dd „Z d d „Z dd d„Z ddd„Zddd„ZdS)Ú PlatformInfoz� Current and Target Architectures information. Parameters ---------- arch: str Target architecture. Zprocessor_architecturerkcCs| ¡ dd¡|_dS)NrCrD)rRrXrq)ÚselfrqrrrÚ__init__"szPlatformInfo.__init__cCs|j|j d¡dd…S)zs Return Target CPU architecture. Return ------ str Target CPU rMéN)rqrp©rtrrrÚ target_cpu%s zPlatformInfo.target_cpucCs |jdkS)z‡ Return True if target CPU is x86 32 bits.. Return ------ bool CPU is x86 32 bits rB©rxrwrrrÚ target_is_x861s zPlatformInfo.target_is_x86cCs |jdkS)zˆ Return True if current CPU is x86 32 bits.. Return ------ bool CPU is x86 32 bits rB©Ú current_cpurwrrrÚcurrent_is_x86<s zPlatformInfo.current_is_x86FcCs.|jdkr|rdS|jdkr$|r$dSd|jS)uk Current platform specific subfolder. Parameters ---------- hidex86: bool return '' and not '†' if architecture is x86. x64: bool return 'd' and not 'md64' if architecture is amd64. Return ------ str subfolder: ' arget', or '' (see hidex86 parameter) rBrkrDú\x64ú\%sr{©rtÚhidex86rCrrrÚ current_dirGsÿÿÿÿûzPlatformInfo.current_dircCs.|jdkr|rdS|jdkr$|r$dSd|jS)ar Target platform specific subfolder. Parameters ---------- hidex86: bool return '' and not '\x86' if architecture is x86. x64: bool return '\x64' and not '\amd64' if architecture is amd64. Return ------ str subfolder: '\current', or '' (see hidex86 parameter) rBrkrDr~rryr€rrrÚ target_dir_sÿÿÿÿûzPlatformInfo.target_dircCs0|rdn|j}|j|krdS| ¡ dd|¡S)ap Cross platform specific subfolder. Parameters ---------- forcex86: bool Use 'x86' as current architecture even if current architecture is not x86. Return ------ str subfolder: '' if target architecture is current architecture, '\current_target' if not. rBrkú\z\%s_)r|rxrƒrX)rtÚforcex86ÚcurrentrrrÚ cross_dirws ÿýzPlatformInfo.cross_dirN)FF)FF)F)rrrÚ__doc__r r7rRr|ruÚpropertyrxrzr}r‚rƒr‡rrrrrss     rsc@sªeZdZdZejejejejfZ dd„Z e dd„ƒZ e dd„ƒZ e dd „ƒZe d d „ƒZe d d „ƒZe dd„ƒZe dd„ƒZe dd„ƒZe dd„ƒZddd„Zdd„ZdS)Ú RegistryInfozŸ Microsoft Visual Studio related registry information. Parameters ---------- platform_info: PlatformInfo "PlatformInfo" instance. cCs ||_dS©N)Úpi)rtZ platform_inforrrru szRegistryInfo.__init__cCsdS)z€ Microsoft Visual Studio root registry key. Return ------ str Registry key Z VisualStudiorrwrrrÚ visualstudio£s zRegistryInfo.visualstudiocCs t|jdƒS)z Microsoft Visual Studio SxS registry key. Return ------ str Registry key ZSxS)rr�rwrrrÚsxs¯s zRegistryInfo.sxscCs t|jdƒS)z| Microsoft Visual C++ VC7 registry key. Return ------ str Registry key ZVC7©rrŽrwrrrÚvc»s zRegistryInfo.vccCs t|jdƒS)z Microsoft Visual Studio VS7 registry key. Return ------ str Registry key ZVS7r�rwrrrÚvsÇs zRegistryInfo.vscCsdS)zƒ Microsoft Visual C++ for Python registry key. Return ------ str Registry key zDevDiv\VCForPythonrrwrrrÚ vc_for_pythonÓs zRegistryInfo.vc_for_pythoncCsdS)zq Microsoft SDK registry key. Return ------ str Registry key zMicrosoft SDKsrrwrrrÚ microsoft_sdkßs zRegistryInfo.microsoft_sdkcCs t|jdƒS)z‚ Microsoft Windows/Platform SDK registry key. Return ------ str Registry key r ©rr“rwrrrÚ windows_sdkës zRegistryInfo.windows_sdkcCs t|jdƒS)z€ Microsoft .NET Framework SDK registry key. Return ------ str Registry key ZNETFXSDKr”rwrrrÚ netfx_sdk÷s zRegistryInfo.netfx_sdkcCsdS)z€ Microsoft Windows Kits Roots registry key. Return ------ str Registry key zWindows Kits\Installed RootsrrwrrrÚwindows_kits_rootss zRegistryInfo.windows_kits_rootsFcCs$|j ¡s|rdnd}td|d|ƒS)a Return key in Microsoft software registry. Parameters ---------- key: str Registry key path where look. x86: str Force x86 software registry. Return ------ str Registry key rkZ Wow6432NodeZSoftwareZ Microsoft)rŒr}r)rtr&rBZnode64rrrÚ microsoftszRegistryInfo.microsoftc Csðtj}tj}tj}|j}|jD]Ì}d}z||||ƒd|ƒ}WnTty�|j ¡sˆz||||dƒd|ƒ}WqŒty„YYqYqŒ0nYqYn0zHz$t  ||¡dWW|r´||ƒStyÊYn0W|rê||ƒq|rè||ƒ0qdS)a Look for values in registry in Microsoft software registry. Parameters ---------- key: str Registry key path where look. name: str Value name to find. Return ------ str value NrT) r rrÚCloseKeyr˜ÚHKEYSrrŒr}Ú QueryValueEx) rtr&ÚnameZkey_readZopenkeyZclosekeyÚmsÚhkeyÚbkeyrrrÚlookup"s4     û  ÿzRegistryInfo.lookupN)F)rrrrˆr rrrrršrur‰r�rŽr�r‘r’r“r•r–r—r˜r rrrrrŠ�s6 ü         rŠc@s<eZdZdZe dd¡Ze dd¡Ze de¡Zd7dd„Z d d „Z d d „Z d d„Z e dd„ƒZedd„ƒZedd„ƒZdd„Zdd„Zedd„ƒZedd„ƒZedd„ƒZedd „ƒZed!d"„ƒZed#d$„ƒZed%d&„ƒZed'd(„ƒZed)d*„ƒZed+d,„ƒZed-d.„ƒZed/d0„ƒZed1d2„ƒZ d3d4„Z!e d8d5d6„ƒZ"dS)9Ú SystemInfozê Microsoft Windows and Visual Studio related system information. Parameters ---------- registry_info: RegistryInfo "RegistryInfo" instance. vc_ver: float Required Microsoft Visual C++ version. ÚWinDirrkr.r-NcCs2||_|jj|_| ¡|_|p$| ¡|_|_dSr‹)ÚrirŒÚfind_programdata_vs_versÚknown_vs_pathsÚ_find_latest_available_vs_verÚvs_verÚvc_ver)rtZ registry_infor¨rrrru]s  zSystemInfo.__init__cCs>| ¡}|s|jstj d¡‚t|ƒ}| |j¡t|ƒdS)zm Find the latest VC version Return ------ float version z%No Microsoft Visual C++ version foundrG)Úfind_reg_vs_versr¥r_r4r`ÚsetÚupdateÚsorted)rtZ reg_vc_versZvc_versrrrr¦fs  ÿ z(SystemInfo._find_latest_available_vs_verc Csj|jj}|jj|jj|jjf}g}t |jj|¡D�],\}}zt  |||ƒdtj ¡}Wnt ylYq2Yn0|�Üt  |¡\}}} t |ƒD]T} t t¡�6tt || ¡dƒ} | |vrÂ| | ¡WdƒqŒ1sÖ0YqŒt |ƒD]T} t t¡�4tt || ¡ƒ} | |v�r| | ¡Wdƒqê1�s40YqêWdƒq21�sV0Yq2t|ƒS)z˜ Find Microsoft Visual Studio versions available in registry. Return ------ list of float Versions rN)r£r˜r�r’r‘rÚproductršr rrrÚ QueryInfoKeyÚranger8r9r$r#r ÚappendÚEnumKeyr¬) rtr�ZvckeysZvs_versržr&rŸZsubkeysÚvaluesrMr)Úverrrrr©zs*     *   NzSystemInfo.find_reg_vs_versc CsÆi}d}z t|ƒ}Wnty*|YS0|D]�}zpt||dƒ}t|ddd��}t |¡}Wdƒn1sp0Y|d}tt|dƒƒ||| |d ¡<Wq0ttfy¾Yq0Yq00q0|S) zé Find Visual studio 2017+ versions from information in "C:\ProgramData\Microsoft\VisualStudio\Packages\_Instances". Return ------ dict float version as key, path as value. z9C:\ProgramData\Microsoft\VisualStudio\Packages\_Instancesz state.jsonZrtzutf-8)r3Nr/ú VC\Tools\MSVCZinstallationVersion)rrrrÚjsonÚloadÚ_as_float_versionÚKeyError) rtZ vs_versionsZ instances_dirZ hashed_namesrœZ state_pathZ state_fileÚstateZvs_pathrrrr¤™s(     (þ ÿ z#SystemInfo.find_programdata_vs_verscCstd | d¡dd…¡ƒS)zç Return a string version as a simplified float version (major.minor) Parameters ---------- version: str Version. Return ------ float version Ú.Né)r#rÚsplit)r+rrrr·ÃszSystemInfo._as_float_versioncCs.t|jd|jƒ}|j |jjd|j¡p,|S)zp Microsoft Visual Studio directory. Return ------ str path zMicrosoft Visual Studio %0.1fú%0.1f)rÚProgramFilesx86r§r£r r‘)rtÚdefaultrrrÚ VSInstallDirÔs  ÿzSystemInfo.VSInstallDircCs,| ¡p| ¡}t|ƒs(d}tj |¡‚|S)zm Microsoft Visual C++ directory. Return ------ str path z(Microsoft Visual C++ directory not found)Ú _guess_vcÚ_guess_vc_legacyrr_r4r`)rtr@ÚmsgrrrÚ VCInstallDiræs  zSystemInfo.VCInstallDirc Cs„|jdkrdSz|j|j}Wnty6|j}Yn0t|dƒ}z$t|ƒd}| |¡|_t||ƒWStt fy~YdS0dS)zl Locate Visual C++ for VS2017+. Return ------ str path rhrkr´rGN) r§r¥r¸rÀrrr·r¨rÚ IndexError)rtZvs_dirZguess_vcr¨rrrrÁøs       zSystemInfo._guess_vccCsbt|jd|jƒ}t|jjd|jƒ}|j |d¡}|rBt|dƒn|}|j |jjd|j¡p`|S)z{ Locate Visual C++ for versions prior to 2017. Return ------ str path z Microsoft Visual Studio %0.1f\VCr½Ú installdirr5)rr¾r§r£r’r r�)rtr¿Zreg_pathZ python_vcZ default_vcrrrrÂs  ÿzSystemInfo._guess_vc_legacycCsJ|jdkrdS|jdkrdS|jdkr*dS|jdkr8dS|jd krFd Sd S) z— Microsoft Windows SDK versions for specified MSVC++ version. Return ------ tuple of str versions rl)z7.0z6.1z6.0arm)z7.1z7.0aç&@)z8.0z8.0aç(@)ú8.1z8.1arh)z10.0rÉN©r§rwrrrÚWindowsSdkVersion+s     zSystemInfo.WindowsSdkVersioncCs| t|jdƒ¡S)zt Microsoft Windows SDK last version. Return ------ str version Úlib)Ú_use_last_dir_namerÚ WindowsSdkDirrwrrrÚWindowsSdkLastVersion@s z SystemInfo.WindowsSdkLastVersioncCs d}|jD],}t|jjd|ƒ}|j |d¡}|r q8q |rDt|ƒstt|jjd|jƒ}|j |d¡}|rtt|dƒ}|r€t|ƒs¾|jD]6}|d| d¡…}d |}t|j |ƒ}t|ƒr†|}q†|rÊt|ƒsö|jD]$}d |}t|j |ƒ}t|ƒrÐ|}qÐ|�st|j d ƒ}|S) zn Microsoft Windows SDK directory. Return ------ str path rkzv%sÚinstallationfolderr½rÆZWinSDKNrºzMicrosoft SDKs\Windows Kits\%szMicrosoft SDKs\Windows\v%sZ PlatformSDK) rËrr£r•r rr’r¨Úrfindr.rÄ)rtÚsdkdirr³Úlocr@Z install_baseZintverÚdrrrrÎLs6           zSystemInfo.WindowsSdkDirc CsÌ|jdkrd}d}n&d}|jdkr&dnd}|jjd|d�}d || d d ¡f}g}|jd kr~|jD]}|t|jj||ƒg7}qb|jD]}|t|jj d ||ƒg7}q„|D]}|j  |d¡}|r¨|Sq¨dS)zy Microsoft Windows SDK executable directory. Return ------ str path rÇé#rké(rÈTF)rCr�zWinSDK-NetFx%dTools%sr„ú-rhzv%sArÐN) r§rŒr‚rXÚNetFxSdkVersionrr£r–rËr•r ) rtZnetfxverrqr�ZfxZregpathsr³r@ZexecpathrrrÚWindowsSDKExecutablePathws"    z#SystemInfo.WindowsSDKExecutablePathcCs&t|jjd|jƒ}|j |d¡p$dS)zl Microsoft Visual F# directory. Return ------ str path z%0.1f\Setup\F#Z productdirrk)rr£r�r§r )rtr@rrrÚFSharpInstallDiršs zSystemInfo.FSharpInstallDircCsF|jdkrdnd}|D]*}|j |jjd|¡}|r|p:dSqdS)zt Microsoft Universal CRT SDK directory. Return ------ str path rh)Z10Z81rz kitsroot%srkN)r§r£r r—)rtZversr³rÒrrrÚUniversalCRTSdkDir§s zSystemInfo.UniversalCRTSdkDircCs| t|jdƒ¡S)z€ Microsoft Universal C Runtime SDK last version. Return ------ str version rÌ)rÍrrÛrwrrrÚUniversalCRTSdkLastVersionºs z%SystemInfo.UniversalCRTSdkLastVersioncCs|jdkrdSdS)z� Microsoft .NET Framework SDK versions. Return ------ tuple of str versions rh) z4.7.2z4.7.1z4.7z4.6.2z4.6.1z4.6z4.5.2z4.5.1z4.5rrÊrwrrrrØÆs ÿýzSystemInfo.NetFxSdkVersioncCs8d}|jD](}t|jj|ƒ}|j |d¡}|r q4q |S)zu Microsoft .NET Framework SDK directory. Return ------ str path rkZkitsinstallationfolder)rØrr£r–r )rtrÒr³rÓrrrÚ NetFxSdkDir×s  zSystemInfo.NetFxSdkDircCs"t|jdƒ}|j |jjd¡p |S)zw Microsoft .NET Framework 32bit directory. Return ------ str path zMicrosoft.NET\FrameworkZframeworkdir32©rr¢r£r r�©rtZguess_fwrrrÚFrameworkDir32és zSystemInfo.FrameworkDir32cCs"t|jdƒ}|j |jjd¡p |S)zw Microsoft .NET Framework 64bit directory. Return ------ str path zMicrosoft.NET\Framework64Zframeworkdir64rÞrßrrrÚFrameworkDir64ùs zSystemInfo.FrameworkDir64cCs | d¡S)zƒ Microsoft .NET Framework 32bit versions. Return ------ tuple of str versions é ©Ú_find_dot_net_versionsrwrrrÚFrameworkVersion32 s zSystemInfo.FrameworkVersion32cCs | d¡S)zƒ Microsoft .NET Framework 64bit versions. Return ------ tuple of str versions é@rãrwrrrÚFrameworkVersion64s zSystemInfo.FrameworkVersion64cCs”|j |jjd|¡}t|d|ƒ}|p6| |d¡p6d}|jdkrJ|dfS|jdkrt| ¡dd …d krld n|d fS|jd kr‚dS|jdkr�dSdS)zê Find Microsoft .NET Framework versions. Parameters ---------- bits: int Platform number of bits: 32 or 64. Return ------ tuple of str versions zframeworkver%dzFrameworkDir%dr*rkrÈzv4.0rmNr»Zv4z v4.0.30319úv3.5rl)rèú v2.0.50727g @)zv3.0ré)r£r r�ÚgetattrrÍr§rR)rtÚbitsZreg_verZ dot_net_dirr³rrrrä!s     z!SystemInfo._find_dot_net_versionscs*‡‡fdd„ttˆƒƒDƒ}t|dƒp(dS)a) Return name of the last dir in path or '' if no dir found. Parameters ---------- path: str Use dirs in this path prefix: str Use only dirs starting by this prefix Return ------ str name c3s*|]"}ttˆ|ƒƒr| ˆ¡r|VqdSr‹)rrÚ startswith)rSZdir_name©r@Úprefixrrr\Osþz0SystemInfo._use_last_dir_name..Nrk)ÚreversedrÚnext)r@rîZ matching_dirsrrírrÍ>s  þzSystemInfo._use_last_dir_name)N)rk)#rrrrˆr r7r¢r.r¾rur¦r©r¤Ú staticmethodr·r‰rÀrÄrÁrÂrËrÏrÎrÙrÚrÛrÜrØrÝràrárårçrärÍrrrrr¡KsZ    *      * "         r¡c@sTeZdZdZd=dd„Zedd„ƒZedd „ƒZed d „ƒZed d „ƒZ edd„ƒZ edd„ƒZ edd„ƒZ edd„ƒZ edd„ƒZedd„ƒZedd„ƒZdd„Zedd„ƒZed d!„ƒZed"d#„ƒZed$d%„ƒZed&d'„ƒZed(d)„ƒZed*d+„ƒZed,d-„ƒZed.d/„ƒZed0d1„ƒZed2d3„ƒZed4d5„ƒZed6d7„ƒZd>d9d:„Zd;d<„Z dS)?ÚEnvironmentInfoaY Return environment variables for specified Microsoft Visual C++ version and platform : Lib, Include, Path and libpath. This function is compatible with Microsoft Visual C++ 9.0 to 14.X. Script created by analysing Microsoft environment configuration files like "vcvars[...].bat", "SetEnv.Cmd", "vcbuildtools.bat", ... Parameters ---------- arch: str Target architecture. vc_ver: float Required Microsoft Visual C++ version. If not set, autodetect the last version. vc_min_ver: float Minimum Microsoft Visual C++ version. NrcCsBt|ƒ|_t|jƒ|_t|j|ƒ|_|j|kr>d}tj  |¡‚dS)Nz.No suitable Microsoft Visual C++ version found) rsrŒrŠr£r¡Úsir¨r_r4r`)rtrqr¨Z vc_min_verÚerrrrrruos    zEnvironmentInfo.__init__cCs|jjS)zk Microsoft Visual Studio. Return ------ float version )rór§rwrrrr§xs zEnvironmentInfo.vs_vercCs|jjS)zp Microsoft Visual C++ version. Return ------ float version )rór¨rwrrrr¨„s zEnvironmentInfo.vc_vercsVddg}ˆjdkrDˆjjddd�}|dg7}|dg7}|d|g7}‡fd d „|DƒS) zu Microsoft Visual Studio Tools. Return ------ list of str paths z Common7\IDEz Common7\ToolsrhT©r�rCz1Common7\IDE\CommonExtensions\Microsoft\TestWindowzTeam Tools\Performance ToolszTeam Tools\Performance Tools%scsg|]}tˆjj|ƒ‘qSr©rrórÀ©rSr@rwrrÚ ¢rVz+EnvironmentInfo.VSTools..)r§rŒr‚)rtÚpathsÚ arch_subdirrrwrÚVSTools�s    zEnvironmentInfo.VSToolscCst|jjdƒt|jjdƒgS)z’ Microsoft Visual C++ & Microsoft Foundation Class Includes. Return ------ list of str paths ZIncludezATLMFC\Include©rrórÄrwrrrÚ VCIncludes¤s  þzEnvironmentInfo.VCIncludescsbˆjdkrˆjjdd�}nˆjjdd�}d|d|g}ˆjdkrP|d|g7}‡fd d „|DƒS) z“ Microsoft Visual C++ & Microsoft Foundation Class Libraries. Return ------ list of str paths ç.@T©rC©r�úLib%sz ATLMFC\Lib%srhz Lib\store%scsg|]}tˆjj|ƒ‘qSrrür÷rwrrrøÆrVz/EnvironmentInfo.VCLibraries..)r§rŒrƒ)rtrúrùrrwrÚ VCLibraries³s  zEnvironmentInfo.VCLibrariescCs|jdkrgSt|jjdƒgS)z‡ Microsoft Visual C++ store references Libraries. Return ------ list of str paths rhzLib\store\references)r§rrórÄrwrrrÚ VCStoreRefsÈs zEnvironmentInfo.VCStoreRefscCs|j}t|jdƒg}|jdkr"dnd}|j |¡}|rL|t|jd|ƒg7}|jdkr|d|jjdd�}|t|j|ƒg7}n€|jdkrê|j ¡r”d nd }|t|j||jjdd �ƒg7}|jj |jj krü|t|j||jjdd �ƒg7}n|t|jd ƒg7}|S) zr Microsoft Visual C++ Tools. Return ------ list of str paths Z VCPackagesrmTFúBin%srhrrþz bin\HostX86%sz bin\HostX64%srÿÚBin) rórrÄr§rŒr‡r‚r}rƒr|rx)rtróÚtoolsr…rúr@Zhost_dirrrrÚVCToolsÖs&    ÿ ÿzEnvironmentInfo.VCToolscCsh|jdkr.|jjddd�}t|jjd|ƒgS|jjdd�}t|jjdƒ}|j}t|d||fƒgSdS) zw Microsoft Windows SDK Libraries. Return ------ list of str paths rmTrõrrÿrÌz%sum%sN)r§rŒrƒrrórÎÚ _sdk_subdir)rtrúrÌZlibverrrrÚ OSLibrariesüs zEnvironmentInfo.OSLibrariescCsht|jjdƒ}|jdkr&|t|dƒgS|jdkr8|j}nd}t|d|ƒt|d|ƒt|d|ƒgSd S) zu Microsoft Windows SDK Include. Return ------ list of str paths ÚincludermÚglrhrkz%ssharedz%sumz%swinrtN)rrórÎr§r)rtr ÚsdkverrrrÚ OSIncludess      ýzEnvironmentInfo.OSIncludescCsžt|jjdƒ}g}|jdkr&||j7}|jdkr@|t|dƒg7}|jdkrš||t|jjdƒt|ddƒt|d dƒt|d dƒt|jjd d d |jdddƒg7}|S)z} Microsoft Windows SDK Libraries Paths. Return ------ list of str paths Z ReferencesrlrÇzCommonConfiguration\NeutralrhZ UnionMetadataz'Windows.Foundation.UniversalApiContractz1.0.0.0z%Windows.Foundation.FoundationContractz,Windows.Networking.Connectivity.WwanContractZ ExtensionSDKszMicrosoft.VCLibsr½ZCommonConfigurationZneutral)rrórÎr§r )rtÚrefÚlibpathrrrÚ OSLibpath*s0         ùúzEnvironmentInfo.OSLibpathcCs t| ¡ƒS)zs Microsoft Windows SDK Tools. Return ------ list of str paths )ÚlistÚ _sdk_toolsrwrrrÚSdkToolsPs zEnvironmentInfo.SdkToolsccsø|jdkr,|jdkrdnd}t|jj|ƒV|j ¡s\|jjdd�}d|}t|jj|ƒV|jdvr |j ¡rvd }n|jjddd �}d |}t|jj|ƒVnB|jdkrât|jjdƒ}|jjdd�}|jj}t|d ||fƒV|jj rô|jj Vd S)zˆ Microsoft Windows SDK Tools paths generator. Return ------ generator of str paths rþrÇrzBin\x86Trÿr)rmrÇrkrõzBin\NETFX 4.0 Tools%sz%s%sN) r§rrórÎrŒr}r‚rzrÏrÙ)rtZbin_dirrúr@r rrrr\s(     zEnvironmentInfo._sdk_toolscCs|jj}|rd|SdS)zu Microsoft Windows SDK version subdir. Return ------ str subdir ú%s\rk)rórÏ©rtÚucrtverrrrrs zEnvironmentInfo._sdk_subdircCs|jdkrgSt|jjdƒgS)zs Microsoft Windows SDK Setup. Return ------ list of str paths rlZSetup)r§rrórÎrwrrrÚSdkSetupŒs zEnvironmentInfo.SdkSetupcs”|j}|j‰|jdkr0d}| ¡ o,| ¡ }n$| ¡p>| ¡}|jdkpR|jdk}g}|rt|‡fdd„ˆjDƒ7}|r�|‡fdd„ˆjDƒ7}|S)zv Microsoft .NET Framework Tools. Return ------ list of str paths rmTrDcsg|]}tˆj|ƒ‘qSr)rrà©rSr³©rórrrø±rVz+EnvironmentInfo.FxTools..csg|]}tˆj|ƒ‘qSr)rrárrrrrø³rV) rŒrór§rzr}r|rxrårç)rtrŒZ include32Z include64rrrrÚFxTools›s  zEnvironmentInfo.FxToolscCs8|jdks|jjsgS|jjdd�}t|jjd|ƒgS)z~ Microsoft .Net Framework SDK Libraries. Return ------ list of str paths rhTrÿzlib\um%s)r§rórÝrŒrƒr)rtrúrrrÚNetFxSDKLibraries¶s z!EnvironmentInfo.NetFxSDKLibrariescCs&|jdks|jjsgSt|jjdƒgS)z} Microsoft .Net Framework SDK Includes. Return ------ list of str paths rhz include\um)r§rórÝrrwrrrÚNetFxSDKIncludesÆs z EnvironmentInfo.NetFxSDKIncludescCst|jjdƒgS)z„ Microsoft Visual Studio Team System Database. Return ------ list of str paths z VSTSDB\DeployrörwrrrÚVsTDbÕs zEnvironmentInfo.VsTDbcCsv|jdkrgS|jdkr0|jj}|jjdd�}n |jj}d}d|j|f}t||ƒg}|jdkrr|t||dƒg7}|S)zn Microsoft Build Engine. Return ------ list of str paths rÈrþTrrkzMSBuild\%0.1f\bin%sZRoslyn)r§rór¾rŒr‚rÀr)rtÚ base_pathrúr@ÚbuildrrrÚMSBuildás    zEnvironmentInfo.MSBuildcCs|jdkrgSt|jjdƒgS)zt Microsoft HTML Help Workshop. Return ------ list of str paths rÇzHTML Help Workshop)r§rrór¾rwrrrÚHTMLHelpWorkshopýs z EnvironmentInfo.HTMLHelpWorkshopcCsD|jdkrgS|jjdd�}t|jjdƒ}|j}t|d||fƒgS)zƒ Microsoft Universal C Runtime SDK Libraries. Return ------ list of str paths rhTrÿrÌz%sucrt%s)r§rŒrƒrrórÛÚ _ucrt_subdir)rtrúrÌrrrrÚ UCRTLibraries s zEnvironmentInfo.UCRTLibrariescCs.|jdkrgSt|jjdƒ}t|d|jƒgS)z� Microsoft Universal C Runtime SDK Include. Return ------ list of str paths rhr z%sucrt)r§rrórÛr")rtr rrrÚ UCRTIncludess zEnvironmentInfo.UCRTIncludescCs|jj}|rd|SdS)z� Microsoft Universal C Runtime SDK version subdir. Return ------ str subdir rrk)rórÜrrrrr".s zEnvironmentInfo._ucrt_subdircCs(d|jkrdkrnngS|jjgS)zk Microsoft Visual F#. Return ------ list of str paths rÇrÈ)r§rórÚrwrrrÚFSharp;s zEnvironmentInfo.FSharpc CsÎd|j}|jjdd� d¡}g}|jj}t| dd¡ƒ}t|ƒrft |t |ƒdƒ}||t |dƒg7}|t |d ƒg7}d |jd d t |j ƒd f}t  ||¡D]&\}}t ||||ƒ} t| ƒr¢| Sq¢d S) z Microsoft Visual C++ runtime redistributable dll. Return ------ str path zvcruntime%d0.dllTrÿr„z\Toolsz\RedistrGZonecorerEzMicrosoft.VC%d.CRTé N)r¨rŒrƒr>rórÄrrXrrrr"r§rr­r) rtrNrúÚprefixesZ tools_pathZ redist_pathZcrt_dirsrîZcrt_dirr@rrrÚVCRuntimeRedistJs  ýzEnvironmentInfo.VCRuntimeRedistTcCs²t| d|j|j|j|jg|¡| d|j|j|j|j |j g|¡| d|j|j|j |j g|¡| d|j |j|j|j|j|j|j|j|jg |¡d�}|jdkr®t|jƒr®|j|d<|S)zÛ Return environment dict. Parameters ---------- exists: bool It True, only return existing paths. Return ------ dict environment r rÌrr@)r rÌrr@rr])ÚdictÚ _build_pathsrýr r$rrr rr#rrrrrûrrrr r!r%r§rr()rtÚexistsrfrrrÚ return_envosVüø û÷ ý÷ óå+ zEnvironmentInfo.return_envc Csntj |¡}t |d¡ t¡}t ||¡}|rsH     4ü5 'y=