Ë ¨ÀøÂÒ8‚ãó˜—dZddlZddlZddlZddlZddlZddlZddlZd„Zd„Z Gd„de «Z d„Z dd„Z d „Zd „Zdd „Zd „Zd „Zdd„Zy)z3Handle version information related to Visual Stuio.éNcót—tjjtjj|Ž«S©N©ÚosÚpathÚnormpathÚjoin)Úargss ú4/usr/lib/python3.12/site-packages/gyp/MSVSVersion.pyÚJoinPathr s$€Ü �‰× Ñ œ"Ÿ'™'Ÿ,™,¨Ð-Ó .Ð.ócóD—td„|jd«D««S)Nc3ó2K—|]}t|«–—Œy­wr)Úint)Ú.0Úxs r Ú z#version_to_tuple..sèø€Ð6Ñ5˜!Œs�1�vÑ5ùs‚Ú.)ÚtupleÚsplit)Ú version_strs r Úversion_to_tuplers€Ü Ñ6˜{×0Ñ0°Ô5Ó6Ó 6Ð6r cób—eZdZdZ dd„Zd„Zd„Zd„Zd„Zd„Z d „Z d „Z d „Z d „Z d „Zd„Zd„Zy)ÚVisualStudioVersionz1Information regarding a version of Visual Studio.Nc óÄ—||_||_||_||_||_||_||_||_| |_| xsg} | jd„d¬«| |_ y)Ncó8—t|jdd««S)NÚvÚ)ÚfloatÚreplace)rs r Úz.VisualStudioVersion.__init__..(s€¤u¨Q¯Y©Y°s¸BÓ-?Ô'@r T)ÚkeyÚreverse) Ú short_nameÚ descriptionÚsolution_versionÚproject_versionÚflat_slnÚ uses_vcxprojrÚ sdk_basedÚdefault_toolsetÚsortÚcompatible_sdks) Úselfr$r%r&r'r(r)rr*r+r-s r Ú__init__zVisualStudioVersion.__init__sn€ð!€D„OØ"€DÔØ,€DÔØ*€DÔØ€D„MØ$€DÔØ€D„IØ€D„NØ*€DÔØ%Ò+¨€OØ×ÑÑ@È$ÐÔOØ*€DÕr có—|jSr)r$©r.s r Ú ShortNamezVisualStudioVersion.ShortName+s €Ø �?‰?Ðr có—|jS)z(Get the full description of the version.)r%r1s r Ú DescriptionzVisualStudioVersion.Description.s€à × Ñ Ðr có—|jS)z(Get the version number of the sln files.)r&r1s r ÚSolutionVersionz#VisualStudioVersion.SolutionVersion2s€à × Ñ Ð r có—|jS)z6Get the version number of the vcproj or vcxproj files.)r'r1s r ÚProjectVersionz"VisualStudioVersion.ProjectVersion6s€à × Ñ Ðr có—|jSr)r(r1s r Ú FlatSolutionz VisualStudioVersion.FlatSolution:s €Ø �=‰=Ðr có—|jS)z1Returns true if this version uses a vcxproj file.©r)r1s r Ú UsesVcxprojzVisualStudioVersion.UsesVcxproj=s€à × Ñ Ðr có*—|jxrdxsdS)z+Returns the file extension for the project.z.vcxprojz.vcprojr<r1s r ÚProjectExtensionz$VisualStudioVersion.ProjectExtensionAs€à × Ñ Ò + Ò 8¨yÐ8r có—|jS)z/Returns the path to Visual Studio installation.)rr1s r ÚPathzVisualStudioVersion.PathEs €à �9‰9Ðr có’—tjjtjj|jd|««S)z+Returns the path to a given compiler tool. zVC/binr)r.Útools r ÚToolPathzVisualStudioVersion.ToolPathIs,€ä �7‰7× Ñ œBŸG™GŸL™L¨¯©°H¸dÓCÓ DÐDr có—|jS)z\Returns the msbuild toolset version that will be used in the absence of a user override.)r+r1s r ÚDefaultToolsetz"VisualStudioVersion.DefaultToolsetMs€ð × Ñ Ðr cóö—|dvsJd«‚tjjdd«}t|dd«}|jr(|r&tj j |«r|d|zgStjjd«d k(xs"tjjd «d k(}|jd k\r;t|j d d dd«}|rdnd}|dk(rdnd}|}||k7r|d|zz }||gSt|j d d«} |dk(r@|jdk\r|jddk7r|r| dgSt|j ddd«gS|dk(rd}|jddk7r|rd}| |gSy)zLReturns a command (with arguments) to be used to set up the environment.)Úx86Úx64ztarget_arch not supportedÚ WindowsSDKDirrÚBinz SetEnv.CmdÚ/ÚPROCESSOR_ARCHITECTUREÚAMD64ÚPROCESSOR_ARCHITEW6432Ú2017ÚVCÚ AuxiliaryÚBuildz vcvarsall.batÚamd64rHrIÚ_Ú2013éÿÿÿÿÚeÚ amd64_x86ÚCommon7ÚToolsz vsvars32.batÚ x86_amd64N)rÚenvironÚgetr r*rÚexistsr$) r.Ú target_archÚsdk_dirÚ setup_pathÚis_host_arch_x64Ú script_pathÚ host_archÚmsvc_target_archÚargÚ vcvarsalls r Ú_SetupScriptInternalz(VisualStudioVersion._SetupScriptInternalSs¡€ð ˜.Ñ (ÐEÐ*EÓEÐ (ô �j‰j�n‰n˜_¨bÓ1€Gܘ' 5¨,Ó7€JØ ‡~‚~™'¤b§g¡g§n¡n°ZÔ&@ؘ#  Ñ+Ð ,Ð,ô ‡j�j‡n�nÐ-Ó.°'Ñ9ò:܇j�j‡n�nÐ-Ó.°'Ñ9ðð  ‡�˜&Ò Ü˜TŸY™YØ! ;°¸óJ€kñ.‘'°5€iØ$/°5Ò$8™¸eÐØ €cØ Ð&Ò &Ø ˆsÐ%Ñ%Ñ%ˆà˜3Ð Ðô˜Ÿ™ D¨/Ó:€IØ�eÒØ �‰˜FÒ " t§¡°rÑ':¸cÒ'AÙ ð˜;Ð'Ð'ô ˜Ÿ™ I¨w¸ÓGÐHÐHØ ˜Ò Ø €cð �‰˜Ñ  Ò #Ñ(8؈ؘРÐð r cóŒ—|j|«}|d}tjj|«st d|z«‚|S)Nrz3%s is missing - make sure VC++ tools are installed.)rirrr_Ú Exception)r.r`Ú script_datards r Ú SetupScriptzVisualStudioVersion.SetupScriptˆsI€Ø×+Ñ+¨KÓ8€Kؘa‘.€KÜ �7‰7�>‰>˜+Ô &Ü ÐKØ!ñ"ó #ð#à Ðr )NN)Ú__name__Ú __module__Ú __qualname__Ú__doc__r/r2r4r6r8r:r=r?rArDrFrirm©r r rrsO„Ù9ðGKó+ò òò!ò òòò9òòEò ò 3ójr rcó‚—tjdvrytjj tj j dd«|d«d|g}|r|jd|g«tj|tjtj¬«}|j«d }|jry|S) a‘Use reg.exe to read a particular key. While ideally we might use the win32 module, we would like gyp to be python neutral, so for instance cygwin python lacks this module. Arguments: sysdir: The system subdirectory to attempt to launch reg.exe from. key: The registry key to read from. value: The particular value to read. Return: stdout from reg.exe, or None for failure. )Úwin32ÚcygwinNÚWINDIRrzreg.exeÚqueryz/v)ÚstdoutÚstderrr) ÚsysÚplatformrrr r]r^ÚextendÚ subprocessÚPopenÚPIPEÚ communicateÚ returncode)Úsysdirr"ÚvalueÚcmdÚpÚtexts r Ú_RegistryQueryBaser‡‘s“€ô ‡\�\Ð,Ñ,Ø ä �‰�‰”b—j‘j—n‘n X¨rÓ2°F¸IÓ FØ �#ð €#á Ø‡J�J��eˆ}ÔÜ×Ñ�s¤:§?¡?¼:¿?¹?ÔK€!ð �‰‹˜Ñ €$à‡\‚\Ø Ø €+r có¬—d} td||«}|S#t$r7}|jtjk(rtd||«}n‚Yd}~|Sd}~wwxYw)aŸUse reg.exe to read a particular key through _RegistryQueryBase. First tries to launch from %WinDir%\Sysnative to avoid WoW64 redirection. If that fails, it falls back to System32. Sysnative is available on Vista and up and available on Windows Server 2003 and XP through KB patch 942589. Note that Sysnative will always fail if using 64-bit python due to it being a virtual directory and System32 will work correctly in the first place. KB 942589 - http://support.microsoft.com/kb/942589/en-us. Arguments: key: The registry key. value: The particular registry value to read (optional). Return: stdout from reg.exe, or None for failure. NÚ SysnativeÚSystem32)r‡ÚOSErrorÚerrnoÚENOENT)r"rƒr†rXs r Ú_RegistryQueryrްsb€ð" €$ð Ü ˜k¨3°Ó 6€Dð €+øô ò ؇w�w”%—,‘,ÒÜ   ¨C°Ó 7�dà ó ð €+ûð  ús„ “ Aœ,AÁAcó— ddl} |jdd«\}}|dk(sJ‚|j |j |«5}|j ||«dcddd«S#t$rddl}YŒgwxYw#1swYyxYw#t$rYywxYw)aUse the _winreg module to obtain the value of a registry key. Args: key: The registry key. value: The particular registry value to read. Return: contents of the registry key's value, or None on failure. Throws ImportError if _winreg is unavailable. rNÚ\éÚHKLM)Ú_winregÚ ImportErrorÚwinregrÚOpenKeyÚHKEY_LOCAL_MACHINEÚ QueryValueExÚ WindowsError)r"rƒr•ÚrootÚsubkeyÚhkeys r Ú_RegistryGetValueUsingWinRegr�Ìs�€ðÛðØ—9‘9˜T 1Ó%�L€Dˆ&Ø �6Š>Ј>Ø �‰˜×1Ñ1°6Ô :¸dØ × Ñ   uÓ -¨aÑ 0÷ ;Ñ :øô òÝðú÷ ;Ð :ûä òÙ ðús?‚A‡8A=¿A1Á A=Á A.Á-A.Á1A:Á6A=Á:A=Á= B ÂB có¬— t||«S#t$rYnwxYwt||«}|sytjd|«}|sy|j d«S)aêUse _winreg or reg.exe to obtain the value of a registry key. Using _winreg is preferable because it solves an issue on some corporate environments where access to reg.exe is locked down. However, we still need to fallback to reg.exe for the case where the _winreg module is not available (for example in cygwin python). Args: key: The registry key. value: The particular registry value to read. Return: contents of the registry key's value, or None on failure. NzREG_\w+\s+([^\r]+)\r\nr‘)r�r”rŽÚreÚsearchÚgroup)r"rƒr†Úmatchs r Ú_RegistryGetValuer£ãs_€ð Ü '¨¨UÓ 3Ð3øÜ ò Ùð úô ˜˜UÓ #€$Ù Ø ä �)‰)Ð-¨tÓ 4€%Ù Ø Ø �‰�Q‹Ðs ‚ Ž ™có€—|rtjj|«}tdddddd||ddd g¬ « td d dd dd||ddd g¬ « tdddddd||ddd g¬ « tdddddd||d¬« tdddddd||d¬« tdddddd||d¬« tdddddd||d ¬« td!ddddd||d ¬« td"d#d$ddd||¬%«td&d'd$ddd||¬%«td(d)d*d+dd||¬%«td,d)d*d+dd||¬%«td-d.d+d/dd||¬%«td0d.d+d/dd||¬%«d1œ}|t |«S)2aSets up MSVS project generation. Setup is based off the GYP_MSVS_VERSION environment variable or whatever is autodetected if GYP_MSVS_VERSION is not explicitly specified. If a version is passed in that doesn't match a value in versions python will throw a error. Ú2022zVisual Studio 2022z12.00ú17.0FTÚv143zv8.1zv10.0)r&r'r(r)rr*r+r-Ú2019zVisual Studio 2019ú16.0Úv141rPzVisual Studio 2017ú15.0Ú2015zVisual Studio 2015ú14.0Úv140)r&r'r(r)rr*r+rVzVisual Studio 2013z13.00ú12.0Úv120Ú2013eÚ2012zVisual Studio 2012z4.0Úv110Ú2012eÚ2010zVisual Studio 2010z11.00)r&r'r(r)rr*Ú2010ezVisual C++ Express 2010Ú2008zVisual Studio 2008z10.00z9.00Ú2008eÚ2005zVisual Studio 2005z8.00Ú2005e)r¥r¨rPr¬rVr±r²r´rµr¶r·r¸r¹rº)rrrrÚstr)Únamerr*Úversionss r Ú_CreateVersionr¾s5€ñ Ü �7‰7× Ñ ˜DÓ !€Dä! &Ø"6Ø3:Ø28Ø+0Ø/3Ø'+Ø,5Ø28Ø39¸7Ð2Cô Eô" &Ø"6Ø3:Ø28Ø+0Ø/3Ø'+Ø,5Ø28Ø39¸7Ð2Cô Eô" &Ø"6Ø3:Ø28Ø+0Ø/3Ø'+Ø,5Ø28Ø39¸7Ð2Cô Eô" &Ø"6Ø3:Ø28Ø+0Ø/3Ø'+Ø,5Ø28ô:ô" &Ø"6Ø3:Ø28Ø+0Ø/3Ø'+Ø,5Ø28ô:ô# 7Ø#7Ø4;Ø39Ø,0Ø04Ø(,Ø-6Ø39ô;ô" &Ø"6Ø3:Ø27Ø+0Ø/3Ø'+Ø,5Ø28ô:ô# 7Ø#7Ø4;Ø38Ø,0Ø04Ø(,Ø-6Ø39ô;ô" &Ø"6Ø3:Ø27Ø+0Ø/3Ø'+Ø,5ô7ô# 7Ø#<Ø4;Ø38Ø,0Ø04Ø(,Ø-6ô8ô" &Ø"6Ø3:Ø28Ø+0Ø/4Ø'+Ø,5ô7ô# 7Ø#7Ø4;Ø39Ø,0Ø05Ø(,Ø-6ô8ô" &Ø"6Ø39Ø28Ø+0Ø/4Ø'+Ø,5ô7ô# 7Ø#7Ø4:Ø39Ø,0Ø05Ø(,Ø-6ô8ñi|€(ðz ”#�d“)Ñ Ðr có¼—tjdk(rHtjd|gtj¬«}|j «dj «}|S)z.Convert to cygwin path if we are using cygwin.ruÚcygpath)rxr)rzr{r}r~rr€Ústrip)rr…s r Ú_ConvertToCygpathrŠsG€ä‡\�\�XÒÜ×ј) TÐ*´:·?±?ÔC€AØ �=‰=‹?˜1Ñ × #Ñ #Ó %€DØ €+r c óü—ddddddddd d œ }g}tjd «}tjd «}|D�]=}d |zd|zd|zd|zg}tt|««D�]}t ||d«} | sŒt | «} tj j| d«} tj j| d«} |s]tj j| «r>|jt||tj j| dd«««ŒÀtj| «sŒÖ|jt||dztj j| dd«««�Œgd¢}tt|««D]³}t |||«} | sŒt | «} t|«dk\r?tj j| «sŒN|jt||| ««Œm|dk7sŒs|jt||dztj j| d«d¬««Œµ|s�Œ|s�Œ||k(s�Œ |jt|||««�Œ@|S)a¨Collect the list of installed visual studio versions. Returns: A list of visual studio versions installed in descending order of usage preference. Base this on the registry and a quick check if devenv.exe exists. Possibilities are: 2005(e) - Visual Studio 2005 (8) 2008(e) - Visual Studio 2008 (9) 2010(e) - Visual Studio 2010 (10) 2012(e) - Visual Studio 2012 (11) 2013(e) - Visual Studio 2013 (12) 2015 - Visual Studio 2015 (14) 2017 - Visual Studio 2017 (15) 2019 - Visual Studio 2019 (16) 2022 - Visual Studio 2022 (17) Where (e) is e for express editions of MSVS and blank otherwise. r¹r·rµr²rVr¬rPr¨r¥) ú8.0ú9.0ú10.0ú11.0r¯r­r«r©r¦Ú VSINSTALLDIRrz'HKLM\Software\Microsoft\VisualStudio\%sz3HKLM\Software\Wow6432Node\Microsoft\VisualStudio\%sz$HKLM\Software\Microsoft\VCExpress\%sz0HKLM\Software\Wow6432Node\Microsoft\VCExpress\%sÚ InstallDirz devenv.exez *express.exez..rX)z,HKLM\Software\Microsoft\VisualStudio\SxS\VC7z8HKLM\Software\Wow6432Node\Microsoft\VisualStudio\SxS\VC7z,HKLM\Software\Microsoft\VisualStudio\SxS\VS7z8HKLM\Software\Wow6432Node\Microsoft\VisualStudio\SxS\VS7)érr­T©r*) rÚgetenvÚrangeÚlenr£rÂrr r_Úappendr¾Úglobr) Úversions_to_checkÚ force_expressÚversion_to_yearr½Ú env_vs_pathÚenv_vs_versionÚversionÚkeysÚindexrÚ full_pathÚ express_paths r Ú_DetectVisualStudioVersionsrÛ’s?€ð(Ø ØØØØØØØñ €/ð€(ô — ‘ ˜.Ó)€+ä—9‘9Ð2Ó3€.ä"€gð 7¸Ñ @Ø BÀWÑ LØ 3°gÑ =Ø ?À'Ñ Ið K€Dô”s˜4“y×!ˆÜ ˜t E™{¨LÓ 9€dÙ ØÜ ˜tÓ $€dä—'‘'—,‘,˜t \Ó2€iÜ—W‘W—\‘\ $¨Ó7€lÙ œrŸw™wŸ~™~¨iÔ8à�‰œ °wÑ'?Ü �G‰G�L‰L˜˜t TÓ *ó,õ -ô �9‰9�\Õ "à�‰œ °wÑ'?À#Ñ'EÜ �G‰G�L‰L˜˜t TÓ *ó,ö -ð"ò& I€Dô”s˜4“yÖ!ˆÜ ˜t E™{¨GÓ 4€dÙ ØÜ ˜tÓ $€dÜ ˜'Ó " gÒ -Ü �7‰7�>‰>˜$Õ Ø �/‰/œ.¨¸Ñ)AÀ4ÓHÕ IØ �fÓ Ø�‰œ °wÑ'?À#Ñ'EÜ �G‰G�L‰L˜˜tÓ $°ô6õ 7ð"ó›+¨.¸GÔ*C؇o�o”n _°^Ñ%DØ%0ó2ö3ðY#ð^ €/r cóÀ—|dk(r tjjdd«}dddddddddddd d d d d œ}tjjd«}|r:tjjd«}|s td«‚t ||d¬«St |«}t ||d|v«}|s*|s td«‚|dk(r t dd«St |d«S|dS)zåSelect which version of Visual Studio projects to generate. Arguments: version: Hook to allow caller to force a particular version (vs auto). Returns: An object representing a visual studio project format version. ÚautoÚGYP_MSVS_VERSION) 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´rVr±r¬rPr¨r¥ÚGYP_MSVS_OVERRIDE_PATHz`GYP_MSVS_OVERRIDE_PATH requires GYP_MSVS_VERSION to be set to a particular version (e.g. 2010e).TrËrXz,Could not locate Visual Studio installation.r¹Nr)rr]r^Ú ValueErrorr¾r»rÛ)rÖÚallow_fallbackÚ version_mapÚ override_pathÚ msvs_versionr½s r ÚSelectVisualStudioVersionråës€ð �ÒÜ�j‰j�n‰nÐ/°Ó8€Gð à Ø Ø Ø Ø Ø Ø Ø Ø Ø Ø Ø Ø Ø ñ!€+ô$—*‘*—.‘.Ð!9Ó:€-ÙÜ—:‘:—>‘>Ð"4Ó5€LÙ Ü ðCó DðDä ˜,¨ ÀÔ FÐFÜ �‹L€'Ü (¨°WÑ)=¸sÀg¸~Ó N€(Ù Ù Ü ÐEÓ FÐFØ�&Òä ˜F DÓ )Ð)ä ˜G TÓ *Ð*Ø �!‰Ðr r)F)rÝT)rqrŒrrŸr}rzÚgyprÐr rÚobjectrr‡rŽr�r£r¾rÂrÛrårrr r Úrèsdðñ :ã Û Û ÛÛ Û Û ò/ò7ôv˜&ôvòró>ò8ò.ó