Ë Ðà&b%�T9ãó\—dZddlZddlmZmZddlmZmZmZm Z ddl m Z ddl Z ddl Z ddlZddl Z ddlZddlmZe j&«dk(r ddlZddlmZnGd „d «Ze«Zd „Zd „Zd ddddœZd„Zd„Zd„Zdd„ZGd„d«ZGd„d«ZGd„d«Z Gd„d«Z!y)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)ÚlistdirÚpathsep)ÚjoinÚisfileÚisdirÚdirname)ÚCalledProcessError)Úunique_everseenÚWindows)Úenvironcó—eZdZdZdZdZdZy)ÚwinregN)Ú__name__Ú __module__Ú __qualname__Ú HKEY_USERSÚHKEY_CURRENT_USERÚHKEY_LOCAL_MACHINEÚHKEY_CLASSES_ROOT©óú4/usr/lib/python3.12/site-packages/setuptools/msvc.pyrrs„؈ Ø ÐØ!ÐØ Ñrrcó2— tjtjddtjtjz«}d}d}|5t j«D]e} tj||«\}}}|sŒ!|tjk(sŒ5t|«sŒA tt|««}|dk\sŒ\||kDsŒb||}}Œgddd«||fS#t $rYywxYw#t $rYŒ'wxYw#ttf$rYŒ¤wxYw#1swY||fSxYw)ú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ÚvÚvc_dirÚvtÚversions rÚ_msvc14_find_vc2015r1(s€ðÜ�n‰nÜ × %Ñ %Ø 6Ø Ü �O‰Oœf×4Ñ4Ñ 4ó  ˆð€LØ€HÚ Ü—‘Ö"ˆAð Ü &× 0Ñ 0°°aÓ 8‘ ��6˜2ò�Rœ6Ÿ=™=Ó(¬U°6­]ðÜ!¤%¨£(›m�Gð˜b“= W¨|Ó%;Ø-4°f (‘Lð#÷ ð ˜Ð !Ð!øô% òÙðûôò Úð ûô #¤IÐ.òÙðú÷ ð ˜Ð !Ð!ús~‚ACÁ D Á&C%ÂD ÂD  D Â$C5Â8D Â>D ÃD à C"Ã!C"Ã% C2Ã.D Ã1C2Ã2D Ã5DÄD ÄDÄD Ä Dc óÈ—tjd«xstjd«}|syd}|D] }tjtt t «5tjt|ddd«dd d |d d d dg «jdd¬«j«}t|ddd«}t|«rd|fcddd«cS ddd«Œ¢y#1swYŒ­xYw)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 StudioÚ Installerz vswhere.exez-latestz -prereleasez -requiresz -propertyÚinstallationPathz -productsÚ*ÚmbcsÚstrict)ÚencodingÚerrorsÚVCÚ AuxiliaryÚBuildéN) r ÚgetÚ contextlibÚsuppressr r ÚUnicodeDecodeErrorÚ subprocessÚ check_outputrÚdecodeÚstripr)ÚrootÚsuitable_componentsÚ componentÚpaths rÚ_msvc14_find_vc2017rLFsë€ô �;‰;Ð*Ó +Ò J¬w¯{©{¸>Ó/J€DÙ ØðÐó )ˆ ä × Ñ Ô!3´WÔ>PÕ Qä×'Ñ'ܘÐ8¸+À}ÓUØØ!ØØØØ&ØØð )ó ÷‘ °�Ó9ß‘“ð ô ˜˜d K°Ó9ˆDÜ�TŒ{ؘ4�x÷'RÓ Qð$÷%RÐ Qð)ð. ÷+RÐ Qús ÁA&CÃC! Úx86Úx64ÚarmÚarm64)rMÚ x86_amd64Úx86_armÚ x86_arm64c óˆ—t«\}}d}|tvr t|}nd|vrdnd}|r.t|ddddd|d d « } d dl}|j|d ¬ «d}|st«\}}|rt|d|dd «}|syt|d«}t|«sy|r t|«sd}||fS#tt t f$rd}YŒfwxYw)rNÚamd64rNrMz..ÚredistÚMSVCz**zMicrosoft.VC14*.CRTzvcruntime140.dllrT)Ú recursiveéÿÿÿÿzMicrosoft.VC140.CRTrz vcvarsall.bat) rLÚPLAT_SPEC_TO_RUNTIMErÚglobÚ ImportErrorr Ú LookupErrorr1r) Ú plat_specÚ_r+Ú vcruntimeÚvcruntime_platÚvcredistr[r*Ú vcvarsalls rÚ_msvc14_find_vcvarsallrd}sÿ€ä%Ó'�K€A€xØ€IàÔ(Ñ(Ü-¨iÑ8‰à")¨YÑ"6™¸EˆáÜØ Ø Ø Ø Ø Ø Ø Ø !Ø ó  ˆð Û àŸ ™  (°d˜ Ó;¸BÑ?ˆIñ Ü!4Ó!6ш �hÙ ÜØØØØ%Ø"ó ˆIñ Øä�X˜Ó/€IÜ �)Ô Øá œF 9Ô-؈ à �iÐ Ðøô1œW¤kÐ2ò ØŠIð úsÁB(Â(CÃCcó¼—dtvr6tj«D��cic]\}}|j«|“Œc}}St|«\}}|stj j d«‚ tjdj||«tj¬«jdd¬«}d „|j«D«D���cic]\}}}|r|r|j«|“Œ}}}}|r||d <|Scc}}w#tj$r>}tj j dj|j««|‚d }~wwxYwcc}}}w) rÚDISTUTILS_USE_SDKzUnable to find vcvarsall.batzcmd /u /c "{}" {} && set)Ústderrzutf-16leÚreplace)r;zError executing {}Nc3ó>K—|]}|jd«–—Œy­w)Ú=N)Ú partition)Ú.0Úlines rÚ z%_msvc14_get_vc_env..Çsèø€ÐOÑ>N°d˜dŸn™n¨S×1Ñ>Nùs‚Úpy_vcruntime_redist)r ÚitemsÚlowerrdÚ distutilsr;ÚDistutilsPlatformErrorrDrEÚformatÚSTDOUTrFr ÚcmdÚ splitlines) r^r)Úvaluercr`ÚoutÚexcr_Úenvs rÚ_msvc14_get_vc_envr|²sI€àœgÑ%Ü5<·]±]´_ÔE±_¡z s¨E�— ‘ “ ˜UÑ"°_ÒEÐEä1°)Ó<Ñ€IˆyÙ Ü×Ñ×5Ñ5Ð6TÓUÐUðÜ×%Ñ%Ø &× -Ñ -¨i¸Ó CÜ×$Ñ$ô ÷ ‰&� Iˆ&Ó .ð ñP¸c¿n¹nÔ>NÔOõ áO‰MˆC��EÙ ‘5ð � ‰ ‹ �UÑØOðò ñ Ø%.ˆÐ !Ñ"Ø €Jùó1Føô × (Ñ (òÜ×Ñ×5Ñ5Ø × 'Ñ '¨¯©Ó 0ó àð ûðüô  s$ C=Á/ADà EÄEÄ9EÅEcó~— t|«S#tjj$r}t |d«‚d}~wwxYw)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)r|rrr;rsÚ_augment_exception)r^rzs rÚmsvc14_get_vc_envr€Ðs;€ð&Ü! )Ó,Ð,øÜ × Ñ × 2Ñ 2òܘ3 Ô%Ø ûðús‚ �<ª 7·<cóV—|jd}d|j«vsd|j«vrnd}|jdit«¤Ž}d}|dk(r.|j«j d«dkDr|d z }n#|d z }n|d k(r|d z }||d zz }n |dk\r|dz }|f|_y)zl Add details to the exception message to help guide the user as to what action will resolve it. rrczvisual cz;Microsoft Visual C++ {version:0.1f} or greater is required.z-www.microsoft.com/download/details.aspx?id=%dç"@Úia64rYz( 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 r~zd Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/Nr)ÚargsrqrtÚlocalsÚfind)rzr0ÚarchÚmessageÚtmplÚ msdownloads rrrêsÇ€ð �h‰h�q‰k€Gà�g—m‘m“oÑ%¨°w·}±}³Ñ)FàLˆØ�$—+‘+Ñ)¤£Ñ)ˆØDˆ Ø �cŠ>Ø�z‰z‹|× Ñ  Ó(¨2Ò-ðÐEÑE‘ð ÐBÑB‘Ø ˜Š_à ÐCÑ CˆGØ �z DÑ(Ñ (‰GØ ˜Š_à ð,ñ ˆGð ˆz€C…HrcóŒ—eZdZdZej dd«j «Zd„Ze d„«Z d„Z d„Z d d„Z d d „Zd d „Zy )Ú PlatformInfoz� Current and Target Architectures information. Parameters ---------- arch: str Target architecture. Úprocessor_architectureÚcóN—|j«jdd«|_y)NrNrU)rqrhrˆ)Úselfrˆs rÚ__init__zPlatformInfo.__init__s€Ø—J‘J“L×(Ñ(¨°Ó8ˆ� rcóX—|j|jjd«dzdS)zs Return Target CPU architecture. Return ------ str Target CPU r_éN)rˆr‡©r‘s rÚ target_cpuzPlatformInfo.target_cpu s(€ð�y‰y˜Ÿ™Ÿ™¨Ó,¨qÑ0Ð2Ð3Ð3rcó —|jdk(S)z‡ Return True if target CPU is x86 32 bits.. Return ------ bool CPU is x86 32 bits rM©r–r•s rÚ target_is_x86zPlatformInfo.target_is_x86,s€ð�‰ %Ñ'Ð'rcó —|jdk(S)zˆ Return True if current CPU is x86 32 bits.. Return ------ bool CPU is x86 32 bits rM©Ú current_cpur•s rÚcurrent_is_x86zPlatformInfo.current_is_x867s€ð×Ñ 5Ñ(Ð(rcól—|jdk(r|rdS|jdk(r|rdSd|jzS)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) rMr�rUú\x64ú\%sr›©r‘Úhidex86rNs rÚ current_dirzPlatformInfo.current_dirBsO€ð$× Ñ  EÒ)©gð ð ð× Ñ  GÒ+±ðð ð ˜$×*Ñ*Ñ*ð  rcól—|jdk(r|rdS|jdk(r|rdSd|jzS)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) rMr�rUrŸr r˜r¡s rÚ target_dirzPlatformInfo.target_dirZsI€ð$—‘ 5Ò(©Wð ð ð—‘ 7Ò*©sðð ð ˜$Ÿ/™/Ñ)ð  rcóŠ—|rdn |j}|j|k(rdS|j«jdd|z«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. rMr�Ú\z\%s_)rœr–r¥rh)r‘Úforcex86Úcurrents rÚ cross_dirzPlatformInfo.cross_dirrsN€ñ $‘%¨×)9Ñ)9ˆð�‰ 'Ò)ð ð ð—‘Ó"×*Ñ*¨4°¸7Ñ1BÓCð rN)FF©F)rrrÚ__doc__r r@rqrœr’Úpropertyr–r™r�r£r¥rªrrrr�r�sW„ñð�'—+‘+Ð6¸Ó;×AÑAÓC€Kò9ðñ 4óð 4ò (ò )ó ó0 ô0 rr�có—eZdZdZej ej ejejfZ d„Z e d„«Z e d„«Z e d„«Ze d„«Ze d„«Ze d„«Ze d „«Ze d „«Ze d „«Zdd „Zd „Zy)Ú RegistryInfozŸ Microsoft Visual Studio related registry information. Parameters ---------- platform_info: PlatformInfo "PlatformInfo" instance. có—||_y©N)Úpi)r‘Ú platform_infos rr’zRegistryInfo.__init__›s €Øˆ�rcó—y)z€ Microsoft Visual Studio root registry key. Return ------ str Registry key Ú VisualStudiorr•s rÚ visualstudiozRegistryInfo.visualstudiožs€ðrcó.—t|jd«S)z Microsoft Visual Studio SxS registry key. Return ------ str Registry key ÚSxS)rr¶r•s rÚsxszRegistryInfo.sxsªs€ô�D×%Ñ% uÓ-Ð-rcó.—t|jd«S)z| Microsoft Visual C++ VC7 registry key. Return ------ str Registry key ÚVC7©rr¹r•s rÚvczRegistryInfo.vc¶ó€ô�D—H‘H˜eÓ$Ð$rcó.—t|jd«S)z Microsoft Visual Studio VS7 registry key. Return ------ str Registry key ÚVS7r¼r•s rÚvszRegistryInfo.vsÂr¾rcó—y)zƒ Microsoft Visual C++ for Python registry key. Return ------ str Registry key zDevDiv\VCForPythonrr•s rÚ vc_for_pythonzRegistryInfo.vc_for_pythonÎs€ð%rcó—y)zq Microsoft SDK registry key. Return ------ str Registry key zMicrosoft SDKsrr•s rÚ microsoft_sdkzRegistryInfo.microsoft_sdkÚs€ð rcó.—t|jd«S)z‚ Microsoft Windows/Platform SDK registry key. Return ------ str Registry key r ©rrÅr•s rÚ windows_sdkzRegistryInfo.windows_sdkæs€ô�D×&Ñ&¨ Ó2Ð2rcó.—t|jd«S)z€ Microsoft .NET Framework SDK registry key. Return ------ str Registry key ÚNETFXSDKrÇr•s rÚ netfx_sdkzRegistryInfo.netfx_sdkòs€ô�D×&Ñ&¨ Ó3Ð3rcó—y)z€ Microsoft Windows Kits Roots registry key. Return ------ str Registry key zWindows Kits\Installed Rootsrr•s rÚwindows_kits_rootszRegistryInfo.windows_kits_rootsþs€ð/rcó^—|jj«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 r�Ú Wow6432NodeÚSoftwareÚ Microsoft)r²r�r)r‘r)rMÚnode64s rÚ microsoftzRegistryInfo.microsoft s-€ð —w‘w×-Ñ-Ô/±3‘¸MˆÜ�J ¨ °SÓ9Ð9rc ó —tj}tj}tj}|j}|j D]>}d} ||||«d|«} tj||«d|r ||«cScSy#t $rC|jj«s$ ||||d«d|«}n#t $rYYŒ…wxYwYŒ‹YŒvwxYw#t $rYnwxYw |sŒ¤||«Œ­#|r ||«wwxYw)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) rrrÚCloseKeyrÓÚHKEYSr r²r�Ú QueryValueEx) r‘r)ÚnameÚkey_readÚopenkeyÚclosekeyÚmsÚhkeyÚbkeys rÚlookupzRegistryInfo.lookups€ô —?‘?ˆÜ—.‘.ˆÜ—?‘?ˆØ �^‰^ˆØ—J”JˆD؈Dð Ù˜t¡R¨£W¨a°Ó:�ð #Ü×*Ñ*¨4°Ó6°qÑ9ñÙ˜T—Nòð#ð&øôò Ø—w‘w×-Ñ-Ô/ð!Ù& t©R°°T«]¸A¸xÓH™øÜ"ò!Ú ð!úññ ð ûôò Ùð úØâÙ˜T•NøñÙ˜T•NðúsZÁB Á!C #CÂ/CÃCà Cà CÃCÃCÃCà C&Ã#C6Ã%C&Ã&C6Ã6 DNr«)rrrr¬rrrrrrÖr’r­r¶r¹r½rÁrÃrÅrÈrËrÍrÓrßrrrr¯r¯Šs÷„ñð ×ÑØ× Ñ Ø×!Ñ!Ø× Ñ ð  €Eò ðñ óð ðñ .óð .ðñ %óð %ðñ %óð %ðñ %óð %ðñ  óð  ðñ 3óð 3ðñ 4óð 4ðñ /óð /ó:ó&'rr¯cóÀ—eZdZdZej dd«Zej dd«Zej de«Zdd„Z d„Z d „Z d „Z e d „«Zed „«Zed „«Zd„Zd„Zed„«Zed„«Zed„«Zed„«Zed„«Zed„«Zed„«Zed„«Zed„«Zed„«Zed„«Zed„«Zed„«Z d„Z!e d d„«Z"y)!Ú SystemInfozê Microsoft Windows and Visual Studio related system information. Parameters ---------- registry_info: RegistryInfo "RegistryInfo" instance. vc_ver: float Required Microsoft Visual C++ version. ÚWinDirr�r4r3Ncó²—||_|jj|_|j«|_|xs|j «x|_|_yr±)Úrir²Úfind_programdata_vs_versÚknown_vs_pathsÚ_find_latest_available_vs_verÚvs_verÚvc_ver)r‘Ú registry_inforés rr’zSystemInfo.__init__YsG€ØˆŒØ—'‘'—*‘*ˆŒà"×;Ñ;Ó=ˆÔð%+Ò$R¨d×.PÑ.PÓ.RÐRˆŒ �d•krcóä—|j«}|s+|jstjj d«‚t |«}|j |j«t|«dS)zm Find the latest VC version Return ------ float version z%No Microsoft Visual C++ version foundrY)Úfind_reg_vs_versrærrr;rsÚsetÚupdateÚsorted)r‘Ú reg_vc_versÚvc_verss rrçz(SystemInfo._find_latest_available_vs_verbsf€ð×+Ñ+Ó-ˆ á˜t×2Ò2Ü×"Ñ"×9Ñ9Ø7óð ô�kÓ"ˆØ�‰�t×*Ñ*Ô+Ü�g‹˜rÑ"Ð"rc óÞ—|jj}|jj|jj|jjf}g}t j |jj|«D�]'\}} tj|||«dtj«}|5tj|«\}}} t|«D][} tjt «5t#tj$|| «d«} | |vr|j'| «ddd«Œ]t|«D]X} tjt «5t#tj(|| ««} | |vr|j'| «ddd«ŒZ ddd«�Œ*t+|«S#t$rY�ŒBwxYw#1swYŒôxYw#1swYŒ—xYw#1swY�ŒhxYw)z˜ Find Microsoft Visual Studio versions available in registry. Return ------ list of float Versions rN)rärÓr½rÃrÁr!ÚproductrÖrrrr Ú QueryInfoKeyÚrangerArBr'r&r#ÚappendÚEnumKeyrï) r‘rÜÚvckeysÚvs_versrÝr)rÞÚsubkeysÚvaluesr_r,Úvers rrìzSystemInfo.find_reg_vs_versvsƒ€ð�W‰W× Ñ ˆØ—'‘'—*‘*˜dŸg™g×3Ñ3°T·W±W·Z±ZÐ@ˆØˆÜ"×*Ñ*¨4¯7©7¯=©=¸&×A‰IˆD�#ð Ü—~‘~ d©B¨s«G°Q¼¿¹ÓH�òÜ%+×%8Ñ%8¸Ó%>Ñ"�˜ Ü˜vž�AÜ#×,Ñ,¬ZÕ8Ü#¤F×$4Ñ$4°T¸1Ó$=¸aÑ$@ÓA˜Ø gÑ-Ø#ŸN™N¨3Ô/÷9Ð8ð'ô ˜wž�AÜ#×,Ñ,¬ZÕ8Ü#¤F§N¡N°4¸Ó$;Ó<˜Ø gÑ-Ø#ŸN™N¨3Ô/÷9Ð8ñ(÷‘ð Bô"�g‹Ðøôò Úð ú÷ 9Ð8ú÷ 9Ð8ú÷‘úsO ,F:Â:AG"Ã;8G Ä31G"Å$5G Æ G"Æ: GÇGÇ G ÇG"ÇG ÇG"Ç"G, cón—i}d} t|«}|D]m} t||d«}t|dd¬«5}t j |«}ddd«d}tt|d««|||j |d «<Œo|S#t$r|cYSwxYw#1swYŒOxYw#ttf$rYŒ wxYw) 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.jsonÚrtzutf-8)r:Nr6ú VC\Tools\MSVCÚinstallationVersion)rr rÚopenÚjsonÚloadÚ_as_float_versionÚKeyError) r‘Ú vs_versionsÚ instances_dirÚ hashed_namesrØÚ state_pathÚ state_fileÚstateÚvs_paths rråz#SystemInfo.find_programdata_vs_vers•sÚ€ðˆ ØTˆ ð Ü" =Ó1ˆLó !ˆDð ä! -°°|ÓD� ܘ* d°WÕ=ÀÜ ŸI™I jÓ1�E÷>àÐ 2Ñ3�ôœ˜WÐ&6Ó7Ô8ðð˜D×2Ñ2°5Ð9NÑ3OÓPÒQð!ð(Ðøô1ò àÒ ð ú÷>Ð=ûôœXÐ&ò áð ús9† B—B"²BÁ9B" BÂBÂB ÂB"Â"B4Â3B4cóZ—tdj|jd«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)r0s rrzSystemInfo._as_float_version¿s(€ô�S—X‘X˜gŸm™m¨CÓ0°°!Ð4Ó5Ó6Ð6rcóÊ—t|jd|jz«}|jj |jj d|jz«xs|S)zp Microsoft Visual Studio directory. Return ------ str path zMicrosoft Visual Studio %0.1fú%0.1f)rÚProgramFilesx86rèrärßrÁ)r‘Údefaults rÚ VSInstallDirzSystemInfo.VSInstallDirÐsP€ôØ × Ñ Ð"AÀDÇKÁKÑ"Oó ˆð �w‰w�~‰~˜dŸg™gŸj™j¨'°D·K±KÑ*?Ó@ÒKÀGÐKrcó¢—|j«xs|j«}t|«s!d}tjj |«‚|S)zm Microsoft Visual C++ directory. Return ------ str path z(Microsoft Visual C++ directory not found)Ú _guess_vcÚ_guess_vc_legacyrrrr;rs)r‘rKÚmsgs rÚ VCInstallDirzSystemInfo.VCInstallDirâsF€ð�~‰~ÓÒ: 4×#8Ñ#8Ó#:ˆä�TŒ{Ø<ˆCÜ×"Ñ"×9Ñ9¸#Ó>Ð >àˆ rcó0—|jdkry |j|j}t |d«} t |«d}|j |«|_t ||«S#t$r|j}YŒTwxYw#ttf$rYywxYw)zl Locate Visual C++ for VS2017+. Return ------ str path r~r�rÿrY) rèrærrrrrrér Ú IndexError)r‘Úvs_dirÚguess_vcrés rrzSystemInfo._guess_vcôs¢€ð �;‰;˜$Ò Øð 'à×(Ñ(¨¯©Ñ5ˆFô ˜Ð 0Ó1ˆð ä˜XÓ& rÑ*ˆFØ×0Ñ0°Ó8ˆDŒKܘ &Ó)Ð )øôò 'à×&Ñ&ŠFð 'ûôœÐ$ò Ùð ús"’A(¸/BÁ(BÁ?BÂBÂBcó|—t|jd|jz«}t|jjd|jz«}|jj |d«}|r t|d«n|}|jj |jj d|jz«xs|S)z{ Locate Visual C++ for versions prior to 2017. Return ------ str path z Microsoft Visual Studio %0.1f\VCrÚ installdirr<)rrrèrärÃrßr½)r‘rÚreg_pathÚ python_vcÚ default_vcs rrzSystemInfo._guess_vc_legacys•€ôØ × Ñ Ð"EÈÏ É Ñ"Só ˆô ˜Ÿ™×-Ñ-¨w¸¿¹Ñ/DÓEˆØ—G‘G—N‘N 8¨\Ó:ˆ Ù.7”T˜) TÔ*¸Wˆ ð�w‰w�~‰~˜dŸg™gŸj™j¨'°D·K±KÑ*?Ó@ÒNÀJÐNrcó¤—|jdkry|jdk(ry|jdk(ry|jdk(ry|jd k\ry y ) z— Microsoft Windows SDK versions for specified MSVC++ version. Return ------ tuple of str versions r‚)z7.0z6.1z6.0ar„)z7.1z7.0aç&@)z8.0z8.0aç(@)ú8.1z8.1ar~)z10.0r'N©rèr•s rÚWindowsSdkVersionzSystemInfo.WindowsSdkVersion'sR€ð �;‰;˜#Ò Ø'Ø �[‰[˜DÒ Ø Ø �[‰[˜DÒ Ø Ø �[‰[˜DÒ Ø Ø �[‰[˜DÒ Ø ØrcóL—|jt|jd««S)zt Microsoft Windows SDK last version. Return ------ str version Úlib)Ú_use_last_dir_namerÚ WindowsSdkDirr•s rÚWindowsSdkLastVersionz SystemInfo.WindowsSdkLastVersion=s"€ð×&Ñ&¤t¨D×,>Ñ,>ÀÓ'FÓGÐGrcóî—d}|jD]E}t|jjd|z«}|jj |d«}|sŒEn|r t |«sWt|jj d|jz«}|jj |d«}|r t|d«}|r t |«sN|jD]?}|d|jd«}d |z}t|j|«}t |«sŒ>|}ŒA|r t |«s:|jD]+}d |z}t|j|«}t |«sŒ*|}Œ-|st|jd «}|S) zn Microsoft Windows SDK directory. Return ------ str path r�zv%sÚinstallationfolderrr ÚWinSDKNrzMicrosoft SDKs\Windows Kits\%szMicrosoft SDKs\Windows\v%sÚ PlatformSDK) r)rrärÈrßrrÃréÚrfindr4r)r‘ÚsdkdirrüÚlocrKÚ install_baseÚintverÚds rr-zSystemInfo.WindowsSdkDirIsP€ðˆØ×)Ô)ˆCä�t—w‘w×*Ñ*¨E°C©KÓ8ˆCØ—W‘W—^‘^ CÐ)=Ó>ˆFÚÙð *ñ œU 6œ]䘟™×-Ñ-¨w¸¿¹Ñ/DÓEˆDØŸ7™7Ÿ>™>¨$° Ó=ˆLÙܘl¨HÓ5�ÙœU 6œ]à×-Ô-�ØÐ-˜sŸy™y¨›~Ð.�Ø8¸6ÑA�ܘ×*Ñ*¨DÓ1�ܘ•8Ø‘Fð .ñ œU 6œ]à×-Ô-�Ø4°sÑ:�ܘ×*Ñ*¨DÓ1�ܘ•8Ø‘Fð .ñ ä˜$×+Ñ+¨]Ó;ˆF؈ rcó—|jdkrd}d}n2d}|jdkrdnd}|jjd|¬«}d ||jd d «fz}g}|jd k\r6|jD]'}|t |j j||«gz }Œ)|jD]*}|t |j jd |z|«gz }Œ,|D]$}|j j|d«}|sŒ"|cSy)zy Microsoft Windows SDK executable directory. Return ------ str path r%é#r�é(r&TF)rNr¢zWinSDK-NetFx%dTools%sr§Ú-r~zv%sAr0N) rèr²r£rhÚNetFxSdkVersionrrärËr)rÈrß) r‘Únetfxverrˆr¢ÚfxÚregpathsrürKÚexecpaths rÚWindowsSDKExecutablePathz#SystemInfo.WindowsSDKExecutablePathts €ð �;‰;˜$Ò ØˆH؉DàˆHØ"Ÿk™k¨TÒ1‘d°uˆGØ—7‘7×&Ñ&¨4¸Ð&ÓAˆDØ $¨°$·,±,¸tÀSÓ2IÐ'JÑ JˆðˆØ �;‰;˜$Ò Ø×+Ô+�ØœT $§'¡'×"3Ñ"3°S¸"Ó=Ð>Ñ>‘ð,ð×)Ô)ˆCØ œ˜dŸg™g×1Ñ1°6¸C±<ÀÓDÐEÑ E‰Hð*óˆDØ—w‘w—~‘~ dÐ,@ÓAˆHÚØ’ðð rcóœ—t|jjd|jz«}|jj |d«xsdS)zl Microsoft Visual F# directory. Return ------ str path z%0.1f\Setup\F#Ú productdirr�)rrär¶rèrß)r‘rKs rÚFSharpInstallDirzSystemInfo.FSharpInstallDir™s>€ô�D—G‘G×(Ñ(Ð*;¸d¿k¹kÑ*IÓJˆØ�w‰w�~‰~˜d LÓ1Ò7°RÐ7rcó²—|jdk\rdnd}|D]?}|jj|jjd|z«}|sŒ9|xsdcSy)zt Microsoft Universal CRT SDK directory. Return ------ str path r~)Ú10Ú81rz kitsroot%sr�N)rèrärßrÍ)r‘Úversrür4s rÚUniversalCRTSdkDirzSystemInfo.UniversalCRTSdkDir¦sW€ð $Ÿ{™{¨dÒ2‰|¸ˆóˆCØ—W‘W—^‘^ D§G¡G×$>Ñ$>À ÈsÑ@RÓSˆFÚØ’| Ò#ðð rcóL—|jt|jd««S)z€ Microsoft Universal C Runtime SDK last version. Return ------ str version r+)r,rrJr•s rÚUniversalCRTSdkLastVersionz%SystemInfo.UniversalCRTSdkLastVersion»s"€ð×&Ñ&¤t¨D×,CÑ,CÀUÓ'KÓLÐLrcó(—|jdk\rdSdS)z� Microsoft .NET Framework SDK versions. Return ------ tuple of str versions r~) z4.7.2z4.7.1z4.7z4.6.2z4.6.1z4.6z4.5.2z4.5.1z4.5rr(r•s rr=zSystemInfo.NetFxSdkVersionÇs%€ð�{‰{˜dÒ"ð Xð ðð rcó®—d}|jD]C}t|jj|«}|jj |d«}|sŒB|S|S)zu Microsoft .NET Framework SDK directory. Return ------ str path r�Úkitsinstallationfolder)r=rrärËrß)r‘r4rür5s rÚ NetFxSdkDirzSystemInfo.NetFxSdkDirØsV€ðˆØ×'Ô'ˆCÜ�t—w‘w×(Ñ(¨#Ó.ˆCØ—W‘W—^‘^ CÐ)AÓBˆFÚØØˆ ð (ð ˆ rcó–—t|jd«}|jj|jjd«xs|S)zw Microsoft .NET Framework 32bit directory. Return ------ str path zMicrosoft.NET\FrameworkÚframeworkdir32©rrârärßr½©r‘Úguess_fws rÚFrameworkDir32zSystemInfo.FrameworkDir32ês:€ô˜Ÿ ™ Ð%?Ó@ˆð�w‰w�~‰~˜dŸg™gŸj™jÐ*:Ó;ÒG¸xÐGrcó–—t|jd«}|jj|jjd«xs|S)zw Microsoft .NET Framework 64bit directory. Return ------ str path zMicrosoft.NET\Framework64Úframeworkdir64rSrTs rÚFrameworkDir64zSystemInfo.FrameworkDir64ús:€ô˜Ÿ ™ Ð%AÓBˆð�w‰w�~‰~˜dŸg™gŸj™jÐ*:Ó;ÒG¸xÐGrcó$—|jd«S)zƒ Microsoft .NET Framework 32bit versions. Return ------ tuple of str versions é ©Ú_find_dot_net_versionsr•s rÚFrameworkVersion32zSystemInfo.FrameworkVersion32 ó€ð×*Ñ*¨2Ó.Ð.rcó$—|jd«S)zƒ Microsoft .NET Framework 64bit versions. Return ------ tuple of str versions é@r\r•s rÚFrameworkVersion64zSystemInfo.FrameworkVersion64r_rcó|—|jj|jjd|z«}t|d|z«}|xs|j |d«xsd}|j dk\r|dfS|j dk\r|j «dd d k7rd d fS|d fS|j d k(ry|j dk(ryy)zê Find Microsoft .NET Framework versions. Parameters ---------- bits: int Platform number of bits: 32 or 64. Return ------ tuple of str versions zframeworkver%dzFrameworkDir%dr-r�r&zv4.0r„NrÚv4z v4.0.30319úv3.5r‚)reú v2.0.50727g @)zv3.0rf)rärßr½Úgetattrr,rèrq)r‘ÚbitsÚreg_verÚ dot_net_dirrüs rr]z!SystemInfo._find_dot_net_versions"sÀð—'‘'—.‘. §¡§¡Ð-=ÀÑ-DÓEˆÜ˜dÐ$4°tÑ$;Ó<ˆ ØÒH˜×0Ñ0°¸cÓBÒHÀbˆð �;‰;˜$Ò Ø˜�;Ð Ø �[‰[˜DÒ Ø#&§9¡9£;¨r° ?°dÒ#:�<ÀVÐKÐ KÀÀVÐKÐ KØ �[‰[˜CÒ Ø'Ø �[‰[˜CÒ Ø'ð rcób‡‡—ˆˆfd„tt‰««D«}t|d«xsdS)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 c3ón•K—|],}tt‰|««r|j‰«r|–—Œ.y­wr±)rrÚ startswith)rlÚdir_namerKÚprefixs €€rrnz0SystemInfo._use_last_dir_name..Ps5øèø€ð á3�Ü”T˜$ Ó)Ô*¨x×/BÑ/BÀ6Ô/Jô Ù3ùsƒ25Nr�)ÚreversedrÚnext)rKroÚ matching_dirss`` rr,zSystemInfo._use_last_dir_name?s/ù€ô" ä$¤W¨T£]Ô3ó ˆ ô �M 4Ó(Ò.¨BÐ.rr±©r�)#rrrr¬r r@râr4rr’rçrìråÚ staticmethodrr­rrrrr)r.r-rBrErJrLr=rPrVrYr^rbr]r,rrrráráGsÆ„ñ ðˆW�[‰[˜ 2Ó &€FØ�7—;‘;˜~¨rÓ2€LØ!�g—k‘kÐ"5°|ÓD€OóSò#ò(ò>(ðTñ7óð7ð ñLóðLð"ñóðò"ò<Oð*ñóðð*ñ Hóð Hðñ(óð(ðTñ"óð"ðHñ 8óð 8ðñóðð(ñ Móð Mðñ óð ð ñóðð"ñ Hóð Hðñ Hóð Hðñ /óð /ðñ /óð /ò(ð:ò/óñ/rrácó¬—eZdZdZdd„Zed„«Zed„«Zed„«Zed„«Z ed„«Z ed „«Z ed „«Z ed „«Z ed „«Zed „«Zed„«Zd„Zed„«Zed„«Zed„«Zed„«Zed„«Zed„«Zed„«Zed„«Zed„«Zed„«Zed„«Zed„«Zed„«Zd d„Zd„Z y)!Ú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. Ncóî—t|«|_t|j«|_t |j|«|_|j |kr!d}tjj|«‚y)Nz.No suitable Microsoft Visual C++ version found) r�r²r¯räráÚsirérrr;rs)r‘rˆréÚ vc_min_verÚerrs rr’zEnvironmentInfo.__init__ps]€Ü˜tÓ$ˆŒÜ˜tŸw™wÓ'ˆŒÜ˜TŸW™W fÓ-ˆŒà �;‰;˜Ò #ØBˆCÜ×"Ñ"×9Ñ9¸#Ó>Ð >ð $rcó.—|jjS)zk Microsoft Visual Studio. Return ------ float version )rxrèr•s rrèzEnvironmentInfo.vs_veryó€ð�w‰w�~‰~Ðrcó.—|jjS)zp Microsoft Visual C++ version. Return ------ float version )rxrér•s rrézEnvironmentInfo.vc_ver…r|rcóò—ddg}|jdk\r2|jjdd¬«}|dgz }|dgz }|d|zgz }|D�cgc]"}t|jj |«‘Œ$c}Scc}w) zu Microsoft Visual Studio Tools. Return ------ list of str paths z Common7\IDEz Common7\Toolsr~T©r¢rNz1Common7\IDE\CommonExtensions\Microsoft\TestWindowzTeam Tools\Performance ToolszTeam Tools\Performance Tools%s)rèr²r£rrxr)r‘ÚpathsÚ arch_subdirrKs rÚVSToolszEnvironmentInfo.VSTools‘sŒ€ð Ð!1Ð2ˆà �;‰;˜$Ò ØŸ'™'×-Ñ-°dÀÐ-ÓEˆKØ ÐJÐKÑ KˆEØ Ð5Ð6Ñ 6ˆEØ Ð7¸+ÑEÐFÑ FˆEá=BÓC¹U°T”�T—W‘W×)Ñ)¨4Õ0¸UÑCÐCùÒCsÁ 'A4có‚—t|jjd«t|jjd«gS)z’ Microsoft Visual C++ & Microsoft Foundation Class Includes. Return ------ list of str paths ÚIncludezATLMFC\Include)rrxrr•s rÚ VCIncludeszEnvironmentInfo.VCIncludes¥s7€ô �—‘×%Ñ% yÓ 1Ü �—‘×%Ñ%Ð'8Ó 9ð ð rcó<—|jdk\r|jjd¬«}n|jjd¬«}d|zd|zg}|jdk\r |d|zgz }|D�cgc]"}t|jj |«‘Œ$c}Scc}w) z“ Microsoft Visual C++ & Microsoft Foundation Class Libraries. Return ------ list of str paths ç.@T©rN©r¢úLib%sz ATLMFC\Lib%sr~z Lib\store%s)rèr²r¥rrxr)r‘r�r€rKs rÚ VCLibrarieszEnvironmentInfo.VCLibraries´s™€ð �;‰;˜$Ò ØŸ'™'×,Ñ,°Ð,Ó6‰KàŸ'™'×,Ñ,°TÐ,Ó:ˆKؘ;Ñ&¨¸+Ñ(EÐFˆà �;‰;˜$Ò Ø �n {Ñ2Ð3Ñ 3ˆEá=BÓC¹U°T”�T—W‘W×)Ñ)¨4Õ0¸UÑCÐCùÒCsÁ/'Bcóf—|jdkrgSt|jjd«gS)z‡ Microsoft Visual C++ store references Libraries. Return ------ list of str paths r~zLib\store\references)rèrrxrr•s rÚ VCStoreRefszEnvironmentInfo.VCStoreRefsÉs0€ð �;‰;˜Ò ؈IÜ�T—W‘W×)Ñ)Ð+BÓCÐDÐDrcóB—|j}t|jd«g}|jdkrdnd}|jj |«}|r|t|jd|z«gz }|jdk(r;d|jj d¬«z}|t|j|«gz }|S|jdk\r»|jj«rd nd }|t|j||jjd¬ «z«gz }|jj|jjk7r7|t|j||jj d¬ «z«gz }|S|t|jd «gz }|S) zr Microsoft Visual C++ Tools. Return ------ list of str paths Ú VCPackagesr„TFúBin%sr~r‰r‡z bin\HostX86%sz bin\HostX64%srˆÚBin) rxrrrèr²rªr£r�r¥rœr–)r‘rxÚtoolsr¨r�rKÚhost_dirs rÚVCToolszEnvironmentInfo.VCTools×s}€ð�W‰WˆÜ�b—o‘o |Ó4Ð5ˆàŸ;™;¨$Ò.‘4°EˆØ—g‘g×'Ñ'¨Ó1ˆ Ù Ø ”d˜2Ÿ?™?¨G°kÑ,AÓBÐCÑ CˆEà �;‰;˜$Ò Ø˜TŸW™W×0Ñ0¸Ð0Ó>Ñ>ˆDØ ”d˜2Ÿ?™?¨DÓ1Ð2Ñ 2ˆEð ˆ ð�[‰[˜DÒ à$(§G¡G×$:Ñ$:Ô$<Ñ ÐBRð ð ”d˜2Ÿ?™?¨H°t·w±w×7IÑ7IÈdÐ7IÓ7SÑ,SÓTÐUÑ UˆEà�w‰w×"Ñ" d§g¡g×&8Ñ&8Ò8ØÜ˜Ÿ™¨(°T·W±W×5HÑ5HÈTÐ5HÓ5RÑ*RÓSðñ�ðˆ ð ”d˜2Ÿ?™?¨EÓ2Ð3Ñ 3ˆEàˆ rcóV—|jdkrA|jjdd¬«}t|jj d|z«gS|jjd¬«}t|jj d«}|j }t||›d|›�«gS)zw Microsoft Windows SDK Libraries. Return ------ list of str paths r„TrrŠrˆr+Úum)rèr²r¥rrxr-Ú _sdk_subdir)r‘r�r+Úlibvers rÚ OSLibrarieszEnvironmentInfo.OSLibrariesýs—€ð �;‰;˜$Ò ØŸ'™'×,Ñ,°T¸tÐ,ÓDˆKܘŸ™×.Ñ.°¸+Ñ0EÓFÐGÐ GðŸ'™'×,Ñ,°Ð,Ó6ˆKÜ�t—w‘w×,Ñ,¨eÓ4ˆCØ×%Ñ%ˆFܘª&±+Ð>Ó?Ð@Ð @rcó—t|jjd«}|jdkr|t|d«gS|jdk\r |j}nd}t|d|z«t|d|z«t|d|z«gS) zu Microsoft Windows SDK Include. Return ------ list of str paths Úincluder„Úglr~r�z%ssharedz%sumz%swinrt)rrxr-rèr—)r‘r›Úsdkvers rÚ OSIncludeszEnvironmentInfo.OSIncludessŒ€ô�t—w‘w×,Ñ,¨iÓ8ˆà �;‰;˜$Ò ØœT '¨4Ó0Ð1Ð 1ð�{‰{˜dÒ"Ø×)Ñ)‘à�ä�W˜j¨6Ñ1Ó2Ü�W˜f v™oÓ.Ü�W˜i¨&Ñ0Ó1ðð rcóÖ—t|jjd«}g}|jdkr||jz }|jdk\r|t|d«gz }|jdk\rz||t|jjd«t|dd«t|d d«t|d d«t|jjd d d |jzddd«gz }|S)z} Microsoft Windows SDK Libraries Paths. Return ------ list of str paths Ú Referencesr‚r%zCommonConfiguration\Neutralr~Ú UnionMetadataz'Windows.Foundation.UniversalApiContractz1.0.0.0z%Windows.Foundation.FoundationContractz,Windows.Networking.Connectivity.WwanContractÚ ExtensionSDKszMicrosoft.VCLibsrÚCommonConfigurationÚneutral)rrxr-rèr™)r‘ÚrefÚlibpaths rÚ OSLibpathzEnvironmentInfo.OSLibpath+sì€ô�4—7‘7×(Ñ(¨,Ó7ˆØˆà �;‰;˜#Ò Ø �t×'Ñ'Ñ 'ˆGà �;‰;˜$Ò Ø œ˜SÐ"@ÓAÐBÑ BˆGà �;‰;˜$Ò Ø ØÜ�T—W‘W×*Ñ*¨OÓ<Ü�SÐCÀYÓOÜ�SÐAÀ9ÓMÜ�SÐHÈ)ÓTÜØ—G‘G×)Ñ)Ø#Ø&ؘdŸk™kÑ)Ø Ø)Øóð ñ ˆGð ˆrcó4—t|j««S)zs Microsoft Windows SDK Tools. Return ------ list of str paths )ÚlistÚ _sdk_toolsr•s rÚSdkToolszEnvironmentInfo.SdkToolsQs€ô�D—O‘OÓ%Ó&Ð&rc#órK—|jdkr5|jdkrdnd}t|jj|«–—|jj «sC|jj d¬«}d|z}t|jj|«–—|jdvrb|jj«rd }n|jj dd¬ «}d |z}t|jj|«–—ns|jdk\rdt|jjd«}|jj d¬«}|jj}t||›|›�«–—|jjr|jj–—y y ­w) zˆ Microsoft Windows SDK Tools paths generator. Return ------ generator of str paths r‡r%r‘zBin\x86Trˆr�)r„r%r�rzBin\NETFX 4.0 Tools%sN) rèrrxr-r²r�r£r™r.rB)r‘Úbin_dirr�rKr�s rrªzEnvironmentInfo._sdk_tools]s\èø€ð �;‰;˜Ò Ø#Ÿ{™{¨dÒ2‘e¸ ˆGÜ�t—w‘w×,Ñ,¨gÓ6Ò 6à�w‰w×%Ñ%Ô'ØŸ'™'×-Ñ-°$Ð-Ó7ˆKؘ[Ñ(ˆDÜ�t—w‘w×,Ñ,¨dÓ3Ò 3à �;‰;˜,Ñ &Ø�w‰w×$Ñ$Ô&Ø ‘ à"Ÿg™g×1Ñ1¸$ÀDÐ1ÓI� Ø+¨kÑ9ˆDÜ�t—w‘w×,Ñ,¨dÓ3Ó 3à �[‰[˜DÒ Ü˜Ÿ™×-Ñ-¨uÓ5ˆDØŸ'™'×-Ñ-°$Ð-Ó7ˆKØ—W‘W×2Ñ2ˆFÜ�t¡v©{Ð;Ó<Ò <à �7‰7× +Ò +Ø—'‘'×2Ñ2Ó 2ð ,ùs‚F5F7có@—|jj}|rd|zSdS)zu Microsoft Windows SDK version subdir. Return ------ str subdir ú%s\r�)rxr.©r‘Úucrtvers rr—zEnvironmentInfo._sdk_subdir€s%€ð—'‘'×/Ñ/ˆÙ%,�˜Ñ Ð4°"Ð4rcóf—|jdkDrgSt|jjd«gS)zs Microsoft Windows SDK Setup. Return ------ list of str paths r‚ÚSetup)rèrrxr-r•s rÚSdkSetupzEnvironmentInfo.SdkSetup�s/€ð �;‰;˜Ò ؈Iä�T—W‘W×*Ñ*¨GÓ4Ð5Ð5rcó —|j}|j}|jdkr'd}|j« xr|j « }nB|j«xs|j «}|j dk(xs|j dk(}g}|r1||jD�cgc]}t|j|«‘Œc}z }|r1||jD�cgc]}t|j|«‘Œc}z }|Scc}wcc}w)zv Microsoft .NET Framework Tools. Return ------ list of str paths r„TrU) r²rxrèr™r�rœr–r^rrVrbrY)r‘r²rxÚ include32Ú include64r’rüs rÚFxToolszEnvironmentInfo.FxToolsœsö€ð�W‰WˆØ �W‰Wˆà �;‰;˜$Ò ØˆIØ×,Ñ,Ó.Ð.ÒJ°r×7HÑ7HÓ7JÐ3J‰Ià×(Ñ(Ó*ÒA¨b×.?Ñ.?Ó.AˆIØŸ™¨'Ñ1ÒM°R·]±]ÀgÑ5MˆIàˆÙ Ø ¸b×>SÒ>SÓTÑ>S°s”d˜2×,Ñ,¨cÕ2Ð>SÑTÑ TˆEÙ Ø ¸b×>SÒ>SÓTÑ>S°s”d˜2×,Ñ,¨cÕ2Ð>SÑTÑ TˆE؈ ùòUùâTs Â$C;ÃDcóЗ|jdks|jjsgS|jj d¬«}t |jjd|z«gS)z~ Microsoft .Net Framework SDK Libraries. Return ------ list of str paths r~Trˆzlib\um%s)rèrxrPr²r¥r)r‘r�s rÚNetFxSDKLibrariesz!EnvironmentInfo.NetFxSDKLibraries·sW€ð �;‰;˜Ò  T§W¡W×%8Ò%8؈Ià—g‘g×(Ñ(¨TÐ(Ó2ˆ Ü�T—W‘W×(Ñ(¨+¸ Ñ*CÓDÐEÐErcó’—|jdks|jjsgSt|jjd«gS)z} Microsoft .Net Framework SDK Includes. Return ------ list of str paths r~z include\um)rèrxrPrr•s rÚNetFxSDKIncludesz EnvironmentInfo.NetFxSDKIncludesÇs;€ð �;‰;˜Ò  T§W¡W×%8Ò%8؈Iä�T—W‘W×(Ñ(¨-Ó8Ð9Ð9rcóD—t|jjd«gS)z„ Microsoft Visual Studio Team System Database. Return ------ list of str paths z VSTSDB\Deploy)rrxrr•s rÚVsTDbzEnvironmentInfo.VsTDbÖs€ô�T—W‘W×)Ñ)Ð+;Ó<Ð=Ð=rcóX—|jdkrgS|jdkr3|jj}|jj d¬«}n|jj }d}d|j|fz}t ||«g}|jdk\r|t ||d«gz }|S)zn Microsoft Build Engine. Return ------ list of str paths r&r‡Tr‰r�zMSBuild\%0.1f\bin%sÚRoslyn)rèrxrr²r£rr)r‘Ú base_pathr�rKÚbuilds rÚMSBuildzEnvironmentInfo.MSBuildâs¤€ð �;‰;˜Ò ؈IØ �[‰[˜4Ò ØŸ™×/Ñ/ˆIØŸ'™'×-Ñ-°dÐ-Ó;‰KàŸ™×,Ñ,ˆI؈Kà%¨¯©°kÐ(BÑBˆÜ�i Ó&Ð'ˆà �;‰;˜$Ò à ”d˜9 d¨HÓ5Ð6Ñ 6ˆEàˆ rcóf—|jdkrgSt|jjd«gS)zt Microsoft HTML Help Workshop. Return ------ list of str paths r%zHTML Help Workshop)rèrrxrr•s rÚHTMLHelpWorkshopz EnvironmentInfo.HTMLHelpWorkshopþs0€ð �;‰;˜Ò ؈Iä�T—W‘W×,Ñ,Ð.BÓCÐDÐDrcóØ—|jdkrgS|jjd¬«}t|jj d«}|j }t||›d|›�«gS)zƒ Microsoft Universal C Runtime SDK Libraries. Return ------ list of str paths r~Trˆr+Úucrt)rèr²r¥rrxrJÚ _ucrt_subdir)r‘r�r+r±s rÚ UCRTLibrarieszEnvironmentInfo.UCRTLibraries sb€ð �;‰;˜Ò ؈Ià—g‘g×(Ñ(¨TÐ(Ó2ˆ Ü�4—7‘7×-Ñ-¨uÓ5ˆØ×#Ñ#ˆÜ�Sª±Ð=Ó>Ð?Ð?rcó˜—|jdkrgSt|jjd«}t|d|jz«gS)z� Microsoft Universal C Runtime SDK Include. Return ------ list of str paths r~r›z%sucrt)rèrrxrJrÈ)r‘r›s rÚ UCRTIncludeszEnvironmentInfo.UCRTIncludessF€ð �;‰;˜Ò ؈Iä�t—w‘w×1Ñ1°9Ó=ˆÜ�W˜h¨×):Ñ):Ñ:Ó;Ð<Ј ðˆØ—W‘W×)Ñ)ˆ ܘj×0Ñ0°¸JÓGÓHˆ Ü �Ô ä˜{¬G°KÓ,@ÀÑ,DÓEˆKØ ˜¤d¨;¸ Ó&BÐCÑ CˆHà”T˜* hÓ/Ð0Ñ0ˆð ! D§K¡K°"Ñ$4Ñ 5à ¤C¨¯ © Ó$4°rÑ$9Ñ :ð ˆô )×0Ñ0°¸8ÖD‰OˆF�Gܘ  ¨W°iÓ@ˆDÜ�d�|Ø’ ñ Ercóö—t|jd|j|j|j|j g|«|jd|j |j|j|j|jg|«|jd|j |j|j|jg|«|jd|j|j|j|j |j"|j|j$|j&|j(g |«¬«}|j*dk\r$t-|j.«r|j.|d<|S)zÛ Return environment dict. Parameters ---------- exists: bool It True, only return existing paths. Return ------ dict environment r›r+r¦rK)r›r+r¦rKrro)ÚdictÚ _build_pathsr…ržrËr¼r‹r™r¸rÉrºr�r§r”r‚r¾r«r´rÃrÅrÎrèrr×)r‘Úexistsr{s rÚ return_envzEnvironmentInfo.return_envpsW€ôØ×%Ñ%Øà—O‘OØ—O‘OØ×%Ñ%Ø×)Ñ)ð ð ó ð×!Ñ!Øà×$Ñ$Ø×$Ñ$Ø—L‘LØ×&Ñ&Ø×*Ñ*ð ðó ð×%Ñ%ØØ×!Ñ! 4§<¡<°×1AÑ1AÀ4Ç>Á>ÐRØóð ×"Ñ"Øà—L‘LØ—L‘LØ—J‘JØ—M‘MØ—M‘MØ—L‘LØ—L‘LØ×)Ñ)Ø—K‘Kð ðóô7* ˆðV �;‰;˜"Ò ¤¨×(<Ñ(<Ô!=Ø)-×)=Ñ)=ˆCÐ%Ñ &؈ rcó —tjj|«}tj|d«j t «}tj||«}|rttt|««n|}|s2d|j«z}tjj|«‚t|«} t j| «S)aC Given an environment variable name and specified paths, return a pathsep-separated string of paths containing unique, extant, directories from those paths and from the environment variable. Raise an error if no paths are resolved. Parameters ---------- name: str Environment variable name spec_path_lists: list of str Paths exists: bool It True, only return existing paths. Return ------ str Pathsep-separated paths r�z %s environment variable is empty)r!ÚchainÚ from_iterabler r@rrr©ÚfilterrÚupperrrr;rsr r) r‘rØÚspec_path_listsrÛÚ spec_pathsÚ env_pathsr€Ú extant_pathsrÚ unique_pathss rrÚzEnvironmentInfo._build_paths­s›€ô.—_‘_×2Ñ2°?ÓCˆ Ü—K‘K  bÓ)×/Ñ/´Ó8ˆ Ü—‘  ¨IÓ6ˆÙ5;”tœF¤5¨%Ó0Ô1Àˆ ÙØ4°t·z±z³|ÑCˆCÜ×"Ñ"×9Ñ9¸#Ó>Ð >Ü& |Ó4ˆ Ü�|‰|˜LÓ)Ð)r)Nr)T)!rrrr¬r’r­rèrér‚r…r‹r�r”r™ržr§r«rªr—r´r¸rºr¼r¾rÃrÅrÉrËrÈrÎr×rÜrÚrrrrvrvXs„ñó.?ðñ óð ðñ óð ðñDóðDð&ñ  óð  ðñDóðDð(ñ Eóð Eðñ#óð#ðJñAóðAð&ñóðð2ñ#óð#ðJñ 'óð 'ò!3ðFñ 5óð 5ðñ 6óð 6ðñóðð4ñ Fóð Fðñ :óð :ðñ >óð >ðñóðð6ñ Eóð Eðñ@óð@ð"ñ =óð =ðñ 5óð 5ðñ *óð *ðñ"óð"óH;óz*rrvrs)"r¬rÚosrrÚos.pathrrrrrDr rAÚplatformr!Údistutils.errorsrrÚ setuptools.extern.more_itertoolsr Úsystemrr rÙr1rLrZrdr|r€rr�r¯rárvrrrÚrísÁðñ ó ßß0Ó0Ý)ÛÛÛÛÛÝ<à€8‡?�?Ó˜ Ò!ÛÞ÷!ñ!ñ ‹f€Gò"ò<,ð` ØØØñ Ðò2 òjò<ó4$÷Nv ñv ÷rzñz÷zN/ñN/÷bt *òt *r