ó
    æ“–g;  ã                   óT  • S r SSKrSSKrSSKrSSKrSSKrSSKrSSKr\R                  R                  \R                  R                  \5      5      r\R                  " S\R                  5      rS r " S S5      r\S:X  a&  \R&                  " \" \R(                  SS 5      5        gg)	zuUtility functions for Windows builds.

These functions are executed via gyp-win-tool when using the ninja generator.
é    Nz/OUT:(?P<out>.+)$c                 ón   • [        5       nUR                  U 5      nUb  [        R                  " U5        g g ©N)ÚWinToolÚDispatchÚsysÚexit)ÚargsÚexecutorÚ	exit_codes      Ú./usr/lib/python3/dist-packages/gyp/win_tool.pyÚmainr      s0   € Ü‹y€HØ×!Ñ! $Ó'€IØÑÜ�Š�Õð ó    c                   ór   • \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rSrg)r   é#   z„This class performs all the Windows tooling steps. The methods can either
be executed directly, or dispatched from an argument list.c           	      ó,  • [        U5      S:  a  [        S5      eUS   S:w  a  gSnU H`  n[        R                  U5      nU(       d  M!  [        R
                  " SSSUR                  S	5      [        R                  " 5       4-  5      n  O   Uc  gX1S
'   g)zSAllows to use a unique instance of mspdbsrv.exe per linker instead of a
shared one.é   úNot enough argumentsr   zlink.exeNz\W+Ú z%s_%dÚoutÚ_MSPDBSRV_ENDPOINT_)	ÚlenÚ	ExceptionÚ_LINK_EXE_OUT_ARGÚmatchÚreÚsubÚgroupÚosÚgetpid)ÚselfÚenvr	   Úendpoint_nameÚargÚms         r   Ú_UseSeparateMspdbsrvÚWinTool._UseSeparateMspdbsrv'   s˜   € ô ˆt‹9�q‹=ÜÐ2Ó3Ð3à�‰7�jÓ Øð ˆÛˆCÜ!×'Ñ'¨Ó,ˆAßˆqÜ "§¢Ø˜B ¨1¯7©7°5«>¼2¿9º9»;Ð*GÑ Gó!�ñ ñ ð Ñ Øð
 &3Ð!Ò"r   c                 ó†   • [        U5      S:  a  [        S5      eSU R                  US   5      -  n[        X5      " USS 6 $ )z(Dispatches a string command to a method.r   r   zExec%sr   N)r   r   Ú_CommandifyNameÚgetattr)r    r	   Úmethods      r   r   ÚWinTool.DispatchC   sH   € äˆt‹9�q‹=ÜÐ2Ó3Ð3à˜D×0Ñ0°°a±Ó9Ñ9ˆÜ�tÔ$ d¨1¨2 hÐ/Ð/r   c                 óB   • UR                  5       R                  SS5      $ )z@Transforms a tool name like recursive-mirror to RecursiveMirror.Ú-r   )ÚtitleÚreplace)r    Úname_strings     r   r(   ÚWinTool._CommandifyNameK   s   € à× Ñ Ó"×*Ñ*¨3°Ó3Ð3r   c                 óº   • [        U5      R                  5       SS R                  S5      nU Vs/ s H  o3R                  SS5      PM     nn[        U5      $ s  snf )z@Gets the saved environment from a file for a given architecture.NéþÿÿÿÚ Ú=r   )ÚopenÚreadÚsplitÚdict)r    ÚarchÚpairsÚitemÚkvss        r   Ú_GetEnvÚWinTool._GetEnvO   sR   € ô
 �T“
—‘Ó! # 2Ð&×,Ñ,¨TÓ2ˆÙ.3Ó4ªe d�z‰z˜#˜qÖ!©eˆÐ4Ü�C‹yÐùò 5s   °Ac                 ó8   • [        US5      R                  5         g)zSimple stamp command.ÚwN)r6   Úclose)r    Úpaths     r   Ú	ExecStampÚWinTool.ExecStampX   s   € äˆT�3‹×ÑÕr   c                 ó0  • [         R                  R                  U5      (       a¡  [         R                  R                  U5      (       a  S n[        R
                  " X#S9  Oe[         R                  " U[         R                  5      (       d%  [         R                  " U[        R                  5        [         R                  " U5        [         R                  R                  U5      (       a  [        R                  " X5        g[        R                  " X5        g)z)Emulation of rm -rf out && cp -af in out.c                 ó²   • [         R                  " U[         R                  5      (       d%  [         R                  " U[        R
                  5        U " U5        g r   )r   ÚaccessÚW_OKÚchmodÚstatÚS_IWRITE)ÚfnrC   Úexcinfos      r   Ú	_on_errorÚ.WinTool.ExecRecursiveMirror.<locals>._on_errora   s2   € ô Ÿ9š9 T¬2¯7©7×3Ñ3ÜŸš ¤t§}¡}Ô5Ù�t•Hr   )ÚonerrorN)r   rC   ÚexistsÚisdirÚshutilÚrmtreerH   rI   rJ   rK   rL   ÚunlinkÚcopytreeÚcopy2)r    ÚsourceÚdestrO   s       r   ÚExecRecursiveMirrorÚWinTool.ExecRecursiveMirror\   s˜   € ä�7‰7�>‰>˜$×ÑÜ�w‰w�}‰}˜T×"Ñ"òô —’˜dÓ6ä—y’y ¤r§w¡w×/Ñ/ä—H’H˜T¤4§=¡=Ô1Ü—	’	˜$”ä�7‰7�=‰=˜× Ñ Ü�OŠO˜FÕ)ä�LŠL˜Õ&r   c                 óz  • U R                  U5      nUS:X  a  U R                  XC5        [        R                  S:X  a#  [	        U5      nUS   R                  SS5      US'   [        R                  " U[        R                  S:H  U[        R                  [        R                  S9nUR                  5       S   R                  S5      nUR                  5        HV  nUR                  S5      (       a  M  UR                  S	5      (       a  M3  UR                  S
5      (       a  MK  [        U5        MX     UR                  $ )z¤Filter diagnostic output from link that looks like:
'   Creating library ui.dll.lib and object ui.dll.exp'
This happens when there are exports from the dll or exe.
ÚTrueÚwin32r   Ú/Ú\©Úshellr!   ÚstdoutÚstderrúutf-8z   Creating library zGenerating codezFinished generating code)r>   r%   r   ÚplatformÚlistr/   Ú
subprocessÚPopenÚPIPEÚSTDOUTÚcommunicateÚdecodeÚ
splitlinesÚ
startswithÚprintÚ
returncode)r    r:   Úuse_separate_mspdbsrvr	   r!   Úlinkr   Úlines           r   ÚExecLinkWrapperÚWinTool.ExecLinkWrappert   sý   € ð
 �l‰l˜4Ó ˆØ  FÓ*Ø×%Ñ% cÔ0Ü�<‰<˜7Ó"Ü˜“:ˆDØ˜1‘g—o‘o c¨4Ó0ˆD�‰Gô ×ÒØÜ—,‘, 'Ñ)ØÜ—?‘?Ü×$Ñ$ñ
ˆð ×ÑÓ  Ñ#×*Ñ*¨7Ó3ˆØ—N‘NÖ$ˆDà—O‘OÐ$:×;Ó;ØŸ™Ð(9×:Ó:ØŸ™Ð(B×CÓCä�d–ñ %ð �‰Ðr   c	                 ó¾  • [         R                  UUUUUUUSR                  U	5      S.	n
SnU	(       aV  [        R                  " SU
-  5        US:X  a7  [        R                  " SU
-  5        [        R                  " SU
-  5        SU
-  n[        R                  " XK-   5        U	(       Ga  [        R                  " S	U
-  5        S
U
-  nSU
-  n[        U5       n[        U5       n[        R                  SS[        R                  5      nUR                  5       R                  U5      nUR                  5       R                  U5      nSSS5        SSS5        WW:w  a^  [        R                  " U5        S nU" U5        U" U5        U" U5        [         R                  R                  SU< SU< SU< S35        ggg! , (       d  f       N|= f! , (       d  f       N…= f)zVA wrapper for handling creating a manifest resource and then executing
a link command.Ú )	Úpythonr:   r   ÚldcmdÚresnameÚmtÚrcÚintermediate_manifestÚ	manifestsr   zn%(python)s gyp-win-tool manifest-wrapper %(arch)s %(mt)s -nologo -manifest %(manifests)s -out:%(out)s.manifestr^   z`%(python)s gyp-win-tool manifest-to-rc %(arch)s %(out)s.manifest %(out)s.manifest.rc %(resname)szF%(python)s gyp-win-tool rc-wrapper %(arch)s %(rc)s %(out)s.manifest.rcz %(out)s.manifest.resz’%(python)s gyp-win-tool manifest-wrapper %(arch)s %(mt)s -nologo -manifest %(out)s.manifest %(intermediate_manifest)s -out:%(out)s.assert.manifestz%(out)s.assert.manifestz%(out)s.manifestNc                 ó*  • [        U [        R                  S9  [        S[        R                  S9  [        U 5       n[        UR	                  5       [        R                  S9  [        S[        R                  S9  S S S 5        g ! , (       d  f       g = f)N)Úfilez-----)rq   r   re   r6   r7   )ÚfilenameÚfs     r   ÚdumpÚ+WinTool.ExecLinkWithManifests.<locals>.dumpå   sS   € Ü˜(¬¯©Ò4Ü˜'¬¯
©
Ò3Ü˜hœ¨1Ü˜aŸf™f›h¬S¯Z©ZÒ8Ü˜g¬C¯J©JÒ7÷ (Ÿžús   ¼?BÂ
BzLinker generated manifest "z" added to final manifest "z" (result in "z8"). Were /MANIFEST switches used in #pragma statements? r   )r   Ú
executableÚjoinri   Ú
check_callr6   ÚstrÚ	maketransÚstringÚ
whitespacer7   Ú	translater   rV   re   Úwrite)r    r:   Úembed_manifestr   r{   r|   r}   r~   r   r€   Ú	variablesÚ	add_to_ldÚassert_manifestÚour_manifestÚour_fÚassert_fÚ
translatorÚour_dataÚassert_datar…   s                       r   ÚExecLinkWithManifestsÚWinTool.ExecLinkWithManifests˜   sÊ  € ô2 —n‘nØØØØØØØ%:ØŸ™ )Ó,ñ

ˆ	ð ˆ	ÞÜ×!Ò!ð@ØBKñLôð  Ó'Ü×%Ò%ð7Ø9BñCôô ×%Ò%ð*Ø,5ñ6ôð 4°iÑ?�	Ü×Ò˜eÑ/Ô0÷ ô ×!Ò!ð/à1:ñ;ôð
 8¸)ÑCˆOØ-°	Ñ9ˆLô �lÔ# u¬d°?Ô.CÀxÜ Ÿ]™]¨2¨r´6×3DÑ3DÓE�
Ø Ÿ:™:›<×1Ñ1°*Ó=�Ø&Ÿm™m›o×7Ñ7¸
ÓC�÷ /D×#ð ˜;Ó&Ü—	’	˜#”ò8ñ Ð*Ô+Ù�\Ô"Ù�_Ô%Ü—
‘
× Ò ó -«l»OðMôð ð' 'ð! ÷ /DÕ.Cú×#Õ#ús%   ÃGÃ#A$F=ÅGÆ=
G	ÇGÇ
Gc                 óN  • U R                  U5      n[        R                  " USU[        R                  [        R                  S9nUR                  5       S   R                  S5      nUR                  5        H  nU(       d  M  SU;  d  M  [        U5        M!     UR                  $ )z“Run manifest tool with environment set. Strip out undesirable warning
(some XML blocks are recognized by the OS loader, but not the manifest
tool).Trb   r   rf   z#manifest authoring warning 81010002)
r>   ri   rj   rk   rl   rm   rn   ro   rq   rr   ©r    r:   r	   r!   Úpopenr   ru   s          r   ÚExecManifestWrapperÚWinTool.ExecManifestWrapper÷   sŠ   € ð �l‰l˜4Ó ˆÜ× Ò Ø˜ #¬j¯o©oÄj×FWÑFWñ
ˆð ×ÑÓ! !Ñ$×+Ñ+¨GÓ4ˆØ—N‘NÖ$ˆDßˆtÐ=ÀTÕIÜ�d–ñ %ð ×ÑÐr   c           
      óè   • Uu  p4n[        US5       nUR                  SU< S[        R                  R	                  U5      R                  SS5      < S35        SSS5        g! , (       d  f       g= f)zÉCreates a resource file pointing a SxS assembly manifest.
|args| is tuple containing path to resource file, path to manifest file
and resource name which can be "1" (for executables) or "2" (for DLLs).rA   z#include <windows.h>
z RT_MANIFEST "ra   r`   Ú"N)r6   r�   r   rC   Úabspathr/   )r    r:   r	   Úmanifest_pathÚresource_pathÚresource_nameÚoutputs          r   ÚExecManifestToRcÚWinTool.ExecManifestToRc  sW   € ð 7;Ñ3ˆ mÜ�- Ô%¨Ø�LŠLã ¤"§'¡'§/¡/°-Ó"@×"HÑ"HÈÈsÖ"SðUô÷ &×%Ö%ús   ’AA#Á#
A1c	                 óL  • SS/[        U	5      -   SUSUSUSUSUSUU/-   n
U R                  U5      n[        R                  " U
S	U[        R                  [        R
                  S
9nUR                  5       S   R                  S5      nUR                  5       nSnU Vs1 s H:  nUR                  U5      (       d  M  [        R                  R                  U5      iM<     nnU H.  nUR                  U5      (       a  M  UU;  d  M#  [        U5        M0     UR                  $ s  snf )zbFilter noisy filenames output from MIDL compile step that isn't
quietable via command line flags.
Úmidlz/nologoz/outz/tlbz/hz/dlldataz/iidz/proxyTrb   r   rf   )zProcessing z64 bit Processing )rh   r>   ri   rj   rk   rl   rm   rn   ro   rp   r   rC   Úbasenamerq   rr   )r    r:   ÚoutdirÚtlbÚhÚdlldataÚiidÚproxyÚidlÚflagsr	   r!   rž   r   ÚlinesÚprefixesÚxÚ
processingru   s                      r   ÚExecMidlWrapperÚWinTool.ExecMidlWrapper  s$  € ð
 �YÐÜ�5‹kñð ØØØØØØØØØØØØðñð 	ð& �l‰l˜4Ó ˆÜ× Ò Ø˜ #¬j¯o©oÄj×FWÑFWñ
ˆð ×ÑÓ! !Ñ$×+Ñ+¨GÓ4ˆð
 —‘Ó ˆØ8ˆÙ38ÓS²5¨a¸A¿L¹LÈ×<RÓ)”b—g‘g×&Ñ& qÖ)±5ˆ
ÐSÛˆDØ—?‘? 8×,Ó,°¸ZÕ1GÜ�d–ñ ð ×ÑÐùò	 Ts   ÂD!Â<#D!c                 óÎ  • U R                  U5      n[        R                  " USU[        R                  [        R                  S9nUR                  5       S   R                  S5      nUR                  5        H_  nUR                  S5      (       a  M  UR                  S5      (       a  M3  UR                  S5      (       a  MK  U(       d  MT  [        U5        Ma     UR                  $ )z/Filter logo banner from invocations of asm.exe.Trb   r   rf   ú#Copyright (C) Microsoft CorporationzMicrosoft (R) Macro Assemblerz Assembling: ©r>   ri   rj   rk   rl   rm   rn   ro   rp   rq   rr   r�   s          r   ÚExecAsmWrapperÚWinTool.ExecAsmWrapper8  s¯   € à�l‰l˜4Ó ˆÜ× Ò Ø˜ #¬j¯o©oÄj×FWÑFWñ
ˆð ×ÑÓ! !Ñ$×+Ñ+¨GÓ4ˆØ—N‘NÖ$ˆDà—O‘OÐ$I×JÓJØŸ™Ð(G×HÓHØŸ™¨×8Ó8ß�Dä�d–ñ %ð ×ÑÐr   c                 óž  • U R                  U5      n[        R                  " USU[        R                  [        R                  S9nUR                  5       S   R                  S5      nUR                  5        HG  nUR                  S5      (       a  M  UR                  S5      (       a  M3  U(       d  M<  [        U5        MI     UR                  $ )zcFilter logo banner from invocations of rc.exe. Older versions of RC
don't support the /nologo flag.Trb   r   rf   z+Microsoft (R) Windows (R) Resource Compilerr¼   r½   r�   s          r   ÚExecRcWrapperÚWinTool.ExecRcWrapperI  s¢   € ð �l‰l˜4Ó ˆÜ× Ò Ø˜ #¬j¯o©oÄj×FWÑFWñ
ˆð ×ÑÓ! !Ñ$×+Ñ+¨GÓ4ˆØ—N‘NÖ$ˆDà—O‘OÐ$Q×RÓRØŸ™Ð(M×NÓNß�Dä�d–ñ %ð ×ÑÐr   c                 ó  • U R                  U5      n[        R                  R                  5        H  u  pVXT;  d  M  XdU'   M     [	        U5      R                  5       nU(       a  US   OSn[        R                  " USXCS9$ )z‹Runs an action command line from a response file using the environment
for |arch|. If |dir| is supplied, use that as the working directory.r   NT)rc   r!   Úcwd)r>   r   ÚenvironÚitemsr6   r7   ri   Úcall)r    r:   ÚrspfileÚdirr!   ÚkÚvr	   s           r   ÚExecActionWrapperÚWinTool.ExecActionWrapperZ  sm   € ð �l‰l˜4Ó ˆô —J‘J×$Ñ$Ö&‰DˆAØ�|Ø�A“ñ 'ô �G‹}×!Ñ!Ó#ˆÞˆc�!Šf ˆÜ�Š˜t¨4°SÑBÐBr   c                 ó6  • [         R                  R                  U[        5      nUR	                  S5      nU Vs/ s H%  n[         R                  R                  X5      S-   PM'     nnS/nUR                  U5        [        R                  " US[        S9$ s  snf )zbExecuted by msvs-ninja projects when the 'ClCompile' target is used to
build selected C/C++ files.Ú;z^^z	ninja.exeT)rc   rÄ   )	r   rC   ÚrelpathÚBASE_DIRr8   rˆ   Úextendri   rÇ   )r    Úproject_dirÚselected_filesrƒ   Úninja_targetsÚcmds         r   ÚExecClCompileÚWinTool.ExecClCompileg  sƒ   € ô —g‘g—o‘o k´8Ó<ˆØ'×-Ñ-¨cÓ2ˆáGUó
ÚGU¸8ŒB�G‰G�L‰L˜Ó/°$Ô6Á~ð 	ð 
ð ˆmˆØ�
‰
�=Ô!Ü�Š˜s¨$´HÑ=Ð=ùò
s   º,B© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r%   r   r(   r>   rD   r[   rv   rš   rŸ   r¨   r¹   r¾   rÁ   rÌ   r×   Ú__static_attributes__rÙ   r   r   r   r   #   sX   † ñ@ò3ò80ò4òò ò'ò0"òH]ò~ ò	ò& òP ò" ò"Cõ
>r   r   Ú__main__r   )rÞ   r   r   rT   ri   rK   rŒ   r   rC   Údirnamer£   Ú__file__rÑ   ÚcompileÚ
IGNORECASEr   r   r   rÚ   r   ÚargvrÙ   r   r   Ú<module>ræ      s”   ðñó 
Û 	Û Û Û Û Û 
à�7‰7�?‰?˜2Ÿ7™7Ÿ?™?¨8Ó4Ó5€ð —J’JÐ2°B·M±MÓBÐ ò÷N>ñ N>ðb
 ˆzÓØ‡H‚H‰T�#—(‘(˜1˜2�,ÓÕ ð r   